From bcd7951cc622fef9cca260aaa92c2c374e52e9c4 Mon Sep 17 00:00:00 2001 From: Matheus Agio Nerone <man13@inf.ufpr.br> Date: Wed, 18 Nov 2015 11:01:14 -0200 Subject: [PATCH] basic upload, todo: metadata Signed-off-by: Matheus Agio Nerone <man13@inf.ufpr.br> --- .../learning_objects_controller.rb | 43 +++++++++++-------- .../learning_object/publisher_relation.rb | 8 +++- app/views/learning_objects/_form.html.erb | 4 +- config/initializers/repositories/dspace.rb | 4 +- 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb index 71136e14..b538e97c 100644 --- a/app/controllers/learning_objects_controller.rb +++ b/app/controllers/learning_objects_controller.rb @@ -3,7 +3,6 @@ class LearningObjectsController < ApplicationController after_action :increment_learning_object_views, only: [:show] before_action :authenticate_user!, except: [:index, :show] before_action :set_complaint_messages, only: :show - before_action :login_on_dspace, only: :create # GET /learning_objects # GET /learning_objects.json @@ -14,7 +13,7 @@ class LearningObjectsController < ApplicationController # GET /learning_objects/1 # GET /learning_objects/1.json def show - @liked = learning_object_repository.liked?(current_user, @learning_object) if user_signed_in? + @liked = learning_object_repository.liked?(current_user, @learning_object) if user_signed_in? end # GET /learning_objects/new @@ -44,7 +43,7 @@ class LearningObjectsController < ApplicationController # trata o form do learning object lo = DSpaceRest::Item.new(args) dspace_keys = get_dspace_metadata_names("invert") - learning_object_params.each do |k,v| + params[:learning_object].each do |k,v| unless dspace_keys[k].nil? if v.kind_of?(Array) v.each do |item| @@ -56,25 +55,25 @@ class LearningObjectsController < ApplicationController end end response = repo.create_item_for(collection, lo) - subjects = [] - learning_object_params[:subjects].each do |subject| - subjects << subject_repository.find_by_name(subject) - end - file = learning_object_params[:file] - learning_object_params[:file] = nil + file = params[:learning_object][:file] repo = Dspace::Client.instance.repository.item_repository bitstream_response = repo.create_bitstream_for(response, file.tempfile.path, strategy) + subjects = [] + params[:learning_object][:subjects].each do |subject| + subjects << subject_repository.find_by_name(subject) + end + @learning_object = LearningObject.new(learning_object_params) + @learning_object.type = get_file_type file @learning_object.id_dspace = response.id @learning_object.subjects = subjects @learning_object.created_at = Time.now @learning_object.last_modified = Time.now @learning_object.publisher = current_user - @learning_object.metadata = lo.to_h[:metadata] - @learning_object.bitstreams = [] - @learning_object.bitstreams << bitstream_response.as_json + @learning_object.metadata = lo.to_h[:metadata].as_json.to_s.gsub! '=>', ':' + @learning_object.bitstreams = [bitstream_response.as_json] respond_to do |format| if learning_object_repository.create @learning_object @@ -145,6 +144,20 @@ class LearningObjectsController < ApplicationController private + def get_file_type(file) + type = file.content_type.split('/').first + case type + when 'video' + "VÃdeo" + when 'image' + "Imagem" + when 'audio' + "Ãudio" + else + "Outros" + end + end + def get_dspace_metadata_names(invert=nil) h = { "dc.title" => "name", @@ -173,10 +186,6 @@ class LearningObjectsController < ApplicationController h end - def login_on_dspace - Dspace::Client.instance.login 'admin@mecdb3.c3sl.ufpr.br', 'admin' - end - # Use callbacks to share common setup or constraints between actions. def set_learning_object @learning_object = learning_object_repository.find params[:id] @@ -184,7 +193,7 @@ class LearningObjectsController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def learning_object_params - params[:learning_object] + params[:learning_object].permit(:author, :name, :type, :description, :subjects, :school_level) end def increment_learning_object_views diff --git a/app/repositories/orient_db/learning_object/publisher_relation.rb b/app/repositories/orient_db/learning_object/publisher_relation.rb index e06d1728..7d6a181d 100644 --- a/app/repositories/orient_db/learning_object/publisher_relation.rb +++ b/app/repositories/orient_db/learning_object/publisher_relation.rb @@ -9,9 +9,13 @@ module OrientDb protected def execute - create_edge("PublishedBy", @learning_object.id, @learning_object.publisher.id) + if @learning_object.publisher.class.name == "User" + create_edge("PublishedBy", @learning_object.id, @learning_object.publisher.rid) + else + create_edge("PublishedBy", @learning_object.id, @learning_object.publisher.id) + end end end end -end \ No newline at end of file +end diff --git a/app/views/learning_objects/_form.html.erb b/app/views/learning_objects/_form.html.erb index 1fe44e65..f65564e7 100644 --- a/app/views/learning_objects/_form.html.erb +++ b/app/views/learning_objects/_form.html.erb @@ -28,8 +28,8 @@ <%= f.text_field :language %><br> <%= f.label :source, "Fonte" %> <%= f.text_field :source %><br> - <%= f.label :type, "Tipo de objeto" %> - <%= f.text_field :type %><br> + <!-- <%= f.label :type, "Tipo de objeto" %> + <%= f.text_field :type %><br> --> <%= f.label :license, "Licença"%> <%= f.text_field :license %><br> <%= f.label :copyright, "Detentor dos direitos autorais" %> diff --git a/config/initializers/repositories/dspace.rb b/config/initializers/repositories/dspace.rb index 48a75aab..1b6936f1 100644 --- a/config/initializers/repositories/dspace.rb +++ b/config/initializers/repositories/dspace.rb @@ -15,4 +15,6 @@ else config = dspace_configs.fetch(Rails.env) set_dspace_config config['host'], config['port'], config['rest_webapp_name'], config['solr_webapp_name'] -end \ No newline at end of file +end + +Dspace::Client.instance.login 'admin@mecdb3.c3sl.ufpr.br', 'admin' -- GitLab