integrate custom field ordering

pull/5981/head
Jens Ulferts 7 years ago
parent 66f3c0b5b7
commit 5ae86d9624
No known key found for this signature in database
GPG Key ID: 3CAA4B1182CF5308
  1. 17
      app/controllers/projects_controller.rb
  2. 1
      app/models/queries/projects.rb
  3. 57
      app/models/queries/projects/orders/custom_field_order.rb
  4. 8
      app/views/projects/index.html.erb

@ -59,21 +59,18 @@ class ProjectsController < ApplicationController
sort_clear
if query = get_all_projects_for_overview_page
# TODO: Use our query-based orders and pagination, instead of using this second version here.
@projects = query
.results
.with_required_storage
.with_latest_activity
.includes(:custom_values, :enabled_modules)
.page(page_param)
.per_page(per_page_param)
.results
.with_required_storage
.with_latest_activity
.includes(:custom_values, :enabled_modules)
.page(page_param)
.per_page(per_page_param)
orders = query.orders.map { |o| [o.attribute.to_s, o.direction.to_s] }
sort_init orders
sort_update orders.map(&:first) #%w(lft name is_public created_on required_disk_space latest_activity_at)
sort_update orders.map(&:first)
@projects = filter_projects_by_permission @projects
@custom_fields = ProjectCustomField.visible(User.current)

@ -44,4 +44,5 @@ module Queries::Projects
register.order query, orders::DefaultOrder
register.order query, orders::LatestActivityAtOrder
register.order query, orders::RequiredDiskSpaceOrder
register.order query, orders::CustomFieldOrder
end

@ -0,0 +1,57 @@
#-- encoding: UTF-8
#-- copyright
# OpenProject is a project management system.
# Copyright (C) 2012-2017 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2017 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# 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.
#
# See doc/COPYRIGHT.rdoc for more details.
#++
class Queries::Projects::Orders::CustomFieldOrder < Queries::BaseOrder
self.model = Project.all
def self.key
/cf_(\d+)/
end
def custom_field
id = self.class.key.match(attribute)[1]
CustomField.find(id)
end
def scope
super.select(custom_field.order_statements)
end
private
def order
joined_statement = custom_field.order_statements.map do |statement|
"#{statement} #{direction}"
end.join(', ')
model.order(joined_statement)
end
end

@ -67,13 +67,7 @@ See doc/COPYRIGHT.rdoc for more details.
<%= sort_header_tag('is_public', caption: Project.human_attribute_name(:is_public), param: :sortBy) %>
<% if EnterpriseToken.allows_to?(:custom_fields_in_projects_list) %>
<% @custom_fields.each do |custom_field| %>
<th>
<div class="generic-table--header-outer">
<div class="generic-table--header">
<%= custom_field.name %>
</div>
</div>
</th>
<%= sort_header_tag("cf_#{custom_field.id}", caption: custom_field.name, param: :sortBy) %>
<% end %>
<% end %>
<% if User.current.admin? %>

Loading…
Cancel
Save