From 13234f85521d3d8a673fecda3e1a1f4abd1025b8 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 3 Aug 2010 15:26:50 +0000 Subject: [PATCH 01/22] Refactor: Add methods to User to edit the encapsulate the status field. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3906 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/account_controller.rb | 12 ++++++------ app/models/user.rb | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index b0a5b42a7..5fa56b167 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -83,9 +83,9 @@ class AccountController < ApplicationController else @user = User.new(params[:user]) @user.admin = false - @user.status = User::STATUS_REGISTERED + @user.register if session[:auth_source_registration] - @user.status = User::STATUS_ACTIVE + @user.activate @user.login = session[:auth_source_registration][:login] @user.auth_source_id = session[:auth_source_registration][:auth_source_id] if @user.save @@ -116,8 +116,8 @@ class AccountController < ApplicationController token = Token.find_by_action_and_value('register', params[:token]) redirect_to(home_url) && return unless token and !token.expired? user = token.user - redirect_to(home_url) && return unless user.status == User::STATUS_REGISTERED - user.status = User::STATUS_ACTIVE + redirect_to(home_url) && return unless user.registered? + user.activate if user.save token.destroy flash[:notice] = l(:notice_account_activated) @@ -170,7 +170,7 @@ class AccountController < ApplicationController user.mail = registration['email'] unless registration['email'].nil? user.firstname, user.lastname = registration['fullname'].split(' ') unless registration['fullname'].nil? user.random_password - user.status = User::STATUS_REGISTERED + user.register case Setting.self_registration when '1' @@ -241,7 +241,7 @@ class AccountController < ApplicationController # Pass a block for behavior when a user fails to save def register_automatically(user, &block) # Automatic activation - user.status = User::STATUS_ACTIVE + user.activate user.last_login_on = Time.now if user.save self.logged_user = user diff --git a/app/models/user.rb b/app/models/user.rb index db18db49e..c5c638f93 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -164,6 +164,30 @@ class User < Principal self.status == STATUS_LOCKED end + def activate + self.status = STATUS_ACTIVE + end + + def register + self.status = STATUS_REGISTERED + end + + def lock + self.status = STATUS_LOCKED + end + + def activate! + update_attribute(:status, STATUS_ACTIVE) + end + + def register! + update_attribute(:status, STATUS_REGISTERED) + end + + def lock! + update_attribute(:status, STATUS_LOCKED) + end + def check_password?(clear_password) if auth_source_id.present? auth_source.authenticate(self.login, clear_password) From 16969fdbbb08403f6c11404085561fdbd565b487 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 3 Aug 2010 16:01:53 +0000 Subject: [PATCH 02/22] Show the number of days in the subject line of Reminder emails. i18n check needed. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3907 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/mailer.rb | 2 +- config/locales/bg.yml | 2 +- config/locales/bs.yml | 2 +- config/locales/ca.yml | 2 +- config/locales/cs.yml | 2 +- config/locales/da.yml | 2 +- config/locales/de.yml | 2 +- config/locales/el.yml | 2 +- config/locales/en-GB.yml | 2 +- config/locales/en.yml | 2 +- config/locales/es.yml | 2 +- config/locales/eu.yml | 2 +- config/locales/fi.yml | 2 +- config/locales/fr.yml | 2 +- config/locales/gl.yml | 2 +- config/locales/he.yml | 2 +- config/locales/hr.yml | 2 +- config/locales/hu.yml | 2 +- config/locales/id.yml | 2 +- config/locales/it.yml | 2 +- config/locales/ja.yml | 2 +- config/locales/ko.yml | 2 +- config/locales/lt.yml | 2 +- config/locales/lv.yml | 2 +- config/locales/mn.yml | 2 +- config/locales/nl.yml | 2 +- config/locales/no.yml | 2 +- config/locales/pl.yml | 2 +- config/locales/pt-BR.yml | 2 +- config/locales/pt.yml | 2 +- config/locales/ro.yml | 2 +- config/locales/ru.yml | 2 +- config/locales/sk.yml | 2 +- config/locales/sl.yml | 2 +- config/locales/sr-CY.yml | 2 +- config/locales/sr.yml | 2 +- config/locales/sv.yml | 2 +- config/locales/th.yml | 2 +- config/locales/tr.yml | 2 +- config/locales/uk.yml | 2 +- config/locales/vi.yml | 2 +- config/locales/zh-TW.yml | 2 +- config/locales/zh.yml | 2 +- test/unit/mailer_test.rb | 1 + 44 files changed, 44 insertions(+), 43 deletions(-) diff --git a/app/models/mailer.rb b/app/models/mailer.rb index f39c53209..8f50b1b7b 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -80,7 +80,7 @@ class Mailer < ActionMailer::Base def reminder(user, issues, days) set_language_if_valid user.language recipients user.mail - subject l(:mail_subject_reminder, issues.size) + subject l(:mail_subject_reminder, :count => issues.size, :days => days) body :issues => issues, :days => days, :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc') diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 051bbdaf2..8b2b23704 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -704,7 +704,7 @@ bg: text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." label_and_its_subprojects: "{{value}} and its subprojects" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next days" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" text_user_wrote: "{{value}} wrote:" label_duplicated_by: duplicated by setting_enabled_scm: Enabled SCM diff --git a/config/locales/bs.yml b/config/locales/bs.yml index d3fe0a128..3d476ae13 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -184,7 +184,7 @@ bs: mail_body_account_information: Informacija o vašem korisničkom računu mail_subject_account_activation_request: "{{value}} zahtjev za aktivaciju korisničkog računa" mail_body_account_activation_request: "Novi korisnik ({{value}}) se registrovao. Korisnički račun čeka vaše odobrenje za aktivaciju:" - mail_subject_reminder: "{{count}} aktivnost(i) u kašnjenju u narednim danima" + mail_subject_reminder: "{{count}} aktivnost(i) u kašnjenju u narednim {{days}} danima" mail_body_reminder: "{{count}} aktivnost(i) koje su dodjeljenje vama u narednim {{days}} danima:" gui_validation_error: 1 greška diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 5f54930d1..1e47d3d66 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -166,7 +166,7 @@ ca: mail_body_account_information: Informació del compte mail_subject_account_activation_request: "Sol·licitud d'activació del compte de {{value}}" mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:" - mail_subject_reminder: "%d assumptes venceran els següents {{count}} dies" + mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies" mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:" gui_validation_error: 1 error diff --git a/config/locales/cs.yml b/config/locales/cs.yml index b00527956..de4ad44c5 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -710,7 +710,7 @@ cs: text_subprojects_destroy_warning: "Jeho podprojek(y): {{value}} budou také smazány." label_and_its_subprojects: "{{value}} a jeho podprojekty" mail_body_reminder: "{{count}} úkol(ů), které máte přiřazeny má termín během několik dní ({{days}}):" - mail_subject_reminder: "{{count}} úkol(ů) má termín během několik dní" + mail_subject_reminder: "{{count}} úkol(ů) má termín během několik dní ({{days}})" text_user_wrote: "{{value}} napsal:" label_duplicated_by: duplicated by setting_enabled_scm: Povoleno SCM diff --git a/config/locales/da.yml b/config/locales/da.yml index 069674685..b241a52d8 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -791,7 +791,7 @@ da: permission_browse_repository: Gennemse repository permission_manage_repository: Administrér repository permission_manage_members: Administrér medlemmer - mail_subject_reminder: "{{count}} sag(er) har deadline i de kommende dage" + mail_subject_reminder: "{{count}} sag(er) har deadline i de kommende dage ({{days}})" permission_add_issue_notes: Tilføj noter permission_edit_messages: Redigér beskeder permission_view_issue_watchers: Se liste over overvågere diff --git a/config/locales/de.yml b/config/locales/de.yml index 05d5d9630..f7f9043c4 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -207,7 +207,7 @@ de: mail_body_account_information: Ihre Konto-Informationen mail_subject_account_activation_request: "Antrag auf {{value}} Kontoaktivierung" mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" - mail_subject_reminder: "{{count}} Tickets müssen in den nächsten Tagen abgegeben werden" + mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden" mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:" mail_subject_wiki_content_added: "Wiki-Seite '{{page}}' hinzugefügt" mail_body_wiki_content_added: "Die Wiki-Seite '{{page}}' wurde von {{author}} hinzugefügt." diff --git a/config/locales/el.yml b/config/locales/el.yml index 6176a6c8e..a9146a611 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -171,7 +171,7 @@ el: mail_body_account_information: Πληροφορίες του λογαριασμού σας mail_subject_account_activation_request: "αίτημα ενεργοποίησης λογαριασμού {{value}}" mail_body_account_activation_request: "'Ένας νέος χρήστης ({{value}}) έχει εγγραφεί. Ο λογαριασμός είναι σε στάδιο αναμονής της έγκρισης σας:" - mail_subject_reminder: "{{count}} θέμα(τα) με προθεσμία στις επόμενες ημέρες" + mail_subject_reminder: "{{count}} θέμα(τα) με προθεσμία στις επόμενες {{days}} ημέρες" mail_body_reminder: "{{count}}θέμα(τα) που έχουν ανατεθεί σε σας, με προθεσμία στις επόμενες {{days}} ημέρες:" mail_subject_wiki_content_added: "'προστέθηκε η σελίδα wiki {{page}}' " mail_body_wiki_content_added: "Η σελίδα wiki '{{page}}' προστέθηκε από τον {{author}}." diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 42f173b82..2872df15e 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -180,7 +180,7 @@ en-GB: mail_body_account_information: Your account information mail_subject_account_activation_request: "{{value}} account activation request" mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:" - mail_subject_reminder: "{{count}} issue(s) due in the next days" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." diff --git a/config/locales/en.yml b/config/locales/en.yml index 4ba6df5c5..b3d87515d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -183,7 +183,7 @@ en: mail_body_account_information: Your account information mail_subject_account_activation_request: "{{value}} account activation request" mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:" - mail_subject_reminder: "{{count}} issue(s) due in the next days" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." diff --git a/config/locales/es.yml b/config/locales/es.yml index 0a7a38a9c..bc345dcb5 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -662,7 +662,7 @@ es: mail_subject_account_activation_request: "Petición de activación de cuenta {{value}}" mail_subject_lost_password: "Tu contraseña del {{value}}" mail_subject_register: "Activación de la cuenta del {{value}}" - mail_subject_reminder: "{{count}} peticion(es) finalizan en los próximos días" + mail_subject_reminder: "{{count}} peticion(es) finalizan en los próximos {{days}} días" notice_account_activated: Su cuenta ha sido activada. Ya puede conectarse. notice_account_invalid_creditentials: Usuario o contraseña inválido. notice_account_lost_email_sent: Se le ha enviado un correo con instrucciones para elegir una nueva contraseña. diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 9f08652fc..741d3298f 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -180,7 +180,7 @@ eu: mail_body_account_information: Zure kontuaren informazioa mail_subject_account_activation_request: "{{value}} kontu gaitzeko eskaera" mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:" - mail_subject_reminder: "{{count}} arazo hurrengo egunetan amaitzen d(ir)a" + mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a" mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:" mail_subject_wiki_content_added: "'{{page}}' wiki orria gehitu da" mail_body_wiki_content_added: "{{author}}-(e)k '{{page}}' wiki orria gehitu du." diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5556252cf..b6b48bac0 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -740,7 +740,7 @@ fi: text_subprojects_destroy_warning: "Tämän aliprojekti(t): {{value}} tullaan myös poistamaan." label_and_its_subprojects: "{{value}} ja aliprojektit" mail_body_reminder: "{{count}} sinulle nimettyä tapahtuma(a) erääntyy {{days}} päivä sisään:" - mail_subject_reminder: "{{count}} tapahtuma(a) erääntyy lähipäivinä" + mail_subject_reminder: "{{count}} tapahtuma(a) erääntyy {{days}} lähipäivinä" text_user_wrote: "{{value}} kirjoitti:" label_duplicated_by: kopioinut setting_enabled_scm: Versionhallinta käytettävissä diff --git a/config/locales/fr.yml b/config/locales/fr.yml index ce247d24c..8eb82ad73 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -200,7 +200,7 @@ fr: mail_body_account_information: Paramètres de connexion de votre compte mail_subject_account_activation_request: "Demande d'activation d'un compte {{value}}" mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :" - mail_subject_reminder: "{{count}} demande(s) arrivent à échéance" + mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})" mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :" mail_subject_wiki_content_added: "Page wiki '{{page}}' ajoutée" mail_body_wiki_content_added: "La page wiki '{{page}}' a été ajoutée par {{author}}." diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 0652ce9e4..2a1d97ed7 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -639,7 +639,7 @@ gl: mail_subject_account_activation_request: "Petición de activación de conta {{value}}" mail_subject_lost_password: "O teu contrasinal de {{value}}" mail_subject_register: "Activación da conta de {{value}}" - mail_subject_reminder: "{{count}} petición(s) rematarán nos próximos días" + mail_subject_reminder: "{{count}} petición(s) rematarán nos próximos {{days}} días" notice_account_activated: A súa conta foi activada. Xa pode conectarse. notice_account_invalid_creditentials: Usuario ou contrasinal inválido. notice_account_lost_email_sent: Enviouse un correo con instrucións para elixir un novo contrasinal. diff --git a/config/locales/he.yml b/config/locales/he.yml index f84fd01fe..532c60195 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -192,7 +192,7 @@ he: mail_body_account_information: פרטי החשבון שלך mail_subject_account_activation_request: "בקשת הפעלה לחשבון {{value}}" mail_body_account_activation_request: "משתמש חדש ({{value}}) נרשם. החשבון שלו מחכה לאישור שלך:" - mail_subject_reminder: "{{count}} נושאים מיעדים להגשה בימים הקרובים" + mail_subject_reminder: "{{count}} נושאים מיעדים להגשה בימים הקרובים ({{days}})" mail_body_reminder: "{{count}} נושאים שמיועדים אליך מיועדים להגשה בתוך {{days}} ימים:" mail_subject_wiki_content_added: "דף ה־wiki ‏'{{page}}' נוסף" mail_body_wiki_content_added: דף ה־wiki ‏'{{page}}' נוסף ע"י {{author}}. diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 424fc7dc5..728a6d8e9 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -176,7 +176,7 @@ hr: mail_body_account_information: Vaši korisnički podaci mail_subject_account_activation_request: "{{value}} predmet za aktivaciju korisničkog računa" mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisnički račun čeka vaše odobrenje:" - mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih dana" + mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana" mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:" mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." diff --git a/config/locales/hu.yml b/config/locales/hu.yml index a62d07327..088027f1a 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -737,7 +737,7 @@ enumeration_doc_categories: Dokumentum kategóriák enumeration_activities: Tevékenységek (idő rögzítés) mail_body_reminder: "{{count}} neked kiosztott feladat határidős az elkövetkező {{days}} napban:" - mail_subject_reminder: "{{count}} feladat határidős az elkövetkező napokban" + mail_subject_reminder: "{{count}} feladat határidős az elkövetkező {{days}} napokban" text_user_wrote: "{{value}} írta:" label_duplicated_by: duplikálta setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése diff --git a/config/locales/id.yml b/config/locales/id.yml index 5a14cda55..ec6688e5d 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -177,7 +177,7 @@ id: mail_body_account_information: Informasi akun anda mail_subject_account_activation_request: "Permintaan aktivasi akun {{value}} " mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:" - mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya" + mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})" mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:" mail_subject_wiki_content_added: "'{{page}}' halaman wiki sudah ditambahkan" mail_body_wiki_content_added: "The '{{page}}' halaman wiki sudah ditambahkan oleh {{author}}." diff --git a/config/locales/it.yml b/config/locales/it.yml index 758928f2a..bab1c6a91 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -717,7 +717,7 @@ it: text_subprojects_destroy_warning: "Anche i suoi sottoprogetti: {{value}} verranno eliminati." label_and_its_subprojects: "{{value}} ed i suoi sottoprogetti" mail_body_reminder: "{{count}} segnalazioni che ti sono state assegnate scadranno nei prossimi {{days}} giorni:" - mail_subject_reminder: "{{count}} segnalazioni in scadenza nei prossimi giorni" + mail_subject_reminder: "{{count}} segnalazioni in scadenza nei prossimi {{days}} giorni" text_user_wrote: "{{value}} ha scritto:" label_duplicated_by: duplicato da setting_enabled_scm: SCM abilitato diff --git a/config/locales/ja.yml b/config/locales/ja.yml index dc69c9792..c82155b8e 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -214,7 +214,7 @@ ja: mail_body_account_information: アカウント情報 mail_subject_account_activation_request: "{{value}} アカウントの承認要求" mail_body_account_activation_request: "新しいユーザ {{value}} が登録されました。このアカウントはあなたの承認待ちです:" - mail_subject_reminder: "{{count}}件のチケットが期日間近です" + mail_subject_reminder: "{{count}}件のチケットが{{days}}期日間近です" mail_body_reminder: "{{count}}件の担当チケットの期日が{{days}}日以内に到来します:" mail_subject_wiki_content_added: "Wikiページ {{page}} が追加されました" mail_body_wiki_content_added: "{{author}} によってWikiページ {{page}} が追加されました。" diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 6ba93edc3..d79c86cb9 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -228,7 +228,7 @@ ko: mail_subject_account_activation_request: "{{value}} 계정 활성화 요청" mail_body_account_activation_request: "새 사용자({{value}})가 등록되었습니다. 관리자님의 승인을 기다리고 있습니다.:" mail_body_reminder: "당신이 맡고 있는 일감 {{count}}개의 완료 기한이 {{days}}일 후 입니다." - mail_subject_reminder: "내일이 만기인 일감 {{count}}개" + mail_subject_reminder: "내일이 만기인 일감 {{count}}개 ({{days}})" mail_subject_wiki_content_added: "위키페이지 '{{page}}'이(가) 추가되었습니다." mail_subject_wiki_content_updated: "'위키페이지 {{page}}'이(가) 수정되었습니다." mail_body_wiki_content_added: "{{author}}이(가) 위키페이지 '{{page}}'을(를) 추가하였습니다." diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 675c3a14b..9bcafc71b 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -237,7 +237,7 @@ lt: mail_body_account_information: Informacija apie Jūsų paskyrą mail_subject_account_activation_request: "{{value}} paskyros aktyvavimo prašymas" mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jūsų patvirtinimo:" - mail_subject_reminder: "{{count}} darbas(ai) po kelių dienų" + mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų" mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):" mail_subject_wiki_content_added: "'{{page}}' pridėtas wiki puslapis" mail_body_wiki_content_added: "The '{{page}}' wiki puslapi pridėjo {{author}}." diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 4d49bd120..351f8528e 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -172,7 +172,7 @@ lv: mail_body_account_information: Jūsu konta informācija mail_subject_account_activation_request: "{{value}} konta aktivizācijas pieprasījums" mail_body_account_activation_request: "Jauns lietotājs ({{value}}) ir reģistrēts. Lietotāja konts gaida Jūsu apstiprinājumu:" - mail_subject_reminder: "{{count}} uzdevums(i) sagaidāms(i) tuvākajās dienās" + mail_subject_reminder: "{{count}} uzdevums(i) sagaidāms(i) tuvākajās {{days}} dienās" mail_body_reminder: "{{count}} uzdevums(i), kurš(i) ir nozīmēts(i) Jums, sagaidāms(i) tuvākajās {{days}} dienās:" mail_subject_wiki_content_added: "'{{page}}' Wiki lapa pievienota" mail_body_wiki_content_added: "The '{{page}}' Wiki lapu pievienojis {{author}}." diff --git a/config/locales/mn.yml b/config/locales/mn.yml index 63e808024..568e1f341 100644 --- a/config/locales/mn.yml +++ b/config/locales/mn.yml @@ -176,7 +176,7 @@ mn: mail_body_account_information: Таны дансны тухай мэдээлэл mail_subject_account_activation_request: "{{value}} дансыг идэвхжүүлэх хүсэлт" mail_body_account_activation_request: "Шинэ хэрэглэгч ({{value}}) бүртгүүлсэн байна. Таны баталгаажуулахыг хүлээж байна:" - mail_subject_reminder: "Дараагийн өдрүүдэд {{count}} асуудлыг шийдэх хэрэгтэй" + mail_subject_reminder: "Дараагийн өдрүүдэд {{count}} асуудлыг шийдэх хэрэгтэй ({{days}})" mail_body_reminder: "Танд оноогдсон {{count}} асуудлуудыг дараагийн {{days}} өдрүүдэд шийдэх хэрэгтэй:" mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." diff --git a/config/locales/nl.yml b/config/locales/nl.yml index e24d5cbb5..4472a19d7 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -601,7 +601,7 @@ nl: mail_subject_account_activation_request: "{{value}} accountactivatieverzoek" mail_subject_lost_password: "uw {{value}} wachtwoord" mail_subject_register: "uw {{value}} accountactivatie" - mail_subject_reminder: "{{count}} issue(s) die voldaan moeten zijn in de komende dagen." + mail_subject_reminder: "{{count}} issue(s) die voldaan moeten zijn in de komende {{days}} dagen." notice_account_activated: uw account is geactiveerd. u kunt nu inloggen. notice_account_invalid_creditentials: Incorrecte gebruikersnaam of wachtwoord notice_account_lost_email_sent: Er is een e-mail naar u verstuurd met instructies over het kiezen van een nieuw wachtwoord. diff --git a/config/locales/no.yml b/config/locales/no.yml index 53bac51be..7d49537df 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -163,7 +163,7 @@ mail_body_account_information: Informasjon om din konto mail_subject_account_activation_request: "{{value}} kontoaktivering" mail_body_account_activation_request: "En ny bruker ({{value}}) er registrert, og avventer din godkjenning:" - mail_subject_reminder: "{{count}} sak(er) har frist de kommende dagene" + mail_subject_reminder: "{{count}} sak(er) har frist de kommende {{days}} dagene" mail_body_reminder: "{{count}} sak(er) som er tildelt deg har frist de kommende {{days}} dager:" gui_validation_error: 1 feil diff --git a/config/locales/pl.yml b/config/locales/pl.yml index efa2415de..2dadc8478 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -640,7 +640,7 @@ pl: mail_subject_account_activation_request: "Zapytanie aktywacyjne konta {{value}}" mail_subject_lost_password: "Twoje hasło do {{value}}" mail_subject_register: "Aktywacja konta w {{value}}" - mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych {{count}} dni!" + mail_subject_reminder: "Uwaga na terminy, masz zagadnienia do obsłużenia w ciągu następnych {{count}} dni! ({{days}})" notice_account_activated: Twoje konto zostało aktywowane. Możesz się zalogować. notice_account_invalid_creditentials: Zły użytkownik lub hasło notice_account_lost_email_sent: Email z instrukcjami zmiany hasła został wysłany do Ciebie. diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 9365505d0..a66f23718 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -196,7 +196,7 @@ pt-BR: mail_body_account_information: Informações sobre sua conta mail_subject_account_activation_request: "{{value}} - Requisição de ativação de conta" mail_body_account_activation_request: "Um novo usuário ({{value}}) se registrou. A conta está aguardando sua aprovação:" - mail_subject_reminder: "{{count}} tarefa(s) com data prevista para os próximos dias" + mail_subject_reminder: "{{count}} tarefa(s) com data prevista para os próximos {{days}} dias" mail_body_reminder: "{{count}} tarefa(s) para você com data prevista para os próximos {{days}} dias:" gui_validation_error: 1 erro diff --git a/config/locales/pt.yml b/config/locales/pt.yml index c8dafd847..615f31645 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -181,7 +181,7 @@ pt: mail_body_account_information: Informação da sua conta mail_subject_account_activation_request: "Pedido de activação da conta {{value}}" mail_body_account_activation_request: "Um novo utilizador ({{value}}) registou-se. A sua conta está à espera de aprovação:" - mail_subject_reminder: "{{count}} tarefa(s) para entregar nos próximos dias" + mail_subject_reminder: "{{count}} tarefa(s) para entregar nos próximos {{days}} dias" mail_body_reminder: "{{count}} tarefa(s) que estão atribuídas a si estão agendadas para estarem completas nos próximos {{days}} dias:" gui_validation_error: 1 erro diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 5733ddebb..45fdd1eaa 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -164,7 +164,7 @@ ro: mail_body_account_information: Informații despre contul dumneavoastră mail_subject_account_activation_request: "Cerere de activare a contului {{value}}" mail_body_account_activation_request: "S-a înregistrat un utilizator nou ({{value}}). Contul așteaptă aprobarea dumneavoastră:" - mail_subject_reminder: "{{count}} tichete trebuie rezolvate în următoarele zile" + mail_subject_reminder: "{{count}} tichete trebuie rezolvate în următoarele {{days}} zile" mail_body_reminder: "{{count}} tichete atribuite dumneavoastră trebuie rezolvate în următoarele {{days}} zile:" gui_validation_error: o eroare diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 645db4de8..ee9ee37a1 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -755,7 +755,7 @@ ru: mail_subject_account_activation_request: "Запрос на активацию пользователя в системе {{value}}" mail_subject_lost_password: "Ваш {{value}} пароль" mail_subject_register: "Активация учетной записи {{value}}" - mail_subject_reminder: "{{count}} назначенных на Вас задач в ближайшие дни" + mail_subject_reminder: "{{count}} назначенных на Вас задач в ближайшие {{days}} дни" notice_account_activated: Ваша учетная запись активирована. Вы можете войти. notice_account_invalid_creditentials: Неправильное имя пользователя или пароль diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 22f5799f7..0b2351e6b 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -708,7 +708,7 @@ sk: text_subprojects_destroy_warning: "Jeho podprojekt(y): {{value}} budú takisto vymazané." label_and_its_subprojects: "{{value}} a jeho podprojekty" mail_body_reminder: "{{count}} úloha(y), ktorá(é) je(sú) vám priradený(é), ma(jú) byť hotova(é) za {{days}} dní:" - mail_subject_reminder: "{{count}} úloha(y) ma(jú) byť hotova(é) za pár dní" + mail_subject_reminder: "{{count}} úloha(y) ma(jú) byť hotova(é) za pár {{days}} dní" text_user_wrote: "{{value}} napísal:" label_duplicated_by: duplikovaný setting_enabled_scm: Zapnúť SCM diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 77a155757..aac2e4331 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -167,7 +167,7 @@ sl: mail_body_account_information: Informacije o vašem računu mail_subject_account_activation_request: "{{value}} zahtevek za aktivacijo računa" mail_body_account_activation_request: "Registriral se je nov uporabnik ({{value}}). Račun čaka na vašo odobritev:" - mail_subject_reminder: "{{count}} zahtevek(zahtevki) zapadejo v naslednjih dneh" + mail_subject_reminder: "{{count}} zahtevek(zahtevki) zapadejo v naslednjih {{days}} dneh" mail_body_reminder: "{{count}} zahtevek(zahtevki), ki so vam dodeljeni bodo zapadli v naslednjih {{days}} dneh:" gui_validation_error: 1 napaka diff --git a/config/locales/sr-CY.yml b/config/locales/sr-CY.yml index 11f558470..39cc5dcb8 100644 --- a/config/locales/sr-CY.yml +++ b/config/locales/sr-CY.yml @@ -178,7 +178,7 @@ sr-CY: mail_body_account_information: Информације о вашем налогу mail_subject_account_activation_request: "Захтев за активацију налога {{value}}" mail_body_account_activation_request: "Нови корисник ({{value}}) је регистрован. Налог чека на ваше одобрење:" - mail_subject_reminder: "{{count}} проблема доспева наредних дана" + mail_subject_reminder: "{{count}} проблема доспева наредних {{days}} дана" mail_body_reminder: "{{count}} проблема додељених вама доспева у наредних {{days}} дана:" mail_subject_wiki_content_added: "'{{page}}' wiki страна је додато" mail_body_wiki_content_added: "{{author}} је додао '{{page}}' wiki страна." diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 50140b7d8..f52d9e063 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -178,7 +178,7 @@ sr: mail_body_account_information: Informacije o vašem nalogu mail_subject_account_activation_request: "Zahtev za aktivaciju naloga {{value}}" mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog čeka na vaše odobrenje:" - mail_subject_reminder: "{{count}} problema dospeva narednih dana" + mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana" mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:" mail_subject_wiki_content_added: "'{{page}}' wiki strana je dodato" mail_body_wiki_content_added: "{{author}} je dodao '{{page}}' wiki strana." diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 23450007a..35ebc1053 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -234,7 +234,7 @@ sv: mail_body_account_information: Din kontoinformation mail_subject_account_activation_request: "{{value}} begäran om kontoaktivering" mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:" - mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande dagarna" + mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande {{days}} dagarna" mail_body_reminder: "{{count}} ärende(n) som är tilldelat dig har deadline under de {{days}} dagarna:" mail_subject_wiki_content_added: "'{{page}}' wikisida has lagts till" mail_body_wiki_content_added: The '{{page}}' wikisida has lagts till av {{author}}. diff --git a/config/locales/th.yml b/config/locales/th.yml index 5f68696eb..2c127f3de 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -707,7 +707,7 @@ th: enumeration_activities: กิจกรรม (ใช้ในการติดตามเวลา) label_and_its_subprojects: "{{value}} and its subprojects" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next days" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" text_user_wrote: "{{value}} wrote:" label_duplicated_by: duplicated by setting_enabled_scm: Enabled SCM diff --git a/config/locales/tr.yml b/config/locales/tr.yml index bc7bcbf7e..db4330924 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -749,7 +749,7 @@ tr: text_user_wrote: "{{value}} wrote:" setting_mail_handler_api_enabled: Enable WS for incoming emails label_and_its_subprojects: "{{value}} and its subprojects" - mail_subject_reminder: "{{count}} issue(s) due in the next days" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" setting_mail_handler_api_key: API key setting_commit_logs_encoding: Commit messages encoding general_csv_decimal_separator: '.' diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 5ab983325..1a590dc0b 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -706,7 +706,7 @@ uk: text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." label_and_its_subprojects: "{{value}} and its subprojects" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next days" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" text_user_wrote: "{{value}} wrote:" label_duplicated_by: duplicated by setting_enabled_scm: Enabled SCM diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 9d2af5e86..f8ca507bf 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -226,7 +226,7 @@ vi: mail_body_account_information: Thông tin về tài khoản mail_subject_account_activation_request: "{{value}}: Yêu cầu chứng thực tài khoản" mail_body_account_activation_request: "Người dùng ({{value}}) mới đăng ký và cần bạn xác nhận:" - mail_subject_reminder: "{{count}} vấn đề hết hạn trong các ngày tới" + mail_subject_reminder: "{{count}} vấn đề hết hạn trong các {{days}} ngày tới" mail_body_reminder: "{{count}} vấn đề gán cho bạn sẽ hết hạn trong {{days}} ngày tới:" gui_validation_error: 1 lỗi diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index fc5f557d1..5a08041c2 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -273,7 +273,7 @@ mail_body_account_information: 您的 Redmine 帳號資訊 mail_subject_account_activation_request: Redmine 帳號啟用需求通知 mail_body_account_activation_request: "有位新用戶 ({{value}}) 已經完成註冊,正等候您的審核:" - mail_subject_reminder: "您有 {{count}} 個項目即將到期" + mail_subject_reminder: "您有 {{count}} 個項目即將到期 ({{days}})" mail_body_reminder: "{{count}} 個指派給您的項目,將於 {{days}} 天之內到期:" mail_subject_wiki_content_added: "'{{page}}' wiki 頁面已被新增" mail_body_wiki_content_added: "The '{{page}}' wiki 頁面已被 {{author}} 新增。" diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 5aef09692..eeac629a1 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -200,7 +200,7 @@ zh: mail_body_account_information: 您的帐号信息 mail_subject_account_activation_request: "{{value}}帐号激活请求" mail_body_account_activation_request: "新用户({{value}})已完成注册,正在等候您的审核:" - mail_subject_reminder: "{{count}} 个问题需要尽快解决" + mail_subject_reminder: "{{count}} 个问题需要尽快解决 ({{days}})" mail_body_reminder: "指派给您的 {{count}} 个问题需要在 {{days}} 天内完成:" mail_subject_wiki_content_added: "'{{page}}' wiki页面已添加" mail_body_wiki_content_added: "'{{page}}' wiki页面已由 {{author}} 添加。" diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb index f1fc2502f..a5932d325 100644 --- a/test/unit/mailer_test.rb +++ b/test/unit/mailer_test.rb @@ -352,6 +352,7 @@ class MailerTest < ActiveSupport::TestCase mail = ActionMailer::Base.deliveries.last assert mail.bcc.include?('dlopper@somenet.foo') assert mail.body.include?('Bug #3: Error 281 when updating a recipe') + assert_equal '1 issue(s) due in the next 42 days', mail.subject end def last_email From 6e14b8a6af27b9e801f3a31e144a274af9f530fe Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 4 Aug 2010 00:27:41 +0000 Subject: [PATCH 03/22] Remove extra css like the border on revision links in Associated Revisions. #5971 Contributed by Holger Just. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3908 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- public/stylesheets/application.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 59a2c3edd..520ed8371 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -287,8 +287,8 @@ fieldset#filters td.add-filter { text-align: right; vertical-align: top; } .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; } div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;} -div#issue-changesets .changeset { padding: 4px;} -div#issue-changesets .changeset { border-bottom: 1px solid #ddd; } +div#issue-changesets div.changeset { padding: 4px;} +div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; } div#issue-changesets p { margin-top: 0; margin-bottom: 1em;} div#activity dl, #search-results { margin-left: 2em; } From 6f3ae29522f49c6ac536a9118657d79bb2cef600 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 4 Aug 2010 00:38:22 +0000 Subject: [PATCH 04/22] Use the MenuManager for the Administration menu. #6008 Contributed by Jean-Baptiste Barth. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3909 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/views/admin/_menu.rhtml | 21 +++------------------ lib/redmine.rb | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/views/admin/_menu.rhtml b/app/views/admin/_menu.rhtml index a8de88850..bd3abebe1 100644 --- a/app/views/admin/_menu.rhtml +++ b/app/views/admin/_menu.rhtml @@ -1,20 +1,5 @@
-
    -
  • <%= 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_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' %>
  • -
  • <%= link_to l(:label_workflow), {:controller => 'workflows', :action => 'edit'}, :class => 'workflows' %>
  • -
  • <%= link_to l(:label_custom_field_plural), {:controller => 'custom_fields'}, :class => 'custom_fields' %>
  • -
  • <%= link_to l(:label_enumerations), {:controller => 'enumerations'}, :class => 'enumerations' %>
  • -
  • <%= link_to l(:label_settings), {:controller => 'settings'}, :class => 'settings' %>
  • -
  • <%= link_to l(:label_ldap_authentication), {:controller => 'ldap_auth_sources', :action => 'index'}, :class => 'server_authentication' %>
  • - <% menu_items_for(:admin_menu) do |item| -%> -
  • <%= link_to h(item.caption), item.url, item.html_options %>
  • - <% end -%> -
  • <%= link_to l(:label_plugins), {:controller => 'admin', :action => 'plugins'}, :class => 'plugins' %>
  • -
  • <%= link_to l(:label_information_plural), {:controller => 'admin', :action => 'info'}, :class => 'info' %>
  • -
