protected function getCubeData(Request $request) { $cubeParams = array(); if ($templateUri = $request->request->get('_template')) { $template = \Settings\Template::find($templateUri); $cubeParams = json_decode($template->Content->value, true); } elseif ($request->getMethod() === 'POST') { $cubeParams = $request->request->all(); } if (isset($cubeParams['_dimensions'])) { $chosenDimensions = array_keys($cubeParams['_dimensions']); } elseif ($request->getMethod() === 'GET') { $chosenDimensions = $this->getDefaultDimensions(); } else { $chosenDimensions = array(); } if (isset($cubeParams['_facts'])) { $chosenFacts = array_keys($cubeParams['_facts']); } elseif ($request->getMethod() === 'GET') { $chosenFacts = $this->getDefaultFacts(); } else { $chosenFacts = array(); } // check if template is out of date with invalid facts/dimensions if ($templateUri && (count($chosenDimensions) !== count(array_intersect($chosenDimensions, $this->getDimensions())) || count($chosenFacts) !== count(array_intersect($chosenFacts, $this->getFacts())))) { throw new \LogicException('Template "' . $template->Title . '"" is invalid or out of date'); } $filter = $this->getFilter(); if (!$filter instanceof Form) { $filter = $this->createForm($filter); } if ($request->getMethod() === 'POST') { $filter->bind($request); } $specification = $filter->getData(); $cube = $this->getCube(); $builder = new CubeBuilder($cube); $builder->dimensions($chosenDimensions)->facts($chosenFacts)->with($specification); if ($order = $request->get('_order')) { if (is_string($order)) { $order = array($order); } $order = array_intersect($order, array_merge($chosenFacts, $chosenDimensions)); foreach ($order as $property) { $builder->asc($property); } } $items = $builder->analyze(); $result = array('items' => $items, 'dimensions' => $this->getDimensions(), 'facts' => $this->getFacts(), 'filter' => $filter->createView(), 'chosen_dimensions' => $chosenDimensions, 'chosen_facts' => $chosenFacts, 'order' => $order); if ($this->hasTemplating()) { $result['template'] = array('items' => $this->findTemplates(), 'chosen' => $templateUri, 'name' => 'php:cube:' . \NGS\Name::full($cube)); } return $result; }
/** * @Route("/", name="template_save") * @Method({"POST"}) */ public function saveTemplateAction(Request $request) { $content = array(); $uri = $request->get('URI'); $template = $uri ? Template::find($uri) : new Template(); $template->Title = $request->get('Title'); $template->Name = $request->get('Name'); parse_str($request->get('Content'), $content); $template->Content = base64_encode(json_encode($content)); $template->persist(); $this->get('messenger')->info('Template "' . $template->Title . '" saved'); return array('item' => $template); }