/** * 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('›', $this->buildUrl($activePage + 1)); $pagination->addEntry($button); // Add the last page button $button = new Button('»', $this->buildUrl($neededPages)); $pagination->addEntry($button); } return $pagination; }
/** * 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); } }