diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index b9a6b5ac..0594f209 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -17,13 +17,14 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class DmsfWorkflowsController < ApplicationController - unloadable - layout :workflows_layout + unloadable + model_object DmsfWorkflow + + before_filter :find_model_object, :except => [:create, :new, :index, :assign, :assignment] + before_filter :find_project + before_filter :authorize_custom - before_filter :find_workflow, :except => [:create, :new, :index, :assign, :assignment] - before_filter :find_project, :except => [:start] - before_filter :authorize_global - before_filter :authorize_custom, :except => [:assignment, :start, :new_action] + layout :workflows_layout def index if @project @@ -46,7 +47,7 @@ class DmsfWorkflowsController < ApplicationController if action.save revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id] if revision - if @workflow.try_finish revision, action, (params[:step_action].to_i / 10) + if @dmsf_workflow.try_finish revision, action, (params[:step_action].to_i / 10) file = DmsfFile.joins(:revisions).where(:dmsf_file_revisions => {:id => revision.id}).first if file begin @@ -60,23 +61,23 @@ class DmsfWorkflowsController < ApplicationController revision.file.project.members.each do |member| DmsfMailer.workflow_notification( member.user, - @workflow, + @dmsf_workflow, revision, - l(:text_email_subject_approved, :name => @workflow.name), - l(:text_email_finished_approved, :name => @workflow.name, :filename => revision.file.name), + l(:text_email_subject_approved, :name => @dmsf_workflow.name), + l(:text_email_finished_approved, :name => @dmsf_workflow.name, :filename => revision.file.name), l(:text_email_to_see_history)).deliver if member.user end else # Just rejected - recipients = @workflow.participiants + recipients = @dmsf_workflow.participiants recipients.push User.find_by_id revision.dmsf_workflow_assigned_by recipients.each do |user| DmsfMailer.workflow_notification( user, - @workflow, + @dmsf_workflow, revision, - l(:text_email_subject_rejected, :name => @workflow.name), - l(:text_email_finished_rejected, :name => @workflow.name, :filename => revision.file.name, :notice => action.note), + l(:text_email_subject_rejected, :name => @dmsf_workflow.name), + l(:text_email_finished_rejected, :name => @dmsf_workflow.name, :filename => revision.file.name, :notice => action.note), l(:text_email_to_see_history)).deliver if user end end @@ -86,33 +87,33 @@ class DmsfWorkflowsController < ApplicationController delegate = User.find_by_id params[:step_action].to_i / 10 DmsfMailer.workflow_notification( delegate, - @workflow, + @dmsf_workflow, revision, - l(:text_email_subject_delegated, :name => @workflow.name), - l(:text_email_finished_delegated, :name => @workflow.name, :filename => revision.file.name, :notice => action.note), + l(:text_email_subject_delegated, :name => @dmsf_workflow.name), + l(:text_email_finished_delegated, :name => @dmsf_workflow.name, :filename => revision.file.name, :notice => action.note), l(:text_email_to_proceed)).deliver if delegate else # Next step - assignments = @workflow.next_assignments revision.id + assignments = @dmsf_workflow.next_assignments revision.id unless assignments.empty? if assignments.first.dmsf_workflow_step.step != action.dmsf_workflow_step_assignment.dmsf_workflow_step.step # Next step assignments.each do |assignment| DmsfMailer.workflow_notification( assignment.user, - @workflow, + @dmsf_workflow, revision, - l(:text_email_subject_requires_approval, :name => @workflow.name), - l(:text_email_finished_step, :name => @workflow.name, :filename => revision.file.name), + l(:text_email_subject_requires_approval, :name => @dmsf_workflow.name), + l(:text_email_finished_step, :name => @dmsf_workflow.name, :filename => revision.file.name), l(:text_email_to_proceed)).deliver if assignment.user end to = User.find_by_id revision.dmsf_workflow_assigned_by DmsfMailer.workflow_notification( to, - @workflow, + @dmsf_workflow, revision, - l(:text_email_subject_updated, :name => @workflow.name), - l(:text_email_finished_step_short, :name => @workflow.name, :filename => revision.file.name), + l(:text_email_subject_updated, :name => @dmsf_workflow.name), + l(:text_email_finished_step_short, :name => @dmsf_workflow.name, :filename => revision.file.name), l(:text_email_to_see_status)).deliver if to end end @@ -163,12 +164,12 @@ class DmsfWorkflowsController < ApplicationController end def new - @workflow = DmsfWorkflow.new + @dmsf_workflow = DmsfWorkflow.new end def create - @workflow = DmsfWorkflow.new(:name => params[:name], :project_id => params[:project_id]) - if request.post? && @workflow.save + @dmsf_workflow = DmsfWorkflow.new(:name => params[:name], :project_id => params[:project_id]) + if request.post? && @dmsf_workflow.save flash[:notice] = l(:notice_successful_create) if @project redirect_to settings_project_path(@project, :tab => 'dmsf_workflow') @@ -184,7 +185,7 @@ class DmsfWorkflowsController < ApplicationController end def update - if request.put? && @workflow.update_attributes({:name => params[:name]}) + if request.put? && @dmsf_workflow.update_attributes({:name => params[:name]}) flash[:notice] = l(:notice_successful_update) if @project redirect_to settings_project_path(@project, :tab => 'dmsf_workflow') @@ -198,7 +199,7 @@ class DmsfWorkflowsController < ApplicationController def destroy begin - @workflow.destroy + @dmsf_workflow.destroy flash[:notice] = l(:notice_successful_delete) rescue flash[:error] = l(:error_unable_delete_dmsf_workflow) @@ -218,14 +219,14 @@ class DmsfWorkflowsController < ApplicationController if request.post? users = User.find_all_by_id(params[:user_ids]) if params[:step] == '0' - step = @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 operator = (params[:commit] == l(:dmsf_and)) ? DmsfWorkflowStep::OPERATOR_AND : DmsfWorkflowStep::OPERATOR_OR users.each do |user| - @workflow.dmsf_workflow_steps << DmsfWorkflowStep.new( - :dmsf_workflow_id => @workflow.id, + @dmsf_workflow.dmsf_workflow_steps << DmsfWorkflowStep.new( + :dmsf_workflow_id => @dmsf_workflow.id, :step => step, :user_id => user.id, :operator => operator) @@ -238,10 +239,10 @@ class DmsfWorkflowsController < ApplicationController def remove_step if request.delete? - DmsfWorkflowStep.where(:dmsf_workflow_id => @workflow.id, :step => params[:step]).each do |ws| - @workflow.dmsf_workflow_steps.delete(ws) + DmsfWorkflowStep.where(:dmsf_workflow_id => @dmsf_workflow.id, :step => params[:step]).each do |ws| + @dmsf_workflow.dmsf_workflow_steps.delete(ws) end - @workflow.dmsf_workflow_steps.each do |ws| + @dmsf_workflow.dmsf_workflow_steps.each do |ws| n = ws.step.to_i if n > params[:step].to_i ws.step = n - 1 @@ -258,7 +259,7 @@ class DmsfWorkflowsController < ApplicationController def reorder_steps if request.put? - unless @workflow.reorder_steps(params[:step].to_i, params[:workflow_step][:move_to]) + unless @dmsf_workflow.reorder_steps(params[:step].to_i, params[:workflow_step][:move_to]) flash[:error] = l(:notice_cannot_renumber_steps) end end @@ -270,16 +271,16 @@ class DmsfWorkflowsController < ApplicationController def start revision = DmsfFileRevision.find_by_id(params[:dmsf_file_revision_id]) if revision - revision.set_workflow(@workflow.id, params[:action]) + revision.set_workflow(@dmsf_workflow.id, params[:action]) if revision.save - assignments = @workflow.next_assignments revision.id + assignments = @dmsf_workflow.next_assignments revision.id assignments.each do |assignment| DmsfMailer.workflow_notification( assignment.user, - @workflow, + @dmsf_workflow, revision, - l(:text_email_subject_started, :name => @workflow.name), - l(:text_email_started, :name => @workflow.name, :filename => revision.file.name), + l(:text_email_subject_started, :name => @dmsf_workflow.name), + l(:text_email_started, :name => @dmsf_workflow.name, :filename => revision.file.name), l(:text_email_to_proceed)).deliver if assignment.user end flash[:notice] = l(:notice_workflow_started) @@ -291,25 +292,26 @@ class DmsfWorkflowsController < ApplicationController end private - def find_workflow - @workflow = DmsfWorkflow.find_by_id(params[:id]) - end - + def find_project - if @workflow && @workflow.project - @project = @workflow.project + if @dmsf_workflow && @dmsf_workflow.project + @project = @dmsf_workflow.project elsif params[:project_id].present? @project = Project.find_by_id params[:project_id] + else + @project = Project.find_by_identifier params[:id] end end - def workflows_layout - find_workflow - find_project + def workflows_layout @project ? 'base' : 'admin' end - def authorize_custom - require_admin unless @project + def authorize_custom + if @project + authorize + else + require_admin + end end -end +end \ No newline at end of file diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index a42b5995..8bc52962 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -66,14 +66,12 @@ class DmsfFile < ActiveRecord::Base :url => Proc.new {|o| {:controller => 'dmsf_files', :action => 'show', :id => o}}, :datetime => Proc.new {|o| o.updated_at }, :author => Proc.new {|o| o.last_revision.user } - - - @@storage_path = Setting.plugin_redmine_dmsf['dmsf_storage_directory'].strip + + @@storage_path = nil def self.storage_path - if !File.exists?(@@storage_path) - Dir.mkdir(@@storage_path) - end + self.storage_path = Setting.plugin_redmine_dmsf['dmsf_storage_directory'].strip unless @@storage_path + Dir.mkdir(@@storage_path) unless File.exists?(@@storage_path) @@storage_path end diff --git a/app/views/dmsf_files/_file_new_revision.html.erb b/app/views/dmsf_files/_file_new_revision.html.erb index 9398d29e..c30ee1b1 100644 --- a/app/views/dmsf_files/_file_new_revision.html.erb +++ b/app/views/dmsf_files/_file_new_revision.html.erb @@ -32,7 +32,7 @@

