Уважаемые пользователи, по техническим причинам загрузка файлов временно недоступна. Приносим извинения за временные неудобства.

Время жизни ЛС?

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Время жизни ЛС?

Сообщение moto »

Всем привет. Никто не сталкивался вот с такой задачей, необходимо удалять личные сообщения из ящика пользователя если они старше определенного срока. Может быть есть мысли как это сделать самому, подскажите куда копать?
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Re: Время жизни ЛС?

Сообщение moto »

Слушайте, а если отойти от php может быть это как-то можно организовать на уровне СУБД? Хоть какие-то мысли есть по этому поводу?
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Время жизни ЛС?

Сообщение Палыч »

1. Зачем?
2. Срок должен определять сам пользователь или администратор?
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Re: Время жизни ЛС?

Сообщение moto »

1. Если коротко - начальство требует именно так. Если подробнее описать, то система обмена ЛС будет использоваться для обмена файлами. Т.е. пользователь рассылает/получает файл/ы пользователю/группе пользователей смотрит состояние (получено или нет), смотрит историю своих отправлений/получений. И сообщения с вложениями должны удаляться не по достижении какого-то количества, а по достижению определенного срока давности, 1 месяц например.

2. Срок задает администратор - можно даже без какого-либо интерфейса...

Добавлено спустя 2 часа 29 минут 10 секунд:
И еще пожалуйста подскажите где происходит обработка следующего:
когда мы ставим "Центр пользователя Личные сообщения Правила, папки и настройки Если папка заполнена" - галочку "удалить самые старые сообщения" ?
т.е. в каком файле написан код, затирающий старые сообщения? Я может по аналогии попробую сделать...

Добавлено спустя 1 час 8 минут 24 секунды:
Полчаса ковыряния в БД нарыл вот чего:

1. таблица phpbb_privmsgs - это ЛС сообщения
2. таблица phpbb_attachments - это сами вложения

таблицы свзяаны по полю phpbb_privmsgs.msg_id = phpbb_attachments.post_msg_id


уже легче :)
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Время жизни ЛС?

Сообщение Палыч »

moto писал(а):Полчаса ковыряния в БД нарыл вот чего:
Ссылка на wiki вверху.
index.php?title=БД phpBB 3.0.x
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Re: Время жизни ЛС?

Сообщение moto »

Спасибо за ссылку, теперь еще бы кто кусог кода phpного написал :) Я думаю что можно сделать батник, в котором выполнять php файл, который будет удаляьт все сообщения старше месяца (к примеру), пока такая мысль в голове...
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 7 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Время жизни ЛС?

Сообщение MIT »

Для этого существует Cron: [FAQ] cron.php
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Re: Время жизни ЛС?

Сообщение moto »

О, спасиб, про cron я сейчас посмотрю...
В общем по MySQL вот так получилось:

Код: Выделить всё

delete from phpbb_attachments where post_msg_id in 
(
SELECT 
 msg_id
FROM `phpbb_privmsgs`
where
TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)) >= 90
);

delete from phpbb_privmsgs_to where msg_id in
(
SELECT 
 msg_id
FROM `phpbb_privmsgs`
where
TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)) >= 90
);

delete
FROM `phpbb_privmsgs`
where
TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)) >= 90;
как этот код облечь в php?
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Время жизни ЛС?

Сообщение Палыч »

moto писал(а):как этот код облечь в php?
http://code.phpbb.com/svn/phpbb/branche ... s.html#sql
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Re: Время жизни ЛС?

Сообщение moto »

