Skip to content

Commit

Permalink
Portfolio: Allow filter by tags - refs BT#18201
Browse files Browse the repository at this point in the history
  • Loading branch information
AngelFQC committed Jan 14, 2021
1 parent bd7d3c2 commit 5e62ce8
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 9 deletions.
89 changes: 80 additions & 9 deletions main/inc/lib/PortfolioController.php
Expand Up @@ -2,9 +2,12 @@

/* For licensing terms, see /license.txt */

use Chamilo\CoreBundle\Entity\ExtraField as ExtraFieldEntity;
use Chamilo\CoreBundle\Entity\ExtraFieldRelTag;
use Chamilo\CoreBundle\Entity\Portfolio;
use Chamilo\CoreBundle\Entity\PortfolioCategory;
use Chamilo\CoreBundle\Entity\PortfolioComment;
use Doctrine\ORM\Query\Expr\Join;
use Symfony\Component\HttpFoundation\Request as HttpRequest;

/**
Expand Down Expand Up @@ -495,19 +498,32 @@ public function index(HttpRequest $httpRequest)
}

$frmStudentList = null;
$frmTagList = null;

$categories = [];

if ($this->course) {
$itemsCriteria = [];
$itemsCriteria['course'] = $this->course;
$itemsCriteria['session'] = $this->session;
$queryBuilder = $this->em->createQueryBuilder();
$queryBuilder
->select('pi')
->from(Portfolio::class, 'pi')
->where('pi.course = :course');

$queryBuilder->setParameter('course', $this->course);

if ($this->session) {
$queryBuilder->andWhere('pi.session = :session');
$queryBuilder->setParameter('session', $this->session);
} else {
$queryBuilder->andWhere('pi.session IS NULL');
}

if ($listByUser) {
$itemsCriteria['user'] = $this->owner;
$queryBuilder->andWhere('pi.user = :user');
$queryBuilder->setParameter('user', $this->owner);

if ($currentUserId !== $this->owner->getId()) {
$itemsCriteria['isVisible'] = true;
$queryBuilder->andWhere('pi.isVisible = TRUE');
}
}

Expand Down Expand Up @@ -539,6 +555,27 @@ public function index(HttpRequest $httpRequest)
$slctStudentOptions,
['url' => api_get_path(WEB_AJAX_PATH)."course.ajax.php?$urlParams"]
);

$frmTagList = $this->createFormTagFilter();

if ($frmTagList->validate()) {
$values = $frmTagList->exportValues();

if (!empty($values['tags'])) {
$queryBuilder
->innerJoin(ExtraFieldRelTag::class, 'efrt', Join::WITH, 'efrt.itemId = pi.id')
->innerJoin(ExtraFieldEntity::class, 'ef', Join::WITH, 'ef.id = efrt.fieldId')
->andWhere('ef.extraFieldType = :efType')
->andWhere('ef.variable = :variable')
->andWhere('efrt.tagId IN (:tags)');

$queryBuilder->setParameter('efType', ExtraFieldEntity::PORTFOLIO_TYPE);
$queryBuilder->setParameter('variable', 'tags');
$queryBuilder->setParameter('tags', $values['tags']);
}
}

$items = $queryBuilder->getQuery()->getResult();
} else {
$categoriesCriteria = [];
$categoriesCriteria['user'] = $this->owner;
Expand All @@ -555,11 +592,11 @@ public function index(HttpRequest $httpRequest)
$categories = $this->em
->getRepository(PortfolioCategory::class)
->findBy($categoriesCriteria);
}

$items = $this->em
->getRepository(Portfolio::class)
->findBy($itemsCriteria, ['creationDate' => 'DESC']);
$items = $this->em
->getRepository(Portfolio::class)
->findBy($itemsCriteria, ['creationDate' => 'DESC']);
}

$template = new Template(null, false, false, false, false, false, false);
$template->assign('list_by_user', $listByUser);
Expand All @@ -569,6 +606,7 @@ public function index(HttpRequest $httpRequest)
$template->assign('portfolio', $categories);
$template->assign('uncategorized_items', $items);
$template->assign('frm_student_list', $frmStudentList ? $frmStudentList->returnForm() : '');
$template->assign('frm_tag_list', $frmTagList ? $frmTagList->returnForm(): '');

$layout = $template->get_template('portfolio/list.html.twig');
$content = $template->fetch($layout);
Expand Down Expand Up @@ -1082,4 +1120,37 @@ private function createCommentForm(Portfolio $item): string

return $form->returnForm();
}

private function createFormTagFilter(): FormValidator
{
$extraField = new ExtraField('portfolio');
$tagFieldInfo = $extraField->get_handler_field_info_by_tags('tags');

$chbxTagOptions = array_map(
function (array $tagOption) {
return $tagOption['tag'];
},
$tagFieldInfo['options']
);

$frmTagList = new FormValidator('frm_tag_list',
'get',
$this->baseUrl,
'',
[],
FormValidator::LAYOUT_INLINE
);
$frmTagList->addCheckBoxGroup('tags', $tagFieldInfo['display_text'], $chbxTagOptions);
$frmTagList->addButtonFilter(get_lang('Filter'));

if ($this->course) {
$frmTagList->addHidden('cidReq', $this->course->getCode());
$frmTagList->addHidden('id_session', $this->session ? $this->session->getId() : 0);
$frmTagList->addHidden('gidReq', 0);
$frmTagList->addHidden('gradebook', 0);
$frmTagList->addHidden('origin', '');
}

return $frmTagList;
}
}
4 changes: 4 additions & 0 deletions main/template/default/portfolio/list.html.twig
Expand Up @@ -10,6 +10,10 @@
{% if course %}
<div class="col-md-3">
{{ frm_student_list }}

<hr>

{{ frm_tag_list }}
</div>
{% endif %}

Expand Down

0 comments on commit 5e62ce8

Please sign in to comment.