Mercurial > hg > soundsoftware-site
changeset 1441:8d721cac2925 biblio_alt_search_auth
Addresses Bug #763 - patched the User class adding a new scope (name_like), that doesn't use the email address to search for a user.
author | luisf <luis.figueira@eecs.qmul.ac.uk> |
---|---|
date | Fri, 11 Oct 2013 13:49:02 +0100 |
parents | ee598c21c239 |
children | 23b4cba01fc1 497ec7118440 |
files | plugins/redmine_bibliography/app/controllers/publications_controller.rb plugins/redmine_bibliography/lib/bibliography/user_author_patch.rb |
diffstat | 2 files changed, 25 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/redmine_bibliography/app/controllers/publications_controller.rb Thu Oct 10 19:42:43 2013 +0100 +++ b/plugins/redmine_bibliography/app/controllers/publications_controller.rb Fri Oct 11 13:49:02 2013 +0100 @@ -203,7 +203,8 @@ # todo: make sure query works with both pgres and mysql ~lf.20131010 authors_list = Author.joins(:authorships).where("LOWER(authorships.name_on_paper) LIKE LOWER(?)", "%#{params[:term]}%").uniq - users_list = User.active.like(params[:term]).find(:all, :limit => 100) + # name_like scope, defined in lib/user_author patch + users_list = User.active.name_like(params[:term]).find(:all, :limit => 100) logger.debug "Query for \"#{params[:term]}\" returned \"#{authors_list.size}\" authors and \"#{users_list.size}\" users"
--- a/plugins/redmine_bibliography/lib/bibliography/user_author_patch.rb Thu Oct 10 19:42:43 2013 +0100 +++ b/plugins/redmine_bibliography/lib/bibliography/user_author_patch.rb Fri Oct 11 13:49:02 2013 +0100 @@ -4,15 +4,34 @@ module UserAuthorPatch def self.included(base) base.send(:include, InstanceMethods) - extend ClassMethods + + base.class_eval do + # adapted from the app/models/principals_model.rb + # to remove the email address from the search + scope :name_like, lambda {|q| + q = q.to_s + if q.blank? + where({}) + else + pattern = "%#{q}%" + sql = %w(login firstname lastname).map {|column| "LOWER(#{ table_name}. #{column}) LIKE LOWER(:p)"}.join(" OR ") + params = {:p => pattern} + if q =~ /^(.+)\s+(.+)$/ + a, b = "#{$1}%", "#{$2}%" + sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:a) AND LOWER (#{table_name}.lastname) LIKE LOWER(:b))" + sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:b) AND LOWER (#{table_name}.lastname) LIKE LOWER(:a))" + params.merge!(:a => a, :b => b) + end + where(sql, params) + end + } + end #base.class_eval end #self.included - module ClassMethods - end - module InstanceMethods + # todo: deprecated? ~lf.20131011 def institution unless self.ssamr_user_detail.nil? institution_name = self.ssamr_user_detail.institution_name