From 935d17ab7e44f188c1e4ce074b539220b62a7892 Mon Sep 17 00:00:00 2001 From: Karel Picman Date: Wed, 9 Dec 2015 15:32:13 +0100 Subject: [PATCH] Append File Revision on filename when downloading file #44 --- app/controllers/dmsf_controller.rb | 7 ++-- app/controllers/dmsf_files_controller.rb | 14 ++++---- app/controllers/dmsf_state_controller.rb | 18 ++++++++-- app/models/dmsf_file.rb | 8 +++++ app/models/dmsf_file_revision.rb | 16 +++++++++ app/views/dmsf_state/_user_pref.html.erb | 39 +++++++++++++--------- app/views/settings/_dmsf_settings.html.erb | 3 +- config/locales/cs.yml | 3 ++ config/locales/de.yml | 5 ++- config/locales/en.yml | 5 ++- config/locales/es.yml | 5 ++- config/locales/fr.yml | 5 ++- config/locales/ja.yml | 5 ++- config/locales/pl.yml | 5 ++- config/locales/pt-BR.yml | 5 ++- config/locales/ru.yml | 5 ++- config/locales/sl.yml | 5 ++- config/locales/zh-TW.yml | 5 ++- config/locales/zh.yml | 3 ++ config/routes.rb | 2 +- db/migrate/20151209100001_title_format.rb | 29 ++++++++++++++++ lib/dmsf_zip.rb | 10 +++--- 22 files changed, 158 insertions(+), 44 deletions(-) create mode 100644 db/migrate/20151209100001_title_format.rb diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 52433465..1c9deea9 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -30,7 +30,7 @@ class DmsfController < ApplicationController before_filter :find_project before_filter :authorize before_filter :find_folder, :except => [:new, :create, :edit_root, :save_root] - before_filter :find_parent, :only => [:new, :create] + before_filter :find_parent, :only => [:new, :create] accept_api_auth :show, :create @@ -489,11 +489,12 @@ class DmsfController < ApplicationController end def zip_entries(zip, selected_folders, selected_files) + member = Member.where(:user_id => User.current.id, :project_id => @project.id).first if selected_folders && selected_folders.is_a?(Array) selected_folders.each do |selected_folder_id| folder = DmsfFolder.visible.find_by_id selected_folder_id if folder - zip.add_folder(folder, (folder.folder.dmsf_path_str if folder.folder)) + zip.add_folder(folder, member, (folder.folder.dmsf_path_str if folder.folder)) else raise FileNotFound end @@ -506,7 +507,7 @@ class DmsfController < ApplicationController raise DmsfAccessError end if file && file.last_revision && File.exists?(file.last_revision.disk_file) - zip.add_file(file, (file.folder.dmsf_path_str if file.folder)) if file + zip.add_file(file, member, (file.folder.dmsf_path_str if file.folder)) if file else raise FileNotFound end diff --git a/app/controllers/dmsf_files_controller.rb b/app/controllers/dmsf_files_controller.rb index 7bed7c94..395e7d54 100644 --- a/app/controllers/dmsf_files_controller.rb +++ b/app/controllers/dmsf_files_controller.rb @@ -26,7 +26,7 @@ class DmsfFilesController < ApplicationController before_filter :find_file, :except => [:delete_revision] before_filter :find_revision, :only => [:delete_revision] - before_filter :authorize + before_filter :authorize accept_api_auth :show @@ -52,8 +52,9 @@ class DmsfFilesController < ApplicationController access.revision = @revision access.action = DmsfFileRevisionAccess::DownloadAction access.save! - send_file(@revision.disk_file, - :filename => filename_for_content_disposition(@revision.name), + member = Member.where(:user_id => User.current.id, :project_id => @file.project.id).first + send_file(@revision.disk_file, + :filename => filename_for_content_disposition(@revision.formatted_name(member ? member.title_format : nil)), :type => @revision.detect_content_type, :disposition => 'inline') rescue ActionController::MissingFile @@ -82,8 +83,9 @@ class DmsfFilesController < ApplicationController access.revision = @revision access.action = DmsfFileRevisionAccess::DownloadAction access.save! - send_file(@revision.disk_file, - :filename => filename_for_content_disposition(@revision.name), + member = Member.where(:user_id => User.current.id, :project_id => @file.project.id).first + send_file(@revision.disk_file, + :filename => filename_for_content_disposition(@revision.formatted_name(member ? member.title_format : nil)), :type => @revision.detect_content_type, :disposition => 'attachment') rescue ActionController::MissingFile @@ -319,7 +321,7 @@ class DmsfFilesController < ApplicationController rescue ActiveRecord::RecordNotFound render_404 end - + def check_project(entry) if entry && entry.project != @project raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project) diff --git a/app/controllers/dmsf_state_controller.rb b/app/controllers/dmsf_state_controller.rb index 19eaf5e9..17dd7239 100644 --- a/app/controllers/dmsf_state_controller.rb +++ b/app/controllers/dmsf_state_controller.rb @@ -1,7 +1,9 @@ +# encoding: utf-8 +# # Redmine plugin for Document Management System "Features" # # Copyright (C) 2011 Vít Jonáš -# Copyright (C) 2011-14 Karel Pičman +# Copyright (C) 2011-15 Karel Pičman # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -29,12 +31,22 @@ class DmsfStateController < ApplicationController member = @project.members.where(:user_id => User.current.id).first if member member.dmsf_mail_notification = params[:email_notify] - member.save! - flash[:notice] = l(:notice_your_preferences_were_saved) + member.title_format = params[:title_format] + if format_valid?(member.title_format) && member.save + flash[:notice] = l(:notice_your_preferences_were_saved) + else + flash[:error] = l(:notice_your_preferences_were_not_saved) + end else flash[:warning] = l(:user_is_not_project_member) end redirect_to settings_project_path(@project, :tab => 'dmsf') end + + private + + def format_valid?(format) + format.blank? || ((format =~ /%(t|d|v|i|r)/) && format.length < 256) + end end \ No newline at end of file diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 20b3edf6..ec446bde 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -428,5 +428,13 @@ class DmsfFile < ActiveRecord::Base end result end + + def formatted_name(format) + if self.last_revision + self.last_revision.formatted_name(format) + else + self.name + end + end end \ No newline at end of file diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index d168db8d..c8d5e909 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -247,5 +247,21 @@ class DmsfFileRevision < ActiveRecord::Base parts = self.version.split '.' parts.size == 2 ? parts[0].to_i * 1000 + parts[1].to_i : 0 end + + def formatted_name(format) + return self.name if format.blank? + if self.name =~ /(.*)(\..*)$/ + filename = $1 + ext = $2 + else + filename = self.name + end + format.sub!('%t', filename) + format.sub!('%d', self.updated_at.strftime('%Y%m%d%H%M%S')) + format.sub!('%v', self.version) + format.sub!('%i', self.file.id.to_s) + format.sub!('%r', self.id.to_s) + format + ext + end end diff --git a/app/views/dmsf_state/_user_pref.html.erb b/app/views/dmsf_state/_user_pref.html.erb index 1855467a..20db82ae 100644 --- a/app/views/dmsf_state/_user_pref.html.erb +++ b/app/views/dmsf_state/_user_pref.html.erb @@ -18,19 +18,28 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%> -

