@@ -86,6 +86,7 class AdminController < ApplicationController | |||
|
86 | 86 | @flags = { |
|
87 | 87 | :default_admin_changed => User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?, |
|
88 | 88 | :file_repository_writable => File.writable?(Attachment.storage_path), |
|
89 | :plugin_assets_writable => File.writable?(Engines.public_directory), | |
|
89 | 90 | :rmagick_available => Object.const_defined?(:Magick) |
|
90 | 91 | } |
|
91 | 92 | end |
@@ -175,6 +175,7 class ApplicationController < ActionController::Base | |||
|
175 | 175 | # TODO: move to model |
|
176 | 176 | def attach_files(obj, attachments) |
|
177 | 177 | attached = [] |
|
178 | unsaved = [] | |
|
178 | 179 | if attachments && attachments.is_a?(Hash) |
|
179 | 180 | attachments.each_value do |attachment| |
|
180 | 181 | file = attachment['file'] |
@@ -183,7 +184,10 class ApplicationController < ActionController::Base | |||
|
183 | 184 | :file => file, |
|
184 | 185 | :description => attachment['description'].to_s.strip, |
|
185 | 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 | 191 | end |
|
188 | 192 | end |
|
189 | 193 | attached |
@@ -147,6 +147,15 module ApplicationHelper | |||
|
147 | 147 | end |
|
148 | 148 | content |
|
149 | 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 | 160 | # Truncates and returns the string as a single line |
|
152 | 161 | def truncate_single_line(string, *args) |
@@ -40,6 +40,7 class Mailer < ActionMailer::Base | |||
|
40 | 40 | 'Issue-Id' => issue.id, |
|
41 | 41 | 'Issue-Author' => issue.author.login |
|
42 | 42 | redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to |
|
43 | @author = journal.user | |
|
43 | 44 | recipients issue.recipients |
|
44 | 45 | # Watchers in cc |
|
45 | 46 | cc(issue.watcher_recipients - @recipients) |
@@ -209,9 +210,10 class Mailer < ActionMailer::Base | |||
|
209 | 210 | def create_mail |
|
210 | 211 | # Removes the current user from the recipients and cc |
|
211 | 212 | # if he doesn't want to receive notifications about what he does |
|
212 | if User.current.pref[:no_self_notified] | |
|
213 | recipients.delete(User.current.mail) if recipients | |
|
214 | cc.delete(User.current.mail) if cc | |
|
213 | @author ||= User.current | |
|
214 | if @author.pref[:no_self_notified] | |
|
215 | recipients.delete(@author.mail) if recipients | |
|
216 | cc.delete(@author.mail) if cc | |
|
215 | 217 | end |
|
216 | 218 | # Blind carbon copy recipients |
|
217 | 219 | if Setting.bcc_recipients? |
@@ -60,7 +60,7 class Project < ActiveRecord::Base | |||
|
60 | 60 | validates_associated :repository, :wiki |
|
61 | 61 | validates_length_of :name, :maximum => 30 |
|
62 | 62 | validates_length_of :homepage, :maximum => 255 |
|
63 |
validates_length_of :identifier, :in => |
|
|
63 | validates_length_of :identifier, :in => 2..20 | |
|
64 | 64 | validates_format_of :identifier, :with => /^[a-z0-9\-]*$/ |
|
65 | 65 | |
|
66 | 66 | before_destroy :delete_all_members |
@@ -4,7 +4,8 | |||
|
4 | 4 | |
|
5 | 5 | <table class="list"> |
|
6 | 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 | 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 | 10 | </table> |
|
10 | 11 |
@@ -17,3 +17,7 | |||
|
17 | 17 | <% end %> |
|
18 | 18 | |
|
19 | 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 | 50 | </div> |
|
51 | 51 | |
|
52 | 52 | <div id="content"> |
|
53 | <%= content_tag('div', flash[:error], :class => 'flash error') if flash[:error] %> | |
|
54 | <%= content_tag('div', flash[:notice], :class => 'flash notice') if flash[:notice] %> | |
|
53 | <%= render_flash_messages %> | |
|
55 | 54 | <%= yield %> |
|
56 | 55 | </div> |
|
57 | 56 | </div> |
@@ -11,7 +11,7 | |||
|
11 | 11 | <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p> |
|
12 | 12 | <p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen? %> |
|
13 | 13 | <% unless @project.identifier_frozen? %> |
|
14 |
<br /><em><%= l(:text_length_between, |
|
|
14 | <br /><em><%= l(:text_length_between, 2, 20) %> <%= l(:text_project_identifier_info) %></em> | |
|
15 | 15 | <% end %></p> |
|
16 | 16 | <p><%= f.text_field :homepage, :size => 60 %></p> |
|
17 | 17 | <p><%= f.check_box :is_public %></p> |
@@ -696,3 +696,5 label_user_activity: "%s's activity" | |||
|
696 | 696 | label_updated_time_by: Updated by %s %s ago |
|
697 | 697 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
698 | 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 | 697 | label_updated_time_by: Updated by %s %s ago |
|
698 | 698 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
699 | 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 | 701 | label_updated_time_by: Updated by %s %s ago |
|
702 | 702 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
703 | 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 | 697 | label_updated_time_by: Updated by %s %s ago |
|
698 | 698 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
699 | 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 | 698 | enumeration_issue_priorities: Ticket-Prioritäten |
|
699 | 699 | enumeration_doc_categories: Dokumentenkategorien |
|
700 | 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 | 85 | error_scm_annotate: "The entry does not exist or can not be annotated." |
|
86 | 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 | 90 | mail_subject_lost_password: Your %s password |
|
89 | 91 | mail_body_lost_password: 'To change your password, click on the following link:' |
|
90 | 92 | mail_subject_register: Your %s account activation |
@@ -660,7 +662,8 text_status_changed_by_changeset: Applied in changeset %s. | |||
|
660 | 662 | text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?' |
|
661 | 663 | text_select_project_modules: 'Select modules to enable for this project:' |
|
662 | 664 | text_default_administrator_account_changed: Default administrator account changed |
|
663 |
text_file_repository_writable: |
|
|
665 | text_file_repository_writable: Attachments directory writable | |
|
666 | text_plugin_assets_writable: Plugin assets directory writable | |
|
664 | 667 | text_rmagick_available: RMagick available (optional) |
|
665 | 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 | 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 | 681 | text_user_wrote: '%s escribió:' |
|
682 | 682 | text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su contenido? |
|
683 | 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 | 696 | label_updated_time_by: Updated by %s %s ago |
|
697 | 697 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
698 | 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 | 85 | error_scm_annotate: "L'entrée n'existe pas ou ne peut pas être annotée." |
|
86 | 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 | 90 | mail_subject_lost_password: Votre mot de passe %s |
|
89 | 91 | mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant:' |
|
90 | 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 | 663 | text_select_project_modules: 'Selectionner les modules à activer pour ce project:' |
|
662 | 664 | text_default_administrator_account_changed: Compte administrateur par défaut changé |
|
663 | 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 | 667 | text_rmagick_available: Bibliothèque RMagick présente (optionnelle) |
|
665 | 668 | text_destroy_time_entries_question: %.02f heures ont été enregistrées sur les demandes à supprimer. Que voulez-vous faire ? |
|
666 | 669 | text_destroy_time_entries: Supprimer les heures |
@@ -694,3 +694,7 permission_edit_own_messages: ערוך הודעות של עצמך | |||
|
694 | 694 | permission_delete_own_messages: מחק הודעות של עצמך |
|
695 | 695 | label_user_activity: "הפעילות של %s" |
|
696 | 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 | 697 | label_updated_time_by: "Módosította %s ennyivel ezelőtt: %s" |
|
698 | 698 | text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.' |
|
699 | 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 | 696 | label_updated_time_by: Updated by %s %s ago |
|
697 | 697 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
698 | 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 | 697 | label_updated_time_by: Updated by %s %s ago |
|
698 | 698 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
699 | 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 | 696 | label_updated_time_by: %s가 %s 전에 변경 |
|
697 | 697 | text_diff_truncated: '... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.' |
|
698 | 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 | 698 | enumeration_issue_priorities: Darbo prioritetai |
|
699 | 699 | enumeration_doc_categories: Dokumento kategorijos |
|
700 | 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 | 698 | label_updated_time_by: Updated by %s %s ago |
|
699 | 699 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
700 | 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 | 697 | label_updated_time_by: Updated by %s %s ago |
|
698 | 698 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
699 | 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 | 715 | label_updated_time_by: Uaktualnione przez %s %s temu |
|
716 | 716 | text_diff_truncated: '... Ten plik różnic został przycięty ponieważ jest zbyt długi.' |
|
717 | 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 | 697 | label_updated_time_by: Updated by %s %s ago |
|
698 | 698 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
699 | 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 | 698 | label_updated_time_by: Actualizado por %s há %s |
|
699 | 699 | text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.' |
|
700 | 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 | 696 | label_updated_time_by: Updated by %s %s ago |
|
697 | 697 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
698 | 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 | 730 | text_wiki_destroy_confirmation: Вы уверены, что хотите удалить данную Wiki и все ее содержимое? |
|
731 | 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 | 702 | label_updated_time_by: Updated by %s %s ago |
|
703 | 703 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
704 | 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 | 697 | label_updated_time_by: Updated by %s %s ago |
|
698 | 698 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
699 | 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 | 697 | enumeration_issue_priorities: Ärendeprioriteter |
|
698 | 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 | 699 | label_updated_time_by: Updated by %s %s ago |
|
700 | 700 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
701 | 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 | 697 | label_updated_time_by: Updated by %s %s ago |
|
698 | 698 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
699 | 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 | 698 | label_updated_time_by: Updated by %s %s ago |
|
699 | 699 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
700 | 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 | 699 | label_updated_time_by: Updated by %s %s ago |
|
700 | 700 | text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
|
701 | 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 | 698 | enumeration_issue_priorities: 項目優先權 |
|
699 | 699 | enumeration_doc_categories: 文件分類 |
|
700 | 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 | 698 | enumeration_issue_priorities: 问题优先级 |
|
699 | 699 | enumeration_doc_categories: 文档类别 |
|
700 | 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 |
# |
|
|
1 | # Redmine - project management software | |
|
2 | 2 | # Copyright (C) 2006-2008 Jean-Philippe Lang |
|
3 | 3 | # |
|
4 | 4 | # This program is free software; you can redistribute it and/or |
@@ -33,9 +33,18 module Redmine | |||
|
33 | 33 | msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] |
|
34 | 34 | logger.debug "Receiving message #{message_id}" if logger && logger.debug? |
|
35 | 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 | 40 | imap.store(message_id, "+FLAGS", [:Seen, :Deleted]) |
|
37 | 41 | else |
|
42 | logger.debug "Message #{message_id} can not be processed" if logger && logger.debug? | |
|
38 | 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 | 48 | end |
|
40 | 49 | end |
|
41 | 50 | imap.expunge |
@@ -1,4 +1,4 | |||
|
1 |
# |
|
|
1 | # Redmine - project management software | |
|
2 | 2 | # Copyright (C) 2006-2008 Jean-Philippe Lang |
|
3 | 3 | # |
|
4 | 4 | # This program is free software; you can redistribute it and/or |
@@ -71,6 +71,11 Issue attributes control options: | |||
|
71 | 71 | allow_override=ATTRS allow email content to override attributes |
|
72 | 72 | specified by previous options |
|
73 | 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 | 80 | Examples: |
|
76 | 81 | # No project specified. Emails MUST contain the 'Project' keyword: |
@@ -95,7 +100,9 END_DESC | |||
|
95 | 100 | :ssl => ENV['ssl'], |
|
96 | 101 | :username => ENV['username'], |
|
97 | 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 | 107 | options = { :issue => {} } |
|
101 | 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 |
@@ -314,6 +314,14 div.flash.notice { | |||
|
314 | 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 | 325 | .nodata, .warning { |
|
318 | 326 | text-align: center; |
|
319 | 327 | background-color: #FFEBC1; |
General Comments 0
You need to be logged in to leave comments.
Login now