/** * Configures builder * * This method configures the ReportBuilder. It has to return a configured Doctrine DBAL QueryBuilder. * * @param array $options Options array * * @return \Doctrine\DBAL\Query\QueryBuilder */ protected function configureBuilder(array $options) { $source = $this->entity->getSource(); $fields = $this->entity->getColumns(); $order = $this->entity->getTableOrder(); // Trigger the REPORT_ON_GENERATE event to initialize the QueryBuilder /** @type \Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher $dispatcher */ $dispatcher = $options['dispatcher']; $event = new ReportGeneratorEvent($source); $dispatcher->dispatch(ReportEvents::REPORT_ON_GENERATE, $event); $queryBuilder = $event->getQueryBuilder(); $selectColumns = array(); foreach ($fields as $field) { if (isset($options['columns'][$field])) { $selectColumns[] = "{$field} as \"{$options['columns'][$field]['label']}\""; } } // Set Content Template $this->contentTemplate = $event->getContentTemplate(); $queryBuilder->select(implode(', ', $selectColumns)); // Add filters as AND values to the WHERE clause if present $filters = $this->entity->getFilters(); if (count($filters)) { $expr = $queryBuilder->expr(); $and = $expr->andX(); foreach ($filters as $filter) { if ($filter['condition'] == 'notEmpty') { $and->add($expr->isNotNull($filter['column'])); $and->add($expr->neq($filter['column'], $expr->literal(''))); } elseif ($filter['condition'] == 'empty') { $and->add($expr->isNull($filter['column'])); $and->add($expr->eq($filter['column'], $expr->literal(''))); } else { $and->add($expr->{$filter['condition']}($filter['column'], $expr->literal($filter['value']))); } } $queryBuilder->where($and); } if (!empty($options['order'])) { if (is_array($options['order'])) { list($column, $dir) = $options['order']; } else { $column = $options['order']; $dir = 'ASC'; } $queryBuilder->orderBy($column, $dir); } elseif (!empty($order)) { foreach ($order as $o) { if (!empty($o['column'])) { $queryBuilder->orderBy($o['column'], $o['direction']); } } } if (!empty($options['limit'])) { $queryBuilder->setFirstResult($options['start'])->setMaxResults($options['limit']); } return $queryBuilder; }
/** * Constructor * * @param Report $report * @param array $graphs */ public function __construct(Report $report, array $graphs, QueryBuilder $queryBuilder) { $this->report = $report; $this->context = $report->getSource(); $this->requestedGraphs = $graphs; $this->queryBuilder = $queryBuilder; }
/** * Constructor. * * @param string $context Event context */ public function __construct(Report $report, array $options, QueryBuilder $qb) { $this->report = $report; $this->context = $report->getSource(); $this->options = $options; $this->queryBuilder = $qb; }
/** * ReportDataEvent constructor. * * @param Report $report * @param array $data * @param $totalResults * @param array $options */ public function __construct(Report $report, array $data, $totalResults, array $options) { $this->context = $report->getSource(); $this->report = $report; $this->data = $data; $this->options = $options; $this->totalResults = (int) $totalResults; }
/** * {@inheritDoc} */ public function getSource() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getSource', array()); return parent::getSource(); }