From f4454b0494a34c91c964b91e183418068d708f75 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Mon, 19 Dec 2022 15:50:40 -0500 Subject: [PATCH] Plugin: XAPI: Add statement when portfolio items/comments are edited - refs BT#18201 --- main/inc/lib/PortfolioController.php | 10 +++++ .../lib/hook/HookPortfolioCommentEdited.php | 19 +++++++++ main/inc/lib/hook/HookPortfolioItemEdited.php | 19 +++++++++ ...okPortfolioCommentEditedEventInterface.php | 8 ++++ ...ortfolioCommentEditedObserverInterface.php | 8 ++++ .../HookPortfolioItemEditedEventInterface.php | 8 ++++ ...okPortfolioItemEditedObserverInterface.php | 8 ++++ ...XApiPortfolioCommentEditedHookObserver.php | 19 +++++++++ .../XApiPortfolioItemEditedHookObserver.php | 19 +++++++++ .../Statement/PortfolioCommentEdited.php | 39 +++++++++++++++++++ .../Statement/PortfolioItemEdited.php | 39 +++++++++++++++++++ .../xapi/src/ToolExperience/Verb/Edited.php | 16 ++++++++ plugin/xapi/src/XApiPlugin.php | 12 ++++++ 13 files changed, 224 insertions(+) create mode 100644 main/inc/lib/hook/HookPortfolioCommentEdited.php create mode 100644 main/inc/lib/hook/HookPortfolioItemEdited.php create mode 100644 main/inc/lib/hook/interfaces/HookPortfolioCommentEditedEventInterface.php create mode 100644 main/inc/lib/hook/interfaces/HookPortfolioCommentEditedObserverInterface.php create mode 100644 main/inc/lib/hook/interfaces/HookPortfolioItemEditedEventInterface.php create mode 100644 main/inc/lib/hook/interfaces/HookPortfolioItemEditedObserverInterface.php create mode 100644 plugin/xapi/src/Hook/XApiPortfolioCommentEditedHookObserver.php create mode 100644 plugin/xapi/src/Hook/XApiPortfolioItemEditedHookObserver.php create mode 100644 plugin/xapi/src/ToolExperience/Statement/PortfolioCommentEdited.php create mode 100644 plugin/xapi/src/ToolExperience/Statement/PortfolioItemEdited.php create mode 100644 plugin/xapi/src/ToolExperience/Verb/Edited.php diff --git a/main/inc/lib/PortfolioController.php b/main/inc/lib/PortfolioController.php index 41c0b08d87..985e4672af 100644 --- a/main/inc/lib/PortfolioController.php +++ b/main/inc/lib/PortfolioController.php @@ -830,6 +830,11 @@ class PortfolioController $this->em->persist($item); $this->em->flush(); + HookPortfolioItemEdited::create() + ->setEventData(['item' => $item]) + ->notifyItemEdited() + ; + $this->processAttachments( $form, $item->getUser(), @@ -2949,6 +2954,11 @@ class PortfolioController PortfolioAttachment::TYPE_COMMENT ); + HookPortfolioCommentEdited::create() + ->setEventData(['comment' => $comment]) + ->notifyCommentEdited() + ; + Display::addFlash( Display::return_message(get_lang('ItemUpdated'), 'success') ); diff --git a/main/inc/lib/hook/HookPortfolioCommentEdited.php b/main/inc/lib/hook/HookPortfolioCommentEdited.php new file mode 100644 index 0000000000..09f01db649 --- /dev/null +++ b/main/inc/lib/hook/HookPortfolioCommentEdited.php @@ -0,0 +1,19 @@ +observers as $observer) { + $observer->hookCommentEdited($this); + } + } +} diff --git a/main/inc/lib/hook/HookPortfolioItemEdited.php b/main/inc/lib/hook/HookPortfolioItemEdited.php new file mode 100644 index 0000000000..63700631b0 --- /dev/null +++ b/main/inc/lib/hook/HookPortfolioItemEdited.php @@ -0,0 +1,19 @@ +observers as $observer) { + $observer->hookItemEdited($this); + } + } +} diff --git a/main/inc/lib/hook/interfaces/HookPortfolioCommentEditedEventInterface.php b/main/inc/lib/hook/interfaces/HookPortfolioCommentEditedEventInterface.php new file mode 100644 index 0000000000..ec51b06a89 --- /dev/null +++ b/main/inc/lib/hook/interfaces/HookPortfolioCommentEditedEventInterface.php @@ -0,0 +1,8 @@ +getEventData()['comment']; + + $statement = (new PortfolioCommentEdited($comment))->generate(); + + $this->saveSharedStatement($statement); + } +} diff --git a/plugin/xapi/src/Hook/XApiPortfolioItemEditedHookObserver.php b/plugin/xapi/src/Hook/XApiPortfolioItemEditedHookObserver.php new file mode 100644 index 0000000000..a5535c2a27 --- /dev/null +++ b/plugin/xapi/src/Hook/XApiPortfolioItemEditedHookObserver.php @@ -0,0 +1,19 @@ +getEventData()['item']; + + $statement = (new PortfolioItemEdited($item))->generate(); + + $this->saveSharedStatement($statement); + } +} diff --git a/plugin/xapi/src/ToolExperience/Statement/PortfolioCommentEdited.php b/plugin/xapi/src/ToolExperience/Statement/PortfolioCommentEdited.php new file mode 100644 index 0000000000..5c2e2076e4 --- /dev/null +++ b/plugin/xapi/src/ToolExperience/Statement/PortfolioCommentEdited.php @@ -0,0 +1,39 @@ +comment); + $context = $this->generateContext(); + $attachements = $this->generateAttachmentsForComment($this->comment); + + return new Statement( + $this->generateStatementId('portfolio-comment'), + $actor->generate(), + $verb->generate(), + $object->generate(), + null, + null, + api_get_utc_datetime(null, false, true), + null, + $context, + $attachements + ); + } +} diff --git a/plugin/xapi/src/ToolExperience/Statement/PortfolioItemEdited.php b/plugin/xapi/src/ToolExperience/Statement/PortfolioItemEdited.php new file mode 100644 index 0000000000..f8ed7ae2e0 --- /dev/null +++ b/plugin/xapi/src/ToolExperience/Statement/PortfolioItemEdited.php @@ -0,0 +1,39 @@ +item); + $context = $this->generateContext(); + $attachements = $this->generateAttachmentsForItem($this->item); + + return new Statement( + $this->generateStatementId('portfolio-item'), + $actor->generate(), + $verb->generate(), + $object->generate(), + null, + null, + api_get_utc_datetime(null, false, true), + null, + $context, + $attachements + ); + } +} diff --git a/plugin/xapi/src/ToolExperience/Verb/Edited.php b/plugin/xapi/src/ToolExperience/Verb/Edited.php new file mode 100644 index 0000000000..2cb3f89f38 --- /dev/null +++ b/plugin/xapi/src/ToolExperience/Verb/Edited.php @@ -0,0 +1,16 @@ +detach($learningPathItemViewedHook); HookLearningPathEnd::create()->detach($learningPathEndHook); @@ -164,6 +166,8 @@ class XApiPlugin extends Plugin implements HookPluginInterface HookPortfolioDownloaded::create()->detach($portfolioDownloaded); HookPortfolioItemScored::create()->detach($portfolioItemScoredHook); HookPortfolioCommentScored::create()->detach($portfolioCommentedScoredHook); + HookPortfolioItemEdited::create()->detach($portfolioItemEditedHook); + HookPortfolioCommentEdited::create()->detach($portfolioCommentEditedHook); return 1; } @@ -253,6 +257,8 @@ class XApiPlugin extends Plugin implements HookPluginInterface $portfolioDownloadedHook = XApiPortfolioDownloadedHookObserver::create(); $portfolioItemScoredHook = XApiPortfolioItemScoredHookObserver::create(); $portfolioCommentScoredHook = XApiPortfolioCommentScoredHookObserver::create(); + $portfolioItemEditedHook = XApiPortfolioItemEditedHookObserver::create(); + $portfolioCommentEditedHook = XApiPortfolioCommentEditedHookObserver::create(); $learningPathItemViewedEvent = HookLearningPathItemViewed::create(); $learningPathEndEvent = HookLearningPathEnd::create(); @@ -265,6 +271,8 @@ class XApiPlugin extends Plugin implements HookPluginInterface $portfolioDownloadedEvent = HookPortfolioDownloaded::create(); $portfolioItemScoredEvent = HookPortfolioItemScored::create(); $portfolioCommentScoredEvent = HookPortfolioCommentScored::create(); + $portfolioItemEditedEvent = HookPortfolioItemEdited::create(); + $portfolioCommentEditedEvent = HookPortfolioCommentEdited::create(); if ('true' === $this->get(self::SETTING_LRS_LP_ITEM_ACTIVE)) { $learningPathItemViewedEvent->attach($learningPathItemViewedHook); @@ -298,6 +306,8 @@ class XApiPlugin extends Plugin implements HookPluginInterface $portfolioDownloadedEvent->attach($portfolioDownloadedHook); $portfolioItemScoredEvent->attach($portfolioItemScoredHook); $portfolioCommentScoredEvent->attach($portfolioCommentScoredHook); + $portfolioItemEditedEvent->attach($portfolioItemEditedHook); + $portfolioCommentEditedEvent->attach($portfolioCommentEditedHook); } else { $portfolioItemAddedEvent->detach($portfolioItemAddedHook); $portfolioItemCommentedEvent->detach($portfolioItemCommentedHook); @@ -306,6 +316,8 @@ class XApiPlugin extends Plugin implements HookPluginInterface $portfolioDownloadedEvent->detach($portfolioDownloadedHook); $portfolioItemScoredEvent->detach($portfolioItemScoredHook); $portfolioCommentScoredEvent->detach($portfolioCommentScoredHook); + $portfolioItemEditedEvent->detach($portfolioItemEditedHook); + $portfolioCommentEditedEvent->detach($portfolioCommentEditedHook); } return $this;