Код:
ini_set("max_execution_time", "0");
// Файлы конфигурации и доступа к базе данных
$NETCAT_FOLDER = join( strstr(__FILE__, "/") ? "/" : "\\", array_slice( preg_split("/[\/\\\]+/", __FILE__), 0, -1 ) ).( strstr(__FILE__, "/") ? "/" : "\\" );
require($NETCAT_FOLDER."vars.inc.php");
require($ROOT_FOLDER."connect_io.php");
require ($INCLUDE_FOLDER."s_files.inc.php");
require_once ($ADMIN_FOLDER."function.inc.php");
global $db;
$date = date('Y-m-d', time()); // Текущая дата
$tables = $db->get_results("SHOW TABLES", ARRAY_N); // Получаем список таблиц
for ($i=0; $i<count($tables); $i++){
if(substr_count($tables[$i][0], "Message")) { // Выбираем таблицы, в названии которых есть Message
$query = $db->get_results("SELECT m.`Message_ID` AS `m_id`, m.`Sub_Class_ID` AS `cc_id`, m.`Subdivision_ID` AS `sub_id`, s.`Catalogue_ID` AS `cat_id`
FROM `".$tables[$i][0]."` AS `m`, `Subdivision` AS `s`
WHERE s.`Subdivision_ID` = m.`Subdivision_ID`
AND `TimeToDelete` < '".$date."'
AND `TimeToDelete` IS NOT NULL
AND `TimeToDelete` > '2000-01-01'", ARRAY_A); // В некоторых объектах дата случайно может быть проставлена 90 годов, исключим их чтобы не удалить
$message_to_delete = array();
$message_to_delete_ids = array();
if ( !empty($query) ) {
foreach ( $query as $v ) {
// группируем объекты по сайты/разделу/сс
$message_to_delete[$v['cat_id']][$v['sub_id']][$v['cc_id']][] = $v['m_id'];
$message_to_delete_ids[] = $v['m_id'];
}
}
// удаляем сами сообщения
if ( !empty( $message_to_delete_ids) ) {
// файлы
foreach ( $message_to_delete_ids as $message_id ) {
DeleteMessageFiles($classID,$message_id);
}
// сообственно удаление
$db->query("DELETE FROM `".$tables[$i][0]."`
WHERE `Message_ID` IN (".join(",",$message_to_delete_ids).")");
}
// системные события
if ( !empty($message_to_delete) ) {
foreach ( $message_to_delete as $catalogue_id => $sub_cc_message) {
foreach ( $sub_cc_message as $sub_id => $cc_message) {
foreach ( $cc_message as $cc_id => $v) {
$nc_core->event->execute("dropMessage", $catalogue_id, $sub_id, $cc_id, $classID, $v);
// модуль комментариев
if ( nc_module_check_by_keyword("comments") ) {
include_once ($MODULE_FOLDER."comments/function.inc.php");
// delete comment rules
nc_comments::dropComments($db, $cc_id, "Sub_Class", $v);
}
}
}
}
}
}
}