/** * @Rest\View * @Rest\Post("/actions/{id}/execute") */ public function executeAction($id) { /** @var Request $request */ $request = $this->container->get('request_stack')->getCurrentRequest(); $em = $this->getDoctrine()->getManager(); $user = $this->container->get('security.context')->getToken()->getUser(); /** @var $action Action */ $action = $em->find('AcmeEdelaBundle:Action', $id); $userAction = $em->getRepository('AcmeEdelaBundle:UserAction')->findOneBy(array('user' => $user, 'action' => $action)); $result = $request->get('result', 1); try { if (!$userAction || !$userAction->getIsDayIncluded(new \DateTime()) || $action->getSubactions()->count() && $action->getActionType() == $em->getRepository('AcmeEdelaBundle:ActionType')->findOneByTkey('done')) { throw new \Exception(); } $existingProgress = $em->getRepository('AcmeEdelaBundle:UserActionProgress')->matching(Criteria::create()->where(Criteria::expr()->eq('userAction', $userAction))->andWhere(Criteria::expr()->gte('createdAt', new \DateTime('today midnight')))->andWhere(Criteria::expr()->lte('createdAt', new \DateTime('tomorrow midnight')))); $progressDone = null; if ($existingProgress->count() > 0) { if ($result < 1) { $progressDone = 0; $em->remove($existingProgress->first()); } else { $progress = $existingProgress->first(); $progress->setResult($result); if ($request->get('note')) { $progress->setNote($request->get('note')); $progress->setResult(strlen($request->get('note'))); } } } elseif ($result > 0) { $progressDone = 1; $progress = new UserActionProgress(); $progress->setUserAction($userAction); $progress->setResult($result); if ($request->get('note')) { $progress->setNote($request->get('note')); $progress->setResult(strlen($request->get('note'))); } $em->persist($progress); } $em->flush(); $event = new ActionEvent($action, $user, $progressDone); $dispatcher = $this->get('event_dispatcher'); $dispatcher->dispatch($this->container->getParameter('events.action_complete'), $event); return ['success' => true, 'progress' => $progressDone]; } catch (\Exception $e) { return ['success' => false, 'progress' => 0, 'message' => $e->getMessage()]; } }
public function executeAction($action_id) { /** @var Request $request */ $request = $this->container->get('request_stack')->getCurrentRequest(); $em = $this->getDoctrine()->getManager(); $user = $this->container->get('security.context')->getToken()->getUser(); $action = $em->find('AcmeEdelaBundle:Action', $action_id); $userAction = $em->getRepository('AcmeEdelaBundle:UserAction')->findOneBy(array('user' => $user, 'action' => $action)); try { if (!$userAction || !$userAction->getIsDayIncluded(new \DateTime()) || $action->getSubactions()->count()) { throw new \Exception(); } $existingProgress = $em->getRepository('AcmeEdelaBundle:UserActionProgress')->matching(Criteria::create()->where(Criteria::expr()->eq('userAction', $userAction))->andWhere(Criteria::expr()->gte('createdAt', new \DateTime('today midnight')))->andWhere(Criteria::expr()->lte('createdAt', new \DateTime('tomorrow midnight')))); if ($existingProgress->count() > 0) { throw new \Exception(); } $progress = new UserActionProgress(); $progress->setUserAction($userAction); $progress->setResult($request->get('result', 1)); if ($request->get('note')) { $progress->setNote($request->get('note')); $progress->setResult(strlen($request->get('note'))); } $em->persist($progress); $em->flush(); $success = true; } catch (\Exception $e) { $success = false; } if ($success) { if ($request->isXmlHttpRequest()) { return new JsonResponse(['success' => true, 'text' => $this->renderView('AcmeEdelaBundle:Actions:_one_block.html.twig', array('action' => $action, 'progress' => $progress))]); } else { return new RedirectResponse($this->container->get('router')->generate('tasks_edit', array('task_id' => $action->getId()))); } } else { return new JsonResponse(['success' => false]); } }