1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-03-10 19:23:06 +00:00

Merge branch 'master' of git://github.com/edavis10/redmine into edavis10/master

This commit is contained in:
Holger Just 2010-07-23 00:31:42 +02:00
commit 4c60f05263
74 changed files with 415 additions and 171 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -23,4 +23,8 @@ class Change < ActiveRecord::Base
def relative_path
changeset.repository.relative_path(path)
end
def before_save
path ||= ""
end
end

View File

@ -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)

View File

@ -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>

View File

@ -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' %>

View File

@ -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) %>

View File

@ -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 %>

View File

@ -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: Функционалност

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: Λειτουργίες

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: פיצ'ר

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: 機能

View File

@ -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: 새기능

View File

@ -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ė

View File

@ -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

View File

@ -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: Онцлог

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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: Всего затрачено времени

View File

@ -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

View File

@ -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

View File

@ -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: Функционалност

View File

@ -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

View File

@ -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

View File

@ -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: ลักษณะเด่น

View File

@ -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

View File

@ -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: Властивість

View File

@ -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

View File

@ -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

View File

@ -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: 功能

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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
}
}
}

View File

@ -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)}}

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

View File

@ -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;

View File

@ -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); }

Binary file not shown.

View File

@ -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'}

View 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')

View File

@ -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

View File

@ -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!

View File

@ -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

View File

@ -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 !!!"

View File

@ -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)