From 54f896802a30d0aa3da747127438e77d37cb6a96 Mon Sep 17 00:00:00 2001 From: Repellent Date: Wed, 18 Feb 2026 22:47:20 +0500 Subject: [PATCH] Initial commit --- README.md | 16 +- admin/admin_ratings.tpl | 73 +++++++++ admin/admin_settings.tpl | 81 ++++++++++ admin/star.png | Bin 0 -> 840 bytes class/rating.php | 310 +++++++++++++++++++++++++++++++++++++++ css/rating.css | 68 +++++++++ images/skin.png | Bin 0 -> 2034 bytes images/skin_old.png | Bin 0 -> 1073 bytes index.php | 4 + info.php | 20 +++ js/rating.js | 43 ++++++ lang/index.php | 4 + lang/ru.txt | 37 +++++ module.php | 104 +++++++++++++ sql.php | 107 ++++++++++++++ templates/rating.tpl | 58 ++++++++ 16 files changed, 923 insertions(+), 2 deletions(-) create mode 100644 admin/admin_ratings.tpl create mode 100644 admin/admin_settings.tpl create mode 100644 admin/star.png create mode 100644 class/rating.php create mode 100644 css/rating.css create mode 100644 images/skin.png create mode 100644 images/skin_old.png create mode 100644 index.php create mode 100644 info.php create mode 100644 js/rating.js create mode 100644 lang/index.php create mode 100644 lang/ru.txt create mode 100644 module.php create mode 100644 sql.php create mode 100644 templates/rating.tpl diff --git a/README.md b/README.md index ac6cc47..272a70e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ -# rating +### rating -Модуль рейтинг Только для AVE.CMS ALT \ No newline at end of file +## Модуль Рейтинг v1.26.1 + +### Данный модуль предназначен присваивать рейтинг документам. + + * Для оценки документа (рейтинга), нужно разместить системный тег [mod_rating] на странице необходимого документа. + * Вывод результатов (РЕЗУЛЬТАТОВ! НЕ ВОЗМОЖНОСТИ СТАВИТЬ ОЦЕНКУ!) рейтинга документа в других документах, запросами и .т.д. : + * Разместите в нужном месте [mod_rating:[tag:docid]] или [mod_rating:ХХХ] где XXX - ID документа, рейтинг которого нужно вывести. + +### Changelog: + +04.09.2019 - версия 1.26.1 - адаптация для версии ave.cms 3.26 + +10.06.2016 - старт версии 1.1 \ No newline at end of file diff --git a/admin/admin_ratings.tpl b/admin/admin_ratings.tpl new file mode 100644 index 0000000..33c7676 --- /dev/null +++ b/admin/admin_ratings.tpl @@ -0,0 +1,73 @@ +
{#RATING_MODULE_NAME#}
+ +
+
+ {#RATING_STATISTIC#} +
+
+ + + + +
+
+
{#RATING_LAST_TEN#}
+ +
+ + + + + + + + + + + + + + + + + + + + + {if $ratings} + {foreach from=$ratings item=rating} + + + + + + + + + {/foreach} + {else} + + + + {/if} + +
{#RATING_ID#}{#RATING_DOCUMENT#}{#RATING_RATE#}{#RATING_USER_ID#}{#RATING_DATE#}{#RATING_IP#}
{$rating->Id}{$rating->rating_name} (ID: {$rating->rating_id_doc}) + {section name=stars loop=$rating->rating_vote step=1 start=0} + + {/section} + {$rating->rating_id_user|escape}{$rating->rating_date|date_format:'%d %B %Y, %H:%M'|pretty_date}{$rating->rating_user_ip|escape}
+
    +
  • {#RATING_NO_ITEMS#}
  • +
+
+
+ diff --git a/admin/admin_settings.tpl b/admin/admin_settings.tpl new file mode 100644 index 0000000..e514abc --- /dev/null +++ b/admin/admin_settings.tpl @@ -0,0 +1,81 @@ +
{#RATING_MODULE_NAME#}
+ +
+
+ {#RATING_MODULE_SETTINGS#} +
+
+ + + + +
+
+
{#RATING_MODULE_SETTINGS#}
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
{#RATING_ENABLE#}
{#RATING_SETTINGS_STARS#} + +
{#RATING_ROUND#} + +
{#RATING_FOR_GROUPS#} + +
+ +
+
+ diff --git a/admin/star.png b/admin/star.png new file mode 100644 index 0000000000000000000000000000000000000000..3614a35f5697eb90a50a4fca326d64f2ac62cc93 GIT binary patch literal 840 zcmV-O1GoH%P)000W>0fLJSS^xk59CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o zcW-iQb09-gHt4*vi~s-v!bwCyR5*=wluc+KqSsnSKEE42^`Qc!53n<8R0VlW{fAqq(x<76_) zo9WDZ$HlyfGf8vcz~!F*|9`$N7ZIW6K=lj&T0|HhYQ6Y$sP$41*AigXuz{P@Sq(r{ z%pX0j_J4FX^8>)>arHn%?r*>b)*!UrTKA>DO?*B8Kz`!kH^9JVSiM=5PQ0A~!Ml zWBDyJ+qQidX>U)NO-{myG+{aIh!Mvt`T!VVjq(bVbMts^ zp2~9WjXO8DusSb|z_9XpeIKBKat@K!bD)e5pwK>5LNJy2njXh$bT z)W?iTBKzRq#NyPeK44_6wXt*Nwcale3^sRvOliK1SFDm7=3s&mf>4`9esY>;H}79R zbggo(VMbj_C9i+2Z}lBZ9SnyflotfQv~DvYuu_U*$>r%^3-<bhMiKzoP%-i6=Al+zk)%!!35oh-ZqI6&clg%%1d=H|+`U;g$wes65$#?U|9 z0hR%VAG&`I?{kkFJQO<}cXZ)(fyIWI)PDscLKh@~M9{VksKD*uF3|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)); + } + +} +?> \ No newline at end of file diff --git a/css/rating.css b/css/rating.css new file mode 100644 index 0000000..999ecd9 --- /dev/null +++ b/css/rating.css @@ -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; +} \ No newline at end of file diff --git a/images/skin.png b/images/skin.png new file mode 100644 index 0000000000000000000000000000000000000000..9b5a025695cb9f7167415d521e4789f11e882786 GIT binary patch literal 2034 zcmV;UBUDut&<1T0t=6J6WC@YVR7z<~ zk_HPwy@UY4aU93jzV`L?*$+FZZ4$H|>HK)#_j%5H&Uw#$E+Zn`&3b!#cQeM=&Ye5o zy(^H2mh`T!uA1TD;qdVAaJZ|htLAQ4;ck~yS69DSRaIpJfT^je-vMa-)){qncCH^A z8>4v}8ylm}&d&8q;aP5v_V3?ssjRH5uv)FI)vH%`Y}&NxVMS2@0J^T@!i5WiSFc`u zJ`#yc1p`uh4dD2lS*VzJaJin30Y<)YHkQrK)Zn5GE;;CUXiv$F_? z!_aj-rtA8srfFa4y56y4$Bs)NBJ}k1bc~OWQ!16BTuY@=d0u!nK0Z!8Jv|*n1P%ZO z2L})N{r=OMrsegG+8D~iA2aS4AL}>qS0uc zYnn#MWRfD02=(>#U2AJ=TWG!j0E{t4M8hpDEqeeQt*NQ0N+y#?CX;zDEJ+e%S%%;5 z4;(piWKVZ@_i&a=TsA8LfMdsweL6io-46hwC_)f~JQqa~M1)W%)Zg9R{b?@uj)5#I zD=QI25vFNEk|gjv4*)Pt6Fkp@=XtnXu989?m%C_eY*Z9QaZ8c}i^T$q#R9`HU>L^2 zT9##~s_JfPYEp8!c^PfqyxF0uYPBrO2!%qJoSd9HfByVi*|VqIZg;W6;eetjRSgXd z4giyj28zXEFzd}L%~6aeb#>bm#s+xKLBef@5p=YyK2#qw$^ z{ASwQ+iSgEuNQy}fX|s79)RridcE!K?X`ux{6#i!)_5Yq&|hsWzE^B}bAshz7nPBM zVCI>FS$1E1OP;?Tzm;Y^HNxDse?0Z>>+#Y z{Y{+e1gAP-uf4zNOdES>DSVzDef)j4Ty~;Tw!!VFuROSXXIni{X7(71;KrG^eKRA0 zm-P^?C#Df-{1@HG3*_rix5}>N2Nh>orD(NPb8<0c#|kjX1v8%2Bb5gwgGkIwAg#~A zh|XTsr*8)m!5hD?-ya_k03ewZAFEimcDrLkJxrZPIw8P_8Zfm8SUPhfX#lTUU|Y2w zoSXu$nAM?6zUu$>2G0Q)U_^vx8I#-oSoDtf2iu;scvc~C+kmM9lm;+gIRh96@CqQ8 ziO{ZJ!{rbAkH7t5to1db#6pjLvYb^u_bcgx+Qy1{K~!Lb(jcRtp&}qUIHU|6UwwSj z_qSJ*P5-<>0RRhn1R@GFRk4` zz{?B(U?vDm1O(#X@<`4?Ufw|d(#DDu8}AWq9Hepv!IsACL=>|VQ3$p)q;dw)#zD68 z?)DN^l*`S_Xk8Ubr4pfvaX@f1iph)7@%~=z?*Opv5z8;!4c3*Vt5rzFLRC#QN&&l&>1zw{{k;v5mdccARKO9#q+lRf7M-$IX&36}2P#lCm%Q_Zgc zK>sfG84(TMfnBUeg;w^U=MT>BZU+EFMn8WU!1krEOX|@;Gi$Wp_rNw1tsv0~`+W~= z8)#;YOW_y3HO3hG_aj&H5ZFBf z>(Lsm`iX*z>d}ZvfrM^;34y>BWn`7JWSmz3 zt|)VLQcn*JnHgnVQjbcPOXa+k17`wE&WITRm~jG=0A65lxW#4jnJko@8{~P3SrxnB zk;*wp9tO^CB6wvM!7H=i>?R}+gH*;rwhQhTL|AjVc^OqYV3$hxN;5&YH5y4zd@<)c z^-26N05m@u-M3<6alLC@5hoS%_jnwz1BfmfXex?O_@?pE#5=dGX9u(s2mXUk0L%fv zq0i$V9(pkT=$5UPA6xBQ^mY`Xyq*;5${N50z?m&u0>H8^W%rzG09PUJfAKzK!h1G4 Q82|tP07*qoM6N<$g0oz)T>t<8 literal 0 HcmV?d00001 diff --git a/images/skin_old.png b/images/skin_old.png new file mode 100644 index 0000000000000000000000000000000000000000..628c3ef8d6b5265496c2491beeb9f458e163c74b GIT binary patch literal 1073 zcmV-11kU@3P)000W>0fLJSS^xk59CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o zcW-iQb09-gHt4*vi~s-wt4TybR7i=nl)rBqWf;dlXZ!9PJFzd|LTG-7Bt$~)&<>G6 zl!c0&0ut&%mMlya11k*t0aQws4lJxeNQI?RrBX3uA(lu~)uO7?&^88xuZf++Kki=J z55w74JN7w6p^tR(EBkrA{@(LG&qosxP7|S1Ri7lVzWGqrHy;kQc%lQ-(1-r61@$14 zeIjRHiUaWHUWLWT0l>@27_Xg40uVKHGTFzNhK}PZ z|MTL7IV}SCUrfGYq3aPwA|awi*e?!+!Yrm|sJn{FQH_I|>pKVmET*TmiBy84nhLbq z6tCZ%;!aQeTbQ3pY2%3z3ibg2j(F{j;l~g2O^B%P{+FsQO>}b=o6?rE)YYh1_irH-Enz+ zGUbb(C;;%ZTm|6bg*gqpp#tx=e%~obU=KQp6RCt>3|_~_6C;!lE53Lq0!R6IUNbyllf^q_1p_Eyb@KgzspqIY;?+)C% z3nB$X>PYjE73e?{5uX0EB=J}tfKa%AF`9)LzyjCw{>bv@Yb9-k zMrG2=Ildd+L$SZHBKD7;1`bVSeOdN5R-|u`P7^Pf2U{7jw@$-@JJ$(0J8(Xj2SXj0 zfBitT@-z1KcA$%39(=zl;WH&jfSw8FL7+f9x9S}%7<;lBDB$tnt0jpy+B|Rz7%B_X zUNP}@W*(GUpc!iOz?>!ad4~rdU&Z{o&4U432*4!h`8E%V7KfLP^I$6@);E`lSZy98 z@L%CsW1w|3&fbT&NSzPj!58PmP}yFQb||$#`IDQZ=7;g%tu7uM^gh+OD?P<9hzGyj z@QMfV;E(6wLB5LzdYXE?iwD2<^Pp#4i@BW0yGY}MaoJycwzm6gE25SrrS(x*ikllf r>)gwOwH2|y9KwTZ%RR#X3lIJUGQDH}-e4D<00000NkvXXu0mjfO \ No newline at end of file diff --git a/info.php b/info.php new file mode 100644 index 0000000..185c129 --- /dev/null +++ b/info.php @@ -0,0 +1,20 @@ + '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' => "" + ); +?> \ No newline at end of file diff --git a/js/rating.js b/js/rating.js new file mode 100644 index 0000000..e3d1ac8 --- /dev/null +++ b/js/rating.js @@ -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); + } + ); + +}; \ No newline at end of file diff --git a/lang/index.php b/lang/index.php new file mode 100644 index 0000000..4ca25aa --- /dev/null +++ b/lang/index.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/lang/ru.txt b/lang/ru.txt new file mode 100644 index 0000000..51b8105 --- /dev/null +++ b/lang/ru.txt @@ -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 Пользователя" \ No newline at end of file diff --git a/module.php b/module.php new file mode 100644 index 0000000..b989564 --- /dev/null +++ b/module.php @@ -0,0 +1,104 @@ +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; + } +} + +?> \ No newline at end of file diff --git a/sql.php b/sql.php new file mode 100644 index 0000000..ca23b49 --- /dev/null +++ b/sql.php @@ -0,0 +1,107 @@ + \ No newline at end of file diff --git a/templates/rating.tpl b/templates/rating.tpl new file mode 100644 index 0000000..4d4fccb --- /dev/null +++ b/templates/rating.tpl @@ -0,0 +1,58 @@ +{* + +*} + +{if $display_rating ==1 } + + {assign var='width_1_star' value='18'} + + + + {if $rating_type == 'document'} + + + +
+
{#RATING_NAME#}:
+
+
+ {if $rating_can} +
+ {section name=stars loop=$rating_stars step=1 start=0} +
+ {/section} + {/if} +
+
({#RATING_VOTES#} {$rating_total})
+ +
{#RATING_SUMMARY#} {$rating_rating}
+
+
+ + {elseif $rating_type == 'request'} + +
+
+
+
+
{#RATING_SUMMARY#} {if $rating_rating != "0"}{$rating_rating}{else}{#RATING_NOT#}{/if}
+
+ + {/if} + +{/if} \ No newline at end of file