Possibility of Obsolete an Approved Version of a Document #798

This commit is contained in:
Karel Pičman 2018-06-18 12:14:11 +02:00
parent 3814501601
commit e677057a50
22 changed files with 80 additions and 10 deletions

View File

@ -40,8 +40,8 @@ def init
:dmsf_folders_copy => [:new, :copy, :move],
:dmsf_context_menus => [:dmsf]}
pmap.permission :file_manipulation,
{:dmsf_files => [:create_revision, :lock, :unlock, :delete_revision, :obsolete_revision, :notify_activate,
:notify_deactivate, :restore],
{:dmsf_files => [:create_revision, :lock, :unlock, :delete_revision, :obsolete_revision,
:notify_activate, :notify_deactivate, :restore],
:dmsf_upload => [:upload_files, :upload_file, :upload, :commit_files, :commit,
:delete_dmsf_attachment, :delete_dmsf_link_attachment],
:dmsf_links => [:new, :create, :destroy, :restore, :autocomplete_for_project,

View File

@ -248,7 +248,6 @@ class DmsfFilesController < ApplicationController
if @revision
if @revision.obsolete()
flash[:notice] = l(:notice_revision_obsoleted)
log_activity('obsoleted')
else
flash[:error] = @revision.errors.full_messages.join(', ')
end

View File

@ -114,7 +114,6 @@ class DmsfFileRevision < ActiveRecord::Base
errors[:base] << l(:error_file_is_locked)
return false
end
self.workflow = DmsfWorkflow::STATE_OBSOLETE
save
end

View File

@ -119,7 +119,7 @@
<% end %>
<% classes = 'dmsf_gray hascontextmenu' %>
<% @file_links.each do |link| %>
<% unless link.target_file.last_revision %>
<% unless link.target_file && link.target_file.last_revision %>
<% Rails.logger.error "Error: dmsf_file id #{link.target_id} has no revision!" %>
<% next %>
<% end %>

View File

@ -25,7 +25,7 @@
<% html_title(l(:dmsf)) %>
<div class="contextual">
<% if User.current.allowed_to?(:file_manipulation, @project) %>
<% if @file_manipulation_allowed %>
<% unless @file.locked_for_user? %>
<% unless @file.locked? %>
<%= link_to(l(:button_lock), lock_dmsf_files_path(:id => @file),
@ -64,7 +64,7 @@
<%= render(:partial => '/dmsf/path',
:locals => {:folder => @file.dmsf_folder, :filename => @file.title, :title => nil}) %>
<% if User.current.allowed_to?(:file_manipulation, @file.project) && !@file.locked_for_user? %>
<% if @file_manipulation_allowed && !@file.locked_for_user? %>
<%= error_messages_for('file') %>
<%= error_messages_for('revision') %>
<%= render(:partial => 'file_new_revision') %>
@ -94,7 +94,7 @@
<%= link_to image_tag('/../../plugin_assets/redmine_dmsf/images/obsolete.png'),
obsolete_revision_path(revision),
:data => {:confirm => l(:text_are_you_sure)},
:title => l(:title_obsolete_revision) if @file_delete_allowed && (revision.workflow == DmsfWorkflow::STATE_APPROVED) %>
:title => l(:title_obsolete_revision) if @file_manipulation_allowed && (revision.workflow == DmsfWorkflow::STATE_APPROVED) %>
</div>
<i><%= l(:info_revision, :rev => revision.id) %></i>
<%= (revision.source_revision.nil? ? l(:label_created) : l(:label_changed)).downcase %>
@ -174,7 +174,7 @@
</div>
</div>
<div id="<%= "revision_access-#{revision.id}" %>" style="display:none">
<%= render(:partial => 'revision_access', :locals => {:revision => revision}) if User.current.allowed_to?(:file_manipulation, @file.project) %>
<%= render(:partial => 'revision_access', :locals => {:revision => revision}) if @file_manipulation_allowed %>
</div>
</div>
</div>

View File

@ -48,6 +48,7 @@ cs:
notice_file_deleted: Soubor byl smazán
error_at_least_one_revision_must_be_present: Musí existovat alespoň jedna revize
notice_revision_deleted: Revize byla smazána
notice_revision_obsoleted: Revize je zastaralá
warning_one_of_files_locked: Jeden ze souborů je zamčen
notice_file_revision_created: vytvořena nová revize
notice_your_preferences_were_saved: Vaše nastavení bylo uloženo
@ -115,6 +116,7 @@ cs:
heading_revisions: Revize
title_download: Stáhnout
title_delete_revision: Smazat revizi
title_obsolete_revision: Označit revizi jako zastaralou
label_created: Vytvořeno
label_changed: Změněno
info_changed_by_user: "%{changed} uživatelem"
@ -269,6 +271,7 @@ cs:
title_assigned: Přiřazený
title_approval: Schválený
title_rejected: Zamítnutý
title_obsolete: Zastaralá
dmsf_and: A
dmsf_or: NEBO
dmsf_new_step: Nový krok

View File

@ -48,6 +48,7 @@ de:
notice_file_deleted: Datei gelöscht
error_at_least_one_revision_must_be_present: Es muss mindestens eine Version existieren
notice_revision_deleted: Version gelöscht
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Eine der Dateien ist gesperrt
notice_file_revision_created: Dateiversion erstellt
notice_your_preferences_were_saved: Deine Einstellungen wurden gespeichert
@ -115,6 +116,7 @@ de:
heading_revisions: Versionen
title_download: Download
title_delete_revision: Lösche Version
title_obsolete_revision: Obsolete revision
label_created: Erstellt
label_changed: Geändert
info_changed_by_user: "%{changed} von"
@ -269,6 +271,7 @@ de:
title_assigned: Zugewiesen
title_approval: Genehmigt
title_rejected: Abgelehnt
title_obsolete: Obsolete
dmsf_and: UND
dmsf_or: ODER
dmsf_new_step: Neuer Schritt

View File

@ -166,7 +166,6 @@ en:
permission_display_system_folders: Display system folders
permission_file_approval: File approval
permission_email_documents: Email documents
label_file: File
field_folder: Folder
error_create_cycle_in_folder_dependency: create cycle in folder dependency

View File

@ -48,6 +48,7 @@ fr:
notice_file_deleted: Le fichier a été supprimé
error_at_least_one_revision_must_be_present: Au moins une révision est requise
notice_revision_deleted: Révision supprimée
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Un des fichiers sélectionnés est 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
@ -115,6 +116,7 @@ fr:
heading_revisions: Révisions
title_download: Télécharger
title_delete_revision: Supprimer la révision
title_obsolete_revision: Obsolete revision
label_created: Créé
label_changed: Modifié
info_changed_by_user: "%{changed} par"
@ -269,6 +271,7 @@ fr:
title_assigned: Assigné
title_approval: Approbation
title_rejected: Rejeté
title_obsolete: Obsolete
dmsf_and: ET
dmsf_or: OU
dmsf_new_step: Nouvelle étape

View File

@ -48,6 +48,7 @@ hu:
notice_file_deleted: Törölt fájl
error_at_least_one_revision_must_be_present: Legalább egy verziónak szükséges lennie
notice_revision_deleted: Verzió törölve
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Az egyik fájl zárolva van
notice_file_revision_created: Fájl verzió létrehozva
notice_your_preferences_were_saved: A preferenciái mentése kerültek
@ -115,6 +116,7 @@ hu:
heading_revisions: Verziók
title_download: Letöltés
title_delete_revision: Verzió törlése
title_obsolete_revision: Obsolete revision
label_created: Létrehozott
label_changed: Változtatott
info_changed_by_user: "%{changed} általa"
@ -269,6 +271,7 @@ hu:
title_assigned: Kiosztott
title_approval: Jóváhagyás
title_rejected: Visszautasított
title_obsolete: Obsolete
dmsf_and: ÉS
dmsf_or: VAGY
dmsf_new_step: Új lépés

View File

@ -48,6 +48,7 @@ it: # Italian strings thx 2 Matteo Arceci!
notice_file_deleted: Il documento è stato cancellato
error_at_least_one_revision_must_be_present: Deve essere presente almeno una revisione
notice_revision_deleted: Revisione cancellata
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Uno dei documenti è bloccato
notice_file_revision_created: Revisione del documento creata
notice_your_preferences_were_saved: Le tue preferenze sono state salvate
@ -115,6 +116,7 @@ it: # Italian strings thx 2 Matteo Arceci!
heading_revisions: Revisioni
title_download: Download
title_delete_revision: Cancella revisione
title_obsolete_revision: Obsolete revision
label_created: Creato
label_changed: Modificato
info_changed_by_user: "%{changed} da"
@ -269,6 +271,7 @@ it: # Italian strings thx 2 Matteo Arceci!
title_assigned: Assegnato
title_approval: Approvazione
title_rejected: Rifiutato
title_obsolete: Obsolete
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: Nuovo passo

View File

@ -49,6 +49,7 @@ ja:
error_at_least_one_revision_must_be_present: 少なくとも1つのリビジョンが必要です
notice_revision_deleted: リビジョンを削除しました
warning_one_of_files_locked: ファイルのうちの1つがロックされています
notice_revision_obsoleted: Revision obsoleted
notice_file_revision_created: ファイルのリビジョンを作成しました
notice_your_preferences_were_saved: あなたの設定を保存しました
notice_your_preferences_were_not_saved: Your preferences were not saved
@ -115,6 +116,7 @@ ja:
heading_revisions: リビジョン
title_download: ダウンロードします
title_delete_revision: リビジョンを削除します
title_obsolete_revision: Obsolete revision
label_created: 作成者/日時
label_changed: 更新者/日時
info_changed_by_user: "/ %{changed}"
@ -269,6 +271,7 @@ ja:
title_assigned: アサイン
title_approval: 承認
title_rejected: 否認
title_obsolete: Obsolete
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: 新規ステップ

View File

@ -49,6 +49,7 @@ ko:
error_at_least_one_revision_must_be_present: 적어도 한개의 수정사항이 있어야 합니다
notice_revision_deleted: 수정사항 삭제됨
warning_one_of_files_locked: 파일 중 한개가 잠겨있습니다
notice_revision_obsoleted: Revision obsoleted
notice_file_revision_created: 수정된 파일이 생성되었습니다
notice_your_preferences_were_saved: 사용자의 선호도가 저장되었습니다
notice_your_preferences_were_not_saved: 사용자의 선호도는 저장되지 않았습니다
@ -115,6 +116,7 @@ ko:
heading_revisions: 수정
title_download: 다운로드
title_delete_revision: 수정사항 삭제
title_obsolete_revision: Obsolete revision
label_created: 생성됨
label_changed: 변경됨
info_changed_by_user: "가 %{changed}함"
@ -269,6 +271,7 @@ ko:
title_assigned: 할당됨
title_approval: 승인
title_rejected: 반려
title_obsolete: Obsolete
dmsf_and:
dmsf_or: 혹은
dmsf_new_step: 새로운 스텝

View File

@ -48,6 +48,7 @@ nl:
notice_file_deleted: Map verwijderd
error_at_least_one_revision_must_be_present: Er moet ten minste een revisie aanwezig zijn
notice_revision_deleted: Revisie verwijderd
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Een van de bestanden vergrendeld
notice_file_revision_created: Bestandsrevisie aangemaakt
notice_your_preferences_were_saved: Uw voorkeuren zijn opgeslagen
@ -115,6 +116,7 @@ nl:
heading_revisions: Revisies
title_download: Downloaden
title_delete_revision: Verwijder revisie
title_obsolete_revision: Obsolete revision
label_created: Aangemaakt
label_changed: Gewijzigd
info_changed_by_user: "%{changed} door"
@ -269,6 +271,7 @@ nl:
title_assigned: Toegewezen
title_approval: Goedkeuring
title_rejected: Afgewezen
title_obsolete: Obsolete
dmsf_and: EN
dmsf_or: OF
dmsf_new_step: Nieuwe stap

View File

@ -48,6 +48,7 @@ pl:
notice_file_deleted: Plik został usunięty
error_at_least_one_revision_must_be_present: Musi istnieć co najmniej jedna wersja
notice_revision_deleted: Wersja usunięta
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Jeden z plików jest zablokowany
notice_file_revision_created: Utworzono wersję pliku
notice_your_preferences_were_saved: Twoje preferencje zostały zapisane
@ -115,6 +116,7 @@ pl:
heading_revisions: Wersje
title_download: Pobierz
title_delete_revision: Usuń wersję
title_obsolete_revision: Obsolete revision
label_created: Utworzono
label_changed: Zmieniono
info_changed_by_user: "%{changed} przez"
@ -269,6 +271,7 @@ pl:
title_assigned: Przydzielony
title_approval: Akceptacja
title_rejected: Odrzucony
title_obsolete: Obsolete
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: Nowy krok

View File

@ -48,6 +48,7 @@ pt-BR:
notice_file_deleted: Arquivo excluído
error_at_least_one_revision_must_be_present: Deve existir pelo menos uma revisão
notice_revision_deleted: Revisão excluída
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Um dos arquivos bloqueados
notice_file_revision_created: Revisão do arquivo criado
notice_your_preferences_were_saved: Suas atualizações foram salvas
@ -115,6 +116,7 @@ pt-BR:
heading_revisions: Revisões
title_download: Download
title_delete_revision: Revisão excluída
title_obsolete_revision: Obsolete revision
label_created: Criado
label_changed: Alterado
info_changed_by_user: "%{changed} por"
@ -269,6 +271,7 @@ pt-BR:
title_assigned: Atribuído
title_approval: Aprovado
title_rejected: Rejeitado
title_obsolete: Obsolete
dmsf_and: E
dmsf_or: OU
dmsf_new_step: Novo passo

View File

@ -48,6 +48,7 @@ ru:
notice_file_deleted: Файл удален
error_at_least_one_revision_must_be_present: По крайней мере, одна редакция должна присутствовать
notice_revision_deleted: Редакция удалена
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Один из файлов заблокирован
notice_file_revision_created: Редакция файла создана
notice_your_preferences_were_saved: Ваши настройки были сохранены
@ -115,6 +116,7 @@ ru:
heading_revisions: Редакции
title_download: Скачать
title_delete_revision: Удалить редакцию
title_obsolete_revision: Obsolete revision
label_created: Создан
label_changed: Изменен
info_changed_by_user: "%{changed} пользователем"
@ -269,6 +271,7 @@ ru:
title_assigned: Назначен
title_approval: Согласован
title_rejected: Отклонен
title_obsolete: Obsolete
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: Новый шаг

View File

@ -48,6 +48,7 @@ sl:
notice_file_deleted: Datoteka izbrisana
error_at_least_one_revision_must_be_present: Vsaj ena verzija mora obstajati
notice_revision_deleted: Verzija izbrisana
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: Ena od datotek je zaklenjena
notice_file_revision_created: Verzija datoteke kreirana
notice_your_preferences_were_saved: Vaše nastavitve so shranjene
@ -115,6 +116,7 @@ sl:
heading_revisions: Verzije
title_download: Prenesi dol
title_delete_revision: Izbriši verzijo
title_obsolete_revision: Obsolete revision
label_created: Narejeno
label_changed: Spremenjeno
info_changed_by_user: "%{changed} po"
@ -269,6 +271,7 @@ sl:
title_assigned: Assigned
title_approval: Approval
title_rejected: Rejected
title_obsolete: Obsolete
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: New step

View File

@ -48,6 +48,7 @@ zh-TW:
notice_file_deleted: 檔案己經被刪除了
error_at_least_one_revision_must_be_present: 至少要有一個修訂版本存在
notice_revision_deleted: 修訂版本己經被刪除
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: 其中一個檔案被鎖定了
notice_file_revision_created: 檔案修訂版本己建立
notice_your_preferences_were_saved: 您的偏好設定己經儲存
@ -115,6 +116,7 @@ zh-TW:
heading_revisions: 修訂版本
title_download: 下載
title_delete_revision: 刪除此修訂版本
title_obsolete_revision: Obsolete revision
label_created: 建立者/時間
label_changed: 修改者/時間
info_changed_by_user: "%{changed} by"
@ -269,6 +271,7 @@ zh-TW:
title_assigned: Assigned
title_approval: Approval
title_rejected: Rejected
title_obsolete: Obsolete
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: New step

View File

@ -48,6 +48,7 @@ zh:
notice_file_deleted: 文件已删除
error_at_least_one_revision_must_be_present: 至少一个修订版本必须存在
notice_revision_deleted: 修订版本已删除
notice_revision_obsoleted: Revision obsoleted
warning_one_of_files_locked: 其中一个文件被锁定
notice_file_revision_created: 文件修订版本已创建
notice_your_preferences_were_saved: 您的偏好设定已保存
@ -115,6 +116,7 @@ zh:
heading_revisions: 修订版本
title_download: 下载
title_delete_revision: 删除此修订
title_obsolete_revision: Obsolete revision
label_created: 创建
label_changed: 修改
info_changed_by_user: "%{changed} by"
@ -269,6 +271,7 @@ zh:
title_assigned: Assigned
title_approval: Approval
title_rejected: Rejected
title_obsolete: Obsolete
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: New step

View File

@ -91,5 +91,16 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase
assert_response :redirect
assert_equal 0, flash[:error].size
end
def test_obsolete_revision_ok
@role.add_permission! :file_manipulation
get :obsolete_revision, :id => @file.last_revision.id
assert_redirected_to :action => 'show', :id => @file
end
def test_obsolete_revision_missing_permissions
get :obsolete_revision, :id => @file.last_revision.id
assert :forbiden
end
end

View File

@ -21,6 +21,8 @@
require File.expand_path('../../test_helper', __FILE__)
class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
include Redmine::I18n
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, :members,
:member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps,
:dmsf_workflow_step_assignments, :dmsf_workflow_step_actions
@ -31,6 +33,8 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
@revision5 = DmsfFileRevision.find_by_id 5
@revision8 = DmsfFileRevision.find_by_id 8
@wf1 = DmsfWorkflow.find_by_id 1
@admin = User.find_by_id 1
@jsmith = User.find_by_id 2
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.expand_path '../../fixtures/files', __FILE__
end
@ -40,6 +44,8 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
assert_kind_of DmsfFileRevision, @revision5
assert_kind_of DmsfFileRevision, @revision8
assert_kind_of DmsfWorkflow, @wf1
assert_kind_of User, @admin
assert_kind_of User, @jsmith
end
def test_delete_restore
@ -223,4 +229,18 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
assert_equal 'ms-excel', @revision1.protocol
end
def test_obsolete
assert @revision1.obsolete
assert_equal DmsfWorkflow::STATE_OBSOLETE, @revision1.workflow
end
def test_obsolete_locked
User.current = @admin
@revision1.dmsf_file.lock!
User.current = @jsmith
assert !@revision1.obsolete
assert_equal 1, @revision1.errors.count
@revision1.errors.full_messages.to_sentence.include?(l(:error_file_is_locked))
end
end