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; }
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; }
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; }