/** * Загружает наcтройки из базы данных. * * @param $ConfigVar Переменная в которую будут записаны настройки * @param string $ConfigTable * @param string $GroupsTable * @return void */ function LoadSiteConfig(&$ConfigVar, $ConfigTable = 'config', $GroupsTable = 'config_groups') { if (System::cache()->HasCache('config', $ConfigTable)) { $ConfigVar = System::cache()->Get('config', $ConfigTable); return; } $temp = System::database()->Select($ConfigTable, "`autoload`='1'"); foreach ($temp as $i) { $configs[$i['group_id']][] = $i; } // Вытаскиваем группы настроек $config_groups = System::database()->Select($GroupsTable, ''); foreach ($config_groups as $group) { if (isset($configs[$group['id']])) { foreach ($configs[$group['id']] as $config) { $gname = $group['name']; $cname = $config['name']; $cvalue = $config['value']; $type = trim($config['type']); if ($type != '') { $type = explode(',', $type); } else { $type = array(255, 'string', 'false'); } if ($type[0] > 0) { $cvalue = substr($cvalue, 0, $type[0]); } if ($type[2] != 'false') { $cvalue = HtmlChars(strip_tags($cvalue)); } settype($cvalue, $type[1]); if ($cvalue === '' && ($type[1] == 'bool' || $type[1] == 'boolean')) { $cvalue = '0'; } $ConfigVar[$gname][$cname] = $cvalue; } } } System::cache()->Write('config', $ConfigTable, $ConfigVar); }
function AdminExtensionsInstallList() { global $config; $mod_dir = $config['mod_dir']; $plug_dir = $config['plug_dir']; $block_dir = $config['blocks_dir']; $temp_dir = $config['tpl_dir']; $list = array(); $title = 'Установка расширений'; System::admin()->AddSubTitle($title); // Загружаем информацию об установленных модулях $installed_mods = array(); $installed_plugins = array(); $installed_blocks = array(); $installed_templates = array(); System::database()->Select('modules'); while ($mod = System::database()->FetchRow()) { $installed_mods[] = $mod['folder']; } System::database()->Select('plugins'); while ($mod = System::database()->FetchRow()) { $installed_plugins[] = ($mod['group'] != '' ? $mod['group'] . '/' : '') . $mod['name']; } System::database()->Select('block_types'); while ($mod = System::database()->FetchRow()) { $installed_blocks[] = $mod['folder']; } System::database()->Select('templates'); while ($mod = System::database()->FetchRow()) { $installed_templates[] = $mod['folder']; } // Поиск модулей $mod_folders = GetFolders($mod_dir); foreach ($mod_folders as $folder) { if (!in_array($folder, $installed_mods)) { $info = ExtLoadInfo($mod_dir . $folder); if ($info !== false) { $info['type'] = EXT_MODULE; $info['path'] = $mod_dir . $folder . '/'; $info['folder'] = $folder; if (is_file($info['path'] . 'install.php') && is_file($info['path'] . 'uninstall.php')) { $list[] = $info; } } } } // Поиск плагинов $plug_folders = GetFolders($plug_dir); foreach ($plug_folders as $folder) { $info = false; if (is_file($plug_dir . $folder . '/info.php')) { // Возможно группа $info = ExtLoadInfo($plug_dir . $folder); } if (isset($info['1.3_old_plugins_group']) || $info === false) { // Группа $plug_folders2 = GetFolders($plug_dir . $folder . '/'); foreach ($plug_folders2 as $folder2) { if (!in_array($folder . '/' . $folder2, $installed_plugins)) { $info = ExtLoadInfo($plug_dir . $folder . '/' . $folder2); if ($info !== false) { $info['type'] = EXT_PLUGIN; $info['path'] = $plug_dir . $folder . '/' . $folder2 . '/'; $info['group'] = $folder; $info['folder'] = $folder2; if (isset($info['1.3']) || is_file($info['path'] . 'install.php') && is_file($info['path'] . 'uninstall.php')) { $list[] = $info; } } } } } else { // Отдельный плагин if (!in_array($folder, $installed_plugins)) { if ($info !== false) { $info['type'] = EXT_PLUGIN; $info['path'] = $plug_dir . $folder . '/'; $info['folder'] = $folder; if (isset($info['1.3']) || is_file($info['path'] . 'install.php') && is_file($info['path'] . 'uninstall.php')) { $list[] = $info; } } } } } // Поиск блоков $block_folders = GetFolders($block_dir); foreach ($block_folders as $folder) { if (!in_array($folder, $installed_blocks)) { $info = ExtLoadInfo($block_dir . $folder); if ($info !== false) { $info['type'] = EXT_BLOCK; $info['path'] = $block_dir . $folder . '/'; $info['folder'] = $folder; if (is_file($info['path'] . 'install.php') && is_file($info['path'] . 'uninstall.php')) { $list[] = $info; } } } } // Поиск шаблонов $temp_folders = GetFolders($temp_dir); foreach ($temp_folders as $folder) { if (!in_array($folder, $installed_templates)) { $info = ExtLoadInfo($temp_dir . $folder); if ($info === false) { $info = array('name' => $folder, 'description' => '', 'author' => '', 'site' => '', 'version' => '1.0', 'admin' => false); } $info['type'] = EXT_TEMPLATE; $info['path'] = $temp_dir . $folder . '/'; $info['folder'] = $folder; $list[] = $info; } } $count = count($list); $text = '<form action="' . ADMIN_FILE . '?exe=extensions&a=install" method="post">'; $text .= '<table cellspacing="0" cellpadding="0" class="cfgtable">'; $text .= '<tr><th>Установка</th><th>Тип</th><th>Имя</th><th>Описание</th><th>Автор</th><th>Сайт</th></tr>'; if (count($list) > 0) { foreach ($list as $i => $ext) { switch ($ext['type']) { case 1: if (is_file($ext['path'] . 'icon.png')) { $type = '<img src="' . $ext['path'] . 'icon.png" title="Модуль">'; } else { $type = '<img src="' . MOD_DIR . 'icon.png" title="Модуль">'; } break; case 2: $type = '<img src="images/plugins.png" title="Плагин">'; break; case 3: $type = '<img src="images/blocks.png" title="Блок">'; break; case 4: $type = '<img src="images/skins.png" title="Шаблон">'; break; } $text .= Indent(' <tr> <td>' . System::site()->Check('install_' . $i, '1') . System::site()->Hidden('folder_' . $i, $ext['folder']) . System::site()->Hidden('type_' . $i, $ext['type']) . ($ext['type'] == EXT_PLUGIN && isset($ext['group']) ? System::site()->Hidden('group_' . $i, $ext['group']) : '') . '</td> <td>' . $type . '</td> <td>' . SafeDB($ext['name'], 255, str) . '</td> <td>' . (isset($ext['description']) && $ext['description'] != '' && $ext['description'] != ' - ' ? SafeDB($ext['description'], 255, str) : 'Нет описания') . '</td> <td>' . (isset($ext['author']) && $ext['author'] != '' ? SafeDB($ext['author'], 255, str) : ' ') . '</td> <td>' . (isset($ext['site']) && $ext['site'] != '' ? '<a href="' . HtmlChars($ext['site']) . '" title="' . HtmlChars($ext['site']) . '" target="_blank">Перейти</a>' : 'Нет') . '</td> </tr> '); } $text .= '</table>'; $text .= '<div style="margin-bottom: 25px;">' . System::site()->Hidden('count', $count) . System::site()->Submit('Установить выделенные') . '</div>'; $text .= '</form>'; } else { $text .= '<tr><td colspan="6" style="text-align: left;">Нет не установленных модулей.</td></tr>'; $text .= '</table>'; $text .= '</form>'; } System::admin()->AddCenterBox($title . ' (' . $count . ' готово к установке)'); System::admin()->AddText($text); }
/* * LinkorCMS 1.4 * © 2012 LinkorCMS Development Group */ define('RSS_SCRIPT', true); define('VALID_RUN', true); require 'config/init.php'; // Конфигурация и инициализация @header("Content-Type: text/xml"); @header("Cache-Control: no-cache"); @header("Pragma: no-cache"); $rss_title = 'Новости на ' . System::config('general/site_url'); $rss_link = System::config('general/site_url'); $rss_description = 'RSS канал сайта ' . System::config('general/site_url') . '.'; $rss = new RssChannel($rss_title, $rss_link, $rss_description); $rss->pubDate = gmdate('D, d M Y H:i:s') . ' GMT'; $rss->generator = CMS_NAME . ' ' . CMS_VERSION; $rss->managingEditor = '*****@*****.**'; $rss->webMaster = System::config('general/site_email'); $num = 10; // Пока максимум 10 заголовков по умолчанию $news = System::database()->Select('news', "`enabled`='1'", $num, 'date', true); foreach ($news as $s) { $title = SafeDB($s['title'], 255, str); $description = SafeDB($s['start_text'], 4048, str); $link = HtmlChars(GetSiteUrl() . Ufu('index.php?name=news&op=readfull&news=' . $s['id'] . '&topic=' . $s['topic_id'], 'news/{topic}/{news}/')); $pubDate = gmdate('D, d M Y H:i:s', $s['date']) . ' GMT'; $rss->AddItem($title, $description, $link, $pubDate, $link); } echo $rss->Generate();
/** * Выводит форму добавления или редактирования комментария. * @param bool $Edit Метод редактирования * @param string $PostFormBlockName Имя блока для вывода формы */ public function RenderForm($Edit = false, $PostFormBlockName = 'postsform') { if ($this->DisableComments) { System::site()->AddBlock($PostFormBlockName, false, false, 'form', $this->PostFormTemplate); return; } else { System::site()->AddBlock($PostFormBlockName, true, false, 'form', $this->PostFormTemplate); } if ($Edit && isset($_GET['post_id'])) { $post_id = SafeEnv($_GET['post_id'], 11, int); } elseif ($Edit && !isset($_GET['post_id'])) { ErrorHandler(USER_ERROR, 'Posts::PostForm(): post_id не инициализирована.', __FILE__); return; } if (!$Edit && !$this->AlloyComments) { $this->Alert($PostFormBlockName, 'Обсуждение закрыто'); return; } if (!$Edit && !System::user()->Auth && !$this->GuestPost) { // Гость $this->Alert($PostFormBlockName, 'Гости не могут добавлять комментарии, войдите или зарегистрируйтесь.'); return; } System::site()->AddVars('template', array('lang_posts_username' => 'Имя', 'lang_posts_useremail' => 'E-mail', 'lang_posts_hideemail' => 'Скрыть E-mail', 'lang_posts_userhomepage' => 'Сайт', 'lang_posts_posttitle' => 'Заголовок', 'lang_posts_postmessage' => 'Сообщение', 'lang_posts_cancel' => 'Отмена', 'lang_posts_canceltitle' => 'Вернуться к теме без сохранения изменений')); $back = ''; if (!$Edit) { $back = '&back=' . SaveRefererUrl(); } $vars = array(); if ($Edit) { System::database()->Select($this->PostsTable, "`id`='{$post_id}'"); $post = System::database()->FetchRow(); if (System::user()->Auth) { $access = System::user()->Get('u_id') == $post['user_id'] || System::user()->isAdmin(); } else { $access = $post['user_id'] == '0' && $post['user_ip'] == getip(); } if (!$access) { $this->Alert($PostFormBlockName, 'У вас не достаточно прав!'); return; } $vars['form_title'] = 'Редактирование сообщения'; $vars['form_action'] = $this->PostFormAction . "&post_id={$post_id}" . $back; $vars['post_message'] = HtmlChars($post['post_message']); $vars['edit'] = true; System::site()->SetVar('template', 'lang_posts_submit', 'Сохранить'); System::site()->SetVar('template', 'lang_posts_submittitle', 'Сохранить изменения и вернуться'); $vars['visibility'] = 'visible'; } else { $vars['form_title'] = 'Добавить комментарий'; $vars['form_action'] = $this->PostFormAction . $back; $vars['post_title'] = ''; $vars['post_message'] = ''; $vars['edit'] = false; System::site()->SetVar('template', 'lang_posts_submit', 'Добавить'); System::site()->SetVar('template', 'lang_posts_submittitle', 'Добавить новое сообщение'); $vars['visibility'] = 'hidden'; } $vars['add'] = !$vars['edit']; $vars['add_guest'] = (System::user()->AccessLevel() == 3 || System::user()->AccessLevel() == 4) && $vars['add']; $vars['show_kaptcha'] = $vars['add_guest'] || !System::user()->isAdmin() && $this->ShowKaptchaForMembers; $vars['kaptcha_url'] = 'index.php?name=plugins&p=antibot'; $vars['kaptcha_width'] = '120'; $vars['kaptcha_height'] = '40'; // Подключаем BBCode редактор IncludePluginsGroup('bbcode_editors'); // Смайлики для формы $smilies = System::database()->Select('smilies', "`enabled`='1'"); $vars['is_smilies'] = System::database()->NumRows() != 0; if ($vars['is_smilies']) { System::site()->AddBlock('smilies', true, true, 'smile'); foreach ($smilies as $smile) { $smile['file'] = RealPath2(System::config('general/smilies_dir') . $smile['file']); $sub_codes = explode(',', SafeDB($smile['code'], 255, str)); $smile['code'] = $sub_codes[0]; System::site()->AddSubBlock('smilies', true, $smile); } } else { System::site()->AddBlock('smilies', true, false, 'smile', '', 'Смайликов пока нет.'); } System::site()->Blocks[$PostFormBlockName]['vars'] = $vars; }
$where = ''; $where_url = ''; if ($action == 'editfield') { if (isset($_GET['where'])) { $where = $_GET['where']; $where_url = '&where=' . SafeDB($_GET['where'], 255, str); } $edit = true; $index = SafeEnv($_GET['index'], 255, int); $rows = System::database()->Select($table, $where); $row = $rows[$index]; } $i = 0; foreach ($columns as $col) { if ($edit) { $val = HtmlChars($row[$columns[$i]['name']]); $cap = 'Сохранить'; $title = 'Редактирование записи'; } else { $val = ''; $cap = 'Добавить'; $title = 'Добавление записи'; } if (strtolower($col['type']) != 'text') { FormRow('<font color="#0000FF">' . (isset($col['auto_increment']) && $col['auto_increment'] == true ? '<u>' . $col['name'] . '</u>' : $col['name']) . '</font>' . '<br /><font color="#666666">' . $col['type'] . (isset($col['length']) ? '(' . $col['length'] . ')</font>' : '</font>'), System::admin()->Edit($col['name'], $val, false, 'style="width: 400px;"' . ($i == 0 ? ' class="autofocus"' : ''))); } else { FormRow('<font color="#0000FF">' . $col['name'] . '</font>', System::admin()->TextArea($col['name'], $val, 'style="width: 400px; height: 200px;"' . ($i == 0 ? ' class="autofocus"' : ''))); } $i++; } AddCenterBox($title);
/** * Фильтрует переменную для безопасного вывода ее содержимого в браузер пользователя. * Функция не добавляет экранирование, переменную отфильтрованную данной функцией опасно передавать в запрос к базе данных. * @param mixed $Var * @param int $MaxLength * @param int $Type * @param bool $StripTags * @param bool $SpecialChars * @param bool $SafeXss * @return mixed */ function SafeDB($Var, $MaxLength, $Type, $StripTags = true, $SpecialChars = true, $SafeXss = true) { if (is_array($Var)) { foreach ($Var as &$v) { if ($MaxLength > 0) { $v = substr($v, 0, $MaxLength); } $v = trim($v); if ($SafeXss) { SafeXSS($v); } if ($StripTags) { $v = strip_tags($v); } if ($SpecialChars) { $v = HtmlChars($v, ENT_QUOTES); } settype($v, $Type); } } else { if ($MaxLength > 0) { $Var = substr($Var, 0, $MaxLength); } $Var = trim($Var); if ($SafeXss) { SafeXSS($Var); } if ($StripTags) { $Var = strip_tags($Var); } if ($SpecialChars) { $Var = HtmlChars($Var, ENT_QUOTES); } settype($Var, $Type); } return $Var; }
/** * Устанавливает переменные страницы * @return void */ protected function SetPage() { $this->AddVars('head', array('doctype' => $this->Doctype, 'title' => HtmlChars($this->GenerateTitle()), 'meta' => $this->GenerateMetaTags(), 'text' => $this->GenerateHead(), 'body_params' => $this->BodyParams, 'base' => GetSiteUrl())); }
function IndexForumShowTopic($one_post = false) { global $forum_lang; $forums_tree = ForumTree::Instance(); // Вспомогательные переменные $user_auth = System::user()->Auth; $user_id = System::user()->Get('u_id'); $user_admin = System::user()->isAdmin(); $time = time(); $max_word_length = System::config('forum/max_word_length'); if (isset($_GET['topic'])) { $topic_id = SafeEnv($_GET['topic'], 11, int); } else { System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']); 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 (!$user_admin && $topic['starter_id'] == $user_id && $topic['delete'] == '1') { // Тема удалена в корзину (только админы видят корзину и автор темы) System::site()->AddTextBox($forum_lang['topic_basket_current_post'], '<p align="center">' . $forum_lang['topic_basket_post'] . '.<br><input type="button" value="' . $forum_lang['back'] . '"onclick="history.back();"></p>'); return; } // Проверяем доступ к форуму $forum_id = SafeEnv($topic['forum_id'], 11, int); $forum_config = $forums_tree->GetForumConfigRecursive($forum_id); // Параметры доступа на форум if (!$forum_config['access']) { System::site()->AddTextBox($forum_lang['error'], $forum_config['access_reason']); // Нет доступа в этот форум return; } // $forum_config['add_post'] - право добавлять сообщения // $forum_config['add_post_reason'] - причина запрета добавления сообщений // $forum_config['no_link_guest'] - скрывать ссылки от гостей // $forum_config['new_message_email'] - разрешить подписку на новые сообщения // Определяем следующую и предыдущую темы $topics_data = ForumCacheGetTopics(); $topics_data = $topics_data[$forum_id]; $prev_topic = null; $next_topic = null; $find = false; foreach ($topics_data as $topic_row) { if ($topic_row['id'] == $topic_id) { $find = true; continue; } if ($find) { $next_topic = $topic_row; break; } $prev_topic = $topic_row; } // Параметры постраничной навигации if (isset($_GET['page'])) { $page = SafeEnv($_GET['page'], 11, int); } else { $page = 1; } if (isset($_GET['view']) && $_GET['view'] == 'lastpost') { $lastpost = true; } else { $lastpost = false; } $posts_on_page = System::config('forum/posts_on_page'); // Обновляем метку о прочтении темы, если пользователь авторизован if ($user_auth) { System::database()->Delete('forum_topics_read', "`tid`='{$topic_id}' and `mid`='{$user_id}'"); System::database()->Insert('forum_topics_read', "'{$user_id}','{$topic_id}','{$time}'"); } // Объект онлайн $online = ForumOnline::Instance($forum_id, $topic_id); // Устанавливаем заголовок страницы $topic_title = SafeDB($topic['title'], 255, str); System::site()->SetTitle($topic_title . ($page > 1 ? ' - Страница ' . $page : '')); // Хлебные крошки $forums_tree->BreadCrumbsF($forum_id); System::site()->BreadCrumbAdd(SafeDB($topic['title'], 255, str)); // Добавляем корзину (если тема удалена в корзину) if ($topic['delete'] == '1') { $basket_topics = ForumBasketGetData('forum_basket_topics'); if (isset($basket_topics[$topic['id']])) { System::site()->AddTextBox($forum_lang['topic_basket_red'], ForumBasketRender($topic['id'], $topic['title'], $basket_topics, true)); } } // Увеличиваем счётчик просмотров System::database()->Update('forum_topics', "`hits`='" . (SafeDB($topic['hits'], 11, int) + 1) . "'", "`id`='" . $topic_id . "'"); // Инициализируем постраничную навигацию $navigation = new Navigation($page); $navigation->FrendlyUrl = System::config('general/ufu'); // Загружаем сообщения из базы данных $basket_where = ''; // Администратор (подготавливаем запрос выборки т.к. нужно знать сколько всего сообщений для постр. навигации) if ($user_auth) { if (!$user_admin) { $basket_where = " and (`delete`='0' or `user_id`='{$user_id}')"; // Пользователь } } else { $basket_where = " and `delete`='0'"; // Гость } $posts = System::database()->Select('forum_posts', ($one_post !== false ? "`id`='{$one_post}'" : "`object`='{$topic_id}'") . $basket_where); SortArray($posts, 'public', false); //Сортируем по дате // Вывод постраничной навигации if (count($posts) > $posts_on_page) { if ($lastpost) { $page = ceil(count($posts) / $posts_on_page); } $navigation->GenNavigationMenu($posts, $posts_on_page, Ufu('index.php?name=forum&op=showtopic&topic=' . $topic_id, 'forum/topic' . $topic_id . '-{page}.html', true), $page); } else { $navigation->DisableNavigation(); } // Загружаем корзину для сообщений $basket = ForumBasketGetData('forum_basket_post'); // Блок с информацией о теме System::site()->AddBlock('topic', true, false); System::site()->SetVars('topic', ForumTopicFilterData($topic)); // Блок шаблонизатора для вывода сообщений System::site()->AddBlock('forum_posts', true, true, 'post'); $is_forum_member = AccessIsResolved(2); // Для определения первого и последнего сообщения $i = 1; // Выводим сообщения в шаблонизатор foreach ($posts as $post) { $post_user_id = SafeDB($post['user_id'], 11, int); if ($post_user_id == 0) { continue; } $vars = array(); // Обрабатываем текст сообщения if ($post['delete'] == '1') { // Сообщение удалено в корзину $vars['text'] = ForumBasketRender($post['id'], $post['message'], $basket); } else { $vars['text'] = HtmlChars($post['message']); if ($forum_config['no_link_guest']) { // Скрываем ссылки от гостей $replace = '<p class="notice">' . $forum_lang['hide_links_for_guests'] . '</p>'; $vars['text'] = preg_replace('/\\<a[^\\>]*?(http|https|ftp|www)(.*?)\\<\\/a\\>/is', $replace, $vars['text']); $vars['text'] = preg_replace('/(http:\\/\\/|https:\\/\\/|ftp:\\/\\/|www\\.)?([a-zA-Z0-9]+)\\.(ru|su|com|org|net|info|name|ws|cc|tv|tel|kz|biz|mobi|asia|me|tw|ua)+([а-яА-Яa-zA-Z0-9\'~;,@#%&_\\!\\$\\^\\*\\(\\)\\-\\=\\+\\?\\.\\:\\/\\\\]*)?/is', $replace, $vars['text']); } SmiliesReplace($vars['text']); $vars['text'] = nl2br($vars['text']); $vars['text'] = BbCodePrepare($vars['text']); if ($max_word_length > 0) { $vars['text'] = word_wrapped_string($vars['text'], $max_word_length); } } // Обрабатываем данные сообщения // Пользователь $user_info = GetUserInfo($post_user_id); $vars['usertopics'] = '<a href="' . Ufu('index.php?name=forum&op=usertopics&user='******'forum/usertopics/{user}/') . '">' . $forum_lang['allusertopics'] . '</a>'; if ($user_info['rank_name'] != '') { $vars['author'] = '<a href="' . Ufu('index.php?name=user&op=userinfo&user='******'user/{user}/info/') . '">' . $user_info['name'] . '</a>'; $vars['author_name'] = $user_info['name']; } else { $vars['author'] = $post['name']; $vars['author_name'] = $post['name']; } if ($user_info['hideemail'] == '0') { $vars['email'] = AntispamEmail($user_info['email']); } else { $vars['email'] = ' '; } if ($user_info['url'] != '') { $vars['homepage'] = '<a href="http://' . $user_info['url'] . '" target="_blank">' . $user_info['url'] . '</a>'; } else { $vars['homepage'] = ' '; } $vars['icq'] = $user_info['icq']; if ($user_info['online']) { $vars['status'] = $forum_lang['user_online']; } else { $vars['status'] = ''; } $vars['rank_image'] = $user_info['rank_image'] != '' ? $user_info['rank_image'] : ''; $vars['rank_name'] = $user_info['rank_name'] != '' ? $user_info['rank_name'] : ''; $vars['avatar'] = $user_info['avatar_file'] != '' ? $user_info['avatar_file'] : GetPersonalAvatar(0); $vars['regdate'] = TimeRender($user_info['regdate'], false, true); if (isset($user_info['data']['forum_counters'])) { $vars['user_posts_count'] = $user_info['data']['forum_counters']['posts']; $vars['user_topics_count'] = $user_info['data']['forum_counters']['topics']; } else { $vars['user_posts_count'] = '0'; $vars['user_topics_count'] = '0'; } // Сообщение $vars['public'] = $forum_lang['added'] . TimeRender($post['public']); $vars['public_date'] = TimeRender($post['public']); $vars['ip'] = SafeDB($post['user_ip'], 19, str); $vars['topic_id'] = $topic_id; $vars['id'] = SafeDB($post['id'], 11, int); $vars['nodelete'] = SafeDB($post['delete'], 1, int) == 1 ? false : true; $vars['is_admin_and_nodelete'] = $vars['nodelete'] && $user_admin; $vars['page'] = $page; // is_current_user Пользователь является владельцем сообщения (кнопки редактировать и удалить) if ($post['delete'] == '0') { $vars['is_current_user'] = $user_id == $post['user_id'] && $topic['close_topics'] == '0' || $user_admin; } else { $vars['is_current_user'] = false; } if ($one_post === false) { $vars['num'] = $page > 1 ? $page * $posts_on_page - $posts_on_page + $i : $i; $vars['url'] = "javascript:link_post('" . GetSiteUrl() . Ufu("index.php?name=forum&op=post&topic=" . $topic_id . "&post=" . $post['id'], 'forum/t{topic}/post{post}.html') . "')"; } else { $vars['num'] = ''; $vars['url'] = 'javascript:history.go(-1)'; } $vars['is_forum_member'] = $is_forum_member; System::site()->AddSubBlock('forum_posts', true, $vars, array(), 'module/forum_post.html'); $i++; } // Форма добавления сообщений System::site()->AddBlock('post_form', $forum_config['add_post'], false); ForumRenderPostForm(false, $forum_id, $topic_id, 0, '', '', $is_forum_member); // Подписка на тему System::site()->AddBlock('subscription', $forum_config['new_message_email'], false, 'subs'); $vars_subs = array(); $vars_subs['topic'] = $topic_id; $vars_subs['sub_status'] = Forum_Subscription_Status($topic_id); $vars_subs['status'] = $vars_subs['sub_status'] ? 'Отписаться от этой темы' : 'Подписаться на эту тему'; System::site()->SetVars('subscription', $vars_subs); System::site()->AddBlock('is_forum_member', $is_forum_member, false, 'marker'); System::site()->SetVars('is_forum_member', array('id' => $topic_id)); // Подключаем шаблон System::site()->AddTemplatedBox('', 'module/forum_showtopic.html'); // Выводим блок онлайн $online->Render($forum_id, $topic_id, $forum_lang['current_online'], 'forum_online'); // Предыдущая и следующая тема System::site()->AddBlock('forum_prev_topic', isset($prev_topic), false, 'topic'); if (isset($prev_topic)) { System::site()->SetVars('forum_prev_topic', array('url' => Ufu('index.php?name=forum&op=showtopic&topic=' . SafeDB($prev_topic['id'], 11, int), 'forum/topic{topic}.html'), 'title' => SafeDB($prev_topic['title'], 255, str), 'lang_prev_topic' => $forum_lang['prev_topic'])); } System::site()->AddBlock('forum_next_topic', isset($next_topic), false, 'topic'); if (isset($next_topic)) { System::site()->SetVars('forum_next_topic', array('url' => Ufu('index.php?name=forum&op=showtopic&topic=' . SafeDB($next_topic['id'], 11, int), 'forum/topic{topic}.html'), 'title' => SafeDB($next_topic['title'], 255, str), 'lang_next_topic' => $forum_lang['next_topic'])); } // Быстрый переход по форумам ForumQuickTransitionBox($forum_id, $forum_lang['quick_transition']); }
/** * Выводит данные корзины для топика или поста. * @global type $forum_lang * @staticvar int $num_del * @staticvar null $clear_basket_days * @param type $id Идентификатор топика. * @param type $text Контент удаляемой темы. * @param type $basket Данные корзины. * @param type $FullFormat В полном формате. * @return string */ function ForumBasketRender($id = 0, $text = '', &$basket = array(), $FullFormat = true) { global $forum_lang; static $num_del = 0; static $clear_basket_days = null; if (!isset($clear_basket_days)) { $clear_basket_days = System::config('forum/clear_basket_day'); } $num_del++; $id = SafeDB($id, 11, int); $del_admin = ''; $del_reason = ''; $del_time = ''; // Кто удалил $admin_info = GetUserInfo($basket[$id]['user']); $del_admin = $forum_lang['deleted'] . ':<a href="index.php?name=user&op=userinfo&user='******'user'] . '"> ' . $admin_info['name'] . '</a>'; // Время удаления (будет удалено навсегда) $del_time = $forum_lang['basket_delete_forever'] . ' ' . TimeRender($basket[$id]['date'] + 86400 * $clear_basket_days, false, false); // Причина удаления if (trim($basket[$id]['reason']) != '') { $del_reason = '<span style="color: #FF0000;">' . $forum_lang['reason'] . '</span>:' . ($FullFormat ? '<br>' : ' ') . BbCodePrepare($basket[$id]['reason']) . '<br>'; } // Вывод if ($FullFormat) { $out_text = $forum_lang['basket_removed_in_basket_message']; $out_text .= '<br>' . $del_admin . '<br>' . $del_time . '.<br>' . $del_reason . '<br>'; // Показать / Скрыть удаляемое сообщение $out_text .= '<a href="#" onclick="ShowHide(\'delete_com' . $num_del . '\'); return false;" class="button">' . $forum_lang['basket_see'] . '</a>'; // Ссылка - восстановить if (System::user()->isAdmin()) { $out_text .= ' | '; $out_text .= '<a href="index.php?name=forum&op=restore_basket&' . $basket['table'] . '=' . $id . '&back=' . SaveRefererUrl() . '" class="button">' . $forum_lang['restore'] . '</a>'; } // Блок с контентом удаляемого сообщения (скрывается) // Содержимое темы (заголовок) или сообщение поста $text = HtmlChars($text); SmiliesReplace($text); $text = nl2br($text); $text = BbCodePrepare($text); $out_text .= '<div align="left" id="delete_com' . $num_del . '" style="visibility: hidden; display: none; border-top: 1px #888 solid; margin: 10px 0 5px 0; padding: 5px 0;">' . $text . '</div>'; } else { // Просто сообщение, что удалено в корзину $out_text = $forum_lang['basket_removed_in_basket_message_smile']; $out_text .= '<br>' . $del_admin . '<br>' . $del_time . '.<br>' . $del_reason . '<br>'; // Ссылка - восстановить if (System::user()->isAdmin()) { $out_text .= '<a href="index.php?name=forum&op=restore_basket&' . $basket['table'] . '=' . $id . '&back=' . SaveRefererUrl() . '" class="button">' . $forum_lang['restore'] . '</a>'; } } return $out_text; }
<tr> <th>Действие</th> <th width="2"> </th>'; $nc = count($info); foreach ($info as $col) { $text .= '<th>' . $col['name'] . '</th>'; } $text .= '</tr>'; $i = $rows_on_page * $page - $rows_on_page; $back = SaveRefererUrl(); foreach ($rows as $col) { $func = ''; $func .= SpeedButton('Редактировать', ADMIN_FILE . '?exe=dbadmin&a=editfield&name=' . $namedb . '&index=' . $i . $where_url . '&back=' . $back, 'images/admin/edit.png'); $func .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=dbadmin&a=deleterow&name=' . $namedb . '&index=' . $i . $where_url . '&back=' . $back, 'images/admin/delete.png', 'Удалить запись?'); $func .= SpeedButton('PHP код вставки', ADMIN_FILE . '?exe=dbadmin&a=viewcode&name=' . $namedb . '&index=' . $i . $where_url, 'images/admin/php.png'); $text .= '<tr><td nowrap="nowrap">' . $func . '</td><td></td>'; for ($j = 0; $j < $nc; $j++) { $col_name = $info[$j]['name']; strlen($col[$col_name]) > 255 ? $p = '... ...' : ($p = ''); $text .= '<td>' . substr(HtmlChars($col[$col_name]), 0, 255) . $p . '</td>'; } $text .= '</tr>'; $i++; } $text .= '</table>'; AddText($text); if ($nav) { AddNavigation(); } AdminFdbAdminGenTableMenu($namedb);
function AdminGuestBookAnswerEditor() { if (!System::user()->CheckAccess2('guestbook', 'answer')) { System::admin()->AccessDenied(); } $id = SafeEnv($_GET['id'], 11, int); System::database()->Select('guestbook', "`id`='" . $id . "'"); if (System::database()->NumRows() > 0) { AddCenterBox('Ответ на сообщение'); $msg = System::database()->FetchRow(); if ($msg['answers'] == '') { $answers = array(); } else { $answers = unserialize($msg['answers']); } if (array_key_exists(System::user()->Name(), $answers)) { $ans = $answers[System::user()->Name()]; } else { $ans = ''; } FormRow('Ответ', System::site()->TextArea('answer', HtmlChars($ans), 'style="width:400px;height:200px;" class="autofocus"')); if (isset($_GET['back'])) { $back = '&back=' . SafeDB($_GET['back'], 255, str); } else { $back = ''; } AddForm('<form action="' . ADMIN_FILE . '?exe=guestbook&a=saveanswer&id=' . $id . $back . '" method="POST">', System::site()->Button('Отмена', 'onclick="history.go(-1);"') . System::site()->Submit('Сохранить')); } else { GO(ADMIN_FILE . '?exe=guestbook'); } }
function FormsGetControl($name, $value, $kind, $type, $values, $other = '') { //values = array(val1,val2,val3,...) //kind = (Edit,Password,Text,Check,Radio,List,Combo) $kind = explode(':', $kind); $control = ''; $kind[0] = trim(strtolower($kind[0])); if ($type != '') { $type = explode(',', $type); settype($type[0], int); //maxlength settype($type[1], str); //type settype($type[2], bool); //strip tags/special chars } else { $type = array(255, str, false); } $params = FormsParseParams($kind); switch ($kind[0]) { case 'edit': $otherParams = ($type[0] != 0 ? 'maxlength="' . $type[0] . '" ' : '') . $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other; $control = System::site()->Edit($name, HtmlChars($value), false, $otherParams); break; case 'password': $otherParams = ($type[0] != 0 ? 'maxlength="' . $type[0] . '" ' : '') . $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other; $control = System::site()->Edit($name, HtmlChars($value), true, $otherParams); break; case 'text': $control = System::site()->TextArea($name, HtmlChars($value), $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other); break; case 'check': $vals = explode(':', $values); if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) { $func = CONF_GET_PREFIX . trim($vals[1]); $vals = $func($name); $usefunc = true; } else { $vals = explode(',', $values); $usefunc = false; } $value = explode(',', $value); $control = '<table cellspacing="0" cellpadding="0" align="center">'; $col = 0; $cols = $params['cols']; for ($i = 0; $i < count($vals); $i++) { if (!$usefunc) { $s = explode(':', $vals[$i]); } else { $s = $vals[$i]; } if ($col == 0) { $control .= '<tr>'; } $col++; $control .= '<td nowrap class="rightc">' . System::site()->Check($name . '[]', $s[0], in_array($s[0], $value)) . $s[1] . '</td>'; if ($col == $cols) { $control .= '</tr>'; $col = 0; } } if ($col < $cols) { $control .= '</tr>'; } $control .= '</table>'; break; case 'radio': $vals = explode(':', $values); if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) { $func = CONF_GET_PREFIX . trim($vals[1]); $vals = $func($name); $usefunc = true; } else { $vals = explode(',', $values); $usefunc = false; } $control = '<table cellspacing="0" cellpadding="0" align="center">'; $col = 0; $cols = $params['cols']; for ($i = 0; $i < count($vals); $i++) { if (!$usefunc) { $s = explode(':', $vals[$i]); } else { $s = $vals[$i]; } if ($col == 0) { $control .= '<tr>'; } $col++; $control .= '<td nowrap class="rightc">' . System::site()->Radio($name, $s[0], $value == $s[0]) . $s[1] . '</td>'; if ($col == $cols) { $control .= '</tr>'; $col = 0; } } if ($col < $cols) { $control .= '</tr>'; } $control .= '</table>'; break; case 'list': case 'combo': $vals = explode(':', $values); if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) { $func = CONF_GET_PREFIX . trim($vals[1]); $vals = $func($name); $usefunc = true; } else { $vals = explode(',', $values); $usefunc = false; } $cdata = array(); for ($i = 0; $i < count($vals); $i++) { if (!$usefunc) { $s = explode(':', $vals[$i]); } else { $s = $vals[$i]; } if (count($s) == 2) { System::site()->DataAdd($cdata, $s[0], $s[1], $value == $s[0]); } } $control = System::site()->Select($name . ($kind[0] == 'list' ? '[]' : ''), $cdata, $kind[0] == 'list', $params['style'] . ' ' . $other); break; case 'file': ////////////////////////////////////////////////////////////////// $control = System::site()->FFile($name, ($params['required'] ? 'required ' : '') . $other); break; default: $control = $value; } return $control; }
function AdminPollsEditor() { global $editpolls; if (!$editpolls) { System::admin()->AccessDenied(); } $view = 4; $answers = array(); if (isset($_GET['id'])) { //Редактирование $title = 'Редактирование опроса'; $btitle = 'Сохранить изменения'; $id = SafeEnv($_GET['id'], 11, int); System::database()->Select('polls', "`id`='{$id}'"); $p = System::database()->FetchRow(); $poll = SafeDB($p['question'], 255, str); $desc = SafeDB($p['description'], 255, str); $showinblock = SafeDB($p['showinblock'], 1, int); $multianswers = SafeDB($p['multianswers'], 1, int); //Ответы $answers = unserialize($p['answers']); $allow_comments = SafeDB($p['allow_comments'], 1, int); $active = $p['active']; $view = SafeDB($p['view'], 1, int); $uid = '&id=' . $id; } else { //Добавление $title = 'Добавить опрос'; $btitle = 'Добавить'; $poll = ''; $desc = ''; $showinblock = true; $multianswers = false; $answers[] = array('Вариант ответа 1', '', '0'); $answers[] = array('Вариант ответа 2', '', '0'); $allow_comments = true; $active = true; $uid = ''; } FormRow('Вопрос', System::site()->Edit('poll', $poll, false, 'maxlength="250" style="width:400px;" class="autofocus"')); FormRow('Описание', System::site()->Edit('desc', $desc, false, 'maxlength="250" style="width:400px;"')); FormRow('Показывать в блоке', System::site()->Select('showinblock', GetEnData($showinblock, 'Да', 'Нет'))); FormRow('Мультиответы', System::site()->Select('multianswers', GetEnData($multianswers, 'Да', 'Нет'))); $answers_js = ''; foreach ($answers as $answer) { $answers_js .= ",['" . HtmlChars($answer[0], ENT_QUOTES) . "', '" . HtmlChars($answer[1], ENT_QUOTES) . "', " . SafeDB($answer[2], 11, int) . "]"; } $answers_js = '[' . substr($answers_js, 1) . ']'; // Выводим поле для редактирования ответов System::admin()->AddOnLoadJS(Indent(' if(!("map" in Array.prototype)) Array.prototype.map = function(mapper, that){ var other = new Array(this.length); for(var i=0, n=this.length; i<n; i++){ if(i in this){ other[i] = mapper.call(that, this[i], i, this); } } return other; }; answersdata = ' . $answers_js . '; tableAddRow = function(answer, color, voices){ var tr = $("<tr>"); var answerinput = $("<input>", {type: "text", name: "answer[]", "class": "fd_answer"}).val(answer).css("width", "400px"); $("<td>").append(answerinput).appendTo(tr); $("<td>").append($("<input>", {type: "text", name: "color[]", "class": "fd_color"}).val(color).css("width", "80px")).appendTo(tr); $("<td>").append($("<input>", {type: "text", name: "voices[]", "class": "fd_voices"}).val(voices).css("width", "50px").css("text-align", "right")).appendTo(tr); var td_delete = $("<td>").appendTo(tr); $("<a>", {"class": "button", html: "<img src=\\"images/admin/delete.png\\">", href: "#", title: "Удалить"}).click(function(){ tr.remove(); return false; }).appendTo(td_delete); tr.appendTo($("#answers_table tbody")); answerinput.focus(); }; AddPollAnswer = function(){ tableAddRow("", "", "0"); }; answersdata.map(function(item){ tableAddRow(item[0], item[1], item[2]); }); $("#answers_table tbody").sortable(); ')); FormRow('Ответы', Indent(' <table cellspacing="0" cellpadding="0" class="cfgtable" id="answers_table"> <thead> <tr> <th style="width: 400px;">Ответ</th> <th style="width: 80px;">Цвет</th> <th style="width: 50px;">Ответы</th> <th style="width: 40px;"> </th> </tr> </thead> <tbody></tbody> </table> <div style="float: right;">' . System::admin()->SpeedConfirmJs('Добавить ответ', 'AddPollAnswer();', 'images/admin/plus.png', '', true) . '</div> ')); FormRow('Разрешить комментарии', System::site()->Select('allow_comments', GetEnData($allow_comments, 'Да', 'Нет'))); FormRow('Включить', System::site()->Select('active', GetEnData($active, 'Да', 'Нет'))); FormRow('Кто может отвечать', System::site()->Select('view', GetUserTypesFormData($view))); AddCenterBox($title); AddForm('<form action="' . ADMIN_FILE . '?exe=polls&a=save' . $uid . '" method="post">', System::site()->Button('Отмена', 'onclick="history.go(-1)"') . System::site()->Submit($btitle)); }