diff --git a/app/controllers/v1/learning_objects_controller.rb b/app/controllers/v1/learning_objects_controller.rb index b8e8acfb1c2ebb101b19b30ef4527698ec2fb2e0..bfed4f10705d4dac7e5f2ec4342f434a8a0a086a 100644 --- a/app/controllers/v1/learning_objects_controller.rb +++ b/app/controllers/v1/learning_objects_controller.rb @@ -78,7 +78,7 @@ class V1::LearningObjectsController < ApplicationController change_object_type_id = true end if @learning_object.update(learning_object_params) - learning_object_associations(@learning_object, change_object_type_id) + update_learning_object_associations(@learning_object, change_object_type_id) publisher = LearningObjectPublisher.new(DspaceService.create_client) publisher.update_dspace(@learning_object) @@ -160,6 +160,16 @@ class V1::LearningObjectsController < ApplicationController end end + def update_learning_object_associations(learning_object, change_object_type_id=false) + current_user.update_tags(learning_object, with: extra_params[:tags].map { |t| t['name'] }) unless extra_params[:tags].nil? + learning_object.update_subjects(ids: extra_params[:subjects]) unless extra_params[:subjects].nil? + learning_object.update_educational_stages(ids: extra_params[:educational_stages]) unless extra_params[:educational_stages].nil? + + if change_object_type_id + learning_object.link = nil + end + end + def authorize! authorize @learning_object end diff --git a/app/models/concerns/stageable.rb b/app/models/concerns/stageable.rb index f6acd144a06106afa8583c0ae4d5d6853db26ab9..11c76968e9485d1bafd64e37eb5c5ac0a37aa9b6 100644 --- a/app/models/concerns/stageable.rb +++ b/app/models/concerns/stageable.rb @@ -45,4 +45,11 @@ module Stageable StageRelation.where(educational_stage: educational_stage, stageable: self).destroy_all end end + + def update_educational_stages(ids: []) + stageable = self + old_ids = stageable.educational_stages.map {|es| es.id } + add_educational_stages(ids: ids - old_ids) + remove_educational_stages(ids: old_ids - ids) + end end diff --git a/app/models/concerns/subjectable.rb b/app/models/concerns/subjectable.rb index c18c23290924d0d33d32192fcd3e3072b8412e62..58b37ca250fbb340f1ae25e9711496bcc6d601a9 100644 --- a/app/models/concerns/subjectable.rb +++ b/app/models/concerns/subjectable.rb @@ -45,4 +45,11 @@ module Subjectable SubjectRelation.where(subject: subject, subjectable: self).destroy_all end end + + def update_subjects(ids: []) + subjectable = self + old_ids = subjectable.subjects.map { |su| su.id } + add_subjects(ids: ids - old_ids) + remove_subjects(ids: old_ids - ids) + end end diff --git a/app/models/concerns/tagger.rb b/app/models/concerns/tagger.rb index 3127a067369d7ecd4bb9836c659e515e1790b6ae..6d9d3735a23ce7e10f35e9512217f08d684806f5 100644 --- a/app/models/concerns/tagger.rb +++ b/app/models/concerns/tagger.rb @@ -45,4 +45,10 @@ module Tagger Tagging.where(tagger: self, tag: tag, taggable: taggable).destroy_all end end + + def update_tags(taggable, with: []) + old_tags = taggable.tags.map { |t| t.name } + tag(taggable, with: with - old_tags) + untag(taggable, with: old_tags - with) + end end