diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index 571067e6..29334714 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -29,6 +29,7 @@ class DmsfWorkflowsController < ApplicationController before_action :authorize_custom before_action :permissions, only: [:new_action, :assignment, :start] before_action :approver_candidates, only: [:remove_step, :show, :reorder_steps, :add_step] + before_action :prevent_from_editing, only: [:destroy, :remove_step, :update, :add_step, :update_step, :reorder_steps] layout :workflows_layout @@ -50,7 +51,8 @@ class DmsfWorkflowsController < ApplicationController def index @status = params[:status] || 1 - @workflow_pages, @workflows = paginate DmsfWorkflow.status(@status).global.sorted, per_page: 25 + @workflow_pages, @workflows = paginate(DmsfWorkflow.status(@status).global.sorted, per_page: 25) + @path = dmsf_workflows_path end def action @@ -350,7 +352,6 @@ class DmsfWorkflowsController < ApplicationController def new_step @steps = @dmsf_workflow.dmsf_workflow_steps.select('step, MAX(name) AS name').group(:step) - respond_to do |format| format.html format.js @@ -360,7 +361,7 @@ class DmsfWorkflowsController < ApplicationController def add_step if request.post? if params[:step] == '0' - step = @dmsf_workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq.count + 1 + step = @dmsf_workflow.dmsf_workflow_steps.collect{ |s| s.step }.uniq.count + 1 else step = params[:step].to_i end @@ -409,7 +410,9 @@ class DmsfWorkflowsController < ApplicationController def reorder_steps if request.put? - unless @dmsf_workflow.reorder_steps(params[:step].to_i, params[:dmsf_workflow][:position].to_i) + if @assigned + error_dmsf_workflow_assigned + elsif !@dmsf_workflow.reorder_steps(params[:step].to_i, params[:dmsf_workflow][:position].to_i) flash[:error] = l(:notice_cannot_renumber_steps) end end @@ -532,4 +535,17 @@ private @approving_candidates = @project ? @project.users.to_a : User.active.to_a end + def prevent_from_editing + # A workflow in use can be neither edited nor deleted + @assigned = DmsfFileRevision.where(dmsf_workflow_id: @dmsf_workflow.id).exists? + if(@assigned && (!request.put?)) + flash[:error] = l(:error_dmsf_workflow_assigned) + if @project + redirect_back_or_default settings_project_path(@project, tab: 'dmsf_workflow') + else + redirect_back_or_default dmsf_workflows_path + end + end + end + end diff --git a/app/helpers/dmsf_workflows_helper.rb b/app/helpers/dmsf_workflows_helper.rb index 228a3b10..4bfb1e21 100644 --- a/app/helpers/dmsf_workflows_helper.rb +++ b/app/helpers/dmsf_workflows_helper.rb @@ -100,24 +100,4 @@ module DmsfWorkflowsHelper s.html_safe end - def change_status_link(workflow) - url = { controller: 'dmsf_workflows', action: 'update', id: workflow.id } - if workflow.locked? - link_to l(:button_unlock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE }), method: :put, - class: 'icon icon-unlock' - else - link_to l(:button_lock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_LOCKED }), method: :put, - class: 'icon icon-lock' - end - end - - def workflows_status_options_for_select(selected) - worflows_count_by_status = DmsfWorkflow.global.group('status').count.to_hash - options_for_select([[l(:label_all), ''], - ["#{l(:status_active)} (#{worflows_count_by_status[DmsfWorkflow::STATUS_ACTIVE].to_i})", - DmsfWorkflow::STATUS_ACTIVE.to_s], - ["#{l(:status_locked)} (#{worflows_count_by_status[DmsfWorkflow::STATUS_LOCKED].to_i})", - DmsfWorkflow::STATUS_LOCKED.to_s]], selected.to_s) - end - end \ No newline at end of file diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 815d270d..f0a6bf6a 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -22,7 +22,7 @@ class DmsfFolder < ActiveRecord::Base include RedmineDmsf::Lockable - + belongs_to :project belongs_to :dmsf_folder belongs_to :deleted_by_user, class_name: 'User', foreign_key: 'deleted_by_user_id' diff --git a/app/views/dmsf_workflows/_main.html.erb b/app/views/dmsf_workflows/_main.html.erb index 6fb129c2..7936da87 100644 --- a/app/views/dmsf_workflows/_main.html.erb +++ b/app/views/dmsf_workflows/_main.html.erb @@ -20,24 +20,37 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. %> -<% @workflows = DmsfWorkflow.active.sorted.where(project_id: @project.id) if @project && @workflows.nil? %> - -<% unless @project %> -
+ <%= link_to l(:label_dmsf_workflow_new), new_dmsf_workflow_path(project_id: @project&.id), class: 'icon icon-add' %> +
+<% else %> +| <%= l(:field_name) %> | @@ -48,8 +61,15 @@|
|---|---|
| <%= link_to(h(workflow.name), dmsf_workflow_path(workflow)) %> | - <%= change_status_link(workflow) unless @project %> - <%= delete_link dmsf_workflow_path(workflow) %> + <% url = { controller: 'dmsf_workflows', action: 'update', id: workflow.id } %> + <% if workflow.locked? %> + <%= link_to l(:button_unlock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE }), + method: :put, class: 'icon icon-unlock' %> + <% else %> + <%= link_to l(:button_lock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_LOCKED }), + method: :put, class: 'icon icon-lock' %> + <% end %> + <%= delete_link dmsf_workflow_path(workflow, back_url: @path) %> | <%= i %> |
<%= @dmsf_workflow.dmsf_workflow_steps[index].name if index %>
- " class="hol">
+ ">
<%= form_for(@dmsf_workflow, url: update_step_dmsf_workflow_path(step: index), method: :put,
html: { id: "step-index-name-#{index}-form" }) do |f| %>
- <%= f.text_field(:step_name, value: @dmsf_workflow.dmsf_workflow_steps[index].name, id: "dmsf_workflow_step_name_#{index}") %>
+ <%= hidden_field_tag :back_url, dmsf_workflow_path(@dmsf_workflow) %>
+ <%= f.text_field(:step_name, value: @dmsf_workflow.dmsf_workflow_steps[index].name,
+ id: "dmsf_workflow_step_name_#{index}") %>
<%= submit_tag l(:button_change), class: 'small' %> <%= link_to_function( @@ -72,7 +73,8 @@ |
- <% stps = @dmsf_workflow.dmsf_workflow_steps.collect{ |s| (s.step == i) ? s : nil }.compact %>
+ <% stps = @dmsf_workflow.dmsf_workflow_steps.order(operator: :desc).
+ collect{ |s| (s.step == i) ? s : nil }.compact %>
<% stps.each_with_index do |step, j| %>
<% if (j > 0) || (step.operator != DmsfWorkflowStep::OPERATOR_AND) %>
<%= step.soperator %>
@@ -80,9 +82,10 @@
<%= link_to_user step.user %>
<% end %>
- " class="hol">
+ ">
<%= form_for(@dmsf_workflow, url: update_step_dmsf_workflow_path(step: index), method: :put,
html: { id: "step-index-operator-#{index}-form"}) do |_| %>
+ <%= hidden_field_tag :back_url, dmsf_workflow_path(@dmsf_workflow) %>
<% stps.each do |step| %>
@@ -121,7 +124,8 @@
<%= link_to_function l(:button_edit),
"$('#step-index-#{index}-name').hide(); $('#step-index-#{index}-approvers').hide(); $('#step-index-#{index}-name-form').show(); $('#step-index-#{index}-approvers-form').show();",
class: 'icon icon-edit' %>
- <%= delete_link edit_dmsf_workflow_path @dmsf_workflow, step: i %>
+ <%= delete_link edit_dmsf_workflow_path(@dmsf_workflow, step: i,
+ back_url: dmsf_workflow_path(@dmsf_workflow)) %>
|
<% end %>
diff --git a/assets/stylesheets/redmine_dmsf.css b/assets/stylesheets/redmine_dmsf.css
index 1c9e26eb..a1bd0f4a 100644
--- a/assets/stylesheets/redmine_dmsf.css
+++ b/assets/stylesheets/redmine_dmsf.css
@@ -54,9 +54,22 @@
}
/* Approval workflow */
-#dmsf_users_for_delegate { height: 200px; overflow:auto; }
-#dmsf_users_for_delegate label { display: block; }
-.dmsf-workflows.locked a { color: #aaa; }
+#dmsf_users_for_delegate {
+ height: 200px;
+ overflow:auto;
+}
+
+#dmsf_users_for_delegate label {
+ display: block;
+}
+
+.dmsf-workflows.locked a {
+ color: #aaa;
+}
+
+div[id^="step-index-"] {
+ display: none;
+}
/* DMSF revision box */
#new_revision_form_content {
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index f220088e..0e7ea35d 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -462,6 +462,7 @@ cs:
label_dmsf_global_menu_disabled: Globální DMS menu zakázáno
note_dmsf_global_menu_disabled: Pokud je zašrtnuto, tak položka DMS není v hlavním menu.
+ error_dmsf_workflow_assigned: Použitý schvalovací proces nemůže být ani upraven ani smazán.
easy_pages:
modules:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 38c08328..88c2cde6 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -458,6 +458,7 @@ de:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Der verwendete Genehmigungs-Workflow kann weder bearbeitet noch gelöscht werden.
easy_pages:
modules:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index ee8ab184..adb46450 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -462,6 +462,7 @@ en:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 99a130b8..aa2a7cb3 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -462,6 +462,7 @@ es:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index 08eee264..94bbe9b5 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -441,6 +441,7 @@ fa:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 9408e1ba..2e7248e7 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -462,6 +462,7 @@ fr:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index a5a3b9e9..80b8641c 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -461,6 +461,7 @@ hu:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 8e6b36fe..0ebef318 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -462,6 +462,7 @@ it: # Italian strings thx 2 Matteo Arceci!
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index a24094e8..6efcc6f9 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -463,6 +463,7 @@ ja:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index aa42153a..6f133063 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -462,6 +462,7 @@ ko:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index e2b7fa74..2ed1c5ed 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -462,6 +462,7 @@ nl:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index c74ce554..d8248979 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -462,6 +462,7 @@ pl:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index cdc2476c..80666111 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -462,6 +462,7 @@ pt-BR:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index e1ee796c..e8144205 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -462,6 +462,7 @@ sl:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 9f7d89e8..0d977ccd 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -461,6 +461,7 @@ zh-TW:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules:
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index 4ac65a5b..6341a4f1 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -462,6 +462,7 @@ zh:
label_dmsf_global_menu_disabled: Global DMS menu disabled
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
+ error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
easy_pages:
modules: