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