diff --git a/app/assets/javascripts/application/autocomplete.js b/app/assets/javascripts/application/autocomplete.js index 3f8ef4723bcf61fac02b1415f67b87af70f4aa81..916308ff14e66d624ff82f32d0e6a014686baa1b 100644 --- a/app/assets/javascripts/application/autocomplete.js +++ b/app/assets/javascripts/application/autocomplete.js @@ -1,16 +1,24 @@ $(document).ready(function() { - $('#search input[name=query]').autocomplete({ - minLength: 3, - source: function (request, response) { - $.ajax({ - url: "/autocomplete", - data: { query: request.term, search_class: $('select[name="search_class"]').val()}, - dataType: "json", - success: response, - error: function () { - response([]); - } - }); - } - }); + $('#search input[name=query]').autocomplete({ + minLength: 3, + source: function (request, response) { + $.ajax({ + url: "/autocomplete", + data: { query: request.term, search_class: $('select[name="search_class"]').val()}, + dataType: "json", + success: response, + error: function () { + response([]); + } + }); + }, + select: function(event, ui) { + window.location.href = ui.item.url; + } + }).data("uiAutocomplete")._renderItem = function(ul, item) { + return $("<li></li>") + .append("<img class='autocomplete' src='" + item.thumbnail + "'>") + .append("<a>"+ item.name +"</a>" ) + .appendTo(ul); + }; }); diff --git a/app/assets/stylesheets/application/search.scss b/app/assets/stylesheets/application/search.scss index 454ef0a722430e915d11f6eb59ff17c3548e9364..25c956f57d11948fc789e2751467998b794e2666 100644 --- a/app/assets/stylesheets/application/search.scss +++ b/app/assets/stylesheets/application/search.scss @@ -2,6 +2,13 @@ background-color:green; } +.autocomplete { + width: 56px; + height: 32px; + border: 0; + margin-right: 8px; +} + .search-sidebar { margin-top: 40px; display: none; diff --git a/app/controllers/management/complaints_controller.rb b/app/controllers/management/complaints_controller.rb index cbfeefcd732eb8db0361ccb6debf23e79857e9c5..da3a5ba121945bd27310bbdac0c32ee39e646e4a 100644 --- a/app/controllers/management/complaints_controller.rb +++ b/app/controllers/management/complaints_controller.rb @@ -1,7 +1,7 @@ class Management::ComplaintsController < ManagementController before_action :set_complaint, only: :destroy def index - @complaints = Complaint.all + @complaints = Complaint.includes(:complaint_reason, :complaintable, :user) @date = params[:period] @date_limit = case @date.to_i diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index bc28a13207a36dea813cc6971aa23c551b5608a1..c4d440da9d34846f709ee52d9c8e3f84655b7e88 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -1,5 +1,7 @@ class SearchController < ApplicationController + include LearningObjectsHelper + def index @types = LearningObject.object_types @@ -18,9 +20,9 @@ class SearchController < ApplicationController when "LearningObject" @result = LearningObject.search params[:query], where: where_hash(params), order: lo_order_hash(params), page: params[:page] || 1, per_page: 10 when "Collection" - @result = Collection.search params[:query], where: {privacy: "public"}, order: col_order_hash(params), page: params[:page] + @result = Collection.search params[:query], where: {privacy: "public"}, order: col_order_hash(params), page: params[:page] || 1, per_page: 10 when "User" - @result = User.search params[:query], order: user_order_hash(params), page: params[:page] + @result = User.search params[:query], order: user_order_hash(params), page: params[:page] || 1, per_page: 10 else raise "Wrong search class parameter" end @@ -29,32 +31,52 @@ class SearchController < ApplicationController end def autocomplete + response = [] case params[:search_class] when "LearningObject" - render json: LearningObject.search(params[:query], { + los = LearningObject.search(params[:query], { fields: ['name^5', 'description', 'author'], limit: 10, - load: false, misspellings: { below: 5 } - }).map(&:name) + }) + los.each do |lo| + hash = {} + hash["name"] = lo.name + hash["thumbnail"] = "/assets/"+learning_object_thumbnail(lo) + hash["url"] = url_for([lo, :only_path => false]) + response << hash + end when "Collection" - render json: Collection.search(params[:query], { + cols = Collection.search(params[:query], { where: {privacy: "public"}, fields: ['name^5', 'description', 'owner'], limit: 10, - load: false, misspellings: { below: 5 } - }).map(&:name) + }) + cols.each do |col| + hash = {} + hash["name"] = col.name + hash["thumbnail"] = "/assets/icons/collection" + hash["url"] = url_for([col, :only_path => false]) + response << hash + end when "User" - render json: User.search(params[:query], { + users = User.search(params[:query], { fields: ['name'], limit: 10, - load: false, misspellings: { below: 5 } - }).map(&:name) + }) + users.each do |user| + hash = {} + hash["name"] = user.name + hash["thumbnail"] = user.avatar.url(:thumb) + hash["url"] = url_for([user, :only_path => false]) + response << hash + end else raise "Wrong search class parameter" end + render json: response end private diff --git a/app/helpers/learning_objects_helper.rb b/app/helpers/learning_objects_helper.rb index 391b3e7512b7c99e723391e98391d32e1c3c5cc0..4dfa144645e250f21132b62d805478ab5a3faa95 100644 --- a/app/helpers/learning_objects_helper.rb +++ b/app/helpers/learning_objects_helper.rb @@ -9,7 +9,7 @@ module LearningObjectsHelper when 'PDF' then "<iframe src=\"/pdfjs/web/viewer.html?file=#{learning_object.retrieve_link }\" style=\"border: 0 \" width=\"125%\" height=\"280\" frameborder=\"0\" scrolling=\"no\"></iframe>".html_safe else - learning_object_thumbnail learning_object, "large" + image_tag learning_object_thumbnail(learning_object, "large"), alt: learning_object_title(learning_object), class: "thumbnail" end end @@ -44,7 +44,7 @@ module LearningObjectsHelper else thumbnail = learning_object.thumbnail end - image_tag thumbnail, alt: learning_object_title(learning_object), class: "thumbnail" + thumbnail end def learning_object_title(learning_object) diff --git a/app/models/learning_object.rb b/app/models/learning_object.rb index 43517dfcd1f84b0981546fc419f9929f381b3ca2..d46c184a6df0d945d822a919ccc1b53a4cb8521e 100644 --- a/app/models/learning_object.rb +++ b/app/models/learning_object.rb @@ -9,7 +9,7 @@ class LearningObject < ActiveRecord::Base has_many :collection_items, as: :collectionable has_many :collections, through: :collection_items has_many :complaints - has_many :attachments, class_name: 'LearningObject::Attachment', dependent: :destroy + has_many :attachments, class_name: 'LearningObject::Attachment', dependent: :destroy, autosave: true # autosave to allow import belongs_to :publisher, polymorphic: true belongs_to :language diff --git a/app/services/dspace/learning_object_importer.rb b/app/services/dspace/learning_object_importer.rb index b1bcb5942fd75c41a82c73e24771ab3a66254348..a5d20a8cadc9e6449c53fec3ab8562b0342e1d33 100644 --- a/app/services/dspace/learning_object_importer.rb +++ b/app/services/dspace/learning_object_importer.rb @@ -5,14 +5,24 @@ class Dspace::LearningObjectImporter end def import + items = [] + @items.each do |item| next if item_exists? item - learning_object = LearningObjectBuilder.build_from_dspace item - create_attachments learning_object, item.bit_streams if learning_object.save + learning_object = LearningObjectBuilder.build_from_dspace(item) + + next if learning_object.blank? + + create_attachments(learning_object, item.bit_streams) + + items << learning_object yield(learning_object) if block_given? end + + LearningObject.import items, recursive: true + end private @@ -20,7 +30,7 @@ class Dspace::LearningObjectImporter def create_attachments(learning_object, bitstreams) bitstreams = JSON.parse bitstreams if bitstreams.class == String bitstreams.each do |bitstream| - learning_object.attachments.create ::Dspace::AttachmentMapper.call(bitstream) + learning_object.attachments.new ::Dspace::AttachmentMapper.call(bitstream) end end diff --git a/app/views/learning_objects/_learning_object_horizontal.erb b/app/views/learning_objects/_learning_object_horizontal.erb index b4b8f123dbd917baf50a748c4d743292a728fe69..6538596f77807cc636867b04e0d45c400a518539 100644 --- a/app/views/learning_objects/_learning_object_horizontal.erb +++ b/app/views/learning_objects/_learning_object_horizontal.erb @@ -4,7 +4,7 @@ <!-- <div class="col-md-5"> --> <div class="learning-object-thumbnail"> <%= link_to link do - learning_object_thumbnail learning_object + image_tag learning_object_thumbnail(learning_object), alt: learning_object_title(learning_object), class: "thumbnail" end %> <% if user_signed_in? %> diff --git a/app/views/learning_objects/_learning_object_vertical.erb b/app/views/learning_objects/_learning_object_vertical.erb index 58aada1502d2ae275eced9af1e1f714b09abab78..0e22d59fb5bad7cd65ea3d632fdd7f209ffac1f6 100644 --- a/app/views/learning_objects/_learning_object_vertical.erb +++ b/app/views/learning_objects/_learning_object_vertical.erb @@ -2,7 +2,7 @@ <div class="panel"> <div class="learning-object-thumbnail"> <%= link_to learning_object_path(id: learning_object.id) do - learning_object_thumbnail learning_object + image_tag learning_object_thumbnail(learning_object), alt: learning_object_title(learning_object), class: "thumbnail" end %> <% if user_signed_in? %> <%= render 'learning_objects/actions_buttons', learning_object: learning_object %> diff --git a/lib/tasks/dspace.rake b/lib/tasks/dspace.rake index f43eb6d64a8ddc364e00ea83b7bd2de832174e86..fbbd55194009fc82f8cef93d5ac89d680b83ac38 100644 --- a/lib/tasks/dspace.rake +++ b/lib/tasks/dspace.rake @@ -11,7 +11,7 @@ namespace :dspace do logger.level = Log::DatabaseLogger::CREATE # Quantity of items fetched on each iteration - limit = 1000 + limit = 500 # Start point from where items will be fetched offset = 0 @@ -48,7 +48,7 @@ namespace :dspace do # Initializes new LearningObjects # and saves them on LearningObjects's repository importer = Dspace::LearningObjectImporter.new(dspace_items) - importer.import { |learning_object| logger.create "Imported: #{learning_object.id_dspace} -> #{learning_object.id}" } + importer.import end end logger.close