34 $arr[
'file'] = strtr(
$arr[
'file'], $replace_path);
35 $arr[
'request'] = strtr(
$arr[
'request'], $replace_path);
39 $arr[
'template_id'] =
$arr[
'template_id'] ?? 4;
41 exit(json_encode([
'error' =>
'Файл шаблона с таким именем не существует!']));
48 if (empty(
$arr[
'owner_group']) || !in_array(
$arr[
'owner_group'],
$user->subordinate_groups)) {
49 exit(json_encode([
'error' =>
'"Группа владелец" не найдена среди подчиненных групп']));
53 exit(json_encode([
'error' =>
'Лимит моделей для данной группы исчерпан']));
70 $rx =
'#^' . $path .
'/([/a-z0-9\_\-\.]+)\.php$#';
72 if (!preg_match($rx,
$arr[
'file'], $matches) || preg_match(
'#//#', $matches[2]) || preg_match(
'#^/#', $matches[2]) || preg_match(
'#/$#', $matches[2])) {
73 exit(json_encode([
'error' =>
'Неверный формат для "Файл обработчик"']));
76 if (!$format_only &&
$table !=
'pages') {
77 if (file_exists(
$_SERVER[
'DOCUMENT_ROOT'] .
$arr[
'file'])) {
78 exit(json_encode([
'error' =>
'Файл обработчик с таким именем уже существует!']));
82 exit(json_encode([
'error' =>
'Файл обработчик с таким именем уже зарегистрирован в БД!']));
96 if (
$table ==
'templates')
return;
100 if (in_array(
$table, [
'pages',
'actions'])) {
101 $rx =
'#^' . $path .
'/([/a-z0-9\_\-\.]*)$#i';
102 }
else if (
$table ==
'crontabs') {
103 $rx =
'#^' . $path .
'/([a-z0-9]*)#i';
105 $rx =
'#^' . $path .
'/([a-z0-9\_\-]+)$#i';
108 if (!preg_match($rx,
$arr[
'request'], $matches) || preg_match(
'#//#', $matches[1]) || preg_match(
'#^/#', $matches[1]) || preg_match(
'#/$#', $matches[1])) {
109 exit(json_encode([
'error' =>
'Неверный формат для "Запрос"']));
126 return (
object) [
'file' =>
'/api/action/(' . implode(
'|',
$user->writeble_paths) .
')',
'request' =>
'/api/action'];
129 return (
object) [
'file' =>
'/api/modal/(' . implode(
'|',
$user->writeble_paths) .
')',
'request' =>
'/api/modal'];
132 return (
object) [
'file' =>
'/api/select/(' . implode(
'|',
$user->writeble_paths) .
')',
'request' =>
'/api/select'];
135 return (
object) [
'file' =>
'/page/(' . implode(
'|',
$user->writeble_paths) .
')',
'request' =>
''];
137 return (
object) [
'file' =>
'/\.\./templates/(page|modal|action|incode|select)',
'request' =>
''];
140 return (
object) [
'file' =>
'',
'request' =>
''];
if(!in_array($_POST['table'], Wrong\Database\Controller::$tables)) $table
Model отвечает за проверку создания моделей
static file($arr, $table, $format_only=false)
static create($arr, $table, $replace_path=[])
static request($arr, $table)
Controller контроллер для запросов к БД
static find($value, $column='id', $table='')
Templates контроллер управления моделями выборок, расширяет Controller.
static all_available($value='', $column='id', $table='')
Group класс, содержащий статические методы, используемые для управления группами пользователей.
static count_all_owner_models($id, $is_active=false)
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' $_SERVER['HTTP_HOST']
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit