Пример #1
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;

	}