diff --git a/app/views/users/_course_file_form.html.erb b/app/views/users/_course_file_form.html.erb index a1317c1f8..fa5c0a578 100644 --- a/app/views/users/_course_file_form.html.erb +++ b/app/views/users/_course_file_form.html.erb @@ -1,4 +1,5 @@ -<%= form_tag add_exist_file_to_course_user_path(user, :type => defined? type ? "6" : type ),:remote=>true,:id=>'course_list_form' do %> + +<%= form_tag add_exist_file_to_course_user_path(user, :type => defined?(type) ? type : "6" ),:remote=>true,:id=>'course_list_form' do %>
<%= hidden_field_tag(:send_id, send_id) %> <%= hidden_field_tag(:send_ids, send_ids) %> diff --git a/app/views/users/_org_file_form.html.erb b/app/views/users/_org_file_form.html.erb index a69e71384..348a68c00 100644 --- a/app/views/users/_org_file_form.html.erb +++ b/app/views/users/_org_file_form.html.erb @@ -1,4 +1,4 @@ -<%= form_tag add_exist_file_to_org_user_path(user, :type => defined? type ? "6" : type),:remote=>true,:id=>'orgs_list_form' do %> +<%= form_tag add_exist_file_to_org_user_path(user, :type => defined?(type) ? type : "6" ),:remote=>true,:id=>'orgs_list_form' do %> <%= hidden_field_tag(:send_id, send_id) %> <%= hidden_field_tag(:send_ids, send_ids) %>
diff --git a/app/views/users/_project_file_form.html.erb b/app/views/users/_project_file_form.html.erb index 134d837a6..fc9765209 100644 --- a/app/views/users/_project_file_form.html.erb +++ b/app/views/users/_project_file_form.html.erb @@ -1,4 +1,4 @@ -<%= form_tag add_exist_file_to_project_user_path(user, :type => defined? type ? "6" : type), :remote => true, :id => 'projects_list_form' %> +<%= form_tag add_exist_file_to_project_user_path(user, :type => defined?(type) ? type : "6" ), :remote => true, :id => 'projects_list_form' %>
<%= hidden_field_tag(:send_id, send_id) %> <%= hidden_field_tag(:send_ids, send_ids) %> diff --git a/lib/redmine/pagination.rb b/lib/redmine/pagination.rb index 4f1e8ac46..79855b966 100644 --- a/lib/redmine/pagination.rb +++ b/lib/redmine/pagination.rb @@ -1,342 +1,342 @@ -# encoding: utf-8 -# -# Redmine - project management software -# Copyright (C) 2006-2013 Jean-Philippe Lang -# -# 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 Redmine - module Pagination - class Paginator - attr_reader :item_count, :per_page, :page, :page_param - def initialize(*args) - if args.first.is_a?(ActionController::Base) - args.shift - ActiveSupport::Deprecation.warn "Paginator no longer takes a controller instance as the first argument. Remove it from #new arguments." - end - item_count, per_page, page, page_param = *args - - @item_count = item_count - @per_page = per_page - page = (page || 1).to_i - if page < 1 - page = 1 - end - @page = page - @page_param = page_param || :page - end - - def offset - (page - 1) * per_page - end - - ## fq - def reverse_offset - offset = @item_count-@per_page*page - if offset < 0 - offset = 0 - end - offset - end - ## end - - - def first_page - if item_count > 0 - 1 - end - end - - def previous_page - if page > 1 - page - 1 - end - end - - def next_page - if last_item < item_count - page + 1 - end - end - - def last_page - if item_count > 0 - (item_count - 1) / per_page + 1 - end - end - - def first_item - item_count == 0 ? 0 : (offset + 1) - end - - def last_item - l = first_item + per_page - 1 - l > item_count ? item_count : l - end - - def linked_pages - pages = [] - if item_count > 0 - pages += [first_page, page, last_page] - pages += ((page-2)..(page+2)).to_a.select {|p| p > first_page && p < last_page} - end - pages = pages.compact.uniq.sort - if pages.size > 1 - pages - else - [] - end - end - - def items_per_page - ActiveSupport::Deprecation.warn "Paginator#items_per_page will be removed. Use #per_page instead." - per_page - end - - def current - ActiveSupport::Deprecation.warn "Paginator#current will be removed. Use .offset instead of .current.offset." - self - end - end - - # Paginates the given scope or model. Returns a Paginator instance and - # the collection of objects for the current page. - # - # Options: - # :parameter name of the page parameter - # - # Examples: - # @user_pages, @users = paginate User.where(:status => 1) - # - def paginate(scope, options={}) - options = options.dup - finder_options = options.extract!( - :conditions, - :order, - :joins, - :include, - :select - ) - if scope.is_a?(Symbol) || finder_options.values.compact.any? - return deprecated_paginate(scope, finder_options, options) - end - - paginator = paginator(scope.count, options) - collection = scope.limit(paginator.per_page).offset(paginator.offset).to_a - - return paginator, collection - end - - def deprecated_paginate(arg, finder_options, options={}) - ActiveSupport::Deprecation.warn "#paginate with a Symbol and/or find options is depreceted and will be removed. Use a scope instead." - klass = arg.is_a?(Symbol) ? arg.to_s.classify.constantize : arg - scope = klass.scoped(finder_options) - paginate(scope, options) - end - - def paginator(item_count, options={}) - options.assert_valid_keys :parameter, :per_page - - page_param = options[:parameter] || :page - page = (params[page_param] || 1).to_i - per_page = options[:per_page] || per_page_option - Paginator.new(item_count, per_page, page, page_param) - end - - module Helper - include Redmine::I18n - # Renders the pagination links for the given paginator. - # - # Options: - # :per_page_links if set to false, the "Per page" links are not rendered - # - def pagination_links_full(*args) - page = "" - pagination_links_each(*args) do |text, parameters, options| - if block_given? - yield text, parameters, options - else - if args[2][:path].nil? - link_to text, params.merge(parameters), options - else - page = "&page" + parameters[:page].to_s unless parameters[:page].nil? - link_to text, args[2][:path].to_s + page, options - end - end - end - end - - # Yields the given block with the text and parameters - # for each pagination link and returns a string that represents the links - # def pagination_links_each(paginator, count=nil, options={}, &block) - # options.assert_valid_keys :per_page_links - # - # per_page_links = options.delete(:per_page_links) - # per_page_links = false if count.nil? - # page_param = paginator.page_param - # - # html = '' - # if paginator.previous_page - # # \xc2\xab(utf-8) = « - # text = "\xc2\xab " + l(:label_previous) - # html << yield(text, {page_param => paginator.previous_page}, :class => 'previous') + ' ' - # end - # - # previous = nil - # paginator.linked_pages.each do |page| - # if previous && previous != page - 1 - # html << content_tag('span', '...', :class => 'spacer') + ' ' - # end - # if page == paginator.page - # html << content_tag('span', page.to_s, :class => 'current page') - # else - # html << yield(page.to_s, {page_param => page}, :class => 'page') - # end - # html << ' ' - # previous = page - # end - # - # if paginator.next_page - # # \xc2\xbb(utf-8) = » - # text = l(:label_next) + " \xc2\xbb" - # html << yield(text, {page_param => paginator.next_page}, :class => 'next') + ' ' - # end - # - # html << content_tag('span', "(#{paginator.first_item}-#{paginator.last_item}/#{paginator.item_count})", :class => 'items') + ' ' - # - # if per_page_links != false && links = per_page_links(paginator, &block) - # html << content_tag('span', links.to_s, :class => 'per-page') - # end - # - # html.html_safe - # end - #Added by Nie guanghui - #Designed for pagination. - def pagination_links_each(paginator, count=nil, options={}, &block) - #options.assert_valid_keys :per_page_links - - #per_page_links = options.delete(:per_page_links) - per_page_links = options[:per_page_links] - remote = options[:remote] ? options[:remote] : false - flag = options[:flag] ? options[:flag] : false - per_page_links = false if count.nil? - page_param = paginator.page_param - - html = '' - if paginator.previous_page - # \xc2\xab(utf-8) = « - if flag - text = l(:label_previous) - else - text = "\xc2\xab " + l(:label_previous) - end - html << '
  • ' << yield(text, {page_param => paginator.previous_page}, :class => 'previous c_blue', :remote => remote) << '
  • ' + ' ' - end - unless paginator.previous_page - if paginator.next_page - if flag - text = l(:label_previous) - else - text = "\xc2\xab " + l(:label_previous) - end - html << '
  • ' << yield(text, {page_param => paginator.previous_page}, :class => 'previous c_blue', :remote => remote) << '
  • ' + ' ' - end - end - - previous = nil - paginator.linked_pages.each do |page| - if previous && previous != page - 1 - if flag - html << '
  • ' << content_tag('a', '...', :class => 'c_blue') << '
  • ' + ' ' - else - html << '
  • ' << content_tag('span', '...', :class => 'spacer ') << '
  • ' + ' ' - end - end - if page == paginator.page - if flag - html << '
  • ' << content_tag('a', page.to_s, :class => 'current-page c_white') << '
  • ' - else - html << '
  • ' << content_tag('span', page.to_s, :class => 'current-page') << '
  • ' - end - else - html << '
  • ' << yield(page.to_s, {page_param => page}, :class => 'page c_blue', :remote => remote) << '
  • ' - end - html << ' ' - previous = page - end - - if paginator.next_page - if flag - text = l(:label_next) - else - text = l(:label_next) + " \xc2\xbb" - end - html << '
  • ' << yield(text, {page_param => paginator.next_page}, :class => 'next c_blue', :remote => remote) << '
  • ' + ' ' - end - - unless paginator.next_page - if paginator.previous_page - if flag - text = l(:label_next) - else - text = l(:label_next) + " \xc2\xbb" - end - html << "
  • " << yield(text, {page_param => paginator.next_page}, :class => 'next c_blue', :remote => remote) << "
  • " + ' ' - end - end - - # html << content_tag('span', "(#{paginator.first_item}-#{paginator.last_item}/#{paginator.item_count})", :class => 'items') + ' ' - # - # if per_page_links != false && links = per_page_links(paginator, &block) - # html << content_tag('span', links.to_s, :class => 'per-page') - # end - - html.html_safe - end - - # Renders the "Per page" links. - def per_page_links(paginator, &block) - values = per_page_options(paginator.per_page, paginator.item_count) - if values.any? - links = values.collect do |n| - if n == paginator.per_page - content_tag('span', n.to_s) - else - yield(n, :per_page => n, paginator.page_param => nil) - end - end - l(:label_display_per_page, links.join(', ')).html_safe - end - end - - def per_page_options(selected=nil, item_count=nil) - options = Setting.per_page_options_array - if item_count && options.any? - if item_count > options.first - max = options.detect {|value| value >= item_count} || item_count - else - max = item_count - end - options = options.select {|value| value <= max || value == selected} - end - if options.empty? || (options.size == 1 && options.first == selected) - [] - else - options - end - end - end - end -end +# encoding: utf-8 +# +# Redmine - project management software +# Copyright (C) 2006-2013 Jean-Philippe Lang +# +# 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 Redmine + module Pagination + class Paginator + attr_reader :item_count, :per_page, :page, :page_param + def initialize(*args) + if args.first.is_a?(ActionController::Base) + args.shift + ActiveSupport::Deprecation.warn "Paginator no longer takes a controller instance as the first argument. Remove it from #new arguments." + end + item_count, per_page, page, page_param = *args + + @item_count = item_count + @per_page = per_page + page = (page || 1).to_i + if page < 1 + page = 1 + end + @page = page + @page_param = page_param || :page + end + + def offset + (page - 1) * per_page + end + + ## fq + def reverse_offset + offset = @item_count-@per_page*page + if offset < 0 + offset = 0 + end + offset + end + ## end + + + def first_page + if item_count > 0 + 1 + end + end + + def previous_page + if page > 1 + page - 1 + end + end + + def next_page + if last_item < item_count + page + 1 + end + end + + def last_page + if item_count > 0 + (item_count - 1) / per_page + 1 + end + end + + def first_item + item_count == 0 ? 0 : (offset + 1) + end + + def last_item + l = first_item + per_page - 1 + l > item_count ? item_count : l + end + + def linked_pages + pages = [] + if item_count > 0 + pages += [first_page, page, last_page] + pages += ((page-2)..(page+2)).to_a.select {|p| p > first_page && p < last_page} + end + pages = pages.compact.uniq.sort + if pages.size > 1 + pages + else + [] + end + end + + def items_per_page + ActiveSupport::Deprecation.warn "Paginator#items_per_page will be removed. Use #per_page instead." + per_page + end + + def current + ActiveSupport::Deprecation.warn "Paginator#current will be removed. Use .offset instead of .current.offset." + self + end + end + + # Paginates the given scope or model. Returns a Paginator instance and + # the collection of objects for the current page. + # + # Options: + # :parameter name of the page parameter + # + # Examples: + # @user_pages, @users = paginate User.where(:status => 1) + # + def paginate(scope, options={}) + options = options.dup + finder_options = options.extract!( + :conditions, + :order, + :joins, + :include, + :select + ) + if scope.is_a?(Symbol) || finder_options.values.compact.any? + return deprecated_paginate(scope, finder_options, options) + end + + paginator = paginator(scope.count, options) + collection = scope.limit(paginator.per_page).offset(paginator.offset).to_a + + return paginator, collection + end + + def deprecated_paginate(arg, finder_options, options={}) + ActiveSupport::Deprecation.warn "#paginate with a Symbol and/or find options is depreceted and will be removed. Use a scope instead." + klass = arg.is_a?(Symbol) ? arg.to_s.classify.constantize : arg + scope = klass.scoped(finder_options) + paginate(scope, options) + end + + def paginator(item_count, options={}) + options.assert_valid_keys :parameter, :per_page + + page_param = options[:parameter] || :page + page = (params[page_param] || 1).to_i + per_page = options[:per_page] || per_page_option + Paginator.new(item_count, per_page, page, page_param) + end + + module Helper + include Redmine::I18n + # Renders the pagination links for the given paginator. + # + # Options: + # :per_page_links if set to false, the "Per page" links are not rendered + # + def pagination_links_full(*args) + page = "" + pagination_links_each(*args) do |text, parameters, options| + if block_given? + yield text, parameters, options + else + if args[2][:path].nil? + link_to text, params.merge(parameters), options + else + page = "&page=" + parameters[:page].to_s unless parameters[:page].nil? + link_to text, args[2][:path].to_s + page, options + end + end + end + end + + # Yields the given block with the text and parameters + # for each pagination link and returns a string that represents the links + # def pagination_links_each(paginator, count=nil, options={}, &block) + # options.assert_valid_keys :per_page_links + # + # per_page_links = options.delete(:per_page_links) + # per_page_links = false if count.nil? + # page_param = paginator.page_param + # + # html = '' + # if paginator.previous_page + # # \xc2\xab(utf-8) = « + # text = "\xc2\xab " + l(:label_previous) + # html << yield(text, {page_param => paginator.previous_page}, :class => 'previous') + ' ' + # end + # + # previous = nil + # paginator.linked_pages.each do |page| + # if previous && previous != page - 1 + # html << content_tag('span', '...', :class => 'spacer') + ' ' + # end + # if page == paginator.page + # html << content_tag('span', page.to_s, :class => 'current page') + # else + # html << yield(page.to_s, {page_param => page}, :class => 'page') + # end + # html << ' ' + # previous = page + # end + # + # if paginator.next_page + # # \xc2\xbb(utf-8) = » + # text = l(:label_next) + " \xc2\xbb" + # html << yield(text, {page_param => paginator.next_page}, :class => 'next') + ' ' + # end + # + # html << content_tag('span', "(#{paginator.first_item}-#{paginator.last_item}/#{paginator.item_count})", :class => 'items') + ' ' + # + # if per_page_links != false && links = per_page_links(paginator, &block) + # html << content_tag('span', links.to_s, :class => 'per-page') + # end + # + # html.html_safe + # end + #Added by Nie guanghui + #Designed for pagination. + def pagination_links_each(paginator, count=nil, options={}, &block) + #options.assert_valid_keys :per_page_links + + #per_page_links = options.delete(:per_page_links) + per_page_links = options[:per_page_links] + remote = options[:remote] ? options[:remote] : false + flag = options[:flag] ? options[:flag] : false + per_page_links = false if count.nil? + page_param = paginator.page_param + + html = '' + if paginator.previous_page + # \xc2\xab(utf-8) = « + if flag + text = l(:label_previous) + else + text = "\xc2\xab " + l(:label_previous) + end + html << '
  • ' << yield(text, {page_param => paginator.previous_page}, :class => 'previous c_blue', :remote => remote) << '
  • ' + ' ' + end + unless paginator.previous_page + if paginator.next_page + if flag + text = l(:label_previous) + else + text = "\xc2\xab " + l(:label_previous) + end + html << '
  • ' << yield(text, {page_param => paginator.previous_page}, :class => 'previous c_blue', :remote => remote) << '
  • ' + ' ' + end + end + + previous = nil + paginator.linked_pages.each do |page| + if previous && previous != page - 1 + if flag + html << '
  • ' << content_tag('a', '...', :class => 'c_blue') << '
  • ' + ' ' + else + html << '
  • ' << content_tag('span', '...', :class => 'spacer ') << '
  • ' + ' ' + end + end + if page == paginator.page + if flag + html << '
  • ' << content_tag('a', page.to_s, :class => 'current-page c_white') << '
  • ' + else + html << '
  • ' << content_tag('span', page.to_s, :class => 'current-page') << '
  • ' + end + else + html << '
  • ' << yield(page.to_s, {page_param => page}, :class => 'page c_blue', :remote => remote) << '
  • ' + end + html << ' ' + previous = page + end + + if paginator.next_page + if flag + text = l(:label_next) + else + text = l(:label_next) + " \xc2\xbb" + end + html << '
  • ' << yield(text, {page_param => paginator.next_page}, :class => 'next c_blue', :remote => remote) << '
  • ' + ' ' + end + + unless paginator.next_page + if paginator.previous_page + if flag + text = l(:label_next) + else + text = l(:label_next) + " \xc2\xbb" + end + html << "
  • " << yield(text, {page_param => paginator.next_page}, :class => 'next c_blue', :remote => remote) << "
  • " + ' ' + end + end + + # html << content_tag('span', "(#{paginator.first_item}-#{paginator.last_item}/#{paginator.item_count})", :class => 'items') + ' ' + # + # if per_page_links != false && links = per_page_links(paginator, &block) + # html << content_tag('span', links.to_s, :class => 'per-page') + # end + + html.html_safe + end + + # Renders the "Per page" links. + def per_page_links(paginator, &block) + values = per_page_options(paginator.per_page, paginator.item_count) + if values.any? + links = values.collect do |n| + if n == paginator.per_page + content_tag('span', n.to_s) + else + yield(n, :per_page => n, paginator.page_param => nil) + end + end + l(:label_display_per_page, links.join(', ')).html_safe + end + end + + def per_page_options(selected=nil, item_count=nil) + options = Setting.per_page_options_array + if item_count && options.any? + if item_count > options.first + max = options.detect {|value| value >= item_count} || item_count + else + max = item_count + end + options = options.select {|value| value <= max || value == selected} + end + if options.empty? || (options.size == 1 && options.first == selected) + [] + else + options + end + end + end + end +end