Example #1
0
 /**
  * @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()];
     }
 }
Example #2
0
 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]);
     }
 }