Initial commit

This commit is contained in:
2026-02-18 22:47:20 +05:00
parent 96b32c1d35
commit 54f896802a
16 changed files with 923 additions and 2 deletions

View File

@@ -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
View 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&amp;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
View 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&amp;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

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 B

310
class/rating.php Normal file
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
images/skin_old.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

4
index.php Normal file
View File

@@ -0,0 +1,4 @@
<?php
header('Location:/');
exit;
?>

20
info.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
if (! defined('BASE_DIR'))
exit;
$module = array(
'ModuleSysName' => 'rating',
'ModuleVersion' => '1.26.1',
'ModuleAutor' => 'AVE.cms Team',
'ModuleCopyright' => '&copy; 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
View 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
View File

@@ -0,0 +1,4 @@
<?php
header('Location:/');
exit;
?>

37
lang/ru.txt Normal file
View 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
View 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
View 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
View 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#}&nbsp;<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#}&nbsp;{$rating_rating}&nbsp;&nbsp;&nbsp;{#RATING_VOTES#}&nbsp;{$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}