+
    + <%= render_menu :admin_menu %> +
diff --git a/lib/redmine.rb b/lib/redmine.rb index 238ee110a..b95166e76 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -157,7 +157,22 @@ Redmine::MenuManager.map :application_menu do |menu| end Redmine::MenuManager.map :admin_menu do |menu| - # Empty + menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural + menu.push :users, {:controller => 'users'}, :caption => :label_user_plural + menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural + menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions + menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural + menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural, + :html => {:class => 'issue_statuses'} + menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow + menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural, + :html => {:class => 'custom_fields'} + menu.push :enumerations, {:controller => 'enumerations'} + menu.push :settings, {:controller => 'settings'} + menu.push :ldap_authentication, {:controller => 'ldap_auth_sources', :action => 'index'}, + :html => {:class => 'server_authentication'} + menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true + menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true end Redmine::MenuManager.map :project_menu do |menu| From 07cd12978e524deafcfd81714ce965003c5e29bc Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 4 Aug 2010 00:59:15 +0000 Subject: [PATCH 05/22] Add maxlength attributes to some Project fields. #4896 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contributed by Felix Schäfer git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3910 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/views/projects/_form.rhtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/projects/_form.rhtml b/app/views/projects/_form.rhtml index 30848e4cd..fbc6714c8 100644 --- a/app/views/projects/_form.rhtml +++ b/app/views/projects/_form.rhtml @@ -2,14 +2,14 @@
-

