From 3a4519757e349e122a6a44c68915796373265eed Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Fri, 6 Mar 2020 14:30:27 +0100 Subject: [PATCH] Add move operation for documents plugin --- config/locales/de.yml | 1 + config/locales/en.yml | 1 + .../app/controllers/documents_controller.rb | 12 ++++++++++++ plugins/documents/app/models/document.rb | 1 + .../app/views/documents/_documents.html.haml | 1 + .../documents/app/views/documents/_move.html.haml | 12 ++++++++++++ plugins/documents/app/views/documents/move.js.haml | 2 ++ plugins/documents/config/locales/de.yml | 5 +++++ plugins/documents/config/locales/en.yml | 5 +++++ plugins/documents/config/routes.rb | 1 + 10 files changed, 41 insertions(+) create mode 100644 plugins/documents/app/views/documents/_move.html.haml create mode 100644 plugins/documents/app/views/documents/move.js.haml diff --git a/config/locales/de.yml b/config/locales/de.yml index 9d682832..6f86f521 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1714,6 +1714,7 @@ de: delete: Löschen download: Herunterladen edit: Bearbeiten + move: Verschieben or_cancel: oder abbrechen please_wait: Bitte warten... restore: Wiederherstellen diff --git a/config/locales/en.yml b/config/locales/en.yml index dd421d8d..e3398eca 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1772,6 +1772,7 @@ en: marks: close: "×" success: + move: Move or_cancel: or cancel please_wait: Please wait... restore: Restore diff --git a/plugins/documents/app/controllers/documents_controller.rb b/plugins/documents/app/controllers/documents_controller.rb index aaf23ac7..ca29d4b1 100644 --- a/plugins/documents/app/controllers/documents_controller.rb +++ b/plugins/documents/app/controllers/documents_controller.rb @@ -43,6 +43,14 @@ class DocumentsController < ApplicationController redirect_to @document.parent || documents_path, alert: t('.error', error: error.message) end + def update + @document = Document.find(params[:id]) + @document.update_attribute(:parent_id, params[:parent_id]) + redirect_to @document.parent || documents_path, notice: t('.notice') + rescue => error + redirect_to @document.parent || documents_path, alert: t('errors.general_msg', msg: error.message) + end + def destroy @document = Document.find(params[:id]) if @document.created_by == current_user or current_user.role_admin? @@ -65,6 +73,10 @@ class DocumentsController < ApplicationController end end + def move + @document = Document.find(params[:document_id]) + end + def allowed_mime?(mime) whitelist = FoodsoftConfig[:documents_allowed_extension].split MIME::Types.type_for(whitelist).each do |type| diff --git a/plugins/documents/app/models/document.rb b/plugins/documents/app/models/document.rb index 920d9ce7..58cf4728 100644 --- a/plugins/documents/app/models/document.rb +++ b/plugins/documents/app/models/document.rb @@ -1,5 +1,6 @@ class Document < ApplicationRecord include ActsAsTree + extend ActsAsTree::TreeWalker belongs_to :created_by, class_name: 'User', foreign_key: 'created_by_user_id' diff --git a/plugins/documents/app/views/documents/_documents.html.haml b/plugins/documents/app/views/documents/_documents.html.haml index 3aea474f..a0bfcc1f 100644 --- a/plugins/documents/app/views/documents/_documents.html.haml +++ b/plugins/documents/app/views/documents/_documents.html.haml @@ -16,5 +16,6 @@ %td= h show_user(document.created_by) %td - if document.created_by == current_user or current_user.role_admin? + = link_to t('ui.move'), document_move_path(document), remote: true, class: 'btn btn-mini' = link_to t('ui.delete'), document, :method => :delete, :data => {:confirm => t('ui.confirm_delete', name: document.name)}, class: 'btn btn-mini btn-danger' diff --git a/plugins/documents/app/views/documents/_move.html.haml b/plugins/documents/app/views/documents/_move.html.haml new file mode 100644 index 00000000..3b8ab323 --- /dev/null +++ b/plugins/documents/app/views/documents/_move.html.haml @@ -0,0 +1,12 @@ +.modal-header + = close_button :modal + %h3= t('.title') +.modal-body + = link_to t('.root_folder'), document_path(@document, parent_id: nil), method: :patch + - Document.walk_tree do |document, level| + - if document.folder? + %br + = (' ' * 2 * (level + 1)).html_safe + = link_to document.name, document_path(@document, parent_id: document.id), method: :patch +.modal-footer + = link_to t('ui.close'), '#', class: 'btn', data: {dismiss: 'modal'} diff --git a/plugins/documents/app/views/documents/move.js.haml b/plugins/documents/app/views/documents/move.js.haml new file mode 100644 index 00000000..851be326 --- /dev/null +++ b/plugins/documents/app/views/documents/move.js.haml @@ -0,0 +1,2 @@ +$('#modalContainer').html('#{j(render("move"))}'); +$('#modalContainer').modal(); diff --git a/plugins/documents/config/locales/de.yml b/plugins/documents/config/locales/de.yml index 1f7f5592..39bbcb6f 100644 --- a/plugins/documents/config/locales/de.yml +++ b/plugins/documents/config/locales/de.yml @@ -32,3 +32,8 @@ de: new: Neues Dokument anlegen new_folder: Neuen Ordner anlegen title: Dokumente + move: + root_folder: Start + title: Verschieben + update: + notice: Dokument oder Ordner wurde verschoben diff --git a/plugins/documents/config/locales/en.yml b/plugins/documents/config/locales/en.yml index e5b299c4..114b72f4 100644 --- a/plugins/documents/config/locales/en.yml +++ b/plugins/documents/config/locales/en.yml @@ -33,3 +33,8 @@ en: new: Upload new document new_folder: Create new folder title: Documents + move: + root_folder: Start + title: Move + update: + notice: Document or folder was moved diff --git a/plugins/documents/config/routes.rb b/plugins/documents/config/routes.rb index 85217472..279aa55f 100644 --- a/plugins/documents/config/routes.rb +++ b/plugins/documents/config/routes.rb @@ -3,6 +3,7 @@ Rails.application.routes.draw do scope '/:foodcoop' do resources :documents do + get :move get :new get :new_folder end