Spaces:
No application file
No application file
namespace Mautic\ReportBundle\Helper; | |
use Mautic\ReportBundle\Event\ColumnCollectEvent; | |
use Mautic\ReportBundle\ReportEvents; | |
use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
final class ReportHelper | |
{ | |
public function __construct( | |
private EventDispatcherInterface $dispatcher | |
) { | |
} | |
public function getName(): string | |
{ | |
return 'report'; | |
} | |
/** | |
* @return string | |
*/ | |
public function getReportBuilderFieldType($type) | |
{ | |
return match ($type) { | |
'number' => 'int', | |
'lookup', 'text', 'url', 'email', 'tel', 'region', 'country', 'locale' => 'string', | |
default => $type, | |
}; | |
} | |
/** | |
* Returns standard form fields such as id, name, publish_up, etc. | |
* | |
* @param string[] $removeColumns | |
* | |
* @return array<string,array<string,string>> | |
*/ | |
public function getStandardColumns(string $prefix, array $removeColumns = [], string $idLink = ''): array | |
{ | |
$aliasPrefix = str_replace('.', '_', $prefix); | |
$columns = [ | |
$prefix.'id' => [ | |
'label' => 'mautic.core.id', | |
'type' => 'int', | |
'link' => $idLink, | |
'alias' => "{$aliasPrefix}id", | |
], | |
$prefix.'name' => [ | |
'label' => 'mautic.core.name', | |
'type' => 'string', | |
'alias' => "{$aliasPrefix}name", | |
], | |
$prefix.'created_by_user' => [ | |
'label' => 'mautic.core.createdby', | |
'type' => 'string', | |
'alias' => "{$aliasPrefix}created_by_user", | |
], | |
$prefix.'date_added' => [ | |
'label' => 'mautic.report.field.date_added', | |
'type' => 'datetime', | |
'alias' => "{$aliasPrefix}date_added", | |
], | |
$prefix.'modified_by_user' => [ | |
'label' => 'mautic.report.field.modified_by_user', | |
'type' => 'string', | |
'alias' => "{$aliasPrefix}modified_by_user", | |
], | |
$prefix.'date_modified' => [ | |
'label' => 'mautic.report.field.date_modified', | |
'type' => 'datetime', | |
'alias' => "{$aliasPrefix}date_modified", | |
], | |
$prefix.'description' => [ | |
'label' => 'mautic.core.description', | |
'type' => 'string', | |
'alias' => "{$aliasPrefix}description", | |
], | |
$prefix.'publish_up' => [ | |
'label' => 'mautic.report.field.publish_up', | |
'type' => 'datetime', | |
'alias' => "{$aliasPrefix}publish_up", | |
], | |
$prefix.'publish_down' => [ | |
'label' => 'mautic.report.field.publish_down', | |
'type' => 'datetime', | |
'alias' => "{$aliasPrefix}publish_down", | |
], | |
$prefix.'is_published' => [ | |
'label' => 'mautic.report.field.is_published', | |
'type' => 'bool', | |
'alias' => "{$aliasPrefix}is_published", | |
], | |
]; | |
if (empty($idLink)) { | |
unset($columns[$prefix.'id']['link']); | |
} | |
foreach ($removeColumns as $c) { | |
if (isset($columns[$prefix.$c])) { | |
unset($columns[$prefix.$c]); | |
} | |
} | |
return $columns; | |
} | |
/** | |
* @param array<string, mixed> $properties | |
* | |
* @return array<string, array<string, mixed>> | |
*/ | |
public function getMappedObjectColumns(string $object, array $properties = []): array | |
{ | |
$event = new ColumnCollectEvent($object, $properties); | |
$this->dispatcher->dispatch($event, ReportEvents::REPORT_ON_COLUMN_COLLECT); | |
return array_map( | |
function ($item) { | |
if (isset($item['type'])) { | |
$item['type'] = $this->getReportBuilderFieldType($item['type']); | |
} | |
return $item; | |
}, | |
$event->getColumns() | |
); | |
} | |
} | |