<%= label_tag('dmsf_file_revision_title', "#{l(:label_title)}:") %> - <%= f.text_field(:title, :size => '32') %> + <%= f.text_field(:title, :size => 32) %>

@@ -41,7 +41,7 @@ <%= f.select(:dmsf_folder_id, options_for_select(DmsfFolder.directory_tree(@project), :selected => (@revision.folder.id if @revision.folder))) %> / - <%= f.text_field(:name, :size => '22') %> + <%= f.text_field(:name, :size => 22) %>

@@ -49,7 +49,7 @@ <%= label_tag('dmsf_file_revision_description', "#{l(:label_description)}:") %>

- <%= f.text_area(:description, :rows=> '6', :class => 'wiki-edit') %> + <%= f.text_area(:description, :rows => 6, :class => 'wiki-edit') %>

@@ -70,8 +70,8 @@

<%= label_tag('file_upload', "#{l(:label_new_content)}:") %>

- <%= file_field_tag('file_upload', :size => 30) %> -
+ <%= file_field_tag('file_upload') %> +
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) @@ -88,7 +88,7 @@

<%= label_tag('dmsf_file_revision_comment', "#{l(:label_comment)}:") %>

- <%= f.text_area(:comment, :rows=> '2', :style => 'width: 99%;') %> + <%= f.text_area(:comment, :rows=> 2, :style => 'width: 99%;') %>

