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)); } } ?>