<%=l(:link_user_preferences)%>

-
- <%= form_tag({:controller => 'dmsf_state', :action => 'user_pref_save', :id => @project}, :method => :post) do %> -
- <% member = @project.members.where(:user_id => User.current.id).first %> - <% mail_notification = member ? member.dmsf_mail_notification : nil %> - <%= l(:label_notifications) %>: +<% member = @project.members.where(:user_id => User.current.id).first %> +<% if member %> + <% mail_notification = member.dmsf_mail_notification %> + <% title_format = member.title_format %> +<% end %> + +<%= form_tag(dmsf_user_pref_save_path(@project)) do %> +
+ <%= l(:link_user_preferences) %> +

+ <%= content_tag(:label, "#{l(:label_notifications)}:") %> <%= select_tag( - 'email_notify', - options_for_select([[l(:select_option_default), nil], - [l(:select_option_activated), true], [l(:select_option_deactivated), false]], - :selected => mail_notification)) %> - <%= submit_tag(l(:submit_save), :title => l(:title_save_preferences)) %> -

- <% end %> -
\ No newline at end of file + 'email_notify', + options_for_select([[l(:select_option_default), nil], + [l(:select_option_activated), true], [l(:select_option_deactivated), false]], + :selected => mail_notification)) %> +

+

+ <%= content_tag(:label, "#{l(:label_title_format)}:") %> + <%= text_field_tag 'title_format', title_format, :size => 10 %> + <%= l(:text_title_format) %> +

