151 lines
7.0 KiB
Ruby
151 lines
7.0 KiB
Ruby
# frozen_string_literal: true
|
|
#
|
|
# Redmine plugin for Document Management System "Features"
|
|
#
|
|
# Copyright © 2011 Vít Jonáš <vit.jonas@gmail.com>
|
|
# Copyright © 2012 Daniel Munn <dan.munn@munnster.co.uk>
|
|
# Copyright © 2011-23 Karel Pičman <karel.picman@kontron.com>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
require 'redmine'
|
|
require 'zip'
|
|
require "#{File.dirname(__FILE__)}/lib/redmine_dmsf"
|
|
|
|
def dmsf_init
|
|
# Administration menu extension
|
|
Redmine::MenuManager.map :admin_menu do |menu|
|
|
menu.push :dmsf_approvalworkflows, :dmsf_workflows_path,
|
|
caption: :label_dmsf_workflow_plural,
|
|
html: { class: 'icon icon-workflows' },
|
|
if: proc { |_| User.current.admin? }
|
|
end
|
|
# Project menu extension
|
|
Redmine::MenuManager.map :project_menu do |menu|
|
|
menu.push :dmsf, { controller: 'dmsf', action: 'show' },
|
|
caption: :menu_dmsf,
|
|
before: :documents,
|
|
param: :id,
|
|
html: { class: 'icon icon-dmsf' }
|
|
# New menu extension
|
|
next if Redmine::Plugin.installed?('easy_extensions')
|
|
|
|
menu.push :dmsf_file, { controller: 'dmsf_upload', action: 'multi_upload' },
|
|
caption: :label_dmsf_new_top_level_document, parent: :new_object
|
|
menu.push :dmsf_folder, { controller: 'dmsf', action: 'new' },
|
|
caption: :label_dmsf_new_top_level_folder,
|
|
parent: :new_object
|
|
end
|
|
# Main menu extension
|
|
unless ActiveRecord::Base.connection.data_source_exists?('settings') &&
|
|
Setting.plugin_redmine_dmsf['dmsf_global_menu_disabled']
|
|
Redmine::MenuManager.map :top_menu do |menu|
|
|
menu.push :dmsf, { controller: 'dmsf', action: 'index' },
|
|
caption: :menu_dmsf,
|
|
html: { class: 'icon-dmsf' },
|
|
if: proc { User.current.allowed_to?(:view_dmsf_folders, nil, global: true) }
|
|
end
|
|
end
|
|
|
|
Redmine::AccessControl.map do |map|
|
|
map.project_module :dmsf do |pmap|
|
|
pmap.permission :view_dmsf_file_revision_accesses, read: true
|
|
pmap.permission :view_dmsf_file_revisions, read: true
|
|
pmap.permission :view_dmsf_folders, { dmsf: %i[show index] }, read: true
|
|
pmap.permission :user_preferences, { dmsf_state: [:user_pref_save] }, require: :member
|
|
pmap.permission(:view_dmsf_files,
|
|
{ dmsf: %i[entries_operation entries_email download_email_entries add_email append_email
|
|
autocomplete_for_user],
|
|
dmsf_files: %i[show view thumbnail],
|
|
dmsf_workflows: [:log] },
|
|
read: true)
|
|
pmap.permission :email_documents,
|
|
{ dmsf_public_urls: [:create] }
|
|
pmap.permission :folder_manipulation,
|
|
{ dmsf: %i[new create delete edit save edit_root save_root lock unlock notify_activate
|
|
notify_deactivate restore drop],
|
|
dmsf_folder_permissions: %i[new append autocomplete_for_user],
|
|
dmsf_folders_copy: %i[new copy move],
|
|
dmsf_context_menus: [:dmsf] }
|
|
pmap.permission :file_manipulation,
|
|
{ dmsf_files: %i[create_revision lock unlock delete_revision obsolete_revision
|
|
notify_activate notify_deactivate restore],
|
|
dmsf_upload: %i[upload_files upload commit_files commit delete_dmsf_attachment
|
|
delete_dmsf_link_attachment multi_upload],
|
|
dmsf_links: %i[new create destroy restore autocomplete_for_project autocomplete_for_folder],
|
|
dmsf_files_copy: %i[new copy move],
|
|
dmsf_context_menus: [:dmsf] }
|
|
pmap.permission :file_delete,
|
|
{ dmsf: %i[trash delete_entries empty_trash],
|
|
dmsf_files: [:delete],
|
|
dmsf_trash_context_menus: [:trash] }
|
|
pmap.permission :force_file_unlock, {}
|
|
pmap.permission :file_approval,
|
|
{ dmsf_workflows: %i[action new_action autocomplete_for_user start assign assignment] }
|
|
pmap.permission :manage_workflows,
|
|
{ dmsf_workflows: %i[index new create destroy show new_step add_step remove_step
|
|
reorder_steps update update_step delete_step edit] }
|
|
pmap.permission :display_system_folders,
|
|
read: true
|
|
# Watchers
|
|
pmap.permission :view_dmsf_file_watchers, {}, read: true
|
|
pmap.permission :add_dmsf_file_watchers, { watchers: %i[new create append autocomplete_for_user] }
|
|
pmap.permission :delete_dmsf_file_watchers, { watchers: :destroy }
|
|
pmap.permission :view_dmsf_folder_watchers, {}, read: true
|
|
pmap.permission :add_dmsf_folder_watchers, { watchers: %i[new create append autocomplete_for_user] }
|
|
pmap.permission :delete_dmsf_folder_watchers, { watchers: :destroy }
|
|
pmap.permission :view_project_watchers, {}, read: true
|
|
pmap.permission :add_project_watchers, { watchers: %i[new create append autocomplete_for_user] }
|
|
pmap.permission :delete_project_watchers, { watchers: :destroy }
|
|
end
|
|
end
|
|
end
|
|
|
|
if Redmine::Plugin.installed?('easy_extensions')
|
|
ActiveSupport.on_load(:easyproject, yield: true) do
|
|
dmsf_init
|
|
|
|
# Register panels for My page
|
|
EpmDmsfLockedDocuments.register_to_scope :user, plugin: :redmine_dmsf
|
|
EpmDmsfOpenApprovals.register_to_scope :user, plugin: :redmine_dmsf
|
|
EpmDmsfWatchedDocuments.register_to_scope :user, plugin: :redmine_dmsf
|
|
end
|
|
else
|
|
dmsf_init
|
|
end
|
|
|
|
Rails.application.configure do
|
|
# Rubyzip configuration
|
|
Zip.unicode_names = true
|
|
|
|
# DMS custom fields
|
|
CustomFieldsHelper::CUSTOM_FIELDS_TABS << { name: 'DmsfFileRevisionCustomField', partial: 'custom_fields/index',
|
|
label: :dmsf }
|
|
|
|
# Searchable modules
|
|
Redmine::Search.map do |search|
|
|
search.register :dmsf_files
|
|
search.register :dmsf_folders
|
|
end
|
|
|
|
# Activities
|
|
Redmine::Activity.register :dmsf_file_revision_accesses, default: false
|
|
Redmine::Activity.register :dmsf_file_revisions
|
|
|
|
# Uncomment to remove the original Documents from searching and project's modules (replaced with DMSF)
|
|
# Redmine::Search.available_search_types.delete('documents')
|
|
# Redmine::AccessControl.available_project_modules.delete(:documents)
|
|
end
|