Forked from
PortalMEC / portalmec
1224 commits behind the upstream repository.
-
Mateus Rambo Strey authored
add remove collection item See merge request !314
Mateus Rambo Strey authoredadd remove collection item See merge request !314
learning_objects_controller.rb 3.30 KiB
require 'uri'
class V1::LearningObjectsController < ApplicationController
include ::SociableController
include ::TaggableController
include ::Paginator
include ::DeletedObjectsController
include ::HighlightsController
before_action :authenticate_user!, except: [:create, :index, :show]
before_action :set_learning_object, only: [:show, :update, :destroy, :authorize!]
before_action :authorize!, except: [:create, :tagging, :untagging]
def index
learning_objects = paginate LearningObject.includes(:tags, :publisher, :language, :license)
serializer = params[:obaa].nil? ? LearningObjectSerializer : LearningObjectObaaSerializer
render json: learning_objects, each_serializer: serializer
end
# GET /learning_objects/1
# GET /learning_objects/1.json
def show
serializer = params[:obaa].nil? ? LearningObjectSerializer : LearningObjectObaaSerializer
render json: @learning_object, serializer: serializer
end
# POST /learning_objects
# POST /learning_objects.json
def create
learning_object = LearningObject.new(learning_object_params)
authorize learning_object
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
else
render json: learning_object.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /learning_objects/1
# PATCH/PUT /learning_objects/1.json
def update
if @learning_object.update(learning_object_params)
learning_object_associations(@learning_object)
publisher = LearningObjectPublisher.new(DspaceService.create_client)
publisher.update_dspace(@learning_object)
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)
render status: :ok
end
private
def deleted_resource; LearningObject; end
def highlights_resource; LearningObject; end
def sociable; set_learning_object; end
def taggable; set_learning_object; end
# Use callbacks to share common setup or constraints between actions.
def set_learning_object
@learning_object ||= LearningObject.unscoped.find(params[:id])
end
# 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])
end
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?
end
def authorize!
authorize @learning_object
end
end