+ + <%= submit_tag(l(:submit_save), :title => l(:title_save_preferences)) %> +<% end %> \ No newline at end of file diff --git a/app/views/settings/_dmsf_settings.html.erb b/app/views/settings/_dmsf_settings.html.erb index a6ec48af..4c74c7e0 100644 --- a/app/views/settings/_dmsf_settings.html.erb +++ b/app/views/settings/_dmsf_settings.html.erb @@ -155,7 +155,8 @@ <%= text_field_tag 'settings[dmsf_stemming_lang]', @settings['dmsf_stemming_lang'], :disabled => xapian_disabled %>
(<%= l(:label_default)%>: english )

- <%= l(:note_possible_values)%>: danish dutch english finnish french german german2 hungarian italian kraaij_pohlmann lovins norwegian porter portuguese romanian russian spanish swedish turkish (<%= l(:note_pass_none_to_disable_stemming) %>)

+ <%= l(:note_possible_values)%>: danish dutch english finnish french german german2 hungarian italian kraaij_pohlmann lovins norwegian porter portuguese romanian russian spanish swedish turkish (<%= l(:note_pass_none_to_disable_stemming) %>) +

<%= content_tag(:label, l(:label_stem_strategy) + ":")%> diff --git a/config/locales/cs.yml b/config/locales/cs.yml index b2af508a..aa9611de 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -50,6 +50,7 @@ cs: notice_file_unlocked: Soubor byl odemčen notice_file_revision_created: vytvořena nová revize notice_your_preferences_were_saved: Vaše nastavení bylo uloženo + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Notifikace složky již byly aktivovány notice_folder_notifications_activated: Notifikace složky byly aktivovány warning_folder_notifications_already_deactivated: Notifikace složky již byly deaktivovány @@ -107,6 +108,8 @@ cs: select_option_default: Výchozí select_option_deactivated: Deaktivováno select_option_activated: Aktivováno + label_title_format: Formát názvu + text_title_format: "Formát názvu souboru pro stažení (%t - název, %d - datum, %v- verze, %i - ID, %r - revize). Např.: %t_%v" title_save_preferences: Uložit nastavení heading_revisions: Revize title_download: Stáhnout diff --git a/config/locales/de.yml b/config/locales/de.yml index a296de18..593d04fa 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -40,7 +40,7 @@ de: notice_folder_deleted: Ordner gelöscht error_folder_is_not_empty: Ordner ist nicht leer error_folder_title_is_already_used: Titel wird schon benutzt. Denk dir was Neues aus. - notice_folder_details_were_saved: Ordnerdetails wurden gespeichert + notice_folder_details_were_saved: Ordnerdetails wurden gespeichert error_folder_is_locked: Ordner ist gesperrt error_file_is_locked: Datei ist gesperrt notice_file_deleted: Datei gelöscht @@ -50,6 +50,7 @@ de: notice_file_unlocked: Dateisperre gelöst notice_file_revision_created: Dateiversion erstellt notice_your_preferences_were_saved: Deine Einstellungen wurden gespeichert + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Ordnerbenachrichtigungen sind schon aktiviert notice_folder_notifications_activated: Ordnerbenachrichtigungen aktiviert warning_folder_notifications_already_deactivated: Ordnerbenachrichtigungen sind schon deaktiviert @@ -107,6 +108,8 @@ de: select_option_default: Voreinstellung select_option_deactivated: Aus select_option_activated: Ein + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: Einstellungen speichern heading_revisions: Versionen title_download: Download diff --git a/config/locales/en.yml b/config/locales/en.yml index 7ffcb80c..f7e664ed 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -40,7 +40,7 @@ en: notice_folder_deleted: Folder deleted error_folder_is_not_empty: Folder is not empty error_folder_title_is_already_used: Title is already used - notice_folder_details_were_saved: Folder details were saved + notice_folder_details_were_saved: Folder details were saved error_folder_is_locked: Folder is locked error_file_is_locked: File is locked notice_file_deleted: File deleted @@ -50,6 +50,7 @@ en: notice_file_unlocked: File unlocked notice_file_revision_created: File revision created notice_your_preferences_were_saved: Your preferences were saved + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Folder notifications already activated notice_folder_notifications_activated: Folder notifications activated warning_folder_notifications_already_deactivated: Folder notifications already deactivated @@ -107,6 +108,8 @@ en: select_option_default: Default select_option_deactivated: Deactivated select_option_activated: Activated + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: Save preferences heading_revisions: Revisions title_download: Download diff --git a/config/locales/es.yml b/config/locales/es.yml index 7e7d4fce..76477838 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -40,7 +40,7 @@ es: notice_folder_deleted: Carpeta borrada error_folder_is_not_empty: La carpeta no está vacía error_folder_title_is_already_used: El título ingresado ya está siendo usado por otro documento - notice_folder_details_were_saved: Los detalles de la carpeta fueron grabados correctamente + notice_folder_details_were_saved: Los detalles de la carpeta fueron grabados correctamente error_folder_is_locked: Carpeta bloqueado error_file_is_locked: Archivo bloqueado notice_file_deleted: Archivo borrado @@ -50,6 +50,7 @@ es: notice_file_unlocked: Archivo desbloqueado notice_file_revision_created: Revision de archivos creada correctamente notice_your_preferences_were_saved: Sus preferencias han sido guardadas correctamente + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Las notificaciones de la carpeta seleccionada ya están activadas previamente notice_folder_notifications_activated: Notificaciones de carpeta activadas warning_folder_notifications_already_deactivated: Las notificaciones de la carpeta seleccionada ya están desactivadas previamente @@ -107,6 +108,8 @@ es: select_option_default: Default select_option_deactivated: Desactivado select_option_activated: Activado + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: Guardar Preferencias heading_revisions: Revisiones title_download: Descargar diff --git a/config/locales/fr.yml b/config/locales/fr.yml index f70d2df3..579101ad 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -40,7 +40,7 @@ fr: notice_folder_deleted: Dossier supprimé error_folder_is_not_empty: "Le dossier n'est pas vide" error_folder_title_is_already_used: Le titre du fichier est déjà utilisé - notice_folder_details_were_saved: Les détails du dossier ont été enregistrés + notice_folder_details_were_saved: Les détails du dossier ont été enregistrés error_folder_is_locked: Le dossier est verrouillé error_file_is_locked: Le fichier est verrouillé notice_file_deleted: Le fichier a été supprimé @@ -50,6 +50,7 @@ fr: notice_file_unlocked: Fichier déverrouillé notice_file_revision_created: La révision du fichier a été ajoutée notice_your_preferences_were_saved: Vos paramètres ont été enregistrés + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Les notifications du dossier sont déjà activées notice_folder_notifications_activated: Les notifications du dossier ont été activées warning_folder_notifications_already_deactivated: Les notifications du dossier sont déjà désactivées @@ -107,6 +108,8 @@ fr: select_option_default: Défaut select_option_deactivated: Désactivé select_option_activated: Activé + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: Enregistrer les préférences heading_revisions: Révisions title_download: Télécharger diff --git a/config/locales/ja.yml b/config/locales/ja.yml index c356fa46..4075cc31 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -40,7 +40,7 @@ ja: notice_folder_deleted: フォルダを削除しました error_folder_is_not_empty: フォルダが空ではありません error_folder_title_is_already_used: タイトルは既に使われています - notice_folder_details_were_saved: フォルダの詳細を保存しました + notice_folder_details_were_saved: フォルダの詳細を保存しました error_folder_is_locked: Folder is locked error_file_is_locked: ファイルはロックされています notice_file_deleted: ファイルを削除しました @@ -50,6 +50,7 @@ ja: notice_file_unlocked: ファイルをロック解除しました notice_file_revision_created: ファイルのリビジョンを作成しました notice_your_preferences_were_saved: あなたの設定を保存しました + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: フォルダ通知は既に有効です notice_folder_notifications_activated: フォルダ通知を有効にしました warning_folder_notifications_already_deactivated: フォルダ通知は既に無効です @@ -107,6 +108,8 @@ ja: select_option_default: 既定値 select_option_deactivated: 無効 select_option_activated: 有効 + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: 設定を保存します heading_revisions: リビジョン title_download: ダウンロードします diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 0173bc46..7479a3d7 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -40,7 +40,7 @@ pl: error_folder_title_must_be_entered: Musisz podać tytuł notice_folder_deleted: Folder został usunięty error_folder_is_not_empty: Folder zawiera pliki - error_folder_title_is_already_used: Podany tytuł jest już w użyciu + error_folder_title_is_already_used: Podany tytuł jest już w użyciu notice_folder_details_were_saved: Szczegóły folderu zostały zapisane error_folder_is_locked: Folder jest zablokowany error_file_is_locked: Plik jest zablokowany @@ -51,6 +51,7 @@ pl: notice_file_unlocked: Plik odblokowany notice_file_revision_created: Utworzono wersję pliku notice_your_preferences_were_saved: Twoje preferencje zostały zapisane + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Powiadomienia dla folderu zostały już aktywowane notice_folder_notifications_activated: Aktywowano powiadomienia dla folderu warning_folder_notifications_already_deactivated: Powiadomienia dla folderu zostały już wyłączone @@ -107,6 +108,8 @@ pl: label_notifications: Powiadomienia select_option_default: Domyślny select_option_deactivated: Wyłączono + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" select_option_activated: Aktywowano title_save_preferences: Zapisz ustawienia heading_revisions: Wersje diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index f2246365..72515edd 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -40,7 +40,7 @@ pt-BR: notice_folder_deleted: Pasta deletada error_folder_is_not_empty: Pasta não está vazia error_folder_title_is_already_used: Título já utilizado - notice_folder_details_were_saved: Pasta atualizada + notice_folder_details_were_saved: Pasta atualizada error_folder_is_locked: Pasta está bloqueada error_file_is_locked: Arquivo está bloqueado notice_file_deleted: Arquivo excluído @@ -50,6 +50,7 @@ pt-BR: notice_file_unlocked: Arquivo desbloqueado notice_file_revision_created: Revisão do arquivo criado notice_your_preferences_were_saved: Suas atualizações foram salvas + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Notificações de pasta atualizadas notice_folder_notifications_activated: Notificações da pasta ativas warning_folder_notifications_already_deactivateNd: Notificações da pasta desativadas @@ -107,6 +108,8 @@ pt-BR: select_option_default: Padrão select_option_deactivated: Desativado select_option_activated: Ativado + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: Salvar preferências heading_revisions: Revisões title_download: Download diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 287f4817..d5554240 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -40,7 +40,7 @@ ru: notice_folder_deleted: Папка удалена error_folder_is_not_empty: Папка не пустая error_folder_title_is_already_used: Название папки уже используется - notice_folder_details_were_saved: Описание папки было сохранено + notice_folder_details_were_saved: Описание папки было сохранено error_folder_is_locked: Папка заблокированa error_file_is_locked: Файл заблокирован notice_file_deleted: Файл удален @@ -50,6 +50,7 @@ ru: notice_file_unlocked: Файл разблокирован notice_file_revision_created: Редакция файла создана notice_your_preferences_were_saved: Ваши настройки были сохранены + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Уведомления папки уже включены notice_folder_notifications_activated: Уведомления папки включены warning_folder_notifications_already_deactivated: Уведомления папки уже отключены @@ -107,6 +108,8 @@ ru: select_option_default: По умолчанию select_option_deactivated: Отключено select_option_activated: Включено + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: Сохранить настройки heading_revisions: Редакции title_download: Скачать diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 367448a6..10985f44 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -40,7 +40,7 @@ sl: notice_folder_deleted: Mapa izbrisana error_folder_is_not_empty: Mapa ni prazna error_folder_title_is_already_used: Naslov je že uporabljen - notice_folder_details_were_saved: Podatki o mapi so shranjeni + notice_folder_details_were_saved: Podatki o mapi so shranjeni error_folder_is_locked: Папка заблокированa error_file_is_locked: Mapa je zaklenjena notice_file_deleted: Datoteka izbrisana @@ -50,6 +50,7 @@ sl: notice_file_unlocked: Datoteka odklenjena notice_file_revision_created: Verzija datoteke kreirana notice_your_preferences_were_saved: Vaše nastavitve so shranjene + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: Obveščanje o mapi je že aktivno notice_folder_notifications_activated: Obveščanje o mapi je aktivirano warning_folder_notifications_already_deactivated: Obveščanje o mapi je že neaktivno @@ -107,6 +108,8 @@ sl: select_option_default: Privzeto select_option_deactivated: Deaktivirano select_option_activated: Aktivirano + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: Save preferences heading_revisions: Verzije title_download: Prenesi dol diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 0048307d..06b4e525 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -40,7 +40,7 @@ zh-TW: notice_folder_deleted: 資料夾己刪除 error_folder_is_not_empty: 資料夾尚未清空 error_folder_title_is_already_used: 標題己經被使用了 - notice_folder_details_were_saved: 資料夾描述己儲存 + notice_folder_details_were_saved: 資料夾描述己儲存 error_folder_is_locked: 資料夾己經鎖定 error_file_is_locked: 檔案己經被鎖定了 notice_file_deleted: 檔案己經被刪除了 @@ -50,6 +50,7 @@ zh-TW: notice_file_unlocked: 檔案己經解除鎖定 notice_file_revision_created: 檔案修訂版本己建立 notice_your_preferences_were_saved: 您的偏好設定己經儲存 + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: 資料夾通知己經啟用了 notice_folder_notifications_activated: 資料夾通知啟用了 warning_folder_notifications_already_deactivated: 資料夾通知己經關閉了 @@ -107,6 +108,8 @@ zh-TW: select_option_default: 預設 select_option_deactivated: 關閉 select_option_activated: 啟用 + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" title_save_preferences: 儲存偏好設定 heading_revisions: 修訂版本 title_download: 下載 diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 1b19ddba..72d44211 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -50,6 +50,7 @@ zh: notice_file_unlocked: 文件解锁 notice_file_revision_created: 文件修订版本已创建 notice_your_preferences_were_saved: 您的偏好设定已保存 + notice_your_preferences_were_not_saved: Your preferences were not saved warning_folder_notifications_already_activated: 文件夹通知已激活 notice_folder_notifications_activated: 文件夹通知激活 warning_folder_notifications_already_deactivated: 文件夹通知已注销 @@ -108,6 +109,8 @@ zh: select_option_deactivated: 注销 select_option_activated: 激活 title_save_preferences: 保存偏好设定 + label_title_format: Title format + text_title_format: "Document title format for download (%t - title, %d - date, %v- version, %i - ID, %r - revision). Example: %t_%v" heading_revisions: 修订版本 title_download: 下载 title_delete_revision: 删除此修订 diff --git a/config/routes.rb b/config/routes.rb index ab597dfe..04dd9e33 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -49,7 +49,7 @@ RedmineApp::Application.routes.draw do # dmsf_state controller # /projects//dmsf/state ## - post '/projects/:id/dmsf/state', :controller => 'dmsf_state', :action => 'user_pref_save' + post '/projects/:id/dmsf/state', :controller => 'dmsf_state', :action => 'user_pref_save', :as => 'dmsf_user_pref_save' # # dmsf_upload controller diff --git a/db/migrate/20151209100001_title_format.rb b/db/migrate/20151209100001_title_format.rb new file mode 100644 index 00000000..1ace097d --- /dev/null +++ b/db/migrate/20151209100001_title_format.rb @@ -0,0 +1,29 @@ +# encoding: utf-8 +# +# Redmine plugin for Document Management System "Features" +# +# Copyright (C) 2015 Karel Pičman +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +class TitleFormat < ActiveRecord::Migration + def self.up + add_column :members, :title_format, :text, :null => true, :limit => 100 + end + + def self.down + remove_column :members, :title_format + end +end \ No newline at end of file diff --git a/lib/dmsf_zip.rb b/lib/dmsf_zip.rb index 2b0dcb3e..477345fd 100644 --- a/lib/dmsf_zip.rb +++ b/lib/dmsf_zip.rb @@ -39,10 +39,10 @@ class DmsfZip @zip.close if @zip end - def add_file(file, root_path = nil) + def add_file(file, member, root_path = nil) string_path = file.folder.nil? ? '' : "#{file.folder.dmsf_path_str}/" - string_path = string_path[(root_path.length + 1) .. string_path.length] if root_path - string_path += file.name + string_path = string_path[(root_path.length + 1) .. string_path.length] if root_path + string_path += file.formatted_name(member ? member.title_format : nil) @zip_file.put_next_entry(string_path) File.open(file.last_revision.disk_file, 'rb') do |f| while (buffer = f.read(8192)) @@ -52,12 +52,12 @@ class DmsfZip @files << file end - def add_folder(folder, root_path = nil) + def add_folder(folder, member, root_path = nil) string_path = "#{folder.dmsf_path_str}/" string_path = string_path[(root_path.length + 1) .. string_path.length] if root_path @zip_file.put_next_entry(string_path) folder.subfolders.visible.each { |subfolder| self.add_folder(subfolder, root_path) } - folder.files.visible.each { |file| self.add_file(file, root_path) } + folder.files.visible.each { |file| self.add_file(file, member, root_path) } end end