Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
19 changes: 10 additions & 9 deletions engine/modules/moder_notes/install/queries.php
Original file line number Diff line number Diff line change
Expand Up @@ -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`)
);
'
];
143 changes: 124 additions & 19 deletions engine/modules/moder_notes/module.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,34 @@
*
* @global boolean $is_logged Является ли посетитель авторизованным пользователем или гостем.
* @global array $member_id Массив с информацией о авторизованном пользователе, включая всю его информацию
* из профиля.
* из профиля.
* @global object $db Класс DLE для работы с базой данных.
* @global object $tpl Класс DLE для работы с шаблонами.
* @global array $cat_info Информация обо всех категориях на сайте.
* @global array $config Информация обо всех настройках скрипта.
* @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' => ''
];

// Определяемся с шаблоном сайта
Expand All @@ -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;
Binary file added engine/skins/images/moder_notes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions templates/Default/moder_notes/.htaccess
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Order allow,deny
Deny from all
26 changes: 26 additions & 0 deletions templates/Default/moder_notes/default.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[public_notes]
<h4>Публичные заметки</h4>
[pub_notes]
<p>
{pub_note_date} - {pub_note_text}
</p>
[/pub_notes]
[/public_notes]

[private_note]
<h4>Ваша аметка об этом пользователе</h4>
<p>{private_note}</p>
<button class="btn">Редактировать заметку</button>
[/private_note]

[not_private_note]
<h4>Вы не добавляли заметок для этого пользователя</h4>
<button class="btn">Добавить заметку</button>
[/not_private_note]

[user_names]
<h4>
Другие имена этого пользователя
</h4>
<p>{user_names}</p>
[/user_names]