@@ -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 => |
|
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, |
|
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: |
|
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 |
# |
|
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 |
# |
|
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