Commit 6b359969 authored by Francisco Juan's avatar Francisco Juan

Added all plugins required in ohwr.org

parent 8884f43b
Copyright (C) 2011 by Splendeo Innovación
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
== Redmine/Chiliproject Featured Projects Plugin
This plugin allows the redmine/chiliproject administrator to mark any project he wants as "featured" (notice that this is an "admin" right, not a project administrator right).
It also changes the redmine home page to show a "featured projects" box. This box replaces the default "Latest projects" box.
Finally, it adds two named scopes to Project: Project.featured and Project.not_featured
This plugin can be used in consonance with our Redmine Project Filtering plugin ( https://github.com/splendeo/redmine_project_filtering )
== Installation
1. Copy the plugin directory into the vendor/plugins directory
2. Migrate plugin:
rake db:migrate_plugins
3. Start Redmine
Installed plugins are listed and can be configured from 'Admin -> Plugins' screen.
== Credits
Development of this plugin was financed by the Open Hardware Repository - www.ohwr.org
<% content_for :header_tags do %>
<%= stylesheet_link_tag "featured_projects.css", :plugin => "featured_projects" %>
<% end %>
<% if User.current.allowed_to?(:update_featured_project_flags, nil, :global => true) %>
<p><%= form.check_box :is_featured %></p>
<% elsif project.is_featured? %>
<p><span class="icon icon-featured"><%= t('label_project_featured') %></span></p>
<% end %>
<h2><%= l(:label_home) %></h2>
<% content_for :header_tags do %>
<%= stylesheet_link_tag "featured_projects.css", :plugin => "featured_projects", :media => "screen" %>
<% end %>
<div class="splitcontentleft">
<div class="wiki"><%= textilizable Setting.welcome_text %></div>
<% if @news.any? %>
<div class="news box">
<h3><%=l(:label_news_latest)%></h3>
<%= render :partial => 'news/news', :collection => @news %>
<%= link_to l(:label_news_view_all), :controller => 'news' %>
</div>
<% end %>
<%= call_hook(:view_welcome_index_left, :projects => @projects) %>
</div>
<div class="splitcontentright">
<% if @projects.any? %>
<div class="box">
<h3 class="icon icon-featured"><%=l(:label_featured_projects)%></h3>
<ul>
<% for project in @projects %>
<% @project = project %>
<li>
<%= link_to_project project %> (<%= format_time(project.created_on) %>)
<%= textilizable project.short_description, :project => project %>
</li>
<% end %>
<% @project = nil %>
</ul>
</div>
<% end %>
<%= call_hook(:view_welcome_index_right, :projects => @projects) %>
</div>
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:controller => 'news', :action => 'index', :key => User.current.rss_key, :format => 'atom'},
:title => "#{Setting.app_title}: #{l(:label_news_latest)}") %>
<%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :key => User.current.rss_key, :format => 'atom'},
:title => "#{Setting.app_title}: #{l(:label_activity)}") %>
<% end %>
.icon-featured { background-image: url(../images/ribbon-16x16.png); }
# featured projects
en:
field_is_featured: Featured Project
label_featured_projects: Featured Projects
label_project_featured: This project is featured
# Sample plugin migration
# Use rake db:migrate_plugins to migrate installed plugins
class AddIsFeaturedToProjects < ActiveRecord::Migration
def self.up
add_column :projects, :is_featured, :boolean, :default => false, :null => false
end
def self.down
remove_column :accounts, :is_featured
end
end
# Redmine sample plugin
require 'redmine'
require 'dispatcher'
Dispatcher.to_prepare :featured_projects do
require_dependency 'featured_projects/hooks'
require_dependency 'project'
Project.send(:include, FeaturedProjects::Patches::ProjectPatch)
require_dependency 'welcome_controller'
unless WelcomeController.included_modules.include? FeaturedProjects::Patches::WelcomeControllerPatch
WelcomeController.send(:include, FeaturedProjects::Patches::WelcomeControllerPatch)
end
end
Redmine::Plugin.register :featured_projects do
name 'Featured Projects'
author 'Enrique García'
description 'Redmine featured projects'
version '0.0.1'
end
module FeaturedProjects
class Hooks < Redmine::Hook::ViewListener
# :project
# :form
render_on :view_projects_form, :partial => 'hooks/projects/featured_project_fields'
end
end
module FeaturedProjects
module Patches
module ProjectPatch
def self.included(base)
base.extend(ClassMethods)
base.send(:include, InstanceMethods)
base.class_eval do
unloadable # Send unloadable so it will not be unloaded in development
safe_attributes 'is_featured',
:if => lambda {|project, user| user.allowed_to?(:update_featured_project_flags, nil, :global => true) }
named_scope :featured, {:conditions => {:is_featured => true}}
named_scope :not_featured, { :conditions => ["#{Project.table_name}.is_featured <> :true", {:true => true}] }
end
end
module ClassMethods
end
module InstanceMethods
end
end
end
end
module FeaturedProjects
module Patches
module WelcomeControllerPatch
def self.included(base)
base.class_eval do
unloadable # Send unloadable so it will not be unloaded in development
base.send(:include, InstanceMethods)
base.class_eval do
alias_method_chain :index, :featured_projects
end
end
end
module InstanceMethods
def index_with_featured_projects
index_without_featured_projects
@projects = Project.visible.featured.all(:order => 'name ASC')
end
end
end
end
end
Redmine Piwik is a Redmine plugin to insert the Piwik
tracking code into Redmine based on user roles.
Copyright (C) 2009 Jörg Winter, B-Net1 Developments
Copyright (C) 2008 Eric Davis, Little Stream Software
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Thanks go to the following people for patches and contributions:
Maintainers
* Eric Davis of Little Stream Software
Contributors
* Gergő Jónás
This diff is collapsed.
= Redmine Piwik Plugins
Redmine plugin to insert the Piwik tracking code into Redmine based on user roles.
== Features
Adds your Piwik code to every pageview depending on your User roles; Anonymous user, Authenticated User, and Administrator.
== Installation and Setup
1. Download the plugin. There are three supported ways:
* Downloading the latest archive file from B-Net1 Developments projects (http://projekte.dev.b-net1.de/projects/bn1redminepiwik/files)
* Checkout the source from Subversion
svn co http://svn.dev.b-net1.de/bn1redminepiwik/trunk/piwik_plugin
* Install it using Rail's plugin installer
script/plugin install http://svn.dev.b-net1.de/bn1redminepiwik/trunk/piwik_plugin
2. Login to your Redmine install as an Administrator.
3. Configure your settings in Administration > Information > Configure
== License
This plugin is licensed under the GNU GPL v2. See COPYRIGHT.txt and GPL.txt for details.
== Project help
If you need help you can contact the maintainer at the Bug Tracker. The bug tracker is located at https://projekte.dev.b-net1.de/projects/bn1redminepiwik/issues
#!/usr/bin/env ruby
require 'redmine_plugin_support'
Dir[File.expand_path(File.dirname(__FILE__)) + "/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
RedminePluginSupport::Base.setup do |plugin|
plugin.project_name = 'piwik_plugin'
plugin.default_task = [:spec]
end
begin
require 'jeweler'
Jeweler::Tasks.new do |s|
s.name = "piwik_plugin"
s.summary = "Redmine plugin to insert the Piwik tracking code into Redmine based on user roles."
s.email = "winter@b-net1.de"
s.homepage = "http://projekte.dev.b-net1.de/projects/bn1redminepiwik"
s.description = "Redmine plugin to insert the Piwik tracking code into Redmine based on user roles."
s.authors = ["Jörg Winter, Eric Davis"]
s.rubyforge_project = "piwik_plugin" # TODO
s.files = FileList[
"[A-Z]*",
"init.rb",
"rails/init.rb",
"{bin,generators,lib,test,app,assets,config,lang}/**/*",
'lib/jeweler/templates/.gitignore'
]
end
Jeweler::GemcutterTasks.new
Jeweler::RubyforgeTasks.new do |rubyforge|
rubyforge.doc_task = "rdoc"
end
rescue LoadError
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
end
<p>
<%= l(:piwik_directions) %>
</p>
<p>
<label><%= l(:piwik_log_url_label) %></label><%= text_field_tag 'settings[piwik_log_url]', @settings['piwik_log_url'] %>
</p>
<p>
<label><%= l(:piwik_log_id_label) %></label><%= text_field_tag 'settings[piwik_log_id]', @settings['piwik_log_id'], :size => 4, :maxlength => 5 %>
</p>
<p>
<label><%= l(:piwik_log_anonymous_label) %></label><%= check_box_tag 'settings[piwik_log_anonymous]', '1', @settings['piwik_log_anonymous'] %>
</p>
<p>
<label><%= l(:piwik_log_authenticated_label) %></label><%= check_box_tag 'settings[piwik_log_authenticated]', '1', @settings['piwik_log_authenticated'] %>
</p>
<p>
<label><%= l(:piwik_log_administrator_label) %></label><%= check_box_tag 'settings[piwik_log_administrator]', '1', @settings['piwik_log_administrator'] %>
</p>
de:
piwik_directions: Gib die URL deiner <a href="http://www.piwik.org">Piwik</a>-Installation ein, ebenso die Piwik-ID deiner Website <br />und wähle deine Log-Optionen.
piwik_log_url_label: URL der Piwik Installation
piwik_log_id_label: ID der Piwik Website
piwik_log_anonymous_label: Logge anonyme Benutzer
piwik_log_authenticated_label: Logge authentifizierte Benutzer
piwik_log_administrator_label: Logge Administratoren
en:
piwik_directions: Enter the URL of your <a href="http://www.piwik.org">Piwik</a> installation, the Piwik-ID of your Website <br />and choose your logging options.
piwik_log_url_label: URL of the Piwik installation
piwik_log_id_label: ID of the Piwik Website
piwik_log_anonymous_label: Log anonymous users
piwik_log_authenticated_label: Log authenticated user
piwik_log_administrator_label: Log administrator users
require File.dirname(__FILE__) + "/rails/init"
# German strings go here
piwik_directions: Gib die URL deiner <a href="http://www.piwik.org">Piwik</a>-Installation ein, ebenso die Piwik-ID deiner Website <br />und wähle deine Log-Optionen.
piwik_log_url_label: URL der Piwik Installation
piwik_log_id_label: ID der Piwik Website
piwik_log_anonymous_label: Logge anonyme Benutzer
piwik_log_authenticated_label: Logge authentifizierte Benutzer
piwik_log_administrator_label: Logge Administratoren
# English strings go here
piwik_directions: Enter the URL of your <a href="http://www.piwik.org">Piwik</a> installation, the Piwik-ID of your Website <br />and choose your logging options.
piwik_log_url_label: URL of the Piwik installation
piwik_log_id_label: ID of the Piwik Website
piwik_log_anonymous_label: Log anonymous users
piwik_log_authenticated_label: Log authenticated user
piwik_log_administrator_label: Log administrator users
# This class hooks into Redmine's View Listeners in order to
# add content to the page
class PiwikHooks < Redmine::Hook::ViewListener
# Adds the Piwik code to the layout if the current user meets
# the conditions setup by the System Administrator
def view_layouts_base_body_bottom(context = { })
log_anon = Setting.plugin_piwik_plugin['piwik_log_anonymous']
log_auth = Setting.plugin_piwik_plugin['piwik_log_authenticated']
log_admin = Setting.plugin_piwik_plugin['piwik_log_administrator']
log_url = Setting.plugin_piwik_plugin['piwik_log_url']
log_id = Setting.plugin_piwik_plugin['piwik_log_id']
if (!log_url.nil? && !log_id.nil?)
if (context[:request].env['HTTPS'] == 'on')
log_url = log_url.gsub(/http:|https:/, 'https:')
else
log_url = log_url.gsub(/http:|https:/, 'http:')
end
if (User.current.anonymous? && log_anon) || # Anon user
(User.current.logged? && log_auth && !User.current.admin?) || # Auth users who are not admins
(User.current.admin? && log_admin) # Admin user
output = "<!-- Piwik -->
<script type=\"text/javascript\" src=\"#{log_url}piwik.js\"></script>
<script type=\"text/javascript\">
try {
var piwikTracker = Piwik.getTracker(\"#{log_url}piwik.php\", #{log_id});
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src=\"#{log_url}piwik.php?idsite=#{log_id}\" style=\"border:0\" alt=\"\"/></p></noscript>
<!-- End Piwik Tag -->"
return output
else
return ''
end
else
return ''
end
end
end
# Generated by jeweler
# DO NOT EDIT THIS FILE
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
# -*- encoding: utf-8 -*-
Gem::Specification.new do |s|
s.name = %q{piwik_plugin}
s.version = "0.1.1"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Jörg Winter, Eric Davis"]
s.date = %q{2009-10-17}
s.description = %q{Redmine plugin to insert the Piwik tracking code into Redmine based on user roles.}
s.email = %q{winter@b-net1.de}
s.extra_rdoc_files = [
"README.rdoc"
]
s.files = [
"COPYRIGHT.txt",
"CREDITS.txt",
"GPL.txt",
"README.rdoc",
"Rakefile",
"VERSION",
"app/views/settings/_piwik_settings.rhtml",
"config/locales/de.yml",
"config/locales/en.yml",
"config/locales/hu.yml",
"config/locales/it.yml",
"init.rb",
"lang/de.yml",
"lang/en.yml",
"lang/hu.yml",
"lang/it.yml",
"lib/piwik_hooks.rb",
"rails/init.rb",
"test/test_helper.rb"
]
s.homepage = %q{http://projekte.dev.b-net1.de/projects/bn1redminepiwik}
s.rdoc_options = ["--charset=UTF-8"]
s.require_paths = ["lib"]
s.rubyforge_project = %q{piwik_plugin}
s.rubygems_version = %q{1.3.5}
s.summary = %q{Redmine plugin to insert the Piwik tracking code into Redmine based on user roles.}
s.test_files = [
"test/test_helper.rb"
]
if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 3
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
else
end
else
end
end
require 'redmine'
require_dependency 'piwik_hooks'
Redmine::Plugin.register :piwik_plugin do
name 'Piwik plugin'
author 'Jörg Winter'
description 'Redmine plugin to insert the Piwik tracking code into Redmine based on user roles.'
url 'http://projekte.dev.b-net1.de/projects/bn1redminepiwik'
author_url 'http://www.b-net1.de'
version '0.1.1'
requires_redmine :version_or_higher => '0.8.0'
settings :default => {
'piwik_log_url' => '',
'piwik_log_id' => '',
'piwik_log_anonymous' => true,
'piwik_log_authenticated' => true,
'piwik_log_administrator' => true
}, :partial => 'settings/piwik_settings'
end
# Load the normal Rails helper
require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper')
# Ensure that we are using the temporary fixture path
Engines::Testing.set_fixture_path
This Redmine plugin adds the environment name as class to the body of every HTML page.
\ No newline at end of file
require 'redmine'
require 'patches/application_helper_patch'
Redmine::Plugin.register :redmine_polls do
name 'Environmnet CSS'
author 'Francisco de Juan'
url 'http://development.splendeo.es/projects/redm-environment-css'
author_url 'http://www.splendeo.es'
description 'A plugin for adding the environment name as class to the body of every HTML page'
version '0.1'
end
require_dependency 'application_helper'
module ApplicationHelperPatch
def self.included(base) # :nodoc:
base.send(:include, InstanceMethods)
base.class_eval do
alias_method_chain :body_css_classes, :environment
end
end
module InstanceMethods
def body_css_classes_with_environment
"#{body_css_classes_without_environment} environment-#{Rails.env}"
end
end
end
ApplicationHelper.send(:include, ApplicationHelperPatch)
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<loadpath>
<pathentry path="" type="src"/>
<pathentry path="org.rubypeople.rdt.launching.RUBY_CONTAINER" type="con"/>
</loadpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>redmine-gitolite</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.rubypeople.rdt.core.rubybuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.rubypeople.rdt.core.rubynature</nature>
</natures>
</projectDescription>
= Patches
* work with gitolite
* support subproject git repo. (e.g. git@site.name:parent_project/subproject.git)
* fix bugs.
= Redmine Gitolite
A Redmine plugin which manages your gitolite configuration based on your projects and memberships in Redmine. Includes Public Key management views (extracted from http://plan.io).
This plugin was originally developed by Jan Schulz-Hofen for http://plan.io. Several updates/fixes were provided by github users untoldwind, tingar and ericpaulbishop. These updates were merged together and expanded upon by Eric Bishop.
In order to use this plugin you must have the following gems installed:
lockfile
inifile
net-ssh
== Copyright & License
Copyright (c) 2009-2010 Jan Schulz-Hofen, ROCKET RENTALS GmbH (http://www.rocket-rentals.de). MIT License.
Copyright (c) 2010 Eric Bishop (ericpaulbishop@gmail.com) MIT License.
class GitolitePublicKeysController < ApplicationController
unloadable
before_filter :require_login
before_filter :set_user_variable
before_filter :find_gitolite_public_key, :except => [:index, :new, :create]
def index
@status = if (session[:gitolite_public_key_filter_status]=params[:status]).nil?
GitolitePublicKey::STATUS_ACTIVE
elsif params[:status].blank?
nil
else
params[:status] == "true"
end
c = ARCondition.new(!@status.nil? ? ["active=?", @status] : nil)
@gitolite_public_keys = @user.gitolite_public_keys.all(:order => 'active DESC, created_at DESC', :conditions => c.conditions)
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @gitolite_public_keys }
end
end
def edit
end
def update
if @gitolite_public_key.update_attributes(params[:public_key])
flash[:notice] = l(:notice_public_key_updated)
redirect_to url_for(:action => 'index', :status => session[:gitolite_public_key_filter_status])
else
render :action => 'edit'
end
end
def new
@gitolite_public_key = GitolitePublicKey.new(:user => @user)
end
def create
@gitolite_public_key = GitolitePublicKey.new(params[:public_key].merge(:user => @user))
if @gitolite_public_key.save
flash[:notice] = l(:notice_public_key_added)
redirect_to url_for(:action => 'index', :status => session[:gitolite_public_key_filter_status])
else
render :action => 'new'
end
end
def show
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @gitolite_public_key }
end
end
protected
def set_user_variable
@user = User.current
end
def find_gitolite_public_key
key = GitolitePublicKey.find_by_id(params[:id])
if key and key.user == @user
@gitolite_public_key = key
elsif key
render_403
else
render_404
end
end
end
module GitolitePublicKeysHelper
def gitolite_public_keys_status_options_for_select(user, selected)
key_count_by_active = user.gitolite_public_keys.count(:group => 'active').to_hash
options_for_select([[l(:label_all), nil],
["#{l(:status_active)} (#{key_count_by_active[true].to_i})", GitolitePublicKey::STATUS_ACTIVE],
["#{l(:status_locked)} (#{key_count_by_active[false].to_i})", GitolitePublicKey::STATUS_LOCKED]], selected)
end
end
\ No newline at end of file
class GitoliteObserver < ActiveRecord::Observer
observe :project, :user, :gitolite_public_key, :member, :role, :repository
# def before_create(object)
# if object.is_a?(Project)
# repo = Repository::Git.new
# repo.url = repo.root_url = File.join(Gitolite::GITOSIS_BASE_PATH,"#{object.identifier}.git")
# object.repository = repo
# end
# end
def after_save(object) ; update_repositories(object) ; end
def after_destroy(object) ; update_repositories(object) ; end
protected
def update_repositories(object)
case object
when Repository then Gitolite::update_repositories(object.project)
when User then Gitolite::update_repositories(object.projects) unless is_login_save?(object)
when GitolitePublicKey then Gitolite::update_repositories(object.user.projects)
when Member then Gitolite::update_repositories(object.project)
when Role then Gitolite::update_repositories(object.members.map(&:project).uniq.compact)
end
end
private
# Test for the fingerprint of changes to the user model when the User actually logs in.
def is_login_save?(user)
user.changed? && user.changed.length == 2 && user.changed.include?("updated_on") && user.changed.include?("last_login_on")
end
end
class GitolitePublicKey < ActiveRecord::Base
STATUS_ACTIVE = 1
STATUS_LOCKED = 0
belongs_to :user
validates_uniqueness_of :title, :scope => :user_id
validates_uniqueness_of :identifier, :score => :user_id
validates_presence_of :title, :key, :identifier
named_scope :active, {:conditions => {:active => GitolitePublicKey::STATUS_ACTIVE}}
named_scope :inactive, {:conditions => {:active => GitolitePublicKey::STATUS_LOCKED}}
validate :has_not_been_changed
before_validation :set_identifier
def has_not_been_changed
unless new_record?
%w(identifier key user_id).each do |attribute|
errors.add(attribute, 'may not be changed') unless changes[attribute].blank?
end
end
end
def set_identifier
# TODO: some better naming, id is set long AFTER this method is called. Maybe timestamp?
self.identifier ||= "#{self.user.login.underscore}@#{self.title.underscore}".gsub(/[^0-9a-zA-Z-_@]/,'_')
end
def to_s ; title ; end
end
<div class="box tabular">
<p><%= f.text_field :title, :required => true %></p>
<p><%= f.text_area :key, :required => true, :disabled => !@gitolite_public_key.new_record?, :style => 'width:99%;height:140px;', :label => :field_public_key %>
<% if !@gitolite_public_key.new_record?%>
<br/><em><%= l(:label_key_cannot_be_changed_please_create_new_key) %></em>
<% end %>
</p>
<p><%= f.check_box :active %></p>
</div>
<h2><%= link_to l(:label_public_keys), public_keys_path %> &#187; <%= h @gitolite_public_key %></h2>
<%= error_messages_for :gitolite_public_key %>
<% form_for :public_key, @gitolite_public_key, :url => { :action => "update" }, :html => { :method => :put},
:builder => TabularFormBuilder,
:lang => current_language do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %>
<%= submit_tag l(:button_save) %>
<% end %>
<% content_for :sidebar do %>
<%= render :partial => 'my/sidebar' %>
<% end %>
<% html_title(l(:label_public_keys)) -%>
<h2><%= link_to l(:label_my_account), :controller => 'my', :action => 'account' %> &#187; <%=l(:label_public_keys)%></h2>
<% form_tag({}, :method => :get) do %>
<fieldset><legend><%= l(:label_filter_plural) %></legend>
<label><%= l(:field_status) %>:</label>
<%= select_tag 'status', gitolite_public_keys_status_options_for_select(@user, @status), :class => "small", :onchange => "this.form.submit(); return false;" %>
<%= submit_tag l(:button_apply), :class => "small", :name => nil %>
</fieldset>
<% end %>
&nbsp;
<% if @gitolite_public_keys.any? %>
<table class="list">
<tr>
<th><%= l(:field_name) %></th>
<th><%= l(:field_created_on) %></th>
<th style="width:15%;"><%= l(:field_active) %></th>
<th align="center" style="width:10%;"> </th>
</tr>
<% @gitolite_public_keys.each do |key| %>
<tr class="<%= cycle('odd', 'even') %>">
<td><%= link_to h(key), :action => 'edit', :id => key %></td>
<td><%= format_time(key.created_at) %></td>
<td class="center" style="width:15%;"><%= image_tag('true.png') if key.active? %></td>
<td class="buttons">
<%= link_to l(key.active? ? :button_lock : :button_unlock), public_key_path(key, :public_key => {:active => key.active? ? GitolitePublicKey::STATUS_LOCKED : GitolitePublicKey::STATUS_ACTIVE}), :method => :put, :class => "icon #{key.active? ? 'icon-lock' : 'icon-unlock'}" %>
</td>
</tr>
<% end %>
</table>
<% end %>
<p><%= link_to l(:label_enumeration_new), { :action => 'new'} %></p>
<% html_title(l(:label_public_keys)) -%>
<h2><%= link_to l(:label_public_keys), public_keys_path %> &#187; <%=l(:label_public_key_new)%></h2>
<%= error_messages_for :gitolite_public_key %>
<% form_for :public_key, @gitolite_public_key, :url => { :action => "create" },
:builder => TabularFormBuilder,
:lang => current_language do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %>
<%= submit_tag l(:button_create) %>
<% end %>
<% content_for :sidebar do %>
<%= render :partial => 'my/sidebar' %>
<% end %>
<% html_title(l(:label_public_keys)) -%>
<%# This is used to display basic git setup instructions, like on github... %>
<% flash.now[:error] = "Repository does not exist. Create one using the instructions below." %>
<div class="box">
<h2>Git Setup:</h2>
<pre> <a href="http://git-scm.com/download" target="_blank">Download and Install Git</a>
git config --global user.name "<%= User.current.login %>"
git config --global user.email <%= User.current.mail %>
</pre>
<h2>Permission Setup:</h2>
<pre> <%= link_to "Upload SSH Public Key", {:controller => 'my', :action => 'public_keys'} %>
Add yourself as a project developer: <%= link_to @project.name + " Settings", {:controller => 'projects', :action => 'settings'} %> -&gt; Members Tab -&gt; New Member
</pre>
<h2>Repository Setup:</h2>
<pre> mkdir <%= @project.identifier %>
cd <%= @project.identifier %>
git init
touch README
git add .
git commit -m 'Initializing <%= @project %> repository'
git remote add origin <%= Setting.plugin_redmine_gitolite['developerBaseUrls'] + Gitolite.repository_name(@project) + '.git' %>
git push origin master
</pre>
<h2>Existing Git Repo?</h2>
<pre> cd existing_git_repo
git remote add origin <%= Setting.plugin_redmine_gitolite['developerBaseUrls'] + Gitolite.repository_name(@project) + '.git' %>
git push origin master
</pre>
</div>
<div class="tabular settings">
<p>
<label><%= l(:label_gitolite_url)%></label>
<%= text_field_tag("settings[gitoliteUrl]", @settings['gitoliteUrl'], :size => 60) %>
<br />
</p>
<p>
<label><%= l(:label_gitolite_identity_file)%></label>
<%= text_field_tag("settings[gitoliteIdentityFile]", @settings['gitoliteIdentityFile'], :size => 60) %>
<br />
</p>
<p>
<label><%= l(:label_base_path)%></label>
<%= text_field_tag("settings[basePath]", @settings['basePath'], :size => 60) %>
<br />
</p>
<p>
<label><%= l(:label_developer_base_urls)%></label>
<%= text_area_tag("settings[developerBaseUrls]", @settings['developerBaseUrls'].split(/[\r\n\t ,;]+/).join("\n"), :size => 60) %>
<br />
</p>
<p>
<label><%= l(:label_read_only_base_urls)%></label>
<%= text_area_tag("settings[readOnlyBaseUrls]", @settings['readOnlyBaseUrls'].split(/[\r\n\t ,;]+/).join("\n"), :size => 60) %>
<br />
</p>
</div>
'bg':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'bs':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'ca':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'cs':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'da':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'de':
label_public_keys: Öffentliche Schlüssel
label_public_key_new: Neuer öffentlicher Schlüssel
field_public_key: Schlüssel
notice_public_key_updated: Öffentlicher Schlüssel wurde erfolgreich aktualisiert.
notice_public_key_added: Öffentlicher Schlüssel wurde erfolgreich hinzugefügt.
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
label_key_cannot_be_changed_please_create_new_key: 'Der Schlüssel kann nicht mehr verändert werden. Sie können jedoch diesen Schlüssel deaktivieren und einen neuen anlegen.'
activerecord:
errors:
messages:
'may not be changed': "darf nicht verändert werden"
'el':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'en':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'es':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'fi':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'fr':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'gl':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'he':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'hu':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'id':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'it':
label_public_keys: Chiavi pubbliche
label_public_key_new: Nuova chiave pubblica
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Chiave
notice_public_key_updated: Chiave pubblica aggiornata.
notice_public_key_added: Chiave pubblica aggiunta.
label_key_cannot_be_changed_please_create_new_key: 'La chiave non può essere aggiornata. È comunque possibile disattivarla e crearne una nuova.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'ja':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'ko':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'lt':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'nl':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'no':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'pl':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'pt-BR':
label_public_keys: Chaves pblicas
label_public_key_new: Nova chave pblica
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Arquivo de identificao do Gitolite
label_base_path: Caminho de base
label_developer_base_urls: URL(s) base de Desenvolvedor
label_read_only_base_urls: URL(s) base de Apenas-leitura
field_public_key: Chave
notice_public_key_updated: Chave pblica foi atualizada com sucesso.
notice_public_key_added: Chave pblica foi atualizada com sucesso.
label_key_cannot_be_changed_please_create_new_key: 'A chave no poder ser alterada. Mas voc ainda pode desativa-la e criar uma nova.'
activerecord:
errors:
messages:
'may not be changed': 'no dever ser alterado'
'pt':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'ro':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'ru':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'sk':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'sl':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'sr':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'sv':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'th':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'tr':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'uk':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'vi':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'zh-TW':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
'zh':
label_public_keys: Public keys
label_public_key_new: New public key
label_gitolite_url: Gitolite URL
label_gitolite_identity_file: Gitolite identity file
label_base_path: Base path
label_developer_base_urls: Developer base URL(s)
label_read_only_base_urls: Read-only base URL(s)
field_public_key: Key
notice_public_key_updated: Public key was successfully updated.
notice_public_key_added: Public key was successfully added.
label_key_cannot_be_changed_please_create_new_key: 'The key cannot be altered anymore. However, you can deactivate it and create a new one.'
activerecord:
errors:
messages:
'may not be changed': 'may not be changed'
if defined? map
map.resources :public_keys, :controller => 'gitolite_public_keys', :path_prefix => 'my'
else
ActionController::Routing::Routes.draw do |map|
map.resources :public_keys, :controller => 'gitolite_public_keys', :path_prefix => 'my'
end
end
\ No newline at end of file
class CreateGitolitePublicKeys < ActiveRecord::Migration
def self.up
create_table :gitolite_public_keys do |t|
t.column :title, :string
t.column :identifier, :string
t.column :key, :text
t.column :active, :integer, :default => 1
t.references :user
t.timestamps
end
end
def self.down
drop_table :gitolite_public_keys
end
end
require 'redmine'
require_dependency 'principal'
require_dependency 'user'
require_dependency 'gitolite'
require_dependency 'gitolite/patches/repositories_controller_patch'
require_dependency 'gitolite/patches/repositories_helper_patch'
require_dependency 'gitolite/patches/git_adapter_patch'
Redmine::Plugin.register :redmine_gitolite do
name 'Redmine Gitolite plugin'
author 'Christian Käser, Zsolt Parragi, Yunsang Choi, Joshua Hogendorn, Jan Schulz-Hofen and others'
description 'Enables Redmine to update a gitolite server.'
version '0.1.0'
settings :default => {
'gitoliteUrl' => 'git@localhost:gitolite-admin.git',
'gitoliteIdentityFile' => '/srv/projects/redmine/miner/.ssh/id_rsa',
'developerBaseUrls' => 'git@www.salamander-linux.com:,https://[user]@www.salamander-linux.com/git/',
'readOnlyBaseUrls' => 'http://www.salamander-linux.com/git/',
'basePath' => '/srv/projects/git/repositories/',
},
:partial => 'redmine_gitolite'
end
# initialize hook
class GitolitePublicKeyHook < Redmine::Hook::ViewListener
render_on :view_my_account_contextual, :inline => "| <%= link_to(l(:label_public_keys), public_keys_path) %>"
end
# initialize association from user -> public keys
User.send(:has_many, :gitolite_public_keys, :dependent => :destroy)
# initialize observer
ActiveRecord::Base.observers = ActiveRecord::Base.observers << GitoliteObserver
require 'lockfile'
require 'net/ssh'
require 'tmpdir'
require 'gitolite_conf.rb'
module Gitolite
def self.repository_name project
parent_name = project.parent ? repository_name(project.parent) : ""
return "#{parent_name}/#{project.identifier}".sub(/^\//, "")
end
def self.get_urls(project)
urls = {:read_only => [], :developer => []}
read_only_baseurls = Setting.plugin_redmine_gitolite['readOnlyBaseUrls'].split(/[\r\n\t ,;]+/)
developer_baseurls = Setting.plugin_redmine_gitolite['developerBaseUrls'].split(/[\r\n\t ,;]+/)
project_path = repository_name(project) + ".git"
read_only_baseurls.each {|baseurl| urls[:read_only] << baseurl + project_path}
developer_baseurls.each {|baseurl| urls[:developer] << baseurl + project_path}
return urls
end
def self.update_repositories(projects)
projects = (projects.is_a?(Array) ? projects : [projects])
if(defined?(@recursionCheck))
if(@recursionCheck)
return
end
end
@recursionCheck = true
# Don't bother doing anything if none of the projects we've been handed have a Git repository
unless projects.detect{|p| p.repository.is_a?(Repository::Git) }.nil?
lockfile=File.new(File.join(RAILS_ROOT,"tmp",'redmine_gitolite_lock'),File::CREAT|File::RDONLY)
retries=5
loop do
break if lockfile.flock(File::LOCK_EX|File::LOCK_NB)
retries-=1
sleep 2
raise Lockfile::MaxTriesLockError if retries<=0
end
# HANDLE GIT
# create tmp dir
local_dir = File.join(RAILS_ROOT, "tmp","redmine_gitolite_#{Time.now.to_i}")
%x[mkdir "#{local_dir}"]
# Create GIT_SSH script
ssh_with_identity_file = File.join(local_dir, 'ssh_with_identity_file.sh')
File.open(ssh_with_identity_file, "w") do |f|
f.puts "#!/bin/bash"
f.puts "exec ssh -o stricthostkeychecking=no -i #{Setting.plugin_redmine_gitolite['gitoliteIdentityFile']} \"$@\""
end
File.chmod(0755, ssh_with_identity_file)
# clone repo
%x[env GIT_SSH=#{ssh_with_identity_file} git clone #{Setting.plugin_redmine_gitolite['gitoliteUrl']} #{local_dir}/gitolite]
conf = Config.new(File.join(local_dir, 'gitolite', 'conf', 'gitolite.conf'))
changed = false
projects.select{|p| p.repository.is_a?(Repository::Git)}.each do |project|
# fetch users
users = project.member_principals.map(&:user).compact.uniq
write_users = users.select{ |user| user.allowed_to?( :commit_access, project ) }
read_users = users.select{ |user| user.allowed_to?( :view_changesets, project ) && !user.allowed_to?( :commit_access, project ) }
# write key files
users.map{|u| u.gitolite_public_keys.active}.flatten.compact.uniq.each do |key|
filename = File.join(local_dir, 'gitolite/keydir',"#{key.identifier}.pub")
unless File.exists? filename
File.open(filename, 'w') {|f| f.write(key.key.gsub(/\n/,'')) }
changed = true
end
end
# delete inactives
users.map{|u| u.gitolite_public_keys.inactive}.flatten.compact.uniq.each do |key|
filename = File.join(local_dir, 'gitolite/keydir',"#{key.identifier}.pub")
if File.exists? filename
File.unlink() rescue nil
changed = true
end
end
# write config file
repo_name = repository_name(project)
read_users = read_users.map{|u| u.login.underscore}
write_users = write_users.map{|u| u.login.underscore}
conf.set_read_user repo_name, read_users
conf.set_write_user repo_name, write_users
# TODO: gitweb and git daemon support!
end
if conf.changed?
conf.save
changed = true
end
if changed
git_push_file = File.join(local_dir, 'git_push.sh')
new_dir= File.join(local_dir,'gitolite')
File.open(git_push_file, "w") do |f|
f.puts "#!/bin/sh"
f.puts "cd #{new_dir}"
f.puts "git add keydir/*"
f.puts "git add conf/gitolite.conf"
f.puts "git config user.email '#{Setting.mail_from}'"
f.puts "git config user.name 'Redmine'"
f.puts "git commit -a -m 'updated by Redmine Gitolite'"
f.puts "GIT_SSH=#{ssh_with_identity_file} git push"
end
File.chmod(0755, git_push_file)
# add, commit, push, and remove local tmp dir
%x[sh #{git_push_file}]
end
# remove local copy
%x[rm -Rf #{local_dir}]
lockfile.flock(File::LOCK_UN)
end
@recursionCheck = false
end
end
require_dependency 'redmine/scm/adapters/git_adapter'
module Gitolite
module Patches
module GitAdapterPatch
def self.included(base)
base.class_eval do
unloadable
end
base.send(:alias_method_chain, :lastrev, :time_fixed)
base.send(:alias_method_chain, :revisions, :time_fixed)
end
GIT_BIN = "git"
def lastrev_with_time_fixed(path,rev)
return nil if path.nil?
cmd = "#{GIT_BIN} --git-dir #{target('')} log --pretty=fuller --date=rfc --no-merges -n 1 "
cmd << " #{shell_quote rev} " if rev
cmd << "-- #{path} " unless path.empty?
shellout(cmd) do |io|
begin
id = io.gets.split[1]
author = io.gets.match('Author:\s+(.*)$')[1]
2.times { io.gets }
time = io.gets.match('CommitDate:\s+(.*)$')[1]
Redmine::Scm::Adapters::Revision.new({
:identifier => id,
:scmid => id,
:author => author,
:time => Time.rfc2822(time),
:message => nil,
:paths => nil
})
rescue NoMethodError => e
logger.error("The revision '#{path}' has a wrong format")
return nil
end
end
end
def revisions_with_time_fixed(path, identifier_from, identifier_to, options={})
revisions = Redmine::Scm::Adapters::Revisions.new
cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=rfc --pretty=fuller"
cmd << " --reverse" if options[:reverse]
cmd << " --all" if options[:all]
cmd << " -n #{options[:limit]} " if options[:limit]
cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from
cmd << " #{shell_quote identifier_to} " if identifier_to
cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since]
cmd << " -- #{path}" if path && !path.empty?
shellout(cmd) do |io|
files=[]
changeset = {}
parsing_descr = 0 #0: not parsing desc or files, 1: parsing desc, 2: parsing files
revno = 1
io.each_line do |line|
if line =~ /^commit ([0-9a-f]{40})$/
key = "commit"
value = $1
if (parsing_descr == 1 || parsing_descr == 2)
parsing_descr = 0
revision = Redmine::Scm::Adapters::Revision.new({
:identifier => changeset[:commit],
:scmid => changeset[:commit],
:author => changeset[:author],
#:time => Time.parse(changeset[:date]),
:time => Time.rfc2822(changeset[:date]),
:message => changeset[:description],
:paths => files
})
if block_given?
yield revision
else
revisions << revision
end
changeset = {}
files = []
revno = revno + 1
end
changeset[:commit] = $1
elsif (parsing_descr == 0) && line =~ /^(\w+):\s*(.*)$/
key = $1
value = $2
if key == "Author"
changeset[:author] = value
elsif key == "CommitDate"
changeset[:date] = value
end
elsif (parsing_descr == 0) && line.chomp.to_s == ""
parsing_descr = 1
changeset[:description] = ""
elsif (parsing_descr == 1 || parsing_descr == 2) \
&& line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\s+(.+)$/
parsing_descr = 2
fileaction = $1
filepath = $2
files << {:action => fileaction, :path => filepath}
elsif (parsing_descr == 1 || parsing_descr == 2) \
&& line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\s+(.+)$/
parsing_descr = 2
fileaction = $1
filepath = $3
files << {:action => fileaction, :path => filepath}
elsif (parsing_descr == 1) && line.chomp.to_s == ""
parsing_descr = 2
elsif (parsing_descr == 1)
changeset[:description] << line[4..-1]
end
end
if changeset[:commit]
revision = Redmine::Scm::Adapters::Revision.new({
:identifier => changeset[:commit],
:scmid => changeset[:commit],
:author => changeset[:author],
:time => Time.rfc2822(changeset[:date]),
:message => changeset[:description],
:paths => files
})
if block_given?
yield revision
else
revisions << revision
end
end
end
return nil if $? && $?.exitstatus != 0
revisions
end
end
end
end
Redmine::Scm::Adapters::GitAdapter.send(:include, Gitolite::Patches::GitAdapterPatch) unless Redmine::Scm::Adapters::GitAdapter.include?(Gitolite::Patches::GitAdapterPatch)
require_dependency 'repositories_controller'
module Gitolite
module Patches
module RepositoriesControllerPatch
def show_with_git_instructions
if @repository.is_a?(Repository::Git) and @repository.entries(@path, @rev).blank?
render :action => 'git_instructions'
else
show_without_git_instructions
end
end
def edit_with_scm_settings
params[:repository] ||= {}
if(@project.parent)
params[:repository][:url] = File.join(Setting.plugin_redmine_gitolite['basePath'],@project.parent.identifier,"#{@project.identifier}.git") if params[:repository_scm] == 'Git'
else
params[:repository][:url] = File.join(Setting.plugin_redmine_gitolite['basePath'],"#{@project.identifier}.git") if params[:repository_scm] == 'Git'
end
edit_without_scm_settings
end
def self.included(base)
base.class_eval do
unloadable
end
base.send(:alias_method_chain, :show, :git_instructions)
base.send(:alias_method_chain, :edit, :scm_settings)
end
end
end
end
RepositoriesController.send(:include, Gitolite::Patches::RepositoriesControllerPatch) unless RepositoriesController.include?(Gitolite::Patches::RepositoriesControllerPatch)
require_dependency 'repositories_helper'
module Gitolite
module Patches
module RepositoriesHelperPatch
def git_field_tags_with_disabled_configuration(form, repository) ; '' ; end
def self.included(base)
base.class_eval do
unloadable
end
base.send(:alias_method_chain, :git_field_tags, :disabled_configuration)
end
end
end
end
RepositoriesHelper.send(:include, Gitolite::Patches::RepositoriesHelperPatch) unless RepositoriesHelper.include?(Gitolite::Patches::RepositoriesHelperPatch)
\ No newline at end of file
module Gitolite
class Config
def initialize file_path
@path = file_path
load
end
def save
File.open(@path, "w") do |f|
f.puts content
end
@original_content = content
end
def add_write_user repo_name, users
repository(repo_name).add "RW+", users
end
def set_write_user repo_name, users
repository(repo_name).set "RW+", users
end
def add_read_user repo_name, users
repository(repo_name).add "R", users
end
def set_read_user repo_name, users
repository(repo_name).set "R", users
end
def changed?
@original_content != content
end
private
def load
@original_content = []
@repositories = {}
cur_repo_name = nil
File.open(@path).each_line do |line|
@original_content << line
tokens = line.strip.split
if tokens.first == 'repo'
cur_repo_name = tokens.last
@repositories[cur_repo_name] = AccessRights.new
next
end
cur_repo_right = @repositories[cur_repo_name]
if cur_repo_right and tokens[1] == '='
cur_repo_right.add tokens.first, tokens[2..-1]
end
end
@original_content = @original_content.join
end
def repository repo_name
@repositories[repo_name] ||= AccessRights.new
end
def content
content = []
@repositories.each do |repo, rights|
content << "repo\t#{repo}"
rights.each do |perm, users|
content << "\t#{perm}\t=\t#{users.join(' ')}" if users.length > 0
end
content << ""
end
return content.join("\n")
end
end
class AccessRights
def initialize
@rights = {}
end
def add perm, users
@rights[perm.to_sym] ||= []
@rights[perm.to_sym] << users
@rights[perm.to_sym].flatten!
@rights[perm.to_sym].uniq!
end
def set perm, users
@rights[perm.to_sym] = []
add perm, users
end
def each
@rights.each {|k,v| yield k, v}
end
end
end
namespace :gitolite do
desc "update gitolite repositories"
task :update_repositories => [:environment] do
projects = Project.active
puts "Updating repositories for projects #{projects.join(' ')}"
Gitolite.update_repositories(projects)
end
desc "fetch commits from gitolite repositories"
task :fetch_changes => [:environment] do
Repository.fetch_changesets
end
end
\ No newline at end of file
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
one:
id: 1
title: MyString
key: MyText
two:
id: 2
title: MyString
key: MyText
# Load the normal Rails helper
require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper')
# Ensure that we are using the temporary fixture path
Engines::Testing.set_fixture_path
require File.dirname(__FILE__) + '/../test_helper'
class GitolitePublicKeyTest < ActiveSupport::TestCase
fixtures :gitolite_public_keys
# Replace this with your real tests.
def test_truth
assert true
end
end
= Redmine Checkout plugin
Author:: Holger Just
URL:: http://dev.holgerjust.de/projects/redmine-checkout
This plugin to Redmine adds a link to the actual repository to the GUI.
This plugin includes ZeroClipboard[http://code.google.com/p/zeroclipboard/]
by Joseph Huckaby. This software is licensed under the
{GNU Lesser General Public License}[http://www.gnu.org/licenses/lgpl.html].
Copyright (c) 2009, 2010 Holger Just
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
= Installation
The installation follows the standard installation path from
http://www.redmine.org/projects/redmine/wiki/Plugins
1. Copy the software to the vendor/plugins directory. Make sure that the name
of the directory is redmine_checkout.
2. Run rake db:migrate_plugins RAILS_ENV=production
3. Restart Redmine
#!/usr/bin/env ruby
require 'redmine_plugin_support'
Dir[File.expand_path(File.dirname(__FILE__)) + "/lib/tasks/**/*.rake"].sort.each { |ext| load ext }
RedminePluginSupport::Base.setup do |plugin|
plugin.project_name = 'redmine_checkout'
plugin.default_task = [:spec]
plugin.tasks = [:doc, :release, :clean, :spec, :stats]
end
\ No newline at end of file
<p><%= form.select(:checkout_overwrite, [
[l(:general_text_Yes), "1"],
[l(:general_text_No), "0"]
],
{},
:onchange => <<-EOF
Effect.toggle($('checkout_settings'), 'slide', {duration:0.2});
EOF
)%></p>
<div id="checkout_settings" <%= 'style="display:none;"' unless form.object.checkout_overwrite? %>><fieldset>
<legend><%=l :label_checkout %></legend>
<p><%= form.text_area :checkout_description, :cols => 60, :rows => 5, :class => 'wiki-edit', :label => :field_description %></p>
<%= wikitoolbar_for 'repository_checkout_description' %>
<% if form.object.scm_name == 'Subversion' %>
<p><%= form.select :checkout_display_login,[
[l(:label_display_login_none), ''],
[l(:label_display_login_username), 'username'],
[l(:label_display_login_password), 'password']
],
:label => :setting_checkout_display_login %></p>
<% end %>
<p><%= form.check_box :checkout_display_command %></p>
<% javascript_tag do %>
protocolForm = new Subform(
'<%= escape_javascript(render(:partial => "projects/settings/repository_checkout_protocol", :locals => {:protocol => Checkout::Protocol.new({:protocol => form.object.scm_name, :append_path => form.object.allow_subtree_checkout? ? 1: 0, :repository => form.object})})) %>',
<%= form.object.checkout_protocols.length %>,
'checkout_protocol_table'
);
<% end %>
<p><label><%=l :label_protocol_plural %></label><%=l :help_repository_checkout_protocols %></p>
<%= hidden_field_tag 'repository[checkout_protocols][-1][protocol]', 'empty' %>
<table class="list checkout_protocol_table">
<thead><tr>
<th class="protocol_protocol" ><%= l(:setting_protocol)%></th>
<th class="protocol_command" ><%= l(:setting_checkout_command)%></th>
<th class="protocol_fixed_url" ><%= l(:setting_checkout_fixed_url) %></th>
<th class="protocol_access" ><%= l(:label_permissions) %></th>
<th class="protocol_append_path"><%= l(:label_append_path) %></th>
<th class="protocol_is_default" ><%= l(:label_default) %></th>
<th class="protocol_delete" ></th>
</tr></thead>
<tbody id="checkout_protocol_table">
<% form.object.checkout_protocols.each_with_index do |protocol, index| %>
<%= render :partial => 'projects/settings/repository_checkout_protocol', :locals => {:protocol => protocol, :index => index, :classes => cycle('odd', 'even')} %>
<% end %>
</tbody>
</table>
<div style="text-align: right"><%= link_to_function l(:button_add_protocol), "protocolForm.add()", {:class => "icon icon-add"} %></div>
</fieldset></div>
<%
index ||= "--INDEX--"
classes ||= ""
protocol = Checkout::Protocol.new(protocol) unless protocol.is_a? Checkout::Protocol
%>
<tr id="<%= "checkout_protocols_#{index}" %>" class="<%= classes %>" <%= 'style="display:none"' if index == '--INDEX--' %>>
<td class="protocol_protocol"><%= text_field_tag "repository[checkout_protocols][#{index}][protocol]", protocol.protocol, :size => 10 %></td>
<td class="protocol_command"><%= text_field_tag "repository[checkout_protocols][#{index}][command]", protocol.command, :size => 15 %></td>
<td class="protocol_fixed_url"><%= text_field_tag "repository[checkout_protocols][#{index}][fixed_url]", protocol.fixed_url, :size => 60 %></td>
<td class="protocol_access"><%= select_tag "repository[checkout_protocols][#{index}][access]", options_for_select([
[l(:label_access_read_write), 'read+write'],
[l(:label_access_read_only), 'read-only'],
[l(:label_access_permission), 'permission']], protocol.access) %></td>
<td class="protocol_append_path"><%= check_box_tag "repository[checkout_protocols][#{index}][append_path]", 1, protocol.append_path? %></td>
<td class="protocol_is_default"><%= check_box_tag "repository[checkout_protocols][#{index}][is_default]", 1, protocol.default? %></td>
<td class="protocol_delete"><%= image_to_function 'delete.png', "var e=$('checkout_protocols_#{index}');var parent=e.up(\"tbody\");e.remove();recalculate_even_odd(parent);return false" %></td>
</tr>
<div class="repository-info">
<% if repository.checkout_description.present? %>
<div class="wiki<%= ' bottomline' if protocols.present? %>"><%= textilizable repository.checkout_description %></div>
<% end %>
<% if protocols.present? %>
<div id="checkout_box">
<ul id="checkout_protocols">
<% protocols.each do |p| -%>
<li>
<a <%= 'class="selected"' if p == default_protocol %> id="checkout_protocol_<%= p.protocol.to_s.underscore %>" data-permission="<%= p.access_rw(User.current) %>" href="<%= URI.escape p.url(checkout_path) %>"><%=h p.protocol %></a>
</li>
<% end -%>
</ul>
<%= text_field_tag :checkout_url, h(default_protocol.full_command(checkout_path)), :readonly => true %>
<%- if Setting.checkout_use_zero_clipboard? %>
<div id="clipboard_container" title="<%= l(:label_copy_to_clipboard) %>" style="display: none;">
<div id="clipboard_button"><%= image_tag 'paste.png', :plugin => 'redmine_checkout' %></div>
</div>
<% end -%>
<% if default_protocol %><p><%=l :label_access_type, :type => l(default_protocol.access_label(User.current)) %></p><% end %>
<% javascript_tag do %>
var checkout_access = $H({<%= protocols.inject([]){|r,p| r << "'checkout_protocol_#{p.protocol.to_s.underscore}': '#{l(p.access_label(User.current))}'"}.join(', ') %>});
var checkout_commands = $H({<%= protocols.inject([]){|r,p| r << "'checkout_protocol_#{p.protocol.to_s.underscore}': '#{escape_javascript(p.full_command(checkout_path))}'"}.join(', ') %>});
<%- if Setting.checkout_use_zero_clipboard? %>ZeroClipboard.setMoviePath( '<%= image_path('ZeroClipboard.swf', :plugin => 'redmine_checkout') %>' );<% end %>
<% end %>
</div>
<% end%>
</div>
<div style="clear: left"></div>
<% content_for :header_tags do %>
<%= stylesheet_link_tag 'checkout', :plugin => 'redmine_checkout' %>
<%= javascript_include_tag 'checkout', :plugin => 'redmine_checkout' %>
<%= (javascript_include_tag 'ZeroClipboard', :plugin => 'redmine_checkout') if Setting.checkout_use_zero_clipboard? %>
<% end %>
\ No newline at end of file
<% form_tag({:action => 'edit', :tab => 'checkout'}) do %>
<% javascript_tag do %>
protocolForms = $H();
document.observe("dom:loaded", function() {
$('tab-content-checkout').select('fieldset.collapsed').each(function(e){
e.down('div').hide();
});
<%
CheckoutHelper.supported_scm.select{|scm| Setting.enabled_scm.include?(scm)}.each do |scm|
next if Setting.send("checkout_overwrite_description_#{scm}?")
-%>
$('settings_checkout_description_<%= scm %>').up('div').up('div').hide();
<%- end %>
});
<% end %>
<div class="box tabular settings">
<p><%= setting_check_box :checkout_display_checkout_info %></p>
<p><%= setting_text_area :checkout_description_Abstract, :cols => 60, :rows => 5, :class => 'wiki-edit', :label => :field_description %></p>
<%= wikitoolbar_for 'settings_checkout_description_Abstract' %>
<p><%= setting_check_box :checkout_use_zero_clipboard %></p>
<% CheckoutHelper.supported_scm.select{|scm| Setting.enabled_scm.include?(scm)}.each do |scm| -%>
<fieldset class="collapsible collapsed">
<legend onclick="toggleFieldset(this);"><%= "Repository::#{scm}".constantize.scm_name %></legend>
<div><%= render :partial => 'checkout_scm', :locals => {:scm => scm} %></div>
</fieldset>
<%- end %>
</div>
<%= submit_tag l(:button_save) %>
<%- end %>
<% content_for :header_tags do %>
<%= javascript_include_tag 'subform', :plugin => 'redmine_checkout' %>
<%= stylesheet_link_tag 'checkout', :plugin => 'redmine_checkout' %>
<% end %>
<%
index ||= "--INDEX--"
classes ||= ""
protocol = Checkout::Protocol.new(protocol) unless protocol.is_a? Checkout::Protocol
%>
<tr id="<%= "checkout_protocols_#{scm}_#{index}" %>" class="<%= classes %>" <%= 'style="display:none"' if index == '--INDEX--' %>>
<td class="protocol_protocol" ><%= text_field_tag "settings[checkout_protocols_#{scm}][#{index}][protocol]", protocol.protocol, :size => 10 %></td>
<td class="protocol_command" ><%= text_field_tag "settings[checkout_protocols_#{scm}][#{index}][command]", protocol.command, :size => 15 %></td>
<td class="protocol_regex" ><%= text_field_tag "settings[checkout_protocols_#{scm}][#{index}][regex]", protocol.regex, :size => 30 %></td>
<td class="protocol_regex_replacement"><%= text_field_tag "settings[checkout_protocols_#{scm}][#{index}][regex_replacement]", protocol.regex_replacement, :size => 30 %></td>
<td class="protocol_access" ><%= select_tag "settings[checkout_protocols_#{scm}][#{index}][access]", options_for_select([
[l(:label_access_read_write), 'read+write'],
[l(:label_access_read_only), 'read-only'],
[l(:label_access_permission), 'permission']], protocol.access) %></td>
<td class="protocol_append_path"><%= check_box_tag "settings[checkout_protocols_#{scm}][#{index}][append_path]", 1, protocol.append_path? %></td>
<td class="protocol_is_default"><%= check_box_tag "settings[checkout_protocols_#{scm}][#{index}][is_default]", 1, protocol.default? %></td>
<td class="protocol_delete"><%= image_to_function 'delete.png', "var e=$('checkout_protocols_#{scm}_#{index}');var parent=e.up(\"tbody\");e.remove();recalculate_even_odd(parent);return false" %></td>
</tr>
<div>
<p><%= setting_check_box "checkout_overwrite_description_#{scm}", :label => :setting_checkout_overwrite_description, :onclick => <<-EOF
Effect.toggle($('settings_checkout_description_#{scm}').up("div").up("div"), 'slide', {duration:0.2});
EOF
%></p>
<div>
<p><%= setting_text_area "checkout_description_#{scm}", :cols => 60, :rows => 5, :class => 'wiki-edit', :label => :field_description %></p>
<%= wikitoolbar_for "settings_checkout_description_#{scm}" %>
</div>
<% if scm == 'Subversion' %>
<p><%= setting_select "checkout_display_login",[
[l(:label_display_login_username), 'username'],
[l(:label_display_login_password), 'password']
],
:blank => :label_display_login_none %></p>
<% end %>
<p><%= setting_check_box "checkout_display_command_#{scm}", :label => :field_checkout_display_command %></p>
<% javascript_tag do %>
<% repo = "Repository::#{scm}".constantize %>
var subform = new Subform('<%= escape_javascript(render(:partial => "checkout_protocol", :locals => {:protocol => Checkout::Protocol.new({:protocol => repo.scm_name, :append_path => (repo.allow_subtree_checkout? ? '1' : '0'), :command => repo.checkout_default_command}), :scm => scm})) %>',<%= Setting.send("checkout_protocols_#{scm}").length %>,'settings_checkout_protocols_<%= scm %>');
protocolForms.set('<%= scm %>', subform);
<% end %>
<p><label><%=l :label_protocol_plural %></label><%=l :help_checkout_protocols %></p>
<table class="list checkout_protocol_table">
<thead><tr>
<th class="protocol_protocol" ><%= l(:setting_protocol)%></th>
<th class="protocol_command" ><%= l(:setting_checkout_command)%></th>
<th class="protocol_regex" ><%= l(:setting_checkout_url_regex) %></th>
<th class="protocol_regex_replacement"><%= l(:setting_checkout_url_regex_replacement) %></th>
<th class="protocol_access" ><%= l(:label_permissions) %></th>
<th class="protocol_append_path" ><%= l(:label_append_path) %></th>
<th class="protocol_is_default" ><%= l(:label_default) %></th>
<th class="protocol_delete" ></th>
</tr></thead>
<tbody id="settings_checkout_protocols_<%= scm %>">
<% Setting.send("checkout_protocols_#{scm}").each_with_index do |protocol, index| %>
<%= render :partial => 'checkout_protocol', :locals => {:protocol => Checkout::Protocol.new(protocol), :scm => scm, :index => index, :classes => cycle('odd', 'even')} %>
<% end %>
</tbody>
</table>
<div style="text-align: right"><%= link_to_function l(:button_add_protocol), "protocolForms.get('#{scm}').add()", {:class => "icon icon-add"} %></div>
</div>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment