Portfolio: Tag filter by course - refs BT#18201

pull/4385/head
Angel Fernando Quiroz Campos 3 years ago
parent f46d87a68f
commit 0f0e95d250
  1. 34
      main/inc/lib/PortfolioController.php
  2. 37
      src/Chamilo/CoreBundle/Entity/Repository/TagRepository.php

@ -10,6 +10,7 @@ use Chamilo\CoreBundle\Entity\Portfolio;
use Chamilo\CoreBundle\Entity\PortfolioAttachment;
use Chamilo\CoreBundle\Entity\PortfolioCategory;
use Chamilo\CoreBundle\Entity\PortfolioComment;
use Chamilo\CoreBundle\Entity\Tag;
use Chamilo\UserBundle\Entity\User;
use Doctrine\ORM\Query\Expr\Join;
use Mpdf\MpdfException;
@ -517,7 +518,11 @@ class PortfolioController
}
$extraField = new ExtraField('portfolio');
$extra = $extraField->addElements($form);
$extra = $extraField->addElements(
$form,
0,
$this->course ? [] : ['tags']
);
$this->addAttachmentsFieldToForm($form);
@ -764,7 +769,11 @@ class PortfolioController
}
$extraField = new ExtraField('portfolio');
$extra = $extraField->addElements($form, $item->getId());
$extra = $extraField->addElements(
$form,
$item->getId(),
$this->course ? [] : ['tags']
);
$attachmentList = $this->generateAttachmentList($item, false);
@ -2786,15 +2795,10 @@ class PortfolioController
private function createFormTagFilter(bool $listByUser = false): FormValidator
{
$extraField = new ExtraField('portfolio');
$tagFieldInfo = $extraField->get_handler_field_info_by_tags('tags');
$selectTagOptions = array_map(
function (array $tagOption) {
return $tagOption['tag'];
},
$tagFieldInfo['options'] ?? []
);
$tags = Database::getManager()
->getRepository(Tag::class)
->findForPortfolioInCourse($this->course, $this->session)
;
$frmTagList = new FormValidator(
'frm_tag_list',
@ -2807,11 +2811,13 @@ class PortfolioController
$frmTagList->addDatePicker('date', get_lang('CreationDate'));
$frmTagList->addSelect(
$frmTagList->addSelectFromCollection(
'tags',
get_lang('Tags'),
$selectTagOptions,
['multiple' => 'multiple']
$tags,
['multiple' => 'multiple'],
false,
'getTag'
);
$frmTagList->addText('text', get_lang('Search'), false)->setIcon('search');

@ -4,7 +4,14 @@
namespace Chamilo\CoreBundle\Entity\Repository;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\ExtraField;
use Chamilo\CoreBundle\Entity\ExtraFieldRelTag;
use Chamilo\CoreBundle\Entity\Portfolio;
use Chamilo\CoreBundle\Entity\Session;
use Chamilo\CoreBundle\Entity\Tag;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
/**
* @method array findById(int|array $ids)
@ -28,4 +35,34 @@ class TagRepository extends EntityRepository
->getQuery()
->getResult();
}
/**
* @return array<Tag>
*/
public function findForPortfolioInCourse(Course $course, ?Session $session = null): array
{
$qb = $this
->createQueryBuilder('t')
->innerJoin(ExtraField::class, 'ef', Join::WITH, 't.fieldId = ef.id')
->innerJoin(ExtraFieldRelTag::class, 'efrt', Join::WITH, 't.id = efrt.tagId AND ef.id = efrt.fieldId')
->innerJoin(Portfolio::class, 'p', Join::WITH, 'efrt.itemId = p.id')
->where('ef.variable = :variable')
->andWhere('ef.extraFieldType = :type')
->andWhere('p.course = :course')
->setParameter('variable', 'tags')
->setParameter('type', ExtraField::PORTFOLIO_TYPE)
->setParameter('course', $course)
;
if ($session) {
$qb
->andWhere('p.session = :session')
->setParameter('session', $session)
;
} else {
$qb->andWhere('p.session IS NULL');
}
return $qb->getQuery()->getResult();
}
}

Loading…
Cancel
Save