mirror of
https://github.com/meineerde/redmine.git
synced 2026-03-11 11:43:08 +00:00
Merge branch 'master' of git://github.com/edavis10/redmine
This commit is contained in:
commit
f8025eca12
@ -83,9 +83,9 @@ class AccountController < ApplicationController
|
||||
else
|
||||
@user = User.new(params[:user])
|
||||
@user.admin = false
|
||||
@user.status = User::STATUS_REGISTERED
|
||||
@user.register
|
||||
if session[:auth_source_registration]
|
||||
@user.status = User::STATUS_ACTIVE
|
||||
@user.activate
|
||||
@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.status == User::STATUS_REGISTERED
|
||||
user.status = User::STATUS_ACTIVE
|
||||
redirect_to(home_url) && return unless user.registered?
|
||||
user.activate
|
||||
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.status = User::STATUS_REGISTERED
|
||||
user.register
|
||||
|
||||
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.status = User::STATUS_ACTIVE
|
||||
user.activate
|
||||
user.last_login_on = Time.now
|
||||
if user.save
|
||||
self.logged_user = user
|
||||
|
||||
@ -218,6 +218,10 @@ 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?
|
||||
|
||||
@ -20,7 +20,7 @@ class IssuesController < ApplicationController
|
||||
default_search_scope :issues
|
||||
|
||||
before_filter :find_issue, :only => [:show, :edit, :update, :reply]
|
||||
before_filter :find_issues, :only => [:bulk_edit, :move, :destroy]
|
||||
before_filter :find_issues, :only => [:bulk_edit, :move, :perform_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]
|
||||
@ -264,15 +264,9 @@ class IssuesController < ApplicationController
|
||||
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})
|
||||
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
|
||||
@ -293,6 +287,11 @@ class IssuesController < ApplicationController
|
||||
end
|
||||
render :layout => false if request.xhr?
|
||||
end
|
||||
|
||||
# TODO: more descriptive name? move to separate controller like IssueMovesController?
|
||||
def perform_move
|
||||
move
|
||||
end
|
||||
|
||||
def destroy
|
||||
@hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f
|
||||
@ -349,7 +348,7 @@ class IssuesController < ApplicationController
|
||||
|
||||
@priorities = IssuePriority.all.reverse
|
||||
@statuses = IssueStatus.find(:all, :order => 'position')
|
||||
@back = params[:back_url] || request.env['HTTP_REFERER']
|
||||
@back = back_url
|
||||
|
||||
render :layout => false
|
||||
end
|
||||
@ -485,4 +484,14 @@ private
|
||||
return false
|
||||
end
|
||||
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
|
||||
|
||||
@ -103,6 +103,23 @@ 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(); ")
|
||||
@ -368,12 +385,12 @@ module ApplicationHelper
|
||||
ancestors = (@project.root? ? [] : @project.ancestors.visible)
|
||||
if ancestors.any?
|
||||
root = ancestors.shift
|
||||
b << link_to(h(root), {:controller => 'projects', :action => 'show', :id => root, :jump => current_menu_item}, :class => 'root')
|
||||
b << link_to_project(root, {:jump => current_menu_item}, :class => 'root')
|
||||
if ancestors.size > 2
|
||||
b << '…'
|
||||
ancestors = ancestors[-2, 2]
|
||||
end
|
||||
b += ancestors.collect {|p| link_to(h(p), {:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item}, :class => 'ancestor') }
|
||||
b += ancestors.collect {|p| link_to_project(p, {:jump => current_menu_item}, :class => 'ancestor') }
|
||||
end
|
||||
b << h(@project)
|
||||
b.join(' » ')
|
||||
@ -393,6 +410,19 @@ 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
|
||||
@ -592,8 +622,7 @@ module ApplicationHelper
|
||||
end
|
||||
when 'project'
|
||||
if p = Project.visible.find_by_id(oid)
|
||||
link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
|
||||
:class => 'project'
|
||||
link = link_to_project(p, {:only_path => only_path}, :class => 'project')
|
||||
end
|
||||
end
|
||||
elsif sep == ':'
|
||||
@ -635,8 +664,7 @@ module ApplicationHelper
|
||||
end
|
||||
when 'project'
|
||||
if p = Project.visible.find(:first, :conditions => ["identifier = :s OR LOWER(name) = :s", {:s => name.downcase}])
|
||||
link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
|
||||
:class => 'project'
|
||||
link = link_to_project(p, {:only_path => only_path}, :class => 'project')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -72,7 +72,7 @@ module ProjectsHelper
|
||||
end
|
||||
classes = (ancestors.empty? ? 'root' : 'child')
|
||||
s << "<li class='#{classes}'><div class='#{classes}'>" +
|
||||
link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}")
|
||||
link_to_project(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(h(value), :controller => 'projects', :action => 'show', :id => value)
|
||||
link_to_project value
|
||||
when 'Version'
|
||||
link_to(h(value), :controller => 'versions', :action => 'show', :id => value)
|
||||
when 'TrueClass'
|
||||
|
||||
@ -80,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, issues.size)
|
||||
subject l(:mail_subject_reminder, :count => issues.size, :days => days)
|
||||
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')
|
||||
|
||||
@ -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 = User.current.projects.collect(&:id)
|
||||
project_ids = Project.all(:conditions => Project.visible_by(User.current)).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,6 +219,12 @@ 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
|
||||
|
||||
@ -164,6 +164,30 @@ 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)
|
||||
|
||||
@ -1,20 +1,5 @@
|
||||
<div id="admin-menu">
|
||||
<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_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>
|
||||
<li><%= link_to l(:label_ldap_authentication), {:controller => 'ldap_auth_sources', :action => 'index'}, :class => 'server_authentication' %></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>
|
||||
<ul>
|
||||
<%= render_menu :admin_menu %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
<tbody>
|
||||
<% project_tree(@projects) do |project, level| %>
|
||||
<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 class="name"><%= link_to_project(project, :action => 'settings') %></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>
|
||||
|
||||
@ -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(h(issue.project), :controller => 'projects', :action => 'show', :id => issue.project) %></td>
|
||||
<td class="project"><%= link_to_project(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'%>
|
||||
<%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
<% end -%>
|
||||
</ul>
|
||||
|
||||
<% form_tag({}, :id => 'move_form') do %>
|
||||
<% form_tag({:action => 'perform_move'}, :id => 'move_form') do %>
|
||||
<%= @issues.collect {|i| hidden_field_tag('ids[]', i.id)}.join %>
|
||||
|
||||
<div class="box tabular">
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<!-- page specific tags -->
|
||||
<%= yield :header_tags -%>
|
||||
</head>
|
||||
<body>
|
||||
<body class="<%= body_css_classes %>">
|
||||
<div id="wrapper">
|
||||
<div id="wrapper2">
|
||||
<div id="top-menu">
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<p><%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless @project %>
|
||||
<p><%= link_to_project(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 />
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
<p class="nodata"><%= l(:label_no_data) %></p>
|
||||
<% else %>
|
||||
<% @newss.each do |news| %>
|
||||
<h3><%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless news.project == @project %>
|
||||
<h3><%= link_to_project(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>
|
||||
|
||||
@ -2,14 +2,14 @@
|
||||
|
||||
<div class="box">
|
||||
<!--[form:project]-->
|
||||
<p><%= f.text_field :name, :required => true %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p>
|
||||
<p><%= f.text_field :name, :required => true, :maxlength => 30 %><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? %>
|
||||
<p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen?, :maxlength => 20 %>
|
||||
<% unless @project.identifier_frozen? %>
|
||||
<br /><em><%= l(:text_length_between, :min => 1, :max => 20) %> <%= l(:text_project_identifier_info) %></em>
|
||||
<% end %></p>
|
||||
|
||||
@ -14,7 +14,9 @@
|
||||
<% @user.memberships.each do |membership| %>
|
||||
<% next if membership.new_record? %>
|
||||
<tr id="member-<%= membership.id %>" class="<%= cycle 'odd', 'even' %> class">
|
||||
<td class="project"><%=h membership.project %></td>
|
||||
<td class="project">
|
||||
<%= link_to_project 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(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %>
|
||||
<li><%= link_to_project(membership.project) %>
|
||||
(<%=h membership.roles.sort.collect(&:to_s).join(', ') %>, <%= format_date(membership.created_on) %>)</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
<% for project in @projects %>
|
||||
<% @project = project %>
|
||||
<li>
|
||||
<%= link_to h(project.name), :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)
|
||||
<%= link_to_project project %> (<%= format_time(project.created_on) %>)
|
||||
<%= textilizable project.short_description, :project => project %>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
@ -704,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"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
|
||||
text_user_wrote: "{{value}} wrote:"
|
||||
label_duplicated_by: duplicated by
|
||||
setting_enabled_scm: Enabled SCM
|
||||
|
||||
@ -184,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 danima"
|
||||
mail_subject_reminder: "{{count}} aktivnost(i) u kašnjenju u narednim {{days}} danima"
|
||||
mail_body_reminder: "{{count}} aktivnost(i) koje su dodjeljenje vama u narednim {{days}} danima:"
|
||||
|
||||
gui_validation_error: 1 greška
|
||||
|
||||
@ -166,7 +166,7 @@ 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: "%d assumptes venceran els següents {{count}} dies"
|
||||
mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies"
|
||||
mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:"
|
||||
|
||||
gui_validation_error: 1 error
|
||||
|
||||
@ -710,7 +710,7 @@ 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í"
|
||||
mail_subject_reminder: "{{count}} úkol(ů) má termín během několik dní ({{days}})"
|
||||
text_user_wrote: "{{value}} napsal:"
|
||||
label_duplicated_by: duplicated by
|
||||
setting_enabled_scm: Povoleno SCM
|
||||
|
||||
@ -791,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"
|
||||
mail_subject_reminder: "{{count}} sag(er) har deadline i de kommende dage ({{days}})"
|
||||
permission_add_issue_notes: Tilføj noter
|
||||
permission_edit_messages: Redigér beskeder
|
||||
permission_view_issue_watchers: Se liste over overvågere
|
||||
|
||||
@ -207,7 +207,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 Tagen abgegeben werden"
|
||||
mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} 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."
|
||||
|
||||
@ -171,7 +171,7 @@ el:
|
||||
mail_body_account_information: Πληροφορίες του λογαριασμού σας
|
||||
mail_subject_account_activation_request: "αίτημα ενεργοποίησης λογαριασμού {{value}}"
|
||||
mail_body_account_activation_request: "'Ένας νέος χρήστης ({{value}}) έχει εγγραφεί. Ο λογαριασμός είναι σε στάδιο αναμονής της έγκρισης σας:"
|
||||
mail_subject_reminder: "{{count}} θέμα(τα) με προθεσμία στις επόμενες ημέρες"
|
||||
mail_subject_reminder: "{{count}} θέμα(τα) με προθεσμία στις επόμενες {{days}} ημέρες"
|
||||
mail_body_reminder: "{{count}}θέμα(τα) που έχουν ανατεθεί σε σας, με προθεσμία στις επόμενες {{days}} ημέρες:"
|
||||
mail_subject_wiki_content_added: "'προστέθηκε η σελίδα wiki {{page}}' "
|
||||
mail_body_wiki_content_added: "Η σελίδα wiki '{{page}}' προστέθηκε από τον {{author}}."
|
||||
|
||||
@ -180,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"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} 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}}."
|
||||
|
||||
@ -183,7 +183,7 @@ en:
|
||||
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"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} 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}}."
|
||||
|
||||
@ -662,7 +662,7 @@ es:
|
||||
mail_subject_account_activation_request: "Petición de activación de cuenta {{value}}"
|
||||
mail_subject_lost_password: "Tu contraseña del {{value}}"
|
||||
mail_subject_register: "Activación de la cuenta del {{value}}"
|
||||
mail_subject_reminder: "{{count}} peticion(es) finalizan en los próximos días"
|
||||
mail_subject_reminder: "{{count}} peticion(es) finalizan en los próximos {{days}} días"
|
||||
notice_account_activated: Su cuenta ha sido activada. Ya puede conectarse.
|
||||
notice_account_invalid_creditentials: Usuario o contraseña inválido.
|
||||
notice_account_lost_email_sent: Se le ha enviado un correo con instrucciones para elegir una nueva contraseña.
|
||||
|
||||
@ -180,7 +180,7 @@ eu:
|
||||
mail_body_account_information: Zure kontuaren informazioa
|
||||
mail_subject_account_activation_request: "{{value}} kontu gaitzeko eskaera"
|
||||
mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:"
|
||||
mail_subject_reminder: "{{count}} arazo hurrengo egunetan amaitzen d(ir)a"
|
||||
mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a"
|
||||
mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki orria gehitu da"
|
||||
mail_body_wiki_content_added: "{{author}}-(e)k '{{page}}' wiki orria gehitu du."
|
||||
|
||||
@ -740,7 +740,7 @@ fi:
|
||||
text_subprojects_destroy_warning: "Tämän aliprojekti(t): {{value}} tullaan myös poistamaan."
|
||||
label_and_its_subprojects: "{{value}} ja aliprojektit"
|
||||
mail_body_reminder: "{{count}} sinulle nimettyä tapahtuma(a) erääntyy {{days}} päivä sisään:"
|
||||
mail_subject_reminder: "{{count}} tapahtuma(a) erääntyy lähipäivinä"
|
||||
mail_subject_reminder: "{{count}} tapahtuma(a) erääntyy {{days}} lähipäivinä"
|
||||
text_user_wrote: "{{value}} kirjoitti:"
|
||||
label_duplicated_by: kopioinut
|
||||
setting_enabled_scm: Versionhallinta käytettävissä
|
||||
|
||||
@ -200,7 +200,7 @@ fr:
|
||||
mail_body_account_information: Paramètres de connexion de votre compte
|
||||
mail_subject_account_activation_request: "Demande d'activation d'un compte {{value}}"
|
||||
mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :"
|
||||
mail_subject_reminder: "{{count}} demande(s) arrivent à échéance"
|
||||
mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})"
|
||||
mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :"
|
||||
mail_subject_wiki_content_added: "Page wiki '{{page}}' ajoutée"
|
||||
mail_body_wiki_content_added: "La page wiki '{{page}}' a été ajoutée par {{author}}."
|
||||
|
||||
@ -639,7 +639,7 @@ gl:
|
||||
mail_subject_account_activation_request: "Petición de activación de conta {{value}}"
|
||||
mail_subject_lost_password: "O teu contrasinal de {{value}}"
|
||||
mail_subject_register: "Activación da conta de {{value}}"
|
||||
mail_subject_reminder: "{{count}} petición(s) rematarán nos próximos días"
|
||||
mail_subject_reminder: "{{count}} petición(s) rematarán nos próximos {{days}} días"
|
||||
notice_account_activated: A súa conta foi activada. Xa pode conectarse.
|
||||
notice_account_invalid_creditentials: Usuario ou contrasinal inválido.
|
||||
notice_account_lost_email_sent: Enviouse un correo con instrucións para elixir un novo contrasinal.
|
||||
|
||||
@ -192,7 +192,7 @@ he:
|
||||
mail_body_account_information: פרטי החשבון שלך
|
||||
mail_subject_account_activation_request: "בקשת הפעלה לחשבון {{value}}"
|
||||
mail_body_account_activation_request: "משתמש חדש ({{value}}) נרשם. החשבון שלו מחכה לאישור שלך:"
|
||||
mail_subject_reminder: "{{count}} נושאים מיעדים להגשה בימים הקרובים"
|
||||
mail_subject_reminder: "{{count}} נושאים מיעדים להגשה בימים הקרובים ({{days}})"
|
||||
mail_body_reminder: "{{count}} נושאים שמיועדים אליך מיועדים להגשה בתוך {{days}} ימים:"
|
||||
mail_subject_wiki_content_added: "דף ה־wiki '{{page}}' נוסף"
|
||||
mail_body_wiki_content_added: דף ה־wiki '{{page}}' נוסף ע"י {{author}}.
|
||||
|
||||
@ -176,7 +176,7 @@ hr:
|
||||
mail_body_account_information: Vaši korisnički podaci
|
||||
mail_subject_account_activation_request: "{{value}} predmet za aktivaciju korisničkog računa"
|
||||
mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisnički račun čeka vaše odobrenje:"
|
||||
mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih dana"
|
||||
mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana"
|
||||
mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:"
|
||||
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}}."
|
||||
|
||||
@ -737,7 +737,7 @@
|
||||
enumeration_doc_categories: Dokumentum kategóriák
|
||||
enumeration_activities: Tevékenységek (idő rögzítés)
|
||||
mail_body_reminder: "{{count}} neked kiosztott feladat határidős az elkövetkező {{days}} napban:"
|
||||
mail_subject_reminder: "{{count}} feladat határidős az elkövetkező napokban"
|
||||
mail_subject_reminder: "{{count}} feladat határidős az elkövetkező {{days}} napokban"
|
||||
text_user_wrote: "{{value}} írta:"
|
||||
label_duplicated_by: duplikálta
|
||||
setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése
|
||||
|
||||
@ -177,7 +177,7 @@ id:
|
||||
mail_body_account_information: Informasi akun anda
|
||||
mail_subject_account_activation_request: "Permintaan aktivasi akun {{value}} "
|
||||
mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:"
|
||||
mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya"
|
||||
mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})"
|
||||
mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' halaman wiki sudah ditambahkan"
|
||||
mail_body_wiki_content_added: "The '{{page}}' halaman wiki sudah ditambahkan oleh {{author}}."
|
||||
|
||||
@ -717,7 +717,7 @@ it:
|
||||
text_subprojects_destroy_warning: "Anche i suoi sottoprogetti: {{value}} verranno eliminati."
|
||||
label_and_its_subprojects: "{{value}} ed i suoi sottoprogetti"
|
||||
mail_body_reminder: "{{count}} segnalazioni che ti sono state assegnate scadranno nei prossimi {{days}} giorni:"
|
||||
mail_subject_reminder: "{{count}} segnalazioni in scadenza nei prossimi giorni"
|
||||
mail_subject_reminder: "{{count}} segnalazioni in scadenza nei prossimi {{days}} giorni"
|
||||
text_user_wrote: "{{value}} ha scritto:"
|
||||
label_duplicated_by: duplicato da
|
||||
setting_enabled_scm: SCM abilitato
|
||||
|
||||
@ -214,7 +214,7 @@ ja:
|
||||
mail_body_account_information: アカウント情報
|
||||
mail_subject_account_activation_request: "{{value}} アカウントの承認要求"
|
||||
mail_body_account_activation_request: "新しいユーザ {{value}} が登録されました。このアカウントはあなたの承認待ちです:"
|
||||
mail_subject_reminder: "{{count}}件のチケットが期日間近です"
|
||||
mail_subject_reminder: "{{count}}件のチケットが{{days}}期日間近です"
|
||||
mail_body_reminder: "{{count}}件の担当チケットの期日が{{days}}日以内に到来します:"
|
||||
mail_subject_wiki_content_added: "Wikiページ {{page}} が追加されました"
|
||||
mail_body_wiki_content_added: "{{author}} によってWikiページ {{page}} が追加されました。"
|
||||
|
||||
@ -228,7 +228,7 @@ ko:
|
||||
mail_subject_account_activation_request: "{{value}} 계정 활성화 요청"
|
||||
mail_body_account_activation_request: "새 사용자({{value}})가 등록되었습니다. 관리자님의 승인을 기다리고 있습니다.:"
|
||||
mail_body_reminder: "당신이 맡고 있는 일감 {{count}}개의 완료 기한이 {{days}}일 후 입니다."
|
||||
mail_subject_reminder: "내일이 만기인 일감 {{count}}개"
|
||||
mail_subject_reminder: "내일이 만기인 일감 {{count}}개 ({{days}})"
|
||||
mail_subject_wiki_content_added: "위키페이지 '{{page}}'이(가) 추가되었습니다."
|
||||
mail_subject_wiki_content_updated: "'위키페이지 {{page}}'이(가) 수정되었습니다."
|
||||
mail_body_wiki_content_added: "{{author}}이(가) 위키페이지 '{{page}}'을(를) 추가하였습니다."
|
||||
|
||||
@ -237,7 +237,7 @@ lt:
|
||||
mail_body_account_information: Informacija apie Jūsų paskyrą
|
||||
mail_subject_account_activation_request: "{{value}} paskyros aktyvavimo prašymas"
|
||||
mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jūsų patvirtinimo:"
|
||||
mail_subject_reminder: "{{count}} darbas(ai) po kelių dienų"
|
||||
mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų"
|
||||
mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):"
|
||||
mail_subject_wiki_content_added: "'{{page}}' pridėtas wiki puslapis"
|
||||
mail_body_wiki_content_added: "The '{{page}}' wiki puslapi pridėjo {{author}}."
|
||||
|
||||
@ -172,7 +172,7 @@ lv:
|
||||
mail_body_account_information: Jūsu konta informācija
|
||||
mail_subject_account_activation_request: "{{value}} konta aktivizācijas pieprasījums"
|
||||
mail_body_account_activation_request: "Jauns lietotājs ({{value}}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:"
|
||||
mail_subject_reminder: "{{count}} uzdevums(i) sagaidāms(i) tuvākajās dienās"
|
||||
mail_subject_reminder: "{{count}} uzdevums(i) sagaidāms(i) tuvākajās {{days}} dienās"
|
||||
mail_body_reminder: "{{count}} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās {{days}} dienās:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' Wiki lapa pievienota"
|
||||
mail_body_wiki_content_added: "The '{{page}}' Wiki lapu pievienojis {{author}}."
|
||||
|
||||
@ -176,7 +176,7 @@ mn:
|
||||
mail_body_account_information: Таны дансны тухай мэдээлэл
|
||||
mail_subject_account_activation_request: "{{value}} дансыг идэвхжүүлэх хүсэлт"
|
||||
mail_body_account_activation_request: "Шинэ хэрэглэгч ({{value}}) бүртгүүлсэн байна. Таны баталгаажуулахыг хүлээж байна:"
|
||||
mail_subject_reminder: "Дараагийн өдрүүдэд {{count}} асуудлыг шийдэх хэрэгтэй"
|
||||
mail_subject_reminder: "Дараагийн өдрүүдэд {{count}} асуудлыг шийдэх хэрэгтэй ({{days}})"
|
||||
mail_body_reminder: "Танд оноогдсон {{count}} асуудлуудыг дараагийн {{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}}."
|
||||
|
||||
@ -601,7 +601,7 @@ nl:
|
||||
mail_subject_account_activation_request: "{{value}} accountactivatieverzoek"
|
||||
mail_subject_lost_password: "uw {{value}} wachtwoord"
|
||||
mail_subject_register: "uw {{value}} accountactivatie"
|
||||
mail_subject_reminder: "{{count}} issue(s) die voldaan moeten zijn in de komende dagen."
|
||||
mail_subject_reminder: "{{count}} issue(s) die voldaan moeten zijn in de komende {{days}} dagen."
|
||||
notice_account_activated: uw account is geactiveerd. u kunt nu inloggen.
|
||||
notice_account_invalid_creditentials: Incorrecte gebruikersnaam of wachtwoord
|
||||
notice_account_lost_email_sent: Er is een e-mail naar u verstuurd met instructies over het kiezen van een nieuw wachtwoord.
|
||||
|
||||
@ -163,7 +163,7 @@
|
||||
mail_body_account_information: Informasjon om din konto
|
||||
mail_subject_account_activation_request: "{{value}} kontoaktivering"
|
||||
mail_body_account_activation_request: "En ny bruker ({{value}}) er registrert, og avventer din godkjenning:"
|
||||
mail_subject_reminder: "{{count}} sak(er) har frist de kommende dagene"
|
||||
mail_subject_reminder: "{{count}} sak(er) har frist de kommende {{days}} dagene"
|
||||
mail_body_reminder: "{{count}} sak(er) som er tildelt deg har frist de kommende {{days}} dager:"
|
||||
|
||||
gui_validation_error: 1 feil
|
||||
|
||||
@ -640,7 +640,7 @@ pl:
|
||||
mail_subject_account_activation_request: "Zapytanie aktywacyjne konta {{value}}"
|
||||
mail_subject_lost_password: "Twoje hasło do {{value}}"
|
||||
mail_subject_register: "Aktywacja konta w {{value}}"
|
||||
mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych {{count}} dni!"
|
||||
mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych {{count}} dni! ({{days}})"
|
||||
notice_account_activated: Twoje konto zostało aktywowane. Możesz się zalogować.
|
||||
notice_account_invalid_creditentials: Zły użytkownik lub hasło
|
||||
notice_account_lost_email_sent: Email z instrukcjami zmiany hasła został wysłany do Ciebie.
|
||||
|
||||
@ -196,7 +196,7 @@ pt-BR:
|
||||
mail_body_account_information: Informações sobre sua conta
|
||||
mail_subject_account_activation_request: "{{value}} - Requisição de ativação de conta"
|
||||
mail_body_account_activation_request: "Um novo usuário ({{value}}) se registrou. A conta está aguardando sua aprovação:"
|
||||
mail_subject_reminder: "{{count}} tarefa(s) com data prevista para os próximos dias"
|
||||
mail_subject_reminder: "{{count}} tarefa(s) com data prevista para os próximos {{days}} dias"
|
||||
mail_body_reminder: "{{count}} tarefa(s) para você com data prevista para os próximos {{days}} dias:"
|
||||
|
||||
gui_validation_error: 1 erro
|
||||
|
||||
@ -181,7 +181,7 @@ pt:
|
||||
mail_body_account_information: Informação da sua conta
|
||||
mail_subject_account_activation_request: "Pedido de activação da conta {{value}}"
|
||||
mail_body_account_activation_request: "Um novo utilizador ({{value}}) registou-se. A sua conta está à espera de aprovação:"
|
||||
mail_subject_reminder: "{{count}} tarefa(s) para entregar nos próximos dias"
|
||||
mail_subject_reminder: "{{count}} tarefa(s) para entregar nos próximos {{days}} dias"
|
||||
mail_body_reminder: "{{count}} tarefa(s) que estão atribuídas a si estão agendadas para estarem completas nos próximos {{days}} dias:"
|
||||
|
||||
gui_validation_error: 1 erro
|
||||
|
||||
@ -164,7 +164,7 @@ ro:
|
||||
mail_body_account_information: Informații despre contul dumneavoastră
|
||||
mail_subject_account_activation_request: "Cerere de activare a contului {{value}}"
|
||||
mail_body_account_activation_request: "S-a înregistrat un utilizator nou ({{value}}). Contul așteaptă aprobarea dumneavoastră:"
|
||||
mail_subject_reminder: "{{count}} tichete trebuie rezolvate în următoarele zile"
|
||||
mail_subject_reminder: "{{count}} tichete trebuie rezolvate în următoarele {{days}} zile"
|
||||
mail_body_reminder: "{{count}} tichete atribuite dumneavoastră trebuie rezolvate în următoarele {{days}} zile:"
|
||||
|
||||
gui_validation_error: o eroare
|
||||
|
||||
@ -755,7 +755,7 @@ ru:
|
||||
mail_subject_account_activation_request: "Запрос на активацию пользователя в системе {{value}}"
|
||||
mail_subject_lost_password: "Ваш {{value}} пароль"
|
||||
mail_subject_register: "Активация учетной записи {{value}}"
|
||||
mail_subject_reminder: "{{count}} назначенных на Вас задач в ближайшие дни"
|
||||
mail_subject_reminder: "{{count}} назначенных на Вас задач в ближайшие {{days}} дни"
|
||||
|
||||
notice_account_activated: Ваша учетная запись активирована. Вы можете войти.
|
||||
notice_account_invalid_creditentials: Неправильное имя пользователя или пароль
|
||||
|
||||
@ -708,7 +708,7 @@ sk:
|
||||
text_subprojects_destroy_warning: "Jeho podprojekt(y): {{value}} budú takisto vymazané."
|
||||
label_and_its_subprojects: "{{value}} a jeho podprojekty"
|
||||
mail_body_reminder: "{{count}} úloha(y), ktorá(é) je(sú) vám priradený(é), ma(jú) byť hotova(é) za {{days}} dní:"
|
||||
mail_subject_reminder: "{{count}} úloha(y) ma(jú) byť hotova(é) za pár dní"
|
||||
mail_subject_reminder: "{{count}} úloha(y) ma(jú) byť hotova(é) za pár {{days}} dní"
|
||||
text_user_wrote: "{{value}} napísal:"
|
||||
label_duplicated_by: duplikovaný
|
||||
setting_enabled_scm: Zapnúť SCM
|
||||
|
||||
@ -167,7 +167,7 @@ sl:
|
||||
mail_body_account_information: Informacije o vašem računu
|
||||
mail_subject_account_activation_request: "{{value}} zahtevek za aktivacijo računa"
|
||||
mail_body_account_activation_request: "Registriral se je nov uporabnik ({{value}}). Račun čaka na vašo odobritev:"
|
||||
mail_subject_reminder: "{{count}} zahtevek(zahtevki) zapadejo v naslednjih dneh"
|
||||
mail_subject_reminder: "{{count}} zahtevek(zahtevki) zapadejo v naslednjih {{days}} dneh"
|
||||
mail_body_reminder: "{{count}} zahtevek(zahtevki), ki so vam dodeljeni bodo zapadli v naslednjih {{days}} dneh:"
|
||||
|
||||
gui_validation_error: 1 napaka
|
||||
|
||||
@ -178,7 +178,7 @@ sr-CY:
|
||||
mail_body_account_information: Информације о вашем налогу
|
||||
mail_subject_account_activation_request: "Захтев за активацију налога {{value}}"
|
||||
mail_body_account_activation_request: "Нови корисник ({{value}}) је регистрован. Налог чека на ваше одобрење:"
|
||||
mail_subject_reminder: "{{count}} проблема доспева наредних дана"
|
||||
mail_subject_reminder: "{{count}} проблема доспева наредних {{days}} дана"
|
||||
mail_body_reminder: "{{count}} проблема додељених вама доспева у наредних {{days}} дана:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki страна је додато"
|
||||
mail_body_wiki_content_added: "{{author}} је додао '{{page}}' wiki страна."
|
||||
|
||||
@ -178,7 +178,7 @@ sr:
|
||||
mail_body_account_information: Informacije o vašem nalogu
|
||||
mail_subject_account_activation_request: "Zahtev za aktivaciju naloga {{value}}"
|
||||
mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog čeka na vaše odobrenje:"
|
||||
mail_subject_reminder: "{{count}} problema dospeva narednih dana"
|
||||
mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana"
|
||||
mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki strana je dodato"
|
||||
mail_body_wiki_content_added: "{{author}} je dodao '{{page}}' wiki strana."
|
||||
|
||||
@ -234,7 +234,7 @@ sv:
|
||||
mail_body_account_information: Din kontoinformation
|
||||
mail_subject_account_activation_request: "{{value}} begäran om kontoaktivering"
|
||||
mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:"
|
||||
mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande dagarna"
|
||||
mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande {{days}} dagarna"
|
||||
mail_body_reminder: "{{count}} ärende(n) som är tilldelat dig har deadline under de {{days}} dagarna:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wikisida has lagts till"
|
||||
mail_body_wiki_content_added: The '{{page}}' wikisida has lagts till av {{author}}.
|
||||
|
||||
@ -707,7 +707,7 @@ th:
|
||||
enumeration_activities: กิจกรรม (ใช้ในการติดตามเวลา)
|
||||
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"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
|
||||
text_user_wrote: "{{value}} wrote:"
|
||||
label_duplicated_by: duplicated by
|
||||
setting_enabled_scm: Enabled SCM
|
||||
|
||||
@ -749,7 +749,7 @@ tr:
|
||||
text_user_wrote: "{{value}} wrote:"
|
||||
setting_mail_handler_api_enabled: Enable WS for incoming emails
|
||||
label_and_its_subprojects: "{{value}} and its subprojects"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next days"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
|
||||
setting_mail_handler_api_key: API key
|
||||
setting_commit_logs_encoding: Commit messages encoding
|
||||
general_csv_decimal_separator: '.'
|
||||
|
||||
@ -706,7 +706,7 @@ uk:
|
||||
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"
|
||||
mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days"
|
||||
text_user_wrote: "{{value}} wrote:"
|
||||
label_duplicated_by: duplicated by
|
||||
setting_enabled_scm: Enabled SCM
|
||||
|
||||
@ -226,7 +226,7 @@ vi:
|
||||
mail_body_account_information: Thông tin về tài khoản
|
||||
mail_subject_account_activation_request: "{{value}}: Yêu cầu chứng thực tài khoản"
|
||||
mail_body_account_activation_request: "Người dùng ({{value}}) mới đăng ký và cần bạn xác nhận:"
|
||||
mail_subject_reminder: "{{count}} vấn đề hết hạn trong các ngày tới"
|
||||
mail_subject_reminder: "{{count}} vấn đề hết hạn trong các {{days}} ngày tới"
|
||||
mail_body_reminder: "{{count}} vấn đề gán cho bạn sẽ hết hạn trong {{days}} ngày tới:"
|
||||
|
||||
gui_validation_error: 1 lỗi
|
||||
|
||||
@ -273,7 +273,7 @@
|
||||
mail_body_account_information: 您的 Redmine 帳號資訊
|
||||
mail_subject_account_activation_request: Redmine 帳號啟用需求通知
|
||||
mail_body_account_activation_request: "有位新用戶 ({{value}}) 已經完成註冊,正等候您的審核:"
|
||||
mail_subject_reminder: "您有 {{count}} 個項目即將到期"
|
||||
mail_subject_reminder: "您有 {{count}} 個項目即將到期 ({{days}})"
|
||||
mail_body_reminder: "{{count}} 個指派給您的項目,將於 {{days}} 天之內到期:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki 頁面已被新增"
|
||||
mail_body_wiki_content_added: "The '{{page}}' wiki 頁面已被 {{author}} 新增。"
|
||||
|
||||
@ -200,7 +200,7 @@ zh:
|
||||
mail_body_account_information: 您的帐号信息
|
||||
mail_subject_account_activation_request: "{{value}}帐号激活请求"
|
||||
mail_body_account_activation_request: "新用户({{value}})已完成注册,正在等候您的审核:"
|
||||
mail_subject_reminder: "{{count}} 个问题需要尽快解决"
|
||||
mail_subject_reminder: "{{count}} 个问题需要尽快解决 ({{days}})"
|
||||
mail_body_reminder: "指派给您的 {{count}} 个问题需要在 {{days}} 天内完成:"
|
||||
mail_subject_wiki_content_added: "'{{page}}' wiki页面已添加"
|
||||
mail_body_wiki_content_added: "'{{page}}' wiki页面已由 {{author}} 添加。"
|
||||
|
||||
@ -124,7 +124,7 @@ ActionController::Routing::Routes.draw do |map|
|
||||
issues_actions.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show'
|
||||
issues_actions.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show'
|
||||
issues_actions.connect 'issues/:id/quoted', :action => 'reply', :id => /\d+/
|
||||
issues_actions.connect 'issues/:id/:action', :action => /edit|move|destroy/, :id => /\d+/
|
||||
issues_actions.connect 'issues/:id/:action', :action => /edit|perform_move|destroy/, :id => /\d+/
|
||||
issues_actions.connect 'issues.:format', :action => 'create', :format => /xml/
|
||||
end
|
||||
issues_routes.with_options :conditions => {:method => :put} do |issues_actions|
|
||||
|
||||
260
doc/CHANGELOG
260
doc/CHANGELOG
@ -6,151 +6,151 @@ http://www.redmine.org/
|
||||
|
||||
== 2010-07-18 v1.0.0 (Release candidate)
|
||||
|
||||
#443: Adds context menu to the roadmap issue lists
|
||||
#443: Subtasking
|
||||
#741: Description preview while editing an issue
|
||||
#1131: Add support for alternate (non-LDAP) authentication
|
||||
#1214: REST API for Issues
|
||||
#1223: File upload on wiki edit form
|
||||
#1755: add "blocked by" as a related issues option
|
||||
#2420: Fetching emails from an POP server
|
||||
#2482: Named scopes in Issue and ActsAsWatchable plus some view refactoring (logic extraction).
|
||||
#2924: Make the right click menu more discoverable using a cursor property
|
||||
#2985: Make syntax highlighting pluggable
|
||||
#3201: Workflow Check/Uncheck All Rows/Columns
|
||||
#3359: Update CodeRay 0.9
|
||||
#3706: Allow assigned_to field configuration on Issue creation by email
|
||||
#3936: configurable list of models to include in search
|
||||
#4480: Create a link to the user profile from the administration interface
|
||||
#4482: Cache textile rendering
|
||||
#4572: Make it harder to ruin your database
|
||||
#4573: Move github gems to Gemcutter
|
||||
#4664: Add pagination to forum threads
|
||||
#4732: Make login case-insensitive also for PostgreSQL
|
||||
#4812: Create links to other projects
|
||||
#4819: Replace images with smushed ones for speed
|
||||
#4945: Allow custom fields attached to project to be searchable
|
||||
#5121: Fix issues list layout overflow
|
||||
#5169: Issue list view hook request
|
||||
#5208: Aibility to edit wiki sidebar
|
||||
#5281: Remove empty ul tags in the issue history
|
||||
#5291: Updated basque translations
|
||||
#5328: Automatically add "Repository" menu_item after repository creation
|
||||
#5415: Fewer SQL statements generated for watcher_recipients
|
||||
#5416: Exclude "fields_for" from overridden methods in TabularFormBuilder
|
||||
#5573: Allow issue assignment in email
|
||||
#5595: Allow start date and due dates to be set via incoming email
|
||||
#5752: The projects view (/projects) renders ul's wrong
|
||||
#5781: Allow to use more macros on the welcome page and project list
|
||||
Fixed #1288: Unable to past escaped wiki syntax in an issue description
|
||||
Fixed #1334: Wiki formatting character *_ and _*
|
||||
Fixed #1416: Inline code with less-then/greater-than produces @lt; and @gt; respectively
|
||||
Fixed #2473: Login and mail should not be case sensitive
|
||||
Fixed #2990: Ruby 1.9 - wrong number of arguments (1 for 0) on rake db:migrate
|
||||
Fixed #3089: Text formatting sometimes breaks when combined
|
||||
Fixed #3690: Status change info duplicates on the issue screen
|
||||
Fixed #3691: Redmine allows two files with the same file name to be uploaded to the same issue
|
||||
Fixed #3764: ApplicationHelperTest fails with JRuby
|
||||
Fixed #4265: Unclosed code tags in issue descriptions affects main UI
|
||||
Fixed #4745: Bug in index.xml.builder (issues)
|
||||
Fixed #4852: changing user/roles of project member not possible without javascript
|
||||
Fixed #4857: Week number calculation in date picker is wrong if a week starts with Sunday
|
||||
Fixed #4883: Bottom "contextual" placement in issue with associated changeset
|
||||
Fixed #4918: Revisions r3453 and r3454 broke On-the-fly user creation with LDAP
|
||||
Fixed #4935: Navigation to the Master Timesheet page (time_entries)
|
||||
Fixed #5043: Flash messages are not displayed after the project settings[module/activity] saved
|
||||
Fixed #5081: Broken links on public/help/wiki_syntax_detailed.html
|
||||
Fixed #5104: Description of document not wikified on documents index
|
||||
Fixed #5108: Issue linking fails inside of []s
|
||||
Fixed #5199: diff code coloring using coderay
|
||||
Fixed #5233: Add a hook to the issue report (Summary) view
|
||||
Fixed #5265: timetracking: subtasks time is added to the main task
|
||||
Fixed #5343: acts_as_event Doesn't Accept Outside URLs
|
||||
Fixed #5440: UI Inconsistency : Administration > Enumerations table row headers should be enclosed in <thead>
|
||||
Fixed #5463: 0.9.4 INSTALL and/or UPGRADE, missing session_store.rb
|
||||
Fixed #5524: Update_parent_attributes doesn't work for the old parent issue when reparenting
|
||||
Fixed #5548: SVN Repository: Can not list content of a folder which includes square brackets.
|
||||
Fixed #5589: "with subproject" malfunction
|
||||
Fixed #5676: Search for Numeric Value
|
||||
Fixed #5696: Redmine + PostgreSQL 8.4.4 fails on _dir_list_content.rhtml
|
||||
Fixed #5698: redmine:email:receive_imap fails silently for mails with subject longer than 255 characters
|
||||
Fixed #5700: TimelogController#destroy assumes success
|
||||
Fixed #5751: developer role is mispelled
|
||||
Fixed #5769: Popup Calendar doesn't Advance in Chrome
|
||||
Fixed #5771: Problem when importing git repository
|
||||
Fixed #5823: Error in comments in plugin.rb
|
||||
* #443: Adds context menu to the roadmap issue lists
|
||||
* #443: Subtasking
|
||||
* #741: Description preview while editing an issue
|
||||
* #1131: Add support for alternate (non-LDAP) authentication
|
||||
* #1214: REST API for Issues
|
||||
* #1223: File upload on wiki edit form
|
||||
* #1755: add "blocked by" as a related issues option
|
||||
* #2420: Fetching emails from an POP server
|
||||
* #2482: Named scopes in Issue and ActsAsWatchable plus some view refactoring (logic extraction).
|
||||
* #2924: Make the right click menu more discoverable using a cursor property
|
||||
* #2985: Make syntax highlighting pluggable
|
||||
* #3201: Workflow Check/Uncheck All Rows/Columns
|
||||
* #3359: Update CodeRay 0.9
|
||||
* #3706: Allow assigned_to field configuration on Issue creation by email
|
||||
* #3936: configurable list of models to include in search
|
||||
* #4480: Create a link to the user profile from the administration interface
|
||||
* #4482: Cache textile rendering
|
||||
* #4572: Make it harder to ruin your database
|
||||
* #4573: Move github gems to Gemcutter
|
||||
* #4664: Add pagination to forum threads
|
||||
* #4732: Make login case-insensitive also for PostgreSQL
|
||||
* #4812: Create links to other projects
|
||||
* #4819: Replace images with smushed ones for speed
|
||||
* #4945: Allow custom fields attached to project to be searchable
|
||||
* #5121: Fix issues list layout overflow
|
||||
* #5169: Issue list view hook request
|
||||
* #5208: Aibility to edit wiki sidebar
|
||||
* #5281: Remove empty ul tags in the issue history
|
||||
* #5291: Updated basque translations
|
||||
* #5328: Automatically add "Repository" menu_item after repository creation
|
||||
* #5415: Fewer SQL statements generated for watcher_recipients
|
||||
* #5416: Exclude "fields_for" from overridden methods in TabularFormBuilder
|
||||
* #5573: Allow issue assignment in email
|
||||
* #5595: Allow start date and due dates to be set via incoming email
|
||||
* #5752: The projects view (/projects) renders ul's wrong
|
||||
* #5781: Allow to use more macros on the welcome page and project list
|
||||
* Fixed #1288: Unable to past escaped wiki syntax in an issue description
|
||||
* Fixed #1334: Wiki formatting character *_ and _*
|
||||
* Fixed #1416: Inline code with less-then/greater-than produces @lt; and @gt; respectively
|
||||
* Fixed #2473: Login and mail should not be case sensitive
|
||||
* Fixed #2990: Ruby 1.9 - wrong number of arguments (1 for 0) on rake db:migrate
|
||||
* Fixed #3089: Text formatting sometimes breaks when combined
|
||||
* Fixed #3690: Status change info duplicates on the issue screen
|
||||
* Fixed #3691: Redmine allows two files with the same file name to be uploaded to the same issue
|
||||
* Fixed #3764: ApplicationHelperTest fails with JRuby
|
||||
* Fixed #4265: Unclosed code tags in issue descriptions affects main UI
|
||||
* Fixed #4745: Bug in index.xml.builder (issues)
|
||||
* Fixed #4852: changing user/roles of project member not possible without javascript
|
||||
* Fixed #4857: Week number calculation in date picker is wrong if a week starts with Sunday
|
||||
* Fixed #4883: Bottom "contextual" placement in issue with associated changeset
|
||||
* Fixed #4918: Revisions r3453 and r3454 broke On-the-fly user creation with LDAP
|
||||
* Fixed #4935: Navigation to the Master Timesheet page (time_entries)
|
||||
* Fixed #5043: Flash messages are not displayed after the project settings[module/activity] saved
|
||||
* Fixed #5081: Broken links on public/help/wiki_syntax_detailed.html
|
||||
* Fixed #5104: Description of document not wikified on documents index
|
||||
* Fixed #5108: Issue linking fails inside of []s
|
||||
* Fixed #5199: diff code coloring using coderay
|
||||
* Fixed #5233: Add a hook to the issue report (Summary) view
|
||||
* Fixed #5265: timetracking: subtasks time is added to the main task
|
||||
* Fixed #5343: acts_as_event Doesn't Accept Outside URLs
|
||||
* Fixed #5440: UI Inconsistency : Administration > Enumerations table row headers should be enclosed in <thead>
|
||||
* Fixed #5463: 0.9.4 INSTALL and/or UPGRADE, missing session_store.rb
|
||||
* Fixed #5524: Update_parent_attributes doesn't work for the old parent issue when reparenting
|
||||
* Fixed #5548: SVN Repository: Can not list content of a folder which includes square brackets.
|
||||
* Fixed #5589: "with subproject" malfunction
|
||||
* Fixed #5676: Search for Numeric Value
|
||||
* Fixed #5696: Redmine + PostgreSQL 8.4.4 fails on _dir_list_content.rhtml
|
||||
* Fixed #5698: redmine:email:receive_imap fails silently for mails with subject longer than 255 characters
|
||||
* Fixed #5700: TimelogController#destroy assumes success
|
||||
* Fixed #5751: developer role is mispelled
|
||||
* Fixed #5769: Popup Calendar doesn't Advance in Chrome
|
||||
* Fixed #5771: Problem when importing git repository
|
||||
* Fixed #5823: Error in comments in plugin.rb
|
||||
|
||||
|
||||
== 2010-07-07 v0.9.6
|
||||
|
||||
Fixed: Redmine.pm access by unauthorized users
|
||||
* Fixed: Redmine.pm access by unauthorized users
|
||||
|
||||
== 2010-06-24 v0.9.5
|
||||
|
||||
Linkify folder names on revision view
|
||||
"fiters" and "options" should be hidden in print view via css
|
||||
Fixed: NoMethodError when no issue params are submitted
|
||||
Fixed: projects.atom with required authentication
|
||||
Fixed: External links not correctly displayed in Wiki TOC
|
||||
Fixed: Member role forms in project settings are not hidden after member added
|
||||
Fixed: pre can't be inside p
|
||||
Fixed: session cookie path does not respect RAILS_RELATIVE_URL_ROOT
|
||||
Fixed: mail handler fails when the from address is empty
|
||||
* Linkify folder names on revision view
|
||||
* "fiters" and "options" should be hidden in print view via css
|
||||
* Fixed: NoMethodError when no issue params are submitted
|
||||
* Fixed: projects.atom with required authentication
|
||||
* Fixed: External links not correctly displayed in Wiki TOC
|
||||
* Fixed: Member role forms in project settings are not hidden after member added
|
||||
* Fixed: pre can't be inside p
|
||||
* Fixed: session cookie path does not respect RAILS_RELATIVE_URL_ROOT
|
||||
* Fixed: mail handler fails when the from address is empty
|
||||
|
||||
|
||||
== 2010-05-01 v0.9.4
|
||||
|
||||
Filters collapsed by default on issues index page for a saved query
|
||||
Fixed: When categories list is too big the popup menu doesn't adjust (ex. in the issue list)
|
||||
Fixed: remove "main-menu" div when the menu is empty
|
||||
Fixed: Code syntax highlighting not working in Document page
|
||||
Fixed: Git blame/annotate fails on moved files
|
||||
Fixed: Failing test in test_show_atom
|
||||
Fixed: Migrate from trac - not displayed Wikis
|
||||
Fixed: Email notifications on file upload sent to empty recipient list
|
||||
Fixed: Migrating from trac is not possible, fails to allocate memory
|
||||
Fixed: Lost password no longer flashes a confirmation message
|
||||
Fixed: Crash while deleting in-use enumeration
|
||||
Fixed: Hard coded English string at the selection of issue watchers
|
||||
Fixed: Bazaar v2.1.0 changed behaviour
|
||||
Fixed: Roadmap display can raise an exception if no trackers are selected
|
||||
Fixed: Gravatar breaks layout of "logged in" page
|
||||
Fixed: Reposman.rb on Windows
|
||||
Fixed: Possible error 500 while moving an issue to another project with SQLite
|
||||
Fixed: backslashes in issue description/note should be escaped when quoted
|
||||
Fixed: Long text in <pre> disrupts Associated revisions
|
||||
Fixed: Links to missing wiki pages not red on project overview page
|
||||
Fixed: Cannot delete a project with subprojects that shares versions
|
||||
Fixed: Update of Subversion changesets broken under Solaris
|
||||
Fixed: "Move issues" permission not working for Non member
|
||||
Fixed: Sidebar overlap on Users tab of Group editor
|
||||
Fixed: Error on db:migrate with table prefix set (hardcoded name in principal.rb)
|
||||
Fixed: Report shows sub-projects for non-members
|
||||
Fixed: 500 internal error when browsing any Redmine page in epiphany
|
||||
Fixed: Watchers selection lost when issue creation fails
|
||||
Fixed: When copying projects, redmine should not generate an email to people who created issues
|
||||
Fixed: Issue "#" table cells should have a class attribute to enable fine-grained CSS theme
|
||||
Fixed: Plugin generators should display help if no parameter is given
|
||||
* Filters collapsed by default on issues index page for a saved query
|
||||
* Fixed: When categories list is too big the popup menu doesn't adjust (ex. in the issue list)
|
||||
* Fixed: remove "main-menu" div when the menu is empty
|
||||
* Fixed: Code syntax highlighting not working in Document page
|
||||
* Fixed: Git blame/annotate fails on moved files
|
||||
* Fixed: Failing test in test_show_atom
|
||||
* Fixed: Migrate from trac - not displayed Wikis
|
||||
* Fixed: Email notifications on file upload sent to empty recipient list
|
||||
* Fixed: Migrating from trac is not possible, fails to allocate memory
|
||||
* Fixed: Lost password no longer flashes a confirmation message
|
||||
* Fixed: Crash while deleting in-use enumeration
|
||||
* Fixed: Hard coded English string at the selection of issue watchers
|
||||
* Fixed: Bazaar v2.1.0 changed behaviour
|
||||
* Fixed: Roadmap display can raise an exception if no trackers are selected
|
||||
* Fixed: Gravatar breaks layout of "logged in" page
|
||||
* Fixed: Reposman.rb on Windows
|
||||
* Fixed: Possible error 500 while moving an issue to another project with SQLite
|
||||
* Fixed: backslashes in issue description/note should be escaped when quoted
|
||||
* Fixed: Long text in <pre> disrupts Associated revisions
|
||||
* Fixed: Links to missing wiki pages not red on project overview page
|
||||
* Fixed: Cannot delete a project with subprojects that shares versions
|
||||
* Fixed: Update of Subversion changesets broken under Solaris
|
||||
* Fixed: "Move issues" permission not working for Non member
|
||||
* Fixed: Sidebar overlap on Users tab of Group editor
|
||||
* Fixed: Error on db:migrate with table prefix set (hardcoded name in principal.rb)
|
||||
* Fixed: Report shows sub-projects for non-members
|
||||
* Fixed: 500 internal error when browsing any Redmine page in epiphany
|
||||
* Fixed: Watchers selection lost when issue creation fails
|
||||
* Fixed: When copying projects, redmine should not generate an email to people who created issues
|
||||
* Fixed: Issue "#" table cells should have a class attribute to enable fine-grained CSS theme
|
||||
* Fixed: Plugin generators should display help if no parameter is given
|
||||
|
||||
|
||||
== 2010-02-28 v0.9.3
|
||||
|
||||
Adds filter for system shared versions on the cross project issue list
|
||||
Makes project identifiers searchable
|
||||
Remove invalid utf8 sequences from commit comments and author name
|
||||
Fixed: Wrong link when "http" not included in project "Homepage" link
|
||||
Fixed: Escaping in html email templates
|
||||
Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
|
||||
Fixed: Deselecting textile text formatting causes interning empty string errors
|
||||
Fixed: error with postgres when entering a non-numeric id for an issue relation
|
||||
Fixed: div.task incorrectly wrapping on Gantt Chart
|
||||
Fixed: Project copy loses wiki pages hierarchy
|
||||
Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
|
||||
Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
|
||||
Fixed: Duplicated project name for subproject version on gantt chart
|
||||
Fixed: roadmap shows subprojects issues even if subprojects is unchecked
|
||||
Fixed: IndexError if all the :last menu items are deleted from a menu
|
||||
Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
|
||||
* Adds filter for system shared versions on the cross project issue list
|
||||
* Makes project identifiers searchable
|
||||
* Remove invalid utf8 sequences from commit comments and author name
|
||||
* Fixed: Wrong link when "http" not included in project "Homepage" link
|
||||
* Fixed: Escaping in html email templates
|
||||
* Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
|
||||
* Fixed: Deselecting textile text formatting causes interning empty string errors
|
||||
* Fixed: error with postgres when entering a non-numeric id for an issue relation
|
||||
* Fixed: div.task incorrectly wrapping on Gantt Chart
|
||||
* Fixed: Project copy loses wiki pages hierarchy
|
||||
* Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
|
||||
* Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
|
||||
* Fixed: Duplicated project name for subproject version on gantt chart
|
||||
* Fixed: roadmap shows subprojects issues even if subprojects is unchecked
|
||||
* Fixed: IndexError if all the :last menu items are deleted from a menu
|
||||
* Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
|
||||
|
||||
|
||||
== 2010-02-07 v0.9.2
|
||||
|
||||
@ -69,7 +69,7 @@ Redmine::AccessControl.map do |map|
|
||||
map.permission :add_issue_notes, {:issues => [:edit, :update, :reply]}
|
||||
map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
|
||||
map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
|
||||
map.permission :move_issues, {:issues => :move}, :require => :loggedin
|
||||
map.permission :move_issues, {:issues => [:move, :perform_move]}, :require => :loggedin
|
||||
map.permission :delete_issues, {:issues => :destroy}, :require => :member
|
||||
# Queries
|
||||
map.permission :manage_public_queries, {:queries => [:new, :edit, :destroy]}, :require => :member
|
||||
@ -157,7 +157,22 @@ Redmine::MenuManager.map :application_menu do |menu|
|
||||
end
|
||||
|
||||
Redmine::MenuManager.map :admin_menu do |menu|
|
||||
# Empty
|
||||
menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural
|
||||
menu.push :users, {:controller => 'users'}, :caption => :label_user_plural
|
||||
menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural
|
||||
menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions
|
||||
menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural
|
||||
menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural,
|
||||
:html => {:class => 'issue_statuses'}
|
||||
menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow
|
||||
menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural,
|
||||
:html => {:class => 'custom_fields'}
|
||||
menu.push :enumerations, {:controller => 'enumerations'}
|
||||
menu.push :settings, {:controller => 'settings'}
|
||||
menu.push :ldap_authentication, {:controller => 'ldap_auth_sources', :action => 'index'},
|
||||
:html => {:class => 'server_authentication'}
|
||||
menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true
|
||||
menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true
|
||||
end
|
||||
|
||||
Redmine::MenuManager.map :project_menu do |menu|
|
||||
|
||||
@ -114,12 +114,12 @@ module Redmine
|
||||
def revisions(path, identifier_from, identifier_to, options={})
|
||||
revisions = Revisions.new
|
||||
|
||||
cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller"
|
||||
cmd << " --reverse" if options[:reverse]
|
||||
cmd << " --all" if options[:all]
|
||||
cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller "
|
||||
cmd << " --reverse " if options[:reverse]
|
||||
cmd << " --all " if options[:all]
|
||||
cmd << " -n #{options[:limit]} " if options[:limit]
|
||||
cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from
|
||||
cmd << " #{shell_quote identifier_to} " if identifier_to
|
||||
cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from
|
||||
cmd << "#{shell_quote identifier_to}" if identifier_to
|
||||
cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since]
|
||||
cmd << " -- #{path}" if path && !path.empty?
|
||||
|
||||
|
||||
41
lib/tasks/ci.rake
Normal file
41
lib/tasks/ci.rake
Normal file
@ -0,0 +1,41 @@
|
||||
desc "Run the Continous Integration tests for Redmine"
|
||||
task :ci do
|
||||
# RAILS_ENV and ENV[] can diverge so force them both to test
|
||||
ENV['RAILS_ENV'] = 'test'
|
||||
RAILS_ENV = 'test'
|
||||
Rake::Task["ci:setup"].invoke
|
||||
Rake::Task["ci:build"].invoke
|
||||
Rake::Task["ci:teardown"].invoke
|
||||
end
|
||||
|
||||
# Tasks can be hooked into by redefining them in a plugin
|
||||
namespace :ci do
|
||||
desc "Setup Redmine for a new build."
|
||||
task :setup do
|
||||
Rake::Task["ci:dump_environment"].invoke
|
||||
Rake::Task["db:create"].invoke
|
||||
Rake::Task["db:migrate"].invoke
|
||||
Rake::Task["db:schema:dump"].invoke
|
||||
end
|
||||
|
||||
desc "Build Redmine"
|
||||
task :build do
|
||||
Rake::Task["test"].invoke
|
||||
end
|
||||
|
||||
# Use this to cleanup after building or run post-build analysis.
|
||||
desc "Finish the build"
|
||||
task :teardown do
|
||||
end
|
||||
|
||||
desc "Dump the environment information to a BUILD_ENVIRONMENT ENV variable for debugging"
|
||||
task :dump_environment do
|
||||
|
||||
ENV['BUILD_ENVIRONMENT'] = ['ruby -v', 'gem -v', 'gem list'].collect do |command|
|
||||
result = `#{command}`
|
||||
"$ #{command}\n#{result}"
|
||||
end.join("\n")
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@ -2,7 +2,17 @@ begin
|
||||
require 'yard'
|
||||
|
||||
YARD::Rake::YardocTask.new do |t|
|
||||
t.files = ['lib/**/*.rb', 'app/**/*.rb', 'vendor/plugins/**/*.rb']
|
||||
files = ['lib/**/*.rb', 'app/**/*.rb']
|
||||
files << Dir['vendor/plugins/**/*.rb'].reject {|f| f.match(/test/) } # Exclude test files
|
||||
t.files = files
|
||||
|
||||
static_files = ['doc/CHANGELOG',
|
||||
'doc/COPYING',
|
||||
'doc/INSTALL',
|
||||
'doc/RUNNING_TESTS',
|
||||
'doc/UPGRADING'].join(',')
|
||||
|
||||
t.options += ['--output-dir', './doc/app', '--files', static_files]
|
||||
end
|
||||
|
||||
rescue LoadError
|
||||
|
||||
@ -287,8 +287,8 @@ fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
|
||||
.buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
|
||||
|
||||
div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
|
||||
div#issue-changesets .changeset { padding: 4px;}
|
||||
div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
|
||||
div#issue-changesets div.changeset { padding: 4px;}
|
||||
div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
|
||||
div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
|
||||
|
||||
div#activity dl, #search-results { margin-left: 2em; }
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
require 'test_helper'
|
||||
require File.dirname(__FILE__) + '/../test_helper'
|
||||
|
||||
class AuthSourcesControllerTest < ActionController::TestCase
|
||||
fixtures :all
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
require 'test_helper'
|
||||
require File.dirname(__FILE__) + '/../test_helper'
|
||||
|
||||
class CalendarsControllerTest < ActionController::TestCase
|
||||
fixtures :all
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
require 'test_helper'
|
||||
require File.dirname(__FILE__) + '/../test_helper'
|
||||
|
||||
class GanttsControllerTest < ActionController::TestCase
|
||||
fixtures :all
|
||||
|
||||
@ -1038,22 +1038,22 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_redirected_to :controller => 'issues', :action => 'index', :project_id => Project.find(1).identifier
|
||||
end
|
||||
|
||||
def test_move_one_issue_to_another_project
|
||||
def test_perform_move_one_issue_to_another_project
|
||||
@request.session[:user_id] = 2
|
||||
post :move, :id => 1, :new_project_id => 2, :tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => ''
|
||||
post :perform_move, :id => 1, :new_project_id => 2, :tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => ''
|
||||
assert_redirected_to :action => 'index', :project_id => 'ecookbook'
|
||||
assert_equal 2, Issue.find(1).project_id
|
||||
end
|
||||
|
||||
def test_move_one_issue_to_another_project_should_follow_when_needed
|
||||
def test_perform_move_one_issue_to_another_project_should_follow_when_needed
|
||||
@request.session[:user_id] = 2
|
||||
post :move, :id => 1, :new_project_id => 2, :follow => '1'
|
||||
post :perform_move, :id => 1, :new_project_id => 2, :follow => '1'
|
||||
assert_redirected_to '/issues/1'
|
||||
end
|
||||
|
||||
def test_bulk_move_to_another_project
|
||||
def test_bulk_perform_move_to_another_project
|
||||
@request.session[:user_id] = 2
|
||||
post :move, :ids => [1, 2], :new_project_id => 2
|
||||
post :perform_move, :ids => [1, 2], :new_project_id => 2
|
||||
assert_redirected_to :action => 'index', :project_id => 'ecookbook'
|
||||
# Issues moved to project 2
|
||||
assert_equal 2, Issue.find(1).project_id
|
||||
@ -1063,9 +1063,9 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
assert_equal 2, Issue.find(2).tracker_id
|
||||
end
|
||||
|
||||
def test_bulk_move_to_another_tracker
|
||||
def test_bulk_perform_move_to_another_tracker
|
||||
@request.session[:user_id] = 2
|
||||
post :move, :ids => [1, 2], :new_tracker_id => 2
|
||||
post :perform_move, :ids => [1, 2], :new_tracker_id => 2
|
||||
assert_redirected_to :action => 'index', :project_id => 'ecookbook'
|
||||
assert_equal 2, Issue.find(1).tracker_id
|
||||
assert_equal 2, Issue.find(2).tracker_id
|
||||
@ -1075,19 +1075,19 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
@request.session[:user_id] = 2
|
||||
assert_difference 'Issue.count', 2 do
|
||||
assert_no_difference 'Project.find(1).issues.count' do
|
||||
post :move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}
|
||||
post :perform_move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}
|
||||
end
|
||||
end
|
||||
assert_redirected_to 'projects/ecookbook/issues'
|
||||
end
|
||||
|
||||
context "#move via bulk copy" do
|
||||
context "#perform_move via bulk copy" do
|
||||
should "allow not changing the issue's attributes" do
|
||||
@request.session[:user_id] = 2
|
||||
issue_before_move = Issue.find(1)
|
||||
assert_difference 'Issue.count', 1 do
|
||||
assert_no_difference 'Project.find(1).issues.count' do
|
||||
post :move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => ''
|
||||
post :perform_move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => ''
|
||||
end
|
||||
end
|
||||
issue_after_move = Issue.first(:order => 'id desc', :conditions => {:project_id => 2})
|
||||
@ -1104,7 +1104,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
@request.session[:user_id] = 2
|
||||
assert_difference 'Issue.count', 2 do
|
||||
assert_no_difference 'Project.find(1).issues.count' do
|
||||
post :move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => 4, :status_id => 3, :start_date => '2009-12-01', :due_date => '2009-12-31'
|
||||
post :perform_move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => 4, :status_id => 3, :start_date => '2009-12-01', :due_date => '2009-12-31'
|
||||
end
|
||||
end
|
||||
|
||||
@ -1122,7 +1122,7 @@ class IssuesControllerTest < ActionController::TestCase
|
||||
|
||||
def test_copy_to_another_project_should_follow_when_needed
|
||||
@request.session[:user_id] = 2
|
||||
post :move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :follow => '1'
|
||||
post :perform_move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :follow => '1'
|
||||
issue = Issue.first(:order => 'id DESC')
|
||||
assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
|
||||
end
|
||||
|
||||
@ -86,7 +86,7 @@ class RoutingTest < ActionController::IntegrationTest
|
||||
should_route :get, "/projects/23/issues/64/copy", :controller => 'issues', :action => 'new', :project_id => '23', :copy_from => '64'
|
||||
|
||||
should_route :get, "/issues/1/move", :controller => 'issues', :action => 'move', :id => '1'
|
||||
should_route :post, "/issues/1/move", :controller => 'issues', :action => 'move', :id => '1'
|
||||
should_route :post, "/issues/1/perform_move", :controller => 'issues', :action => 'perform_move', :id => '1'
|
||||
|
||||
should_route :post, "/issues/1/quoted", :controller => 'issues', :action => 'reply', :id => '1'
|
||||
|
||||
|
||||
@ -597,4 +597,16 @@ EXPECTED
|
||||
t = link_to_user(user)
|
||||
assert_equal ::I18n.t(:label_user_anonymous), t
|
||||
end
|
||||
|
||||
def test_link_to_project
|
||||
project = Project.find(1)
|
||||
assert_equal %(<a href="/projects/ecookbook">eCookbook</a>),
|
||||
link_to_project(project)
|
||||
assert_equal %(<a href="/projects/ecookbook/settings">eCookbook</a>),
|
||||
link_to_project(project, :action => 'settings')
|
||||
assert_equal %(<a href="http://test.host/projects/ecookbook?jump=blah">eCookbook</a>),
|
||||
link_to_project(project, {:only_path => false, :jump => 'blah'})
|
||||
assert_equal %(<a href="/projects/ecookbook/settings" class="project">eCookbook</a>),
|
||||
link_to_project(project, {:action => 'settings'}, :class => "project")
|
||||
end
|
||||
end
|
||||
|
||||
@ -24,7 +24,7 @@ module RedmineMenuTestHelper
|
||||
end
|
||||
end
|
||||
|
||||
class Redmine::MenuManager::MenuItemTest < Test::Unit::TestCase
|
||||
class Redmine::MenuManager::MenuItemTest < ActiveSupport::TestCase
|
||||
include RedmineMenuTestHelper
|
||||
|
||||
Redmine::MenuManager.map :test_menu do |menu|
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
require File.dirname(__FILE__) + '/../../../test_helper'
|
||||
|
||||
class Redmine::MenuManagerTest < Test::Unit::TestCase
|
||||
class Redmine::MenuManagerTest < ActiveSupport::TestCase
|
||||
context "MenuManager#map" do
|
||||
should "be tested"
|
||||
end
|
||||
@ -25,8 +25,4 @@ class Redmine::MenuManagerTest < Test::Unit::TestCase
|
||||
context "MenuManager#items" do
|
||||
should "be tested"
|
||||
end
|
||||
|
||||
should "be tested" do
|
||||
assert true
|
||||
end
|
||||
end
|
||||
|
||||
@ -16,6 +16,10 @@ class GitAdapterTest < ActiveSupport::TestCase
|
||||
assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length
|
||||
end
|
||||
|
||||
def test_getting_certain_revisions
|
||||
assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
|
||||
end
|
||||
|
||||
def test_annotate
|
||||
annotate = @adapter.annotate('sources/watchers_controller.rb')
|
||||
assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
|
||||
|
||||
@ -33,7 +33,7 @@ module RedmineMenuTestHelper
|
||||
end
|
||||
end
|
||||
|
||||
class RedmineTest < Test::Unit::TestCase
|
||||
class RedmineTest < ActiveSupport::TestCase
|
||||
include RedmineMenuTestHelper
|
||||
|
||||
def test_top_menu
|
||||
|
||||
@ -352,6 +352,7 @@ class MailerTest < ActiveSupport::TestCase
|
||||
mail = ActionMailer::Base.deliveries.last
|
||||
assert mail.bcc.include?('dlopper@somenet.foo')
|
||||
assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
|
||||
assert_equal '1 issue(s) due in the next 42 days', mail.subject
|
||||
end
|
||||
|
||||
def last_email
|
||||
|
||||
@ -33,6 +33,15 @@ class QueryTest < ActiveSupport::TestCase
|
||||
assert query.available_filters['fixed_version_id'][:values].detect {|v| v.last == '2'}
|
||||
end
|
||||
|
||||
def test_project_filter_in_global_queries
|
||||
query = Query.new(:project => nil, :name => '_')
|
||||
project_filter = query.available_filters["project_id"]
|
||||
assert_not_nil project_filter
|
||||
project_ids = project_filter[:values].map{|p| p[1]}
|
||||
assert project_ids.include?("1") #public project
|
||||
assert !project_ids.include?("2") #private project user cannot see
|
||||
end
|
||||
|
||||
def find_issues_with_query(query)
|
||||
Issue.find :all,
|
||||
:include => [ :assigned_to, :status, :tracker, :project, :priority ],
|
||||
@ -351,4 +360,13 @@ class QueryTest < ActiveSupport::TestCase
|
||||
assert !q.editable_by?(manager)
|
||||
assert !q.editable_by?(developer)
|
||||
end
|
||||
|
||||
context "#available_filters" do
|
||||
should "include users of visible projects in cross-project view" do
|
||||
query = Query.new(:name => "_")
|
||||
users = query.available_filters["assigned_to_id"]
|
||||
assert_not_nil users
|
||||
assert users[:values].map{|u|u[1]}.include?("3")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user