<%= f.text_field :name, :required => true %>
<%= l(:text_caracters_maximum, 30) %>

+

<%= f.text_field :name, :required => true, :maxlength => 30 %>
<%= l(:text_caracters_maximum, 30) %>

<% unless @project.allowed_parents.compact.empty? %>

<%= label(:project, :parent_id, l(:field_parent)) %><%= parent_project_select_tag(@project) %>

<% end %>

<%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %>

-

<%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %> +

<%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen?, :maxlength => 20 %> <% unless @project.identifier_frozen? %>
<%= l(:text_length_between, :min => 1, :max => 20) %> <%= l(:text_project_identifier_info) %> <% end %>

From a544a1e57cd6620d0341566230598753677dfc13 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 4 Aug 2010 01:17:45 +0000 Subject: [PATCH 06/22] Added css classes to the HTML body based on the theme, controller, and action. #819 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3911 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/helpers/application_helper.rb | 13 +++++++++++++ app/views/layouts/base.rhtml | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index e40758969..d6fd16a6e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -393,6 +393,19 @@ module ApplicationHelper end end + # Returns the theme, controller name, and action as css classes for the + # HTML body. + def body_css_classes + css = [] + if theme = Redmine::Themes.theme(Setting.ui_theme) + css << 'theme-' + theme.name + end + + css << 'controller-' + params[:controller] + css << 'action-' + params[:action] + css.join(' ') + end + def accesskey(s) Redmine::AccessKeys.key_for s end diff --git a/app/views/layouts/base.rhtml b/app/views/layouts/base.rhtml index 9521457d6..2daae7cb9 100644 --- a/app/views/layouts/base.rhtml +++ b/app/views/layouts/base.rhtml @@ -19,7 +19,7 @@ <%= yield :header_tags -%> - +
From 8c79385261d809504060ad103f58707680fcca70 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 4 Aug 2010 13:37:44 +0000 Subject: [PATCH 07/22] Refactor: extract back_url method to ApplicationController. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3912 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/application_controller.rb | 4 ++++ app/controllers/issues_controller.rb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 6e5634dbc..c00b6ba42 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -218,6 +218,10 @@ class ApplicationController < ActionController::Base end end + def back_url + params[:back_url] || request.env['HTTP_REFERER'] + end + def redirect_back_or_default(default) back_url = CGI.unescape(params[:back_url].to_s) if !back_url.blank? diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 8b5d73fa3..d73dfebfe 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -349,7 +349,7 @@ class IssuesController < ApplicationController @priorities = IssuePriority.all.reverse @statuses = IssueStatus.find(:all, :order => 'position') - @back = params[:back_url] || request.env['HTTP_REFERER'] + @back = back_url render :layout => false end From 70973fda64de03efa47ed6c991ffcdf45cab4e87 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 4 Aug 2010 15:04:30 +0000 Subject: [PATCH 08/22] Fix a few requires for metric_fu's rcov. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3913 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- test/functional/auth_sources_controller_test.rb | 2 +- test/functional/calendars_controller_test.rb | 2 +- test/functional/gantts_controller_test.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/functional/auth_sources_controller_test.rb b/test/functional/auth_sources_controller_test.rb index bd97844ed..348e0e098 100644 --- a/test/functional/auth_sources_controller_test.rb +++ b/test/functional/auth_sources_controller_test.rb @@ -1,4 +1,4 @@ -require 'test_helper' +require File.dirname(__FILE__) + '/../test_helper' class AuthSourcesControllerTest < ActionController::TestCase fixtures :all diff --git a/test/functional/calendars_controller_test.rb b/test/functional/calendars_controller_test.rb index 79cfe28a0..ad047c669 100644 --- a/test/functional/calendars_controller_test.rb +++ b/test/functional/calendars_controller_test.rb @@ -1,4 +1,4 @@ -require 'test_helper' +require File.dirname(__FILE__) + '/../test_helper' class CalendarsControllerTest < ActionController::TestCase fixtures :all diff --git a/test/functional/gantts_controller_test.rb b/test/functional/gantts_controller_test.rb index 4c27de7cd..24c84f2ae 100644 --- a/test/functional/gantts_controller_test.rb +++ b/test/functional/gantts_controller_test.rb @@ -1,4 +1,4 @@ -require 'test_helper' +require File.dirname(__FILE__) + '/../test_helper' class GanttsControllerTest < ActionController::TestCase fixtures :all From 491c9d2b55265365fedb7e11aad01d64ba70b9dc Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Wed, 4 Aug 2010 20:41:32 +0000 Subject: [PATCH 09/22] Display projects as links in users/memberships partial. #5898 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3914 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/views/users/_memberships.rhtml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/users/_memberships.rhtml b/app/views/users/_memberships.rhtml index 70921f4ab..4c71f81ba 100644 --- a/app/views/users/_memberships.rhtml +++ b/app/views/users/_memberships.rhtml @@ -14,7 +14,9 @@ <% @user.memberships.each do |membership| %> <% next if membership.new_record? %> - <%=h membership.project %> + + <%= link_to h(membership.project), {:controller => 'projects', :action => 'show', :id => membership.project} %> + <%=h membership.roles.sort.collect(&:to_s).join(', ') %> <% remote_form_for(:membership, :url => { :action => 'edit_membership', :id => @user, :membership_id => membership }, From 8a2bc5772e0ef3aae1150ce55aba5f78af4749ef Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Wed, 4 Aug 2010 20:52:31 +0000 Subject: [PATCH 10/22] Focus on the input when adding a related issue on issues/show page. #4656 Contributed by Edouard Briere git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3915 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/views/issues/_relations.rhtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/issues/_relations.rhtml b/app/views/issues/_relations.rhtml index 83a78b1c8..71eaaa673 100644 --- a/app/views/issues/_relations.rhtml +++ b/app/views/issues/_relations.rhtml @@ -1,6 +1,6 @@
<% if authorize_for('issue_relations', 'new') %> - <%= toggle_link l(:button_add), 'new-relation-form'%> + <%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %> <% end %>
From 0bcde4ab284031851d53bbecf793c4d54c9b6247 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Wed, 4 Aug 2010 21:01:56 +0000 Subject: [PATCH 11/22] Fixed: assigned_to and author filters in cross project issues view should be based on user's project visibility. #5760 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3916 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/query.rb | 2 +- test/unit/query_test.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/models/query.rb b/app/models/query.rb index f697a721d..fd7aa3477 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -187,7 +187,7 @@ class Query < ActiveRecord::Base if project user_values += project.users.sort.collect{|s| [s.name, s.id.to_s] } else - project_ids = User.current.projects.collect(&:id) + project_ids = Project.all(:conditions => Project.visible_by(User.current)).collect(&:id) if project_ids.any? # members of the user's projects user_values += User.active.find(:all, :conditions => ["#{User.table_name}.id IN (SELECT DISTINCT user_id FROM members WHERE project_id IN (?))", project_ids]).sort.collect{|s| [s.name, s.id.to_s] } diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 26cba2a5e..4b11830e8 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -351,4 +351,13 @@ class QueryTest < ActiveSupport::TestCase assert !q.editable_by?(manager) assert !q.editable_by?(developer) end + + context "#available_filters" do + should "include users of visible projects in cross-project view" do + query = Query.new(:name => "_") + users = query.available_filters["assigned_to_id"] + assert_not_nil users + assert users[:values].map{|u|u[1]}.include?("3") + end + end end From e4af6e77a7347f02491ca95f0a5eb32e40e271ef Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Thu, 5 Aug 2010 17:43:07 +0000 Subject: [PATCH 12/22] Refactor: extract method in IssuesController#move. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3917 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/issues_controller.rb | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index d73dfebfe..4f6f975cd 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -264,15 +264,9 @@ class IssuesController < ApplicationController moved_issues = [] @issues.each do |issue| issue.reload - changed_attributes = {} - [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute| - unless params[valid_attribute].blank? - changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute]) - end - end issue.init_journal(User.current) call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy }) - if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => changed_attributes}) + if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)}) moved_issues << r else unsaved_issue_ids << issue.id @@ -485,4 +479,14 @@ private return false end end + + def extract_changed_attributes_for_move(params) + changed_attributes = {} + [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute| + unless params[valid_attribute].blank? + changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute]) + end + end + changed_attributes + end end From 041bca6ac90d0d53c6e29a729e84b66b4d87b040 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Fri, 6 Aug 2010 15:47:27 +0000 Subject: [PATCH 13/22] Refactor: start to split IssuesController#move into two separate actions. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3918 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/issues_controller.rb | 7 +++++- app/views/issues/move.rhtml | 2 +- config/routes.rb | 2 +- lib/redmine.rb | 2 +- test/functional/issues_controller_test.rb | 26 +++++++++++------------ test/integration/routing_test.rb | 2 +- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 4f6f975cd..7fb4148ed 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -20,7 +20,7 @@ class IssuesController < ApplicationController default_search_scope :issues before_filter :find_issue, :only => [:show, :edit, :update, :reply] - before_filter :find_issues, :only => [:bulk_edit, :move, :destroy] + before_filter :find_issues, :only => [:bulk_edit, :move, :perform_move, :destroy] before_filter :find_project, :only => [:new, :create, :update_form, :preview, :auto_complete] before_filter :authorize, :except => [:index, :changes, :preview, :context_menu] before_filter :find_optional_project, :only => [:index, :changes] @@ -287,6 +287,11 @@ class IssuesController < ApplicationController end render :layout => false if request.xhr? end + + # TODO: more descriptive name? move to separate controller like IssueMovesController? + def perform_move + move + end def destroy @hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f diff --git a/app/views/issues/move.rhtml b/app/views/issues/move.rhtml index 47388c36b..c216cba7c 100644 --- a/app/views/issues/move.rhtml +++ b/app/views/issues/move.rhtml @@ -6,7 +6,7 @@ <% end -%> -<% form_tag({}, :id => 'move_form') do %> +<% form_tag({:action => 'perform_move'}, :id => 'move_form') do %> <%= @issues.collect {|i| hidden_field_tag('ids[]', i.id)}.join %>
diff --git a/config/routes.rb b/config/routes.rb index 58e620eab..2e8a145cb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -124,7 +124,7 @@ ActionController::Routing::Routes.draw do |map| issues_actions.connect 'projects/:project_id/issues/gantt', :controller => 'gantts', :action => 'show' issues_actions.connect 'projects/:project_id/issues/calendar', :controller => 'calendars', :action => 'show' issues_actions.connect 'issues/:id/quoted', :action => 'reply', :id => /\d+/ - issues_actions.connect 'issues/:id/:action', :action => /edit|move|destroy/, :id => /\d+/ + issues_actions.connect 'issues/:id/:action', :action => /edit|perform_move|destroy/, :id => /\d+/ issues_actions.connect 'issues.:format', :action => 'create', :format => /xml/ end issues_routes.with_options :conditions => {:method => :put} do |issues_actions| diff --git a/lib/redmine.rb b/lib/redmine.rb index b95166e76..4196a5d7a 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -69,7 +69,7 @@ Redmine::AccessControl.map do |map| map.permission :add_issue_notes, {:issues => [:edit, :update, :reply]} map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin - map.permission :move_issues, {:issues => :move}, :require => :loggedin + map.permission :move_issues, {:issues => [:move, :perform_move]}, :require => :loggedin map.permission :delete_issues, {:issues => :destroy}, :require => :member # Queries map.permission :manage_public_queries, {:queries => [:new, :edit, :destroy]}, :require => :member diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 670fb2d7e..92e6fd30a 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -1038,22 +1038,22 @@ class IssuesControllerTest < ActionController::TestCase assert_redirected_to :controller => 'issues', :action => 'index', :project_id => Project.find(1).identifier end - def test_move_one_issue_to_another_project + def test_perform_move_one_issue_to_another_project @request.session[:user_id] = 2 - post :move, :id => 1, :new_project_id => 2, :tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => '' + post :perform_move, :id => 1, :new_project_id => 2, :tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => '' assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_equal 2, Issue.find(1).project_id end - def test_move_one_issue_to_another_project_should_follow_when_needed + def test_perform_move_one_issue_to_another_project_should_follow_when_needed @request.session[:user_id] = 2 - post :move, :id => 1, :new_project_id => 2, :follow => '1' + post :perform_move, :id => 1, :new_project_id => 2, :follow => '1' assert_redirected_to '/issues/1' end - def test_bulk_move_to_another_project + def test_bulk_perform_move_to_another_project @request.session[:user_id] = 2 - post :move, :ids => [1, 2], :new_project_id => 2 + post :perform_move, :ids => [1, 2], :new_project_id => 2 assert_redirected_to :action => 'index', :project_id => 'ecookbook' # Issues moved to project 2 assert_equal 2, Issue.find(1).project_id @@ -1063,9 +1063,9 @@ class IssuesControllerTest < ActionController::TestCase assert_equal 2, Issue.find(2).tracker_id end - def test_bulk_move_to_another_tracker + def test_bulk_perform_move_to_another_tracker @request.session[:user_id] = 2 - post :move, :ids => [1, 2], :new_tracker_id => 2 + post :perform_move, :ids => [1, 2], :new_tracker_id => 2 assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_equal 2, Issue.find(1).tracker_id assert_equal 2, Issue.find(2).tracker_id @@ -1075,19 +1075,19 @@ class IssuesControllerTest < ActionController::TestCase @request.session[:user_id] = 2 assert_difference 'Issue.count', 2 do assert_no_difference 'Project.find(1).issues.count' do - post :move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'} + post :perform_move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'} end end assert_redirected_to 'projects/ecookbook/issues' end - context "#move via bulk copy" do + context "#perform_move via bulk copy" do should "allow not changing the issue's attributes" do @request.session[:user_id] = 2 issue_before_move = Issue.find(1) assert_difference 'Issue.count', 1 do assert_no_difference 'Project.find(1).issues.count' do - post :move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => '' + post :perform_move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => '' end end issue_after_move = Issue.first(:order => 'id desc', :conditions => {:project_id => 2}) @@ -1104,7 +1104,7 @@ class IssuesControllerTest < ActionController::TestCase @request.session[:user_id] = 2 assert_difference 'Issue.count', 2 do assert_no_difference 'Project.find(1).issues.count' do - post :move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => 4, :status_id => 3, :start_date => '2009-12-01', :due_date => '2009-12-31' + post :perform_move, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}, :new_tracker_id => '', :assigned_to_id => 4, :status_id => 3, :start_date => '2009-12-01', :due_date => '2009-12-31' end end @@ -1122,7 +1122,7 @@ class IssuesControllerTest < ActionController::TestCase def test_copy_to_another_project_should_follow_when_needed @request.session[:user_id] = 2 - post :move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :follow => '1' + post :perform_move, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :follow => '1' issue = Issue.first(:order => 'id DESC') assert_redirected_to :controller => 'issues', :action => 'show', :id => issue end diff --git a/test/integration/routing_test.rb b/test/integration/routing_test.rb index f8476df56..51f8e71f6 100644 --- a/test/integration/routing_test.rb +++ b/test/integration/routing_test.rb @@ -86,7 +86,7 @@ class RoutingTest < ActionController::IntegrationTest should_route :get, "/projects/23/issues/64/copy", :controller => 'issues', :action => 'new', :project_id => '23', :copy_from => '64' should_route :get, "/issues/1/move", :controller => 'issues', :action => 'move', :id => '1' - should_route :post, "/issues/1/move", :controller => 'issues', :action => 'move', :id => '1' + should_route :post, "/issues/1/perform_move", :controller => 'issues', :action => 'perform_move', :id => '1' should_route :post, "/issues/1/quoted", :controller => 'issues', :action => 'reply', :id => '1' From ab546a14cb9f3e40b29df0fda5c82c8d779be843 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Fri, 6 Aug 2010 20:46:44 +0000 Subject: [PATCH 14/22] Add a rake task to run CI. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3919 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/tasks/ci.rake | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lib/tasks/ci.rake diff --git a/lib/tasks/ci.rake b/lib/tasks/ci.rake new file mode 100644 index 000000000..092575317 --- /dev/null +++ b/lib/tasks/ci.rake @@ -0,0 +1,41 @@ +desc "Run the Continous Integration tests for Redmine" +task :ci do + # RAILS_ENV and ENV[] can diverge so force them both to test + ENV['RAILS_ENV'] = 'test' + RAILS_ENV = 'test' + Rake::Task["ci:setup"].invoke + Rake::Task["ci:build"].invoke + Rake::Task["ci:teardown"].invoke +end + +# Tasks can be hooked into by redefining them in a plugin +namespace :ci do + desc "Setup Redmine for a new build." + task :setup do + Rake::Task["ci:dump_environment"].invoke + Rake::Task["db:create"].invoke + Rake::Task["db:migrate"].invoke + Rake::Task["db:schema:dump"].invoke + end + + desc "Build Redmine" + task :build do + Rake::Task["test"].invoke + end + + # Use this to cleanup after building or run post-build analysis. + desc "Finish the build" + task :teardown do + end + + desc "Dump the environment information to a BUILD_ENVIRONMENT ENV variable for debugging" + task :dump_environment do + + ENV['BUILD_ENVIRONMENT'] = ['ruby -v', 'gem -v', 'gem list'].collect do |command| + result = `#{command}` + "$ #{command}\n#{result}" + end.join("\n") + + end +end + From 7a3dcdc67f79c0c703cb6340547a218b29d0c8b5 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Sat, 7 Aug 2010 15:11:15 +0000 Subject: [PATCH 15/22] Exclude test files from YARD. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3920 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/tasks/yardoc.rake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/tasks/yardoc.rake b/lib/tasks/yardoc.rake index c98f3bd4f..761065df8 100644 --- a/lib/tasks/yardoc.rake +++ b/lib/tasks/yardoc.rake @@ -2,7 +2,9 @@ begin require 'yard' YARD::Rake::YardocTask.new do |t| - t.files = ['lib/**/*.rb', 'app/**/*.rb', 'vendor/plugins/**/*.rb'] + files = ['lib/**/*.rb', 'app/**/*.rb'] + files << Dir['vendor/plugins/**/*.rb'].reject {|f| f.match(/test/) } # Exclude test files + t.files = files end rescue LoadError From 2c79572e4bdcbc00412d618aa84cfc5142b44d26 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Sat, 7 Aug 2010 15:11:21 +0000 Subject: [PATCH 16/22] Save yard doc to the doc/app directory. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3921 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/tasks/yardoc.rake | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/tasks/yardoc.rake b/lib/tasks/yardoc.rake index 761065df8..88cf9b85e 100644 --- a/lib/tasks/yardoc.rake +++ b/lib/tasks/yardoc.rake @@ -5,6 +5,7 @@ begin files = ['lib/**/*.rb', 'app/**/*.rb'] files << Dir['vendor/plugins/**/*.rb'].reject {|f| f.match(/test/) } # Exclude test files t.files = files + t.options += ['--output-dir', './doc/app'] end rescue LoadError From 2e14ba95a034341bffc27ff5028090b60ecaf456 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Sat, 7 Aug 2010 15:11:26 +0000 Subject: [PATCH 17/22] Add static docs to YARD. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3922 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/tasks/yardoc.rake | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/tasks/yardoc.rake b/lib/tasks/yardoc.rake index 88cf9b85e..aa6c5eeb0 100644 --- a/lib/tasks/yardoc.rake +++ b/lib/tasks/yardoc.rake @@ -5,7 +5,14 @@ begin files = ['lib/**/*.rb', 'app/**/*.rb'] files << Dir['vendor/plugins/**/*.rb'].reject {|f| f.match(/test/) } # Exclude test files t.files = files - t.options += ['--output-dir', './doc/app'] + + static_files = ['doc/CHANGELOG', + 'doc/COPYING', + 'doc/INSTALL', + 'doc/RUNNING_TESTS', + 'doc/UPGRADING'].join(',') + + t.options += ['--output-dir', './doc/app', '--files', static_files] end rescue LoadError From 5b64f0ff969db3f0a99c1c780ab03d842da6b59d Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Sat, 7 Aug 2010 15:11:31 +0000 Subject: [PATCH 18/22] Updated changelog format to use lists. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3923 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- doc/CHANGELOG | 260 +++++++++++++++++++++++++------------------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 4a100bfce..4e6be6a27 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -6,151 +6,151 @@ http://www.redmine.org/ == 2010-07-18 v1.0.0 (Release candidate) -#443: Adds context menu to the roadmap issue lists -#443: Subtasking -#741: Description preview while editing an issue -#1131: Add support for alternate (non-LDAP) authentication -#1214: REST API for Issues -#1223: File upload on wiki edit form -#1755: add "blocked by" as a related issues option -#2420: Fetching emails from an POP server -#2482: Named scopes in Issue and ActsAsWatchable plus some view refactoring (logic extraction). -#2924: Make the right click menu more discoverable using a cursor property -#2985: Make syntax highlighting pluggable -#3201: Workflow Check/Uncheck All Rows/Columns -#3359: Update CodeRay 0.9 -#3706: Allow assigned_to field configuration on Issue creation by email -#3936: configurable list of models to include in search -#4480: Create a link to the user profile from the administration interface -#4482: Cache textile rendering -#4572: Make it harder to ruin your database -#4573: Move github gems to Gemcutter -#4664: Add pagination to forum threads -#4732: Make login case-insensitive also for PostgreSQL -#4812: Create links to other projects -#4819: Replace images with smushed ones for speed -#4945: Allow custom fields attached to project to be searchable -#5121: Fix issues list layout overflow -#5169: Issue list view hook request -#5208: Aibility to edit wiki sidebar -#5281: Remove empty ul tags in the issue history -#5291: Updated basque translations -#5328: Automatically add "Repository" menu_item after repository creation -#5415: Fewer SQL statements generated for watcher_recipients -#5416: Exclude "fields_for" from overridden methods in TabularFormBuilder -#5573: Allow issue assignment in email -#5595: Allow start date and due dates to be set via incoming email -#5752: The projects view (/projects) renders ul's wrong -#5781: Allow to use more macros on the welcome page and project list -Fixed #1288: Unable to past escaped wiki syntax in an issue description -Fixed #1334: Wiki formatting character *_ and _* -Fixed #1416: Inline code with less-then/greater-than produces @lt; and @gt; respectively -Fixed #2473: Login and mail should not be case sensitive -Fixed #2990: Ruby 1.9 - wrong number of arguments (1 for 0) on rake db:migrate -Fixed #3089: Text formatting sometimes breaks when combined -Fixed #3690: Status change info duplicates on the issue screen -Fixed #3691: Redmine allows two files with the same file name to be uploaded to the same issue -Fixed #3764: ApplicationHelperTest fails with JRuby -Fixed #4265: Unclosed code tags in issue descriptions affects main UI -Fixed #4745: Bug in index.xml.builder (issues) -Fixed #4852: changing user/roles of project member not possible without javascript -Fixed #4857: Week number calculation in date picker is wrong if a week starts with Sunday -Fixed #4883: Bottom "contextual" placement in issue with associated changeset -Fixed #4918: Revisions r3453 and r3454 broke On-the-fly user creation with LDAP -Fixed #4935: Navigation to the Master Timesheet page (time_entries) -Fixed #5043: Flash messages are not displayed after the project settings[module/activity] saved -Fixed #5081: Broken links on public/help/wiki_syntax_detailed.html -Fixed #5104: Description of document not wikified on documents index -Fixed #5108: Issue linking fails inside of []s -Fixed #5199: diff code coloring using coderay -Fixed #5233: Add a hook to the issue report (Summary) view -Fixed #5265: timetracking: subtasks time is added to the main task -Fixed #5343: acts_as_event Doesn't Accept Outside URLs -Fixed #5440: UI Inconsistency : Administration > Enumerations table row headers should be enclosed in -Fixed #5463: 0.9.4 INSTALL and/or UPGRADE, missing session_store.rb -Fixed #5524: Update_parent_attributes doesn't work for the old parent issue when reparenting -Fixed #5548: SVN Repository: Can not list content of a folder which includes square brackets. -Fixed #5589: "with subproject" malfunction -Fixed #5676: Search for Numeric Value -Fixed #5696: Redmine + PostgreSQL 8.4.4 fails on _dir_list_content.rhtml -Fixed #5698: redmine:email:receive_imap fails silently for mails with subject longer than 255 characters -Fixed #5700: TimelogController#destroy assumes success -Fixed #5751: developer role is mispelled -Fixed #5769: Popup Calendar doesn't Advance in Chrome -Fixed #5771: Problem when importing git repository -Fixed #5823: Error in comments in plugin.rb +* #443: Adds context menu to the roadmap issue lists +* #443: Subtasking +* #741: Description preview while editing an issue +* #1131: Add support for alternate (non-LDAP) authentication +* #1214: REST API for Issues +* #1223: File upload on wiki edit form +* #1755: add "blocked by" as a related issues option +* #2420: Fetching emails from an POP server +* #2482: Named scopes in Issue and ActsAsWatchable plus some view refactoring (logic extraction). +* #2924: Make the right click menu more discoverable using a cursor property +* #2985: Make syntax highlighting pluggable +* #3201: Workflow Check/Uncheck All Rows/Columns +* #3359: Update CodeRay 0.9 +* #3706: Allow assigned_to field configuration on Issue creation by email +* #3936: configurable list of models to include in search +* #4480: Create a link to the user profile from the administration interface +* #4482: Cache textile rendering +* #4572: Make it harder to ruin your database +* #4573: Move github gems to Gemcutter +* #4664: Add pagination to forum threads +* #4732: Make login case-insensitive also for PostgreSQL +* #4812: Create links to other projects +* #4819: Replace images with smushed ones for speed +* #4945: Allow custom fields attached to project to be searchable +* #5121: Fix issues list layout overflow +* #5169: Issue list view hook request +* #5208: Aibility to edit wiki sidebar +* #5281: Remove empty ul tags in the issue history +* #5291: Updated basque translations +* #5328: Automatically add "Repository" menu_item after repository creation +* #5415: Fewer SQL statements generated for watcher_recipients +* #5416: Exclude "fields_for" from overridden methods in TabularFormBuilder +* #5573: Allow issue assignment in email +* #5595: Allow start date and due dates to be set via incoming email +* #5752: The projects view (/projects) renders ul's wrong +* #5781: Allow to use more macros on the welcome page and project list +* Fixed #1288: Unable to past escaped wiki syntax in an issue description +* Fixed #1334: Wiki formatting character *_ and _* +* Fixed #1416: Inline code with less-then/greater-than produces @lt; and @gt; respectively +* Fixed #2473: Login and mail should not be case sensitive +* Fixed #2990: Ruby 1.9 - wrong number of arguments (1 for 0) on rake db:migrate +* Fixed #3089: Text formatting sometimes breaks when combined +* Fixed #3690: Status change info duplicates on the issue screen +* Fixed #3691: Redmine allows two files with the same file name to be uploaded to the same issue +* Fixed #3764: ApplicationHelperTest fails with JRuby +* Fixed #4265: Unclosed code tags in issue descriptions affects main UI +* Fixed #4745: Bug in index.xml.builder (issues) +* Fixed #4852: changing user/roles of project member not possible without javascript +* Fixed #4857: Week number calculation in date picker is wrong if a week starts with Sunday +* Fixed #4883: Bottom "contextual" placement in issue with associated changeset +* Fixed #4918: Revisions r3453 and r3454 broke On-the-fly user creation with LDAP +* Fixed #4935: Navigation to the Master Timesheet page (time_entries) +* Fixed #5043: Flash messages are not displayed after the project settings[module/activity] saved +* Fixed #5081: Broken links on public/help/wiki_syntax_detailed.html +* Fixed #5104: Description of document not wikified on documents index +* Fixed #5108: Issue linking fails inside of []s +* Fixed #5199: diff code coloring using coderay +* Fixed #5233: Add a hook to the issue report (Summary) view +* Fixed #5265: timetracking: subtasks time is added to the main task +* Fixed #5343: acts_as_event Doesn't Accept Outside URLs +* Fixed #5440: UI Inconsistency : Administration > Enumerations table row headers should be enclosed in +* Fixed #5463: 0.9.4 INSTALL and/or UPGRADE, missing session_store.rb +* Fixed #5524: Update_parent_attributes doesn't work for the old parent issue when reparenting +* Fixed #5548: SVN Repository: Can not list content of a folder which includes square brackets. +* Fixed #5589: "with subproject" malfunction +* Fixed #5676: Search for Numeric Value +* Fixed #5696: Redmine + PostgreSQL 8.4.4 fails on _dir_list_content.rhtml +* Fixed #5698: redmine:email:receive_imap fails silently for mails with subject longer than 255 characters +* Fixed #5700: TimelogController#destroy assumes success +* Fixed #5751: developer role is mispelled +* Fixed #5769: Popup Calendar doesn't Advance in Chrome +* Fixed #5771: Problem when importing git repository +* Fixed #5823: Error in comments in plugin.rb == 2010-07-07 v0.9.6 -Fixed: Redmine.pm access by unauthorized users +* Fixed: Redmine.pm access by unauthorized users == 2010-06-24 v0.9.5 -Linkify folder names on revision view -"fiters" and "options" should be hidden in print view via css -Fixed: NoMethodError when no issue params are submitted -Fixed: projects.atom with required authentication -Fixed: External links not correctly displayed in Wiki TOC -Fixed: Member role forms in project settings are not hidden after member added -Fixed: pre can't be inside p -Fixed: session cookie path does not respect RAILS_RELATIVE_URL_ROOT -Fixed: mail handler fails when the from address is empty +* Linkify folder names on revision view +* "fiters" and "options" should be hidden in print view via css +* Fixed: NoMethodError when no issue params are submitted +* Fixed: projects.atom with required authentication +* Fixed: External links not correctly displayed in Wiki TOC +* Fixed: Member role forms in project settings are not hidden after member added +* Fixed: pre can't be inside p +* Fixed: session cookie path does not respect RAILS_RELATIVE_URL_ROOT +* Fixed: mail handler fails when the from address is empty == 2010-05-01 v0.9.4 -Filters collapsed by default on issues index page for a saved query -Fixed: When categories list is too big the popup menu doesn't adjust (ex. in the issue list) -Fixed: remove "main-menu" div when the menu is empty -Fixed: Code syntax highlighting not working in Document page -Fixed: Git blame/annotate fails on moved files -Fixed: Failing test in test_show_atom -Fixed: Migrate from trac - not displayed Wikis -Fixed: Email notifications on file upload sent to empty recipient list -Fixed: Migrating from trac is not possible, fails to allocate memory -Fixed: Lost password no longer flashes a confirmation message -Fixed: Crash while deleting in-use enumeration -Fixed: Hard coded English string at the selection of issue watchers -Fixed: Bazaar v2.1.0 changed behaviour -Fixed: Roadmap display can raise an exception if no trackers are selected -Fixed: Gravatar breaks layout of "logged in" page -Fixed: Reposman.rb on Windows -Fixed: Possible error 500 while moving an issue to another project with SQLite -Fixed: backslashes in issue description/note should be escaped when quoted -Fixed: Long text in
 disrupts Associated revisions
