Plugin: XAPI: Add statement when user highlights the portfolio item - refs BT#18201

pull/4501/head
Angel Fernando Quiroz Campos 3 years ago
parent e796cf1925
commit 51e83db2b9
  1. 7
      main/inc/lib/PortfolioController.php
  2. 19
      main/inc/lib/hook/HookPortfolioItemHighlighted.php
  3. 8
      main/inc/lib/hook/interfaces/HookPortfolioItemHighlightedEventInterface.php
  4. 8
      main/inc/lib/hook/interfaces/HookPortfolioItemHighlightedObserverInterface.php
  5. 22
      plugin/xapi/src/Hook/XApiPortfolioItemHighlightedHookObserver.php
  6. 46
      plugin/xapi/src/ToolExperience/Statement/PortfolioItemHighlighted.php
  7. 16
      plugin/xapi/src/ToolExperience/Verb/Highlighted.php
  8. 6
      plugin/xapi/src/XApiPlugin.php

@ -2630,6 +2630,13 @@ class PortfolioController
Database::getManager()->flush();
if ($item->isHighlighted()) {
HookPortfolioItemHighlighted::create()
->setEventData(['item' => $item])
->notifyItemHighlighted()
;
}
Display::addFlash(
Display::return_message(
$item->isHighlighted() ? get_lang('MarkedAsHighlighted') : get_lang('UnmarkedAsHighlighted'),

@ -0,0 +1,19 @@
<?php
/* For licensing terms, see /license.txt */
class HookPortfolioItemHighlighted extends HookEvent implements HookPortfolioItemHighlightedEventInterface
{
protected function __construct()
{
parent::__construct('HookPortfolioItemHighlighted');
}
public function notifyItemHighlighted()
{
/** @var HookPortfolioItemHighlightedObserverInterface $observer */
foreach ($this->observers as $observer) {
$observer->hookItemHighlighted($this);
}
}
}

@ -0,0 +1,8 @@
<?php
/* For licensing terms, see /license.txt */
interface HookPortfolioItemHighlightedEventInterface extends HookEventInterface
{
public function notifyItemHighlighted();
}

@ -0,0 +1,8 @@
<?php
/* For licensing terms, see /license.txt */
interface HookPortfolioItemHighlightedObserverInterface extends HookObserverInterface
{
public function hookItemHighlighted(HookPortfolioItemHighlightedEventInterface $hookEvent);
}

@ -0,0 +1,22 @@
<?php
use Chamilo\CoreBundle\Entity\Portfolio;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
class XApiPortfolioItemHighlightedHookObserver extends XApiActivityHookObserver implements HookPortfolioItemHighlightedObserverInterface
{
/**
* @throws OptimisticLockException
* @throws ORMException
*/
public function hookItemHighlighted(HookPortfolioItemHighlightedEventInterface $hookEvent)
{
/** @var Portfolio $item */
$item = $hookEvent->getEventData()['item'];
$statement = (new PortfolioItemHighlighted($item))->generate();
$this->saveSharedStatement($statement);
}
}

@ -0,0 +1,46 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\PortfolioAttachment;
use Chamilo\PluginBundle\XApi\ToolExperience\Activity\PortfolioItem as PortfolioItemActivity;
use Chamilo\PluginBundle\XApi\ToolExperience\Actor\User;
use Chamilo\PluginBundle\XApi\ToolExperience\Statement\PortfolioAttachmentsTrait;
use Chamilo\PluginBundle\XApi\ToolExperience\Statement\PortfolioItem as PortfolioItemStatement;
use Chamilo\PluginBundle\XApi\ToolExperience\Verb\Highlighted;
use Xabbuh\XApi\Model\Statement;
class PortfolioItemHighlighted extends PortfolioItemStatement
{
use PortfolioAttachmentsTrait;
public function generate(): Statement
{
$user = api_get_user_entity(api_get_user_id());
$itemAuthor = $this->item->getUser();
$itemAttachments = Database::getManager()
->getRepository(PortfolioAttachment::class)
->findFromItem($this->item)
;
$actor = new User($user);
$verb = new Highlighted();
$object = new PortfolioItemActivity($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,
api_get_utc_datetime(null, false, true),
null,
$context,
$attachments
);
}
}

@ -0,0 +1,16 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\XApi\ToolExperience\Verb;
class Highlighted extends BaseVerb
{
public function __construct()
{
parent::__construct(
'http://id.tincanapi.com/verb/promoted',
'Highlighted'
);
}
}

@ -148,6 +148,7 @@ class XApiPlugin extends Plugin implements HookPluginInterface
$createCourseHook = XApiCreateCourseHookObserver::create();
$portfolioItemAddedHook = XApiPortfolioItemAddedHookObserver::create();
$portfolioItemCommentedHook = XApiPortfolioItemCommentedHookObserver::create();
$portfolioItemHighlightedHook = XApiPortfolioItemHighlightedHookObserver::create();
HookLearningPathItemViewed::create()->detach($learningPathItemViewedHook);
HookLearningPathEnd::create()->detach($learningPathEndHook);
@ -156,6 +157,7 @@ class XApiPlugin extends Plugin implements HookPluginInterface
HookCreateCourse::create()->detach($createCourseHook);
HookPortfolioItemAdded::create()->detach($portfolioItemAddedHook);
HookPortfolioItemCommented::create()->detach($portfolioItemCommentedHook);
HookPortfolioItemHighlighted::create()->detach($portfolioItemHighlightedHook);
return 1;
}
@ -241,6 +243,7 @@ class XApiPlugin extends Plugin implements HookPluginInterface
$portfolioItemAddedHook = XApiPortfolioItemAddedHookObserver::create();
$portfolioItemCommentedHook = XApiPortfolioItemCommentedHookObserver::create();
$portfolioItemViewedHook = XApiPortfolioItemViewedHookObserver::create();
$portfolioItemHighlightedHook = XApiPortfolioItemHighlightedHookObserver::create();
$learningPathItemViewedEvent = HookLearningPathItemViewed::create();
$learningPathEndEvent = HookLearningPathEnd::create();
@ -249,6 +252,7 @@ class XApiPlugin extends Plugin implements HookPluginInterface
$portfolioItemAddedEvent = HookPortfolioItemAdded::create();
$portfolioItemCommentedEvent = HookPortfolioItemCommented::create();
$portfolioItemViewedEvent = HookPortfolioItemViewed::create();
$portfolioItemHighlightedEvent = HookPortfolioItemHighlighted::create();
if ('true' === $this->get(self::SETTING_LRS_LP_ITEM_ACTIVE)) {
$learningPathItemViewedEvent->attach($learningPathItemViewedHook);
@ -278,10 +282,12 @@ class XApiPlugin extends Plugin implements HookPluginInterface
$portfolioItemAddedEvent->attach($portfolioItemAddedHook);
$portfolioItemCommentedEvent->attach($portfolioItemCommentedHook);
$portfolioItemViewedEvent->attach($portfolioItemViewedHook);
$portfolioItemHighlightedEvent->attach($portfolioItemHighlightedHook);
} else {
$portfolioItemAddedEvent->detach($portfolioItemAddedHook);
$portfolioItemCommentedEvent->detach($portfolioItemCommentedHook);
$portfolioItemViewedEvent->detach($portfolioItemViewedHook);
$portfolioItemHighlightedEvent->detach($portfolioItemHighlightedHook);
}
return $this;

Loading…
Cancel
Save