diff --git a/app/views/dmsf_files/show.html.erb b/app/views/dmsf_files/show.html.erb index 9c1f898c..de20da44 100644 --- a/app/views/dmsf_files/show.html.erb +++ b/app/views/dmsf_files/show.html.erb @@ -59,7 +59,7 @@ <%= error_messages_for('file') %> <%= error_messages_for('revision') %> <%= render(:partial => 'file_new_revision') if User.current.allowed_to?(:file_manipulation, @file.project) %> -<%= form_tag('', :id => 'entries_form') %> +<%#= form_tag('', :id => 'entries_form') %>

<%= l(:heading_revisions) %>

<% @file.revisions.visible[@revision_pages.offset,@revision_pages.per_page].each do |revision| %> @@ -147,8 +147,8 @@
-
-
+ <% end %>

<%= pagination_links_full @revision_pages, @file.revisions.visible.count %>

diff --git a/app/views/dmsf_workflows/_action.html.erb b/app/views/dmsf_workflows/_action.html.erb index 7b8ef077..3774cd58 100644 --- a/app/views/dmsf_workflows/_action.html.erb +++ b/app/views/dmsf_workflows/_action.html.erb @@ -34,8 +34,8 @@

<%= label_tag 'delegate', l(:label_dmsf_wokflow_action_delegate) %>
<%= text_field_tag 'user_search', nil %> - <%= javascript_tag "observeSearchfield('user_search', 'users_for_delegate', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@workflow, :dmsf_workflow_step_assignment_id => params[:dmsf_workflow_step_assignment_id], :dmsf_file_revision_id => params[:dmsf_file_revision_id]) }')" %> - <%= content_tag('div', principals_radio_button_tags('step_action', @workflow.delegates(nil, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id])), :id => 'users_for_delegate') %> + <%= javascript_tag "observeSearchfield('user_search', 'users_for_delegate', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@dmsf_workflow, :dmsf_workflow_step_assignment_id => params[:dmsf_workflow_step_assignment_id], :dmsf_file_revision_id => params[:dmsf_file_revision_id]) }')" %> + <%= content_tag('div', principals_radio_button_tags('step_action', @dmsf_workflow.delegates(nil, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id])), :id => 'users_for_delegate') %>

diff --git a/app/views/dmsf_workflows/_log.html.erb b/app/views/dmsf_workflows/_log.html.erb index aff97ed5..83c2ac5f 100644 --- a/app/views/dmsf_workflows/_log.html.erb +++ b/app/views/dmsf_workflows/_log.html.erb @@ -24,10 +24,10 @@

<%= label_tag 'workflow_name', "#{l(:link_workflow)} #{l(:field_name).downcase}: " %> - <% if User.current.allowed_to?(:manage_workflows, @workflow.project) %> - <%= link_to @workflow.name, edit_dmsf_workflow_path(@workflow) %> + <% if User.current.allowed_to?(:manage_workflows, @dmsf_workflow.project) %> + <%= link_to @dmsf_workflow.name, edit_dmsf_workflow_path(@dmsf_workflow) %> <% else %> - <%= @workflow.name %> + <%= @dmsf_workflow.name %> <% end %>
@@ -78,7 +78,7 @@ <%= link_to_user User.find_by_id(row['author_id'].present? ? row['author_id'] : row['user_id']) %> <%= DmsfWorkflowStepAction.action_str(row['action']) %> - <% if((row['step'].to_i == @workflow.dmsf_workflow_steps.last.step) && (revision.workflow == DmsfWorkflow::STATE_APPROVED) && (row['action'] != DmsfWorkflowStepAction::ACTION_DELEGATE)) %> + <% if((row['step'].to_i == @dmsf_workflow.dmsf_workflow_steps.last.step) && (revision.workflow == DmsfWorkflow::STATE_APPROVED) && (row['action'] != DmsfWorkflowStepAction::ACTION_DELEGATE)) %> <%= l(:title_approved) %> <% else %> <%= DmsfWorkflowStepAction.workflow_str(row['action']) %> diff --git a/app/views/dmsf_workflows/_steps.html.erb b/app/views/dmsf_workflows/_steps.html.erb index f4bbe8f1..60848a8e 100644 --- a/app/views/dmsf_workflows/_steps.html.erb +++ b/app/views/dmsf_workflows/_steps.html.erb @@ -16,23 +16,23 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%> -<% if @workflow.project %> -

<%= link_to l(:label_dmsf_workflow_plural), settings_project_path(@project, :tab => 'dmsf_workflow') %> » <%=h @workflow %>

+<% if @dmsf_workflow.project %> +

<%= link_to l(:label_dmsf_workflow_plural), settings_project_path(@project, :tab => 'dmsf_workflow') %> » <%=h @dmsf_workflow %>

<% else %> -

<%= link_to l(:label_dmsf_workflow_plural), dmsf_workflows_path %> » <%=h @workflow %>

+

<%= link_to l(:label_dmsf_workflow_plural), dmsf_workflows_path %> » <%=h @dmsf_workflow %>

<% end %> -<%= labelled_form_for @workflow do |f| %> +<%= labelled_form_for @dmsf_workflow do |f| %> <%= error_messages_for 'workflow' %>
-

<%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name, @workflow.name %><%= submit_tag l(:button_save) %>

+

<%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name, @dmsf_workflow.name %><%= submit_tag l(:button_save) %>

<% end %>
-<% steps = @workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq %> +<% steps = @dmsf_workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq %> <% if steps.any? %> @@ -46,7 +46,7 @@ <% end; reset_cycle %> @@ -69,15 +69,15 @@
- <%= form_for(@workflow, :url => edit_dmsf_workflow_path(@workflow), + <%= form_for(@dmsf_workflow, :url => edit_dmsf_workflow_path(@dmsf_workflow), :html => {:method => :post}) do |f| %>
<%=l(:label_user_new)%>

<%= label_tag 'user_search', l(:label_user_search) %><%= text_field_tag 'user_search', nil %>

- <%= javascript_tag "observeSearchfield('user_search', 'users', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@workflow, :dmsf_workflow_step_assignment_id => nil, :dmsf_file_revision_id => nil, :project_id => @project ? @project.id : nil) }')" %> + <%= javascript_tag "observeSearchfield('user_search', 'users', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@dmsf_workflow, :dmsf_workflow_step_assignment_id => nil, :dmsf_file_revision_id => nil, :project_id => @project ? @project.id : nil) }')" %>
- <%= render_principals_for_new_dmsf_workflow_users(@workflow, nil, nil) %> + <%= render_principals_for_new_dmsf_workflow_users(@dmsf_workflow, nil, nil) %>

diff --git a/app/views/dmsf_workflows/action.js.erb b/app/views/dmsf_workflows/action.js.erb index be5c6be5..1338d7ac 100644 --- a/app/views/dmsf_workflows/action.js.erb +++ b/app/views/dmsf_workflows/action.js.erb @@ -16,6 +16,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%> -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'action', :locals => {:workflow => @workflow}) %>'); +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'action', :locals => {:workflow => @dmsf_workflow}) %>'); showModal('ajax-modal', '400px'); $('#ajax-modal').addClass('new-action'); \ No newline at end of file diff --git a/app/views/dmsf_workflows/assign.js.erb b/app/views/dmsf_workflows/assign.js.erb index a9a04b36..89693237 100644 --- a/app/views/dmsf_workflows/assign.js.erb +++ b/app/views/dmsf_workflows/assign.js.erb @@ -16,6 +16,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%> -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'assign', :locals => {:workflow => @workflow}) %>'); +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'assign', :locals => {:workflow => @dmsf_workflow}) %>'); showModal('ajax-modal', '400px'); $('#ajax-modal').addClass('assignment'); \ No newline at end of file diff --git a/app/views/dmsf_workflows/autocomplete_for_user.html.erb b/app/views/dmsf_workflows/autocomplete_for_user.html.erb index ac1c44f0..be8dec18 100644 --- a/app/views/dmsf_workflows/autocomplete_for_user.html.erb +++ b/app/views/dmsf_workflows/autocomplete_for_user.html.erb @@ -16,4 +16,4 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%> -<%= render_principals_for_new_dmsf_workflow_users(@workflow, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id]) %> +<%= render_principals_for_new_dmsf_workflow_users(@dmsf_workflow, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id]) %> diff --git a/app/views/dmsf_workflows/log.js.erb b/app/views/dmsf_workflows/log.js.erb index 2fb6f7c3..9131f960 100644 --- a/app/views/dmsf_workflows/log.js.erb +++ b/app/views/dmsf_workflows/log.js.erb @@ -16,6 +16,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%> -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'log', :locals => {:workflow => @workflow}) %>'); +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'log', :locals => {:workflow => @dmsf_workflow}) %>'); showModal('ajax-modal', '800px'); $('#ajax-modal').addClass('workflow-log'); \ No newline at end of file diff --git a/app/views/dmsf_workflows/new.html.erb b/app/views/dmsf_workflows/new.html.erb index a5445122..5b5ab230 100644 --- a/app/views/dmsf_workflows/new.html.erb +++ b/app/views/dmsf_workflows/new.html.erb @@ -23,7 +23,7 @@

<%= link_to l(:label_dmsf_workflow_plural), dmsf_workflows_path %> » <%=l(:label_dmsf_workflow_new)%>

<% end %> -<%= labelled_form_for @workflow do |f| %> +<%= labelled_form_for @dmsf_workflow do |f| %> <%= error_messages_for 'workflow' %>

<%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name %>

diff --git a/app/views/my/blocks/_locked_documents.html.erb b/app/views/my/blocks/_locked_documents.html.erb index d9448220..8ef44bef 100644 --- a/app/views/my/blocks/_locked_documents.html.erb +++ b/app/views/my/blocks/_locked_documents.html.erb @@ -27,7 +27,7 @@

