Your IP : 172.28.240.42


Current Path : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/rater/
Upload File :
Current File : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/rater/ratings-post-ajax.php

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

	global $_COOKIE;

	// if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) die('AJAX Error');

	mso_checkreferer(); // защищаем реферер

	if ( $post = mso_check_post(array('rating', 'slug')) )
	{
		// данные хранятся в куках посетителя - алгоримт тотже, что и в mso_page_view_count_first
		$name_cookies = 'maxsite_rating';
		$expire = 60 * 60 * 24 * 30; // 30 дней = 2592000 секунд

		if (isset($_COOKIE[$name_cookies]))	$all_slug = $_COOKIE[$name_cookies]; // значения текущего кука
			else $all_slug = ''; // нет такой куки вообще

		$slug = $post['slug']; // слаг страницы откуда пришел запрос

		$all_slug = explode(' ', $all_slug); // разделим в массив

		if ( in_array($slug, $all_slug) ) // уже есть текущий урл - не увеличиваем счетчик
		{
			echo '<span>' . t('Вы уже голосовали!', 'plugins') . '</span>';
			return;
		}

		$rating = (int) $post['rating']; // выставленная оценка

		if ($rating) // есть присланная оценка
		{
			// нужно обновить рейтинг
			$all_slug[] = $slug; // добавляем текущий id
			$all_slug = array_unique($all_slug); // удалим дубли на всякий пожарный
			$all_slug = implode(' ', $all_slug); // соединяем обратно в строку
			$expire = time() + $expire;
			@setcookie($name_cookies, $all_slug, $expire); // записали в куку

			// запишем значение в БД - нужно взять текущее
			// и вычислить среднюю на основе page_rating и page_rating_count

			$CI = & get_instance();

			$CI->db->select('page_rating, page_rating_count, page_slug');
			$CI->db->where('page_id', $slug);
			$CI->db->limit(1);

			$query = $CI->db->get('page');

			if ($query->num_rows() > 0)
			{
				$row = $query->row();
				$page_rating = $row->page_rating; // текущая оценка
				$page_rating_count = $row->page_rating_count; // колличество проголосовавших

				// средняя оценка вычисляется как $page_rating деленное на $page_rating_count
				// но в $page_rating хранится сумма всех оценок!
				$page_rating = $page_rating + $rating;
				$page_rating_count++;


				$CI->db->where('page_id', $slug);
				$CI->db->update('page', array('page_rating'=>$page_rating, 'page_rating_count' => $page_rating_count) );
				
				# $CI->db->cache_delete_all();
				$CI->db->cache_delete('page', $row->page_slug);
				$CI->db->cache_delete('ajax', base64_encode('plugins/rater/ratings-post.php'));
				
				// обнуление рейтинга всех записей
				// $CI->db->update('page', array('page_rating'=>0, 'page_rating_count'=>0) );

				$sredn = round($page_rating / $page_rating_count);

				echo '<span>' . t('Ваша оценка:', 'plugins') . '</span> ' . $rating . '<br><span>' 
							. t('Средняя оценка', 'plugins') . '</span>: ' . $sredn 
							. ' ' . t('из', 'plugins') . ' ' . $page_rating_count . ' ' 
							. t('проголосовавших', 'plugins');
				
				mso_hook('global_cache_all_flush'); // сбрасываем весь html-кэш
			
			}
		}
	}
?>