public function MarketPlaceReviewForm()
 {
     Requirements::javascript(Director::protocol() . "ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js");
     Requirements::javascript(Director::protocol() . "ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/additional-methods.min.js");
     Requirements::combine_files('marketplace_review_form.js', array("themes/openstack/javascript/jquery.validate.custom.methods.js", "marketplace/code/ui/frontend/js/star-rating.min.js", "marketplace/code/ui/frontend/js/marketplace.review.js"));
     $css_files = array("marketplace/code/ui/frontend/css/star-rating.min.css", "marketplace/code/ui/frontend/css/marketplace-review.css");
     foreach ($css_files as $css_file) {
         Requirements::css($css_file);
     }
     $form = new MarketPlaceReviewForm($this, 'MarketPlaceReviewForm');
     $data = Session::get("FormInfo.Form_MarketPlaceReviewForm.data");
     $review = $this->review_repository->getReview($this->company_service_ID, Member::CurrentUserID());
     if (is_array($data)) {
         //get data from cache
         $form->loadDataFrom($data);
     } elseif ($review) {
         // get submitted review
         $form->loadDataFrom($review);
     }
     // Optional spam protection
     if (class_exists('SpamProtectorManager')) {
         SpamProtectorManager::update_form($form);
     }
     return $form;
 }
 /**
  * @return SS_HTTPResponse
  */
 public function addReview()
 {
     try {
         $data = $this->getJsonRequest();
         if (!$data) {
             return $this->serverError();
         }
         $review = $this->review_repository->getReview($this->review_factory->buildProduct($data)->getIdentifier(), Member::CurrentUserID());
         if ($review) {
             $this->review_manager->updateReview($data, $review);
             return $this->updated();
         } else {
             return $this->created($this->review_manager->addReview($data));
         }
     } catch (EntityAlreadyExistsException $ex1) {
         SS_Log::log($ex1, SS_Log::ERR);
         return $this->addingDuplicate($ex1->getMessage());
     } catch (PolicyException $ex2) {
         SS_Log::log($ex2, SS_Log::ERR);
         return $this->validationError($ex2->getMessage());
     } catch (EntityValidationException $ex3) {
         SS_Log::log($ex3, SS_Log::ERR);
         return $this->validationError($ex3->getMessages());
     }
 }