Initial commit
This commit is contained in:
16
README.md
16
README.md
@@ -1,3 +1,15 @@
|
||||
# rating
|
||||
### rating
|
||||
|
||||
Модуль рейтинг Только для AVE.CMS ALT
|
||||
## Модуль Рейтинг v1.26.1
|
||||
|
||||
### Данный модуль предназначен присваивать рейтинг документам.
|
||||
|
||||
* Для оценки документа (рейтинга), нужно разместить системный тег <strong>[mod_rating]</strong> на странице необходимого документа.
|
||||
* Вывод результатов (РЕЗУЛЬТАТОВ! НЕ ВОЗМОЖНОСТИ СТАВИТЬ ОЦЕНКУ!) рейтинга документа в других документах, запросами и .т.д. :
|
||||
* Разместите в нужном месте [mod_rating:[tag:docid]] или [mod_rating:ХХХ] где XXX - ID документа, рейтинг которого нужно вывести.
|
||||
|
||||
### Changelog:
|
||||
|
||||
04.09.2019 - версия 1.26.1 - адаптация для версии ave.cms 3.26
|
||||
|
||||
10.06.2016 - старт версии 1.1
|
||||
73
admin/admin_ratings.tpl
Normal file
73
admin/admin_ratings.tpl
Normal file
@@ -0,0 +1,73 @@
|
||||
<div class="title"><h5>{#RATING_MODULE_NAME#}</h5></div>
|
||||
|
||||
<div class="widget" style="margin-top: 0px;">
|
||||
<div class="body">
|
||||
{#RATING_STATISTIC#}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="breadCrumbHolder module">
|
||||
<div class="breadCrumb module">
|
||||
<ul>
|
||||
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
|
||||
<li><a href="index.php?do=modules&cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
|
||||
<li><a href="index.php?do=modules&action=modedit&mod=rating&moduleaction=1&cp={$sess}">{#RATING_MODULE_NAME#}</a></li>
|
||||
<li><strong class="code">{#RATING_STATISTIC#}</strong></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="widget first">
|
||||
<div class="head">
|
||||
<h5 class="iFrames">{#RATING_LAST_TEN#}</h5>
|
||||
<div class="num"><a class="basicNum" href="index.php?do=modules&action=modedit&mod=rating&moduleaction=settings&cp={$sess}">{#RATING_MODULE_SETTINGS#}</a></div>
|
||||
</div>
|
||||
|
||||
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic mainForm">
|
||||
<col width="20">
|
||||
<col>
|
||||
<col width="250">
|
||||
<col width="150">
|
||||
<col width="150">
|
||||
<col width="150">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>{#RATING_ID#}</td>
|
||||
<td>{#RATING_DOCUMENT#}</td>
|
||||
<td>{#RATING_RATE#}</td>
|
||||
<td>{#RATING_USER_ID#}</td>
|
||||
<td>{#RATING_DATE#}</td>
|
||||
<td>{#RATING_IP#}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{if $ratings}
|
||||
{foreach from=$ratings item=rating}
|
||||
<tr id="tr{$rating->id}">
|
||||
<td class="itcen">{$rating->Id}</td>
|
||||
<td>{$rating->rating_name} (ID: {$rating->rating_id_doc})</td>
|
||||
<td align="center">
|
||||
{section name=stars loop=$rating->rating_vote step=1 start=0}
|
||||
<img src="{$ABS_PATH}modules/rating/admin/star.png" />
|
||||
{/section}
|
||||
</td>
|
||||
<td align="center">{$rating->rating_id_user|escape}</td>
|
||||
<td align="center"><span class="date_text dgrey">{$rating->rating_date|date_format:'%d %B %Y, %H:%M'|pretty_date}</span></td>
|
||||
<td align="center"><span class="date_text dgrey">{$rating->rating_user_ip|escape}</span></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
{else}
|
||||
<tr>
|
||||
<td colspan="9">
|
||||
<ul class="messages">
|
||||
<li class="highlight yellow">{#RATING_NO_ITEMS#}</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
81
admin/admin_settings.tpl
Normal file
81
admin/admin_settings.tpl
Normal file
@@ -0,0 +1,81 @@
|
||||
<div class="title"><h5>{#RATING_MODULE_NAME#}</h5></div>
|
||||
|
||||
<div class="widget" style="margin-top: 0px;">
|
||||
<div class="body">
|
||||
{#RATING_MODULE_SETTINGS#}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="breadCrumbHolder module">
|
||||
<div class="breadCrumb module">
|
||||
<ul>
|
||||
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
|
||||
<li><a href="index.php?do=modules&cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
|
||||
<li><a href="index.php?do=modules&action=modedit&mod=rating&moduleaction=1&cp={$sess}">{#RATING_MODULE_NAME#}</a></li>
|
||||
<li><strong class="code">{#RATING_MODULE_SETTINGS#}</strong></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="widget first">
|
||||
<div class="head">
|
||||
<h5 class="iFrames">{#RATING_MODULE_SETTINGS#}</h5>
|
||||
<div class="num"><a class="basicNum" href="index.php?do=modules&action=modedit&mod=rating&moduleaction=1&cp={$sess}">{#RATING_STATISTIC#}</a></div>
|
||||
</div>
|
||||
|
||||
<form action="index.php?do=modules&action=modedit&mod=rating&moduleaction=settings&cp={$sess}&sub=save" method="post" class="mainForm">
|
||||
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic">
|
||||
<tr class="noborder">
|
||||
<td width="240">{#RATING_ENABLE#}</td>
|
||||
<td><input name="rating_active" type="checkbox" value="1" {if $rating_active=='1'}checked{/if} /></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="240">{#RATING_SETTINGS_STARS#}</td>
|
||||
<td>
|
||||
<select {$dis} style="width:100px" name="rating_stars" id="rating_stars" class="mousetrap">
|
||||
{section name=stars loop=10 step=1 start=0}
|
||||
<option value="{$smarty.section.stars.index+1}"{if $rating_stars==$smarty.section.stars.index+1} selected="selected"{/if}>{$smarty.section.stars.index+1}</option>
|
||||
{/section}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="240">{#RATING_ROUND#}</td>
|
||||
<td>
|
||||
<select {$dis} style="width:200px" name="rating_round" id="rating_round" class="mousetrap">
|
||||
<option value="0"{if $rating_round==0} selected="selected"{/if}>{#RATING_ROUND_1#}</option>
|
||||
<option value="1"{if $rating_round==1} selected="selected"{/if}>{#RATING_ROUND_2#}</option>
|
||||
<option value="2"{if $rating_round==2} selected="selected"{/if}>{#RATING_ROUND_3#}</option>
|
||||
<option value="3"{if $rating_round==3} selected="selected"{/if}>{#RATING_ROUND_4#}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="240">{#RATING_FOR_GROUPS#}</td>
|
||||
<td>
|
||||
<select name="rating_user_groups[]" multiple="multiple" size="5" style="width:300px">
|
||||
{foreach from=$groups item=g}
|
||||
{assign var='sel' value=''}
|
||||
{if $g->user_group}
|
||||
{if (in_array($g->user_group,$rating_user_groups)) }
|
||||
{assign var='sel' value='selected'}
|
||||
{/if}
|
||||
{/if}
|
||||
<option value="{$g->user_group}" {$sel}>{$g->user_group_name|escape}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2"><input type="submit" value="{#RATING_BUTTON_SAVE#}" class="basicBtn" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
BIN
admin/star.png
Normal file
BIN
admin/star.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 840 B |
310
class/rating.php
Normal file
310
class/rating.php
Normal file
@@ -0,0 +1,310 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Класс работы с модулем Звездный рейтинг
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @subpackage mod_rating
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
class docRating
|
||||
{
|
||||
/**
|
||||
* Свойства класса
|
||||
*/
|
||||
|
||||
/**
|
||||
* Идентификатор записи с настройками модуля
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
var $_config_id = 1;
|
||||
|
||||
/**
|
||||
* Имя файла с шаблоном списка голосов в административной части
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $_admin_ratings_tpl = 'admin_ratings.tpl';
|
||||
|
||||
/**
|
||||
* Имя файла с шаблоном редактирования настроек модуля в административной части
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $_admin_settings_tpl = 'admin_settings.tpl';
|
||||
|
||||
/**
|
||||
* Имя файла с шаблоном в публичной части
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
var $rating_tpl = 'rating.tpl';
|
||||
|
||||
/**
|
||||
* Внешние методы класса
|
||||
*/
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для получения основных настроек модуля, которые задаются в Панели управления.
|
||||
*
|
||||
* @param string $param название параметра
|
||||
* @return mixed значение настройки
|
||||
*/
|
||||
function _ratingSettingsGet ($param = '')
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
// Определяем статическую переменную, которая будет хранить полученные настройки
|
||||
// на протяжении всего срока жизни объекта.
|
||||
static $settings = null;
|
||||
|
||||
// Если переменная $settings еще не имеет значений, тогда выполняем
|
||||
// запрос к БД на получение данных
|
||||
if ($settings === null)
|
||||
{
|
||||
$settings = $AVE_DB->Query("
|
||||
SELECT *
|
||||
FROM " . PREFIX . "_module_rating_settings
|
||||
WHERE Id = '" . $this->_config_id . "'
|
||||
")->FetchAssocArray();
|
||||
}
|
||||
|
||||
if ($param == '') return $settings;
|
||||
|
||||
// В противном случае возвращаем уже имеющиеся значения
|
||||
return (isset($settings[$param]) ? $settings[$param] : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для получения Title документа.
|
||||
*
|
||||
* @param string $id ID документа
|
||||
*/
|
||||
function _ratingGetDocumentTitle ($id)
|
||||
{
|
||||
global $AVE_DB;
|
||||
|
||||
$doc_title = $AVE_DB->Query("
|
||||
SELECT document_title
|
||||
FROM " . PREFIX . "_documents
|
||||
WHERE id = '" . $id . "'
|
||||
")->GetCell();
|
||||
|
||||
// В противном случае возвращаем уже имеющиеся значения
|
||||
return $doc_title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для вывода модуля рейтинга в публичной части
|
||||
*
|
||||
* @param string $doc_id ID документа
|
||||
* @param string $type параметр определяющий где выводится модуль (документ|запрос)
|
||||
*/
|
||||
function show ($doc_id, $type)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
// Проверяем, что в настройках модуль активен
|
||||
if ($this->_ratingSettingsGet('rating_active') == 1)
|
||||
{
|
||||
// Разрешаем показ модуля на странице
|
||||
$rating_sett['display_rating'] = 1;
|
||||
|
||||
// Если группа пользователя, который в текущий момент просматривает документ попадает в список
|
||||
// разрешенных (в настройках модуля), тогда создаем флаг, который будет разрешать к показу
|
||||
// функцию голосования
|
||||
if (in_array(UGROUP, explode(',', $this->_ratingSettingsGet('rating_user_groups'))))
|
||||
{
|
||||
$rating_sett['rating_can'] = 1;
|
||||
}
|
||||
|
||||
$rating_sett['rating_stars'] = $this->_ratingSettingsGet('rating_stars'); // Кол-во звезд
|
||||
$rating_sett['rating_round'] = $this->_ratingSettingsGet('rating_round'); // Округление
|
||||
|
||||
$rating = $AVE_DB->Query("
|
||||
SELECT *
|
||||
FROM " . PREFIX . "_module_rating_summary
|
||||
WHERE rating_id_doc = '" . $doc_id . "'
|
||||
")->FetchAssocArray();
|
||||
|
||||
@$rating['rating_type'] = $type;
|
||||
@$rating['rating_total'] = (int)$rating['rating_total'];
|
||||
@$rating['rating_sum'] = (int)$rating['rating_sum'];
|
||||
@$rating['rating_math'] = (round(100/$rating_sett['rating_stars'], 0));
|
||||
@$rating['rating_percent'] = (round($rating['rating_sum']/$rating['rating_total'], $rating_sett['rating_round']))*$rating['rating_math'];
|
||||
@$rating['rating_doc_id'] = $doc_id;
|
||||
@$rating['rating_rating'] = round($rating['rating_sum']/$rating['rating_total'], $rating_sett['rating_round']);
|
||||
|
||||
$AVE_Template->assign($rating);
|
||||
$AVE_Template->assign($rating_sett);
|
||||
$AVE_Template->display($this->tpl_dir . $this->rating_tpl);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для обработки голоса
|
||||
*
|
||||
* @param string $doc_id ID документа
|
||||
* @param string $rate Голос
|
||||
*/
|
||||
function vote ($doc_id, $rate)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
|
||||
// Если группа пользователя, который в текущий момент просматривает документ попадает в список
|
||||
// разрешенных (в настройках модуля), тогда создаем флаг, который будет разрешать к показу
|
||||
// функцию голосования
|
||||
if (in_array(UGROUP, explode(',', $this->_ratingSettingsGet('rating_user_groups'))))
|
||||
{
|
||||
|
||||
$user_indent = (isset($_SESSION['user_id']) ? "AND rating_id_user = '". (int)$_SESSION['user_id'] ."'" : "AND rating_user_ip = '". $_SERVER['REMOTE_ADDR'] . "'");
|
||||
|
||||
$rating_exist_detail = (int)$AVE_DB->Query("
|
||||
SELECT COUNT(*) FROM ". PREFIX . "_module_rating_details
|
||||
WHERE
|
||||
rating_id_doc = ". $doc_id ."
|
||||
". $user_indent ."
|
||||
")->GetCell();
|
||||
|
||||
$rating_exist_summary = (int)$AVE_DB->Query("
|
||||
SELECT COUNT(*) FROM ". PREFIX . "_module_rating_summary
|
||||
WHERE rating_id_doc = " . $doc_id
|
||||
)->GetCell();
|
||||
|
||||
if ($rate < 1 || $rate > $this->_ratingSettingsGet('rating_stars')) exit;
|
||||
|
||||
if ($rating_exist_detail === 1)
|
||||
{
|
||||
exit (json_encode(array(0,$AVE_Template->get_config_vars('RATING_ALREADY'))));
|
||||
}
|
||||
else
|
||||
{
|
||||
$AVE_DB->Query("
|
||||
INSERT INTO ". PREFIX . "_module_rating_details
|
||||
SET
|
||||
rating_id_doc = '" . $doc_id . "',
|
||||
rating_id_user = '" . (int)$_SESSION['user_id'] ."',
|
||||
rating_vote = '" . $rate . "',
|
||||
rating_date = '" . time() . "',
|
||||
rating_user_ip = '" . $_SERVER['REMOTE_ADDR'] . "'
|
||||
");
|
||||
|
||||
if ($rating_exist_summary === 1)
|
||||
{
|
||||
$AVE_DB->Query("
|
||||
UPDATE ". PREFIX . "_module_rating_summary
|
||||
SET
|
||||
rating_total = rating_total + 1,
|
||||
rating_sum = rating_sum + " . $rate . "
|
||||
WHERE
|
||||
rating_id_doc = ". $doc_id ."
|
||||
");
|
||||
}
|
||||
else
|
||||
{
|
||||
$AVE_DB->Query("
|
||||
INSERT INTO ". PREFIX . "_module_rating_summary
|
||||
SET
|
||||
rating_id_doc = '" . $doc_id . "',
|
||||
rating_total = '1',
|
||||
rating_sum = '" . $rate . "'
|
||||
");
|
||||
}
|
||||
|
||||
$rating = $AVE_DB->Query("
|
||||
SELECT *
|
||||
FROM " . PREFIX . "_module_rating_summary
|
||||
WHERE rating_id_doc = '" . $doc_id . "'
|
||||
")->FetchAssocArray();
|
||||
$rating_sett['rating_stars'] = $this->_ratingSettingsGet('rating_stars'); // Кол-во звезд
|
||||
$rating_sett['rating_round'] = $this->_ratingSettingsGet('rating_round'); // Округление
|
||||
$rating['rating_math'] = (round(100/$rating_sett['rating_stars'], 0));
|
||||
$rating['rating_total'] = (int)$rating['rating_total'];
|
||||
$rating['rating_percent'] = (round($rating['rating_sum']/$rating['rating_total'], $rating_sett['rating_round']))*$rating['rating_math'];
|
||||
$rating['rating_rating'] = round($rating['rating_sum']/$rating['rating_total'], $rating_sett['rating_round']);
|
||||
|
||||
exit (json_encode(array(1,$AVE_Template->get_config_vars('RATING_THANKS'), $rating['rating_total'], $rating['rating_percent'], $rating['rating_rating'])));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
exit (json_encode(array(0,$AVE_Template->get_config_vars('RATING_UGROUP'))));
|
||||
}
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для вывода последних
|
||||
* голосов на главной странице модуля
|
||||
*
|
||||
* @param string $adm_dir - путь к шаблонам модуля
|
||||
*/
|
||||
function ratingAdminListShow ($adm_dir)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
$sql = $AVE_DB->Query("
|
||||
SELECT * FROM " . PREFIX . "_module_rating_details
|
||||
ORDER BY Id DESC
|
||||
LIMIT 0, 10
|
||||
");
|
||||
// Формируем массив из полученных данных
|
||||
while ($row = $sql->FetchRow())
|
||||
{
|
||||
$row->rating_name = $this->_ratingGetDocumentTitle($row->rating_id_doc);
|
||||
$row->rating_id_user = get_username_by_id($row->rating_id_user);
|
||||
|
||||
$ratings[] = $row;
|
||||
}
|
||||
|
||||
$AVE_Template->assign('ratings', $ratings);
|
||||
$AVE_Template->assign('content', $AVE_Template->fetch($adm_dir . $this->_admin_ratings_tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для управления настройками модуля
|
||||
*
|
||||
* @param string $adm_dir - путь к шаблонам модуля
|
||||
*/
|
||||
function ratingAdminSettingsEdit ($adm_dir)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
// Если в запросе содержится подзапрос на сохранение данных (пользователь нажал кнопку
|
||||
// сохранить изменения), тогда выполняем запрос к БД на обновление информации.
|
||||
|
||||
if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
|
||||
{
|
||||
$AVE_DB->Query("
|
||||
UPDATE " . PREFIX . "_module_rating_settings
|
||||
SET
|
||||
rating_user_groups = '" . @implode(',', $_POST['rating_user_groups']) . "',
|
||||
rating_stars = '" . @(int)$_POST['rating_stars'] . "',
|
||||
rating_round = '" . @(int)$_POST['rating_round'] . "',
|
||||
rating_active = '" . @(int)$_POST['rating_active'] . "'
|
||||
WHERE
|
||||
Id = 1
|
||||
");
|
||||
|
||||
// Сохраняем системное сообщение в журнал
|
||||
reportLog($AVE_Template->get_config_vars('RATING_SETTINGS_SAVE'));
|
||||
|
||||
// Выполняем обновление страницы с настройками модуля
|
||||
header('Location:index.php?do=modules&action=modedit&mod=rating&moduleaction=settings&cp=' . SESSION);
|
||||
}
|
||||
|
||||
// Получаем список всех настроек модуля
|
||||
$row = $this->_ratingSettingsGet();
|
||||
$row['rating_user_groups'] = explode(',', $row['rating_user_groups']);
|
||||
|
||||
// Передаем данные в шаблон и показываем страницу с настройками модуля
|
||||
$AVE_Template->assign($row);
|
||||
$AVE_Template->assign('content', $AVE_Template->fetch($adm_dir . $this->_admin_settings_tpl));
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
68
css/rating.css
Normal file
68
css/rating.css
Normal file
@@ -0,0 +1,68 @@
|
||||
.rating {
|
||||
position: relative;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.rating_name, .rating_total, .rating_summary {
|
||||
position: relative;
|
||||
float: left;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
}
|
||||
|
||||
.rating_total, .rating_summary {
|
||||
margin: 0 0 0 5px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.rating_vote {
|
||||
position: relative;
|
||||
float: left;
|
||||
margin: 0;
|
||||
height: 16px;
|
||||
background: url(../images/skin.png) left top repeat-x;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.rating_not_vote {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.rating_hover, .rating_percent {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 0;
|
||||
background: url(../images/skin.png) repeat-x;
|
||||
}
|
||||
|
||||
.rating_percent {
|
||||
background-position: left center;
|
||||
}
|
||||
|
||||
.rating_hover {
|
||||
background-position: left bottom;
|
||||
}
|
||||
|
||||
.rating_mark {
|
||||
position: relative;
|
||||
float: left;
|
||||
width: 18px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.rating_status {
|
||||
position: absolute;
|
||||
top: 16px;
|
||||
right: 0;
|
||||
left: 0;
|
||||
display: none;
|
||||
height: 16px;
|
||||
color: #aaa;
|
||||
text-align: left;
|
||||
font-size: 11px;
|
||||
line-height: 20px;
|
||||
}
|
||||
BIN
images/skin.png
Normal file
BIN
images/skin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
BIN
images/skin_old.png
Normal file
BIN
images/skin_old.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
20
info.php
Normal file
20
info.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
if (! defined('BASE_DIR'))
|
||||
exit;
|
||||
|
||||
$module = array(
|
||||
'ModuleSysName' => 'rating',
|
||||
'ModuleVersion' => '1.26.1',
|
||||
'ModuleAutor' => 'AVE.cms Team',
|
||||
'ModuleCopyright' => '© 2007-' . date('Y') . ' AVE.cms',
|
||||
'ModuleStatus' => 1,
|
||||
'ModuleIsFunction' => 1,
|
||||
'ModuleTemplate' => 0,
|
||||
'ModuleAdminEdit' => 1,
|
||||
'ModuleFunction' => 'mod_rating',
|
||||
'ModuleTag' => '[mod_rating]',
|
||||
'ModuleTagLink' => null,
|
||||
'ModuleAveTag' => '#\\\[mod_rating(:[\\\d]+)?]#',
|
||||
'ModulePHPTag' => "<?php mod_rating(''$1''); ?>"
|
||||
);
|
||||
?>
|
||||
43
js/rating.js
Normal file
43
js/rating.js
Normal file
@@ -0,0 +1,43 @@
|
||||
window.onload = function() {
|
||||
// Рейтинг
|
||||
$('.rating_mark').click(function(e) {
|
||||
e.preventDefault();
|
||||
var rating, doc_id, mark;
|
||||
rating = $(this).parents('.rating');
|
||||
doc_id = rating.attr('data-id');
|
||||
mark = parseInt($(this).attr('data-mark'));
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: '/index.php?module=rating&action=vote',
|
||||
data: ({ 'mark':mark, 'doc_id': doc_id }),
|
||||
success: function(data) {
|
||||
var array = $.parseJSON(data);
|
||||
if (array[0])
|
||||
{
|
||||
rating.find('.rating_percent').css('width',array[3]+'%');
|
||||
rating.find('.rating_total_num').text(array[2]);
|
||||
rating.find('.rating_summary').find('strong').text(array[4]);
|
||||
}
|
||||
rating.find('.rating_status').text(array[1]).fadeIn();
|
||||
setTimeout(function() {
|
||||
rating.find('.rating_status').fadeOut();
|
||||
}, 3000);
|
||||
}
|
||||
});
|
||||
});
|
||||
//
|
||||
$('.rating_mark').hover(
|
||||
function () {
|
||||
var rating, mark, hover, stars;
|
||||
rating = $(this).parents('.rating');
|
||||
mark = parseInt($(this).attr('data-mark'));
|
||||
stars = rating.attr('data-stars');
|
||||
hover = Math.round(mark / stars * 100);
|
||||
rating.find('.rating_hover').css('width', hover+'%');
|
||||
},
|
||||
function () {
|
||||
$(this).parents('.rating').find('.rating_hover').css('width', 0);
|
||||
}
|
||||
);
|
||||
|
||||
};
|
||||
4
lang/index.php
Normal file
4
lang/index.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
header('Location:/');
|
||||
exit;
|
||||
?>
|
||||
37
lang/ru.txt
Normal file
37
lang/ru.txt
Normal file
@@ -0,0 +1,37 @@
|
||||
[name]
|
||||
MODULE_NAME = "Рейтинг документов"
|
||||
MODULE_DESCRIPTION = "Звездный рейтинг документов"
|
||||
|
||||
[public]
|
||||
RATING_NAME = "Рейтинг"
|
||||
RATING_SUMMARY = "Оценка:"
|
||||
RATING_NOT = "нет оценки"
|
||||
RATING_VOTES = "Голосов:"
|
||||
RATING_FROM = "из"
|
||||
RATING_THANKS = "Спасибо, ваш голос учтён!"
|
||||
RATING_ALREADY = "Вы уже голосовали!"
|
||||
RATING_UGROUP = "У вас нет прав для голосования!"
|
||||
|
||||
[admin]
|
||||
RATING_MODULE_NAME = "Звездный рейтинг"
|
||||
RATING_MODULE_SETTINGS = "Настройки модуля"
|
||||
RATING_ENABLE = "Модуль активен"
|
||||
RATING_SETTINGS_STARS = "Количество звезд"
|
||||
RATING_ROUND = "Округление значения рейтинга"
|
||||
RATING_ROUND_1 = "Целое число (0)"
|
||||
RATING_ROUND_2 = "Десятые (0.0)"
|
||||
RATING_ROUND_3 = "Сотые (0.00)"
|
||||
RATING_ROUND_4 = "Тысячные (0.000)"
|
||||
RATING_SETTINGS_SAVE = "Изменил настройки модуля «Звездный рейтинг»"
|
||||
RATING_FOR_GROUPS = "Группы пользователей, которым разрешены комментарии:"
|
||||
RATING_BUTTON_SAVE = "Сохранить настройки"
|
||||
|
||||
RATING_STATISTIC = "Статистика"
|
||||
RATING_LAST_TEN = "Последние 10 оценок"
|
||||
RATING_NO_ITEMS = "Нет данных по рейтингу документов"
|
||||
RATING_ID = "Id"
|
||||
RATING_DATE = "Дата создания"
|
||||
RATING_DOCUMENT = "Документ"
|
||||
RATING_USER_ID = "Пользователь"
|
||||
RATING_RATE = "Рейтинг (Оценка)"
|
||||
RATING_IP = "IP Пользователя"
|
||||
104
module.php
Normal file
104
module.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AVE.cms - Модуль Рейтинг документов
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @subpackage mod_rating
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
if(!defined('BASE_DIR')) exit;
|
||||
|
||||
//Функция вывода модуля
|
||||
function mod_rating($doc_id = false)
|
||||
{
|
||||
global $AVE_DB, $AVE_Template;
|
||||
|
||||
$doc_id = preg_replace('/\D/', '', $doc_id);
|
||||
|
||||
// определяем id документа
|
||||
if ($doc_id != "") {
|
||||
$type = 'request';
|
||||
}
|
||||
else {
|
||||
$type = 'document';
|
||||
$doc_id = (int)$_REQUEST['id'];
|
||||
}
|
||||
|
||||
// подключаем класс
|
||||
require_once(BASE_DIR . '/modules/rating/class/rating.php');
|
||||
$rating = new docRating;
|
||||
|
||||
// папка с шаблонами
|
||||
$rating->tpl_dir = BASE_DIR . '/modules/rating/templates/';
|
||||
|
||||
// ланги
|
||||
$lang_file = BASE_DIR . '/modules/rating/lang/' . $_SESSION['user_language'] . '.txt';
|
||||
$AVE_Template->config_load($lang_file, 'public');
|
||||
$config_vars = $AVE_Template->get_config_vars();
|
||||
$AVE_Template->assign('config_vars', $config_vars);
|
||||
|
||||
// выводим рейтинг
|
||||
$rating->show($doc_id, $type);
|
||||
}
|
||||
|
||||
//Публичные функции модуля
|
||||
if (!defined('ACP') && !empty($_REQUEST['action']) && $_REQUEST['module'] == 'rating')
|
||||
{
|
||||
// подключаем класс
|
||||
require_once(BASE_DIR . '/modules/rating/class/rating.php');
|
||||
$rating = new docRating;
|
||||
|
||||
// ланги
|
||||
$lang_file = BASE_DIR . '/modules/rating/lang/' . $_SESSION['user_language'] . '.txt';
|
||||
$AVE_Template->config_load($lang_file, 'public');
|
||||
|
||||
switch($_REQUEST['action'])
|
||||
{
|
||||
case 'vote': // Учет голоса
|
||||
|
||||
$percent = $rating->vote((int)$_REQUEST['doc_id'],(int)$_REQUEST['mark']);
|
||||
$rating->vote((int)$_REQUEST['doc_id'], (int)$_REQUEST['mark']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Административные функции
|
||||
if (defined('ACP') && !empty($_REQUEST['moduleaction']))
|
||||
{
|
||||
// Подключаем основной класс и создаем объект
|
||||
require_once(BASE_DIR . '/modules/rating/class/rating.php');
|
||||
$rating = new docRating;
|
||||
|
||||
$adm_dir = BASE_DIR . '/modules/rating/admin/';
|
||||
$tpl_dir = BASE_DIR . '/modules/rating/templates/';
|
||||
|
||||
// Определяем директори, где хранятся файлы с шаблонами модуля и подключаем языковые переменные
|
||||
$lang_file = BASE_DIR . '/modules/rating/lang/' . $_SESSION['user_language'] . '.txt';
|
||||
$AVE_Template->config_load($lang_file, 'admin');
|
||||
$config_vars = $AVE_Template->get_config_vars();
|
||||
$AVE_Template->assign('config_vars', $config_vars);
|
||||
|
||||
// Определяем, какой параметр пришел из строки запроса браузера
|
||||
switch ($_REQUEST['moduleaction'])
|
||||
{
|
||||
// Если 1, тогда отображаем список всех голосов
|
||||
case '1':
|
||||
$rating->ratingAdminListShow($adm_dir);
|
||||
break;
|
||||
|
||||
// Если settings, тогда открываем страницу с настройками данного модуля
|
||||
case 'settings':
|
||||
// Подключаем файл класса для работы с пользователями, создаем объект и получаем список
|
||||
// всех групп пользователей, имеющихся в системе.
|
||||
require_once(BASE_DIR . '/class/class.user.php');
|
||||
$AVE_User = new AVE_User;
|
||||
|
||||
$AVE_Template->assign('groups', $AVE_User->userGroupListGet());
|
||||
$rating->ratingAdminSettingsEdit($adm_dir);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
107
sql.php
Normal file
107
sql.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AVE.cms - Модуль Рейтинг документов.
|
||||
*
|
||||
* @package AVE.cms
|
||||
* @subpackage mod_rating
|
||||
* @since 1.1
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
/**
|
||||
* mySQL-запросы для установки, обновления и удаления модуля
|
||||
*/
|
||||
|
||||
$module_sql_install = array();
|
||||
$module_sql_deinstall = array();
|
||||
$module_sql_update = array();
|
||||
|
||||
// Удаление модуля
|
||||
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `%%PRFX%%_module_rating_details`;";
|
||||
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `%%PRFX%%_module_rating_summary`;";
|
||||
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `%%PRFX%%_module_rating_settings`;";
|
||||
|
||||
// Установка модуля
|
||||
$module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_rating_details` (
|
||||
`Id` int(10) unsigned NOT NULL auto_increment,
|
||||
`rating_id_doc` mediumint(5) unsigned NOT NULL default '0', #Id документа
|
||||
`rating_id_user` mediumint(5) unsigned NOT NULL default '0', #Id пользователя
|
||||
`rating_vote` mediumint(5) unsigned NOT NULL default '0', #Голос пользователя
|
||||
`rating_date` int(10) unsigned NOT NULL default '0', #Дата голоса
|
||||
`rating_user_ip` varchar(255) NOT NULL, #IP пользователя
|
||||
PRIMARY KEY (`Id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
||||
|
||||
$module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_rating_settings` (
|
||||
`Id` tinyint(1) unsigned NOT NULL auto_increment,
|
||||
`rating_user_groups` varchar(255) NOT NULL default '1,2,3,4,5', #Группы пользователей
|
||||
`rating_stars` enum('1','2','3','4','5','6','7','8','9','10') NOT NULL default '5', #Кол-во звезд
|
||||
`rating_round` enum('0','1','2','3') NOT NULL default '0', #Округление //0: Целое число// 1: Десятые //2: Сотые //3: Тысячные
|
||||
`rating_active` enum('1','0') NOT NULL default '1', #Активность рейтинга
|
||||
PRIMARY KEY (`Id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
||||
|
||||
$module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_rating_summary` (
|
||||
`Id` int(10) unsigned NOT NULL auto_increment,
|
||||
`rating_id_doc` int(10) unsigned NOT NULL default '0', #Id документа
|
||||
`rating_total` int(10) unsigned NOT NULL default '0', #Кол-во голосов
|
||||
`rating_sum` int(10) unsigned NOT NULL default '0', #Общая сумма голосов
|
||||
PRIMARY KEY (`Id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
||||
|
||||
$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_rating_settings` VALUES ('1', '1,2,3,4,5', '5', '0', '1');";
|
||||
|
||||
// Обновление модуля
|
||||
$module_sql_update[] = "
|
||||
RENAME TABLE
|
||||
`%%PRFX%%_module_rating`
|
||||
TO
|
||||
`%%PRFX%%_module_rating_summary`
|
||||
";
|
||||
|
||||
$module_sql_update[] = "
|
||||
ALTER TABLE `%%PRFX%%_module_rating_summary` CHANGE `Id` `rating_id_doc` INT( 10 ) UNSIGNED NOT NULL;
|
||||
";
|
||||
|
||||
$module_sql_update[] = "
|
||||
ALTER TABLE `%%PRFX%%_module_rating_summary` CHANGE `rating_count` `rating_total` INT( 10 ) UNSIGNED NOT NULL;
|
||||
";
|
||||
|
||||
$module_sql_update[] = "
|
||||
ALTER TABLE `%%PRFX%%_module_rating_summary` DROP `lastip`;
|
||||
";
|
||||
|
||||
$module_sql_update[] = "CREATE TABLE `%%PRFX%%_module_rating_details` (
|
||||
`Id` int(10) unsigned NOT NULL auto_increment,
|
||||
`rating_id_doc` mediumint(5) unsigned NOT NULL default '0', #Id документа
|
||||
`rating_id_user` mediumint(5) unsigned NOT NULL default '0', #Id пользователя
|
||||
`rating_vote` mediumint(5) unsigned NOT NULL default '0', #Голос пользователя
|
||||
`rating_date` int(10) unsigned NOT NULL default '0', #Дата голоса
|
||||
`rating_user_ip` varchar(255) NOT NULL, #IP пользователя
|
||||
PRIMARY KEY (`Id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
||||
|
||||
$module_sql_update[] = "CREATE TABLE `%%PRFX%%_module_rating_settings` (
|
||||
`Id` tinyint(1) unsigned NOT NULL auto_increment,
|
||||
`rating_user_groups` varchar(255) NOT NULL default '1,2,3,4,5', #Группы пользователей
|
||||
`rating_stars` enum('1','2','3','4','5','6','7','8','9','10') NOT NULL default '5', #Кол-во звезд
|
||||
`rating_round` enum('0','1','2','3') NOT NULL default '0', #Округление //0: Целое число// 1: Десятые //2: Сотые //3: Тысячные
|
||||
`rating_active` enum('1','0') NOT NULL default '1', #Активность рейтинга
|
||||
PRIMARY KEY (`Id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
||||
|
||||
$module_sql_update[] = "INSERT INTO `%%PRFX%%_module_rating_settings` VALUES ('1', '1,2,3,4,5', '5', '0', '1');";
|
||||
|
||||
$module_sql_update[] = "
|
||||
UPDATE
|
||||
`%%PRFX%%_module`
|
||||
SET
|
||||
ModuleAveTag = '" . $modul['ModuleAveTag'] . "',
|
||||
ModulePHPTag = '" . $modul['ModulePHPTag'] . "',
|
||||
ModuleVersion = '" . $modul['ModuleVersion'] . "'
|
||||
WHERE
|
||||
ModuleSysName = '" . $modul['ModuleSysName'] . "'
|
||||
LIMIT 1;
|
||||
";
|
||||
?>
|
||||
58
templates/rating.tpl
Normal file
58
templates/rating.tpl
Normal file
@@ -0,0 +1,58 @@
|
||||
{*
|
||||
<!--
|
||||
|
||||
$display_rating - Активен или нет модуль (0:1)
|
||||
$rating_type - Метод вывода. Документ/Запрос (document/request)
|
||||
$rating_stars - Кол-во звезд
|
||||
$rating_doc_id - ID Документа
|
||||
$rating_total - Сумма голосовавших
|
||||
$rating_sum - Общая сумма баллов
|
||||
$rating_rating - Рейтинг - Общая оценка (Сумма балов/Сумма голосов)
|
||||
$rating_percent - Процент суммы былов от 100%
|
||||
$rating_can - (0:1) - 1: данной группе разрешено голосовать 0: Голосовать нельзя
|
||||
|
||||
|
||||
{assign var='width_1_star' value='18'} - value='18' - ширина 1й звездочки в px
|
||||
|
||||
-->
|
||||
*}
|
||||
|
||||
{if $display_rating ==1 }
|
||||
|
||||
{assign var='width_1_star' value='18'}
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="{$ABS_PATH}modules/rating/css/rating.css" media="screen" />
|
||||
|
||||
{if $rating_type == 'document'}
|
||||
|
||||
<script type="text/javascript" src="{$ABS_PATH}modules/rating/js/rating.js"></script>
|
||||
|
||||
<article class="rating" data-id="{$rating_doc_id}" data-total="{$rating_total}" data-sum="{$rating_sum}" data-stars="{$rating_stars}">
|
||||
<div class="rating_name">{#RATING_NAME#}:</div>
|
||||
<div class="rating_vote{if !$rating_can} rating_not_vote{/if}" style="width: {$rating_stars*$width_1_star}px;">
|
||||
<div class="rating_percent" style="width: {$rating_percent}%"></div>
|
||||
{if $rating_can}
|
||||
<div class="rating_hover"></div>
|
||||
{section name=stars loop=$rating_stars step=1 start=0}
|
||||
<div class="rating_mark" data-mark="{$smarty.section.stars.index+1}"></div>
|
||||
{/section}
|
||||
{/if}
|
||||
</div>
|
||||
<div class="rating_total">({#RATING_VOTES#} <span class="rating_total_num">{$rating_total}</span>)</div>
|
||||
|
||||
<div class="rating_summary">{#RATING_SUMMARY#} <strong>{$rating_rating}</strong></div>
|
||||
<div class="rating_status"></div>
|
||||
</article>
|
||||
|
||||
{elseif $rating_type == 'request'}
|
||||
|
||||
<article class="rating" data-id="{$rating_doc_id}" title="{#RATING_SUMMARY#} {$rating_rating} {#RATING_VOTES#} {$rating_total}">
|
||||
<div class="rating_vote rating_not_vote" style="width: {$rating_stars*$width_1_star}px;">
|
||||
<div class="rating_percent" style="width: {$rating_percent}%"></div>
|
||||
</div>
|
||||
<div class="rating_summary">{#RATING_SUMMARY#} <strong>{if $rating_rating != "0"}{$rating_rating}{else}{#RATING_NOT#}{/if}</strong></div>
|
||||
</article>
|
||||
|
||||
{/if}
|
||||
|
||||
{/if}
|
||||
Reference in New Issue
Block a user