/**
  * Display or save datagrid views
  *
  * @param Request           $request
  * @param string            $alias
  * @param DatagridView|null $view
  *
  * @return Response|JsonResponse
  */
 public function indexAction(Request $request, $alias, DatagridView $view = null)
 {
     $user = $this->getUser();
     if (!$view || $view->getOwner() !== $user) {
         $view = new DatagridView();
         $view->setOwner($user);
         $view->setDatagridAlias($alias);
     }
     $form = $this->createForm('pim_datagrid_view', $view);
     if ($request->isMethod('POST')) {
         $creation = !(bool) $view->getId();
         if (!$creation) {
             $form->remove('label');
         }
         $form->submit($request);
         // If the view was created based on the default view, set the default columns
         if (!$view->getColumns()) {
             $view->setColumns(array_keys($this->datagridViewManager->getColumnChoices($alias, true)));
         }
         $violations = $this->validator->validate($view);
         if ($violations->count()) {
             $messages = [];
             foreach ($violations as $violation) {
                 $messages[] = $this->getTranslator()->trans($violation->getMessage());
             }
             return new JsonResponse(['errors' => $messages]);
         } else {
             $this->datagridViewManager->save($view);
             if ($creation) {
                 $this->addFlash('success', 'flash.datagrid view.created');
             }
             return new JsonResponse(['id' => $view->getId()]);
         }
     }
     $views = $this->datagridViewManager->findPublic($alias);
     return $this->render('PimDataGridBundle:Datagrid:_views.html.twig', ['alias' => $alias, 'views' => $views, 'form' => $form->createView()]);
 }