Мини-хак сообщений о новой почте
Версия движка: JohnCMS-6.2.0
(по идее, все 6-е версии должны работать)
Автор: ДоХтор
Скрипт заменяет стандартное уведомление о новой почте
на логин (
или если заполнено в анкете его имя отправителя -
на имя) юзера. Таким образом,
не переходя по ссылке
Почта можно видеть имена(или логины) отправителей, количество их сообщений (каждого в отдельности), и общее количество входящих сообщений.
Установка:
Распаковать архив в корневой каталог сайта.
Если ваш файл incfiles/
head.php был изменён, то нужно в файле head.php:
вместо этого кода (+/-)
/*
-----------------------------------------------------------------
Ссылки на непрочитанное
-----------------------------------------------------------------
*/
if ($user_id) {
$list = array();
$new_sys_mail = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_mail` WHERE `from_id`='$user_id' AND `read`='0' AND `sys`='1' AND `delete`!='$user_id';"), 0);
if ($new_sys_mail) $list[] = '<a href="' . $home . '/mail/index.php?act=systems">Система</a> (+' . $new_sys_mail . ')';
$new_mail = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_mail` LEFT JOIN `cms_contact` ON `cms_mail`.`user_id`=`cms_contact`.`from_id` AND `cms_contact`.`user_id`='$user_id' WHERE `cms_mail`.`from_id`='$user_id' AND `cms_mail`.`sys`='0' AND `cms_mail`.`read`='0' AND `cms_mail`.`delete`!='$user_id' AND `cms_contact`.`ban`!='1' AND `cms_mail`.`spam`='0'"), 0);
if ($new_mail) $list[] = '<a href="' . $home . '/mail/index.php?act=new">' . $lng['mail'] . '</a> (+' . $new_mail . ')';
if ($datauser['comm_count'] > $datauser['comm_old']) $list[] = '<a href="' . core::$system_set['homeurl'] . '/users/profile.php?act=guestbook&user=' . $user_id . '">' . $lng['guestbook'] . '</a> (' . ($datauser['comm_count'] - $datauser['comm_old']) . ')';
$new_album_comm = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_album_files` WHERE `user_id` = '" . core::$user_id . "' AND `unread_comments` = 1"), 0);
if ($new_album_comm) $list[] = '<a href="' . core::$system_set['homeurl'] . '/users/album.php?act=top&mod=my_new_comm">' . $lng['albums_comments'] . '</a>';
if (!empty($list)) echo '<div class="rmenu">' . $lng['unread'] . ': ' . functions::display_menu($list, ', ') . '</div>';
}
вставить этот (+/-)
/*
-----------------------------------------------------------------
Ссылки на непрочитанное
-----------------------------------------------------------------
*/
if ($user_id) {
$list = array();
$new_sys_mail = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_mail` WHERE `from_id`='$user_id' AND `read`='0' AND `sys`='1' AND `delete`!='$user_id';"), 0);
if ($new_sys_mail) $list[] = '<a href="'. $home .'/mail/index.php?act=systems">Система</a> (+'. $new_sys_mail .')';
$new_mail = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_mail` LEFT JOIN `cms_contact` ON `cms_mail`.`user_id`=`cms_contact`.`from_id` AND `cms_contact`.`user_id`='$user_id' WHERE `cms_mail`.`from_id`='$user_id' AND `cms_mail`.`sys`='0' AND `cms_mail`.`read`='0' AND `cms_mail`.`delete`!='$user_id' AND `cms_contact`.`ban`!='1' AND `cms_mail`.`spam`='0'"), 0);
if ($new_mail) {
function sendName() {
global $user_id, $start, $kmess;
$out = [];
$query = mysql_query("SELECT `users`.* FROM `cms_mail`
LEFT JOIN `users` ON `cms_mail`.`user_id`=`users`.`id`
LEFT JOIN `cms_contact` ON `cms_mail`.`user_id`=`cms_contact`.`user_id`
WHERE `cms_mail`.`from_id`='" . $user_id . "' AND `cms_mail`.`read`='0' AND `cms_mail`.`spam`='0'
GROUP BY `cms_mail`.`user_id` ORDER BY `cms_contact`.`time` DESC LIMIT " . $start . "," . $kmess
);
while ($row = mysql_fetch_assoc($query)) {
$new_cnt_mess = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_mail` WHERE `cms_mail`.`user_id`='{$row['id']}'
AND `cms_mail`.`from_id`='$user_id' AND `read`='0' AND `delete`!='$user_id' AND `spam`='0';"), 0);
$cnt_mess = ($new_cnt_mess ? '<span style="font-size:xx-small; vertical-align:super; color:red;">+'.
$new_cnt_mess .'</span>' : '');
$out[] = ($row['imname'] ? $row['imname'] : $row['name']) . $cnt_mess;
}
return implode(', ', $out);
}
$list[] = '<a style="text-decoration:none;" href="'. $home .'/mail/index.php?act=new">'.
sendName() .'</a> (<b>+'. $new_mail .'</b>)';
}
if ($datauser['comm_count'] > $datauser['comm_old']) $list[] = '<a href="'. core::$system_set['homeurl'] .'/users/profile.php?act=guestbook&user='. $user_id .'">'. $lng['guestbook'] .'</a> ('. ($datauser['comm_count'] - $datauser['comm_old']) .')';
$new_album_comm = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_album_files` WHERE `user_id` = '". core::$user_id ."' AND `unread_comments` = 1"), 0);
if ($new_album_comm) $list[] = '<a href="'. core::$system_set['homeurl'] .'/users/album.php?act=top&mod=my_new_comm">'. $lng['albums_comments'] .'</a>';
if (!empty($list))
echo '<div class="rmenu"><img style="vertical-align:-5px; margin: -7px 0 -7px 0;" src="http://'.
$_SERVER['SERVER_NAME'] .'/images/usmail.png" /> '. functions::display_menu($list, ', ') .'</div>';
}
а так же извлечь из архива картинку и сохранить её в папке
images.
Добавление: Версия PHP - 5.4 и выше. Для более ранних версий PHP нужно заменить строку
$out = []; на
$out = array();
ДоХтор, Зачет +++
А гирлянду букв так и не убрал, на скрине..ггг
# venom (24.12.2015 / 22:46)
ДоХтор, Зачет +++
А гирлянду букв так и не убрал, на скрине..ггг
Гг, да то скорее не гирлянда, а переливающийся текст, оставшийся от предыдущих манипуляций
В этом хаке его нет, текст приветствия стандартный.
На счёт этого хака, не знаю кому-как, а мне, когда тут приходит почта, то не всегда удобно кликать ссылку для того, чтобы увидеть от кого письмо(письма), поэтому пришла идея показать отправителей сразу же в уведомлении. Думаю, так удобней.
как сделать чтоб отображался только логин отправителя а имя нет?
или если заполнено в анкете его имя отправителя - на имя) юзера
Alexis22, думаю надо поменять ключ массива name на login , возможно ещё в запросе поменять имя поля
# EcHo_Texas (30.05.2016 / 17:11)
Mentions system?
See the first post: JohnCMS-6.2.0