public function saveAction(Request $request, $credentialId) { $em = $this->getDoctrine()->getManager(); $userSession = $this->container->get('user_session'); $user = $this->getUser(); $credential = $em->getRepository('ClassCentralCredentialBundle:Credential')->find($credentialId); if (!$credential) { return UniversalHelper::getAjaxResponse(false, "Credential not found"); } // Get the Json post data $content = $this->getRequest("request")->getContent(); if (empty($content)) { return UniversalHelper::getAjaxResponse(false, "Error retrieving form details"); } $reviewData = json_decode($content, true); $cr = new CredentialReview(); $cr->setCredential($credential); // check if the rating valid if (!isset($reviewData['rating']) && !is_numeric($reviewData['rating'])) { return UniversalHelper::getAjaxResponse(false, 'Rating is required and expected to be a number'); } // Check if the rating is in range if (!($reviewData['rating'] >= 1 && $reviewData['rating'] <= 5)) { return UniversalHelper::getAjaxResponse(false, 'Rating should be between 1 to 5'); } $cr->setRating($reviewData['rating']); // If review exists its length should be atleast 20 words if (!empty($reviewData['reviewText']) && str_word_count($reviewData['reviewText']) < 20) { return UniversalHelper::getAjaxResponse(false, 'Review should be at least 20 words long'); } $cr->setText($reviewData['reviewText']); // If Review exist so does title if (!empty($reviewData['reviewText']) && empty($reviewData['title'])) { return UniversalHelper::getAjaxResponse(false, "Title cannot be empty"); } $cr->setTitle($reviewData['title']); // Progress is mandatory if (empty($reviewData['progress'])) { return UniversalHelper::getAjaxResponse(false, "Progress cannot be empty"); } $progress = $reviewData['progress']; if (in_array($progress, array_keys(CredentialReview::$progressListDropdown))) { $cr->setProgress($progress); } else { $cr->setDateCompleted(new \DateTime($progress)); $cr->setProgress(CredentialReview::PROGRESS_TYPE_COMPLETED); } // Link $cr->setLink($reviewData['certificateLink']); /****** * Could you say a little more about the course */ if (isset($reviewData['topicCoverage']) && $reviewData['topicCoverage'] >= 1 && $reviewData['topicCoverage'] <= 5) { $cr->setTopicCoverage($reviewData['topicCoverage']); } if (isset($reviewData['jobReadiness']) && $reviewData['jobReadiness'] >= 1 && $reviewData['jobReadiness'] <= 5) { $cr->setJobReadiness($reviewData['jobReadiness']); } if (isset($reviewData['support']) && $reviewData['support'] >= 1 && $reviewData['support'] <= 5) { $cr->setSupport($reviewData['support']); } if (!empty($reviewData['effort']) && is_numeric($reviewData['effort'])) { $cr->setEffort($reviewData['effort']); } if (!empty($reviewData['duration']) && is_numeric($reviewData['duration'])) { $cr->setDuration($reviewData['duration']); } /****** * About Me */ // Validate email if (!$user) { $email = $reviewData['email']; if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) { // invalid email return UniversalHelper::getAjaxResponse(false, 'Valid email is required'); } else { $cr->setReviewerEmail($email); } } else { $cr->setUser($user); } if (!empty($reviewData['name'])) { $cr->setReviewerName($reviewData['name']); } if (!empty($reviewData['highestDegree'])) { $degreeId = intval($reviewData['highestDegree']); if (isset(Profile::$degrees[$degreeId])) { $cr->setReviewerHighestDegree(Profile::$degrees[$degreeId]); } } $cr->setReviewerJobTitle($reviewData['jobTitle']); if (!empty($reviewData['fieldOfStudy'])) { $cr->setReviewerFieldOfStudy($reviewData['fieldOfStudy']); } $em->persist($cr); $em->flush(); $userSession->notifyUser(UserSession::FLASH_TYPE_SUCCESS, 'Review Created', "Your review for <i>{$credential->getName()}</i> was saved successfully"); $message = 'New Review for ' . $credential->getName(); // Send a message on Slack. $this->container->get('slack_client')->to('#cc-activity-user')->from('Credential Review')->send($message); // If not a user, then save the session in the activity if (!$user) { $this->get('user_session')->saveAnonActivity('credential_review', $cr->getId()); } return UniversalHelper::getAjaxResponse(true, $cr->getId()); }