/** * get grid object filled * * @param \Kitpages\DataGridBundle\Grid\GridConfig $gridConfig * @param \Symfony\Component\HttpFoundation\Request $request * @return \Kitpages\DataGridBundle\Grid\Grid */ public function getGrid(GridConfig $gridConfig, Request $request) { $queryBuilder = $gridConfig->getQueryBuilder(); // create grid objet $grid = new Grid(); $grid->setGridConfig($gridConfig); $grid->setUrlTool(new UrlTool()); $grid->setRequestUri($request->getRequestUri()); $grid->setRequestCurrentRoute($request->attributes->get("_route")); $grid->setRequestCurrentRouteParams($request->attributes->get("_route_params")); $grid->setDispatcher($this->dispatcher); // create base request $gridQueryBuilder = clone $queryBuilder; // Apply filters $filter = $request->query->get($grid->getFilterFormName(), ""); $this->applyFilter($gridQueryBuilder, $grid, $filter); // Apply selector $selectorField = $request->query->get($grid->getSelectorFieldFormName(), ""); $selectorValue = $request->query->get($grid->getSelectorValueFormName(), ""); $this->applySelector($gridQueryBuilder, $grid, $selectorField, $selectorValue); // Apply sorting $sortField = $request->query->get($grid->getSortFieldFormName(), ""); $sortOrder = $request->query->get($grid->getSortOrderFormName(), ""); $this->applySort($gridQueryBuilder, $grid, $sortField, $sortOrder); // build paginator $paginatorConfig = $gridConfig->getPaginatorConfig(); if ($paginatorConfig === null) { $paginatorConfig = new PaginatorConfig(); $paginatorConfig->setCountFieldName($gridConfig->getCountFieldName()); $paginatorConfig->setName($gridConfig->getName()); $paginatorConfig->setQueryBuilder($gridQueryBuilder); } if (is_null($paginatorConfig->getQueryBuilder())) { $paginatorConfig->setQueryBuilder($gridQueryBuilder); } $paginator = $this->paginatorManager->getPaginator($paginatorConfig, $request); $grid->setPaginator($paginator); // calculate limits $gridQueryBuilder->setMaxResults($paginator->getPaginatorConfig()->getItemCountInPage()); $gridQueryBuilder->setFirstResult(($paginator->getCurrentPage() - 1) * $paginator->getPaginatorConfig()->getItemCountInPage()); // send event for changing grid query builder $event = new DataGridEvent(); $event->set("grid", $grid); $event->set("gridQueryBuilder", $gridQueryBuilder); $event->set("request", $request); $this->dispatcher->dispatch(KitpagesDataGridEvents::ON_GET_GRID_QUERY, $event); if (!$event->isDefaultPrevented()) { // execute request $query = $gridQueryBuilder->getQuery(); $event->set("query", $query); } $this->dispatcher->dispatch(KitpagesDataGridEvents::AFTER_GET_GRID_QUERY, $event); // hack : recover query from the event so the developper can build a new grid // from the gridQueryBuilder in the listener and reinject it in the event. $normalizedItemList = $this->itemListNormalizer->normalize($event->get("query"), $event->get("gridQueryBuilder"), $this->hydratorClass); // end normalization $grid->setItemList($normalizedItemList); return $grid; }
public function testAddFieldWrongArgumentType() { $arguments = array(true, 1, 2.2, array(), new \stdClass(), null, function () { }); foreach ($arguments as $argument) { try { $this->gridConfig->addField($argument); $this->fail(); } catch (\InvalidArgumentException $e) { $this->assertTrue(true); } } }
public function testGridBasic() { // create Request mock (ok this is not a mock....) $_SERVER["REQUEST_URI"] = "/foo"; $request = new \Symfony\Component\HttpFoundation\Request(); // create gridManager instance $gridManager = $this->getGridManager(); // create queryBuilder $em = $this->getEntityManager(); $repository = $em->getRepository('Kitpages\\DataGridBundle\\Tests\\TestEntities\\Node'); $queryBuilder = $repository->createQueryBuilder("node"); $queryBuilder->select("node"); $gridConfig = new GridConfig(); $gridConfig->setCountFieldName("node.id"); $gridConfig->addField(new Field("node.createdAt", array("sortable" => true, "formatValueCallback" => function ($value) { return $value->format("Y/m/d"); }))); $gridConfig->addField(new Field("node.content", array("formatValueCallback" => function ($value, $row) { return $value . ":" . $row["node.createdAt"]->format("Y"); }))); // get paginator $gridConfig->setQueryBuilder($queryBuilder); $grid = $gridManager->getGrid($gridConfig, $request); $paginator = $grid->getPaginator(); // tests paginator $this->assertEquals(11, $paginator->getTotalItemCount()); // grid test $itemList = $grid->getItemList(); $this->assertEquals(11, count($itemList)); $this->assertEquals(1, $itemList[0]["node.id"]); // simple callback $this->assertEquals("2010/04/24", $grid->displayGridValue($itemList[0], $gridConfig->getFieldByName("node.createdAt"))); $this->assertEquals("foobar:2010", $grid->displayGridValue($itemList[0], $gridConfig->getFieldByName("node.content"))); }
/** * @return Grid */ protected function getGrid() { $queryBuilder = $this->getDoctrine()->getRepository('AppBundle:RegistrationEvent')->getGridQuery(); $gridConfig = new GridConfig(); $gridConfig->setQueryBuilder($queryBuilder)->setCountFieldName('rE.id')->addField(new Field('id', ['label' => 'admin.registration_event.field.id', 'sortable' => true, 'filterable' => true, 'entityFields' => ['rE.id']]))->addField(new Field('domain', ['label' => 'admin.registration_event.field.domain', 'sortable' => true, 'filterable' => true, 'entityFields' => ['rE.domain']]))->addField(new Field('venue', ['label' => 'admin.registration_event.field.venue', 'sortable' => true, 'filterable' => true, 'entityFields' => ['rE.venue']]))->addField(new Field('address', ['label' => 'admin.registration_event.field.address', 'sortable' => true, 'filterable' => true, 'entityFields' => ['rE.address']]))->addField(new Field('city.name', ['label' => 'admin.registration_event.field.city', 'sortable' => true, 'filterable' => true, 'entityFields' => ['cT.name']]))->addField(new Field('state.name', ['label' => 'admin.registration_event.field.state', 'sortable' => true, 'filterable' => true, 'entityFields' => ['s.name']]))->addField(new Field('country.name', ['label' => 'admin.registration_event.field.country', 'sortable' => true, 'filterable' => true, 'entityFields' => ['c.name']]))->addField(new Field('postalCode', ['label' => 'admin.registration_event.field.postal_code', 'sortable' => true, 'filterable' => true, 'entityFields' => ['rE.postalCode']]))->addField(new Field('date', ['label' => 'admin.registration_event.field.date', 'sortable' => true, 'filterable' => true, 'entityFields' => ['rE.date'], 'formatValueCallback' => function ($value) { return $value->format('Y-m-d'); }])); return $this->get('kitpages_data_grid.grid_manager')->getGrid($gridConfig, $this->getRequest()); }