diff --git a/README.rdoc b/README.rdoc index fb70acaac..10c170474 100644 --- a/README.rdoc +++ b/README.rdoc @@ -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 diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 909125475..6e5634dbc 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -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 diff --git a/app/controllers/timelog_controller.rb b/app/controllers/timelog_controller.rb index 73ff58b82..7addff78c 100644 --- a/app/controllers/timelog_controller.rb +++ b/app/controllers/timelog_controller.rb @@ -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 diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index e3a020818..044ccfb77 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -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 << "\n" * ancestors.size) + @project = original_project end s end diff --git a/app/models/change.rb b/app/models/change.rb index 385fe5acb..e5c1585b4 100644 --- a/app/models/change.rb +++ b/app/models/change.rb @@ -23,4 +23,8 @@ class Change < ActiveRecord::Base def relative_path changeset.repository.relative_path(path) end + + def before_save + path ||= "" + end end diff --git a/app/models/issue.rb b/app/models/issue.rb index 2d0021835..7d0682df1 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -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) diff --git a/app/views/admin/_menu.rhtml b/app/views/admin/_menu.rhtml index 9b3bc66b4..4fc08d888 100644 --- a/app/views/admin/_menu.rhtml +++ b/app/views/admin/_menu.rhtml @@ -3,7 +3,7 @@
  • <%= link_to l(:label_project_plural), {:controller => 'admin', :action => 'projects'}, :class => 'projects' %>
  • <%= link_to l(:label_user_plural), {:controller => 'users'}, :class => 'users' %>
  • <%= link_to l(:label_group_plural), {:controller => 'groups'}, :class => 'groups' %>
  • -
  • <%= 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 => 'server_authentication' %>
  • <%= link_to l(:label_role_and_permissions), {:controller => 'roles'}, :class => 'roles' %>
  • <%= link_to l(:label_tracker_plural), {:controller => 'trackers'}, :class => 'trackers' %>
  • <%= link_to l(:label_issue_status_plural), {:controller => 'issue_statuses'}, :class => 'issue_statuses' %>
  • diff --git a/app/views/issues/index.rhtml b/app/views/issues/index.rhtml index beece6275..1778f4d64 100644 --- a/app/views/issues/index.rhtml +++ b/app/views/issues/index.rhtml @@ -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' %> diff --git a/app/views/settings/_authentication.rhtml b/app/views/settings/_authentication.rhtml index 7e8e693df..da29bb704 100644 --- a/app/views/settings/_authentication.rhtml +++ b/app/views/settings/_authentication.rhtml @@ -20,7 +20,7 @@
    - <%= 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' %>
    <%= submit_tag l(:button_save) %> diff --git a/app/views/welcome/index.rhtml b/app/views/welcome/index.rhtml index 279c35421..a0ada7cce 100644 --- a/app/views/welcome/index.rhtml +++ b/app/views/welcome/index.rhtml @@ -18,11 +18,13 @@

    <%=l(:label_project_latest)%>

    <% end %> diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 059357b2f..051bbdaf2 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -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: Функционалност diff --git a/config/locales/bs.yml b/config/locales/bs.yml index ad34bd390..d3fe0a128 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -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 diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 9c1e5c129..5f54930d1 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -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 diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 0778eed3f..b00527956 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -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 diff --git a/config/locales/da.yml b/config/locales/da.yml index 0f2957211..069674685 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -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 diff --git a/config/locales/de.yml b/config/locales/de.yml index 16b00d00b..70ea45489 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -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 diff --git a/config/locales/el.yml b/config/locales/el.yml index d25ed89aa..6176a6c8e 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -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: Λειτουργίες diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index daa61dd0e..2c19c4f49 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -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 diff --git a/config/locales/en.yml b/config/locales/en.yml index 9d875e4b4..3ab257825 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -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 diff --git a/config/locales/es.yml b/config/locales/es.yml index db487c887..0a7a38a9c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -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 diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 0420c9751..9f08652fc 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -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 diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 1b5c1024d..5556252cf 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -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 diff --git a/config/locales/fr.yml b/config/locales/fr.yml index dd18b2bde..fe4f4daf5 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -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 diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 1072a691f..0652ce9e4 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -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 diff --git a/config/locales/he.yml b/config/locales/he.yml index 4e7547ca1..125f0265f 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -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: פיצ'ר diff --git a/config/locales/hr.yml b/config/locales/hr.yml index b0726b886..424fc7dc5 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -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 diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 479d27427..6839fb7b2 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -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 diff --git a/config/locales/id.yml b/config/locales/id.yml index 537f7583a..5a14cda55 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -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 diff --git a/config/locales/it.yml b/config/locales/it.yml index 68ec7bdc5..758928f2a 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -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 diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 19b5c291c..dc69c9792 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -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: 機能 diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 452c1d4ac..6ba93edc3 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -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: 새기능 diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 995633c96..675c3a14b 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -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ė diff --git a/config/locales/lv.yml b/config/locales/lv.yml index ab675cef1..4d49bd120 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -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 diff --git a/config/locales/mn.yml b/config/locales/mn.yml index d780f793b..63e808024 100644 --- a/config/locales/mn.yml +++ b/config/locales/mn.yml @@ -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: Онцлог diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 2f1f771c5..e24d5cbb5 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -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 diff --git a/config/locales/no.yml b/config/locales/no.yml index 3b0d88c7b..53bac51be 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -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 diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 634ebd320..efa2415de 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -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 diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 1e9c59b92..9365505d0 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -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 diff --git a/config/locales/pt.yml b/config/locales/pt.yml index dccce68a3..c8dafd847 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -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 diff --git a/config/locales/ro.yml b/config/locales/ro.yml index dbd1e208a..5733ddebb 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -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 diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 7c52f4f6e..cce123622 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -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: Всего затрачено времени diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 3319cca91..22f5799f7 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -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 diff --git a/config/locales/sl.yml b/config/locales/sl.yml index e328a6a7b..77a155757 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -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 diff --git a/config/locales/sr-CY.yml b/config/locales/sr-CY.yml index 62922c8ad..11f558470 100644 --- a/config/locales/sr-CY.yml +++ b/config/locales/sr-CY.yml @@ -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: Функционалност diff --git a/config/locales/sr.yml b/config/locales/sr.yml index f0834bc71..50140b7d8 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -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 diff --git a/config/locales/sv.yml b/config/locales/sv.yml index e88d16e1a..23450007a 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -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 diff --git a/config/locales/th.yml b/config/locales/th.yml index 71ec64696..5f68696eb 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -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: ลักษณะเด่น diff --git a/config/locales/tr.yml b/config/locales/tr.yml index c542d3fd2..bc7bcbf7e 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -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 diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 5620ad82a..5ab983325 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -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: Властивість diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 2828edd0d..9d2af5e86 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -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 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 17eff7291..fc5f557d1 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -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 diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 27a48578a..6fdb33f52 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -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: 功能 diff --git a/db/migrate/20100705164950_change_changes_path_length_limit.rb b/db/migrate/20100705164950_change_changes_path_length_limit.rb new file mode 100644 index 000000000..62ba4ec22 --- /dev/null +++ b/db/migrate/20100705164950_change_changes_path_length_limit.rb @@ -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 diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 2393282e4..4a100bfce 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -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 +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 diff --git a/doc/INSTALL b/doc/INSTALL index eb7669c60..7a0e1a12f 100644 --- a/doc/INSTALL +++ b/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 diff --git a/doc/UPGRADING b/doc/UPGRADING index fe69676a2..87f169c9d 100644 --- a/doc/UPGRADING +++ b/doc/UPGRADING @@ -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 diff --git a/extra/svn/Redmine.pm b/extra/svn/Redmine.pm index 1b3b0910f..091e21930 100644 --- a/extra/svn/Redmine.pm +++ b/extra/svn/Redmine.pm @@ -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; diff --git a/lib/redmine/activity/fetcher.rb b/lib/redmine/activity/fetcher.rb index fb73d5d28..6edc18f3f 100644 --- a/lib/redmine/activity/fetcher.rb +++ b/lib/redmine/activity/fetcher.rb @@ -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 diff --git a/lib/redmine/default_data/loader.rb b/lib/redmine/default_data/loader.rb index 5eed3d9b0..e0e0cc86d 100644 --- a/lib/redmine/default_data/loader.rb +++ b/lib/redmine/default_data/loader.rb @@ -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 } } } diff --git a/lib/redmine/plugin.rb b/lib/redmine/plugin.rb index 2be8ac8aa..11255e02d 100644 --- a/lib/redmine/plugin.rb +++ b/lib/redmine/plugin.rb @@ -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)}} diff --git a/lib/redmine/version.rb b/lib/redmine/version.rb index f9f536032..5ea62f3e0 100644 --- a/lib/redmine/version.rb +++ b/lib/redmine/version.rb @@ -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 diff --git a/lib/redmine/wiki_formatting/textile/formatter.rb b/lib/redmine/wiki_formatting/textile/formatter.rb index abffdbcbf..a622e8039 100644 --- a/lib/redmine/wiki_formatting/textile/formatter.rb +++ b/lib/redmine/wiki_formatting/textile/formatter.rb @@ -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' diff --git a/public/favicon.ico b/public/favicon.ico index e69de29bb..51c1aeb09 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/images/server_key.png b/public/images/server_key.png new file mode 100644 index 000000000..ecd517425 Binary files /dev/null and b/public/images/server_key.png differ diff --git a/public/javascripts/calendar/calendar.js b/public/javascripts/calendar/calendar.js index 3c8a5912e..43ba1c1c2 100644 --- a/public/javascripts/calendar/calendar.js +++ b/public/javascripts/calendar/calendar.js @@ -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; diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 46fc8a88a..60c50d2b2 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -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); } diff --git a/test/fixtures/repositories/git_repository.tar.gz b/test/fixtures/repositories/git_repository.tar.gz index 48966da30..8158d5832 100644 Binary files a/test/fixtures/repositories/git_repository.tar.gz and b/test/fixtures/repositories/git_repository.tar.gz differ diff --git a/test/functional/repositories_git_controller_test.rb b/test/functional/repositories_git_controller_test.rb index 37c6fb848..317261a13 100644 --- a/test/functional/repositories_git_controller_test.rb +++ b/test/functional/repositories_git_controller_test.rb @@ -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'} diff --git a/test/test_helper.rb b/test/test_helper.rb index 1f735f5f6..c934e1bc2 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -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') diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index 534135ecd..90d342898 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -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 = '' - + assert textilizable(raw).gsub("\n", "").include?(expected) end diff --git a/test/unit/issue_nested_set_test.rb b/test/unit/issue_nested_set_test.rb index 7138e4527..cda8c4e58 100644 --- a/test/unit/issue_nested_set_test.rb +++ b/test/unit/issue_nested_set_test.rb @@ -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! diff --git a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb index e3c633749..2dc5d3e8e 100644 --- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb @@ -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 diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb index 71b3e4da5..dad5610ae 100644 --- a/test/unit/repository_git_test.rb +++ b/test/unit/repository_git_test.rb @@ -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 !!!" diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 8d66e86da..5a0c9f87e 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -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)