public static function canRateListing($listingId)
 {
     $listingObject = JUDirectoryHelper::getListingById($listingId);
     if (!is_object($listingObject)) {
         return false;
     }
     $params = JUDirectoryHelper::getParams(null, $listingId);
     if (!$params->get('enable_listing_rate', 1)) {
         return false;
     }
     $userCanViewListing = JUDirectoryFrontHelperPermission::userCanDoListing($listingId, true);
     if (!$userCanViewListing) {
         return false;
     }
     $ratingField = new JUDirectoryFieldCore_rating();
     if (!$ratingField->canView()) {
         return false;
     }
     $user = JFactory::getUser();
     $criteriaGroupId = JUDirectoryFrontHelperCriteria::getCriteriaGroupIdByCategoryId($listingObject->cat_id);
     if ($criteriaGroupId == 0 || !JUDirectoryHelper::hasMultiRating()) {
         $assetName = 'com_judirectory.category.' . $listingObject->cat_id;
         if ($user->authorise('judir.single.rate', $assetName)) {
             if ($user->authorise('judir.single.rate.many_times', $assetName)) {
                 return true;
             } else {
                 if ($user->get('guest')) {
                     $session = JFactory::getSession();
                     if (!$session->has('judir-listing-rated-' . $listingId)) {
                         return true;
                     }
                 } else {
                     $totalVoteTimes = JUDirectoryFrontHelperRating::getTotalListingVotesOfUser($user->id, $listingId);
                     if ($totalVoteTimes == 0) {
                         return true;
                     }
                 }
             }
         }
     } else {
         $assetName = 'com_judirectory.criteriagroup.' . $criteriaGroupId;
         if ($user->authorise('judir.criteria.rate', $assetName)) {
             if ($user->authorise('judir.criteria.rate.many_times', $assetName)) {
                 return true;
             } else {
                 if ($user->get('guest')) {
                     $session = JFactory::getSession();
                     if (!$session->has('judir-listing-rated-' . $listingId)) {
                         return true;
                     }
                 } else {
                     $totalVoteTimes = JUDirectoryFrontHelperRating::getTotalListingVotesOfUser($user->id, $listingId);
                     if ($totalVoteTimes == 0) {
                         return true;
                     }
                 }
             }
         }
     }
     return false;
 }
Exemple #2
0
 public function multiRating()
 {
     JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
     $app = JFactory::getApplication();
     $data = $app->input->getArray($_POST);
     $listingId = $data['listing_id'];
     $params = JUDirectoryHelper::getParams(null, $listingId);
     $canRateListing = JUDirectoryFrontHelperPermission::canRateListing($listingId);
     JUDirectoryHelper::obCleanData();
     if (!$canRateListing) {
         echo JText::_('COM_JUDIRECTORY_YOU_CAN_NOT_VOTE_ON_THIS_LISTING');
         exit;
     }
     if (!JUDirectoryHelper::hasMultiRating()) {
         echo JText::_('COM_JUDIRECTORY_MULTI_RATING_HAS_BEEN_DISABLED_PLEASE_CONTACT_ADMINISTRATOR');
         exit;
     }
     $inputCookie = $app->input->cookie;
     $ratingInterval = $params->get('rating_interval', 86400);
     $user = JFactory::getUser();
     $timeNow = JFactory::getDate()->toSql();
     $timeNowStamp = strtotime($timeNow);
     if ($user->get('guest')) {
         $lastTimeRated = $inputCookie->get('judir-listing-rated-' . $listingId, null);
         if ($lastTimeRated != null) {
             if ($timeNowStamp > $lastTimeRated) {
                 if ($timeNowStamp - $lastTimeRated < $ratingInterval) {
                     echo JText::_('COM_JUDIRECTORY_YOU_ARE_ALREADY_VOTED_ON_THIS_LISTING');
                     exit;
                 }
             }
         }
     } else {
         $lastTimeRated = JUDirectoryFrontHelperRating::getLastTimeVoteListingOfUser($user->id, $listingId);
         if (!$lastTimeRated) {
             $lastTimeRated = 0;
         }
         $lastTimeRated = strtotime($lastTimeRated);
         if ($lastTimeRated > 0) {
             if ($timeNowStamp > $lastTimeRated) {
                 if ($timeNowStamp - $lastTimeRated < $ratingInterval) {
                     echo JText::_('COM_JUDIRECTORY_YOU_ARE_ALREADY_VOTED_ON_THIS_LISTING');
                     exit;
                 }
             }
         }
     }
     $dataValid = array();
     $mainCatId = JUDirectoryFrontHelperCategory::getMainCategoryId($listingId);
     $criteriaArray = JUDirectoryFrontHelperCriteria::getCriteriasByCatId($mainCatId);
     $postCriteria = $data['criteria'];
     if (count($criteriaArray) > 0) {
         foreach ($criteriaArray as $key => $criteria) {
             if ($criteria->required) {
                 if (isset($postCriteria[$criteria->id]) && $postCriteria[$criteria->id] > 0 && $postCriteria[$criteria->id] <= 10) {
                     $criteria->value = $postCriteria[$criteria->id];
                 } else {
                     echo JText::_('Invalid Field ' . $criteria->title);
                     exit;
                 }
             } else {
                 if (isset($postCriteria[$criteria->id]) && $postCriteria[$criteria->id] > 0 && $postCriteria[$criteria->id] <= 10) {
                     $criteria->value = $postCriteria[$criteria->id];
                 } else {
                     unset($criteriaArray[$key]);
                 }
             }
         }
     } else {
         echo JText::_('COM_JUDIRECTORY_VOTING_FAILED_PLEASE_CONTACT_ADMINISTRATOR');
         exit;
     }
     $model = $this->getModel();
     JUDirectoryHelper::obCleanData();
     if ($model->saveRating($dataValid, $listingId, $criteriaArray)) {
         echo JText::_('COM_JUDIRECTORY_THANK_YOU_FOR_VOTING');
     } else {
         echo JText::_('COM_JUDIRECTORY_VOTING_FAILED_PLEASE_CONTACT_ADMINISTRATOR');
     }
     exit;
 }
