Ejemplo n.º 1
0
 public function getCredentialReviewArray(CredentialReview $review)
 {
     $r = array();
     $r['id'] = $review->getId();
     $r['title'] = $review->getTitle();
     $r['text'] = nl2br(preg_replace("/[\r\n]+/", "\n\n", $review->getText()));
     $r['status'] = $review->getStatus();
     $r['progress'] = $review->getProgress();
     $r['certificateLink'] = $review->getLink();
     $r['rating'] = $review->getRating();
     $r['formattedRating'] = ReviewUtility::formatRating($review->getRating());
     $r['topicCoverage'] = $review->getTopicCoverage();
     $r['jobReadiness'] = $review->getJobReadiness();
     $r['support'] = $review->getSupport();
     $r['effort'] = $review->getEffort();
     $r['duration'] = $review->getDuration();
     $r['publishedDate'] = $review->getCreated()->format('Y-m-d');
     // Get user details
     $u = array();
     if ($review->getUser()) {
         $userService = $this->container->get('user_service');
         $user = $review->getUser();
         $u['name'] = $user->getDisplayName();
         $u['profileUrl'] = $userService->getProfileUrl($user->getId(), $user->getHandle(), $user->getIsPrivate());
         $u['profilePic'] = $userService->getProfilePic($user->getId());
     } else {
         $u['name'] = $review->getReviewerName() ? $review->getReviewerName() : 'Anonymous';
         $u['profileUrl'] = null;
         $u['profilePic'] = Profile::DEFAULT_PROFILE_PIC;
     }
     $r['user'] = $u;
     $reviewSubtitle = '';
     if ($review->getProgress() == CredentialReview::PROGRESS_TYPE_COMPLETED) {
         // completed the course
         $reviewSubtitle = "completed this credential in " . $review->getDateCompleted()->format('M Y') . ".";
     } else {
         $reviewSubtitle = CredentialReview::$progressListDropdown[$review->getProgress()] . " this credential.";
     }
     $r['reviewSubtitle'] = $reviewSubtitle;
     return $r;
 }
 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());
 }