Да уж, cron победить мне почему-то не удалось :( вроде делал как в FAQе написано, поэтому все-таки буду батничокм запускать вот такой вот php:

Код: Выделить всё

<?php
$host = "localhost";
$user = "@@@@";
$password = "@@@@@@@@";
$db="@@@@@@@@";

// Производим попытку подключения к серверу MySQL:
if (!mysql_connect($host, $user, $password))
{
echo "<h2>MySQL Error!</h2>";
exit;
}

// Выбираем базу данных:
mysql_select_db($db);


//узнаем старше скольки дней сообщения должны удаляться
$int=mysql_query('select config_value from phpbb_config where config_name=\'interval\'');
$inter=mysql_fetch_array($int);
//получили значение старше скольки дней сообщения должны удаляться
$interval = "$inter[config_value]";


// SQL-запрос:
$sql_privmsgs = mysql_query ('SELECT msg_id, message_time, from_unixtime(message_time, \'%d.%m.%y %H:%i:%s\') as tm FROM phpbb_privmsgs where TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)) >='.$interval );

//cчитаем количество записей, которые будем удалять
for ($c=0; $c<mysql_num_rows($sql_privmsgs); $c++)
{
}

//если есть такие записи
if ($c>0)
{
//вставляем в таблицу лог количество удаляемых сообщений
mysql_query('insert into phpbb_log_deletes (date, msg_deleted) values (now(), ' .$c. ');') or die(mysql_error());

//удаляем из phpbb_attachments
mysql_query('delete from phpbb_attachments where post_msg_id in (SELECT  msg_id FROM phpbb_privmsgs where TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)) >='.$interval.');');

//удаляем из phpbb_privmsgs_to
mysql_query('delete from phpbb_privmsgs_to where msg_id in (SELECT  msg_id FROM phpbb_privmsgs where TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)) >='.$interval.');');

//удаляем из phpbb_privmsgs
mysql_query('delete from phpbb_privmsgs where TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)) >='.$interval.';') or die(mysql_error());

}

mysql_close();
?>
у меня еще вот какой вопрос остался, в UCP если смотреть в списках Входящие (Исходящие, Отправленные) выводится список сообщений и также информация о том когда сообщение создано. Я так понимаю это где-то в файле шаблона прописано ,не могу найти в каком из template\ucp_*.html. Я хочу туда еще добавить и оставшееся время жизни данного сообщения...
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 7 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1455 раз

Re: Время жизни ЛС?

Сообщение Nekstati »

Список сообщений — ucp_pm_viewfolder.html.
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Re: Время жизни ЛС?

Сообщение moto »

спасибо, сегодня не успел поковыряться, буду ковыряться завтра результаты напишу сюда...
Аватара пользователя
moto
phpBB 1.2.0
Сообщения: 18
Стаж: 16 лет 2 месяца
Благодарил (а): 5 раз

Re: Время жизни ЛС?

Сообщение moto »

В общем-то вопрос решен, спасибо за помощь. Вкратце опишу, все что сделано.

1. В тбл. phpbb_config добавлено interval = 90 - время жизни сообщения
2. Вывод времени которое осталось жить сообщению сделан в файле includes\ucp\ucp_pm_viewfolder.php, там реализована вычисление переменной $xyz. Код вставляется в теле foreach

Код: Выделить всё

	foreach ($folder_info['pm_list'] as $message_id)
			{
........................
///////МОЕ считаем сколько дней осталось до удаления файла
        $qry = mysql_query('SELECT ((select config_value from phpbb_config where config_name=\'interval\')-(TO_DAYS(NOW()) - TO_DAYS(from_unixtime(message_time)))) as tm  FROM phpbb_privmsgs where msg_id='.$row['msg_id']);
        $qry_fet=mysql_fetch_array($qry);        
        $xyz=$qry_fet[tm];
//////Конец. МОЕ считаем сколько дней осталось до удаления файла
..................


+

Код: Выделить всё

// Send vars to template $template->assign_block_vars('messagerow', array(
.............................
'T_XYZ'         => $xyz,
.............................
3. Непосредственно сам вывод добавляем вот здесь: styles\prosilver\template\ucp_pm_viewfolder.html

Код: Выделить всё

<!-- IF S_SHOW_RECIPIENTS -->{L_MESSAGE_TO} {messagerow.RECIPIENTS}<!-- ELSE -->{L_MESSAGE_BY_AUTHOR} {messagerow.MESSAGE_AUTHOR_FULL} &raquo; {messagerow.SENT_TIME}<!-- ENDIF -->
 <!--ВОТ ТУТ ВРЕМЯ ЖИЗНИ ФАЙЛА-->
&nbsp;&nbsp;&nbsp;Осталось дней до автом. удаления:&nbsp;	{messagerow.T_XYZ}
4. Ну и удаление собственно реализовано в отдельном php файле, который будет запускаться батником каждый день, код этого файлйа писал выше...

Так сказать вопрос решен, не совсем красиво, но работает...

Вернуться в «Запросы модов для phpBB 3.0.x»