/** * @Route("/protocol/{protocol_id}/monitoring/{monitoring_action_id}", name="protocol_new_monitoring_that_not_amendment") * @Template() */ public function monitoringCreateThatNotAmendmentAction($protocol_id, $monitoring_action_id) { $output = array(); $request = $this->getRequest(); $session = $request->getSession(); $translator = $this->get('translator'); $em = $this->getDoctrine()->getManager(); $user = $this->get('security.token_storage')->getToken()->getUser(); $util = new Util($this->container, $this->getDoctrine()); $protocol_repository = $em->getRepository('Proethos2ModelBundle:Protocol'); $monitoring_action_repository = $em->getRepository('Proethos2ModelBundle:MonitoringAction'); $upload_type_repository = $em->getRepository('Proethos2ModelBundle:UploadType'); $submission_upload_repository = $em->getRepository('Proethos2ModelBundle:SubmissionUpload'); $user_repository = $em->getRepository('Proethos2ModelBundle:User'); // getting the current submission $protocol = $protocol_repository->find($protocol_id); $output['protocol'] = $protocol; if (!$protocol) { throw $this->createNotFoundException($translator->trans('No protocol found')); } if (!$protocol->getMainSubmission()->isOwner($user)) { throw $this->createNotFoundException($translator->trans('You don\'t have access to do this')); } $monitoring_action = $monitoring_action_repository->find($monitoring_action_id); $output['monitoring_action'] = $monitoring_action; $submission = $protocol->getMainSubmission(); $output['submission'] = $submission; $upload_types = $upload_type_repository->findByStatus(true); $output['upload_types'] = $upload_types; if (!$monitoring_action) { throw $this->createNotFoundException($translator->trans('Monitoring action does not exist')); } // checking if was a post request if ($this->getRequest()->isMethod('POST')) { // getting post data $post_data = $request->request->all(); $file = $request->files->get('new-atachment-file'); if (!empty($file)) { if (!isset($post_data['new-atachment-type']) or empty($post_data['new-atachment-type'])) { $session->getFlashBag()->add('error', $translator->trans("Field 'new-atachment-type' is required.")); return $output; } $upload_type = $upload_type_repository->find($post_data['new-atachment-type']); if (!$upload_type) { throw $this->createNotFoundException($translator->trans('No upload type found')); return $output; } $submission_upload = new SubmissionUpload(); $submission_upload->setSubmission($submission); $submission_upload->setUploadType($upload_type); $submission_upload->setUser($user); $submission_upload->setFile($file); $submission_upload->setSubmissionNumber($submission->getNumber()); $submission_upload->setIsMonitoringAction(true); $em = $this->getDoctrine()->getManager(); $em->persist($submission_upload); $em->flush(); $submission->addAttachment($submission_upload); $em = $this->getDoctrine()->getManager(); $em->persist($submission); $em->flush(); $session->getFlashBag()->add('success', $translator->trans("File uploaded with sucess.")); return $this->redirectToRoute('protocol_new_monitoring_that_not_amendment', array('protocol_id' => $protocol_id, 'monitoring_action_id' => $monitoring_action_id), 301); } if (isset($post_data['delete-attachment-id']) and !empty($post_data['delete-attachment-id'])) { $submission_upload = $submission_upload_repository->find($post_data['delete-attachment-id']); if ($submission_upload) { $em->remove($submission_upload); $em->flush(); $session->getFlashBag()->add('success', $translator->trans("File removed with sucess.")); return $output; } } // checking required files foreach (array('monitoring-action', 'justification') as $field) { if (!isset($post_data[$field]) or empty($post_data[$field])) { $session->getFlashBag()->add('error', $translator->trans("Field '%field%' is required.", array("%field%" => $field))); return $output; } } foreach ($protocol->getMainSubmission()->getAttachments() as $submission_upload) { $submission_upload->setIsMonitoringAction(false); $em->persist($submission_upload); $em->flush(); } $protocol->setMonitoringAction($monitoring_action); $em->persist($protocol); $em->flush(); // setting the Rejected status $protocol->setStatus("S"); $protocol->setUpdatedIn(new \DateTime()); // setting protocool history $message = $translator->trans("New amendment submited by"); $message .= ' "' . $user . '" '; $message .= $translator->trans("with this justification:"); $message .= ' "' . $post_data['justification'] . '"'; $protocol_history = new ProtocolHistory(); $protocol_history->setProtocol($protocol); $protocol_history->setMessage($message); $em->persist($protocol_history); $em->flush(); // sending email $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath(); $url = $baseurl . $this->generateUrl('protocol_show_protocol', array("protocol_id" => $protocol->getId())); $recipients = array(); foreach ($user_repository->findAll() as $secretary) { if (in_array("secretary", $secretary->getRolesSlug())) { $recipients[] = $secretary; } } foreach ($recipients as $recipient) { $message = \Swift_Message::newInstance()->setSubject("[proethos2] " . $translator->trans("A new monitoring action has been submitted."))->setFrom($util->getConfiguration('committee.email'))->setTo($recipient->getEmail())->setBody($translator->trans("Hello!") . "<br>" . "<br>" . $translator->trans("A new monitoring action has been submitted. Access the link below for more details") . ":" . "<br>" . "<br>{$url}" . "<br>" . "<br>" . $translator->trans("Regards") . "," . "<br>" . $translator->trans("Proethos2 Team"), 'text/html'); $send = $this->get('mailer')->send($message); } $session->getFlashBag()->add('success', $translator->trans("Amendment submitted with success!")); return $this->redirectToRoute('crud_investigator_protocol_list', array(), 301); } return $output; }