-Fixed: Links to missing wiki pages not red on project overview page
-Fixed: Cannot delete a project with subprojects that shares versions
-Fixed: Update of Subversion changesets broken under Solaris
-Fixed: "Move issues" permission not working for Non member
-Fixed: Sidebar overlap on Users tab of Group editor
-Fixed: Error on db:migrate with table prefix set (hardcoded name in principal.rb)
-Fixed: Report shows sub-projects for non-members
-Fixed: 500 internal error when browsing any Redmine page in epiphany
-Fixed: Watchers selection lost when issue creation fails
-Fixed: When copying projects, redmine should not generate an email to people who created issues
-Fixed: Issue "#" table cells should have a class attribute to enable fine-grained CSS theme
-Fixed: Plugin generators should display help if no parameter is given
+* Filters collapsed by default on issues index page for a saved query
+* Fixed: When categories list is too big the popup menu doesn't adjust (ex. in the issue list)
+* Fixed: remove "main-menu" div when the menu is empty
+* Fixed: Code syntax highlighting not working in Document page
+* Fixed: Git blame/annotate fails on moved files
+* Fixed: Failing test in test_show_atom
+* Fixed: Migrate from trac - not displayed Wikis
+* Fixed: Email notifications on file upload sent to empty recipient list
+* Fixed: Migrating from trac is not possible, fails to allocate memory
+* Fixed: Lost password no longer flashes a confirmation message
+* Fixed: Crash while deleting in-use enumeration
+* Fixed: Hard coded English string at the selection of issue watchers
+* Fixed: Bazaar v2.1.0 changed behaviour
+* Fixed: Roadmap display can raise an exception if no trackers are selected
+* Fixed: Gravatar breaks layout of "logged in" page
+* Fixed: Reposman.rb on Windows
+* Fixed: Possible error 500 while moving an issue to another project with SQLite
+* Fixed: backslashes in issue description/note should be escaped when quoted
+* Fixed: Long text in 
 disrupts Associated revisions
