mirror of
https://github.com/UnickSoft/graphonline.git
synced 2026-04-22 16:09:58 +00:00
first commit
This commit is contained in:
4
core/config/admin_menu.php
Executable file
4
core/config/admin_menu.php
Executable file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
|
||||
$g_config['admin_menu'] = array();
|
||||
?>
|
||||
11
core/config/admin_sector.php
Executable file
11
core/config/admin_sector.php
Executable file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
$g_config['admin_sector'] = array();
|
||||
|
||||
$g_config['admin_sector']['salt'] = "sal"; // Соль для хранения паролей в базе. По сути любой набор символов
|
||||
$g_config['admin_sector']['after_login_page'] = 'admin/home'; // Страница административного раздела, на которую мы попадём после авторизации
|
||||
$g_config['admin_sector']['after_logout_page'] = 'admin/login'; // Страница на которую мы попадем после выхода из админки
|
||||
|
||||
$g_config['admin_sector']['def_login'] = 'root'; // Логин для входа в административный раздел
|
||||
$g_config['admin_sector']['def_pwd'] = 'rootPass'; // Пароль для входа в административный раздел
|
||||
?>
|
||||
12
core/config/ckeditor4.php
Executable file
12
core/config/ckeditor4.php
Executable file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
if (is_file(BASEPATH . 'core/config/browserdatacache.php'))
|
||||
{
|
||||
require_once BASEPATH . 'core/config/browserdatacache.php';
|
||||
$g_config['browserdatacache_allow_dirs'][] = BASEPATH . 'upl/ckeditor4_files/';
|
||||
//$g_config['browserdatacache_allow_dirs'][] = BASEPATH . 'lib/ckeditor4/';
|
||||
}
|
||||
|
||||
$g_config['ckeditor4']['resize_down_width'] = 1600;
|
||||
$g_config['ckeditor4']['resize_down_height'] = 1200;
|
||||
?>
|
||||
28
core/config/db.php
Executable file
28
core/config/db.php
Executable file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Конфиг работы с БД
|
||||
*
|
||||
* @author Zmi
|
||||
*/
|
||||
|
||||
|
||||
$g_config['dbSimple'] = array();
|
||||
$g_config['dbSimple']['logDbError'] = true;
|
||||
$g_config['dbSimple']['dbLogFile'] = BASEPATH . 'tmp/log_db.txt';
|
||||
|
||||
// Имена БД объектов
|
||||
$g_config['dbSimple']['databases'] = array
|
||||
(
|
||||
// Пример: (обращаться потом можно будет к $g_databases->db)
|
||||
// Раскоментируйте следующий блок, если собираетесь использовать базы данных в своём проекте
|
||||
/*'db' => array
|
||||
(
|
||||
'dsn' => DEBUG_MODE ?
|
||||
'mysql://root:@localhost/DataBaseName?charset=UTF8' : // Если локалка то локальная БД
|
||||
'mysql://User:Pwd@Host/DataBaseName?charset=UTF8', // Если сервер то настоящая БД
|
||||
'pCacheFunc' => '' // Указатель на функцию кеширования данных. Для кеширования в запросах пишите перед текстом запроса "-- CACHE: 10m\n" (10m - ttl кеша)
|
||||
)
|
||||
*/
|
||||
);
|
||||
?>
|
||||
50
core/config/file_uploader.php
Executable file
50
core/config/file_uploader.php
Executable file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Дефолтный конфиг файла
|
||||
*
|
||||
* @author Zmi и Guul
|
||||
*/
|
||||
|
||||
|
||||
$g_config['uploader']['default_config'] = array
|
||||
(
|
||||
// Путь до папки, куда будет загружен файл
|
||||
'upload_path' => BASEPATH . 'upl/files/',
|
||||
|
||||
// Типы MIME, описывающие типы файлов, разрешенных для загрузки
|
||||
'allowed_types' => 'txt|zip|doc|docx|pdf|bmp|gif|jpeg|jpg|png|rar|tiff',
|
||||
|
||||
// Максимальный размер файла (в килобайтах). Если ограничения нет, то пишем 0
|
||||
'max_size' => 8000,
|
||||
|
||||
// Если TRUE, и в папке уже есть файл с тем же именем, иначе к имени заливаемого файла добавится порядковый номер
|
||||
'overwrite' => false,
|
||||
|
||||
// Если TRUE, то имя файла преобразуется в случайным образом сгенерированную строку
|
||||
'encrypt_name' => true,
|
||||
|
||||
// Если TRUE, то все пробелы в имени файла будут преобразованы в знак подчеркивания
|
||||
'remove_spaces' => true,
|
||||
|
||||
// Максимальная ширина картинки в пикселях. 0 — не ограниченно
|
||||
'max_width' => 5000,
|
||||
|
||||
// Максимальная высота картинки в пикселях. 0 — не ограниченно.
|
||||
'max_height' => 5000,
|
||||
|
||||
// Ширина до которой нужно уменьшить загруженную картинку. 0 — не уменьшать
|
||||
'resize_down_width' => 1800,
|
||||
|
||||
// Высота до которой нужно уменьшить загруженную картинку. 0 — не уменьшать
|
||||
'resize_down_height' => 1800,
|
||||
|
||||
// Cписок thumb-ов который нужно сгенерировать.
|
||||
'thumbs' => array(
|
||||
// path можно не указывать. Тогда он: $config['upload_path'] . $t['width'] . '_' . $t['height'] . '/'
|
||||
|
||||
// array('width' => 50, 'height' => 50, 'path' => BASEPATH . 'upl/files/50_50/'),
|
||||
// array('width' => 100, 'height' => 100, 'path' => BASEPATH . 'upl/files/100_100/')
|
||||
)
|
||||
);
|
||||
?>
|
||||
82
core/config/main.php
Executable file
82
core/config/main.php
Executable file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Базовая конфигурация системы
|
||||
*
|
||||
* @author Zmi
|
||||
*/
|
||||
|
||||
|
||||
define('SITE_ROOT', '/'); // Путь к корню сайта
|
||||
define('SITE_IN_DIR', ''); // Если сайт работает в каталоге напишите здесь каталог пример "cabinet" или "book/php"
|
||||
define('DOMAIN_COOKIE', '');
|
||||
|
||||
// Массив языков сайта
|
||||
define('DEF_LANG', 'ru');
|
||||
$g_arrLangs = array(
|
||||
'en' => array('name' => 'English'),
|
||||
'ru' => array('name' => 'Русский')
|
||||
);
|
||||
|
||||
$g_config = array();
|
||||
$g_config['mainTpl'] = 'main_tpl';
|
||||
$g_config['charset'] = 'utf-8';
|
||||
$g_config['defaultComponent'] = 'home';
|
||||
|
||||
if (!defined("E_DEPRECATED"))
|
||||
{
|
||||
define("E_DEPRECATED", 8192);
|
||||
}
|
||||
$g_config['phpIni'] = array
|
||||
(
|
||||
'error_reporting' => E_ALL ^ E_DEPRECATED, // Выдавать все ошибки за исключением нотайсов об устаревшом коде
|
||||
//'display_errors' => DEBUG_MODE, // Выводить ли ошибки в браузер
|
||||
'memory_limit' => '10M', // Максимальное коливество памяти на выполнение скрипта
|
||||
'max_execution_time' => '15', // Максимальное время выполнения скрипта
|
||||
'max_input_time' => '15', // Время в течении которого скрипту разрешено получать данные
|
||||
// "upload_max_filesize" и "post_max_size" - Для изменения размера загружаемыз данных (файлов или POST) но задавать нужно через "php.ini | .htaccess | httpd.conf"
|
||||
);
|
||||
|
||||
$g_config['logPath'] = BASEPATH . 'tmp/log.txt'; // Стандартный лог движка (ф-я ToLog())
|
||||
$g_config['useDebugErrorHook'] = false; // Использовать ли DebugErrorHook для перехвата ошибок
|
||||
$g_config['logErrors'] = array
|
||||
(
|
||||
'repeatTmp' => BASEPATH . 'tmp/log/unRepeatErrTmp',
|
||||
'logFile' => BASEPATH . 'tmp/log/log.txt',
|
||||
'emailTimeRepeat' => 3 * 60, // Письмо каждые 3 минуты
|
||||
'email' => 'admin@unick-soft.ru', // На этот адрес будут присылаться сообщения об ошибках
|
||||
);
|
||||
|
||||
$g_config['extrapacker'] = array();
|
||||
$g_config['extrapacker']['dir'] = 'auto_merge_css_js';
|
||||
$g_config['extrapacker']['packHtml'] = false;
|
||||
$g_config['extrapacker']['packCss'] = true;
|
||||
$g_config['extrapacker']['packJs'] = false;
|
||||
$g_config['extrapacker']['arrExeptions_js'] = array();
|
||||
$g_config['extrapacker']['arrExeptionsNotAdd_js'] = array();
|
||||
$g_config['extrapacker']['arrExeptions_css'] = array();
|
||||
$g_config['extrapacker']['arrExeptionsNotAdd_css'] = array();
|
||||
$g_config['extrapacker']['buffering'] = true; // Включен ли GZIP для склеиных css/js
|
||||
|
||||
// Загружать запущенный компонент в main_template-е ?
|
||||
$g_config['isLoadInMainTpl'] = true;
|
||||
|
||||
$g_config['useModRewrite'] = is_readable(BASEPATH . '.htaccess');
|
||||
|
||||
$g_config['startExecTime'] = microtime(true);
|
||||
|
||||
// Получать ли тайтл автоматически из h1 если не было установлено до этого
|
||||
$g_config['autoGetTitle'] = true;
|
||||
|
||||
// Список ф-ий обрабатывающих вывод контент перед выводом в браузер
|
||||
$g_config['prepareFunctions'] = array
|
||||
(
|
||||
'_PrepareContent' // Стандартная ф-я редактирования вывода (объединяет head-ы в один и склеивает css с js)
|
||||
);
|
||||
// Graph save path.
|
||||
$g_config['graphSavePath'] = "./tmp/saved/";
|
||||
$g_config['graphExamplesFile'] = "samples.cvs";
|
||||
// Donate files
|
||||
$g_config['donateTotal'] = "./tmp/donate/total.txt";
|
||||
$g_config['donateTransactions'] = "./tmp/donate/transactions.txt";
|
||||
?>
|
||||
50
core/config/page_editor.php
Executable file
50
core/config/page_editor.php
Executable file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
//** Инициализация параметов
|
||||
|
||||
require_once BASEPATH . 'core/config/main.php'; // Чтобы использовать $g_config['defaultComponent']
|
||||
$g_config['page_editor'] = array();
|
||||
|
||||
// Какие страницы не показывать в списке страниц
|
||||
$g_config['page_editor']['exceptions'] = array();
|
||||
$g_config['page_editor']['exceptions'][] = 'admin/';
|
||||
|
||||
// Для каких страниц не показывать SEO параметры
|
||||
$g_config['page_editor']['seo_exceptions'] = array();
|
||||
$g_config['page_editor']['seo_exceptions'][] = 'dev/';
|
||||
$g_config['page_editor']['seo_exceptions'][] = 'main_tpl/';
|
||||
$g_config['page_editor']['seo_exceptions'][] = 'main_tpl.php';
|
||||
|
||||
// Нужно ли делать backup-ы страниц
|
||||
// Backup-ы сохраняются по адресу lang/backup/[язык]/[путь_к_файлу]/[имя_файла].[дата_сохранения].php
|
||||
$g_config['page_editor']['with_backup'] = true;
|
||||
|
||||
// Дополнительная информация о некоторых страницах
|
||||
$g_config['page_editor']['labels'] = array();
|
||||
$g_config['page_editor']['labels']["autoload/"] = "Файлы в этой папке задают глобальные параметры";
|
||||
$g_config['page_editor']['labels']["autoload/main.php"] = "Файл для задания глобальных SEO параметров";
|
||||
$g_config['page_editor']['labels']["main_tpl.php"] = "Главный шаблон сайта";
|
||||
$g_config['page_editor']['labels']["404.php"] = "Страница 404 Ошибки (Страница не найдена)";
|
||||
$g_config['page_editor']['labels']["_500.php"] = "Страница 500 Ошибки (Внутренняя ошибки сервера)";
|
||||
$g_config['page_editor']['labels'][$g_config['defaultComponent']] = "Главная страница сайта";
|
||||
|
||||
//** Инициализация меню
|
||||
|
||||
require_once BASEPATH . 'core/config/admin_menu.php';
|
||||
|
||||
GetQuery(); // Чтобы фунция SiteRoot корректно заработала нужно проинициализировать LANG в функции GetQuery
|
||||
$menu = array
|
||||
(
|
||||
'link' => 'javascript:void(0)',
|
||||
'name' => 'Страницы',
|
||||
'label' => 'Редактирование страниц',
|
||||
'css' => '',
|
||||
'list' => array
|
||||
(
|
||||
array('link' => SiteRoot('admin/page_editor'), 'name' => 'Все страницы', 'label' => 'Смотреть все страницы'),
|
||||
array('link' => SiteRoot('admin/page_editor_add'), 'name' => 'Добавить', 'label' => 'Добавить новую страницу')
|
||||
)
|
||||
);
|
||||
|
||||
$g_config['admin_menu'][] = $menu;
|
||||
?>
|
||||
22
core/core.php
Executable file
22
core/core.php
Executable file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Ининциализатор системы
|
||||
*
|
||||
* @author Zmi and GYL
|
||||
*/
|
||||
|
||||
|
||||
// Подключаем все файлы которые есть в папках core/{func|config|init}
|
||||
foreach (array(BASEPATH . 'core/func/', BASEPATH . 'core/config/', BASEPATH . 'core/init/') as $dir)
|
||||
{
|
||||
$files = array_merge(array($dir . 'main.php'), glob($dir . "*.php"));
|
||||
foreach ($files as $f)
|
||||
{
|
||||
if (is_readable($f))
|
||||
{
|
||||
require_once $f;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
28
core/func/changelang.php
Executable file
28
core/func/changelang.php
Executable file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Фукнция для смены языка на нужный
|
||||
*
|
||||
* @param $lang - Язык на который нужно произвести смену
|
||||
* @param $url - Страница на которой нужно произвести смену
|
||||
*/
|
||||
function ChangeLang($lang, $url)
|
||||
{
|
||||
$url = _StrReplaceFirst("/?q=", "/", $url);
|
||||
|
||||
global $g_arrLangs, $g_config;
|
||||
$lang = in_array($lang, array_keys($g_arrLangs)) ? $lang : LANG;
|
||||
|
||||
$siteRoot = SiteRoot();
|
||||
$uri = _StrReplaceFirst($siteRoot, '', $url);
|
||||
|
||||
$dir = SITE_IN_DIR ? (SITE_IN_DIR . '/') : '';
|
||||
$lang = $lang == DEF_LANG ? '' : ($lang . '/');
|
||||
$ret = $lang || $uri ? "/{$dir}?q={$lang}{$uri}" : $dir;
|
||||
$ret = empty($ret) ? '/' : $ret;
|
||||
|
||||
return $g_config['useModRewrite'] ?
|
||||
_StrReplaceFirst("/?q=", "/", strpos($ret, '?') === false ? _StrReplaceFirst('&', '?', $ret) : $ret) :
|
||||
$ret;
|
||||
}
|
||||
?>
|
||||
113
core/func/ckeditor4.php
Executable file
113
core/func/ckeditor4.php
Executable file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Обработка текста перед сохранением. Действия:
|
||||
*
|
||||
* 1) Преобразовать все внешние img ссылки во внутренние (соответственно скопировав все изображения на сервер)
|
||||
* 2) Удалить лишний мусор, который добавляет CKEditor (например при проверке грамматики).
|
||||
*
|
||||
* @author GYL
|
||||
*/
|
||||
function CKEditor4PreSave($text, $uploadImgs = true, &$uncopiedImgs = array(), $serverName = NULL)
|
||||
{
|
||||
global $g_config;
|
||||
|
||||
// когда включена проверка орфографии ckeditor добавляет в html много мусора (лишние спаны). Эта штука его убирает.
|
||||
$text = preg_replace('/<span data-scayt_word="[^"]+" data-scaytid="[0-9]*">([^<]+)<\/span>/', '$1', $text);
|
||||
$text = preg_replace('/<span data-scaytid="[0-9]*" data-scayt_word="[^"]+">([^<]+)<\/span>/', '$1', $text);
|
||||
|
||||
if (empty($serverName) && isset($_SERVER['SERVER_NAME'])) // на всякий случай преобразуем все ссылки вида http://наш_сайт/img/1.png в /img/1.png
|
||||
{
|
||||
$serverName = $_SERVER['SERVER_NAME'];
|
||||
}
|
||||
else
|
||||
{
|
||||
trigger_error("Invalid server name", E_USER_ERROR);
|
||||
}
|
||||
|
||||
require_once BASEPATH . 'lib/simple_html_dom.php';
|
||||
|
||||
$html = str_get_html($text);
|
||||
|
||||
if ($html == NULL) return "";
|
||||
|
||||
foreach ($html->find("img") as $img)
|
||||
{
|
||||
$img->removeAttribute("data-cke-saved-src");
|
||||
|
||||
$src = $img->src;
|
||||
$alt = $img->alt;
|
||||
$style = $img->style;
|
||||
|
||||
$parsed = parse_url($src);
|
||||
$params = array();
|
||||
|
||||
if (isset($parsed['query']))
|
||||
{
|
||||
foreach (explode('&', $parsed['query']) as $elem)
|
||||
{
|
||||
if (strpos($elem, '=') !== false)
|
||||
{
|
||||
$elem = explode('=', $elem);
|
||||
$params[$elem[0]] = isset($elem[1]) ? $elem[1] : NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
$isLocal = empty($parsed["host"]) || (!empty($parsed["host"]) && $parsed["host"] == $serverName); // если нет имени сервера или оно равно имени нашего сервера
|
||||
|
||||
if ($isLocal && strpos($parsed["path"], "/upl/ckeditor_files/") === 0) // http://oursite.ru/upl/ckeditor_files/abc.jpg -> /upl/ckeditor_files/abc.jpg
|
||||
{
|
||||
$src = "/upl/ckeditor_files/" . basename($src);
|
||||
}
|
||||
else if ($isLocal && !empty($params["file"]) && strpos($parsed["path"], "/dev/ckeditor_preview/") === 0) // http://oursite.ru/dev/ckeditor_preview?file=abc.jpg -> /upl/ckeditor_files/abc.jpg
|
||||
{
|
||||
$src = "/upl/ckeditor_files/" . $params["file"];
|
||||
}
|
||||
else if ($isLocal && !empty($params["file"]) && strpos($params["path"], "dev/ckeditor_preview") === 0) // http://oursite.ru/?q=dev/ckeditor_preview?file=abc.jpg -> /upl/ckeditor_files/abc.jpg
|
||||
{
|
||||
$src = "/upl/ckeditor_files/" . $params["file"];
|
||||
}
|
||||
else if ($uploadImgs && pathinfo($src, PATHINFO_EXTENSION) == "webp" && !function_exists("imagecreatefromwebp")) // small hack
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
else if ($uploadImgs)
|
||||
{
|
||||
$info = @getimagesize($src);
|
||||
$ext = @image_type_to_extension($info[2], false);
|
||||
if (empty($ext)) $ext = @pathinfo(@basename($src), PATHINFO_EXTENSION);
|
||||
|
||||
if (!empty($ext))
|
||||
{
|
||||
$ext = strtolower($ext);
|
||||
$name = md5(uniqid(mt_rand())) . "." . $ext;
|
||||
$path = BASEPATH . 'upl/ckeditor_files/' . $name;
|
||||
FileSys::MakeDir(BASEPATH . 'upl/ckeditor_files/');
|
||||
|
||||
//xmp(get_loaded_extensions());
|
||||
|
||||
if (copy($src, $path))
|
||||
{
|
||||
// Уменьшаем размер файла путем ресайза картинки
|
||||
$wImg = WideImage::load($path);
|
||||
$wImg->resizeDown($g_config['ckeditor4']['resize_down_width'],
|
||||
$g_config['ckeditor4']['resize_down_height'])->saveToFile($path);
|
||||
|
||||
$src = '/upl/ckeditor_files/' . $name;
|
||||
}
|
||||
else
|
||||
{
|
||||
$uncopiedImgs[] = $src;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$uncopiedImgs[] = $src;
|
||||
}
|
||||
}
|
||||
|
||||
$img->src = $src;
|
||||
}
|
||||
return $html->save();
|
||||
}
|
||||
?>
|
||||
50
core/func/debug.php
Executable file
50
core/func/debug.php
Executable file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Функции используемые при дебаге кода
|
||||
*
|
||||
* @author Zmi
|
||||
*/
|
||||
|
||||
|
||||
// Запись в стандартный лог движка
|
||||
function ToLog($msg, $path = '')
|
||||
{
|
||||
global $g_config;
|
||||
$path = empty($path) ? $g_config['logPath'] : $path;
|
||||
$logger = FileLogger::Create($path);
|
||||
$logger->Message($msg);
|
||||
}
|
||||
|
||||
function Xmp($a)
|
||||
{
|
||||
printf("<xmp>%s</xmp>", print_r($a, true));
|
||||
}
|
||||
|
||||
function VarDump($var)
|
||||
{
|
||||
$ret = '';
|
||||
if (is_bool($var))
|
||||
{
|
||||
$ret = ($var) ? 'true' : 'false';
|
||||
}
|
||||
elseif (is_scalar($var))
|
||||
{
|
||||
$ret = htmlspecialchars($var);
|
||||
}
|
||||
elseif (is_null($var))
|
||||
{
|
||||
$ret = 'NULL';
|
||||
}
|
||||
else
|
||||
{
|
||||
ob_start();
|
||||
var_dump($var);
|
||||
$data = ob_get_clean();
|
||||
$data = preg_replace('/=>\n\s+/', ' => ', $data);
|
||||
$data = htmlspecialchars($data);
|
||||
$ret = '<pre>' . $data . '</pre>';
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
?>
|
||||
375
core/func/main.php
Executable file
375
core/func/main.php
Executable file
@@ -0,0 +1,375 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Главные ф-ии
|
||||
*
|
||||
* @author Zmi
|
||||
*/
|
||||
|
||||
|
||||
// Параметры какие защиты отключать
|
||||
define('M_HTML_FILTER_OFF', 2); // Выкл. защиту от HTML текста
|
||||
define('M_XSS_FILTER_OFF', 4); // Выкл. защиту от XSS вставок
|
||||
define('M_DELETE_PARAM', 'micron_not_use_this_param__98gmkhgKfdg');
|
||||
|
||||
|
||||
// Производит замену только 1-го вхождения подстроки в строку
|
||||
function _StrReplaceFirst($search, $replace, $subject)
|
||||
{
|
||||
$ret = $subject;
|
||||
$pos = strpos($subject, $search);
|
||||
if ($pos !== false)
|
||||
{
|
||||
$ret = substr_replace($subject, $replace, $pos, strlen($search));
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Загрузка компонента
|
||||
*
|
||||
* Производит подключение файлов lang/src/tpl
|
||||
*
|
||||
* @global array $g_lang
|
||||
* @global array $g_config
|
||||
* @global string $g_arrLangs
|
||||
*
|
||||
* @param string $_micron_file - URI запроса т.е. подключаемый файл или строка вида file_name&par1=a&par2=b
|
||||
* @param array $_micron_params - массив параметров которые необходимо создать до подключения
|
||||
*
|
||||
* @return int - вовзращает кол-во подключенных файлов этого компонента
|
||||
*/
|
||||
function IncludeCom($_micron_file, $_micron_params = array())
|
||||
{
|
||||
global $g_lang, $g_config, $g_arrLangs;
|
||||
|
||||
$_micron_file = GetQuery($_micron_file);
|
||||
foreach ($_micron_params as $micron_name => $micron_value)
|
||||
{
|
||||
$$micron_name = $micron_value;
|
||||
}
|
||||
|
||||
$micron_has = 0;
|
||||
// Список всех файлов которые требуется полключить
|
||||
$micron_files = array
|
||||
(
|
||||
BASEPATH . 'lang/' . DEF_LANG . "/{$_micron_file}.php",
|
||||
BASEPATH . 'lang/' . LANG . "/{$_micron_file}.php",
|
||||
BASEPATH . "src/{$_micron_file}.php",
|
||||
BASEPATH . "tpl/{$_micron_file}.php"
|
||||
);
|
||||
$micron_files = array_unique($micron_files);
|
||||
|
||||
// Подключаем все возможные файлы компонента
|
||||
foreach ($micron_files as $micron_f)
|
||||
{
|
||||
if (is_readable($micron_f))
|
||||
{
|
||||
$micron_has++;
|
||||
require $micron_f;
|
||||
if (isset($GLOBALS['__breakCurrentCom__']) && $GLOBALS['__breakCurrentCom__'])
|
||||
{
|
||||
$GLOBALS['__breakCurrentCom__'] = 0;
|
||||
return $micron_has;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $micron_has;
|
||||
}
|
||||
|
||||
/**
|
||||
* Фунция выхода из компонента что бы дальше файлы не подключала
|
||||
*/
|
||||
function ExitCom()
|
||||
{
|
||||
$GLOBALS['__breakCurrentCom__'] = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает строку запроса к движку
|
||||
*
|
||||
* Так же данная функция занимается созданием параметров в $_GET если они были переданны в q и созданием константы LANG если ее еще не было
|
||||
*
|
||||
* @global array $g_config
|
||||
* @global array $g_arrLangs - массив языков сайта
|
||||
*
|
||||
* @param string $q - строка запроса при ее отсутвии то что было в $_GET[q]
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function GetQuery($q = NULL)
|
||||
{
|
||||
global $g_config, $g_arrLangs;
|
||||
|
||||
$langs = array_keys($g_arrLangs);
|
||||
$defPage = $g_config['defaultComponent'];
|
||||
|
||||
require_once BASEPATH . 'lib/InputClean.php';
|
||||
|
||||
$q = is_null($q) ? (isset($_GET['q']) && !empty($_GET['q']) ? rtrim($_GET['q'], "/") : $defPage) : $q;
|
||||
$q = _StrReplaceFirst('&', '?', $q);
|
||||
$parse = parse_url($q);
|
||||
$q = FileSys::FilenameSecurity($parse['path']);
|
||||
if (isset($parse['query']))
|
||||
{
|
||||
foreach (explode('&', $parse['query']) as $elem)
|
||||
{
|
||||
if (strpos($elem, '=') !== false)
|
||||
{
|
||||
$elem = explode('=', $elem);
|
||||
$_GET[$elem[0]] = isset($elem[1]) ? $elem[1] : NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
$parts = explode('/', $q);
|
||||
|
||||
$lang = isset($parts[0]) && in_array($parts[0], $langs) ? $parts[0] : DEF_LANG;
|
||||
|
||||
if (!defined('LANG'))
|
||||
{
|
||||
define('LANG', $lang);
|
||||
}
|
||||
|
||||
if (isset($parts[0]) && in_array($parts[0], $langs))
|
||||
{
|
||||
$q = implode('/', array_splice($parts, 1));
|
||||
}
|
||||
|
||||
$cleaner = new InputClean($g_config['charset']);
|
||||
return empty($q) ? $defPage : $cleaner->_clean_input_data($q);
|
||||
}
|
||||
|
||||
function _HtmlClean(&$value)
|
||||
{
|
||||
$value = htmlspecialchars($value);
|
||||
}
|
||||
|
||||
// Очищает входные данные
|
||||
function _Clean($value, $secureFlags)
|
||||
{
|
||||
if (!($secureFlags & M_XSS_FILTER_OFF)) // Если не отключена защита от XSS
|
||||
{
|
||||
global $g_config;
|
||||
static $cleaner = NULL;
|
||||
if (is_null($cleaner))
|
||||
{
|
||||
$cleaner = new InputClean($g_config['charset']);
|
||||
}
|
||||
$value = $cleaner->_clean_input_data($value);
|
||||
}
|
||||
if (!($secureFlags & M_HTML_FILTER_OFF)) // Если не отключена защита от HTML
|
||||
{
|
||||
is_array($value) ? array_walk_recursive($value, "_HtmlClean") : _HtmlClean($value);
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает юрл до корня сайта, нужна для данных (image, js, css ...)
|
||||
*/
|
||||
function Root($uri = '')
|
||||
{
|
||||
$dir = SITE_IN_DIR ? (SITE_IN_DIR . '/') : '';
|
||||
return SITE_ROOT . "{$dir}{$uri}";
|
||||
}
|
||||
|
||||
/**
|
||||
* Путь до корня сайта с подставкой языка, нужна для ссылок
|
||||
*/
|
||||
function SiteRoot($uri = '')
|
||||
{
|
||||
global $g_config;
|
||||
|
||||
$uri = $uri == $g_config['defaultComponent'] ? '' : $uri;
|
||||
|
||||
$dir = SITE_IN_DIR ? (SITE_IN_DIR . '/') : '';
|
||||
$lang = LANG == DEF_LANG ? '' : (LANG . '/');
|
||||
$ret = $lang || $uri ? "/{$dir}?q={$lang}{$uri}" : "/{$dir}";
|
||||
$ret = empty($ret) ? '/' : $ret;
|
||||
$ret = $g_config['useModRewrite'] ?
|
||||
_StrReplaceFirst('/?q=', '/', _StrReplaceFirst('&', '?', $ret)) :
|
||||
$ret;
|
||||
$ret = SITE_ROOT . substr($ret , 1);
|
||||
|
||||
// Заменяем начальную страницу в URL а просто корень
|
||||
$ret = in_array(
|
||||
$ret,
|
||||
array(
|
||||
SITE_ROOT . $g_config['defaultComponent'],
|
||||
SITE_ROOT . '?q=' . $g_config['defaultComponent']
|
||||
)
|
||||
) ?
|
||||
SITE_ROOT :
|
||||
$ret;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// Возвращает дебаг панель располагаемую внизу страницу
|
||||
function GetDebug()
|
||||
{
|
||||
global $g_config;
|
||||
|
||||
$ret = '';
|
||||
// Выводить дебаг-панель только если это режим отладки и только если страница прошла через главный шаблон
|
||||
if (DEBUG_MODE && $g_config['isLoadInMainTpl'])
|
||||
{
|
||||
ob_start();
|
||||
IncludeCom('dev/debug_panel');
|
||||
return ob_get_clean();
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function _PrepareContent($c)
|
||||
{
|
||||
global $g_config;
|
||||
|
||||
require_once BASEPATH . 'lib/ExtraPacker/Config.php';
|
||||
require_once BASEPATH . 'lib/ExtraPacker/ExtraPacker.php';
|
||||
require_once BASEPATH . 'lib/HtmlValidate.php';
|
||||
|
||||
$validator = new HtmlValidate($c);
|
||||
$c = $validator->Get();
|
||||
|
||||
$postfix = str_replace ("/", "", strtok($_SERVER["REQUEST_URI"],'?'));
|
||||
|
||||
$cfg = $g_config['extrapacker'];
|
||||
$extraPacker = new ExtraPacker(
|
||||
array('ExtraPacker_Config', 'GetPathJsFileFromUrl'),
|
||||
array('ExtraPacker_Config', 'GetPathCssFileFromUrl'),
|
||||
array('ExtraPacker_Config', 'GetAddrJsPackFile'),
|
||||
array('ExtraPacker_Config', 'GetAddrCssPackFile'),
|
||||
NULL,
|
||||
NULL,
|
||||
BASEPATH . 'tmp/' . $cfg['dir'] . "/js/$postfix/inf.txt",
|
||||
BASEPATH . 'tmp/' . $cfg['dir'] . "/js/$postfix/js.js",
|
||||
BASEPATH . 'tmp/' . $cfg['dir'] . "/css/$postfix/inf.txt",
|
||||
BASEPATH . 'tmp/' . $cfg['dir'] . "/css/$postfix/css.css",
|
||||
$cfg['packHtml'],
|
||||
$cfg['packCss'],
|
||||
$cfg['packJs'],
|
||||
$cfg['arrExeptions_js'],
|
||||
$cfg['arrExeptionsNotAdd_js'],
|
||||
$cfg['arrExeptions_css'],
|
||||
$cfg['arrExeptionsNotAdd_css'],
|
||||
true,
|
||||
BASEPATH . 'tmp/' . $cfg['dir'] . "/js/$postfix/trans.txt",
|
||||
BASEPATH . 'tmp/' . $cfg['dir'] . "/css/$postfix/trans.txt",
|
||||
$cfg['buffering'],
|
||||
array('ExtraPacker_Config', 'PrepareEachFile'),
|
||||
array('ExtraPacker_Config', 'PrepareAllCss'),
|
||||
array('ExtraPacker_Config', 'PrepareAllJs')
|
||||
);
|
||||
return $extraPacker->Pack($c) . GetDebug();
|
||||
}
|
||||
|
||||
/**
|
||||
* Функиця подготовки вывода контента в браузер
|
||||
*/
|
||||
function PrepareContent($c)
|
||||
{
|
||||
global $g_config;
|
||||
|
||||
foreach ($g_config['prepareFunctions'] as $func)
|
||||
{
|
||||
$c = call_user_func($func, $c);
|
||||
}
|
||||
return $c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Параметр из $_GET
|
||||
*/
|
||||
function Get($name, $def = false, $secureFlags = 0)
|
||||
{
|
||||
return isset($_GET[$name]) ? _Clean($_GET[$name], $secureFlags) : $def;
|
||||
}
|
||||
|
||||
/**
|
||||
* Параметр из $_POST
|
||||
*/
|
||||
function Post($name, $def = false, $secureFlags = 0)
|
||||
{
|
||||
return isset($_POST[$name]) ? _Clean($_POST[$name], $secureFlags) : $def;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение текущей строки запроса к движку (удобно юзать в action для формы если это компоннет)
|
||||
*/
|
||||
function GetCurUrl($_pars = '')
|
||||
{
|
||||
$pars = '';
|
||||
$all = $_GET;
|
||||
|
||||
foreach (array_filter(explode('&', $_pars)) as $v)
|
||||
{
|
||||
if (strpos($v, '=') === false)
|
||||
{
|
||||
$all[$v] = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
$t = explode('=', $v);
|
||||
list($id, $val) = $t;
|
||||
$all[$id] = urldecode($val);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($all as $k => $v)
|
||||
{
|
||||
if ($k == 'q') continue;
|
||||
if ($v == M_DELETE_PARAM) continue;
|
||||
$pars .= ("{$k}=" . urlencode($v) . "&");
|
||||
}
|
||||
$pars = substr($pars, 0, -1) ? ('&' . substr($pars, 0, -1)) : '';
|
||||
return SiteRoot(GetQuery() . $pars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Переопределяем функцию автозагрузки классов
|
||||
*/
|
||||
function _AutoLoadLib($className)
|
||||
{
|
||||
if (is_readable(BASEPATH . "lib/{$className}.php"))
|
||||
{
|
||||
require_once BASEPATH . "lib/{$className}.php";
|
||||
}
|
||||
if (is_readable(BASEPATH . "model/{$className}.php"))
|
||||
{
|
||||
require_once BASEPATH . "model/{$className}.php";
|
||||
}
|
||||
}
|
||||
spl_autoload_register('_AutoLoadLib');
|
||||
|
||||
/**
|
||||
* Функция установки title/desk/kw если страница не главная и не было установлено значений до этого
|
||||
*/
|
||||
function AutoTDKW($content)
|
||||
{
|
||||
global $g_lang, $g_config;
|
||||
|
||||
if ($g_config['autoGetTitle']) // Только если это не главная, ибо там то по любому выставлено
|
||||
{
|
||||
if (L('m_title') === L('m_defTitle'))
|
||||
{
|
||||
preg_match('~<h1(.*?)>(.*?)</h1>~is', $content, $m);
|
||||
if (isset($m[2]))
|
||||
{
|
||||
$g_lang['m_title'] = strip_tags($m[2]) . L('m_titlePostfix');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Получить параметр из языкового массива
|
||||
function L($name)
|
||||
{
|
||||
global $g_lang;
|
||||
if (!isset($g_lang[$name]))
|
||||
{
|
||||
trigger_error("Unknown lang ($name) variable", E_USER_ERROR);
|
||||
}
|
||||
return $g_lang[$name];
|
||||
}
|
||||
?>
|
||||
26
core/func/messages.php
Executable file
26
core/func/messages.php
Executable file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Стилистически оформленные сообщения
|
||||
*
|
||||
* @author Zmi
|
||||
*/
|
||||
|
||||
|
||||
function Msg($message, $css = 'msg')
|
||||
{
|
||||
ob_start();
|
||||
IncludeCom('dev/msg', array('message' => $message, 'css' => $css));
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
function MsgOk($message)
|
||||
{
|
||||
return Msg($message, 'msg-ok');
|
||||
}
|
||||
|
||||
function MsgErr($message)
|
||||
{
|
||||
return Msg($message, 'msg-err');
|
||||
}
|
||||
?>
|
||||
22
core/func/order_files_by_date.php
Executable file
22
core/func/order_files_by_date.php
Executable file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
function __FilesCmpByDate($f1, $f2)
|
||||
{
|
||||
$m1 = filemtime($f1);
|
||||
$m2 = filemtime($f2);
|
||||
if ($m1 == $m2)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return ($m1 < $m2) ? 1 : -1;
|
||||
}
|
||||
|
||||
function OrderFilesByDate($list)
|
||||
{
|
||||
if (count($list))
|
||||
{
|
||||
usort($list, "__FilesCmpByDate");
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
?>
|
||||
35
core/func/page_editor.php
Executable file
35
core/func/page_editor.php
Executable file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Рекурсивно получить все файлы и папки
|
||||
*/
|
||||
function PageEditorGetListFilesDirs($folder, &$allFiles)
|
||||
{
|
||||
$fp = is_readable($folder) ? opendir($folder) : false;
|
||||
if ($fp)
|
||||
{
|
||||
$file = readdir($fp);
|
||||
|
||||
while ($file !== false)
|
||||
{
|
||||
$path = $folder . "/" . $file;
|
||||
|
||||
if (is_file($path))
|
||||
{
|
||||
if (substr($path, -4) == ".php")
|
||||
{
|
||||
$allFiles[] = $folder . "/" . $file;
|
||||
}
|
||||
}
|
||||
elseif ($file != "." && $file != ".." && is_dir($path))
|
||||
{
|
||||
$allFiles[] = $folder . "/" . $file . "/";
|
||||
PageEditorGetListFilesDirs($path, $allFiles);
|
||||
}
|
||||
|
||||
$file = readdir($fp);
|
||||
}
|
||||
closedir($fp);
|
||||
}
|
||||
}
|
||||
?>
|
||||
30
core/func/validation.php
Executable file
30
core/func/validation.php
Executable file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Функции для валидации данных
|
||||
*
|
||||
* @author Zmi
|
||||
*/
|
||||
|
||||
|
||||
function IsValidEmail($email)
|
||||
{
|
||||
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
|
||||
}
|
||||
|
||||
function PhoneFilter($phone)
|
||||
{
|
||||
return preg_replace("~[^\+\*|^0-9]~is", '', $phone);
|
||||
}
|
||||
|
||||
function IsValidPhone($phone)
|
||||
{
|
||||
$phone = PhoneFilter($phone);
|
||||
return strlen($phone) > 5;
|
||||
}
|
||||
|
||||
function IsValidUrl($url)
|
||||
{
|
||||
return filter_var($url, FILTER_VALIDATE_URL) !== false;
|
||||
}
|
||||
?>
|
||||
32
core/init/admin_menu.php
Executable file
32
core/init/admin_menu.php
Executable file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
// Этот файл должен вызываться, когда меню уже заполнено. Добавляем в конце кнопку 'выход':
|
||||
$g_config['admin_menu'][] = array
|
||||
(
|
||||
'link' => SiteRoot('admin/logout'),
|
||||
'name' => '<span class="glyphicon glyphicon-log-out"></span>',
|
||||
'label' => 'Выйти',
|
||||
'css' => '',
|
||||
'list' => array()
|
||||
);
|
||||
|
||||
// Выделяем нужный элемент в меню:
|
||||
foreach ($g_config['admin_menu'] as $k => $v)
|
||||
{
|
||||
// Выделять если это текущая страница или страница в ее выподающем списке
|
||||
$links = array($v['link']);
|
||||
foreach ($v['list'] as $subLink)
|
||||
{
|
||||
if (is_array($subLink))
|
||||
{
|
||||
$links[] = $subLink['link'];
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array(GetCurUrl(), $links))
|
||||
{
|
||||
$v['css'] = empty($v['css']) ? 'active' : "{$v['css']} active";
|
||||
$g_config['admin_menu'][$k] = $v;
|
||||
}
|
||||
}
|
||||
?>
|
||||
25
core/init/admin_sector.php
Executable file
25
core/init/admin_sector.php
Executable file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
require_once BASEPATH . 'core/init/db.php';
|
||||
|
||||
// Изначальная папка нам может понадобится для CKEditor
|
||||
$g_config['extrapacker']['non_admin_dir'] = $g_config['extrapacker']['dir'];
|
||||
|
||||
// Проверяем вход в админку и авторизацию
|
||||
$isAdminSector = (stripos(strtolower(GetQuery()), 'admin/') === 0 || GetQuery() === 'admin');
|
||||
if ($isAdminSector)
|
||||
{
|
||||
// Меняем папку куда будут складироваться css/js админки
|
||||
$g_config['extrapacker']['dir'] = 'extrapacker_admin';
|
||||
$g_config['extrapacker']['packCss'] = false;
|
||||
$g_config['mainTpl'] = 'admin/main_tpl';
|
||||
|
||||
$g_adminAuth = new AdminModel();
|
||||
$g_adminAuth->ChkLogin();
|
||||
define('IS_ADMIN_AUTH', $g_adminAuth->IsAuth());
|
||||
}
|
||||
else
|
||||
{
|
||||
define('IS_ADMIN_AUTH', false);
|
||||
}
|
||||
?>
|
||||
12
core/init/db.php
Executable file
12
core/init/db.php
Executable file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Инициализация подключей ко всем БД и подключение моделей
|
||||
*
|
||||
* @author Zmi
|
||||
*/
|
||||
|
||||
|
||||
require_once BASEPATH . 'lib/Db/Db.php';
|
||||
new Db();
|
||||
?>
|
||||
28
core/init/main.php
Executable file
28
core/init/main.php
Executable file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
new Php(); // Настройка php и включение слежки за ошибками
|
||||
header('Content-type: text/html; charset=' . $g_config['charset']);
|
||||
|
||||
GetQuery(); // Что бы определился язык сайта
|
||||
|
||||
// Подключаем все языковые файлы из автозагруки
|
||||
$dirs = array_unique(
|
||||
array(
|
||||
BASEPATH . 'lang/' . DEF_LANG . '/autoload/',
|
||||
BASEPATH . 'lang/' . LANG . '/autoload/'
|
||||
)
|
||||
);
|
||||
$g_lang = array();
|
||||
foreach ($dirs as $dir)
|
||||
{
|
||||
$files = array_merge(array($dir . 'main.php'), glob($dir . "*.php"));
|
||||
foreach ($files as $f)
|
||||
{
|
||||
if (is_readable($f))
|
||||
{
|
||||
require_once $f;
|
||||
}
|
||||
}
|
||||
}
|
||||
$g_lang['m_defTitle'] = L('m_title');
|
||||
?>
|
||||
Reference in New Issue
Block a user