/** * {@inheritDoc} */ public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource) { $defaultPerPage = $config->offsetGetByPath(ToolbarExtension::PAGER_DEFAULT_PER_PAGE_OPTION_PATH, 10); if ($datasource instanceof OrmDatasource) { $this->pager->setQueryBuilder($datasource->getQueryBuilder()); $this->pager->setSkipAclCheck($config->isDatasourceSkipAclApply()); $this->pager->setSkipCountWalker($config->offsetGetByPath(DatagridConfiguration::DATASOURCE_SKIP_COUNT_WALKER_PATH)); } if ($config->offsetGetByPath(ToolbarExtension::PAGER_ONE_PAGE_OPTION_PATH, false) || $config->offsetGetByPath(ModeExtension::MODE_OPTION_PATH) === ModeExtension::MODE_CLIENT) { // no restrictions applied $this->pager->setPage(0); $this->pager->setMaxPerPage(0); } else { $this->pager->setPage($this->getOr(PagerInterface::PAGE_PARAM, 1)); $this->pager->setMaxPerPage($this->getOr(PagerInterface::PER_PAGE_PARAM, $defaultPerPage)); } $this->pager->init(); }
/** * @param array $params * @param bool $expected * @dataProvider isDatasourceSkipAclApplyDataProvider */ public function testIsDatasourceSkipAclApply(array $params, $expected) { $this->configuration->merge($params); $this->assertEquals($expected, $this->configuration->isDatasourceSkipAclApply()); }
/** * {@inheritdoc} */ public function visitResult(DatagridConfiguration $config, ResultsObject $result) { $onlyOnePage = !isset($result['options']['totalRecords']) || $result['options']['totalRecords'] === count($result['data']); $totalData = []; $totals = $config->offsetGetByPath(Configuration::TOTALS_PATH); if (null !== $totals && !empty($result['data'])) { foreach ($totals as $rowName => $rowConfig) { if ($onlyOnePage && $rowConfig[Configuration::TOTALS_HIDE_IF_ONE_PAGE_KEY]) { unset($totals[$rowName]); continue; } $totalData[$rowName] = $this->getTotalData($rowConfig, $this->getData($result, $rowConfig['columns'], $rowConfig[Configuration::TOTALS_PER_PAGE_ROW_KEY], $config->isDatasourceSkipAclApply())); } } $result->offsetAddToArray('options', ['totals' => $totalData]); return $result; }