<%= l(:label_my_locked_documents)%> (<%= folders.count %>/<%= files.count %>)

<% if folders.any? || files.any?%> <%= form_tag({}) do %> -
<%= i %> - <% @workflow.dmsf_workflow_steps.collect{|s| (s.step == i) ? s : nil}.compact.each_with_index do |step, j| %> + <% @dmsf_workflow.dmsf_workflow_steps.collect{|s| (s.step == i) ? s : nil}.compact.each_with_index do |step, j| %> <% if j != 0 %> <%= step.soperator %>  <% end %> @@ -54,10 +54,10 @@ <% end %> - <%= reorder_links('workflow_step', {:action => 'edit', :id => @workflow, :step => i}, :put) %> + <%= reorder_links('workflow_step', {:action => 'edit', :id => @dmsf_workflow, :step => i}, :put) %> - <%= delete_link edit_dmsf_workflow_path(@workflow, :step => i) %> + <%= delete_link edit_dmsf_workflow_path(@dmsf_workflow, :step => i) %>
+
diff --git a/app/views/my/blocks/_open_approvals.html.erb b/app/views/my/blocks/_open_approvals.html.erb index 8b675d62..ab915a6f 100644 --- a/app/views/my/blocks/_open_approvals.html.erb +++ b/app/views/my/blocks/_open_approvals.html.erb @@ -30,7 +30,7 @@

<%= l(:label_my_open_approvals)%> (<%= assignments.count %>)

