Example #1
0
 /**
  * Prepares the Pagination object for the given DataRequest and number of entries per page
  * 
  * @access public
  * @param \Zepi\DataSource\Core\Entity\DataRequest $dataRequest
  * @param string $paginationUrl
  * @param integer $numberOfEntries
  * @param integer $numberOfEntriesPerPage
  * @return \Zepi\Web\UserInterface\Pagination\Pagination
  */
 public function prepare(DataRequest $dataRequest, $paginationUrl, $numberOfEntries, $numberOfEntriesPerPage = 10)
 {
     $this->paginationUrl = $paginationUrl;
     $neededPages = ceil($numberOfEntries / $numberOfEntriesPerPage);
     $activePage = $dataRequest->getPage();
     $pagination = new PaginationObject();
     if ($activePage > 1) {
         // Add the first page button
         $button = new Button('«', $this->buildUrl(1));
         $pagination->addEntry($button);
         // Add the prev page button
         $button = new Button('‹', $this->buildUrl($activePage - 1));
         $pagination->addEntry($button);
     }
     $this->addPages($pagination, $activePage, $neededPages);
     if ($activePage < $neededPages) {
         // Add the next page button
         $button = new Button('&rsaquo;', $this->buildUrl($activePage + 1));
         $pagination->addEntry($button);
         // Add the last page button
         $button = new Button('&raquo;', $this->buildUrl($neededPages));
         $pagination->addEntry($button);
     }
     return $pagination;
 }
Example #2
0
 /**
  * Builds the query for the given data request object
  * 
  * @access public
  * @param \Zepi\DataSource\Core\Entity\DataRequest $dataRequest
  * @param \Doctrine\ORM\QueryBuilder $queryBuilder
  * @param string $entity
  * @param string $tableCode
  */
 public function buildDataRequestQuery(DataRequest $dataRequest, QueryBuilder $queryBuilder, $entity, $tableCode)
 {
     $queryBuilder->select($tableCode)->from($entity, $tableCode);
     $hasWhere = false;
     $i = 1;
     foreach ($dataRequest->getFilters() as $filter) {
         $whereQuery = $tableCode . '.' . $filter->getFieldName() . ' ' . $filter->getMode() . ' :' . $i;
         if ($hasWhere) {
             $queryBuilder->andWhere($whereQuery);
         } else {
             $queryBuilder->where($whereQuery);
             $hasWhere = true;
         }
         $queryBuilder->setParameter($i, $filter->getNeededValue());
         $i++;
     }
     // Sorting
     if ($dataRequest->hasSorting()) {
         $mode = 'ASC';
         if (in_array($dataRequest->getSortByDirection(), array('ASC', 'DESC'))) {
             $mode = $dataRequest->getSortByDirection();
         }
         $queryBuilder->orderBy($tableCode . '.' . $dataRequest->getSortBy(), $mode);
     }
     // Offset
     if ($dataRequest->hasRange()) {
         $queryBuilder->setFirstResult($dataRequest->getOffset());
         $queryBuilder->setMaxResults($dataRequest->getNumberOfEntries());
     }
 }
 /**
  * Returns an array with all found access entities for the given DataRequest
  * object. 
  *
  * @param string $class
  * @param \Zepi\Core\Utils\DataRequest $dataRequest
  * @return array
  * 
  * @throws \Zepi\Core\AccessControl\Exception Cannot load the access entities for the given data request.
  */
 public function find($class, DataRequest $dataRequest)
 {
     try {
         $dataRequest->setSelectedFields(array('*'));
         $queryBuilder = $this->entityManager->getQueryBuilder();
         $this->entityManager->buildDataRequestQuery($dataRequest, $queryBuilder, $class, 'a');
         $accessEntities = $queryBuilder->getQuery()->getResult();
         if ($accessEntities == null) {
             return array();
         }
         foreach ($accessEntities as $accessEntity) {
             $this->loadPermissions($accessEntity);
         }
         return $accessEntities;
     } catch (\Exception $e) {
         throw new Exception('Cannot load the access entities for the given data request from the database.', 0, $e);
     }
 }