mirror of
https://github.com/meineerde/redmine.git
synced 2026-03-11 03:33:07 +00:00
Merge branch 'master' of git://github.com/edavis10/redmine into edavis10/master
This commit is contained in:
commit
4c60f05263
@ -2,4 +2,4 @@
|
||||
|
||||
Redmine is a flexible project management web application written using Ruby on Rails framework.
|
||||
|
||||
More details can be found at http://www.redmine.org
|
||||
More details can be found at in the doc directory or on the official website http://www.redmine.org
|
||||
|
||||
@ -130,6 +130,7 @@ class ApplicationController < ActionController::Base
|
||||
format.html { redirect_to :controller => "account", :action => "login", :back_url => url }
|
||||
format.atom { redirect_to :controller => "account", :action => "login", :back_url => url }
|
||||
format.xml { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' }
|
||||
format.js { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' }
|
||||
format.json { head :unauthorized, 'WWW-Authenticate' => 'Basic realm="Redmine API"' }
|
||||
end
|
||||
return false
|
||||
@ -240,6 +241,7 @@ class ApplicationController < ActionController::Base
|
||||
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 }
|
||||
format.json { head 403 }
|
||||
end
|
||||
return false
|
||||
@ -250,6 +252,7 @@ class ApplicationController < ActionController::Base
|
||||
format.html { render :template => "common/404", :layout => !request.xhr?, :status => 404 }
|
||||
format.atom { head 404 }
|
||||
format.xml { head 404 }
|
||||
format.js { head 404 }
|
||||
format.json { head 404 }
|
||||
end
|
||||
return false
|
||||
@ -263,6 +266,7 @@ class ApplicationController < ActionController::Base
|
||||
}
|
||||
format.atom { head 500 }
|
||||
format.xml { head 500 }
|
||||
format.js { head 500 }
|
||||
format.json { head 500 }
|
||||
end
|
||||
end
|
||||
|
||||
@ -19,6 +19,7 @@ class TimelogController < ApplicationController
|
||||
menu_item :issues
|
||||
before_filter :find_project, :authorize, :only => [:edit, :destroy]
|
||||
before_filter :find_optional_project, :only => [:report, :details]
|
||||
before_filter :load_available_criterias, :only => [:report]
|
||||
|
||||
verify :method => :post, :only => :destroy, :redirect_to => { :action => :details }
|
||||
|
||||
@ -30,51 +31,6 @@ class TimelogController < ApplicationController
|
||||
include CustomFieldsHelper
|
||||
|
||||
def report
|
||||
@available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
|
||||
:klass => Project,
|
||||
:label => :label_project},
|
||||
'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
|
||||
:klass => Version,
|
||||
:label => :label_version},
|
||||
'category' => {:sql => "#{Issue.table_name}.category_id",
|
||||
:klass => IssueCategory,
|
||||
:label => :field_category},
|
||||
'member' => {:sql => "#{TimeEntry.table_name}.user_id",
|
||||
:klass => User,
|
||||
:label => :label_member},
|
||||
'tracker' => {:sql => "#{Issue.table_name}.tracker_id",
|
||||
:klass => Tracker,
|
||||
:label => :label_tracker},
|
||||
'activity' => {:sql => "#{TimeEntry.table_name}.activity_id",
|
||||
:klass => TimeEntryActivity,
|
||||
:label => :label_activity},
|
||||
'issue' => {:sql => "#{TimeEntry.table_name}.issue_id",
|
||||
:klass => Issue,
|
||||
:label => :label_issue}
|
||||
}
|
||||
|
||||
# Add list and boolean custom fields as available criterias
|
||||
custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields)
|
||||
custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
|
||||
@available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)",
|
||||
:format => cf.field_format,
|
||||
:label => cf.name}
|
||||
end if @project
|
||||
|
||||
# Add list and boolean time entry custom fields
|
||||
TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
|
||||
@available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)",
|
||||
:format => cf.field_format,
|
||||
:label => cf.name}
|
||||
end
|
||||
|
||||
# Add list and boolean time entry activity custom fields
|
||||
TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
|
||||
@available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)",
|
||||
:format => cf.field_format,
|
||||
:label => cf.name}
|
||||
end
|
||||
|
||||
@criterias = params[:criterias] || []
|
||||
@criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria}
|
||||
@criterias.uniq!
|
||||
@ -308,4 +264,54 @@ private
|
||||
@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
|
||||
@available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
|
||||
:klass => Project,
|
||||
:label => :label_project},
|
||||
'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
|
||||
:klass => Version,
|
||||
:label => :label_version},
|
||||
'category' => {:sql => "#{Issue.table_name}.category_id",
|
||||
:klass => IssueCategory,
|
||||
:label => :field_category},
|
||||
'member' => {:sql => "#{TimeEntry.table_name}.user_id",
|
||||
:klass => User,
|
||||
:label => :label_member},
|
||||
'tracker' => {:sql => "#{Issue.table_name}.tracker_id",
|
||||
:klass => Tracker,
|
||||
:label => :label_tracker},
|
||||
'activity' => {:sql => "#{TimeEntry.table_name}.activity_id",
|
||||
:klass => TimeEntryActivity,
|
||||
:label => :label_activity},
|
||||
'issue' => {:sql => "#{TimeEntry.table_name}.issue_id",
|
||||
:klass => Issue,
|
||||
:label => :label_issue}
|
||||
}
|
||||
|
||||
# Add list and boolean custom fields as available criterias
|
||||
custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields)
|
||||
custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
|
||||
@available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)",
|
||||
:format => cf.field_format,
|
||||
:label => cf.name}
|
||||
end if @project
|
||||
|
||||
# Add list and boolean time entry custom fields
|
||||
TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
|
||||
@available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)",
|
||||
:format => cf.field_format,
|
||||
:label => cf.name}
|
||||
end
|
||||
|
||||
# Add list and boolean time entry activity custom fields
|
||||
TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf|
|
||||
@available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)",
|
||||
:format => cf.field_format,
|
||||
:label => cf.name}
|
||||
end
|
||||
|
||||
call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project })
|
||||
@available_criterias
|
||||
end
|
||||
end
|
||||
|
||||
@ -56,7 +56,10 @@ module ProjectsHelper
|
||||
s = ''
|
||||
if projects.any?
|
||||
ancestors = []
|
||||
original_project = @project
|
||||
projects.each do |project|
|
||||
# set the project environment to please macros.
|
||||
@project = project
|
||||
if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
|
||||
s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n"
|
||||
else
|
||||
@ -75,6 +78,7 @@ module ProjectsHelper
|
||||
ancestors << project
|
||||
end
|
||||
s << ("</li></ul>\n" * ancestors.size)
|
||||
@project = original_project
|
||||
end
|
||||
s
|
||||
end
|
||||
|
||||
@ -23,4 +23,8 @@ class Change < ActiveRecord::Base
|
||||
def relative_path
|
||||
changeset.repository.relative_path(path)
|
||||
end
|
||||
|
||||
def before_save
|
||||
path ||= ""
|
||||
end
|
||||
end
|
||||
|
||||
@ -629,6 +629,7 @@ class Issue < ActiveRecord::Base
|
||||
end
|
||||
reload
|
||||
elsif parent_issue_id != parent_id
|
||||
former_parent_id = parent_id
|
||||
# moving an existing issue
|
||||
if @parent_issue && @parent_issue.root_id == root_id
|
||||
# inside the same tree
|
||||
@ -658,12 +659,18 @@ class Issue < ActiveRecord::Base
|
||||
relation.destroy unless relation.valid?
|
||||
end
|
||||
end
|
||||
# update former parent
|
||||
recalculate_attributes_for(former_parent_id) if former_parent_id
|
||||
end
|
||||
remove_instance_variable(:@parent_issue) if instance_variable_defined?(:@parent_issue)
|
||||
end
|
||||
|
||||
def update_parent_attributes
|
||||
if parent_id && p = Issue.find_by_id(parent_id)
|
||||
recalculate_attributes_for(parent_id) if parent_id
|
||||
end
|
||||
|
||||
def recalculate_attributes_for(issue_id)
|
||||
if issue_id && p = Issue.find_by_id(issue_id)
|
||||
# priority = highest priority of children
|
||||
if priority_position = p.children.maximum("#{IssuePriority.table_name}.position", :include => :priority)
|
||||
p.priority = IssuePriority.find_by_position(priority_position)
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<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_ldap_authentication), {:controller => 'ldap_auth_sources', :action => 'index'}, :class => 'server_authentication' %></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>
|
||||
|
||||
@ -70,6 +70,7 @@
|
||||
<% end %>
|
||||
|
||||
<% end %>
|
||||
<%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'issues/sidebar' %>
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
</div>
|
||||
|
||||
<div style="float:right;">
|
||||
<%= link_to l(:label_ldap_authentication), :controller => 'ldap_auth_sources', :action => 'index' %>
|
||||
<%= link_to l(:label_ldap_authentication), {:controller => 'ldap_auth_sources', :action => 'index'}, :class => 'icon icon-server-authentication' %>
|
||||
</div>
|
||||
|
||||
<%= submit_tag l(:button_save) %>
|
||||
|
||||
@ -18,11 +18,13 @@
|
||||
<h3><%=l(:label_project_latest)%></h3>
|
||||
<ul>
|
||||
<% for project in @projects %>
|
||||
<% @project = project %>
|
||||
<li>
|
||||
<%= link_to h(project.name), :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)
|
||||
<%= textilizable project.short_description, :project => project %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% @project = nil %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@ -574,7 +574,7 @@ bg:
|
||||
text_issue_category_reassign_to: Преобвързване с категория
|
||||
|
||||
default_role_manager: Мениджър
|
||||
default_role_developper: Разработчик
|
||||
default_role_developer: Разработчик
|
||||
default_role_reporter: Публикуващ
|
||||
default_tracker_bug: Бъг
|
||||
default_tracker_feature: Функционалност
|
||||
|
||||
@ -788,7 +788,7 @@ bs:
|
||||
text_custom_field_possible_values_info: 'Jedna linija za svaku vrijednost'
|
||||
|
||||
default_role_manager: Menadžer
|
||||
default_role_developper: Programer
|
||||
default_role_developer: Programer
|
||||
default_role_reporter: Reporter
|
||||
default_tracker_bug: Greška
|
||||
default_tracker_feature: Nova funkcija
|
||||
|
||||
@ -775,7 +775,7 @@ ca:
|
||||
text_custom_field_possible_values_info: 'Una línia per a cada valor'
|
||||
|
||||
default_role_manager: Gestor
|
||||
default_role_developper: Desenvolupador
|
||||
default_role_developer: Desenvolupador
|
||||
default_role_reporter: Informador
|
||||
default_tracker_bug: Error
|
||||
default_tracker_feature: Característica
|
||||
|
||||
@ -681,7 +681,7 @@ cs:
|
||||
text_reassign_time_entries: 'Přeřadit evidované hodiny k tomuto úkolu:'
|
||||
|
||||
default_role_manager: Manažer
|
||||
default_role_developper: Vývojář
|
||||
default_role_developer: Vývojář
|
||||
default_role_reporter: Reportér
|
||||
default_tracker_bug: Chyba
|
||||
default_tracker_feature: Požadavek
|
||||
|
||||
@ -683,7 +683,7 @@ da:
|
||||
text_rmagick_available: RMagick tilgængelig (valgfri)
|
||||
|
||||
default_role_manager: Leder
|
||||
default_role_developper: Udvikler
|
||||
default_role_developer: Udvikler
|
||||
default_role_reporter: Rapportør
|
||||
default_tracker_bug: Bug
|
||||
default_tracker_feature: Feature
|
||||
|
||||
@ -882,7 +882,7 @@ de:
|
||||
Sind Sie sicher, dass Sie dies tun möchten?
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developper: Entwickler
|
||||
default_role_developer: Entwickler
|
||||
default_role_reporter: Reporter
|
||||
default_tracker_bug: Fehler
|
||||
default_tracker_feature: Feature
|
||||
|
||||
@ -799,7 +799,7 @@ el:
|
||||
text_wiki_page_reassign_children: "Επανεκχώριση των σελίδων τέκνων στη γονική σελίδα"
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developper: Developer
|
||||
default_role_developer: Developer
|
||||
default_role_reporter: Reporter
|
||||
default_tracker_bug: Σφάλματα
|
||||
default_tracker_feature: Λειτουργίες
|
||||
|
||||
@ -864,7 +864,7 @@ en-GB:
|
||||
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.\nAre you sure you want to continue?"
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developper: Developer
|
||||
default_role_developer: Developer
|
||||
default_role_reporter: Reporter
|
||||
default_tracker_bug: Bug
|
||||
default_tracker_feature: Feature
|
||||
|
||||
@ -877,7 +877,7 @@ en:
|
||||
text_zoom_out: Zoom out
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developper: Developer
|
||||
default_role_developer: Developer
|
||||
default_role_reporter: Reporter
|
||||
default_tracker_bug: Bug
|
||||
default_tracker_feature: Feature
|
||||
|
||||
@ -228,7 +228,7 @@ es:
|
||||
default_priority_low: Baja
|
||||
default_priority_normal: Normal
|
||||
default_priority_urgent: Urgente
|
||||
default_role_developper: Desarrollador
|
||||
default_role_developer: Desarrollador
|
||||
default_role_manager: Jefe de proyecto
|
||||
default_role_reporter: Informador
|
||||
default_tracker_bug: Errores
|
||||
|
||||
@ -861,7 +861,7 @@ eu:
|
||||
text_own_membership_delete_confirmation: "Zure baimen batzuk (edo guztiak) kentzera zoaz eta baliteke horren ondoren proiektu hau ezin editatzea.\n Ziur zaude jarraitu nahi duzula?"
|
||||
|
||||
default_role_manager: Kudeatzailea
|
||||
default_role_developper: Garatzailea
|
||||
default_role_developer: Garatzailea
|
||||
default_role_reporter: Berriemailea
|
||||
default_tracker_bug: Errorea
|
||||
default_tracker_feature: Eginbidea
|
||||
|
||||
@ -657,7 +657,7 @@ fi:
|
||||
text_load_default_configuration: Lataa vakioasetukset
|
||||
|
||||
default_role_manager: Päälikkö
|
||||
default_role_developper: Kehittäjä
|
||||
default_role_developer: Kehittäjä
|
||||
default_role_reporter: Tarkastelija
|
||||
default_tracker_bug: Ohjelmointivirhe
|
||||
default_tracker_feature: Ominaisuus
|
||||
|
||||
@ -878,7 +878,7 @@ fr:
|
||||
text_own_membership_delete_confirmation: "Vous allez supprimer tout ou partie de vos permissions sur ce projet et ne serez peut-être plus autorisé à modifier ce projet.\nEtes-vous sûr de vouloir continuer ?"
|
||||
|
||||
default_role_manager: "Manager "
|
||||
default_role_developper: "Développeur "
|
||||
default_role_developer: "Développeur "
|
||||
default_role_reporter: "Rapporteur "
|
||||
default_tracker_bug: Anomalie
|
||||
default_tracker_feature: Evolution
|
||||
|
||||
@ -205,7 +205,7 @@ gl:
|
||||
default_priority_low: Baixa
|
||||
default_priority_normal: Normal
|
||||
default_priority_urgent: Urxente
|
||||
default_role_developper: Desenvolvedor
|
||||
default_role_developer: Desenvolvedor
|
||||
default_role_manager: Xefe de proxecto
|
||||
default_role_reporter: Informador
|
||||
default_tracker_bug: Erros
|
||||
|
||||
@ -596,7 +596,7 @@ he:
|
||||
text_issue_category_reassign_to: הצב מחדש את הקטגוריה לנושאים
|
||||
|
||||
default_role_manager: מנהל
|
||||
default_role_developper: מפתח
|
||||
default_role_developer: מפתח
|
||||
default_role_reporter: מדווח
|
||||
default_tracker_bug: באג
|
||||
default_tracker_feature: פיצ'ר
|
||||
|
||||
@ -854,7 +854,7 @@ hr:
|
||||
text_wiki_page_destroy_children: "Delete child pages and all their descendants"
|
||||
text_wiki_page_reassign_children: "Reassign child pages to this parent page"
|
||||
default_role_manager: Upravitelj
|
||||
default_role_developper: Razvojni inženjer
|
||||
default_role_developer: Razvojni inženjer
|
||||
default_role_reporter: Korisnik
|
||||
default_tracker_bug: Pogreška
|
||||
default_tracker_feature: Funkcionalnost
|
||||
|
||||
@ -712,7 +712,7 @@
|
||||
text_reassign_time_entries: 'A rögzített órák újra hozzárendelése másik feladathoz:'
|
||||
|
||||
default_role_manager: Vezető
|
||||
default_role_developper: Fejlesztő
|
||||
default_role_developer: Fejlesztő
|
||||
default_role_reporter: Bejelentő
|
||||
default_tracker_bug: Hiba
|
||||
default_tracker_feature: Fejlesztés
|
||||
|
||||
@ -838,7 +838,7 @@ id:
|
||||
text_wiki_page_reassign_children: "Tujukan halaman anak ke halaman induk yang ini"
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developper: Pengembang
|
||||
default_role_developer: Pengembang
|
||||
default_role_reporter: Pelapor
|
||||
default_tracker_bug: Bug
|
||||
default_tracker_feature: Fitur
|
||||
|
||||
@ -587,7 +587,7 @@ it:
|
||||
text_issue_category_reassign_to: Riassegna segnalazioni a questa categoria
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developper: Sviluppatore
|
||||
default_role_developer: Sviluppatore
|
||||
default_role_reporter: Reporter
|
||||
default_tracker_bug: Segnalazione
|
||||
default_tracker_feature: Funzione
|
||||
|
||||
@ -908,7 +908,7 @@ ja:
|
||||
text_zoom_out: 縮小
|
||||
|
||||
default_role_manager: 管理者
|
||||
default_role_developper: 開発者
|
||||
default_role_developer: 開発者
|
||||
default_role_reporter: 報告者
|
||||
default_tracker_bug: バグ
|
||||
default_tracker_feature: 機能
|
||||
|
||||
@ -852,7 +852,7 @@ ko:
|
||||
text_wiki_page_reassign_children: 하위 페이지를 이 페이지 아래로 지정
|
||||
|
||||
default_role_manager: 관리자
|
||||
default_role_developper: 개발자
|
||||
default_role_developer: 개발자
|
||||
default_role_reporter: 보고자
|
||||
default_tracker_bug: 결함
|
||||
default_tracker_feature: 새기능
|
||||
|
||||
@ -894,7 +894,7 @@ lt:
|
||||
text_wiki_page_destroy_children: Pašalinti child puslapius ir jų sekinius
|
||||
|
||||
default_role_manager: Vadovas
|
||||
default_role_developper: Projektuotojas
|
||||
default_role_developer: Projektuotojas
|
||||
default_role_reporter: Pranešėjas
|
||||
default_tracker_bug: Klaida
|
||||
default_tracker_feature: Ypatybė
|
||||
|
||||
@ -856,7 +856,7 @@ lv:
|
||||
text_own_membership_delete_confirmation: "Jūs tūlīt dzēsīsiet dažas vai visas atļaujas, un Jums pēc tam var nebūt atļauja labot šo projektu.\nVai turpināt?"
|
||||
|
||||
default_role_manager: Menedžeris
|
||||
default_role_developper: Izstrādātājs
|
||||
default_role_developer: Izstrādātājs
|
||||
default_role_reporter: Ziņotājs
|
||||
default_tracker_bug: Kļūda
|
||||
default_tracker_feature: Iezīme
|
||||
|
||||
@ -861,7 +861,7 @@ mn:
|
||||
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.\nAre you sure you want to continue?"
|
||||
|
||||
default_role_manager: Менежер
|
||||
default_role_developper: Хөгжүүлэгч
|
||||
default_role_developer: Хөгжүүлэгч
|
||||
default_role_reporter: Мэдэгдэгч
|
||||
default_tracker_bug: Алдаа
|
||||
default_tracker_feature: Онцлог
|
||||
|
||||
@ -167,7 +167,7 @@ nl:
|
||||
default_priority_low: Laag
|
||||
default_priority_normal: Normaal
|
||||
default_priority_urgent: Spoed
|
||||
default_role_developper: Ontwikkelaar
|
||||
default_role_developer: Ontwikkelaar
|
||||
default_role_manager: Manager
|
||||
default_role_reporter: Rapporteur
|
||||
default_tracker_bug: Bug
|
||||
|
||||
@ -685,7 +685,7 @@
|
||||
text_user_wrote: "{{value}} skrev:"
|
||||
|
||||
default_role_manager: Leder
|
||||
default_role_developper: Utvikler
|
||||
default_role_developer: Utvikler
|
||||
default_role_reporter: Rapportør
|
||||
default_tracker_bug: Feil
|
||||
default_tracker_feature: Funksjon
|
||||
|
||||
@ -192,7 +192,7 @@ pl:
|
||||
default_priority_low: Niski
|
||||
default_priority_normal: Normalny
|
||||
default_priority_urgent: Pilny
|
||||
default_role_developper: Programista
|
||||
default_role_developer: Programista
|
||||
default_role_manager: Kierownik
|
||||
default_role_reporter: Wprowadzajacy
|
||||
default_tracker_bug: Błąd
|
||||
|
||||
@ -730,7 +730,7 @@ pt-BR:
|
||||
text_email_delivery_not_configured: "O envio de e-mail não está configurado, e as notificações estão inativas.\nConfigure seu servidor SMTP no arquivo config/email.yml e reinicie a aplicação para ativá-las."
|
||||
|
||||
default_role_manager: Gerente
|
||||
default_role_developper: Desenvolvedor
|
||||
default_role_developer: Desenvolvedor
|
||||
default_role_reporter: Informante
|
||||
default_tracker_bug: Defeito
|
||||
default_tracker_feature: Funcionalidade
|
||||
@ -930,5 +930,5 @@ pt-BR:
|
||||
notice_failed_to_save_members: "Falha ao gravar membro(s): {{errors}}."
|
||||
text_zoom_out: Afastar zoom
|
||||
text_zoom_in: Aproximar zoom
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
notice_unable_delete_time_entry: Não foi possível excluir a entrada no registro de horas trabalhadas.
|
||||
label_overall_spent_time: Tempo gasto geral
|
||||
|
||||
@ -717,7 +717,7 @@ pt:
|
||||
text_email_delivery_not_configured: "Entrega por e-mail não está configurada, e as notificação estão desactivadas.\nConfigure o seu servidor de SMTP em config/email.yml e reinicie a aplicação para activar estas funcionalidades."
|
||||
|
||||
default_role_manager: Gestor
|
||||
default_role_developper: Programador
|
||||
default_role_developer: Programador
|
||||
default_role_reporter: Repórter
|
||||
default_tracker_bug: Bug
|
||||
default_tracker_feature: Funcionalidade
|
||||
|
||||
@ -775,7 +775,7 @@ ro:
|
||||
text_custom_field_possible_values_info: 'O linie pentru fiecare valoare'
|
||||
|
||||
default_role_manager: Manager
|
||||
default_role_developper: Dezvoltator
|
||||
default_role_developer: Dezvoltator
|
||||
default_role_reporter: Creator de rapoarte
|
||||
default_tracker_bug: Defect
|
||||
default_tracker_feature: Funcție
|
||||
|
||||
@ -265,7 +265,7 @@ ru:
|
||||
default_priority_low: Низкий
|
||||
default_priority_normal: Нормальный
|
||||
default_priority_urgent: Срочный
|
||||
default_role_developper: Разработчик
|
||||
default_role_developer: Разработчик
|
||||
default_role_manager: Менеджер
|
||||
default_role_reporter: Генератор отчетов
|
||||
default_tracker_bug: Ошибка
|
||||
@ -1022,5 +1022,5 @@ ru:
|
||||
field_principal: Глава
|
||||
text_zoom_out: Отдалить
|
||||
text_zoom_in: Приблизить
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
notice_unable_delete_time_entry: Невозможно удалить запись журнала.
|
||||
label_overall_spent_time: Всего затрачено времени
|
||||
|
||||
@ -679,7 +679,7 @@ sk:
|
||||
text_reassign_time_entries: 'Preradiť evidované hodiny k tejto úlohe:'
|
||||
|
||||
default_role_manager: Manažér
|
||||
default_role_developper: Vývojár
|
||||
default_role_developer: Vývojár
|
||||
default_role_reporter: Reportér
|
||||
default_tracker_bug: Chyba
|
||||
default_tracker_feature: Rozšírenie
|
||||
|
||||
@ -760,7 +760,7 @@ sl:
|
||||
text_diff_truncated: '... Ta sprememba je bila odsekana ker presega največjo velikost ki je lahko prikazana.'
|
||||
|
||||
default_role_manager: Upravnik
|
||||
default_role_developper: Razvijalec
|
||||
default_role_developer: Razvijalec
|
||||
default_role_reporter: Poročevalec
|
||||
default_tracker_bug: Hrošč
|
||||
default_tracker_feature: Funkcija
|
||||
|
||||
@ -863,7 +863,7 @@ sr-CY:
|
||||
text_own_membership_delete_confirmation: "Уклањањем појединих или свих ваших дозвола нећете више моћи за уређујете овај пројекат након тога.\nЖелите ли да наставите?"
|
||||
|
||||
default_role_manager: Менаџер
|
||||
default_role_developper: Програмер
|
||||
default_role_developer: Програмер
|
||||
default_role_reporter: Извештач
|
||||
default_tracker_bug: Грешка
|
||||
default_tracker_feature: Функционалност
|
||||
|
||||
@ -863,7 +863,7 @@ sr:
|
||||
text_own_membership_delete_confirmation: "Uklanjanjem pojedinih ili svih vaših dozvola nećete više moći za uređujete ovaj projekat nakon toga.\nŽelite li da nastavite?"
|
||||
|
||||
default_role_manager: Menadžer
|
||||
default_role_developper: Programer
|
||||
default_role_developer: Programer
|
||||
default_role_reporter: Izveštač
|
||||
default_tracker_bug: Greška
|
||||
default_tracker_feature: Funkcionalnost
|
||||
|
||||
@ -203,6 +203,7 @@ sv:
|
||||
notice_account_pending: "Ditt konto skapades och avvaktar nu administratörens godkännande."
|
||||
notice_default_data_loaded: Standardkonfiguration inläst.
|
||||
notice_unable_delete_version: Denna version var inte möjlig att ta bort.
|
||||
notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
|
||||
notice_issue_done_ratios_updated: % klart uppdaterade.
|
||||
|
||||
error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: {{value}}"
|
||||
@ -689,6 +690,7 @@ sv:
|
||||
label_changes_details: Detaljer om alla ändringar
|
||||
label_issue_tracking: Ärendeuppföljning
|
||||
label_spent_time: Spenderad tid
|
||||
label_overall_spent_time: Total tid spenderad
|
||||
label_f_hour: "{{value}} timme"
|
||||
label_f_hour_plural: "{{value}} timmar"
|
||||
label_time_tracking: Tidsuppföljning
|
||||
@ -926,7 +928,7 @@ sv:
|
||||
text_zoom_in: Zooma in
|
||||
|
||||
default_role_manager: Projektledare
|
||||
default_role_developper: Utvecklare
|
||||
default_role_developer: Utvecklare
|
||||
default_role_reporter: Rapportör
|
||||
default_tracker_bug: Bugg
|
||||
default_tracker_feature: Funktionalitet
|
||||
@ -951,5 +953,3 @@ sv:
|
||||
enumeration_doc_categories: Dokumentkategorier
|
||||
enumeration_activities: Aktiviteter (tidsuppföljning)
|
||||
enumeration_system_activity: Systemaktivitet
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
|
||||
@ -681,7 +681,7 @@ th:
|
||||
text_reassign_time_entries: 'ระบุเวลาที่ใช้ในโครงการนี่อีกครั้ง:'
|
||||
|
||||
default_role_manager: ผู้จัดการ
|
||||
default_role_developper: ผู้พัฒนา
|
||||
default_role_developer: ผู้พัฒนา
|
||||
default_role_reporter: ผู้รายงาน
|
||||
default_tracker_bug: บั๊ก
|
||||
default_tracker_feature: ลักษณะเด่น
|
||||
|
||||
@ -710,7 +710,7 @@ tr:
|
||||
text_reassign_time_entries: 'Raporlanmış saatleri bu iletiye tekrar ata:'
|
||||
|
||||
default_role_manager: Yönetici
|
||||
default_role_developper: Geliştirici
|
||||
default_role_developer: Geliştirici
|
||||
default_role_reporter: Raporlayıcı
|
||||
default_tracker_bug: Hata
|
||||
default_tracker_feature: ÖZellik
|
||||
|
||||
@ -611,7 +611,7 @@ uk:
|
||||
text_user_mail_option: "Для невибраних проектів ви отримуватимете повідомлення тільки про те, що проглядаєте або в чому берете участь (наприклад, питання автором яких ви є або які вам призначені)."
|
||||
|
||||
default_role_manager: Менеджер
|
||||
default_role_developper: Розробник
|
||||
default_role_developer: Розробник
|
||||
default_role_reporter: Репортер
|
||||
звітів default_tracker_bug: Помилка
|
||||
default_tracker_feature: Властивість
|
||||
|
||||
@ -762,7 +762,7 @@ vi:
|
||||
text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
|
||||
|
||||
default_role_manager: Điều hành
|
||||
default_role_developper: Phát triển
|
||||
default_role_developer: Phát triển
|
||||
default_role_reporter: Báo cáo
|
||||
default_tracker_bug: Lỗi
|
||||
default_tracker_feature: Tính năng
|
||||
|
||||
@ -243,6 +243,7 @@
|
||||
notice_account_pending: "您的帳號已經建立,正在等待管理員的審核。"
|
||||
notice_default_data_loaded: 預設組態已載入成功。
|
||||
notice_unable_delete_version: 無法刪除版本。
|
||||
notice_unable_delete_time_entry: 無法刪除工時記錄項目。
|
||||
notice_issue_done_ratios_updated: 項目完成百分比已更新。
|
||||
|
||||
error_can_t_load_default_data: "無法載入預設組態: {{value}}"
|
||||
@ -729,6 +730,7 @@
|
||||
label_changes_details: 所有變更的明細
|
||||
label_issue_tracking: 項目追蹤
|
||||
label_spent_time: 耗用工時
|
||||
label_overall_spent_time: 整體耗用工時
|
||||
label_f_hour: "{{value}} 小時"
|
||||
label_f_hour_plural: "{{value}} 小時"
|
||||
label_time_tracking: 工時追蹤
|
||||
@ -966,7 +968,7 @@
|
||||
text_zoom_out: 縮小
|
||||
|
||||
default_role_manager: 管理人員
|
||||
default_role_developper: 開發人員
|
||||
default_role_developer: 開發人員
|
||||
default_role_reporter: 報告人員
|
||||
default_tracker_bug: 臭蟲
|
||||
default_tracker_feature: 功能
|
||||
@ -991,5 +993,3 @@
|
||||
enumeration_doc_categories: 文件分類
|
||||
enumeration_activities: 活動 (時間追蹤)
|
||||
enumeration_system_activity: 系統活動
|
||||
notice_unable_delete_time_entry: Unable to delete time log entry.
|
||||
label_overall_spent_time: Overall spent time
|
||||
|
||||
@ -428,7 +428,7 @@ zh:
|
||||
one: 1 个项目
|
||||
other: "{{count}} 个项目"
|
||||
label_project_all: 所有的项目
|
||||
label_project_latest: 最近更新的项目
|
||||
label_project_latest: 最近的项目
|
||||
label_issue: 问题
|
||||
label_issue_new: 新建问题
|
||||
label_issue_plural: 问题
|
||||
@ -592,10 +592,10 @@ zh:
|
||||
label_all_time: 全部时间
|
||||
label_yesterday: 昨天
|
||||
label_this_week: 本周
|
||||
label_last_week: 下周
|
||||
label_last_week: 上周
|
||||
label_last_n_days: "最后 {{count}} 天"
|
||||
label_this_month: 本月
|
||||
label_last_month: 下月
|
||||
label_last_month: 上月
|
||||
label_this_year: 今年
|
||||
label_date_range: 日期范围
|
||||
label_less_than_ago: 之前天数少于
|
||||
@ -879,7 +879,7 @@ zh:
|
||||
text_own_membership_delete_confirmation: 你正在删除你现有的某些或全部权限,如果这样做了你可能将会再也无法编辑该项目了。你确定要继续吗?
|
||||
|
||||
default_role_manager: 管理人员
|
||||
default_role_developper: 开发人员
|
||||
default_role_developer: 开发人员
|
||||
default_role_reporter: 报告人员
|
||||
default_tracker_bug: 错误
|
||||
default_tracker_feature: 功能
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
class ChangeChangesPathLengthLimit < ActiveRecord::Migration
|
||||
def self.up
|
||||
change_column :changes, :path, :text, :null => false
|
||||
change_column :changes, :from_path, :text
|
||||
end
|
||||
|
||||
def self.down
|
||||
change_column :changes, :path, :string, :default => "", :null => false
|
||||
change_column :changes, :from_path, :string
|
||||
end
|
||||
end
|
||||
@ -4,9 +4,99 @@ Redmine - project management software
|
||||
Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
== v1.0.0
|
||||
== 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
|
||||
|
||||
|
||||
== 2010-07-07 v0.9.6
|
||||
|
||||
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
|
||||
|
||||
Adds context menu to the roadmap issue lists
|
||||
|
||||
== 2010-05-01 v0.9.4
|
||||
|
||||
|
||||
80
doc/INSTALL
80
doc/INSTALL
@ -11,61 +11,85 @@ http://www.redmine.org/
|
||||
|
||||
* Ruby on Rails 2.3.5 (official downloadable Redmine releases are packaged with
|
||||
the appropriate Rails version)
|
||||
|
||||
|
||||
* Rack 1.0.1
|
||||
|
||||
* RubyGems 1.3.1
|
||||
|
||||
* Rake 0.8.3
|
||||
|
||||
* A database:
|
||||
* MySQL (tested with MySQL 5)
|
||||
* PostgreSQL (tested with PostgreSQL 8.1)
|
||||
* SQLite (tested with SQLite 3)
|
||||
|
||||
Optional:
|
||||
* SVN binaries >= 1.3 (needed for repository browsing, must be available in PATH)
|
||||
* RMagick (gantt export to png)
|
||||
* SCM binaries (e.g. svn), for repository browsing (must be available in PATH)
|
||||
* RMagick (to enable Gantt export to png images)
|
||||
* Ruby OpenID Library >= version 2 (to enable OpenID support)
|
||||
|
||||
== Installation
|
||||
|
||||
1. Uncompress the program archive
|
||||
|
||||
|
||||
2. Create an empty database: "redmine" for example
|
||||
|
||||
3. Configure database parameters in config/database.yml
|
||||
for "production" environment (default database is MySQL)
|
||||
3. Configure the database parameters in config/database.yml
|
||||
for the "production" environment (default database is MySQL)
|
||||
|
||||
4. Generate a session store secret
|
||||
|
||||
Redmine stores session data in cookies by default, which requires
|
||||
a secret to be generated. Run:
|
||||
rake config/initializers/session_store.rb
|
||||
a secret to be generated. Under the application main directory run:
|
||||
rake generate_session_store
|
||||
|
||||
5. Create the database structure
|
||||
|
||||
5. Create the database structure. Under the application main directory:
|
||||
rake db:migrate RAILS_ENV="production"
|
||||
It will create tables and an administrator account.
|
||||
Under the application main directory run:
|
||||
rake db:migrate RAILS_ENV="production"
|
||||
|
||||
It will create all the tables and an administrator account.
|
||||
|
||||
6. Setting up permissions (Windows users have to skip this section)
|
||||
|
||||
6. Setting up permissions
|
||||
The user who runs Redmine must have write permission on the following
|
||||
subdirectories: files, log, tmp (create the last one if not present).
|
||||
subdirectories: files, log, tmp & public/plugin_assets (create the last
|
||||
two if they are not yet present).
|
||||
|
||||
Assuming you run Redmine with a user named "redmine":
|
||||
mkdir tmp public/plugin_assets
|
||||
sudo chown -R redmine:redmine files log tmp public/plugin_assets
|
||||
sudo chmod -R 755 files log tmp public/plugin_assets
|
||||
|
||||
Assuming you run Redmine with a user named redmine:
|
||||
mkdir tmp
|
||||
sudo chown -R redmine:redmine files log tmp
|
||||
sudo chmod -R 755 files log tmp
|
||||
|
||||
7. Test the installation by running WEBrick web server:
|
||||
ruby script/server -e production
|
||||
|
||||
7. Test the installation by running the WEBrick web server
|
||||
|
||||
Under the main application directory run:
|
||||
ruby script/server -e production
|
||||
|
||||
Once WEBrick has started, point your browser to http://localhost:3000/
|
||||
You should now see the application welcome page
|
||||
You should now see the application welcome page.
|
||||
|
||||
8. Use default administrator account to log in:
|
||||
8. Use the default administrator account to log in:
|
||||
login: admin
|
||||
password: admin
|
||||
|
||||
Go to "Administration" to load the default configuration data (roles,
|
||||
trackers, statuses, workflow) and adjust application settings
|
||||
Go to "Administration" to load the default configuration data (roles,
|
||||
trackers, statuses, workflow) and to adjust the application settings
|
||||
|
||||
|
||||
== Email delivery Configuration
|
||||
== SMTP server Configuration
|
||||
|
||||
Copy config/email.yml.example to config/email.yml and edit this file
|
||||
to adjust your SMTP settings.
|
||||
Don't forget to restart the application after any change to this file.
|
||||
Do not forget to restart the application after any change to this file.
|
||||
|
||||
Please do not enter your SMTP settings in environment.rb.
|
||||
|
||||
== References
|
||||
|
||||
* http://www.redmine.org/wiki/redmine/RedmineInstall
|
||||
* http://www.redmine.org/wiki/redmine/EmailConfiguration
|
||||
* http://www.redmine.org/wiki/redmine/RedmineSettings
|
||||
* http://www.redmine.org/wiki/redmine/RedmineRepositories
|
||||
* http://www.redmine.org/wiki/redmine/RedmineReceivingEmails
|
||||
* http://www.redmine.org/wiki/redmine/RedmineReminderEmails
|
||||
* http://www.redmine.org/wiki/redmine/RedmineLDAP
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
== Redmine upgrade procedure
|
||||
== Redmine upgrade
|
||||
|
||||
Redmine - project management software
|
||||
Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
@ -8,26 +8,54 @@ http://www.redmine.org/
|
||||
== Upgrading
|
||||
|
||||
1. Uncompress the program archive in a new directory
|
||||
|
||||
|
||||
2. Copy your database settings (RAILS_ROOT/config/database.yml)
|
||||
and SMTP settings (RAILS_ROOT/config/email.yml)
|
||||
into the new config directory
|
||||
DO NOT REPLACE ANY OTHERS FILES.
|
||||
and SMTP settings (RAILS_ROOT/config/email.yml) into the new
|
||||
config directory
|
||||
|
||||
3. Generate a session store secret
|
||||
3. Copy the RAILS_ROOT/files directory content into your new installation
|
||||
This directory contains all the attached files.
|
||||
|
||||
4. Copy the folders of the installed plugins and themes into new installation
|
||||
|
||||
5. Generate a session store secret
|
||||
|
||||
Redmine stores session data in cookies by default, which requires
|
||||
a secret to be generated. Run:
|
||||
rake config/initializers/session_store.rb
|
||||
|
||||
4. Migrate your database (please make a backup before doing this):
|
||||
rake db:migrate RAILS_ENV="production"
|
||||
a secret to be generated. Under the new application directory run:
|
||||
rake generate_session_store
|
||||
|
||||
DO NOT REPLACE OR EDIT ANY OTHER FILES.
|
||||
|
||||
5. Copy the RAILS_ROOT/files directory content into your new installation
|
||||
This directory contains all the attached files
|
||||
6. Migrate your database
|
||||
|
||||
If you are upgrading to Rails 2.3.5 as part of this migration, you
|
||||
need to upgrade the plugin migrations before running the plugin migrations
|
||||
using:
|
||||
rake db:migrate:upgrade_plugin_migrations RAILS_ENV="production"
|
||||
|
||||
Please make a backup before doing this! Under the new application
|
||||
directory run:
|
||||
rake db:migrate RAILS_ENV="production"
|
||||
|
||||
If you have installed any plugins, you should also run their database
|
||||
migrations using:
|
||||
rake db:migrate_plugins RAILS_ENV="production"
|
||||
|
||||
7. Clean up
|
||||
|
||||
Clear the cache and the existing sessions by running:
|
||||
rake tmp:cache:clear
|
||||
rake tmp:sessions:clear
|
||||
|
||||
8. Restart the application server (e.g. mongrel, thin, passenger)
|
||||
|
||||
9. Finally go to "Administration -> Roles & permissions" to check/set permissions
|
||||
for new features, if any
|
||||
|
||||
== Notes
|
||||
|
||||
1. Rails 2.3.5 is required for version 0.9.
|
||||
* Rails 2.3.5 is required for versions 0.9.x and 1.0.x.
|
||||
|
||||
2. When upgrading your code with svn update, don't forget to clear
|
||||
the application cache (RAILS_ROOT/tmp/cache) before restarting.
|
||||
== References
|
||||
|
||||
* http://www.redmine.org/wiki/redmine/RedmineUpgrade
|
||||
|
||||
@ -227,9 +227,38 @@ sub authen_handler {
|
||||
}
|
||||
}
|
||||
|
||||
# check if authentication is forced
|
||||
sub is_authentication_forced {
|
||||
my $r = shift;
|
||||
|
||||
my $dbh = connect_database($r);
|
||||
my $sth = $dbh->prepare(
|
||||
"SELECT value FROM settings where settings.name = 'login_required';"
|
||||
);
|
||||
|
||||
$sth->execute();
|
||||
my $ret = 0;
|
||||
if (my @row = $sth->fetchrow_array) {
|
||||
if ($row[0] eq "1" || $row[0] eq "t") {
|
||||
$ret = 1;
|
||||
}
|
||||
}
|
||||
$sth->finish();
|
||||
undef $sth;
|
||||
|
||||
$dbh->disconnect();
|
||||
undef $dbh;
|
||||
|
||||
$ret;
|
||||
}
|
||||
|
||||
sub is_public_project {
|
||||
my $project_id = shift;
|
||||
my $r = shift;
|
||||
|
||||
if (is_authentication_forced($r)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
my $dbh = connect_database($r);
|
||||
my $sth = $dbh->prepare(
|
||||
@ -309,7 +338,9 @@ sub is_member {
|
||||
bindpw => $rowldap[4] ? $rowldap[4] : "",
|
||||
filter => "(".$rowldap[6]."=%s)"
|
||||
);
|
||||
$ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass));
|
||||
my $method = $r->method;
|
||||
$ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass) && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/));
|
||||
|
||||
}
|
||||
$sthldap->finish();
|
||||
undef $sthldap;
|
||||
|
||||
@ -38,7 +38,7 @@ module Redmine
|
||||
return @event_types unless @event_types.nil?
|
||||
|
||||
@event_types = Redmine::Activity.available_event_types
|
||||
@event_types = @event_types.select {|o| @user.allowed_to?("view_#{o}".to_sym, @project)} if @project
|
||||
@event_types = @event_types.select {|o| @project.self_and_descendants.detect {|p| @user.allowed_to?("view_#{o}".to_sym, p)}} if @project
|
||||
@event_types
|
||||
end
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ module Redmine
|
||||
manager.permissions = manager.setable_permissions.collect {|p| p.name}
|
||||
manager.save!
|
||||
|
||||
developper = Role.create! :name => l(:default_role_developper),
|
||||
developer = Role.create! :name => l(:default_role_developer),
|
||||
:position => 2,
|
||||
:permissions => [:manage_versions,
|
||||
:manage_categories,
|
||||
@ -146,7 +146,7 @@ module Redmine
|
||||
Tracker.find(:all).each { |t|
|
||||
[new, in_progress, resolved, feedback].each { |os|
|
||||
[in_progress, resolved, feedback, closed].each { |ns|
|
||||
Workflow.create!(:tracker_id => t.id, :role_id => developper.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
||||
Workflow.create!(:tracker_id => t.id, :role_id => developer.id, :old_status_id => os.id, :new_status_id => ns.id) unless os == ns
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -202,10 +202,10 @@ module Redmine #:nodoc:
|
||||
# permission :say_hello, { :example => :say_hello }
|
||||
#
|
||||
# # A permission that can be given to registered users only
|
||||
# permission :say_hello, { :example => :say_hello }, :require => loggedin
|
||||
# permission :say_hello, { :example => :say_hello }, :require => :loggedin
|
||||
#
|
||||
# # A permission that can be given to project members only
|
||||
# permission :say_hello, { :example => :say_hello }, :require => member
|
||||
# permission :say_hello, { :example => :say_hello }, :require => :member
|
||||
def permission(name, actions, options = {})
|
||||
if @project_module
|
||||
Redmine::AccessControl.map {|map| map.project_module(@project_module) {|map|map.permission(name, actions, options)}}
|
||||
|
||||
@ -2,9 +2,9 @@ require 'rexml/document'
|
||||
|
||||
module Redmine
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 0
|
||||
MINOR = 9
|
||||
TINY = 4
|
||||
MAJOR = 1
|
||||
MINOR = 0
|
||||
TINY = 0
|
||||
|
||||
# Branch values:
|
||||
# * official release: nil
|
||||
|
||||
@ -67,7 +67,9 @@ module Redmine
|
||||
toc_item = content.gsub(/(\[\[([^\]\|]*)(\|([^\]]*))?\]\])/) { $4 || $2 }
|
||||
# sanitizes titles from links
|
||||
# see redcloth3.rb, same as "#{pre}#{text}#{post}"
|
||||
toc_item.gsub!(LINK_RE) { $2+$4+$9 }
|
||||
toc_item.gsub!(LINK_RE) { [$2, $4, $9].join }
|
||||
# sanitizes image links from titles
|
||||
toc_item.gsub!(IMAGE_RE) { [$5].join }
|
||||
# removes styles
|
||||
# eg. %{color:red}Triggers% => Triggers
|
||||
toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1'
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 7.7 KiB |
BIN
public/images/server_key.png
Normal file
BIN
public/images/server_key.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 746 B |
@ -1105,7 +1105,7 @@ Calendar.prototype._init = function (firstDayOfWeek, date) {
|
||||
var day1 = (date.getDay() - this.firstDayOfWeek) % 7;
|
||||
if (day1 < 0)
|
||||
day1 += 7;
|
||||
date.setDate(-day1);
|
||||
date.setDate(0-day1);
|
||||
date.setDate(date.getDate() + 1);
|
||||
|
||||
var row = this.tbody.firstChild;
|
||||
|
||||
@ -64,6 +64,7 @@ h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord
|
||||
#admin-menu a.settings { background-image: url(../images/changeset.png); }
|
||||
#admin-menu a.plugins { background-image: url(../images/plugin.png); }
|
||||
#admin-menu a.info { background-image: url(../images/help.png); }
|
||||
#admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
|
||||
|
||||
#main {background-color:#EEEEEE;}
|
||||
|
||||
@ -343,10 +344,9 @@ form .attributes select { min-width: 50%; }
|
||||
|
||||
ul.projects { margin: 0; padding-left: 1em; }
|
||||
ul.projects.root { margin: 0; padding: 0; }
|
||||
ul.projects ul { border-left: 3px solid #e0e0e0; }
|
||||
ul.projects li { list-style-type:none; }
|
||||
ul.projects li.root { margin-bottom: 1em; }
|
||||
ul.projects li.child { margin-top: 1em;}
|
||||
ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
|
||||
ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
|
||||
ul.projects li.child { list-style-type:none; margin-top: 1em;}
|
||||
ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
|
||||
.my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
|
||||
|
||||
@ -838,6 +838,7 @@ padding-bottom: 3px;
|
||||
.icon-report { background-image: url(../images/report.png); }
|
||||
.icon-comment { background-image: url(../images/comment.png); }
|
||||
.icon-summary { background-image: url(../images/lightning.png); }
|
||||
.icon-server-authentication { background-image: url(../images/server_key.png); }
|
||||
|
||||
.icon-file { background-image: url(../images/files/default.png); }
|
||||
.icon-file.text-plain { background-image: url(../images/files/text.png); }
|
||||
|
||||
BIN
test/fixtures/repositories/git_repository.tar.gz
vendored
BIN
test/fixtures/repositories/git_repository.tar.gz
vendored
Binary file not shown.
@ -50,8 +50,9 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'show'
|
||||
assert_not_nil assigns(:entries)
|
||||
assert_equal 6, assigns(:entries).size
|
||||
assert_equal 7, assigns(:entries).size
|
||||
assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'}
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
ENV["RAILS_ENV"] ||= "test"
|
||||
ENV["RAILS_ENV"] = "test"
|
||||
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
|
||||
require 'test_help'
|
||||
require File.expand_path(File.dirname(__FILE__) + '/helper_testcase')
|
||||
|
||||
@ -421,6 +421,9 @@ h2. Subtitle with %{color:red}red text%
|
||||
h1. Another title
|
||||
|
||||
h2. An "Internet link":http://www.redmine.org/ inside subtitle
|
||||
|
||||
h2. "Project Name !/attachments/1234/logo_small.gif! !/attachments/5678/logo_2.png!":/projects/projectname/issues
|
||||
|
||||
RAW
|
||||
|
||||
expected = '<ul class="toc">' +
|
||||
@ -430,8 +433,9 @@ RAW
|
||||
'<li class="heading2"><a href="#Subtitle-with-red-text">Subtitle with red text</a></li>' +
|
||||
'<li class="heading1"><a href="#Another-title">Another title</a></li>' +
|
||||
'<li class="heading2"><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' +
|
||||
'<li class="heading2"><a href="#Project-Name">Project Name</a></li>' +
|
||||
'</ul>'
|
||||
|
||||
|
||||
assert textilizable(raw).gsub("\n", "").include?(expected)
|
||||
end
|
||||
|
||||
|
||||
@ -273,6 +273,15 @@ class IssueNestedSetTest < ActiveSupport::TestCase
|
||||
assert_equal 12, parent.reload.estimated_hours
|
||||
end
|
||||
|
||||
def test_move_parent_updates_old_parent_attributes
|
||||
first_parent = create_issue!
|
||||
second_parent = create_issue!
|
||||
child = create_issue!(:estimated_hours => 5, :parent_issue_id => first_parent.id)
|
||||
assert_equal 5, first_parent.reload.estimated_hours
|
||||
child.update_attributes(:estimated_hours => 7, :parent_issue_id => second_parent.id)
|
||||
assert_equal 7, second_parent.reload.estimated_hours
|
||||
assert_nil first_parent.reload.estimated_hours
|
||||
end
|
||||
|
||||
def test_reschuling_a_parent_should_reschedule_subtasks
|
||||
parent = create_issue!
|
||||
|
||||
@ -13,7 +13,7 @@ class GitAdapterTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
def test_getting_all_revisions
|
||||
assert_equal 12, @adapter.revisions('',nil,nil,:all => true).length
|
||||
assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length
|
||||
end
|
||||
|
||||
def test_annotate
|
||||
|
||||
@ -34,8 +34,8 @@ class RepositoryGitTest < ActiveSupport::TestCase
|
||||
@repository.fetch_changesets
|
||||
@repository.reload
|
||||
|
||||
assert_equal 12, @repository.changesets.count
|
||||
assert_equal 21, @repository.changes.count
|
||||
assert_equal 13, @repository.changesets.count
|
||||
assert_equal 22, @repository.changes.count
|
||||
|
||||
commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
|
||||
assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
|
||||
@ -57,10 +57,10 @@ class RepositoryGitTest < ActiveSupport::TestCase
|
||||
# Remove the 3 latest changesets
|
||||
@repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
|
||||
@repository.reload
|
||||
assert_equal 9, @repository.changesets.count
|
||||
assert_equal 10, @repository.changesets.count
|
||||
|
||||
@repository.fetch_changesets
|
||||
assert_equal 12, @repository.changesets.count
|
||||
assert_equal 13, @repository.changesets.count
|
||||
end
|
||||
else
|
||||
puts "Git test repository NOT FOUND. Skipping unit tests !!!"
|
||||
|
||||
@ -156,6 +156,21 @@ class UserTest < ActiveSupport::TestCase
|
||||
|
||||
if ldap_configured?
|
||||
context "#try_to_login using LDAP" do
|
||||
context "with failed connection to the LDAP server" do
|
||||
should "return nil" do
|
||||
@auth_source = AuthSourceLdap.find(1)
|
||||
AuthSource.any_instance.stubs(:initialize_ldap_con).raises(Net::LDAP::LdapError, 'Cannot connect')
|
||||
|
||||
assert_equal nil, User.try_to_login('edavis', 'wrong')
|
||||
end
|
||||
end
|
||||
|
||||
context "with an unsuccessful authentication" do
|
||||
should "return nil" do
|
||||
assert_equal nil, User.try_to_login('edavis', 'wrong')
|
||||
end
|
||||
end
|
||||
|
||||
context "on the fly registration" do
|
||||
setup do
|
||||
@auth_source = AuthSourceLdap.find(1)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user