/** * Вызывается при запросе несуществующей * страницы или ошибки и использования спецсимволов в параметрах * @param bool $LowProtect * @param bool $Redirect * @return void */ function HackOff($LowProtect = false, $Redirect = true) { global $config; if (System::user()->isAdmin() || $LowProtect) { if (defined('MAIN_SCRIPT') || defined('PLUG_SCRIPT') || !defined('ADMIN_SCRIPT')) { if ($Redirect) { GO(Ufu('index.php')); } } elseif (defined('ADMIN_SCRIPT')) { GO(ADMIN_FILE); } } else { if (System::config('security/hack_event') == 'alert') { die(System::config('security/hack_alert')); } elseif (System::config('security/hack_event') == 'ban') { die('Вам был запрещен доступ к сайту, возможно система обнаружила подозрительные действия с Вашей стороны. Если Вы считаете, что это произошло по ошибке, - обратитесь в службу поддержки по e-mail ' . System::config('general/site_email') . '.'); } else { if ($Redirect) { GO(Ufu('index.php')); } } } }
function IndexForumLogin() { if (!System::user()->Auth) { System::site()->Login(''); System::user()->Def('forum_referrer', $_SERVER['HTTP_REFERER']); } else { GO(System::user()->Get('forum_referrer'), 202); } }
function IndexForumMarkRead() { $mark_forums = array(); // Форумы на которых устанавливать метки $forums_tree = ForumTree::Instance(); if (isset($_GET['forum'])) { // Только внутри определённого форума $forum = SafeDB($_GET['forum'], 11, int); $mark_forums = $forums_tree->GetAllAccessForumId($forum); } else { // На всех форумах $mark_forums = $forums_tree->GetAllAccessForumId(); } $user_id = System::user()->Get('u_id'); if (System::user()->Auth) { // Загружаем данные о прочтении тем пользователем $read_data = Forum_Marker_GetReadData(); // Загружаем топики (агрегированы по forum_id) $topics = ForumCacheGetTopics(); $del_where = ''; $insert_values = array(); $time = time(); foreach ($mark_forums as $forum_id) { if (!isset($topics[$forum_id])) { continue; } foreach ($topics[$forum_id] as $topic) { $tid = SafeEnv($topic['id'], 11, int); // Не прочитана или метка устарела if (!isset($read_data[$topic['id']])) { $insert_values[] = "'{$user_id}','{$tid}','{$time}'"; // Добавить новую метку } elseif ($read_data[$topic['id']]['date'] < $topic['last_post']) { $del_where .= "(`tid`='{$tid}' and `mid`= '{$user_id}') or "; // Удалить текущую метку $insert_values[] = "'{$user_id}','{$tid}','{$time}'"; // Добавить новую метку } } } // Удаляем устаревшие метки if ($del_where != '') { $del_where = substr($del_where, 0, -4); // Удаляем .or. System::database()->Delete('forum_topics_read', $del_where); } // Добавляем новые метки // TODO: В будущем нужно перейти на InnoDB и использовать транзакции как в MySQL так и в FilesDB. if (count($insert_values) > 0) { foreach ($insert_values as $vals) { System::database()->Insert('forum_topics_read', $vals); } } } GO(GetSiteUrl() . Ufu('index.php?name=forum' . (isset($forum) ? '&op=showforum&forum=' . $forum : ''), 'forum/' . (isset($forum) ? '{forum}/' : ''))); }
function IndexForumSubscription() { global $forum_lang; $forums_tree = ForumTree::Instance(); // Проверки на доступ if (CheckGet('topic')) { // Тема $topic_id = SafeEnv($_GET['topic'], 11, int); System::database()->Select('forum_topics', "`id`='{$topic_id}'"); if (System::database()->NumRows() > 0) { $topic = System::database()->FetchRow(); } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_access_category']); return; } if ($topic['delete'] == '1') { // Тема на удалении System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_basket'] . '.' . $forum_lang['no_topic_basket_edit']); return; } if ($topic['close_topics'] == '1') { // Тема закрыта System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_close_for_discussion'] . '.' . $forum_lang['no_create_new_message_current_topic_add']); return; } // Форум $forum_id = SafeEnv($topic['forum_id'], 11, int); if (!isset($forums_tree->IdCats[$forum_id])) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']); return; } $forum_config = $forums_tree->GetForumConfigRecursive($forum_id); if (!$forum_config['access']) { // Доступ System::site()->AddTextBox($forum_lang['error'], $forum_config['access_reason']); return; } elseif (!$forum_config['new_message_email']) { // Разрешено ли подписываться на новые сообщения (+ защита от гостей) System::site()->AddTextBox($forum_lang['error'], $forum_config['add_post_reason']); return; } } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']); return; } Forum_Subscription($topic_id); // Подписка (обратное действие, если пользователь уже подписан) GO(Ufu('index.php?name=forum&op=showtopic&topic=' . $topic_id . '&view=lastpost', 'forum/topic{topic}-new.html')); }
function IndexFormsMain() { $forms = System::database()->Select('forms', GetWhereByAccess('view', "`active`='1'")); if (System::database()->NumRows() == 0) { GO(FORMS_UFU); } System::site()->AddTemplatedBox('', 'module/forms_list.html'); System::site()->AddBlock('forms_list', true, true, 'form'); foreach ($forms as $form) { $vars = array(); $vars['link'] = Ufu('index.php?name=forms&formlink=' . SafeDB($form['link'], 255, str), 'forms:form'); $vars['title'] = SafeDB($form['hname'], 255, str); System::site()->AddSubBlock('forms_list', true, $vars); } }
function IndexForumCloseTopic() { if (!System::user()->isAdmin()) { HackOff(); return; } if (CheckGet('topic')) { $topic_id = SafeEnv($_GET['topic'], 11, int); } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']); return; } System::database()->Select('forum_topics', "`id`='{$topic_id}'"); $topic = System::database()->FetchRow(); $forum_id = SafeDB($topic['forum_id'], 11, int); System::database()->Update('forum_topics', "`close_topics`='1'", "`id`='{$topic_id}'"); GO(Ufu('index.php?name=forum&op=showforum&forum=' . $forum_id, 'forum/{forum}/')); }
function IndexForumEditPosts() { global $forum_lang; if (!System::user()->isAdmin()) { System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['error_no_right_edit'] . '.</p>'); return; } if (!isset($_POST['posts'])) { System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['error_no_messages'] . '</p><br><a href="javascript:history.go(-1)">' . System::site()->Button($forum_lang['back']) . '</a>'); return; } if (isset($_GET['ok']) && $_GET['ok'] == '1') { $posts_ids = SafeEnv(explode(',', $_POST['posts']), 11, int); $moderation_result = ForumModerationPosts($_GET['edit'], $posts_ids, true); if ($moderation_result) { if (isset($_GET['back'])) { GoRefererUrl($_GET['back']); } else { GO($_POST['backurl']); } } } else { $posts_ids = array(); foreach (array_keys($_POST['posts']) as $post_id) { $posts_ids[] = SafeEnv($post_id, 11, int); } $do = SafeDB($_POST['do'], 255, str); $form_url = 'index.php?name=forum&op=edit_posts&edit=' . $do . '&ok=1'; if (isset($_GET['back'])) { $form_url .= '&back=' . SafeDB($_GET['back'], 10, str); } $vars['lang_premoderation'] = $forum_lang['moderation_messages']; $vars['posts_count'] = count($posts_ids); $vars['form_action'] = $form_url; $vars['form_name'] = 'forum_delete'; $vars['posts'] = implode(',', $posts_ids); $vars['backurl'] = $_SERVER['HTTP_REFERER']; $vars['reason'] = System::config('forum/basket') && $do == 'deleteposts'; $vars['lang_do'] = ForumModerationPosts($do, $posts_ids, false); System::site()->AddTemplatedBox($vars['lang_do'], 'module/forum_moderation.html'); System::site()->AddBlock('forum_moderation', true, false, 'mod'); System::site()->SetVars('forum_moderation', $vars); } }
} $text = "<div class=\"license_frame\"><div>" . $license . "</div></div>"; $this->SetContent($text); $this->AddButton('Назад', 'main&p=2'); $this->AddButton('Принимаю', 'install&p=2'); break; case 2: // Выбор типа базы данных global $db_types; $db_types = array(); SetupPlugins('db_types'); $this->SetTitle("Выбор типа Базы данных."); $this->OpenForm('install&p=3'); $text = '<p>Выберите тип Базы данных: </p>' . System::site()->Select('db_type', $db_types, true); $this->SetContent($text); $this->AddButton('Назад', 'install&p=1'); $this->AddSubmitButton('Далее'); break; case 3: // Перенаправление соответственно выбранному типу БД if (!isset($_POST['db_type'])) { $this->SetTitle('Ошибка'); $this->SetContent('Вы не выбрали тип Базы данных.'); $this->AddButton('Назад', 'install&p=2'); break; } $smod = SafeEnv($_POST['db_type'], 255, str); System::user()->Session('db_type', $smod); GO('setup.php?mod=' . $smod); break; }
function IndexFeedBackSend() { $err = array(); if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['subject']) || !isset($_POST['department']) || !isset($_POST['message']) || !isset($_POST['feedback_form'])) { GO(Ufu('index.php')); } else { if ($_POST['name'] != '') { $name = SafeDB($_POST['name'], 250, str); } else { $err[] = 'Пожалуйста, укажите Ваше имя!'; } if ($_POST['email'] != '') { $email = SafeDB($_POST['email'], 50, str); } else { $err[] = 'Пожалуйста, укажите Ваш действительный адрес E-mail!'; } if ($_POST['subject'] != '') { $subject = SafeDB($_POST['subject'], 250, str, false, false, false); } else { $err[] = 'Пожалуйста, введите тему сообщения!'; } // Проверяем капчу if (!System::user()->isDef('captcha_keystring') || System::user()->Get('captcha_keystring') != $_POST['keystr']) { $err[] = 'Вы ошиблись при вводе кода с картинки.'; } if ($_POST['department'] != '') { $department = SafeEnv($_POST['department'], 11, int); System::database()->Select('feedback', "`active`='1' and `id`='{$department}'"); if (System::database()->NumRows() > 0) { $dep = System::database()->FetchRow(); $dep_email = SafeDB($dep['email'], 255, str); $department = SafeDB($dep['name'], 255, str); } else { $err[] = 'Департамент больше не существует или обратная связь с этим департаментом отключена.'; } } else { $err[] = 'Пожалуйста, выберите департамент!'; } if ($_POST['message'] != '') { $message = SafeDB($_POST['message'], 65535, str, false, false, false); } else { $err[] = 'Пожалуйста, введите сообщение!'; } } $size = $_FILES['attach']['size']; // / 1024; if ($_FILES['attach']['error'] == UPLOAD_ERR_OK && $size >= System::config('feedback/max_filesize')) { $err[] = 'Слишком большой размер файла.'; } if (count($err) == 0) { $mail = LmEmailExtended::Instance(); $mail->SetTo($dep_email, Cp1251ToUtf8($department)); $mail->SetFrom($email, Cp1251ToUtf8($name)); $mail->SetSubject(Cp1251ToUtf8($subject)); $text = Indent("\n\t\t\tЗдравствуйте!\n\n\t\t\tС помощью формы обратной связи на сайте \"" . System::config('general/site_name') . "\"\n\t\t\tвам было отправлено сообщение.\n\n\t\t\tДепартамент: {$department}\n\t\t\tИмя: {$name}\n\t\t\tE-mail: {$email}\n\t\t\tТема сообщения: {$subject}\n\t\t\tДата отправки: " . TimeRender(time(), true, false) . "\n\t\t\tСообщение: {$message}\n\t\t"); $mail->AddTextPart(Cp1251ToUtf8($text)); if ($_FILES['attach']['error'] == UPLOAD_ERR_OK) { $mail->AddAttachmentPart(file_get_contents($_FILES['attach']['tmp_name']), $_FILES['attach']['name']); } if ($mail->Send()) { System::site()->AddTextBox('Обратная связь', '<div style="text-align: center;">Ваше сообщение успешно отправлено!</div>'); } else { System::site()->AddTextBox('Обратная связь', '<div style="text-align: center;">При отправке вашего сообщения произошла ошибка, повторите попытку или обратитесь к администратору.</div>'); } } else { $text = 'Сообщение не отправлено:<br /><ul>'; foreach ($err as $error) { $text .= '<li>' . $error . '</li>'; } $text .= '</ul>'; System::site()->AddTextBox('Ошибка', $text); IndexFeedBackForm(); } }
<?php /* * LinkorCMS 1.4 * © 2012 LinkorCMS Development Group */ if (!defined('VALID_RUN')) { header("HTTP/1.1 404 Not Found"); exit; } if (isset($_POST['newname'])) { System::database()->RenameTable(SafeEnv($_GET['name'], 255, str), SafeEnv($_POST['newname'], 255, str)); Audit('Управление БД: Переименование таблицы "' . $_GET['name'] . '" в "' . $_POST['newname'] . '"'); GO(ADMIN_FILE . '?exe=dbadmin'); } else { AddCenterBox('Переименовать таблицу "' . SafeDB($_GET['name'], 255, str) . '"'); FormRow('Новое имя', $site->Edit('newname', SafeDB($_GET['name'], 255, str), false, 'style="width: 210px;" class="autofocus"')); AddForm('<form action="' . ADMIN_FILE . '?exe=dbadmin&a=renametable&name=' . SafeEnv($_GET['name'], 255, str) . '" method="post">', $site->Button('Отмена', 'onclick="history.go(-1);"') . $site->Submit('Переименовать')); }
function AdminsDeleteGroup() { if (!isset($_GET['id'])) { GO(ADMIN_FILE . '?exe=admins&a=groups'); exit; } $id = SafeEnv($_GET['id'], 11, int); if (isset($_GET['ok']) && SafeEnv($_GET['ok'], 1, int) == '1') { // Очищаем кэш if (System::cache()->HasCache(system_cache, 'usertypes')) { System::cache()->Delete(system_cache, 'usertypes'); } System::database()->Select('users', "`access`='" . $id . "'"); $num_users = System::database()->NumRows(); System::database()->Select('usertypes', "`id`='{$id}'"); $group = System::database()->FetchRow(); if ($num_users > 0) { if (!isset($_GET['users'])) { $text = 'К этой группе принадлежат ' . $num_users . ' пользователей. Вы можете:<br />' . '<a href="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . $id . '&ok=1&users=del">Удалить их...</a> <br />' . '<a href="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . SafeEnv($_GET['id'], 11, int) . '&ok=1&users=move">Переместить их в другую группу.</a>'; AddTextBox('Внимание!', $text); } else { if ($_GET['users'] == 'del') { System::database()->Delete('users', "`access`='" . $id . "'"); } elseif ($_GET['users'] == 'move' && !isset($_POST['to'])) { $text = 'Выберите группу, в которую Вы желаете переместить пользователей:<br />' . '<form action="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . $id . '&ok=1&users=move" method="post">'; System::database()->Select('usertypes', "`id`<>'" . $id . "'"); System::site()->DataAdd($group_data, '-1', 'Пользователи'); while ($tp = System::database()->FetchRow()) { System::site()->DataAdd($group_data, $tp['id'], $tp['name']); } $text .= System::site()->Select('to', $group_data) . '<br />'; $text .= System::site()->Submit('Продолжить') . '<br />'; $text .= '</form>'; AddTextBox('Внимание!', $text); return; } elseif ($_GET['users'] == 'move' && isset($_POST['to'])) { $to = SafeEnv($_POST['to'], 11, int); if ($to == '-1') { $set = "type='2',access='" . $to . "'"; } else { $set = "access='" . $to . "'"; } System::database()->Update('users', $set, "`access`='" . $id . "'"); } } } System::database()->Delete('usertypes', "`id`='" . $id . "'"); Audit('Администраторы: Удаление группы администраторов "' . $group['name'] . '"'); GO(ADMIN_FILE . '?exe=admins&a=groups'); } else { System::database()->Select('usertypes', "`id`='" . $id . "'"); $group = System::database()->FetchRow(); $text = 'Вы действительно хотите удалить группу "' . SafeDB($group['name'], 255, str) . '"?<br />' . '<a href="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . $id . '&ok=1">Да</a> <a href="javascript:history.go(-1)">Нет</a>'; AddTextBox("Предупреждение", $text); } }
} elseif (!CheckEmail($admin_email)) { $errors[] = 'Формат E-mail не правильный. Он должен быть вида: <b>domain@host.ru</b> .'; } if (count($errors) > 0) { $this->SetTitle("Создание учетной записи Главного администратора"); $text = 'Ошибки:<br /><ul>'; foreach ($errors as $error) { $text .= '<li>' . $error; } $text .= '</ul>'; $this->SetContent($text); $this->AddButton('Назад', 'admin&p=1'); } else { // Изменяем главного администратора $login = SafeEnv($admin_login, 255, str); $pass2 = md5($admin_pass); $email = SafeEnv($admin_email, 255, str); System::database()->Update('users', "`login`='{$login}',`pass`='{$pass2}',`email`='{$email}'", "`id`='1'"); // Автоматически определяем и устанавливаем URL сайта в настройках. ConfigSetValue('general', 'site_url', GetSiteUrl()); // Устанавливаем Email сайта - такой-же как и у администратора ConfigSetValue('general', 'site_email', $email); // Изменяем email Департамента обратной связи System::database()->Update('feedback', "`email`='{$email}'", "`id`='1'"); // Создаём бекап базы данных $backupfilename = System::config('backup_dir') . date("Y.m.d_H.i.s_") . GenRandomString(8, 'abcdefghijklmnopqrstuvwxyz0123456789') . '.' . System::database()->Name . '.zip'; System::database()->CreateBackupFile($backupfilename); GO('setup.php?mod=finish'); } break; }
/** * Выполняет перенаправление по сохраненному в сессии адресу * @param $id Идентификатор ссылки * @param string $anchor Добавление якоря к ссылке. Пример: #post244. Так-же могут быть просто дополнительные параметры. * @param bool $unset_url Удалить сохраненный URL из сессии * @return bool */ function GoRefererUrl($id, $anchor = '', $unset_url = true) { if (isset($_SESSION['saved_urls'][$id])) { $url = $_SESSION['saved_urls'][$id]; if ($unset_url) { unset($_SESSION['saved_urls'][$id]); } return GO($url . $anchor); } else { return GO(HistoryGetUrl(2)); } }
function AdminConfigGroupDelete() { $back_url = ''; if (!AdminConfigPlugins()) { $back_url = ADMIN_FILE . '?exe=config_admin&a=view_groups&delok'; } else { $back_url = ADMIN_FILE . '?exe=config_admin&a=view_groups_plugins&plugins=1&delok'; } if (!isset($_GET['id'])) { GO($back_url); } else { $id = SafeEnv($_GET['id'], 11, int); } if (isset($_GET['ok']) && $_GET['ok'] == '1' || IsAjax()) { System::database()->Select(AdminConfigGroupTable(), "`id`='{$id}'"); $conf = System::database()->FetchRow(); System::database()->Delete(AdminConfigGroupTable(), "`id`='{$id}'"); System::database()->Delete(AdminConfigConfigTable(), "`group_id`='{$id}'"); Audit('Управление настройками: Удаление группы настроек "' . $conf['hname'] . '(' . $conf['name'] . ')" в "' . AdminConfigGroupTable() . '"'); GO($back_url); } else { $r = System::database()->Select(AdminConfigGroupTable(), "`id`='{$id}'"); AddCenterBox('Удаление группы навтроек'); System::admin()->HighlightConfirm('Это может повлиять на работу системы. Нажмите отмена, если не уверены. Удалить группу настроек "' . SafeDB($r[0]['hname'], 255, str) . '"?', ADMIN_FILE . '?exe=config_admin&a=delete&id=' . $id . '&ok=1' . (AdminConfigPlugins() ? '&plugins=1' : '')); } }
exit; } $table = SafeEnv($_GET['name'], 255, str); $index = SafeEnv($_GET['index'], 255, int); $where = ''; $where_url = ''; if (isset($_GET['where'])) { $where = $_GET['where']; $where_url = '&where=' . $_GET['where']; } $rows = System::database()->Select($table, $where); $row = $rows[$index]; $columns = System::database()->GetTableColumns($table); $names = array(); foreach ($columns as $col) { $names[$col['name']] = $row[$col['name']]; } $sql = ''; foreach ($row as $key => $value) { if (isset($names[$key])) { $sql .= "`" . $key . "`='" . System::database()->EscapeString($value) . "' and "; } } $sql = substr($sql, 0, strlen($sql) - 4); System::database()->Delete($table, $sql); Audit('Управление БД: Удаление строки из таблицы "' . $table . '"'); if (isset($_REQUEST['back'])) { GoRefererUrl($_REQUEST['back']); } else { GO(ADMIN_FILE . '?exe=dbadmin&a=review&name=' . SafeDB($_GET['name'], 255, str) . $where_url); }
/** * Сохраняет конфигурацию в базе данных * @param $Exe * @param string $Group * @param bool $ShowHidden * @return void */ function AdminConfigurationSave($Exe, $Group = '', $ShowHidden = false) { global $config, $conf_config_table, $conf_config_groups_table; // Вытаскиваем настройки и отсортировываем по группам $temp = System::database()->Select($conf_config_table, ''); for ($i = 0, $cnt = count($temp); $i < $cnt; $i++) { $configs[$temp[$i]['group_id']][] = $temp[$i]; } unset($temp); // Вытаскиваем группы настроек if ($Group == '') { $q = ''; } else { $q = "`name`='" . $Group . "'"; } $cfg_grps = System::database()->Select($conf_config_groups_table, $q); for ($i = 0, $cnt = count($cfg_grps); $i < $cnt; $i++) { // Если эта группа невидима то пропускаем её if ($Group == '') { if ($cfg_grps[$i]['visible'] == 0) { continue; } } // Или если в ней нет настроек if (!isset($configs[$cfg_grps[$i]['id']])) { continue; } for ($j = 0, $jcnt = count($configs[$cfg_grps[$i]['id']]); $j < $jcnt; $j++) { // Если настройка невидима то пропускаем её if ($configs[$cfg_grps[$i]['id']][$j]['visible'] == 0 && !$ShowHidden) { continue; } $name = $configs[$cfg_grps[$i]['id']][$j]['name']; $kind = explode(':', $configs[$cfg_grps[$i]['id']][$j]['kind']); $kind = trim(strtolower($kind[0])); $savefunc = trim($configs[$cfg_grps[$i]['id']][$j]['savefunc']); $type = trim($configs[$cfg_grps[$i]['id']][$j]['type']); if ($type != '') { $type = explode(',', $type); } else { $type = array(255, str, false); } $where = "`name`='{$name}' and `group_id`='" . $cfg_grps[$i]['id'] . "'"; if (isset($_POST[$name])) { switch ($kind) { case 'edit': case 'radio': case 'combo': if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $savefunc = CONF_SAVE_PREFIX . $savefunc; $value = $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = FormsCheckType($_POST[$name], $type); } break; case 'text': if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $savefunc = CONF_SAVE_PREFIX . $savefunc; $value = $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = FormsCheckType($_POST[$name], $type); } break; case 'check': case 'list': if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $savefunc = CONF_SAVE_PREFIX . $savefunc; $value = $savefunc(FormsCheckType($_POST[$name], $type)); } else { if (isset($_POST[$name])) { $c = count($_POST[$name]); } else { $c = 0; } $value = ''; for ($k = 0; $k < $c; $k++) { $value .= ','; $value .= FormsCheckType($_POST[$name][$k], $type); } $value = substr($value, 1); } break; default: if (FormsConfigCheck2Func('function', $savefunc, 'save')) { $savefunc = CONF_SAVE_PREFIX . $savefunc; $value = $savefunc(FormsCheckType($_POST[$name], $type)); } else { $value = FormsCheckType($_POST[$name], $type); } } System::database()->Update($conf_config_table, 'value=\'' . $value . '\'', $where); // FIXME: Использовать транзакцию } } } // Очищаем кэш настроек System::cache()->Clear('config'); GO(ADMIN_FILE . '?exe=' . $Exe); }
function IndexForumDeleteTopic() { global $forum_lang; if (!System::user()->isAdmin() || !CheckGet('topic', 'ok')) { HackOff(); return; } $topic_id = SafeEnv($_GET['topic'], 11, int); // Подтверждение на удаление if (!isset($_GET['ok']) || !isset($_POST['text']) && System::config('forum/basket') || $_GET['ok'] == '0') { System::database()->Select('forum_topics', "`id`='" . SafeEnv($_GET['topic'], 11, int) . "'"); $topic = System::database()->FetchRow(); $text = $forum_lang['delete_topic'] . ' "' . SafeDB($topic['title'], 255, str) . '"?'; System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $text . '</p>'); System::site()->AddTemplatedBox('', 'module/forum_delete_post.html'); System::site()->AddBlock('delete_form', true, false, 'form'); $vars = array(); $vars['basket'] = System::config('forum/basket') == true; $vars['url'] = 'index.php?name=forum&op=deletetopic&topic=' . SafeEnv($_GET['topic'], 11, int) . '&ok=1'; // Без UFU System::site()->Blocks['delete_form']['vars'] = $vars; return; } // Вытаскиваем тему System::database()->Select('forum_topics', "`id`='{$topic_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']); return; } $topic = System::database()->FetchRow(); if ($topic['delete'] == '1') { // Удалена в корзину System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_basket']); return; } // Удаление if (System::config('forum/basket')) { // Удаляем тему в корзину $reason = ''; if (isset($_POST['text'])) { $reason = SafeEnv($_POST['text'], 255, str); } Moderation_Do_Basket_Topic($topic_id, $reason); } else { ForumAdminDeleteTopic($topic_id); } // Форум (Изменяем счетчики количества тем и сообщений, устанавливаем информацию о последнем посте) $forum_id = SafeEnv($topic['forum_id'], 11, int); System::database()->Select('forums', "`id`='{$forum_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_forum']); return; } $forum = System::database()->FetchRow(); // Значения счётчиков форума $forum_topics = (int) $forum['topics'] - 1; if ($forum_topics < 0) { $forum_topics = 0; } $forum_posts = (int) $forum['posts'] - (int) $topic['posts']; if ($forum_posts < 0) { $forum_posts = 0; } $forum_set = "`topics`='{$forum_topics}',`posts`='{$forum_posts}'"; // Устанавливаем информацию о последнем посте в форуме if ($forum['last_id'] == $topic_id) { // Только если удалена тема с последним постом $forum_set = ForumSetLastTopic($forum_id, $forum_set, true); } System::database()->Update('forums', $forum_set, "`id`= '{$forum_id}'"); // Очищаем кэш форума ForumCacheClear(); GO(Ufu('index.php?name=forum&op=showforum&forum=' . $forum_id, 'forum/{forum}/')); }
function IndexMailSubscribe() { global $mail_selected; if (isset($_POST['topic_id'])) { $topic_id = SafeEnv($_POST['topic_id'], 11, int); if (!isset($_POST['mail_block_form'])) { GO(GetSiteUrl() . Ufu('index.php?name=mail&op=topics', 'mail/{op}/')); } $html = SafeEnv($_POST['html'], 1, int); } elseif (isset($_GET['topic_id'])) { $topic_id = SafeEnv($_GET['topic_id'], 11, int); $html = 1; } else { GO(GetSiteUrl() . Ufu('index.php?name=mail&op=topics', 'mail/{op}/')); } System::database()->Delete('mail_list', "`email`='{$mail_selected}' and `topic_id`='{$topic_id}'"); if (System::user()->Auth) { $user_id = System::user()->Get('u_id'); } else { $user_id = 0; } System::database()->Select('mail_topics', "`id`='{$topic_id}'"); $topic = System::database()->FetchRow(); $count = SafeDB($topic['count'], 11, int) + 1; System::database()->Update('mail_topics', "count='{$count}'", "`id`='{$topic_id}'"); $vals = Values($user_id, $topic_id, $mail_selected, $html); System::database()->Insert('mail_list', $vals); $back = Ufu('index.php?name=mail&op=topics', 'mail/{op}/'); System::site()->AddTextBox('Рассылки', '<p align="center"><br>Спасибо, что Вы подписались на нашу рассылку.<br>Список других рассылок сайта можете посмотреть <a href="' . $back . '">Здесь</a>.<br><br><a href="javascript:history.go(-1)">Вернуться назад</a>.<br><br></p>'); }
function AdminArticlesChangeStatus() { global $editarticles; if (!$editarticles) { if (IsAjax()) { exit("ERROR"); } System::admin()->AccessDenied(); } if (!isset($_GET['id'])) { if (IsAjax()) { exit("ERROR"); } GO(ADMIN_FILE . '?exe=articles'); } System::database()->Select('articles', "`id`='" . SafeEnv($_GET['id'], 11, int) . "'"); if (System::database()->NumRows() > 0) { $r = System::database()->FetchRow(); if ($r['active'] == 1) { $en = '0'; AdminArticlesGetTree()->CalcFileCounter($r['cat_id'], false); } else { $en = '1'; AdminArticlesGetTree()->CalcFileCounter($r['cat_id'], true); } System::database()->Update('articles', "`active`='{$en}'", "`id`='" . SafeEnv($_GET['id'], 11, int) . "'"); Audit('Статьи: Изменение статуса статьи "' . $r['title'] . '"'); } if (IsAjax()) { exit("OK"); } GO(ADMIN_FILE . '?exe=articles'); }
function AdminUserDeleteAvatar() { if (isset($_GET['personal'])) { $dir = System::config('general/personal_avatars_dir'); $personal = true; } else { $dir = System::config('general/avatars_dir'); $personal = false; } $avatar = SafeEnv($_GET['filename'], 250, str); $filename = RealPath2($dir . $avatar); if (file_exists($filename) && is_file($filename)) { unlink($filename); } if ($personal) { System::database()->Update('users', "`a_personal`='0',`avatar`=''", "`a_personal`='1' and `avatar`='{$avatar}'"); } Audit('Пользователи: Удаление аватара "' . $filename . '"'); GO(ADMIN_FILE . '?exe=user&a=avatars'); }
function IndexUserActivate() { if (isset($_GET['code'])) { $code = SafeEnv($_GET['code'], 32, str); System::database()->Select('users', "`activate`='" . $code . "'"); if (System::database()->NumRows() > 0) { $activation_user = System::database()->FetchRow(); System::database()->Update('users', "`active`='1',`activate`=''", "`id`='" . SafeDB($activation_user['id'], 11, int) . "'"); // Автоматический вход if (System::user()->isDef('activate_ps')) { $pass = base64_decode(System::user()->Get('activate_ps')); System::user()->Login($activation_user['login'], $pass, true); System::user()->UnDef('activate_ps'); System::site()->InitVars(); UserSendEndRegMail($activation_user['email'], $activation_user['name'], $activation_user['login'], $pass, $activation_user['regdate']); } System::site()->AddTextBox('Информация', '<p align="center">Ваш аккаунт активирован. Вы успешно авторизовались на сайте.</p>'); } else { System::site()->AddTextBox('Ошибка', '<p align="center">Неверный код активации.</p>'); } } else { GO(Ufu('index.php')); } }
function CommentsAddPost($ObjectId, $CommentsTable, $ObjectsTable, $CounterField, $AlloyField, $BackUrl, $BackUrlUfu, $PageParam = 'page', $PageParamUfu = null, $BackUrlUfuSuffix = '') { $parent_id = explode('_', $_POST['parent_id'], 2); if ($parent_id[1] == 0) { $sp = false; } else { $sp = true; } if (!isset($PageParamUfu)) { $PageParamUfu = $PageParam; } $back_url = GetSiteUrl() . Ufu($BackUrl . ($sp ? "&{$PageParam}=" . $_GET[$PageParam] : ''), $BackUrlUfu . ($sp ? $PageParamUfu . '{' . $PageParam . '}' : '') . $BackUrlUfuSuffix); // ----------------------------------------------------- System::database()->Select($ObjectsTable, "`id`='{$ObjectId}'"); $obj = System::database()->FetchRow(); $alloy_comments = $obj[$AlloyField] == '1'; $posts = new Posts($CommentsTable, $alloy_comments); if ($posts->SavePost($ObjectId, false)) { $post_id = System::database()->GetLastId(); $counter = $obj[$CounterField] + 1; System::database()->Update($ObjectsTable, "`{$CounterField}`='{$counter}'", "`id`='{$ObjectId}'"); $parent_id = explode('_', $_POST['parent_id'], 2); $parent_id = SafeDB($parent_id[1], 11, int); $post_anchor = $parent_id != 0 ? "#post_{$parent_id}" : '#post_' . $post_id; GO($back_url . $post_anchor); } else { System::site()->AddTextBox('Ошибка', $posts->PrintErrors()); } }
/** * Сохраняет данные формы сгенерированной фукцией AdminUserEditor * * @param $back_link * @param string $a * @param int $id * @param bool $IsAdmin * @return void */ function AdminUserEditSave($back_link, $a = 'insert', $id = 0, $IsAdmin = false) { $SystemAdmin = System::user()->isSuperUser(); $edit = $a == 'update'; $editProfile = $edit && !$SystemAdmin && $id == System::user()->Get('u_id'); // Администратор редактирует свой профиль $editStatus = false; // Разрешено редактирование статуса $editType = false; // Разрешено редактировать тип пользователя // Загружаем данные пользователя из БД if ($edit) { $user = System::database()->SelectOne('users', "`id`='{$id}'" . ($IsAdmin ? " and `type`='1'" : " and `type`='2'")); if (!$user) { AddTextBox('Ошибка', '<p align="center">Пользователь не найден, либо у вас не достаточно прав для редактирования администраторов.</p>'); return; } } // Устанавливаем ограничения доступа if ($IsAdmin) { // Редактируем администратора if ($SystemAdmin) { // Только системные администраторы могут редактировать статус и тип администраторов if (!$edit) { $editStatus = true; } elseif (!(groupIsSystem(SafeEnv($user['access'], 11, int)) && GetSystemAdminsCount() <= 1)) { // Если он не системный или системных больше 1 $editStatus = true; } $editType = $editStatus; } } else { // Если пользователь $editStatus = true; // Все администраторы с доступом могут редактировать статус пользователя $editType = $SystemAdmin; // Только системные администраторы могут создавать администраторов } // Обрабатываем данные $errors = array(); // Логин if (isset($_POST['login']) && CheckLogin($_POST['login'], $errors, !$edit)) { $login = SafeEnv($_POST['login'], 30, str); } else { $login = ''; } // Пароль $pass = ''; if (!$edit || $_POST['pass'] != '') { $pass_generate_message = ''; if (isset($_POST['pass']) && CheckPass($_POST['pass'], $errors)) { $pass = SafeEnv($_POST['pass'], 30, str); if (!isset($_POST['rpass']) || SafeEnv($_POST['rpass'], 30, str) != $pass) { $errors[] = 'Пароли не совпадают.'; } } else { $pass = ''; } if (isset($_POST['pass']) && $_POST['pass'] == '') { srand(time()); $pass = GenBPass(rand(System::config('user/pass_min_length'), 15)); $pass_generate_message = '<br />Так как вы не указали пароль, он был сгенерирован автоматически и выслан на указанный E-mail пользователя.'; } $pass2 = md5($pass); } // e-mail if (isset($_POST['email']) && $_POST['email'] != '') { if (!CheckEmail($_POST['email'])) { $errors[] = 'Не правильный формат E-mail. Он должен быть вида: <b>domain@host.ru</b> .'; } $email = SafeEnv($_POST['email'], 50, str, true); } else { $email = ''; $errors[] = 'Вы не ввели E-mail.'; } // Скрыть e-mail if (isset($_POST['hideemail'])) { $hide_email = '1'; } else { $hide_email = '0'; } // Имя пользователя на сайте if (isset($_POST['nikname']) && CheckNikname($_POST['nikname'], $errors, !$edit)) { $nik_name = SafeEnv($_POST['nikname'], 50, str, true); } else { $nik_name = ''; } // Полное имя if (isset($_POST['realname'])) { $real_name = SafeEnv($_POST['realname'], 250, str, true); } else { $real_name = ''; } // Возраст if (isset($_POST['age'])) { if ($_POST['age'] == '' || is_numeric($_POST['age'])) { $age = SafeEnv($_POST['age'], 3, int); } else { $errors[] = 'Ваш возраст должен быть числом!'; } } else { $age = ''; } // Домашняя страница if (isset($_POST['homepage'])) { if ($_POST['homepage'] != '' && substr($_POST['homepage'], 0, 7) == 'http://') { $_POST['homepage'] = substr($_POST['homepage'], 7); } $homepage = SafeEnv($_POST['homepage'], 250, str, true); } else { $homepage = ''; } // Номер ICQ if (isset($_POST['icq'])) { if ($_POST['icq'] == '' || is_numeric($_POST['icq'])) { $icq = SafeEnv($_POST['icq'], 15, str, true); } else { $errors[] = 'Номер ICQ должен содержать только числа!'; } } else { $icq = ''; } // Город if (isset($_POST['city'])) { $city = SafeEnv($_POST['city'], 100, str, true); } else { $city = ''; } // Часовой пояс if (isset($_POST['gmt'])) { $gmt = SafeEnv($_POST['gmt'], 255, str); } else { $gmt = System::config('general/default_timezone'); } // О себе if (isset($_POST['about'])) { $about = SafeEnv($_POST['about'], System::config('user/about_max_length'), str, true); } else { $about = ''; } // Подписка на новости if (isset($_POST['snews'])) { $server_news = '1'; } else { $server_news = '0'; } //Обрабатываем аватар $updateAvatar = true; if (isset($_POST['avatar'])) { if (System::config('user/avatar_transfer') == '1' && isset($_FILES['upavatar']) && file_exists($_FILES['upavatar']['tmp_name'])) { if ($edit) { $avatar = $user['avatar']; $a_personal = $user['a_personal']; } else { $avatar = ''; $a_personal = '0'; } UserLoadAvatar($errors, $avatar, $a_personal, $avatar, $a_personal, $edit); } elseif ($_POST['avatar'] == '') { $updateAvatar = false; } elseif (file_exists(RealPath2(System::config('general/avatars_dir') . $_POST['avatar']))) { if ($edit) { if ($user['a_personal'] == '1') { UnlinkUserAvatarFiles($user['avatar']); } } $a_personal = '0'; $avatar = $_POST['avatar']; } else { $avatar = ''; $a_personal = '0'; } } else { $avatar = ''; $a_personal = '0'; } $SendActivation = false; if ($edit) { $active = SafeEnv($user['active'], 11, int); $code = SafeEnv($user['activate'], 11, int); } else { $active = '1'; $code = ''; } if ($editStatus) { $activate = $_POST['activate']; $lastactivate = 'manual'; if ($active == '0' && $code != '') { $lastactivate = 'mail'; } elseif ($active == '1' && $code == '') { $lastactivate = 'auto'; } if ($activate != $lastactivate) { switch ($activate) { case 'manual': $active = '0'; $code = ''; $SendActivation = false; break; case 'auto': $active = '1'; $code = ''; $SendActivation = false; break; case 'mail': $active = '0'; $code = GenRandomString(8, 'qwertyuiopasdfghjklzxcvbnm'); $SendActivation = true; break; } } } if ($edit) { $access = SafeEnv($user['type'], 11, int); $user_type = SafeEnv($user['access'], 11, int); } else { $access = '2'; $user_type = '-1'; } if ($editType && $_POST['status'] != 'member') { $access = '1'; $user_type = SafeEnv($_POST['status'], 11, int); } $reg_date = time(); $last_visit = time(); $ip = getip(); $points = 0; $visits = 0; if ($SendActivation) { UserSendActivationMail($nik_name, $email, $login, $pass, $code, $reg_date); } elseif (!$edit) { UserSendEndRegMail($email, $nik_name, $login, $pass, $reg_date); } if (!$edit) { $values = Values('', $login, $pass2, $nik_name, $real_name, $age, $email, $hide_email, $city, $icq, $homepage, $gmt, $avatar, $about, $server_news, $reg_date, $last_visit, $ip, $points, $visits, $active, $code, $access, $user_type, $a_personal, serialize(array())); System::database()->Insert('users', $values); } else { $set = "`login`='{$login}',`email`='{$email}',`hideemail`='{$hide_email}',`name`='{$nik_name}'," . "`truename`='{$real_name}',`age`='{$age}',`url`='{$homepage}',`icq`='{$icq}',`city`='{$city}'," . "`timezone`='{$gmt}'" . ($updateAvatar == true ? ",`avatar`='{$avatar}',`a_personal`='{$a_personal}'" : '') . "," . "`about`='{$about}',`servernews`='{$server_news}'" . ($pass != '' ? ",`pass`='{$pass2}'" : '') . ",`type`='{$access}'," . "`access`='{$user_type}',`active`='{$active}',`activate`='{$code}'"; System::database()->Update('users', $set, "`id`='" . $id . "'"); System::user()->UpdateMemberSession(); UpdateUserComments($id, $id, $nik_name, $email, $hide_email, $homepage); } if (count($errors) > 0) { $text = 'Аккаунт сохранен, но имели место следующие ошибки:<br /><ul>'; foreach ($errors as $error) { $text .= '<li>' . $error; } $text .= '</ul>'; AddTextBox('Внимание', $text); } else { // Очищаем кэш пользователей System::cache()->Delete(system_cache, 'users'); if (!$editProfile) { GO(ADMIN_FILE . '?exe=' . $back_link); } else { System::admin()->AddCenterBox('Редактирование профиля'); System::admin()->Highlight('Ваш профиль сохранён, обновите страницу.'); } } }
function AdminGalleryImageRotate() { global $GalleryDir, $ThumbsDir; $turn = $_GET['turn']; $id = SafeEnv($_GET['id'], 11, int); $angle = 0; if ($turn == 'left') { $angle = 90; } else { $angle = 270; } System::database()->Select('gallery', "`id`='{$id}'"); $img = System::database()->FetchRow(); $file_name = $img['file']; $file = $GalleryDir . $file_name; $thumb = $ThumbsDir . $file_name; // Поворачиваем изображение $pic = new TPicture($file); $pic->Rotate($angle); $pic->SaveToFile($file); // Обновляем эскиз if (is_file($thumb)) { unlink($thumb); } CreateThumb($file, $thumb, System::config('gallery/thumb_max_width'), System::config('gallery/thumb_max_height')); Audit('Фотогалерея: Поворот изображения ' . ($turn == 'left' ? 'влево' : 'вправо') . ' "' . $img['title'] . '" (id: ' . $img['id'] . ')'); $back = new Url(GetRefererUrl($_REQUEST['back'])); $back['update'] = SafeDB($_GET['id'], 11, int); // Добавляем / изменяем параметр update GO($back); }
function AdminBlocksMove() { $move = SafeEnv($_GET['to'], 4, str); $id = SafeEnv($_GET['id'], 11, int); System::database()->Select('blocks', "`id`='" . $id . "'"); if (System::database()->NumRows() > 0) { $block = System::database()->FetchRow(); $pos = SafeDB($block['place'], 255, str); $blocks = System::database()->Select('blocks', "`position`='" . SafeDB($block['position'], 1, str) . "'"); usort($blocks, 'AdminBlocksSort'); $c = count($blocks); $cur_pos = 0; for ($i = 0; $i < $c; $i++) { $blocks[$i]['place'] = $i; if ($blocks[$i]['id'] == $id) { $cur_pos = $i; } } //Индекс перемещения $rep_pos = $cur_pos; if ($move == 'up') { $rep_pos = $cur_pos - 1; } elseif ($move == 'down') { $rep_pos = $cur_pos + 1; } else { $rep_pos = $cur_pos; } if ($rep_pos < 0 || $rep_pos >= $c) { $rep_pos = $cur_pos; } $temp = intval($blocks[$cur_pos]['place']); $blocks[$cur_pos]['place'] = intval($blocks[$rep_pos]['place']); $blocks[$rep_pos]['place'] = intval($temp); //Обновляем данные for ($i = 0; $i < $c; $i++) { System::database()->Update('blocks', "place='" . SafeDB($blocks[$i]['place'], 11, int) . "'", "`id`='" . SafeDB($blocks[$i]['id'], 11, int) . "'"); } } Audit('Блока: Перемещение блока ' . ($move == 'up' ? 'вверх' : 'вниз') . ' "' . $block['title'] . '"'); GO(ADMIN_FILE . '?exe=blocks'); }
function AdminNewsTopicSave() { global $news_access_edittopics, $action; if (!$news_access_edittopics) { System::admin()->AccessDenied(); } $image = SafeEnv($_POST['topic_image'], 255, str, true); if ($action == 'addtopic') { $values = Values('', SafeEnv($_POST['topic_name'], 255, str), SafeEnv($_POST['topic_description'], 255, str), $image, '0'); System::database()->Insert('news_topics', $values); Audit('Новости: Добавление новостного раздела "' . $_POST['topic_name'] . '"'); } elseif ($action == 'savetopic') { $id = SafeEnv($_GET['id'], 11, int); System::database()->Select('news_topics', "`id`='" . $id . "'"); $topic = System::database()->FetchRow(); $values = Values('', SafeEnv($_POST['topic_name'], 255, str), SafeEnv($_POST['topic_description'], 255, str), $image, SafeEnv($topic['counter'], 11, int)); System::database()->Update('news_topics', $values, "`id`='{$id}'", true); Audit('Редактирование новостного раздела "' . $_POST['topic_name'] . '"'); } GO(ADMIN_FILE . '?exe=news&a=topics'); }
function AdminExtensionsConfigSave() { $post = SafeR('view', 255, str) + SafeR('name, theme', 255, str) + SafeR('enabled', 3, onoff); $post['view'] = ViewLevelToInt($post['view']); System::database()->Update('modules', MakeSet($post), "`folder`='" . SafeEnv($_GET['name'], 255, str) . "'"); Audit('Расширения: Изменение настроек модуля "' . $_GET['name'] . '"'); GO(ADMIN_FILE . '?exe=extensions'); }
function AdminCommentsFind() { if (System::config('comments/disable_posts_engine')) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Система комментариев отключена.'); return; } // Рекурсивная функция для поиска родителя комментария верхнего уровня function CommentsFindTopLevelPost(&$posts, $post_id, $post_parent_id) { if (isset($posts[$post_parent_id])) { if ($posts[$post_parent_id]['post_parent_id'] == 0) { return $posts[$post_parent_id]['id']; } return CommentsFindTopLevelPost($posts, $posts[$post_parent_id]['id'], $posts[$post_parent_id]['post_parent_id']); } else { return $post_id; } } // id таблицы комментариев в таблице comments и id комментария $table_id = SafeEnv($_GET['table'], 11, int); $post_id = SafeEnv($_GET['post_id'], 11, int); System::database()->Select('comments', "`id`='{$table_id}'"); if (!System::database()->NumRows()) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Таблица комментариев не найдена.'); return; } $table = System::database()->FetchRow(); // Загружаем комментарий System::database()->Select($table['table'], "`id`='{$post_id}'"); if (!System::database()->NumRows()) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Комментарий не найден.'); return; } $post = System::database()->FetchRow(); // Загружаем объект комментария $id_coll = SafeEnv($table['id_coll'], 255, str); $object_id = SafeEnv($post['object_id'], 11, int); System::database()->Select($table['objects_table'], "`{$id_coll}`='{$object_id}'"); if (!System::database()->NumRows()) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Объект комментария не найден.'); return; } $object = System::database()->FetchRow(); $en_navigation = System::config('comments/ennav'); $navigation_page = 1; if ($en_navigation) { // Включена постраничная навигация в комментариях // Количество комментарий на страницу $comments_on_page = System::config('comments/onpage'); // Загружаем комментарии объекта $object_postsdb = System::database()->Select($table['table'], "`object_id`='{$object_id}'"); SortArray($object_postsdb, 'post_date', !System::config('comments/decreasesort')); if (count($object_postsdb) <= $comments_on_page) { // Навигация не требуется $en_navigation = false; } else { // Определяем страницу на котором отображается комментарий if ($post['post_parent_id'] == 0) { // Комментарий верхнего уровня $post_top_id = $post_id; } else { // Поиск родительского комментария верхнего уровня // Агрегируем комментарии объекта по id $object_posts = array(); foreach ($object_postsdb as $p) { $object_posts[$p['id']] = $p; } $post_top_id = CommentsFindTopLevelPost($object_posts, $post_id, $post['post_parent_id']); } // Берём только комментарии верхнего уровня $object_top_posts = array(); foreach ($object_postsdb as $p) { if ($p['post_parent_id'] == 0) { $object_top_posts[$p['id']] = true; } } // Узнаём порядковый номер post_top_id $index = array_search($post_top_id, array_keys($object_top_posts)); $navigation_page = ceil(($index + 1) / $comments_on_page); // Определили страницу if ($navigation_page > 1) { $en_navigation = true; } } } if (System::config('general/ufu')) { if ($en_navigation) { $url_template = $table['nav_ufu']; } else { $url_template = $table['ufu']; } } else { $url_template = $table['url']; if ($en_navigation) { $url_template .= '&' . urlencode($table['page_param']) . '=' . $navigation_page; } } // Парсим шаблон URL $keys = array(); foreach ($object as $key => &$val) { $val = urlencode($val); $keys['{' . $key . '}'] =& $val; } $keys['{' . $table['page_param'] . '}'] = $navigation_page; $url = str_replace(array_keys($keys), array_values($keys), $url_template); GO($url . '#post_' . $post_id); }
function IndexForumAddPost() { global $forum_lang; $forums_tree = ForumTree::Instance(); // Проверки на доступ if (CheckGet('topic')) { // Тема $topic_id = SafeEnv($_GET['topic'], 11, int); System::database()->Select('forum_topics', "`id`='{$topic_id}'"); if (System::database()->NumRows() > 0) { $topic = System::database()->FetchRow(); } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_access_category']); return; } if ($topic['delete'] == '1') { // Тема на удалении System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_basket'] . '.' . $forum_lang['no_topic_basket_edit']); return; } if ($topic['close_topics'] == '1') { // Тема закрыта System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_close_for_discussion'] . '.' . $forum_lang['no_create_new_message_current_topic_add']); return; } // Форум $forum_id = SafeEnv($topic['forum_id'], 11, int); if (!isset($forums_tree->IdCats[$forum_id])) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']); return; } $forum = $forums_tree->IdCats[$forum_id]; $forum_config = $forums_tree->GetForumConfigRecursive($forum_id); if (!$forum_config['access']) { // Доступ System::site()->AddTextBox($forum_lang['error'], $forum_config['access_reason']); return; } elseif (!$forum_config['add_post']) { // Разрешено ли добавлять новые сообщения (+ защита от гостей) System::site()->AddTextBox($forum_lang['error'], $forum_config['add_post_reason']); return; } } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']); return; } // Добавляем сообщение if (!CheckPost('text') || strlen($_POST['text']) == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']); return; } $name = System::user()->Get('u_name'); $email = System::user()->Get('u_email'); $hideemail = System::user()->Get('u_hideemail'); $site = System::user()->Get('u_homepage'); $icq = System::user()->Get('u_icq'); $uid = System::user()->Get('u_id'); $text = SafeEnv($_POST['text'], 0, str); $vals = Values('', $topic_id, $uid, time(), $name, $site, $email, $hideemail, $icq, $text, getip(), 0); System::database()->Insert('forum_posts', $vals); // Обновляем время прочтения темы автором сообщения $user_id = System::user()->Get('u_id'); System::database()->Delete('forum_topics_read', "`tid`='{$topic_id}' and `mid`='{$user_id}'"); $time = time(); $vals = "'{$user_id}','{$topic_id}','{$time}'"; System::database()->Insert('forum_topics_read', $vals); // Информация о последнем сообщении в теме и форуме $forum['posts'] = (int) $forum['posts'] + 1; $topic['posts'] = (int) $topic['posts'] + 1; IndexForumSetLastPostInfo($forum, $topic); // Добавляем очков пользователю System::user()->ChargePoints(System::config('points/forum_post')); // Увеличиваем счётчик сообщений пользователя ForumCalcUserCounters(1); // Делаем рассылку подписчикам на эту тему Forum_Subscription_Send($topic_id); // Очищаем кэш форума ForumCacheClear(); GO(Ufu('index.php?name=forum&op=showtopic&topic=' . $topic_id . '&view=lastpost#last', 'forum/topic{topic}-new.html')); }
function IndexForumDeletePost() { global $forum_lang; if (!System::user()->isAdmin() || !CheckGet('topic', 'post', 'ok')) { HackOff(); return; } if (isset($_GET['page']) && $_GET['page'] > 1) { $page = '&page=' . SafeDB($_GET['page'], 11, int); $page_ufu = '-{page}'; } else { $page = ''; $page_ufu = ''; } // Подтверждение на удаление if (!isset($_GET['ok']) || !isset($_POST['text']) && System::config('forum/basket') || $_GET['ok'] == '0') { $text = '<br>' . $forum_lang['delete_post'] . '?'; System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $text . '</p>'); System::site()->AddTemplatedBox('', 'module/forum_delete_post.html'); System::site()->AddBlock('delete_form', true, false, 'form'); $vars = array(); $vars['basket'] = System::config('forum/basket'); $vars['url'] = 'index.php?name=forum&op=deletepost&topic=' . SafeDB($_GET['topic'], 11, int) . '&post=' . SafeDB($_GET['post'], 11, int) . $page . '&ok=1'; // Без UFU System::site()->Blocks['delete_form']['vars'] = $vars; return; } // Сообщение $post_id = SafeEnv($_GET['post'], 11, int); System::database()->Select('forum_posts', "`id`='{$post_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_post']); return; } $post = System::database()->FetchRow(); if ($post['delete'] == '1') { // На удалении System::site()->AddTextBox($forum_lang['error'], $forum_lang['post_basket']); return; } // Тема $topic_id = SafeEnv($_GET['topic'], 11, int); System::database()->Select('forum_topics', "`id`='{$topic_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']); return; } $topic = System::database()->FetchRow(); if ($topic['delete'] == '1') { // Тема на удалении System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_basket']); return; } // Форум $forum_id = SafeEnv($topic['forum_id'], 11, int); System::database()->Select('forums', "`id`='{$forum_id}'"); if (System::database()->NumRows() == 0) { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_forum']); return; } $forum = System::database()->FetchRow(); // Удаление поста if (System::config('forum/basket')) { // Удаляем сообщение в корзину $reason = ''; if (isset($_POST['text'])) { $reason = SafeEnv($_POST['text'], 255, str); } Moderation_Do_Basket_Post($post_id, $reason); } else { ForumAdminDeletePost($post_id); } // Обновляем тему $topic_posts = (int) $topic['posts'] - 1; if ($topic_posts < 0) { $topic_posts = 0; } $topic_set = "`posts`='{$topic_posts}'"; $topic_extra_set = false; // Удаляется последний пост в теме (нужно ли обновлять последний пост в форуме) if ($topic['last_post'] == $post['public'] && $topic['last_poster_id'] == $post['user_id']) { $topic_extra_set = true; $topic_set = ForumSetLastPost($topic_id, $topic_set, true); } System::database()->Update('forum_topics', $topic_set, "`id`='{$topic_id}'"); // Обновляем форум $forum_posts = (int) $forum['posts'] - 1; if ($forum_posts < 0) { $forum_posts = 0; } $forum_set = "`posts`='{$forum_posts}'"; if ($topic_extra_set) { // Только если удален последний пост в теме $forum_set = ForumSetLastTopic($forum_id, $forum_set, true); } System::database()->Update('forums', $forum_set, "`id`= '{$forum_id}'"); // Очищаем кэш форума ForumCacheClear(); GO(Ufu('index.php?name=forum&op=showtopic&topic=' . $topic_id . $page, 'forum/topic{topic}' . $page_ufu . '.html')); }