<% if assignments.any? %> <%= form_tag({}) do %> -
<%=l(:field_project)%>
+
diff --git a/test/fixtures/dmsf_links.yml b/test/fixtures/dmsf_links.yml new file mode 100644 index 00000000..bafdda23 --- /dev/null +++ b/test/fixtures/dmsf_links.yml @@ -0,0 +1,26 @@ +--- +folder_link: + id: 1 + target_project_id: 1 + target_id: 1 + target_type: DmsfFolder + name: folder1_link + project_id: 1 + dmsf_folder_id: NULL + deleted: 0 + deleted_by_user_id: NULL + created_at: <%= DateTime.now() %> + updated_at: <%= DateTime.now() %> + +file_link: + id: 2 + target_project_id: 1 + target_id: 4 + target_type: DmsfFile + name: test_link + project_id: 1 + dmsf_folder_id: 1 + deleted: 0 + deleted_by_user_id: NULL + created_at: <%= DateTime.now() %> + updated_at: <%= DateTime.now() %> \ No newline at end of file diff --git a/test/fixtures/dmsf_workflows.yml b/test/fixtures/dmsf_workflows.yml index bb1d53fb..ebb4d1cf 100644 --- a/test/fixtures/dmsf_workflows.yml +++ b/test/fixtures/dmsf_workflows.yml @@ -2,7 +2,7 @@ wf1: id: 1 name: wf1 - project_id: 5 + project_id: 1 wf2: id: 2 diff --git a/test/functional/dmsf_links_controller_test.rb b/test/functional/dmsf_links_controller_test.rb index 85e0404f..a8e34fff 100644 --- a/test/functional/dmsf_links_controller_test.rb +++ b/test/functional/dmsf_links_controller_test.rb @@ -1,8 +1,107 @@ +# Redmine plugin for Document Management System "Features" +# +# Copyright (C) 2014 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. + require File.expand_path('../../test_helper', __FILE__) -class DmsfLinksControllerTest < ActionController::TestCase - # Replace this with your real tests. - def test_truth - assert true +class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase + + fixtures :projects, :members, :dmsf_files, :dmsf_file_revisions, + :dmsf_folders, :dmsf_links, :roles, :member_roles + + def setup + @user_admin = User.find_by_id 1 + @user_member = User.find_by_id 2 + @user_non_member = User.find_by_id 3 + @project1 = Project.find_by_id 1 + assert_not_nil @project1 + @project1.enable_module! :dmsf + @role_manager = Role.where(:name => 'Manager').first + assert_not_nil @role_manager + @role_manager.add_permission! :file_manipulation + @folder1 = DmsfFolder.find_by_id 1 + @file1 = DmsfFile.find_by_id 1 + @request.session[:user_id] = @user_member.id + @file_link = DmsfLink.find_by_id 1 + @request.env['HTTP_REFERER'] = dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id) end -end + + def test_truth + assert_kind_of User, @user_admin + assert_kind_of User, @user_member + assert_kind_of User, @user_non_member + assert_kind_of Project, @project1 + assert_kind_of Role, @role_manager + assert_kind_of DmsfFolder, @folder1 + assert_kind_of DmsfFile, @file1 + assert_kind_of DmsfLink, @file_link + end + + def test_authorize + # Admin + @request.session[:user_id] = @user_admin.id + get :new, :project_id => @project1.id + assert_response :success + assert_template 'new' + + # Non member + @request.session[:user_id] = @user_non_member.id + get :new, :project_id => @project1.id + assert_response :forbidden + + # Member + @request.session[:user_id] = @user_member.id + get :new, :project_id => @project1.id + assert_response :success + + # Without the module + @project1.disable_module!(:dmsf) + get :new, :project_id => @project1.id + assert_response :forbidden + + # Without permissions + @project1.enable_module!(:dmsf) + @role_manager.remove_permission! :file_manipulation + get :new, :project_id => @project1.id + assert_response :forbidden + end + + def test_new + get :new, :project_id => @project1.id + assert_response :success + end + + def test_create + assert_difference 'DmsfLink.count', +1 do + post :create, :dmsf_link => { + :project_id => @project1.id, + :target_project_id => @project1.id, + :dmsf_folder_id => @folder1.id, + :target_file_id => @file1.id, + :name => 'file_link' + } + end + assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id) + end + + def test_destroy + assert_difference 'DmsfLink.count', -1 do + delete :destroy, :project_id => @project1.id, :id => @file_link.id + end + assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id) + end +end \ No newline at end of file diff --git a/test/functional/dmsf_workflow_controller_test.rb b/test/functional/dmsf_workflow_controller_test.rb index 31531d30..b10ffe4e 100644 --- a/test/functional/dmsf_workflow_controller_test.rb +++ b/test/functional/dmsf_workflow_controller_test.rb @@ -30,17 +30,16 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase @user_member = User.find_by_id 2 # John Smith - manager @user_non_member = User.find_by_id 3 #Dave Lopper @request.session[:user_id] = @user_member.id - @role_manager = Role.where(:name => 'Manager').first - @role_manager.add_permission! :file_manipulation + @role_manager = Role.find_by_name('Manager') + @role_manager.add_permission! :file_manipulation + @role_manager.add_permission! :manage_workflows @wfs1 = DmsfWorkflowStep.find_by_id 1 # step 1 @wfs2 = DmsfWorkflowStep.find_by_id 2 # step 2 @wfs3 = DmsfWorkflowStep.find_by_id 3 # step 1 @wfs4 = DmsfWorkflowStep.find_by_id 4 # step 2 - @wfs5 = DmsfWorkflowStep.find_by_id 5 # step 3 - @manager_role = Role.find_by_name('Manager') - @project1 = Project.find_by_id 1 - @project5 = Project.find_by_id 5 - @project5.enable_module! :dmsf + @wfs5 = DmsfWorkflowStep.find_by_id 5 # step 3 + @project1 = Project.find_by_id 1 + @project1.enable_module! :dmsf @wf1 = DmsfWorkflow.find_by_id 1 @wfsa2 = DmsfWorkflowStepAssignment.find_by_id 2 @revision1 = DmsfFileRevision.find_by_id 1 @@ -48,6 +47,27 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase @revision3 = DmsfFileRevision.find_by_id 3 @file1 = DmsfFile.find_by_id 1 @file2 = DmsfFile.find_by_id 2 + @request.env['HTTP_REFERER'] = dmsf_folder_path(:id => @project1.id) + end + + def test_truth + assert_kind_of User, @user_admin + assert_kind_of User, @user_member + assert_kind_of User, @user_non_member + assert_kind_of Role, @role_manager + assert_kind_of DmsfWorkflowStep, @wfs1 + assert_kind_of DmsfWorkflowStep, @wfs2 + assert_kind_of DmsfWorkflowStep, @wfs3 + assert_kind_of DmsfWorkflowStep, @wfs4 + assert_kind_of DmsfWorkflowStep, @wfs5 + assert_kind_of Project, @project1 + assert_kind_of DmsfWorkflow, @wf1 + assert_kind_of DmsfWorkflowStepAssignment, @wfsa2 + assert_kind_of DmsfFileRevision, @revision1 + assert_kind_of DmsfFileRevision, @revision2 + assert_kind_of DmsfFileRevision, @revision3 + assert_kind_of DmsfFile, @file1 + assert_kind_of DmsfFile, @file2 end def test_authorize @@ -59,7 +79,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase # Non member @request.session[:user_id] = @user_non_member.id - get :index, :project_id => @project5.id + get :index, :project_id => @project1.id assert_response :forbidden # Member @@ -68,28 +88,37 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase get :index assert_response :forbidden # Project - get :index, :project_id => @project5.id + get :index, :project_id => @project1.id assert_response :success assert_template 'index' - # Without the module - @project5.disable_module!(:dmsf) - get :index, :project_id => @project5.id - assert_response :forbidden + # Without permissions - @project5.enable_module!(:dmsf) + @role_manager.remove_permission! :manage_workflows + get :index, :project_id => @project1.id + assert_response :forbidden + @role_manager.add_permission! :manage_workflows + @revision2.dmsf_workflow_id = @wf1.id + get :start, :id => @revision2.dmsf_workflow_id,:dmsf_file_revision_id => @revision2.id + assert_response :redirect @role_manager.remove_permission! :file_manipulation - get :index, :project_id => @project5.id - assert_response :forbidden + get :start, :id => @revision2.dmsf_workflow_id,:dmsf_file_revision_id => @revision2.id + assert_response :forbidden + + # Without the module + @role_manager.add_permission! :file_manipulation + @project1.disable_module!(:dmsf) + get :index, :project_id => @project1.id + assert_response :forbidden end def test_index - get :index, :project_id => @project5.id + get :index, :project_id => @project1.id assert_response :success assert_template 'index' end def test_new - get :new, :project_id => @project5.id + get :new, :project_id => @project1.id assert_response :success assert_template 'new' end @@ -102,9 +131,9 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase def test_create assert_difference 'DmsfWorkflow.count', +1 do - post :create, :name => 'wf3', :project_id => @project5.id + post :create, :name => 'wf3', :project_id => @project1.id end - assert_redirected_to settings_project_path(@project5, :tab => 'dmsf_workflow') + assert_redirected_to settings_project_path(@project1, :tab => 'dmsf_workflow') end def test_update @@ -113,13 +142,12 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase assert_equal 'wf1a', @wf1.name end - def test_destroy - id = @wf1.id + def test_destroy assert_difference 'DmsfWorkflow.count', -1 do delete :destroy, :id => @wf1.id end - assert_redirected_to settings_project_path(@project5, :tab => 'dmsf_workflow') - assert_equal 0, DmsfWorkflowStep.where(:dmsf_workflow_id => id).all.count + assert_redirected_to settings_project_path(@project1, :tab => 'dmsf_workflow') + assert_equal 0, DmsfWorkflowStep.where(:dmsf_workflow_id => @wf1.id).all.count end def test_add_step @@ -204,46 +232,42 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase assert_equal 3, @wfs3.step end - def test_action_approve - @request.env['HTTP_REFERER'] = 'http://test.host/projects/2/dmsf' + def test_action_approve + post( + :new_action, + :commit => l(:button_submit), + :id => @wf1.id, + :dmsf_workflow_step_assignment_id => @wfsa2.id, + :dmsf_file_revision_id => @revision1.id, + :step_action => DmsfWorkflowStepAction::ACTION_APPROVE, + :user_id => nil, + :note => '') + assert_redirected_to dmsf_folder_path(:id => @project1.id) + assert DmsfWorkflowStepAction.where( + :dmsf_workflow_step_assignment_id => @wfsa2.id, + :action => DmsfWorkflowStepAction::ACTION_APPROVE).first + end + + def test_action_reject post( :new_action, :commit => l(:button_submit), :id => @wf1.id, :dmsf_workflow_step_assignment_id => @wfsa2.id, :dmsf_file_revision_id => @revision2.id, - :step_action => DmsfWorkflowStepAction::ACTION_APPROVE, - :user_id => nil, - :note => '') + :step_action => DmsfWorkflowStepAction::ACTION_REJECT, + :note => 'Rejected because...') assert_response :redirect assert DmsfWorkflowStepAction.where( :dmsf_workflow_step_assignment_id => @wfsa2.id, - :action => DmsfWorkflowStepAction::ACTION_APPROVE).first + :action => DmsfWorkflowStepAction::ACTION_REJECT).first end -# -# def test_action_reject -# # TODO: There is a strange error: 'ActiveRecord::RecordNotFound: Couldn't find Project with id=0' -# # while saving the revision -# @request.env['HTTP_REFERER'] = 'http://test.host/projects/2/dmsf' -# post( -# :new_action, -# :commit => l(:button_submit), -# :id => @wf1.id, -# :dmsf_workflow_step_assignment_id => @wfsa2.id, -# :dmsf_file_revision_id => @revision2.id, -# :step_action => DmsfWorkflowStepAction::ACTION_REJECT, -# :note => 'Rejected because...') -# assert_response :redirect -# assert DmsfWorkflowStepAction.where( -# :dmsf_workflow_step_assignment_id => @wfsa2.id, -# :action => DmsfWorkflowStepAction::ACTION_REJECT).first -# end -# + def test_action xhr( :get, :action, - :project_id => @project5.id, + :project_id => @project1.id, :id => @wf1.id, :dmsf_workflow_step_assignment_id => @wfsa2.id, :dmsf_file_revision_id => @revision2.id, @@ -253,8 +277,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase assert_template 'action' end - def test_new_action_delegate - @request.env['HTTP_REFERER'] = 'http://test.host/projects/2/dmsf' + def test_new_action_delegate post( :new_action, :commit => l(:button_submit), @@ -263,7 +286,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase :dmsf_file_revision_id => @revision2.id, :step_action => @user_admin.id * 10, :note => 'Delegated because...') - assert_response :redirect + assert_redirected_to dmsf_folder_path(:id => @project1.id) assert DmsfWorkflowStepAction.where( :dmsf_workflow_step_assignment_id => @wfsa2.id, :action => DmsfWorkflowStepAction::ACTION_DELEGATE).first @@ -275,7 +298,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase xhr( :get, :assign, - :project_id => @project5.id, + :project_id => @project1.id, :id => @wf1.id, :dmsf_file_revision_id => @revision1.id, :title => l(:label_dmsf_wokflow_action_assign)) @@ -284,21 +307,21 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase assert_template 'assign' end -# def test_assignment -# # TODO: There is a strange error: 'ActiveRecord::RecordNotFound: Couldn't find Project with id=0' -# # while saving the revision -# @request.env['HTTP_REFERER'] = 'http://test.host/projects/3/dmsf' -# post( -# :assignment, -# :commit => l(:button_submit), -# :id => @wf1.id, -# :dmsf_workflow_id => @wf1.id, -# :dmsf_file_revision_id => @revision3.id, -# :action => 'assignment', -# :project_id => @project5.id) -# assert_response :redirect -# @file1.reload -# assert file1.locked? -# assert true -# end + def test_start + @revision2.dmsf_workflow_id = @wf1.id + get :start, :id => @revision2.dmsf_workflow_id,:dmsf_file_revision_id => @revision2.id + assert_redirected_to dmsf_folder_path(:id => @project1.id) + end + + def test_assignment + post( + :assignment, + :commit => l(:button_submit), + :id => @wf1.id, + :dmsf_workflow_id => @wf1.id, + :dmsf_file_revision_id => @revision2.id, + :action => 'assignment', + :project_id => @project1.id) + assert_response :redirect + end end diff --git a/test/unit/dmsf_file_test.rb b/test/unit/dmsf_file_test.rb index 6bda59b6..81ed8311 100644 --- a/test/unit/dmsf_file_test.rb +++ b/test/unit/dmsf_file_test.rb @@ -16,7 +16,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -require File.dirname(__FILE__) + '/../test_helper' +require File.expand_path('../../test_helper', __FILE__) class DmsfFileTest < RedmineDmsf::Test::UnitTest fixtures :projects, :users, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, diff --git a/test/unit/dmsf_links_test.rb b/test/unit/dmsf_links_test.rb index fccbfef3..e476e255 100644 --- a/test/unit/dmsf_links_test.rb +++ b/test/unit/dmsf_links_test.rb @@ -18,10 +18,122 @@ require File.expand_path('../../test_helper', __FILE__) -class DmsfLinksTest < ActiveSupport::TestCase +class DmsfLinksTest < RedmineDmsf::Test::UnitTest + + fixtures :projects, :members, :dmsf_files, :dmsf_file_revisions, + :dmsf_folders, :dmsf_links - # Replace this with your real tests. - def test_truth - assert true + def setup + @project1 = Project.find_by_id 1 + @folder1 = DmsfFolder.find_by_id 1 + @folder2 = DmsfFolder.find_by_id 2 + @file1 = DmsfFile.find_by_id 1 + @file4 = DmsfFile.find_by_id 4 + @folder_link = DmsfLink.find_by_id 1 + @file_link = DmsfLink.find_by_id 2 end -end + + def test_truth + assert_kind_of Project, @project1 + assert_kind_of DmsfFolder, @folder1 + assert_kind_of DmsfFolder, @folder2 + assert_kind_of DmsfFile, @file1 + assert_kind_of DmsfFile, @file4 + assert_kind_of DmsfLink, @folder_link + assert_kind_of DmsfLink, @file_link + end + + def test_create + # Folder link + folder_link = DmsfLink.new( + :target_project_id => @project1.id, + :target_id => @folder1.id, + :target_type => DmsfFolder.model_name, + :name => 'folder1_link2', + :project_id => @project1.id, + :created_at => DateTime.now(), + :updated_at => DateTime.now()) + assert folder_link.save + + # File link + file_link = DmsfLink.new( + :target_project_id => @project1.id, + :target_id => @file1.id, + :target_type => DmsfFile.model_name, + :name => 'file1_link2', + :project_id => @project1.id, + :created_at => DateTime.now(), + :updated_at => DateTime.now()) + assert file_link.save + end + + def test_validate_name_length + @folder_link.name = 'a' * 256 + assert !@folder_link.save + assert_equal 1, @folder_link.errors.count + end + + def test_validate_name_presence + @folder_link.name = '' + assert !@folder_link.save + assert_equal 1, @folder_link.errors.count + end + + def test_validate_target_id_presence + @folder_link.target_id = nil + assert !@folder_link.save + assert_equal 1, @folder_link.errors.count + end + + def test_belongs_to_project + @project1.destroy + assert_nil DmsfLink.find_by_id 1 + assert_nil DmsfLink.find_by_id 2 + end + + def test_belongs_to_dmsf_folder + @folder1.destroy + assert_nil DmsfLink.find_by_id 1 + assert_nil DmsfLink.find_by_id 2 + end + + def test_target_folder_id + assert_equal 2, @file_link.target_folder_id + assert_equal 1, @folder_link.target_folder_id + end + + def target_folder + assert_equal @folder2, @file_link.target_folder + assert_equal @folder1, @folder_link.target_folder + end + + def target_file_id + assert_equal 4, @file_link.target_file_id + assert_nil @folder_link.target_file + end + + def target_file + assert_equal @file4, @file_link.target_file + assert_nil @folder_link.target_file + end + + def target_project + assert_equal @project, @file_link.target_project + assert_equal @project, @folder_link.target_project + end + + def folder + assert_equal @folder1, @file_link.folder + assert_nil @folder_link.folder + end + + def title + assert_equal @file_link.name, @file_link.title + assert_equal @folder_link.name, @folder_link.title + end + + def test_destroy + @folder_link.destroy + assert_nil DmsfLink.find_by_id 1 + end +end \ No newline at end of file diff --git a/test/unit/dmsf_workflow_test.rb b/test/unit/dmsf_workflow_test.rb index 1aea1aeb..a3423ed5 100644 --- a/test/unit/dmsf_workflow_test.rb +++ b/test/unit/dmsf_workflow_test.rb @@ -38,6 +38,7 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest @revision1 = DmsfFileRevision.find_by_id 1 @revision2 = DmsfFileRevision.find_by_id 2 @project = Project.find_by_id 2 + @project5 = Project.find_by_id 5 end def test_truth @@ -152,8 +153,8 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest def test_delegates delegates = @wf1.delegates(nil, nil, nil) - assert_equal delegates.size, User.active.all.size - delegates = @wf1.delegates('Redmine', nil, nil) + assert_equal(delegates.all.count + 1, @project5.users.all.count) + delegates = @wf1.delegates('Dave', nil, nil) assert_equal delegates.size, 1 delegates = @wf1.delegates(nil, @wfsa1.id, 2) assert !delegates.any?{|user| user.id == @wfsa1.user_id}
<%=l(:field_project)%>