0) { $res = mysql_fetch_array($req); $name = strtr($res['text'], array( '"' => '', '&' => '', '<' => '', '>' => '', ''' => '', '[' => '', ']' => '' )); if (mb_strlen($name) > 40) $name = mb_substr($name, 0, 40) . '...'; return '[url=' . $m[3] . ']' . $name . '[/url]'; } else { return $m[3]; } } else return $m[3]; } } /* ----------------------------------------------------------------- Склонение слов ----------------------------------------------------------------- */ function bowWords($value = 0, $words = 0) { if ($value < 11 or $value > 19) { $value = (string )$value; switch ($value{mb_strlen($value) - 1}) { case 1: return ($words[0]); break; case 2: case 3: case 4: return ($words[1]); break; default: return ($words[2]); break; } } else return ($words[2]); } /* ----------------------------------------------------------------- Вывод времени добавления сообщения ----------------------------------------------------------------- */ function formatDateAdd($var) { $out = false; $d = floor($var / 86400); if ($d > 0) { $out = $d . bowWords($d, array(' день ', ' дня ', ' дней ')); $var = $var - ($d * 86400); } $h = floor($var / 3600); if ($h > 0) { $out .= $h . bowWords($h, array(' час ', ' часа ', ' часов ')); $var = $var - ($h * 3600); } $m = floor($var / 60); if ($m > 0) { $out .= $m . bowWords($m, array(' минуту ', ' минуты ', ' минут ')); $var = $var - ($m * 60); } if ($var > 0) $out .= $var . bowWords($var, array(' секунду', ' секунды', ' секунд')); return $out; } // Проверка на флуд $flood = functions::antiflood(); if ($flood) { require('../incfiles/head.php'); echo functions::display_error($lng['error_flood'] . ' ' . $flood . $lng['sec'], '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } $headmod = 'forum,' . $id . ',1'; $agn1 = strtok($agn, ' '); $type = mysql_query("SELECT * FROM `forum` WHERE `id` = '$id'"); $type1 = mysql_fetch_assoc($type); switch ($type1['type']) { case 't': /* ----------------------------------------------------------------- Добавление простого сообщения ----------------------------------------------------------------- */ if (($type1['edit'] == 1 || $type1['close'] == 1) && $rights < 7) { // Проверка, закрыта ли тема require('../incfiles/head.php'); echo functions::display_error($lng_forum['error_topic_closed'], '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } //Обрабатываем ссылки $msg = preg_replace_callback('~\\[url=(http://.+?)\\](.+?)\\[/url\\]|(http://(www.)?[0-9a-zA-Z\.-]+\.[0-9a-zA-Z]{2,6}[0-9a-zA-Z/\?\.\~&_=/%-:#]*)~', 'forum_link', $msg); $msg = isset($_POST['msg']) ? trim($_POST['msg']): ''; if (isset($_POST['msgtrans'])) $msg = functions::trans($msg); if (isset($_POST['addfiles'])) $_POST['msgNew'] = 1; if (!isset($_POST['msgNew'])) { $query = mysql_query("SELECT `id`, `text`, `user_id`, `time` FROM `forum` WHERE `refid` = '$id' ORDER BY `time` DESC LIMIT 1"); if (mysql_num_rows($query) > 0) { $result = mysql_fetch_array($query); if ($result['user_id'] == $user_id) $result['text'] .= "\r\n\r\n[bg=#fcc9c9][u]Добавлено спустя " . formatDateAdd((time() - $result['time'])) . ":[/u][/bg]\r\n"; else $_POST['msgNew'] = 0; } else $_POST['msgNew'] = 0; } if (isset($_POST['submit']) && !empty($_POST['msg'])) { // Проверяем на минимальную длину if (mb_strlen($msg) < 4) { require('../incfiles/head.php'); echo functions::display_error($lng['error_message_short'], '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } // Проверяем, не повторяется ли сообщение? $req = mysql_query("SELECT * FROM `forum` WHERE `user_id` = '$user_id' AND `type` = 'm' ORDER BY `time` DESC"); if (mysql_num_rows($req) > 0) { $res = mysql_fetch_array($req); if ($msg == $res['text']) { require('../incfiles/head.php'); echo functions::display_error($lng['error_message_exists'], '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } } // Удаляем фильтр, если он был if (isset($_SESSION['fsort_id']) && $_SESSION['fsort_id'] == $id) { unset($_SESSION['fsort_id']); unset($_SESSION['fsort_users']); } if (!isset($_POST['msgNew'])) { $msg = $result['text'] . $msg; // Обновляем сообщение mysql_query("UPDATE `forum` SET `text` = '" . mysql_real_escape_string($msg) . "' WHERE `id` = '" . $result['id'] . "' "); } else { // Добавляем сообщение в базу mysql_query("INSERT INTO `forum` SET `refid` = '$id', `type` = 'm' , `time` = '" . time() . "', `user_id` = '$user_id', `from` = '$login', `ip` = '" . core::$ip . "', `ip_via_proxy` = '" . core::$ip_via_proxy . "', `soft` = '" . mysql_real_escape_string($agn1) . "', `text` = '" . mysql_real_escape_string($msg) . "' "); $fadd = mysql_insert_id(); } // Обновляем время топика mysql_query("UPDATE `forum` SET `time` = '" . time() . "' WHERE `id` = '$id' "); // Обновляем статистику юзера mysql_query("UPDATE `users` SET `postforum`='" . ($datauser['postforum'] + 1) . "', `lastpost` = '" . time() . "' WHERE `id` = '$user_id' "); // Вычисляем, на какую страницу попадает добавляемый пост $page = $set_forum['upfp'] ? 1 : ceil(mysql_result(mysql_query("SELECT COUNT(*) FROM `forum` WHERE `type` = 'm' AND `refid` = '$id'" . ($rights >= 7 ? '' : " AND `close` != '1'")), 0) / $kmess); if ($_POST['addfiles'] == 1) header("Location: index.php?id=$fadd&act=addfile"); else header("Location: index.php?id=$id&page=$page"); } else { require('../incfiles/head.php'); if ($datauser['postforum'] == 0) { if (!isset($_GET['yes'])) { $lng_faq = core::load_lng('faq'); echo '

' . $lng_faq['forum_rules_text'] . '

' . '

' . $lng_forum['agree'] . ' | ' . '' . $lng_forum['not_agree'] . '

'; require('../incfiles/end.php'); exit; } } $postTime = time(); if (!isset($_POST['msgNew']) && !empty($msg)) { $msg = $result['text'] . $msg; $postTime = $result['time']; } $msg_pre = functions::checkout($msg, 1, 1); if ($set_user['smileys']) $msg_pre = functions::smileys($msg_pre, $datauser['rights'] ? 1 : 0); $msg_pre = preg_replace('#\[c\](.*?)\[/c\]#si', '
\1
', $msg_pre); echo '
' . $lng_forum['topic'] . ': ' . $type1['text'] . '
'; if ($msg && !isset($_POST['submit'])) echo '
' . functions::display_user($datauser, array('iphide' => 1, 'header' => '(' . functions::display_date(time()) . ')', 'body' => $msg_pre)) . '
'; echo '
' . '

' . $lng_forum['post'] . '

'; if (!$is_mobile) echo '

' . bbcode::auto_bb('form', 'msg'); echo '

' . '

'.($set['fputs'] ? ' ' . $lng_forum['add_file'] : ''); if ($set_user['translit']) echo '
' . $lng['translit']; echo '

' . ($set_forum['preview'] ? '' : '') . '

'; } echo '
' . $lng['translit'] . ' | ' . '' . $lng['smileys'] . '
' . '

' . $lng['back'] . '

'; break; case 'm': /* ----------------------------------------------------------------- Добавление сообщения с цитированием поста ----------------------------------------------------------------- */ $th = $type1['refid']; $th2 = mysql_query("SELECT * FROM `forum` WHERE `id` = '$th'"); $th1 = mysql_fetch_array($th2); if (($th1['edit'] == 1 || $th1['close'] == 1) && $rights < 7) { require('../incfiles/head.php'); echo functions::display_error($lng_forum['error_topic_closed'], '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } if ($type1['user_id'] == $user_id) { require('../incfiles/head.php'); echo functions::display_error('Нельзя отвечать на свое же сообщение', '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } $shift = (core::$system_set['timeshift'] + core::$user_set['timeshift']) * 3600; $vr = date("d.m.Y / H:i", $type1['time'] + $shift); $msg = isset($_POST['msg']) ? trim($_POST['msg']) : ''; $txt = isset($_POST['txt']) ? intval($_POST['txt']) : false; if (isset($_POST['msgtrans'])) $msg = functions::trans($msg); $to = $type1['from']; if (!empty($_POST['citata'])) { // Если была цитата, форматируем ее и обрабатываем $citata = isset($_POST['citata']) ? trim($_POST['citata']) : ''; $citata = bbcode::notags($citata); $citata = preg_replace('#\[c\](.*?)\[/c\]#si', '', $citata); $citata = mb_substr($citata, 0, 200); $tp = date("d.m.Y/H:i", $type1['time']); $msg = '[c]' . $to . ' (' . $tp . ")\r\n" . $citata . '[/c]' . $msg; } elseif (isset($_POST['txt'])) { // Если был ответ, обрабатываем реплику switch ($txt) { case 2: $repl = $type1['from'] . ', ' . $lng_forum['reply_1'] . ', '; break; case 3: $repl = $type1['from'] . ', ' . $lng_forum['reply_2'] . ' ([url=' . $set['homeurl'] . '/forum/index.php?act=post&id=' . $type1['id'] . ']' . $vr . '[/url]) ' . $lng_forum['reply_3'] . ', '; break; case 4: $repl = $type1['from'] . ', ' . $lng_forum['reply_4'] . ' '; break; default : $repl = $type1['from'] . ', '; } $msg = $repl . ' ' . $msg; } //Обрабатываем ссылки $msg = preg_replace_callback('~\\[url=(http://.+?)\\](.+?)\\[/url\\]|(http://(www.)?[0-9a-zA-Z\.-]+\.[0-9a-zA-Z]{2,6}[0-9a-zA-Z/\?\.\~&_=/%-:#]*)~', 'forum_link', $msg); if (isset($_POST['addfiles'])) $_POST['msgNew'] = 1; if (!isset($_POST['msgNew'])) { $query = mysql_query("SELECT `id`, `text`, `user_id`, `time` FROM `forum` WHERE `refid` = '$th' ORDER BY `time` DESC LIMIT 1"); if (mysql_num_rows($query) > 0) { $result = mysql_fetch_array($query); if ($result['user_id'] == $user_id) $result['text'] .= "\r\n\r\n[bg=#fcc9c9][u]Добавлено спустя " . formatDateAdd((time() - $result['time'])) . ":[/u][/bg]\r\n"; else $_POST['msgNew'] = 0; } else $_POST['msgNew'] = 0; } if (isset($_POST['submit'])) { if (empty($_POST['msg'])) { require('../incfiles/head.php'); echo functions::display_error($lng['error_empty_message'], '' . $lng['repeat'] . ''); require('../incfiles/end.php'); exit; } // Проверяем на минимальную длину if (mb_strlen($msg) < 4) { require('../incfiles/head.php'); echo functions::display_error($lng['error_message_short'], '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } // Проверяем, не повторяется ли сообщение? $req = mysql_query("SELECT * FROM `forum` WHERE `user_id` = '$user_id' AND `type` = 'm' ORDER BY `time` DESC LIMIT 1"); if (mysql_num_rows($req) > 0) { $res = mysql_fetch_array($req); if ($msg == $res['text']) { require('../incfiles/head.php'); echo functions::display_error($lng['error_message_exists'], '' . $lng['back'] . ''); require('../incfiles/end.php'); exit; } } // Удаляем фильтр, если он был if (isset($_SESSION['fsort_id']) && $_SESSION['fsort_id'] == $th) { unset($_SESSION['fsort_id']); unset($_SESSION['fsort_users']); } if (!isset($_POST['msgNew'])) { $msg = $result['text'] . $msg; // Обновляем сообщение mysql_query("UPDATE `forum` SET `text` = '" . mysql_real_escape_string($msg) . "' WHERE `id` = '" . $result['id'] . "' "); } else { // Добавляем сообщение в базу mysql_query("INSERT INTO `forum` SET `refid` = '$th', `type` = 'm', `time` = '" . time() . "', `user_id` = '$user_id', `from` = '$login', `ip` = '" . core::$ip . "', `ip_via_proxy` = '" . core::$ip_via_proxy . "', `soft` = '" . mysql_real_escape_string($agn1) . "', `text` = '" . mysql_real_escape_string($msg) . "' "); $fadd = mysql_insert_id(); } // Обновляем время топика mysql_query("UPDATE `forum` SET `time` = '" . time() . "' WHERE `id` = '$th' "); // Обновляем статистику юзера mysql_query("UPDATE `users` SET `postforum`='" . ($datauser['postforum'] + 1) . "', `lastpost` = '" . time() . "' WHERE `id` = '$user_id' "); // Вычисляем, на какую страницу попадает добавляемый пост $page = $set_forum['upfp'] ? 1 : ceil(mysql_result(mysql_query("SELECT COUNT(*) FROM `forum` WHERE `type` = 'm' AND `refid` = '$th'" . ($rights >= 7 ? '' : " AND `close` != '1'")), 0) / $kmess); $addfiles = intval($_POST['addfiles']); if ($addfiles == 1) { header("Location: index.php?id=$fadd&act=addfile"); } else { header("Location: index.php?id=$th&page=$page"); } } else { $textl = $lng['forum']; require('../incfiles/head.php'); $qt = " $type1[text]"; if (($datauser['postforum'] == "" || $datauser['postforum'] == 0)) { if (!isset($_GET['yes'])) { $lng_faq = core::load_lng('faq'); echo '

' . $lng_faq['forum_rules_text'] . '

'; echo '

' . $lng_forum['agree'] . ' | ' . $lng_forum['not_agree'] . '

'; require('../incfiles/end.php'); exit; } } $postTime = time(); if (!isset($_POST['msgNew']) && !empty($msg)) { $msg = $result['text'] . $msg; $postTime = $result['time']; } $msg_pre = functions::checkout($msg, 1, 1); if ($set_user['smileys']) $msg_pre = functions::smileys($msg_pre, $datauser['rights'] ? 1 : 0); $msg_pre = preg_replace('#\[c\](.*?)\[/c\]#si', '
\1
', $msg_pre); echo '
' . $lng_forum['topic'] . ': ' . $th1['text'] . '
'; $qt = str_replace("
", "\r\n", $qt); $qt = trim(preg_replace('#\[c\](.*?)\[/c\]#si', '', $qt)); $qt = functions::checkout($qt, 0, 2); if (!empty($_POST['msg']) && !isset($_POST['submit'])) echo '
' . functions::display_user($datauser, array('iphide' => 1, 'header' => '(' . functions::display_date(time()) . ')', 'body' => $msg_pre)) . '
'; echo '
'; if (isset($_GET['cyt'])) { // Форма с цитатой echo '

' . $type1['from'] . ' (' . date("d.m.Y/H:i", $type1['time']) . ')

' . '

' . $lng_forum['cytate'] . '

' . '' . '
' . $lng_forum['cytate_help'] . '

'; } else { // Форма с репликой echo '

' . $lng_forum['reference'] . '

' . ' ' . $type1['from'] . ',
' . ' ' . $type1['from'] . ', ' . $lng_forum['reply_1'] . ',
' . ' ' . $type1['from'] . ', ' . $lng_forum['reply_2'] . ' (' . $vr . ') ' . $lng_forum['reply_3'] . ',
' . ' ' . $type1['from'] . ', ' . $lng_forum['reply_4'] . '

'; } echo '

' . $lng_forum['post'] . '

'; if (!$is_mobile) echo '

' . bbcode::auto_bb('form', 'msg'); echo '

' . '

'.($set['fput'] ? ' ' . $lng_forum['add_file'] : ''); if ($set_user['translit']) echo '
' . $lng['translit']; echo '

' . ($set_forum['preview'] ? '' : '') . '

'; } echo '
' . $lng['translit'] . ' | ' . '' . $lng['smileys'] . '
' . '

' . $lng['back'] . '

'; break; default: require('../incfiles/head.php'); echo functions::display_error($lng_forum['error_topic_deleted'], '' . $lng['to_forum'] . ''); require('../incfiles/end.php'); break; } ?>