public/plugin/xapi/src/ToolExperience/Statement/PortfolioAttachmentsTrait.php
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\PluginBundle\XApi\ToolExperience\Statement;
use Chamilo\CoreBundle\Entity\Portfolio;
use Chamilo\CoreBundle\Entity\PortfolioAttachment;
use Chamilo\CoreBundle\Entity\PortfolioComment as PortfolioCommentEntity;
use Chamilo\UserBundle\Entity\User;
use Database;
use UserManager;
use Xabbuh\XApi\Model\Attachment;
use Xabbuh\XApi\Model\IRI;
use Xabbuh\XApi\Model\IRL;
use Xabbuh\XApi\Model\LanguageMap;
trait PortfolioAttachmentsTrait
{
/**
* @param array<int, PortfolioAttachment> $portfolioAttachments
*
* @return array<int, Attachment>
*/
protected function generateAttachments(array $portfolioAttachments, User $user): array
{
if (empty($portfolioAttachments)) {
return [];
}
$attachments = [];
$userDirectory = UserManager::getUserPathById($user->getId(), 'system');
$attachmentsDirectory = $userDirectory.'portfolio_attachments/';
$langIso = api_get_language_isocode();
$cidreq = api_get_cidreq();
$baseUrl = api_get_path(WEB_CODE_PATH).'portfolio/index.php?'.($cidreq ? $cidreq.'&' : '');
foreach ($portfolioAttachments as $portfolioAttachment) {
$attachmentFilename = $attachmentsDirectory.$portfolioAttachment->getPath();
$display = LanguageMap::create(
['und' => $portfolioAttachment->getFilename()]
);
$description = null;
if ($portfolioAttachment->getComment()) {
$description = LanguageMap::create(
[$langIso => $portfolioAttachment->getComment()]
);
}
$attachments[] = new Attachment(
IRI::fromString('http://id.tincanapi.com/attachment/supporting_media'),
mime_content_type($attachmentFilename),
$portfolioAttachment->getSize(),
hash_file('sha256', $attachmentFilename),
$display,
$description,
IRL::fromString(
$baseUrl.http_build_query(['action' => 'download', 'file' => $portfolioAttachment->getPath()])
)
);
}
return $attachments;
}
protected function generateAttachmentsForItem(Portfolio $item): array
{
$itemAttachments = Database::getManager()
->getRepository(PortfolioAttachment::class)
->findFromItem($item)
;
return $this->generateAttachments($itemAttachments, $item->getUser());
}
protected function generateAttachmentsForComment(PortfolioCommentEntity $comment): array
{
$commentAttachments = Database::getManager()
->getRepository(PortfolioAttachment::class)
->findFromComment($this->comment)
;
return $this->generateAttachments($commentAttachments, $comment->getAuthor());
}
}