From a123db9eebe7bc0179db54c9312d2aadb47a9ae0 Mon Sep 17 00:00:00 2001 From: pafnuty Date: Sun, 28 May 2017 01:15:24 +0400 Subject: [PATCH] =?UTF-8?q?WIP=20#5=20-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20-=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B0=D1=82=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D1=87=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=82=D0=BE=D0=BA=20-=20=D0=94?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B2=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D0=B0=D0=BA?= =?UTF-8?q?=D0=BA=D0=B0=D1=83=D0=BD=D1=82=D0=BE=D0=B2=20(=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D1=83=D0=BB=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=B0=D0=B3=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D0=B5=20=D1=88=D0=B0?= =?UTF-8?q?=D0=B1=D0=BB=D0=BE=D0=BD=D0=B0)=20-=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D1=8F=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D0=BD=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B0=D0=B4=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .../modules/moder_notes/install/queries.php | 19 +-- engine/modules/moder_notes/module.php | 143 +++++++++++++++--- engine/skins/images/moder_notes.png | Bin 0 -> 3030 bytes templates/Default/moder_notes/.htaccess | 2 + templates/Default/moder_notes/default.tpl | 26 ++++ 6 files changed, 164 insertions(+), 29 deletions(-) create mode 100644 engine/skins/images/moder_notes.png create mode 100644 templates/Default/moder_notes/.htaccess create mode 100644 templates/Default/moder_notes/default.tpl diff --git a/.gitignore b/.gitignore index 6781f4f..f48bdcc 100644 --- a/.gitignore +++ b/.gitignore @@ -219,4 +219,5 @@ # Place your custom files here -!/engine/skins/images/dle_starter.png +!/engine/skins/images/moder_notes.png +!/templates/Default/moder_notes/ diff --git a/engine/modules/moder_notes/install/queries.php b/engine/modules/moder_notes/install/queries.php index 7130809..cad5ed8 100644 --- a/engine/modules/moder_notes/install/queries.php +++ b/engine/modules/moder_notes/install/queries.php @@ -11,14 +11,15 @@ * Этот файл отвеает за выполнение sql запросов во время установки модуля. */ return [ -'CREATE TABLE `' . PREFIX . '_user_notes` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `user_id` int(11) NOT NULL, - `user_name` varchar(40) NOT NULL, - `text` TEXT NOT NULL, - `date` DATETIME NOT NULL, - `is_private` tinyint(1) NOT NULL DEFAULT \'1\', +'CREATE TABLE `' . PREFIX . '_moder_notes` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `user_id` INT(11) NOT NULL COMMENT \'ID пользователя, добавившего заметку\', + `user_name` VARCHAR(40) NOT NULL COMMENT \'Логин пользователя, о котором написана заметка\', + `text` TEXT NOT NULL COMMENT \'Текст заметки\', + `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `is_private` TINYINT(1) NOT NULL DEFAULT \'1\' COMMENT \'Личная/публичная заметка\', PRIMARY KEY (`id`), - KEY `user_id` (`user_id`) -);' + INDEX `user_id` (`user_id`) +); +' ]; diff --git a/engine/modules/moder_notes/module.php b/engine/modules/moder_notes/module.php index 761c112..93ce963 100644 --- a/engine/modules/moder_notes/module.php +++ b/engine/modules/moder_notes/module.php @@ -15,7 +15,7 @@ * * @global boolean $is_logged Является ли посетитель авторизованным пользователем или гостем. * @global array $member_id Массив с информацией о авторизованном пользователе, включая всю его информацию - * из профиля. + * из профиля. * @global object $db Класс DLE для работы с базой данных. * @global object $tpl Класс DLE для работы с шаблонами. * @global array $cat_info Информация обо всех категориях на сайте. @@ -23,17 +23,26 @@ * @global array $user_group Информация о всех группах пользователей и их настройках. * @global integer $category_id ID категории которую просматривает посетитель. * @global integer $_TIME Содержит текущее время в UNIX формате с учетом настроек смещения в настройках - * скрипта. + * скрипта. * @global array $lang Массив содержащий текст из языкового пакета. * @global boolean $smartphone_detected Если пользователь со смартфона - true. * @global string $dle_module Информация о просматриваемомразделе сайта, либо информацию переменной do из URL - * браузера. + * браузера. + */ + +/** + * Привет строки подключения: + * {include file="engine/modules/moder_notes/module.php?user=this&nocache=y"} */ // Определям конфиг модуля по умолчанию -$moduleConfig = [ - 'cachePrefix' => !empty($cachePrefix) ? $cachePrefix : 'news', - 'cacheSuffixOff' => !empty($cacheSuffixOff) ? $cacheSuffixOff : false +$cfg = [ + 'user' => !empty($user) ? $user : '', + 'template' => !empty($template) ? $template : 'moder_notes/default', + 'nocache' => !empty($nocache) ? $nocache : false, + 'cachePrefix' => !empty($cachePrefix) ? $cachePrefix : 'moder_notes', + 'cacheSuffixOff' => !empty($cacheSuffixOff) ? $cacheSuffixOff : false, + 'cacheNameAddon' => '' ]; // Определяемся с шаблоном сайта @@ -50,29 +59,125 @@ die('no_skin'); } +if ($cfg['user'] == 'this') { + $cfg['cacheNameAddon'] .= $_REQUEST['user']; + + $cfg['user'] = $db->safesql($_REQUEST['user']); +} + // Формируем имя кеша -$cacheName = implode('_', $moduleConfig) . $currentSiteSkin; +$cacheName = implode('_', $cfg) . $currentSiteSkin; // Определяем необходимость создания кеша для разных групп -$cacheSuffix = ($moduleConfig['cacheSuffixOff']) ? false : true; +$cacheSuffix = ($cfg['cacheSuffixOff']) ? false : true; // Формируем имя кеша -$cacheName = md5(implode('_', $moduleConfig)); +$cacheName = md5(implode('_', $cfg)); // Дефолтное значение модуля -$module = false; - -// Пытаеся получить данные из кеша -$module = dle_cache($moduleConfig['cachePrefix'], $cacheName, $cacheSuffix); +$moderNotes = false; +// Пытаемся получить данные из кеша +if (!$cfg['nocache']) { + $moderNotes = dle_cache($cfg['cachePrefix'], $cacheName, $cacheSuffix); +} // Если ничего не пришло из кеша — раблотаем -if (!$module) { - // Тут выполняем логику модуля и складываем всё в $module - $module = 'DLE-ModerNotes работает!'; +if (!$moderNotes) { + + $isModerator = $user_group[$member_id['user_group']]['allow_all_edit']; + + // Получаем информацию о пользоателе, про которого оставлена заметка + $targetUser = ($cfg['user'] !== '') ? $db->super_query('SELECT user_id, name, logged_ip FROM ' . USERPREFIX . '_users WHERE name=\'' . $cfg['user'] . '\'') : null; + + // Если пользователь не залогинен или не обнаружен пользователь, + // для которого написана заметка - значит ничего не нужно делать + if (!$is_logged || !$targetUser['user_id']) { + $moderNotes = ''; + } else { + $tpl->result['moderNotes'] = ''; + $tpl->load_template($cfg['template'] . '.tpl'); + + // Проверяем мультиаккаунты + $targetUserNames = []; + $_targetUserNames = $db->super_query('SELECT name FROM ' . USERPREFIX . '_users WHERE logged_ip=\'' . $targetUser['logged_ip'] . '\'', true); + + if (count($_targetUserNames) > 1) { + foreach ($_targetUserNames as $targetUserName) { + $targetUserNames[] = $targetUserName['name']; + } + $tpl->set('[user_names]', ''); + $tpl->set('[/user_names]', ''); + + } else { + $tpl->set_block("'\\[user_names\\](.*?)\\[/user_names\\]'si", ''); + } + + $tpl->set('{user_names}', implode(', ', $targetUserNames)); + + + // TODO Добавить вывод автора публичной заметки + $publicNotes = $db->super_query('SELECT * FROM ' . PREFIX . '_moder_notes WHERE user_name = \'' . $targetUser['name'] . '\' AND is_private = 0', true); + + if (count($publicNotes)) { + $tpl->set('[public_notes]', ''); + $tpl->set('[/public_notes]', ''); + } else { + $tpl->set_block("'\\[public_notes\\](.*?)\\[/public_notes\\]'si", ''); + } + + // Строим цикл из публичных заметок + preg_match("'\\[pub_notes\\](.*?)\\[/pub_notes\\]'si", $tpl->copy_template, $matchContent); + foreach ($publicNotes as $publicNote) { + $publicNote['date'] = strtotime($publicNote['date']); + if (date('Ymd', $publicNote['date']) == date('Ymd', $_TIME)) { + $noteDate = $lang['time_heute'] . langdate(", H:i", $publicNote['date']); + } elseif (date('Ymd', $publicNote['date']) == date('Ymd', ($_TIME - 86400))) { + $noteDate = $lang['time_gestern'] . langdate(", H:i", $publicNote['date']); + } else { + $noteDate = langdate($config['timestamp_active'], $publicNote['date'], $short_news_cache); + } + + $arReplace = [ + '{pub_note_text}' => $publicNote['text'], + '{pub_note_date}' => $noteDate + ]; + + $tpl->copy_template = strtr($tpl->copy_template, $arReplace); + $tpl->copy_template = preg_replace("'\\[pub_notes\\](.*?)\\[/pub_notes\\]'si", "\\1\n" . $matchContent[0], $tpl->copy_template); + } + $tpl->set_block("'\\[pub_notes\\](.*?)\\[/pub_notes\\]'si", ''); + + + // Получаем приватную заметку + $privateNote = $db->super_query('SELECT * FROM ' . PREFIX . '_moder_notes WHERE user_id=' . $member_id['user_id'] . ' AND user_name = \'' . $targetUser['name'] . '\' AND is_private = 1'); + + if($privateNote['user_id']) { + $tpl->set('[private_note]', ''); + $tpl->set('[/private_note]', ''); + $tpl->set('{private_note}', $privateNote['text']); + + $tpl->set_block("'\\[not_private_note\\](.*?)\\[/not_private_note\\]'si", ''); + } else { + $tpl->set_block("'\\[private_note\\](.*?)\\[/private_note\\]'si", ''); + $tpl->set('[not_private_note]', ''); + $tpl->set('[/not_private_note]', ''); + $tpl->set('{private_note}', ''); + } + + + $tpl->compile('moderNotes'); + $moderNotes = $tpl->result['moderNotes']; + + + // Сохраняем данные в кеш + if (!$cfg['nocache']) { + create_cache($cfg['cachePrefix'], $moderNotes, $cacheName, $cacheSuffix); + } + + $tpl->clear(); + } - // Сохраняем данные в кеш - create_cache($moduleConfig['cachePrefix'], $module, $cacheName, $cacheSuffix); } // выводим результат работы модуля -echo $module; +echo $moderNotes; diff --git a/engine/skins/images/moder_notes.png b/engine/skins/images/moder_notes.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0b0ade7ef9090170164bcf5909f505073a7603 GIT binary patch literal 3030 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 literal 0 HcmV?d00001 diff --git a/templates/Default/moder_notes/.htaccess b/templates/Default/moder_notes/.htaccess new file mode 100644 index 0000000..7d3aaf1 --- /dev/null +++ b/templates/Default/moder_notes/.htaccess @@ -0,0 +1,2 @@ +Order allow,deny +Deny from all \ No newline at end of file diff --git a/templates/Default/moder_notes/default.tpl b/templates/Default/moder_notes/default.tpl new file mode 100644 index 0000000..7e05437 --- /dev/null +++ b/templates/Default/moder_notes/default.tpl @@ -0,0 +1,26 @@ +[public_notes] +

Публичные заметки

+ [pub_notes] +

+ {pub_note_date} - {pub_note_text} +

+ [/pub_notes] +[/public_notes] + +[private_note] +

Ваша аметка об этом пользователе

+

{private_note}

+ +[/private_note] + +[not_private_note] +

Вы не добавляли заметок для этого пользователя

+ +[/not_private_note] + +[user_names] +

+ Другие имена этого пользователя +

+

{user_names}

+[/user_names] \ No newline at end of file