+* Fixed: Links to missing wiki pages not red on project overview page
+* Fixed: Cannot delete a project with subprojects that shares versions
+* Fixed: Update of Subversion changesets broken under Solaris
+* Fixed: "Move issues" permission not working for Non member
+* Fixed: Sidebar overlap on Users tab of Group editor
+* Fixed: Error on db:migrate with table prefix set (hardcoded name in principal.rb)
+* Fixed: Report shows sub-projects for non-members
+* Fixed: 500 internal error when browsing any Redmine page in epiphany
+* Fixed: Watchers selection lost when issue creation fails
+* Fixed: When copying projects, redmine should not generate an email to people who created issues
+* Fixed: Issue "#" table cells should have a class attribute to enable fine-grained CSS theme
+* Fixed: Plugin generators should display help if no parameter is given
 
 
 == 2010-02-28 v0.9.3
 
-Adds filter for system shared versions on the cross project issue list
-Makes project identifiers searchable
-Remove invalid utf8 sequences from commit comments and author name
-Fixed: Wrong link when "http" not included in project "Homepage" link
-Fixed: Escaping in html email templates
-Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
-Fixed: Deselecting textile text formatting causes interning empty string errors
-Fixed: error with postgres when entering a non-numeric id for an issue relation
-Fixed: div.task incorrectly wrapping on Gantt Chart
-Fixed: Project copy loses wiki pages hierarchy
-Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
-Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
-Fixed: Duplicated project name for subproject version on gantt chart
-Fixed: roadmap shows subprojects issues even if subprojects is unchecked
-Fixed: IndexError if all the :last menu items are deleted from a menu
-Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
+* Adds filter for system shared versions on the cross project issue list
+* Makes project identifiers searchable
+* Remove invalid utf8 sequences from commit comments and author name
+* Fixed: Wrong link when "http" not included in project "Homepage" link
+* Fixed: Escaping in html email templates
+* Fixed: Pound (#) followed by number with leading zero (0) removes leading zero when rendered in wiki
+* Fixed: Deselecting textile text formatting causes interning empty string errors
+* Fixed: error with postgres when entering a non-numeric id for an issue relation
+* Fixed: div.task incorrectly wrapping on Gantt Chart
+* Fixed: Project copy loses wiki pages hierarchy
+* Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project
+* Fixed: Repository.fetch_changesets tries to fetch changesets for archived projects
+* Fixed: Duplicated project name for subproject version on gantt chart
+* Fixed: roadmap shows subprojects issues even if subprojects is unchecked
+* Fixed: IndexError if all the :last menu items are deleted from a menu
+* Fixed: Very high CPU usage for a long time when fetching commits from a large Git repository
 
 
 == 2010-02-07 v0.9.2

From a1b607480abc6649f9531b1fd8a7d20c3c656084 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Barth 
Date: Sun, 8 Aug 2010 07:07:20 +0000
Subject: [PATCH 19/22] Refactor: added link_to_project helper to handle links
 to projects

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3924 e93f8b46-1217-0410-a6f0-8f06a7374b81
---
 app/helpers/application_helper.rb            | 27 +++++++++++++++-----
 app/helpers/projects_helper.rb               |  2 +-
 app/helpers/queries_helper.rb                |  2 +-
 app/views/admin/projects.rhtml               |  2 +-
 app/views/issues/_list_simple.rhtml          |  2 +-
 app/views/news/_news.rhtml                   |  2 +-
 app/views/news/index.rhtml                   |  2 +-
 app/views/users/_memberships.rhtml           |  2 +-
 app/views/users/show.rhtml                   |  2 +-
 app/views/welcome/index.rhtml                |  2 +-
 test/unit/helpers/application_helper_test.rb | 12 +++++++++
 11 files changed, 42 insertions(+), 15 deletions(-)

diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index d6fd16a6e..2c334b7f0 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -103,6 +103,23 @@ module ApplicationHelper
     link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision))
   end
 
