Newer
Older
Mauricio Giacomini Girardello
committed
require 'uri'
class V1::LearningObjectsController < ApplicationController
include ::SociableController
include ::TaggableController
include ::DeletedObjectsController
include ::HighlightsController
Mauricio Giacomini Girardello
committed
before_action :authenticate_user!, except: [:create, :index, :show]
before_action :set_learning_object, only: [:show, :update, :destroy]
before_action :set_new_learning_object, only: :index
before_action :authorize!, except: [:create, :tagging, :untagging]
Mauricio Giacomini Girardello
committed
def index
learning_objects = paginate LearningObject.includes(:tags, :publisher, :language, :license, :subjects, :educational_stages, :reviews)
serializer = params[:obaa].nil? ? LearningObjectSerializer : LearningObjectObaaSerializer
render json: learning_objects, each_serializer: serializer
Mauricio Giacomini Girardello
committed
end
# GET /learning_objects/1
# GET /learning_objects/1.json
def show

Israel Barreto Sant'Anna
committed
serializer = params[:obaa].nil? ? LearningObjectSerializer : LearningObjectObaaSerializer
render json: @learning_object, serializer: serializer
Mauricio Giacomini Girardello
committed
end
# POST /learning_objects
# POST /learning_objects.json
def create
learning_object = LearningObject.new(learning_object_params)
Mauricio Giacomini Girardello
committed
publisher = LearningObjectPublisher.new(DspaceService.create_client)
if publisher.create_draft(learning_object, current_user)
learning_object_associations(learning_object)
render json: learning_object, status: :created
Mauricio Giacomini Girardello
committed
else
render json: learning_object.errors, status: :unprocessable_entity
Mauricio Giacomini Girardello
committed
end
end
# PATCH/PUT /learning_objects/1
# PATCH/PUT /learning_objects/1.json
def update
if @learning_object.update(learning_object_params)
publisher = LearningObjectPublisher.new(DspaceService.create_client)
publisher.update_dspace(@learning_object)
Mauricio Giacomini Girardello
committed
render json: @learning_object, status: :ok
else
render json: @learning_object.errors, status: :unprocessable_entity
end
end
# DELETE /learning_objects/1
# DELETE /learning_objects/1.json
def destroy
LearningObject.destroy(@learning_object)
Mauricio Giacomini Girardello
committed
end
private
def deleted_resource; LearningObject; end
def highlights_resource; LearningObject; end
def sociable; set_learning_object; end
def taggable; set_learning_object; end
Mauricio Giacomini Girardello
committed
# Use callbacks to share common setup or constraints between actions.
def set_learning_object
@learning_object ||= LearningObject.unscoped.find(params[:id])
end
def set_new_learning_object
@learning_object ||= LearningObject.new
end
Mauricio Giacomini Girardello
committed
# Never trust parameters from the scary internet, only allow the white list through.
def learning_object_params
return nil if params[:learning_object].nil?
params[:learning_object].permit(:author, :name, :object_type_id, :description, :license_id, :thumbnail, :software, :language_id, :link)
end
def extra_params
return {} if params[:learning_object].nil?
params[:learning_object].permit(subjects: [], educational_stages: [], tags: [:name])
def learning_object_associations(learning_object)
current_user.tag(learning_object, with: extra_params[:tags].map { |t| t['name'] }) unless extra_params[:tags].nil?
learning_object.add_subjects(ids: extra_params[:subjects]) unless extra_params[:subjects].nil?
learning_object.add_educational_stages(ids: extra_params[:educational_stages]) unless extra_params[:educational_stages].nil?
Mauricio Giacomini Girardello
committed
end
def authorize!
authorize @learning_object
end
end