Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cac7b0423f |
@@ -83,9 +83,9 @@ class AccountController < ApplicationController
|
||||
else
|
||||
@user = User.new(params[:user])
|
||||
@user.admin = false
|
||||
@user.register
|
||||
@user.status = User::STATUS_REGISTERED
|
||||
if session[:auth_source_registration]
|
||||
@user.activate
|
||||
@user.status = User::STATUS_ACTIVE
|
||||
@user.login = session[:auth_source_registration][:login]
|
||||
@user.auth_source_id = session[:auth_source_registration][:auth_source_id]
|
||||
if @user.save
|
||||
@@ -116,8 +116,8 @@ class AccountController < ApplicationController
|
||||
token = Token.find_by_action_and_value('register', params[:token])
|
||||
redirect_to(home_url) && return unless token and !token.expired?
|
||||
user = token.user
|
||||
redirect_to(home_url) && return unless user.registered?
|
||||
user.activate
|
||||
redirect_to(home_url) && return unless user.status == User::STATUS_REGISTERED
|
||||
user.status = User::STATUS_ACTIVE
|
||||
if user.save
|
||||
token.destroy
|
||||
flash[:notice] = l(:notice_account_activated)
|
||||
@@ -170,7 +170,7 @@ class AccountController < ApplicationController
|
||||
user.mail = registration['email'] unless registration['email'].nil?
|
||||
user.firstname, user.lastname = registration['fullname'].split(' ') unless registration['fullname'].nil?
|
||||
user.random_password
|
||||
user.register
|
||||
user.status = User::STATUS_REGISTERED
|
||||
|
||||
case Setting.self_registration
|
||||
when '1'
|
||||
@@ -241,7 +241,7 @@ class AccountController < ApplicationController
|
||||
# Pass a block for behavior when a user fails to save
|
||||
def register_automatically(user, &block)
|
||||
# Automatic activation
|
||||
user.activate
|
||||
user.status = User::STATUS_ACTIVE
|
||||
user.last_login_on = Time.now
|
||||
if user.save
|
||||
self.logged_user = user
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
class ActivitiesController < ApplicationController
|
||||
menu_item :activity
|
||||
before_filter :find_optional_project
|
||||
accept_key_auth :index
|
||||
|
||||
def index
|
||||
@days = Setting.activity_days_default.to_i
|
||||
|
||||
if params[:from]
|
||||
begin; @date_to = params[:from].to_date + 1; rescue; end
|
||||
end
|
||||
|
||||
@date_to ||= Date.today + 1
|
||||
@date_from = @date_to - @days
|
||||
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
|
||||
@author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id]))
|
||||
|
||||
@activity = Redmine::Activity::Fetcher.new(User.current, :project => @project,
|
||||
:with_subprojects => @with_subprojects,
|
||||
:author => @author)
|
||||
@activity.scope_select {|t| !params["show_#{t}"].nil?}
|
||||
@activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty?
|
||||
|
||||
events = @activity.events(@date_from, @date_to)
|
||||
|
||||
if events.empty? || stale?(:etag => [events.first, User.current])
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
@events_by_day = events.group_by(&:event_date)
|
||||
render :layout => false if request.xhr?
|
||||
}
|
||||
format.atom {
|
||||
title = l(:label_activity)
|
||||
if @author
|
||||
title = @author.name
|
||||
elsif @activity.scope.size == 1
|
||||
title = l("label_#{@activity.scope.first.singularize}_plural")
|
||||
end
|
||||
render_feed(events, :title => "#{@project || Setting.app_title}: #{title}")
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# TODO: refactor, duplicated in projects_controller
|
||||
def find_optional_project
|
||||
return true unless params[:id]
|
||||
@project = Project.find(params[:id])
|
||||
authorize
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
end
|
||||
@@ -201,23 +201,7 @@ class ApplicationController < ActionController::Base
|
||||
def self.model_object(model)
|
||||
write_inheritable_attribute('model_object', model)
|
||||
end
|
||||
|
||||
# Filter for bulk issue operations
|
||||
def find_issues
|
||||
@issues = Issue.find_all_by_id(params[:id] || params[:ids])
|
||||
raise ActiveRecord::RecordNotFound if @issues.empty?
|
||||
projects = @issues.collect(&:project).compact.uniq
|
||||
if projects.size == 1
|
||||
@project = projects.first
|
||||
else
|
||||
# TODO: let users bulk edit/move/destroy issues from different projects
|
||||
render_error 'Can not bulk edit/move/destroy issues from different projects'
|
||||
return false
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
|
||||
# make sure that the user is a member of the project (or admin) if project is private
|
||||
# used as a before_filter for actions that do not require any particular permission on the project
|
||||
def check_project_privacy
|
||||
@@ -234,10 +218,6 @@ class ApplicationController < ActionController::Base
|
||||
end
|
||||
end
|
||||
|
||||
def back_url
|
||||
params[:back_url] || request.env['HTTP_REFERER']
|
||||
end
|
||||
|
||||
def redirect_back_or_default(default)
|
||||
back_url = CGI.unescape(params[:back_url].to_s)
|
||||
if !back_url.blank?
|
||||
@@ -258,7 +238,7 @@ class ApplicationController < ActionController::Base
|
||||
def render_403
|
||||
@project = nil
|
||||
respond_to do |format|
|
||||
format.html { render :template => "common/403", :layout => use_layout, :status => 403 }
|
||||
format.html { render :template => "common/403", :layout => (request.xhr? ? false : 'base'), :status => 403 }
|
||||
format.atom { head 403 }
|
||||
format.xml { head 403 }
|
||||
format.js { head 403 }
|
||||
@@ -269,7 +249,7 @@ class ApplicationController < ActionController::Base
|
||||
|
||||
def render_404
|
||||
respond_to do |format|
|
||||
format.html { render :template => "common/404", :layout => use_layout, :status => 404 }
|
||||
format.html { render :template => "common/404", :layout => !request.xhr?, :status => 404 }
|
||||
format.atom { head 404 }
|
||||
format.xml { head 404 }
|
||||
format.js { head 404 }
|
||||
@@ -282,7 +262,7 @@ class ApplicationController < ActionController::Base
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
flash.now[:error] = msg
|
||||
render :text => '', :layout => use_layout, :status => 500
|
||||
render :text => '', :layout => !request.xhr?, :status => 500
|
||||
}
|
||||
format.atom { head 500 }
|
||||
format.xml { head 500 }
|
||||
@@ -290,13 +270,6 @@ class ApplicationController < ActionController::Base
|
||||
format.json { head 500 }
|
||||
end
|
||||
end
|
||||
|
||||
# Picks which layout to use based on the request
|
||||
#
|
||||
# @return [boolean, string] name of the layout to use or false for no layout
|
||||
def use_layout
|
||||
request.xhr? ? false : 'base'
|
||||
end
|
||||
|
||||
def invalid_authenticity_token
|
||||
if api_request?
|
||||
@@ -372,21 +345,6 @@ class ApplicationController < ActionController::Base
|
||||
flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present?
|
||||
end
|
||||
|
||||
# Sets the `flash` notice or error based the number of issues that did not save
|
||||
#
|
||||
# @param [Array, Issue] issues all of the saved and unsaved Issues
|
||||
# @param [Array, Integer] unsaved_issue_ids the issue ids that were not saved
|
||||
def set_flash_from_bulk_issue_save(issues, unsaved_issue_ids)
|
||||
if unsaved_issue_ids.empty?
|
||||
flash[:notice] = l(:notice_successful_update) unless issues.empty?
|
||||
else
|
||||
flash[:error] = l(:notice_failed_to_save_issues,
|
||||
:count => unsaved_issue_ids.size,
|
||||
:total => issues.size,
|
||||
:ids => '#' + unsaved_issue_ids.join(', #'))
|
||||
end
|
||||
end
|
||||
|
||||
# Rescues an invalid query statement. Just in case...
|
||||
def query_statement_invalid(exception)
|
||||
logger.error "Query::StatementInvalid: #{exception.message}" if logger
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
class AutoCompletesController < ApplicationController
|
||||
before_filter :find_project
|
||||
|
||||
def issues
|
||||
@issues = []
|
||||
q = params[:q].to_s
|
||||
if q.match(/^\d+$/)
|
||||
@issues << @project.issues.visible.find_by_id(q.to_i)
|
||||
end
|
||||
unless q.blank?
|
||||
@issues += @project.issues.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
|
||||
end
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_project
|
||||
project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
|
||||
@project = Project.find(project_id)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
end
|
||||
@@ -18,7 +18,6 @@
|
||||
class BoardsController < ApplicationController
|
||||
default_search_scope :messages
|
||||
before_filter :find_project, :find_board_if_available, :authorize
|
||||
accept_key_auth :index, :show
|
||||
|
||||
helper :messages
|
||||
include MessagesHelper
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
class CalendarsController < ApplicationController
|
||||
menu_item :calendar
|
||||
before_filter :find_optional_project
|
||||
|
||||
rescue_from Query::StatementInvalid, :with => :query_statement_invalid
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
class ContextMenusController < ApplicationController
|
||||
helper :watchers
|
||||
|
||||
def issues
|
||||
@issues = Issue.find_all_by_id(params[:ids], :include => :project)
|
||||
if (@issues.size == 1)
|
||||
@issue = @issues.first
|
||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
||||
else
|
||||
@allowed_statuses = @issues.map do |i|
|
||||
i.new_statuses_allowed_to(User.current)
|
||||
end.inject do |memo,s|
|
||||
memo & s
|
||||
end
|
||||
end
|
||||
@projects = @issues.collect(&:project).compact.uniq
|
||||
@project = @projects.first if @projects.size == 1
|
||||
|
||||
@can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
|
||||
:log_time => (@project && User.current.allowed_to?(:log_time, @project)),
|
||||
:update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))),
|
||||
:move => (@project && User.current.allowed_to?(:move_issues, @project)),
|
||||
:copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
|
||||
:delete => (@project && User.current.allowed_to?(:delete_issues, @project))
|
||||
}
|
||||
if @project
|
||||
@assignables = @project.assignable_users
|
||||
@assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
|
||||
@trackers = @project.trackers
|
||||
end
|
||||
|
||||
@priorities = IssuePriority.all.reverse
|
||||
@statuses = IssueStatus.find(:all, :order => 'position')
|
||||
@back = back_url
|
||||
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,37 +0,0 @@
|
||||
class FilesController < ApplicationController
|
||||
menu_item :files
|
||||
|
||||
before_filter :find_project
|
||||
before_filter :authorize
|
||||
|
||||
helper :sort
|
||||
include SortHelper
|
||||
|
||||
def index
|
||||
sort_init 'filename', 'asc'
|
||||
sort_update 'filename' => "#{Attachment.table_name}.filename",
|
||||
'created_on' => "#{Attachment.table_name}.created_on",
|
||||
'size' => "#{Attachment.table_name}.filesize",
|
||||
'downloads' => "#{Attachment.table_name}.downloads"
|
||||
|
||||
@containers = [ Project.find(@project.id, :include => :attachments, :order => sort_clause)]
|
||||
@containers += @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse
|
||||
render :layout => !request.xhr?
|
||||
end
|
||||
|
||||
# TODO: split method into new (GET) and create (POST)
|
||||
def new
|
||||
if request.post?
|
||||
container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id]))
|
||||
attachments = Attachment.attach_files(container, params[:attachments])
|
||||
render_attachment_warning_if_needed(container)
|
||||
|
||||
if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added')
|
||||
Mailer.deliver_attachments_added(attachments[:files])
|
||||
end
|
||||
redirect_to :controller => 'files', :action => 'index', :id => @project
|
||||
return
|
||||
end
|
||||
@versions = @project.versions.sort
|
||||
end
|
||||
end
|
||||
@@ -1,5 +1,4 @@
|
||||
class GanttsController < ApplicationController
|
||||
menu_item :gantt
|
||||
before_filter :find_optional_project
|
||||
|
||||
rescue_from Query::StatementInvalid, :with => :query_statement_invalid
|
||||
@@ -38,7 +37,7 @@ class GanttsController < ApplicationController
|
||||
|
||||
respond_to do |format|
|
||||
format.html { render :action => "show", :layout => !request.xhr? }
|
||||
format.png { send_data(@gantt.to_image(@project), :disposition => 'inline', :type => 'image/png', :filename => "#{basename}.png") } if @gantt.respond_to?('to_image')
|
||||
format.png { send_data(@gantt.to_image, :disposition => 'inline', :type => 'image/png', :filename => "#{basename}.png") } if @gantt.respond_to?('to_image')
|
||||
format.pdf { send_data(gantt_to_pdf(@gantt, @project), :type => 'application/pdf', :filename => "#{basename}.pdf") }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -141,22 +141,14 @@ class GroupsController < ApplicationController
|
||||
@membership = Member.edit_membership(params[:membership_id], params[:membership], @group)
|
||||
@membership.save if request.post?
|
||||
respond_to do |format|
|
||||
if @membership.valid?
|
||||
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' }
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.replace_html "tab-content-memberships", :partial => 'groups/memberships'
|
||||
page.visual_effect(:highlight, "member-#{@membership.id}")
|
||||
}
|
||||
}
|
||||
else
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.alert(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', ')))
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'memberships' }
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.replace_html "tab-content-memberships", :partial => 'groups/memberships'
|
||||
page.visual_effect(:highlight, "member-#{@membership.id}")
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def destroy_membership
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
class IssueMovesController < ApplicationController
|
||||
default_search_scope :issues
|
||||
before_filter :find_issues
|
||||
before_filter :authorize
|
||||
|
||||
def new
|
||||
prepare_for_issue_move
|
||||
render :layout => false if request.xhr?
|
||||
end
|
||||
|
||||
def create
|
||||
prepare_for_issue_move
|
||||
|
||||
if request.post?
|
||||
new_tracker = params[:new_tracker_id].blank? ? nil : @target_project.trackers.find_by_id(params[:new_tracker_id])
|
||||
unsaved_issue_ids = []
|
||||
moved_issues = []
|
||||
@issues.each do |issue|
|
||||
issue.reload
|
||||
issue.init_journal(User.current)
|
||||
call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy })
|
||||
if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)})
|
||||
moved_issues << r
|
||||
else
|
||||
unsaved_issue_ids << issue.id
|
||||
end
|
||||
end
|
||||
set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
|
||||
|
||||
if params[:follow]
|
||||
if @issues.size == 1 && moved_issues.size == 1
|
||||
redirect_to :controller => 'issues', :action => 'show', :id => moved_issues.first
|
||||
else
|
||||
redirect_to :controller => 'issues', :action => 'index', :project_id => (@target_project || @project)
|
||||
end
|
||||
else
|
||||
redirect_to :controller => 'issues', :action => 'index', :project_id => @project
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def prepare_for_issue_move
|
||||
@issues.sort!
|
||||
@copy = params[:copy_options] && params[:copy_options][:copy]
|
||||
@allowed_projects = Issue.allowed_target_projects_on_move
|
||||
@target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
|
||||
@target_project ||= @project
|
||||
@trackers = @target_project.trackers
|
||||
@available_statuses = Workflow.available_statuses(@project)
|
||||
end
|
||||
|
||||
def extract_changed_attributes_for_move(params)
|
||||
changed_attributes = {}
|
||||
[:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute|
|
||||
unless params[valid_attribute].blank?
|
||||
changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
|
||||
end
|
||||
end
|
||||
changed_attributes
|
||||
end
|
||||
|
||||
end
|
||||
@@ -19,14 +19,14 @@ class IssuesController < ApplicationController
|
||||
menu_item :new_issue, :only => [:new, :create]
|
||||
default_search_scope :issues
|
||||
|
||||
before_filter :find_issue, :only => [:show, :edit, :update]
|
||||
before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy]
|
||||
before_filter :find_project, :only => [:new, :create]
|
||||
before_filter :authorize, :except => [:index]
|
||||
before_filter :find_optional_project, :only => [:index]
|
||||
before_filter :find_issue, :only => [:show, :edit, :update, :reply]
|
||||
before_filter :find_issues, :only => [:bulk_edit, :move, :destroy]
|
||||
before_filter :find_project, :only => [:new, :create, :update_form, :preview, :auto_complete]
|
||||
before_filter :authorize, :except => [:index, :changes, :preview, :context_menu]
|
||||
before_filter :find_optional_project, :only => [:index, :changes]
|
||||
before_filter :check_for_default_issue_status, :only => [:new, :create]
|
||||
before_filter :build_new_issue_from_params, :only => [:new, :create]
|
||||
accept_key_auth :index, :show
|
||||
accept_key_auth :index, :show, :changes
|
||||
|
||||
rescue_from Query::StatementInvalid, :with => :query_statement_invalid
|
||||
|
||||
@@ -54,7 +54,6 @@ class IssuesController < ApplicationController
|
||||
:render => { :nothing => true, :status => :method_not_allowed }
|
||||
|
||||
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
||||
verify :method => :post, :only => :bulk_update, :render => {:nothing => true, :status => :method_not_allowed }
|
||||
verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
||||
|
||||
def index
|
||||
@@ -96,6 +95,21 @@ class IssuesController < ApplicationController
|
||||
render_404
|
||||
end
|
||||
|
||||
def changes
|
||||
retrieve_query
|
||||
sort_init 'id', 'desc'
|
||||
sort_update(@query.sortable_columns)
|
||||
|
||||
if @query.valid?
|
||||
@journals = @query.journals(:order => "#{Journal.table_name}.created_on DESC",
|
||||
:limit => 25)
|
||||
end
|
||||
@title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name)
|
||||
render :layout => false, :content_type => 'application/atom+xml'
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def show
|
||||
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
|
||||
@journals.each_with_index {|j,i| j.indice = i+1}
|
||||
@@ -110,7 +124,7 @@ class IssuesController < ApplicationController
|
||||
format.html { render :template => 'issues/show.rhtml' }
|
||||
format.xml { render :layout => false }
|
||||
format.json { render :text => @issue.to_json, :layout => false }
|
||||
format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' }
|
||||
format.atom { render :action => 'changes', :layout => false, :content_type => 'application/atom+xml' }
|
||||
format.pdf { send_data(issue_to_pdf(@issue), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") }
|
||||
end
|
||||
end
|
||||
@@ -118,10 +132,7 @@ class IssuesController < ApplicationController
|
||||
# Add a new issue
|
||||
# The new issue will be created from an existing one if copy_from parameter is given
|
||||
def new
|
||||
respond_to do |format|
|
||||
format.html { render :action => 'new', :layout => !request.xhr? }
|
||||
format.js { render :partial => 'attributes' }
|
||||
end
|
||||
render :action => 'new', :layout => !request.xhr?
|
||||
end
|
||||
|
||||
def create
|
||||
@@ -133,7 +144,7 @@ class IssuesController < ApplicationController
|
||||
call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue})
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
redirect_to(params[:continue] ? { :action => 'new', :project_id => @project, :issue => {:tracker_id => @issue.tracker, :parent_issue_id => @issue.parent_issue_id}.reject {|k,v| v.nil?} } :
|
||||
redirect_to(params[:continue] ? { :action => 'new', :issue => {:tracker_id => @issue.tracker, :parent_issue_id => @issue.parent_issue_id}.reject {|k,v| v.nil?} } :
|
||||
{ :action => 'show', :id => @issue })
|
||||
}
|
||||
format.xml { render :action => 'show', :status => :created, :location => url_for(:controller => 'issues', :action => 'show', :id => @issue) }
|
||||
@@ -189,30 +200,98 @@ class IssuesController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def reply
|
||||
journal = Journal.find(params[:journal_id]) if params[:journal_id]
|
||||
if journal
|
||||
user = journal.user
|
||||
text = journal.notes
|
||||
else
|
||||
user = @issue.author
|
||||
text = @issue.description
|
||||
end
|
||||
# Replaces pre blocks with [...]
|
||||
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
|
||||
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
|
||||
content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
|
||||
|
||||
render(:update) { |page|
|
||||
page.<< "$('notes').value = \"#{escape_javascript content}\";"
|
||||
page.show 'update'
|
||||
page << "Form.Element.focus('notes');"
|
||||
page << "Element.scrollTo('update');"
|
||||
page << "$('notes').scrollTop = $('notes').scrollHeight - $('notes').clientHeight;"
|
||||
}
|
||||
end
|
||||
|
||||
# Bulk edit a set of issues
|
||||
def bulk_edit
|
||||
@issues.sort!
|
||||
if request.post?
|
||||
attributes = (params[:issue] || {}).reject {|k,v| v.blank?}
|
||||
attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
|
||||
attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
|
||||
|
||||
unsaved_issue_ids = []
|
||||
@issues.each do |issue|
|
||||
issue.reload
|
||||
journal = issue.init_journal(User.current, params[:notes])
|
||||
issue.safe_attributes = attributes
|
||||
call_hook(:controller_issues_bulk_edit_before_save, { :params => params, :issue => issue })
|
||||
unless issue.save
|
||||
# Keep unsaved issue ids to display them in flash error
|
||||
unsaved_issue_ids << issue.id
|
||||
end
|
||||
end
|
||||
set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
|
||||
redirect_back_or_default({:controller => 'issues', :action => 'index', :project_id => @project})
|
||||
return
|
||||
end
|
||||
@available_statuses = Workflow.available_statuses(@project)
|
||||
@custom_fields = @project.all_issue_custom_fields
|
||||
end
|
||||
|
||||
def bulk_update
|
||||
def move
|
||||
@issues.sort!
|
||||
attributes = parse_params_for_bulk_issue_attributes(params)
|
||||
|
||||
unsaved_issue_ids = []
|
||||
@issues.each do |issue|
|
||||
issue.reload
|
||||
journal = issue.init_journal(User.current, params[:notes])
|
||||
issue.safe_attributes = attributes
|
||||
call_hook(:controller_issues_bulk_edit_before_save, { :params => params, :issue => issue })
|
||||
unless issue.save
|
||||
# Keep unsaved issue ids to display them in flash error
|
||||
unsaved_issue_ids << issue.id
|
||||
@copy = params[:copy_options] && params[:copy_options][:copy]
|
||||
@allowed_projects = Issue.allowed_target_projects_on_move
|
||||
@target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
|
||||
@target_project ||= @project
|
||||
@trackers = @target_project.trackers
|
||||
@available_statuses = Workflow.available_statuses(@project)
|
||||
if request.post?
|
||||
new_tracker = params[:new_tracker_id].blank? ? nil : @target_project.trackers.find_by_id(params[:new_tracker_id])
|
||||
unsaved_issue_ids = []
|
||||
moved_issues = []
|
||||
@issues.each do |issue|
|
||||
issue.reload
|
||||
changed_attributes = {}
|
||||
[:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute|
|
||||
unless params[valid_attribute].blank?
|
||||
changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
|
||||
end
|
||||
end
|
||||
issue.init_journal(User.current)
|
||||
call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy })
|
||||
if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => changed_attributes})
|
||||
moved_issues << r
|
||||
else
|
||||
unsaved_issue_ids << issue.id
|
||||
end
|
||||
end
|
||||
set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
|
||||
|
||||
if params[:follow]
|
||||
if @issues.size == 1 && moved_issues.size == 1
|
||||
redirect_to :controller => 'issues', :action => 'show', :id => moved_issues.first
|
||||
else
|
||||
redirect_to :controller => 'issues', :action => 'index', :project_id => (@target_project || @project)
|
||||
end
|
||||
else
|
||||
redirect_to :controller => 'issues', :action => 'index', :project_id => @project
|
||||
end
|
||||
return
|
||||
end
|
||||
set_flash_from_bulk_issue_save(@issues, unsaved_issue_ids)
|
||||
redirect_back_or_default({:controller => 'issues', :action => 'index', :project_id => @project})
|
||||
render :layout => false if request.xhr?
|
||||
end
|
||||
|
||||
def destroy
|
||||
@@ -245,7 +324,77 @@ class IssuesController < ApplicationController
|
||||
format.json { head :ok }
|
||||
end
|
||||
end
|
||||
|
||||
def context_menu
|
||||
@issues = Issue.find_all_by_id(params[:ids], :include => :project)
|
||||
if (@issues.size == 1)
|
||||
@issue = @issues.first
|
||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
||||
end
|
||||
projects = @issues.collect(&:project).compact.uniq
|
||||
@project = projects.first if projects.size == 1
|
||||
|
||||
@can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
|
||||
:log_time => (@project && User.current.allowed_to?(:log_time, @project)),
|
||||
:update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))),
|
||||
:move => (@project && User.current.allowed_to?(:move_issues, @project)),
|
||||
:copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
|
||||
:delete => (@project && User.current.allowed_to?(:delete_issues, @project))
|
||||
}
|
||||
if @project
|
||||
@assignables = @project.assignable_users
|
||||
@assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
|
||||
@trackers = @project.trackers
|
||||
end
|
||||
|
||||
@priorities = IssuePriority.all.reverse
|
||||
@statuses = IssueStatus.find(:all, :order => 'position')
|
||||
@back = params[:back_url] || request.env['HTTP_REFERER']
|
||||
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
def update_form
|
||||
if params[:id].blank?
|
||||
@issue = Issue.new
|
||||
@issue.project = @project
|
||||
else
|
||||
@issue = @project.issues.visible.find(params[:id])
|
||||
end
|
||||
@issue.attributes = params[:issue]
|
||||
@allowed_statuses = ([@issue.status] + @issue.status.find_new_statuses_allowed_to(User.current.roles_for_project(@project), @issue.tracker)).uniq
|
||||
@priorities = IssuePriority.all
|
||||
|
||||
render :partial => 'attributes'
|
||||
end
|
||||
|
||||
def preview
|
||||
@issue = @project.issues.find_by_id(params[:id]) unless params[:id].blank?
|
||||
if @issue
|
||||
@attachements = @issue.attachments
|
||||
@description = params[:issue] && params[:issue][:description]
|
||||
if @description && @description.gsub(/(\r?\n|\n\r?)/, "\n") == @issue.description.to_s.gsub(/(\r?\n|\n\r?)/, "\n")
|
||||
@description = nil
|
||||
end
|
||||
@notes = params[:notes]
|
||||
else
|
||||
@description = (params[:issue] ? params[:issue][:description] : nil)
|
||||
end
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
def auto_complete
|
||||
@issues = []
|
||||
q = params[:q].to_s
|
||||
if q.match(/^\d+$/)
|
||||
@issues << @project.issues.visible.find_by_id(q.to_i)
|
||||
end
|
||||
unless q.blank?
|
||||
@issues += @project.issues.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
|
||||
end
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
private
|
||||
def find_issue
|
||||
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
|
||||
@@ -254,6 +403,22 @@ private
|
||||
render_404
|
||||
end
|
||||
|
||||
# Filter for bulk operations
|
||||
def find_issues
|
||||
@issues = Issue.find_all_by_id(params[:id] || params[:ids])
|
||||
raise ActiveRecord::RecordNotFound if @issues.empty?
|
||||
projects = @issues.collect(&:project).compact.uniq
|
||||
if projects.size == 1
|
||||
@project = projects.first
|
||||
else
|
||||
# TODO: let users bulk edit/move/destroy issues from different projects
|
||||
render_error 'Can not bulk edit/move/destroy issues from different projects'
|
||||
return false
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def find_project
|
||||
project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
|
||||
@project = Project.find(project_id)
|
||||
@@ -270,7 +435,7 @@ private
|
||||
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
||||
@time_entry = TimeEntry.new
|
||||
|
||||
@notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil)
|
||||
@notes = params[:notes]
|
||||
@issue.init_journal(User.current, @notes)
|
||||
# User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
|
||||
if (@edit_allowed || !@allowed_statuses.empty?) && params[:issue]
|
||||
@@ -283,16 +448,9 @@ private
|
||||
end
|
||||
|
||||
# TODO: Refactor, lots of extra code in here
|
||||
# TODO: Changing tracker on an existing issue should not trigger this
|
||||
def build_new_issue_from_params
|
||||
if params[:id].blank?
|
||||
@issue = Issue.new
|
||||
@issue.copy_from(params[:copy_from]) if params[:copy_from]
|
||||
@issue.project = @project
|
||||
else
|
||||
@issue = @project.issues.visible.find(params[:id])
|
||||
end
|
||||
|
||||
@issue = Issue.new
|
||||
@issue.copy_from(params[:copy_from]) if params[:copy_from]
|
||||
@issue.project = @project
|
||||
# Tracker must be set before custom field values
|
||||
@issue.tracker ||= @project.trackers.find((params[:issue] && params[:issue][:tracker_id]) || params[:tracker_id] || :first)
|
||||
@@ -302,9 +460,7 @@ private
|
||||
end
|
||||
if params[:issue].is_a?(Hash)
|
||||
@issue.safe_attributes = params[:issue]
|
||||
if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record?
|
||||
@issue.watcher_user_ids = params[:issue]['watcher_user_ids']
|
||||
end
|
||||
@issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project)
|
||||
end
|
||||
@issue.author = User.current
|
||||
@issue.start_date ||= Date.today
|
||||
@@ -312,17 +468,21 @@ private
|
||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current, true)
|
||||
end
|
||||
|
||||
def set_flash_from_bulk_issue_save(issues, unsaved_issue_ids)
|
||||
if unsaved_issue_ids.empty?
|
||||
flash[:notice] = l(:notice_successful_update) unless issues.empty?
|
||||
else
|
||||
flash[:error] = l(:notice_failed_to_save_issues,
|
||||
:count => unsaved_issue_ids.size,
|
||||
:total => issues.size,
|
||||
:ids => '#' + unsaved_issue_ids.join(', #'))
|
||||
end
|
||||
end
|
||||
|
||||
def check_for_default_issue_status
|
||||
if IssueStatus.default.nil?
|
||||
render_error l(:error_no_default_issue_status)
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
def parse_params_for_bulk_issue_attributes(params)
|
||||
attributes = (params[:issue] || {}).reject {|k,v| v.blank?}
|
||||
attributes.keys.each {|k| attributes[k] = '' if attributes[k] == 'none'}
|
||||
attributes[:custom_field_values].reject! {|k,v| v.blank?} if attributes[:custom_field_values]
|
||||
attributes
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,54 +16,7 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
class JournalsController < ApplicationController
|
||||
before_filter :find_journal, :only => [:edit]
|
||||
before_filter :find_issue, :only => [:new]
|
||||
before_filter :find_optional_project, :only => [:index]
|
||||
accept_key_auth :index
|
||||
|
||||
helper :issues
|
||||
helper :queries
|
||||
include QueriesHelper
|
||||
helper :sort
|
||||
include SortHelper
|
||||
|
||||
def index
|
||||
retrieve_query
|
||||
sort_init 'id', 'desc'
|
||||
sort_update(@query.sortable_columns)
|
||||
|
||||
if @query.valid?
|
||||
@journals = @query.journals(:order => "#{Journal.table_name}.created_on DESC",
|
||||
:limit => 25)
|
||||
end
|
||||
@title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name)
|
||||
render :layout => false, :content_type => 'application/atom+xml'
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def new
|
||||
journal = Journal.find(params[:journal_id]) if params[:journal_id]
|
||||
if journal
|
||||
user = journal.user
|
||||
text = journal.notes
|
||||
else
|
||||
user = @issue.author
|
||||
text = @issue.description
|
||||
end
|
||||
# Replaces pre blocks with [...]
|
||||
text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
|
||||
content = "#{ll(Setting.default_language, :text_user_wrote, user)}\n> "
|
||||
content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
|
||||
|
||||
render(:update) { |page|
|
||||
page.<< "$('notes').value = \"#{escape_javascript content}\";"
|
||||
page.show 'update'
|
||||
page << "Form.Element.focus('notes');"
|
||||
page << "Element.scrollTo('update');"
|
||||
page << "$('notes').scrollTop = $('notes').scrollHeight - $('notes').clientHeight;"
|
||||
}
|
||||
end
|
||||
before_filter :find_journal
|
||||
|
||||
def edit
|
||||
if request.post?
|
||||
@@ -85,12 +38,4 @@ private
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
# TODO: duplicated in IssuesController
|
||||
def find_issue
|
||||
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
|
||||
@project = @issue.project
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
class PreviewsController < ApplicationController
|
||||
before_filter :find_project
|
||||
|
||||
def issue
|
||||
@issue = @project.issues.find_by_id(params[:id]) unless params[:id].blank?
|
||||
if @issue
|
||||
@attachements = @issue.attachments
|
||||
@description = params[:issue] && params[:issue][:description]
|
||||
if @description && @description.gsub(/(\r?\n|\n\r?)/, "\n") == @issue.description.to_s.gsub(/(\r?\n|\n\r?)/, "\n")
|
||||
@description = nil
|
||||
end
|
||||
@notes = params[:notes]
|
||||
else
|
||||
@description = (params[:issue] ? params[:issue][:description] : nil)
|
||||
end
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_project
|
||||
project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
|
||||
@project = Project.find(project_id)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,26 +0,0 @@
|
||||
class ProjectEnumerationsController < ApplicationController
|
||||
before_filter :find_project
|
||||
before_filter :authorize
|
||||
|
||||
def save
|
||||
if request.post? && params[:enumerations]
|
||||
Project.transaction do
|
||||
params[:enumerations].each do |id, activity|
|
||||
@project.update_or_create_time_entry_activity(id, activity)
|
||||
end
|
||||
end
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
end
|
||||
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
|
||||
end
|
||||
|
||||
def destroy
|
||||
@project.time_entry_activities.each do |time_entry_activity|
|
||||
time_entry_activity.destroy(time_entry_activity.parent)
|
||||
end
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
|
||||
end
|
||||
|
||||
end
|
||||
@@ -17,24 +17,24 @@
|
||||
|
||||
class ProjectsController < ApplicationController
|
||||
menu_item :overview
|
||||
menu_item :activity, :only => :activity
|
||||
menu_item :roadmap, :only => :roadmap
|
||||
menu_item :files, :only => [:list_files, :add_file]
|
||||
menu_item :settings, :only => :settings
|
||||
|
||||
before_filter :find_project, :except => [ :index, :list, :new, :create, :copy ]
|
||||
before_filter :authorize, :except => [ :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy]
|
||||
before_filter :authorize_global, :only => [:new, :create]
|
||||
before_filter :find_project, :except => [ :index, :list, :add, :copy, :activity ]
|
||||
before_filter :find_optional_project, :only => :activity
|
||||
before_filter :authorize, :except => [ :index, :list, :add, :copy, :archive, :unarchive, :destroy, :activity ]
|
||||
before_filter :authorize_global, :only => :add
|
||||
before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ]
|
||||
accept_key_auth :index
|
||||
|
||||
after_filter :only => [:create, :edit, :update, :archive, :unarchive, :destroy] do |controller|
|
||||
accept_key_auth :activity, :index
|
||||
|
||||
after_filter :only => [:add, :edit, :archive, :unarchive, :destroy] do |controller|
|
||||
if controller.request.post?
|
||||
controller.send :expire_action, :controller => 'welcome', :action => 'robots.txt'
|
||||
end
|
||||
end
|
||||
|
||||
# TODO: convert to PUT only
|
||||
verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
||||
|
||||
|
||||
helper :sort
|
||||
include SortHelper
|
||||
helper :custom_fields
|
||||
@@ -63,45 +63,40 @@ class ProjectsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def new
|
||||
# Add a new project
|
||||
def add
|
||||
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
|
||||
@trackers = Tracker.all
|
||||
@project = Project.new(params[:project])
|
||||
|
||||
@project.identifier = Project.next_identifier if Setting.sequential_project_identifiers?
|
||||
@project.trackers = Tracker.all
|
||||
@project.is_public = Setting.default_projects_public?
|
||||
@project.enabled_module_names = Setting.default_projects_modules
|
||||
end
|
||||
|
||||
def create
|
||||
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
|
||||
@trackers = Tracker.all
|
||||
@project = Project.new(params[:project])
|
||||
|
||||
@project.enabled_module_names = params[:enabled_modules]
|
||||
if validate_parent_id && @project.save
|
||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||
# Add current user as a project member if he is not admin
|
||||
unless User.current.admin?
|
||||
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
|
||||
m = Member.new(:user => User.current, :roles => [r])
|
||||
@project.members << m
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
redirect_to :controller => 'projects', :action => 'settings', :id => @project
|
||||
}
|
||||
format.xml { head :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
|
||||
end
|
||||
if request.get?
|
||||
@project.identifier = Project.next_identifier if Setting.sequential_project_identifiers?
|
||||
@project.trackers = Tracker.all
|
||||
@project.is_public = Setting.default_projects_public?
|
||||
@project.enabled_module_names = Setting.default_projects_modules
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html { render :action => 'new' }
|
||||
format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
|
||||
@project.enabled_module_names = params[:enabled_modules]
|
||||
if validate_parent_id && @project.save
|
||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||
# Add current user as a project member if he is not admin
|
||||
unless User.current.admin?
|
||||
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
|
||||
m = Member.new(:user => User.current, :roles => [r])
|
||||
@project.members << m
|
||||
end
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
redirect_to :controller => 'projects', :action => 'settings', :id => @project
|
||||
}
|
||||
format.xml { head :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) }
|
||||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
def copy
|
||||
@@ -125,13 +120,13 @@ class ProjectsController < ApplicationController
|
||||
if validate_parent_id && @project.copy(@source_project, :only => params[:only])
|
||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
redirect_to :controller => 'projects', :action => 'settings'
|
||||
redirect_to :controller => 'admin', :action => 'projects'
|
||||
elsif !@project.new_record?
|
||||
# Project was created
|
||||
# But some objects were not copied due to validation failures
|
||||
# (eg. issues from disabled trackers)
|
||||
# TODO: inform about that
|
||||
redirect_to :controller => 'projects', :action => 'settings'
|
||||
redirect_to :controller => 'admin', :action => 'projects'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -182,27 +177,28 @@ class ProjectsController < ApplicationController
|
||||
@wiki ||= @project.wiki
|
||||
end
|
||||
|
||||
# Edit @project
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
@project.attributes = params[:project]
|
||||
if validate_parent_id && @project.save
|
||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to :action => 'settings', :id => @project
|
||||
}
|
||||
format.xml { head :ok }
|
||||
end
|
||||
if request.get?
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
settings
|
||||
render :action => 'settings'
|
||||
}
|
||||
format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
|
||||
@project.attributes = params[:project]
|
||||
if validate_parent_id && @project.save
|
||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to :action => 'settings', :id => @project
|
||||
}
|
||||
format.xml { head :ok }
|
||||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
settings
|
||||
render :action => 'settings'
|
||||
}
|
||||
format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -245,6 +241,120 @@ class ProjectsController < ApplicationController
|
||||
@project = nil
|
||||
end
|
||||
|
||||
def add_file
|
||||
if request.post?
|
||||
container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id]))
|
||||
attachments = Attachment.attach_files(container, params[:attachments])
|
||||
render_attachment_warning_if_needed(container)
|
||||
|
||||
if !attachments.empty? && Setting.notified_events.include?('file_added')
|
||||
Mailer.deliver_attachments_added(attachments[:files])
|
||||
end
|
||||
redirect_to :controller => 'projects', :action => 'list_files', :id => @project
|
||||
return
|
||||
end
|
||||
@versions = @project.versions.sort
|
||||
end
|
||||
|
||||
def save_activities
|
||||
if request.post? && params[:enumerations]
|
||||
Project.transaction do
|
||||
params[:enumerations].each do |id, activity|
|
||||
@project.update_or_create_time_entry_activity(id, activity)
|
||||
end
|
||||
end
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
end
|
||||
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
|
||||
end
|
||||
|
||||
def reset_activities
|
||||
@project.time_entry_activities.each do |time_entry_activity|
|
||||
time_entry_activity.destroy(time_entry_activity.parent)
|
||||
end
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to :controller => 'projects', :action => 'settings', :tab => 'activities', :id => @project
|
||||
end
|
||||
|
||||
def list_files
|
||||
sort_init 'filename', 'asc'
|
||||
sort_update 'filename' => "#{Attachment.table_name}.filename",
|
||||
'created_on' => "#{Attachment.table_name}.created_on",
|
||||
'size' => "#{Attachment.table_name}.filesize",
|
||||
'downloads' => "#{Attachment.table_name}.downloads"
|
||||
|
||||
@containers = [ Project.find(@project.id, :include => :attachments, :order => sort_clause)]
|
||||
@containers += @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse
|
||||
render :layout => !request.xhr?
|
||||
end
|
||||
|
||||
def roadmap
|
||||
@trackers = @project.trackers.find(:all, :order => 'position')
|
||||
retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
|
||||
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
|
||||
project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
|
||||
|
||||
@versions = @project.shared_versions || []
|
||||
@versions += @project.rolled_up_versions.visible if @with_subprojects
|
||||
@versions = @versions.uniq.sort
|
||||
@versions.reject! {|version| version.closed? || version.completed? } unless params[:completed]
|
||||
|
||||
@issues_by_version = {}
|
||||
unless @selected_tracker_ids.empty?
|
||||
@versions.each do |version|
|
||||
issues = version.fixed_issues.visible.find(:all,
|
||||
:include => [:project, :status, :tracker, :priority],
|
||||
:conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
|
||||
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
|
||||
@issues_by_version[version] = issues
|
||||
end
|
||||
end
|
||||
@versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
|
||||
end
|
||||
|
||||
def activity
|
||||
@days = Setting.activity_days_default.to_i
|
||||
|
||||
if params[:from]
|
||||
begin; @date_to = params[:from].to_date + 1; rescue; end
|
||||
end
|
||||
|
||||
@date_to ||= Date.today + 1
|
||||
@date_from = @date_to - @days
|
||||
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
|
||||
@author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id]))
|
||||
|
||||
@activity = Redmine::Activity::Fetcher.new(User.current, :project => @project,
|
||||
:with_subprojects => @with_subprojects,
|
||||
:author => @author)
|
||||
@activity.scope_select {|t| !params["show_#{t}"].nil?}
|
||||
@activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty?
|
||||
|
||||
events = @activity.events(@date_from, @date_to)
|
||||
|
||||
if events.empty? || stale?(:etag => [events.first, User.current])
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
@events_by_day = events.group_by(&:event_date)
|
||||
render :layout => false if request.xhr?
|
||||
}
|
||||
format.atom {
|
||||
title = l(:label_activity)
|
||||
if @author
|
||||
title = @author.name
|
||||
elsif @activity.scope.size == 1
|
||||
title = l("label_#{@activity.scope.first.singularize}_plural")
|
||||
end
|
||||
render_feed(events, :title => "#{@project || Setting.app_title}: #{title}")
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
private
|
||||
def find_optional_project
|
||||
return true unless params[:id]
|
||||
@@ -254,6 +364,14 @@ private
|
||||
render_404
|
||||
end
|
||||
|
||||
def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
|
||||
if ids = params[:tracker_ids]
|
||||
@selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
|
||||
else
|
||||
@selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
|
||||
end
|
||||
end
|
||||
|
||||
# Validates parent_id param according to user's permissions
|
||||
# TODO: move it to Project model in a validation that depends on User.current
|
||||
def validate_parent_id
|
||||
|
||||
@@ -55,7 +55,8 @@ class TimelogController < ApplicationController
|
||||
|
||||
sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours"
|
||||
sql << " FROM #{TimeEntry.table_name}"
|
||||
sql << time_report_joins
|
||||
sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
|
||||
sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
|
||||
sql << " WHERE"
|
||||
sql << " (%s) AND" % sql_condition
|
||||
sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)]
|
||||
@@ -260,8 +261,8 @@ private
|
||||
end
|
||||
|
||||
@from, @to = @to, @from if @from && @to && @from > @to
|
||||
@from ||= (TimeEntry.earilest_date_for_project(@project) || Date.today)
|
||||
@to ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
|
||||
@from ||= (TimeEntry.minimum(:spent_on, :include => :project, :conditions => Project.allowed_to_condition(User.current, :view_time_entries)) || Date.today) - 1
|
||||
@to ||= (TimeEntry.maximum(:spent_on, :include => :project, :conditions => Project.allowed_to_condition(User.current, :view_time_entries)) || Date.today)
|
||||
end
|
||||
|
||||
def load_available_criterias
|
||||
@@ -313,12 +314,4 @@ private
|
||||
call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project })
|
||||
@available_criterias
|
||||
end
|
||||
|
||||
def time_report_joins
|
||||
sql = ''
|
||||
sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
|
||||
sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
|
||||
call_hook(:controller_timelog_time_report_joins, {:sql => sql} )
|
||||
sql
|
||||
end
|
||||
end
|
||||
|
||||
@@ -53,8 +53,10 @@ class UsersController < ApplicationController
|
||||
@user = User.find(params[:id])
|
||||
@custom_values = @user.custom_values
|
||||
|
||||
# show projects based on current user visibility
|
||||
@memberships = @user.memberships.all(:conditions => Project.visible_by(User.current))
|
||||
# show only public projects and private projects that the logged in user is also a member of
|
||||
@memberships = @user.memberships.select do |membership|
|
||||
membership.project.is_public? || (User.current.member_of?(membership.project))
|
||||
end
|
||||
|
||||
events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10)
|
||||
@events_by_day = events.group_by(&:event_date)
|
||||
@@ -95,9 +97,7 @@ class UsersController < ApplicationController
|
||||
if request.post?
|
||||
@user.admin = params[:user][:admin] if params[:user][:admin]
|
||||
@user.login = params[:user][:login] if params[:user][:login]
|
||||
if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?)
|
||||
@user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
|
||||
end
|
||||
@user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless params[:password].nil? or params[:password].empty? or @user.auth_source_id
|
||||
@user.group_ids = params[:user][:group_ids] if params[:user][:group_ids]
|
||||
@user.attributes = params[:user]
|
||||
# Was the account actived ? (do it before User#save clears the change)
|
||||
@@ -123,22 +123,14 @@ class UsersController < ApplicationController
|
||||
@membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
|
||||
@membership.save if request.post?
|
||||
respond_to do |format|
|
||||
if @membership.valid?
|
||||
format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.replace_html "tab-content-memberships", :partial => 'users/memberships'
|
||||
page.visual_effect(:highlight, "member-#{@membership.id}")
|
||||
}
|
||||
}
|
||||
else
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.alert(l(:notice_failed_to_save_members, :errors => @membership.errors.full_messages.join(', ')))
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
format.html { redirect_to :controller => 'users', :action => 'edit', :id => @user, :tab => 'memberships' }
|
||||
format.js {
|
||||
render(:update) {|page|
|
||||
page.replace_html "tab-content-memberships", :partial => 'users/memberships'
|
||||
page.visual_effect(:highlight, "member-#{@membership.id}")
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def destroy_membership
|
||||
|
||||
@@ -18,42 +18,15 @@
|
||||
class VersionsController < ApplicationController
|
||||
menu_item :roadmap
|
||||
model_object Version
|
||||
before_filter :find_model_object, :except => [:index, :new, :create, :close_completed]
|
||||
before_filter :find_project_from_association, :except => [:index, :new, :create, :close_completed]
|
||||
before_filter :find_project, :only => [:index, :new, :create, :close_completed]
|
||||
before_filter :find_model_object, :except => [:new, :close_completed]
|
||||
before_filter :find_project_from_association, :except => [:new, :close_completed]
|
||||
before_filter :find_project, :only => [:new, :close_completed]
|
||||
before_filter :authorize
|
||||
|
||||
helper :custom_fields
|
||||
helper :projects
|
||||
|
||||
def index
|
||||
@trackers = @project.trackers.find(:all, :order => 'position')
|
||||
retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
|
||||
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
|
||||
project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
|
||||
|
||||
@versions = @project.shared_versions || []
|
||||
@versions += @project.rolled_up_versions.visible if @with_subprojects
|
||||
@versions = @versions.uniq.sort
|
||||
@versions.reject! {|version| version.closed? || version.completed? } unless params[:completed]
|
||||
|
||||
@issues_by_version = {}
|
||||
unless @selected_tracker_ids.empty?
|
||||
@versions.each do |version|
|
||||
issues = version.fixed_issues.visible.find(:all,
|
||||
:include => [:project, :status, :tracker, :priority],
|
||||
:conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
|
||||
:order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
|
||||
@issues_by_version[version] = issues
|
||||
end
|
||||
end
|
||||
@versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
|
||||
end
|
||||
|
||||
def show
|
||||
@issues = @version.fixed_issues.visible.find(:all,
|
||||
:include => [:status, :tracker, :priority],
|
||||
:order => "#{Tracker.table_name}.position, #{Issue.table_name}.id")
|
||||
end
|
||||
|
||||
def new
|
||||
@@ -63,17 +36,6 @@ class VersionsController < ApplicationController
|
||||
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
|
||||
@version.attributes = attributes
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
# TODO: refactor with code above in #new
|
||||
@version = @project.versions.build
|
||||
if params[:version]
|
||||
attributes = params[:version].dup
|
||||
attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
|
||||
@version.attributes = attributes
|
||||
end
|
||||
|
||||
if request.post?
|
||||
if @version.save
|
||||
respond_to do |format|
|
||||
@@ -90,7 +52,7 @@ class VersionsController < ApplicationController
|
||||
end
|
||||
else
|
||||
respond_to do |format|
|
||||
format.html { render :action => 'new' }
|
||||
format.html
|
||||
format.js do
|
||||
render(:update) {|page| page.alert(@version.errors.full_messages.join('\n')) }
|
||||
end
|
||||
@@ -98,11 +60,8 @@ class VersionsController < ApplicationController
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
def edit
|
||||
if request.post? && params[:version]
|
||||
attributes = params[:version].dup
|
||||
attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
|
||||
@@ -143,13 +102,4 @@ private
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
|
||||
if ids = params[:tracker_ids]
|
||||
@selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
|
||||
else
|
||||
@selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -20,4 +20,12 @@ module AdminHelper
|
||||
options_for_select([[l(:label_all), ''],
|
||||
[l(:status_active), 1]], selected)
|
||||
end
|
||||
|
||||
def css_project_classes(project)
|
||||
s = 'project'
|
||||
s << ' root' if project.root?
|
||||
s << ' child' if project.child?
|
||||
s << (project.leaf? ? ' leaf' : ' parent')
|
||||
s
|
||||
end
|
||||
end
|
||||
|
||||
@@ -32,27 +32,8 @@ module ApplicationHelper
|
||||
end
|
||||
|
||||
# Display a link if user is authorized
|
||||
#
|
||||
# @param [String] name Anchor text (passed to link_to)
|
||||
# @param [Hash, String] options Hash params or url for the link target (passed to link_to).
|
||||
# This will checked by authorize_for to see if the user is authorized
|
||||
# @param [optional, Hash] html_options Options passed to link_to
|
||||
# @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to
|
||||
def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
|
||||
if options.is_a?(String)
|
||||
begin
|
||||
route = ActionController::Routing::Routes.recognize_path(options.gsub(/\?.*/,''), :method => options[:method] || :get)
|
||||
link_controller = route[:controller]
|
||||
link_action = route[:action]
|
||||
rescue ActionController::RoutingError # Parse failed, not a route
|
||||
link_controller, link_action = nil, nil
|
||||
end
|
||||
else
|
||||
link_controller = options[:controller] || params[:controller]
|
||||
link_action = options[:action]
|
||||
end
|
||||
|
||||
link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(link_controller, link_action)
|
||||
link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
|
||||
end
|
||||
|
||||
# Display a link to remote if user is authorized
|
||||
@@ -122,23 +103,6 @@ module ApplicationHelper
|
||||
link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision))
|
||||
end
|
||||
|
||||
# Generates a link to a project if active
|
||||
# Examples:
|
||||
#
|
||||
# link_to_project(project) # => link to the specified project overview
|
||||
# link_to_project(project, :action=>'settings') # => link to project settings
|
||||
# link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
|
||||
# link_to_project(project, {}, :class => "project") # => html options with default url (project overview)
|
||||
#
|
||||
def link_to_project(project, options={}, html_options = nil)
|
||||
if project.active?
|
||||
url = {:controller => 'projects', :action => 'show', :id => project}.merge(options)
|
||||
link_to(h(project), url, html_options)
|
||||
else
|
||||
h(project)
|
||||
end
|
||||
end
|
||||
|
||||
def toggle_link(name, id, options={})
|
||||
onclick = "Element.toggle('#{id}'); "
|
||||
onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
|
||||
@@ -321,7 +285,7 @@ module ApplicationHelper
|
||||
def time_tag(time)
|
||||
text = distance_of_time_in_words(Time.now, time)
|
||||
if @project
|
||||
link_to(text, {:controller => 'activities', :action => 'index', :id => @project, :from => time.to_date}, :title => format_time(time))
|
||||
link_to(text, {:controller => 'projects', :action => 'activity', :id => @project, :from => time.to_date}, :title => format_time(time))
|
||||
else
|
||||
content_tag('acronym', text, :title => format_time(time))
|
||||
end
|
||||
@@ -404,12 +368,12 @@ module ApplicationHelper
|
||||
ancestors = (@project.root? ? [] : @project.ancestors.visible)
|
||||
if ancestors.any?
|
||||
root = ancestors.shift
|
||||
b << link_to_project(root, {:jump => current_menu_item}, :class => 'root')
|
||||
b << link_to(h(root), {:controller => 'projects', :action => 'show', :id => root, :jump => current_menu_item}, :class => 'root')
|
||||
if ancestors.size > 2
|
||||
b << '…'
|
||||
ancestors = ancestors[-2, 2]
|
||||
end
|
||||
b += ancestors.collect {|p| link_to_project(p, {:jump => current_menu_item}, :class => 'ancestor') }
|
||||
b += ancestors.collect {|p| link_to(h(p), {:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item}, :class => 'ancestor') }
|
||||
end
|
||||
b << h(@project)
|
||||
b.join(' » ')
|
||||
@@ -429,19 +393,6 @@ module ApplicationHelper
|
||||
end
|
||||
end
|
||||
|
||||
# Returns the theme, controller name, and action as css classes for the
|
||||
# HTML body.
|
||||
def body_css_classes
|
||||
css = []
|
||||
if theme = Redmine::Themes.theme(Setting.ui_theme)
|
||||
css << 'theme-' + theme.name
|
||||
end
|
||||
|
||||
css << 'controller-' + params[:controller]
|
||||
css << 'action-' + params[:action]
|
||||
css.join(' ')
|
||||
end
|
||||
|
||||
def accesskey(s)
|
||||
Redmine::AccessKeys.key_for s
|
||||
end
|
||||
@@ -641,7 +592,8 @@ module ApplicationHelper
|
||||
end
|
||||
when 'project'
|
||||
if p = Project.visible.find_by_id(oid)
|
||||
link = link_to_project(p, {:only_path => only_path}, :class => 'project')
|
||||
link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
|
||||
:class => 'project'
|
||||
end
|
||||
end
|
||||
elsif sep == ':'
|
||||
@@ -683,7 +635,8 @@ module ApplicationHelper
|
||||
end
|
||||
when 'project'
|
||||
if p = Project.visible.find(:first, :conditions => ["identifier = :s OR LOWER(name) = :s", {:s => name.downcase}])
|
||||
link = link_to_project(p, {:only_path => only_path}, :class => 'project')
|
||||
link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
|
||||
:class => 'project'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -756,11 +709,6 @@ module ApplicationHelper
|
||||
javascript_include_tag('context_menu') +
|
||||
stylesheet_link_tag('context_menu')
|
||||
end
|
||||
if l(:direction) == 'rtl'
|
||||
content_for :header_tags do
|
||||
stylesheet_link_tag('context_menu_rtl')
|
||||
end
|
||||
end
|
||||
@context_menu_included = true
|
||||
end
|
||||
javascript_tag "new ContextMenu('#{ url_for(url) }')"
|
||||
@@ -824,7 +772,7 @@ module ApplicationHelper
|
||||
# +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>')
|
||||
def avatar(user, options = { })
|
||||
if Setting.gravatar_enabled?
|
||||
options.merge!({:ssl => (defined?(request) && request.ssl?), :default => Setting.gravatar_default})
|
||||
options.merge!({:ssl => Setting.protocol == 'https', :default => Setting.gravatar_default})
|
||||
email = nil
|
||||
if user.respond_to?(:mail)
|
||||
email = user.mail
|
||||
@@ -835,10 +783,6 @@ module ApplicationHelper
|
||||
end
|
||||
end
|
||||
|
||||
def favicon
|
||||
"<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def wiki_helper
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
module CalendarsHelper
|
||||
def link_to_previous_month(year, month)
|
||||
target_year, target_month = if month == 1
|
||||
[year - 1, 12]
|
||||
else
|
||||
[year, month - 1]
|
||||
end
|
||||
|
||||
name = if target_month == 12
|
||||
"#{month_name(target_month)} #{target_year}"
|
||||
else
|
||||
"#{month_name(target_month)}"
|
||||
end
|
||||
|
||||
link_to_remote ('« ' + name),
|
||||
{:update => "content", :url => { :year => target_year, :month => target_month }},
|
||||
{:href => url_for(:action => 'show', :year => target_year, :month => target_month)}
|
||||
end
|
||||
|
||||
def link_to_next_month(year, month)
|
||||
target_year, target_month = if month == 12
|
||||
[year + 1, 1]
|
||||
else
|
||||
[year, month + 1]
|
||||
end
|
||||
|
||||
name = if target_month == 1
|
||||
"#{month_name(target_month)} #{target_year}"
|
||||
else
|
||||
"#{month_name(target_month)}"
|
||||
end
|
||||
|
||||
link_to_remote (name + ' »'),
|
||||
{:update => "content", :url => { :year => target_year, :month => target_month }},
|
||||
{:href => url_for(:action => 'show', :year => target_year, :month =>target_month)}
|
||||
|
||||
end
|
||||
end
|
||||
@@ -1,2 +0,0 @@
|
||||
module IssueMovesHelper
|
||||
end
|
||||
@@ -28,25 +28,14 @@ module IssuesHelper
|
||||
ancestors << issue unless issue.leaf?
|
||||
end
|
||||
end
|
||||
|
||||
# Renders a HTML/CSS tooltip
|
||||
#
|
||||
# To use, a trigger div is needed. This is a div with the class of "tooltip"
|
||||
# that contains this method wrapped in a span with the class of "tip"
|
||||
#
|
||||
# <div class="tooltip"><%= link_to_issue(issue) %>
|
||||
# <span class="tip"><%= render_issue_tooltip(issue) %></span>
|
||||
# </div>
|
||||
#
|
||||
|
||||
def render_issue_tooltip(issue)
|
||||
@cached_label_status ||= l(:field_status)
|
||||
@cached_label_start_date ||= l(:field_start_date)
|
||||
@cached_label_due_date ||= l(:field_due_date)
|
||||
@cached_label_assigned_to ||= l(:field_assigned_to)
|
||||
@cached_label_priority ||= l(:field_priority)
|
||||
|
||||
link_to_issue(issue) + "<br /><br />" +
|
||||
"<strong>#{@cached_label_status}</strong>: #{issue.status.name}<br />" +
|
||||
"<strong>#{@cached_label_start_date}</strong>: #{format_date(issue.start_date)}<br />" +
|
||||
"<strong>#{@cached_label_due_date}</strong>: #{format_date(issue.due_date)}<br />" +
|
||||
"<strong>#{@cached_label_assigned_to}</strong>: #{issue.assigned_to}<br />" +
|
||||
|
||||
@@ -22,7 +22,7 @@ module JournalsHelper
|
||||
links = []
|
||||
if !journal.notes.blank?
|
||||
links << link_to_remote(image_tag('comment.png'),
|
||||
{ :url => {:controller => 'journals', :action => 'new', :id => issue, :journal_id => journal} },
|
||||
{ :url => {:controller => 'issues', :action => 'reply', :id => issue, :journal_id => journal} },
|
||||
:title => l(:button_quote)) if options[:reply_links]
|
||||
links << link_to_in_place_notes_editor(image_tag('edit.png'), "journal-#{journal.id}-notes",
|
||||
{ :controller => 'journals', :action => 'edit', :id => journal },
|
||||
|
||||
@@ -72,7 +72,7 @@ module ProjectsHelper
|
||||
end
|
||||
classes = (ancestors.empty? ? 'root' : 'child')
|
||||
s << "<li class='#{classes}'><div class='#{classes}'>" +
|
||||
link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}")
|
||||
link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}")
|
||||
s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank?
|
||||
s << "</div>\n"
|
||||
ancestors << project
|
||||
|
||||
@@ -50,7 +50,7 @@ module QueriesHelper
|
||||
when 'User'
|
||||
link_to_user value
|
||||
when 'Project'
|
||||
link_to_project value
|
||||
link_to(h(value), :controller => 'projects', :action => 'show', :id => value)
|
||||
when 'Version'
|
||||
link_to(h(value), :controller => 'versions', :action => 'show', :id => value)
|
||||
when 'TrueClass'
|
||||
|
||||
@@ -19,13 +19,12 @@ class Change < ActiveRecord::Base
|
||||
belongs_to :changeset
|
||||
|
||||
validates_presence_of :changeset_id, :action, :path
|
||||
before_save :init_path
|
||||
|
||||
def relative_path
|
||||
changeset.repository.relative_path(path)
|
||||
end
|
||||
|
||||
def init_path
|
||||
self.path ||= ""
|
||||
def before_save
|
||||
path ||= ""
|
||||
end
|
||||
end
|
||||
|
||||
@@ -76,6 +76,7 @@ class Changeset < ActiveRecord::Base
|
||||
def after_create
|
||||
scan_comment_for_issue_ids
|
||||
end
|
||||
require 'pp'
|
||||
|
||||
def scan_comment_for_issue_ids
|
||||
return if comments.blank?
|
||||
|
||||
@@ -245,7 +245,7 @@ class Issue < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def done_ratio
|
||||
if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
|
||||
if Issue.use_status_for_done_ratio? && status && status.default_done_ratio?
|
||||
status.default_done_ratio
|
||||
else
|
||||
read_attribute(:done_ratio)
|
||||
@@ -308,7 +308,7 @@ class Issue < ActiveRecord::Base
|
||||
# Set the done_ratio using the status if that setting is set. This will keep the done_ratios
|
||||
# even if the user turns off the setting later
|
||||
def update_done_ratio_from_issue_status
|
||||
if Issue.use_status_for_done_ratio? && status && status.default_done_ratio
|
||||
if Issue.use_status_for_done_ratio? && status && status.default_done_ratio?
|
||||
self.done_ratio = status.default_done_ratio
|
||||
end
|
||||
end
|
||||
@@ -357,11 +357,6 @@ class Issue < ActiveRecord::Base
|
||||
def overdue?
|
||||
!due_date.nil? && (due_date < Date.today) && !status.is_closed?
|
||||
end
|
||||
|
||||
# Does this issue have children?
|
||||
def children?
|
||||
!leaf?
|
||||
end
|
||||
|
||||
# Users the issue can be assigned to
|
||||
def assignable_users
|
||||
@@ -689,7 +684,7 @@ class Issue < ActiveRecord::Base
|
||||
end
|
||||
|
||||
# done ratio = weighted average ratio of leaves
|
||||
unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio
|
||||
unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio?
|
||||
leaves_count = p.leaves.count
|
||||
if leaves_count > 0
|
||||
average = p.leaves.average(:estimated_hours).to_f
|
||||
@@ -826,7 +821,7 @@ class Issue < ActiveRecord::Base
|
||||
j.id as #{select_field},
|
||||
count(i.id) as total
|
||||
from
|
||||
#{Issue.table_name} i, #{IssueStatus.table_name} s, #{joins} j
|
||||
#{Issue.table_name} i, #{IssueStatus.table_name} s, #{joins} as j
|
||||
where
|
||||
i.status_id=s.id
|
||||
and #{where}
|
||||
|
||||
@@ -17,10 +17,8 @@
|
||||
|
||||
class IssueStatus < ActiveRecord::Base
|
||||
before_destroy :check_integrity
|
||||
has_many :workflows, :foreign_key => "old_status_id"
|
||||
has_many :workflows, :foreign_key => "old_status_id", :dependent => :delete_all
|
||||
acts_as_list
|
||||
|
||||
before_destroy :delete_workflows
|
||||
|
||||
validates_presence_of :name
|
||||
validates_uniqueness_of :name
|
||||
@@ -91,9 +89,4 @@ private
|
||||
def check_integrity
|
||||
raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id])
|
||||
end
|
||||
|
||||
# Deletes associated workflows
|
||||
def delete_workflows
|
||||
Workflow.delete_all(["old_status_id = :id OR new_status_id = :id", {:id => id}])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -65,12 +65,4 @@ class Journal < ActiveRecord::Base
|
||||
def attachments
|
||||
journalized.respond_to?(:attachments) ? journalized.attachments : nil
|
||||
end
|
||||
|
||||
# Returns a string of css classes
|
||||
def css_classes
|
||||
s = 'journal'
|
||||
s << ' has-notes' unless notes.blank?
|
||||
s << ' has-details' unless details.blank?
|
||||
s
|
||||
end
|
||||
end
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require 'ar_condition'
|
||||
|
||||
class Mailer < ActionMailer::Base
|
||||
layout 'mailer'
|
||||
helper :application
|
||||
@@ -82,7 +80,7 @@ class Mailer < ActionMailer::Base
|
||||
def reminder(user, issues, days)
|
||||
set_language_if_valid user.language
|
||||
recipients user.mail
|
||||
subject l(:mail_subject_reminder, :count => issues.size, :days => days)
|
||||
subject l(:mail_subject_reminder, issues.size)
|
||||
body :issues => issues,
|
||||
:days => days,
|
||||
:issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
|
||||
@@ -308,16 +306,13 @@ class Mailer < ActionMailer::Base
|
||||
# * :days => how many days in the future to remind about (defaults to 7)
|
||||
# * :tracker => id of tracker for filtering issues (defaults to all trackers)
|
||||
# * :project => id or identifier of project to process (defaults to all projects)
|
||||
# * :users => array of user ids who should be reminded
|
||||
def self.reminders(options={})
|
||||
days = options[:days] || 7
|
||||
project = options[:project] ? Project.find(options[:project]) : nil
|
||||
tracker = options[:tracker] ? Tracker.find(options[:tracker]) : nil
|
||||
user_ids = options[:users]
|
||||
|
||||
s = ARCondition.new ["#{IssueStatus.table_name}.is_closed = ? AND #{Issue.table_name}.due_date <= ?", false, days.day.from_now.to_date]
|
||||
s << "#{Issue.table_name}.assigned_to_id IS NOT NULL"
|
||||
s << ["#{Issue.table_name}.assigned_to_id IN (?)", user_ids] if user_ids.present?
|
||||
s << "#{Project.table_name}.status = #{Project::STATUS_ACTIVE}"
|
||||
s << "#{Issue.table_name}.project_id = #{project.id}" if project
|
||||
s << "#{Issue.table_name}.tracker_id = #{tracker.id}" if tracker
|
||||
|
||||
@@ -82,7 +82,7 @@ class Member < ActiveRecord::Base
|
||||
protected
|
||||
|
||||
def validate
|
||||
errors.add_on_empty :role if member_roles.empty? && roles.empty?
|
||||
errors.add_to_base "Role can't be blank" if member_roles.empty? && roles.empty?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -33,11 +33,7 @@ class Principal < ActiveRecord::Base
|
||||
}
|
||||
|
||||
before_create :set_default_empty_values
|
||||
|
||||
def name(formatter = nil)
|
||||
to_s
|
||||
end
|
||||
|
||||
|
||||
def <=>(principal)
|
||||
if self.class.name == principal.class.name
|
||||
self.to_s.downcase <=> principal.to_s.downcase
|
||||
|
||||
@@ -412,15 +412,7 @@ class Project < ActiveRecord::Base
|
||||
def short_description(length = 255)
|
||||
description.gsub(/^(.{#{length}}[^\n\r]*).*$/m, '\1...').strip if description
|
||||
end
|
||||
|
||||
def css_classes
|
||||
s = 'project'
|
||||
s << ' root' if root?
|
||||
s << ' child' if child?
|
||||
s << (leaf? ? ' leaf' : ' parent')
|
||||
s
|
||||
end
|
||||
|
||||
|
||||
# Return true if this project is allowed to do the specified action.
|
||||
# action can be:
|
||||
# * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
|
||||
@@ -449,15 +441,6 @@ class Project < ActiveRecord::Base
|
||||
enabled_modules.clear
|
||||
end
|
||||
end
|
||||
|
||||
# Returns an array of projects that are in this project's hierarchy
|
||||
#
|
||||
# Example: parents, children, siblings
|
||||
def hierarchy
|
||||
parents = project.self_and_ancestors || []
|
||||
descendants = project.descendants || []
|
||||
project_hierarchy = parents | descendants # Set union
|
||||
end
|
||||
|
||||
# Returns an auto-generated project identifier based on the last identifier used
|
||||
def self.next_identifier
|
||||
|
||||
@@ -187,7 +187,7 @@ class Query < ActiveRecord::Base
|
||||
if project
|
||||
user_values += project.users.sort.collect{|s| [s.name, s.id.to_s] }
|
||||
else
|
||||
project_ids = Project.all(:conditions => Project.visible_by(User.current)).collect(&:id)
|
||||
project_ids = User.current.projects.collect(&:id)
|
||||
if project_ids.any?
|
||||
# members of the user's projects
|
||||
user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", project_ids]).sort.collect{|s| [s.name, s.id.to_s] }
|
||||
@@ -219,12 +219,6 @@ class Query < ActiveRecord::Base
|
||||
@available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => system_shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } }
|
||||
end
|
||||
add_custom_fields_filters(IssueCustomField.find(:all, :conditions => {:is_filter => true, :is_for_all => true}))
|
||||
# project filter
|
||||
project_values = Project.all(:conditions => Project.visible_by(User.current), :order => 'lft').map do |p|
|
||||
pre = (p.level > 0 ? ('--' * p.level + ' ') : '')
|
||||
["#{pre}#{p.name}",p.id.to_s]
|
||||
end
|
||||
@available_filters["project_id"] = { :type => :list, :order => 1, :values => project_values}
|
||||
end
|
||||
@available_filters
|
||||
end
|
||||
|
||||
@@ -81,20 +81,4 @@ class TimeEntry < ActiveRecord::Base
|
||||
yield
|
||||
end
|
||||
end
|
||||
|
||||
def self.earilest_date_for_project(project=nil)
|
||||
finder_conditions = ARCondition.new(Project.allowed_to_condition(User.current, :view_time_entries))
|
||||
if project
|
||||
finder_conditions << ["project_id IN (?)", project.hierarchy.collect(&:id)]
|
||||
end
|
||||
TimeEntry.minimum(:spent_on, :include => :project, :conditions => finder_conditions.conditions)
|
||||
end
|
||||
|
||||
def self.latest_date_for_project(project=nil)
|
||||
finder_conditions = ARCondition.new(Project.allowed_to_condition(User.current, :view_time_entries))
|
||||
if project
|
||||
finder_conditions << ["project_id IN (?)", project.hierarchy.collect(&:id)]
|
||||
end
|
||||
TimeEntry.maximum(:spent_on, :include => :project, :conditions => finder_conditions.conditions)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -79,10 +79,6 @@ class User < Principal
|
||||
super
|
||||
end
|
||||
|
||||
def mail=(arg)
|
||||
write_attribute(:mail, arg.to_s.strip)
|
||||
end
|
||||
|
||||
def identity_url=(url)
|
||||
if url.blank?
|
||||
write_attribute(:identity_url, '')
|
||||
@@ -164,30 +160,6 @@ class User < Principal
|
||||
self.status == STATUS_LOCKED
|
||||
end
|
||||
|
||||
def activate
|
||||
self.status = STATUS_ACTIVE
|
||||
end
|
||||
|
||||
def register
|
||||
self.status = STATUS_REGISTERED
|
||||
end
|
||||
|
||||
def lock
|
||||
self.status = STATUS_LOCKED
|
||||
end
|
||||
|
||||
def activate!
|
||||
update_attribute(:status, STATUS_ACTIVE)
|
||||
end
|
||||
|
||||
def register!
|
||||
update_attribute(:status, STATUS_REGISTERED)
|
||||
end
|
||||
|
||||
def lock!
|
||||
update_attribute(:status, STATUS_LOCKED)
|
||||
end
|
||||
|
||||
def check_password?(clear_password)
|
||||
if auth_source_id.present?
|
||||
auth_source.authenticate(self.login, clear_password)
|
||||
@@ -352,12 +324,6 @@ class User < Principal
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
# Is the user allowed to do the specified action on any project?
|
||||
# See allowed_to? for the actions and valid options.
|
||||
def allowed_to_globally?(action, options)
|
||||
allowed_to?(action, nil, options.reverse_merge(:global => true))
|
||||
end
|
||||
|
||||
def self.current=(user)
|
||||
@current_user = user
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
<div id="admin-menu">
|
||||
<ul>
|
||||
<%= render_menu :admin_menu %>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><%= link_to l(:label_project_plural), {:controller => 'admin', :action => 'projects'}, :class => 'projects' %></li>
|
||||
<li><%= link_to l(:label_user_plural), {:controller => 'users'}, :class => 'users' %></li>
|
||||
<li><%= link_to l(:label_group_plural), {:controller => 'groups'}, :class => 'groups' %></li>
|
||||
<li><%= link_to l(:label_ldap_authentication), :controller => 'ldap_auth_sources', :action => 'index' %></li>
|
||||
<li><%= link_to l(:label_role_and_permissions), {:controller => 'roles'}, :class => 'roles' %></li>
|
||||
<li><%= link_to l(:label_tracker_plural), {:controller => 'trackers'}, :class => 'trackers' %></li>
|
||||
<li><%= link_to l(:label_issue_status_plural), {:controller => 'issue_statuses'}, :class => 'issue_statuses' %></li>
|
||||
<li><%= link_to l(:label_workflow), {:controller => 'workflows', :action => 'edit'}, :class => 'workflows' %></li>
|
||||
<li><%= link_to l(:label_custom_field_plural), {:controller => 'custom_fields'}, :class => 'custom_fields' %></li>
|
||||
<li><%= link_to l(:label_enumerations), {:controller => 'enumerations'}, :class => 'enumerations' %></li>
|
||||
<li><%= link_to l(:label_settings), {:controller => 'settings'}, :class => 'settings' %></li>
|
||||
<% menu_items_for(:admin_menu) do |item| -%>
|
||||
<li><%= link_to h(item.caption), item.url, item.html_options %></li>
|
||||
<% end -%>
|
||||
<li><%= link_to l(:label_plugins), {:controller => 'admin', :action => 'plugins'}, :class => 'plugins' %></li>
|
||||
<li><%= link_to l(:label_information_plural), {:controller => 'admin', :action => 'info'}, :class => 'info' %></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="contextual">
|
||||
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add' %>
|
||||
<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add' %>
|
||||
</div>
|
||||
|
||||
<h2><%=l(:label_project_plural)%></h2>
|
||||
@@ -26,8 +26,8 @@
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<% project_tree(@projects) do |project, level| %>
|
||||
<tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
|
||||
<td class="name"><%= link_to_project(project, :action => 'settings') %></td>
|
||||
<tr class="<%= cycle("odd", "even") %> <%= css_project_classes(project) %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
|
||||
<td class="name"><%= project.active? ? link_to(h(project.name), :controller => 'projects', :action => 'settings', :id => project) : h(project.name) %></td>
|
||||
<td><%= textilizable project.short_description, :project => project %></td>
|
||||
<td align="center"><%= checked_image project.is_public? %></td>
|
||||
<td align="center"><%= format_date(project.created_on) %></td>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<span id="attachments_fields">
|
||||
<%= file_field_tag 'attachments[1][file]', :size => 30, :id => nil -%><label class="inline"><span id="attachment_description_label_content"><%= l(:label_optional_description) %></span><%= text_field_tag 'attachments[1][description]', '', :size => 60, :id => nil %>
|
||||
<%= file_field_tag 'attachments[1][file]', :size => 30, :id => nil -%>
|
||||
<label class="inline"><span id="attachment_description_label_content"><%= l(:label_optional_description) %></span><%= text_field_tag 'attachments[1][description]', '', :size => 60, :id => nil %>
|
||||
</label>
|
||||
</span>
|
||||
<br />
|
||||
|
||||
@@ -30,11 +30,11 @@
|
||||
</table>
|
||||
|
||||
<% other_formats_links do |f| %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_messages => 1, :key => User.current.rss_key} %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'projects', :action => 'activity', :id => @project, :show_messages => 1, :key => User.current.rss_key} %>
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :id => @project, :format => 'atom', :show_messages => 1, :key => User.current.rss_key}) %>
|
||||
<%= auto_discovery_link_tag(:atom, {:controller => 'projects', :action => 'activity', :id => @project, :format => 'atom', :show_messages => 1, :key => User.current.rss_key}) %>
|
||||
<% end %>
|
||||
|
||||
<% html_title l(:label_board_plural) %>
|
||||
|
||||
@@ -9,7 +9,14 @@
|
||||
</fieldset>
|
||||
|
||||
<p style="float:right;">
|
||||
<%= link_to_previous_month(@year, @month) %> | <%= link_to_next_month(@year, @month) %>
|
||||
<%= link_to_remote ('« ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")),
|
||||
{:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) }},
|
||||
{:href => url_for(:action => 'show', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1))}
|
||||
%> |
|
||||
<%= link_to_remote ((@month==12 ? "#{month_name(1)} #{@year+1}" : "#{month_name(@month+1)}") + ' »'),
|
||||
{:update => "content", :url => { :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1) }},
|
||||
{:href => url_for(:action => 'show', :year => (@month==12 ? @year+1 : @year), :month =>(@month==12 ? 1 : @month+1))}
|
||||
%>
|
||||
</p>
|
||||
|
||||
<p class="buttons">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<% replace_watcher ||= 'watcher' %>
|
||||
<%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %>
|
||||
<%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %>
|
||||
<%= link_to_if_authorized l(:button_copy), new_issue_move_path(:id => @issue, :copy_options => {:copy => 't'}), :class => 'icon icon-copy' %>
|
||||
<%= link_to_if_authorized l(:button_move), new_issue_move_path(:id => @issue), :class => 'icon icon-move' %>
|
||||
<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %>
|
||||
<%= link_to_if_authorized l(:button_copy), {:controller => 'issues', :action => 'move', :id => @issue, :copy_options => {:copy => 't'} }, :class => 'icon icon-copy' %>
|
||||
<%= link_to_if_authorized l(:button_move), {:controller => 'issues', :action => 'move', :id => @issue }, :class => 'icon icon-move' %>
|
||||
<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
|
||||
</div>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
|
||||
l(:label_version_new),
|
||||
'version[name]',
|
||||
{:controller => 'versions', :action => 'create', :project_id => @project},
|
||||
{:controller => 'versions', :action => 'new', :project_id => @project},
|
||||
:title => l(:label_version_new),
|
||||
:tabindex => 200) if authorize_for('versions', 'new') %>
|
||||
</p>
|
||||
@@ -40,6 +40,6 @@
|
||||
</div>
|
||||
|
||||
<div style="clear:both;"> </div>
|
||||
<%= render :partial => 'issues/form_custom_fields' %>
|
||||
<%= render :partial => 'form_custom_fields' %>
|
||||
|
||||
<% end %>
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
<p><%= link_to("#{l(:label_revision)} #{changeset.revision}",
|
||||
:controller => 'repositories', :action => 'revision', :id => changeset.project, :rev => changeset.revision) %><br />
|
||||
<span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
|
||||
<div class="changeset-changes">
|
||||
<%= textilizable(changeset, :comments) %>
|
||||
</div>
|
||||
<%= textilizable(changeset, :comments) %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<%= f.hidden_field :lock_version %>
|
||||
<%= submit_tag l(:button_submit) %>
|
||||
<%= link_to_remote l(:label_preview),
|
||||
{ :url => preview_issue_path(:project_id => @project, :id => @issue),
|
||||
{ :url => { :controller => 'issues', :action => 'preview', :project_id => @project, :id => @issue },
|
||||
:method => 'post',
|
||||
:update => 'preview',
|
||||
:with => 'Form.serialize("issue-form")',
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<%= call_hook(:view_issues_form_details_top, { :issue => @issue, :form => f }) %>
|
||||
|
||||
<div id="issue_descr_fields" <%= 'style="display:none"' unless @issue.new_record? || @issue.errors.any? %>>
|
||||
<p><%= f.select :tracker_id, @project.trackers.collect {|t| [t.name, t.id]}, :required => true %></p>
|
||||
<%= observe_field :issue_tracker_id, :url => { :action => :new, :project_id => @project, :id => @issue },
|
||||
<%= observe_field :issue_tracker_id, :url => { :action => :update_form, :project_id => @project, :id => @issue },
|
||||
:update => :attributes,
|
||||
:with => "Form.serialize('issue-form')" %>
|
||||
|
||||
@@ -11,7 +9,10 @@
|
||||
<% unless (@issue.new_record? && @issue.parent_issue_id.nil?) || !User.current.allowed_to?(:manage_subtasks, @project) %>
|
||||
<p><%= f.text_field :parent_issue_id, :size => 10 %></p>
|
||||
<div id="parent_issue_candidates" class="autocomplete"></div>
|
||||
<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
|
||||
<%= javascript_tag "observeParentIssueField('#{url_for(:controller => :issues,
|
||||
:action => :auto_complete,
|
||||
:id => @issue,
|
||||
:project_id => @project) }')" %>
|
||||
<% end %>
|
||||
|
||||
<p><%= f.text_area :description,
|
||||
@@ -22,7 +23,7 @@
|
||||
</div>
|
||||
|
||||
<div id="attributes" class="attributes">
|
||||
<%= render :partial => 'issues/attributes' %>
|
||||
<%= render :partial => 'attributes' %>
|
||||
</div>
|
||||
|
||||
<% if @issue.new_record? %>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<% reply_links = authorize_for('issues', 'edit') -%>
|
||||
<% for journal in journals %>
|
||||
<div id="change-<%= journal.id %>" class="<%= journal.css_classes %>">
|
||||
<h4><div class="journal-link"><%= link_to "##{journal.indice}", :anchor => "note-#{journal.indice}" %></div>
|
||||
<div id="change-<%= journal.id %>" class="journal">
|
||||
<h4><div style="float:right;"><%= link_to "##{journal.indice}", :anchor => "note-#{journal.indice}" %></div>
|
||||
<%= avatar(journal.user, :size => "24") %>
|
||||
<%= content_tag('a', '', :name => "note-#{journal.indice}")%>
|
||||
<%= authoring journal.created_on, journal.user, :label => :label_updated_time_by %></h4>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="autoscroll">
|
||||
<table class="list issues">
|
||||
<thead><tr>
|
||||
<th class="checkbox hide-when-print"><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
|
||||
<th><%= link_to image_tag('toggle_check.png'), {}, :onclick => 'toggleIssuesSelection(Element.up(this, "form")); return false;',
|
||||
:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %>
|
||||
</th>
|
||||
<%= sort_header_tag('id', :caption => '#', :default_order => 'desc') %>
|
||||
@@ -25,7 +25,7 @@
|
||||
<% previous_group = group %>
|
||||
<% end %>
|
||||
<tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
|
||||
<td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
|
||||
<td class="checkbox"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
|
||||
<td class="id"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>
|
||||
<% query.columns.each do |column| %><%= content_tag 'td', column_content(column, issue), :class => column.name %><% end %>
|
||||
</tr>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %>
|
||||
<%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %>
|
||||
</td>
|
||||
<td class="project"><%= link_to_project(issue.project) %></td>
|
||||
<td class="project"><%= link_to(h(issue.project), :controller => 'projects', :action => 'show', :id => issue.project) %></td>
|
||||
<td class="tracker"><%=h issue.tracker %></td>
|
||||
<td class="subject">
|
||||
<%= link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue %> (<%=h issue.status %>)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="contextual">
|
||||
<% if authorize_for('issue_relations', 'new') %>
|
||||
<%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %>
|
||||
<%= toggle_link l(:button_add), 'new-relation-form'%>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<% remote_form_for(:relation, @relation,
|
||||
:url => {:controller => 'issue_relations', :action => 'new', :issue_id => @issue},
|
||||
:method => :post,
|
||||
:complete => "Form.Element.focus('relation_issue_to_id');",
|
||||
:html => {:id => 'new-relation-form', :style => (@relation ? '' : 'display: none;')}) do |f| %>
|
||||
<%= render :partial => 'issue_relations/form', :locals => {:f => f}%>
|
||||
<% end %>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<%= call_hook(:view_issues_sidebar_issues_bottom) %>
|
||||
|
||||
<% if User.current.allowed_to?(:view_calendar, @project, :global => true) %>
|
||||
<%= link_to(l(:label_calendar), :controller => 'calendars', :action => 'show', :project_id => @project) %><br />
|
||||
<%= link_to(l(:label_calendar), :controller => 'issues', :action => 'calendar', :project_id => @project) %><br />
|
||||
<% end %>
|
||||
<% if User.current.allowed_to?(:view_gantt, @project, :global => true) %>
|
||||
<%= link_to(l(:label_gantt), :controller => 'gantts', :action => 'show', :project_id => @project) %><br />
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<ul><%= @issues.collect {|i| content_tag('li', link_to(h("#{i.tracker} ##{i.id}"), { :action => 'show', :id => i }) + h(": #{i.subject}")) }.join("\n") %></ul>
|
||||
|
||||
<% form_tag(:action => 'bulk_update') do %>
|
||||
<% form_tag() do %>
|
||||
<%= @issues.collect {|i| hidden_field_tag('ids[]', i.id)}.join %>
|
||||
<div class="box tabular">
|
||||
<fieldset class="attributes">
|
||||
|
||||
@@ -4,22 +4,19 @@
|
||||
<% if !@issue.nil? -%>
|
||||
<li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% else %>
|
||||
<li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% end %>
|
||||
|
||||
<% unless @allowed_statuses.empty? %>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
|
||||
<ul>
|
||||
<% @statuses.each do |s| -%>
|
||||
<li><%= context_menu_link s.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {:status_id => s}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
|
||||
<li><%= context_menu_link s.name, {:controller => 'issues', :action => 'edit', :id => @issue, :issue => {:status_id => s}, :back_url => @back}, :method => :post,
|
||||
:selected => (s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
</li>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% end %>
|
||||
|
||||
<% unless @trackers.nil? %>
|
||||
<li class="folder">
|
||||
@@ -32,19 +29,15 @@
|
||||
</ul>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% if @projects.size == 1 %>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_priority) %></a>
|
||||
<ul>
|
||||
<% @priorities.each do |p| -%>
|
||||
<li><%= context_menu_link p.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'priority_id' => p}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
|
||||
:selected => (@issue && p == @issue.priority), :disabled => !@can[:edit] %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% unless @project.nil? || @project.shared_versions.open.empty? -%>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
|
||||
@@ -84,19 +77,17 @@
|
||||
</ul>
|
||||
</li>
|
||||
<% end -%>
|
||||
|
||||
<% if Issue.use_field_for_done_ratio? && @projects.size == 1 %>
|
||||
<% if Issue.use_field_for_done_ratio? %>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
|
||||
<ul>
|
||||
<% (0..10).map{|x|x*10}.each do |p| -%>
|
||||
<li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'done_ratio' => p}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
|
||||
:selected => (@issue && p == @issue.done_ratio), :disabled => !@can[:edit] %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% if !@issue.nil? %>
|
||||
<% if @can[:log_time] -%>
|
||||
<li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue},
|
||||
@@ -111,9 +102,9 @@
|
||||
<li><%= context_menu_link l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue},
|
||||
:class => 'icon-duplicate', :disabled => !@can[:copy] %></li>
|
||||
<% end %>
|
||||
<li><%= context_menu_link l(:button_copy), new_issue_move_path(:ids => @issues.collect(&:id), :copy_options => {:copy => 't'}),
|
||||
<li><%= context_menu_link l(:button_copy), {:controller => 'issues', :action => 'move', :ids => @issues.collect(&:id), :copy_options => {:copy => 't'}},
|
||||
:class => 'icon-copy', :disabled => !@can[:move] %></li>
|
||||
<li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
|
||||
<li><%= context_menu_link l(:button_move), {:controller => 'issues', :action => 'move', :ids => @issues.collect(&:id)},
|
||||
:class => 'icon-move', :disabled => !@can[:move] %></li>
|
||||
<li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)},
|
||||
:method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
|
||||
@@ -39,7 +39,6 @@
|
||||
{ :url => { :set_filter => 1 },
|
||||
:before => 'selectAllOptions("selected_columns");',
|
||||
:update => "content",
|
||||
:complete => "apply_filters_observer()",
|
||||
:with => "Form.serialize('query_form')"
|
||||
}, :class => 'icon icon-checked' %>
|
||||
|
||||
@@ -79,7 +78,7 @@
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, {:query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_issue_plural)) %>
|
||||
<%= auto_discovery_link_tag(:atom, {:controller => 'journals', :action => 'index', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %>
|
||||
<%= auto_discovery_link_tag(:atom, {:action => 'changes', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %>
|
||||
<% end %>
|
||||
|
||||
<%= context_menu issues_context_menu_path %>
|
||||
<%= context_menu :controller => 'issues', :action => 'context_menu' %>
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
<% end -%>
|
||||
</ul>
|
||||
|
||||
<% form_tag({:action => 'create'}, :id => 'move_form') do %>
|
||||
<% form_tag({}, :id => 'move_form') do %>
|
||||
<%= @issues.collect {|i| hidden_field_tag('ids[]', i.id)}.join %>
|
||||
|
||||
<div class="box tabular">
|
||||
<p><label for="new_project_id"><%=l(:field_project)%>:</label>
|
||||
<%= select_tag "new_project_id",
|
||||
project_tree_options_for_select(@allowed_projects, :selected => @target_project),
|
||||
:onchange => remote_function(:url => { :action => 'new' },
|
||||
:onchange => remote_function(:url => { :action => 'move' },
|
||||
:method => :get,
|
||||
:update => 'content',
|
||||
:with => "Form.serialize('move_form')") %></p>
|
||||
@@ -9,7 +9,7 @@
|
||||
<%= submit_tag l(:button_create) %>
|
||||
<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
|
||||
<%= link_to_remote l(:label_preview),
|
||||
{ :url => preview_issue_path(:project_id => @project),
|
||||
{ :url => { :controller => 'issues', :action => 'preview', :project_id => @project },
|
||||
:method => 'post',
|
||||
:update => 'preview',
|
||||
:with => "Form.serialize('issue-form')",
|
||||
|
||||
@@ -128,7 +128,6 @@
|
||||
<%= stylesheet_link_tag 'scm' %>
|
||||
<%= javascript_include_tag 'context_menu' %>
|
||||
<%= stylesheet_link_tag 'context_menu' %>
|
||||
<%= stylesheet_link_tag 'context_menu_rtl' if l(:direction) == 'rtl' %>
|
||||
<% end %>
|
||||
<div id="context-menu" style="display: none;"></div>
|
||||
<%= javascript_tag "new ContextMenu('#{issues_context_menu_path}')" %>
|
||||
<%= javascript_tag "new ContextMenu('#{url_for(:controller => 'issues', :action => 'context_menu')}')" %>
|
||||
|
||||
@@ -5,9 +5,7 @@
|
||||
<title><%=h html_title %></title>
|
||||
<meta name="description" content="<%= Redmine::Info.app_name %>" />
|
||||
<meta name="keywords" content="issue,bug,tracker" />
|
||||
<%= favicon %>
|
||||
<%= stylesheet_link_tag 'application', :media => 'all' %>
|
||||
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
|
||||
<%= javascript_include_tag :defaults %>
|
||||
<%= heads_for_wiki_formatter %>
|
||||
<!--[if IE]>
|
||||
@@ -20,7 +18,7 @@
|
||||
<!-- page specific tags -->
|
||||
<%= yield :header_tags -%>
|
||||
</head>
|
||||
<body class="<%= body_css_classes %>">
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
<div id="wrapper2">
|
||||
<div id="top-menu">
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
</div>
|
||||
<h4>
|
||||
<%= avatar(message.author, :size => "24") %>
|
||||
<%= link_to h(message.subject), { :controller => 'messages', :action => 'show', :board_id => @board, :id => @topic, :r => message, :anchor => "message-#{message.id}" } %>
|
||||
<%= link_to h(message.subject), { :controller => 'messages', :action => 'show', :board_id => @board, :id => @topic, :anchor => "message-#{message.id}" } %>
|
||||
-
|
||||
<%= authoring message.created_on, message.author %>
|
||||
</h4>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<p><%= link_to_project(news.project) + ': ' unless @project %>
|
||||
<p><%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless @project %>
|
||||
<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
|
||||
<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
|
||||
<br />
|
||||
|
||||
@@ -12,7 +12,3 @@
|
||||
}, :accesskey => accesskey(:preview) %>
|
||||
<% end %>
|
||||
<div id="preview" class="wiki"></div>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= stylesheet_link_tag 'scm' %>
|
||||
<% end %>
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<p class="nodata"><%= l(:label_no_data) %></p>
|
||||
<% else %>
|
||||
<% @newss.each do |news| %>
|
||||
<h3><%= link_to_project(news.project) + ': ' unless news.project == @project %>
|
||||
<h3><%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless news.project == @project %>
|
||||
<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
|
||||
<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %></h3>
|
||||
<p class="author"><%= authoring news.created_on, news.author %></p>
|
||||
@@ -45,7 +45,6 @@
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :page => nil, :key => User.current.rss_key})) %>
|
||||
<%= stylesheet_link_tag 'scm' %>
|
||||
<% end %>
|
||||
|
||||
<% html_title(l(:label_news_plural)) -%>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<% labelled_tabular_form_for :project, @project, :url => { :action => "update", :id => @project } do |f| %>
|
||||
<% labelled_tabular_form_for :project, @project, :url => { :action => "edit", :id => @project } do |f| %>
|
||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||
<%= submit_tag l(:button_save) %>
|
||||
<% end %>
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
<div class="box">
|
||||
<!--[form:project]-->
|
||||
<p><%= f.text_field :name, :required => true, :maxlength => 30 %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p>
|
||||
<p><%= f.text_field :name, :required => true %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p>
|
||||
|
||||
<% unless @project.allowed_parents.compact.empty? %>
|
||||
<p><%= label(:project, :parent_id, l(:field_parent)) %><%= parent_project_select_tag(@project) %></p>
|
||||
<% end %>
|
||||
|
||||
<p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p>
|
||||
<p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen?, :maxlength => 20 %>
|
||||
<p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %>
|
||||
<% unless @project.identifier_frozen? %>
|
||||
<br /><em><%= l(:text_length_between, :min => 1, :max => 20) %> <%= l(:text_project_identifier_info) %></em>
|
||||
<% end %></p>
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<% if @users_by_role.any? %>
|
||||
<div class="members box">
|
||||
<h3><%=l(:label_member_plural)%></h3>
|
||||
<p><% @users_by_role.keys.sort.each do |role| %>
|
||||
<%=h role %>: <%= @users_by_role[role].sort.collect{|u| link_to_user u}.join(", ") %><br />
|
||||
<% end %></p>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,6 +1,6 @@
|
||||
<h2><%=l(:label_project_new)%></h2>
|
||||
|
||||
<% labelled_tabular_form_for :project, @project, :url => { :action => "create" } do |f| %>
|
||||
<% labelled_tabular_form_for :project, @project, :url => { :action => "add" } do |f| %>
|
||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||
|
||||
<fieldset class="box"><legend><%= l(:label_module_plural) %></legend>
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<%= error_messages_for 'attachment' %>
|
||||
<div class="box">
|
||||
<% form_tag({ :action => 'new', :id => @project }, :multipart => true, :class => "tabular") do %>
|
||||
<% form_tag({ :action => 'add_file', :id => @project }, :multipart => true, :class => "tabular") do %>
|
||||
|
||||
<% if @versions.any? %>
|
||||
<p><label for="version_id"><%=l(:field_version)%></label>
|
||||
@@ -3,10 +3,10 @@
|
||||
<% end %>
|
||||
|
||||
<div class="contextual">
|
||||
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
|
||||
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
|
||||
<%= link_to(l(:label_issue_view_all), { :controller => 'issues' }) + ' |' if User.current.allowed_to?(:view_issues, nil, :global => true) %>
|
||||
<%= link_to(l(:label_overall_spent_time), { :controller => 'time_entries' }) + ' |' if User.current.allowed_to?(:view_time_entries, nil, :global => true) %>
|
||||
<%= link_to l(:label_overall_activity), { :controller => 'activities', :action => 'index' }%>
|
||||
<%= link_to l(:label_overall_activity), { :controller => 'projects', :action => 'activity' }%>
|
||||
</div>
|
||||
|
||||
<h2><%=l(:label_project_plural)%></h2>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="contextual">
|
||||
<%= link_to_if_authorized l(:label_attachment_new), {:controller => 'files', :action => 'new', :id => @project}, :class => 'icon icon-add' %>
|
||||
<%= link_to_if_authorized l(:label_attachment_new), {:controller => 'projects', :action => 'add_file', :id => @project}, :class => 'icon icon-add' %>
|
||||
</div>
|
||||
|
||||
<h2><%=l(:label_attachment_plural)%></h2>
|
||||
@@ -51,4 +51,4 @@
|
||||
|
||||
<% html_title(l(:label_roadmap)) %>
|
||||
|
||||
<%= context_menu issues_context_menu_path %>
|
||||
<%= context_menu :controller => 'issues', :action => 'context_menu' %>
|
||||
@@ -1,4 +1,4 @@
|
||||
<% form_tag({:controller => 'project_enumerations', :action => 'save', :id => @project}, :class => "tabular") do %>
|
||||
<% form_tag({:controller => 'projects', :action => 'save_activities', :id => @project}, :class => "tabular") do %>
|
||||
|
||||
<table class="list">
|
||||
<thead><tr>
|
||||
@@ -32,7 +32,7 @@
|
||||
</table>
|
||||
|
||||
<div class="contextual">
|
||||
<%= link_to(l(:button_reset), {:controller => 'project_enumerations', :action => 'destroy', :id => @project},
|
||||
<%= link_to(l(:button_reset), {:controller => 'projects', :action => 'reset_activities', :id => @project},
|
||||
:method => :delete,
|
||||
:confirm => l(:text_are_you_sure),
|
||||
:class => 'icon icon-del') %>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="contextual">
|
||||
<% if User.current.allowed_to?(:add_subprojects, @project) %>
|
||||
<%= link_to l(:label_subproject_new), {:controller => 'projects', :action => 'new', :parent_id => @project}, :class => 'icon icon-add' %>
|
||||
<%= link_to l(:label_subproject_new), {:controller => 'projects', :action => 'add', :parent_id => @project}, :class => 'icon icon-add' %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -51,7 +51,14 @@
|
||||
</div>
|
||||
|
||||
<div class="splitcontentright">
|
||||
<%= render :partial => 'members_box' %>
|
||||
<% if @users_by_role.any? %>
|
||||
<div class="members box">
|
||||
<h3><%=l(:label_member_plural)%></h3>
|
||||
<p><% @users_by_role.keys.sort.each do |role| %>
|
||||
<%=h role %>: <%= @users_by_role[role].sort.collect{|u| link_to_user u}.join(", ") %><br />
|
||||
<% end %></p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if @news.any? && authorize_for('news', 'index') %>
|
||||
<div class="news box">
|
||||
@@ -74,7 +81,7 @@
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :id => @project, :format => 'atom', :key => User.current.rss_key}) %>
|
||||
<%= auto_discovery_link_tag(:atom, {:action => 'activity', :id => @project, :format => 'atom', :key => User.current.rss_key}) %>
|
||||
<% end %>
|
||||
|
||||
<% html_title(l(:label_overview)) -%>
|
||||
|
||||
@@ -53,18 +53,6 @@ function toggle_multi_select(field) {
|
||||
select.multiple = true;
|
||||
}
|
||||
}
|
||||
|
||||
function apply_filters_observer() {
|
||||
$$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
|
||||
if(e.keyCode == Event.KEY_RETURN) {
|
||||
<%= remote_function(:url => { :set_filter => 1},
|
||||
:update => "content",
|
||||
:with => "Form.serialize('query_form')",
|
||||
:complete => "e.stop(); apply_filters_observer()") %>
|
||||
}
|
||||
});
|
||||
}
|
||||
Event.observe(document,"dom:loaded", apply_filters_observer);
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<h2><%= l(:label_revision) %> <%= format_revision(@rev_to) + ':' if @rev_to %><%= format_revision(@rev) %> <%=h @path %></h2>
|
||||
|
||||
<!-- Choose view type -->
|
||||
<% form_tag({:path => to_path_param(@path)}, :method => 'get') do %>
|
||||
<% form_tag({}, :method => 'get') do %>
|
||||
<%= hidden_field_tag('rev', params[:rev]) if params[:rev] %>
|
||||
<%= hidden_field_tag('rev_to', params[:rev_to]) if params[:rev_to] %>
|
||||
<p><label><%= l(:label_view_diff) %></label>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</div>
|
||||
|
||||
<div style="float:right;">
|
||||
<%= link_to l(:label_ldap_authentication), {:controller => 'ldap_auth_sources', :action => 'index'}, :class => 'icon icon-server-authentication' %>
|
||||
<%= link_to l(:label_ldap_authentication), :controller => 'ldap_auth_sources', :action => 'index' %>
|
||||
</div>
|
||||
|
||||
<%= submit_tag l(:button_save) %>
|
||||
|
||||
@@ -14,9 +14,7 @@
|
||||
<% @user.memberships.each do |membership| %>
|
||||
<% next if membership.new_record? %>
|
||||
<tr id="member-<%= membership.id %>" class="<%= cycle 'odd', 'even' %> class">
|
||||
<td class="project">
|
||||
<%= link_to_project membership.project %>
|
||||
</td>
|
||||
<td class="project"><%=h membership.project %></td>
|
||||
<td class="roles">
|
||||
<span id="member-<%= membership.id %>-roles"><%=h membership.roles.sort.collect(&:to_s).join(', ') %></span>
|
||||
<% remote_form_for(:membership, :url => { :action => 'edit_membership', :id => @user, :membership_id => membership },
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<h3><%=l(:label_project_plural)%></h3>
|
||||
<ul>
|
||||
<% for membership in @memberships %>
|
||||
<li><%= link_to_project(membership.project) %>
|
||||
<li><%= link_to(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %>
|
||||
(<%=h membership.roles.sort.collect(&:to_s).join(', ') %>, <%= format_date(membership.created_on) %>)</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
@@ -35,7 +35,7 @@
|
||||
<div class="splitcontentright">
|
||||
|
||||
<% unless @events_by_day.empty? %>
|
||||
<h3><%= link_to l(:label_activity), :controller => 'activities', :action => 'index', :id => nil, :user_id => @user, :from => @events_by_day.keys.first %></h3>
|
||||
<h3><%= link_to l(:label_activity), :controller => 'projects', :action => 'activity', :id => nil, :user_id => @user, :from => @events_by_day.keys.first %></h3>
|
||||
|
||||
<p>
|
||||
<%=l(:label_reported_issues)%>: <%= Issue.count(:conditions => ["author_id=?", @user.id]) %>
|
||||
@@ -57,11 +57,11 @@
|
||||
</div>
|
||||
|
||||
<% other_formats_links do |f| %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => nil, :user_id => @user, :key => User.current.rss_key} %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'projects', :action => 'activity', :id => nil, :user_id => @user, :key => User.current.rss_key} %>
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :user_id => @user, :format => :atom, :key => User.current.rss_key) %>
|
||||
<%= auto_discovery_link_tag(:atom, :controller => 'projects', :action => 'activity', :user_id => @user, :format => :atom, :key => User.current.rss_key) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= call_hook :view_account_right_bottom, :user => @user %>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<h2><%=l(:label_version)%></h2>
|
||||
|
||||
<% labelled_tabular_form_for :version, @version, :url => { :action => 'update', :id => @version } do |f| %>
|
||||
<% labelled_tabular_form_for :version, @version, :url => { :action => 'edit' } do |f| %>
|
||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||
<%= submit_tag l(:button_save) %>
|
||||
<% end %>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<h2><%=l(:label_version_new)%></h2>
|
||||
|
||||
<% labelled_tabular_form_for :version, @version, :url => { :action => 'create', :project_id => @project } do |f| %>
|
||||
<% labelled_tabular_form_for :version, @version, :url => { :action => 'new' } do |f| %>
|
||||
<%= render :partial => 'versions/form', :locals => { :f => f } %>
|
||||
<%= submit_tag l(:button_create) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -32,10 +32,13 @@
|
||||
<%= render :partial => 'versions/overview', :locals => {:version => @version} %>
|
||||
<%= render(:partial => "wiki/content", :locals => {:content => @version.wiki_page.content}) if @version.wiki_page %>
|
||||
|
||||
<% if @issues.present? %>
|
||||
<% issues = @version.fixed_issues.find(:all,
|
||||
:include => [:status, :tracker, :priority],
|
||||
:order => "#{Tracker.table_name}.position, #{Issue.table_name}.id") %>
|
||||
<% if issues.size > 0 %>
|
||||
<fieldset class="related-issues"><legend><%= l(:label_related_issues) %></legend>
|
||||
<ul>
|
||||
<% @issues.each do |issue| -%>
|
||||
<% issues.each do |issue| -%>
|
||||
<li><%= link_to_issue(issue) %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<% for project in @projects %>
|
||||
<% @project = project %>
|
||||
<li>
|
||||
<%= link_to_project project %> (<%= format_time(project.created_on) %>)
|
||||
<%= link_to h(project.name), :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)
|
||||
<%= textilizable project.short_description, :project => project %>
|
||||
</li>
|
||||
<% end %>
|
||||
@@ -34,6 +34,6 @@
|
||||
<% 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'},
|
||||
<%= auto_discovery_link_tag(:atom, {:controller => 'projects', :action => 'activity', :key => User.current.rss_key, :format => 'atom'},
|
||||
:title => "#{Setting.app_title}: #{l(:label_activity)}") %>
|
||||
<% end %>
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
|
||||
<% unless @pages.empty? %>
|
||||
<% other_formats_links do |f| %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'projects', :action => 'activity', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
|
||||
<%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
|
||||
<%= auto_discovery_link_tag(:atom, :controller => 'projects', :action => 'activity', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
|
||||
<% end %>
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
|
||||
<% unless @pages.empty? %>
|
||||
<% other_formats_links do |f| %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
|
||||
<%= f.link_to 'Atom', :url => {:controller => 'projects', :action => 'activity', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
|
||||
<%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
|
||||
<%= auto_discovery_link_tag(:atom, :controller => 'projects', :action => 'activity', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
|
||||
<% end %>
|
||||
|
||||
@@ -4,17 +4,9 @@
|
||||
# Code is not reloaded between requests
|
||||
config.cache_classes = true
|
||||
|
||||
#####
|
||||
# Customize the default logger (http://ruby-doc.org/core/classes/Logger.html)
|
||||
#
|
||||
# Use a different logger for distributed setups
|
||||
# config.logger = SyslogLogger.new
|
||||
#
|
||||
# Rotate logs bigger than 1MB, keeps no more than 7 rotated logs around.
|
||||
# When setting a new Logger, make sure to set it's log level too.
|
||||
#
|
||||
# config.logger = Logger.new(config.log_path, 7, 1048576)
|
||||
# config.logger.level = Logger::INFO
|
||||
|
||||
|
||||
# Full error reports are disabled and caching is turned on
|
||||
config.action_controller.consider_all_requests_local = false
|
||||
|
||||
@@ -78,17 +78,3 @@ module AsynchronousMailer
|
||||
end
|
||||
|
||||
ActionMailer::Base.send :include, AsynchronousMailer
|
||||
|
||||
# TODO: Hack to support i18n 4.x on Rails 2.3.5. Remove post 2.3.6.
|
||||
# See http://www.redmine.org/issues/6428 and http://www.redmine.org/issues/5608
|
||||
module I18n
|
||||
module Backend
|
||||
module Base
|
||||
def warn_syntax_deprecation!
|
||||
return if @skip_syntax_deprecation
|
||||
warn "The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead.\nDowngrade your i18n gem to 0.3.7 (everything above must be deinstalled) to remove this warning, see http://www.redmine.org/issues/5608 for more information."
|
||||
@skip_syntax_deprecation = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
bg:
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
# Use the strftime parameters for formats.
|
||||
@@ -64,11 +63,7 @@ bg:
|
||||
one: "almost 1 year"
|
||||
other: "almost {{count}} years"
|
||||
|
||||
number:
|
||||
format:
|
||||
separator: "."
|
||||
delimiter: ""
|
||||
precision: 3
|
||||
number:
|
||||
human:
|
||||
format:
|
||||
precision: 1
|
||||
@@ -76,13 +71,13 @@ bg:
|
||||
storage_units:
|
||||
format: "%n %u"
|
||||
units:
|
||||
kb: KB
|
||||
tb: TB
|
||||
gb: GB
|
||||
byte:
|
||||
one: Byte
|
||||
other: Bytes
|
||||
kb: "KB"
|
||||
mb: "MB"
|
||||
gb: "GB"
|
||||
tb: "TB"
|
||||
mb: 'MB'
|
||||
|
||||
# Used in array.to_sentence.
|
||||
support:
|
||||
@@ -116,7 +111,6 @@ bg:
|
||||
greater_than_start_date: "трябва да е след началната дата"
|
||||
not_same_project: "не е от същия проект"
|
||||
circular_dependency: "Тази релация ще доведе до безкрайна зависимост"
|
||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
||||
|
||||
actionview_instancetag_blank_option: Изберете
|
||||
|
||||
@@ -710,7 +704,7 @@ bg:
|
||||
text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted."
|
||||
label_and_its_subprojects: "{{value}} and its subprojects"
|
||||
mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next days"
|
||||
text_user_wrote: "{{value}} wrote:"
|
||||
label_duplicated_by: duplicated by
|
||||
setting_enabled_scm: Enabled SCM
|
||||
@@ -904,12 +898,3 @@ bg:
|
||||
text_zoom_in: Zoom in
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
field_time_entries: Log time
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Calendar
|
||||
field_member_of_group: Member of Group
|
||||
field_assigned_to_role: Member of Role
|
||||
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
|
||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
||||
field_text: Text field
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#Ernad Husremovic hernad@bring.out.ba
|
||||
|
||||
bs:
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
default: "%d.%m.%Y"
|
||||
@@ -130,7 +129,6 @@ bs:
|
||||
greater_than_start_date: "mora biti veći nego početni datum"
|
||||
not_same_project: "ne pripada istom projektu"
|
||||
circular_dependency: "Ova relacija stvar cirkularnu zavisnost"
|
||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
||||
|
||||
actionview_instancetag_blank_option: Molimo odaberite
|
||||
|
||||
@@ -186,7 +184,7 @@ bs:
|
||||
mail_body_account_information: Informacija o vašem korisničkom računu
|
||||
mail_subject_account_activation_request: "{{value}} zahtjev za aktivaciju korisničkog računa"
|
||||
mail_body_account_activation_request: "Novi korisnik ({{value}}) se registrovao. Korisnički račun čeka vaše odobrenje za aktivaciju:"
|
||||
mail_subject_reminder: "{{count}} aktivnost(i) u kašnjenju u narednim {{days}} danima"
|
||||
mail_subject_reminder: "{{count}} aktivnost(i) u kašnjenju u narednim danima"
|
||||
mail_body_reminder: "{{count}} aktivnost(i) koje su dodjeljenje vama u narednim {{days}} danima:"
|
||||
|
||||
gui_validation_error: 1 greška
|
||||
@@ -924,12 +922,3 @@ bs:
|
||||
text_zoom_in: Zoom in
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
field_time_entries: Log time
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Calendar
|
||||
field_member_of_group: Member of Group
|
||||
field_assigned_to_role: Member of Role
|
||||
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
|
||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
||||
field_text: Text field
|
||||
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
# Redmine catalan translation:
|
||||
# by Joan Duran
|
||||
|
||||
ca:
|
||||
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
# Use the strftime parameters for formats.
|
||||
@@ -69,11 +64,6 @@ ca:
|
||||
other: "almost {{count}} years"
|
||||
|
||||
number:
|
||||
# Default format for numbers
|
||||
format:
|
||||
separator: "."
|
||||
delimiter: ""
|
||||
precision: 3
|
||||
human:
|
||||
format:
|
||||
delimiter: ""
|
||||
@@ -88,7 +78,6 @@ ca:
|
||||
mb: "MB"
|
||||
gb: "GB"
|
||||
tb: "TB"
|
||||
|
||||
|
||||
# Used in array.to_sentence.
|
||||
support:
|
||||
@@ -122,7 +111,6 @@ ca:
|
||||
greater_than_start_date: "ha de ser superior que la data inicial"
|
||||
not_same_project: "no pertany al mateix projecte"
|
||||
circular_dependency: "Aquesta relació crearia una dependència circular"
|
||||
cant_link_an_issue_with_a_descendant: "Un assumpte no es pot enllaçar a una de les seves subtasques"
|
||||
|
||||
actionview_instancetag_blank_option: Seleccioneu
|
||||
|
||||
@@ -156,33 +144,18 @@ ca:
|
||||
notice_email_sent: "S'ha enviat un correu electrònic a {{value}}"
|
||||
notice_email_error: "S'ha produït un error en enviar el correu ({{value}})"
|
||||
notice_feeds_access_key_reseted: "S'ha reiniciat la clau d'accés del RSS."
|
||||
notice_api_access_key_reseted: "S'ha reiniciat la clau d'accés a l'API."
|
||||
notice_failed_to_save_issues: "No s'han pogut desar %s assumptes de {{count}} seleccionats: {{ids}}."
|
||||
notice_failed_to_save_members: "No s'han pogut desar els membres: {{errors}}."
|
||||
notice_no_issue_selected: "No s'ha seleccionat cap assumpte. Activeu els assumptes que voleu editar."
|
||||
notice_account_pending: "S'ha creat el compte i ara està pendent de l'aprovació de l'administrador."
|
||||
notice_default_data_loaded: "S'ha carregat correctament la configuració predeterminada."
|
||||
notice_unable_delete_version: "No s'ha pogut suprimir la versió."
|
||||
notice_unable_delete_time_entry: "No s'ha pogut suprimir l'entrada del registre de temps."
|
||||
notice_issue_done_ratios_updated: "S'ha actualitzat el tant per cent dels assumptes."
|
||||
|
||||
error_can_t_load_default_data: "No s'ha pogut carregar la configuració predeterminada: {{value}} "
|
||||
error_scm_not_found: "No s'ha trobat l'entrada o la revisió en el dipòsit."
|
||||
error_scm_command_failed: "S'ha produït un error en intentar accedir al dipòsit: {{value}}"
|
||||
error_scm_annotate: "L'entrada no existeix o no s'ha pogut anotar."
|
||||
error_issue_not_found_in_project: "No s'ha trobat l'assumpte o no pertany a aquest projecte"
|
||||
error_no_tracker_in_project: "Aquest projecte no té seguidor associat. Comproveu els paràmetres del projecte."
|
||||
error_no_default_issue_status: "No s'ha definit cap estat d'assumpte predeterminat. Comproveu la configuració (aneu a «Administració -> Estats de l'assumpte»)."
|
||||
error_can_not_delete_custom_field: "No s'ha pogut suprimir el camp personalitat"
|
||||
error_can_not_delete_tracker: "Aquest seguidor conté assumptes i no es pot suprimir."
|
||||
error_can_not_remove_role: "Aquest rol s'està utilitzant i no es pot suprimir."
|
||||
error_can_not_reopen_issue_on_closed_version: "Un assumpte assignat a una versió tancada no es pot tornar a obrir"
|
||||
error_can_not_archive_project: "Aquest projecte no es pot arxivar"
|
||||
error_issue_done_ratios_not_updated: "No s'ha actualitza el tant per cent dels assumptes."
|
||||
error_workflow_copy_source: "Seleccioneu un seguidor o rol font"
|
||||
error_workflow_copy_target: "Seleccioneu seguidors i rols objectiu"
|
||||
error_unable_delete_issue_status: "No s'ha pogut suprimir l'estat de l'assumpte"
|
||||
error_unable_to_connect: "No s'ha pogut connectar ({{value}})"
|
||||
|
||||
warning_attachments_not_saved: "No s'han pogut desar {{count}} fitxers."
|
||||
|
||||
mail_subject_lost_password: "Contrasenya de {{value}}"
|
||||
@@ -193,12 +166,8 @@ ca:
|
||||
mail_body_account_information: Informació del compte
|
||||
mail_subject_account_activation_request: "Sol·licitud d'activació del compte de {{value}}"
|
||||
mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:"
|
||||
mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies"
|
||||
mail_subject_reminder: "%d assumptes venceran els següents {{count}} dies"
|
||||
mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:"
|
||||
mail_subject_wiki_content_added: "S'ha afegit la pàgina wiki «{{page}}»"
|
||||
mail_body_wiki_content_added: "En {{author}} ha afegit la pàgina wiki «{{page}}»."
|
||||
mail_subject_wiki_content_updated: "S'ha actualitzat la pàgina wiki «{{page}}»"
|
||||
mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pàgina wiki «{{page}}»."
|
||||
|
||||
gui_validation_error: 1 error
|
||||
gui_validation_error_plural: "{{count}} errors"
|
||||
@@ -238,7 +207,6 @@ ca:
|
||||
field_priority: Prioritat
|
||||
field_fixed_version: Versió objectiu
|
||||
field_user: Usuari
|
||||
field_principal: Principal
|
||||
field_role: Rol
|
||||
field_homepage: Pàgina web
|
||||
field_is_public: Públic
|
||||
@@ -283,7 +251,6 @@ ca:
|
||||
field_redirect_existing_links: Redirigeix els enllaços existents
|
||||
field_estimated_hours: Temps previst
|
||||
field_column_names: Columnes
|
||||
field_time_entries: "Registre de temps"
|
||||
field_time_zone: Zona horària
|
||||
field_searchable: Es pot cercar
|
||||
field_default_value: Valor predeterminat
|
||||
@@ -293,9 +260,6 @@ ca:
|
||||
field_watcher: Vigilància
|
||||
field_identity_url: URL OpenID
|
||||
field_content: Contingut
|
||||
field_group_by: "Agrupa els resultats per"
|
||||
field_sharing: Compartició
|
||||
field_parent_issue: "Tasca pare"
|
||||
|
||||
setting_app_title: "Títol de l'aplicació"
|
||||
setting_app_subtitle: "Subtítol de l'aplicació"
|
||||
@@ -331,35 +295,20 @@ ca:
|
||||
setting_activity_days_default: "Dies a mostrar l'activitat del projecte"
|
||||
setting_display_subprojects_issues: "Mostra els assumptes d'un subprojecte en el projecte pare per defecte"
|
||||
setting_enabled_scm: "Habilita l'SCM"
|
||||
setting_mail_handler_body_delimiters: "Trunca els correus electrònics després d'una d'aquestes línies"
|
||||
setting_mail_handler_api_enabled: "Habilita el WS per correus electrònics d'entrada"
|
||||
setting_mail_handler_api_key: Clau API
|
||||
setting_sequential_project_identifiers: Genera identificadors de projecte seqüencials
|
||||
setting_gravatar_enabled: "Utilitza les icones d'usuari Gravatar"
|
||||
setting_gravatar_default: "Imatge Gravatar predeterminada"
|
||||
setting_diff_max_lines_displayed: Número màxim de línies amb diferències mostrades
|
||||
setting_file_max_size_displayed: Mida màxima dels fitxers de text mostrats en línia
|
||||
setting_repository_log_display_limit: Número màxim de revisions que es mostren al registre de fitxers
|
||||
setting_openid: "Permet entrar i registrar-se amb l'OpenID"
|
||||
setting_password_min_length: "Longitud mínima de la contrasenya"
|
||||
setting_new_project_user_role_id: "Aquest rol es dóna a un usuari no administrador per a crear projectes"
|
||||
setting_default_projects_modules: "Mòduls activats per defecte en els projectes nous"
|
||||
setting_issue_done_ratio: "Calcula tant per cent realitzat de l'assumpte amb"
|
||||
setting_issue_done_ratio_issue_status: "Utilitza l'estat de l'assumpte"
|
||||
setting_issue_done_ratio_issue_field: "Utilitza el camp de l'assumpte"
|
||||
setting_start_of_week: "Inicia les setmanes en"
|
||||
setting_rest_api_enabled: "Habilita el servei web REST"
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
|
||||
permission_add_project: "Crea projectes"
|
||||
permission_add_subprojects: "Crea subprojectes"
|
||||
|
||||
permission_edit_project: Edita el projecte
|
||||
permission_select_project_modules: Selecciona els mòduls del projecte
|
||||
permission_manage_members: Gestiona els membres
|
||||
permission_manage_project_activities: "Gestiona les activitats del projecte"
|
||||
permission_manage_versions: Gestiona les versions
|
||||
permission_manage_categories: Gestiona les categories dels assumptes
|
||||
permission_view_issues: "Visualitza els assumptes"
|
||||
permission_add_issues: Afegeix assumptes
|
||||
permission_edit_issues: Edita els assumptes
|
||||
permission_manage_issue_relations: Gestiona les relacions dels assumptes
|
||||
@@ -374,7 +323,6 @@ ca:
|
||||
permission_view_calendar: Visualitza el calendari
|
||||
permission_view_issue_watchers: Visualitza la llista de vigilàncies
|
||||
permission_add_issue_watchers: Afegeix vigilàncies
|
||||
permission_delete_issue_watchers: Suprimeix els vigilants
|
||||
permission_log_time: Registra el temps invertit
|
||||
permission_view_time_entries: Visualitza el temps invertit
|
||||
permission_edit_time_entries: Edita els registres de temps
|
||||
@@ -404,8 +352,6 @@ ca:
|
||||
permission_edit_own_messages: Edita els missatges propis
|
||||
permission_delete_messages: Suprimeix els missatges
|
||||
permission_delete_own_messages: Suprimeix els missatges propis
|
||||
permission_export_wiki_pages: "Exporta les pàgines wiki"
|
||||
permission_manage_subtasks: "Gestiona subtasques"
|
||||
|
||||
project_module_issue_tracking: "Seguidor d'assumptes"
|
||||
project_module_time_tracking: Seguidor de temps
|
||||
@@ -415,13 +361,10 @@ ca:
|
||||
project_module_wiki: Wiki
|
||||
project_module_repository: Dipòsit
|
||||
project_module_boards: Taulers
|
||||
project_module_calendar: Calendari
|
||||
project_module_gantt: Gantt
|
||||
|
||||
label_user: Usuari
|
||||
label_user_plural: Usuaris
|
||||
label_user_new: Usuari nou
|
||||
label_user_anonymous: Anònim
|
||||
label_project: Projecte
|
||||
label_project_new: Projecte nou
|
||||
label_project_plural: Projectes
|
||||
@@ -468,13 +411,12 @@ ca:
|
||||
label_information_plural: Informació
|
||||
label_please_login: Entreu
|
||||
label_register: Registre
|
||||
label_login_with_open_id_option: "o entra amb l'OpenID"
|
||||
label_login_with_open_id_option: o entra amb l'OpenID
|
||||
label_password_lost: Contrasenya perduda
|
||||
label_home: Inici
|
||||
label_my_page: La meva pàgina
|
||||
label_my_account: El meu compte
|
||||
label_my_projects: Els meus projectes
|
||||
label_my_page_block: "Els meus blocs de pàgina"
|
||||
label_administration: Administració
|
||||
label_login: Entra
|
||||
label_logout: Surt
|
||||
@@ -494,7 +436,6 @@ ca:
|
||||
label_auth_source_new: "Mode d'autenticació nou"
|
||||
label_auth_source_plural: "Modes d'autenticació"
|
||||
label_subproject_plural: Subprojectes
|
||||
label_subproject_new: "Subprojecte nou"
|
||||
label_and_its_subprojects: "{{value}} i els seus subprojectes"
|
||||
label_min_max_length: Longitud mín - max
|
||||
label_list: Llist
|
||||
@@ -529,9 +470,8 @@ ca:
|
||||
label_version: Versió
|
||||
label_version_new: Versió nova
|
||||
label_version_plural: Versions
|
||||
label_close_versions: "Tanca les versions completades"
|
||||
label_confirmation: Confirmació
|
||||
label_export_to: "També disponible a:"
|
||||
label_export_to: 'També disponible a:'
|
||||
label_read: Llegeix...
|
||||
label_public_projects: Projectes públics
|
||||
label_open_issues: obert
|
||||
@@ -588,8 +528,6 @@ ca:
|
||||
label_not_equals: no és
|
||||
label_in_less_than: en menys de
|
||||
label_in_more_than: en més de
|
||||
label_greater_or_equal: ">="
|
||||
label_less_or_equal: <=
|
||||
label_in: en
|
||||
label_today: avui
|
||||
label_all_time: tot el temps
|
||||
@@ -612,21 +550,17 @@ ca:
|
||||
label_browse: Navega
|
||||
label_modification: "{{count}} canvi"
|
||||
label_modification_plural: "{{count}} canvis"
|
||||
label_branch: Branca
|
||||
label_tag: Etiqueta
|
||||
label_revision: Revisió
|
||||
label_revision_plural: Revisions
|
||||
label_revision_id: "Revisió {{value}}"
|
||||
label_associated_revisions: Revisions associades
|
||||
label_added: afegit
|
||||
label_modified: modificat
|
||||
label_copied: copiat
|
||||
label_renamed: reanomenat
|
||||
label_copied: copiat
|
||||
label_deleted: suprimit
|
||||
label_latest_revision: Última revisió
|
||||
label_latest_revision_plural: Últimes revisions
|
||||
label_view_revisions: Visualitza les revisions
|
||||
label_view_all_revisions: "Visualitza totes les revisions"
|
||||
label_max_size: Mida màxima
|
||||
label_sort_highest: Mou a la part superior
|
||||
label_sort_higher: Mou cap amunt
|
||||
@@ -652,7 +586,6 @@ ca:
|
||||
label_changes_details: Detalls de tots els canvis
|
||||
label_issue_tracking: "Seguiment d'assumptes"
|
||||
label_spent_time: Temps invertit
|
||||
label_overall_spent_time: "Temps total invertit"
|
||||
label_f_hour: "{{value}} hora"
|
||||
label_f_hour_plural: "{{value}} hores"
|
||||
label_time_tracking: Temps de seguiment
|
||||
@@ -690,8 +623,6 @@ ca:
|
||||
label_board: Fòrum
|
||||
label_board_new: Fòrum nou
|
||||
label_board_plural: Fòrums
|
||||
label_board_locked: Bloquejat
|
||||
label_board_sticky: Sticky
|
||||
label_topic_plural: Temes
|
||||
label_message_plural: Missatges
|
||||
label_message_last: Últim missatge
|
||||
@@ -707,8 +638,6 @@ ca:
|
||||
label_language_based: "Basat en l'idioma de l'usuari"
|
||||
label_sort_by: "Ordena per {{value}}"
|
||||
label_send_test_email: Envia un correu electrònic de prova
|
||||
label_feeds_access_key: "Clau d'accés del RSS"
|
||||
label_missing_feeds_access_key: "Falta una clau d'accés del RSS"
|
||||
label_feeds_access_key_created_on: "Clau d'accés del RSS creada fa {{value}}"
|
||||
label_module_plural: Mòduls
|
||||
label_added_time_by: "Afegit per {{author}} fa {{age}}"
|
||||
@@ -754,28 +683,6 @@ ca:
|
||||
label_ascending: Ascendent
|
||||
label_descending: Descendent
|
||||
label_date_from_to: Des de {{start}} a {{end}}
|
||||
label_wiki_content_added: "S'ha afegit la pàgina wiki"
|
||||
label_wiki_content_updated: "S'ha actualitzat la pàgina wiki"
|
||||
label_group: Grup
|
||||
label_group_plural: Grups
|
||||
label_group_new: Grup nou
|
||||
label_time_entry_plural: Temps invertit
|
||||
label_version_sharing_hierarchy: "Amb la jerarquia del projecte"
|
||||
label_version_sharing_system: "Amb tots els projectes"
|
||||
label_version_sharing_descendants: "Amb tots els subprojectes"
|
||||
label_version_sharing_tree: "Amb l'arbre del projecte"
|
||||
label_version_sharing_none: "Sense compartir"
|
||||
label_update_issue_done_ratios: "Actualitza el tant per cent dels assumptes realitzats"
|
||||
label_copy_source: Font
|
||||
label_copy_target: Objectiu
|
||||
label_copy_same_as_target: "El mateix que l'objectiu"
|
||||
label_display_used_statuses_only: "Mostra només els estats que utilitza aquest seguidor"
|
||||
label_api_access_key: "Clau d'accés a l'API"
|
||||
label_missing_api_access_key: "Falta una clau d'accés de l'API"
|
||||
label_api_access_key_created_on: "Clau d'accés de l'API creada fa {{value}}"
|
||||
label_profile: Perfil
|
||||
label_subtask_plural: Subtasques
|
||||
label_project_copy_notifications: "Envia notificacions de correu electrònic durant la còpia del projecte"
|
||||
|
||||
button_login: Entra
|
||||
button_submit: Tramet
|
||||
@@ -797,12 +704,11 @@ ca:
|
||||
button_list: Llista
|
||||
button_view: Visualitza
|
||||
button_move: Mou
|
||||
button_move_and_follow: "Mou i segueix"
|
||||
button_back: Enrere
|
||||
button_cancel: Cancel·la
|
||||
button_activate: Activa
|
||||
button_sort: Ordena
|
||||
button_log_time: "Registre de temps"
|
||||
button_log_time: "Hora d'entrada"
|
||||
button_rollback: Torna a aquesta versió
|
||||
button_watch: Vigila
|
||||
button_unwatch: No vigilis
|
||||
@@ -813,24 +719,15 @@ ca:
|
||||
button_rename: Reanomena
|
||||
button_change_password: Canvia la contrasenya
|
||||
button_copy: Copia
|
||||
button_copy_and_follow: "Copia i segueix"
|
||||
button_annotate: Anota
|
||||
button_update: Actualitza
|
||||
button_configure: Configura
|
||||
button_quote: Cita
|
||||
button_duplicate: Duplica
|
||||
button_show: Mostra
|
||||
|
||||
status_active: actiu
|
||||
status_registered: informat
|
||||
status_locked: bloquejat
|
||||
|
||||
version_status_open: oberta
|
||||
version_status_locked: bloquejada
|
||||
version_status_closed: tancada
|
||||
|
||||
field_active: Actiu
|
||||
|
||||
text_select_mail_notifications: "Seleccioneu les accions per les quals s'hauria d'enviar una notificació per correu electrònic."
|
||||
text_regexp_info: ex. ^[A-Z0-9]+$
|
||||
text_min_max_length_info: 0 significa sense restricció
|
||||
@@ -838,10 +735,6 @@ ca:
|
||||
text_subprojects_destroy_warning: "També seran suprimits els seus subprojectes: {{value}}."
|
||||
text_workflow_edit: Seleccioneu un rol i un seguidor per a editar el flux de treball
|
||||
text_are_you_sure: Segur?
|
||||
text_journal_changed: "{{label}} ha canviat de {{old}} a {{new}}"
|
||||
text_journal_set_to: "{{label}} s'ha establert a {{value}}"
|
||||
text_journal_deleted: "{{label}} s'ha suprimit ({{old}})"
|
||||
text_journal_added: "S'ha afegit {{label}} {{value}}"
|
||||
text_tip_task_begin_day: "tasca que s'inicia aquest dia"
|
||||
text_tip_task_end_day: tasca que finalitza aquest dia
|
||||
text_tip_task_begin_end_day: "tasca que s'inicia i finalitza aquest dia"
|
||||
@@ -852,7 +745,6 @@ ca:
|
||||
text_tracker_no_workflow: "No s'ha definit cap flux de treball per a aquest seguidor"
|
||||
text_unallowed_characters: Caràcters no permesos
|
||||
text_comma_separated: Es permeten valors múltiples (separats per una coma).
|
||||
text_line_separated: "Es permeten diversos valors (una línia per cada valor)."
|
||||
text_issues_ref_in_commit_messages: Referència i soluciona els assumptes en els missatges publicats
|
||||
text_issue_added: "L'assumpte {{id}} ha sigut informat per {{author}}."
|
||||
text_issue_updated: "L'assumpte {{id}} ha sigut actualitzat per {{author}}."
|
||||
@@ -873,21 +765,14 @@ ca:
|
||||
text_destroy_time_entries_question: "S'han informat {{hours}} hores en els assumptes que aneu a suprimir. Què voleu fer?"
|
||||
text_destroy_time_entries: Suprimeix les hores informades
|
||||
text_assign_time_entries_to_project: Assigna les hores informades al projecte
|
||||
text_reassign_time_entries: "Torna a assignar les hores informades a aquest assumpte:"
|
||||
text_reassign_time_entries: 'Torna a assignar les hores informades a aquest assumpte:'
|
||||
text_user_wrote: "{{value}} va escriure:"
|
||||
text_enumeration_destroy_question: "{{count}} objectes estan assignats a aquest valor."
|
||||
text_enumeration_category_reassign_to: "Torna a assignar-los a aquest valor:"
|
||||
text_enumeration_category_reassign_to: 'Torna a assignar-los a aquest valor:'
|
||||
text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/email.yml i reinicieu l'aplicació per habilitar-lo."
|
||||
text_repository_usernames_mapping: "Seleccioneu l'assignació entre els usuaris del Redmine i cada nom d'usuari trobat al dipòsit.\nEls usuaris amb el mateix nom d'usuari o correu del Redmine i del dipòsit s'assignaran automàticament."
|
||||
text_diff_truncated: "... Aquestes diferències s'han trucat perquè excedeixen la mida màxima que es pot mostrar."
|
||||
text_custom_field_possible_values_info: "Una línia per a cada valor"
|
||||
text_wiki_page_destroy_question: "Aquesta pàgina té {{descendants}} pàgines fill i descendents. Què voleu fer?"
|
||||
text_wiki_page_nullify_children: "Deixa les pàgines fill com a pàgines arrel"
|
||||
text_wiki_page_destroy_children: "Suprimeix les pàgines fill i tots els seus descendents"
|
||||
text_wiki_page_reassign_children: "Reasigna les pàgines fill a aquesta pàgina pare"
|
||||
text_own_membership_delete_confirmation: "Esteu a punt de suprimir algun o tots els vostres permisos i potser no podreu editar més aquest projecte.\nSegur que voleu continuar?"
|
||||
text_zoom_in: Redueix
|
||||
text_zoom_out: Amplia
|
||||
text_custom_field_possible_values_info: 'Una línia per a cada valor'
|
||||
|
||||
default_role_manager: Gestor
|
||||
default_role_developer: Desenvolupador
|
||||
@@ -914,10 +799,105 @@ ca:
|
||||
enumeration_issue_priorities: Prioritat dels assumptes
|
||||
enumeration_doc_categories: Categories del document
|
||||
enumeration_activities: Activitats (seguidor de temps)
|
||||
enumeration_system_activity: Activitat del sistema
|
||||
field_member_of_group: Member of Group
|
||||
field_assigned_to_role: Member of Role
|
||||
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
|
||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
||||
field_text: Text field
|
||||
|
||||
label_greater_or_equal: ">="
|
||||
label_less_or_equal: <=
|
||||
text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
|
||||
text_wiki_page_reassign_children: Reassign child pages to this parent page
|
||||
text_wiki_page_nullify_children: Keep child pages as root pages
|
||||
text_wiki_page_destroy_children: Delete child pages and all their descendants
|
||||
setting_password_min_length: Minimum password length
|
||||
field_group_by: Group results by
|
||||
mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
|
||||
label_wiki_content_added: Wiki page added
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
|
||||
mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
|
||||
label_wiki_content_updated: Wiki page updated
|
||||
mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
|
||||
permission_add_project: Create project
|
||||
setting_new_project_user_role_id: Role given to a non-admin user who creates a project
|
||||
label_view_all_revisions: View all revisions
|
||||
label_tag: Tag
|
||||
label_branch: Branch
|
||||
error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
|
||||
error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
|
||||
text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
|
||||
text_journal_set_to: "{{label}} set to {{value}}"
|
||||
text_journal_deleted: "{{label}} deleted ({{old}})"
|
||||
label_group_plural: Groups
|
||||
label_group: Group
|
||||
label_group_new: New group
|
||||
label_time_entry_plural: Spent time
|
||||
text_journal_added: "{{label}} {{value}} added"
|
||||
field_active: Active
|
||||
enumeration_system_activity: System Activity
|
||||
permission_delete_issue_watchers: Delete watchers
|
||||
version_status_closed: closed
|
||||
version_status_locked: locked
|
||||
version_status_open: open
|
||||
error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
|
||||
label_user_anonymous: Anonymous
|
||||
button_move_and_follow: Move and follow
|
||||
setting_default_projects_modules: Default enabled modules for new projects
|
||||
setting_gravatar_default: Default Gravatar image
|
||||
field_sharing: Sharing
|
||||
label_version_sharing_hierarchy: With project hierarchy
|
||||
label_version_sharing_system: With all projects
|
||||
label_version_sharing_descendants: With subprojects
|
||||
label_version_sharing_tree: With project tree
|
||||
label_version_sharing_none: Not shared
|
||||
error_can_not_archive_project: This project can not be archived
|
||||
button_duplicate: Duplicate
|
||||
button_copy_and_follow: Copy and follow
|
||||
label_copy_source: Source
|
||||
setting_issue_done_ratio: Calculate the issue done ratio with
|
||||
setting_issue_done_ratio_issue_status: Use the issue status
|
||||
error_issue_done_ratios_not_updated: Issue done ratios not updated.
|
||||
error_workflow_copy_target: Please select target tracker(s) and role(s)
|
||||
setting_issue_done_ratio_issue_field: Use the issue field
|
||||
label_copy_same_as_target: Same as target
|
||||
label_copy_target: Target
|
||||
notice_issue_done_ratios_updated: Issue done ratios updated.
|
||||
error_workflow_copy_source: Please select a source tracker or role
|
||||
label_update_issue_done_ratios: Update issue done ratios
|
||||
setting_start_of_week: Start calendars on
|
||||
permission_view_issues: View Issues
|
||||
label_display_used_statuses_only: Only display statuses that are used by this tracker
|
||||
label_revision_id: Revision {{value}}
|
||||
label_api_access_key: API access key
|
||||
label_api_access_key_created_on: API access key created {{value}} ago
|
||||
label_feeds_access_key: RSS access key
|
||||
notice_api_access_key_reseted: Your API access key was reset.
|
||||
setting_rest_api_enabled: Enable REST web service
|
||||
label_missing_api_access_key: Missing an API access key
|
||||
label_missing_feeds_access_key: Missing a RSS access key
|
||||
button_show: Show
|
||||
text_line_separated: Multiple values allowed (one line for each value).
|
||||
setting_mail_handler_body_delimiters: Truncate emails after one of these lines
|
||||
permission_add_subprojects: Create subprojects
|
||||
label_subproject_new: New subproject
|
||||
text_own_membership_delete_confirmation: |-
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
error_unable_delete_issue_status: Unable to delete issue status
|
||||
label_profile: Profile
|
||||
permission_manage_subtasks: Manage subtasks
|
||||
field_parent_issue: Parent task
|
||||
label_subtask_plural: Subtasks
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
error_can_not_delete_custom_field: Unable to delete custom field
|
||||
error_unable_to_connect: Unable to connect ({{value}})
|
||||
error_can_not_remove_role: This role is in use and can not be deleted.
|
||||
error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
|
||||
field_principal: Principal
|
||||
label_my_page_block: My page block
|
||||
notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
|
||||
text_zoom_out: Zoom out
|
||||
text_zoom_in: Zoom in
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
cs:
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
# Use the strftime parameters for formats.
|
||||
@@ -24,8 +23,8 @@ cs:
|
||||
time: "%H:%M"
|
||||
short: "%d %b %H:%M"
|
||||
long: "%B %d, %Y %H:%M"
|
||||
am: "dop."
|
||||
pm: "odp."
|
||||
am: "am"
|
||||
pm: "pm"
|
||||
|
||||
datetime:
|
||||
distance_in_words:
|
||||
@@ -61,14 +60,10 @@ cs:
|
||||
one: "více než 1 rok"
|
||||
other: "více než {{count}} roky"
|
||||
almost_x_years:
|
||||
one: "témeř 1 rok"
|
||||
other: "téměř {{count}} roky"
|
||||
one: "almost 1 year"
|
||||
other: "almost {{count}} years"
|
||||
|
||||
number:
|
||||
format:
|
||||
separator: "."
|
||||
delimiter: ""
|
||||
precision: 3
|
||||
number:
|
||||
human:
|
||||
format:
|
||||
precision: 1
|
||||
@@ -116,7 +111,6 @@ cs:
|
||||
greater_than_start_date: "musí být větší než počáteční datum"
|
||||
not_same_project: "nepatří stejnému projektu"
|
||||
circular_dependency: "Tento vztah by vytvořil cyklickou závislost"
|
||||
cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho dílčích úkolů"
|
||||
|
||||
# Updated by Josef Liška <jl@chl.cz>
|
||||
# CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
|
||||
@@ -150,19 +144,19 @@ cs:
|
||||
notice_successful_connection: Úspěšné připojení.
|
||||
notice_file_not_found: Stránka na kterou se snažíte zobrazit neexistuje nebo byla smazána.
|
||||
notice_locking_conflict: Údaje byly změněny jiným uživatelem.
|
||||
notice_scm_error: Záznam a/nebo revize neexistuje v repozitáři.
|
||||
notice_scm_error: Entry and/or revision doesn't exist in the repository.
|
||||
notice_not_authorized: Nemáte dostatečná práva pro zobrazení této stránky.
|
||||
notice_email_sent: "Na adresu {{value}} byl odeslán email"
|
||||
notice_email_error: "Při odesílání emailu nastala chyba ({{value}})"
|
||||
notice_feeds_access_key_reseted: Váš klíč pro přístup k RSS byl resetován.
|
||||
notice_failed_to_save_issues: "Chyba při uložení {{count}} úkolu(ů) z {{total}} vybraných: {{ids}}."
|
||||
notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}."
|
||||
notice_no_issue_selected: "Nebyl zvolen žádný úkol. Prosím, zvolte úkoly, které chcete editovat"
|
||||
notice_account_pending: "Váš účet byl vytvořen, nyní čeká na schválení administrátorem."
|
||||
notice_default_data_loaded: Výchozí konfigurace úspěšně nahrána.
|
||||
|
||||
error_can_t_load_default_data: "Výchozí konfigurace nebyla nahrána: {{value}}"
|
||||
error_scm_not_found: "Položka a/nebo revize neexistují v repozitáři."
|
||||
error_scm_command_failed: "Při pokusu o přístup k repozitáři došlo k chybě: {{value}}"
|
||||
error_scm_not_found: "Položka a/nebo revize neexistují v repository."
|
||||
error_scm_command_failed: "Při pokusu o přístup k repository došlo k chybě: {{value}}"
|
||||
error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatří k tomuto projektu'
|
||||
|
||||
mail_subject_lost_password: "Vaše heslo ({{value}})"
|
||||
@@ -210,10 +204,10 @@ cs:
|
||||
field_due_date: Uzavřít do
|
||||
field_assigned_to: Přiřazeno
|
||||
field_priority: Priorita
|
||||
field_fixed_version: Cílová verze
|
||||
field_fixed_version: Přiřazeno k verzi
|
||||
field_user: Uživatel
|
||||
field_role: Role
|
||||
field_homepage: Domovská stránka
|
||||
field_homepage: Homepage
|
||||
field_is_public: Veřejný
|
||||
field_parent: Nadřazený projekt
|
||||
field_is_in_roadmap: Úkoly zobrazené v plánu
|
||||
@@ -265,18 +259,18 @@ cs:
|
||||
setting_app_subtitle: Podtitulek aplikace
|
||||
setting_welcome_text: Uvítací text
|
||||
setting_default_language: Výchozí jazyk
|
||||
setting_login_required: Autentifikace vyžadována
|
||||
setting_login_required: Auten. vyžadována
|
||||
setting_self_registration: Povolena automatická registrace
|
||||
setting_attachment_max_size: Maximální velikost přílohy
|
||||
setting_issues_export_limit: Limit pro export úkolů
|
||||
setting_mail_from: Odesílat emaily z adresy
|
||||
setting_bcc_recipients: Příjemci skryté kopie (bcc)
|
||||
setting_host_name: Jméno serveru
|
||||
setting_host_name: Host name
|
||||
setting_text_formatting: Formátování textu
|
||||
setting_wiki_compression: Komprese historie Wiki
|
||||
setting_feeds_limit: Limit obsahu příspěvků
|
||||
setting_wiki_compression: Komperese historie Wiki
|
||||
setting_feeds_limit: Feed content limit
|
||||
setting_default_projects_public: Nové projekty nastavovat jako veřejné
|
||||
setting_autofetch_changesets: Automaticky stahovat commity
|
||||
setting_autofetch_changesets: Autofetch commits
|
||||
setting_sys_api_enabled: Povolit WS pro správu repozitory
|
||||
setting_commit_ref_keywords: Klíčová slova pro odkazy
|
||||
setting_commit_fix_keywords: Klíčová slova pro uzavření
|
||||
@@ -290,8 +284,8 @@ cs:
|
||||
setting_protocol: Protokol
|
||||
setting_per_page_options: Povolené počty řádků na stránce
|
||||
setting_user_format: Formát zobrazení uživatele
|
||||
setting_activity_days_default: Dny zobrazené v činnosti projektu
|
||||
setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavním projektu
|
||||
setting_activity_days_default: Days displayed on project activity
|
||||
setting_display_subprojects_issues: Display subprojects issues on main projects by default
|
||||
|
||||
project_module_issue_tracking: Sledování úkolů
|
||||
project_module_time_tracking: Sledování času
|
||||
@@ -299,7 +293,7 @@ cs:
|
||||
project_module_documents: Dokumenty
|
||||
project_module_files: Soubory
|
||||
project_module_wiki: Wiki
|
||||
project_module_repository: Repozitář
|
||||
project_module_repository: Repository
|
||||
project_module_boards: Diskuse
|
||||
|
||||
label_user: Uživatel
|
||||
@@ -309,16 +303,16 @@ cs:
|
||||
label_project_new: Nový projekt
|
||||
label_project_plural: Projekty
|
||||
label_x_projects:
|
||||
zero: žádné projekty
|
||||
one: 1 projekt
|
||||
other: "{{count}} projekty(ů)"
|
||||
zero: no projects
|
||||
one: 1 project
|
||||
other: "{{count}} projects"
|
||||
label_project_all: Všechny projekty
|
||||
label_project_latest: Poslední projekty
|
||||
label_issue: Úkol
|
||||
label_issue_new: Nový úkol
|
||||
label_issue_plural: Úkoly
|
||||
label_issue_view_all: Všechny úkoly
|
||||
label_issues_by: "Úkoly podle {{value}}"
|
||||
label_issues_by: "Úkoly od uživatele {{value}}"
|
||||
label_issue_added: Úkol přidán
|
||||
label_issue_updated: Úkol aktualizován
|
||||
label_document: Dokument
|
||||
@@ -335,7 +329,7 @@ cs:
|
||||
label_tracker: Fronta
|
||||
label_tracker_plural: Fronty
|
||||
label_tracker_new: Nová fronta
|
||||
label_workflow: Průběh práce
|
||||
label_workflow: Workflow
|
||||
label_issue_status: Stav úkolu
|
||||
label_issue_status_plural: Stavy úkolů
|
||||
label_issue_status_new: Nový stav
|
||||
@@ -378,14 +372,14 @@ cs:
|
||||
label_list: Seznam
|
||||
label_date: Datum
|
||||
label_integer: Celé číslo
|
||||
label_float: Desetinné číslo
|
||||
label_float: Desetiné číslo
|
||||
label_boolean: Ano/Ne
|
||||
label_string: Text
|
||||
label_text: Dlouhý text
|
||||
label_attribute: Atribut
|
||||
label_attribute_plural: Atributy
|
||||
label_download: "{{count}} stažení"
|
||||
label_download_plural: "{{count}} stažení"
|
||||
label_download: "{{count}} Download"
|
||||
label_download_plural: "{{count}} Downloads"
|
||||
label_no_data: Žádné položky
|
||||
label_change_status: Změnit stav
|
||||
label_history: Historie
|
||||
@@ -394,7 +388,7 @@ cs:
|
||||
label_attachment_delete: Odstranit soubor
|
||||
label_attachment_plural: Soubory
|
||||
label_file_added: Soubor přidán
|
||||
label_report: Přehled
|
||||
label_report: Přeheled
|
||||
label_report_plural: Přehledy
|
||||
label_news: Novinky
|
||||
label_news_new: Přidat novinku
|
||||
@@ -416,17 +410,17 @@ cs:
|
||||
label_closed_issues: uzavřený
|
||||
label_closed_issues_plural: uzavřené
|
||||
label_x_open_issues_abbr_on_total:
|
||||
zero: 0 otevřených / {{total}}
|
||||
one: 1 otevřený / {{total}}
|
||||
other: "{{count}} otevřených / {{total}}"
|
||||
zero: 0 open / {{total}}
|
||||
one: 1 open / {{total}}
|
||||
other: "{{count}} open / {{total}}"
|
||||
label_x_open_issues_abbr:
|
||||
zero: 0 otevřených
|
||||
one: 1 otevřený
|
||||
other: "{{count}} otevřených"
|
||||
zero: 0 open
|
||||
one: 1 open
|
||||
other: "{{count}} open"
|
||||
label_x_closed_issues_abbr:
|
||||
zero: 0 uzavřených
|
||||
one: 1 uzavřený
|
||||
other: "{{count}} uzavřených"
|
||||
zero: 0 closed
|
||||
one: 1 closed
|
||||
other: "{{count}} closed"
|
||||
label_total: Celkem
|
||||
label_permissions: Práva
|
||||
label_current_status: Aktuální stav
|
||||
@@ -450,9 +444,9 @@ cs:
|
||||
label_comment: Komentář
|
||||
label_comment_plural: Komentáře
|
||||
label_x_comments:
|
||||
zero: žádné komentáře
|
||||
one: 1 komentář
|
||||
other: "{{count}} komentářů"
|
||||
zero: no comments
|
||||
one: 1 comment
|
||||
other: "{{count}} comments"
|
||||
label_comment_add: Přidat komentáře
|
||||
label_comment_added: Komentář přidán
|
||||
label_comment_delete: Odstranit komentář
|
||||
@@ -482,8 +476,8 @@ cs:
|
||||
label_contains: obsahuje
|
||||
label_not_contains: neobsahuje
|
||||
label_day_plural: dny
|
||||
label_repository: Repozitář
|
||||
label_repository_plural: Repozitáře
|
||||
label_repository: Repository
|
||||
label_repository_plural: Repository
|
||||
label_browse: Procházet
|
||||
label_modification: "{{count}} změna"
|
||||
label_modification_plural: "{{count}} změn"
|
||||
@@ -532,7 +526,7 @@ cs:
|
||||
label_diff_inline: uvnitř
|
||||
label_diff_side_by_side: vedle sebe
|
||||
label_options: Nastavení
|
||||
label_copy_workflow_from: Kopírovat průběh práce z
|
||||
label_copy_workflow_from: Kopírovat workflow z
|
||||
label_permissions_report: Přehled práv
|
||||
label_watched_issues: Sledované úkoly
|
||||
label_related_issues: Související úkoly
|
||||
@@ -553,7 +547,7 @@ cs:
|
||||
label_stay_logged_in: Zůstat přihlášený
|
||||
label_disabled: zakázán
|
||||
label_show_completed_versions: Ukázat dokončené verze
|
||||
label_me: já
|
||||
label_me: mě
|
||||
label_board: Fórum
|
||||
label_board_new: Nové fórum
|
||||
label_board_plural: Fóra
|
||||
@@ -576,12 +570,12 @@ cs:
|
||||
label_module_plural: Moduly
|
||||
label_added_time_by: "Přidáno uživatelem {{author}} před {{age}}"
|
||||
label_updated_time: "Aktualizováno před {{value}}"
|
||||
label_jump_to_a_project: Vyberte projekt...
|
||||
label_jump_to_a_project: Zvolit projekt...
|
||||
label_file_plural: Soubory
|
||||
label_changeset_plural: Changesety
|
||||
label_default_columns: Výchozí sloupce
|
||||
label_no_change_option: (beze změny)
|
||||
label_bulk_edit_selected_issues: Hromadná úprava vybraných úkolů
|
||||
label_bulk_edit_selected_issues: Bulk edit selected issues
|
||||
label_theme: Téma
|
||||
label_default: Výchozí
|
||||
label_search_titles_only: Vyhledávat pouze v názvech
|
||||
@@ -600,7 +594,7 @@ cs:
|
||||
label_scm: SCM
|
||||
label_plugins: Doplňky
|
||||
label_ldap_authentication: Autentifikace LDAP
|
||||
label_downloads_abbr: Staž.
|
||||
label_downloads_abbr: D/L
|
||||
label_optional_description: Volitelný popis
|
||||
label_add_another_file: Přidat další soubor
|
||||
label_preferences: Nastavení
|
||||
@@ -653,7 +647,7 @@ cs:
|
||||
text_regexp_info: např. ^[A-Z0-9]+$
|
||||
text_min_max_length_info: 0 znamená bez limitu
|
||||
text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a všechna související data ?
|
||||
text_workflow_edit: Vyberte roli a frontu k editaci průběhu práce
|
||||
text_workflow_edit: Vyberte roli a frontu k editaci workflow
|
||||
text_are_you_sure: Jste si jisti?
|
||||
text_tip_task_begin_day: úkol začíná v tento den
|
||||
text_tip_task_end_day: úkol končí v tento den
|
||||
@@ -662,24 +656,24 @@ cs:
|
||||
text_caracters_maximum: "{{count}} znaků maximálně."
|
||||
text_caracters_minimum: "Musí být alespoň {{count}} znaků dlouhé."
|
||||
text_length_between: "Délka mezi {{min}} a {{max}} znaky."
|
||||
text_tracker_no_workflow: Pro tuto frontu není definován žádný průběh práce
|
||||
text_tracker_no_workflow: Pro tuto frontu není definován žádný workflow
|
||||
text_unallowed_characters: Nepovolené znaky
|
||||
text_comma_separated: Povoleno více hodnot (oddělěné čárkou).
|
||||
text_issues_ref_in_commit_messages: Odkazování a opravování úkolů ve zprávách commitů
|
||||
text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
|
||||
text_issue_added: "Úkol {{id}} byl vytvořen uživatelem {{author}}."
|
||||
text_issue_updated: "Úkol {{id}} byl aktualizován uživatelem {{author}}."
|
||||
text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto Wiki a celý její obsah?
|
||||
text_wiki_destroy_confirmation: Opravdu si přejete odstranit tuto WIKI a celý její obsah?
|
||||
text_issue_category_destroy_question: "Některé úkoly ({{count}}) jsou přiřazeny k této kategorii. Co s nimi chtete udělat?"
|
||||
text_issue_category_destroy_assignments: Zrušit přiřazení ke kategorii
|
||||
text_issue_category_reassign_to: Přiřadit úkoly do této kategorie
|
||||
text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámení pouze o vašich či o sledovaných položkách (např. o položkách jejichž jste autor nebo ke kterým jste přiřazen(a))."
|
||||
text_no_configuration_data: "Role, fronty, stavy úkolů ani průběh práce nebyly zatím nakonfigurovány.\nVelice doporučujeme nahrát výchozí konfiguraci. Po té si můžete vše upravit"
|
||||
text_no_configuration_data: "Role, fronty, stavy úkolů ani workflow nebyly zatím nakonfigurovány.\nVelice doporučujeme nahrát výchozí konfiguraci.Po té si můžete vše upravit"
|
||||
text_load_default_configuration: Nahrát výchozí konfiguraci
|
||||
text_status_changed_by_changeset: "Použito v changesetu {{value}}."
|
||||
text_issues_destroy_confirmation: 'Opravdu si přejete odstranit všechny zvolené úkoly?'
|
||||
text_select_project_modules: 'Aktivní moduly v tomto projektu:'
|
||||
text_default_administrator_account_changed: Výchozí nastavení administrátorského účtu změněno
|
||||
text_file_repository_writable: Povolen zápis do adresáře ukládání souborů
|
||||
text_file_repository_writable: Povolen zápis do repository
|
||||
text_rmagick_available: RMagick k dispozici (volitelné)
|
||||
text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno {{hours}} práce. Co chete udělat?"
|
||||
text_destroy_time_entries: Odstranit evidované hodiny.
|
||||
@@ -693,7 +687,7 @@ cs:
|
||||
default_tracker_feature: Požadavek
|
||||
default_tracker_support: Podpora
|
||||
default_issue_status_new: Nový
|
||||
default_issue_status_in_progress: Ve vývoji
|
||||
default_issue_status_in_progress: In Progress
|
||||
default_issue_status_resolved: Vyřešený
|
||||
default_issue_status_feedback: Čeká se
|
||||
default_issue_status_closed: Uzavřený
|
||||
@@ -705,7 +699,7 @@ cs:
|
||||
default_priority_high: Vysoká
|
||||
default_priority_urgent: Urgentní
|
||||
default_priority_immediate: Okamžitá
|
||||
default_activity_design: Návhr
|
||||
default_activity_design: Design
|
||||
default_activity_development: Vývoj
|
||||
|
||||
enumeration_issue_priorities: Priority úkolů
|
||||
@@ -716,10 +710,10 @@ cs:
|
||||
text_subprojects_destroy_warning: "Jeho podprojek(y): {{value}} budou také smazány."
|
||||
label_and_its_subprojects: "{{value}} a jeho podprojekty"
|
||||
mail_body_reminder: "{{count}} úkol(ů), které máte přiřazeny má termín během několik dní ({{days}}):"
|
||||
mail_subject_reminder: "{{count}} úkol(ů) má termín během několik dní ({{days}})"
|
||||
mail_subject_reminder: "{{count}} úkol(ů) má termín během několik dní"
|
||||
text_user_wrote: "{{value}} napsal:"
|
||||
label_duplicated_by: duplikováno od
|
||||
setting_enabled_scm: Povolené SCM
|
||||
label_duplicated_by: duplicated by
|
||||
setting_enabled_scm: Povoleno SCM
|
||||
text_enumeration_category_reassign_to: 'Přeřadit je do této:'
|
||||
text_enumeration_destroy_question: "Několik ({{count}}) objektů je přiřazeno k této hodnotě."
|
||||
label_incoming_emails: Příchozí e-maily
|
||||
@@ -745,22 +739,22 @@ cs:
|
||||
permission_view_changesets: Zobrazování sady změn
|
||||
permission_view_time_entries: Zobrazení stráveného času
|
||||
permission_manage_versions: Spravování verzí
|
||||
permission_manage_wiki: Spravování Wiki
|
||||
permission_manage_wiki: Spravování wiki
|
||||
permission_manage_categories: Spravování kategorií úkolů
|
||||
permission_protect_wiki_pages: Zabezpečení Wiki stránek
|
||||
permission_protect_wiki_pages: Zabezpečení wiki stránek
|
||||
permission_comment_news: Komentování novinek
|
||||
permission_delete_messages: Mazání zpráv
|
||||
permission_select_project_modules: Výběr modulů projektu
|
||||
permission_manage_documents: Správa dokumentů
|
||||
permission_edit_wiki_pages: Upravování stránek Wiki
|
||||
permission_edit_wiki_pages: Upravování stránek wiki
|
||||
permission_add_issue_watchers: Přidání sledujících uživatelů
|
||||
permission_view_gantt: Zobrazené Ganttova diagramu
|
||||
permission_move_issues: Přesouvání úkolů
|
||||
permission_manage_issue_relations: Spravování vztahů mezi úkoly
|
||||
permission_delete_wiki_pages: Mazání stránek na Wiki
|
||||
permission_delete_wiki_pages: Mazání stránek na wiki
|
||||
permission_manage_boards: Správa diskusních fór
|
||||
permission_delete_wiki_pages_attachments: Mazání příloh
|
||||
permission_view_wiki_edits: Prohlížení historie Wiki
|
||||
permission_view_wiki_edits: Prohlížení historie wiki
|
||||
permission_add_messages: Posílání zpráv
|
||||
permission_view_messages: Prohlížení zpráv
|
||||
permission_manage_files: Spravování souborů
|
||||
@@ -772,26 +766,26 @@ cs:
|
||||
permission_delete_issues: Mazání úkolů
|
||||
permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů
|
||||
permission_manage_repository: Spravování repozitáře
|
||||
permission_commit_access: Commit přístup
|
||||
permission_commit_access: Commit access
|
||||
permission_browse_repository: Procházení repozitáře
|
||||
permission_view_documents: Prohlížení dokumentů
|
||||
permission_edit_project: Úprava projektů
|
||||
permission_add_issue_notes: Přidávání poznámek
|
||||
permission_save_queries: Ukládání dotazů
|
||||
permission_view_wiki_pages: Prohlížení Wiki
|
||||
permission_rename_wiki_pages: Přejmenovávání Wiki stránek
|
||||
permission_view_wiki_pages: Prohlížení wiki
|
||||
permission_rename_wiki_pages: Přejmenovávání wiki stránek
|
||||
permission_edit_time_entries: Upravování záznamů o stráveném času
|
||||
permission_edit_own_issue_notes: Upravování vlastních poznámek
|
||||
setting_gravatar_enabled: Použít uživatelské ikony Gravatar
|
||||
label_example: Příklad
|
||||
text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
|
||||
text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživateslkým jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
|
||||
permission_edit_own_messages: Upravit vlastní zprávy
|
||||
permission_delete_own_messages: Smazat vlastní zprávy
|
||||
label_user_activity: "Aktivita uživatele: {{value}}"
|
||||
label_updated_time_by: "Akutualizováno: {{author}} před: {{age}}"
|
||||
text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
|
||||
setting_diff_max_lines_displayed: Maximální počet zobrazenách řádků rozdílů
|
||||
text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets
|
||||
text_plugin_assets_writable: Plugin assets directory writable
|
||||
warning_attachments_not_saved: "{{count}} soubor(ů) nebylo možné uložit."
|
||||
button_create_and_continue: Vytvořit a pokračovat
|
||||
text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
|
||||
@@ -810,111 +804,103 @@ cs:
|
||||
label_date_from_to: Od {{start}} do {{end}}
|
||||
label_greater_or_equal: ">="
|
||||
label_less_or_equal: <=
|
||||
text_wiki_page_destroy_question: Tato stránka má {{descendants}} podstránek a potomků. Co chcete udělat?
|
||||
text_wiki_page_reassign_children: Přiřadit podstránky k tomuto rodiči
|
||||
text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky
|
||||
text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky
|
||||
setting_password_min_length: Minimální délka hesla
|
||||
field_group_by: Seskupovat výsledky podle
|
||||
mail_subject_wiki_content_updated: "'{{page}}' Wiki stránka byla aktualizována"
|
||||
label_wiki_content_added: Wiki stránka přidána
|
||||
mail_subject_wiki_content_added: "'{{page}}' Wiki stránka byla přidána"
|
||||
mail_body_wiki_content_added: "'{{page}}' Wiki stránka byla přidána od {{author}}."
|
||||
label_wiki_content_updated: Wiki stránka aktualizována
|
||||
mail_body_wiki_content_updated: "'{{page}}' Wiki stránka byla aktualizována od {{author}}."
|
||||
permission_add_project: Vytvořit projekt
|
||||
setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil
|
||||
label_view_all_revisions: Zobrazit všechny revize
|
||||
text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do?
|
||||
text_wiki_page_reassign_children: Reassign child pages to this parent page
|
||||
text_wiki_page_nullify_children: Keep child pages as root pages
|
||||
text_wiki_page_destroy_children: Delete child pages and all their descendants
|
||||
setting_password_min_length: Minimum password length
|
||||
field_group_by: Group results by
|
||||
mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated"
|
||||
label_wiki_content_added: Wiki page added
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
|
||||
mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}.
|
||||
label_wiki_content_updated: Wiki page updated
|
||||
mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}.
|
||||
permission_add_project: Create project
|
||||
setting_new_project_user_role_id: Role given to a non-admin user who creates a project
|
||||
label_view_all_revisions: View all revisions
|
||||
label_tag: Tag
|
||||
label_branch: Branch
|
||||
error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu.
|
||||
error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů").
|
||||
text_journal_changed: "{{label}} změněn z {{old}} na {{new}}"
|
||||
text_journal_set_to: "{{label}} nastaven na {{value}}"
|
||||
text_journal_deleted: "{{label}} smazán ({{old}})"
|
||||
label_group_plural: Skupiny
|
||||
label_group: Skupina
|
||||
label_group_new: Nová skupina
|
||||
label_time_entry_plural: Strávený čas
|
||||
text_journal_added: "{{label}} {{value}} přidán"
|
||||
field_active: Aktivní
|
||||
enumeration_system_activity: Systémová aktivita
|
||||
permission_delete_issue_watchers: Smazat přihlížející
|
||||
version_status_closed: zavřený
|
||||
version_status_locked: uzamčený
|
||||
version_status_open: otevřený
|
||||
error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen
|
||||
label_user_anonymous: Anonymní
|
||||
button_move_and_follow: Přesunout a následovat
|
||||
setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt
|
||||
setting_gravatar_default: Výchozí Gravatar
|
||||
field_sharing: Sdílení
|
||||
label_version_sharing_hierarchy: S hierarchií projektu
|
||||
label_version_sharing_system: Se všemi projekty
|
||||
label_version_sharing_descendants: S podprojekty
|
||||
label_version_sharing_tree: Se stromem projektu
|
||||
label_version_sharing_none: Nesdíleno
|
||||
error_can_not_archive_project: Tento projekt nemůže být archivován
|
||||
button_duplicate: Duplikát
|
||||
button_copy_and_follow: Kopírovat a následovat
|
||||
label_copy_source: Zdroj
|
||||
setting_issue_done_ratio: Spočítat koeficient dokončení úkolu s
|
||||
setting_issue_done_ratio_issue_status: Použít stav úkolu
|
||||
error_issue_done_ratios_not_updated: Koeficient dokončení úkolu nebyl aktualizován.
|
||||
error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e)
|
||||
setting_issue_done_ratio_issue_field: Použít pole úkolu
|
||||
label_copy_same_as_target: Stejný jako cíl
|
||||
label_copy_target: Cíl
|
||||
notice_issue_done_ratios_updated: Koeficienty dokončení úkolu byly aktualizovány.
|
||||
error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly
|
||||
label_update_issue_done_ratios: Aktualizovat koeficienty dokončení úkolů
|
||||
setting_start_of_week: Začínat kalendáře
|
||||
permission_view_issues: Zobrazit úkoly
|
||||
label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou
|
||||
label_revision_id: Revize {{value}}
|
||||
label_api_access_key: API přístupový klíč
|
||||
label_api_access_key_created_on: API přístupový klíč vytvořen {{value}}
|
||||
label_feeds_access_key: RSS přístupový klíč
|
||||
notice_api_access_key_reseted: Váš API přístupový klíč byl resetován.
|
||||
setting_rest_api_enabled: Zapnout službu REST
|
||||
label_missing_api_access_key: Chybějící přístupový klíč API
|
||||
label_missing_feeds_access_key: Chybějící přístupový klíč RSS
|
||||
button_show: Zobrazit
|
||||
text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu).
|
||||
setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků
|
||||
permission_add_subprojects: Vytvořit podprojekty
|
||||
label_subproject_new: Nový podprojekt
|
||||
error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
|
||||
error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
|
||||
text_journal_changed: "{{label}} changed from {{old}} to {{new}}"
|
||||
text_journal_set_to: "{{label}} set to {{value}}"
|
||||
text_journal_deleted: "{{label}} deleted ({{old}})"
|
||||
label_group_plural: Groups
|
||||
label_group: Group
|
||||
label_group_new: New group
|
||||
label_time_entry_plural: Spent time
|
||||
text_journal_added: "{{label}} {{value}} added"
|
||||
field_active: Active
|
||||
enumeration_system_activity: System Activity
|
||||
permission_delete_issue_watchers: Delete watchers
|
||||
version_status_closed: closed
|
||||
version_status_locked: locked
|
||||
version_status_open: open
|
||||
error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
|
||||
label_user_anonymous: Anonymous
|
||||
button_move_and_follow: Move and follow
|
||||
setting_default_projects_modules: Default enabled modules for new projects
|
||||
setting_gravatar_default: Default Gravatar image
|
||||
field_sharing: Sharing
|
||||
label_version_sharing_hierarchy: With project hierarchy
|
||||
label_version_sharing_system: With all projects
|
||||
label_version_sharing_descendants: With subprojects
|
||||
label_version_sharing_tree: With project tree
|
||||
label_version_sharing_none: Not shared
|
||||
error_can_not_archive_project: This project can not be archived
|
||||
button_duplicate: Duplicate
|
||||
button_copy_and_follow: Copy and follow
|
||||
label_copy_source: Source
|
||||
setting_issue_done_ratio: Calculate the issue done ratio with
|
||||
setting_issue_done_ratio_issue_status: Use the issue status
|
||||
error_issue_done_ratios_not_updated: Issue done ratios not updated.
|
||||
error_workflow_copy_target: Please select target tracker(s) and role(s)
|
||||
setting_issue_done_ratio_issue_field: Use the issue field
|
||||
label_copy_same_as_target: Same as target
|
||||
label_copy_target: Target
|
||||
notice_issue_done_ratios_updated: Issue done ratios updated.
|
||||
error_workflow_copy_source: Please select a source tracker or role
|
||||
label_update_issue_done_ratios: Update issue done ratios
|
||||
setting_start_of_week: Start calendars on
|
||||
permission_view_issues: View Issues
|
||||
label_display_used_statuses_only: Only display statuses that are used by this tracker
|
||||
label_revision_id: Revision {{value}}
|
||||
label_api_access_key: API access key
|
||||
label_api_access_key_created_on: API access key created {{value}} ago
|
||||
label_feeds_access_key: RSS access key
|
||||
notice_api_access_key_reseted: Your API access key was reset.
|
||||
setting_rest_api_enabled: Enable REST web service
|
||||
label_missing_api_access_key: Missing an API access key
|
||||
label_missing_feeds_access_key: Missing a RSS access key
|
||||
button_show: Show
|
||||
text_line_separated: Multiple values allowed (one line for each value).
|
||||
setting_mail_handler_body_delimiters: Truncate emails after one of these lines
|
||||
permission_add_subprojects: Create subprojects
|
||||
label_subproject_new: New subproject
|
||||
text_own_membership_delete_confirmation: |-
|
||||
Chystáte se odebrat si některá nebo všechny svá oprávnění a potom již nemusíte být schopni upravit tento projekt.
|
||||
Opravdu chcete pokračovat?
|
||||
label_close_versions: Zavřít dokončené verze
|
||||
label_board_sticky: Nálepka
|
||||
label_board_locked: Uzamčeno
|
||||
permission_export_wiki_pages: Exportovat Wiki stránky
|
||||
setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti
|
||||
permission_manage_project_activities: Spravovat aktivity projektu
|
||||
error_unable_delete_issue_status: Nelze smazat stavy úkolů
|
||||
label_profile: Profil
|
||||
permission_manage_subtasks: Spravovat podúkoly
|
||||
field_parent_issue: Rodičovský úkol
|
||||
label_subtask_plural: Podúkol
|
||||
label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu
|
||||
error_can_not_delete_custom_field: Nelze smazat volitelné pole
|
||||
error_unable_to_connect: Nelze se připojit ({{value}})
|
||||
error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat.
|
||||
error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán.
|
||||
field_principal: Hlavní
|
||||
label_my_page_block: Bloky na mé stránce
|
||||
notice_failed_to_save_members: "Nepodařilo se uložit člena(y): {{errors}}."
|
||||
text_zoom_out: Oddálit
|
||||
text_zoom_in: Přiblížit
|
||||
notice_unable_delete_time_entry: Nelze smazat čas ze záznamu.
|
||||
label_overall_spent_time: Celkově strávený čas
|
||||
field_time_entries: Zaznamenaný čas
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Kalendář
|
||||
field_member_of_group: Člen skupiny
|
||||
field_assigned_to_role: Člen role
|
||||
button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: {{page_title}}"
|
||||
text_are_you_sure_with_children: Smazat úkol včetně všech podúkolů?
|
||||
field_text: Textové pole
|
||||
You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
|
||||
Are you sure you want to continue?
|
||||
label_close_versions: Close completed versions
|
||||
label_board_sticky: Sticky
|
||||
label_board_locked: Locked
|
||||
permission_export_wiki_pages: Export wiki pages
|
||||
setting_cache_formatted_text: Cache formatted text
|
||||
permission_manage_project_activities: Manage project activities
|
||||
error_unable_delete_issue_status: Unable to delete issue status
|
||||
label_profile: Profile
|
||||
permission_manage_subtasks: Manage subtasks
|
||||
field_parent_issue: Parent task
|
||||
label_subtask_plural: Subtasks
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
error_can_not_delete_custom_field: Unable to delete custom field
|
||||
error_unable_to_connect: Unable to connect ({{value}})
|
||||
error_can_not_remove_role: This role is in use and can not be deleted.
|
||||
error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
|
||||
field_principal: Principal
|
||||
label_my_page_block: My page block
|
||||
notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
|
||||
text_zoom_out: Zoom out
|
||||
text_zoom_in: Zoom in
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
# updated and upgraded to 0.9 by Morten Krogh Andersen (http://www.krogh.net)
|
||||
|
||||
da:
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
default: "%d.%m.%Y"
|
||||
@@ -130,7 +129,6 @@ da:
|
||||
greater_than_start_date: "skal være senere end startdatoen"
|
||||
not_same_project: "hører ikke til samme projekt"
|
||||
circular_dependency: "Denne relation vil skabe et afhængighedsforhold"
|
||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
||||
|
||||
template:
|
||||
header:
|
||||
@@ -793,7 +791,7 @@ da:
|
||||
permission_browse_repository: Gennemse repository
|
||||
permission_manage_repository: Administrér repository
|
||||
permission_manage_members: Administrér medlemmer
|
||||
mail_subject_reminder: "{{count}} sag(er) har deadline i de kommende dage ({{days}})"
|
||||
mail_subject_reminder: "{{count}} sag(er) har deadline i de kommende dage"
|
||||
permission_add_issue_notes: Tilføj noter
|
||||
permission_edit_messages: Redigér beskeder
|
||||
permission_view_issue_watchers: Se liste over overvågere
|
||||
@@ -926,12 +924,3 @@ da:
|
||||
text_zoom_in: Zoom in
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
field_time_entries: Log time
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Calendar
|
||||
field_member_of_group: Member of Group
|
||||
field_assigned_to_role: Member of Role
|
||||
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
|
||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
||||
field_text: Text field
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
# by Clemens Kofler (clemens@railway.at)
|
||||
|
||||
de:
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
# Use the strftime parameters for formats.
|
||||
@@ -68,11 +67,10 @@ de:
|
||||
other: "fast {{count}} Jahren"
|
||||
|
||||
number:
|
||||
# Default format for numbers
|
||||
format:
|
||||
precision: 2
|
||||
separator: ','
|
||||
delimiter: '.'
|
||||
precision: 2
|
||||
currency:
|
||||
format:
|
||||
unit: '€'
|
||||
@@ -101,13 +99,13 @@ de:
|
||||
gb: "GB"
|
||||
tb: "TB"
|
||||
|
||||
|
||||
|
||||
# Used in array.to_sentence.
|
||||
support:
|
||||
array:
|
||||
sentence_connector: "und"
|
||||
skip_last_comma: true
|
||||
|
||||
|
||||
activerecord:
|
||||
errors:
|
||||
template:
|
||||
@@ -138,10 +136,9 @@ de:
|
||||
greater_than_start_date: "muss größer als Anfangsdatum sein"
|
||||
not_same_project: "gehört nicht zum selben Projekt"
|
||||
circular_dependency: "Diese Beziehung würde eine zyklische Abhängigkeit erzeugen"
|
||||
cant_link_an_issue_with_a_descendant: "Ein Ticket kann nicht mit einer ihrer Unteraufgaben verlinkt werden"
|
||||
|
||||
actionview_instancetag_blank_option: Bitte auswählen
|
||||
|
||||
|
||||
general_text_No: 'Nein'
|
||||
general_text_Yes: 'Ja'
|
||||
general_text_no: 'nein'
|
||||
@@ -174,7 +171,6 @@ de:
|
||||
notice_feeds_access_key_reseted: Ihr Atom-Zugriffsschlüssel wurde zurückgesetzt.
|
||||
notice_api_access_key_reseted: Ihr API-Zugriffsschlüssel wurde zurückgesetzt.
|
||||
notice_failed_to_save_issues: "{{count}} von {{total}} ausgewählten Tickets konnte(n) nicht gespeichert werden: {{ids}}."
|
||||
notice_failed_to_save_members: "Benutzer konnte nicht gespeichert werden: {{errors}}."
|
||||
notice_no_issue_selected: "Kein Ticket ausgewählt! Bitte wählen Sie die Tickets, die Sie bearbeiten möchten."
|
||||
notice_account_pending: "Ihr Konto wurde erstellt und wartet jetzt auf die Genehmigung des Administrators."
|
||||
notice_default_data_loaded: Die Standard-Konfiguration wurde erfolgreich geladen.
|
||||
@@ -189,18 +185,17 @@ de:
|
||||
error_issue_not_found_in_project: 'Das Ticket wurde nicht gefunden oder gehört nicht zu diesem Projekt.'
|
||||
error_no_tracker_in_project: Diesem Projekt ist kein Tracker zugeordnet. Bitte überprüfen Sie die Projekteinstellungen.
|
||||
error_no_default_issue_status: Es ist kein Status als Standard definiert. Bitte überprüfen Sie Ihre Konfiguration (unter "Administration -> Ticket-Status").
|
||||
error_can_not_delete_custom_field: Kann das benutzerdefinierte Feld nicht löschen.
|
||||
error_can_not_delete_tracker: Dieser Tracker enthält Tickets und kann nicht gelöscht werden.
|
||||
error_can_not_remove_role: Diese Rolle wird verwendet und kann nicht gelöscht werden.
|
||||
error_can_not_reopen_issue_on_closed_version: Das Ticket ist einer abgeschlossenen Version zugeordnet und kann daher nicht wieder geöffnet werden.
|
||||
error_can_not_archive_project: Dieses Projekt kann nicht archiviert werden.
|
||||
error_issue_done_ratios_not_updated: Der Ticket-Fortschritt wurde nicht aktualisiert.
|
||||
error_workflow_copy_source: Bitte wählen Sie einen Quell-Tracker und eine Quell-Rolle.
|
||||
error_workflow_copy_target: Bitte wählen Sie die Ziel-Tracker und -Rollen.
|
||||
error_unable_delete_issue_status: "Der Ticket-Status konnte nicht gelöscht werden."
|
||||
error_unable_to_connect: Fehler beim Verbinden ({{value}})
|
||||
warning_attachments_not_saved: "{{count}} Datei(en) konnten nicht gespeichert werden."
|
||||
|
||||
|
||||
warning_attachments_not_saved:
|
||||
one: "1 Datei konnte nicht gespeichert werden."
|
||||
other: "{{count}} Dateien konnten nicht gespeichert werden."
|
||||
|
||||
mail_subject_lost_password: "Ihr {{value}} Kennwort"
|
||||
mail_body_lost_password: 'Benutzen Sie den folgenden Link, um Ihr Kennwort zu ändern:'
|
||||
mail_subject_register: "{{value}} Kontoaktivierung"
|
||||
@@ -209,7 +204,7 @@ de:
|
||||
mail_body_account_information: Ihre Konto-Informationen
|
||||
mail_subject_account_activation_request: "Antrag auf {{value}} Kontoaktivierung"
|
||||
mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:"
|
||||
mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden"
|
||||
mail_subject_reminder: "{{count}} Tickets müssen in den nächsten Tagen abgegeben werden"
|
||||
mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:"
|
||||
mail_subject_wiki_content_added: "Wiki-Seite '{{page}}' hinzugefügt"
|
||||
mail_body_wiki_content_added: "Die Wiki-Seite '{{page}}' wurde von {{author}} hinzugefügt."
|
||||
@@ -254,7 +249,6 @@ de:
|
||||
field_priority: Priorität
|
||||
field_fixed_version: Zielversion
|
||||
field_user: Benutzer
|
||||
field_principal: Auftraggeber
|
||||
field_role: Rolle
|
||||
field_homepage: Projekt-Homepage
|
||||
field_is_public: Öffentlich
|
||||
@@ -299,7 +293,6 @@ de:
|
||||
field_redirect_existing_links: Existierende Links umleiten
|
||||
field_estimated_hours: Geschätzter Aufwand
|
||||
field_column_names: Spalten
|
||||
field_time_entries: Logzeit
|
||||
field_time_zone: Zeitzone
|
||||
field_searchable: Durchsuchbar
|
||||
field_default_value: Standardwert
|
||||
@@ -311,7 +304,6 @@ de:
|
||||
field_content: Inhalt
|
||||
field_group_by: Gruppiere Ergebnisse nach
|
||||
field_sharing: Gemeinsame Verwendung
|
||||
field_parent_issue: Übergeordnete Aufgabe
|
||||
|
||||
setting_app_title: Applikations-Titel
|
||||
setting_app_subtitle: Applikations-Untertitel
|
||||
@@ -421,7 +413,6 @@ de:
|
||||
permission_delete_messages: Forenbeiträge löschen
|
||||
permission_delete_own_messages: Eigene Forenbeiträge löschen
|
||||
permission_export_wiki_pages: Wiki-Seiten exportieren
|
||||
permission_manage_subtasks: Unteraufgaben verwalten
|
||||
|
||||
project_module_issue_tracking: Ticket-Verfolgung
|
||||
project_module_time_tracking: Zeiterfassung
|
||||
@@ -431,9 +422,7 @@ de:
|
||||
project_module_wiki: Wiki
|
||||
project_module_repository: Projektarchiv
|
||||
project_module_boards: Foren
|
||||
project_module_calendar: Kalender
|
||||
project_module_gantt: Gantt
|
||||
|
||||
|
||||
label_user: Benutzer
|
||||
label_user_plural: Benutzer
|
||||
label_user_new: Neuer Benutzer
|
||||
@@ -490,7 +479,6 @@ de:
|
||||
label_my_page: Meine Seite
|
||||
label_my_account: Mein Konto
|
||||
label_my_projects: Meine Projekte
|
||||
label_my_page_block: Bereich "Meine Seite"
|
||||
label_administration: Administration
|
||||
label_login: Anmelden
|
||||
label_logout: Abmelden
|
||||
@@ -504,7 +492,7 @@ de:
|
||||
label_user_activity: "Aktivität von {{value}}"
|
||||
label_new: Neu
|
||||
label_logged_as: Angemeldet als
|
||||
label_environment: Umgebung
|
||||
label_environment: Environment
|
||||
label_authentication: Authentifizierung
|
||||
label_auth_source: Authentifizierungs-Modus
|
||||
label_auth_source_new: Neuer Authentifizierungs-Modus
|
||||
@@ -554,18 +542,9 @@ de:
|
||||
label_open_issues_plural: offen
|
||||
label_closed_issues: geschlossen
|
||||
label_closed_issues_plural: geschlossen
|
||||
label_x_open_issues_abbr_on_total:
|
||||
zero: 0 offen / {{total}}
|
||||
one: 1 offen / {{total}}
|
||||
other: "{{count}} offen / {{total}}"
|
||||
label_x_open_issues_abbr:
|
||||
zero: 0 offen
|
||||
one: 1 offen
|
||||
other: "{{count}} offen"
|
||||
label_x_closed_issues_abbr:
|
||||
zero: 0 geschlossen
|
||||
one: 1 geschlossen
|
||||
other: "{{count}} geschlossen"
|
||||
label_x_open_issues_abbr_on_total: "{{count}} offen / {{total}}"
|
||||
label_x_open_issues_abbr: "{{count}} offen"
|
||||
label_x_closed_issues_abbr: "{{count}} geschlossen"
|
||||
label_total: Gesamtzahl
|
||||
label_permissions: Berechtigungen
|
||||
label_current_status: Gegenwärtiger Status
|
||||
@@ -789,10 +768,7 @@ de:
|
||||
label_api_access_key: API-Zugriffsschlüssel
|
||||
label_missing_api_access_key: Der API-Zugriffsschlüssel fehlt.
|
||||
label_api_access_key_created_on: Der API-Zugriffsschlüssel wurde vor {{value}} erstellt
|
||||
label_profile: Profil
|
||||
label_subtask_plural: Unteraufgaben
|
||||
label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts.
|
||||
|
||||
|
||||
button_login: Anmelden
|
||||
button_submit: OK
|
||||
button_save: Speichern
|
||||
@@ -836,17 +812,17 @@ de:
|
||||
button_quote: Zitieren
|
||||
button_duplicate: Duplizieren
|
||||
button_show: Anzeigen
|
||||
|
||||
|
||||
status_active: aktiv
|
||||
status_registered: angemeldet
|
||||
status_locked: gesperrt
|
||||
|
||||
version_status_open: offen
|
||||
version_status_locked: gesperrt
|
||||
|
||||
version_status_closed: abgeschlossen
|
||||
version_status_locked: gesperrt
|
||||
version_status_open: offen
|
||||
|
||||
field_active: Aktiv
|
||||
|
||||
|
||||
text_select_mail_notifications: Bitte wählen Sie die Aktionen aus, für die eine Mailbenachrichtigung gesendet werden soll.
|
||||
text_regexp_info: z. B. ^[A-Z0-9]+$
|
||||
text_min_max_length_info: 0 heißt keine Beschränkung
|
||||
@@ -901,10 +877,10 @@ de:
|
||||
text_wiki_page_nullify_children: Verschiebe die Unterseiten auf die oberste Ebene
|
||||
text_wiki_page_destroy_children: Lösche alle Unterseiten
|
||||
text_wiki_page_reassign_children: Ordne die Unterseiten dieser Seite zu
|
||||
text_own_membership_delete_confirmation: "Sie sind dabei, einige oder alle Ihre Berechtigungen zu entfernen. Es ist möglich, dass Sie danach das Projekt nicht mehr ansehen oder bearbeiten dürfen.\nSind Sie sicher, dass Sie dies tun möchten?"
|
||||
text_zoom_in: Zoom in
|
||||
text_zoom_out: Zoom out
|
||||
|
||||
text_own_membership_delete_confirmation: |-
|
||||
Sie sind dabei, einige oder alle Ihre Berechtigungen zu entfernen. Es ist möglich, dass Sie danach das Projekt nicht mehr ansehen oder bearbeiten dürfen.
|
||||
Sind Sie sicher, dass Sie dies tun möchten?
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developer: Entwickler
|
||||
default_role_reporter: Reporter
|
||||
@@ -926,14 +902,21 @@ de:
|
||||
default_priority_immediate: Sofort
|
||||
default_activity_design: Design
|
||||
default_activity_development: Entwicklung
|
||||
|
||||
enumeration_issue_priorities: Ticket-Prioritäten
|
||||
enumeration_doc_categories: Dokumentenkategorien
|
||||
enumeration_activities: Aktivitäten (Zeiterfassung)
|
||||
enumeration_system_activity: System-Aktivität
|
||||
|
||||
field_member_of_group: Member of Group
|
||||
field_assigned_to_role: Member of Role
|
||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
||||
field_text: Text field
|
||||
|
||||
label_profile: Profil
|
||||
permission_manage_subtasks: Unteraufgaben verwalten
|
||||
field_parent_issue: Übergeordnete Aufgabe
|
||||
label_subtask_plural: Unteraufgaben
|
||||
label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts.
|
||||
error_can_not_delete_custom_field: Kann das benutzerdefinierte Feld nicht löschen.
|
||||
error_unable_to_connect: Fehler beim Verbinden ({{value}})
|
||||
error_can_not_remove_role: Diese Rolle wird verwendet und kann nicht gelöscht werden.
|
||||
error_can_not_delete_tracker: Dieser Tracker enthält Tickets und kann nicht gelöscht werden.
|
||||
field_principal: Principal
|
||||
label_my_page_block: My page block
|
||||
notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
|
||||
text_zoom_out: Zoom out
|
||||
text_zoom_in: Zoom in
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
# by Vaggelis Typaldos (vtypal@gmail.com), Spyros Raptis (spirosrap@gmail.com)
|
||||
|
||||
el:
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
# Use the strftime parameters for formats.
|
||||
@@ -67,11 +66,7 @@ el:
|
||||
one: "almost 1 year"
|
||||
other: "almost {{count}} years"
|
||||
|
||||
number:
|
||||
format:
|
||||
separator: "."
|
||||
delimiter: ""
|
||||
precision: 3
|
||||
number:
|
||||
human:
|
||||
format:
|
||||
precision: 1
|
||||
@@ -119,7 +114,6 @@ el:
|
||||
greater_than_start_date: "πρέπει να είναι αργότερα από την ημερομηνία έναρξης"
|
||||
not_same_project: "δεν ανήκει στο ίδιο έργο"
|
||||
circular_dependency: "Αυτή η σχέση θα δημιουργήσει κυκλικές εξαρτήσεις"
|
||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
||||
|
||||
actionview_instancetag_blank_option: Παρακαλώ επιλέξτε
|
||||
|
||||
@@ -177,7 +171,7 @@ el:
|
||||
mail_body_account_information: Πληροφορίες του λογαριασμού σας
|
||||
mail_subject_account_activation_request: "αίτημα ενεργοποίησης λογαριασμού {{value}}"
|
||||
mail_body_account_activation_request: "'Ένας νέος χρήστης ({{value}}) έχει εγγραφεί. Ο λογαριασμός είναι σε στάδιο αναμονής της έγκρισης σας:"
|
||||
mail_subject_reminder: "{{count}} θέμα(τα) με προθεσμία στις επόμενες {{days}} ημέρες"
|
||||
mail_subject_reminder: "{{count}} θέμα(τα) με προθεσμία στις επόμενες ημέρες"
|
||||
mail_body_reminder: "{{count}}θέμα(τα) που έχουν ανατεθεί σε σας, με προθεσμία στις επόμενες {{days}} ημέρες:"
|
||||
mail_subject_wiki_content_added: "'προστέθηκε η σελίδα wiki {{page}}' "
|
||||
mail_body_wiki_content_added: "Η σελίδα wiki '{{page}}' προστέθηκε από τον {{author}}."
|
||||
@@ -910,12 +904,3 @@ el:
|
||||
text_zoom_in: Zoom in
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
field_time_entries: Log time
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Calendar
|
||||
field_member_of_group: Member of Group
|
||||
field_assigned_to_role: Member of Role
|
||||
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
|
||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
||||
field_text: Text field
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
en-GB:
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
# Use the strftime parameters for formats.
|
||||
@@ -65,11 +64,6 @@ en-GB:
|
||||
other: "almost {{count}} years"
|
||||
|
||||
number:
|
||||
format:
|
||||
separator: "."
|
||||
delimiter: " "
|
||||
precision: 3
|
||||
|
||||
currency:
|
||||
format:
|
||||
format: "%u%n"
|
||||
@@ -122,7 +116,6 @@ en-GB:
|
||||
greater_than_start_date: "must be greater than start date"
|
||||
not_same_project: "doesn't belong to the same project"
|
||||
circular_dependency: "This relation would create a circular dependency"
|
||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
||||
|
||||
actionview_instancetag_blank_option: Please select
|
||||
|
||||
@@ -187,7 +180,7 @@ en-GB:
|
||||
mail_body_account_information: Your account information
|
||||
mail_subject_account_activation_request: "{{value}} account activation request"
|
||||
mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next days"
|
||||
mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki page has been added"
|
||||
mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}."
|
||||
@@ -914,12 +907,3 @@ en-GB:
|
||||
error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
|
||||
notice_failed_to_save_members: "Failed to save member(s): {{errors}}."
|
||||
label_project_copy_notifications: Send email notifications during the project copy
|
||||
field_time_entries: Log time
|
||||
project_module_gantt: Gantt
|
||||
project_module_calendar: Calendar
|
||||
field_member_of_group: Member of Group
|
||||
field_assigned_to_role: Member of Role
|
||||
button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}"
|
||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
||||
field_text: Text field
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user