Changing default file query #1386
This commit is contained in:
parent
1141b70277
commit
d6efc10bca
@ -703,6 +703,7 @@ class DmsfController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def get_query
|
def get_query
|
||||||
|
retrieve_default_query true
|
||||||
if Redmine::Plugin.installed?(:easy_extensions)
|
if Redmine::Plugin.installed?(:easy_extensions)
|
||||||
@query = retrieve_query_without_easy_extensions(DmsfQuery, true)
|
@query = retrieve_query_without_easy_extensions(DmsfQuery, true)
|
||||||
else
|
else
|
||||||
@ -710,6 +711,24 @@ class DmsfController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def retrieve_default_query(use_session)
|
||||||
|
return if params[:query_id].present?
|
||||||
|
return if api_request?
|
||||||
|
return if params[:set_filter]
|
||||||
|
|
||||||
|
if params[:without_default].present?
|
||||||
|
params[:set_filter] = 1
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if !params[:set_filter] && use_session && session[:issue_query]
|
||||||
|
query_id, project_id = session[:issue_query].values_at(:id, :project_id)
|
||||||
|
return if DmsfQuery.where(id: query_id).exists? && project_id == @project&.id
|
||||||
|
end
|
||||||
|
if default_query = DmsfQuery.default(project: @project)
|
||||||
|
params[:query_id] = default_query.id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def get_project_roles
|
def get_project_roles
|
||||||
@project_roles = Role.givable.joins(:member_roles).joins(:members).where(
|
@project_roles = Role.givable.joins(:member_roles).joins(:members).where(
|
||||||
members: { project_id: @project.id }).distinct
|
members: { project_id: @project.id }).distinct
|
||||||
|
|||||||
@ -44,6 +44,7 @@ class DmsfStateController < ApplicationController
|
|||||||
if Setting.plugin_redmine_dmsf['dmsf_act_as_attachable']
|
if Setting.plugin_redmine_dmsf['dmsf_act_as_attachable']
|
||||||
@project.update_attribute :dmsf_act_as_attachable, params[:act_as_attachable]
|
@project.update_attribute :dmsf_act_as_attachable, params[:act_as_attachable]
|
||||||
end
|
end
|
||||||
|
@project.update_attribute :default_dmsf_query_id, params[:default_dmsf_query]
|
||||||
redirect_to settings_project_path(@project, tab: 'dmsf')
|
redirect_to settings_project_path(@project, tab: 'dmsf')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -43,6 +43,9 @@ class DmsfQuery < Query
|
|||||||
super attributes
|
super attributes
|
||||||
self.sort_criteria = []
|
self.sort_criteria = []
|
||||||
self.filters ||= { 'title' => { operator: '~', values: ['']} }
|
self.filters ||= { 'title' => { operator: '~', values: ['']} }
|
||||||
|
self.dmsf_folder_id = nil
|
||||||
|
self.deleted = false
|
||||||
|
self.sub_projects = false
|
||||||
end
|
end
|
||||||
|
|
||||||
######################################################################################################################
|
######################################################################################################################
|
||||||
@ -94,17 +97,13 @@ class DmsfQuery < Query
|
|||||||
@scope
|
@scope
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the issue count
|
# Returns the count of all items
|
||||||
def dmsf_count
|
def dmsf_count
|
||||||
base_scope.where(statement).count
|
base_scope.where(statement).count
|
||||||
rescue ::ActiveRecord::StatementInvalid => e
|
rescue ::ActiveRecord::StatementInvalid => e
|
||||||
raise StatementInvalid.new e.message
|
raise StatementInvalid.new e.message
|
||||||
end
|
end
|
||||||
|
|
||||||
def type
|
|
||||||
'DmsfQuery'
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize_available_filters
|
def initialize_available_filters
|
||||||
add_available_filter 'author', type: :list, values: lambda { author_values }
|
add_available_filter 'author', type: :list, values: lambda { author_values }
|
||||||
add_available_filter 'title', type: :text
|
add_available_filter 'title', type: :text
|
||||||
@ -317,12 +316,12 @@ class DmsfQuery < Query
|
|||||||
scope = scope.visible
|
scope = scope.visible
|
||||||
end
|
end
|
||||||
if dmsf_folder_id
|
if dmsf_folder_id
|
||||||
scope.where dmsf_folders: { dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
scope.where dmsf_folders: { dmsf_folder_id: dmsf_folder_id }
|
||||||
else
|
else
|
||||||
if statement.present? || deleted
|
if statement.present? || deleted
|
||||||
scope.where dmsf_folders: { project_id: project.id, deleted: deleted }
|
scope.where dmsf_folders: { project_id: project.id }
|
||||||
else
|
else
|
||||||
scope.where dmsf_folders: { project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
scope.where dmsf_folders: { project_id: project.id, dmsf_folder_id: nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -356,13 +355,18 @@ class DmsfQuery < Query
|
|||||||
1 AS sort#{cf_columns}}).
|
1 AS sort#{cf_columns}}).
|
||||||
joins('LEFT JOIN dmsf_folders ON dmsf_links.target_id = dmsf_folders.id').
|
joins('LEFT JOIN dmsf_folders ON dmsf_links.target_id = dmsf_folders.id').
|
||||||
joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)')
|
joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)')
|
||||||
|
if deleted
|
||||||
|
scope = scope.deleted
|
||||||
|
else
|
||||||
|
scope = scope.visible
|
||||||
|
end
|
||||||
if dmsf_folder_id
|
if dmsf_folder_id
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFolder', dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFolder', dmsf_folder_id: dmsf_folder_id}
|
||||||
else
|
else
|
||||||
if statement.present? || deleted
|
if statement.present? || deleted
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id }
|
||||||
else
|
else
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, dmsf_folder_id: nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -397,13 +401,18 @@ class DmsfQuery < Query
|
|||||||
joins(:dmsf_file_revisions).
|
joins(:dmsf_file_revisions).
|
||||||
joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id ').
|
joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id ').
|
||||||
where(sub_query)
|
where(sub_query)
|
||||||
|
if deleted
|
||||||
|
scope = scope.deleted
|
||||||
|
else
|
||||||
|
scope = scope.visible
|
||||||
|
end
|
||||||
if dmsf_folder_id
|
if dmsf_folder_id
|
||||||
scope.where dmsf_files: { dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
scope.where dmsf_files: { dmsf_folder_id: dmsf_folder_id }
|
||||||
else
|
else
|
||||||
if statement.present? || deleted
|
if statement.present? || deleted
|
||||||
scope.where dmsf_files: { project_id: project.id, deleted: deleted }
|
scope.where dmsf_files: { project_id: project.id }
|
||||||
else
|
else
|
||||||
scope.where dmsf_files: { project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
scope.where dmsf_files: { project_id: project.id, dmsf_folder_id: nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -439,13 +448,18 @@ class DmsfQuery < Query
|
|||||||
joins('JOIN dmsf_file_revisions ON dmsf_file_revisions.dmsf_file_id = dmsf_files.id').
|
joins('JOIN dmsf_file_revisions ON dmsf_file_revisions.dmsf_file_id = dmsf_files.id').
|
||||||
joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id ').
|
joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id ').
|
||||||
where(sub_query)
|
where(sub_query)
|
||||||
|
if deleted
|
||||||
|
scope = scope.deleted
|
||||||
|
else
|
||||||
|
scope = scope.visible
|
||||||
|
end
|
||||||
if dmsf_folder_id
|
if dmsf_folder_id
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFile', dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFile', dmsf_folder_id: dmsf_folder_id }
|
||||||
else
|
else
|
||||||
if statement.present? || deleted
|
if statement.present? || deleted
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFile', project_id: project.id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFile', project_id: project.id }
|
||||||
else
|
else
|
||||||
scope.where dmsf_links: { target_type: 'DmsfFile', project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfFile', project_id: project.id, dmsf_folder_id: nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -479,15 +493,39 @@ class DmsfQuery < Query
|
|||||||
0 as customized_id,
|
0 as customized_id,
|
||||||
2 AS sort#{cf_columns}}).
|
2 AS sort#{cf_columns}}).
|
||||||
joins('LEFT JOIN users ON dmsf_links.user_id = users.id ')
|
joins('LEFT JOIN users ON dmsf_links.user_id = users.id ')
|
||||||
|
if deleted
|
||||||
|
scope = scope.deleted
|
||||||
|
else
|
||||||
|
scope = scope.visible
|
||||||
|
end
|
||||||
if dmsf_folder_id
|
if dmsf_folder_id
|
||||||
scope.where dmsf_links: { target_type: 'DmsfUrl', dmsf_folder_id: dmsf_folder_id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfUrl', dmsf_folder_id: dmsf_folder_id }
|
||||||
else
|
else
|
||||||
if statement.present? || deleted
|
if statement.present? || deleted
|
||||||
scope.where dmsf_links: { target_type: 'DmsfUrl', project_id: project.id, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfUrl', project_id: project.id }
|
||||||
else
|
else
|
||||||
scope.where dmsf_links: { target_type: 'DmsfUrl', project_id: project.id, dmsf_folder_id: nil, deleted: deleted }
|
scope.where dmsf_links: { target_type: 'DmsfUrl', project_id: project.id, dmsf_folder_id: nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.default(project = nil, user = User.current)
|
||||||
|
# User's default
|
||||||
|
if user&.logged? && (query_id = user.pref.default_dmsf_query).present?
|
||||||
|
query = find_by(id: query_id)
|
||||||
|
return query if query&.visible?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Project's default
|
||||||
|
query = project&.default_dmsf_query
|
||||||
|
return query if query&.visibility == VISIBILITY_PUBLIC
|
||||||
|
|
||||||
|
# Global default
|
||||||
|
if (query_id = Setting.plugin_redmine_dmsf['dmsf_default_query']).present?
|
||||||
|
query = find_by(id: query_id)
|
||||||
|
return query if query&.visibility == VISIBILITY_PUBLIC
|
||||||
|
end
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -46,9 +46,10 @@
|
|||||||
</p>
|
</p>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if Setting.plugin_redmine_dmsf['dmsf_act_as_attachable'] %>
|
|
||||||
<fieldset class="box tabular">
|
<fieldset class="box tabular">
|
||||||
<legend><%= l(:field_project) %> <%= l(:label_preferences) %></legend>
|
<legend><%= l(:field_project) %> <%= l(:label_preferences) %></legend>
|
||||||
|
<% if Setting.plugin_redmine_dmsf['dmsf_act_as_attachable'] %>
|
||||||
<p>
|
<p>
|
||||||
<%= content_tag(:label, "#{l(:label_act_as_attachable)}:") %>
|
<%= content_tag(:label, "#{l(:label_act_as_attachable)}:") %>
|
||||||
<%= select_tag 'act_as_attachable',
|
<%= select_tag 'act_as_attachable',
|
||||||
@ -57,13 +58,18 @@
|
|||||||
[l(:label_attachment_plural), Project::ATTACHABLE_ATTACHMENTS],
|
[l(:label_attachment_plural), Project::ATTACHABLE_ATTACHMENTS],
|
||||||
], selected: @project.dmsf_act_as_attachable) %>
|
], selected: @project.dmsf_act_as_attachable) %>
|
||||||
</p>
|
</p>
|
||||||
</fieldset>
|
<p>
|
||||||
|
<%= content_tag(:label, "#{l(:label_default_query)}:") %>
|
||||||
|
<% options = [[l(:label_none), nil]] %>
|
||||||
|
<% options.concat DmsfQuery.only_public.where(project_id: nil).pluck(:name, :id) %>
|
||||||
|
<%= select_tag 'default_dmsf_query',
|
||||||
|
options_for_select(options, selected: @project.default_dmsf_query_id) %>
|
||||||
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if member || Setting.plugin_redmine_dmsf['dmsf_act_as_attachable'] %>
|
</fieldset>
|
||||||
|
|
||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
<%= submit_tag l(:submit_save), title: l(:title_save_preferences), class: 'button-positive' %>
|
<%= submit_tag l(:submit_save), title: l(:title_save_preferences), class: 'button-positive' %>
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
|
||||||
<p class="nodata"><%= l(:label_no_data) %></p>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
33
app/views/hooks/redmine_dmsf/_view_my_account.html.erb
Normal file
33
app/views/hooks/redmine_dmsf/_view_my_account.html.erb
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<%#
|
||||||
|
# encoding: utf-8
|
||||||
|
#
|
||||||
|
# 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-22 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.
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%= labelled_fields_for :pref, @user.pref do |pref_fields| %>
|
||||||
|
<p>
|
||||||
|
<% options = [[l(:label_none), nil]] %>
|
||||||
|
<% options.concat DmsfQuery.only_public.where(project_id: nil).or(DmsfQuery.where(user_id: @user.id)).
|
||||||
|
pluck(:name, :id) %>
|
||||||
|
<%= pref_fields.select :default_dmsf_query,
|
||||||
|
options_for_select(options, selected: @user.pref.default_dmsf_query) %>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
@ -167,6 +167,14 @@
|
|||||||
|
|
||||||
<%= render partial: 'settings/dmsf_columns', locals: { selected_columns: @settings['dmsf_columns'] } %>
|
<%= render partial: 'settings/dmsf_columns', locals: { selected_columns: @settings['dmsf_columns'] } %>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= content_tag :label, l(:label_default_query) %>
|
||||||
|
<% options = [[l(:label_none), nil]] %>
|
||||||
|
<% options.concat DmsfQuery.only_public.where(project_id: nil).pluck(:name, :id) %>
|
||||||
|
<%= select_tag 'settings[dmsf_default_query]',
|
||||||
|
options_for_select(options, selected: @settings['dmsf_default_query']) %>
|
||||||
|
</p>
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
<em class="info">
|
<em class="info">
|
||||||
<%= l(:heading_send_documents_by_email) %>
|
<%= l(:heading_send_documents_by_email) %>
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
#
|
||||||
|
# Redmine plugin for Document Management System "Features"
|
||||||
|
#
|
||||||
|
# Copyright © 2011-22 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.
|
||||||
|
|
||||||
|
class AddProjectsDefaultDmsfQueryId < ActiveRecord::Migration[4.2]
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_column :projects, :default_dmsf_query_id, :integer, default: nil
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
3
init.rb
3
init.rb
@ -57,7 +57,8 @@ Redmine::Plugin.register :redmine_dmsf do
|
|||||||
'only_approval_zero_minor_version' => '0',
|
'only_approval_zero_minor_version' => '0',
|
||||||
'dmsf_max_notification_receivers_info' => 10,
|
'dmsf_max_notification_receivers_info' => 10,
|
||||||
'office_bin' => 'libreoffice',
|
'office_bin' => 'libreoffice',
|
||||||
'dmsf_global_menu_disabled' => 0
|
'dmsf_global_menu_disabled' => 0,
|
||||||
|
'dmsf_default_query' => nil
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -75,8 +75,9 @@ require File.dirname(__FILE__) + '/redmine_dmsf/hooks/controllers/search_control
|
|||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/controllers/issues_controller_hooks'
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/controllers/issues_controller_hooks'
|
||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/view_projects_form_hook'
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/view_projects_form_hook'
|
||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/base_view_hooks'
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/base_view_hooks'
|
||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/issue_view_hooks'
|
|
||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/custom_field_view_hooks'
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/custom_field_view_hooks'
|
||||||
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/issue_view_hooks'
|
||||||
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/my_account_view_hooks'
|
||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/search_view_hooks'
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/views/search_view_hooks'
|
||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/helpers/issues_helper_hooks'
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/helpers/issues_helper_hooks'
|
||||||
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/helpers/search_helper_hooks'
|
require File.dirname(__FILE__) + '/redmine_dmsf/hooks/helpers/search_helper_hooks'
|
||||||
|
|||||||
39
lib/redmine_dmsf/hooks/views/my_account_view_hooks.rb
Normal file
39
lib/redmine_dmsf/hooks/views/my_account_view_hooks.rb
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
#
|
||||||
|
# Redmine plugin for Document Management System "Features"
|
||||||
|
#
|
||||||
|
# Copyright © 2011-22 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.
|
||||||
|
# User form view hooks
|
||||||
|
|
||||||
|
module RedmineDmsf
|
||||||
|
module Hooks
|
||||||
|
module Views
|
||||||
|
|
||||||
|
class MyAccountViewHooks < Redmine::Hook::ViewListener
|
||||||
|
|
||||||
|
def view_my_account_preferences(context={})
|
||||||
|
if context.is_a?(Hash) && context[:user]
|
||||||
|
context[:controller].send(
|
||||||
|
:render_to_string, { partial: 'hooks/redmine_dmsf/view_my_account', locals: context }).html_safe
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -69,6 +69,8 @@ module RedmineDmsf
|
|||||||
has_many :dmsf_links, -> { where dmsf_folder_id: nil },
|
has_many :dmsf_links, -> { where dmsf_folder_id: nil },
|
||||||
class_name: 'DmsfLink', foreign_key: 'project_id', dependent: :destroy
|
class_name: 'DmsfLink', foreign_key: 'project_id', dependent: :destroy
|
||||||
|
|
||||||
|
belongs_to :default_dmsf_query, class_name: 'DmsfQuery'
|
||||||
|
|
||||||
acts_as_watchable
|
acts_as_watchable
|
||||||
|
|
||||||
before_save :set_default_dmsf_notification
|
before_save :set_default_dmsf_notification
|
||||||
|
|||||||
@ -26,11 +26,7 @@ module RedmineDmsf
|
|||||||
##################################################################################################################
|
##################################################################################################################
|
||||||
# New methods
|
# New methods
|
||||||
|
|
||||||
def self.included(base)
|
UserPreference::safe_attributes 'dmsf_attachments_upload_choice'
|
||||||
base.class_eval do
|
|
||||||
safe_attributes 'dmsf_attachments_upload_choice' if self.included_modules.include?(Redmine::SafeAttributes)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def dmsf_attachments_upload_choice
|
def dmsf_attachments_upload_choice
|
||||||
self[:dmsf_attachments_upload_choice] || 'DMSF'
|
self[:dmsf_attachments_upload_choice] || 'DMSF'
|
||||||
@ -40,6 +36,16 @@ module RedmineDmsf
|
|||||||
self[:dmsf_attachments_upload_choice] = value
|
self[:dmsf_attachments_upload_choice] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
UserPreference::safe_attributes 'default_dmsf_query'
|
||||||
|
|
||||||
|
def default_dmsf_query
|
||||||
|
self[:default_dmsf_query] || nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_dmsf_query=(value)
|
||||||
|
self[:default_dmsf_query] = value
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
10
test/fixtures/dmsf_file_revisions.yml
vendored
10
test/fixtures/dmsf_file_revisions.yml
vendored
@ -94,7 +94,7 @@ dmsf_file_revisions_005:
|
|||||||
disk_filename: 'test5.txt'
|
disk_filename: 'test5.txt'
|
||||||
size: 4
|
size: 4
|
||||||
mime_type: 'application/vnd.oasis.opendocument.text'
|
mime_type: 'application/vnd.oasis.opendocument.text'
|
||||||
title: 'Test File'
|
title: 'Test file'
|
||||||
description: NULL
|
description: NULL
|
||||||
workflow: 1 # DmsfWorkflow::STATE_WAITING_FOR_APPROVAL
|
workflow: 1 # DmsfWorkflow::STATE_WAITING_FOR_APPROVAL
|
||||||
minor_version: 1
|
minor_version: 1
|
||||||
@ -115,7 +115,7 @@ dmsf_file_revisions_006:
|
|||||||
disk_filename: 'test.gif'
|
disk_filename: 'test.gif'
|
||||||
size: 4
|
size: 4
|
||||||
mime_type: 'image/gif'
|
mime_type: 'image/gif'
|
||||||
title: 'Image'
|
title: 'Test image'
|
||||||
description: NULL
|
description: NULL
|
||||||
workflow: NULL
|
workflow: NULL
|
||||||
minor_version: 0
|
minor_version: 0
|
||||||
@ -136,7 +136,7 @@ dmsf_file_revisions_007:
|
|||||||
disk_filename: 'test.pdf'
|
disk_filename: 'test.pdf'
|
||||||
size: 4
|
size: 4
|
||||||
mime_type: 'application/pdf'
|
mime_type: 'application/pdf'
|
||||||
title: 'PDF'
|
title: 'Test PDF'
|
||||||
description: NULL
|
description: NULL
|
||||||
workflow: NULL
|
workflow: NULL
|
||||||
minor_version: 0
|
minor_version: 0
|
||||||
@ -243,7 +243,7 @@ dmsf_file_revisions_012:
|
|||||||
disk_filename: 'test.mp4'
|
disk_filename: 'test.mp4'
|
||||||
size: 4
|
size: 4
|
||||||
mime_type: 'video/mp4'
|
mime_type: 'video/mp4'
|
||||||
title: 'Video file'
|
title: 'test video'
|
||||||
description: 'A video :-)'
|
description: 'A video :-)'
|
||||||
workflow: 0
|
workflow: 0
|
||||||
minor_version: 0
|
minor_version: 0
|
||||||
@ -265,7 +265,7 @@ dmsf_file_revisions_013:
|
|||||||
disk_filename: 'test.odt'
|
disk_filename: 'test.odt'
|
||||||
size: 4
|
size: 4
|
||||||
mime_type: 'application/vnd.oasis.opendocument.text'
|
mime_type: 'application/vnd.oasis.opendocument.text'
|
||||||
title: 'Office document'
|
title: 'Test office document'
|
||||||
description: 'LibreOffice text'
|
description: 'LibreOffice text'
|
||||||
workflow: 0
|
workflow: 0
|
||||||
minor_version: 0
|
minor_version: 0
|
||||||
|
|||||||
2
test/fixtures/dmsf_links.yml
vendored
2
test/fixtures/dmsf_links.yml
vendored
@ -43,7 +43,7 @@ file_link2:
|
|||||||
target_project_id: 1
|
target_project_id: 1
|
||||||
target_id: 4
|
target_id: 4
|
||||||
target_type: DmsfFile
|
target_type: DmsfFile
|
||||||
name: test_link
|
name: test_link2
|
||||||
project_id: 1
|
project_id: 1
|
||||||
dmsf_folder_id: NULL
|
dmsf_folder_id: NULL
|
||||||
deleted: 0
|
deleted: 0
|
||||||
|
|||||||
15
test/fixtures/queries.yml
vendored
Normal file
15
test/fixtures/queries.yml
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
queries_401:
|
||||||
|
id: 401
|
||||||
|
type: DmsfQuery
|
||||||
|
project_id: 1
|
||||||
|
visibility: 2
|
||||||
|
name: Test
|
||||||
|
filters: |
|
||||||
|
---
|
||||||
|
title:
|
||||||
|
:values:
|
||||||
|
- 'test'
|
||||||
|
:operator: '~'
|
||||||
|
user_id: 2
|
||||||
|
column_names:
|
||||||
@ -24,20 +24,29 @@ require File.expand_path('../../test_helper', __FILE__)
|
|||||||
class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
|
class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
|
||||||
include Redmine::I18n
|
include Redmine::I18n
|
||||||
|
|
||||||
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions
|
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :queries
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
@query401 = Query.find 401
|
||||||
@request.session[:user_id] = @jsmith.id
|
@request.session[:user_id] = @jsmith.id
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_user_pref_save_member
|
def test_user_pref_save_member
|
||||||
assert @project1
|
|
||||||
@role_manager.add_permission! :user_preferences
|
@role_manager.add_permission! :user_preferences
|
||||||
post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
|
post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v', fast_links: 1,
|
||||||
|
act_as_attachable: 1, default_dmsf_query: @query401.id }
|
||||||
assert_redirected_to settings_project_path(@project1, tab: 'dmsf')
|
assert_redirected_to settings_project_path(@project1, tab: 'dmsf')
|
||||||
assert_not_nil flash[:notice]
|
assert_not_nil flash[:notice]
|
||||||
assert_equal flash[:notice], l(:notice_your_preferences_were_saved)
|
assert_equal flash[:notice], l(:notice_your_preferences_were_saved)
|
||||||
|
member = @project1.members.find_by(user_id: @jsmith.id)
|
||||||
|
assert member
|
||||||
|
assert_equal true, member.dmsf_mail_notification
|
||||||
|
assert_equal '%t_%v', member.dmsf_title_format
|
||||||
|
assert_equal true, member.dmsf_fast_links
|
||||||
|
@project1.reload
|
||||||
|
assert_equal 1, @project1.dmsf_act_as_attachable
|
||||||
|
assert_equal @query401.id, @project1.default_dmsf_query_id
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_user_pref_save_member_forbidden
|
def test_user_pref_save_member_forbidden
|
||||||
|
|||||||
72
test/unit/dmsf_query_test.rb
Normal file
72
test/unit/dmsf_query_test.rb
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
# frozen_string_literal: true
|
||||||
|
#
|
||||||
|
# Redmine plugin for Document Management System "Features"
|
||||||
|
#
|
||||||
|
# Copyright © 2012 Daniel Munn <dan.munn@munnster.co.uk>
|
||||||
|
# Copyright © 2011-22 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 File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class DmsfQueryTest < RedmineDmsf::Test::UnitTest
|
||||||
|
|
||||||
|
fixtures :queries, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
|
||||||
|
|
||||||
|
def setup
|
||||||
|
super
|
||||||
|
@query401 = Query.find 401
|
||||||
|
User.current = @jsmith
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_type
|
||||||
|
assert_equal 'DmsfQuery', @query401.type
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_available_columns
|
||||||
|
n = DmsfQuery.available_columns.size + DmsfFileRevisionCustomField.visible.all.size
|
||||||
|
assert_equal n, @query401.available_columns.size
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_dmsf_count
|
||||||
|
n = DmsfFolder.visible.where(project_id: @project1.id).where("title LIKE '%test%'").all.size +
|
||||||
|
DmsfFile.visible.where(project_id: @project1.id).where("name LIKE '%test%'").all.size +
|
||||||
|
DmsfLink.visible.where(project_id: @project1.id).where("name LIKE '%test%'").all.size
|
||||||
|
assert_equal n, @query401.dmsf_count
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_dmsf_nodes
|
||||||
|
assert @query401.dmsf_nodes.size > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_default
|
||||||
|
# User
|
||||||
|
@jsmith.pref.default_dmsf_query = @query401.id
|
||||||
|
assert_equal @query401, DmsfQuery.default
|
||||||
|
@jsmith.pref.default_dmsf_query = nil
|
||||||
|
|
||||||
|
# Project
|
||||||
|
@project1.default_dmsf_query_id = @query401.id
|
||||||
|
assert_equal @query401, DmsfQuery.default(@project1)
|
||||||
|
@project1.default_dmsf_query_id = nil
|
||||||
|
|
||||||
|
# Global
|
||||||
|
with_settings plugin_redmine_dmsf: {'dmsf_default_query' => @query401.id} do
|
||||||
|
assert_equal @query401, DmsfQuery.default
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@ -53,6 +53,10 @@ class ProjectPatchTest < RedmineDmsf::Test::UnitTest
|
|||||||
assert @project1.respond_to?(:dmsf_links)
|
assert @project1.respond_to?(:dmsf_links)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_project_has_default_dmsf_query
|
||||||
|
assert @project1.respond_to?(:default_dmsf_query)
|
||||||
|
end
|
||||||
|
|
||||||
def test_dmsf_count
|
def test_dmsf_count
|
||||||
User.current = @jsmith
|
User.current = @jsmith
|
||||||
hash = @project1.dmsf_count
|
hash = @project1.dmsf_count
|
||||||
|
|||||||
36
test/unit/user_preference_patch_test.rb
Normal file
36
test/unit/user_preference_patch_test.rb
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
# frozen_string_literal: true
|
||||||
|
#
|
||||||
|
# Redmine plugin for Document Management System "Features"
|
||||||
|
#
|
||||||
|
# Copyright © 2011-22 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 File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class UserPreferencePatchTest < RedmineDmsf::Test::UnitTest
|
||||||
|
|
||||||
|
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions
|
||||||
|
|
||||||
|
def test_user_preference_has_dmsf_attachments_upload_choice
|
||||||
|
assert @jsmith.pref.respond_to?(:dmsf_attachments_upload_choice)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_user_preference_has_default_dmsf_query
|
||||||
|
assert @jsmith.pref.respond_to?(:default_dmsf_query)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user