Example #1
0
 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);
 }