/**
  * 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;
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
 /**
  * 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();
 }