##// END OF EJS Templates
Merged r2218 to r2225 from trunk....
Jean-Philippe Lang -
r2228:49b6f9e4dd41
parent child
Show More
@@ -86,6 +86,7 class AdminController < ApplicationController
86 @flags = {
86 @flags = {
87 :default_admin_changed => User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?,
87 :default_admin_changed => User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?,
88 :file_repository_writable => File.writable?(Attachment.storage_path),
88 :file_repository_writable => File.writable?(Attachment.storage_path),
89 :plugin_assets_writable => File.writable?(Engines.public_directory),
89 :rmagick_available => Object.const_defined?(:Magick)
90 :rmagick_available => Object.const_defined?(:Magick)
90 }
91 }
91 end
92 end
@@ -175,6 +175,7 class ApplicationController < ActionController::Base
175 # TODO: move to model
175 # TODO: move to model
176 def attach_files(obj, attachments)
176 def attach_files(obj, attachments)
177 attached = []
177 attached = []
178 unsaved = []
178 if attachments && attachments.is_a?(Hash)
179 if attachments && attachments.is_a?(Hash)
179 attachments.each_value do |attachment|
180 attachments.each_value do |attachment|
180 file = attachment['file']
181 file = attachment['file']
@@ -183,7 +184,10 class ApplicationController < ActionController::Base
183 :file => file,
184 :file => file,
184 :description => attachment['description'].to_s.strip,
185 :description => attachment['description'].to_s.strip,
185 :author => User.current)
186 :author => User.current)
186 attached << a unless a.new_record?
187 a.new_record? ? (unsaved << a) : (attached << a)
188 end
189 if unsaved.any?
190 flash[:warning] = l(:warning_attachments_not_saved, unsaved.size)
187 end
191 end
188 end
192 end
189 attached
193 attached
@@ -147,6 +147,15 module ApplicationHelper
147 end
147 end
148 content
148 content
149 end
149 end
150
151 # Renders flash messages
152 def render_flash_messages
153 s = ''
154 flash.each do |k,v|
155 s << content_tag('div', v, :class => "flash #{k}")
156 end
157 s
158 end
150
159
151 # Truncates and returns the string as a single line
160 # Truncates and returns the string as a single line
152 def truncate_single_line(string, *args)
161 def truncate_single_line(string, *args)
@@ -40,6 +40,7 class Mailer < ActionMailer::Base
40 'Issue-Id' => issue.id,
40 'Issue-Id' => issue.id,
41 'Issue-Author' => issue.author.login
41 'Issue-Author' => issue.author.login
42 redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
42 redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to
43 @author = journal.user
43 recipients issue.recipients
44 recipients issue.recipients
44 # Watchers in cc
45 # Watchers in cc
45 cc(issue.watcher_recipients - @recipients)
46 cc(issue.watcher_recipients - @recipients)
@@ -209,9 +210,10 class Mailer < ActionMailer::Base
209 def create_mail
210 def create_mail
210 # Removes the current user from the recipients and cc
211 # Removes the current user from the recipients and cc
211 # if he doesn't want to receive notifications about what he does
212 # if he doesn't want to receive notifications about what he does
212 if User.current.pref[:no_self_notified]
213 @author ||= User.current
213 recipients.delete(User.current.mail) if recipients
214 if @author.pref[:no_self_notified]
214 cc.delete(User.current.mail) if cc
215 recipients.delete(@author.mail) if recipients
216 cc.delete(@author.mail) if cc
215 end
217 end
216 # Blind carbon copy recipients
218 # Blind carbon copy recipients
217 if Setting.bcc_recipients?
219 if Setting.bcc_recipients?
@@ -60,7 +60,7 class Project < ActiveRecord::Base
60 validates_associated :repository, :wiki
60 validates_associated :repository, :wiki
61 validates_length_of :name, :maximum => 30
61 validates_length_of :name, :maximum => 30
62 validates_length_of :homepage, :maximum => 255
62 validates_length_of :homepage, :maximum => 255
63 validates_length_of :identifier, :in => 3..20
63 validates_length_of :identifier, :in => 2..20
64 validates_format_of :identifier, :with => /^[a-z0-9\-]*$/
64 validates_format_of :identifier, :with => /^[a-z0-9\-]*$/
65
65
66 before_destroy :delete_all_members
66 before_destroy :delete_all_members
@@ -4,7 +4,8
4
4
5 <table class="list">
5 <table class="list">
6 <tr class="odd"><td><%= l(:text_default_administrator_account_changed) %></td><td><%= image_tag (@flags[:default_admin_changed] ? 'true.png' : 'false.png'), :style => "vertical-align:bottom;" %></td></tr>
6 <tr class="odd"><td><%= l(:text_default_administrator_account_changed) %></td><td><%= image_tag (@flags[:default_admin_changed] ? 'true.png' : 'false.png'), :style => "vertical-align:bottom;" %></td></tr>
7 <tr class="even"><td><%= l(:text_file_repository_writable) %></td><td><%= image_tag (@flags[:file_repository_writable] ? 'true.png' : 'false.png'), :style => "vertical-align:bottom;" %></td></tr>
7 <tr class="even"><td><%= l(:text_file_repository_writable) %> (<%= Attachment.storage_path %>)</td><td><%= image_tag (@flags[:file_repository_writable] ? 'true.png' : 'false.png'), :style => "vertical-align:bottom;" %></td></tr>
8 <tr class="even"><td><%= l(:text_plugin_assets_writable) %> (<%= Engines.public_directory %>)</td><td><%= image_tag (@flags[:plugin_assets_writable] ? 'true.png' : 'false.png'), :style => "vertical-align:bottom;" %></td></tr>
8 <tr class="odd"><td><%= l(:text_rmagick_available) %></td><td><%= image_tag (@flags[:rmagick_available] ? 'true.png' : 'false.png'), :style => "vertical-align:bottom;" %></td></tr>
9 <tr class="odd"><td><%= l(:text_rmagick_available) %></td><td><%= image_tag (@flags[:rmagick_available] ? 'true.png' : 'false.png'), :style => "vertical-align:bottom;" %></td></tr>
9 </table>
10 </table>
10
11
@@ -17,3 +17,7
17 <% end %>
17 <% end %>
18
18
19 <div id="preview" class="wiki"></div>
19 <div id="preview" class="wiki"></div>
20
21 <% content_for :header_tags do %>
22 <%= stylesheet_link_tag 'scm' %>
23 <% end %>
@@ -50,8 +50,7
50 </div>
50 </div>
51
51
52 <div id="content">
52 <div id="content">
53 <%= content_tag('div', flash[:error], :class => 'flash error') if flash[:error] %>
53 <%= render_flash_messages %>
54 <%= content_tag('div', flash[:notice], :class => 'flash notice') if flash[:notice] %>
55 <%= yield %>
54 <%= yield %>
56 </div>
55 </div>
57 </div>
56 </div>
@@ -11,7 +11,7
11 <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p>
11 <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p>
12 <p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %>
12 <p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %>
13 <% unless @project.identifier_frozen? %>
13 <% unless @project.identifier_frozen? %>
14 <br /><em><%= l(:text_length_between, 3, 20) %> <%= l(:text_project_identifier_info) %></em>
14 <br /><em><%= l(:text_length_between, 2, 20) %> <%= l(:text_project_identifier_info) %></em>
15 <% end %></p>
15 <% end %></p>
16 <p><%= f.text_field :homepage, :size => 60 %></p>
16 <p><%= f.text_field :homepage, :size => 60 %></p>
17 <p><%= f.check_box :is_public %></p>
17 <p><%= f.check_box :is_public %></p>
@@ -696,3 +696,5 label_user_activity: "%s's activity"
696 label_updated_time_by: Updated by %s %s ago
696 label_updated_time_by: Updated by %s %s ago
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 text_plugin_assets_writable: Plugin assets directory writable
700 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "%s's activity"
697 label_updated_time_by: Updated by %s %s ago
697 label_updated_time_by: Updated by %s %s ago
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -701,3 +701,5 label_user_activity: "%s's activity"
701 label_updated_time_by: Updated by %s %s ago
701 label_updated_time_by: Updated by %s %s ago
702 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
702 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
703 setting_diff_max_lines_displayed: Max number of diff lines displayed
703 setting_diff_max_lines_displayed: Max number of diff lines displayed
704 text_plugin_assets_writable: Plugin assets directory writable
705 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "%s's activity"
697 label_updated_time_by: Updated by %s %s ago
697 label_updated_time_by: Updated by %s %s ago
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -698,3 +698,5 default_activity_development: Entwicklung
698 enumeration_issue_priorities: Ticket-Prioritäten
698 enumeration_issue_priorities: Ticket-Prioritäten
699 enumeration_doc_categories: Dokumentenkategorien
699 enumeration_doc_categories: Dokumentenkategorien
700 enumeration_activities: Aktivitäten (Zeiterfassung)
700 enumeration_activities: Aktivitäten (Zeiterfassung)
701 text_plugin_assets_writable: Plugin assets directory writable
702 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -85,6 +85,8 error_scm_command_failed: "An error occurred when trying to access the repositor
85 error_scm_annotate: "The entry does not exist or can not be annotated."
85 error_scm_annotate: "The entry does not exist or can not be annotated."
86 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
86 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
87
87
88 warning_attachments_not_saved: "%d file(s) could not be saved."
89
88 mail_subject_lost_password: Your %s password
90 mail_subject_lost_password: Your %s password
89 mail_body_lost_password: 'To change your password, click on the following link:'
91 mail_body_lost_password: 'To change your password, click on the following link:'
90 mail_subject_register: Your %s account activation
92 mail_subject_register: Your %s account activation
@@ -660,7 +662,8 text_status_changed_by_changeset: Applied in changeset %s.
660 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
662 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
661 text_select_project_modules: 'Select modules to enable for this project:'
663 text_select_project_modules: 'Select modules to enable for this project:'
662 text_default_administrator_account_changed: Default administrator account changed
664 text_default_administrator_account_changed: Default administrator account changed
663 text_file_repository_writable: File repository writable
665 text_file_repository_writable: Attachments directory writable
666 text_plugin_assets_writable: Plugin assets directory writable
664 text_rmagick_available: RMagick available (optional)
667 text_rmagick_available: RMagick available (optional)
665 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
668 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
666 text_destroy_time_entries: Delete reported hours
669 text_destroy_time_entries: Delete reported hours
@@ -681,3 +681,5 text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notif
681 text_user_wrote: '%s escribió:'
681 text_user_wrote: '%s escribió:'
682 text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido?
682 text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido?
683 text_workflow_edit: Seleccionar un flujo de trabajo para actualizar
683 text_workflow_edit: Seleccionar un flujo de trabajo para actualizar
684 text_plugin_assets_writable: Plugin assets directory writable
685 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -696,3 +696,5 label_user_activity: "Käyttäjän %s historia"
696 label_updated_time_by: Updated by %s %s ago
696 label_updated_time_by: Updated by %s %s ago
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 text_plugin_assets_writable: Plugin assets directory writable
700 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -85,6 +85,8 error_scm_command_failed: "Une erreur s'est produite lors de l'accès au dépôt
85 error_scm_annotate: "L'entrée n'existe pas ou ne peut pas être annotée."
85 error_scm_annotate: "L'entrée n'existe pas ou ne peut pas être annotée."
86 error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas à ce projet"
86 error_issue_not_found_in_project: "La demande n'existe pas ou n'appartient pas à ce projet"
87
87
88 warning_attachments_not_saved: "%d fichier(s) n'ont pas pu être sauvegardés."
89
88 mail_subject_lost_password: Votre mot de passe %s
90 mail_subject_lost_password: Votre mot de passe %s
89 mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant:'
91 mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant:'
90 mail_subject_register: Activation de votre compte %s
92 mail_subject_register: Activation de votre compte %s
@@ -661,6 +663,7 text_issues_destroy_confirmation: 'Etes-vous sûr de vouloir supprimer le(s) dem
661 text_select_project_modules: 'Selectionner les modules à activer pour ce project:'
663 text_select_project_modules: 'Selectionner les modules à activer pour ce project:'
662 text_default_administrator_account_changed: Compte administrateur par défaut changé
664 text_default_administrator_account_changed: Compte administrateur par défaut changé
663 text_file_repository_writable: Répertoire de stockage des fichiers accessible en écriture
665 text_file_repository_writable: Répertoire de stockage des fichiers accessible en écriture
666 text_plugin_assets_writable: Répertoire public des plugins accessible en écriture
664 text_rmagick_available: Bibliothèque RMagick présente (optionnelle)
667 text_rmagick_available: Bibliothèque RMagick présente (optionnelle)
665 text_destroy_time_entries_question: %.02f heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ?
668 text_destroy_time_entries_question: %.02f heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ?
666 text_destroy_time_entries: Supprimer les heures
669 text_destroy_time_entries: Supprimer les heures
@@ -694,3 +694,7 permission_edit_own_messages: ערוך הודעות של עצמך
694 permission_delete_own_messages: מחק הודעות של עצמך
694 permission_delete_own_messages: מחק הודעות של עצמך
695 label_user_activity: "הפעילות של %s"
695 label_user_activity: "הפעילות של %s"
696 label_updated_time_by: עודכן ע"י %s לפני %s
696 label_updated_time_by: עודכן ע"י %s לפני %s
697 setting_diff_max_lines_displayed: Max number of diff lines displayed
698 text_plugin_assets_writable: Plugin assets directory writable
699 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
700 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "%s tevékenységei"
697 label_updated_time_by: "Módosította %s ennyivel ezelőtt: %s"
697 label_updated_time_by: "Módosította %s ennyivel ezelőtt: %s"
698 text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.'
698 text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.'
699 setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál
699 setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -696,3 +696,5 label_user_activity: "%s's activity"
696 label_updated_time_by: Updated by %s %s ago
696 label_updated_time_by: Updated by %s %s ago
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 text_plugin_assets_writable: Plugin assets directory writable
700 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "%s's activity"
697 label_updated_time_by: Updated by %s %s ago
697 label_updated_time_by: Updated by %s %s ago
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -696,3 +696,5 label_user_activity: "%s의 작업내역"
696 label_updated_time_by: %s가 %s 전에 변경
696 label_updated_time_by: %s가 %s 전에 변경
697 text_diff_truncated: '... 차이점은 표시할 있는 최대 줄수를 초과해서 차이점은 잘렸습니다.'
697 text_diff_truncated: '... 차이점은 표시할 있는 최대 줄수를 초과해서 차이점은 잘렸습니다.'
698 setting_diff_max_lines_displayed: 차이점보기에 표시할 최대 줄수
698 setting_diff_max_lines_displayed: 차이점보기에 표시할 최대 줄수
699 text_plugin_assets_writable: Plugin assets directory writable
700 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -698,3 +698,5 default_activity_development: Vystymas
698 enumeration_issue_priorities: Darbo prioritetai
698 enumeration_issue_priorities: Darbo prioritetai
699 enumeration_doc_categories: Dokumento kategorijos
699 enumeration_doc_categories: Dokumento kategorijos
700 enumeration_activities: Veiklos (laiko sekimas)
700 enumeration_activities: Veiklos (laiko sekimas)
701 text_plugin_assets_writable: Plugin assets directory writable
702 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -698,3 +698,5 label_user_activity: "%s's activity"
698 label_updated_time_by: Updated by %s %s ago
698 label_updated_time_by: Updated by %s %s ago
699 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
700 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 setting_diff_max_lines_displayed: Max number of diff lines displayed
701 text_plugin_assets_writable: Plugin assets directory writable
702 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "%s's activity"
697 label_updated_time_by: Updated by %s %s ago
697 label_updated_time_by: Updated by %s %s ago
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -715,3 +715,5 label_user_activity: "Aktywność: %s"
715 label_updated_time_by: Uaktualnione przez %s %s temu
715 label_updated_time_by: Uaktualnione przez %s %s temu
716 text_diff_truncated: '... Ten plik różnic został przycięty ponieważ jest zbyt długi.'
716 text_diff_truncated: '... Ten plik różnic został przycięty ponieważ jest zbyt długi.'
717 setting_diff_max_lines_displayed: Maksymalna liczba linii różnicy do pokazania
717 setting_diff_max_lines_displayed: Maksymalna liczba linii różnicy do pokazania
718 text_plugin_assets_writable: Plugin assets directory writable
719 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "Atividade de %s"
697 label_updated_time_by: Updated by %s %s ago
697 label_updated_time_by: Updated by %s %s ago
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -698,3 +698,5 label_user_activity: "Actividade de %s"
698 label_updated_time_by: Actualizado por %s há %s
698 label_updated_time_by: Actualizado por %s há %s
699 text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.'
699 text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.'
700 setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas
700 setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas
701 text_plugin_assets_writable: Plugin assets directory writable
702 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -696,3 +696,5 label_user_activity: "%s's activity"
696 label_updated_time_by: Updated by %s %s ago
696 label_updated_time_by: Updated by %s %s ago
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
697 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
698 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 text_plugin_assets_writable: Plugin assets directory writable
700 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -730,3 +730,5 text_user_wrote: '%s написал(а):'
730 text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое?
730 text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое?
731 text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
731 text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
732
732
733 text_plugin_assets_writable: Plugin assets directory writable
734 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -702,3 +702,5 label_user_activity: "%s's activity"
702 label_updated_time_by: Updated by %s %s ago
702 label_updated_time_by: Updated by %s %s ago
703 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
703 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
704 setting_diff_max_lines_displayed: Max number of diff lines displayed
704 setting_diff_max_lines_displayed: Max number of diff lines displayed
705 text_plugin_assets_writable: Plugin assets directory writable
706 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "%s's activity"
697 label_updated_time_by: Updated by %s %s ago
697 label_updated_time_by: Updated by %s %s ago
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -696,4 +696,6 default_activity_development: Utveckling
696
696
697 enumeration_issue_priorities: Ärendeprioriteter
697 enumeration_issue_priorities: Ärendeprioriteter
698 enumeration_doc_categories: Dokumentkategorier
698 enumeration_doc_categories: Dokumentkategorier
699 enumeration_activities: Aktiviteter (tidsuppföljning) No newline at end of file
699 enumeration_activities: Aktiviteter (tidsuppföljning)
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -699,3 +699,5 label_user_activity: "%s's activity"
699 label_updated_time_by: Updated by %s %s ago
699 label_updated_time_by: Updated by %s %s ago
700 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
700 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
701 setting_diff_max_lines_displayed: Max number of diff lines displayed
701 setting_diff_max_lines_displayed: Max number of diff lines displayed
702 text_plugin_assets_writable: Plugin assets directory writable
703 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -697,3 +697,5 label_user_activity: "%s's activity"
697 label_updated_time_by: Updated by %s %s ago
697 label_updated_time_by: Updated by %s %s ago
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
698 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
699 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 text_plugin_assets_writable: Plugin assets directory writable
701 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -698,3 +698,5 label_user_activity: "%s's activity"
698 label_updated_time_by: Updated by %s %s ago
698 label_updated_time_by: Updated by %s %s ago
699 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
699 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
700 setting_diff_max_lines_displayed: Max number of diff lines displayed
700 setting_diff_max_lines_displayed: Max number of diff lines displayed
701 text_plugin_assets_writable: Plugin assets directory writable
702 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -699,3 +699,5 label_user_activity: "%s's activity"
699 label_updated_time_by: Updated by %s %s ago
699 label_updated_time_by: Updated by %s %s ago
700 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
700 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
701 setting_diff_max_lines_displayed: Max number of diff lines displayed
701 setting_diff_max_lines_displayed: Max number of diff lines displayed
702 text_plugin_assets_writable: Plugin assets directory writable
703 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -698,3 +698,5 default_activity_development: 開發
698 enumeration_issue_priorities: 項目優先權
698 enumeration_issue_priorities: 項目優先權
699 enumeration_doc_categories: 文件分類
699 enumeration_doc_categories: 文件分類
700 enumeration_activities: 活動 (時間追蹤)
700 enumeration_activities: 活動 (時間追蹤)
701 text_plugin_assets_writable: Plugin assets directory writable
702 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -698,3 +698,5 default_activity_development: 开发
698 enumeration_issue_priorities: 问题优先级
698 enumeration_issue_priorities: 问题优先级
699 enumeration_doc_categories: 文档类别
699 enumeration_doc_categories: 文档类别
700 enumeration_activities: 活动(时间跟踪)
700 enumeration_activities: 活动(时间跟踪)
701 text_plugin_assets_writable: Plugin assets directory writable
702 warning_attachments_not_saved: "%d file(s) could not be saved."
@@ -1,4 +1,4
1 # redMine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
@@ -33,9 +33,18 module Redmine
33 msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
33 msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
34 logger.debug "Receiving message #{message_id}" if logger && logger.debug?
34 logger.debug "Receiving message #{message_id}" if logger && logger.debug?
35 if MailHandler.receive(msg, options)
35 if MailHandler.receive(msg, options)
36 logger.debug "Message #{message_id} successfully received" if logger && logger.debug?
37 if imap_options[:move_on_success]
38 imap.copy(message_id, imap_options[:move_on_success])
39 end
36 imap.store(message_id, "+FLAGS", [:Seen, :Deleted])
40 imap.store(message_id, "+FLAGS", [:Seen, :Deleted])
37 else
41 else
42 logger.debug "Message #{message_id} can not be processed" if logger && logger.debug?
38 imap.store(message_id, "+FLAGS", [:Seen])
43 imap.store(message_id, "+FLAGS", [:Seen])
44 if imap_options[:move_on_failure]
45 imap.copy(message_id, imap_options[:move_on_failure])
46 imap.store(message_id, "+FLAGS", [:Deleted])
47 end
39 end
48 end
40 end
49 end
41 imap.expunge
50 imap.expunge
@@ -1,4 +1,4
1 # redMine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
@@ -71,6 +71,11 Issue attributes control options:
71 allow_override=ATTRS allow email content to override attributes
71 allow_override=ATTRS allow email content to override attributes
72 specified by previous options
72 specified by previous options
73 ATTRS is a comma separated list of attributes
73 ATTRS is a comma separated list of attributes
74
75 Processed emails control options:
76 move_on_success=MAILBOX move emails that were successfully received
77 to MAILBOX instead of deleting them
78 move_on_failure=MAILBOX move emails that were ignored to MAILBOX
74
79
75 Examples:
80 Examples:
76 # No project specified. Emails MUST contain the 'Project' keyword:
81 # No project specified. Emails MUST contain the 'Project' keyword:
@@ -95,7 +100,9 END_DESC
95 :ssl => ENV['ssl'],
100 :ssl => ENV['ssl'],
96 :username => ENV['username'],
101 :username => ENV['username'],
97 :password => ENV['password'],
102 :password => ENV['password'],
98 :folder => ENV['folder']}
103 :folder => ENV['folder'],
104 :move_on_success => ENV['move_on_success'],
105 :move_on_failure => ENV['move_on_failure']}
99
106
100 options = { :issue => {} }
107 options = { :issue => {} }
101 %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
108 %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] }
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -314,6 +314,14 div.flash.notice {
314 color: #005f00;
314 color: #005f00;
315 }
315 }
316
316
317 div.flash.warning {
318 background: url(../images/warning.png) 8px 5px no-repeat;
319 background-color: #FFEBC1;
320 border-color: #FDBF3B;
321 color: #A6750C;
322 text-align: left;
323 }
324
317 .nodata, .warning {
325 .nodata, .warning {
318 text-align: center;
326 text-align: center;
319 background-color: #FFEBC1;
327 background-color: #FFEBC1;
General Comments 0
You need to be logged in to leave comments. Login now