From 86ffcc09a9432dfd275c3bbd487c4e5871d05356 Mon Sep 17 00:00:00 2001
From: root
Date: Fri, 27 Jul 2012 23:30:12 +0100
Subject: [PATCH 01/61] Fixes #34 - dependency for redmine 2.0.3 added
---
CHANGELOG.md | 6 +++++-
init.rb | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 682e306e..eda0da02 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,12 @@
Changelog for Redmine DMSF
==========================
-1.4.5: *2012-07-20*
+1.4.6: *Not yet released*
-----------------------
+* Revisit: Issue #34 - fix does not function as expected on Rails < 3.2.6, Redmine 2.0.3 dependency added.
+
+1.4.5: *2012-07-20*
+-----------------
* New: Settings introduced to enable read-only or read-write stance to be taken with webdav
* Fix: Issue #27 - incorrect call to display column information from database (redmine 1.x fragment).
* Fix: Issue #28 - incompatible SQL in db migration script for postgresql
diff --git a/init.rb b/init.rb
index 8bdfb9eb..eed9b342 100644
--- a/init.rb
+++ b/init.rb
@@ -28,7 +28,7 @@ Redmine::Plugin.register :redmine_dmsf do
url "https://github.com/danmunn/redmine_dmsf"
author_url "https://code.google.com/p/redmine-dmsf/"
- requires_redmine :version_or_higher => '2.0.0'
+ requires_redmine :version_or_higher => '2.0.3'
settings :partial => 'settings/dmsf_settings',
:default => {
From c6045b0028128cc6757efc709d355fb516c4244d Mon Sep 17 00:00:00 2001
From: Daniel Munn
Date: Tue, 31 Jul 2012 08:12:53 +0100
Subject: [PATCH 02/61] Starting implementation of Permission models (very
early commit)
---
app/models/dmsf_lock.rb | 2 +-
app/models/dmsf_permission.rb | 22 ++++++++++++++++++++++
test/fixtures/dmsf_permissions.yml | 0
test/unit/dmsf_permission_test.rb | 26 ++++++++++++++++++++++++++
4 files changed, 49 insertions(+), 1 deletion(-)
create mode 100644 app/models/dmsf_permission.rb
create mode 100644 test/fixtures/dmsf_permissions.yml
create mode 100644 test/unit/dmsf_permission_test.rb
diff --git a/app/models/dmsf_lock.rb b/app/models/dmsf_lock.rb
index a3d603f1..1fba2785 100644
--- a/app/models/dmsf_lock.rb
+++ b/app/models/dmsf_lock.rb
@@ -1,6 +1,7 @@
# Redmine plugin for Document Management System "Features"
#
# Copyright (C) 2011 Vít Jonáš
+# Copyright (C) 2012 Daniel Munn
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -17,7 +18,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfLock < ActiveRecord::Base
-# unloadable
before_create :generate_uuid
belongs_to :file, :class_name => "DmsfFile", :foreign_key => "entity_id"
belongs_to :folder, :class_name => "DmsfFolder", :foreign_key => "entity_id"
diff --git a/app/models/dmsf_permission.rb b/app/models/dmsf_permission.rb
new file mode 100644
index 00000000..42f351ea
--- /dev/null
+++ b/app/models/dmsf_permission.rb
@@ -0,0 +1,22 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2011 Vít Jonáš
+# Copyright (C) 2012 Daniel Munn
+#
+# 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 DmsfPermission < ActiveRecord::Base
+ as_enum :scope, [:SCOPE_WRITE, :SCOPE_READ, :SCOPE_MODIFY, :SCOPE_LOCK, :SCOPE]
+end
diff --git a/test/fixtures/dmsf_permissions.yml b/test/fixtures/dmsf_permissions.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/test/unit/dmsf_permission_test.rb b/test/unit/dmsf_permission_test.rb
new file mode 100644
index 00000000..e50e3acf
--- /dev/null
+++ b/test/unit/dmsf_permission_test.rb
@@ -0,0 +1,26 @@
+require File.expand_path('../../test_helper.rb', __FILE__)
+
+class DmsfPermissionTest < RedmineDmsf::Test::UnitTest
+ attr_reader :perm
+ fixtures :projects, :users, :dmsf_folders, :dmsf_files, :dmsf_file_revisions,
+ :roles, :members, :member_roles, :enabled_modules, :enumerations
+
+ def setup
+ end
+
+ test "Static values compute" do
+ assert_equal 1, DmsfPermission::READ #Read / Browse
+ assert_equal 2, DmsfPermission::WRITE #Write (new file / owned file)
+ assert_equal 4, DmsfPermission::MODIFY #Modify existing file/folder - create revision
+ assert_equal 8, DmsfPermission::LOCK #Ability to lock/unlock
+
+ assert_equal 7, DmsfPermission::MODIFY | DmsfPermission::WRITE | DmsfPermission::READ
+ end
+
+ test "create" do
+
+# DmsfPermission
+ end
+
+end
+
From bb72b96185f023a595fdf6e3be7e699fd7a02d57 Mon Sep 17 00:00:00 2001
From: Jan
Date: Fri, 3 Aug 2012 13:47:47 +0300
Subject: [PATCH 03/61] Update README.md
Nikogiri -> Nokogiri
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 85b2b333..7b96bc43 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ As of version 1.4.4 of this plugin:
* Redmine 2.0.x
* Rails 3.2.x (Inline with Redmine installation requirement)
* zip (Gem)
- * Nikogiri 1.4.2 or greater (Gem)
+ * Nokogiri 1.4.2 or greater (Gem)
* UUIDTools 2.1.1 or greater (less than 2.2.0) (Gem)
* simple_enum (Gem)
From aa6daecbda28d1c9d3d1852152e0baaab5f3ceb3 Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Fri, 16 Nov 2012 14:51:29 +0100
Subject: [PATCH 04/61] url links bachward compatibility
---
config/routes.rb | 3 +++
1 file changed, 3 insertions(+)
diff --git a/config/routes.rb b/config/routes.rb
index d09f6280..5f4fe99b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -69,6 +69,9 @@ RedmineApp::Application.routes.draw do
get '/dmsf/files/:id/download/:download', :controller => 'dmsf_files', :action => 'show'
get '/dmsf/files/:id', :controller => 'dmsf_files', :action => 'show'
+ # Just to keep backward compatibility with old external direct links
+ get '/dmsf_files/:id', :controller => 'dmsf_files', :action => 'show'
+
#
# files_copy controller
# /dmsf/files//copy
From c2534d97c51ad9b4adf0c1c73980b74d3aa6d35a Mon Sep 17 00:00:00 2001
From: Daniel Munn
Date: Wed, 10 Apr 2013 06:28:23 +0200
Subject: [PATCH 05/61] Updating init.rb with correct version
[ci skip]
---
init.rb | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/init.rb b/init.rb
index 68e1a008..54c5dbe2 100644
--- a/init.rb
+++ b/init.rb
@@ -24,7 +24,7 @@ Redmine::Plugin.register :redmine_dmsf do
name "DMSF"
author "Vit Jonas / Daniel Munn"
description "Document Management System Features"
- version "1.4.5 stable"
+ version "1.4.6 devel"
url "https://github.com/danmunn/redmine_dmsf"
author_url "https://code.google.com/p/redmine-dmsf/"
@@ -72,7 +72,7 @@ Redmine::Plugin.register :redmine_dmsf do
unless entry.nil? || entry.deleted
title = args[1] ? args[1] : entry.title
revision = args[2] ? args[2] : ""
- return link_to "#{title}", :controller => "dmsf_files", :action => "show", :id => entry, :download => revision, :only_path => false
+ return link_to "#{title}", :controller => "dmsf_files", :action => "show", :id => entry, :download => revision, :only_path => false
end
nil
end
@@ -85,13 +85,13 @@ Redmine::Plugin.register :redmine_dmsf do
macro :dmsff do |obj, args|
if args.length < 1
- return link_to l(:link_documents), :controller => "dmsf", :action => "show", :id => @project, :only_path => false
+ return link_to l(:link_documents), :controller => "dmsf", :action => "show", :id => @project, :only_path => false
else
entry_id = args[0].strip
entry = DmsfFolder.find(entry_id)
unless entry.nil?
title = args[1] ? args[1] : entry.title
- return link_to "#{title}", :controller => "dmsf", :action => "show", :id => entry.project, :folder_id => entry, :only_path => false
+ return link_to "#{title}", :controller => "dmsf", :action => "show", :id => entry.project, :folder_id => entry, :only_path => false
end
end
nil
@@ -109,7 +109,7 @@ Redmine::Plugin.register :redmine_dmsf do
entry = DmsfFile.find(entry_id)
unless entry.nil? || entry.deleted
title = args[1] ? args[1] : entry.title
- return link_to "#{title}", :controller => "dmsf_files", :action => "show", :id => entry, :only_path => false
+ return link_to "#{title}", :controller => "dmsf_files", :action => "show", :id => entry, :only_path => false
end
nil
end
From 0b40abb821739fb7706e26eafa33c69dc06ba7a3 Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Thu, 9 May 2013 12:17:12 +0200
Subject: [PATCH 06/61] Approval workflows copied fron 1.5.0 devel
---
app/controllers/dmsf_workflows_controller.rb | 171 ++++++++++++++++++
app/helpers/dmsf_workflows_helper.rb | 45 +++++
app/models/dmsf_workflow.rb | 110 +++++++++++
app/models/dmsf_workflow_step.rb | 37 ++++
app/models/dmsf_workflow_step_action.rb | 24 +++
app/models/dmsf_workflow_step_assignment.rb | 26 +++
app/views/dmsf_workflows/_action.html.erb | 33 ++++
app/views/dmsf_workflows/_main.html.erb | 32 ++++
app/views/dmsf_workflows/_steps.html.erb | 81 +++++++++
app/views/dmsf_workflows/action.html.erb | 1 +
app/views/dmsf_workflows/action.js.erb | 3 +
app/views/dmsf_workflows/add_step.html.erb | 1 +
.../autocomplete_for_user.js.erb | 1 +
app/views/dmsf_workflows/edit.html.erb | 1 +
app/views/dmsf_workflows/index.html.erb | 1 +
app/views/dmsf_workflows/log.html.erb | 1 +
app/views/dmsf_workflows/new.html.erb | 12 ++
app/views/dmsf_workflows/remove_step.html.erb | 1 +
.../dmsf_workflows/reorder_steps.html.erb | 1 +
assets/images/ticket_go.png | Bin 0 -> 608 bytes
assets/javascripts/dmsf.css | 50 +++++
assets/stylesheets/dmsf.css | 5 +
config/locales/en.yml | 17 ++
config/routes.rb | 13 ++
.../20120822100401_create_dmsf_workflows.rb | 13 ++
...120822100402_create_dmsf_workflow_steps.rb | 15 ++
...3_create_dmsf_workflow_step_assignments.rb | 17 ++
...00404_create_dmsf_workflow_step_actions.rb | 17 ++
init.rb | 13 ++
lib/redmine_dmsf/patches/project_patch.rb | 2 +-
.../patches/project_tabs_extended.rb | 5 +-
test/fixtures/dmsf_workflow_step_actions.yml | 22 +++
.../dmsf_workflow_step_assignments.yml | 6 +
test/fixtures/dmsf_workflow_steps.yml | 21 +++
test/fixtures/dmsf_workflows.yml | 8 +
.../dmsf_workflow_controller_test.rb | 171 ++++++++++++++++++
test/unit/dmsf_workflow_step_action_test.rb | 60 ++++++
.../dmsf_workflow_step_assignment_test.rb | 53 ++++++
test/unit/dmsf_workflow_step_test.rb | 76 ++++++++
test/unit/dmsf_workflow_test.rb | 54 ++++++
40 files changed, 1217 insertions(+), 3 deletions(-)
create mode 100644 app/controllers/dmsf_workflows_controller.rb
create mode 100644 app/helpers/dmsf_workflows_helper.rb
create mode 100644 app/models/dmsf_workflow.rb
create mode 100644 app/models/dmsf_workflow_step.rb
create mode 100644 app/models/dmsf_workflow_step_action.rb
create mode 100644 app/models/dmsf_workflow_step_assignment.rb
create mode 100644 app/views/dmsf_workflows/_action.html.erb
create mode 100644 app/views/dmsf_workflows/_main.html.erb
create mode 100644 app/views/dmsf_workflows/_steps.html.erb
create mode 100644 app/views/dmsf_workflows/action.html.erb
create mode 100644 app/views/dmsf_workflows/action.js.erb
create mode 100644 app/views/dmsf_workflows/add_step.html.erb
create mode 100644 app/views/dmsf_workflows/autocomplete_for_user.js.erb
create mode 100644 app/views/dmsf_workflows/edit.html.erb
create mode 100644 app/views/dmsf_workflows/index.html.erb
create mode 100644 app/views/dmsf_workflows/log.html.erb
create mode 100644 app/views/dmsf_workflows/new.html.erb
create mode 100644 app/views/dmsf_workflows/remove_step.html.erb
create mode 100644 app/views/dmsf_workflows/reorder_steps.html.erb
create mode 100644 assets/images/ticket_go.png
create mode 100644 assets/javascripts/dmsf.css
create mode 100644 db/migrate/20120822100401_create_dmsf_workflows.rb
create mode 100644 db/migrate/20120822100402_create_dmsf_workflow_steps.rb
create mode 100644 db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb
create mode 100644 db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb
create mode 100644 test/fixtures/dmsf_workflow_step_actions.yml
create mode 100644 test/fixtures/dmsf_workflow_step_assignments.yml
create mode 100644 test/fixtures/dmsf_workflow_steps.yml
create mode 100644 test/fixtures/dmsf_workflows.yml
create mode 100644 test/functional/dmsf_workflow_controller_test.rb
create mode 100644 test/unit/dmsf_workflow_step_action_test.rb
create mode 100644 test/unit/dmsf_workflow_step_assignment_test.rb
create mode 100644 test/unit/dmsf_workflow_step_test.rb
create mode 100644 test/unit/dmsf_workflow_test.rb
diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb
new file mode 100644
index 00000000..34ca0555
--- /dev/null
+++ b/app/controllers/dmsf_workflows_controller.rb
@@ -0,0 +1,171 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 DmsfWorkflowsController < ApplicationController
+ unloadable
+ layout :workflows_layout
+
+ before_filter :find_workflow, :except => [:create, :new, :index]
+ before_filter :find_project
+ before_filter :authorize_global, :except => [:action, :new_action]
+
+ def index
+ if @project
+ @workflow_pages, @workflows = paginate DmsfWorkflow.where(:project_id => @project.id), :per_page => 25
+ else
+ @workflow_pages, @workflows = paginate DmsfWorkflow.where(:project_id => nil), :per_page => 25
+ end
+ end
+
+ def action
+ end
+
+ def new_action
+ logger.info '>>>>>>>>>>>>>>>>>>>>>>> YES!'
+ end
+
+ def log
+ end
+
+ def new
+ @workflow = DmsfWorkflow.new
+ end
+
+ def create
+ @workflow = DmsfWorkflow.new(:name => params[:dmsf_workflow][:name], :project_id => params[:project_id])
+ if request.post? && @workflow.save
+ flash[:notice] = l(:notice_successful_create)
+ if @project
+ redirect_to settings_project_path(@project, :tab => 'dmsf')
+ else
+ redirect_to dmsf_workflows_path
+ end
+ else
+ render :action => 'new'
+ end
+ end
+
+ def edit
+ end
+
+ def update
+ if request.put? && @workflow.update_attributes({:name => params[:dmsf_workflow][:name]})
+ flash[:notice] = l(:notice_successful_update)
+ if @project
+ redirect_to settings_project_path(@project, :tab => 'dmsf')
+ else
+ redirect_to dmsf_workflows_path
+ end
+ else
+ render :action => 'edit'
+ end
+ end
+
+ def destroy
+ begin
+ @workflow.destroy
+ rescue
+ flash[:error] = l(:error_unable_delete_dmsf_workflow)
+ end
+ if @project
+ redirect_to settings_project_path(@project, :tab => 'dmsf')
+ else
+ redirect_to dmsf_workflows_path
+ end
+ end
+
+ def autocomplete_for_user
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ def add_step
+ if request.post?
+ users = User.find_all_by_id(params[:user_ids])
+ if params[:step] == '0'
+ if @workflow.steps.count > 0
+ step = @workflow.steps.last + 1
+ else
+ step = 1
+ end
+ else
+ step = params[:step].to_i
+ end
+ operator = 1 ? params[:commit] == l(:dmsf_and) : 0
+ users.each do |user|
+ @workflow.dmsf_workflow_steps << DmsfWorkflowStep.new(
+ :dmsf_workflow_id => @workflow.id,
+ :step => step,
+ :user_id => user.id,
+ :operator => operator)
+ end
+ @workflow.save
+ end
+ respond_to do |format|
+ format.html
+ end
+ end
+
+ 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)
+ end
+ @workflow.dmsf_workflow_steps.each do |ws|
+ n = ws.step.to_i
+ if n > params[:step].to_i
+ ws.step = n - 1
+ ws.save
+ end
+ end
+ end
+ respond_to do |format|
+ format.html
+ end
+ end
+
+ def reorder_steps
+ if request.put?
+ @workflow.reorder_steps params[:step].to_i, params[:workflow_step][:move_to]
+ end
+ respond_to do |format|
+ format.html
+ end
+ end
+
+ private
+
+ def find_workflow
+ @workflow = DmsfWorkflow.find_by_id(params[:id])
+ end
+
+ def find_project
+ if @workflow
+ @project = @workflow.project
+ elsif params[:project_id].present?
+ @project = Project.find_by_id params[:project_id]
+ end
+ end
+
+ def workflows_layout
+ find_workflow
+ find_project
+ @project ? 'base' : 'admin'
+ end
+end
diff --git a/app/helpers/dmsf_workflows_helper.rb b/app/helpers/dmsf_workflows_helper.rb
new file mode 100644
index 00000000..c61c2ac5
--- /dev/null
+++ b/app/helpers/dmsf_workflows_helper.rb
@@ -0,0 +1,45 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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.
+
+module DmsfWorkflowsHelper
+
+ def render_principals_for_new_dmsf_workflow_users(workflow)
+ scope = User.active.sorted.like(params[:q])
+ principal_count = scope.count
+ principal_pages = Redmine::Pagination::Paginator.new principal_count, 100, params['page']
+ principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all
+
+ s = content_tag('div', principals_check_box_tags('user_ids[]', principals), :id => 'principals')
+
+ links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options|
+ link_to text, autocomplete_for_user_dmsf_workflow_path(workflow, parameters.merge(:q => params[:q], :format => 'js')), :remote => true
+ }
+
+ s + content_tag('p', links, :class => 'pagination')
+ end
+
+ def dmsf_workflow_steps_options_for_select(steps)
+ options = Array.new
+ options << [l(:dmsf_new_step), 0]
+ steps.each do |step|
+ options << [step.to_s, step]
+ end
+ options_for_select(options, 0)
+ end
+
+end
diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb
new file mode 100644
index 00000000..cb214588
--- /dev/null
+++ b/app/models/dmsf_workflow.rb
@@ -0,0 +1,110 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 DmsfWorkflow < ActiveRecord::Base
+ belongs_to :project
+
+ has_many :dmsf_workflow_steps, :dependent => :destroy
+
+ validates_uniqueness_of :name
+ validates :name, :presence => true
+ validates_length_of :name, :maximum => 255
+
+ def self.workflows(project)
+ project ? where(:project_id => project) : where('project_id IS NULL')
+ end
+
+ def project
+ @project = Project.find_by_id(project_id) unless @project
+ @project
+ end
+
+ def to_s
+ name
+ end
+
+ def approvals(step)
+ wa = Array.new
+ dmsf_workflow_steps.each do |s|
+ if s.step == step
+ wa << s
+ end
+ end
+ wa.sort_by { |obj| -obj.operator }
+ end
+
+ def steps
+ ws = Array.new
+ dmsf_workflow_steps.each do |s|
+ unless ws.include? s.step
+ ws << s.step
+ end
+ end
+ ws.sort
+ end
+
+ def reorder_steps(step, move_to)
+ case move_to
+ when 'highest'
+ unless step == 1
+ dmsf_workflow_steps.each do |ws|
+ if ws.step < step
+ ws.update_attribute('step', ws.step + 1)
+ elsif ws.step == step
+ ws.update_attribute('step', 1)
+ end
+ end
+ end
+ when 'higher'
+ unless step == 1
+ dmsf_workflow_steps.each do |ws|
+ if ws.step == step - 1
+ ws.update_attribute('step', step)
+ elsif ws.step == step
+ ws.update_attribute('step', step - 1)
+ end
+ end
+ end
+ when 'lower'
+ unless step == steps.count
+ dmsf_workflow_steps.each do |ws|
+ if ws.step == step + 1
+ ws.update_attribute('step', step)
+ elsif ws.step == step
+ ws.update_attribute('step', step + 1)
+ end
+ end
+ end
+ when 'lowest'
+ size = steps.count
+ unless step == size
+ dmsf_workflow_steps.each do |ws|
+ if ws.step > step
+ ws.update_attribute('step', ws.step - 1)
+ elsif ws.step == step
+ ws.update_attribute('step', size)
+ end
+ end
+ end
+ end
+ end
+
+ def delegates
+ User.all
+ end
+end
\ No newline at end of file
diff --git a/app/models/dmsf_workflow_step.rb b/app/models/dmsf_workflow_step.rb
new file mode 100644
index 00000000..4d33a284
--- /dev/null
+++ b/app/models/dmsf_workflow_step.rb
@@ -0,0 +1,37 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 DmsfWorkflowStep < ActiveRecord::Base
+ belongs_to :workflow
+
+ has_many :dmsf_workflow_step_assignments, :dependent => :destroy
+
+ validates :dmsf_workflow_id, :presence => true
+ validates :step, :presence => true
+ validates :user_id, :presence => true
+ validates :operator, :presence => true
+ validates_uniqueness_of :user_id, :scope => [:dmsf_workflow_id, :step]
+
+ def soperator
+ operator == 1 ? l(:dmsf_and) : l(:dmsf_or)
+ end
+
+ def user
+ User.find(user_id)
+ end
+end
\ No newline at end of file
diff --git a/app/models/dmsf_workflow_step_action.rb b/app/models/dmsf_workflow_step_action.rb
new file mode 100644
index 00000000..bdc10ee1
--- /dev/null
+++ b/app/models/dmsf_workflow_step_action.rb
@@ -0,0 +1,24 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 DmsfWorkflowStepAction < ActiveRecord::Base
+ belongs_to :dmsf_workflow_step_assignment
+
+ validates :dmsf_workflow_step_assignment_id, :presence => true
+ validates :action, :presence => true
+end
\ No newline at end of file
diff --git a/app/models/dmsf_workflow_step_assignment.rb b/app/models/dmsf_workflow_step_assignment.rb
new file mode 100644
index 00000000..1ffc5250
--- /dev/null
+++ b/app/models/dmsf_workflow_step_assignment.rb
@@ -0,0 +1,26 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 DmsfWorkflowStepAssignment < ActiveRecord::Base
+ belongs_to :dmsf_workflow_step
+
+ has_many :dmsf_workflow_step_actions, :dependent => :destroy
+
+ validates :dmsf_workflow_step_id, :presence => true
+ validates :dmsf_file_revision_id, :presence => true
+end
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/_action.html.erb b/app/views/dmsf_workflows/_action.html.erb
new file mode 100644
index 00000000..99b49e6e
--- /dev/null
+++ b/app/views/dmsf_workflows/_action.html.erb
@@ -0,0 +1,33 @@
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/_steps.html.erb b/app/views/dmsf_workflows/_steps.html.erb
new file mode 100644
index 00000000..70afad2a
--- /dev/null
+++ b/app/views/dmsf_workflows/_steps.html.erb
@@ -0,0 +1,81 @@
+<% if @workflow.project %>
+
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/action.html.erb b/app/views/dmsf_workflows/action.html.erb
new file mode 100644
index 00000000..d1a62773
--- /dev/null
+++ b/app/views/dmsf_workflows/action.html.erb
@@ -0,0 +1 @@
+
WorkflowController#action
diff --git a/app/views/dmsf_workflows/action.js.erb b/app/views/dmsf_workflows/action.js.erb
new file mode 100644
index 00000000..107ab390
--- /dev/null
+++ b/app/views/dmsf_workflows/action.js.erb
@@ -0,0 +1,3 @@
+$('#ajax-modal').html('<%= escape_javascript(render :partial => 'action', :locals => {:workflow => @workflow}) %>');
+showModal('ajax-modal', '400px');
+$('#ajax-modal').addClass('new-action');
diff --git a/app/views/dmsf_workflows/add_step.html.erb b/app/views/dmsf_workflows/add_step.html.erb
new file mode 100644
index 00000000..88143721
--- /dev/null
+++ b/app/views/dmsf_workflows/add_step.html.erb
@@ -0,0 +1 @@
+<%= render 'steps' %>
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/autocomplete_for_user.js.erb b/app/views/dmsf_workflows/autocomplete_for_user.js.erb
new file mode 100644
index 00000000..e74e6b4c
--- /dev/null
+++ b/app/views/dmsf_workflows/autocomplete_for_user.js.erb
@@ -0,0 +1 @@
+$('#users').html('<%= escape_javascript(render_principals_for_new_dmsf_workflow_users(@workflow)) %>');
diff --git a/app/views/dmsf_workflows/edit.html.erb b/app/views/dmsf_workflows/edit.html.erb
new file mode 100644
index 00000000..88143721
--- /dev/null
+++ b/app/views/dmsf_workflows/edit.html.erb
@@ -0,0 +1 @@
+<%= render 'steps' %>
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/index.html.erb b/app/views/dmsf_workflows/index.html.erb
new file mode 100644
index 00000000..6dce40e9
--- /dev/null
+++ b/app/views/dmsf_workflows/index.html.erb
@@ -0,0 +1 @@
+<%= render 'main' %>
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/log.html.erb b/app/views/dmsf_workflows/log.html.erb
new file mode 100644
index 00000000..6231320b
--- /dev/null
+++ b/app/views/dmsf_workflows/log.html.erb
@@ -0,0 +1 @@
+
WorkflowController#log
diff --git a/app/views/dmsf_workflows/new.html.erb b/app/views/dmsf_workflows/new.html.erb
new file mode 100644
index 00000000..d2f0103f
--- /dev/null
+++ b/app/views/dmsf_workflows/new.html.erb
@@ -0,0 +1,12 @@
+
<%= submit_tag(l(:submit_create)) %>
+
<% end %>
<% end %>
diff --git a/app/views/dmsf_files/show.html.erb b/app/views/dmsf_files/show.html.erb
index a0263f83..edd3573f 100644
--- a/app/views/dmsf_files/show.html.erb
+++ b/app/views/dmsf_files/show.html.erb
@@ -101,11 +101,13 @@
<%= label_tag("", l(:label_workflow) + ":") %>
- <%= case revision.workflow
- when 1 then l(:option_workflow_waiting_for_approval)
- when 2 then l(:option_workflow_approved)
- else l(:option_workflow_none)
- end %>
+ <%= #case revision.workflow
+ # when 1 then l(:option_workflow_waiting_for_approval)
+ # when 2 then l(:option_workflow_approved)
+ # else l(:option_workflow_none)
+ # end
+ revision.workflow_str
+ %>
<%= label_tag("", l(:label_workflow) + ":") %>
- <%= case upload.workflow
- when 1 then l(:option_workflow_waiting_for_approval)
- when 2 then l(:option_workflow_approved)
- else l(:option_workflow_none)
- end %>
+ <%= #case upload.workflow
+ # when 1 then l(:option_workflow_waiting_for_approval)
+ # when 2 then l(:option_workflow_approved)
+ # else l(:option_workflow_none)
+ # end
+ upload.workflow_str
+ %>
<% end %>
diff --git a/app/views/dmsf_workflows/action.js.erb b/app/views/dmsf_workflows/action.js.erb
index 107ab390..b4294050 100644
--- a/app/views/dmsf_workflows/action.js.erb
+++ b/app/views/dmsf_workflows/action.js.erb
@@ -1,3 +1,3 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'action', :locals => {:workflow => @workflow}) %>');
showModal('ajax-modal', '400px');
-$('#ajax-modal').addClass('new-action');
+$('#ajax-modal').addClass('new-action');
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/new_action.js.erb b/app/views/dmsf_workflows/new_action.js.erb
new file mode 100644
index 00000000..92d31fd2
--- /dev/null
+++ b/app/views/dmsf_workflows/new_action.js.erb
@@ -0,0 +1,2 @@
+$('#ajax-modal').modal('hide').empty();
+window.location.reload();
\ No newline at end of file
diff --git a/assets/images/draft.png b/assets/images/draft.png
new file mode 100644
index 0000000000000000000000000000000000000000..6902ab0cc75af10f160eb1b5f143c77b7f6dc3f8
GIT binary patch
literal 461
zcmV;;0W$uHP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2i*k^
z2puUwI-kD)00B)&L_t(2&vlSbCeG^&Ux!%-(Xnern{Y$XAYxD5tvASz>`=aPP7H}U6
zM7x^M8>$U|ZLq?p3BlH}4M6JD0pRdl@#NA4K(A{iSQ((0p}*4rpu1f$+@b@})~wT_
z>&0l=(_8+h;CbwwDaWI%V&+OYU)U~JuG(|?Z~Q=FE#<`G1Ik$w>X)7lgM)L2!LUJn
zl^~J6!M=ZW#GhKn03Sdk+{pM)D*&PuBNcl9{_KF!FDOrX`(+=XY;WUU;S@KTJzb
zm+jlMr*tV|6r{Ac(J{&{|QmLNSH00000NkvXXu0mjf
DQQ6Jc
literal 0
HcmV?d00001
diff --git a/assets/javascripts/dmsf.css b/assets/javascripts/dmsf.css
deleted file mode 100644
index 72eaa000..00000000
--- a/assets/javascripts/dmsf.css
+++ /dev/null
@@ -1,50 +0,0 @@
-/* An image next to the approval workflow item in the administration menu */
-#admin-menu a.workflow { background-image: url(../images/ticket_go.png); }
-
-.dmsf-entity-container {
- padding: 0% 2%;
-}
-
-.dmsf-entity-container .dmsf-entity {
- padding: 5px;
- line-height: 28px;
-}
-
-li.dmsf-entity-file,
-li.dmsf-entity-folder {
- border: 1px solid #628DB6;
- border-width: 1px 0;
- list-style: none;
- zoom: 1;
- overflow: hidden;
-}
-
-.dmsf-entity-container .dmsf-entity .dmsf-col {
- float: left;
- padding-top: 1px;
-}
-
-.dmsf-entity-container .dmsf-entity .dmsf-col.dmsf-entity-name {
- width: 30%;
-}
-
-.dmsf-entity-container .dmsf-entity .dmsf-col.dmsf-entity-cat {
- width: 15%;
-}
-
-.dmsf-entity-container .dmsf-entity .dmsf-col.dmsf-entity-lock {
- width: 5%;
-}
-
-.dmsf-entity-container .dmsf-entity .dmsf-col.dmsf-entity-size {
- width: 10%;
-}
-.dmsf-entity-container .dmsf-entity .dmsf-col.dmsf-entity-modified {
- width: 10%;
-}
-.dmsf-entity-container .dmsf-entity .dmsf-col.dmsf-entity-action {
- width: 20%;
-}
-
-#users_for_delegate {height: 200px; overflow:auto;}
-#users_for_delegate label {display: block;}
\ No newline at end of file
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 41a96af5..bf4019e4 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -55,7 +55,7 @@ en:
:title_locked_by_user: "Locked by %{user}"
:title_locked_by_you: "Locked by you"
:title_waiting_for_approval: "Waiting for Approval"
- :title_approved: "Approved"
+ :title_approved: "Approved"
:title_unlock_file: "Unlock to allow changes for other members"
:title_lock_file: "Lock to prevent changes for other members"
:submit_download: "Download"
@@ -95,9 +95,7 @@ en:
:info_changed_by_user: "%{changed} by %{user}"
:label_filename: "Filename"
:label_version: "Version"
- :label_workflow: "Workflow"
- :option_workflow_waiting_for_approval: "Waiting for approval"
- :option_workflow_approved: "Approved"
+ :label_workflow: "Workflow"
:option_workflow_none: "None"
:label_mime: "Mime"
:label_size: "Size"
@@ -223,5 +221,8 @@ en:
label_dmsf: DMSF
label_dmsf_wokflow_action_approve: Approve
label_dmsf_wokflow_action_reject: Reject
- label_dmsf_wokflow_action_delegate: 'Delegate to:'
+ label_dmsf_wokflow_action_delegate: 'Delegate to'
message_dmsf_wokflow_note: Your note...
+ title_draft: Draft
+ title_rejected: Rejected
+ label_dmsf_wokflow_action_start: Start workflow
\ No newline at end of file
diff --git a/db/migrate/20120822100401_create_dmsf_workflows.rb b/db/migrate/20120822100401_create_dmsf_workflows.rb
index c6f20b9a..fbb00c29 100644
--- a/db/migrate/20120822100401_create_dmsf_workflows.rb
+++ b/db/migrate/20120822100401_create_dmsf_workflows.rb
@@ -1,3 +1,21 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 CreateDmsfWorkflows < ActiveRecord::Migration
def self.up
create_table :dmsf_workflows do |t|
@@ -5,9 +23,14 @@ class CreateDmsfWorkflows < ActiveRecord::Migration
t.references :project
end
add_index :dmsf_workflows, [:name], :unique => true
+
+ change_table :dmsf_file_revisions do |t|
+ t.references :dmsf_workflow
+ end
end
def self.down
+ remove_column :dmsf_file_revisions, :dmsf_workflow_id
drop_table :dmsf_workflows
end
end
diff --git a/db/migrate/20120822100402_create_dmsf_workflow_steps.rb b/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
index 10c1f313..8d8b3c3a 100644
--- a/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
+++ b/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
@@ -1,3 +1,21 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 CreateDmsfWorkflowSteps < ActiveRecord::Migration
def self.up
create_table :dmsf_workflow_steps do |t|
diff --git a/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb b/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb
index c62f2b69..aff1e31f 100644
--- a/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb
+++ b/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb
@@ -1,3 +1,21 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 CreateDmsfWorkflowStepAssignments < ActiveRecord::Migration
def self.up
create_table :dmsf_workflow_step_assignments do |t|
diff --git a/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb b/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb
index 77663ab7..e7704c5e 100644
--- a/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb
+++ b/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb
@@ -1,3 +1,21 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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 CreateDmsfWorkflowStepActions < ActiveRecord::Migration
def self.up
create_table :dmsf_workflow_step_actions do |t|
diff --git a/init.rb b/init.rb
index 1e78d64a..f864c5d9 100644
--- a/init.rb
+++ b/init.rb
@@ -66,9 +66,9 @@ Redmine::Plugin.register :redmine_dmsf do
menu.push :approvalworkflows, {:controller => 'dmsf_workflows', :action => 'index'}, :caption => :label_dmsf_workflow_plural
end
- # Adds javascript and stylesheet tags for project tree view
+ # Adds stylesheet tag
class DmsfViewListener < Redmine::Hook::ViewListener
- def view_layouts_base_html_head(context)
+ def view_layouts_base_html_head(context)
stylesheet_link_tag('dmsf', :plugin => :redmine_dmsf)
end
end
From 64d8c521df3a6c162c76026629f444b22bf6b77c Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Fri, 24 May 2013 14:25:36 +0200
Subject: [PATCH 09/61] Assigning of approval workflows to revisions
---
app/controllers/dmsf_controller.rb | 18 +++-
app/controllers/dmsf_workflows_controller.rb | 68 ++++++++++----
app/helpers/dmsf_workflows_helper.rb | 21 ++++-
app/models/dmsf_file_revision.rb | 27 +++---
app/models/dmsf_workflow.rb | 52 ++++++++---
app/models/dmsf_workflow_step.rb | 14 +--
app/models/dmsf_workflow_step_action.rb | 1 +
app/views/dmsf/show.html.erb | 87 ++++++++++--------
.../dmsf_files/_file_new_revision.html.erb | 2 +-
app/views/dmsf_files/show.html.erb | 71 ++++++--------
app/views/dmsf_mailer/files_updated.html.erb | 2 +-
app/views/dmsf_mailer/files_updated.text.erb | 2 +-
.../dmsf_mailer/files_updated.text.html.rhtml | 2 +-
.../files_updated.text.plain.rhtml | 2 +-
app/views/dmsf_upload/_upload_file.html.erb | 15 +--
.../dmsf_upload/_upload_file_locked.html.erb | 8 +-
app/views/dmsf_workflows/_action.html.erb | 26 ++----
app/views/dmsf_workflows/_assign.html.erb | 21 +++++
app/views/dmsf_workflows/_steps.html.erb | 4 +-
app/views/dmsf_workflows/action.html.erb | 1 -
app/views/dmsf_workflows/assign.js.erb | 3 +
.../autocomplete_for_user.html.erb | 1 +
.../autocomplete_for_user.js.erb | 1 -
assets/images/approve.png | Bin 535 -> 0 bytes
assets/images/approved.png | Bin 262 -> 752 bytes
assets/images/askforapproval.png | Bin 641 -> 0 bytes
assets/images/draft.png | Bin 461 -> 459 bytes
assets/images/none.png | Bin 0 -> 776 bytes
assets/images/rejected.png | Bin 0 -> 631 bytes
assets/images/waiting_for_approval.png | Bin 0 -> 630 bytes
assets/images/waitingforapproval.png | Bin 412 -> 0 bytes
assets/images/workflowdisabled.png | Bin 1392 -> 0 bytes
assets/stylesheets/dmsf.css | 28 +++++-
config/locales/en.yml | 9 +-
config/routes.rb | 5 +-
init.rb | 10 +-
36 files changed, 309 insertions(+), 192 deletions(-)
create mode 100644 app/views/dmsf_workflows/_assign.html.erb
delete mode 100644 app/views/dmsf_workflows/action.html.erb
create mode 100644 app/views/dmsf_workflows/assign.js.erb
create mode 100644 app/views/dmsf_workflows/autocomplete_for_user.html.erb
delete mode 100644 app/views/dmsf_workflows/autocomplete_for_user.js.erb
delete mode 100644 assets/images/approve.png
delete mode 100644 assets/images/askforapproval.png
create mode 100644 assets/images/none.png
create mode 100644 assets/images/rejected.png
create mode 100644 assets/images/waiting_for_approval.png
delete mode 100644 assets/images/waitingforapproval.png
delete mode 100644 assets/images/workflowdisabled.png
diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb
index 579ca759..211f4d4b 100644
--- a/app/controllers/dmsf_controller.rb
+++ b/app/controllers/dmsf_controller.rb
@@ -255,8 +255,22 @@ class DmsfController < ApplicationController
redirect_to params[:current] ? params[:current] :
{:controller => "dmsf", :action => "show", :id => @project, :folder_id => @folder.folder}
end
-
-
+
+ def assign
+ end
+
+ def assignment
+ revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id]
+ if revision
+ revision.set_workflow(params[:dmsf_workflow_id], params[:action])
+ revision.assign_workflow(params[:dmsf_workflow_id])
+ if request.post? && revision.save
+ flash[:notice] = l(:notice_successful_create)
+ end
+ end
+ redirect_to params[:current] ? params[:current] :
+ {:controller => "dmsf", :action => "show", :id => @project, :folder_id => @folder.folder}
+ end
private
diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb
index 33bb5806..9416ea3b 100644
--- a/app/controllers/dmsf_workflows_controller.rb
+++ b/app/controllers/dmsf_workflows_controller.rb
@@ -20,9 +20,9 @@ class DmsfWorkflowsController < ApplicationController
unloadable
layout :workflows_layout
- before_filter :find_workflow, :except => [:create, :new, :index]
- before_filter :find_project
- before_filter :authorize_global, :except => [:action, :new_action]
+ before_filter :find_workflow, :except => [:create, :new, :index, :assign, :assignment]
+ before_filter :find_project, :except => [:start]
+ before_filter :authorize_global #, :except => [:action, :new_action]
def index
if @project
@@ -35,18 +35,40 @@ class DmsfWorkflowsController < ApplicationController
def action
end
- def new_action
- action = DmsfWorkflowStepAction.new(
- :dmsf_workflow_step_assignment_id => params[:dmsf_workflow_step_assignment_id],
- :action => params[:step_action],
- :note => params[:note])
- if request.post? && action.save
- @workflow.try_finish params[:dmsf_file_revision_id]
- flash[:notice] = l(:notice_successful_create)
- end
- # TODO: Refresh the page!
+ def new_action
+ if params[:commit] == l(:submit_commit)
+ action = DmsfWorkflowStepAction.new(
+ :dmsf_workflow_step_assignment_id => params[:dmsf_workflow_step_assignment_id],
+ :action => params[:step_action],
+ :note => params[:note])
+ if request.post?
+ if action.save
+ @workflow.try_finish params[:dmsf_file_revision_id], action, params[:user_id]
+ flash[:notice] = l(:notice_successful_update)
+ else
+ flash[:error] = l(:error_empty_note)
+ end
+ end
+ end
redirect_to :back
end
+
+ def assign
+ end
+
+ def assignment
+ if params[:commit] == l(:button_assign)
+ revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id]
+ if revision
+ revision.set_workflow(params[:dmsf_workflow_id], params[:action])
+ revision.assign_workflow(params[:dmsf_workflow_id])
+ if request.post? && revision.save
+ flash[:notice] = l(:notice_successful_update)
+ end
+ end
+ end
+ redirect_to :back
+ end
def log
end
@@ -87,7 +109,8 @@ class DmsfWorkflowsController < ApplicationController
def destroy
begin
- @workflow.destroy
+ @workflow.destroy
+ flash[:notice] = l(:notice_successful_delete)
rescue
flash[:error] = l(:error_unable_delete_dmsf_workflow)
end
@@ -98,10 +121,8 @@ class DmsfWorkflowsController < ApplicationController
end
end
- def autocomplete_for_user
- respond_to do |format|
- format.js
- end
+ def autocomplete_for_user
+ render :layout => false
end
def add_step
@@ -158,6 +179,17 @@ class DmsfWorkflowsController < ApplicationController
end
end
+ def start
+ revision = DmsfFileRevision.find_by_id(params[:dmsf_file_revision_id])
+ if revision
+ revision.set_workflow(@workflow.id, params[:action])
+ if request.post? && revision.save
+ flash[:notice] = l(:notice_successful_update)
+ end
+ end
+ redirect_to :back
+ end
+
private
def find_workflow
diff --git a/app/helpers/dmsf_workflows_helper.rb b/app/helpers/dmsf_workflows_helper.rb
index 65a9371d..690e109d 100644
--- a/app/helpers/dmsf_workflows_helper.rb
+++ b/app/helpers/dmsf_workflows_helper.rb
@@ -18,19 +18,24 @@
module DmsfWorkflowsHelper
- def render_principals_for_new_dmsf_workflow_users(workflow)
- scope = User.active.sorted.like(params[:q])
+ def render_principals_for_new_dmsf_workflow_users(workflow, dmsf_workflow_step_assignment_id, dmsf_file_revision_id)
+ scope = workflow.delegates(params[:q], dmsf_workflow_step_assignment_id, dmsf_file_revision_id, nil)
principal_count = scope.count
- principal_pages = Redmine::Pagination::Paginator.new principal_count, 100, params['page']
+ principal_pages = Redmine::Pagination::Paginator.new principal_count, 10, params['page']
principals = scope.offset(principal_pages.offset).limit(principal_pages.per_page).all
- s = content_tag('div', principals_check_box_tags('user_ids[]', principals), :id => 'principals')
+ if dmsf_workflow_step_assignment_id
+ s = content_tag('div', principals_radio_button_tags('step_action', principals), :id => 'users_for_delegate')
+ else
+ s = content_tag('div', principals_check_box_tags('user_ids[]', principals), :id => 'users')
+ end
links = pagination_links_full(principal_pages, principal_count, :per_page_links => false) {|text, parameters, options|
link_to text, autocomplete_for_user_dmsf_workflow_path(workflow, parameters.merge(:q => params[:q], :format => 'js')), :remote => true
}
s + content_tag('p', links, :class => 'pagination')
+ s.html_safe
end
def dmsf_workflow_steps_options_for_select(steps)
@@ -50,4 +55,12 @@ module DmsfWorkflowsHelper
end
options_for_select(options, :selected => dmsf_workflow_id)
end
+
+ def principals_radio_button_tags(name, principals)
+ s = ''
+ principals.each do |principal|
+ s << "\n"
+ end
+ s.html_safe
+ end
end
diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb
index a28c96be..0ce4c46f 100644
--- a/app/models/dmsf_file_revision.rb
+++ b/app/models/dmsf_file_revision.rb
@@ -156,19 +156,22 @@ class DmsfFileRevision < ActiveRecord::Base
return new_revision
end
- def workflow_str
- str = ''
- if dmsf_workflow_id
+ def workflow_str(name)
+ if name && dmsf_workflow_id
wf = DmsfWorkflow.find_by_id(dmsf_workflow_id)
str = "#{wf.name} - " if wf
+ else
+ str = ''
end
case workflow
- when 1
+ when DmsfWorkflow::STATE_WAITING_FOR_APPROVAL
str + l(:title_waiting_for_approval)
- when 2
+ when DmsfWorkflow::STATE_APPROVED
str + l(:title_approved)
- when 3
+ when DmsfWorkflow::STATE_DRAFT
str + l(:title_draft)
+ when DmsfWorkflow::STATE_REJECTED
+ str + l(:title_rejected)
else
str
end
@@ -178,21 +181,21 @@ class DmsfFileRevision < ActiveRecord::Base
if User.current.allowed_to?(:file_approval, self.file.project)
unless dmsf_workflow_id.blank?
self.dmsf_workflow_id = dmsf_workflow_id
- if commit == l(:label_dmsf_wokflow_action_start)
- self.workflow = 1 # Waiting for approval
+ if commit == 'start'
+ self.workflow = DmsfWorkflow::STATE_WAITING_FOR_APPROVAL # Waiting for approval
else
- self.workflow = 3 # Draft
- end
+ self.workflow = DmsfWorkflow::STATE_DRAFT # Draft
+ end
end
end
end
def assign_workflow(dmsf_workflow_id)
if User.current.allowed_to?(:file_approval, self.file.project)
- if self.workflow == 1 # Waiting for approval
+ #if self.workflow == DmsfWorkflow::STATE_DRAFT # Waiting for approval
wf = DmsfWorkflow.find_by_id(dmsf_workflow_id)
wf.assign(self.id) if wf && self.id
- end
+ #end
end
end
diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb
index 74708290..7b995ee3 100644
--- a/app/models/dmsf_workflow.rb
+++ b/app/models/dmsf_workflow.rb
@@ -42,7 +42,7 @@ class DmsfWorkflow < ActiveRecord::Base
def to_s
name
- end
+ end
def approvals(step)
wa = Array.new
@@ -109,9 +109,24 @@ class DmsfWorkflow < ActiveRecord::Base
end
end
end
-
- def delegates
- User.all
+
+ def delegates(q, dmsf_workflow_step_assignment_id, dmsf_file_revision_id, project_id)
+ if project_id
+ sql = ['id IN (SELECT user_id FROM members WHERE project_id = ?', project_id]
+ elsif dmsf_workflow_step_assignment_id && dmsf_file_revision_id
+ sql = [
+ 'id NOT IN (SELECT a.user_id FROM dmsf_workflow_step_assignments a WHERE id = ?) AND id IN (SELECT m.user_id FROM members m JOIN dmsf_file_revisions r ON m.project_id = r.project_id WHERE r.id = ?)',
+ dmsf_workflow_step_assignment_id,
+ dmsf_file_revision_id]
+ else
+ sql = '1=1'
+ end
+
+ unless q.nil? || q.empty?
+ User.active.sorted.where(sql).like(q)
+ else
+ User.active.sorted.where(sql)
+ end
end
def get_free_assignment(user, dmsf_file_revision_id)
@@ -130,17 +145,28 @@ class DmsfWorkflow < ActiveRecord::Base
end
end
- def try_finish(dmsf_file_revision_id)
+ def try_finish(dmsf_file_revision_id, action, user_id)
res = nil
- steps = DmsfWorkflowStep.where(:dmsf_workflow_id => self.id).all
- steps.each do |step|
- res = step.result dmsf_file_revision_id
- unless step.finished? dmsf_file_revision_id
- return
- end
+ case action.action
+ when DmsfWorkflowStepAction::ACTION_APPROVE
+ steps = DmsfWorkflowStep.where(:dmsf_workflow_id => self.id).all
+ steps.each do |step|
+ res = step.result dmsf_file_revision_id
+ unless step.finished? dmsf_file_revision_id
+ return
+ end
+ end
+ when DmsfWorkflowStepAction::ACTION_REJECT
+ res = DmsfWorkflow::STATE_REJECTED
+ when DmsfWorkflowStepAction::ACTION_DELEGATE
+ assignment = DmsfWorkflowStepAssignment.find_by_id(action.dmsf_workflow_step_assignment_id)
+ assignment.update_attribute(:user_id, user_id) if assignment
+ end
+
+ if res
+ revision = DmsfFileRevision.find_by_id dmsf_file_revision_id
+ revision.update_attribute(:workflow, res) if revision
end
- revision = DmsfFileRevision.find_by_id dmsf_file_revision_id
- revision.update_attribute(:workflow, res) if revision && res
end
end
\ No newline at end of file
diff --git a/app/models/dmsf_workflow_step.rb b/app/models/dmsf_workflow_step.rb
index de8baa72..52458ed6 100644
--- a/app/models/dmsf_workflow_step.rb
+++ b/app/models/dmsf_workflow_step.rb
@@ -77,14 +77,16 @@ class DmsfWorkflowStep < ActiveRecord::Base
:dmsf_workflow_step_id => self.id,
:dmsf_file_revision_id => dmsf_file_revision_id,
:user_id => user.id).first
- actions = DmsfWorkflowStepAction.where(
- :dmsf_workflow_step_assignment_id => assignment.id).all
- actions.each do |action|
- if action && action.is_finished?
- return
+ if assignment
+ actions = DmsfWorkflowStepAction.where(
+ :dmsf_workflow_step_assignment_id => assignment.id).all
+ actions.each do |action|
+ if action && action.is_finished?
+ return
+ end
end
+ return assignment.id
end
- return assignment.id
end
end
\ No newline at end of file
diff --git a/app/models/dmsf_workflow_step_action.rb b/app/models/dmsf_workflow_step_action.rb
index 9748aa3b..568e4252 100644
--- a/app/models/dmsf_workflow_step_action.rb
+++ b/app/models/dmsf_workflow_step_action.rb
@@ -22,6 +22,7 @@ class DmsfWorkflowStepAction < ActiveRecord::Base
validates :dmsf_workflow_step_assignment_id, :presence => true
validates :action, :presence => true
+ validates :note, :presence => true, :unless => lambda { self.action == DmsfWorkflowStepAction::ACTION_APPROVE }
ACTION_APPROVE = 1
ACTION_REJECT = 2
diff --git a/app/views/dmsf/show.html.erb b/app/views/dmsf/show.html.erb
index 9702a086..aec9a1c3 100644
--- a/app/views/dmsf/show.html.erb
+++ b/app/views/dmsf/show.html.erb
@@ -65,7 +65,7 @@
<%= link_to_user User.find_by_id(revision.dmsf_workflow_assigned_by) if revision.dmsf_workflow_assigned_by %>
+
Assigned
+
+
<%= format_time(revision.dmsf_workflow_assigned_at) if revision.dmsf_workflow_assigned_at %>
+
+
+
-
+
<%= link_to_user User.find_by_id(revision.dmsf_workflow_started_by) if revision.dmsf_workflow_started_by %>
+
Started
+
+
<%= format_time(revision.dmsf_workflow_started_at) if revision.dmsf_workflow_started_at %>
+
+ <% sql = "SELECT c.action, c.note, c.created_at, c.author_id, a.user_id, s.step FROM dmsf_workflow_step_actions c RIGHT JOIN dmsf_workflow_step_assignments a ON a.id = c.dmsf_workflow_step_assignment_id JOIN dmsf_workflow_steps s ON s.id = a.dmsf_workflow_step_id WHERE a.dmsf_file_revision_id = #{revision.id} ORDER BY c.created_at" %>
+ <% result = DmsfWorkflowStep.connection.execute sql %>
+ <% result.each_with_index do |row, i| %>
+
<%= format_time(revision.dmsf_workflow_started_at) if revision.dmsf_workflow_started_at %>
- <% sql = "SELECT c.action, c.note, c.created_at, c.author_id, a.user_id, s.step FROM dmsf_workflow_step_actions c RIGHT JOIN dmsf_workflow_step_assignments a ON a.id = c.dmsf_workflow_step_assignment_id JOIN dmsf_workflow_steps s ON s.id = a.dmsf_workflow_step_id WHERE a.dmsf_file_revision_id = #{revision.id} ORDER BY c.created_at" %>
+ <% sql = "SELECT c.action, c.note, c.created_at, c.author_id, a.user_id, s.step FROM dmsf_workflow_step_actions c RIGHT JOIN dmsf_workflow_step_assignments a ON a.id = c.dmsf_workflow_step_assignment_id JOIN dmsf_workflow_steps s ON s.id = a.dmsf_workflow_step_id WHERE a.dmsf_file_revision_id = #{revision.id} ORDER BY s.step, c.created_at" %>
<% result = DmsfWorkflowStep.connection.execute sql %>
<% result.each_with_index do |row, i| %>
@@ -32,7 +40,7 @@
<% sql = "SELECT c.action, c.note, c.created_at, c.author_id, a.user_id, s.step FROM dmsf_workflow_step_actions c RIGHT JOIN dmsf_workflow_step_assignments a ON a.id = c.dmsf_workflow_step_assignment_id JOIN dmsf_workflow_steps s ON s.id = a.dmsf_workflow_step_id WHERE a.dmsf_file_revision_id = #{revision.id} ORDER BY s.step, c.created_at" %>
<% result = DmsfWorkflowStep.connection.execute sql %>
<% result.each_with_index do |row, i| %>
-
<%= format_time(revision.dmsf_workflow_started_at) if revision.dmsf_workflow_started_at %>
+
- <% sql = "SELECT c.action, c.note, c.created_at, c.author_id, a.user_id, s.step FROM dmsf_workflow_step_actions c RIGHT JOIN dmsf_workflow_step_assignments a ON a.id = c.dmsf_workflow_step_assignment_id JOIN dmsf_workflow_steps s ON s.id = a.dmsf_workflow_step_id WHERE a.dmsf_file_revision_id = #{revision.id} ORDER BY s.step, c.created_at" %>
- <% result = DmsfWorkflowStep.connection.execute sql %>
+
+
+
<%= link_to_user User.find_by_id(revision.dmsf_workflow_assigned_by) if revision.dmsf_workflow_assigned_by %>
<%= DmsfWorkflowStepAction.workflow_str(DmsfWorkflowStepAction::ACTION_START) if revision.dmsf_workflow_started_by %>
+
+
<%= format_time(revision.dmsf_workflow_started_at) if revision.dmsf_workflow_started_at %>
+
+ <% sql = "SELECT c.action, c.note, c.created_at, c.author_id, a.user_id, s.step FROM dmsf_workflow_step_actions c RIGHT JOIN dmsf_workflow_step_assignments a ON a.id = c.dmsf_workflow_step_assignment_id RIGHT JOIN dmsf_workflow_steps s ON s.id = a.dmsf_workflow_step_id WHERE a.dmsf_file_revision_id = #{revision.id} ORDER BY s.step, c.action DESC, c.created_at" %>
+ <% result = DmsfWorkflowStep.connection.execute sql %>
<% result.each_with_index do |row, i| %>
-
diff --git a/app/views/dmsf_workflows/log.js.erb b/app/views/dmsf_workflows/log.js.erb
index de409eaa..9034c98b 100644
--- a/app/views/dmsf_workflows/log.js.erb
+++ b/app/views/dmsf_workflows/log.js.erb
@@ -1,3 +1,3 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'log', :locals => {:workflow => @workflow}) %>');
-showModal('ajax-modal', '640px');
+showModal('ajax-modal', '800px');
$('#ajax-modal').addClass('workflow-log');
\ No newline at end of file
diff --git a/assets/images/draft.png b/assets/images/assigned.png
similarity index 100%
rename from assets/images/draft.png
rename to assets/images/assigned.png
diff --git a/assets/stylesheets/dmsf.css b/assets/stylesheets/dmsf.css
index 6b647302..d827fb57 100644
--- a/assets/stylesheets/dmsf.css
+++ b/assets/stylesheets/dmsf.css
@@ -256,12 +256,12 @@ div.revision_box .ui-widget-header {
font-weight: normal;
}
-table.list td.note {
- width: 30%;
+table.list th {
+ text-align: left;
}
-table.list td.date {
- text-align: center;
+table.list td.note {
+ width: 20%;
}
table.list td.reorder {
diff --git a/config/locales/en.yml b/config/locales/en.yml
index f345e9b1..fd1423ad 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -213,7 +213,7 @@ en:
error_cannot_start_workflow: "Workflow can't be started"
error_cannot_renumber_steps: "Steps can't be renumbered"
label_dmsf_workflow_new: 'New approval workflow'
- label_dmsf_workflow: 'Approval workflow'
+ label_dmsf_workflow: 'Approval Workflow'
label_dmsf_workflow_plural: 'Approval workflows'
label_dmsf_workflow_step: Step
label_dmsf_workflow_step_plural: Steps
@@ -227,12 +227,15 @@ en:
label_dmsf_wokflow_action_start: 'Start workflow'
label_action: Action
label_note: Note
- title_draft: Draft
- title_rejected: Rejected
- title_delegated: Delegated
+ title_none: None
+ title_rejection: Rejection
+ title_delegation: Delegation
+ title_assignment: Assignment
+ title_start: Start
+ title_dmsf_workflow_log: 'Approval Workflow Log'
title_assigned: Assigned
- title_started: Started
- title_dmsf_workflow_log: 'Approval workflow log'
+ title_approval: Approval
+ title_rejected: Rejected
dmsf_and: AND
dmsf_or: OR
dmsf_new_step: New step
diff --git a/db/migrate/20120822100402_create_dmsf_workflow_steps.rb b/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
index 8d8b3c3a..9ae922e1 100644
--- a/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
+++ b/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
@@ -25,6 +25,11 @@ class CreateDmsfWorkflowSteps < ActiveRecord::Migration
t.integer :operator, :null => false
end
add_index :dmsf_workflow_steps, :dmsf_workflow_id
+ add_index :dmsf_workflow_steps,
+ [:user_id, :dmsf_workflow_id, :step],
+ # The default index name exceeds the index name limit
+ :name => 'index_dmsf_wrkfl_steps_on_usr_id_and_dmsf_wrkfl_id_and_step',
+ :unique => true
end
def self.down
diff --git a/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb b/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb
index aff1e31f..c0f4bd06 100644
--- a/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb
+++ b/db/migrate/20120822100403_create_dmsf_workflow_step_assignments.rb
@@ -26,7 +26,8 @@ class CreateDmsfWorkflowStepAssignments < ActiveRecord::Migration
add_index :dmsf_workflow_step_assignments,
[:dmsf_workflow_step_id, :dmsf_file_revision_id],
# The default index name exceeds the index name limit
- {:name => 'index_dmsf_wrkfl_step_assigns_on_wrkfl_step_id_and_frev_id'}
+ :name => 'index_dmsf_wrkfl_step_assigns_on_wrkfl_step_id_and_frev_id',
+ :unique => true
end
def self.down
diff --git a/test/fixtures/dmsf_workflow_step_assignments.yml b/test/fixtures/dmsf_workflow_step_assignments.yml
index 9db487ac..a231c65c 100644
--- a/test/fixtures/dmsf_workflow_step_assignments.yml
+++ b/test/fixtures/dmsf_workflow_step_assignments.yml
@@ -7,7 +7,7 @@ wfsa1:
wfsa2:
id: 2
- dmsf_workflow_step_id: 1
+ dmsf_workflow_step_id: 4
user_id: 2
dmsf_file_revision_id: 2
@@ -19,7 +19,7 @@ wfsa3:
wfsa4:
id: 4
- dmsf_workflow_step_id: 2
+ dmsf_workflow_step_id: 3
user_id: 2
dmsf_file_revision_id: 2
@@ -31,7 +31,7 @@ wfsa5:
wfsa6:
id: 6
- dmsf_workflow_step_id: 1
+ dmsf_workflow_step_id: 4
user_id: 2
dmsf_file_revision_id: 1
@@ -43,6 +43,6 @@ wfsa7:
wfsa8:
id: 8
- dmsf_workflow_step_id: 2
+ dmsf_workflow_step_id: 3
user_id: 2
dmsf_file_revision_id: 1
\ No newline at end of file
diff --git a/test/unit/dmsf_workflow_step_action_test.rb b/test/unit/dmsf_workflow_step_action_test.rb
index 9a299f3b..089ebe5a 100644
--- a/test/unit/dmsf_workflow_step_action_test.rb
+++ b/test/unit/dmsf_workflow_step_action_test.rb
@@ -21,8 +21,8 @@ class DmsfWorkflowStepActionTest < RedmineDmsf::Test::UnitTest
def test_create
wfsac = DmsfWorkflowStepAction.new(
:dmsf_workflow_step_assignment_id => 1,
- :action => 1,
- :note => 'Approvement')
+ :action => DmsfWorkflowStepAction::ACTION_DELEGATE,
+ :note => 'Approval')
assert wfsac.save
wfsac.reload
assert wfsac.created_at
@@ -30,14 +30,14 @@ class DmsfWorkflowStepActionTest < RedmineDmsf::Test::UnitTest
def test_update
@wfsac1.dmsf_workflow_step_assignment_id = 2
- @wfsac1.action = 2
+ @wfsac1.action = DmsfWorkflowStepAction::ACTION_REJECT
@wfsac1.note = 'Rejection'
assert @wfsac1.save
@wfsac1.reload
assert_equal 2, @wfsac1.dmsf_workflow_step_assignment_id
- assert_equal 2, @wfsac1.action
+ assert_equal DmsfWorkflowStepAction::ACTION_REJECT, @wfsac1.action
assert_equal 'Rejection', @wfsac1.note
end
@@ -77,6 +77,22 @@ class DmsfWorkflowStepActionTest < RedmineDmsf::Test::UnitTest
assert_equal 1, @wfsac1.errors.count
end
+ def test_validate_dmsf_workflow_step_assignment_id_uniqueness
+ @wfsac2.dmsf_workflow_step_assignment_id = @wfsac1.dmsf_workflow_step_assignment_id;
+ @wfsac2.action = @wfsac1.action;
+ assert !@wfsac2.save
+ assert_equal 1, @wfsac2.errors.count
+ @wfsac1.action = DmsfWorkflowStepAction::ACTION_REJECT
+ @wfsac2.action = @wfsac1.action;
+ assert @wfsac1.save
+ assert !@wfsac2.save
+ assert_equal 1, @wfsac2.errors.count
+ @wfsac1.action = DmsfWorkflowStepAction::ACTION_DELEGATE
+ assert @wfsac1.save
+ @wfsac2.action = @wfsac1.action;
+ assert @wfsac2.save
+ end
+
def test_destroy
@wfsac1.destroy
assert_nil DmsfWorkflowStepAction.find_by_id(1)
@@ -92,10 +108,10 @@ class DmsfWorkflowStepActionTest < RedmineDmsf::Test::UnitTest
end
def test_action_str
- assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_APPROVE), l(:title_approved)
- assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_REJECT), l(:title_rejected)
- assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_DELEGATE), l(:title_delegated)
- assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_ASSIGN), l(:title_assigned)
- assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_START), l(:title_started)
+ assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_APPROVE), l(:title_approval)
+ assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_REJECT), l(:title_rejection)
+ assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_DELEGATE), l(:title_delegation)
+ assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_ASSIGN), l(:title_assignment)
+ assert_equal DmsfWorkflowStepAction.action_str(DmsfWorkflowStepAction::ACTION_START), l(:title_start)
end
end
diff --git a/test/unit/dmsf_workflow_step_assignment_test.rb b/test/unit/dmsf_workflow_step_assignment_test.rb
index b5f097e1..e95e4ec4 100644
--- a/test/unit/dmsf_workflow_step_assignment_test.rb
+++ b/test/unit/dmsf_workflow_step_assignment_test.rb
@@ -6,6 +6,7 @@ class WorkflowStepAssignmentTest < RedmineDmsf::Test::UnitTest
def setup
@wfsa1 = DmsfWorkflowStepAssignment.find(1)
+ @wfsa2 = DmsfWorkflowStepAssignment.find(2)
end
def test_truth
@@ -21,14 +22,14 @@ class WorkflowStepAssignmentTest < RedmineDmsf::Test::UnitTest
end
def test_update
- @wfsa1.dmsf_workflow_step_id = 2
+ @wfsa1.dmsf_workflow_step_id = 5
@wfsa1.user_id = 2
@wfsa1.dmsf_file_revision_id = 2
assert @wfsa1.save
@wfsa1.reload
- assert_equal 2, @wfsa1.dmsf_workflow_step_id
+ assert_equal 5, @wfsa1.dmsf_workflow_step_id
assert_equal 2, @wfsa1.user_id
assert_equal 2, @wfsa1.dmsf_file_revision_id
end
@@ -45,6 +46,13 @@ class WorkflowStepAssignmentTest < RedmineDmsf::Test::UnitTest
assert_equal 1, @wfsa1.errors.count
end
+ def test_validate_dmsf_workflow_step_id_uniqueness
+ @wfsa1.dmsf_workflow_step_id = @wfsa2.dmsf_workflow_step_id
+ @wfsa1.dmsf_file_revision_id = @wfsa2.dmsf_file_revision_id
+ assert !@wfsa1.save
+ assert_equal 1, @wfsa1.errors.count
+ end
+
def test_destroy
@wfsa1.destroy
assert_nil DmsfWorkflowStepAssignment.find_by_id(1)
From a4a200510a3923fdb6ef22a9972b73233d2638f7 Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Fri, 21 Jun 2013 13:35:32 +0200
Subject: [PATCH 19/61] File locking while assigned approval workflow in
progress
---
app/controllers/dmsf_workflows_controller.rb | 7 +-
app/models/dmsf_workflow.rb | 132 +++++++++---------
...120822100402_create_dmsf_workflow_steps.rb | 7 +-
.../dmsf_workflow_controller_test.rb | 71 +++++-----
4 files changed, 115 insertions(+), 102 deletions(-)
diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb
index 6b8126ab..5a409765 100644
--- a/app/controllers/dmsf_workflows_controller.rb
+++ b/app/controllers/dmsf_workflows_controller.rb
@@ -44,7 +44,10 @@ class DmsfWorkflowsController < ApplicationController
:note => params[:note])
if request.post?
if action.save
- @workflow.try_finish params[:dmsf_file_revision_id], action, params[:user_id]
+ if @workflow.try_finish params[:dmsf_file_revision_id], action, params[:user_id]
+ file = DmsfFile.joins(:revisions).where(:dmsf_file_revisions => {:id => params[:dmsf_file_revision_id]}).first
+ file.unlock! if file
+ end
flash[:notice] = l(:notice_successful_update)
else
flash[:error] = l(:error_empty_note)
@@ -65,6 +68,8 @@ class DmsfWorkflowsController < ApplicationController
revision.assign_workflow(params[:dmsf_workflow_id])
if request.post?
if revision.save
+ file = DmsfFile.find_by_id revision.dmsf_file_id
+ file.lock! if file
flash[:notice] = l(:notice_successful_update)
else
flash[:error] = l(:error_workflow_assign)
diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb
index 0efcea00..12f149cc 100644
--- a/app/models/dmsf_workflow.rb
+++ b/app/models/dmsf_workflow.rb
@@ -41,50 +41,52 @@ class DmsfWorkflow < ActiveRecord::Base
name
end
- def reorder_steps(step, move_to)
- case move_to
- when 'highest'
- unless step == 1
- dmsf_workflow_steps.each do |ws|
- if ws.step < step
- return false unless ws.update_attribute('step', ws.step + 1)
- elsif ws.step == step
- return false unless ws.update_attribute('step', 1)
+ def reorder_steps(step, move_to)
+ DmsfWorkflow.transaction do
+ case move_to
+ when 'highest'
+ unless step == 1
+ dmsf_workflow_steps.each do |ws|
+ if ws.step < step
+ return false unless ws.update_attribute('step', ws.step + 1)
+ elsif ws.step == step
+ return false unless ws.update_attribute('step', 1)
+ end
+ end
+ end
+ when 'higher'
+ unless step == 1
+ dmsf_workflow_steps.each do |ws|
+ if ws.step == step - 1
+ return false unless ws.update_attribute('step', step)
+ elsif ws.step == step
+ return false unless ws.update_attribute('step', step - 1)
+ end
+ end
+ end
+ when 'lower'
+ unless step == dmsf_workflow_steps.collect{|s| s.step}.uniq.count
+ dmsf_workflow_steps.each do |ws|
+ if ws.step == step + 1
+ return false unless ws.update_attribute('step', step)
+ elsif ws.step == step
+ return false unless ws.update_attribute('step', step + 1)
+ end
end
- end
- end
- when 'higher'
- unless step == 1
- dmsf_workflow_steps.each do |ws|
- if ws.step == step - 1
- return false unless ws.update_attribute('step', step)
- elsif ws.step == step
- return false unless ws.update_attribute('step', step - 1)
+ end
+ when 'lowest'
+ size = dmsf_workflow_steps.collect{|s| s.step}.uniq.count
+ unless step == size
+ dmsf_workflow_steps.each do |ws|
+ if ws.step > step
+ return false unless ws.update_attribute('step', ws.step - 1)
+ elsif ws.step == step
+ return false unless ws.update_attribute('step', size)
+ end
end
- end
- end
- when 'lower'
- unless step == dmsf_workflow_steps.collect{|s| s.step}.uniq.count
- dmsf_workflow_steps.each do |ws|
- if ws.step == step + 1
- return false unless ws.update_attribute('step', step)
- elsif ws.step == step
- return false unless ws.update_attribute('step', step + 1)
- end
- end
- end
- when 'lowest'
- size = dmsf_workflow_steps.collect{|s| s.step}.uniq.count
- unless step == size
- dmsf_workflow_steps.each do |ws|
- if ws.step > step
- return false unless ws.update_attribute('step', ws.step - 1)
- elsif ws.step == step
- return false unless ws.update_attribute('step', size)
- end
- end
- end
- end
+ end
+ end
+ end
return reload
end
@@ -153,27 +155,31 @@ class DmsfWorkflow < ActiveRecord::Base
def try_finish(dmsf_file_revision_id, action, user_id)
revision = DmsfFileRevision.find_by_id dmsf_file_revision_id
- case action.action
- when DmsfWorkflowStepAction::ACTION_APPROVE
- self.dmsf_workflow_steps.each do |step|
- step.dmsf_workflow_step_assignments.each do |assignment|
- if assignment.dmsf_file_revision_id == dmsf_file_revision_id.to_i
- if assignment.dmsf_workflow_step_actions.empty?
- return
- end
- assignment.dmsf_workflow_step_actions.each do |act|
- return unless act.is_finished?
- end
- end
- end
- end
- # TODO: update_attribute doesn't wotk in unit tests because of "Couldn't find Project with id=0" error
- revision.update_attribute(:workflow, DmsfWorkflow::STATE_APPROVED) if revision
- when DmsfWorkflowStepAction::ACTION_REJECT
- revision.update_attribute(:workflow, DmsfWorkflow::STATE_REJECTED) if revision
- when DmsfWorkflowStepAction::ACTION_DELEGATE
- assignment = DmsfWorkflowStepAssignment.find_by_id(action.dmsf_workflow_step_assignment_id)
- assignment.update_attribute(:user_id, user_id) if assignment
+ if revision
+ case action.action
+ when DmsfWorkflowStepAction::ACTION_APPROVE
+ self.dmsf_workflow_steps.each do |step|
+ step.dmsf_workflow_step_assignments.each do |assignment|
+ if assignment.dmsf_file_revision_id == dmsf_file_revision_id.to_i
+ if assignment.dmsf_workflow_step_actions.empty?
+ return false
+ end
+ assignment.dmsf_workflow_step_actions.each do |act|
+ return false unless act.is_finished?
+ end
+ end
+ end
+ end
+ revision.update_attribute(:workflow, DmsfWorkflow::STATE_APPROVED)
+ return true
+ when DmsfWorkflowStepAction::ACTION_REJECT
+ revision.update_attribute(:workflow, DmsfWorkflow::STATE_REJECTED)
+ return true
+ when DmsfWorkflowStepAction::ACTION_DELEGATE
+ assignment = DmsfWorkflowStepAssignment.find_by_id(action.dmsf_workflow_step_assignment_id)
+ assignment.update_attribute(:user_id, user_id) if assignment
+ end
end
+ return false
end
end
\ No newline at end of file
diff --git a/db/migrate/20120822100402_create_dmsf_workflow_steps.rb b/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
index 9ae922e1..d02c29dc 100644
--- a/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
+++ b/db/migrate/20120822100402_create_dmsf_workflow_steps.rb
@@ -24,12 +24,7 @@ class CreateDmsfWorkflowSteps < ActiveRecord::Migration
t.references :user, :null => false
t.integer :operator, :null => false
end
- add_index :dmsf_workflow_steps, :dmsf_workflow_id
- add_index :dmsf_workflow_steps,
- [:user_id, :dmsf_workflow_id, :step],
- # The default index name exceeds the index name limit
- :name => 'index_dmsf_wrkfl_steps_on_usr_id_and_dmsf_wrkfl_id_and_step',
- :unique => true
+ add_index :dmsf_workflow_steps, :dmsf_workflow_id
end
def self.down
diff --git a/test/functional/dmsf_workflow_controller_test.rb b/test/functional/dmsf_workflow_controller_test.rb
index 56fa47f4..8311cc16 100644
--- a/test/functional/dmsf_workflow_controller_test.rb
+++ b/test/functional/dmsf_workflow_controller_test.rb
@@ -4,7 +4,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
include Redmine::I18n
fixtures :users, :dmsf_workflows, :dmsf_workflow_steps, :projects, :roles,
- :members, :member_roles
+ :members, :member_roles, :dmsf_workflow_step_assignments
def setup
@user_admin = User.find_by_id 1 # Redmine admin
@@ -20,12 +20,15 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
@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 = Project.find_by_id 5
+ @project5.enable_module! :dmsf
@wf1 = DmsfWorkflow.find_by_id 1
@wfsa2 = DmsfWorkflowStepAssignment.find_by_id 2
@revision1 = DmsfFileRevision.find_by_id 1
@revision2 = DmsfFileRevision.find_by_id 2
- @revision3 = DmsfFileRevision.find_by_id 3
+ @revision3 = DmsfFileRevision.find_by_id 3
+ @file1 = DmsfFile.find_by_id 1
+ @file2 = DmsfFile.find_by_id 2
end
def test_authorize
@@ -45,7 +48,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
# Administration
get :index
assert_response :forbidden
- # Project
+ # Project
get :index, :project_id => @project5.id
assert_response :success
assert_template 'index'
@@ -122,15 +125,15 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
assert_equal 1, ws.step
end
- def test_reorder_steps_to_lower
+ def test_reorder_steps_to_lower
put :reorder_steps, :step => 1, :id => @wf1.id, :workflow_step => {:move_to => 'lower'}
assert_response :success
@wfs1.reload
@wfs2.reload
@wfs3.reload
@wfs4.reload
- @wfs5.reload
- assert_equal 1, @wfs2.step
+ @wfs5.reload
+ assert_equal 1, @wfs2.step
assert_equal 1, @wfs3.step
assert_equal 2, @wfs1.step
assert_equal 2, @wfs4.step
@@ -198,24 +201,26 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:action => DmsfWorkflowStepAction::ACTION_APPROVE).first
end
-
- def test_action_reject
- @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
+#
+# 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,
@@ -258,12 +263,12 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
:title => l(:label_dmsf_wokflow_action_assign))
assert_response :success
assert_match /ajax-modal/, response.body
- assert_template 'assign'
+ 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
+
+# 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,
@@ -274,6 +279,8 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
# :action => 'assignment',
# :project_id => @project5.id)
# assert_response :redirect
- assert true
- end
+# @file1.reload
+# assert file1.locked?
+# assert true
+# end
end
From 91221f26d5f6d0cda044f421c2574c8b126c9e07 Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Wed, 26 Jun 2013 14:30:34 +0200
Subject: [PATCH 20/61] approval email notifications implemented
---
app/controllers/dmsf_workflows_controller.rb | 90 ++++++++++++++++---
app/helpers/dmsf_workflows_helper.rb | 4 +-
app/models/dmsf_mailer.rb | 16 +++-
app/models/dmsf_workflow.rb | 80 +++++++++--------
app/models/dmsf_workflow_step_assignment.rb | 7 +-
.../workflow_notification.html.erb | 15 ++++
.../workflow_notification.text.erb | 4 +
config/locales/en.yml | 3 +-
lib/tasks/dmsf_alert_approvals.rake | 54 +++++++++++
.../dmsf_workflow_step_assignment_test.rb | 4 -
test/unit/dmsf_workflow_test.rb | 5 ++
11 files changed, 221 insertions(+), 61 deletions(-)
create mode 100644 app/views/dmsf_mailer/workflow_notification.html.erb
create mode 100644 app/views/dmsf_mailer/workflow_notification.text.erb
create mode 100644 lib/tasks/dmsf_alert_approvals.rake
diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb
index 5a409765..15b41adf 100644
--- a/app/controllers/dmsf_workflows_controller.rb
+++ b/app/controllers/dmsf_workflows_controller.rb
@@ -40,13 +40,72 @@ class DmsfWorkflowsController < ApplicationController
if params[:commit] == l(:button_submit)
action = DmsfWorkflowStepAction.new(
:dmsf_workflow_step_assignment_id => params[:dmsf_workflow_step_assignment_id],
- :action => params[:step_action],
+ :action => (params[:step_action].to_i >= 10) ? DmsfWorkflowStepAction::ACTION_DELEGATE : params[:step_action],
:note => params[:note])
if request.post?
if action.save
- if @workflow.try_finish params[:dmsf_file_revision_id], action, params[:user_id]
- file = DmsfFile.joins(:revisions).where(:dmsf_file_revisions => {:id => params[:dmsf_file_revision_id]}).first
- file.unlock! if file
+ revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id]
+ if revision
+ if @workflow.try_finish revision, action, (params[:step_action].to_i / 10)
+ file = DmsfFile.joins(:revisions).where(:dmsf_file_revisions => {:id => revision.id}).first
+ file.unlock! if file
+ if revision.workflow == DmsfWorkflow::STATE_APPROVED
+ # Just approved
+ DmsfMailer.workflow_notification(
+ revision.project.members.collect{ |member| member.user.mail},
+ @workflow,
+ revision,
+ "Approval workflow #{@workflow.name} approved",
+ 'been finished and the document has been approved',
+ 'To see the approval history click on the workflow status of the document in').deliver
+ else
+ # Just rejected
+ owner = User.find_by_id revision.dmsf_workflow_assigned_by
+ DmsfMailer.workflow_notification(
+ @workflow.participiants.collect{ |user| user.mail} << owner.mail,
+ @workflow,
+ revision,
+ "Approval workflow #{@workflow.name} rejected",
+ "been finished and the document has been rejected because of '#{action.note}'",
+ 'To see the approval history click on the workflow status of the document in').deliver
+ end
+ else
+ if action.action == DmsfWorkflowStepAction::ACTION_DELEGATE
+ # Delegation
+ # TODO: Find the real delegate
+ delegate = User.current
+ DmsfMailer.workflow_notification(
+ delegate.mail,
+ @workflow,
+ revision,
+ "Approval workflow #{@workflow.name} step delegated",
+ "been delegated because of '#{action.note}' and you are expected to do an approval in the current approval step",
+ 'To proceed click on the check box icon next to the document in').deliver
+ else
+ # Next step
+ assignments = @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
+ DmsfMailer.workflow_notification(
+ assignments.collect{ |assignment| assignment.user.mail},
+ @workflow,
+ revision,
+ "Approval workflow #{@workflow.name} requires your approval",
+ 'finished one of the approval steps and you are expected to do an approval in the next approval step',
+ 'To proceed click on the check box icon next to the document in the').deliver
+ owner = User.find_by_id revision.dmsf_workflow_assigned_by
+ DmsfMailer.workflow_notification(
+ owner.mail,
+ @workflow,
+ revision,
+ "Approval workflow #{@workflow.name} updated",
+ 'finished one of the approval steps',
+ 'To see the current status of the approval workflow click on the workflow status the document in').deliver
+ end
+ end
+ end
+ end
end
flash[:notice] = l(:notice_successful_update)
else
@@ -190,11 +249,19 @@ class DmsfWorkflowsController < ApplicationController
def start
revision = DmsfFileRevision.find_by_id(params[:dmsf_file_revision_id])
- if revision
- revision.set_workflow(@workflow.id, params[:action])
- if request.post?
- if revision.save
- flash[:notice] = l(:notice_successful_update)
+ if revision
+ if request.post?
+ revision.set_workflow(@workflow.id, params[:action])
+ if revision.save
+ assignments = @workflow.next_assignments revision.id
+ DmsfMailer.workflow_notification(
+ assignments.collect{ |assignment| assignment.user.mail},
+ @workflow,
+ revision,
+ "Approval workflow #{@workflow.name} started",
+ 'been started and you are expected to do an approval in the current approval step',
+ 'To proceed click on the check box icon next to the document in').deliver
+ flash[:notice] = l(:notice_workflow_started)
else
flash[:error] = l(:notice_cannot_start_workflow)
end
@@ -202,9 +269,8 @@ class DmsfWorkflowsController < ApplicationController
end
redirect_to :back
end
-
- private
-
+
+private
def find_workflow
@workflow = DmsfWorkflow.find_by_id(params[:id])
end
diff --git a/app/helpers/dmsf_workflows_helper.rb b/app/helpers/dmsf_workflows_helper.rb
index 896dfbe0..7181c5fb 100644
--- a/app/helpers/dmsf_workflows_helper.rb
+++ b/app/helpers/dmsf_workflows_helper.rb
@@ -49,7 +49,7 @@ module DmsfWorkflowsHelper
def dmsf_workflows_for_select(project, dmsf_workflow_id)
options = Array.new
- options << [l(:option_workflow_none), nil]
+ #options << [l(:option_workflow_none), nil]
DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', project.id]).each do |wf|
options << [wf.name, wf.id]
end
@@ -59,7 +59,7 @@ module DmsfWorkflowsHelper
def principals_radio_button_tags(name, principals)
s = ''
principals.each do |principal|
- s << "\n"
+ s << "\n"
end
s.html_safe
end
diff --git a/app/models/dmsf_mailer.rb b/app/models/dmsf_mailer.rb
index 3528acd3..502aae56 100644
--- a/app/models/dmsf_mailer.rb
+++ b/app/models/dmsf_mailer.rb
@@ -57,6 +57,20 @@ class DmsfMailer < Mailer
mail(:to => email_to, :cc => email_cc, :subject => email_subject, :from => user.mail)
end
+ def workflow_notification(to, workflow, revision, subject, text1, text2)
+ set_language_if_valid User.current.language
+ @workflow = workflow
+ @revision = revision
+ @text1 = "The approval workflow '#{@workflow.name}' assigned to '#{@revision.file.name}' document has just #{text1}."
+ unless @revision.folder
+ url = url_for(:controller => 'dmsf', :action => 'edit_root', :id => @revision.project, :only_path => false)
+ else
+ url = url_for(:controller => 'dmsf', :action => 'edit', :id => @project, :folder_id => @revision.folder, :only_path => false)
+ end
+ @text2 = "#{text2} #{url}."
+ mail :to => to, :subject => subject
+ end
+
private
def get_notify_user_emails(user, files)
@@ -93,5 +107,5 @@ class DmsfMailer < Mailer
notify_members.collect {|m| m.user.mail }
end
-
+
end
diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb
index 12f149cc..b3846638 100644
--- a/app/models/dmsf_workflow.rb
+++ b/app/models/dmsf_workflow.rb
@@ -28,6 +28,14 @@ class DmsfWorkflow < ActiveRecord::Base
STATE_WAITING_FOR_APPROVAL = 1
STATE_APPROVED = 2
STATE_REJECTED = 4
+
+ def participiants
+ users = Array.new
+ self.dmsf_workflow_steps.each do |step|
+ users << step.user
+ end
+ users
+ end
def self.workflows(project)
project ? where(:project_id => project) : where('project_id IS NULL')
@@ -110,7 +118,7 @@ class DmsfWorkflow < ActiveRecord::Base
def next_assignments(dmsf_file_revision_id)
results = Array.new
self.dmsf_workflow_steps.each do |step|
- break unless results.empty? || results[0].step.step == step.step
+ break unless results.empty? || results[0].dmsf_workflow_step.step == step.step
step.dmsf_workflow_step_assignments.each do |assignment|
if assignment.dmsf_file_revision_id == dmsf_file_revision_id
if assignment.dmsf_workflow_step_actions.empty?
@@ -134,14 +142,11 @@ class DmsfWorkflow < ActiveRecord::Base
def self.assignments_to_users_str(assignments)
str = ''
if assignments
- assignments.each_with_index do |assignment, index|
- user = User.find_by_id assignment.user_id
- if user
- if index > 0
- str << ', '
- end
- str << user.name
+ assignments.each_with_index do |assignment, index|
+ if index > 0
+ str << ', '
end
+ str << assignment.user.name
end
end
str
@@ -153,33 +158,38 @@ class DmsfWorkflow < ActiveRecord::Base
end
end
- def try_finish(dmsf_file_revision_id, action, user_id)
- revision = DmsfFileRevision.find_by_id dmsf_file_revision_id
- if revision
- case action.action
- when DmsfWorkflowStepAction::ACTION_APPROVE
- self.dmsf_workflow_steps.each do |step|
- step.dmsf_workflow_step_assignments.each do |assignment|
- if assignment.dmsf_file_revision_id == dmsf_file_revision_id.to_i
- if assignment.dmsf_workflow_step_actions.empty?
- return false
- end
- assignment.dmsf_workflow_step_actions.each do |act|
- return false unless act.is_finished?
- end
- end
- end
- end
- revision.update_attribute(:workflow, DmsfWorkflow::STATE_APPROVED)
- return true
- when DmsfWorkflowStepAction::ACTION_REJECT
- revision.update_attribute(:workflow, DmsfWorkflow::STATE_REJECTED)
- return true
- when DmsfWorkflowStepAction::ACTION_DELEGATE
- assignment = DmsfWorkflowStepAssignment.find_by_id(action.dmsf_workflow_step_assignment_id)
- assignment.update_attribute(:user_id, user_id) if assignment
- end
+ def try_finish(revision, action, user_id)
+ case action.action
+ when DmsfWorkflowStepAction::ACTION_APPROVE
+ self.dmsf_workflow_steps.each do |step|
+ step.dmsf_workflow_step_assignments.each do |assignment|
+ if assignment.dmsf_file_revision_id == revision.id
+ if assignment.dmsf_workflow_step_actions.empty?
+ return false
+ end
+ assignment.dmsf_workflow_step_actions.each do |act|
+ return false unless act.is_finished?
+ end
+ end
+ end
+ end
+ revision.update_attribute(:workflow, DmsfWorkflow::STATE_APPROVED)
+ return true
+ when DmsfWorkflowStepAction::ACTION_REJECT
+ revision.update_attribute(:workflow, DmsfWorkflow::STATE_REJECTED)
+ return true
+ when DmsfWorkflowStepAction::ACTION_DELEGATE
+ #assignment = DmsfWorkflowStepAssignment.find_by_id(action.dmsf_workflow_step_assignment_id)
+ #assignment.update_attribute(:user_id, user_id) if assignment
+ self.dmsf_workflow_steps.each do |step|
+ step.dmsf_workflow_step_assignments.each do |assignment|
+ if assignment.id == action.dmsf_workflow_step_assignment_id
+ assignment.update_attribute(:user_id, user_id)
+ return false
+ end
+ end
+ end
end
return false
- end
+ end
end
\ No newline at end of file
diff --git a/app/models/dmsf_workflow_step_assignment.rb b/app/models/dmsf_workflow_step_assignment.rb
index 1a86ed6c..84b76549 100644
--- a/app/models/dmsf_workflow_step_assignment.rb
+++ b/app/models/dmsf_workflow_step_assignment.rb
@@ -18,14 +18,9 @@
class DmsfWorkflowStepAssignment < ActiveRecord::Base
belongs_to :dmsf_workflow_step
-
+ belongs_to :user
has_many :dmsf_workflow_step_actions, :dependent => :destroy
-
validates :dmsf_workflow_step_id, :presence => true
validates :dmsf_file_revision_id, :presence => true
validates_uniqueness_of :dmsf_workflow_step_id, :scope => [:dmsf_file_revision_id]
-
- def step
- DmsfWorkflowStep.find_by_id self.dmsf_workflow_step_id
- end
end
\ No newline at end of file
diff --git a/app/views/dmsf_mailer/workflow_notification.html.erb b/app/views/dmsf_mailer/workflow_notification.html.erb
new file mode 100644
index 00000000..9741cca8
--- /dev/null
+++ b/app/views/dmsf_mailer/workflow_notification.html.erb
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
Dear user,
+
+ <%= @text1 %>
+
+
+ <%= @text2 %>
+
+
+
\ No newline at end of file
diff --git a/app/views/dmsf_mailer/workflow_notification.text.erb b/app/views/dmsf_mailer/workflow_notification.text.erb
new file mode 100644
index 00000000..370fbd1d
--- /dev/null
+++ b/app/views/dmsf_mailer/workflow_notification.text.erb
@@ -0,0 +1,4 @@
+Dear user,
+<%= @text1 %>
+
+<%= @text2 %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index fd1423ad..79843539 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -241,4 +241,5 @@ en:
dmsf_new_step: New step
message_dmsf_wokflow_note: Your note...
info_revision: "r%{rev}"
- link_workflow: Workflow
\ No newline at end of file
+ link_workflow: Workflow
+ notice_workflow_started: 'Approval workflow successfully started'
\ No newline at end of file
diff --git a/lib/tasks/dmsf_alert_approvals.rake b/lib/tasks/dmsf_alert_approvals.rake
new file mode 100644
index 00000000..be038c22
--- /dev/null
+++ b/lib/tasks/dmsf_alert_approvals.rake
@@ -0,0 +1,54 @@
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2013 Karel Picman
+#
+# 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.
+
+desc <<-END_DESC
+Alert all users who are expected to do an approval in the current approval steps
+
+Available options:
+
+Example:
+ rake redmine:dmsf_alert_approvals RAILS_ENV="production"
+END_DESC
+require File.expand_path(File.dirname(__FILE__) + "/../../../../config/environment")
+
+class DmsfAlertApprovals
+
+ def self.alert
+ revisions = DmsfFileRevision.where(:workflow => 1)
+ revisions.each do |revision|
+ next unless revision.file.last_revision == revision
+ workflow = DmsfWorkflow.find_by_id revision.dmsf_workflow_id
+ next unless workflow
+ assignments = workflow.next_assignments revision.id
+ DmsfMailer.workflow_notification(
+ assignments.collect{|a| a.user.mail},
+ workflow,
+ revision,
+ "Approval workflow #{workflow.name} requires your approval",
+ 'finished one of the approval steps and you are expected to do an approval in the next approval step',
+ 'To proceed click on the check box icon next to the document in the').deliver
+ Rails.logger.info "#{assignments.collect{|a| a.user.login}.join(',')} were alerted in order to do an approval of [workflow = #{workflow.id}, revision = #{revision.id}]"
+ end
+ end
+end
+
+namespace :redmine do
+ task :dmsf_alert_approvals => :environment do
+ DmsfAlertApprovals.alert
+ end
+end
diff --git a/test/unit/dmsf_workflow_step_assignment_test.rb b/test/unit/dmsf_workflow_step_assignment_test.rb
index e95e4ec4..8faa8d5e 100644
--- a/test/unit/dmsf_workflow_step_assignment_test.rb
+++ b/test/unit/dmsf_workflow_step_assignment_test.rb
@@ -58,8 +58,4 @@ class WorkflowStepAssignmentTest < RedmineDmsf::Test::UnitTest
assert_nil DmsfWorkflowStepAssignment.find_by_id(1)
assert_nil DmsfWorkflowStepAction.find_by_id(1)
end
-
- def test_step
- assert_equal @wfsa1.step, DmsfWorkflowStep.find_by_id(@wfsa1.dmsf_workflow_step_id)
- end
end
diff --git a/test/unit/dmsf_workflow_test.rb b/test/unit/dmsf_workflow_test.rb
index 58de2b13..457d346e 100644
--- a/test/unit/dmsf_workflow_test.rb
+++ b/test/unit/dmsf_workflow_test.rb
@@ -175,4 +175,9 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
# assert_equal @revision2.workflow, DmsfWorkflow::STATE_WAITING_FOR_APPROVAL
assert true
end
+
+ def test_participiants
+ # TODO:
+ assert true
+ end
end
From 293fb246f931178b7d59c00c003521a4407cb5aa Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Thu, 11 Jul 2013 09:13:46 +0200
Subject: [PATCH 21/61] Method to log user activities added
---
app/models/dmsf_workflow_step_action.rb | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/app/models/dmsf_workflow_step_action.rb b/app/models/dmsf_workflow_step_action.rb
index ce653771..14a95021 100644
--- a/app/models/dmsf_workflow_step_action.rb
+++ b/app/models/dmsf_workflow_step_action.rb
@@ -63,6 +63,23 @@ class DmsfWorkflowStepAction < ActiveRecord::Base
end
end
+ def self.action_type_str(action)
+ if action
+ case action.to_i
+ when ACTION_APPROVE
+ 'approval'
+ when ACTION_REJECT
+ 'rejection'
+ when ACTION_DELEGATE
+ 'delegation'
+ when ACTION_ASSIGN
+ 'assignment'
+ when ACTION_START
+ 'start'
+ end
+ end
+ end
+
def self.workflow_str(action)
if action
case action.to_i
From f89c8e576ac9345324cda348bd9a79c62823962a Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Fri, 12 Jul 2013 15:35:20 +0200
Subject: [PATCH 22/61] locales update
---
config/locales/cs.yml | 445 ++++++++++++++++++++++-------------------
config/locales/de.yml | 441 ++++++++++++++++++++++-------------------
config/locales/en.yml | 425 ++++++++++++++++++++-------------------
config/locales/es.yml | 447 ++++++++++++++++++++++-------------------
config/locales/fr.yml | 448 +++++++++++++++++++++++-------------------
config/locales/ja.yml | 448 +++++++++++++++++++++++-------------------
config/locales/ru.yml | 446 ++++++++++++++++++++++-------------------
config/locales/zh.yml | 447 ++++++++++++++++++++++-------------------
8 files changed, 1892 insertions(+), 1655 deletions(-)
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 5b37f2bd..6cf1960c 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -1,211 +1,244 @@
# Czech translation for DMSF by vit.jonas@gmail.com, karel.picman@kontron.com
cs:
- :dmsf: "DMSF"
- :label_dmsf_file_plural: "Dmsf soubory"
- :warning_no_entries_selected: "Není nic vybráno"
- :error_email_to_must_be_entered: "Musí být zadán adresát"
- :notice_email_sent: "Email byl odeslán"
- :warning_file_already_locked: "Soubor už je zamčen"
- :notice_file_locked: "Soubor byl zamčen"
- :warning_file_not_locked: "Soubor není zamčen"
- :notice_file_unlocked: "Soubor byl odemčen"
- :error_only_user_that_locked_file_can_unlock_it: "Soubor může být odemčen pouze uživatelem, který ho zamkl"
- :question_do_you_really_want_to_delete_this_entry: "Chcete to skutečně smazat?"
- :error_max_files_exceeded: "Limit pro %{number} najednou stažených souborů je překročen"
- :question_do_you_really_want_to_delete_this_revision: "Chcete skutečně smazat tuto revizi?"
- :error_entry_project_does_not_match_current_project: "Zadaný projekt neodpovídá aktuálnímu projektu"
- :notice_folder_created: "Adresář byl vytvořen"
- :error_folder_creation_failed: "Vytváření složky selhalo"
- :error_folder_title_must_be_entered: "Musí být zadán název"
- :notice_folder_deleted: "Adresář byl smazán"
- :error_folder_is_not_empty: "Adresář není prázdný"
- :error_folder_title_is_already_used: "Název již existuje"
- :notice_folder_details_were_saved: "Detaily složky byly uloženy"
- :error_file_is_locked: "Soubor je zamčen"
- :notice_file_deleted: "Soubor byl smazán"
- :error_at_least_one_revision_must_be_present: "Musí ezistovat alespoň jedna revize"
- :notice_revision_deleted: "Revize byla smazána"
- :warning_one_of_files_locked: "Jeden ze souborů je zamčen"
- :notice_file_unlocked: "Soubor bykl odemčen"
- :notice_file_revision_created: " vytvořena nová revize"
- :notice_your_preferences_were_saved: "Vaše nastavení bylo uloženo"
- :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"
- :notice_folder_notifications_deactivated: "Notifikace složky byly deaktivovány"
- :warning_file_notifications_already_activated: "Notifikace souboru již byly aktivovány"
- :notice_file_notifications_activated: "Notifikace souboru byly aktivovány"
- :warning_file_notifications_already_deactivated: "Notifikace souboru již byly deaktivovány"
- :notice_file_notifications_deactivated: "Notifikace souboru byly deaktivovány"
- :link_details: "%{title} detaily"
- :link_edit: "Upravit %{title}"
- :submit_create: "Vytvořit"
- :link_create_folder: "Vytvořit složku"
- :title_check_uncheck_all_for_zip_download_or_email: "Vybrat/Nevybrat vše pro stažení jako Zip nebo emailem"
- :link_title: "Název"
- :link_size: "Velikost"
- :link_modified: "Změněno"
- :link_ver: "Ver."
- :link_author: "Autor"
- :title_check_for_zip_download_or_email: "Vybrat pro stažení jako Zip nebo emailem"
- :title_delete: "Smazat"
- :title_notifications_active_deactivate: "Notifikace aktivní: Deaktivovat"
- :title_notifications_not_active_activate: "Notifikace nejsou aktivní: Aktivovat"
- :title_title_version_version_download: "%{title} verze %{version} stáhnout"
- :title_locked_by_user: "Zamčeno uživatelem %{user}"
- :title_locked_by_you: "Zamčeno Vámi"
- :title_waiting_for_approval: "Čeká na schválení"
- :title_approved: "Schváleno"
- :title_unlock_file: "Odemknout a uožnit změny ostatním uživatelům"
- :title_lock_file: "Zamknout a zabránit změnám ostatních uživatelů"
- :submit_download: "Stáhnout"
- :title_download_checked: "Stáhnout vybrané jako Zip"
- :submit_email: "Email"
- :title_send_checked_by_email: "Zadeslat vybrané emailem"
- :link_user_preferences: "Vaše nastavení"
- :heading_send_documents_by_email: "Odeslat dokumenty emailem"
- :label_email_from: "Od"
- :label_email_to: "Komu"
- :label_email_cc: "Kopie"
- :label_email_subject: "Předmět"
- :label_email_documents: "Documenty"
- :label_email_body: "Obsah"
- :label_email_send: "Odesláno"
- :title_notifications_active: "Notifikace jsou aktivní"
- :label_file_size: "Velikost souboru"
- :heading_file_upload: "Nahrát"
- :note_uploaded_maximum_files_at_once: "Maximálně může být nahráno %{number} souborů najednou."
- :note_upload_files_greater_than_two_gb: "Nahrání souborů větších než 2GB vyžaduje 64b prohlížeč."
- :submit_upload_files: "Nahrání"
- :heading_new_folder: "Nová složka"
- :label_title: "Název"
- :label_description: "Popis"
- :submit_save: "Uložit"
- :info_file_locked: "Soubor je zamčen!"
- :label_notifications: "Notifikace"
- :select_option_default: "Výchozí"
- :select_option_deactivated: "Deaktivováno"
- :select_option_activated: "Aktivováno"
- :title_save_preferences: "Uložit nastavení"
- :heading_revisions: "Revize"
- :title_download: "Stáhnout"
- :title_delete_revision: "Smazat revizi"
- :label_created: "Vytvořeno"
- :label_changed: "Změněno"
- :info_changed_by_user: "%{changed} uživatelem %{user}"
- :label_filename: "Jméno souboru"
- :label_version: "Verze"
- :label_workflow: "Workflow"
- :option_workflow_waiting_for_approval: "Čeká na schválení"
- :option_workflow_approved: "Schváleno"
- :option_workflow_none: "Žádné"
- :label_mime: "Typ"
- :label_size: "Velikost"
- :label_comment: "Komentář"
- :heading_new_revision: "Nová revize"
- :option_version_same: "Stejná"
- :option_version_minor: "Podružná"
- :option_version_major: "Hlavní"
- :label_new_content: "Nový obsah"
- :label_maximum_files_upload: "Maximální počet najednou nahraných souborů"
- :note_maximum_number_of_files_uploaded: "Maximální počet najednou nahraných souborů. 0 znamená bez omezení."
- :label_maximum_files_download: "Maximální počet najednou stažených souborů"
- :note_maximum_number_of_files_downloaded: "Maximální počet najednou stažených souborů jako Zip nebo odeslaných emailem. 0 znamená bez omezení."
- :label_file_storage_directory: "Složka pro uložení souborů"
- :label_index_database: "Index databáze"
- :label_stemming_language: "Jazyk pro 'Stemming'"
- :note_possible_values: "Povolené hodnoty"
- :note_pass_none_to_disable_stemming: "zadej 'nic' pro vypnutí 'Stemming'"
- :label_stem_strategy: "'Stem' strategie"
- :option_stem_none: "Stem nic (výchozí)"
- :option_stem_some: "Stem něco"
- :option_stem_all: "Stem vše"
- :label_stemming_description: "Tímto je určeno, jak analyzátor dotazu aplikuje algoritmus Stemmingu. Výchozí hodnota je STEM_NONE. Dostupné hodnoty jsou"
- :note_do_not_stem: "Žádný stemming."
- :note_stem_some: "Hledej stemmed formy výrazů kromě těch, které začínají velkým písmenem nebo jsou následovány určitými znaky nebo jsou použity s operátory, které vyžadují informaci o pozici. Stemmed výrazy začínají písmenem 'Z'."
- :note_stem_all: "Hledej stemmed formy všech slov (poznámka: 'Z' prefix není přidán)."
- :note_stemming_applied: "Poznámka, že algoritmus stemingu je aplikován pouze na slova v pravděpodobnostních polích - výrazy pravda/nepravda nejsou stemovány."
- :label_default_notifications: "Výchozí notifikace souboru"
- :heading_uploaded_files: "Nahrané soubory"
- :submit_commit: "Potvrdit"
- :link_documents: "Dokumenty"
- :permission_view_dmsf_folders: "Procházet dokumenty"
- :permission_user_preferences: "Nastavení uživatele"
- :permission_view_dmsf_files: "Zobrazit dokumenty"
- :permission_folder_manipulation: "Manipulace se složkami"
- :permission_file_manipulation: "Manipulace se soubory"
- :permission_file_approval: "Schválení souboru"
- :permission_force_file_unlock: "Vynucené odemknutí souboru"
- :label_file: "Soubor"
- :field_folder: "Složka"
- :error_create_cycle_in_folder_dependency: "vytvořit smyčku v závislostech složky"
- :error_contains_invalid_character: "obsahuje neplatné znaky"
- :error_file_commit_require_uploaded_file: "Potvrzení vyžaduje nahraný soubor"
- :warning_some_files_were_not_commited: "Některé soubory nebyly potvrzené z důvodu chyb při validaci: %{files}"
- :error_user_has_not_right_delete_folder: "Uživatel nemá právo mazat složky"
- :error_user_has_not_right_delete_file: "Uživatel nemá právo mazat soubor"
- :notice_entries_deleted: "Poožky smazány"
- :warning_some_entries_were_not_deleted: "Některé položky nebyly smazány: %{entries}"
- :question_do_you_really_want_to_delete_entries: "Opravdu chcete smazat vybrané položky?"
- :title_delete_checked: "Smaž vybrané"
- :title_number_of_files_in_directory: "Počet souborů ve složce"
- :title_filename_for_download: "Název Zip archívu ke stažení"
- :label_number_of_folders: "Složky"
- :label_number_of_documents: "Dokumenty"
- :label_zip_names_encoding: "Kódováni názvu Zipu"
- :note_zip_names_encoding_iconv: "Pro kódováni znaků z UTF8 do cílového kování je použi Iconv"
- :error_file_storage_directory_does_not_exist: "Cílová složka neexistuje a nemůže být vytvořena"
- :error_file_can_not_be_created: "Nelze vytvořit soubor v cílové složce"
- :error_wrong_zip_encoding: "Chybné kódování Zipu"
- :warning_xapian_not_available: "Xapian není k dostupný"
- :menu_dmsf: "DMSF"
- :label_physical_file_delete: "Fyzické smazání souboru"
- :user_is_not_project_member: "Nejste členem projektu"
- :heading_access_downloads_emails: "Stažené/Emaily"
- :heading_access_first: "První"
- :heading_access_last: "Poslední"
- :label_dmsf_updated: "DMSF změněno"
- :title_total_size_of_all_files: "Celková velikost všech souborů v adresáři"
- :project_module_dmsf: "DMSF"
- :warning_no_project_to_copy_file_to: "Neexistuje projekt, do kterého můžete kopírovat"
- :comment_copied_from: "Zkopírováno z %{source}"
- :notice_file_copied: "Soubor zkopírován"
- :notice_file_moved: "Soubor přesunut"
- :label_target_project: "Cílový projekt"
- :label_target_folder: "Cílový adresář"
- :title_copy_or_move: "Kopírovat/Přesunout"
- :label_dmsf_folder_plural: "Dmsf složky"
- :comment_moved_from: "Přesunuto z %{source}"
- :error_target_folder_same: "Cílový adresář a projekt jsou stejné jako aktuální"
- :error_file_cannot_be_moved: "Soubor nemůže být přesunut"
- :error_file_cannot_be_copied: "Soubor nemůže být zkopírován"
- :warning_no_project_to_copy_folder_to: "Neexistuje projekt, do kterého můžete kopírovat"
- :title_copy: "Kopírovat"
- :error_folder_cannot_be_copied: "Složka nemůže být zkopírována"
- :notice_folder_copied: "Složka zkopírována"
- :error_max_email_filesize_exceeded: "Přesáhli jste maximální velikost souboru, který lze poslat emailem. (%{number} MB)"
+ dmsf: DMSF
+ label_dmsf_file_plural: Dmsf soubory
+ warning_no_entries_selected: Není nic vybráno
+ error_email_to_must_be_entered: Musí být zadán adresát
+ notice_email_sent: Email byl odeslán
+ warning_file_already_locked: Soubor už je zamčen
+ notice_file_locked: Soubor byl zamčen
+ warning_file_not_locked: Soubor není zamčen
+ notice_file_unlocked: Soubor byl odemčen
+ error_only_user_that_locked_file_can_unlock_it: Soubor může být odemčen pouze uživatelem, který ho zamkl
+ question_do_you_really_want_to_delete_this_entry: Chcete to skutečně smazat?
+ error_max_files_exceeded: "Limit pro %{number} najednou stažených souborů je překročen"
+ question_do_you_really_want_to_delete_this_revision: Chcete skutečně smazat tuto revizi?
+ error_entry_project_does_not_match_current_project: Zadaný projekt neodpovídá aktuálnímu projektu
+ notice_folder_created: Adresář byl vytvořen
+ error_folder_creation_failed: Vytváření složky selhalo
+ error_folder_title_must_be_entered: Musí být zadán název
+ notice_folder_deleted: Adresář byl smazán
+ error_folder_is_not_empty: Adresář není prázdný
+ error_folder_title_is_already_used: Název již existuje
+ notice_folder_details_were_saved: Detaily složky byly uloženy
+ error_file_is_locked: Soubor je zamčen
+ 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
+ warning_one_of_files_locked: Jeden ze souborů je zamčen
+ 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
+ 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
+ notice_folder_notifications_deactivated: Notifikace složky byly deaktivovány
+ warning_file_notifications_already_activated: Notifikace souboru již byly aktivovány
+ notice_file_notifications_activated: Notifikace souboru byly aktivovány
+ warning_file_notifications_already_deactivated: Notifikace souboru již byly deaktivovány
+ notice_file_notifications_deactivated: Notifikace souboru byly deaktivovány
+ link_details: "%{title} detaily"
+ link_edit: "Upravit %{title}"
+ submit_create: Vytvořit
+ link_create_folder: Vytvořit složku
+ title_check_uncheck_all_for_zip_download_or_email: Vybrat/Nevybrat vše pro stažení jako Zip nebo emailem
+ link_title: Název
+ link_size: Velikost
+ link_modified: Změněno
+ link_ver: Ver.
+ link_author: Autor
+ title_check_for_zip_download_or_email: Vybrat pro stažení jako Zip nebo emailem
+ title_delete: Smazat
+ title_notifications_active_deactivate: "Notifikace aktivní: Deaktivovat"
+ title_notifications_not_active_activate: "Notifikace nejsou aktivní: Aktivovat"
+ title_title_version_version_download: "%{title} verze %{version} stáhnout"
+ title_locked_by_user: "Zamčeno uživatelem %{user}"
+ title_locked_by_you: Zamčeno Vámi
+ title_waiting_for_approval: Čeká na schválení
+ title_approved: Schváleno
+ title_unlock_file: Odemknout a umožnit změny ostatním uživatelům
+ title_lock_file: Zamknout a zabránit změnám ostatních uživatelů
+ submit_download: Stáhnout
+ title_download_checked: Stáhnout vybrané jako Zip
+ submit_email: Email
+ title_send_checked_by_email: Zaslat vybrané emailem
+ link_user_preferences: Vaše nastavení
+ heading_send_documents_by_email: Odeslat dokumenty emailem
+ label_email_from: Od
+ label_email_to: Komu
+ label_email_cc: Kopie
+ label_email_subject: Předmět
+ label_email_documents: Documenty
+ label_email_body: Obsah
+ label_email_send: Odesláno
+ title_notifications_active: Notifikace jsou aktivní
+ label_file_size: Velikost souboru
+ heading_file_upload: Nahrát
+ note_uploaded_maximum_files_at_once: "Maximálně může být nahráno %{number} souborů najednou."
+ note_upload_files_greater_than_two_gb: Nahrání souborů větších než 2GB vyžaduje 64b prohlížeč.
+ submit_upload_files: Nahrání
+ heading_new_folder: Nová složka
+ label_title: Název
+ label_description: Popis
+ submit_save: Uložit
+ info_file_locked: Soubor je zamčen!
+ label_notifications: Notifikace
+ select_option_default: Výchozí
+ select_option_deactivated: Deaktivováno
+ select_option_activated: Aktivováno
+ title_save_preferences: Uložit nastavení
+ heading_revisions: Revize
+ title_download: Stáhnout
+ title_delete_revision: Smazat revizi
+ label_created: Vytvořeno
+ label_changed: Změněno
+ info_changed_by_user: "%{changed} uživatelem %{user}"
+ label_filename: Jméno souboru
+ label_version: Verze
+ label_workflow: Workflow
+ label_mime: Typ
+ label_size: Velikost
+ label_comment: Komentář
+ heading_new_revision: Nová revize
+ option_version_same: Stejná
+ option_version_minor: Podružná
+ option_version_major: Hlavní
+ label_new_content: Nový obsah
+ label_maximum_files_upload: Maximální počet najednou nahraných souborů
+ note_maximum_number_of_files_uploaded: Maximální počet najednou nahraných souborů. 0 znamená bez omezení.
+ label_maximum_files_download: Maximální počet najednou stažených souborů
+ note_maximum_number_of_files_downloaded: Maximální počet najednou stažených souborů jako Zip nebo odeslaných emailem. 0 znamená bez omezení.
+ label_file_storage_directory: Složka pro uložení souborů
+ label_index_database: Index databáze
+ label_stemming_language: "Jazyk pro 'Stemming'"
+ note_possible_values: Povolené hodnoty
+ note_pass_none_to_disable_stemming: "zadej 'nic' pro vypnutí 'Stemming'"
+ label_stem_strategy: "'Stem' strategie"
+ option_stem_none: Stem nic (výchozí)
+ option_stem_some: Stem něco
+ option_stem_all: Stem vše
+ label_stemming_description: Tímto je určeno, jak analyzátor dotazu aplikuje algoritmus Stemmingu. Výchozí hodnota je STEM_NONE. Dostupné hodnoty jsou
+ note_do_not_stem: Žádný stemming.
+ note_stem_some: "Hledej stemmed formy výrazů kromě těch, které začínají velkým písmenem nebo jsou následovány určitými znaky nebo jsou použity s operátory, které vyžadují informaci o pozici. Stemmed výrazy začínají písmenem 'Z'."
+ note_stem_all: "Hledej stemmed formy všech slov (poznámka: 'Z' prefix není přidán)."
+ note_stemming_applied: Poznámka, že algoritmus stemingu je aplikován pouze na slova v pravděpodobnostních polích - výrazy pravda/nepravda nejsou stemovány.
+ label_default_notifications: Výchozí notifikace souboru
+ heading_uploaded_files: Nahrané soubory
+ submit_commit: Potvrdit
+ link_documents: Dokumenty
+ permission_view_dmsf_folders: Procházet dokumenty
+ permission_user_preferences: Nastavení uživatele
+ permission_view_dmsf_files: Zobrazit dokumenty
+ permission_folder_manipulation: Manipulace se složkami
+ permission_file_manipulation: Manipulace se soubory
+ permission_file_approval: Schválení souboru
+ permission_force_file_unlock: Vynucené odemknutí souboru
+ label_file: Soubor
+ field_folder: Složka
+ error_create_cycle_in_folder_dependency: vytvořit smyčku v závislostech složky
+ error_contains_invalid_character: obsahuje neplatné znaky
+ error_file_commit_require_uploaded_file: Potvrzení vyžaduje nahraný soubor
+ warning_some_files_were_not_commited: "Některé soubory nebyly potvrzené z důvodu chyb při validaci: %{files}"
+ error_user_has_not_right_delete_folder: Uživatel nemá právo mazat složky
+ error_user_has_not_right_delete_file: Uživatel nemá právo mazat soubor
+ notice_entries_deleted: Položky smazány
+ warning_some_entries_were_not_deleted: "Některé položky nebyly smazány: %{entries}"
+ question_do_you_really_want_to_delete_entries: Opravdu chcete smazat vybrané položky?
+ title_delete_checked: Smaž vybrané
+ title_number_of_files_in_directory: Počet souborů ve složce
+ title_filename_for_download: Název Zip archívu ke stažení
+ label_number_of_folders: Složky
+ label_number_of_documents: Dokumenty
+ label_zip_names_encoding: Kódováni názvu Zipu
+ note_zip_names_encoding_iconv: Pro kódováni znaků z UTF8 do cílového kování je použi Iconv
+ error_file_storage_directory_does_not_exist: Cílová složka neexistuje a nemůže být vytvořena
+ error_file_can_not_be_created: Nelze vytvořit soubor v cílové složce
+ error_wrong_zip_encoding: Chybné kódování Zipu
+ warning_xapian_not_available: Xapian není k dostupný
+ menu_dmsf: DMSF
+ label_physical_file_delete: Fyzické smazání souboru
+ user_is_not_project_member: Nejste členem projektu
+ heading_access_downloads_emails: Stažené/Emaily
+ heading_access_first: První
+ heading_access_last: Poslední
+ label_dmsf_updated: DMSF změněno
+ title_total_size_of_all_files: Celková velikost všech souborů v adresáři
+ project_module_dmsf: DMSF
+ warning_no_project_to_copy_file_to: Neexistuje projekt, do kterého můžete kopírovat
+ comment_copied_from: "Zkopírováno z %{source}"
+ notice_file_copied: Soubor zkopírován
+ notice_file_moved: Soubor přesunut
+ label_target_project: Cílový projekt
+ label_target_folder: Cílový adresář
+ title_copy_or_move: Kopírovat/Přesunout
+ label_dmsf_folder_plural: Dmsf složky
+ comment_moved_from: "Přesunuto z %{source}"
+ error_target_folder_same: Cílový adresář a projekt jsou stejné jako aktuální
+ error_file_cannot_be_moved: Soubor nemůže být přesunut
+ error_file_cannot_be_copied: Soubor nemůže být zkopírován
+ warning_no_project_to_copy_folder_to: Neexistuje projekt, do kterého můžete kopírovat
+ title_copy: Kopírovat
+ error_folder_cannot_be_copied: Složka nemůže být zkopírována
+ notice_folder_copied: Složka zkopírována
+ error_max_email_filesize_exceeded: "Přesáhli jste maximální velikost souboru, který lze poslat emailem. (%{number} MB)"
- :note_maximum_email_filesize: "Omezí se maximální velikost souboru, který může být poslán emailem. 0 znamená neomezený. Číslo je v MB."
- :label_maximum_email_filesize: "Maximální velikost souboru emailu"
- :header_minimum_filesize: "Chyba souboru."
- :error_minimum_filesize: "Soubor %{file} má nulovou velikost a nebude přiložen."
- :parent_directory: "Nadřazený adresář"
- :note_webdav: "Webdav je po založení k dispozici na http://.../dmsf/webdav/"
- :label_webdav: "Webdav functionalita"
- :label_dmsf_plural: "Kopíruj DMSF soubory a složky (%{files} souborů v %{folders} složkách)"
+ note_maximum_email_filesize: Omezí se maximální velikost souboru, který může být poslán emailem. 0 znamená neomezený. Číslo je v MB.
+ label_maximum_email_filesize: Maximální velikost souboru emailu
+ header_minimum_filesize: Chyba souboru.
+ error_minimum_filesize: "Soubor %{file} má nulovou velikost a nebude přiložen."
+ parent_directory: Nadřazený adresář
+ note_webdav: "Webdav je po založení k dispozici na http://.../dmsf/webdav/"
+ label_webdav: Webdav functionalita
+ label_dmsf_plural: "Kopíruj DMSF soubory a složky (%{files} souborů v %{folders} složkách)"
- :warning_folder_already_locked: "Tato složka je již zamčená"
- :notice_folder_locked: "Složka byla úspěšně zamčena"
- :warning_folder_not_locked: "Složku nelze zamknout"
- :notice_folder_unlocked: "Složka byla odemčena"
- :error_only_user_that_locked_folder_can_unlock_it: "Nemáte oprávnění k odemknutí této složky"
- :title_folder_parent_locked: "Nadřazená složka %{name} je zamčená"
- :title_file_parent_locked: "Nadřazená složka %{name} je zamčená"
- :title_unlock_folder: "Odemknout"
- :title_lock_folder: "Zamknout"
+ warning_folder_already_locked: Tato složka je již zamčená
+ notice_folder_locked: Složka byla úspěšně zamčena
+ warning_folder_not_locked: Složku nelze zamknout
+ notice_folder_unlocked: Složka byla odemčena
+ error_only_user_that_locked_folder_can_unlock_it: Nemáte oprávnění k odemknutí této složky
+ title_folder_parent_locked: "Nadřazená složka %{name} je zamčená"
+ title_file_parent_locked: "Nadřazená složka %{name} je zamčená"
+ title_unlock_folder: Odemknout
+ title_lock_folder: Zamknout
- :select_option_webdav_readonly: "Pouze pro čtení"
- :select_option_webdav_readwrite: "Čtení/Zápis"
- :label_webdav_strategy: "Webdav strategie"
- :note_webdav_strategy: "Umožní administrátorovi rozhodnout, zdali je webdav pouze pro čtení nebo i pro zápis."
-
\ No newline at end of file
+ select_option_webdav_readonly: Pouze pro čtení
+ select_option_webdav_readwrite: Čtení/Zápis
+ label_webdav_strategy: Webdav strategie
+ note_webdav_strategy: Umožní administrátorovi rozhodnout, zdali je webdav pouze pro čtení nebo i pro zápis.
+
+ error_unable_delete_dmsf_workflow: Nelze smazat schvalovací proces
+ error_empty_note: Musí být vyplněn komentář
+ error_workflow_assign: Chyba při přiřazování
+ error_cannot_start_workflow: Schvalovací proces nemůže být zahájen
+ error_cannot_renumber_steps: Schvalovací kroky nelze přečíslovat
+ label_dmsf_workflow_new: Nový schvalovací proces
+ label_dmsf_workflow: Schvalovací proces
+ label_dmsf_workflow_plural: Schvalovací procesy
+ label_dmsf_workflow_step: Krok
+ label_dmsf_workflow_step_plural: Kroky
+ label_dmsf_workflow_approval: Schválení
+ label_dmsf_workflow_approval_plural: Schválení
+ label_dmsf: DMSF
+ label_dmsf_wokflow_action_approve: Schválit
+ label_dmsf_wokflow_action_reject: Odmítnout
+ label_dmsf_wokflow_action_delegate: Delegovat na
+ label_dmsf_wokflow_action_assign: Přiřadit schvalovací proces
+ label_dmsf_wokflow_action_start: Zahájit schvalovací proces
+ label_action: Akce
+ label_note: Komentář
+ title_none: Komentář
+ title_rejection: Zamítnutí
+ title_delegation: Delegace
+ title_assignment: Přiřazení
+ title_start: Zahájení
+ title_dmsf_workflow_log: Historie schvalovacího procesu
+ title_assigned: Přiřazený
+ title_approval: Schválený
+ title_rejected: Zamítnutý
+ dmsf_and: A
+ dmsf_or: NEBO
+ dmsf_new_step: Nový krok
+ message_dmsf_wokflow_note: Váš komentář...
+ info_revision: "r%{rev}"
+ link_workflow: Schvalovací proces
+ notice_workflow_started: Schvalovací proces byl úspěšně zahájen
\ No newline at end of file
diff --git a/config/locales/de.yml b/config/locales/de.yml
index c8ed33ac..c2def23c 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -1,211 +1,244 @@
# German translation for DMSF by Terrence Miller
de:
- :dmsf: "DMS"
- :label_dmsf_file_plural: "DMS"
- :warning_no_entries_selected: "Keine Einträge ausgewählt"
- :error_email_to_must_be_entered: "Es muss ein Email-Empfänger angegeben werden."
- :notice_email_sent: "Email gesendet"
- :warning_file_already_locked: "Datei schon gesperrt"
- :notice_file_locked: "Datei gesperrt"
- :warning_file_not_locked: "Datei nicht gesperrt"
- :notice_file_unlocked: "Dateisperre gelöst"
- :error_only_user_that_locked_file_can_unlock_it: "Nur der Benutzer, der die Datei gesperrt hat, kann sie auch wieder freigeben"
- :question_do_you_really_want_to_delete_this_entry: "Willst du diesen Eintrag wirklich löschen?"
- :error_max_files_exceeded: "Grenze für %{number} gleichzeitig heruntergeladene Dateien überschritten"
- :question_do_you_really_want_to_delete_this_revision: "Möchtest du diese Dateiversion wirklich löschen?"
- :error_entry_project_does_not_match_current_project: "Entry Projekt entspricht nicht aktuellen Projekt"
- :notice_folder_created: "Ordner erstellt"
- :error_folder_creation_failed: "Ordnererstellung fehlgeschlagen"
- :error_folder_title_must_be_entered: "Es muss ein Titel angegeben werden"
- :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"
- :error_file_is_locked: "Datei ist gesperrt"
- :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"
- :warning_one_of_files_locked: "Eine der Dateien ist gesperrt"
- :notice_file_unlocked: "Dateisperre gelöst"
- :notice_file_revision_created: "Dateiversion erstellt"
- :notice_your_preferences_were_saved: "Deine Einstellungen wurden gespeichert"
- :warning_folder_notifications_already_activated: "Ordnerbenachrichtigungen schon aktiviert"
- :notice_folder_notifications_activated: "Ordnerbenachrichtigungen aktiviert"
- :warning_folder_notifications_already_deactivated: "Ordnerbenachrichtigungen schon deaktiviert"
- :notice_folder_notifications_deactivated: "Ordnerbenachrichtigungen deaktiviert"
- :warning_file_notifications_already_activated: "Dateibenachrichtigungen schon aktiviert"
- :notice_file_notifications_activated: "Dateibenachrichtigungen aktiviert"
- :warning_file_notifications_already_deactivated: "Dateibenachrichtigungen schon deaktiviert"
- :notice_file_notifications_deactivated: "Dateibenachrichtigungen deaktiviert"
- :link_details: "%{title} Details"
- :link_edit: "Bearbeite %{title}"
- :submit_create: "Erstellen"
- :link_create_folder: "Erzeuge Ordner"
- :title_check_uncheck_all_for_zip_download_or_email: "Wähle alle/keine für ZIP-Download bzw. Email"
- :link_title: "Titel"
- :link_size: "Größe"
- :link_modified: "Geändert"
- :link_ver: "Version"
- :link_author: "Autor"
- :title_check_for_zip_download_or_email: "Wähle für ZIP-Download bzw. Email"
- :title_delete: "Löschen"
- :title_notifications_active_deactivate: "Benachrichtigungen aktiv: Ausschalten"
- :title_notifications_not_active_activate: "Benachrichtigungen nicht aktiv: Einschalten"
- :title_title_version_version_download: "%{title} Version %{version} Download"
- :title_locked_by_user: "Gesperrt von %{user}"
- :title_locked_by_you: "Gesperrt von dir"
- :title_waiting_for_approval: "Warte auf Zustimmung"
- :title_approved: "Zugestimmt"
- :title_unlock_file: "Hebe Sperre auf um Änderungen anderer Nutzer zu ermöglichen"
- :title_lock_file: "Sperre um Änderungen anderer Nutzer zu verhindern"
- :submit_download: "Download"
- :title_download_checked: "Download der ausgewählten Dateien in einem ZIP-Archiv"
- :submit_email: "Email"
- :title_send_checked_by_email: "Sende gewählte Dateien per Email"
- :link_user_preferences: "Deine Einstellungen"
- :heading_send_documents_by_email: "Sende Dateien per Email"
- :label_email_from: "Von"
- :label_email_to: "An"
- :label_email_cc: "CC"
- :label_email_subject: "Betreff"
- :label_email_documents: "Dateien"
- :label_email_body: "Text"
- :label_email_send: "Senden"
- :title_notifications_active: "Benachrichtigungen aktiv"
- :label_file_size: "Dateigröße"
- :heading_file_upload: "Upload"
- :note_uploaded_maximum_files_at_once: "Es können maximal %{number} Dateien auf einmal hochgeladen werden."
- :note_upload_files_greater_than_two_gb: "Um Dateien größer 2GB hochzuladen brauchst du einen 64bit-Browser."
- :submit_upload_files: "Upload"
- :heading_new_folder: "Neuer Ordner"
- :label_title: "Titel"
- :label_description: "Beschreibung"
- :submit_save: "Speichern"
- :info_file_locked: "Datei gesperrt!"
- :label_notifications: "Benachrichtigungen"
- :select_option_default: "Voreinstellung"
- :select_option_deactivated: "Aus"
- :select_option_activated: "Ein"
- :title_save_preferences: "Speichere Einstellungen"
- :heading_revisions: "Versionen"
- :title_download: "Download"
- :title_delete_revision: "Lösche Version"
- :label_created: "Erstellt"
- :label_changed: "Geändert"
- :info_changed_by_user: "%{changed} von %{user}"
- :label_filename: "Dateiname"
- :label_version: "Version"
- :label_workflow: "Workflow"
- :option_workflow_waiting_for_approval: "Warte auf Zustimmung"
- :option_workflow_approved: "Zugestimmt"
- :option_workflow_none: "Keiner"
- :label_mime: "Mime"
- :label_size: "Größe"
- :label_comment: "Kommentar"
- :heading_new_revision: "Neue Version"
- :option_version_same: "gleiche Version"
- :option_version_minor: "Unterversion"
- :option_version_major: "Hauptversion"
- :label_new_content: "Neuer Inhalt"
- :label_maximum_files_upload: "Maximal hochzuladende Dateien"
- :note_maximum_number_of_files_uploaded: "Beschränkt die Anzahl der maximal auf einmal hochladbaren Dateien. 0 bedeutet unbeschränkt."
- :label_maximum_files_download: "Maximal herunterzuladende Dateien"
- :note_maximum_number_of_files_downloaded: "Beschränkt die Anzahl der maximal auf einmal herunterladbaren Dateien (per ZIP oder Mail). 0 bedeutet unbeschränkt."
- :label_file_storage_directory: "Verzeichnis für die Dateiablage"
- :label_index_database: "Index Datenbank"
- :label_stemming_language: "Sprache für die Normalformreduktion"
- :note_possible_values: "Mögliche Werte"
- :note_pass_none_to_disable_stemming: "übergebe 'none' um die Normalformreduktion zu unterdrücken"
- :label_stem_strategy: "Normalformreduktionsform"
- :option_stem_none: "reduziere nichts (Voreinstellung)"
- :option_stem_some: "reduziere manches"
- :option_stem_all: "reduziere alles"
- :label_stemming_description: "Diese Einstellung beeinflusst wie der Parser den Normalformreduktionsalgorithmus anwendet. Voreingestellt ist STEM_NONE. Die möglichen Werte sind"
- :note_do_not_stem: "Mache keine Normalformreduktion."
- :note_stem_some: "Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'."
- :note_stem_all: "Suche nach reduzierten Formen aller Wörter (Achtung: Kein 'Z'-Präfix wird hinzugefügt)."
- :note_stemming_applied: "Beachte, dass der Normalformreduzierungsalgorithmus nur bei Wörtern in Wahrscheinlichkeitsfeldern angewendert wird - boolesche Filterausdrücke werden nie reduziert."
- :label_default_notifications: "standardmäßge Dateibenachrichtigungen"
- :heading_uploaded_files: "Hochgeladene Dateien"
- :submit_commit: "OK"
- :link_documents: "Dateien"
- :permission_view_dmsf_folders: "Durchforste Dateien"
- :permission_user_preferences: "Benutzereinstellungen"
- :permission_view_dmsf_files: "Betrachte Dateien"
- :permission_folder_manipulation: "Ordner manipulation"
- :permission_file_manipulation: "Datei manipulation"
- :permission_file_approval: "Datei approval"
- :permission_force_file_unlock: "Erzwinge Aufhebung der Dateisperre"
- :label_file: "Datei"
- :field_folder: "Ordner"
- :error_create_cycle_in_folder_dependency: "schaffen Zyklus in Abhängigkeit Ordner"
- :error_contains_invalid_character: "enthält ungültige Zeichen"
- :error_file_commit_require_uploaded_file: "Begehen einen Datei erfordet hochladene Datei"
- :warning_some_files_were_not_commited: "Einige Dateien wurden nich begehen wegen Validation Fehlern: %{files}"
- :error_user_has_not_right_delete_folder: "Der Nutzer hat kein Recht die Ordner zu löschen."
- :error_user_has_not_right_delete_file: "Der Nutzer hat kein Recht die Datei zu löschen."
- :notice_entries_deleted: "Aufnahmen löschen"
- :warning_some_entries_were_not_deleted: "Enige Aufnahmen wurden nich gelöscht: %{entries}"
- :question_do_you_really_want_to_delete_entries: "Willst du wirklich die gewählten Aufnahmen löschen?"
- :title_delete_checked: "Lösch gewähltest"
- :title_number_of_files_in_directory: "Dateizahl in dem Ordner"
- :title_filename_for_download: "Dateiname benutzt zum Herunterladen oder ZIP-archivierung"
- :label_number_of_folders: "Order"
- :label_number_of_documents: "Dokumente"
- :label_zip_names_encoding: "ZIP-namen Kodierung"
- :note_zip_names_encoding_iconv: "Iconv ist benutzt zum Charset-konversion von utf-8 in Zielkodierung"
- :error_file_storage_directory_does_not_exist: "Ordner zum Dateispeichern existiert nicht und kann nicht gebildet."
- :error_file_can_not_be_created: "Datei kann nicht in dem gewählten Ordner gebildet werden."
- :error_wrong_zip_encoding: "Falsche ZIP-kodierung"
- :warning_xapian_not_available: "Xapian nicht zur Verfügung"
- :menu_dmsf: "DMS"
- :label_physical_file_delete: "Physisches Dateilöschen"
- :user_is_not_project_member: "Du bist kein Projektmitglied"
- :heading_access_downloads_emails: "Herunterladene/Emails"
- :heading_access_first: "Erste"
- :heading_access_last: "Letzte"
- :label_dmsf_updated: "DMS aktualisiert"
- :title_total_size_of_all_files: "Gesamtgröße aller Datein in diesem Ordner"
- :project_module_dmsf: "DMS"
- :warning_no_project_to_copy_file_to: "Kein Projekt für das Dateikopieren."
- :comment_copied_from: "Kopiert aus %{source}"
- :notice_file_copied: "Datei kopiert"
- :notice_file_moved: "Datei verschoben"
- :label_target_project: "Zielprojekte"
- :label_target_folder: "Zielordner"
- :title_copy_or_move: "Kopieren/Verschieben"
- :label_dmsf_folder_plural: "Ordner"
- :comment_moved_from: "Verschoben aus %{source}"
- :error_target_folder_same: "Zielordner und Projekt sind dieselbe wie die Aktuelle."
- :error_file_cannot_be_moved: "Die Datei kann nicht verschoben werden."
- :error_file_cannot_be_copied: "Die Datei kann nicht kopiert werden."
- :warning_no_project_to_copy_folder_to: "Kein Projekt für das Ordnerkopieren."
- :title_copy: "Kopieren"
- :error_folder_cannot_be_copied: "Der Ordner kann nicht kopiert werden."
- :notice_folder_copied: "Ordner kopiert"
+ dmsf: DMS
+ label_dmsf_file_plural: DMS
+ warning_no_entries_selected: Keine Einträge ausgewählt
+ error_email_to_must_be_entered: Es muss ein Email-Empfänger angegeben werden.
+ notice_email_sent: Email gesendet
+ warning_file_already_locked: Datei schon gesperrt
+ notice_file_locked: Datei gesperrt
+ warning_file_not_locked: Datei nicht gesperrt
+ notice_file_unlocked: Dateisperre gelöst
+ error_only_user_that_locked_file_can_unlock_it: Nur der Benutzer, der die Datei gesperrt hat, kann sie auch wieder freigeben
+ question_do_you_really_want_to_delete_this_entry: Willst du diesen Eintrag wirklich löschen?
+ error_max_files_exceeded: "Grenze für %{number} gleichzeitig heruntergeladene Dateien überschritten"
+ question_do_you_really_want_to_delete_this_revision: Möchtest du diese Dateiversion wirklich löschen?
+ error_entry_project_does_not_match_current_project: Entry Projekt entspricht nicht aktuellen Projekt
+ notice_folder_created: Ordner erstellt
+ error_folder_creation_failed: Ordnererstellung fehlgeschlagen
+ error_folder_title_must_be_entered: Es muss ein Titel angegeben werden
+ 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
+ error_file_is_locked: Datei ist gesperrt
+ 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
+ warning_one_of_files_locked: Eine der Dateien ist gesperrt
+ notice_file_unlocked: Dateisperre gelöst
+ notice_file_revision_created: Dateiversion erstellt
+ notice_your_preferences_were_saved: Deine Einstellungen wurden gespeichert
+ warning_folder_notifications_already_activated: Ordnerbenachrichtigungen schon aktiviert
+ notice_folder_notifications_activated: Ordnerbenachrichtigungen aktiviert
+ warning_folder_notifications_already_deactivated: Ordnerbenachrichtigungen schon deaktiviert
+ notice_folder_notifications_deactivated: Ordnerbenachrichtigungen deaktiviert
+ warning_file_notifications_already_activated: Dateibenachrichtigungen schon aktiviert
+ notice_file_notifications_activated: Dateibenachrichtigungen aktiviert
+ warning_file_notifications_already_deactivated: Dateibenachrichtigungen schon deaktiviert
+ notice_file_notifications_deactivated: Dateibenachrichtigungen deaktiviert
+ link_details: "%{title} Details"
+ link_edit: "Bearbeite %{title}"
+ submit_create: Erstellen
+ link_create_folder: Erzeuge Ordner
+ title_check_uncheck_all_for_zip_download_or_email: Wähle alle/keine für ZIP-Download bzw. Email
+ link_title: Titel
+ link_size: Größe
+ link_modified: Geändert
+ link_ver: Version
+ link_author: Autor
+ title_check_for_zip_download_or_email: Wähle für ZIP-Download bzw. Email
+ title_delete: Löschen
+ title_notifications_active_deactivate: "Benachrichtigungen aktiv: Ausschalten"
+ title_notifications_not_active_activate: "Benachrichtigungen nicht aktiv: Einschalten"
+ title_title_version_version_download: "%{title} Version %{version} Download"
+ title_locked_by_user: "Gesperrt von %{user}"
+ title_locked_by_you: Gesperrt von dir
+ title_waiting_for_approval: Warte auf Zustimmung
+ title_approved: Zugestimmt
+ title_unlock_file: Hebe Sperre auf um Änderungen anderer Nutzer zu ermöglichen
+ title_lock_file: Sperre um Änderungen anderer Nutzer zu verhindern
+ submit_download: Download
+ title_download_checked: Download der ausgewählten Dateien in einem ZIP-Archiv
+ submit_email: Email
+ title_send_checked_by_email: Sende gewählte Dateien per Email
+ link_user_preferences: Deine Einstellungen
+ heading_send_documents_by_email: Sende Dateien per Email
+ label_email_from: Von
+ label_email_to: An
+ label_email_cc: CC
+ label_email_subject: Betreff
+ label_email_documents: Dateien
+ label_email_body: Text
+ label_email_send: Senden
+ title_notifications_active: Benachrichtigungen aktiv
+ label_file_size: Dateigröße
+ heading_file_upload: Upload
+ note_uploaded_maximum_files_at_once: "Es können maximal %{number} Dateien auf einmal hochgeladen werden."
+ note_upload_files_greater_than_two_gb: Um Dateien größer 2GB hochzuladen brauchst du einen 64bit-Browser.
+ submit_upload_files: Upload
+ heading_new_folder: Neuer Ordner
+ label_title: Titel
+ label_description: Beschreibung
+ submit_save: Speichern
+ info_file_locked: Datei gesperrt!
+ label_notifications: Benachrichtigungen
+ select_option_default: Voreinstellung
+ select_option_deactivated: Aus
+ select_option_activated: Ein
+ title_save_preferences: Speichere Einstellungen
+ heading_revisions: Versionen
+ title_download: Download
+ title_delete_revision: Lösche Version
+ label_created: Erstellt
+ label_changed: Geändert
+ info_changed_by_user: "%{changed} von %{user}"
+ label_filename: Dateiname
+ label_version: Version
+ label_workflow: Workflow
+ label_mime: Mime
+ label_size: Größe
+ label_comment: Kommentar
+ heading_new_revision: Neue Version
+ option_version_same: gleiche Version
+ option_version_minor: Unterversion
+ option_version_major: Hauptversion
+ label_new_content: Neuer Inhalt
+ label_maximum_files_upload: Maximal hochzuladende Dateien
+ note_maximum_number_of_files_uploaded: Beschränkt die Anzahl der maximal auf einmal hochladbaren Dateien. 0 bedeutet unbeschränkt.
+ label_maximum_files_download: Maximal herunterzuladende Dateien
+ note_maximum_number_of_files_downloaded: Beschränkt die Anzahl der maximal auf einmal herunterladbaren Dateien (per ZIP oder Mail). 0 bedeutet unbeschränkt.
+ label_file_storage_directory: Verzeichnis für die Dateiablage
+ label_index_database: Index Datenbank
+ label_stemming_language: Sprache für die Normalformreduktion
+ note_possible_values: Mögliche Werte
+ note_pass_none_to_disable_stemming: "übergebe 'none' um die Normalformreduktion zu unterdrücken"
+ label_stem_strategy: Normalformreduktionsform
+ option_stem_none: reduziere nichts (Voreinstellung)
+ option_stem_some: reduziere manches
+ option_stem_all: reduziere alles
+ label_stemming_description: Diese Einstellung beeinflusst wie der Parser den Normalformreduktionsalgorithmus anwendet. Voreingestellt ist STEM_NONE. Die möglichen Werte sind
+ note_do_not_stem: Mache keine Normalformreduktion.
+ note_stem_some: "Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'."
+ note_stem_all: "Suche nach reduzierten Formen aller Wörter (Achtung: Kein 'Z'-Präfix wird hinzugefügt)."
+ note_stemming_applied: Beachte, dass der Normalformreduzierungsalgorithmus nur bei Wörtern in Wahrscheinlichkeitsfeldern angewendert wird - boolesche Filterausdrücke werden nie reduziert.
+ label_default_notifications: standardmäßge Dateibenachrichtigungen
+ heading_uploaded_files: Hochgeladene Dateien
+ submit_commit: OK
+ link_documents: Dateien
+ permission_view_dmsf_folders: Durchforste Dateien
+ permission_user_preferences: Benutzereinstellungen
+ permission_view_dmsf_files: Betrachte Dateien
+ permission_folder_manipulation: Ordner manipulation
+ permission_file_manipulation: Datei manipulation
+ permission_file_approval: Datei approval
+ permission_force_file_unlock: Erzwinge Aufhebung der Dateisperre
+ label_file: Datei
+ field_folder: Ordner
+ error_create_cycle_in_folder_dependency: schaffen Zyklus in Abhängigkeit Ordner
+ error_contains_invalid_character: enthält ungültige Zeichen
+ error_file_commit_require_uploaded_file: Begehen einen Datei erfordet hochladene Datei
+ warning_some_files_were_not_commited: "Einige Dateien wurden nich begehen wegen Validation Fehlern: %{files}"
+ error_user_has_not_right_delete_folder: Der Nutzer hat kein Recht die Ordner zu löschen.
+ error_user_has_not_right_delete_file: Der Nutzer hat kein Recht die Datei zu löschen.
+ notice_entries_deleted: Aufnahmen löschen
+ warning_some_entries_were_not_deleted: "Enige Aufnahmen wurden nich gelöscht: %{entries}"
+ question_do_you_really_want_to_delete_entries: Willst du wirklich die gewählten Aufnahmen löschen?
+ title_delete_checked: Lösch gewähltest
+ title_number_of_files_in_directory: Dateizahl in dem Ordner
+ title_filename_for_download: Dateiname benutzt zum Herunterladen oder ZIP-archivierung
+ label_number_of_folders: Order
+ label_number_of_documents: Dokumente
+ label_zip_names_encoding: ZIP-namen Kodierung
+ note_zip_names_encoding_iconv: Iconv ist benutzt zum Charset-konversion von utf-8 in Zielkodierung
+ error_file_storage_directory_does_not_exist: Ordner zum Dateispeichern existiert nicht und kann nicht gebildet.
+ error_file_can_not_be_created: Datei kann nicht in dem gewählten Ordner gebildet werden.
+ error_wrong_zip_encoding: Falsche ZIP-kodierung
+ warning_xapian_not_available: Xapian nicht zur Verfügung
+ menu_dmsf: DMS
+ label_physical_file_delete: Physisches Dateilöschen
+ user_is_not_project_member: Du bist kein Projektmitglied
+ heading_access_downloads_emails: Herunterladene/Emails
+ heading_access_first: Erste
+ heading_access_last: Letzte
+ label_dmsf_updated: DMS aktualisiert
+ title_total_size_of_all_files: Gesamtgröße aller Datein in diesem Ordner
+ project_module_dmsf: DMS
+ warning_no_project_to_copy_file_to: Kein Projekt für das Dateikopieren.
+ comment_copied_from: "Kopiert aus %{source}"
+ notice_file_copied: Datei kopiert
+ notice_file_moved: Datei verschoben
+ label_target_project: Zielprojekte
+ label_target_folder: Zielordner
+ title_copy_or_move: Kopieren/Verschieben
+ label_dmsf_folder_plural: Ordner
+ comment_moved_from: "Verschoben aus %{source}"
+ error_target_folder_same: Zielordner und Projekt sind dieselbe wie die Aktuelle.
+ error_file_cannot_be_moved: Die Datei kann nicht verschoben werden.
+ error_file_cannot_be_copied: Die Datei kann nicht kopiert werden.
+ warning_no_project_to_copy_folder_to: Kein Projekt für das Ordnerkopieren.
+ title_copy: Kopieren
+ error_folder_cannot_be_copied: Der Ordner kann nicht kopiert werden.
+ notice_folder_copied: Ordner kopiert
- :error_max_email_filesize_exceeded: "Maximale Dateigröße der Anlage wurde überschritten. (%{number} MB)"
- :note_maximum_email_filesize: "Maximale Dateigröße der Anlage. 0 bedeutet keinen Limit. Der Nummer ist in MB."
- :label_maximum_email_filesize: "Maximale Dateigröße der Anlage"
- :header_minimum_filesize: "Dateifehler wegen minimaler Dateigröße."
- :error_minimum_filesize: "Die Datei %{file} ist 0 Bytes groß und wird deswegen nicht angehängt."
- :parent_directory: "übergeordnetes Verzeichnis"
- :note_webdav: "Nach der Aktivierung von WebDav kann der Dienst über die URL http(s)://.../dmsf/webdav/ erreicht werden."
- :label_webdav: "Webdav Funktionalität"
- :label_dmsf_plural: "Kopieren von Dateien und Ordnern (%{files} Dateien in %{folders} Ordnern)"
+ error_max_email_filesize_exceeded: "Maximale Dateigröße der Anlage wurde überschritten. (%{number} MB)"
+ note_maximum_email_filesize: Maximale Dateigröße der Anlage. 0 bedeutet keinen Limit. Der Nummer ist in MB.
+ label_maximum_email_filesize: Maximale Dateigröße der Anlage
+ header_minimum_filesize: Dateifehler wegen minimaler Dateigröße.
+ error_minimum_filesize: "Die Datei %{file} ist 0 Bytes groß und wird deswegen nicht angehängt."
+ parent_directory: übergeordnetes Verzeichnis
+ note_webdav: "Nach der Aktivierung von WebDav kann der Dienst über die URL http(s)://.../dmsf/webdav/ erreicht werden."
+ label_webdav: Webdav Funktionalität
+ label_dmsf_plural: "Kopieren von Dateien und Ordnern (%{files} Dateien in %{folders} Ordnern)"
- :warning_folder_already_locked: "Dieser Ordner ist bereits gesperrt"
- :notice_folder_locked: "Der Ordner wurde erfolgreich gesperrt"
- :warning_folder_not_locked: "Der Ordner konnte nicht gesperrt werden"
- :notice_folder_unlocked: "Der Ordner wurde erfolgreich entsperrt"
- :error_only_user_that_locked_folder_can_unlock_it: Sie haben keine Berechtigung zur Entsperrung des Ordners"
+ :warning_folder_already_locked: Dieser Ordner ist bereits gesperrt
+ :notice_folder_locked: Der Ordner wurde erfolgreich gesperrt
+ :warning_folder_not_locked: Der Ordner konnte nicht gesperrt werden
+ :notice_folder_unlocked: Der Ordner wurde erfolgreich entsperrt
+ :error_only_user_that_locked_folder_can_unlock_it: Sie haben keine Berechtigung zur Entsperrung des Ordners
:title_folder_parent_locked: "Übergeordnetes Verzeichnis %{name} ist gesperrt"
:title_file_parent_locked: "Übergeordnetes Verzeichnis %{name} ist gesperrt"
- :title_unlock_folder: "Zur Modifikation für andere Benutzer entsperren"
- :title_lock_folder: "Zum Schutz vor Modifikation durch andere Benutzer sperren"
+ :title_unlock_folder: Zur Modifikation für andere Benutzer entsperren
+ :title_lock_folder: Zum Schutz vor Modifikation durch andere Benutzer sperren
- :select_option_webdav_readonly: "nur Lesen"
- :select_option_webdav_readwrite: "Lesen/Schreiben"
- :label_webdav_strategy: "Webdav Strategie"
- :note_webdav_strategy: "Erlaubt dem Administrator den Wechsel der WebDav Nutzung zwischen nur lesend und auch schreibenden Zugriffen."
-
\ No newline at end of file
+ :select_option_webdav_readonly: nur Lesen
+ :select_option_webdav_readwrite: Lesen/Schreiben
+ :label_webdav_strategy: Webdav Strategie
+ :note_webdav_strategy: Erlaubt dem Administrator den Wechsel der WebDav Nutzung zwischen nur lesend und auch schreibenden Zugriffen.
+
+ error_unable_delete_dmsf_workflow: Unable to delete the workflow
+ error_empty_note: The note can't be empty
+ error_workflow_assign: An error occured while assigning
+ error_cannot_start_workflow: Workflow can't be started
+ error_cannot_renumber_steps: Steps can't be renumbered
+ label_dmsf_workflow_new: New approval workflow
+ label_dmsf_workflow: Approval Workflow
+ label_dmsf_workflow_plural: Approval workflows
+ label_dmsf_workflow_step: Step
+ label_dmsf_workflow_step_plural: Steps
+ label_dmsf_workflow_approval: Approval
+ label_dmsf_workflow_approval_plural: Approvals
+ label_dmsf: DMSF
+ label_dmsf_wokflow_action_approve: Approve
+ label_dmsf_wokflow_action_reject: Reject
+ label_dmsf_wokflow_action_delegate: Delegate to
+ label_dmsf_wokflow_action_assign: Assign an approval workflow
+ label_dmsf_wokflow_action_start: Start workflow
+ label_action: Action
+ label_note: Note
+ title_none: None
+ title_rejection: Rejection
+ title_delegation: Delegation
+ title_assignment: Assignment
+ title_start: Start
+ title_dmsf_workflow_log: Approval Workflow Log
+ title_assigned: Assigned
+ title_approval: Approval
+ title_rejected: Rejected
+ dmsf_and: AND
+ dmsf_or: OR
+ dmsf_new_step: New step
+ message_dmsf_wokflow_note: Your note...
+ info_revision: "r%{rev}"
+ link_workflow: Workflow
+ notice_workflow_started: Approval workflow successfully started
\ No newline at end of file
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 79843539..108c562d 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,220 +1,219 @@
# English translation for DMSF by vit.jonas@gmail.com, dan.munn@munnster.co.uk
en:
- :dmsf: "DMSF"
- :label_dmsf_file_plural: "Dmsf files"
- :warning_no_entries_selected: "No entries selected"
- :error_email_to_must_be_entered: "Email To must be entered"
- :notice_email_sent: "Email sent"
- :warning_file_already_locked: "File already locked"
- :notice_file_locked: "File locked"
- :warning_file_not_locked: "File not locked"
- :notice_file_unlocked: "File unlocked"
- :error_only_user_that_locked_file_can_unlock_it: "Only user that locked file can unlock it"
- :question_do_you_really_want_to_delete_this_entry: "Do you really want to delete this entry?"
- :error_max_files_exceeded: "Limit for %{number} simultaneously downloaded files exceeded"
- :question_do_you_really_want_to_delete_this_revision: "Do you really want to delete this revision?"
- :error_entry_project_does_not_match_current_project: "Entry project doesn't match current project"
- :notice_folder_created: "Folder created"
- :error_folder_creation_failed: "Folder creation failed"
- :error_folder_title_must_be_entered: "Title must be entered"
- :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"
- :error_file_is_locked: "File is locked"
- :notice_file_deleted: "File deleted"
- :error_at_least_one_revision_must_be_present: "At least one revision must be present"
- :notice_revision_deleted: "Revision deleted"
- :warning_one_of_files_locked: "One of files locked"
- :notice_file_unlocked: "File unlocked"
- :notice_file_revision_created: "File revision created"
- :notice_your_preferences_were_saved: "Your preferences were 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"
- :notice_folder_notifications_deactivated: "Folder notifications deactivated"
- :warning_file_notifications_already_activated: "File notifications already activated"
- :notice_file_notifications_activated: "File notifications activated"
- :warning_file_notifications_already_deactivated: "File notifications already deactivated"
- :notice_file_notifications_deactivated: "File notifications deactivated"
- :link_details: "%{title} details"
- :link_edit: "Edit %{title}"
- :submit_create: "Create"
- :link_create_folder: "Create folder"
- :title_check_uncheck_all_for_zip_download_or_email: "Check/Uncheck all for zip download or email"
- :link_title: "Title"
- :link_size: "Size"
- :link_modified: "Modified"
- :link_ver: "Ver."
- :link_author: "Author"
- :title_check_for_zip_download_or_email: "Check for Zip download or email"
- :title_delete: "Delete"
- :title_notifications_active_deactivate: "Notifications active: Deactivate"
- :title_notifications_not_active_activate: "Notifications not active: Activate"
- :title_title_version_version_download: "%{title} version %{version} download"
- :title_locked_by_user: "Locked by %{user}"
- :title_locked_by_you: "Locked by you"
- :title_waiting_for_approval: "Waiting for Approval"
- :title_approved: "Approved"
- :title_unlock_file: "Unlock to allow changes for other members"
- :title_lock_file: "Lock to prevent changes for other members"
- :submit_download: "Download"
- :title_download_checked: "Download checked in Zip archive"
- :submit_email: "Email"
- :title_send_checked_by_email: "Send checked by email"
- :link_user_preferences: "Your DMSF project preferences"
- :heading_send_documents_by_email: "Send documents by email"
- :label_email_from: "From"
- :label_email_to: "To"
- :label_email_cc: "CC"
- :label_email_subject: "Subject"
- :label_email_documents: "Documents"
- :label_email_body: "Body"
- :label_email_send: "Send"
- :title_notifications_active: "Notifications active"
- :label_file_size: "File size"
- :heading_file_upload: "Upload"
- :note_uploaded_maximum_files_at_once: "There can be uploaded maximum of %{number} files at once."
- :note_upload_files_greater_than_two_gb: "To upload files greater than 2GB you must have 64b browser."
- :submit_upload_files: "Upload"
- :heading_new_folder: "New Folder"
- :label_title: "Title"
- :label_description: "Description"
- :submit_save: "Save"
- :info_file_locked: "File locked!"
- :label_notifications: "Notifications"
- :select_option_default: "Default"
- :select_option_deactivated: "Deactivated"
- :select_option_activated: "Activated"
- :title_save_preferences: "Save preferences"
- :heading_revisions: "Revisions"
- :title_download: "Download"
- :title_delete_revision: "Delete revision"
- :label_created: "Created"
- :label_changed: "Changed"
- :info_changed_by_user: "%{changed} by"
- :label_filename: "Filename"
- :label_version: "Version"
- :label_workflow: "Workflow"
- :option_workflow_none: "None"
- :label_mime: "Mime"
- :label_size: "Size"
- :label_comment: "Comment"
- :heading_new_revision: "New Revision"
- :option_version_same: "Same"
- :option_version_minor: "Minor"
- :option_version_major: "Major"
- :label_new_content: "New content"
- :label_maximum_files_upload: "Maximum files upload"
- :note_maximum_number_of_files_uploaded: "Limits maximum number of files uploaded at once. 0 means unlimited."
- :label_maximum_files_download: "Maximum files download"
- :note_maximum_number_of_files_downloaded: "Limits maximum number of files downloaded in zip or sent via email. 0 means unlimited."
- :label_file_storage_directory: "File storage directory"
- :label_index_database: "Index database"
- :label_stemming_language: "Stemming Language"
- :note_possible_values: "Possible values"
- :note_pass_none_to_disable_stemming: "pass 'none' to disable stemming"
- :label_stem_strategy: "Stem strategy"
- :option_stem_none: "Stem none (default)"
- :option_stem_some: "Stem some"
- :option_stem_all: "Stem all"
- :label_stemming_description: "This controls how the query parser will apply the stemming algorithm. The default value is STEM_NONE. The possible values are"
- :note_do_not_stem: "Don't perform any stemming."
- :note_stem_some: "Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'."
- :note_stem_all: "Search for stemmed forms of all words (note: no 'Z' prefix is added)."
- :note_stemming_applied: "Note that the stemming algorithm is only applied to words in probabilistic fields - boolean filter terms are never stemmed."
- :label_default_notifications: "File default notifications"
- :heading_uploaded_files: "Uploaded Files"
- :submit_commit: "Commit"
- :link_documents: "Documents"
- :permission_view_dmsf_folders: "Browse documents"
- :permission_user_preferences: "User preferences"
- :permission_view_dmsf_files: "View documents"
- :permission_folder_manipulation: "Folder manipulation"
- :permission_file_manipulation: "File manipulation"
- :permission_file_approval: "File approval"
- :permission_force_file_unlock: "Force file unlock"
- :label_file: "File"
- :field_folder: "Folder"
- :error_create_cycle_in_folder_dependency: "create cycle in folder dependency"
- :error_contains_invalid_character: "contains invalid character(s)"
- :error_file_commit_require_uploaded_file: "File commit require uploaded file"
- :warning_some_files_were_not_commited: "Some files were not commited due to validation errors: %{files}"
- :error_user_has_not_right_delete_folder: "User hasn't right to delete forders"
- :error_user_has_not_right_delete_file: "User hasn't right to delete file"
- :notice_entries_deleted: "Entries deleted"
- :warning_some_entries_were_not_deleted: "Some entries weren't deleted: %{entries}"
- :question_do_you_really_want_to_delete_entries: "Do you really want to delete checked entries?"
- :title_delete_checked: "Delete checked"
- :title_number_of_files_in_directory: "Number of files in directory"
- :title_filename_for_download: "Filename used for download or in Zip archive"
- :label_number_of_folders: "Folders"
- :label_number_of_documents: "Documents"
- :label_zip_names_encoding: "Zip names encoding"
- :note_zip_names_encoding_iconv: "Iconv is used for charset conversion from utf-8 to target encoding"
- :error_file_storage_directory_does_not_exist: "File storage directory doesn't exist and can't be created"
- :error_file_can_not_be_created: "File can't be created in storage directory"
- :error_wrong_zip_encoding: "Wrong Zip encoding"
- :warning_xapian_not_available: "Xapian not available"
- :menu_dmsf: "DMSF"
- :label_physical_file_delete: "Physical file delete"
- :user_is_not_project_member: "You are not member of the project"
- :heading_access_downloads_emails: "Downloads/Emails"
- :heading_access_first: "First"
- :heading_access_last: "Last"
- :label_dmsf_updated: "DMSF updated"
- :title_total_size_of_all_files: "Total size of all files under this folder"
- :project_module_dmsf: "DMSF"
- :warning_no_project_to_copy_file_to: "No project to copy file to"
- :comment_copied_from: "Copied from %{source}"
- :notice_file_copied: "File copied"
- :notice_file_moved: "File moved"
- :label_target_project: "Target project"
- :label_target_folder: "Target folder"
- :title_copy_or_move: "Copy/Move"
- :label_dmsf_folder_plural: "Dmsf folders"
- :comment_moved_from: "Moved from %{source}"
- :error_target_folder_same: "Target folder and project are the same as current"
- :error_file_cannot_be_moved: "File can't be moved"
- :error_file_cannot_be_copied: "File can't be copied"
- :warning_no_project_to_copy_folder_to: "No project to copy folder to"
- :title_copy: "Copy"
- :error_folder_cannot_be_copied: "Folder can't be copied"
- :notice_folder_copied: "Folder copied"
+ dmsf: DMSF
+ label_dmsf_file_plural: Dmsf files
+ warning_no_entries_selected: No entries selected
+ error_email_to_must_be_entered: Email To must be entered
+ notice_email_sent: Email sent
+ warning_file_already_locked: File already locked
+ notice_file_locked: File locked
+ warning_file_not_locked: File not locked
+ notice_file_unlocked: File unlocked
+ error_only_user_that_locked_file_can_unlock_it: Only user that locked file can unlock it
+ question_do_you_really_want_to_delete_this_entry: Do you really want to delete this entry?
+ error_max_files_exceeded: "Limit for %{number} simultaneously downloaded files exceeded"
+ question_do_you_really_want_to_delete_this_revision: Do you really want to delete this revision?
+ error_entry_project_does_not_match_current_project: "Entry project doesn't match current project"
+ notice_folder_created: Folder created
+ error_folder_creation_failed: Folder creation failed
+ error_folder_title_must_be_entered: Title must be entered
+ 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
+ error_file_is_locked: File is locked
+ notice_file_deleted: File deleted
+ error_at_least_one_revision_must_be_present: At least one revision must be present
+ notice_revision_deleted: Revision deleted
+ warning_one_of_files_locked: One of files locked
+ notice_file_unlocked: File unlocked
+ notice_file_revision_created: File revision created
+ notice_your_preferences_were_saved: Your preferences were 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
+ notice_folder_notifications_deactivated: Folder notifications deactivated
+ warning_file_notifications_already_activated: File notifications already activated
+ notice_file_notifications_activated: File notifications activated
+ warning_file_notifications_already_deactivated: File notifications already deactivated
+ notice_file_notifications_deactivated: File notifications deactivated
+ link_details: "%{title} details"
+ link_edit: "Edit %{title}"
+ submit_create: Create
+ link_create_folder: Create folder
+ title_check_uncheck_all_for_zip_download_or_email: Check/Uncheck all for zip download or email
+ link_title: Title
+ link_size: Size
+ link_modified: Modified
+ link_ver: Ver.
+ link_author: Author
+ title_check_for_zip_download_or_email: Check for Zip download or email
+ title_delete: Delete
+ title_notifications_active_deactivate: "Notifications active: Deactivate"
+ title_notifications_not_active_activate: "Notifications not active: Activate"
+ title_title_version_version_download: "%{title} version %{version} download"
+ title_locked_by_user: "Locked by %{user}"
+ title_locked_by_you: Locked by you
+ title_waiting_for_approval: Waiting for Approval
+ title_approved: Approved
+ title_unlock_file: Unlock to allow changes for other members
+ title_lock_file: Lock to prevent changes for other members
+ submit_download: Download
+ title_download_checked: Download checked in Zip archive
+ submit_email: Email
+ title_send_checked_by_email: Send checked by email
+ link_user_preferences: Your DMSF project preferences
+ heading_send_documents_by_email: Send documents by email
+ label_email_from: From
+ label_email_to: To
+ label_email_cc: CC
+ label_email_subject: Subject
+ label_email_documents: Documents
+ label_email_body: Body
+ label_email_send: Send
+ title_notifications_active: Notifications active
+ label_file_size: File size
+ heading_file_upload: Upload
+ note_uploaded_maximum_files_at_once: "There can be uploaded maximum of %{number} files at once."
+ note_upload_files_greater_than_two_gb: To upload files greater than 2GB you must have 64b browser.
+ submit_upload_files: Upload
+ heading_new_folder: New Folder
+ label_title: Title
+ label_description: Description
+ submit_save: Save
+ info_file_locked: File locked!
+ label_notifications: Notifications
+ select_option_default: Default
+ select_option_deactivated: Deactivated
+ select_option_activated: Activated
+ title_save_preferences: Save preferences
+ heading_revisions: Revisions
+ title_download: Download
+ title_delete_revision: Delete revision
+ label_created: Created
+ label_changed: Changed
+ info_changed_by_user: "%{changed} by"
+ label_filename: Filename
+ label_version: Version
+ label_workflow: Workflow
+ label_mime: Mime
+ label_size: Size
+ label_comment: Comment
+ heading_new_revision: New Revision
+ option_version_same: Same
+ option_version_minor: Minor
+ option_version_major: Major
+ label_new_content: New content
+ label_maximum_files_upload: Maximum files upload
+ note_maximum_number_of_files_uploaded: Limits maximum number of files uploaded at once. 0 means unlimited.
+ label_maximum_files_download: Maximum files download
+ note_maximum_number_of_files_downloaded: Limits maximum number of files downloaded in zip or sent via email. 0 means unlimited.
+ label_file_storage_directory: File storage directory
+ label_index_database: Index database
+ label_stemming_language: Stemming Language
+ note_possible_values: Possible values
+ note_pass_none_to_disable_stemming: "pass 'none' to disable stemming"
+ label_stem_strategy: Stem strategy
+ option_stem_none: Stem none (default)
+ option_stem_some: Stem some
+ option_stem_all: Stem all
+ label_stemming_description: This controls how the query parser will apply the stemming algorithm. The default value is STEM_NONE. The possible values are
+ note_do_not_stem: "Don't perform any stemming."
+ note_stem_some: Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'.
+ note_stem_all: "Search for stemmed forms of all words (note: no 'Z' prefix is added)."
+ note_stemming_applied: Note that the stemming algorithm is only applied to words in probabilistic fields - boolean filter terms are never stemmed.
+ label_default_notifications: File default notifications
+ heading_uploaded_files: Uploaded Files
+ submit_commit: Commit
+ link_documents: Documents
+ permission_view_dmsf_folders: Browse documents
+ permission_user_preferences: User preferences
+ permission_view_dmsf_files: View documents
+ permission_folder_manipulation: Folder manipulation
+ permission_file_manipulation: File manipulation
+ permission_file_approval: File approval
+ permission_force_file_unlock: Force file unlock
+ label_file: File
+ field_folder: Folder
+ error_create_cycle_in_folder_dependency: create cycle in folder dependency
+ error_contains_invalid_character: contains invalid character(s)
+ error_file_commit_require_uploaded_file: File commit require uploaded file
+ warning_some_files_were_not_commited: "Some files were not commited due to validation errors: %{files}"
+ error_user_has_not_right_delete_folder: "User hasn't right to delete forders"
+ error_user_has_not_right_delete_file: "User hasn't right to delete file"
+ notice_entries_deleted: Entries deleted
+ warning_some_entries_were_not_deleted: "Some entries weren't deleted: %{entries}"
+ question_do_you_really_want_to_delete_entries: Do you really want to delete checked entries?
+ title_delete_checked: Delete checked
+ title_number_of_files_in_directory: Number of files in directory
+ title_filename_for_download: Filename used for download or in Zip archive
+ label_number_of_folders: Folders
+ label_number_of_documents: Documents
+ label_zip_names_encoding: Zip names encoding
+ note_zip_names_encoding_iconv: Iconv is used for charset conversion from utf-8 to target encoding
+ error_file_storage_directory_does_not_exist: "File storage directory doesn't exist and can't be created"
+ error_file_can_not_be_created: "File can't be created in storage directory"
+ error_wrong_zip_encoding: Wrong Zip encoding
+ warning_xapian_not_available: Xapian not available
+ menu_dmsf: DMSF
+ label_physical_file_delete: Physical file delete
+ user_is_not_project_member: You are not member of the project
+ heading_access_downloads_emails: Downloads/Emails
+ heading_access_first: First
+ heading_access_last: Last
+ label_dmsf_updated: DMSF updated
+ title_total_size_of_all_files: Total size of all files under this folder
+ project_module_dmsf: DMSF
+ warning_no_project_to_copy_file_to: No project to copy file to
+ comment_copied_from: "Copied from %{source}"
+ notice_file_copied: File copied
+ notice_file_moved: File moved
+ label_target_project: Target project
+ label_target_folder: Target folder
+ title_copy_or_move: Copy/Move
+ label_dmsf_folder_plural: Dmsf folders
+ comment_moved_from: "Moved from %{source}"
+ error_target_folder_same: Target folder and project are the same as current
+ error_file_cannot_be_moved: "File can't be moved"
+ error_file_cannot_be_copied: "File can't be copied"
+ warning_no_project_to_copy_folder_to: No project to copy folder to
+ title_copy: Copy
+ error_folder_cannot_be_copied: "Folder can't be copied"
+ notice_folder_copied: Folder copied
- :error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
- :note_maximum_email_filesize: "Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB."
- :label_maximum_email_filesize: "Maximum email attachment size"
- :header_minimum_filesize: "File Error."
- :error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
- :parent_directory: "Parent Directory"
- :note_webdav: "Webdav once enabled can be found at http://.../dmsf/webdav/"
- :label_webdav: "Webdav functionality"
- :label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
+ error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
+ note_maximum_email_filesize: Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB.
+ label_maximum_email_filesize: Maximum email attachment size
+ header_minimum_filesize: File Error.
+ error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
+ parent_directory: Parent Directory
+ note_webdav: Webdav once enabled can be found at http://.../dmsf/webdav/
+ label_webdav: Webdav functionality
+ label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
- :warning_folder_already_locked: "This folder is already locked"
- :notice_folder_locked: "The folder was successfully locked"
- :warning_folder_not_locked: "Unfortunately, the folder could not be locked"
- :notice_folder_unlocked: "The folder was successfully unlocked"
- :error_only_user_that_locked_folder_can_unlock_it: "You are not authorised to unlock this folder"
- :title_folder_parent_locked: "Parent folder %{name} is locked"
- :title_file_parent_locked: "Parent folder %{name} is locked"
- :title_unlock_folder: "Unlock to allow changes for other members"
- :title_lock_folder: "Lock to prevent changes for other members"
+ warning_folder_already_locked: This folder is already locked
+ notice_folder_locked: The folder was successfully locked
+ warning_folder_not_locked: Unfortunately, the folder could not be locked
+ notice_folder_unlocked: The folder was successfully unlocked
+ error_only_user_that_locked_folder_can_unlock_it: You are not authorised to unlock this folder
+ title_folder_parent_locked: "Parent folder %{name} is locked"
+ title_file_parent_locked: "Parent folder %{name} is locked"
+ title_unlock_folder: Unlock to allow changes for other members
+ title_lock_folder: Lock to prevent changes for other members
- :select_option_webdav_readonly: "Read-only"
- :select_option_webdav_readwrite: "Read/Write"
- :label_webdav_strategy: "Webdav strategy"
- :note_webdav_strategy: "Enables the administrator to decide if webdav is a read-only or read-write platform for end users."
+ select_option_webdav_readonly: Read-only
+ select_option_webdav_readwrite: Read/Write
+ label_webdav_strategy: Webdav strategy
+ note_webdav_strategy: Enables the administrator to decide if webdav is a read-only or read-write platform for end users.
- error_unable_delete_dmsf_workflow: 'Unable to delete the workflow'
+ error_unable_delete_dmsf_workflow: Unable to delete the workflow
error_empty_note: "The note can't be empty"
- error_workflow_assign: 'An error occured while assigning'
+ error_workflow_assign: An error occured while assigning
error_cannot_start_workflow: "Workflow can't be started"
error_cannot_renumber_steps: "Steps can't be renumbered"
- label_dmsf_workflow_new: 'New approval workflow'
- label_dmsf_workflow: 'Approval Workflow'
- label_dmsf_workflow_plural: 'Approval workflows'
+ label_dmsf_workflow_new: New approval workflow
+ label_dmsf_workflow: Approval Workflow
+ label_dmsf_workflow_plural: Approval workflows
label_dmsf_workflow_step: Step
label_dmsf_workflow_step_plural: Steps
label_dmsf_workflow_approval: Approval
@@ -222,9 +221,9 @@ en:
label_dmsf: DMSF
label_dmsf_wokflow_action_approve: Approve
label_dmsf_wokflow_action_reject: Reject
- label_dmsf_wokflow_action_delegate: 'Delegate to'
- label_dmsf_wokflow_action_assign: 'Assign an approval workflow'
- label_dmsf_wokflow_action_start: 'Start workflow'
+ label_dmsf_wokflow_action_delegate: Delegate to
+ label_dmsf_wokflow_action_assign: Assign an approval workflow
+ label_dmsf_wokflow_action_start: Start workflow
label_action: Action
label_note: Note
title_none: None
@@ -232,7 +231,7 @@ en:
title_delegation: Delegation
title_assignment: Assignment
title_start: Start
- title_dmsf_workflow_log: 'Approval Workflow Log'
+ title_dmsf_workflow_log: Approval Workflow Log
title_assigned: Assigned
title_approval: Approval
title_rejected: Rejected
@@ -242,4 +241,4 @@ en:
message_dmsf_wokflow_note: Your note...
info_revision: "r%{rev}"
link_workflow: Workflow
- notice_workflow_started: 'Approval workflow successfully started'
\ No newline at end of file
+ notice_workflow_started: Approval workflow successfully started
\ No newline at end of file
diff --git a/config/locales/es.yml b/config/locales/es.yml
index a390e261..7139fc19 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -1,213 +1,246 @@
# Spanish translation for DMSF
es:
- :dmsf: "DMSF"
- :label_dmsf_file_plural: "DMSF Archivos"
- :warning_no_entries_selected: "No ha seleccionado ningún ítem"
- :error_email_to_must_be_entered: "Ingrese un email"
- :notice_email_sent: "Email sent"
- :warning_file_already_locked: "El archivo ya está bloqueado"
- :notice_file_locked: "Archivo bloqueado"
- :warning_file_not_locked: "Archivo no bloqueado"
- :notice_file_unlocked: "Archivo desbloqueado"
- :error_only_user_that_locked_file_can_unlock_it: "Solo los usuarios que bloquearon previamente al archivo lo pueden desbloquear"
- :question_do_you_really_want_to_delete_this_entry: "¿Está seguro de borrar el ítem seleccionado?"
- :error_max_files_exceeded: "Se excedio el numero permitido de archivos bajados de manera simultánea: "
- :question_do_you_really_want_to_delete_this_revision: "¿Está seguro de borrar la revision seleccionada?"
- :error_entry_project_does_not_match_current_project: "Las entradas del proyecto no concuerdan con el proyecto seleccionado"
- :notice_folder_created: "Carpeta creada satisfactoriamente"
- :error_folder_creation_failed: "La creacion de la carpeta ha fallado"
- :error_folder_title_must_be_entered: "Debe ingresar un título"
- :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"
- :error_file_is_locked: "Archivo bloqueado"
- :notice_file_deleted: "Archivo borrado"
- :error_at_least_one_revision_must_be_present: "al menos una revisión debe estar presente"
- :notice_revision_deleted: "Revision eliminada correctamente"
- :warning_one_of_files_locked: "Uno de los archivos está bloqueado"
- :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"
- :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"
- :notice_folder_notifications_deactivated: "Notificaciones de carpeta desactivadas"
- :warning_file_notifications_already_activated: "Las notificaciones del archivo seleccionado ya estaban activadas previamente"
- :notice_file_notifications_activated: "Notificación de archivo activado"
- :warning_file_notifications_already_deactivated: "Las notificaciones del archivo seleccionado ya estaban desactivadas previamente"
- :notice_file_notifications_deactivated: "Notificación de archivo desactivada"
- :link_details: "%{title} details"
+ dmsf: DMSF
+ label_dmsf_file_plural: DMSF Archivos
+ warning_no_entries_selected: No ha seleccionado ningún ítem
+ error_email_to_must_be_entered: Ingrese un email
+ notice_email_sent: Email sent
+ warning_file_already_locked: El archivo ya está bloqueado
+ notice_file_locked: Archivo bloqueado
+ warning_file_not_locked: Archivo no bloqueado
+ notice_file_unlocked: Archivo desbloqueado
+ error_only_user_that_locked_file_can_unlock_it: Solo los usuarios que bloquearon previamente al archivo lo pueden desbloquear
+ question_do_you_really_want_to_delete_this_entry: ¿Está seguro de borrar el ítem seleccionado?
+ error_max_files_exceeded: "Se excedio el numero permitido de archivos bajados de manera simultánea:"
+ question_do_you_really_want_to_delete_this_revision: ¿Está seguro de borrar la revision seleccionada?
+ error_entry_project_does_not_match_current_project: Las entradas del proyecto no concuerdan con el proyecto seleccionado
+ notice_folder_created: Carpeta creada satisfactoriamente
+ error_folder_creation_failed: La creacion de la carpeta ha fallado
+ error_folder_title_must_be_entered: Debe ingresar un título
+ 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
+ error_file_is_locked: Archivo bloqueado
+ notice_file_deleted: Archivo borrado
+ error_at_least_one_revision_must_be_present: al menos una revisión debe estar presente
+ notice_revision_deleted: Revision eliminada correctamente
+ warning_one_of_files_locked: Uno de los archivos está bloqueado
+ 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
+ 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
+ notice_folder_notifications_deactivated: Notificaciones de carpeta desactivadas
+ warning_file_notifications_already_activated: Las notificaciones del archivo seleccionado ya estaban activadas previamente
+ notice_file_notifications_activated: Notificación de archivo activado
+ warning_file_notifications_already_deactivated: Las notificaciones del archivo seleccionado ya estaban desactivadas previamente
+ notice_file_notifications_deactivated: Notificación de archivo desactivada
-# Not translated
+ # Not translated
+ link_details: "%{title} details"
+ link_edit: "Edit %{title}"
+ submit_create: Create
+ link_create_folder: Create folder
+ title_check_uncheck_all_for_zip_download_or_email: Check/Uncheck all for zip download or email
+ link_title: Title
+ link_size: Size
+ link_modified: Modified
+ link_ver: Ver.
+ link_author: Author
+ title_check_for_zip_download_or_email: Check for Zip download or email
+ title_delete: Delete
+ title_notifications_active_deactivate: "Notifications active: Deactivate"
+ title_notifications_not_active_activate: "Notifications not active: Activate"
+ title_title_version_version_download: "%{title} version %{version} download"
+ title_locked_by_user: "Locked by %{user}"
+ title_locked_by_you: Locked by you
+ title_waiting_for_approval: Waiting for Approval
+ title_approved: Approved
+ title_unlock_file: Unlock to allow changes for other members
+ title_lock_file: Lock to prevent changes for other members
+ submit_download: Download
+ title_download_checked: Download checked in Zip archive
+ submit_email: Email
+ title_send_checked_by_email: Send checked by email
+ link_user_preferences: Your DMSF project preferences
+ heading_send_documents_by_email: Send documents by email
+ label_email_from: From
+ label_email_to: To
+ label_email_cc: CC
+ label_email_subject: Subject
+ label_email_documents: Documents
+ label_email_body: Body
+ label_email_send: Send
+ title_notifications_active: Notifications active
+ label_file_size: File size
+ heading_file_upload: Upload
+ note_uploaded_maximum_files_at_once: "There can be uploaded maximum of %{number} files at once."
+ note_upload_files_greater_than_two_gb: To upload files greater than 2GB you must have 64b browser.
+ submit_upload_files: Upload
+ heading_new_folder: New Folder
+ label_title: Title
+ label_description: Description
+ submit_save: Save
+ info_file_locked: File locked!
+ label_notifications: Notifications
+ select_option_default: Default
+ select_option_deactivated: Deactivated
+ select_option_activated: Activated
+ title_save_preferences: Save preferences
+ heading_revisions: Revisions
+ title_download: Download
+ title_delete_revision: Delete revision
+ label_created: Created
+ label_changed: Changed
+ info_changed_by_user: "%{changed} by"
+ label_filename: Filename
+ label_version: Version
+ label_workflow: Workflow
+ label_mime: Mime
+ label_size: Size
+ label_comment: Comment
+ heading_new_revision: New Revision
+ option_version_same: Same
+ option_version_minor: Minor
+ option_version_major: Major
+ label_new_content: New content
+ label_maximum_files_upload: Maximum files upload
+ note_maximum_number_of_files_uploaded: Limits maximum number of files uploaded at once. 0 means unlimited.
+ label_maximum_files_download: Maximum files download
+ note_maximum_number_of_files_downloaded: Limits maximum number of files downloaded in zip or sent via email. 0 means unlimited.
+ label_file_storage_directory: File storage directory
+ label_index_database: Index database
+ label_stemming_language: Stemming Language
+ note_possible_values: Possible values
+ note_pass_none_to_disable_stemming: "pass 'none' to disable stemming"
+ label_stem_strategy: Stem strategy
+ option_stem_none: Stem none (default)
+ option_stem_some: Stem some
+ option_stem_all: Stem all
+ label_stemming_description: This controls how the query parser will apply the stemming algorithm. The default value is STEM_NONE. The possible values are
+ note_do_not_stem: "Don't perform any stemming."
+ note_stem_some: Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'.
+ note_stem_all: "Search for stemmed forms of all words (note: no 'Z' prefix is added)."
+ note_stemming_applied: Note that the stemming algorithm is only applied to words in probabilistic fields - boolean filter terms are never stemmed.
+ label_default_notifications: File default notifications
+ heading_uploaded_files: Uploaded Files
+ submit_commit: Commit
+ link_documents: Documents
+ permission_view_dmsf_folders: Browse documents
+ permission_user_preferences: User preferences
+ permission_view_dmsf_files: View documents
+ permission_folder_manipulation: Folder manipulation
+ permission_file_manipulation: File manipulation
+ permission_file_approval: File approval
+ permission_force_file_unlock: Force file unlock
+ label_file: File
+ field_folder: Folder
+ error_create_cycle_in_folder_dependency: create cycle in folder dependency
+ error_contains_invalid_character: contains invalid character(s)
+ error_file_commit_require_uploaded_file: File commit require uploaded file
+ warning_some_files_were_not_commited: "Some files were not commited due to validation errors: %{files}"
+ error_user_has_not_right_delete_folder: "User hasn't right to delete forders"
+ error_user_has_not_right_delete_file: "User hasn't right to delete file"
+ notice_entries_deleted: Entries deleted
+ warning_some_entries_were_not_deleted: "Some entries weren't deleted: %{entries}"
+ question_do_you_really_want_to_delete_entries: Do you really want to delete checked entries?
+ title_delete_checked: Delete checked
+ title_number_of_files_in_directory: Number of files in directory
+ title_filename_for_download: Filename used for download or in Zip archive
+ label_number_of_folders: Folders
+ label_number_of_documents: Documents
+ label_zip_names_encoding: Zip names encoding
+ note_zip_names_encoding_iconv: Iconv is used for charset conversion from utf-8 to target encoding
+ error_file_storage_directory_does_not_exist: "File storage directory doesn't exist and can't be created"
+ error_file_can_not_be_created: "File can't be created in storage directory"
+ error_wrong_zip_encoding: Wrong Zip encoding
+ warning_xapian_not_available: Xapian not available
+ menu_dmsf: DMSF
+ label_physical_file_delete: Physical file delete
+ user_is_not_project_member: You are not member of the project
+ heading_access_downloads_emails: Downloads/Emails
+ heading_access_first: First
+ heading_access_last: Last
+ label_dmsf_updated: DMSF updated
+ title_total_size_of_all_files: Total size of all files under this folder
+ project_module_dmsf: DMSF
+ warning_no_project_to_copy_file_to: No project to copy file to
+ comment_copied_from: "Copied from %{source}"
+ notice_file_copied: File copied
+ notice_file_moved: File moved
+ label_target_project: Target project
+ label_target_folder: Target folder
+ title_copy_or_move: Copy/Move
+ label_dmsf_folder_plural: Dmsf folders
+ comment_moved_from: "Moved from %{source}"
+ error_target_folder_same: Target folder and project are the same as current
+ error_file_cannot_be_moved: "File can't be moved"
+ error_file_cannot_be_copied: "File can't be copied"
+ warning_no_project_to_copy_folder_to: No project to copy folder to
+ title_copy: Copy
+ error_folder_cannot_be_copied: "Folder can't be copied"
+ notice_folder_copied: Folder copied
- :link_edit: "Edit %{title}"
- :submit_create: "Create"
- :link_create_folder: "Create folder"
- :title_check_uncheck_all_for_zip_download_or_email: "Check/Uncheck all for zip download or email"
- :link_title: "Title"
- :link_size: "Size"
- :link_modified: "Modified"
- :link_ver: "Ver."
- :link_author: "Author"
- :title_check_for_zip_download_or_email: "Check for Zip download or email"
- :title_delete: "Delete"
- :title_notifications_active_deactivate: "Notifications active: Deactivate"
- :title_notifications_not_active_activate: "Notifications not active: Activate"
- :title_title_version_version_download: "%{title} version %{version} download"
- :title_locked_by_user: "Locked by %{user}"
- :title_locked_by_you: "Locked by you"
- :title_waiting_for_approval: "Waiting for Approval"
- :title_approved: "Approved"
- :title_unlock_file: "Unlock to allow changes for other members"
- :title_lock_file: "Lock to prevent changes for other members"
- :submit_download: "Download"
- :title_download_checked: "Download checked in Zip archive"
- :submit_email: "Email"
- :title_send_checked_by_email: "Send checked by email"
- :link_user_preferences: "Your DMSF project preferences"
- :heading_send_documents_by_email: "Send documents by email"
- :label_email_from: "From"
- :label_email_to: "To"
- :label_email_cc: "CC"
- :label_email_subject: "Subject"
- :label_email_documents: "Documents"
- :label_email_body: "Body"
- :label_email_send: "Send"
- :title_notifications_active: "Notifications active"
- :label_file_size: "File size"
- :heading_file_upload: "Upload"
- :note_uploaded_maximum_files_at_once: "There can be uploaded maximum of %{number} files at once."
- :note_upload_files_greater_than_two_gb: "To upload files greater than 2GB you must have 64b browser."
- :submit_upload_files: "Upload"
- :heading_new_folder: "New Folder"
- :label_title: "Title"
- :label_description: "Description"
- :submit_save: "Save"
- :info_file_locked: "File locked!"
- :label_notifications: "Notifications"
- :select_option_default: "Default"
- :select_option_deactivated: "Deactivated"
- :select_option_activated: "Activated"
- :title_save_preferences: "Save preferences"
- :heading_revisions: "Revisions"
- :title_download: "Download"
- :title_delete_revision: "Delete revision"
- :label_created: "Created"
- :label_changed: "Changed"
- :info_changed_by_user: "%{changed} by %{user}"
- :label_filename: "Filename"
- :label_version: "Version"
- :label_workflow: "Workflow"
- :option_workflow_waiting_for_approval: "Waiting for approval"
- :option_workflow_approved: "Approved"
- :option_workflow_none: "None"
- :label_mime: "Mime"
- :label_size: "Size"
- :label_comment: "Comment"
- :heading_new_revision: "New Revision"
- :option_version_same: "Same"
- :option_version_minor: "Minor"
- :option_version_major: "Major"
- :label_new_content: "New content"
- :label_maximum_files_upload: "Maximum files upload"
- :note_maximum_number_of_files_uploaded: "Limits maximum number of files uploaded at once. 0 means unlimited."
- :label_maximum_files_download: "Maximum files download"
- :note_maximum_number_of_files_downloaded: "Limits maximum number of files downloaded in zip or sent via email. 0 means unlimited."
- :label_file_storage_directory: "File storage directory"
- :label_index_database: "Index database"
- :label_stemming_language: "Stemming Language"
- :note_possible_values: "Possible values"
- :note_pass_none_to_disable_stemming: "pass 'none' to disable stemming"
- :label_stem_strategy: "Stem strategy"
- :option_stem_none: "Stem none (default)"
- :option_stem_some: "Stem some"
- :option_stem_all: "Stem all"
- :label_stemming_description: "This controls how the query parser will apply the stemming algorithm. The default value is STEM_NONE. The possible values are"
- :note_do_not_stem: "Don't perform any stemming."
- :note_stem_some: "Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'."
- :note_stem_all: "Search for stemmed forms of all words (note: no 'Z' prefix is added)."
- :note_stemming_applied: "Note that the stemming algorithm is only applied to words in probabilistic fields - boolean filter terms are never stemmed."
- :label_default_notifications: "File default notifications"
- :heading_uploaded_files: "Uploaded Files"
- :submit_commit: "Commit"
- :link_documents: "Documents"
- :permission_view_dmsf_folders: "Browse documents"
- :permission_user_preferences: "User preferences"
- :permission_view_dmsf_files: "View documents"
- :permission_folder_manipulation: "Folder manipulation"
- :permission_file_manipulation: "File manipulation"
- :permission_file_approval: "File approval"
- :permission_force_file_unlock: "Force file unlock"
- :label_file: "File"
- :field_folder: "Folder"
- :error_create_cycle_in_folder_dependency: "create cycle in folder dependency"
- :error_contains_invalid_character: "contains invalid character(s)"
- :error_file_commit_require_uploaded_file: "File commit require uploaded file"
- :warning_some_files_were_not_commited: "Some files were not commited due to validation errors: %{files}"
- :error_user_has_not_right_delete_folder: "User hasn't right to delete forders"
- :error_user_has_not_right_delete_file: "User hasn't right to delete file"
- :notice_entries_deleted: "Entries deleted"
- :warning_some_entries_were_not_deleted: "Some entries weren't deleted: %{entries}"
- :question_do_you_really_want_to_delete_entries: "Do you really want to delete checked entries?"
- :title_delete_checked: "Delete checked"
- :title_number_of_files_in_directory: "Number of files in directory"
- :title_filename_for_download: "Filename used for download or in Zip archive"
- :label_number_of_folders: "Folders"
- :label_number_of_documents: "Documents"
- :label_zip_names_encoding: "Zip names encoding"
- :note_zip_names_encoding_iconv: "Iconv is used for charset conversion from utf-8 to target encoding"
- :error_file_storage_directory_does_not_exist: "File storage directory doesn't exist and can't be created"
- :error_file_can_not_be_created: "File can't be created in storage directory"
- :error_wrong_zip_encoding: "Wrong Zip encoding"
- :warning_xapian_not_available: "Xapian not available"
- :menu_dmsf: "DMSF"
- :label_physical_file_delete: "Physical file delete"
- :user_is_not_project_member: "You are not member of the project"
- :heading_access_downloads_emails: "Downloads/Emails"
- :heading_access_first: "First"
- :heading_access_last: "Last"
- :label_dmsf_updated: "DMSF updated"
- :title_total_size_of_all_files: "Total size of all files under this folder"
- :project_module_dmsf: "DMSF"
- :warning_no_project_to_copy_file_to: "No project to copy file to"
- :comment_copied_from: "Copied from %{source}"
- :notice_file_copied: "File copied"
- :notice_file_moved: "File moved"
- :label_target_project: "Target project"
- :label_target_folder: "Target folder"
- :title_copy_or_move: "Copy/Move"
- :label_dmsf_folder_plural: "Dmsf folders"
- :comment_moved_from: "Moved from %{source}"
- :error_target_folder_same: "Target folder and project are the same as current"
- :error_file_cannot_be_moved: "File can't be moved"
- :error_file_cannot_be_copied: "File can't be copied"
- :warning_no_project_to_copy_folder_to: "No project to copy folder to"
- :title_copy: "Copy"
- :error_folder_cannot_be_copied: "Folder can't be copied"
- :notice_folder_copied: "Folder copied"
-
- :error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
- :note_maximum_email_filesize: "Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB."
- :label_maximum_email_filesize: "Maximum email attachment size"
- :header_minimum_filesize: "File Error."
- :error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
- :parent_directory: "Parent Directory"
- :note_webdav: "Webdav once enabled can be found at http://.../dmsf/webdav/"
- :label_webdav: "Webdav functionality"
- :label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
+ error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
+ note_maximum_email_filesize: Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB.
+ label_maximum_email_filesize: Maximum email attachment size
+ header_minimum_filesize: File Error.
+ error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
+ parent_directory: Parent Directory
+ note_webdav: Webdav once enabled can be found at http://.../dmsf/webdav/
+ label_webdav: Webdav functionality
+ label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
- :warning_folder_already_locked: "This folder is already locked"
- :notice_folder_locked: "The folder was successfully locked"
- :warning_folder_not_locked: "Unfortunately, the folder could not be locked"
- :notice_folder_unlocked: "The folder was successfully unlocked"
- :error_only_user_that_locked_folder_can_unlock_it: "You are not authorised to unlock this folder"
- :title_folder_parent_locked: "Parent folder %{name} is locked"
- :title_file_parent_locked: "Parent folder %{name} is locked"
- :title_unlock_folder: "Unlock to allow changes for other members"
- :title_lock_folder: "Lock to prevent changes for other members"
+ warning_folder_already_locked: This folder is already locked
+ notice_folder_locked: The folder was successfully locked
+ warning_folder_not_locked: Unfortunately, the folder could not be locked
+ notice_folder_unlocked: The folder was successfully unlocked
+ error_only_user_that_locked_folder_can_unlock_it: You are not authorised to unlock this folder
+ title_folder_parent_locked: "Parent folder %{name} is locked"
+ title_file_parent_locked: "Parent folder %{name} is locked"
+ title_unlock_folder: Unlock to allow changes for other members
+ title_lock_folder: Lock to prevent changes for other members
- :select_option_webdav_readonly: "Read-only"
- :select_option_webdav_readwrite: "Read/Write"
- :label_webdav_strategy: "Webdav strategy"
- :note_webdav_strategy: "Enables the administrator to decide if webdav is a read-only or read-write platform for end users."
+ select_option_webdav_readonly: Read-only
+ select_option_webdav_readwrite: Read/Write
+ label_webdav_strategy: Webdav strategy
+ note_webdav_strategy: Enables the administrator to decide if webdav is a read-only or read-write platform for end users.
+
+ error_unable_delete_dmsf_workflow: Unable to delete the workflow
+ error_empty_note: "The note can't be empty"
+ error_workflow_assign: An error occured while assigning
+ error_cannot_start_workflow: "Workflow can't be started"
+ error_cannot_renumber_steps: "Steps can't be renumbered"
+ label_dmsf_workflow_new: New approval workflow
+ label_dmsf_workflow: Approval Workflow
+ label_dmsf_workflow_plural: Approval workflows
+ label_dmsf_workflow_step: Step
+ label_dmsf_workflow_step_plural: Steps
+ label_dmsf_workflow_approval: Approval
+ label_dmsf_workflow_approval_plural: Approvals
+ label_dmsf: DMSF
+ label_dmsf_wokflow_action_approve: Approve
+ label_dmsf_wokflow_action_reject: Reject
+ label_dmsf_wokflow_action_delegate: Delegate to
+ label_dmsf_wokflow_action_assign: Assign an approval workflow
+ label_dmsf_wokflow_action_start: Start workflow
+ label_action: Action
+ label_note: Note
+ title_none: None
+ title_rejection: Rejection
+ title_delegation: Delegation
+ title_assignment: Assignment
+ title_start: Start
+ title_dmsf_workflow_log: Approval Workflow Log
+ title_assigned: Assigned
+ title_approval: Approval
+ title_rejected: Rejected
+ dmsf_and: AND
+ dmsf_or: OR
+ dmsf_new_step: New step
+ message_dmsf_wokflow_note: Your note...
+ info_revision: "r%{rev}"
+ link_workflow: Workflow
+ notice_workflow_started: Approval workflow successfully started
\ No newline at end of file
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 27c81c21..90b42f9b 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1,210 +1,246 @@
# French translation for DMSF
fr:
- :dmsf: "DMSF"
- :label_dmsf_file_plural: "Fichiers DMSF"
- :warning_no_entries_selected: "Aucun fichier sélectionné"
- :error_email_to_must_be_entered: "La saisie d'une adresse mail est obligatoire"
- :notice_email_sent: "Mail envoyé"
- :warning_file_already_locked: "Fichier déjà verrouillé"
- :notice_file_locked: "Fichier verrouillé"
- :warning_file_not_locked: "Fichier déverrouillé"
- :notice_file_unlocked: "Fichier déverrouillé"
- :error_only_user_that_locked_file_can_unlock_it: "Le fichier ne peut être déverrouillé que par celui qui l'a verrouillé"
- :question_do_you_really_want_to_delete_this_entry: "Etes-vous sûr de vouloir supprimer cet élément ?"
- :error_max_files_exceeded: "Le nombre de fichiers pouvant être téléchargés simultanément est dépassé"
- :question_do_you_really_want_to_delete_this_revision: "Etes-vous sûr de vouloir supprimer cette révision ?"
- :error_entry_project_does_not_match_current_project: "Entry project doesn't match current project"
- :notice_folder_created: "Dossier créé"
- :error_folder_creation_failed: "Erreur de création du dossier"
- :error_folder_title_must_be_entered: "Le titre du document est requis"
- :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"
- :error_file_is_locked: "Le fichier est verrouillé"
- :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"
- :warning_one_of_files_locked: "Un des fichiers sélectionnés est verrouillé"
- :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"
- :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"
- :notice_folder_notifications_deactivated: "Les notifications des dossier ont été désactivés"
- :warning_file_notifications_already_activated: "Les notifications du fichier sont déjà désactivés"
- :notice_file_notifications_activated: "Les notifications du fichier ont été activées"
- :warning_file_notifications_already_deactivated: "Les notifications du fichier sont déjà désactivées"
- :notice_file_notifications_deactivated: "Les notifications du fichier ont été désactivés"
- :link_details: "Détails de %{title}"
- :link_edit: "Modification du dossier %{title}"
- :submit_create: "Ajouter"
- :link_create_folder: "Créer un sous-dossier"
- :title_check_uncheck_all_for_zip_download_or_email: "Sélectionner/Ignorer tous les documents pour le téléchargement ou pour la transmission par mail"
- :link_title: "Titre"
- :link_size: "Taille"
- :link_modified: "Modifié"
- :link_ver: "Version"
- :link_author: "Auteur"
- :title_check_for_zip_download_or_email: "Sélectionner pour le téléchargement ou la transmission par mail"
- :title_delete: "Supprimer"
- :title_notifications_active_deactivate: "Notifications activées : cliquer pour désactiver"
- :title_notifications_not_active_activate: "Notifications désactivées : cliquer pour activer"
- :title_title_version_version_download: "Télécharger la version %{version} de %{title}"
- :title_locked_by_user: "Verrouillé par %{user}"
- :title_locked_by_you: "Verrouillé par vous-même"
- :title_waiting_for_approval: "Attente de validation"
- :title_approved: "Validé"
- :title_unlock_file: "Déverrouiller afin de permettre la modification par les membres du projet"
- :title_lock_file: "Verrouiller afin d'empêcher les modifications du document"
- :submit_download: "Télécharger"
- :title_download_checked: "Télécharger les fichiers sélectionnés au format zip"
- :submit_email: "Email"
- :title_send_checked_by_email: "Transmettre les fichiers sélectionnés par mail"
- :link_user_preferences: "Préférences personnelles du module DMSF"
- :heading_send_documents_by_email: "Transmettre les documents par mail"
- :label_email_from: "De"
- :label_email_to: "A"
- :label_email_cc: "Cc"
- :label_email_subject: "Objet"
- :label_email_documents: "Fichiers"
- :label_email_body: "Message"
- :label_email_send: "Envoyer"
- :title_notifications_active: "Notifications actives"
- :label_file_size: "Taille du fichier"
- :heading_file_upload: "Déposer des fichiers"
- :note_uploaded_maximum_files_at_once: "Seulement %{number} fichiers peuvent être déposés à la fois."
- :note_upload_files_greater_than_two_gb: "Afin de transmettre des fichiers de plus de 2Go, l'utilisation d'un navigateur de 64Bits est nécessaire."
- :submit_upload_files: "Transmission"
- :heading_new_folder: "Nouveau Dossier"
- :label_title: "Titre"
- :label_description: "Description"
- :submit_save: "Enregistrer"
- :info_file_locked: "Fichier verrouillé"
- :label_notifications: "Notifications"
- :select_option_default: "Défaut"
- :select_option_deactivated: "Désactivé"
- :select_option_activated: "Activé"
- :title_save_preferences: "Enregistrer les préférences"
- :heading_revisions: "Révisions"
- :title_download: "Télécharger"
- :title_delete_revision: "Supprimer la révision"
- :label_created: "Créé"
- :label_changed: "Modifié"
- :info_changed_by_user: "%{changed} par %{user}"
- :label_filename: "Fichier"
- :label_version: "Version"
- :label_workflow: "Etat"
- :option_workflow_waiting_for_approval: "En attente de validation"
- :option_workflow_approved: "Validé"
- :option_workflow_none: "Aucun"
- :label_mime: "Type"
- :label_size: "Taille"
- :label_comment: "Commentaires"
- :heading_new_revision: "Nouvelle révision"
- :option_version_same: "(identique)"
- :option_version_minor: "(modification mineure)"
- :option_version_major: "(modification majeure)"
- :label_new_content: "Nouvelle version du fichier"
- :label_maximum_files_upload: "Nombre maximal de documents pouvant être transmis"
- :note_maximum_number_of_files_uploaded: "Nombre maximal de documents pouvant être transmis en une fois. La valeur 0 signifie illimité."
- :label_maximum_files_download: "Nombre maximal de fichiers pouvant être téléchargés"
- :note_maximum_number_of_files_downloaded: "Nombre maximal de documents pouvant être téléchargés ou transmis par mail en une fois. La valeur 0 signifie illimité."
- :label_file_storage_directory: "Dossier de stockage des documents"
- :label_index_database: "Indexer la base de données"
- :label_stemming_language: "Méthode de racinisation"
- :note_possible_values: "valeurs possibles"
- :note_pass_none_to_disable_stemming: "Utiliser 'none' pour désactiver la racinisation"
- :label_stem_strategy: "Stratégie de racinisation"
- :option_stem_none: "Aucun suffixe(défaut)"
- :option_stem_some: "Quelques suffixes"
- :option_stem_all: "Tous les suffixes"
- :label_stemming_description: "Ce paramètre contrôle l'algorithme de racinisation appliqué par le requêteur. La valeur par défaut est STEM_NONE. Les paramètres disponibles sont"
- :note_do_not_stem: "N'effectuer aucune transformation"
- :note_stem_some: "Rechercher des stemmes pour tous les mots sauf ceux qui commencent par des majuscules, ceux suivis d'un certain nombre de caractères ou ceux utilisés avec des opérateurs nécessitant des informations contextuelles. Les stemmes doivent être préfixées par 'Z'."
- :note_stem_all: "Rechercher toutes les racines de tous les mots (note : le préfix 'Z' ne sera pas ajouté)."
- :note_stemming_applied: "Il est à noter que l'algorithme de racinisation ne sera appliqué qu'aux mots in probabilistic fields - Les filtres booléans ne seront pas racinisés."
- :label_default_notifications: "Les notifications par défaut du document"
- :heading_uploaded_files: "Document(s) transmis"
- :submit_commit: "Appliquer"
- :link_documents: "Documents"
- :permission_view_dmsf_folders: "Parcourir les documents"
- :permission_user_preferences: "Préférences utilisateur"
- :permission_view_dmsf_files: "Afficher documents"
- :permission_folder_manipulation: "Gestion des dossiers"
- :permission_file_manipulation: "Gestion des documents"
- :permission_file_approval: "Validation du document"
- :permission_force_file_unlock: "Forcer le déverrouillage du document"
- :label_file: "Fichier"
- :field_folder: "Dossier"
- :error_create_cycle_in_folder_dependency: "create cycle in folder dependency"
- :error_contains_invalid_character: "Contient de(s) caractère(s) invalide(s)"
- :error_file_commit_require_uploaded_file: "Transmission des fichiers nécessaire avant l'enregistrement"
- :warning_some_files_were_not_commited: "Erreur d'enregsitrement de certains fichiers %{files}"
- :error_user_has_not_right_delete_folder: "L'utilisateur ne dispose pas des droits nécessaires permettant la suppression du dossier"
- :error_user_has_not_right_delete_file: "L'utilisateur ne dispose pas des droits nécessaires permettant la suppression du dossier"
- :notice_entries_deleted: "Elément(s) supprimé(s)"
- :warning_some_entries_were_not_deleted: "Certains éléments n'ont pas été supprimés : %{entries}"
- :question_do_you_really_want_to_delete_entries: "Etes-vous sûr de vouloir supprimer le(s) élément(s) sélectionné(s)?"
- :title_delete_checked: "Supprimer les éléments sélectionnés"
- :title_number_of_files_in_directory: "Nombre de fichiers dans le dossier"
- :title_filename_for_download: "Nom du fichier à utiliser lors du téléchargement ou de l'archive ZIP"
- :label_number_of_folders: "Dossiers"
- :label_number_of_documents: "Fichiers"
- :label_zip_names_encoding: "Encodage du nom des fichiers ZIP"
- :note_zip_names_encoding_iconv: "Iconv est utilisé lors de la transformation du jeu de caractères utf-8 vers le jeu de caractères cible"
- :error_file_storage_directory_does_not_exist: "Le répertoire de stockage des fichiers n'existe pas ou n'a pas pu être créé"
- :error_file_can_not_be_created: "Le fichier n'a pas pu être enregistré dans le répertoire de stockage"
- :error_wrong_zip_encoding: "Mauvais jeu de caractères pour la transformation du nom du ZIP"
- :warning_xapian_not_available: "Le module Xapian est indisponible"
- :menu_dmsf: "DMSF"
- :label_physical_file_delete: "Suppression des fichiers"
- :user_is_not_project_member: "Vous n'êtes pas un membre du projet"
- :heading_access_downloads_emails: "Téléchargement / Envoi par mail"
- :heading_access_first: "Premier"
- :heading_access_last: "Dernier"
- :label_dmsf_updated: "Dépôt ou mise à jour du document "
- :title_total_size_of_all_files: "Taille totale des fichiers de ce dossier"
- :project_module_dmsf: "DMSF"
- :warning_no_project_to_copy_file_to: "Le projet de destination n'est pas défini"
- :comment_copied_from: "Copie effectuée depuis %{source}"
- :notice_file_copied: "Fichier copié"
- :notice_file_moved: "Fichier déplacé"
- :label_target_project: "Projet cible"
- :label_target_folder: "Dossier cible"
- :title_copy_or_move: "Copie/Déplacement"
- :label_dmsf_folder_plural: "Les dossiers de DMSF"
- :comment_moved_from: "Déplacé depuis %{source}"
- :error_target_folder_same: "Le projet et le dossier cible sont identiques au projet et dossier source"
- :error_file_cannot_be_moved: "Le fichier ne peut pas être déplacé"
- :error_file_cannot_be_copied: "Le fichier ne peut pas être copié"
- :warning_no_project_to_copy_folder_to: "Le projet de destination n'est pas défini"
- :title_copy: "Copie"
- :error_folder_cannot_be_copied: "Le dossier ne peut pas être copié"
- :notice_folder_copied: "Dossier copié"
+ dmsf: DMSF
+ label_dmsf_file_plural: Fichiers DMSF
+ warning_no_entries_selected: Aucun fichier sélectionné
+ error_email_to_must_be_entered: La saisie d'une adresse mail est obligatoire
+ notice_email_sent: Mail envoyé
+ warning_file_already_locked: Fichier déjà verrouillé
+ notice_file_locked: Fichier verrouillé
+ warning_file_not_locked: Fichier déverrouillé
+ notice_file_unlocked: Fichier déverrouillé
+ error_only_user_that_locked_file_can_unlock_it: "Le fichier ne peut être déverrouillé que par celui qui l'a verrouillé"
+ question_do_you_really_want_to_delete_this_entry: Etes-vous sûr de vouloir supprimer cet élément ?
+ error_max_files_exceeded: Le nombre de fichiers pouvant être téléchargés simultanément est dépassé
+ question_do_you_really_want_to_delete_this_revision: Etes-vous sûr de vouloir supprimer cette révision ?
+ error_entry_project_does_not_match_current_project: Entry project doesn't match current project
+ notice_folder_created: Dossier créé
+ error_folder_creation_failed: Erreur de création du dossier
+ error_folder_title_must_be_entered: Le titre du document est requis
+ 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
+ error_file_is_locked: Le fichier est verrouillé
+ 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
+ warning_one_of_files_locked: Un des fichiers sélectionnés est verrouillé
+ 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
+ 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
+ notice_folder_notifications_deactivated: Les notifications des dossier ont été désactivés
+ warning_file_notifications_already_activated: Les notifications du fichier sont déjà désactivés
+ notice_file_notifications_activated: Les notifications du fichier ont été activées
+ warning_file_notifications_already_deactivated: Les notifications du fichier sont déjà désactivées
+ notice_file_notifications_deactivated: Les notifications du fichier ont été désactivés
+ link_details: "Détails de %{title}"
+ link_edit: "Modification du dossier %{title}"
+ submit_create: Ajouter
+ link_create_folder: Créer un sous-dossier
+ title_check_uncheck_all_for_zip_download_or_email: Sélectionner/Ignorer tous les documents pour le téléchargement ou pour la transmission par mail
+ link_title: Titre
+ link_size: Taille
+ link_modified: Modifié
+ link_ver: Version
+ link_author: Auteur
+ title_check_for_zip_download_or_email: Sélectionner pour le téléchargement ou la transmission par mail
+ title_delete: Supprimer
+ title_notifications_active_deactivate: "Notifications activées : cliquer pour désactiver"
+ title_notifications_not_active_activate: "Notifications désactivées : cliquer pour activer"
+ title_title_version_version_download: "Télécharger la version %{version} de %{title}"
+ title_locked_by_user: "Verrouillé par %{user}"
+ title_locked_by_you: Verrouillé par vous-même
+ title_waiting_for_approval: Attente de validation
+ title_approved: Validé
+ title_unlock_file: Déverrouiller afin de permettre la modification par les membres du projet
+ title_lock_file: Verrouiller afin d'empêcher les modifications du document
+ submit_download: Télécharger
+ title_download_checked: Télécharger les fichiers sélectionnés au format zip
+ submit_email: Email
+ title_send_checked_by_email: Transmettre les fichiers sélectionnés par mail
+ link_user_preferences: Préférences personnelles du module DMSF
+ heading_send_documents_by_email: Transmettre les documents par mail
+ label_email_from: De
+ label_email_to: A
+ label_email_cc: Cc
+ label_email_subject: Objet
+ label_email_documents: Fichiers
+ label_email_body: Message
+ label_email_send: Envoyer
+ title_notifications_active: Notifications actives
+ label_file_size: Taille du fichier
+ heading_file_upload: Déposer des fichiers
+ note_uploaded_maximum_files_at_once: "Seulement %{number} fichiers peuvent être déposés à la fois."
+ note_upload_files_greater_than_two_gb: Afin de transmettre des fichiers de plus de 2Go, l'utilisation d'un navigateur de 64Bits est nécessaire.
+ submit_upload_files: Transmission
+ heading_new_folder: Nouveau Dossier
+ label_title: Titre
+ label_description: Description
+ submit_save: Enregistrer
+ info_file_locked: Fichier verrouillé
+ label_notifications: Notifications
+ select_option_default: Défaut
+ select_option_deactivated: Désactivé
+ select_option_activated: Activé
+ title_save_preferences: Enregistrer les préférences
+ heading_revisions: Révisions
+ title_download: Télécharger
+ title_delete_revision: Supprimer la révision
+ label_created: Créé
+ label_changed: Modifié
+ info_changed_by_user: "%{changed} par %{user}"
+ label_filename: Fichier
+ label_version: Version
+ label_workflow: Etat
+ label_mime: Type
+ label_size: Taille
+ label_comment: Commentaires
+ heading_new_revision: Nouvelle révision
+ option_version_same: (identique)
+ option_version_minor: (modification mineure)
+ option_version_major: (modification majeure)
+ label_new_content: Nouvelle version du fichier
+ label_maximum_files_upload: Nombre maximal de documents pouvant être transmis
+ note_maximum_number_of_files_uploaded: Nombre maximal de documents pouvant être transmis en une fois. La valeur 0 signifie illimité.
+ label_maximum_files_download: Nombre maximal de fichiers pouvant être téléchargés
+ note_maximum_number_of_files_downloaded: Nombre maximal de documents pouvant être téléchargés ou transmis par mail en une fois. La valeur 0 signifie illimité.
+ label_file_storage_directory: Dossier de stockage des documents
+ label_index_database: Indexer la base de données
+ label_stemming_language: Méthode de racinisation
+ note_possible_values: valeurs possibles
+ note_pass_none_to_disable_stemming: "Utiliser 'none' pour désactiver la racinisation"
+ label_stem_strategy: Stratégie de racinisation
+ option_stem_none: Aucun suffixe(défaut)
+ option_stem_some: Quelques suffixes
+ option_stem_all: Tous les suffixes
+ label_stemming_description: Ce paramètre contrôle l'algorithme de racinisation appliqué par le requêteur. La valeur par défaut est STEM_NONE. Les paramètres disponibles sont
+ note_do_not_stem: "N'effectuer aucune transformation"
+ note_stem_some: "Rechercher des stemmes pour tous les mots sauf ceux qui commencent par des majuscules, ceux suivis d'un certain nombre de caractères ou ceux utilisés avec des opérateurs nécessitant des informations contextuelles. Les stemmes doivent être préfixées par 'Z'."
+ note_stem_all: "Rechercher toutes les racines de tous les mots (note : le préfix 'Z' ne sera pas ajouté)."
+ note_stemming_applied: Il est à noter que l'algorithme de racinisation ne sera appliqué qu'aux mots in probabilistic fields - Les filtres booléans ne seront pas racinisés.
+ label_default_notifications: Les notifications par défaut du document
+ heading_uploaded_files: Document(s) transmis
+ submit_commit: Appliquer
+ link_documents: Documents
+ permission_view_dmsf_folders: Parcourir les documents
+ permission_user_preferences: Préférences utilisateur
+ permission_view_dmsf_files: Afficher documents
+ permission_folder_manipulation: Gestion des dossiers
+ permission_file_manipulation: Gestion des documents
+ permission_file_approval: Validation du document
+ permission_force_file_unlock: Forcer le déverrouillage du document
+ label_file: Fichier
+ field_folder: Dossier
+ error_create_cycle_in_folder_dependency: create cycle in folder dependency
+ error_contains_invalid_character: Contient de(s) caractère(s) invalide(s)
+ error_file_commit_require_uploaded_file: "Transmission des fichiers nécessaire avant l'enregistrement"
+ warning_some_files_were_not_commited: "Erreur d'enregsitrement de certains fichiers %{files}"
+ error_user_has_not_right_delete_folder: "L'utilisateur ne dispose pas des droits nécessaires permettant la suppression du dossier"
+ error_user_has_not_right_delete_file: "L'utilisateur ne dispose pas des droits nécessaires permettant la suppression du dossier"
+ notice_entries_deleted: Elément(s) supprimé(s)
+ warning_some_entries_were_not_deleted: "Certains éléments n'ont pas été supprimés : %{entries}"
+ question_do_you_really_want_to_delete_entries: Etes-vous sûr de vouloir supprimer le(s) élément(s) sélectionné(s)?
+ title_delete_checked: Supprimer les éléments sélectionnés
+ title_number_of_files_in_directory: Nombre de fichiers dans le dossier
+ title_filename_for_download: "Nom du fichier à utiliser lors du téléchargement ou de l'archive ZIP"
+ label_number_of_folders: Dossiers
+ label_number_of_documents: Fichiers
+ label_zip_names_encoding: Encodage du nom des fichiers ZIP
+ note_zip_names_encoding_iconv: Iconv est utilisé lors de la transformation du jeu de caractères utf-8 vers le jeu de caractères cible
+ error_file_storage_directory_does_not_exist: Le répertoire de stockage des fichiers n'existe pas ou n'a pas pu être créé
+ error_file_can_not_be_created: "Le fichier n'a pas pu être enregistré dans le répertoire de stockage"
+ error_wrong_zip_encoding: Mauvais jeu de caractères pour la transformation du nom du ZIP
+ warning_xapian_not_available: Le module Xapian est indisponible
+ menu_dmsf: DMSF
+ label_physical_file_delete: Suppression des fichiers
+ user_is_not_project_member: "Vous n'êtes pas un membre du projet"
+ heading_access_downloads_emails: Téléchargement / Envoi par mail
+ heading_access_first: Premier
+ heading_access_last: Dernier
+ label_dmsf_updated: Dépôt ou mise à jour du document
+ title_total_size_of_all_files: Taille totale des fichiers de ce dossier
+ project_module_dmsf: DMSF
+ warning_no_project_to_copy_file_to: "Le projet de destination n'est pas défini"
+ comment_copied_from: "Copie effectuée depuis %{source}"
+ notice_file_copied: Fichier copié
+ notice_file_moved: Fichier déplacé
+ label_target_project: Projet cible
+ label_target_folder: Dossier cible
+ title_copy_or_move: Copie/Déplacement
+ label_dmsf_folder_plural: Les dossiers de DMSF
+ comment_moved_from: "Déplacé depuis %{source}"
+ error_target_folder_same: Le projet et le dossier cible sont identiques au projet et dossier source
+ error_file_cannot_be_moved: Le fichier ne peut pas être déplacé
+ error_file_cannot_be_copied: Le fichier ne peut pas être copié
+ warning_no_project_to_copy_folder_to: "Le projet de destination n'est pas défini"
+ title_copy: Copie
+ error_folder_cannot_be_copied: Le dossier ne peut pas être copié
+ notice_folder_copied: Dossier copié
- :error_max_email_filesize_exceeded: "Vous avez dépassé la taille maximale des fichiers pouvant être transmis par mail (%{number} MB)"
- :note_maximum_email_filesize: "Taille maximale, en méga octets, des fichiers pouvant être transmis par mail. 0 indique aucune restriction"
- :label_maximum_email_filesize: "Taille maximale du fichier attaché"
- :header_minimum_filesize: "Erreur de fichier."
- :error_minimum_filesize: "Le fichier %{file} est vide. Il ne sera pas transmis."
- :parent_directory: "Dossier parent"
- :note_webdav: "Après l'activation du module Webdav, celui-ci sera accessible par http://.../dmsf/webdav/"
- :label_webdav: "Module Webdav"
- :label_dmsf_plural: "Copier les fichiers et les dossiers DMSF (%{files} fichiers dans %{folders} dossiers)"
+ error_max_email_filesize_exceeded: "Vous avez dépassé la taille maximale des fichiers pouvant être transmis par mail (%{number} MB)"
+ note_maximum_email_filesize: Taille maximale, en méga octets, des fichiers pouvant être transmis par mail. 0 indique aucune restriction
+ label_maximum_email_filesize: Taille maximale du fichier attaché
+ header_minimum_filesize: Erreur de fichier.
+ error_minimum_filesize: "Le fichier %{file} est vide. Il ne sera pas transmis."
+ parent_directory: Dossier parent
+ note_webdav: "Après l'activation du module Webdav, celui-ci sera accessible par http://.../dmsf/webdav/"
+ label_webdav: Module Webdav
+ label_dmsf_plural: "Copier les fichiers et les dossiers DMSF (%{files} fichiers dans %{folders} dossiers)"
- :warning_folder_already_locked: "Ce dossier est déjà verrouillé"
- :notice_folder_locked: "Dossier verrouillé"
- :warning_folder_not_locked: "Echec du verrouillage du dossier"
- :notice_folder_unlocked: "Le dossier a été déverrouillé"
- :error_only_user_that_locked_folder_can_unlock_it: "Vous n'êtes autorisé à déverrouiller ce dossier"
- :title_folder_parent_locked: "Le dossier parent %{name} verrouillé"
- :title_file_parent_locked: "Le dossier parent %{name} verrouillé"
- :title_unlock_folder: "Déverrouiller afin de permettre la modification par les membres du projet"
- :title_lock_folder: "Verrouiller afin d'empêcher les modifications du dossier"
-
- :select_option_webdav_readonly: "Lecture"
- :select_option_webdav_readwrite: "Lecture/Ecriture"
- :label_webdav_strategy: "Accès Webdav"
- :note_webdav_strategy: "Permet à l'administrateur d'autoriser les utilisateurs au module Webdav en letcure seule ou en lecture et écriture."
+ warning_folder_already_locked: Ce dossier est déjà verrouillé
+ notice_folder_locked: Dossier verrouillé
+ warning_folder_not_locked: Echec du verrouillage du dossier
+ notice_folder_unlocked: Le dossier a été déverrouillé
+ error_only_user_that_locked_folder_can_unlock_it: "Vous n'êtes autorisé à déverrouiller ce dossier"
+ title_folder_parent_locked: "Le dossier parent %{name} verrouillé"
+ title_file_parent_locked: "Le dossier parent %{name} verrouillé"
+ title_unlock_folder: Déverrouiller afin de permettre la modification par les membres du projet
+ title_lock_folder: "Verrouiller afin d'empêcher les modifications du dossier"
+
+ select_option_webdav_readonly: Lecture
+ select_option_webdav_readwrite: Lecture/Ecriture
+ label_webdav_strategy: Accès Webdav
+ note_webdav_strategy: "Permet à l'administrateur d'autoriser les utilisateurs au module Webdav en letcure seule ou en lecture et écriture."
+
+ # Not translated
+
+ error_unable_delete_dmsf_workflow: Unable to delete the workflow
+ error_empty_note: The note can't be empty
+ error_workflow_assign: An error occured while assigning
+ error_cannot_start_workflow: Workflow can't be started
+ error_cannot_renumber_steps: Steps can't be renumbered
+ label_dmsf_workflow_new: New approval workflow
+ label_dmsf_workflow: Approval Workflow
+ label_dmsf_workflow_plural: Approval workflows
+ label_dmsf_workflow_step: Step
+ label_dmsf_workflow_step_plural: Steps
+ label_dmsf_workflow_approval: Approval
+ label_dmsf_workflow_approval_plural: Approvals
+ label_dmsf: DMSF
+ label_dmsf_wokflow_action_approve: Approve
+ label_dmsf_wokflow_action_reject: Reject
+ label_dmsf_wokflow_action_delegate: Delegate to
+ label_dmsf_wokflow_action_assign: Assign an approval workflow
+ label_dmsf_wokflow_action_start: Start workflow
+ label_action: Action
+ label_note: Note
+ title_none: None
+ title_rejection: Rejection
+ title_delegation: Delegation
+ title_assignment: Assignment
+ title_start: Start
+ title_dmsf_workflow_log: Approval Workflow Log
+ title_assigned: Assigned
+ title_approval: Approval
+ title_rejected: Rejected
+ dmsf_and: AND
+ dmsf_or: OR
+ dmsf_new_step: New step
+ message_dmsf_wokflow_note: Your note...
+ info_revision: "r%{rev}"
+ link_workflow: Workflow
+ notice_workflow_started: Approval workflow successfully started
\ No newline at end of file
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 8e69e1b4..b64dcf83 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -1,212 +1,246 @@
# Japanese translation for DMSF
ja:
- :dmsf: "DMSF"
- :label_dmsf_file_plural: "Dmsf ファイル"
- :warning_no_entries_selected: "エントリーが選ばれていません"
- :error_email_to_must_be_entered: "電子メールの To 先は省略できません"
- :notice_email_sent: "電子メールを送信しました"
- :warning_file_already_locked: "ファイルは既にロックされています"
- :notice_file_locked: "ファイルをロックしました"
- :warning_file_not_locked: "ファイルはロックされていません"
- :notice_file_unlocked: "ファイルをロック解除しました"
- :error_only_user_that_locked_file_can_unlock_it: "ファイルをロックしたユーザだけがロック解除できます"
- :question_do_you_really_want_to_delete_this_entry: "本当にこのエントリーを削除しますか?"
- :error_max_files_exceeded: "同時にダウンロードできるファイル数の上限 %{number} を超えています"
- :question_do_you_really_want_to_delete_this_revision: "本当にこのリビジョンを削除しますか?"
- :error_entry_project_does_not_match_current_project: "指定したプロジェクトは現在のプロジェクトと一致しません"
- :notice_folder_created: "フォルダを作成しました"
- :error_folder_creation_failed: "フォルダを作成できません"
- :error_folder_title_must_be_entered: "タイトルが必要です"
- :notice_folder_deleted: "フォルダを削除しました"
- :error_folder_is_not_empty: "フォルダが空ではありません"
- :error_folder_title_is_already_used: "タイトルは既に使われています"
- :notice_folder_details_were_saved: "フォルダの詳細を保存しました"
- :error_file_is_locked: "ファイルはロックされています"
- :notice_file_deleted: "ファイルを削除しました"
- :error_at_least_one_revision_must_be_present: "少なくとも1つのリビジョンが必要です"
- :notice_revision_deleted: "リビジョンを削除しました"
- :warning_one_of_files_locked: "ファイルのうちの1つがロックされています"
- :notice_file_unlocked: "ファイルをロック解除しました"
- :notice_file_revision_created: "ファイルのリビジョンを作成しました"
- :notice_your_preferences_were_saved: "あなたの設定を保存しました"
- :warning_folder_notifications_already_activated: "フォルダ通知は既に有効です"
- :notice_folder_notifications_activated: "フォルダ通知を有効にしました"
- :warning_folder_notifications_already_deactivated: "フォルダ通知は既に無効です"
- :notice_folder_notifications_deactivated: "フォルダ通知を無効にしました"
- :warning_file_notifications_already_activated: "ファイル通知は既に有効です"
- :notice_file_notifications_activated: "ファイル通知を有効にしました"
- :warning_file_notifications_already_deactivated: "ファイル通知は既に無効です"
- :notice_file_notifications_deactivated: "ファイル通知を無効にしました"
- :link_details: "%{title} の詳細を表示します"
- :link_edit: "%{title} を編集します"
- :submit_create: "作成"
- :link_create_folder: "フォルダを作成します"
- :title_check_uncheck_all_for_zip_download_or_email: "すべての Zip ダウンロードまたは電子メールのチェックをオン/オフします"
- :link_title: "タイトル"
- :link_size: "サイズ"
- :link_modified: "更新日時"
- :link_ver: "バージョン"
- :link_author: "作成者"
- :title_check_for_zip_download_or_email: "Zip ダウンロードまたは電子メールをチェックします"
- :title_delete: "削除します"
- :title_notifications_active_deactivate: "通知は有効です: 無効にする"
- :title_notifications_not_active_activate: "通知は無効です: 有効にする"
- :title_title_version_version_download: "%{title} のバージョン %{version} をダウンロードします"
- :title_locked_by_user: "%{user} によってロックされています"
- :title_locked_by_you: "あなたがロックしています"
- :title_waiting_for_approval: "承認待ち"
- :title_approved: "承認済み"
- :title_unlock_file: "ロック解除して他のメンバーの変更を許可します"
- :title_lock_file: "ロックして他のメンバーの変更を禁止します"
- :submit_download: "ダウンロード"
- :title_download_checked: "チェックしたものを Zip アーカイブでダウンロードします"
- :submit_email: "電子メール"
- :title_send_checked_by_email: "チェックしたものを電子メールで送信します"
- :link_user_preferences: "あなたの DMSF プロジェクト設定"
- :heading_send_documents_by_email: "電子メールによる文書の送信"
- :label_email_from: "From"
- :label_email_to: "To"
- :label_email_cc: "CC"
- :label_email_subject: "表題"
- :label_email_documents: "文書"
- :label_email_body: "本文"
- :label_email_send: "送信"
- :title_notifications_active: "通知は有効です"
- :label_file_size: "ファイルサイズ"
- :heading_file_upload: "アップロード"
- :note_uploaded_maximum_files_at_once: "最大 %{number} ファイルを一度にアップロードすることができます。"
- :note_upload_files_greater_than_two_gb: "2GB より大きいファイルをアップロードするには 64bit 対応ブラウザが必要です。"
- :submit_upload_files: "アップロード"
- :heading_new_folder: "新規フォルダ"
- :label_title: "タイトル"
- :label_description: "説明"
- :submit_save: "保存"
- :info_file_locked: "ファイルをロックしました!"
- :label_notifications: "通知"
- :select_option_default: "既定値"
- :select_option_deactivated: "無効"
- :select_option_activated: "有効"
- :title_save_preferences: "設定を保存します"
- :heading_revisions: "リビジョン"
- :title_download: "ダウンロードします"
- :title_delete_revision: "リビジョンを削除します"
- :label_created: "作成者/日時"
- :label_changed: "更新者/日時"
- :info_changed_by_user: "%{user} / %{changed}"
- :label_filename: "ファイル名"
- :label_version: "バージョン"
- :label_workflow: "ワークフロー"
- :option_workflow_waiting_for_approval: "承認待ち"
- :option_workflow_approved: "承認済み"
- :option_workflow_none: "なし"
- :label_mime: "Mime"
- :label_size: "サイズ"
- :label_comment: "コメント"
- :heading_new_revision: "新しいリビジョン"
- :option_version_same: "変更なし"
- :option_version_minor: "マイナー"
- :option_version_major: "メジャー"
- :label_new_content: "新規コンテンツ"
- :label_maximum_files_upload: "最大ファイルアップロード数"
- :note_maximum_number_of_files_uploaded: "一度にアップロードできるファイル数の上限。0は無制限。"
- :label_maximum_files_download: "最大ファイルダウンロード数"
- :note_maximum_number_of_files_downloaded: "Zip でダウンロードできる、または電子メールで送られるファイル数の上限。0は無制限。"
- :label_file_storage_directory: "ファイル保存フォルダ"
- :label_index_database: "インデックスデータベース"
- :label_stemming_language: "語幹抽出する言語"
- :note_possible_values: "取りうる値"
- :note_pass_none_to_disable_stemming: "語幹抽出を無効にするには 'none' を設定します。"
- :label_stem_strategy: "抽出方針"
- :option_stem_none: "Stem none (既定値)"
- :option_stem_some: "Stem some"
- :option_stem_all: "Stem all"
- :label_stemming_description: "クエリ解釈ルーチンがどのように語幹抽出アルゴリズムを適用するかを制御します。既定値は、STEM_NONE です。設定可能な値は次のものです。"
- :note_do_not_stem: "語幹抽出しません。"
- :note_stem_some: "大文字から始まる、特定の文字の後に続く、あるいは位置情報を必要とするオペレーターと共に使われる語を除くそれ以外の語の語幹を検索します。語幹抽出された語は、先頭に 'Z' が付きます。"
- :note_stem_all: "すべての語の語幹を検索します。(注: 先頭に 'Z' は付きません。)"
- :note_stemming_applied: "語幹抽出アルゴリズムは、確率を測る対象の位置にある語にしか適用できない (論理演算子の用語自体は語幹抽出されない) ことにご注意ください。"
- :label_default_notifications: "ファイル通知の既定値"
- :heading_uploaded_files: "アップロードされたファイル"
- :submit_commit: "コミット"
- :link_documents: "文書"
- :permission_view_dmsf_folders: "文書の一覧"
- :permission_user_preferences: "ユーザ設定"
- :permission_view_dmsf_files: "文書の表示"
- :permission_folder_manipulation: "フォルダの操作"
- :permission_file_manipulation: "ファイルの操作"
- :permission_file_approval: "ファイルの承認"
- :permission_force_file_unlock: "ファイルの強制ロック解除"
- :label_file: "ファイル"
- :field_folder: "フォルダ"
- :error_create_cycle_in_folder_dependency: "フォルダの依存関係が循環しています"
- :error_contains_invalid_character: "無効な文字を含んでいます"
- :error_file_commit_require_uploaded_file: "コミットするには、まずファイルをアップロードしてください"
- :warning_some_files_were_not_commited: "いくつかのファイルは、バリデーションエラーのためにコミットされませんでした: %{files}"
- :error_user_has_not_right_delete_folder: "ユーザにフォルダを削除する権限がありません"
- :error_user_has_not_right_delete_file: "ユーザにファイルを削除する権限がありません"
- :notice_entries_deleted: "エントリーを削除しました"
- :warning_some_entries_were_not_deleted: "いくつかのエントリーは削除されませんでした: %{entries}"
- :question_do_you_really_want_to_delete_entries: "本当にチェックしたエントリーを削除しますか?"
- :title_delete_checked: "チェックしたものを削除します"
- :title_number_of_files_in_directory: "フォルダ内のファイル数"
- :title_filename_for_download: "ファイル名はダウンロードまたは Zip アーカイブに使われます"
- :label_number_of_folders: "フォルダ"
- :label_number_of_documents: "文書"
- :label_zip_names_encoding: "Zip 名のエンコード"
- :note_zip_names_encoding_iconv: "文字コードを utf-8 から目的のエンコードに変換するのに Iconv が使われています"
- :error_file_storage_directory_does_not_exist: "ファイル保存フォルダが存在せず作ることもできません"
- :error_file_can_not_be_created: "ファイルを保存フォルダに作ることができません"
- :error_wrong_zip_encoding: "Zip エンコーディングが正しくありません"
- :warning_xapian_not_available: "Xapian が利用できる状態になっていません"
- :menu_dmsf: "DMSF"
- :label_physical_file_delete: "物理ファイルの削除"
- :user_is_not_project_member: "あなたはプロジェクトのメンバーではありません"
- :heading_access_downloads_emails: "ダウンロード/電子メール"
- :heading_access_first: "初回アクセス"
- :heading_access_last: "最終アクセス"
- :label_dmsf_updated: "DMSF updated"
- :title_total_size_of_all_files: "このフォルダにある全ファイルの合計サイズ"
- :project_module_dmsf: "DMSF"
- :warning_no_project_to_copy_file_to: "ファイルをコピーするプロジェクトがありません"
- :comment_copied_from: "%{source} からコピーしました"
- :notice_file_copied: "ファイルをコピーしました"
- :notice_file_moved: "ファイルを移動しました"
- :label_target_project: "ターゲットプロジェクト"
- :label_target_folder: "ターゲットフォルダ"
- :title_copy_or_move: "コピー/移動"
- :label_dmsf_folder_plural: "Dmsf フォルダ"
- :comment_moved_from: "%{source} から移動しました"
- :error_target_folder_same: "コピー/移動先のフォルダとプロジェクトが現在と同じです"
- :error_file_cannot_be_moved: "ファイルを移動できません"
- :error_file_cannot_be_copied: "ファイルをコピーできません"
- :warning_no_project_to_copy_folder_to: "フォルダをコピーするプロジェクトがありません"
- :title_copy: "コピー"
- :error_folder_cannot_be_copied: "フォルダをコピーできません"
- :notice_folder_copied: "フォルダをコピーしました"
+ dmsf: DMSF
+ label_dmsf_file_plural: Dmsf ファイル
+ warning_no_entries_selected: エントリーが選ばれていません
+ error_email_to_must_be_entered: 電子メールの To 先は省略できません
+ notice_email_sent: 電子メールを送信しました
+ warning_file_already_locked: ファイルは既にロックされています
+ notice_file_locked: ファイルをロックしました
+ warning_file_not_locked: ファイルはロックされていません
+ notice_file_unlocked: ファイルをロック解除しました
+ error_only_user_that_locked_file_can_unlock_it: ファイルをロックしたユーザだけがロック解除できます
+ question_do_you_really_want_to_delete_this_entry: 本当にこのエントリーを削除しますか?
+ error_max_files_exceeded: "同時にダウンロードできるファイル数の上限 %{number} を超えています"
+ question_do_you_really_want_to_delete_this_revision: 本当にこのリビジョンを削除しますか?
+ error_entry_project_does_not_match_current_project: 指定したプロジェクトは現在のプロジェクトと一致しません
+ notice_folder_created: フォルダを作成しました
+ error_folder_creation_failed: フォルダを作成できません
+ error_folder_title_must_be_entered: タイトルが必要です
+ notice_folder_deleted: フォルダを削除しました
+ error_folder_is_not_empty: フォルダが空ではありません
+ error_folder_title_is_already_used: タイトルは既に使われています
+ notice_folder_details_were_saved: フォルダの詳細を保存しました
+ error_file_is_locked: ファイルはロックされています
+ notice_file_deleted: ファイルを削除しました
+ error_at_least_one_revision_must_be_present: 少なくとも1つのリビジョンが必要です
+ notice_revision_deleted: リビジョンを削除しました
+ warning_one_of_files_locked: ファイルのうちの1つがロックされています
+ notice_file_unlocked: ファイルをロック解除しました
+ notice_file_revision_created: ファイルのリビジョンを作成しました
+ notice_your_preferences_were_saved: あなたの設定を保存しました
+ warning_folder_notifications_already_activated: フォルダ通知は既に有効です
+ notice_folder_notifications_activated: フォルダ通知を有効にしました
+ warning_folder_notifications_already_deactivated: フォルダ通知は既に無効です
+ notice_folder_notifications_deactivated: フォルダ通知を無効にしました
+ warning_file_notifications_already_activated: ファイル通知は既に有効です
+ notice_file_notifications_activated: ファイル通知を有効にしました
+ warning_file_notifications_already_deactivated: ファイル通知は既に無効です
+ notice_file_notifications_deactivated: ファイル通知を無効にしました
+ link_details: "%{title} の詳細を表示します"
+ link_edit: "%{title} を編集します"
+ submit_create: 作成
+ link_create_folder: フォルダを作成します
+ title_check_uncheck_all_for_zip_download_or_email: すべての Zip ダウンロードまたは電子メールのチェックをオン/オフします
+ link_title: タイトル
+ link_size: サイズ
+ link_modified: 更新日時
+ link_ver: バージョン
+ link_author: 作成者
+ title_check_for_zip_download_or_email: Zip ダウンロードまたは電子メールをチェックします
+ title_delete: 削除します
+ title_notifications_active_deactivate: "通知は有効です: 無効にする"
+ title_notifications_not_active_activate: "通知は無効です: 有効にする"
+ title_title_version_version_download: "%{title} のバージョン %{version} をダウンロードします"
+ title_locked_by_user: "%{user} によってロックされています"
+ title_locked_by_you: あなたがロックしています
+ title_waiting_for_approval: 承認待ち
+ title_approved: 承認済み
+ title_unlock_file: ロック解除して他のメンバーの変更を許可します
+ title_lock_file: ロックして他のメンバーの変更を禁止します
+ submit_download: ダウンロード
+ title_download_checked: チェックしたものを Zip アーカイブでダウンロードします
+ submit_email: 電子メール
+ title_send_checked_by_email: チェックしたものを電子メールで送信します
+ link_user_preferences: あなたの DMSF プロジェクト設定
+ heading_send_documents_by_email: 電子メールによる文書の送信
+ label_email_from: From
+ label_email_to: To
+ label_email_cc: CC
+ label_email_subject: 表題
+ label_email_documents: 文書
+ label_email_body: 本文
+ label_email_send: 送信
+ title_notifications_active: 通知は有効です
+ label_file_size: ファイルサイズ
+ heading_file_upload: アップロード
+ note_uploaded_maximum_files_at_once: "最大 %{number} ファイルを一度にアップロードすることができます。"
+ note_upload_files_greater_than_two_gb: 2GB より大きいファイルをアップロードするには 64bit 対応ブラウザが必要です。
+ submit_upload_files: アップロード
+ heading_new_folder: 新規フォルダ
+ label_title: タイトル
+ label_description: 説明
+ submit_save: 保存
+ info_file_locked: ファイルをロックしました!
+ label_notifications: 通知
+ select_option_default: 既定値
+ select_option_deactivated: 無効
+ select_option_activated: 有効
+ title_save_preferences: 設定を保存します
+ heading_revisions: リビジョン
+ title_download: ダウンロードします
+ title_delete_revision: リビジョンを削除します
+ label_created: 作成者/日時
+ label_changed: 更新者/日時
+ info_changed_by_user: "%{user} / %{changed}"
+ label_filename: ファイル名
+ label_version: バージョン
+ label_workflow: ワークフロー
+ label_mime: Mime
+ label_size: サイズ
+ label_comment: コメント
+ heading_new_revision: 新しいリビジョン
+ option_version_same: 変更なし
+ option_version_minor: マイナー
+ option_version_major: メジャー
+ label_new_content: 新規コンテンツ
+ label_maximum_files_upload: 最大ファイルアップロード数
+ note_maximum_number_of_files_uploaded: 一度にアップロードできるファイル数の上限。0は無制限。
+ label_maximum_files_download: 最大ファイルダウンロード数
+ note_maximum_number_of_files_downloaded: Zip でダウンロードできる、または電子メールで送られるファイル数の上限。0は無制限。
+ label_file_storage_directory: ファイル保存フォルダ
+ label_index_database: インデックスデータベース
+ label_stemming_language: 語幹抽出する言語
+ note_possible_values: 取りうる値
+ note_pass_none_to_disable_stemming: 語幹抽出を無効にするには 'none' を設定します。
+ label_stem_strategy: 抽出方針
+ option_stem_none: Stem none (既定値)
+ option_stem_some: Stem some
+ option_stem_all: Stem all
+ label_stemming_description: クエリ解釈ルーチンがどのように語幹抽出アルゴリズムを適用するかを制御します。既定値は、STEM_NONE です。設定可能な値は次のものです。
+ note_do_not_stem: 語幹抽出しません。
+ note_stem_some: "大文字から始まる、特定の文字の後に続く、あるいは位置情報を必要とするオペレーターと共に使われる語を除くそれ以外の語の語幹を検索します。語幹抽出された語は、先頭に 'Z' が付きます。"
+ note_stem_all: "すべての語の語幹を検索します。(注: 先頭に 'Z' は付きません。)"
+ note_stemming_applied: 語幹抽出アルゴリズムは、確率を測る対象の位置にある語にしか適用できない (論理演算子の用語自体は語幹抽出されない) ことにご注意ください。
+ label_default_notifications: ファイル通知の既定値
+ heading_uploaded_files: アップロードされたファイル
+ submit_commit: コミット
+ link_documents: 文書
+ permission_view_dmsf_folders: 文書の一覧
+ permission_user_preferences: ユーザ設定
+ permission_view_dmsf_files: 文書の表示
+ permission_folder_manipulation: フォルダの操作
+ permission_file_manipulation: ファイルの操作
+ permission_file_approval: ファイルの承認
+ permission_force_file_unlock: ファイルの強制ロック解除
+ label_file: ファイル
+ field_folder: フォルダ
+ error_create_cycle_in_folder_dependency: フォルダの依存関係が循環しています
+ error_contains_invalid_character: 無効な文字を含んでいます
+ error_file_commit_require_uploaded_file: コミットするには、まずファイルをアップロードしてください
+ warning_some_files_were_not_commited: "いくつかのファイルは、バリデーションエラーのためにコミットされませんでした: %{files}"
+ error_user_has_not_right_delete_folder: ユーザにフォルダを削除する権限がありません
+ error_user_has_not_right_delete_file: ユーザにファイルを削除する権限がありません
+ notice_entries_deleted: エントリーを削除しました
+ warning_some_entries_were_not_deleted: "いくつかのエントリーは削除されませんでした: %{entries}"
+ question_do_you_really_want_to_delete_entries: 本当にチェックしたエントリーを削除しますか?
+ title_delete_checked: チェックしたものを削除します
+ title_number_of_files_in_directory: フォルダ内のファイル数
+ title_filename_for_download: ファイル名はダウンロードまたは Zip アーカイブに使われます
+ label_number_of_folders: フォルダ
+ label_number_of_documents: 文書
+ label_zip_names_encoding: Zip 名のエンコード
+ note_zip_names_encoding_iconv: 文字コードを utf-8 から目的のエンコードに変換するのに Iconv が使われています
+ error_file_storage_directory_does_not_exist: ファイル保存フォルダが存在せず作ることもできません
+ error_file_can_not_be_created: ファイルを保存フォルダに作ることができません
+ error_wrong_zip_encoding: Zip エンコーディングが正しくありません
+ warning_xapian_not_available: Xapian が利用できる状態になっていません
+ menu_dmsf: DMSF
+ label_physical_file_delete: 物理ファイルの削除
+ user_is_not_project_member: あなたはプロジェクトのメンバーではありません
+ heading_access_downloads_emails: ダウンロード/電子メール
+ heading_access_first: 初回アクセス
+ heading_access_last: 最終アクセス
+ label_dmsf_updated: DMSF updated
+ title_total_size_of_all_files: このフォルダにある全ファイルの合計サイズ
+ project_module_dmsf: DMSF
+ warning_no_project_to_copy_file_to: ファイルをコピーするプロジェクトがありません
+ comment_copied_from: "%{source} からコピーしました"
+ notice_file_copied: ファイルをコピーしました
+ notice_file_moved: ファイルを移動しました
+ label_target_project: ターゲットプロジェクト
+ label_target_folder: ターゲットフォルダ
+ title_copy_or_move: コピー/移動
+ label_dmsf_folder_plural: Dmsf フォルダ
+ comment_moved_from: "%{source} から移動しました"
+ error_target_folder_same: コピー/移動先のフォルダとプロジェクトが現在と同じです
+ error_file_cannot_be_moved: ファイルを移動できません
+ error_file_cannot_be_copied: ファイルをコピーできません
+ warning_no_project_to_copy_folder_to: フォルダをコピーするプロジェクトがありません
+ title_copy: コピー
+ error_folder_cannot_be_copied: フォルダをコピーできません
+ notice_folder_copied: フォルダをコピーしました
+
+ # Not translated
-# Not translated
-
- :error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
- :note_maximum_email_filesize: "Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB."
- :label_maximum_email_filesize: "Maximum email attachment size"
- :header_minimum_filesize: "File Error."
- :error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
- :parent_directory: "Parent Directory"
- :note_webdav: "Webdav once enabled can be found at http://.../dmsf/webdav/"
- :label_webdav: "Webdav functionality"
- :label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
+ error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
+ note_maximum_email_filesize: "Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB."
+ label_maximum_email_filesize: "Maximum email attachment size"
+ header_minimum_filesize: "File Error."
+ error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
+ parent_directory: "Parent Directory"
+ note_webdav: "Webdav once enabled can be found at http://.../dmsf/webdav/"
+ label_webdav: "Webdav functionality"
+ label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
- :warning_folder_already_locked: "This folder is already locked"
- :notice_folder_locked: "The folder was successfully locked"
- :warning_folder_not_locked: "Unfortunately, the folder could not be locked"
- :notice_folder_unlocked: "The folder was successfully unlocked"
- :error_only_user_that_locked_folder_can_unlock_it: "You are not authorised to unlock this folder"
- :title_folder_parent_locked: "Parent folder %{name} is locked"
- :title_file_parent_locked: "Parent folder %{name} is locked"
- :title_unlock_folder: "Unlock to allow changes for other members"
- :title_lock_folder: "Lock to prevent changes for other members"
+ warning_folder_already_locked: "This folder is already locked"
+ notice_folder_locked: "The folder was successfully locked"
+ warning_folder_not_locked: "Unfortunately, the folder could not be locked"
+ notice_folder_unlocked: "The folder was successfully unlocked"
+ error_only_user_that_locked_folder_can_unlock_it: "You are not authorised to unlock this folder"
+ title_folder_parent_locked: "Parent folder %{name} is locked"
+ title_file_parent_locked: "Parent folder %{name} is locked"
+ title_unlock_folder: "Unlock to allow changes for other members"
+ title_lock_folder: "Lock to prevent changes for other members"
- :select_option_webdav_readonly: "Read-only"
- :select_option_webdav_readwrite: "Read/Write"
- :label_webdav_strategy: "Webdav strategy"
- :note_webdav_strategy: "Enables the administrator to decide if webdav is a read-only or read-write platform for end users."
+ select_option_webdav_readonly: "Read-only"
+ select_option_webdav_readwrite: "Read/Write"
+ label_webdav_strategy: "Webdav strategy"
+ note_webdav_strategy: "Enables the administrator to decide if webdav is a read-only or read-write platform for end users."
+
+ error_unable_delete_dmsf_workflow: Unable to delete the workflow
+ error_empty_note: The note can't be empty
+ error_workflow_assign: An error occured while assigning
+ error_cannot_start_workflow: Workflow can't be started
+ error_cannot_renumber_steps: Steps can't be renumbered
+ label_dmsf_workflow_new: New approval workflow
+ label_dmsf_workflow: Approval Workflow
+ label_dmsf_workflow_plural: Approval workflows
+ label_dmsf_workflow_step: Step
+ label_dmsf_workflow_step_plural: Steps
+ label_dmsf_workflow_approval: Approval
+ label_dmsf_workflow_approval_plural: Approvals
+ label_dmsf: DMSF
+ label_dmsf_wokflow_action_approve: Approve
+ label_dmsf_wokflow_action_reject: Reject
+ label_dmsf_wokflow_action_delegate: Delegate to
+ label_dmsf_wokflow_action_assign: Assign an approval workflow
+ label_dmsf_wokflow_action_start: Start workflow
+ label_action: Action
+ label_note: Note
+ title_none: None
+ title_rejection: Rejection
+ title_delegation: Delegation
+ title_assignment: Assignment
+ title_start: Start
+ title_dmsf_workflow_log: Approval Workflow Log
+ title_assigned: Assigned
+ title_approval: Approval
+ title_rejected: Rejected
+ dmsf_and: AND
+ dmsf_or: OR
+ dmsf_new_step: New step
+ message_dmsf_wokflow_note: Your note...
+ info_revision: "r%{rev}"
+ link_workflow: Workflow
+ notice_workflow_started: Approval workflow successfully started
\ No newline at end of file
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 0adb0fcb..9e6fbb08 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -1,210 +1,246 @@
# Russian translation for DMSF
ru:
- :dmsf: "DMSF"
- :label_dmsf_file_plural: "Файлы DMSF"
- :warning_no_entries_selected: "Файлы не выбраны"
- :error_email_to_must_be_entered: "Нужно указать, на какую почту отправить письмо"
- :notice_email_sent: "Письмо отправлено"
- :warning_file_already_locked: "Файл уже заблокирован"
- :notice_file_locked: "Файл заблокирован"
- :warning_file_not_locked: "Файл не заблокирован"
- :notice_file_unlocked: "Файл разблокирован"
- :error_only_user_that_locked_file_can_unlock_it: "Только пользователь, который заблокировал файл, может его разблокировать"
- :question_do_you_really_want_to_delete_this_entry: "Вы действительно хотите удалить этот файл?"
- :error_max_files_exceeded: "Ограничение для %{number} одновременно загружаемых файлов превышено"
- :question_do_you_really_want_to_delete_this_revision: "Вы действительно хотите удалить эту редакцию?"
- :error_entry_project_does_not_match_current_project: "Проект, которому принадлежит файл, не соответсвует текущему проекту"
- :notice_folder_created: "Папка создана"
- :error_folder_creation_failed: "Папку не удалось создать"
- :error_folder_title_must_be_entered: "Нужно указать название папки"
- :notice_folder_deleted: "Папка удалена"
- :error_folder_is_not_empty: "Папка не пустая"
- :error_folder_title_is_already_used: "Название папки уже используется"
- :notice_folder_details_were_saved: "Описание папки было сохранено"
- :error_file_is_locked: "Файл заблокирован"
- :notice_file_deleted: "Файл удален"
- :error_at_least_one_revision_must_be_present: "По крайней мере, одна редакция должна присутствовать"
- :notice_revision_deleted: "Редакция удалена"
- :warning_one_of_files_locked: "Один из файлов заблокирован"
- :notice_file_unlocked: "Файл разблокирован"
- :notice_file_revision_created: "Редакция файла создана"
- :notice_your_preferences_were_saved: "Ваши настройки были сохранены"
- :warning_folder_notifications_already_activated: "Уведомления папки уже включены"
- :notice_folder_notifications_activated: "Уведомления папки включены"
- :warning_folder_notifications_already_deactivated: "Уведомления папки уже отключены"
- :notice_folder_notifications_deactivated: "Уведомления папки отключены"
- :warning_file_notifications_already_activated: "Уведомления файла уже включены"
- :notice_file_notifications_activated: "Уведомления файла включены"
- :warning_file_notifications_already_deactivated: "Уведомления файла уже отключены"
- :notice_file_notifications_deactivated: "Уведомления файла отключены"
- :link_details: "Подробности %{title}"
- :link_edit: "Редактировать %{title}"
- :submit_create: "Создать"
- :link_create_folder: "Создать папку"
- :title_check_uncheck_all_for_zip_download_or_email: "Выбрать/Снять все документы для того, чтобы скачать или отправить их по электронной почте"
- :link_title: "Название"
- :link_size: "Размер"
- :link_modified: "Изменен"
- :link_ver: "Версия"
- :link_author: "Автор"
- :title_check_for_zip_download_or_email: "Выберите документы, которые нужно скачать или отправить их по электронной почте"
- :title_delete: "Удалить"
- :title_notifications_active_deactivate: "Уведомления включены: Отключить"
- :title_notifications_not_active_activate: "Уведомления не включены: Включить"
- :title_title_version_version_download: "Скачать %{title} версию %{version}"
- :title_locked_by_user: "Заблокировано пользователем %{user}"
- :title_locked_by_you: "Заблокировано Вами"
- :title_waiting_for_approval: "Ожидается на утверждение"
- :title_approved: "Утверждено"
- :title_unlock_file: "Разблокируйте файл, чтобы разрешить изменение его другими участниками"
- :title_lock_file: "Заблокируйте файл, чтобы запретить его изменение другими участниками"
- :submit_download: "Скачать"
- :title_download_checked: "Скачать выбранные файлы"
- :submit_email: "Отправить письмо"
- :title_send_checked_by_email: "Отправить выбранные файлы по электронной почте"
- :link_user_preferences: "Ваши настройки DMSF проекта"
- :heading_send_documents_by_email: "Отправить документы по электронной почте"
- :label_email_from: "От"
- :label_email_to: "Кому"
- :label_email_cc: "CC"
- :label_email_subject: "Тема"
- :label_email_documents: "Документы"
- :label_email_body: "Содержание"
- :label_email_send: "Отправить"
- :title_notifications_active: "Уведомления активны"
- :label_file_size: "Размер файла"
- :heading_file_upload: "Закачать"
- :note_uploaded_maximum_files_at_once: "За один раз можно загрузить только %{number} файлов."
- :note_upload_files_greater_than_two_gb: "Чтобы загружать файлы размером больше чем 2 Гб у вас должен быть 64-битный браузер."
- :submit_upload_files: "Загрузить"
- :heading_new_folder: "Новая папка"
- :label_title: "Заголовок"
- :label_description: "Описание"
- :submit_save: "Сохранить"
- :info_file_locked: "Файл заблокирован!"
- :label_notifications: "Уведомления"
- :select_option_default: "По умолчанию"
- :select_option_deactivated: "Отключено"
- :select_option_activated: "Включено"
- :title_save_preferences: "Сохранить настройки"
- :heading_revisions: "Редакции"
- :title_download: "Скачать"
- :title_delete_revision: "Удалить редакцию"
- :label_created: "Создан"
- :label_changed: "Изменен"
- :info_changed_by_user: "%{changed} пользователем %{user}"
- :label_filename: "Имя файла"
- :label_version: "Версия"
- :label_workflow: "Поток работ"
- :option_workflow_waiting_for_approval: "Ожидается на утверждение"
- :option_workflow_approved: "Утверждено"
- :option_workflow_none: "Нет"
- :label_mime: "MIME-тип"
- :label_size: "Размер"
- :label_comment: "Комментарий"
- :heading_new_revision: "Новая редакция"
- :option_version_same: "Та же версия"
- :option_version_minor: "Незначительные изменения"
- :option_version_major: "Значительные изменения"
- :label_new_content: "Новое содержание"
- :label_maximum_files_upload: "Максимальное количество файлов для загрузки"
- :note_maximum_number_of_files_uploaded: "Ограничивает максимальное количество файлов, которое может быть загружено за один раз. 0 означает отсутствие ограничений."
- :label_maximum_files_download: "Максимальное количество файлов для скачивания"
- :note_maximum_number_of_files_downloaded: "Ограничивает максимальное количество файлов, которое может быть скачано или отправлено по почте за один раз. 0 означает отсутствие ограничений."
- :label_file_storage_directory: "Каталог для хранения файлов"
- :label_index_database: "Индексная база данных"
- :label_stemming_language: "Язык для стемминга"
- :note_possible_values: "Возможные значения"
- :note_pass_none_to_disable_stemming: "Укажите 'none' чтобы отключить стемминг"
- :label_stem_strategy: "Стратегия стемминга"
- :option_stem_none: "Нет (По умолчанию)"
- :option_stem_some: "Некоторые"
- :option_stem_all: "Все"
- :label_stemming_description: "Это контролирует как парсер запросов будет применять алгоритм стемминга. Значением по умолчанию есть STEM_NONE. Возможны следующие значения"
- :note_do_not_stem: "Не выполнять никакого стемминга."
- :note_stem_some: "Искать обусловленные формы терминов за исключением тех, которые начинаются с большой буквы, или следуют после определенных символов, или используются с операторами, которым нужна информация о позиции. Обусловленные термины имеют префикс 'Z'."
- :note_stem_all: "Искать обусловленные формы всех слов (примечание: Префикс 'Z' не добавляется)."
- :note_stemming_applied: "Обратите внимание на то, что алгоритм стемминга применяется только к словам в вероятностных областях — логическое фильтрирует термины, которые никогда не обусловлены."
- :label_default_notifications: "Значение по умолчанию для уведомлений"
- :heading_uploaded_files: "Загруженные файлы"
- :submit_commit: "Зафиксировать"
- :link_documents: "Документы"
- :permission_view_dmsf_folders: "Просматривать папки"
- :permission_user_preferences: "Настройки пользователя"
- :permission_view_dmsf_files: "Просматривать документы"
- :permission_folder_manipulation: "Управление папками"
- :permission_file_manipulation: "Управление файлами"
- :permission_file_approval: "Утверждение файлов"
- :permission_force_file_unlock: "Разблокировка любых файлов"
- :label_file: "Файл"
- :field_folder: "Папка"
- :error_create_cycle_in_folder_dependency: "создать циклическую зависимость в папке"
- :error_contains_invalid_character: "содержит недопустимые символы"
- :error_file_commit_require_uploaded_file: "Чтобы зафиксировать файл нужно для начала его загрузить"
- :warning_some_files_were_not_commited: "Некоторые файлы не были зафиксированы через ошибки валидации: %{files}"
- :error_user_has_not_right_delete_folder: "Пользователь не имеет нужных прав для удаления папки"
- :error_user_has_not_right_delete_file: "Пользователь не имеет нужных прав для удаления файла"
- :notice_entries_deleted: "Файлы удалены"
- :warning_some_entries_were_not_deleted: "Некоторые файлы не были удалены: %{entries}"
- :question_do_you_really_want_to_delete_entries: "Вы действительно хотите удалить выбранные файлы?"
- :title_delete_checked: "Удалить выбранные документы"
- :title_number_of_files_in_directory: "Количество файлов в директории"
- :title_filename_for_download: "Имя файла для скачиваемого архива"
- :label_number_of_folders: "Папок"
- :label_number_of_documents: "Документов"
- :label_zip_names_encoding: "Кодировка zip имен"
- :note_zip_names_encoding_iconv: "Iconv используется для преобразования с кодировки UTF-8 в целевую кодировку"
- :error_file_storage_directory_does_not_exist: "Каталог для хранения файлов не существует и не может быть создан"
- :error_file_can_not_be_created: "Файл не может быть создан в каталоге хранения файлов"
- :error_wrong_zip_encoding: "Неверная кодировка zip"
- :warning_xapian_not_available: "Xapian не доступен"
- :menu_dmsf: "Документы"
- :label_physical_file_delete: "Физическое удаление файла"
- :user_is_not_project_member: "Вы не являетесь участником проекта"
- :heading_access_downloads_emails: "Скачивание / Отправка по почте"
- :heading_access_first: "Первый"
- :heading_access_last: "Последний"
- :label_dmsf_updated: "Документ обновлен"
- :title_total_size_of_all_files: "Общий размер всех файлов в этой папке"
- :project_module_dmsf: "DMSF"
- :warning_no_project_to_copy_file_to: "Не выбран проект, в который нужно скопировать файл"
- :comment_copied_from: "Скопировано из %{source}"
- :notice_file_copied: "Файл скопирован"
- :notice_file_moved: "Файл перемещен"
- :label_target_project: "Целевой проект"
- :label_target_folder: "Целевая папка"
- :title_copy_or_move: "Копировать/Переместить"
- :label_dmsf_folder_plural: "DMSF папки"
- :comment_moved_from: "Перемещен из %{source}"
- :error_target_folder_same: "Целевая папка и проект совпадают с текущими"
- :error_file_cannot_be_moved: "Файл не может быть перемещен"
- :error_file_cannot_be_copied: "Файл не может быть скопирован"
- :warning_no_project_to_copy_folder_to: "Не выбран проект, в который нужно скопировать папку"
- :title_copy: "Копировать"
- :error_folder_cannot_be_copied: "Папка не может быть скопирована"
- :notice_folder_copied: "Папка скопирована"
+ dmsf: DMSF
+ label_dmsf_file_plural: Файлы DMSF
+ warning_no_entries_selected: Файлы не выбраны
+ error_email_to_must_be_entered: Нужно указать, на какую почту отправить письмо
+ notice_email_sent: Письмо отправлено
+ warning_file_already_locked: Файл уже заблокирован
+ notice_file_locked: Файл заблокирован
+ warning_file_not_locked: Файл не заблокирован
+ notice_file_unlocked: Файл разблокирован
+ error_only_user_that_locked_file_can_unlock_it: Только пользователь, который заблокировал файл, может его разблокировать
+ question_do_you_really_want_to_delete_this_entry: Вы действительно хотите удалить этот файл?
+ error_max_files_exceeded: "Ограничение для %{number} одновременно загружаемых файлов превышено"
+ question_do_you_really_want_to_delete_this_revision: Вы действительно хотите удалить эту редакцию?
+ error_entry_project_does_not_match_current_project: Проект, которому принадлежит файл, не соответсвует текущему проекту
+ notice_folder_created: Папка создана
+ error_folder_creation_failed: Папку не удалось создать
+ error_folder_title_must_be_entered: Нужно указать название папки
+ notice_folder_deleted: Папка удалена
+ error_folder_is_not_empty: Папка не пустая
+ error_folder_title_is_already_used: Название папки уже используется
+ notice_folder_details_were_saved: Описание папки было сохранено
+ error_file_is_locked: Файл заблокирован
+ notice_file_deleted: Файл удален
+ error_at_least_one_revision_must_be_present: По крайней мере, одна редакция должна присутствовать
+ notice_revision_deleted: Редакция удалена
+ warning_one_of_files_locked: Один из файлов заблокирован
+ notice_file_unlocked: Файл разблокирован
+ notice_file_revision_created: Редакция файла создана
+ notice_your_preferences_were_saved: Ваши настройки были сохранены
+ warning_folder_notifications_already_activated: Уведомления папки уже включены
+ notice_folder_notifications_activated: Уведомления папки включены
+ warning_folder_notifications_already_deactivated: Уведомления папки уже отключены
+ notice_folder_notifications_deactivated: Уведомления папки отключены
+ warning_file_notifications_already_activated: Уведомления файла уже включены
+ notice_file_notifications_activated: Уведомления файла включены
+ warning_file_notifications_already_deactivated: Уведомления файла уже отключены
+ notice_file_notifications_deactivated: Уведомления файла отключены
+ link_details: "Подробности %{title}"
+ link_edit: "Редактировать %{title}"
+ submit_create: Создать
+ link_create_folder: Создать папку
+ title_check_uncheck_all_for_zip_download_or_email: Выбрать/Снять все документы для того, чтобы скачать или отправить их по электронной почте
+ link_title: Название
+ link_size: Размер
+ link_modified: Изменен
+ link_ver: Версия
+ link_author: Автор
+ title_check_for_zip_download_or_email: Выберите документы, которые нужно скачать или отправить их по электронной почте
+ title_delete: Удалить
+ title_notifications_active_deactivate: "Уведомления включены: Отключить"
+ title_notifications_not_active_activate: "Уведомления не включены: Включить"
+ title_title_version_version_download: "Скачать %{title} версию %{version}"
+ title_locked_by_user: "Заблокировано пользователем %{user}"
+ title_locked_by_you: Заблокировано Вами
+ title_waiting_for_approval: Ожидается на утверждение
+ title_approved: Утверждено
+ title_unlock_file: Разблокируйте файл, чтобы разрешить изменение его другими участниками
+ title_lock_file: Заблокируйте файл, чтобы запретить его изменение другими участниками
+ submit_download: Скачать
+ title_download_checked: Скачать выбранные файлы
+ submit_email: Отправить письмо
+ title_send_checked_by_email: Отправить выбранные файлы по электронной почте
+ link_user_preferences: Ваши настройки DMSF проекта
+ heading_send_documents_by_email: Отправить документы по электронной почте
+ label_email_from: От
+ label_email_to: Кому
+ label_email_cc: CC
+ label_email_subject: Тема
+ label_email_documents: Документы
+ label_email_body: Содержание
+ label_email_send: Отправить
+ title_notifications_active: Уведомления активны
+ label_file_size: Размер файла
+ heading_file_upload: Закачать
+ note_uploaded_maximum_files_at_once: "За один раз можно загрузить только %{number} файлов."
+ note_upload_files_greater_than_two_gb: Чтобы загружать файлы размером больше чем 2 Гб у вас должен быть 64-битный браузер.
+ submit_upload_files: Загрузить
+ heading_new_folder: Новая папка
+ label_title: Заголовок
+ label_description: Описание
+ submit_save: Сохранить
+ info_file_locked: Файл заблокирован!
+ label_notifications: Уведомления
+ select_option_default: По умолчанию
+ select_option_deactivated: Отключено
+ select_option_activated: Включено
+ title_save_preferences: Сохранить настройки
+ heading_revisions: Редакции
+ title_download: Скачать
+ title_delete_revision: Удалить редакцию
+ label_created: Создан
+ label_changed: Изменен
+ info_changed_by_user: "%{changed} пользователем %{user}"
+ label_filename: Имя файла
+ label_version: Версия
+ label_workflow: Поток работ
+ label_mime: MIME-тип
+ label_size: Размер
+ label_comment: Комментарий
+ heading_new_revision: Новая редакция
+ option_version_same: Та же версия
+ option_version_minor: Незначительные изменения
+ option_version_major: Значительные изменения
+ label_new_content: Новое содержание
+ label_maximum_files_upload: Максимальное количество файлов для загрузки
+ note_maximum_number_of_files_uploaded: Ограничивает максимальное количество файлов, которое может быть загружено за один раз. 0 означает отсутствие ограничений.
+ label_maximum_files_download: Максимальное количество файлов для скачивания
+ note_maximum_number_of_files_downloaded: Ограничивает максимальное количество файлов, которое может быть скачано или отправлено по почте за один раз. 0 означает отсутствие ограничений.
+ label_file_storage_directory: Каталог для хранения файлов
+ label_index_database: Индексная база данных
+ label_stemming_language: Язык для стемминга
+ note_possible_values: Возможные значения
+ note_pass_none_to_disable_stemming: "Укажите 'none' чтобы отключить стемминг"
+ label_stem_strategy: Стратегия стемминга
+ option_stem_none: Нет (По умолчанию)
+ option_stem_some: Некоторые
+ option_stem_all: Все
+ label_stemming_description: Это контролирует как парсер запросов будет применять алгоритм стемминга. Значением по умолчанию есть STEM_NONE. Возможны следующие значения
+ note_do_not_stem: Не выполнять никакого стемминга."
+ note_stem_some: "Искать обусловленные формы терминов за исключением тех, которые начинаются с большой буквы, или следуют после определенных символов, или используются с операторами, которым нужна информация о позиции. Обусловленные термины имеют префикс 'Z'."
+ note_stem_all: "Искать обусловленные формы всех слов (примечание: Префикс 'Z' не добавляется)."
+ note_stemming_applied: Обратите внимание на то, что алгоритм стемминга применяется только к словам в вероятностных областях — логическое фильтрирует термины, которые никогда не обусловлены.
+ label_default_notifications: Значение по умолчанию для уведомлений
+ heading_uploaded_files: Загруженные файлы
+ submit_commit: Зафиксировать
+ link_documents: Документы
+ permission_view_dmsf_folders: Просматривать папки
+ permission_user_preferences: Настройки пользователя
+ permission_view_dmsf_files: Просматривать документы
+ permission_folder_manipulation: Управление папками
+ permission_file_manipulation: Управление файлами
+ permission_file_approval: Утверждение файлов
+ permission_force_file_unlock: Разблокировка любых файлов
+ label_file: Файл
+ field_folder: Папка
+ error_create_cycle_in_folder_dependency: создать циклическую зависимость в папке
+ error_contains_invalid_character: содержит недопустимые символы
+ error_file_commit_require_uploaded_file: Чтобы зафиксировать файл нужно для начала его загрузить
+ warning_some_files_were_not_commited: "Некоторые файлы не были зафиксированы через ошибки валидации: %{files}"
+ error_user_has_not_right_delete_folder: Пользователь не имеет нужных прав для удаления папки
+ error_user_has_not_right_delete_file: Пользователь не имеет нужных прав для удаления файла
+ notice_entries_deleted: Файлы удалены
+ warning_some_entries_were_not_deleted: "Некоторые файлы не были удалены: %{entries}"
+ question_do_you_really_want_to_delete_entries: Вы действительно хотите удалить выбранные файлы?
+ title_delete_checked: Удалить выбранные документы
+ title_number_of_files_in_directory: Количество файлов в директории
+ title_filename_for_download: Имя файла для скачиваемого архива
+ label_number_of_folders: Папок
+ label_number_of_documents: Документов
+ label_zip_names_encoding: Кодировка zip имен
+ note_zip_names_encoding_iconv: Iconv используется для преобразования с кодировки UTF-8 в целевую кодировку
+ error_file_storage_directory_does_not_exist: Каталог для хранения файлов не существует и не может быть создан
+ error_file_can_not_be_created: Файл не может быть создан в каталоге хранения файлов
+ error_wrong_zip_encoding: Неверная кодировка zip
+ warning_xapian_not_available: Xapian не доступен
+ menu_dmsf: Документы
+ label_physical_file_delete: Физическое удаление файла
+ user_is_not_project_member: Вы не являетесь участником проекта
+ heading_access_downloads_emails: Скачивание / Отправка по почте
+ heading_access_first: Первый
+ heading_access_last: Последний
+ label_dmsf_updated: Документ обновлен
+ title_total_size_of_all_files: Общий размер всех файлов в этой папке
+ project_module_dmsf: DMSF
+ warning_no_project_to_copy_file_to: Не выбран проект, в который нужно скопировать файл
+ comment_copied_from: "Скопировано из %{source}"
+ notice_file_copied: Файл скопирован
+ notice_file_moved: Файл перемещен
+ label_target_project: Целевой проект
+ label_target_folder: Целевая папка
+ title_copy_or_move: Копировать/Переместить
+ label_dmsf_folder_plural: DMSF папки
+ comment_moved_from: "Перемещен из %{source}"
+ error_target_folder_same: Целевая папка и проект совпадают с текущими
+ error_file_cannot_be_moved: Файл не может быть перемещен
+ error_file_cannot_be_copied: Файл не может быть скопирован
+ warning_no_project_to_copy_folder_to: Не выбран проект, в который нужно скопировать папку
+ title_copy: Копировать
+ error_folder_cannot_be_copied: Папка не может быть скопирована
+ notice_folder_copied: Папка скопирована
- :error_max_email_filesize_exceeded: "Вы превысили максимальный размер для отправки по электронной почте. (%{number} Мб)"
- :note_maximum_email_filesize: "Ограничение максимального размера файла, который можно отправить по электронной почте. 0 означает отсутствие ограничений. Значение в мегабайтах."
- :label_maximum_email_filesize: "Максимальный размер вложения в письме"
- :header_minimum_filesize: "Ошибка файла."
- :error_minimum_filesize: "Файла %{file} является пустым и он не будет прикреплен."
- :parent_directory: "Родительская директория"
- :note_webdav: "После включения, WebDAV можно найти по адресу http://redmine-host/dmsf/webdav/"
- :label_webdav: "Функциональность WebDAV"
- :label_dmsf_plural: "Скопировать DMSF файлы и папки (%{files} файлов в %{folders} папках)"
+ error_max_email_filesize_exceeded: "Вы превысили максимальный размер для отправки по электронной почте. (%{number} Мб)"
+ note_maximum_email_filesize: "Ограничение максимального размера файла, который можно отправить по электронной почте. 0 означает отсутствие ограничений. Значение в мегабайтах."
+ label_maximum_email_filesize: "Максимальный размер вложения в письме"
+ header_minimum_filesize: "Ошибка файла."
+ error_minimum_filesize: "Файла %{file} является пустым и он не будет прикреплен."
+ parent_directory: "Родительская директория"
+ note_webdav: "После включения, WebDAV можно найти по адресу http://redmine-host/dmsf/webdav/"
+ label_webdav: "Функциональность WebDAV"
+ label_dmsf_plural: "Скопировать DMSF файлы и папки (%{files} файлов в %{folders} папках)"
- :warning_folder_already_locked: "Эта папка уже заблокирована"
- :notice_folder_locked: "Папка была успешно заблокирована"
- :warning_folder_not_locked: "К сожалению, папка не может быть заблокирована"
- :notice_folder_unlocked: "Папка была успешно разблокирована"
- :error_only_user_that_locked_folder_can_unlock_it: "Только пользователь, который заблокировал папку, может её разблокировать"
- :title_folder_parent_locked: "Родительская папка %{name} заблокирована"
- :title_file_parent_locked: "Родительская папка %{name} заблокирована"
- :title_unlock_folder: "Разблокируйте папку, чтобы разрешить изменение её другими участниками"
- :title_lock_folder: "Заблокируйте папку, чтобы запретить ёё изменение другими участниками"
+ warning_folder_already_locked: "Эта папка уже заблокирована"
+ notice_folder_locked: "Папка была успешно заблокирована"
+ warning_folder_not_locked: "К сожалению, папка не может быть заблокирована"
+ notice_folder_unlocked: "Папка была успешно разблокирована"
+ error_only_user_that_locked_folder_can_unlock_it: "Только пользователь, который заблокировал папку, может её разблокировать"
+ title_folder_parent_locked: "Родительская папка %{name} заблокирована"
+ title_file_parent_locked: "Родительская папка %{name} заблокирована"
+ title_unlock_folder: "Разблокируйте папку, чтобы разрешить изменение её другими участниками"
+ title_lock_folder: "Заблокируйте папку, чтобы запретить ёё изменение другими участниками"
- :select_option_webdav_readonly: "Только для чтения"
- :select_option_webdav_readwrite: "Чтение/Запись"
- :label_webdav_strategy: "Стратегия WebDAV"
- :note_webdav_strategy: "Позволяет администратору решить в каком режиме предоставить доступ к WebDAV для конечных пользователей (Только для чтения или Чтение+Запись)."
+ select_option_webdav_readonly: "Только для чтения"
+ select_option_webdav_readwrite: "Чтение/Запись"
+ label_webdav_strategy: "Стратегия WebDAV"
+ note_webdav_strategy: "Позволяет администратору решить в каком режиме предоставить доступ к WebDAV для конечных пользователей (Только для чтения или Чтение+Запись)."
+
+ # Not translated
+
+ error_unable_delete_dmsf_workflow: Unable to delete the workflow
+ error_empty_note: The note can't be empty
+ error_workflow_assign: An error occured while assigning
+ error_cannot_start_workflow: Workflow can't be started
+ error_cannot_renumber_steps: Steps can't be renumbered
+ label_dmsf_workflow_new: New approval workflow
+ label_dmsf_workflow: Approval Workflow
+ label_dmsf_workflow_plural: Approval workflows
+ label_dmsf_workflow_step: Step
+ label_dmsf_workflow_step_plural: Steps
+ label_dmsf_workflow_approval: Approval
+ label_dmsf_workflow_approval_plural: Approvals
+ label_dmsf: DMSF
+ label_dmsf_wokflow_action_approve: Approve
+ label_dmsf_wokflow_action_reject: Reject
+ label_dmsf_wokflow_action_delegate: Delegate to
+ label_dmsf_wokflow_action_assign: Assign an approval workflow
+ label_dmsf_wokflow_action_start: Start workflow
+ label_action: Action
+ label_note: Note
+ title_none: None
+ title_rejection: Rejection
+ title_delegation: Delegation
+ title_assignment: Assignment
+ title_start: Start
+ title_dmsf_workflow_log: Approval Workflow Log
+ title_assigned: Assigned
+ title_approval: Approval
+ title_rejected: Rejected
+ dmsf_and: AND
+ dmsf_or: OR
+ dmsf_new_step: New step
+ message_dmsf_wokflow_note: Your note...
+ info_revision: "r%{rev}"
+ link_workflow: Workflow
+ notice_workflow_started: Approval workflow successfully started
\ No newline at end of file
diff --git a/config/locales/zh.yml b/config/locales/zh.yml
index 6f17acd3..518e9e31 100644
--- a/config/locales/zh.yml
+++ b/config/locales/zh.yml
@@ -1,214 +1,247 @@
# Chinese translation for DMSF
zh:
- :dmsf: "文档管家"
- :label_dmsf_file_plural: "Dmsf files"
- :warning_no_entries_selected: "未选择任何条目"
- :error_email_to_must_be_entered: "请输入电子邮件"
- :notice_email_sent: "邮件已发送"
- :warning_file_already_locked: "文件已经锁定"
- :notice_file_locked: "文件锁定"
- :warning_file_not_locked: "文件未锁定"
- :notice_file_unlocked: "文件解锁"
- :error_only_user_that_locked_file_can_unlock_it: "只有锁定文件的用户才能解锁该文件"
- :question_do_you_really_want_to_delete_this_entry: "您确定删除此条目?"
- :error_max_files_exceeded: "超出同时下载%{number}个文件数量限制"
- :question_do_you_really_want_to_delete_this_revision: "您确定删除此修订版本吗?"
- :error_entry_project_does_not_match_current_project: "入口项目与当前项目不匹配"
- :notice_folder_created: "文件夹创建完毕"
- :error_folder_creation_failed: "文件夹创建失败"
- :error_folder_title_must_be_entered: "请输入主题"
- :notice_folder_deleted: "文件夹已删除"
- :error_folder_is_not_empty: "非空文件夹"
- :error_folder_title_is_already_used: "标题已经被使用"
- :notice_folder_details_were_saved: "文件夹详细信息已保存"
- :error_file_is_locked: "文件被锁定"
- :notice_file_deleted: "文件已删除"
- :error_at_least_one_revision_must_be_present: "至少一个修订版本必须存在"
- :notice_revision_deleted: "修订版本已删除"
- :warning_one_of_files_locked: "其中一个文件被锁定"
- :notice_file_unlocked: "文件解锁"
- :notice_file_revision_created: "文件修订版本已创建"
- :notice_your_preferences_were_saved: "您的偏好设定已保存"
- :warning_folder_notifications_already_activated: "文件夹通知已激活"
- :notice_folder_notifications_activated: "文件夹通知激活"
- :warning_folder_notifications_already_deactivated: "文件夹通知已注销"
- :notice_folder_notifications_deactivated: "文件夹通知注销"
- :warning_file_notifications_already_activated: "文件通知已激活"
- :notice_file_notifications_activated: "文件通知激活"
- :warning_file_notifications_already_deactivated: "文件通知已注销"
- :notice_file_notifications_deactivated: "文件通知注销"
- :link_details: "%{title} 详情"
- :link_edit: "编辑 %{title}"
- :submit_create: "创建"
- :link_create_folder: "创建文件夹"
- :title_check_uncheck_all_for_zip_download_or_email: "全选/全不选(zip下载或邮件发送)"
- :link_title: "主题"
- :link_size: "大小"
- :link_modified: "修改日期"
- :link_ver: "版本."
- :link_author: "作者"
- :title_check_for_zip_download_or_email: "选中用于Zip下载或邮件发送"
- :title_delete: "删除"
- :title_notifications_active_deactivate: "通知有效:点击注销通知"
- :title_notifications_not_active_activate: "通知无效:点击激活通知"
- :title_title_version_version_download: " 下载‘%{title}’版本‘%{version}’"
- :title_locked_by_user: "%{user}锁定"
- :title_locked_by_you: "您锁定"
- :title_waiting_for_approval: "待批准"
- :title_approved: "已批准"
- :title_unlock_file: "解除锁定允许其他成员修改"
- :title_lock_file: "锁定以防其他成员修改"
- :submit_download: "下载"
- :title_download_checked: "zip归档下载所选"
- :submit_email: "电子邮件"
- :title_send_checked_by_email: "电子邮件发送所选"
- :link_user_preferences: "您的文档管理系统项目偏好设定"
- :heading_send_documents_by_email: "电子邮件发送文档"
- :label_email_from: "发件人"
- :label_email_to: "收件人"
- :label_email_cc: "抄送"
- :label_email_subject: "主题"
- :label_email_documents: "文档"
- :label_email_body: "正文"
- :label_email_send: "发送"
- :title_notifications_active: "通知处于有效状态"
- :label_file_size: "文件大小"
- :heading_file_upload: "上传"
- :note_uploaded_maximum_files_at_once: "一次最多上传%{number}个文件."
- :note_upload_files_greater_than_two_gb: "为了上传大于2GB文件,您需要64位版本的浏览器."
- :submit_upload_files: "上传"
- :heading_new_folder: "新建文件夹"
- :label_title: "标题"
- :label_description: "描述"
- :submit_save: "保存"
- :info_file_locked: "文件已被锁定!"
- :label_notifications: "通知功能"
- :select_option_default: "默认"
- :select_option_deactivated: "注销"
- :select_option_activated: "激活"
- :title_save_preferences: "保存偏好设定"
- :heading_revisions: "修订版本"
- :title_download: "下载"
- :title_delete_revision: "删除此修订"
- :label_created: "创建"
- :label_changed: "修改"
- :info_changed_by_user: "%{changed} by %{user}"
- :label_filename: "文件名"
- :label_version: "版本"
- :label_workflow: "工作流程"
- :option_workflow_waiting_for_approval: "待批准"
- :option_workflow_approved: "已批准"
- :option_workflow_none: "无"
- :label_mime: "Mime"
- :label_size: "大小"
- :label_comment: "注释"
- :heading_new_revision: "新修订"
- :option_version_same: "Same"
- :option_version_minor: "Minor"
- :option_version_major: "Major"
- :label_new_content: "新内容"
- :label_maximum_files_upload: "最大上传文件数"
- :note_maximum_number_of_files_uploaded: "一次上传的最大文件数量. 0表示无限制."
- :label_maximum_files_download: "最大下载文件数"
- :note_maximum_number_of_files_downloaded: "最大文件下载数量(zip或发送电子邮件方式). 0表示无限制."
- :label_file_storage_directory: "文件存储目录"
- :label_index_database: "Index database"
- :label_stemming_language: "Stemming Language"
- :note_possible_values: "Possible values"
- :note_pass_none_to_disable_stemming: "pass 'none' to disable stemming"
- :label_stem_strategy: "Stem strategy"
- :option_stem_none: "Stem none (default)"
- :option_stem_some: "Stem some"
- :option_stem_all: "Stem all"
- :label_stemming_description: "This controls how the query parser will apply the stemming algorithm. The default value is STEM_NONE. The possible values are"
- :note_do_not_stem: "Don't perform any stemming."
- :note_stem_some: "Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'."
- :note_stem_all: "Search for stemmed forms of all words (note: no 'Z' prefix is added)."
- :note_stemming_applied: "Note that the stemming algorithm is only applied to words in probabilistic fields - boolean filter terms are never stemmed."
- :label_default_notifications: "文件默认通知"
- :heading_uploaded_files: "上传文件"
- :submit_commit: "提交"
- :link_documents: "文档"
- :permission_view_dmsf_folders: "浏览文档"
- :permission_user_preferences: "用户偏好设定"
- :permission_view_dmsf_files: "查看文档"
- :permission_folder_manipulation: "文件夹操作"
- :permission_file_manipulation: "文件操作"
- :permission_file_approval: "批准文件"
- :permission_force_file_unlock: "强制文件解锁"
- :label_file: "文件"
- :field_folder: "文件夹"
- :error_create_cycle_in_folder_dependency: "create cycle in folder dependency"
- :error_contains_invalid_character: "含有无效字符"
- :error_file_commit_require_uploaded_file: "文件提交要求上传文件"
- :warning_some_files_were_not_commited: "某些文件因验证错误未能被提交: %{files}"
- :error_user_has_not_right_delete_folder: "用户没有权限删除文件夹"
- :error_user_has_not_right_delete_file: "用户没有权限删除文件"
- :notice_entries_deleted: "条目已删除"
- :warning_some_entries_were_not_deleted: "某些条目未被删除: %{entries}"
- :question_do_you_really_want_to_delete_entries: "您确定删除所选的条目吗?"
- :title_delete_checked: "删除选中"
- :title_number_of_files_in_directory: "目录总文件个数"
- :title_filename_for_download: "用于下载或zip归档的文件名"
- :label_number_of_folders: "Folders"
- :label_number_of_documents: "Documents"
- :label_zip_names_encoding: "Zip文件名编码"
- :note_zip_names_encoding_iconv: "Iconv is used for charset conversion from utf-8 to target encoding"
- :error_file_storage_directory_does_not_exist: "文件存储目录不存在或不能创建"
- :error_file_can_not_be_created: "文件未能在存储目录中创建"
- :error_wrong_zip_encoding: "不正确的Zip编码"
- :warning_xapian_not_available: "Xapian not available"
- :menu_dmsf: "文档管家"
- :label_physical_file_delete: "物理删除文件"
- :user_is_not_project_member: "您不是该项目的成员"
- :heading_access_downloads_emails: "存取次数"
- :heading_access_first: "首次"
- :heading_access_last: "末次"
- :label_dmsf_updated: "DMSF updated"
- :title_total_size_of_all_files: "文件夹所有文件总大小"
- :project_module_dmsf: "文档管家"
+ dmsf: 文档管家
+ label_dmsf_file_plural: Dmsf files
+ warning_no_entries_selected: 未选择任何条目
+ error_email_to_must_be_entered: 请输入电子邮件
+ notice_email_sent: 邮件已发送
+ warning_file_already_locked: 文件已经锁定
+ notice_file_locked: 文件锁定
+ warning_file_not_locked: 文件未锁定
+ notice_file_unlocked: 文件解锁
+ error_only_user_that_locked_file_can_unlock_it: 只有锁定文件的用户才能解锁该文件
+ question_do_you_really_want_to_delete_this_entry: 您确定删除此条目?
+ error_max_files_exceeded: "超出同时下载%{number}个文件数量限制"
+ question_do_you_really_want_to_delete_this_revision: 您确定删除此修订版本吗?
+ error_entry_project_does_not_match_current_project: 入口项目与当前项目不匹配
+ notice_folder_created: 文件夹创建完毕
+ error_folder_creation_failed: 文件夹创建失败
+ error_folder_title_must_be_entered: 请输入主题
+ notice_folder_deleted: 文件夹已删除
+ error_folder_is_not_empty: 非空文件夹
+ error_folder_title_is_already_used: 标题已经被使用
+ notice_folder_details_were_saved: 文件夹详细信息已保存
+ error_file_is_locked: 文件被锁定
+ notice_file_deleted: 文件已删除
+ error_at_least_one_revision_must_be_present: 至少一个修订版本必须存在
+ notice_revision_deleted: 修订版本已删除
+ warning_one_of_files_locked: 其中一个文件被锁定
+ notice_file_unlocked: 文件解锁
+ notice_file_revision_created: 文件修订版本已创建
+ notice_your_preferences_were_saved: 您的偏好设定已保存
+ warning_folder_notifications_already_activated: 文件夹通知已激活
+ notice_folder_notifications_activated: 文件夹通知激活
+ warning_folder_notifications_already_deactivated: 文件夹通知已注销
+ notice_folder_notifications_deactivated: 文件夹通知注销
+ warning_file_notifications_already_activated: 文件通知已激活
+ notice_file_notifications_activated: 文件通知激活
+ warning_file_notifications_already_deactivated: 文件通知已注销
+ notice_file_notifications_deactivated: 文件通知注销
+ link_details: "%{title} 详情"
+ link_edit: "编辑 %{title}"
+ submit_create: 创建
+ link_create_folder: 创建文件夹
+ title_check_uncheck_all_for_zip_download_or_email: 全选/全不选(zip下载或邮件发送)
+ link_title: 主题
+ link_size: 大小
+ link_modified: 修改日期
+ link_ver: 版本.
+ link_author: 作者
+ title_check_for_zip_download_or_email: 选中用于Zip下载或邮件发送
+ title_delete: 删除
+ title_notifications_active_deactivate: "通知有效:点击注销通知"
+ title_notifications_not_active_activate: "通知无效:点击激活通知"
+ title_title_version_version_download: " 下载‘%{title}’版本‘%{version}’"
+ title_locked_by_user: "%{user}锁定"
+ title_locked_by_you: 您锁定
+ title_waiting_for_approval: 待批准
+ title_approved: 已批准
+ title_unlock_file: 解除锁定允许其他成员修改
+ title_lock_file: 锁定以防其他成员修改
+ submit_download: 下载
+ title_download_checked: zip归档下载所选
+ submit_email: 电子邮件
+ title_send_checked_by_email: 电子邮件发送所选
+ link_user_preferences: 您的文档管理系统项目偏好设定
+ heading_send_documents_by_email: 电子邮件发送文档
+ label_email_from: 发件人
+ label_email_to: 收件人
+ label_email_cc: 抄送
+ label_email_subject: 主题
+ label_email_documents: 文档
+ label_email_body: 正文
+ label_email_send: 发送
+ title_notifications_active: 通知处于有效状态
+ label_file_size: 文件大小
+ heading_file_upload: 上传
+ note_uploaded_maximum_files_at_once: "一次最多上传%{number}个文件."
+ note_upload_files_greater_than_two_gb: 为了上传大于2GB文件,您需要64位版本的浏览器.
+ submit_upload_files: 上传
+ heading_new_folder: 新建文件夹
+ label_title: 标题
+ label_description: 描述
+ submit_save: 保存
+ info_file_locked: 文件已被锁定!
+ label_notifications: 通知功能
+ select_option_default: 默认
+ select_option_deactivated: 注销
+ select_option_activated: 激活
+ title_save_preferences: 保存偏好设定
+ heading_revisions: 修订版本
+ title_download: 下载
+ title_delete_revision: 删除此修订
+ label_created: 创建
+ label_changed: 修改
+ info_changed_by_user: "%{changed} by %{user}"
+ label_filename: 文件名
+ label_version: 版本
+ label_workflow: 工作流程
+ label_mime: Mime
+ label_size: 大小
+ label_comment: 注释
+ heading_new_revision: 新修订
+ option_version_same: Same
+ option_version_minor: Minor
+ option_version_major: Major
+ label_new_content: 新内容
+ label_maximum_files_upload: 最大上传文件数
+ note_maximum_number_of_files_uploaded: 一次上传的最大文件数量. 0表示无限制.
+ label_maximum_files_download: 最大下载文件数
+ note_maximum_number_of_files_downloaded: 最大文件下载数量(zip或发送电子邮件方式). 0表示无限制.
+ label_file_storage_directory: 文件存储目录
+ label_index_database: Index database
+ label_stemming_language: Stemming Language
+ note_possible_values: Possible values
+ note_pass_none_to_disable_stemming: "pass 'none' to disable stemming"
+ label_stem_strategy: Stem strategy
+ option_stem_none: Stem none (default)
+ option_stem_some: Stem some
+ option_stem_all: Stem all
+ label_stemming_description: This controls how the query parser will apply the stemming algorithm. The default value is STEM_NONE. The possible values are
+ note_do_not_stem: "Don't perform any stemming."
+ note_stem_some: "Search for stemmed forms of terms except for those which start with a capital letter, or are followed by certain characters, or are used with operators which need positional information. Stemmed terms are prefixed with 'Z'."
+ note_stem_all: "Search for stemmed forms of all words (note: no 'Z' prefix is added)."
+ note_stemming_applied: Note that the stemming algorithm is only applied to words in probabilistic fields - boolean filter terms are never stemmed.
+ label_default_notifications: 文件默认通知
+ heading_uploaded_files: 上传文件
+ submit_commit: 提交
+ link_documents: 文档
+ permission_view_dmsf_folders: 浏览文档
+ permission_user_preferences: 用户偏好设定
+ permission_view_dmsf_files: 查看文档
+ permission_folder_manipulation: 文件夹操作
+ permission_file_manipulation: 文件操作
+ permission_file_approval: 批准文件
+ permission_force_file_unlock: 强制文件解锁
+ label_file: 文件
+ field_folder: 件夹
+ error_create_cycle_in_folder_dependency: create cycle in folder dependency
+ error_contains_invalid_character: 含有无效字符
+ error_file_commit_require_uploaded_file: 文件提交要求上传文件
+ warning_some_files_were_not_commited: "某些文件因验证错误未能被提交: %{files}"
+ error_user_has_not_right_delete_folder: 用户没有权限删除文件夹
+ error_user_has_not_right_delete_file: 用户没有权限删除文件
+ notice_entries_deleted: 条目已删除
+ warning_some_entries_were_not_deleted: "某些条目未被删除: %{entries}"
+ question_do_you_really_want_to_delete_entries: 您确定删除所选的条目吗?
+ title_delete_checked: 删除选中
+ title_number_of_files_in_directory: 目录总文件个数
+ title_filename_for_download: 用于下载或zip归档的文件名
+ label_number_of_folders: Folders
+ label_number_of_documents: Documents
+ label_zip_names_encoding: Zip文件名编码
+ note_zip_names_encoding_iconv: Iconv is used for charset conversion from utf-8 to target encoding
+ error_file_storage_directory_does_not_exist: 文件存储目录不存在或不能创建
+ error_file_can_not_be_created: 文件未能在存储目录中创建
+ error_wrong_zip_encoding: 不正确的Zip编码
+ warning_xapian_not_available: Xapian not available
+ menu_dmsf: 文档管家
+ label_physical_file_delete: 物理删除文件
+ user_is_not_project_member: 您不是该项目的成员
+ heading_access_downloads_emails: 存取次数
+ heading_access_first: 首次
+ heading_access_last: 末次
+ label_dmsf_updated: DMSF updated
+ title_total_size_of_all_files: 文件夹所有文件总大小
+ project_module_dmsf: 文档管家
-# Not translated
+ # Not translated
- :warning_no_project_to_copy_file_to: "No project to copy file to"
- :comment_copied_from: "Copied from %{source}"
- :notice_file_copied: "File copied"
- :notice_file_moved: "File moved"
- :label_target_project: "Target project"
- :label_target_folder: "Target folder"
- :title_copy_or_move: "Copy/Move"
- :label_dmsf_folder_plural: "Dmsf folders"
- :comment_moved_from: "Moved from %{source}"
- :error_target_folder_same: "Target folder and project are the same as current"
- :error_file_cannot_be_moved: "File can't be moved"
- :error_file_cannot_be_copied: "File can't be copied"
- :warning_no_project_to_copy_folder_to: "No project to copy folder to"
- :title_copy: "Copy"
- :error_folder_cannot_be_copied: "Folder can't be copied"
- :notice_folder_copied: "Folder copied"
+ warning_no_project_to_copy_file_to: No project to copy file to
+ comment_copied_from: "Copied from %{source}"
+ notice_file_copied: File copied
+ notice_file_moved: File moved
+ label_target_project: Target project
+ label_target_folder: Target folder
+ title_copy_or_move: Copy/Move
+ label_dmsf_folder_plural: Dmsf folders
+ comment_moved_from: "Moved from %{source}"
+ error_target_folder_same: Target folder and project are the same as current
+ error_file_cannot_be_moved: "File can't be moved"
+ error_file_cannot_be_copied: "File can't be copied"
+ warning_no_project_to_copy_folder_to: No project to copy folder to
+ title_copy: Copy
+ error_folder_cannot_be_copied: "Folder can't be copied"
+ notice_folder_copied: Folder copied
- :error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
- :note_maximum_email_filesize: "Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB."
- :label_maximum_email_filesize: "Maximum email attachment size"
- :header_minimum_filesize: "File Error."
- :error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
- :parent_directory: "Parent Directory"
- :note_webdav: "Webdav once enabled can be found at http://.../dmsf/webdav/"
- :label_webdav: "Webdav functionality"
- :label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
+ error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
+ note_maximum_email_filesize: Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB.
+ label_maximum_email_filesize: Maximum email attachment size
+ header_minimum_filesize: File Error.
+ error_minimum_filesize: "The file %{file} is 0 bytes and will not be attached."
+ parent_directory: Parent Directory
+ note_webdav: Webdav once enabled can be found at http://.../dmsf/webdav/
+ label_webdav: Webdav functionality
+ label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
- :warning_folder_already_locked: "This folder is already locked"
- :notice_folder_locked: "The folder was successfully locked"
- :warning_folder_not_locked: "Unfortunately, the folder could not be locked"
- :notice_folder_unlocked: "The folder was successfully unlocked"
- :error_only_user_that_locked_folder_can_unlock_it: "You are not authorised to unlock this folder"
- :title_folder_parent_locked: "Parent folder %{name} is locked"
- :title_file_parent_locked: "Parent folder %{name} is locked"
- :title_unlock_folder: "Unlock to allow changes for other members"
- :title_lock_folder: "Lock to prevent changes for other members"
+ warning_folder_already_locked: This folder is already locked
+ notice_folder_locked: The folder was successfully locked
+ warning_folder_not_locked: Unfortunately, the folder could not be locked
+ notice_folder_unlocked: The folder was successfully unlocked
+ error_only_user_that_locked_folder_can_unlock_it: You are not authorised to unlock this folder
+ title_folder_parent_locked: "Parent folder %{name} is locked"
+ title_file_parent_locked: "Parent folder %{name} is locked"
+ title_unlock_folder: Unlock to allow changes for other members
+ title_lock_folder: Lock to prevent changes for other members
- :select_option_webdav_readonly: "Read-only"
- :select_option_webdav_readwrite: "Read/Write"
- :label_webdav_strategy: "Webdav strategy"
- :note_webdav_strategy: "Enables the administrator to decide if webdav is a read-only or read-write platform for end users."
-
\ No newline at end of file
+ select_option_webdav_readonly: Read-only
+ select_option_webdav_readwrite: Read/Write
+ label_webdav_strategy: Webdav strategy
+ note_webdav_strategy: Enables the administrator to decide if webdav is a read-only or read-write platform for end users.
+
+ error_unable_delete_dmsf_workflow: Unable to delete the workflow
+ error_empty_note: "The note can't be empty"
+ error_workflow_assign: An error occured while assigning
+ error_cannot_start_workflow: "Workflow can't be started"
+ error_cannot_renumber_steps: "Steps can't be renumbered"
+ label_dmsf_workflow_new: New approval workflow
+ label_dmsf_workflow: Approval Workflow
+ label_dmsf_workflow_plural: Approval workflows
+ label_dmsf_workflow_step: Step
+ label_dmsf_workflow_step_plural: Steps
+ label_dmsf_workflow_approval: Approval
+ label_dmsf_workflow_approval_plural: Approvals
+ label_dmsf: DMSF
+ label_dmsf_wokflow_action_approve: Approve
+ label_dmsf_wokflow_action_reject: Reject
+ label_dmsf_wokflow_action_delegate: Delegate to
+ label_dmsf_wokflow_action_assign: Assign an approval workflow
+ label_dmsf_wokflow_action_start: Start workflow
+ label_action: Action
+ label_note: Note
+ title_none: None
+ title_rejection: Rejection
+ title_delegation: Delegation
+ title_assignment: Assignment
+ title_start: Start
+ title_dmsf_workflow_log: Approval Workflow Log
+ title_assigned: Assigned
+ title_approval: Approval
+ title_rejected: Rejected
+ dmsf_and: AND
+ dmsf_or: OR
+ dmsf_new_step: New step
+ message_dmsf_wokflow_note: Your note...
+ info_revision: "r%{rev}"
+ link_workflow: Workflow
+ notice_workflow_started: Approval workflow successfully started
\ No newline at end of file
From d7a1451a6c2d858e5a6865587348915058300964 Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Fri, 12 Jul 2013 15:36:17 +0200
Subject: [PATCH 23/61] unit tests updated
---
app/controllers/dmsf_workflows_controller.rb | 7 +++----
app/helpers/dmsf_workflows_helper.rb | 3 +--
app/models/dmsf_mailer.rb | 4 ++--
test/fixtures/dmsf_file_revisions.yml | 2 ++
test/functional/dmsf_workflow_controller_test.rb | 12 ++++++------
5 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb
index 15b41adf..ad851093 100644
--- a/app/controllers/dmsf_workflows_controller.rb
+++ b/app/controllers/dmsf_workflows_controller.rb
@@ -52,7 +52,7 @@ class DmsfWorkflowsController < ApplicationController
if revision.workflow == DmsfWorkflow::STATE_APPROVED
# Just approved
DmsfMailer.workflow_notification(
- revision.project.members.collect{ |member| member.user.mail},
+ revision.file.project.members.collect{ |member| member.user.mail},
@workflow,
revision,
"Approval workflow #{@workflow.name} approved",
@@ -71,9 +71,8 @@ class DmsfWorkflowsController < ApplicationController
end
else
if action.action == DmsfWorkflowStepAction::ACTION_DELEGATE
- # Delegation
- # TODO: Find the real delegate
- delegate = User.current
+ # Delegation
+ delegate = User.find_by_id params[:step_action].to_i / 10
DmsfMailer.workflow_notification(
delegate.mail,
@workflow,
diff --git a/app/helpers/dmsf_workflows_helper.rb b/app/helpers/dmsf_workflows_helper.rb
index 7181c5fb..d6ba3121 100644
--- a/app/helpers/dmsf_workflows_helper.rb
+++ b/app/helpers/dmsf_workflows_helper.rb
@@ -48,8 +48,7 @@ module DmsfWorkflowsHelper
end
def dmsf_workflows_for_select(project, dmsf_workflow_id)
- options = Array.new
- #options << [l(:option_workflow_none), nil]
+ options = Array.new
DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', project.id]).each do |wf|
options << [wf.name, wf.id]
end
diff --git a/app/models/dmsf_mailer.rb b/app/models/dmsf_mailer.rb
index 502aae56..e29727ed 100644
--- a/app/models/dmsf_mailer.rb
+++ b/app/models/dmsf_mailer.rb
@@ -63,9 +63,9 @@ class DmsfMailer < Mailer
@revision = revision
@text1 = "The approval workflow '#{@workflow.name}' assigned to '#{@revision.file.name}' document has just #{text1}."
unless @revision.folder
- url = url_for(:controller => 'dmsf', :action => 'edit_root', :id => @revision.project, :only_path => false)
+ url = url_for(:controller => 'dmsf', :action => 'edit_root', :id => @revision.file.project, :only_path => false)
else
- url = url_for(:controller => 'dmsf', :action => 'edit', :id => @project, :folder_id => @revision.folder, :only_path => false)
+ url = url_for(:controller => 'dmsf', :action => 'edit', :id => @revision.file.project, :folder_id => @revision.folder, :only_path => false)
end
@text2 = "#{text2} #{url}."
mail :to => to, :subject => subject
diff --git a/test/fixtures/dmsf_file_revisions.yml b/test/fixtures/dmsf_file_revisions.yml
index f8fe1540..9f132b23 100644
--- a/test/fixtures/dmsf_file_revisions.yml
+++ b/test/fixtures/dmsf_file_revisions.yml
@@ -17,6 +17,7 @@ dmsf_file_revisions_001:
deleted: 0
deleted_by_user_id: NULL
user_id: 1
+ dmsf_workflow_assigned_by: 1
#revision for file on non-enabled project
dmsf_file_revisions_002:
@@ -37,6 +38,7 @@ dmsf_file_revisions_002:
deleted: 0
deleted_by_user_id: NULL
user_id: 1
+ dmsf_workflow_assigned_by: 1
#revision for deleted file on dmsf-enabled project
dmsf_file_revisions_003:
diff --git a/test/functional/dmsf_workflow_controller_test.rb b/test/functional/dmsf_workflow_controller_test.rb
index 8311cc16..2bd0df13 100644
--- a/test/functional/dmsf_workflow_controller_test.rb
+++ b/test/functional/dmsf_workflow_controller_test.rb
@@ -4,7 +4,8 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
include Redmine::I18n
fixtures :users, :dmsf_workflows, :dmsf_workflow_steps, :projects, :roles,
- :members, :member_roles, :dmsf_workflow_step_assignments
+ :members, :member_roles, :dmsf_workflow_step_assignments, :dmsf_file_revisions,
+ :dmsf_files
def setup
@user_admin = User.find_by_id 1 # Redmine admin
@@ -220,7 +221,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
# :action => DmsfWorkflowStepAction::ACTION_REJECT).first
# end
#
- def test_action
+ def test_action
xhr(
:get,
:action,
@@ -234,7 +235,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
assert_template 'action'
end
- def test_new_action_delegate
+ def test_new_action_delegate
@request.env['HTTP_REFERER'] = 'http://test.host/projects/2/dmsf'
post(
:new_action,
@@ -242,15 +243,14 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
:id => @wf1.id,
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:dmsf_file_revision_id => @revision2.id,
- :step_action => DmsfWorkflowStepAction::ACTION_DELEGATE,
- :user_id => @user_admin.id,
+ :step_action => @user_admin.id * 10,
:note => 'Delegated because...')
assert_response :redirect
assert DmsfWorkflowStepAction.where(
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:action => DmsfWorkflowStepAction::ACTION_DELEGATE).first
@wfsa2.reload
- assert_equal @wfsa2.user_id, @user_admin.id
+ assert_equal @wfsa2.user_id, @user_admin.id
end
def test_assign
From 1b38113655381915903ff7305f5092d62335493f Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Mon, 15 Jul 2013 13:23:02 +0200
Subject: [PATCH 24/61] Testing link removed
---
app/views/dmsf_workflows/_steps.html.erb | 6 ------
1 file changed, 6 deletions(-)
diff --git a/app/views/dmsf_workflows/_steps.html.erb b/app/views/dmsf_workflows/_steps.html.erb
index 550f312b..e6fda3ad 100644
--- a/app/views/dmsf_workflows/_steps.html.erb
+++ b/app/views/dmsf_workflows/_steps.html.erb
@@ -4,12 +4,6 @@