+  # Generates a link to a project if active
+  # Examples:
+  # 
+  #   link_to_project(project)                          # => link to the specified project overview
+  #   link_to_project(project, :action=>'settings')     # => link to project settings
+  #   link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
+  #   link_to_project(project, {}, :class => "project") # => html options with default url (project overview)
+  #
+  def link_to_project(project, options={}, html_options = nil)
+    if project.active?
+      url = {:controller => 'projects', :action => 'show', :id => project}.merge(options)
+      link_to(h(project), url, html_options)
+    else
+      h(project)
+    end
+  end
+
   def toggle_link(name, id, options={})
     onclick = "Element.toggle('#{id}'); "
     onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
@@ -368,12 +385,12 @@ module ApplicationHelper
       ancestors = (@project.root? ? [] : @project.ancestors.visible)
       if ancestors.any?
         root = ancestors.shift
-        b << link_to(h(root), {:controller => 'projects', :action => 'show', :id => root, :jump => current_menu_item}, :class => 'root')
+        b << link_to_project(root, {:jump => current_menu_item}, :class => 'root')
         if ancestors.size > 2
           b << '…'
           ancestors = ancestors[-2, 2]
         end
-        b += ancestors.collect {|p| link_to(h(p), {:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item}, :class => 'ancestor') }
+        b += ancestors.collect {|p| link_to_project(p, {:jump => current_menu_item}, :class => 'ancestor') }
       end
       b << h(@project)
       b.join(' » ')
