Spaces:
No application file
No application file
namespace Mautic\ReportBundle\Entity; | |
use Doctrine\ORM\Tools\Pagination\Paginator; | |
use Mautic\CoreBundle\Entity\CommonRepository; | |
/** | |
* @extends CommonRepository<Report> | |
*/ | |
class ReportRepository extends CommonRepository | |
{ | |
/** | |
* Get a list of entities. | |
* | |
* @return Paginator | |
*/ | |
public function getEntities(array $args = []) | |
{ | |
$q = $this | |
->createQueryBuilder('r') | |
->select('r'); | |
$args['qb'] = $q; | |
return parent::getEntities($args); | |
} | |
protected function addCatchAllWhereClause($q, $filter): array | |
{ | |
return $this->addStandardCatchAllWhereClause( | |
$q, | |
$filter, | |
[ | |
'r.name', | |
] | |
); | |
} | |
protected function addSearchCommandWhereClause($q, $filter): array | |
{ | |
$command = $filter->command; | |
$unique = $this->generateRandomParameterName(); | |
$returnParameter = false; // returning a parameter that is not used will lead to a Doctrine error | |
[$expr, $parameters] = parent::addSearchCommandWhereClause($q, $filter); | |
switch ($command) { | |
case $this->translator->trans('mautic.core.searchcommand.ispublished'): | |
case $this->translator->trans('mautic.core.searchcommand.ispublished', [], null, 'en_US'): | |
$expr = $q->expr()->eq('r.isPublished', ":$unique"); | |
$forceParameters = [$unique => true]; | |
break; | |
case $this->translator->trans('mautic.core.searchcommand.isunpublished'): | |
case $this->translator->trans('mautic.core.searchcommand.isunpublished', [], null, 'en_US'): | |
$expr = $q->expr()->eq('r.isPublished', ":$unique"); | |
$forceParameters = [$unique => false]; | |
break; | |
case $this->translator->trans('mautic.core.searchcommand.ismine'): | |
case $this->translator->trans('mautic.core.searchcommand.ismine', [], null, 'en_US'): | |
$expr = $q->expr()->eq('IDENTITY(r.createdBy)', $this->currentUser->getId()); | |
break; | |
} | |
if ($expr && $filter->not) { | |
$expr = $q->expr()->not($expr); | |
} | |
if (!empty($forceParameters)) { | |
$parameters = $forceParameters; | |
} elseif ($returnParameter) { | |
$string = ($filter->strict) ? $filter->string : "%{$filter->string}%"; | |
$parameters = ["$unique" => $string]; | |
} | |
return [$expr, $parameters]; | |
} | |
/** | |
* @return string[] | |
*/ | |
public function getSearchCommands(): array | |
{ | |
$commands = [ | |
'mautic.core.searchcommand.ispublished', | |
'mautic.core.searchcommand.isunpublished', | |
'mautic.core.searchcommand.ismine', | |
]; | |
return array_merge($commands, parent::getSearchCommands()); | |
} | |
protected function getDefaultOrder(): array | |
{ | |
return [ | |
['r.name', 'ASC'], | |
]; | |
} | |
public function getTableAlias(): string | |
{ | |
return 'r'; | |
} | |
/** | |
* @return mixed[] | |
*/ | |
public function findReportsWithGraphs($ownedBy = null): array | |
{ | |
$qb = $this->getEntityManager()->getConnection()->createQueryBuilder(); | |
$qb->select('r.id, r.name, r.graphs') | |
->from(MAUTIC_TABLE_PREFIX.'reports', 'r') | |
->where( | |
$qb->expr()->and( | |
$qb->expr()->isNotNull('r.graphs'), | |
$qb->expr()->neq('r.graphs', $qb->expr()->literal('a:0:{}')), | |
$qb->expr()->eq('r.is_published', ':true') | |
) | |
); | |
$qb->setParameter('true', true, 'boolean'); | |
if ($ownedBy) { | |
$qb->andWhere( | |
$qb->expr()->eq('r.created_by', (int) $ownedBy) | |
); | |
} | |
$qb->orderBy('r.name'); | |
return $qb->executeQuery()->fetchAllAssociative(); | |
} | |
} | |