Esempio n. 1
0
	public function multiRating()
	{
		
		JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));

		
		$app        = JFactory::getApplication();
		$data       = $app->input->getArray($_POST);
		$documentId = $data['doc_id'];
		$params     = JUDownloadHelper::getParams(null, $documentId);

		
		$canRateDocument = JUDownloadFrontHelperPermission::canRateDocument($documentId);

		JUDownloadHelper::obCleanData();

		if (!$canRateDocument)
		{
			echo JText::_('COM_JUDOWNLOAD_YOU_CAN_NOT_VOTE_ON_THIS_DOCUMENT');
			exit;
		}

		if (!JUDownloadHelper::hasMultiRating())
		{
			echo JText::_('COM_JUDOWNLOAD_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('judl-document-rated-' . $documentId, null);
			if ($lastTimeRated != null)
			{
				if ($timeNowStamp > $lastTimeRated)
				{
					if ($timeNowStamp - $lastTimeRated < $ratingInterval)
					{
						echo JText::_('COM_JUDOWNLOAD_YOU_ARE_ALREADY_VOTED_ON_THIS_DOCUMENT');
						exit;
					}
				}
			}
		}
		else
		{
			$lastTimeRated = JUDownloadFrontHelperRating::getLastTimeVoteDocumentOfUser($user->id, $documentId);
			if (!$lastTimeRated)
			{
				$lastTimeRated = 0;
			}
			$lastTimeRated = strtotime($lastTimeRated);
			if ($lastTimeRated > 0)
			{
				if ($timeNowStamp > $lastTimeRated)
				{
					if ($timeNowStamp - $lastTimeRated < $ratingInterval)
					{
						
						echo JText::_('COM_JUDOWNLOAD_YOU_ARE_ALREADY_VOTED_ON_THIS_DOCUMENT');
						exit;
					}
				}
			}
		}

		
		$dataValid     = array();
		$mainCatId     = JUDownloadFrontHelperCategory::getMainCategoryId($documentId);
		$criteriaArray = JUDownloadFrontHelperCriteria::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_JUDOWNLOAD_VOTING_FAILED_PLEASE_CONTACT_ADMINISTRATOR');
			exit;
		}

		$model = $this->getModel();
		JUDownloadHelper::obCleanData();
		if ($model->saveRating($dataValid, $documentId, $criteriaArray))
		{
			echo JText::_('COM_JUDOWNLOAD_THANK_YOU_FOR_VOTING');

		}
		else
		{
			echo JText::_('COM_JUDOWNLOAD_VOTING_FAILED_PLEASE_CONTACT_ADMINISTRATOR');
		}
		exit;
	}
Esempio n. 2
0
	public function updateRating($data)
	{
		$user          = JFactory::getUser();
		$created       = JFactory::getDate()->toSql();
		$criteriaArray = isset($data['criteria_array']) ? $data['criteria_array'] : array();
		$docId         = $data['doc_id'];
		$commentId     = $data['comment_id'];

		$ratingObj      = $this->getRating($docId, $commentId);
		$ratingId       = $ratingObj->id;
		$ratingScoreOld = $ratingObj->score;
		$ratingScoreNew = JUDownloadFrontHelperRating::calculateRatingScore($data, $docId, $criteriaArray);

		
		$dataRating = array(
			'id'    => $ratingId, 'user_id' => $user->id, 'comment_id' => $commentId,
			'score' => $ratingScoreNew, 'created' => $created, 'doc_id' => $docId
		);

		JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_judownload/tables');
		$ratingTable = JTable::getInstance('Rating', 'JUDownloadTable');
		$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
				{
					JUDownloadMultiRating::insertCriteriaValue($ratingId, $criteria->id, $criteria->value);
				}
			}
		}
		$documentItem = JUDownloadHelper::getDocumentById($docId);
		$rating       = (($documentItem->rating * $documentItem->total_votes) + $ratingScoreNew - $ratingScoreOld) / $documentItem->total_votes;

		
		$db    = JFactory::getDbo();
		$query = $db->getQuery(true);
		$query->update('#__judownload_documents');
		$query->set('rating = ' . $rating);
		$query->where('id = ' . $docId);
		$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('judl-document-rated-' . $docId, $timeNowStamp, time() + 864000, $cookie_path, $cookie_domain);
		
		$session->set('judl-document-rated-' . $docId, $timeNowStamp);

		
		$logData = array(
			'user_id'   => $user->id,
			'event'     => 'document.rate',
			'item_id'   => $docId,
			'doc_id'    => $docId,
			'value'     => $ratingScoreNew,
			'reference' => $ratingTable->id
		);

		JUDownloadFrontHelperLog::addLog($logData);

		return true;

	}
Esempio n. 3
0
	public static function canRateDocument($documentId)
	{
		$documentObject = JUDownloadHelper::getDocumentById($documentId);
		if (!is_object($documentObject))
		{
			return false;
		}

		$params = JUDownloadHelper::getParams(null, $documentId);
		if (!$params->get('enable_document_rate', 1))
		{
			return false;
		}

		$userCanViewDocument = JUDownloadFrontHelperPermission::userCanDoDocument($documentId, true);
		if (!$userCanViewDocument)
		{
			return false;
		}

		$ratingField = new JUDownloadFieldCore_rating();
		if (!$ratingField->canView())
		{
			return false;
		}

		$user            = JFactory::getUser();
		$criteriaGroupId = JUDownloadFrontHelperCriteria::getCriteriaGroupIdByCategoryId($documentObject->cat_id);
		if ($criteriaGroupId == 0 || !JUDownloadHelper::hasMultiRating())
		{
			$assetName = 'com_judownload.category.' . $documentObject->cat_id;
			
			if ($user->authorise('judl.single.rate', $assetName) || (JUDownloadFrontHelperPermission::canDownloadDocument($documentId) && $params->get('can_download_can_rate', 0)))
			{
				if ($user->authorise('judl.single.rate.many_times', $assetName))
				{
					return true;
				}
				else
				{
					
					if ($user->get('guest'))
					{
						$session = JFactory::getSession();
						if (!$session->has('judl-document-rated-' . $documentId))
						{
							return true;
						}
					}
					
					else
					{
						$totalVoteTimes = JUDownloadFrontHelperRating::getTotalDocumentVotesOfUser($user->id, $documentId);
						if ($totalVoteTimes == 0)
						{
							return true;
						}
					}
				}
			}
		}
		else
		{
			$assetName = 'com_judownload.criteriagroup.' . $criteriaGroupId;
			
			if ($user->authorise('judl.criteria.rate', $assetName) || (JUDownloadFrontHelperPermission::canDownloadDocument($documentId) && $params->get('can_download_can_rate', 0)))
			{
				if ($user->authorise('judl.criteria.rate.many_times', $assetName))
				{
					return true;
				}
				else
				{
					
					if ($user->get('guest'))
					{
						$session = JFactory::getSession();
						if (!$session->has('judl-document-rated-' . $documentId))
						{
							return true;
						}
					}
					
					else
					{
						$totalVoteTimes = JUDownloadFrontHelperRating::getTotalDocumentVotesOfUser($user->id, $documentId);
						if ($totalVoteTimes == 0)
						{
							return true;
						}
					}
				}
			}
		}

		return false;
	}