Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Event; | |
| use Mautic\CoreBundle\Entity\CommonRepository; | |
| use Mautic\UserBundle\Entity\User; | |
| use Symfony\Contracts\EventDispatcher\Event; | |
| /** | |
| * Used to get statistical data from subscribed tables. | |
| */ | |
| class StatsEvent extends Event | |
| { | |
| /** | |
| * Database table containing statistical data available to get the results from. | |
| */ | |
| protected string $table; | |
| /** | |
| * Array of columns to fetch. | |
| * | |
| * @var array|null | |
| */ | |
| protected $select; | |
| /** | |
| * The page where to start with. | |
| */ | |
| protected int $start; | |
| /** | |
| * The rows per page limit. | |
| */ | |
| protected int $limit; | |
| /** | |
| * Database tables which the subscribers already asked for. | |
| * | |
| * @var array | |
| */ | |
| protected $tables = []; | |
| /** | |
| * @var array | |
| */ | |
| protected $tableColumns = []; | |
| /** | |
| * Array of where filters. | |
| * | |
| * @var array | |
| */ | |
| protected $where = []; | |
| /** | |
| * Array of the result data. | |
| * | |
| * @var array | |
| */ | |
| protected $results = []; | |
| /** | |
| * Flag if some results were set. | |
| * | |
| * @var bool | |
| */ | |
| protected $hasResults = false; | |
| /** | |
| * Source repository to fetch the results from. | |
| * | |
| * @var CommonRepository<object> | |
| */ | |
| protected $repository; | |
| /** | |
| * @param int $start | |
| * @param int $limit | |
| */ | |
| public function __construct( | |
| $table, | |
| $start, | |
| $limit, | |
| protected array $order, | |
| array $where, | |
| protected User $user | |
| ) { | |
| $this->table = strtolower(trim(str_replace(MAUTIC_TABLE_PREFIX, '', strip_tags($table)))); | |
| $this->start = (int) $start; | |
| $this->limit = (int) $limit; | |
| $this->where = $where; | |
| } | |
| /** | |
| * Returns if event is for this table. | |
| * | |
| * @param CommonRepository<object>|null $repository | |
| */ | |
| public function isLookingForTable($table, CommonRepository $repository = null): bool | |
| { | |
| $this->tables[] = $table = str_replace(MAUTIC_TABLE_PREFIX, '', $table); | |
| if ($repository) { | |
| $this->tableColumns[$table] = $repository->getTableColumns(); | |
| } | |
| return $this->table === $table; | |
| } | |
| /** | |
| * Set the source repository to fetch the results from. | |
| * | |
| * @param CommonRepository<object> $repository | |
| * | |
| * @return string | |
| */ | |
| public function setRepository(CommonRepository $repository, array $permissions = []) | |
| { | |
| $this->repository = $repository; | |
| $this->setResults( | |
| $this->repository->getRows( | |
| $this->getStart(), | |
| $this->getLimit(), | |
| $this->getOrder(), | |
| $this->getWhere(), | |
| $this->getSelect(), | |
| $permissions | |
| ) | |
| ); | |
| return $this; | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getSelect() | |
| { | |
| return $this->select; | |
| } | |
| /** | |
| * @return $this | |
| */ | |
| public function setSelect(array $select = null) | |
| { | |
| $this->select = $select; | |
| return $this; | |
| } | |
| /** | |
| * Returns the start. | |
| */ | |
| public function getStart(): int | |
| { | |
| return $this->start; | |
| } | |
| /** | |
| * Returns the limit. | |
| */ | |
| public function getLimit(): int | |
| { | |
| return $this->limit; | |
| } | |
| /** | |
| * Returns the order. | |
| * | |
| * @return array | |
| */ | |
| public function getOrder() | |
| { | |
| return $this->order; | |
| } | |
| /** | |
| * Returns the where. | |
| * | |
| * @return array | |
| */ | |
| public function getWhere() | |
| { | |
| return $this->where; | |
| } | |
| /** | |
| * @return $this | |
| */ | |
| public function addWhere(array $where) | |
| { | |
| $this->where[] = $where; | |
| return $this; | |
| } | |
| /** | |
| * Add an array of results and if so, stop propagation. | |
| */ | |
| public function setResults(array $results): void | |
| { | |
| $this->results = $results; | |
| $this->hasResults = true; | |
| $this->stopPropagation(); | |
| } | |
| /** | |
| * Returns the results. | |
| * | |
| * @return array | |
| */ | |
| public function getResults() | |
| { | |
| return $this->results; | |
| } | |
| /** | |
| * Returns the subscribed tables untill the match was found. | |
| * | |
| * @return array | |
| */ | |
| public function getTables() | |
| { | |
| sort($this->tables); | |
| return $this->tables; | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| public function getTableColumns($table = null) | |
| { | |
| ksort($this->tableColumns); | |
| return ($table) ? $this->tableColumns[$table] : $this->tableColumns; | |
| } | |
| /** | |
| * Returns boolean if the results were set or not. | |
| * | |
| * @return bool | |
| */ | |
| public function hasResults() | |
| { | |
| return $this->hasResults; | |
| } | |
| /** | |
| * @return User | |
| */ | |
| public function getUser() | |
| { | |
| return $this->user; | |
| } | |
| } | |