@@ -605,8 +622,7 @@ module ApplicationHelper
             end
           when 'project'
             if p = Project.visible.find_by_id(oid)
-              link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
-                                              :class => 'project'
+              link = link_to_project(p, {:only_path => only_path}, :class => 'project')
             end
           end
         elsif sep == ':'
@@ -648,8 +664,7 @@ module ApplicationHelper
             end
           when 'project'
             if p = Project.visible.find(:first, :conditions => ["identifier = :s OR LOWER(name) = :s", {:s => name.downcase}])
-              link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
-                                              :class => 'project'
+              link = link_to_project(p, {:only_path => only_path}, :class => 'project')
             end
           end
         end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 044ccfb77..3b089c111 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -72,7 +72,7 @@ module ProjectsHelper
         end
         classes = (ancestors.empty? ? 'root' : 'child')
         s << "
  • " + - link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") + link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") s << "
    #{textilizable(project.short_description, :project => project)}
    " unless project.description.blank? s << "
    \n" ancestors << project diff --git a/app/helpers/queries_helper.rb b/app/helpers/queries_helper.rb index 594c8a79a..26be63693 100644 --- a/app/helpers/queries_helper.rb +++ b/app/helpers/queries_helper.rb @@ -50,7 +50,7 @@ module QueriesHelper when 'User' link_to_user value when 'Project' - link_to(h(value), :controller => 'projects', :action => 'show', :id => value) + link_to_project value when 'Version' link_to(h(value), :controller => 'versions', :action => 'show', :id => value) when 'TrueClass' diff --git a/app/views/admin/projects.rhtml b/app/views/admin/projects.rhtml index dc7bb97ed..46b68e4cc 100644 --- a/app/views/admin/projects.rhtml +++ b/app/views/admin/projects.rhtml @@ -27,7 +27,7 @@ <% project_tree(@projects) do |project, level| %> <%= css_project_classes(project) %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>"> - <%= project.active? ? link_to(h(project.name), :controller => 'projects', :action => 'settings', :id => project) : h(project.name) %> + <%= link_to_project(project, :action => 'settings') %> <%= textilizable project.short_description, :project => project %> <%= checked_image project.is_public? %> <%= format_date(project.created_on) %> diff --git a/app/views/issues/_list_simple.rhtml b/app/views/issues/_list_simple.rhtml index 38823765e..dd7f48946 100644 --- a/app/views/issues/_list_simple.rhtml +++ b/app/views/issues/_list_simple.rhtml @@ -14,7 +14,7 @@ <%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %> <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %> - <%= link_to(h(issue.project), :controller => 'projects', :action => 'show', :id => issue.project) %> + <%= link_to_project(issue.project) %> <%=h issue.tracker %> <%= link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue %> (<%=h issue.status %>) diff --git a/app/views/news/_news.rhtml b/app/views/news/_news.rhtml index e95e8a557..8f481f09c 100644 --- a/app/views/news/_news.rhtml +++ b/app/views/news/_news.rhtml @@ -1,4 +1,4 @@ -

    <%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless @project %> +

    <%= link_to_project(news.project) + ': ' unless @project %> <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
    diff --git a/app/views/news/index.rhtml b/app/views/news/index.rhtml index 11a39232c..8b7cc66e1 100644 --- a/app/views/news/index.rhtml +++ b/app/views/news/index.rhtml @@ -28,7 +28,7 @@

    <%= l(:label_no_data) %>

    <% else %> <% @newss.each do |news| %> -

    <%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless news.project == @project %> +

    <%= link_to_project(news.project) + ': ' unless news.project == @project %> <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>

    <%= authoring news.created_on, news.author %>

    diff --git a/app/views/users/_memberships.rhtml b/app/views/users/_memberships.rhtml index 4c71f81ba..441294708 100644 --- a/app/views/users/_memberships.rhtml +++ b/app/views/users/_memberships.rhtml @@ -15,7 +15,7 @@ <% next if membership.new_record? %> - <%= link_to h(membership.project), {:controller => 'projects', :action => 'show', :id => membership.project} %> + <%= link_to_project membership.project %> <%=h membership.roles.sort.collect(&:to_s).join(', ') %> diff --git a/app/views/users/show.rhtml b/app/views/users/show.rhtml index 82634b010..df5aec825 100644 --- a/app/views/users/show.rhtml +++ b/app/views/users/show.rhtml @@ -24,7 +24,7 @@

    <%=l(:label_project_plural)%>

      <% for membership in @memberships %> -
    • <%= link_to(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %> +
    • <%= link_to_project(membership.project) %> (<%=h membership.roles.sort.collect(&:to_s).join(', ') %>, <%= format_date(membership.created_on) %>)
    • <% end %>
    diff --git a/app/views/welcome/index.rhtml b/app/views/welcome/index.rhtml index a0ada7cce..6ac09c153 100644 --- a/app/views/welcome/index.rhtml +++ b/app/views/welcome/index.rhtml @@ -20,7 +20,7 @@ <% for project in @projects %> <% @project = project %>
  • - <%= link_to h(project.name), :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>) + <%= link_to_project project %> (<%= format_time(project.created_on) %>) <%= textilizable project.short_description, :project => project %>
  • <% end %> diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index 90d342898..6fd21fe37 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -597,4 +597,16 @@ EXPECTED t = link_to_user(user) assert_equal ::I18n.t(:label_user_anonymous), t end + + def test_link_to_project + project = Project.find(1) + assert_equal %(eCookbook), + link_to_project(project) + assert_equal %(eCookbook), + link_to_project(project, :action => 'settings') + assert_equal %(eCookbook), + link_to_project(project, {:only_path => false, :jump => 'blah'}) + assert_equal %(eCookbook), + link_to_project(project, {:action => 'settings'}, :class => "project") + end end From 780bdccc42461eae0eefc6eb876e2ce4b5564007 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Sun, 8 Aug 2010 07:07:30 +0000 Subject: [PATCH 20/22] Fixed wrong commit range in git log command. #5628 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3925 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/scm/adapters/git_adapter.rb | 10 +++++----- test/unit/lib/redmine/scm/adapters/git_adapter_test.rb | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb index d15bce1af..0857d9047 100644 --- a/lib/redmine/scm/adapters/git_adapter.rb +++ b/lib/redmine/scm/adapters/git_adapter.rb @@ -114,12 +114,12 @@ module Redmine def revisions(path, identifier_from, identifier_to, options={}) revisions = Revisions.new - cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller" - cmd << " --reverse" if options[:reverse] - cmd << " --all" if options[:all] + cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller " + cmd << " --reverse " if options[:reverse] + cmd << " --all " if options[:all] cmd << " -n #{options[:limit]} " if options[:limit] - cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from - cmd << " #{shell_quote identifier_to} " if identifier_to + cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from + cmd << "#{shell_quote identifier_to}" if identifier_to cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since] cmd << " -- #{path}" if path && !path.empty? 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 2dc5d3e8e..6b716b9cd 100644 --- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb @@ -16,6 +16,10 @@ class GitAdapterTest < ActiveSupport::TestCase assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length end + def test_getting_certain_revisions + assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length + end + def test_annotate annotate = @adapter.annotate('sources/watchers_controller.rb') assert_kind_of Redmine::Scm::Adapters::Annotate, annotate From bc5d32d6de2c42aa084d2e5de0ef0c22da756a3a Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Sun, 8 Aug 2010 07:07:38 +0000 Subject: [PATCH 21/22] Replace Test::Unit::TestCase with ActiveSupport::TestCase. #5477 Contributed by Alexey Palazhchenko git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3926 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- test/unit/lib/redmine/menu_manager/menu_item_test.rb | 2 +- test/unit/lib/redmine/menu_manager_test.rb | 6 +----- test/unit/lib/redmine_test.rb | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/test/unit/lib/redmine/menu_manager/menu_item_test.rb b/test/unit/lib/redmine/menu_manager/menu_item_test.rb index 835e154d8..ab17d4a4b 100644 --- a/test/unit/lib/redmine/menu_manager/menu_item_test.rb +++ b/test/unit/lib/redmine/menu_manager/menu_item_test.rb @@ -24,7 +24,7 @@ module RedmineMenuTestHelper end end -class Redmine::MenuManager::MenuItemTest < Test::Unit::TestCase +class Redmine::MenuManager::MenuItemTest < ActiveSupport::TestCase include RedmineMenuTestHelper Redmine::MenuManager.map :test_menu do |menu| diff --git a/test/unit/lib/redmine/menu_manager_test.rb b/test/unit/lib/redmine/menu_manager_test.rb index 0c01ca323..200ed3976 100644 --- a/test/unit/lib/redmine/menu_manager_test.rb +++ b/test/unit/lib/redmine/menu_manager_test.rb @@ -17,7 +17,7 @@ require File.dirname(__FILE__) + '/../../../test_helper' -class Redmine::MenuManagerTest < Test::Unit::TestCase +class Redmine::MenuManagerTest < ActiveSupport::TestCase context "MenuManager#map" do should "be tested" end @@ -25,8 +25,4 @@ class Redmine::MenuManagerTest < Test::Unit::TestCase context "MenuManager#items" do should "be tested" end - - should "be tested" do - assert true - end end diff --git a/test/unit/lib/redmine_test.rb b/test/unit/lib/redmine_test.rb index 5150da1f2..2d32abdcb 100644 --- a/test/unit/lib/redmine_test.rb +++ b/test/unit/lib/redmine_test.rb @@ -33,7 +33,7 @@ module RedmineMenuTestHelper end end -class RedmineTest < Test::Unit::TestCase +class RedmineTest < ActiveSupport::TestCase include RedmineMenuTestHelper def test_top_menu From 56a6d86af572fb466bdd4f79b0a00dd69b87a3bb Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Sun, 8 Aug 2010 09:01:25 +0000 Subject: [PATCH 22/22] Added project filter when viewing all issues. #5084 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3927 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/query.rb | 6 ++++++ test/unit/query_test.rb | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/app/models/query.rb b/app/models/query.rb index fd7aa3477..b1f784528 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -219,6 +219,12 @@ class Query < ActiveRecord::Base @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => system_shared_versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] } } end add_custom_fields_filters(IssueCustomField.find(:all, :conditions => {:is_filter => true, :is_for_all => true})) + # project filter + project_values = Project.all(:conditions => Project.visible_by(User.current), :order => 'lft').map do |p| + pre = (p.level > 0 ? ('--' * p.level + ' ') : '') + ["#{pre}#{p.name}",p.id.to_s] + end + @available_filters["project_id"] = { :type => :list, :order => 1, :values => project_values} end @available_filters end diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 4b11830e8..12ab5d932 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -33,6 +33,15 @@ class QueryTest < ActiveSupport::TestCase assert query.available_filters['fixed_version_id'][:values].detect {|v| v.last == '2'} end + def test_project_filter_in_global_queries + query = Query.new(:project => nil, :name => '_') + project_filter = query.available_filters["project_id"] + assert_not_nil project_filter + project_ids = project_filter[:values].map{|p| p[1]} + assert project_ids.include?("1") #public project + assert !project_ids.include?("2") #private project user cannot see + end + def find_issues_with_query(query) Issue.find :all, :include => [ :assigned_to, :status, :tracker, :project, :priority ],