/** * Подключает группу системных плагинов. * @param $group группа * @param string $function подгруппа(если есть) * @param bool $return возвратить имена файлов плагинов вместо их автоматического подключения * @param bool $return_full возвращать вместо имен файлов массив с полной информацией по плагинам * @return array */ function SystemPluginsIncludeGroup($group, $function = '', $return = false, $return_full = false) { global $config; $result = array(); // Поиск плагинов $group_dir = System::config('sys_plug_dir') . $group; if (!is_dir($group_dir)) { return array(); } $plugins = GetFolders($group_dir . '/'); // Подготавливаем результат foreach ($plugins as $plugin) { if ($function != '') { $plugin_name = RealPath2($group_dir . '/' . $plugin . '/' . $function) . '/'; } else { $plugin_name = RealPath2($group_dir . '/' . $plugin) . '/'; } global $include_plugin_path; // эта переменная будет доступна из плагина $include_plugin_path = $plugin_name; if ($return) { $result[] = $include_plugin_path; } else { include $include_plugin_path . 'index.php'; } } return $result; }
/** * Добавляет строку таблицы для выбора и загрузки изображения * @param $Title * @param $LoadTitle * @param $FileName * @param $Dir * @param string $Name * @param string $LoadName * @param string $FormName * @return void */ function AdminImageControl($Title, $LoadTitle, $FileName, $Dir, $Name = 'image', $LoadName = 'up_image', $FormName = 'edit_form') { $max_file_size = ini_get('upload_max_filesize'); $images_data = array(); $Dir = RealPath2($Dir) . '/'; $images = array(); $images = GetFiles($Dir, false, true, '.gif.png.jpeg.jpg'); $images[-1] = 'no_image/no_image.png'; System::admin()->DataAdd($images_data, $images[-1], 'Нет картинки', $FileName == ''); $selindex = -1; for ($i = 0, $c = count($images) - 1; $i < $c; $i++) { if ($FileName == $images[$i]) { $sel = true; $selindex = $i; } else { $sel = false; } System::admin()->DataAdd($images_data, $images[$i], $images[$i], $sel); } $select = System::admin()->Select($Name, $images_data, false, 'onchange="document.' . $FormName . '.iconview.src=\'' . $Dir . '\'+document.' . $FormName . '.' . $Name . '.value;"'); $ctrl = <<<HTML <table cellspacing="0" cellpadding="0" border="0" width="100%"> \t<tr> \t\t<td valign="top" style="border-bottom:none;">{$select}</td> \t</tr> \t<tr> \t\t<td style="border-bottom:none; padding-top: 5px;" width="100%" align="left"><img height="80" id="iconview" src="{$Dir}{$images[$selindex]}"></td> \t</tr> </table> HTML; System::admin()->FormRow($Title, $ctrl); System::admin()->FormRow($LoadTitle, System::admin()->FFile($LoadName) . '<br /><small>Формат изображений только *.jpg,*.jpeg,*.gif,*.png</small><br /><small>Максимальный размер файла: ' . $max_file_size . '</small>'); }
/** * Парсер смайликов. * @param $text * @return void */ function SmiliesReplace(&$text) { static $codes = null; if (!isset($codes)) { $codes = array(); $smilies_dir = System::config('general/smilies_dir'); $smilies = System::database()->Select('smilies'); // Пусть отключенные смайлики тоже парсятся foreach ($smilies as $smile) { $sub_codes = explode(',', $smile['code']); $smile_file = SafeDB($smile['file'], 255, str); if ($smile['desc'] != '') { $title = SafeDB($smile['desc'], 255, str); } else { $title = SafeDB(GetFileName($smile_file, true), 255, str); } foreach ($sub_codes as $code) { $code = trim($code); if ($code != '') { $codes[$code] = '<img src="' . RealPath2($smilies_dir . $smile_file) . '" title="' . $title . '">'; } } } } $text = strtr($text, $codes); }
public function Page($page = '') { global $config; if ($page != '' && file_exists($config['s_mod_dir'] . RealPath2($page) . '/index.php')) { include $config['s_mod_dir'] . RealPath2($page) . '/index.php'; } else { include $config['s_mod_dir'] . 'main/index.php'; } $this->SEcho(); }
/** * Подключение библиотеки из папки lib. Принимает произвольное количество параметров или массив. * @param $FileName1 Имя папки библиотеки в папке Lib (base/lib/ по умолчанию), функция подключает lib.php файл) * @param string $FileName2 * @param string $FileName3 * @return void */ function UseLib($FileName1, $FileName2 = '', $FileName3 = '') { $args = func_get_args(); if (is_array($args[0])) { $args = $args[0]; } foreach ($args as $path) { include_once RealPath2(System::config('lib_dir') . $path . '/lib.php'); } }
/** * Выводит данные каталога. * @param type $cat_id */ public function ShowCats($cat_id) { $vars = array(); $cats = $this->GetChildTree($cat_id); $c = count($cats); if ($c > 0) { System::site()->AddTemplatedBox('', $this->catTemplate); System::site()->AddBlock('cats', true, true, 'cat'); for ($i = 0; $i < $c; $i++) { $id = SafeDB($cats[$i]['id'], 11, int); $vars['url'] = Ufu('index.php?name=' . $this->moduleName . '&' . $this->id_par_name . '=' . $id, $this->moduleName . '/{' . $this->id_par_name . '}/'); $vars['title2'] = SafeDB($cats[$i]['title'], 255, str); $vars['title'] = '<a href="' . $vars['url'] . '">' . $vars['title2'] . '</a>'; if (file_exists($cats[$i]['icon'])) { $vars['icon_url'] = SafeDB(RealPath2($cats[$i]['icon']), 255, str); } else { $vars['icon_url'] = 'images/cat.gif'; } $vars['icon'] = '<img border="0" src="' . $vars['icon_url'] . '" />'; $vars['description'] = $cats[$i]['description']; $counters = $this->GetCountersRecursive($id); $vars['count'] = $counters['files']; $vars['cat_count'] = $counters['cats']; // Выодим подкатегории $childs = ''; $sub = ''; if (isset($cats[$i][TREE_CHILD_ID])) { for ($j = 0, $k = count($cats[$i][TREE_CHILD_ID]); $j < $k; $j++) { $child_id = SafeDB($cats[$i][TREE_CHILD_ID][$j]['id'], 11, int); $child_counters = $this->GetCountersRecursive($child_id); $link = Ufu('index.php?name=' . $this->moduleName . '&' . $this->id_par_name . '=' . $child_id, $this->moduleName . '/{' . $this->id_par_name . '}/'); $sub .= '<a href="' . $link . '">' . $cats[$i][TREE_CHILD_ID][$j]['title'] . '</a>' . ' (' . $child_counters['files'] . '), '; } $childs .= substr($sub, 0, -2) . '.'; } $vars['childs_cats'] = $childs; System::site()->AddSubBlock('cats', true, $vars); } if ($cat_id == 0 && function_exists($this->NumItems)) { $text = '<br>' . $this->NumItemsCaption . call_user_func($this->NumItems); } else { $text = ''; } System::site()->AddBlock('cat_caption', true, false, '', '', $text); } elseif ($cat_id == 0) { System::site()->AddTextBox('', '<p align="center">Категорий пока нет.</p>'); } }
/** * ‘ункци¤ автоматически подключает скрипты из папки script к странице. ѕринимает произвольное количество параметров или массив. * @param $FileName1 »м¤ папки скрипта в папке со скриптами (через ? можно передавать параметры как в URL, они запишутс¤ в локальную переменную $params) * ƒва одинаковых FileName с одинаковыми параметрами не выполн¤ютс¤. * @param string $FileName2 * @param string $FileName3 * @return mixed */ function UseScript($FileName1, $FileName2 = '', $FileName3 = '') { static $included = array(); static $static_data = array(); // ѕеременна¤ дл¤ сохранени¤ состо¤ний скриптов, если они подключаютс¤ несколько раз $return = false; $args = func_get_args(); if (is_array($args[0])) { $args = $args[0]; } if (count($args) == 1) { $return = true; } foreach ($args as $path) { $params = array(); if (is_int(strpos($path, '?'))) { $p = explode('?', $path, 2); $script = $p[0]; parse_str($p[1], $params); } else { $script = $path; } if (isset($included[$path])) { continue; } $file = RealPath2('scripts/' . $script . '/script.php'); if (is_file($file)) { $included[$path] = true; if ($return) { return include $file; } else { include $file; } } else { // TODO: WARNING return false; } } }
/** * Генерирует миниатюру и кэширует её. Возвращает имя файла миниатюры. * @param $FileName Исходный файл изображения. * @param int $MaxWidth Максимальная ширина миниатюры. * @param int $MaxHeight Максимальная высота миниатюры. * @param bool $Streech Растягивать ли картинку если заданные размеры больше исходных * @param null $SaveFormat Формат сохранения миниатюры (jpeg, png, gif, wbmp). * @return mixed */ function GetThumb($FileName, $MaxWidth = 0, $MaxHeight = 0, $Streech = false, $SaveFormat = null) { if ($FileName == '') { return 'images/no_image.png'; } elseif (substr($FileName, 0, 7) == 'http://') { return $FileName; } $FileName = RealPath2($FileName); if (isset($SaveFormat)) { $ext = '.' . $SaveFormat; } else { $ext = GetFileExt($FileName); } $tmb_path = System::config('general/tmb_path'); if (!is_dir($tmb_path)) { MkDirRecursive($tmb_path); } $tmb_file = $tmb_path . md5($FileName) . '_' . $MaxWidth . 'x' . $MaxHeight . ($Streech ? '_streech' : '') . $ext; if (!is_file($tmb_file)) { CreateThumb($FileName, $tmb_file, $MaxWidth, $MaxHeight, $Streech, $SaveFormat); } return $tmb_file; }
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 ForumSmiliesRender() { System::site()->AddBlock('smilies', true, true, 'smile'); if (System::cache()->HasCache('forum', 'ForumSmilies')) { $smilies = System::cache()->Get('forum', 'ForumSmilies'); } else { $smilies = System::database()->Select('smilies', "`enabled`='1'"); System::cache()->Write('forum', 'ForumSmilies', $smilies, Day2Sec); } foreach ($smilies as $smile) { $smile['file'] = RealPath2(System::config('general/smilies_dir') . $smile['file']); $smile['code'] = SafeDB($smile['code'], 255, str); $sub_codes = explode(',', $smile['code']); $smile['code'] = $sub_codes[0]; System::site()->AddSubBlock('smilies', true, $smile); } }
function AdminCacheClean() { System::cache()->Clear(RealPath2($_GET['group'])); Audit('Управление кэшем: Очистка группы "' . $_GET['group'] . '"'); AdminCacheMain(); }
function IndexUserInfo() { if (isset($_GET['user'])) { $user_id = SafeEnv($_GET['user'], 11, int); } elseif (System::user()->Auth) { $user_id = System::user()->Get('u_id'); } else { System::site()->Login(); return; } $usr = GetUserInfo($user_id); if ($usr !== false) { System::site()->SetTitle('Информация о пользователе ' . SafeDB($usr['name'], 50, str)); System::site()->AddTemplatedBox('', 'module/user_info.html'); System::site()->AddBlock('userinfo', true, false, 'user'); $vars['user_id'] = SafeDB($usr['id'], 11, int); $vars['name'] = SafeDB($usr['name'], 50, str); $vars['true_name'] = SafeDB($usr['truename'], 250, str); $vars['avatar'] = RealPath2(SafeDB($usr['avatar_file'], 255, str)); $vars['rankimage'] = RealPath2(SafeDB($usr['rank_image'], 255, str)); $vars['rank'] = SafeDB($usr['rank_name'], 255, str); $vars['age'] = SafeDB($usr['age'], 11, str); $vars['city'] = SafeDB($usr['city'], 100, str); if ($usr['hideemail'] == '1') { $vars['email'] = 'Скрывается'; } else { $vars['email'] = SafeDB($usr['email'], 50, str); } $vars['icq'] = SafeDB($usr['icq'], 15, str); $vars['site'] = Url(SafeDB($usr['url'], 250, str)); $vars['site_url'] = UrlRender(SafeDB($usr['url'], 250, str)); $vars['about'] = SafeDB($usr['about'], 0, str); $vars['regdate'] = TimeRender($usr['regdate'], false); $vars['lastdate'] = TimeRender($usr['lastvisit']); $vars['counter'] = SafeDB($usr['visits'], 11, int); if ($usr['online']) { $vars['online'] = 'Сейчас на сайте.'; } else { $vars['online'] = ''; } System::site()->BreadCrumbAdd('Личные данные "' . $vars['name'] . '"'); System::site()->Blocks['userinfo']['vars'] = $vars; } else { System::site()->AddTextBox('Ошибка', '<p align="center">Пользователь не найден.<p>'); } }
function AddDetailDownload(&$down) { $id = SafeDB($down['id'], 11, int); $cat_id = SafeDB($down['category'], 11, int); $func = IndexDownloadsFunc($id); $vars = array(); $vars['category_url'] = Ufu("index.php?name=downloads&cat={$cat_id}", 'downloads/{cat}/'); $vars['category_title'] = IndexDownloadsGetTree()->IdCats[$down['category']]['title']; $vars['category'] = '<a href="' . $vars['category_url'] . '">' . $vars['category_title'] . '</a>'; $vars['file_link'] = "index.php?name=downloads&op=download&file={$id}"; // Если сделать ЧПУ ссылку, то появляется проблема с относительным адресом файла if (AccessIsResolved($down['view'])) { $vars['access'] = true; $url = '<a href="' . $vars['file_link'] . '" target="_blank">Скачать файл</a>'; } else { $vars['access'] = false; $url = 'Файл только для зарегистрированных пользователей.'; } $vars['not_access'] = !$vars['access']; $vars['url'] = $url; $vars['file_title'] = SafeDB($down['title'], 255, str) . (System::user()->isAdmin() ? $func : ''); $vars['description'] = SafeDB($down['description'], 0, str, false, false); $vars['author'] = SafeDB($down['author'], 200, str); $vars['homepage'] = SafeDB($down['author_site'], 250, str); $vars['homepage_url'] = UrlRender(SafeDB($down['author_site'], 250, str)); $vars['mail'] = SafeDB($down['author_email'], 50, str); $vars['date'] = TimeRender($down['public']); $vars['hits'] = SafeDB($down['hits'], 11, int); $vars['version'] = SafeDB($down['file_version'], 250, str); $vars['size'] = FormatFileSize(SafeDB($down['size'], 11, real), SafeDB($down['size_type'], 1, str)); $vars['filetype'] = IndexDownloadsGetFileType(SafeDB($down['url'], 250, str)); $vars['addvote_url'] = "index.php?name=downloads&op=addvote&file={$id}"; System::site()->DataAdd($vdata, '0', 'Ваша оценка'); System::site()->DataAdd($vdata, '1', 'Очень плохо'); System::site()->DataAdd($vdata, '2', 'Плохо'); System::site()->DataAdd($vdata, '3', 'Средне'); System::site()->DataAdd($vdata, '4', 'Хорошо'); System::site()->DataAdd($vdata, '5', 'Отлично'); $vars['votes'] = System::site()->Select('vote', $vdata); $vars['addvotesubm'] = System::site()->Submit('Оценить файл'); $vars['allow_votes'] = SafeDB($down['allow_votes'], 1, bool); if ($down['image'] != '') { $vars['image'] = RealPath2(System::config('downloads/images_dir') . SafeDB($down['image'], 255, str)); $vars['thumb_image'] = RealPath2(System::config('downloads/images_dir') . 'thumbs/' . SafeDB($down['image'], 255, str)); } else { $vars['image'] = false; } //Выводим rating $vars['rating_num_votes'] = SafeDB($down['votes_amount'], 11, int); $vars['rating_image'] = GetRatingImage(SafeDB($down['votes_amount'], 11, int), SafeDB($down['votes'], 11, int)); $rating = $vars['rating_image']; if ($rating == '' && SafeDB($down['allow_votes'], 1, bool)) { // allow_rating $rating = 'Нет оценки'; } elseif (SafeDB($down['allow_votes'], 1, bool)) { $rating = '<img src="' . $rating . '" /> (Оценок: ' . SafeDB($down['votes_amount'], 11, int) . ')'; } else { $rating = ' - '; } $vars['rating'] = $rating; // if (!SafeDB($down['allow_comments'], 1, bool)) { // allow coments $vars['comments'] = ' - '; } else { $vars['comments'] = SafeDB($down['comments_counter'], 11, int); } System::site()->AddBlock('download', true, false, 'dl'); System::site()->Blocks['download']['vars'] = $vars; }
function AdminUpdateApply() { global $updates_folder, $autoupdate_to; // Распаковываем архив, показываем сообщение, что обновление прошло успешно. $update_file = RealPath2($updates_folder . $_GET['file']); if (!is_file($update_file)) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Файл обновления не найден.'); return; } $zip = new ZipArchive(); $zip->open($update_file); $metadata = JsonDecode($zip->getFromName('metadata')); if (!isset($metadata) || !isset($metadata['product']) || $metadata['product'] != CMS_UPDATE_PRODUCT || !isset($metadata['type']) || $metadata['type'] != 'update' || !isset($metadata['from_version']) || $metadata['from_version'] != CMS_VERSION || !isset($metadata['to_version']) || !isset($metadata['changelog'])) { System::admin()->AddCenterBox('Ошибка'); System::admin()->HighlightError('Файл не является файлом обновления или не подходит к вашей версии системы.'); return; } $errors = array(); $numFiles = $zip->numFiles; for ($i = 0; $i < $numFiles; $i++) { $fn = $zip->getNameIndex($i); if ($fn == 'metadata') { continue; } if (substr($fn, -1) != '/') { // Файл $content = $zip->getFromIndex($i); if (is_file($fn)) { $r = file_put_contents($fn, $content); if ($r === false) { $errors[] = 'Не удалось обновить файл ' . $r; } } else { $r = file_put_contents($fn, $content); if ($r !== false) { chmod($fn, 0666); } else { $errors[] = 'Не удалось создать файл ' . $r; } } } else { // Папка if (!is_dir($fn)) { $r = MkDirRecursive($fn); if ($r === false) { $errors[] = 'Не удалось создать папку ' . $r; } } } } $zip->close(); if (count($errors) == 0) { // Автообновление $autoupdate_to = $metadata['to_version']; Audit('Обновление системы: Запуск обновления системы до версии ' . $autoupdate_to); include 'config/autoupdate.php'; // Очистка кэша System::cache()->ClearAll(); System::admin()->AddCenterBox('Обновление системы'); System::admin()->Highlight('Обновление прошло успешно, система обновлена до версии ' . SafeDB($metadata['to_version'], 20, str) . '.'); Audit('Обновление системы: Успешное завершение обновления, система была обновлена до версии "' . $autoupdate_to . '"'); } else { System::admin()->AddCenterBox('При обновлении произошли ошибки'); System::admin()->HighlightError(implode("<br>\n", $errors)); } }
function RenderArticle(&$art) { $vars = array(); $art_id = SafeDB($art['id'], 11, int); $cat_id = SafeDB($art['cat_id'], 11, int); $func = IndexArticlesFunc($art_id); $vars['title'] = SafeDB($art['title'], 250, str) . (System::user()->isAdmin() ? $func : ''); $vars['cat'] = IndexArticlesGetTree()->IdCats[$cat_id]['title']; $vars['catlink'] = Ufu("index.php?name=articles&cat={$cat_id}", 'articles/{cat}/'); if ($art['image'] != '') { $vars['image'] = RealPath2(System::config('articles/images_dir') . SafeDB($art['image'], 255, str)); $vars['thumb_image'] = RealPath2(System::config('articles/images_dir') . 'thumbs/' . SafeDB($art['image'], 255, str)); } else { $vars['image'] = false; } if ($art['auto_br_desc'] == '1') { $vars['description'] = nl2br(SafeDB($art['description'], 0, str, false, false, false)); } else { $vars['description'] = SafeDB($art['description'], 0, str, false, false, false); } $vars['lauthor'] = 'Автор'; $vars['author'] = SafeDB($art['author'], 200, str); $vars['lemail'] = 'E-mail'; $vars['email'] = SafeDB($art['email'], 50, str); $vars['lurl'] = 'Источник'; $vars['site'] = SafeDB($art['www'], 250, str); $vars['site_url'] = UrlRender(SafeDB($art['www'], 250, str)); $vars['lpublic'] = 'Опубликована'; $vars['public'] = TimeRender(SafeDB($art['public'], 11, int), false); $vars['link2'] = Ufu("index.php?name=articles&op=read&art={$art_id}&cat={$cat_id}", 'articles/{cat}/{art}/'); $vars['link'] = '<a href="' . $vars['link2'] . '">Читать...</a>'; $vars['lhits'] = 'Просмотров'; $vars['hits'] = SafeDB($art['hits'], 11, int); $vars['lcomments'] = 'Комментарий'; $vars['comments'] = SafeDB($art['comments_counter'], 11, int); //Выводим rating $rating = GetRatingImage(SafeDB($art['num_votes'], 11, int), SafeDB($art['all_votes'], 11, int)); $vars['rating_image'] = $rating; $vars['alloy_rating'] = SafeDB($art['allow_votes'], 1, bool); $vars['disable_rating'] = !$vars['alloy_rating']; $vars['lrating'] = 'Оценка'; $vars['rating_num_votes'] = SafeDB($art['num_votes'], 11, int); // $vars['form'] = SafeDB($art['form'], 11, int); $vars['product_id'] = SafeDB($art['product_id'], 255, str); $vars['form_url'] = false; if ($vars['form'] != 0 && $vars['product_id'] != '') { $vars['form_url'] = 'index.php?name=forms&form=' . $vars['form'] . '&f_product_id=' . rawurlencode($vars['product_id']); } System::site()->AddSubBlock('articles', true, $vars); }
public function DelFolder($path) { $result = array(); if (RealPath2($path) == '') { $result['error'] = 'Нельзя удалить корневую папку!'; return JsonEncode($result); } $path = RealPath2(DIR_FILES . '/' . $path); if (!is_dir($path)) { $result['error'] = 'Папка не существует'; return JsonEncode($result); } if (RmDirRecursive($path)) { $result['ok'] = true; } else { $result['error'] = 'Ошибка при удалении папки'; } return JsonEncode($result); }
/** * Подключает группу плагинов * @param $group группа * @param string $function подгруппа * @param bool $return возвратить пути к папкам плагинов вместо автоматического подкочения * @return array */ function IncludePluginsGroup($group, $function = '', $return = false) { global $config, $db, $user; // В поддержку старых плагинов global $include_plugin_path; // эта переменная будет доступна из плагина $plugins = PluginsGetInstalled(); $plug_dir = System::config('plug_dir'); $result = array(); foreach ($plugins as $plugin) { if ($group == $plugin['group'] && ($function == '' || $function == $plugin['function'])) { $include_plugin_path = RealPath2($plug_dir . $group . '/' . $plugin['name']) . '/'; if ($return) { $result[] = $include_plugin_path; } else { include $include_plugin_path . 'index.php'; } } } return $result; }
function AdminDownloadsDeleteFile() { if (!System::user()->CheckAccess2('downloads', 'edit_files')) { System::admin()->AccessDenied(); } if (IsAjax() || isset($_GET['ok']) && SafeEnv($_GET['ok'], 1, int) == '1') { $id = SafeEnv($_GET['id'], 11, int); $r = System::database()->Select('downloads', "`id`='{$id}'"); AdminDownloadsGetTree()->CalcFileCounter(SafeDB($r[0]['category'], 11, int), false); if (is_file(RealPath2($r[0]['url']))) { unlink(RealPath2($r[0]['url'])); } System::database()->Delete('downloads', "`id`='{$id}'"); System::database()->Delete('downloads_comments', "`object_id`='{$id}'"); Audit('Архив файлов: Удаление файла "' . $r['title'] . '"'); GoRefererUrl($_REQUEST['back']); } else { System::admin()->AddCenterBox('Удаление файла'); System::database()->Select('downloads', "`id`='" . SafeEnv($_REQUEST['id'], 11, int) . "'"); $file = System::database()->FetchRow(); $id = SafeDB($_REQUEST['id'], 11, int); $back = SafeDB($_REQUEST['back'], 255, str); System::admin()->HighlightConfirmNoAjax('Удалить файл "' . SafeDB($file['title'], 255, str) . '"?', ADMIN_FILE . '?exe=downloads&a=deletefile&id=' . $id . '&ok=1&back=' . $back); } }
/** * Сохраняет данные формы сгенерированной фукцией 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('Ваш профиль сохранён, обновите страницу.'); } } }
<?php /* * LinkorCMS 1.4 * © 2012 LinkorCMS Development Group */ if (!defined('VALID_RUN')) { header("HTTP/1.1 404 Not Found"); exit; } $type = SafeDB($_GET['mod'], 255, str); $type = RealPath2($type); $type = PLUG_DIR . 'plugins/' . $type . '/connector.php'; if (!is_file($type) || !file_exists($type)) { echo 'Тип не зарегистрирован (' . $type . ')'; return; } //Подключаем коннектор require $type;
/** * Выводит форму добавления или редактирования комментария. * @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; }
function AdminFormsDeletePost() { $file_save_dir = 'uploads/forms'; if (!isset($_GET['pid']) || !isset($_GET['id'])) { GO(ADMIN_FILE . '?exe=forms'); } $post_id = SafeEnv($_GET['pid'], 11, int); $form_id = SafeEnv($_GET['id'], 11, int); System::database()->Select('forms_data', "`id`='{$post_id}'"); $forms_data = System::database()->FetchRow(); /* * Обновляем счетчики ответов для формы. */ System::database()->Select('forms', "`id`='{$form_id}'"); $form = System::database()->FetchRow(); if ($forms_data['moderated'] == '1') { $value1 = (int) $form['new_answ']; } else { $value1 = (int) $form['new_answ'] - 1; } $value2 = (int) $form['answ'] - 1; System::database()->Update('forms', "`new_answ`='{$value1}',`answ`='{$value2}'", "`id`='{$form_id}'"); /* * Удаляем прикрепленные файлы. */ $data_rows = unserialize($forms_data['data']); foreach ($data_rows as $row) { if ($row[2] == 'file') { unlink(RealPath2($file_save_dir . '/' . $row[1])); } } /* * Удаление записи. */ System::database()->Delete('forms_data', "`id`='{$post_id}'"); Audit('Web-формы: Удаление данных формы "' . $form['hname'] . '"'); GO(ADMIN_FILE . '?exe=forms' . (isset($_GET['new']) ? '&a=newposts&id=' . SafeEnv($_GET['id'], 11, int) : '&a=posts&id=' . SafeEnv($_GET['id'], 11, int))); }
function LoadImage($PostName, $Dir, $ThumbsDir, $MaxWidth, $MaxHeight, $Default, &$Error, $CreateThumbs = true, $OriginalOptimization = false, $OriginalMaxWidth = 800, $OriginalMaxHeight = 600) { $Error = false; if ($Default == 'no_image/no_image.png') { $Default = ''; } $Dir = RealPath2($Dir); $ThumbsDir = RealPath2($ThumbsDir); $alloy_mime = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'application/octet-stream'); $alloy_exts = array('.gif', '.jpg', '.jpeg', '.png'); if (isset($_FILES[$PostName]) && is_file($_FILES[$PostName]['tmp_name'])) { if (in_array($_FILES[$PostName]['type'], $alloy_mime) && in_array(strtolower(GetFileExt($_FILES[$PostName]['name'])), $alloy_exts)) { $file_name = Translit4Url($_FILES[$PostName]['name']); if (!is_dir($Dir)) { mkdir($Dir, 0777); } $ext = GetFileExt($file_name); $name = GetFileName($file_name, true); $i = 1; while (is_file($Dir . '/' . $file_name)) { $i++; $file_name = $name . '_' . $i . $ext; } $FileName = $Dir . '/' . $file_name; $ThumbFileName = $ThumbsDir . '/' . $file_name; if (!$OriginalOptimization) { copy($_FILES[$PostName]['tmp_name'], $FileName); } else { CreateThumb($_FILES[$PostName]['tmp_name'], $FileName, $OriginalMaxWidth, $OriginalMaxHeight); } if ($CreateThumbs) { if (!is_dir($ThumbsDir)) { mkdir($ThumbsDir, 0777); } CreateThumb($FileName, $ThumbFileName, $MaxWidth, $MaxHeight); } $result = $file_name; } else { $Error = true; return RealPath2(SafeEnv($Default, 255, str)); } } else { $result = RealPath2(SafeEnv($Default, 255, str)); } return $result; }
/** * Выводит все блоки, зарегистрированные в базе данных */ public function ViewBlocks() { global $site, $db, $user, $config, $userAccess, $userAuth; // для совместимости, НЕ УДАЛЯТЬ $blocks = System::database()->Select('blocks', GetWhereByAccess('view', "`enabled`='1'"), null, 'place'); foreach ($blocks as $block) { $block_config = $block['config']; $area = SafeDB($block['position'], 1, str); $title = SafeDB($block['title'], 255, str); $enabled = SafeDB($block['enabled'], 1, int); $modified = SafeDB($block['modified'], 11, int); $cache = SafeDB($block['cache'], 0, str, false, false); $vars = array(); $tempvars = array(); $childs = array(); if ($enabled && VisibilityConditionsCheck($block['showin'], $block['showin_uri'])) { include RealPath2(System::config('blocks_dir') . $block['type']) . '/index.php'; // => $vars $this->AddUserBlock($area, $vars, $tempvars, $childs, SafeDB(RealPath2($block['template']), 255, str)); } } }
define('MOD_ICON', is_file(MOD_DIR . 'icon.png') ? MOD_DIR . 'icon.png' : 'images/application.png'); $module = System::database()->SelectOne('modules', "`enabled`='1' and `folder`='" . SafeEnv($ModuleName, 255, str) . "'"); if ($module === false) { Error404(); } // Проверка на доступ if (!AccessIsResolved($module['view'], System::user()->AccessLevel()) || $module['system'] == '1' && !System::user()->isSuperUser()) { Header('HTTP/1.1 403 Forbidden'); System::site()->InitPage(); System::site()->AddTextBox('Ошибка', '<p align="center">Доступ запрещен.</p>'); System::site()->TEcho(); exit; } define('MOD_NAME', SafeDB($module['folder'], 255, str)); define('MOD_TITLE', SafeDB($module['name'], 255, str)); define('MOD_THEME', RealPath2(SafeDB($module['theme'], 255, str))); // Инициализация модуля $valid_init = file_exists(MOD_INIT); if ($valid_init) { include MOD_INIT; if (function_exists('mod_initialization')) { mod_initialization(); } } if (!$system['no_templates']) { // Шаблонизатор System::site()->InitPage(); } if (!$system['no_messages']) { // Сообщения include_once System::config('inc_dir') . 'messages.inc.php';
<?php /* * LinkorCMS 1.4 * © 2012 LinkorCMS Development Group */ // Восстановление БД из резервной копии $name = RealPath2(System::config('backup_dir') . $_GET['name']); if (isset($_GET['table'])) { $table = $_GET['table']; System::admin()->AddCenterBox('Восстановление таблицы "' . $table . '"'); $table = System::database()->Prefix() . $table; } else { $table = ''; System::admin()->AddCenterBox('Восстановление базы данных'); } $restore_r = System::database()->RestoreBackupFile($name, $table); if ($restore_r == 3) { System::admin()->HighlightError('Ошибка. Неверный формат файла, либо это бекап другого типа Базы данных.'); } elseif ($restore_r == 2) { System::admin()->Highlight('Произошли ошибки при восстановлении некоторых таблиц.'); } else { if ($table == '') { System::admin()->Highlight('База данных успешно восстановлена из резервной копии.'); Audit('Управление БД: База данных восстановлена из резервной копии "' . $name . '"'); } else { System::admin()->Highlight('Таблица "' . $table . '" успешно восстановлена из резервной копии.'); Audit('Управление БД: Таблица "' . $table . '" восстановлена из резервной копии "' . $name . '"'); } }
function AdminSmiliesDeleteFile() { global $smilies_dir, $mod; $name = $_GET['name']; unlink(RealPath2($smilies_dir . $name)); Audit('Смайлики: Удаление файла смайлика ' . $smilies_dir . $name); GO($mod . '&a=auto'); }
function AdminExtensionsUninstall() { global $db, $config, $user; // Для старых модулей $ext_type = $_GET['type']; $folder = $_GET['name']; if (isset($_GET['group'])) { $group = $_GET['group']; } switch ($ext_type) { case EXT_MODULE: $mod_path = RealPath2(System::config('mod_dir') . $folder); $info = ExtLoadInfo($mod_path); if (isset($_POST['ok']) || isset($info['1.3'])) { $uninstall = $mod_path . '/uninstall.php'; if (file_exists($uninstall)) { $delete_tables = isset($_POST['delete_tables']); // Могут быть использованы в uninstall.php $delete_files = isset($_POST['delete_files']); include $uninstall; System::cache()->Clear('config'); if (isset($info['1.3'])) { // Удаляем пункт меню $folder = SafeEnv($folder, 255, str); AdminMenuDeleteModule($folder); } } Audit('Расширения: Удаление модуля "' . $folder . '"'); GO(ADMIN_FILE . '?exe=extensions#tabs-1'); } else { $folder = SafeEnv($folder, 255, str); System::database()->Select('modules', "`folder`='{$folder}'"); if (System::database()->NumRows() == 0) { AddTextBox('Ошибка', 'Модуль не установлен.'); return; } $mod = System::database()->FetchRow(); $name = SafeDB($mod['name'], 255, str); $text = ''; $text .= '<form method="post">'; $text .= '<div style="padding: 10px 0 10px 25px;">'; $text .= '<div style="padding-bottom: 10px">'; $text .= '<label><input type="checkbox" name="delete_tables"> Удалить таблицы БД</label><br>'; $text .= '<label><input type="checkbox" name="delete_files"> Удалить файлы модуля</label>'; $text .= '</div>'; $text .= System::admin()->Hidden('ok', '1'); $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>'; $text .= '</div></form>'; AddTextBox('Удаление модуля "' . $name . '"', $text); } break; case EXT_BLOCK: $mod_path = RealPath2(System::config('blocks_dir') . $folder); if (isset($_POST['ok'])) { $uninstall = $mod_path . '/uninstall.php'; if (file_exists($uninstall)) { $delete_tables = isset($_POST['delete_tables']); $delete_files = isset($_POST['delete_files']); include $uninstall; System::cache()->Clear('config'); } Audit('Удаление блока "' . $folder . '"'); GO(ADMIN_FILE . '?exe=extensions#tabs-2'); } else { $folder = SafeEnv($folder, 255, str); System::database()->Select('block_types', "`folder`='{$folder}'"); if (System::database()->NumRows() == 0) { AddTextBox('Ошибка', 'Блок не установлен.'); return; } $mod = System::database()->FetchRow(); $name = SafeDB($mod['name'], 255, str); $text = ''; $text .= '<form method="post">'; $text .= '<div style="padding: 10px 0 10px 25px;">'; $text .= '<div style="padding-bottom: 10px">'; $text .= '<label><input type="checkbox" name="delete_tables"> Удалить таблицы БД</label><br>'; $text .= '<label><input type="checkbox" name="delete_files"> Удалить файлы</label>'; $text .= '</div>'; $text .= System::admin()->Hidden('ok', '1'); $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>'; $text .= '</div></form>'; AddTextBox('Удаление блока "' . $name . '"', $text); } break; case EXT_PLUGIN: if (isset($_GET['group'])) { $group = $_GET['group'] . '/'; $groupenv = SafeEnv($_GET['group'], 255, str); } else { $group = ''; $groupenv = ''; } $mod_path = RealPath2(System::config('plug_dir') . $group . $folder); $info = ExtLoadInfo($mod_path); if (isset($_POST['ok']) || isset($info['1.3'])) { $uninstall = $mod_path . '/uninstall.php'; if (file_exists($uninstall)) { $delete_tables = isset($_POST['delete_tables']); $delete_files = isset($_POST['delete_files']); include $uninstall; System::cache()->Clear('config'); // FIXME: plugin config } if (isset($info['1.3'])) { $folder = SafeEnv($folder, 255, str); System::database()->Delete('plugins', "`name`='{$folder}' and `group`='{$groupenv}'"); } PluginsClearCache(); Audit('Расширения: Удаление плагина "' . $folder . '"'); GO(ADMIN_FILE . '?exe=extensions#tabs-3'); } else { $folder = SafeEnv($folder, 255, str); System::database()->Select('plugins', "`name`='{$folder}' and `group`='{$groupenv}'"); if (System::database()->NumRows() == 0) { AddTextBox('Ошибка', 'Плагин не установлен.'); return; } $mod = System::database()->FetchRow(); $name = SafeDB($info['name'], 255, str); $text = ''; $text .= '<form method="post">'; $text .= '<div style="padding: 10px 0 10px 25px;">'; $text .= '<div style="padding-bottom: 10px">'; $text .= '<label><input type="checkbox" name="delete_tables"> Удалить таблицы БД</label><br>'; $text .= '<label><input type="checkbox" name="delete_files"> Удалить файлы</label>'; $text .= '</div>'; $text .= System::admin()->Hidden('ok', '1'); $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>'; $text .= '</div></form>'; AddTextBox('Удаление плагина "' . $name . '"', $text); } break; case EXT_TEMPLATE: $mod_path = RealPath2(System::config('tpl_dir') . $folder); if (isset($_POST['ok'])) { ExtRemoveTemplate($folder, isset($_POST['delete_files'])); Audit('Расширения: Удаление шаблона "' . $folder . '"'); GO(ADMIN_FILE . '?exe=extensions#tabs-4'); } else { $info = ExtLoadInfo($mod_path); if ($info === false) { $info = array('name' => $folder, 'description' => '', 'author' => '', 'site' => '', 'version' => '1.0', 'admin' => false); } $name = SafeDB($info['name'], 255, str); $text = ''; $text .= '<form method="post">'; $text .= '<div style="padding: 10px 0 10px 25px;">'; $text .= '<div style="padding-bottom: 10px">'; $text .= '<label><input type="checkbox" name="delete_files"> Удалить файлы</label>'; $text .= '</div>'; $text .= System::admin()->Hidden('ok', '1'); $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>'; $text .= '</div></form>'; AddTextBox('Удаление шаблона "' . $name . '"', $text); } break; } }
$pcache_name = 'plugins_auto_main'; } elseif (defined('ADMIN_SCRIPT')) { $pcache_name = 'plugins_auto_admin'; } if (System::cache()->HasCache(system_cache, $pcache_name)) { $plugins = System::cache()->Get(system_cache, $pcache_name); } else { if (defined('MAIN_SCRIPT')) { $q = "(`type`='1' or `type`='3') and `enabled`='1'"; } elseif (defined('ADMIN_SCRIPT')) { $q = "(`type`='1' or `type`='2') and `enabled`='1'"; } $plugins = System::database()->Select('plugins', $q); System::cache()->Write(system_cache, $pcache_name, $plugins); } foreach ($plugins as $plugin) { $PluginName = RealPath2($config['plug_dir'] . $plugin['name'] . '/index.php'); if (is_file($PluginName)) { include $PluginName; } else { ExtRemovePlugin($plugin['group'], $plugin['name']); } } } } } elseif (!defined('SETUP_SCRIPT') && !defined('DEV_SCRIPT')) { // Система не установлена Header("Location: setup.php"); exit; } define('INIT_CORE_END', microtime(true));