diff --git a/main/inc/lib/PortfolioController.php b/main/inc/lib/PortfolioController.php
index 4f0ff9e5e3..78de08796f 100644
--- a/main/inc/lib/PortfolioController.php
+++ b/main/inc/lib/PortfolioController.php
@@ -1002,6 +1002,11 @@ class PortfolioController
{
global $interbreadcrumb;
+ HookPortfolioItemViewed::create()
+ ->setEventData(['portfolio' => $item])
+ ->notifyItemViewed()
+ ;
+
$form = $this->createCommentForm($item);
$commentsRepo = $this->em->getRepository(PortfolioComment::class);
@@ -2760,7 +2765,7 @@ class PortfolioController
get_lang('OriginallyPublishedAsXTitleByYUser'),
[
"{$origin->getTitle()}",
- $origin->getUser()->getCompleteName()
+ $origin->getUser()->getCompleteName(),
]
);
}
@@ -2773,7 +2778,7 @@ class PortfolioController
get_lang('OriginallyCommentedByXUserInYItem'),
[
$origin->getAuthor()->getCompleteName(),
- "{$origin->getItem()->getTitle()}"
+ "{$origin->getItem()->getTitle()}",
]
);
}
diff --git a/main/inc/lib/hook/HookPortfolioItemViewed.php b/main/inc/lib/hook/HookPortfolioItemViewed.php
new file mode 100644
index 0000000000..6a3122530a
--- /dev/null
+++ b/main/inc/lib/hook/HookPortfolioItemViewed.php
@@ -0,0 +1,19 @@
+observers as $observer) {
+ $observer->hookItemViewed($this);
+ }
+ }
+}
diff --git a/main/inc/lib/hook/interfaces/HookPortfolioItemViewedEventInterface.php b/main/inc/lib/hook/interfaces/HookPortfolioItemViewedEventInterface.php
new file mode 100644
index 0000000000..acaed500a1
--- /dev/null
+++ b/main/inc/lib/hook/interfaces/HookPortfolioItemViewedEventInterface.php
@@ -0,0 +1,8 @@
+getEventData()['portfolio'];
+
+ $statement = (new PortfolioItemViewed($item))->generate();
+
+ $this->saveSharedStatement($statement);
+ }
+}
diff --git a/plugin/xapi/src/ToolExperience/Statement/PortfolioItem.php b/plugin/xapi/src/ToolExperience/Statement/PortfolioItem.php
new file mode 100644
index 0000000000..bc8940eb92
--- /dev/null
+++ b/plugin/xapi/src/ToolExperience/Statement/PortfolioItem.php
@@ -0,0 +1,41 @@
+item = $item;
+ }
+
+ protected function generateContext(): Context
+ {
+ $context = parent::generateContext();
+
+ $category = $this->item->getCategory();
+
+ if ($category) {
+ $categoryActivity = new PortfolioCategory($category);
+
+ $contextActivities = $context
+ ->getContextActivities()
+ ->withAddedCategoryActivity(
+ $categoryActivity->generate()
+ )
+ ;
+
+ $context = $context->withContextActivities($contextActivities);
+ }
+
+ return $context;
+ }
+}
diff --git a/plugin/xapi/src/ToolExperience/Statement/PortfolioItemShared.php b/plugin/xapi/src/ToolExperience/Statement/PortfolioItemShared.php
index ec6d1eec79..cd2cc10ed3 100644
--- a/plugin/xapi/src/ToolExperience/Statement/PortfolioItemShared.php
+++ b/plugin/xapi/src/ToolExperience/Statement/PortfolioItemShared.php
@@ -4,12 +4,12 @@
namespace Chamilo\PluginBundle\XApi\ToolExperience\Statement;
-use Chamilo\CoreBundle\Entity\Portfolio as PortfolioEntity;
use Chamilo\CoreBundle\Entity\PortfolioAttachment;
-use Chamilo\PluginBundle\XApi\ToolExperience\Activity\PortfolioCategory as PortfolioCategoryActivity;
-use Chamilo\PluginBundle\XApi\ToolExperience\Activity\PortfolioItem as PortfolioItemActivity;
-use Chamilo\PluginBundle\XApi\ToolExperience\Actor\User as UserActor;
-use Chamilo\PluginBundle\XApi\ToolExperience\Verb\Shared as SharedVerb;
+use Chamilo\PluginBundle\XApi\ToolExperience\Activity\PortfolioItem;
+use Chamilo\PluginBundle\XApi\ToolExperience\Actor\User;
+use Chamilo\PluginBundle\XApi\ToolExperience\Statement\PortfolioItem as PortfolioItemStatement;
+use Chamilo\PluginBundle\XApi\ToolExperience\Verb\Shared;
+use Database;
use Xabbuh\XApi\Model\Statement;
/**
@@ -17,47 +17,24 @@ use Xabbuh\XApi\Model\Statement;
*
* @package Chamilo\PluginBundle\XApi\ToolExperience\Statement
*/
-class PortfolioItemShared extends BaseStatement
+class PortfolioItemShared extends PortfolioItemStatement
{
- /**
- * @var \Chamilo\CoreBundle\Entity\Portfolio
- */
- private $portfolioItem;
-
- public function __construct(PortfolioEntity $item)
- {
- $this->portfolioItem = $item;
- }
-
public function generate(): Statement
{
- $userActor = new UserActor(
- $this->portfolioItem->getUser()
- );
- $sharedVerb = new SharedVerb();
- $itemActivity = new PortfolioItemActivity($this->portfolioItem);
+ $itemAuthor = $this->item->getUser();
- $context = $this->generateContext();
-
- if ($this->portfolioItem->getCategory()) {
- $categoryActivity = new PortfolioCategoryActivity($this->portfolioItem->getCategory());
-
- $contextActivities = $context
- ->getContextActivities()
- ->withAddedCategoryActivity(
- $categoryActivity->generate()
- );
+ $userActor = new User($itemAuthor);
+ $sharedVerb = new Shared();
+ $itemActivity = new PortfolioItem($this->item);
- $context = $context->withContextActivities($contextActivities);
- }
+ $context = $this->generateContext();
- $em = \Database::getManager();
- $itemAttachments = $em->getRepository(PortfolioAttachment::class)->findFromItem($this->portfolioItem);
+ $itemAttachments = Database::getManager()
+ ->getRepository(PortfolioAttachment::class)
+ ->findFromItem($this->item)
+ ;
- $attachments = $this->generateAttachments(
- $itemAttachments,
- $this->portfolioItem->getUser()
- );
+ $attachments = $this->generateAttachments($itemAttachments, $itemAuthor);
return new Statement(
$this->generateStatementId('portfolio-item'),
@@ -66,7 +43,7 @@ class PortfolioItemShared extends BaseStatement
$itemActivity->generate(),
null,
null,
- $this->portfolioItem->getCreationDate(),
+ $this->item->getCreationDate(),
null,
$context,
$attachments
diff --git a/plugin/xapi/src/ToolExperience/Statement/PortfolioItemViewed.php b/plugin/xapi/src/ToolExperience/Statement/PortfolioItemViewed.php
new file mode 100644
index 0000000000..40ba56d6ef
--- /dev/null
+++ b/plugin/xapi/src/ToolExperience/Statement/PortfolioItemViewed.php
@@ -0,0 +1,45 @@
+item->getUser();
+
+ $itemAttachments = Database::getManager()
+ ->getRepository(PortfolioAttachment::class)
+ ->findFromItem($this->item)
+ ;
+
+ $actor = new User($itemAuthor);
+ $verb = new Viewed();
+ $object = new PortfolioItem($this->item);
+ $context = $this->generateContext();
+ $attachments = $this->generateAttachments($itemAttachments, $itemAuthor);
+
+ return new Statement(
+ $this->generateStatementId('portfolio-item'),
+ $actor->generate(),
+ $verb->generate(),
+ $object->generate(),
+ null,
+ null,
+ $this->item->getCreationDate(),
+ null,
+ $context,
+ $attachments
+ );
+ }
+}
diff --git a/plugin/xapi/src/XApiPlugin.php b/plugin/xapi/src/XApiPlugin.php
index 86670d6e20..ac7172ad17 100644
--- a/plugin/xapi/src/XApiPlugin.php
+++ b/plugin/xapi/src/XApiPlugin.php
@@ -220,6 +220,7 @@ class XApiPlugin extends Plugin implements HookPluginInterface
$quizEndHook = XApiQuizEndHookObserver::create();
$portfolioItemAddedHook = XApiPortfolioItemAddedHookObserver::create();
$portfolioItemCommentedHook = XApiPortfolioItemCommentedHookObserver::create();
+ $portfolioItemViewedHook = XApiPortfolioItemViewedHookObserver::create();
$learningPathItemViewedEvent = HookLearningPathItemViewed::create();
$learningPathEndEvent = HookLearningPathEnd::create();
@@ -227,6 +228,7 @@ class XApiPlugin extends Plugin implements HookPluginInterface
$quizEndEvent = HookQuizEnd::create();
$portfolioItemAddedEvent = HookPortfolioItemAdded::create();
$portfolioItemCommentedEvent = HookPortfolioItemCommented::create();
+ $portfolioItemViewedEvent = HookPortfolioItemViewed::create();
if ('true' === $this->get(self::SETTING_LRS_LP_ITEM_ACTIVE)) {
$learningPathItemViewedEvent->attach($learningPathItemViewedHook);
@@ -255,9 +257,11 @@ class XApiPlugin extends Plugin implements HookPluginInterface
if ('true' === $this->get(self::SETTING_LRS_PORTFOLIO_ACTIVE)) {
$portfolioItemAddedEvent->attach($portfolioItemAddedHook);
$portfolioItemCommentedEvent->attach($portfolioItemCommentedHook);
+ $portfolioItemViewedEvent->attach($portfolioItemViewedHook);
} else {
$portfolioItemAddedEvent->detach($portfolioItemAddedHook);
- $portfolioItemCommentedEvent->attach($portfolioItemCommentedHook);
+ $portfolioItemCommentedEvent->detach($portfolioItemCommentedHook);
+ $portfolioItemViewedEvent->detach($portfolioItemViewedHook);
}
return $this;