Exemple #3
0
 public function updateRating($data)
 {
     $user = JFactory::getUser();
     $created = JFactory::getDate()->toSql();
     $criteriaArray = isset($data['criteria_array']) ? $data['criteria_array'] : array();
     $listingId = $data['listing_id'];
     $commentId = $data['comment_id'];
     $ratingObj = $this->getRating($listingId, $commentId);
     $ratingId = $ratingObj->id;
     $ratingScoreOld = $ratingObj->score;
     $ratingScoreNew = JUDirectoryFrontHelperRating::calculateRatingScore($data, $listingId, $criteriaArray);
     $dataRating = array('id' => $ratingId, 'user_id' => $user->id, 'comment_id' => $commentId, 'score' => $ratingScoreNew, 'created' => $created, 'listing_id' => $listingId);
     JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_judirectory/tables');
     $ratingTable = JTable::getInstance('Rating', 'JUDirectoryTable');
     $ratingTable->bind($dataRating);
     if (!$ratingTable->check()) {
         return false;
     }
     $ratingStore = $ratingTable->store();
     if (!$ratingStore) {
         return false;
     }
     if ($ratingStore && count($criteriaArray) > 0) {
         $oldCriteriaIdArr = $this->getCriteriasId($ratingId);
         $criteriaIdArr = array();
         foreach ($criteriaArray as $criteria) {
             $criteriaIdArr[] = $criteria->id;
         }
         $flagUpdate = false;
         if (count(array_diff($criteriaIdArr, $oldCriteriaIdArr)) == 0) {
             $flagUpdate = true;
         }
         if ($flagUpdate == false) {
             $this->deleteCriteriasByRatingId($ratingId);
         }
         foreach ($criteriaArray as $criteria) {
             if ($flagUpdate == true) {
                 $this->updateCriteriaValue($ratingId, $criteria->id, $criteria->value);
             } else {
                 JUDirectoryMultiRating::insertCriteriaValue($ratingId, $criteria->id, $criteria->value);
             }
         }
     }
     $listingItem = JUDirectoryHelper::getListingById($listingId);
     $rating = ($listingItem->rating * $listingItem->total_votes + $ratingScoreNew - $ratingScoreOld) / $listingItem->total_votes;
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->update('#__judirectory_listings');
     $query->set('rating = ' . $rating);
     $query->where('id = ' . $listingId);
     $db->setQuery($query);
     $db->execute();
     $session = JFactory::getSession();
     $timeNow = JFactory::getDate()->toSql();
     $timeNowStamp = strtotime($timeNow);
     $inputCookie = JFactory::getApplication()->input->cookie;
     $config = JFactory::getConfig();
     $cookie_domain = $config->get('cookie_domain', '');
     $cookie_path = $config->get('cookie_path', '/');
     $inputCookie->set('judir-listing-rated-' . $listingId, $timeNowStamp, time() + 864000, $cookie_path, $cookie_domain);
     $session->set('judir-listing-rated-' . $listingId, $timeNowStamp);
     $logData = array('user_id' => $user->id, 'event' => 'listing.rate', 'item_id' => $listingId, 'listing_id' => $listingId, 'value' => $ratingScoreNew, 'reference' => $ratingTable->id);
     JUDirectoryFrontHelperLog::addLog($logData);
     return true;
 }