Coding style
This commit is contained in:
parent
a228dc1792
commit
700435010a
94 changed files with 2250 additions and 933 deletions
|
@ -40,7 +40,12 @@ class Install
|
|||
$this->c->user = $this->c->users->create(['id' => 2, 'group_id' => $this->c->GROUP_ADMIN]);
|
||||
|
||||
$r = $this->c->Router;
|
||||
$r->add($r::DUO, '/install', 'Install:install', 'Install');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/install',
|
||||
'Install:install',
|
||||
'Install'
|
||||
);
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
|
||||
|
|
|
@ -37,32 +37,88 @@ class Routing
|
|||
// регистрация/вход/выход
|
||||
if ($user->isGuest) {
|
||||
// вход
|
||||
$r->add($r::DUO, '/login', 'Auth:login', 'Login');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/login',
|
||||
'Auth:login',
|
||||
'Login'
|
||||
);
|
||||
// забыли кодовую фразу
|
||||
$r->add($r::DUO, '/login/forget', 'Auth:forget', 'Forget');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/login/forget',
|
||||
'Auth:forget',
|
||||
'Forget'
|
||||
);
|
||||
// смена кодовой фразы
|
||||
$r->add($r::DUO, '/login/{id:\d+}/{key}/{hash}', 'Auth:changePass', 'ChangePassword');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/login/{id:\d+}/{key}/{hash}',
|
||||
'Auth:changePass',
|
||||
'ChangePassword'
|
||||
);
|
||||
|
||||
// регистрация
|
||||
if ('1' == $config->o_regs_allow) {
|
||||
$r->add($r::GET, '/registration', 'Rules:confirmation', 'Register');
|
||||
$r->add($r::PST, '/registration/agree', 'Register:reg', 'RegisterForm');
|
||||
$r->add($r::GET, '/registration/activate/{id:\d+}/{key}/{hash}', 'Register:activate', 'RegActivate');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/registration',
|
||||
'Rules:confirmation',
|
||||
'Register'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/registration/agree',
|
||||
'Register:reg',
|
||||
'RegisterForm'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/registration/activate/{id:\d+}/{key}/{hash}',
|
||||
'Register:activate',
|
||||
'RegActivate'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
// выход
|
||||
$r->add($r::GET, '/logout/{token}', 'Auth:logout', 'Logout');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/logout/{token}',
|
||||
'Auth:logout',
|
||||
'Logout'
|
||||
);
|
||||
|
||||
// обработка "кривых" перенаправлений с логина и регистрации
|
||||
$r->add($r::GET, '/login[/{tail:.*}]', 'Redirect:toIndex');
|
||||
$r->add($r::GET, '/registration[/{tail:.*}]', 'Redirect:toIndex');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/login[/{tail:.*}]',
|
||||
'Redirect:toIndex'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/registration[/{tail:.*}]',
|
||||
'Redirect:toIndex'
|
||||
);
|
||||
}
|
||||
// просмотр разрешен
|
||||
if ('1' == $user->g_read_board) {
|
||||
// главная
|
||||
$r->add($r::GET, '/', 'Index:view', 'Index');
|
||||
$r->add($r::GET, '/index.php', 'Redirect:toIndex');
|
||||
$r->add($r::GET, '/index.html', 'Redirect:toIndex');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/',
|
||||
'Index:view',
|
||||
'Index'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/index.php',
|
||||
'Redirect:toIndex'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/index.html',
|
||||
'Redirect:toIndex'
|
||||
);
|
||||
// правила
|
||||
if (
|
||||
'1' == $config->o_rules
|
||||
|
@ -71,96 +127,327 @@ class Routing
|
|||
|| '1' == $config->o_regs_allow
|
||||
)
|
||||
) {
|
||||
$r->add($r::GET, '/rules', 'Rules:view', 'Rules');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/rules',
|
||||
'Rules:view',
|
||||
'Rules'
|
||||
);
|
||||
}
|
||||
// поиск
|
||||
if ('1' == $user->g_search) {
|
||||
$r->add($r::GET, '/search[/simple/{keywords}[/{page:[1-9]\d*}]]', 'Search:view', 'Search');
|
||||
$r->add($r::PST, '/search', 'Search:view');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/search[/simple/{keywords}[/{page:[1-9]\d*}]]',
|
||||
'Search:view',
|
||||
'Search'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/search',
|
||||
'Search:view'
|
||||
);
|
||||
|
||||
$r->add($r::GET, '/search/advanced[/{keywords}/{author}/{forums}/{serch_in:\d}/{sort_by:\d}/{sort_dir:\d}/{show_as:\d}[/{page:[1-9]\d*}]]', 'Search:viewAdvanced', 'SearchAdvanced');
|
||||
$r->add($r::PST, '/search/advanced', 'Search:viewAdvanced');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/search/advanced[/{keywords}/{author}/{forums}/{serch_in:\d}/{sort_by:\d}/{sort_dir:\d}/{show_as:\d}[/{page:[1-9]\d*}]]',
|
||||
'Search:viewAdvanced',
|
||||
'SearchAdvanced'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/search/advanced',
|
||||
'Search:viewAdvanced'
|
||||
);
|
||||
|
||||
$r->add($r::GET, '/search[/user/{uid:[2-9]|[1-9]\d+}]/{action:(?!search)[a-z_]+}[/in_forum/{forum:[1-9]\d*}][/{page:[1-9]\d*}]', 'Search:action', 'SearchAction');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/search[/user/{uid:[2-9]|[1-9]\d+}]/{action:(?!search)[a-z_]+}[/in_forum/{forum:[1-9]\d*}][/{page:[1-9]\d*}]',
|
||||
'Search:action',
|
||||
'SearchAction'
|
||||
);
|
||||
}
|
||||
// юзеры
|
||||
if ($user->viewUsers) {
|
||||
// список пользователей
|
||||
$r->add($r::GET, '/userlist[/{group:all|[1-9]\d*}/{sort:username|registered|num_posts}/{dir:ASC|DESC}/{name}][/{page:[1-9]\d*}]', 'Userlist:view', 'Userlist');
|
||||
$r->add($r::PST, '/userlist', 'Userlist:view');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/userlist[/{group:all|[1-9]\d*}/{sort:username|registered|num_posts}/{dir:ASC|DESC}/{name}][/{page:[1-9]\d*}]',
|
||||
'Userlist:view',
|
||||
'Userlist'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/userlist',
|
||||
'Userlist:view'
|
||||
);
|
||||
// юзеры
|
||||
$r->add($r::GET, '/user/{id:[2-9]|[1-9]\d+}/{name}', 'ProfileView:view', 'User');
|
||||
$r->add($r::DUO, '/user/{id:[2-9]|[1-9]\d+}/edit/profile', 'ProfileEdit:edit', 'EditUserProfile');
|
||||
$r->add($r::DUO, '/user/{id:[2-9]|[1-9]\d+}/edit/config', 'ProfileConfig:config', 'EditUserBoardConfig');
|
||||
$r->add($r::DUO, '/user/{id:[2-9]|[1-9]\d+}/edit/email', 'ProfileEmail:email', 'EditUserEmail');
|
||||
$r->add($r::DUO, '/user/{id:[2-9]|[1-9]\d+}/edit/passphrase', 'ProfilePass:pass', 'EditUserPass');
|
||||
$r->add($r::DUO, '/user/{id:[2-9]|[1-9]\d+}/edit/moderation', 'ProfileMod:moderation', 'EditUserModeration');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/user/{id:[2-9]|[1-9]\d+}/{name}',
|
||||
'ProfileView:view',
|
||||
'User'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:[2-9]|[1-9]\d+}/edit/profile',
|
||||
'ProfileEdit:edit',
|
||||
'EditUserProfile'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:[2-9]|[1-9]\d+}/edit/config',
|
||||
'ProfileConfig:config',
|
||||
'EditUserBoardConfig'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:[2-9]|[1-9]\d+}/edit/email',
|
||||
'ProfileEmail:email',
|
||||
'EditUserEmail'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:[2-9]|[1-9]\d+}/edit/passphrase',
|
||||
'ProfilePass:pass',
|
||||
'EditUserPass'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:[2-9]|[1-9]\d+}/edit/moderation',
|
||||
'ProfileMod:moderation',
|
||||
'EditUserModeration'
|
||||
);
|
||||
} elseif (! $user->isGuest) {
|
||||
// только свой профиль
|
||||
$r->add($r::GET, '/user/{id:' . $user->id . '}/{name}', 'ProfileView:view', 'User');
|
||||
$r->add($r::DUO, '/user/{id:' . $user->id . '}/edit/profile', 'ProfileEdit:edit', 'EditUserProfile');
|
||||
$r->add($r::DUO, '/user/{id:' . $user->id . '}/edit/config', 'ProfileConfig:config', 'EditUserBoardConfig');
|
||||
$r->add($r::DUO, '/user/{id:' . $user->id . '}/edit/email', 'ProfileEmail:email', 'EditUserEmail');
|
||||
$r->add($r::DUO, '/user/{id:' . $user->id . '}/edit/passphrase', 'ProfilePass:pass', 'EditUserPass');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/user/{id:' . $user->id . '}/{name}',
|
||||
'ProfileView:view',
|
||||
'User'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:' . $user->id . '}/edit/profile',
|
||||
'ProfileEdit:edit',
|
||||
'EditUserProfile'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:' . $user->id . '}/edit/config',
|
||||
'ProfileConfig:config',
|
||||
'EditUserBoardConfig'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:' . $user->id . '}/edit/email',
|
||||
'ProfileEmail:email',
|
||||
'EditUserEmail'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/user/{id:' . $user->id . '}/edit/passphrase',
|
||||
'ProfilePass:pass',
|
||||
'EditUserPass'
|
||||
);
|
||||
}
|
||||
// смена своего email
|
||||
if (! $user->isGuest) {
|
||||
$r->add($r::GET, '/user/{id:' . $user->id . '}/{email}/{key}/{hash}', 'ProfileEmail:setEmail', 'SetNewEmail');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/user/{id:' . $user->id . '}/{email}/{key}/{hash}',
|
||||
'ProfileEmail:setEmail',
|
||||
'SetNewEmail'
|
||||
);
|
||||
}
|
||||
// пометка разделов прочитанными
|
||||
if (! $user->isGuest) {
|
||||
$r->add($r::GET, '/forum/{id:\d+}/markread/{token}', 'Misc:markread', 'MarkRead');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/forum/{id:\d+}/markread/{token}',
|
||||
'Misc:markread',
|
||||
'MarkRead'
|
||||
);
|
||||
}
|
||||
|
||||
// разделы
|
||||
$r->add($r::GET, '/forum/{id:[1-9]\d*}/{name}[/{page:[1-9]\d*}]', 'Forum:view', 'Forum' );
|
||||
$r->add($r::DUO, '/forum/{id:[1-9]\d*}/new/topic', 'Post:newTopic', 'NewTopic');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/forum/{id:[1-9]\d*}/{name}[/{page:[1-9]\d*}]',
|
||||
'Forum:view',
|
||||
'Forum'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/forum/{id:[1-9]\d*}/new/topic',
|
||||
'Post:newTopic',
|
||||
'NewTopic'
|
||||
);
|
||||
// темы
|
||||
$r->add($r::GET, '/topic/{id:[1-9]\d*}/{name}[/{page:[1-9]\d*}]', 'Topic:viewTopic', 'Topic' );
|
||||
$r->add($r::GET, '/topic/{id:[1-9]\d*}/view/new', 'Topic:viewNew', 'TopicViewNew' );
|
||||
$r->add($r::GET, '/topic/{id:[1-9]\d*}/view/unread', 'Topic:viewUnread', 'TopicViewUnread');
|
||||
$r->add($r::GET, '/topic/{id:[1-9]\d*}/view/last', 'Topic:viewLast', 'TopicViewLast' );
|
||||
$r->add($r::GET, '/topic/{id:[1-9]\d*}/new/reply[/{quote:[1-9]\d*}]', 'Post:newReply', 'NewReply' );
|
||||
$r->add($r::PST, '/topic/{id:[1-9]\d*}/new/reply', 'Post:newReply' );
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/topic/{id:[1-9]\d*}/{name}[/{page:[1-9]\d*}]',
|
||||
'Topic:viewTopic',
|
||||
'Topic'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/topic/{id:[1-9]\d*}/view/new',
|
||||
'Topic:viewNew',
|
||||
'TopicViewNew'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/topic/{id:[1-9]\d*}/view/unread',
|
||||
'Topic:viewUnread',
|
||||
'TopicViewUnread'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/topic/{id:[1-9]\d*}/view/last',
|
||||
'Topic:viewLast',
|
||||
'TopicViewLast'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/topic/{id:[1-9]\d*}/new/reply[/{quote:[1-9]\d*}]',
|
||||
'Post:newReply',
|
||||
'NewReply'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/topic/{id:[1-9]\d*}/new/reply',
|
||||
'Post:newReply'
|
||||
);
|
||||
// сообщения
|
||||
$r->add($r::GET, '/post/{id:[1-9]\d*}#p{id}', 'Topic:viewPost', 'ViewPost' );
|
||||
$r->add($r::DUO, '/post/{id:[1-9]\d*}/edit', 'Edit:edit', 'EditPost' );
|
||||
$r->add($r::DUO, '/post/{id:[1-9]\d*}/delete', 'Delete:delete', 'DeletePost');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/post/{id:[1-9]\d*}#p{id}',
|
||||
'Topic:viewPost',
|
||||
'ViewPost'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/post/{id:[1-9]\d*}/edit',
|
||||
'Edit:edit',
|
||||
'EditPost'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/post/{id:[1-9]\d*}/delete',
|
||||
'Delete:delete',
|
||||
'DeletePost'
|
||||
);
|
||||
// сигналы (репорты)
|
||||
if (
|
||||
! $user->isAdmin
|
||||
&& ! $user->isGuest
|
||||
) { // ????
|
||||
$r->add($r::DUO, '/post/{id:[1-9]\d*}/report', 'Report:report', 'ReportPost');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/post/{id:[1-9]\d*}/report',
|
||||
'Report:report',
|
||||
'ReportPost'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
// админ и модератор
|
||||
if ($user->isAdmMod) {
|
||||
$r->add($r::GET, '/admin/', 'AdminIndex:index', 'Admin');
|
||||
$r->add($r::GET, '/admin/statistics', 'AdminStatistics:statistics', 'AdminStatistics');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/',
|
||||
'AdminIndex:index',
|
||||
'Admin'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/statistics',
|
||||
'AdminStatistics:statistics',
|
||||
'AdminStatistics'
|
||||
);
|
||||
|
||||
if ($this->c->userRules->viewIP) {
|
||||
$r->add($r::GET, '/admin/get/host/{ip:[0-9a-fA-F:.]+}', 'AdminHost:view', 'AdminHost');
|
||||
$r->add($r::GET, '/admin/users/user/{id:[2-9]|[1-9]\d+}[/{page:[1-9]\d*}]', 'AdminUsersStat:view', 'AdminUserStat');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/get/host/{ip:[0-9a-fA-F:.]+}',
|
||||
'AdminHost:view',
|
||||
'AdminHost'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/users/user/{id:[2-9]|[1-9]\d+}[/{page:[1-9]\d*}]',
|
||||
'AdminUsersStat:view',
|
||||
'AdminUserStat'
|
||||
);
|
||||
}
|
||||
|
||||
$r->add($r::DUO, '/admin/users', 'AdminUsers:view', 'AdminUsers');
|
||||
$r->add($r::DUO, '/admin/users/result/{data}[/{page:[1-9]\d*}]', 'AdminUsersResult:view', 'AdminUsersResult');
|
||||
$r->add($r::DUO, '/admin/users/{action:\w+}/{ids:\d+(?:-\d+)*}[/{token}]', 'AdminUsersAction:view', 'AdminUsersAction');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/users',
|
||||
'AdminUsers:view',
|
||||
'AdminUsers'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/users/result/{data}[/{page:[1-9]\d*}]',
|
||||
'AdminUsersResult:view',
|
||||
'AdminUsersResult'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/users/{action:\w+}/{ids:\d+(?:-\d+)*}[/{token}]',
|
||||
'AdminUsersAction:view',
|
||||
'AdminUsersAction'
|
||||
);
|
||||
|
||||
$r->add($r::GET, '/admin/users/promote/{uid:[2-9]|[1-9]\d+}/{pid:[1-9]\d*}/{token}', 'AdminUsersPromote:promote', 'AdminUserPromote');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/users/promote/{uid:[2-9]|[1-9]\d+}/{pid:[1-9]\d*}/{token}',
|
||||
'AdminUsersPromote:promote',
|
||||
'AdminUserPromote'
|
||||
);
|
||||
|
||||
if ($user->isAdmin) {
|
||||
$r->add($r::DUO, '/admin/users/new', 'AdminUsersNew:view', 'AdminUsersNew');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/users/new',
|
||||
'AdminUsersNew:view',
|
||||
'AdminUsersNew'
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->c->userRules->banUsers) {
|
||||
$r->add($r::DUO, '/admin/bans', 'AdminBans:view', 'AdminBans');
|
||||
$r->add($r::DUO, '/admin/bans/new[/{ids:\d+(?:-\d+)*}[/{uid:[2-9]|[1-9]\d+}]]', 'AdminBans:add', 'AdminBansNew');
|
||||
$r->add($r::DUO, '/admin/bans/edit/{id:[1-9]\d*}', 'AdminBans:edit', 'AdminBansEdit');
|
||||
$r->add($r::GET, '/admin/bans/result/{data}[/{page:[1-9]\d*}]', 'AdminBans:result', 'AdminBansResult');
|
||||
$r->add($r::GET, '/admin/bans/delete/{id:[1-9]\d*}/{token}[/{uid:[2-9]|[1-9]\d+}]', 'AdminBans:delete', 'AdminBansDelete');
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/bans',
|
||||
'AdminBans:view',
|
||||
'AdminBans'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/bans/new[/{ids:\d+(?:-\d+)*}[/{uid:[2-9]|[1-9]\d+}]]',
|
||||
'AdminBans:add',
|
||||
'AdminBansNew'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/bans/edit/{id:[1-9]\d*}',
|
||||
'AdminBans:edit',
|
||||
'AdminBansEdit'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/bans/result/{data}[/{page:[1-9]\d*}]',
|
||||
'AdminBans:result',
|
||||
'AdminBansResult'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/bans/delete/{id:[1-9]\d*}/{token}[/{uid:[2-9]|[1-9]\d+}]',
|
||||
'AdminBans:delete',
|
||||
'AdminBansDelete'
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
|
@ -168,33 +455,138 @@ class Routing
|
|||
|| '0' == $config->o_report_method
|
||||
|| '2' == $config->o_report_method
|
||||
) {
|
||||
$r->add($r::GET, '/admin/reports', 'AdminReports:view', 'AdminReports');
|
||||
$r->add($r::GET, '/admin/reports/zap/{id:[1-9]\d*}/{token}', 'AdminReports:zap', 'AdminReportsZap');
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/reports',
|
||||
'AdminReports:view',
|
||||
'AdminReports'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/reports/zap/{id:[1-9]\d*}/{token}',
|
||||
'AdminReports:zap',
|
||||
'AdminReportsZap'
|
||||
);
|
||||
}
|
||||
|
||||
$r->add($r::PST, '/moderate', 'Moderate:action', 'Moderate');
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/moderate',
|
||||
'Moderate:action',
|
||||
'Moderate'
|
||||
);
|
||||
|
||||
}
|
||||
// только админ
|
||||
if ($user->isAdmin) {
|
||||
$r->add($r::GET, '/admin/statistics/info', 'AdminStatistics:info', 'AdminInfo' );
|
||||
$r->add($r::DUO, '/admin/options', 'AdminOptions:edit', 'AdminOptions' );
|
||||
$r->add($r::DUO, '/admin/permissions', 'AdminPermissions:edit', 'AdminPermissions' );
|
||||
$r->add($r::DUO, '/admin/categories', 'AdminCategories:view', 'AdminCategories' );
|
||||
$r->add($r::DUO, '/admin/categories/{id:[1-9]\d*}/delete', 'AdminCategories:delete', 'AdminCategoriesDelete');
|
||||
$r->add($r::DUO, '/admin/forums', 'AdminForums:view', 'AdminForums' );
|
||||
$r->add($r::DUO, '/admin/forums/new', 'AdminForums:edit', 'AdminForumsNew' );
|
||||
$r->add($r::DUO, '/admin/forums/{id:[1-9]\d*}/edit', 'AdminForums:edit', 'AdminForumsEdit' );
|
||||
$r->add($r::DUO, '/admin/forums/{id:[1-9]\d*}/delete', 'AdminForums:delete', 'AdminForumsDelete' );
|
||||
$r->add($r::GET, '/admin/groups', 'AdminGroups:view', 'AdminGroups' );
|
||||
$r->add($r::PST, '/admin/groups/default', 'AdminGroups:defaultSet', 'AdminGroupsDefault');
|
||||
$r->add($r::PST, '/admin/groups/new[/{base:[1-9]\d*}]', 'AdminGroups:edit', 'AdminGroupsNew' );
|
||||
$r->add($r::DUO, '/admin/groups/{id:[1-9]\d*}/edit', 'AdminGroups:edit', 'AdminGroupsEdit' );
|
||||
$r->add($r::DUO, '/admin/groups/{id:[1-9]\d*}/delete', 'AdminGroups:delete', 'AdminGroupsDelete' );
|
||||
$r->add($r::DUO, '/admin/censoring', 'AdminCensoring:edit', 'AdminCensoring' );
|
||||
$r->add($r::DUO, '/admin/maintenance', 'AdminMaintenance:view', 'AdminMaintenance' );
|
||||
$r->add($r::PST, '/admin/maintenance/rebuild', 'AdminMaintenance:rebuild', 'AdminMaintenanceRebuild');
|
||||
$r->add($r::GET, '/admin/maintenance/rebuild/{token}/{clear:[01]}/{limit:[1-9]\d*}/{start:[1-9]\d*}', 'AdminMaintenance:rebuild', 'AdminRebuildIndex' );
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/statistics/info',
|
||||
'AdminStatistics:info',
|
||||
'AdminInfo'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/options',
|
||||
'AdminOptions:edit',
|
||||
'AdminOptions'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/permissions',
|
||||
'AdminPermissions:edit',
|
||||
'AdminPermissions'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/categories',
|
||||
'AdminCategories:view',
|
||||
'AdminCategories'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/categories/{id:[1-9]\d*}/delete',
|
||||
'AdminCategories:delete',
|
||||
'AdminCategoriesDelete'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/forums',
|
||||
'AdminForums:view',
|
||||
'AdminForums'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/forums/new',
|
||||
'AdminForums:edit',
|
||||
'AdminForumsNew'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/forums/{id:[1-9]\d*}/edit',
|
||||
'AdminForums:edit',
|
||||
'AdminForumsEdit'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/forums/{id:[1-9]\d*}/delete',
|
||||
'AdminForums:delete',
|
||||
'AdminForumsDelete'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/groups',
|
||||
'AdminGroups:view',
|
||||
'AdminGroups'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/admin/groups/default',
|
||||
'AdminGroups:defaultSet',
|
||||
'AdminGroupsDefault'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/admin/groups/new[/{base:[1-9]\d*}]',
|
||||
'AdminGroups:edit',
|
||||
'AdminGroupsNew'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/groups/{id:[1-9]\d*}/edit',
|
||||
'AdminGroups:edit',
|
||||
'AdminGroupsEdit'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/groups/{id:[1-9]\d*}/delete',
|
||||
'AdminGroups:delete',
|
||||
'AdminGroupsDelete'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/censoring',
|
||||
'AdminCensoring:edit',
|
||||
'AdminCensoring'
|
||||
);
|
||||
$r->add(
|
||||
$r::DUO,
|
||||
'/admin/maintenance',
|
||||
'AdminMaintenance:view',
|
||||
'AdminMaintenance'
|
||||
);
|
||||
$r->add(
|
||||
$r::PST,
|
||||
'/admin/maintenance/rebuild',
|
||||
'AdminMaintenance:rebuild',
|
||||
'AdminMaintenanceRebuild'
|
||||
);
|
||||
$r->add(
|
||||
$r::GET,
|
||||
'/admin/maintenance/rebuild/{token}/{clear:[01]}/{limit:[1-9]\d*}/{start:[1-9]\d*}',
|
||||
'AdminMaintenance:rebuild',
|
||||
'AdminRebuildIndex'
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -157,7 +157,14 @@ class Mysql
|
|||
{
|
||||
$table = ($noPrefix ? '' : $this->dbPrefix) . $table;
|
||||
try {
|
||||
$stmt = $this->db->query('SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?s:table', [':table' => $table]);
|
||||
$vars = [
|
||||
':table' => $table,
|
||||
];
|
||||
$query = 'SELECT 1
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?s:table';
|
||||
|
||||
$stmt = $this->db->query($query, $vars);
|
||||
$result = $stmt->fetch();
|
||||
$stmt->closeCursor();
|
||||
} catch (PDOException $e) {
|
||||
|
@ -179,7 +186,15 @@ class Mysql
|
|||
{
|
||||
$table = ($noPrefix ? '' : $this->dbPrefix) . $table;
|
||||
try {
|
||||
$stmt = $this->db->query('SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?s:table AND COLUMN_NAME = ?s:field', [':table' => $table, ':field' => $field]);
|
||||
$vars = [
|
||||
':table' => $table,
|
||||
':field' => $field,
|
||||
];
|
||||
$query = 'SELECT 1
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?s:table AND COLUMN_NAME = ?s:field';
|
||||
|
||||
$stmt = $this->db->query($query, $vars);
|
||||
$result = $stmt->fetch();
|
||||
$stmt->closeCursor();
|
||||
} catch (PDOException $e) {
|
||||
|
@ -202,7 +217,15 @@ class Mysql
|
|||
$table = ($noPrefix ? '' : $this->dbPrefix) . $table;
|
||||
$index = 'PRIMARY' == $index ? $index : $table . '_' . $index;
|
||||
try {
|
||||
$stmt = $this->db->query('SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?s:table AND INDEX_NAME = ?s:index', [':table' => $table, ':index' => $index]);
|
||||
$vars = [
|
||||
':table' => $table,
|
||||
':index' => $index,
|
||||
];
|
||||
$query = 'SELECT 1
|
||||
FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?s:table AND INDEX_NAME = ?s:index';
|
||||
|
||||
$stmt = $this->db->query($query, $vars);
|
||||
$result = $stmt->fetch();
|
||||
$stmt->closeCursor();
|
||||
} catch (PDOException $e) {
|
||||
|
@ -546,9 +569,16 @@ class Mysql
|
|||
*/
|
||||
public function getMap(): array
|
||||
{
|
||||
$stmt = $this->db->query('SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME LIKE ?s', ["{$this->dbPrefix}%"]);
|
||||
$vars = [
|
||||
"{$this->dbPrefix}%",
|
||||
];
|
||||
$query = 'SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME LIKE ?s';
|
||||
|
||||
$stmt = $this->db->query($query, $vars);
|
||||
$result = [];
|
||||
$table = null;
|
||||
$table = null;
|
||||
while ($row = $stmt->fetch()) {
|
||||
if ($table !== $row['TABLE_NAME']) {
|
||||
$table = $row['TABLE_NAME'];
|
||||
|
|
|
@ -120,7 +120,10 @@ class File
|
|||
protected function filterName(string $name): string
|
||||
{
|
||||
if (\function_exists('\\transliterator_transliterate')) {
|
||||
$name = \transliterator_transliterate("Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();", $name);
|
||||
$name = \transliterator_transliterate(
|
||||
"Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();",
|
||||
$name
|
||||
);
|
||||
}
|
||||
|
||||
$name = \trim(\preg_replace('%[^\w.-]+%', '-', $name), '-');
|
||||
|
|
|
@ -138,7 +138,17 @@ class Func
|
|||
$pages[] = [__($info, $cur, $all), 'info', null];
|
||||
$cur = \min(\max(1, $cur), $all);
|
||||
if ($cur > 1) {
|
||||
$pages[] = [$this->c->Router->link($marker, ['page' => $cur - 1] + $args), 'prev', null];
|
||||
$pages[] = [
|
||||
$this->c->Router->link(
|
||||
$marker,
|
||||
[
|
||||
'page' => $cur - 1,
|
||||
]
|
||||
+ $args
|
||||
),
|
||||
'prev',
|
||||
null,
|
||||
];
|
||||
}
|
||||
$tpl = [1 => 1];
|
||||
$start = $cur < 6 ? 2 : $cur - 2;
|
||||
|
@ -160,7 +170,17 @@ class Func
|
|||
if ($i === $cur) {
|
||||
$pages[] = [null, $i, true];
|
||||
} else {
|
||||
$pages[] = [$this->c->Router->link($marker, ['page' => $i] + $args), $i, null];
|
||||
$pages[] = [
|
||||
$this->c->Router->link(
|
||||
$marker,
|
||||
[
|
||||
'page' => $i,
|
||||
]
|
||||
+ $args
|
||||
),
|
||||
$i,
|
||||
null,
|
||||
];
|
||||
}
|
||||
$k = $i;
|
||||
}
|
||||
|
@ -168,7 +188,17 @@ class Func
|
|||
$cur > 0
|
||||
&& $cur < $all
|
||||
) {
|
||||
$pages[] = [$this->c->Router->link($marker, ['page' => $cur + 1] + $args), 'next', null];
|
||||
$pages[] = [
|
||||
$this->c->Router->link(
|
||||
$marker,
|
||||
[
|
||||
'page' => $cur + 1,
|
||||
]
|
||||
+ $args
|
||||
),
|
||||
'next',
|
||||
null,
|
||||
];
|
||||
}
|
||||
}
|
||||
return $pages;
|
||||
|
|
|
@ -101,7 +101,11 @@ class Mail
|
|||
if (
|
||||
! \is_string($email)
|
||||
|| \mb_strlen($email, 'UTF-8') > 80 //???? for DB
|
||||
|| ! \preg_match('%^(?!\.)((?:(?:^|\.)(?>"(?!\s)(?:\x5C[^\x00-\x1F]|[^\x00-\x1F\x5C"])++(?<!\s)"|[a-zA-Z0-9!#$\%&\'*+/=?^_`{|}~-]+))+)@([^\x00-\x1F\s@]++)$%Du', $email, $matches)
|
||||
|| ! \preg_match(
|
||||
'%^(?!\.)((?:(?:^|\.)(?>"(?!\s)(?:\x5C[^\x00-\x1F]|[^\x00-\x1F\x5C"])++(?<!\s)"|[a-zA-Z0-9!#$\%&\'*+/=?^_`{|}~-]+))+)@([^\x00-\x1F\s@]++)$%Du',
|
||||
$email,
|
||||
$matches
|
||||
)
|
||||
|| \mb_strlen($matches[1], 'UTF-8') > 64
|
||||
) {
|
||||
return false;
|
||||
|
|
|
@ -159,7 +159,11 @@ class Router
|
|||
// значение не обязательно
|
||||
} else {
|
||||
// $link = preg_replace('%\[[^\[\]{}]*{' . preg_quote($name, '%') . '}[^\[\]{}]*\]%', '', $link);
|
||||
$link = \preg_replace('%\[[^\[\]]*?{' . \preg_quote($name, '%') . '}[^\[\]]*+(\[((?>[^\[\]]*+)|(?1))+\])*?\]%', '', $link);
|
||||
$link = \preg_replace(
|
||||
'%\[[^\[\]]*?{' . \preg_quote($name, '%') . '}[^\[\]]*+(\[((?>[^\[\]]*+)|(?1))+\])*?\]%',
|
||||
'',
|
||||
$link
|
||||
);
|
||||
}
|
||||
}
|
||||
$link = \str_replace(['[', ']'], '', $link);
|
||||
|
@ -238,7 +242,9 @@ class Router
|
|||
$args = [];
|
||||
foreach ($keys as $key) {
|
||||
if (isset($matches[$key])) { // ???? может isset($matches[$key][0]) тут поставить?
|
||||
$args[$key] = isset($matches[$key][0]) ? \str_replace($this->subRepl, $this->subSearch, $matches[$key]) : null;
|
||||
$args[$key] = isset($matches[$key][0])
|
||||
? \str_replace($this->subRepl, $this->subSearch, $matches[$key])
|
||||
: null;
|
||||
}
|
||||
}
|
||||
return [self::OK, $handler, $args, $marker];
|
||||
|
|
|
@ -18,12 +18,14 @@ class Delete extends Method
|
|||
public function delete(int ...$ids): BanList
|
||||
{
|
||||
if (! empty($ids)) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ids' => $ids,
|
||||
];
|
||||
$sql = 'DELETE FROM ::bans WHERE id IN (?ai:ids)';
|
||||
$query = 'DELETE
|
||||
FROM ::bans
|
||||
WHERE id IN (?ai:ids)';
|
||||
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
$this->model->load();
|
||||
}
|
||||
|
||||
|
|
|
@ -98,18 +98,18 @@ class Filter extends Method
|
|||
}
|
||||
|
||||
if (empty($where)) {
|
||||
$sql = "SELECT b.id
|
||||
FROM ::bans AS b
|
||||
ORDER BY {$orderBy}";
|
||||
$query = "SELECT b.id
|
||||
FROM ::bans AS b
|
||||
ORDER BY {$orderBy}";
|
||||
} else {
|
||||
$where = \implode(' AND ', $where);
|
||||
$sql = "SELECT b.id
|
||||
FROM ::bans AS b
|
||||
WHERE {$where}
|
||||
ORDER BY {$orderBy}";
|
||||
$query = "SELECT b.id
|
||||
FROM ::bans AS b
|
||||
WHERE {$where}
|
||||
ORDER BY {$orderBy}";
|
||||
}
|
||||
|
||||
$ids = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$ids = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
return $ids;
|
||||
}
|
||||
|
|
|
@ -15,16 +15,15 @@ class GetList extends Method
|
|||
*/
|
||||
public function getList(array $ids): array
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ids' => $ids,
|
||||
];
|
||||
$sql = 'SELECT b.id, b.username, b.ip, b.email, b.message, b.expire, u.id AS id_creator, u.username AS name_creator
|
||||
FROM ::bans AS b
|
||||
LEFT JOIN ::users AS u ON u.id=b.ban_creator
|
||||
WHERE b.id IN (?ai:ids)';
|
||||
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$query = 'SELECT b.id, b.username, b.ip, b.email, b.message, b.expire, u.id AS id_creator, u.username AS name_creator
|
||||
FROM ::bans AS b
|
||||
LEFT JOIN ::users AS u ON u.id=b.ban_creator
|
||||
WHERE b.id IN (?ai:ids)';
|
||||
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
$list = \array_fill_keys($ids, false);
|
||||
|
||||
while ($row = $stmt->fetch()) {
|
||||
|
|
|
@ -34,9 +34,10 @@ class Insert extends Method
|
|||
|
||||
$ban['creator'] = $this->c->user->id;
|
||||
|
||||
$sql = 'INSERT INTO ::bans (username, ip, email, message, expire, ban_creator)
|
||||
VALUES (?s:username, ?s:ip, ?s:email, ?s:message, ?i:expire, ?i:creator)';
|
||||
$this->c->DB->exec($sql, $ban);
|
||||
$query = 'INSERT INTO ::bans (username, ip, email, message, expire, ban_creator)
|
||||
VALUES (?s:username, ?s:ip, ?s:email, ?s:message, ?i:expire, ?i:creator)';
|
||||
|
||||
$this->c->DB->exec($query, $ban);
|
||||
|
||||
return $this->model;
|
||||
}
|
||||
|
|
|
@ -33,10 +33,11 @@ class Update extends Method
|
|||
throw new InvalidArgumentException('Empty ban');
|
||||
}
|
||||
|
||||
$sql = 'UPDATE ::bans
|
||||
SET username=?s:username, ip=?s:ip, email=?s:email, message=?s:message, expire=?i:expire
|
||||
WHERE id=?i:id';
|
||||
$this->c->DB->exec($sql, $ban);
|
||||
$query = 'UPDATE ::bans
|
||||
SET username=?s:username, ip=?s:ip, email=?s:email, message=?s:message, expire=?i:expire
|
||||
WHERE id=?i:id';
|
||||
|
||||
$this->c->DB->exec($query, $ban);
|
||||
|
||||
return $this->model;
|
||||
}
|
||||
|
|
|
@ -22,10 +22,12 @@ class Manager extends ManagerModel
|
|||
*/
|
||||
public function init(): self
|
||||
{
|
||||
$sql = 'SELECT c.id, c.cat_name, c.disp_position
|
||||
FROM ::categories AS c
|
||||
ORDER BY c.disp_position';
|
||||
$this->repository = $this->c->DB->query($sql)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
$query = 'SELECT c.id, c.cat_name, c.disp_position
|
||||
FROM ::categories AS c
|
||||
ORDER BY c.disp_position';
|
||||
|
||||
$this->repository = $this->c->DB->query($query)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -58,16 +60,17 @@ class Manager extends ManagerModel
|
|||
public function update(): self
|
||||
{
|
||||
foreach ($this->modified as $key => $value) {
|
||||
$cat = $this->get($key);
|
||||
$vars = [
|
||||
$cat = $this->get($key);
|
||||
$vars = [
|
||||
':name' => $cat['cat_name'],
|
||||
':position' => $cat['disp_position'],
|
||||
':cid' => $key,
|
||||
];
|
||||
$sql = 'UPDATE ::categories
|
||||
SET cat_name=?s:name, disp_position=?i:position
|
||||
WHERE id=?i:cid';
|
||||
$this->c->DB->query($sql, $vars); //????
|
||||
$query = 'UPDATE ::categories
|
||||
SET cat_name=?s:name, disp_position=?i:position
|
||||
WHERE id=?i:cid';
|
||||
|
||||
$this->c->DB->query($query, $vars); //????
|
||||
}
|
||||
$this->modified = [];
|
||||
|
||||
|
@ -84,13 +87,13 @@ class Manager extends ManagerModel
|
|||
}
|
||||
++$pos;
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':name' => $name,
|
||||
':position' => $pos,
|
||||
];
|
||||
$sql = 'INSERT INTO ::categories (cat_name, disp_position)
|
||||
VALUES (?s:name, ?i:position)';
|
||||
$this->c->DB->query($sql, $vars);
|
||||
$query = 'INSERT INTO ::categories (cat_name, disp_position)
|
||||
VALUES (?s:name, ?i:position)';
|
||||
$this->c->DB->query($query, $vars);
|
||||
|
||||
$cid = $this->c->DB->lastInsertId();
|
||||
|
||||
|
@ -114,12 +117,14 @@ class Manager extends ManagerModel
|
|||
$this->c->forums->delete(...$del);
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':cid' => $cid,
|
||||
];
|
||||
$sql = 'DELETE FROM ::categories
|
||||
WHERE id=?i:cid';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::categories
|
||||
WHERE id=?i:cid';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
|
|
@ -14,9 +14,10 @@ class Load extends Method
|
|||
*/
|
||||
public function load(): array
|
||||
{
|
||||
$sql = 'SELECT ce.id, ce.search_for, ce.replace_with
|
||||
FROM ::censoring AS ce
|
||||
ORDER BY REPLACE(ce.search_for, \'*\', \'\')';
|
||||
return $this->c->DB->query($sql)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
$query = 'SELECT ce.id, ce.search_for, ce.replace_with
|
||||
FROM ::censoring AS ce
|
||||
ORDER BY REPLACE(ce.search_for, \'*\', \'\')';
|
||||
|
||||
return $this->c->DB->query($query)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,9 @@ class Refresh extends Method
|
|||
$search = [];
|
||||
$replace = [];
|
||||
while ($row = $stmt->fetch()) {
|
||||
$search[$row['id']] = '%(?<![\p{L}\p{N}])(' . \str_replace('\*', '[\p{L}\p{N}]*?', \preg_quote($row['search_for'], '%')).')(?![\p{L}\p{N}])%iu';
|
||||
$search[$row['id']] = '%(?<![\p{L}\p{N}])('
|
||||
. \str_replace('\*', '[\p{L}\p{N}]*?', \preg_quote($row['search_for'], '%'))
|
||||
. ')(?![\p{L}\p{N}])%iu';
|
||||
$replace[$row['id']] = $row['replace_with'];
|
||||
}
|
||||
$this->model->searchList = $search;
|
||||
|
|
|
@ -32,32 +32,37 @@ class Save extends Method
|
|||
$list[$id]['search_for'] !== $words[$id]['search_for']
|
||||
|| $list[$id]['replace_with'] !== $words[$id]['replace_with']
|
||||
) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':id' => $id,
|
||||
':search' => $list[$id]['search_for'],
|
||||
':replace' => $list[$id]['replace_with'],
|
||||
];
|
||||
$sql = 'UPDATE ::censoring
|
||||
SET search_for=?s:search, replace_with=?s:replace
|
||||
WHERE id=?i:id';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::censoring
|
||||
SET search_for=?s:search, replace_with=?s:replace
|
||||
WHERE id=?i:id';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
} elseif (0 === $id) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':search' => $list[$id]['search_for'],
|
||||
':replace' => $list[$id]['replace_with'],
|
||||
];
|
||||
$sql = 'INSERT INTO ::censoring (search_for, replace_with)
|
||||
VALUES (?s:search, ?s:replace)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'INSERT INTO ::censoring (search_for, replace_with)
|
||||
VALUES (?s:search, ?s:replace)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
if ($forDel) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':del' => $forDel
|
||||
];
|
||||
$sql = 'DELETE FROM ::censoring WHERE id IN (?ai:del)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::censoring
|
||||
WHERE id IN (?ai:del)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
$this->c->Cache->delete('censorship');
|
||||
|
|
|
@ -28,13 +28,27 @@ class Save extends Method
|
|||
];
|
||||
//????
|
||||
//????
|
||||
$count = $this->c->DB->exec('UPDATE ::config SET conf_value=?s:value WHERE conf_name=?s:name', $vars);
|
||||
$query = 'UPDATE ::config
|
||||
SET conf_value=?s:value
|
||||
WHERE conf_name=?s:name';
|
||||
|
||||
$count = $this->c->DB->exec($query, $vars);
|
||||
//????
|
||||
//????
|
||||
if (0 === $count) {
|
||||
//????
|
||||
//????
|
||||
$this->c->DB->exec('INSERT INTO ::config (conf_name, conf_value) SELECT ?s:name, ?s:value FROM ::groups WHERE NOT EXISTS (SELECT 1 FROM ::config WHERE conf_name=?s:name) LIMIT 1', $vars);
|
||||
$query = 'INSERT INTO ::config (conf_name, conf_value)
|
||||
SELECT ?s:name, ?s:value
|
||||
FROM ::groups
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM ::config
|
||||
WHERE conf_name=?s:name
|
||||
)
|
||||
LIMIT 1';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
$this->c->Cache->delete('config');
|
||||
|
|
|
@ -81,7 +81,9 @@ class Model extends ParentModel
|
|||
public function get(string $name, $default = null)
|
||||
{
|
||||
$name = $this->prefix . $name;
|
||||
return isset($_COOKIE[$name]) ? $this->c->Secury->replInvalidChars($_COOKIE[$name]) : $default;
|
||||
return isset($_COOKIE[$name])
|
||||
? $this->c->Secury->replInvalidChars($_COOKIE[$name])
|
||||
: $default;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -182,7 +184,11 @@ class Model extends ParentModel
|
|||
$passHash = $this->c->Secury->hmac($user->password . $expTime, $this->key2);
|
||||
$ckHash = $this->c->Secury->hmac($pfx . $user->id . $expTime . $passHash, $this->key1);
|
||||
|
||||
return $this->set(self::NAME, $pfx . $user->id . '_' . $expTime . '_' . $passHash . '_' . $ckHash, $expire);
|
||||
return $this->set(
|
||||
self::NAME,
|
||||
$pfx . $user->id . '_' . $expTime . '_' . $passHash . '_' . $ckHash,
|
||||
$expire
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,29 +21,29 @@ class CalcStat extends Method
|
|||
throw new RuntimeException('The model does not have ID');
|
||||
}
|
||||
|
||||
$vars = [':fid' => $this->model->id];
|
||||
$sql = 'SELECT COUNT(t.id)
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid AND t.moved_to!=0';
|
||||
$vars = [':fid' => $this->model->id];
|
||||
$query = 'SELECT COUNT(t.id)
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid AND t.moved_to!=0';
|
||||
|
||||
$moved = $this->c->DB->query($sql, $vars)->fetchColumn();
|
||||
$moved = $this->c->DB->query($query, $vars)->fetchColumn();
|
||||
|
||||
$sql = 'SELECT COUNT(t.id) as num_topics, SUM(t.num_replies) as num_replies
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid AND t.moved_to=0';
|
||||
$query = 'SELECT COUNT(t.id) as num_topics, SUM(t.num_replies) as num_replies
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid AND t.moved_to=0';
|
||||
|
||||
$result = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$result = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
$this->model->num_topics = $result['num_topics'] + $moved;
|
||||
$this->model->num_posts = $result['num_topics'] + $result['num_replies'];
|
||||
|
||||
$sql = 'SELECT t.last_post, t.last_post_id, t.last_poster, t.subject as last_topic
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid AND t.moved_to=0
|
||||
ORDER BY t.last_post DESC
|
||||
LIMIT 1';
|
||||
$query = 'SELECT t.last_post, t.last_post_id, t.last_poster, t.subject as last_topic
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid AND t.moved_to=0
|
||||
ORDER BY t.last_post DESC
|
||||
LIMIT 1';
|
||||
|
||||
$result = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$result = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
if (empty($result)) {
|
||||
$this->model->last_post = 0;
|
||||
|
|
|
@ -66,12 +66,14 @@ class Delete extends Action
|
|||
//???? подписки, опросы, предупреждения
|
||||
|
||||
if ($users) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $users,
|
||||
];
|
||||
$sql = 'DELETE FROM ::mark_of_forum
|
||||
WHERE uid IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_forum
|
||||
WHERE uid IN (?ai:users)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
//???? удаление модераторов из разделов
|
||||
}
|
||||
|
@ -80,16 +82,20 @@ class Delete extends Action
|
|||
$this->c->groups->Perm->reset($forum);
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':forums' => \array_keys($forums),
|
||||
];
|
||||
$sql = 'DELETE FROM ::mark_of_forum
|
||||
WHERE fid IN (?ai:forums)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_forum
|
||||
WHERE fid IN (?ai:forums)';
|
||||
|
||||
$sql = 'DELETE FROM ::forums
|
||||
WHERE id IN (?ai:forums)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
$query = 'DELETE
|
||||
FROM ::forums
|
||||
WHERE id IN (?ai:forums)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,28 +57,28 @@ class LoadTree extends Action
|
|||
];
|
||||
|
||||
if ($this->c->user->isGuest) {
|
||||
$sql = 'SELECT f.id, f.forum_desc, f.num_topics, f.sort_by, f.num_posts,
|
||||
f.last_post, f.last_post_id, f.last_poster, f.last_topic
|
||||
FROM ::forums AS f
|
||||
WHERE id IN (?ai:forums)';
|
||||
$query = 'SELECT f.id, f.forum_desc, f.num_topics, f.sort_by, f.num_posts,
|
||||
f.last_post, f.last_post_id, f.last_poster, f.last_topic
|
||||
FROM ::forums AS f
|
||||
WHERE id IN (?ai:forums)';
|
||||
} elseif ('1' == $this->c->config->o_forum_subscriptions) {
|
||||
$sql = 'SELECT f.id, f.forum_desc, f.num_topics, f.sort_by, f.num_posts,
|
||||
f.last_post, f.last_post_id, f.last_poster, f.last_topic,
|
||||
mof.mf_mark_all_read, s.user_id AS is_subscribed
|
||||
FROM ::forums AS f
|
||||
LEFT JOIN ::forum_subscriptions AS s ON (s.user_id=?i:uid AND s.forum_id=f.id)
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:uid AND mof.fid=f.id)
|
||||
WHERE f.id IN (?ai:forums)';
|
||||
$query = 'SELECT f.id, f.forum_desc, f.num_topics, f.sort_by, f.num_posts,
|
||||
f.last_post, f.last_post_id, f.last_poster, f.last_topic,
|
||||
mof.mf_mark_all_read, s.user_id AS is_subscribed
|
||||
FROM ::forums AS f
|
||||
LEFT JOIN ::forum_subscriptions AS s ON (s.user_id=?i:uid AND s.forum_id=f.id)
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:uid AND mof.fid=f.id)
|
||||
WHERE f.id IN (?ai:forums)';
|
||||
} else {
|
||||
$sql = 'SELECT f.id, f.forum_desc, f.num_topics, f.sort_by, f.num_posts,
|
||||
f.last_post, f.last_post_id, f.last_poster, f.last_topic,
|
||||
mof.mf_mark_all_read
|
||||
FROM ::forums AS f
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:id AND mof.fid=f.id)
|
||||
WHERE f.id IN (?ai:forums)';
|
||||
$query = 'SELECT f.id, f.forum_desc, f.num_topics, f.sort_by, f.num_posts,
|
||||
f.last_post, f.last_post_id, f.last_poster, f.last_topic,
|
||||
mof.mf_mark_all_read
|
||||
FROM ::forums AS f
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:id AND mof.fid=f.id)
|
||||
WHERE f.id IN (?ai:forums)';
|
||||
}
|
||||
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
while ($cur = $stmt->fetch()) {
|
||||
$list[$cur['id']]->replAttrs($cur)->__ready = true;
|
||||
}
|
||||
|
@ -113,19 +113,20 @@ class LoadTree extends Action
|
|||
}
|
||||
|
||||
// проверка по темам
|
||||
$vars = [
|
||||
$vars = [
|
||||
':uid' => $this->c->user->id,
|
||||
':forums' => \array_keys($time),
|
||||
':max' => $max,
|
||||
];
|
||||
$sql = 'SELECT t.forum_id, t.last_post
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND mot.tid=t.id)
|
||||
WHERE t.forum_id IN(?ai:forums)
|
||||
AND t.last_post>?i:max
|
||||
AND t.moved_to=0
|
||||
AND (mot.mt_last_visit IS NULL OR t.last_post>mot.mt_last_visit)';
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$query = 'SELECT t.forum_id, t.last_post
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND mot.tid=t.id)
|
||||
WHERE t.forum_id IN(?ai:forums)
|
||||
AND t.last_post>?i:max
|
||||
AND t.moved_to=0
|
||||
AND (mot.mt_last_visit IS NULL OR t.last_post>mot.mt_last_visit)';
|
||||
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
while ($cur = $stmt->fetch()) {
|
||||
if ($cur['last_post'] > $time[$cur['forum_id']]) {
|
||||
$list[$cur['forum_id']]->__newMessages = true; //????
|
||||
|
|
|
@ -29,37 +29,46 @@ class Markread extends Action
|
|||
|
||||
$this->c->users->update($user);
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':uid' => $user->id,
|
||||
];
|
||||
$sql = 'DELETE FROM ::mark_of_topic WHERE uid=?i:uid';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_topic
|
||||
WHERE uid=?i:uid';
|
||||
|
||||
$sql = 'DELETE FROM ::mark_of_forum WHERE uid=?i:uid';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_forum
|
||||
WHERE uid=?i:uid';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
} elseif ($forum->id > 0) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':uid' => $user->id,
|
||||
':fid' => $forum->id,
|
||||
':mark' => \time(),
|
||||
];
|
||||
$sql = 'DELETE FROM ::mark_of_topic
|
||||
WHERE uid=?i:uid AND tid IN (
|
||||
SELECT id
|
||||
FROM ::topics
|
||||
WHERE forum_id=?i:fid
|
||||
)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_topic
|
||||
WHERE uid=?i:uid AND tid IN (
|
||||
SELECT id
|
||||
FROM ::topics
|
||||
WHERE forum_id=?i:fid
|
||||
)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
if ($user->mf_mark_all_read) { // ????
|
||||
$sql = 'UPDATE ::mark_of_forum
|
||||
SET mf_mark_all_read=?i:mark
|
||||
WHERE uid=?i:uid AND fid=?i:fid';
|
||||
$query = 'UPDATE ::mark_of_forum
|
||||
SET mf_mark_all_read=?i:mark
|
||||
WHERE uid=?i:uid AND fid=?i:fid';
|
||||
} else { // ????
|
||||
$sql = 'INSERT INTO ::mark_of_forum (uid, fid, mf_mark_all_read)
|
||||
VALUES (?i:uid, ?i:fid, ?i:mark)';
|
||||
$query = 'INSERT INTO ::mark_of_forum (uid, fid, mf_mark_all_read)
|
||||
VALUES (?i:uid, ?i:fid, ?i:mark)';
|
||||
}
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
} else {
|
||||
throw new RuntimeException('The model does not have ID');
|
||||
}
|
||||
|
|
|
@ -105,7 +105,13 @@ class Model extends DataModel
|
|||
if (0 === $this->id) {
|
||||
return $this->c->Router->link('Index');
|
||||
} else {
|
||||
return $this->c->Router->link('Forum', ['id' => $this->id, 'name' => $this->forum_name]);
|
||||
return $this->c->Router->link(
|
||||
'Forum',
|
||||
[
|
||||
'id' => $this->id,
|
||||
'name' => $this->forum_name,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -117,9 +123,20 @@ class Model extends DataModel
|
|||
protected function getlinkNew(): string
|
||||
{
|
||||
if (0 === $this->id) {
|
||||
return $this->c->Router->link('SearchAction', ['action' => 'new']);
|
||||
return $this->c->Router->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'new',
|
||||
]
|
||||
);
|
||||
} else {
|
||||
return $this->c->Router->link('SearchAction', ['action' => 'new', 'forum' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'new',
|
||||
'forum' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -133,7 +150,12 @@ class Model extends DataModel
|
|||
if ($this->last_post_id < 1) {
|
||||
return null;
|
||||
} else {
|
||||
return $this->c->Router->link('ViewPost', ['id' => $this->last_post_id]);
|
||||
return $this->c->Router->link(
|
||||
'ViewPost',
|
||||
[
|
||||
'id' => $this->last_post_id,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,7 +166,12 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getlinkCreateTopic(): string
|
||||
{
|
||||
return $this->c->Router->link('NewTopic', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'NewTopic',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -154,10 +181,17 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getlinkMarkRead(): string
|
||||
{
|
||||
return $this->c->Router->link('MarkRead', [
|
||||
return $this->c->Router->link(
|
||||
'MarkRead', [
|
||||
'id' => $this->id,
|
||||
'token' => $this->c->Csrf->create('MarkRead', ['id' => $this->id]),
|
||||
]);
|
||||
'token' => $this->c->Csrf->create(
|
||||
'MarkRead',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -311,7 +345,12 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getpagination(): array
|
||||
{
|
||||
return $this->c->Func->paginate($this->numPages, $this->page, 'Forum', ['id' => $this->id, 'name' => $this->forum_name]);
|
||||
return $this->c->Func->paginate(
|
||||
$this->numPages,
|
||||
$this->page,
|
||||
'Forum',
|
||||
['id' => $this->id, 'name' => $this->forum_name]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -353,18 +392,18 @@ class Model extends DataModel
|
|||
break;
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':fid' => $this->id,
|
||||
':offset' => ($this->page - 1) * $this->c->user->disp_topics,
|
||||
':rows' => $this->c->user->disp_topics,
|
||||
];
|
||||
$sql = "SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid
|
||||
ORDER BY t.sticky DESC, {$sortBy}, t.id DESC
|
||||
LIMIT ?i:offset, ?i:rows";
|
||||
$query = "SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id=?i:fid
|
||||
ORDER BY t.sticky DESC, {$sortBy}, t.id DESC
|
||||
LIMIT ?i:offset, ?i:rows";
|
||||
|
||||
$this->idsList = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$this->idsList = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
return empty($this->idsList) ? [] : $this->c->topics->view($this);
|
||||
}
|
||||
|
|
|
@ -31,19 +31,19 @@ class Refresh extends Action
|
|||
}
|
||||
|
||||
if ('1' == $read) {
|
||||
$list = [];
|
||||
$vars = [
|
||||
$list = [];
|
||||
$vars = [
|
||||
':gid' => $gid,
|
||||
];
|
||||
$sql = 'SELECT f.cat_id, c.cat_name, f.id, f.forum_name, f.redirect_url, f.parent_forum_id,
|
||||
f.moderators, f.no_sum_mess, f.disp_position, fp.post_topics, fp.post_replies
|
||||
FROM ::categories AS c
|
||||
INNER JOIN ::forums AS f ON c.id=f.cat_id
|
||||
LEFT JOIN ::forum_perms AS fp ON (fp.group_id=?i:gid AND fp.forum_id=f.id)
|
||||
WHERE fp.read_forum IS NULL OR fp.read_forum=1
|
||||
ORDER BY c.disp_position, c.id, f.disp_position';
|
||||
$query = 'SELECT f.cat_id, c.cat_name, f.id, f.forum_name, f.redirect_url, f.parent_forum_id,
|
||||
f.moderators, f.no_sum_mess, f.disp_position, fp.post_topics, fp.post_replies
|
||||
FROM ::categories AS c
|
||||
INNER JOIN ::forums AS f ON c.id=f.cat_id
|
||||
LEFT JOIN ::forum_perms AS fp ON (fp.group_id=?i:gid AND fp.forum_id=f.id)
|
||||
WHERE fp.read_forum IS NULL OR fp.read_forum=1
|
||||
ORDER BY c.disp_position, c.id, f.disp_position';
|
||||
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
while ($row = $stmt->fetch()) {
|
||||
$row['moderators'] = $this->formatModers($row['moderators']);
|
||||
$list[$row['id']] = $row;
|
||||
|
|
|
@ -40,8 +40,10 @@ class Save extends Action
|
|||
return $forum;
|
||||
}
|
||||
$vars[] = $forum->id;
|
||||
$query = 'UPDATE ::forums
|
||||
SET ' . \implode(', ', $set) . ' WHERE id=?i';
|
||||
|
||||
$this->c->DB->exec('UPDATE ::forums SET ' . \implode(', ', $set) . ' WHERE id=?i', $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
// модификация категории у потомков при ее изменении
|
||||
if (
|
||||
|
@ -51,13 +53,15 @@ class Save extends Action
|
|||
foreach ($forum->descendants as $f) {
|
||||
$f->__cat_id = $values['cat_id'];
|
||||
}
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ids' => \array_keys($forum->descendants),
|
||||
':category' => $values['cat_id'],
|
||||
];
|
||||
$sql = 'UPDATE ::forums SET cat_id=?i:category WHERE id IN (?ai:ids)';
|
||||
$query = 'UPDATE ::forums
|
||||
SET cat_id=?i:category
|
||||
WHERE id IN (?ai:ids)';
|
||||
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
$forum->resModified();
|
||||
|
@ -93,7 +97,11 @@ class Save extends Action
|
|||
if (empty($set)) {
|
||||
throw new RuntimeException('The model is empty');
|
||||
}
|
||||
$this->c->DB->query('INSERT INTO ::forums (' . \implode(', ', $set) . ') VALUES (' . \implode(', ', $set2) . ')', $vars);
|
||||
|
||||
$query = 'INSERT INTO ::forums (' . \implode(', ', $set) . ')
|
||||
VALUES (' . \implode(', ', $set2) . ')';
|
||||
|
||||
$this->c->DB->query($query, $vars);
|
||||
$forum->id = $this->c->DB->lastInsertId();
|
||||
$forum->resModified();
|
||||
|
||||
|
|
|
@ -21,11 +21,13 @@ class Delete extends Action
|
|||
|
||||
$this->manager->Perm->delete($group);
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':gid' => $group->g_id,
|
||||
];
|
||||
$sql = 'DELETE FROM ::groups
|
||||
WHERE g_id=?i:gid';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::groups
|
||||
WHERE g_id=?i:gid';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,12 @@ class Model extends DataModel
|
|||
{
|
||||
protected function getlinkEdit(): string
|
||||
{
|
||||
return $this->c->Router->link('AdminGroupsEdit', ['id' => $this->g_id]);
|
||||
return $this->c->Router->link(
|
||||
'AdminGroupsEdit',
|
||||
[
|
||||
'id' => $this->g_id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
protected function getcanDelete(): bool
|
||||
|
@ -24,7 +29,14 @@ class Model extends DataModel
|
|||
|
||||
protected function getlinkDelete(): ?string
|
||||
{
|
||||
return $this->canDelete ? $this->c->Router->link('AdminGroupsDelete', ['id' => $this->g_id]) : null;
|
||||
return $this->canDelete
|
||||
? $this->c->Router->link(
|
||||
'AdminGroupsDelete',
|
||||
[
|
||||
'id' => $this->g_id,
|
||||
]
|
||||
)
|
||||
: null;
|
||||
}
|
||||
|
||||
protected function getgroupGuest(): bool
|
||||
|
|
|
@ -26,16 +26,17 @@ class Perm extends Action
|
|||
*/
|
||||
public function get(Forum $forum): array
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':fid' => $forum->id > 0 ? $forum->id : 0,
|
||||
':adm' => $this->c->GROUP_ADMIN,
|
||||
];
|
||||
$sql = 'SELECT g.g_id, fp.read_forum, fp.post_replies, fp.post_topics
|
||||
FROM ::groups AS g
|
||||
LEFT JOIN ::forum_perms AS fp ON (g.g_id=fp.group_id AND fp.forum_id=?i:fid)
|
||||
WHERE g.g_id!=?i:adm
|
||||
ORDER BY g.g_id';
|
||||
$perms = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
$query = 'SELECT g.g_id, fp.read_forum, fp.post_replies, fp.post_topics
|
||||
FROM ::groups AS g
|
||||
LEFT JOIN ::forum_perms AS fp ON (g.g_id=fp.group_id AND fp.forum_id=?i:fid)
|
||||
WHERE g.g_id!=?i:adm
|
||||
ORDER BY g.g_id';
|
||||
|
||||
$perms = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
|
||||
$result = [];
|
||||
foreach ($perms as $gid => $perm) {
|
||||
|
@ -95,13 +96,15 @@ class Perm extends Action
|
|||
$modDef
|
||||
|| $modPerm
|
||||
) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':gid' => $id,
|
||||
':fid' => $forum->id,
|
||||
];
|
||||
$sql = 'DELETE FROM ::forum_perms
|
||||
WHERE group_id=?i:gid AND forum_id=?i:fid';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::forum_perms
|
||||
WHERE group_id=?i:gid AND forum_id=?i:fid';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
if ($modDef) {
|
||||
|
@ -112,8 +115,10 @@ class Perm extends Action
|
|||
$list[] = 'group_id';
|
||||
$list[] = 'forum_id';
|
||||
$list2 = \array_fill(0, \count($list), '?i');
|
||||
$sql = 'INSERT INTO ::forum_perms (' . \implode(', ', $list) . ') VALUES (' . \implode(', ', $list2) . ')';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'INSERT INTO ::forum_perms (' . \implode(', ', $list) . ')
|
||||
VALUES (' . \implode(', ', $list2) . ')';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -131,12 +136,14 @@ class Perm extends Action
|
|||
throw new RuntimeException('The forum does not have ID');
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':fid' => $forum->id,
|
||||
];
|
||||
$sql = 'DELETE FROM ::forum_perms
|
||||
WHERE forum_id=?i:fid';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::forum_perms
|
||||
WHERE forum_id=?i:fid';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -152,12 +159,14 @@ class Perm extends Action
|
|||
throw new RuntimeException('The group does not have ID');
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':gid' => $group->g_id,
|
||||
];
|
||||
$sql = 'DELETE FROM ::forum_perms
|
||||
WHERE group_id=?i:gid';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::forum_perms
|
||||
WHERE group_id=?i:gid';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -179,15 +188,15 @@ class Perm extends Action
|
|||
|
||||
$this->delete($to);
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':old' => $from->g_id,
|
||||
':new' => $to->g_id,
|
||||
];
|
||||
$sql = 'INSERT INTO ::forum_perms (group_id, forum_id, read_forum, post_replies, post_topics)
|
||||
SELECT ?i:new, forum_id, read_forum, post_replies, post_topics
|
||||
FROM ::forum_perms
|
||||
WHERE group_id=?i:old';
|
||||
$query = 'INSERT INTO ::forum_perms (group_id, forum_id, read_forum, post_replies, post_topics)
|
||||
SELECT ?i:new, forum_id, read_forum, post_replies, post_topics
|
||||
FROM ::forum_perms
|
||||
WHERE group_id=?i:old';
|
||||
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,10 +25,13 @@ class Info extends Method
|
|||
if ('1' == $this->c->user->g_view_users) {
|
||||
foreach ($this->model->users as $id => $name) {
|
||||
$info[] = [
|
||||
$this->c->Router->link('User', [
|
||||
'id' => $id,
|
||||
'name' => $name,
|
||||
]),
|
||||
$this->c->Router->link(
|
||||
'User',
|
||||
[
|
||||
'id' => $id,
|
||||
'name' => $name,
|
||||
]
|
||||
),
|
||||
$name,
|
||||
];
|
||||
}
|
||||
|
|
|
@ -56,11 +56,19 @@ class Model extends ParentModel
|
|||
$needClean = false;
|
||||
|
||||
if ($detail) {
|
||||
$sql = 'SELECT o.user_id, o.ident, o.logged, o.o_position, o.o_name FROM ::online AS o ORDER BY o.logged';
|
||||
$query = 'SELECT o.user_id, o.ident, o.logged, o.o_position, o.o_name
|
||||
FROM ::online AS o
|
||||
ORDER BY o.logged';
|
||||
} else {
|
||||
$sql = 'SELECT o.user_id, o.ident, o.logged FROM ::online AS o ORDER BY o.logged';
|
||||
$query = 'SELECT o.user_id, o.ident, o.logged
|
||||
FROM ::online AS o
|
||||
ORDER BY o.logged';
|
||||
}
|
||||
$stmt = $this->c->DB->query($sql);
|
||||
$stmt = $this->c->DB->query($query);
|
||||
|
||||
$query = 'UPDATE ::users
|
||||
SET last_visit=?i:last
|
||||
WHERE id=?i:id';
|
||||
|
||||
while ($cur = $stmt->fetch()) {
|
||||
$this->visits[$cur['user_id']] = $cur['logged'];
|
||||
|
@ -71,7 +79,12 @@ class Model extends ParentModel
|
|||
$needClean = true;
|
||||
|
||||
if ($cur['user_id'] > 1) {
|
||||
$this->c->DB->exec('UPDATE ::users SET last_visit=?i:last WHERE id=?i:id', [':last' => $cur['logged'], ':id' => $cur['user_id']]); //????
|
||||
$vars = [
|
||||
':last' => $cur['logged'],
|
||||
':id' => $cur['user_id'],
|
||||
];
|
||||
|
||||
$this->c->DB->exec($query, $vars); //????
|
||||
}
|
||||
}
|
||||
continue;
|
||||
|
@ -107,7 +120,13 @@ class Model extends ParentModel
|
|||
|
||||
// удаление просроченных посетителей
|
||||
if ($needClean) {
|
||||
$this->c->DB->exec('DELETE FROM ::online WHERE logged<?i:visit', [':visit' => $tVisit]);
|
||||
$vars = [
|
||||
':visit' => $tVisit,
|
||||
];
|
||||
$query = 'DELETE FROM ::online
|
||||
WHERE logged<?i:visit';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
// обновление максимального значение посетителей онлайн
|
||||
|
@ -146,11 +165,24 @@ class Model extends ParentModel
|
|||
':name' => (string) $this->c->user->isBot,
|
||||
':ip' => $this->c->user->ip
|
||||
];
|
||||
|
||||
if ($this->c->user->logged > 0) {
|
||||
$this->c->DB->exec('UPDATE ::online SET logged=?i:logged, o_position=?s:pos, o_name=?s:name WHERE user_id=1 AND ident=?s:ip', $vars);
|
||||
$query = 'UPDATE ::online
|
||||
SET logged=?i:logged, o_position=?s:pos, o_name=?s:name
|
||||
WHERE user_id=1 AND ident=?s:ip';
|
||||
} else {
|
||||
$this->c->DB->exec('INSERT INTO ::online (user_id, ident, logged, o_position, o_name) SELECT 1, ?s:ip, ?i:logged, ?s:pos, ?s:name FROM ::groups WHERE NOT EXISTS (SELECT 1 FROM ::online WHERE user_id=1 AND ident=?s:ip) LIMIT 1', $vars);
|
||||
$query = 'INSERT INTO ::online (user_id, ident, logged, o_position, o_name)
|
||||
SELECT 1, ?s:ip, ?i:logged, ?s:pos, ?s:name
|
||||
FROM ::groups
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM ::online
|
||||
WHERE user_id=1 AND ident=?s:ip
|
||||
)
|
||||
LIMIT 1';
|
||||
}
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
} else {
|
||||
// пользователь
|
||||
$vars = [
|
||||
|
@ -159,11 +191,24 @@ class Model extends ParentModel
|
|||
':id' => $this->c->user->id,
|
||||
':name' => $this->c->user->username,
|
||||
];
|
||||
|
||||
if ($this->c->user->logged > 0) {
|
||||
$this->c->DB->exec('UPDATE ::online SET logged=?i:logged, o_position=?s:pos WHERE user_id=?i:id', $vars);
|
||||
$query = 'UPDATE ::online
|
||||
SET logged=?i:logged, o_position=?s:pos
|
||||
WHERE user_id=?i:id';
|
||||
} else {
|
||||
$this->c->DB->exec('INSERT INTO ::online (user_id, ident, logged, o_position) SELECT ?i:id, ?s:name, ?i:logged, ?s:pos FROM ::groups WHERE NOT EXISTS (SELECT 1 FROM ::online WHERE user_id=?i:id) LIMIT 1', $vars);
|
||||
$query = 'INSERT INTO ::online (user_id, ident, logged, o_position)
|
||||
SELECT ?i:id, ?s:name, ?i:logged, ?s:pos
|
||||
FROM ::groups
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM ::online
|
||||
WHERE user_id=?i:id
|
||||
)
|
||||
LIMIT 1';
|
||||
}
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -175,9 +220,21 @@ class Model extends ParentModel
|
|||
public function delete(User $user): void
|
||||
{
|
||||
if ($user->isGuest) {
|
||||
$this->c->DB->exec('DELETE FROM ::online WHERE user_id=1 AND ident=?s:ip', [':ip' => $user->ip]);
|
||||
$vars = [
|
||||
':ip' => $user->ip,
|
||||
];
|
||||
$query = 'DELETE
|
||||
FROM ::online
|
||||
WHERE user_id=1 AND ident=?s:ip';
|
||||
} else {
|
||||
$this->c->DB->exec('DELETE FROM ::online WHERE user_id=?i:id', [':id' => $user->id]);
|
||||
$vars = [
|
||||
':id' => $user->id,
|
||||
];
|
||||
$query = 'DELETE
|
||||
FROM ::online
|
||||
WHERE user_id=?i:id';
|
||||
}
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,19 +87,34 @@ abstract class Page extends Model
|
|||
) {
|
||||
$sub = [];
|
||||
$sub['latest'] = [
|
||||
$r->link('SearchAction', ['action' => 'latest_active_topics']),
|
||||
$r->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'latest_active_topics',
|
||||
]
|
||||
),
|
||||
'Latest active topics',
|
||||
'Find latest active topics',
|
||||
];
|
||||
if (! $this->user->isGuest) {
|
||||
$sub['with-your-posts'] = [
|
||||
$r->link('SearchAction', ['action' => 'topics_with_your_posts']),
|
||||
$r->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'topics_with_your_posts',
|
||||
]
|
||||
),
|
||||
'Topics with your posts',
|
||||
'Find topics with your posts',
|
||||
];
|
||||
}
|
||||
$sub['unanswered'] = [
|
||||
$r->link('SearchAction', ['action' => 'unanswered_topics']),
|
||||
$r->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'unanswered_topics',
|
||||
]
|
||||
),
|
||||
'Unanswered topics',
|
||||
'Find unanswered topics',
|
||||
];
|
||||
|
@ -128,7 +143,15 @@ abstract class Page extends Model
|
|||
$nav['admin'] = [$r->link('Admin'), 'Admin'];
|
||||
}
|
||||
|
||||
$nav['logout'] = [$r->link('Logout', ['token' => $this->c->Csrf->create('Logout')]), 'Logout'];
|
||||
$nav['logout'] = [
|
||||
$r->link(
|
||||
'Logout',
|
||||
[
|
||||
'token' => $this->c->Csrf->create('Logout'),
|
||||
]
|
||||
),
|
||||
'Logout',
|
||||
];
|
||||
}
|
||||
|
||||
if (
|
||||
|
|
|
@ -254,9 +254,15 @@ class Bans extends Admin
|
|||
protected function formBan(array $data = [], array $args = []): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link($this->formBanPage, $args),
|
||||
'action' => $this->c->Router->link(
|
||||
$this->formBanPage,
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create($this->formBanPage, $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
$this->formBanPage,
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [
|
||||
|
@ -411,7 +417,15 @@ class Bans extends Admin
|
|||
|
||||
$this->nameTpl = 'admin/bans_result';
|
||||
$this->mainSuffix = '-one-column';
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminBansResult', ['data' => $args['data']]), __('Results head')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminBansResult',
|
||||
[
|
||||
'data' => $args['data'],
|
||||
]
|
||||
),
|
||||
__('Results head'),
|
||||
];
|
||||
$this->formResult = $this->form($banList, $startNum, $args);
|
||||
$this->pagination = $this->c->Func->paginate($pages, $page, 'AdminBansResult', ['data' => $args['data']]);
|
||||
|
||||
|
@ -496,7 +510,13 @@ class Bans extends Admin
|
|||
'type' => '1' == $this->c->user->g_view_users && $ban['id_creator'] > 1 ? 'link' : 'str',
|
||||
'caption' => __('Results banned by head'),
|
||||
'value' => $ban['name_creator'],
|
||||
'href' => $this->c->Router->link('User', ['id' => $ban['id_creator'], 'name' => $ban['name_creator'],]), // ????
|
||||
'href' => $this->c->Router->link(
|
||||
'User',
|
||||
[
|
||||
'id' => $ban['id_creator'],
|
||||
'name' => $ban['name_creator'],
|
||||
]
|
||||
), // ????
|
||||
];
|
||||
$fields[] = [
|
||||
'type' => 'endwrap',
|
||||
|
@ -515,7 +535,10 @@ class Bans extends Admin
|
|||
'value' => '✎',
|
||||
'caption' => __('Results actions head'),
|
||||
'title' => __('Edit'),
|
||||
'link' => $this->c->Router->link('AdminBansEdit', $arr),
|
||||
'link' => $this->c->Router->link(
|
||||
'AdminBansEdit',
|
||||
$arr
|
||||
),
|
||||
];
|
||||
$fields["delete-btn{$number}"] = [
|
||||
'class' => ['result', 'btn-delete'],
|
||||
|
@ -523,10 +546,16 @@ class Bans extends Admin
|
|||
'value' => '❌',
|
||||
'caption' => __('Results actions head'),
|
||||
'title' => __('Delete'),
|
||||
'link' => $this->c->Router->link('AdminBansDelete', [
|
||||
'id' => $ban['id'],
|
||||
'token' => $this->c->Csrf->create('AdminBansDelete', $arr),
|
||||
]),
|
||||
'link' => $this->c->Router->link(
|
||||
'AdminBansDelete',
|
||||
[
|
||||
'id' => $ban['id'],
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminBansDelete',
|
||||
$arr
|
||||
),
|
||||
]
|
||||
),
|
||||
];
|
||||
$fields[] = [
|
||||
'type' => 'endwrap',
|
||||
|
@ -746,8 +775,14 @@ class Bans extends Admin
|
|||
}
|
||||
}
|
||||
|
||||
$this->aCrumbs[] = [$this->c->Router->link($this->formBanPage, $args), $this->formBanSubHead];
|
||||
$this->formBan = $this->formBan($data, $args);
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
$this->formBanPage,
|
||||
$args
|
||||
),
|
||||
$this->formBanSubHead,
|
||||
];
|
||||
$this->formBan = $this->formBan($data, $args);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
|
|
@ -106,7 +106,12 @@ class Categories extends Admin
|
|||
'type' => 'btn',
|
||||
'value' => '❌',
|
||||
'caption' => __('Delete'),
|
||||
'link' => $this->c->Router->link('AdminCategoriesDelete', ['id' => $key]),
|
||||
'link' => $this->c->Router->link(
|
||||
'AdminCategoriesDelete',
|
||||
[
|
||||
'id' => $key,
|
||||
]
|
||||
),
|
||||
];
|
||||
$form['sets']["category{$key}"] = [
|
||||
'class' => 'category',
|
||||
|
@ -175,7 +180,15 @@ class Categories extends Admin
|
|||
|
||||
$this->nameTpl = 'admin/form';
|
||||
$this->aIndex = 'categories';
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminCategoriesDelete', ['id' => $args['id']]), __('Delete category head')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminCategoriesDelete',
|
||||
[
|
||||
'id' => $args['id'],
|
||||
]
|
||||
),
|
||||
__('Delete category head'),
|
||||
];
|
||||
$this->aCrumbs[] = __('"%s"', $category['cat_name']);
|
||||
$this->form = $this->formDelete($args, $category);
|
||||
$this->classForm = 'deletecategory';
|
||||
|
@ -195,9 +208,15 @@ class Categories extends Admin
|
|||
protected function formDelete(array $args, array $category): array
|
||||
{
|
||||
return [
|
||||
'action' => $this->c->Router->link('AdminCategoriesDelete', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'AdminCategoriesDelete',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('AdminCategoriesDelete', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminCategoriesDelete',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'del' => [
|
||||
|
|
|
@ -182,7 +182,12 @@ class Forums extends Admin
|
|||
'type' => 'btn',
|
||||
'value' => $forum->forum_name,
|
||||
'caption' => __('Forum label'),
|
||||
'link' => $this->c->Router->link('AdminForumsEdit', ['id' => $forum->id]),
|
||||
'link' => $this->c->Router->link(
|
||||
'AdminForumsEdit',
|
||||
[
|
||||
'id' => $forum->id,
|
||||
]
|
||||
),
|
||||
];
|
||||
$fields["form[{$forum->id}][disp_position]"] = [
|
||||
'class' => ['position', 'forum'],
|
||||
|
@ -198,7 +203,14 @@ class Forums extends Admin
|
|||
'type' => 'btn',
|
||||
'value' => '❌',
|
||||
'caption' => __('Delete'),
|
||||
'link' => $disabled ? '#' : $this->c->Router->link('AdminForumsDelete', ['id' => $forum->id]),
|
||||
'link' => $disabled
|
||||
? '#'
|
||||
: $this->c->Router->link(
|
||||
'AdminForumsDelete',
|
||||
[
|
||||
'id' => $forum->id,
|
||||
]
|
||||
),
|
||||
'disabled' => $disabled,
|
||||
];
|
||||
$form['sets']["forum{$forum->id}"] = [
|
||||
|
@ -259,7 +271,15 @@ class Forums extends Admin
|
|||
|
||||
$this->nameTpl = 'admin/form';
|
||||
$this->aIndex = 'forums';
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminForumsDelete', ['id' => $forum->id]), __('Delete forum head')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminForumsDelete',
|
||||
[
|
||||
'id' => $forum->id,
|
||||
]
|
||||
),
|
||||
__('Delete forum head'),
|
||||
];
|
||||
$this->aCrumbs[] = __('"%s"', $forum->forum_name);
|
||||
$this->form = $this->formDelete($args, $forum);
|
||||
$this->classForm = 'deleteforum';
|
||||
|
@ -279,9 +299,15 @@ class Forums extends Admin
|
|||
protected function formDelete(array $args, Forum $forum): array
|
||||
{
|
||||
return [
|
||||
'action' => $this->c->Router->link('AdminForumsDelete', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'AdminForumsDelete',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('AdminForumsDelete', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminForumsDelete',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'confirm' => [
|
||||
|
@ -337,13 +363,19 @@ class Forums extends Admin
|
|||
if (empty($args['id'])) {
|
||||
$forum = $this->c->forums->create();
|
||||
$marker = 'AdminForumsNew';
|
||||
$this->aCrumbs[] = [$this->c->Router->link($marker), __('Add forum head')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link($marker),
|
||||
__('Add forum head'),
|
||||
];
|
||||
$this->titleForm = __('Add forum head');
|
||||
$this->classForm = 'createforum';
|
||||
} else {
|
||||
$forum = $this->c->forums->loadTree((int) $args['id']); //?????
|
||||
$marker = 'AdminForumsEdit';
|
||||
$this->aCrumbs[] = [$this->c->Router->link($marker, $args), __('Edit forum head')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link($marker, $args),
|
||||
__('Edit forum head'),
|
||||
];
|
||||
$this->aCrumbs[] = __('"%s"', $forum->forum_name);
|
||||
$this->titleForm = __('Edit forum head');
|
||||
$this->classForm = 'editforum';
|
||||
|
@ -433,9 +465,15 @@ class Forums extends Admin
|
|||
protected function formEdit(array $args, Forum $forum, string $marker): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link($marker, $args),
|
||||
'action' => $this->c->Router->link(
|
||||
$marker,
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create($marker, $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
$marker,
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [],
|
||||
|
|
|
@ -210,7 +210,13 @@ class Groups extends Admin
|
|||
$marker = 'AdminGroupsEdit';
|
||||
$vars = ['id' => $group->g_id];
|
||||
$notNext .= ',' . $group->g_id;
|
||||
$this->aCrumbs[] = [$this->c->Router->link($marker, $vars), __('Edit group')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
$marker,
|
||||
$vars
|
||||
),
|
||||
__('Edit group'),
|
||||
];
|
||||
$this->aCrumbs[] = __('"%s"', $group->g_title);
|
||||
$this->titleForm = __('Edit group');
|
||||
$this->classForm = 'editgroup';
|
||||
|
@ -366,9 +372,15 @@ class Groups extends Admin
|
|||
protected function formEdit(array $args, Group $group, string $marker): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link($marker, $args),
|
||||
'action' => $this->c->Router->link(
|
||||
$marker,
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create($marker, $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
$marker,
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [
|
||||
|
@ -717,7 +729,13 @@ class Groups extends Admin
|
|||
|
||||
|
||||
$this->nameTpl = 'admin/form';
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminGroupsDelete', $args), __('Group delete')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminGroupsDelete',
|
||||
$args
|
||||
),
|
||||
__('Group delete'),
|
||||
];
|
||||
$this->aCrumbs[] = __('"%s"', $group->g_title);
|
||||
$this->form = $this->formDelete($args, $group, $count, $groups);
|
||||
$this->titleForm = __('Group delete');
|
||||
|
@ -739,9 +757,15 @@ class Groups extends Admin
|
|||
protected function formDelete(array $args, Group $group, int $count, array $groups): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('AdminGroupsDelete', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'AdminGroupsDelete',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('AdminGroupsDelete', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminGroupsDelete',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [
|
||||
|
|
|
@ -33,7 +33,12 @@ class Host extends Admin
|
|||
$this->back = true;
|
||||
$this->fIswev = [
|
||||
'i',
|
||||
__('Host info', $ip, $host, $this->c->Router->link('AdminUsersResult', ['data' => "ip:{$ip}"])),
|
||||
__('Host info', $ip, $host, $this->c->Router->link(
|
||||
'AdminUsersResult',
|
||||
[
|
||||
'data' => "ip:{$ip}",
|
||||
]
|
||||
)),
|
||||
];
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -296,8 +296,8 @@ class Options extends Admin
|
|||
];
|
||||
|
||||
$timestamp = \time() + ($this->user->timezone + $this->user->dst) * 3600;
|
||||
$time = \ForkBB\dt($timestamp, false, $config->o_date_format, $config->o_time_format, true, true);
|
||||
$date = \ForkBB\dt($timestamp, true, $config->o_date_format, $config->o_time_format, false, true);
|
||||
$time = \ForkBB\dt($timestamp, false, $config->o_date_format, $config->o_time_format, true, true);
|
||||
$date = \ForkBB\dt($timestamp, true, $config->o_date_format, $config->o_time_format, false, true);
|
||||
|
||||
$form['sets']['timeouts'] = [
|
||||
'legend' => __('Timeouts subhead'),
|
||||
|
|
|
@ -150,7 +150,13 @@ class Action extends Users
|
|||
$this->nameTpl = 'admin/form';
|
||||
$this->classForm = 'delete-users';
|
||||
$this->titleForm = __('Deleting users');
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminUsersAction', $args), __('Deleting users')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminUsersAction',
|
||||
$args
|
||||
),
|
||||
__('Deleting users'),
|
||||
];
|
||||
$this->form = $this->formDelete($args);
|
||||
|
||||
return $this;
|
||||
|
@ -168,9 +174,15 @@ class Action extends Users
|
|||
$yn = [1 => __('Yes'), 0 => __('No')];
|
||||
$names = \implode(', ', $this->nameList($this->userList));
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('AdminUsersAction', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'AdminUsersAction',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('AdminUsersAction', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminUsersAction',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'options' => [
|
||||
|
@ -254,7 +266,12 @@ class Action extends Users
|
|||
|
||||
if ($profile) {
|
||||
$user = $this->c->users->load((int) $args['ids']);
|
||||
$link = $this->c->Router->link('EditUserProfile', ['id' => $user->id]);
|
||||
$link = $this->c->Router->link(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $user->id,
|
||||
]
|
||||
);
|
||||
|
||||
if (
|
||||
$user->isAdmin
|
||||
|
@ -311,7 +328,13 @@ class Action extends Users
|
|||
$this->nameTpl = 'admin/form';
|
||||
$this->classForm = 'change-group';
|
||||
$this->titleForm = __('Change user group');
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminUsersAction', $args), __('Change user group')];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminUsersAction',
|
||||
$args
|
||||
),
|
||||
__('Change user group'),
|
||||
];
|
||||
$this->form = $this->formChange($args, $profile, $link, 'absent' !== $rulePass);
|
||||
|
||||
return $this;
|
||||
|
@ -349,9 +372,15 @@ class Action extends Users
|
|||
$yn = [1 => __('Yes'), 0 => __('No')];
|
||||
$names = \implode(', ', $this->nameList($this->userList));
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('AdminUsersAction', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'AdminUsersAction',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('AdminUsersAction', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminUsersAction',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'options' => [
|
||||
|
|
|
@ -133,7 +133,15 @@ class Result extends Users
|
|||
|
||||
$this->nameTpl = 'admin/users_result';
|
||||
$this->mainSuffix = '-one-column';
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminUsersResult', ['data' => $args['data']]), $crName];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminUsersResult',
|
||||
[
|
||||
'data' => $args['data'],
|
||||
]
|
||||
),
|
||||
$crName,
|
||||
];
|
||||
$this->formResult = $this->form($userList, $startNum, $args);
|
||||
$this->pagination = $this->c->Func->paginate($pages, $page, 'AdminUsersResult', ['data' => $args['data']]);
|
||||
|
||||
|
@ -226,9 +234,15 @@ class Result extends Users
|
|||
protected function form(array $users, int $number, array $args): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('AdminUsersResult', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'AdminUsersResult',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('AdminUsersResult', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminUsersResult',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [],
|
||||
|
@ -300,7 +314,13 @@ class Result extends Users
|
|||
'type' => $user->num_posts ? 'link' : 'str',
|
||||
'caption' => __('Results posts head'),
|
||||
'value' => $user->num_posts ? \ForkBB\num($user->num_posts) : null,
|
||||
'href' => $this->c->Router->link('SearchAction', ['action' => 'posts', 'uid' => $user->id]),
|
||||
'href' => $this->c->Router->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'posts',
|
||||
'uid' => $user->id,
|
||||
]
|
||||
),
|
||||
'title' => __('Results show posts link'),
|
||||
];
|
||||
$fields["l{$number}-note"] = [
|
||||
|
@ -316,7 +336,12 @@ class Result extends Users
|
|||
'type' => $user->isGuest || ! $user->num_posts ? 'str' : 'link',
|
||||
'caption' => __('Results action head'),
|
||||
'value' => $user->isGuest ? null : __('Results view IP link'),
|
||||
'href' => $this->c->Router->link('AdminUserStat', ['id' => $user->id]),
|
||||
'href' => $this->c->Router->link(
|
||||
'AdminUserStat',
|
||||
[
|
||||
'id' => $user->id,
|
||||
]
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,15 @@ class Stat extends Users
|
|||
|
||||
$this->nameTpl = 'admin/users_result';
|
||||
$this->mainSuffix = '-one-column';
|
||||
$this->aCrumbs[] = [$this->c->Router->link('AdminUserStat', ['id' => $args['id']]), $user->username];
|
||||
$this->aCrumbs[] = [
|
||||
$this->c->Router->link(
|
||||
'AdminUserStat',
|
||||
[
|
||||
'id' => $args['id'],
|
||||
]
|
||||
),
|
||||
$user->username,
|
||||
];
|
||||
$this->formResult = $this->form($stat, $startNum);
|
||||
$this->pagination = $this->c->Func->paginate($pages, $page, 'AdminUserStat', ['id' => $args['id']]);
|
||||
|
||||
|
@ -75,7 +83,14 @@ class Stat extends Users
|
|||
'type' => $flag ? 'link' : 'str',
|
||||
'caption' => __('Results IP address head'),
|
||||
'value' => $flag ? $ip : null,
|
||||
'href' => $flag ? $this->c->Router->link('AdminHost', ['ip' => $ip]) : null,
|
||||
'href' => $flag
|
||||
? $this->c->Router->link(
|
||||
'AdminHost',
|
||||
[
|
||||
'ip' => $ip,
|
||||
]
|
||||
)
|
||||
: null,
|
||||
];
|
||||
$fields["l{$number}-last-used"] = [
|
||||
'class' => ['result', 'last-used'],
|
||||
|
@ -94,7 +109,14 @@ class Stat extends Users
|
|||
'type' => $flag ? 'link' : 'str',
|
||||
'caption' => __('Results action head'),
|
||||
'value' => $flag ? __('Results find more link') : null,
|
||||
'href' => $flag ? $this->c->Router->link('AdminUsersResult', ['data' => $this->encodeData($ip)]) : null,
|
||||
'href' => $flag
|
||||
? $this->c->Router->link(
|
||||
'AdminUsersResult',
|
||||
[
|
||||
'data' => $this->encodeData($ip),
|
||||
]
|
||||
)
|
||||
: null,
|
||||
];
|
||||
|
||||
$form['sets']["l{$number}"] = [
|
||||
|
|
|
@ -215,7 +215,14 @@ class Auth extends Page
|
|||
if ($v->validation($_POST)) {
|
||||
$key = $this->c->Secury->randomPass(32);
|
||||
$hash = $this->c->Secury->hash($tmpUser->id . $key);
|
||||
$link = $this->c->Router->link('ChangePassword', ['id' => $tmpUser->id, 'key' => $key, 'hash' => $hash]);
|
||||
$link = $this->c->Router->link(
|
||||
'ChangePassword',
|
||||
[
|
||||
'id' => $tmpUser->id,
|
||||
'key' => $key,
|
||||
'hash' => $hash,
|
||||
]
|
||||
);
|
||||
$tplData = [
|
||||
'fRootLink' => $this->c->Router->link('Index'),
|
||||
'fMailer' => __('Mailer', $this->c->config->o_board_title),
|
||||
|
@ -385,9 +392,15 @@ class Auth extends Page
|
|||
protected function formChange(array $args): array
|
||||
{
|
||||
return [
|
||||
'action' => $this->c->Router->link('ChangePassword', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'ChangePassword',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('ChangePassword', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'ChangePassword',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'forget' => [
|
||||
|
|
|
@ -86,9 +86,19 @@ class Delete extends Page
|
|||
protected function formDelete(array $args, Post $post, bool $deleteTopic): array
|
||||
{
|
||||
return [
|
||||
'action' => $this->c->Router->link('DeletePost', ['id' => $post->id]),
|
||||
'action' => $this->c->Router->link(
|
||||
'DeletePost',
|
||||
[
|
||||
'id' => $post->id,
|
||||
]
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('DeletePost', ['id' => $post->id]),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'DeletePost',
|
||||
[
|
||||
'id' => $post->id,
|
||||
]
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'info' => [
|
||||
|
@ -124,7 +134,10 @@ class Delete extends Page
|
|||
'cancel' => [
|
||||
'type' => 'btn',
|
||||
'value' => __('Cancel'),
|
||||
'link' => $this->c->Router->link('ViewPost', $args),
|
||||
'link' => $this->c->Router->link(
|
||||
'ViewPost',
|
||||
$args
|
||||
),
|
||||
],
|
||||
],
|
||||
];
|
||||
|
|
|
@ -38,7 +38,14 @@ class Forum extends Page
|
|||
$this->fIndex = 'index';
|
||||
$this->nameTpl = 'forum';
|
||||
$this->onlinePos = 'forum-' . $args['id'];
|
||||
$this->canonical = $this->c->Router->link('Forum', ['id' => $args['id'], 'name' => $forum->forum_name, 'page' => $forum->page]);
|
||||
$this->canonical = $this->c->Router->link(
|
||||
'Forum',
|
||||
[
|
||||
'id' => $args['id'],
|
||||
'name' => $forum->forum_name,
|
||||
'page' => $forum->page,
|
||||
]
|
||||
);
|
||||
$this->model = $forum;
|
||||
$this->topics = $forum->pageData();
|
||||
$this->crumbs = $this->crumbs($forum);
|
||||
|
|
|
@ -19,10 +19,13 @@ class Index extends Page
|
|||
|
||||
// крайний пользователь // ???? может в stats переместить?
|
||||
$this->c->stats->userLast = $this->user->viewUsers
|
||||
? [ $this->c->Router->link('User', [
|
||||
'id' => $this->c->stats->userLast['id'],
|
||||
'name' => $this->c->stats->userLast['username'],
|
||||
]),
|
||||
? [
|
||||
$this->c->Router->link(
|
||||
'User', [
|
||||
'id' => $this->c->stats->userLast['id'],
|
||||
'name' => $this->c->stats->userLast['username'],
|
||||
]
|
||||
),
|
||||
$this->c->stats->userLast['username'],
|
||||
]
|
||||
: $this->c->stats->userLast['username'];
|
||||
|
@ -49,10 +52,18 @@ class Index extends Page
|
|||
$this->categoryes = $ctgs;
|
||||
|
||||
if (! $this->user->isGuest) {
|
||||
$this->linkMarkRead = $this->c->Router->link('MarkRead', [
|
||||
$this->linkMarkRead = $this->c->Router->link(
|
||||
'MarkRead',
|
||||
[
|
||||
'id' => 0,
|
||||
'token' => $this->c->Csrf->create('MarkRead', ['id' => 0]),
|
||||
]);
|
||||
'token' => $this->c->Csrf->create(
|
||||
'MarkRead',
|
||||
[
|
||||
'id' => 0,
|
||||
]
|
||||
),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -247,11 +247,14 @@ class Moderate extends Page
|
|||
$this->processAsPosts = true;
|
||||
}
|
||||
|
||||
$this->backLink = $this->c->Router->link('Topic', [
|
||||
'id' => $this->curTopic->id,
|
||||
'name' => $this->curTopic->subject,
|
||||
'page' => $page
|
||||
]);
|
||||
$this->backLink = $this->c->Router->link(
|
||||
'Topic',
|
||||
[
|
||||
'id' => $this->curTopic->id,
|
||||
'name' => $this->curTopic->subject,
|
||||
'page' => $page,
|
||||
]
|
||||
);
|
||||
} else {
|
||||
$objects = $this->c->topics->loadByIds($v->ids, false);
|
||||
foreach ($objects as $topic) {
|
||||
|
@ -263,11 +266,14 @@ class Moderate extends Page
|
|||
}
|
||||
}
|
||||
|
||||
$this->backLink = $this->c->Router->link('Forum', [
|
||||
'id' => $this->curForum->id,
|
||||
'name' => $this->curForum->forum_name,
|
||||
'page' => $page
|
||||
]);
|
||||
$this->backLink = $this->c->Router->link(
|
||||
'Forum',
|
||||
[
|
||||
'id' => $this->curForum->id,
|
||||
'name' => $this->curForum->forum_name,
|
||||
'page' => $page,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
return $this->{'action' . \ucfirst($v->action)}($objects, $v);
|
||||
|
|
|
@ -58,7 +58,12 @@ class Post extends Page
|
|||
|
||||
$this->nameTpl = 'post';
|
||||
$this->onlinePos = 'forum-' . $forum->id;
|
||||
$this->canonical = $this->c->Router->link('NewTopic', ['id' => $forum->id]);
|
||||
$this->canonical = $this->c->Router->link(
|
||||
'NewTopic',
|
||||
[
|
||||
'id' => $forum->id,
|
||||
]
|
||||
);
|
||||
$this->robots = 'noindex';
|
||||
$this->crumbs = $this->crumbs(__('Post new topic'), $forum);
|
||||
$this->formTitle = __('Post new topic');
|
||||
|
@ -123,7 +128,12 @@ class Post extends Page
|
|||
|
||||
$this->nameTpl = 'post';
|
||||
$this->onlinePos = 'topic-' . $topic->id;
|
||||
$this->canonical = $this->c->Router->link('NewReply', ['id' => $topic->id]);
|
||||
$this->canonical = $this->c->Router->link(
|
||||
'NewReply',
|
||||
[
|
||||
'id' => $topic->id,
|
||||
]
|
||||
);
|
||||
$this->robots = 'noindex';
|
||||
$this->crumbs = $this->crumbs(__('Post a reply'), $topic);
|
||||
$this->formTitle = __('Post a reply');
|
||||
|
|
|
@ -26,9 +26,15 @@ trait PostFormTrait
|
|||
|
||||
$autofocus = $quickReply ? null : true;
|
||||
$form = [
|
||||
'action' => $this->c->Router->link($marker, $args),
|
||||
'action' => $this->c->Router->link(
|
||||
$marker,
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create($marker, $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
$marker,
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [
|
||||
|
|
|
@ -99,29 +99,44 @@ abstract class Profile extends Page
|
|||
if (isset($this->c->bans->userList[\mb_strtolower($this->curUser->username)])) { //????
|
||||
$id = $this->c->bans->userList[\mb_strtolower($this->curUser->username)];
|
||||
$btns['unban-user'] = [
|
||||
$this->c->Router->link('AdminBansDelete', [
|
||||
'id' => $id,
|
||||
'uid' => $this->curUser->id,
|
||||
'token' => $this->c->Csrf->create('AdminBansDelete', [
|
||||
'id' => $id,
|
||||
'uid' => $this->curUser->id,
|
||||
]),
|
||||
]),
|
||||
$this->c->Router->link(
|
||||
'AdminBansDelete',
|
||||
[
|
||||
'id' => $id,
|
||||
'uid' => $this->curUser->id,
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminBansDelete',
|
||||
[
|
||||
'id' => $id,
|
||||
'uid' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
]
|
||||
),
|
||||
__('Unban user'),
|
||||
];
|
||||
} else {
|
||||
$btns['ban-user'] = [
|
||||
$this->c->Router->link('AdminBansNew', [
|
||||
'ids' => $this->curUser->id,
|
||||
'uid' => $this->curUser->id,
|
||||
]),
|
||||
$this->c->Router->link(
|
||||
'AdminBansNew',
|
||||
[
|
||||
'ids' => $this->curUser->id,
|
||||
'uid' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Ban user'),
|
||||
];
|
||||
}
|
||||
}
|
||||
if ($this->rules->deleteUser) {
|
||||
$btns['delete-user'] = [
|
||||
$this->c->Router->link('AdminUsersAction', ['action' => 'delete', 'ids' => $this->curUser->id]), // ????
|
||||
$this->c->Router->link(
|
||||
'AdminUsersAction',
|
||||
[
|
||||
'action' => 'delete',
|
||||
'ids' => $this->curUser->id,
|
||||
]
|
||||
), // ????
|
||||
__('Delete user'),
|
||||
];
|
||||
}
|
||||
|
@ -130,7 +145,12 @@ abstract class Profile extends Page
|
|||
&& $this->rules->editProfile
|
||||
) {
|
||||
$btns['edit-profile'] = [
|
||||
$this->c->Router->link('EditUserProfile', ['id' => $this->curUser->id]),
|
||||
$this->c->Router->link(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Edit '),
|
||||
];
|
||||
}
|
||||
|
@ -145,7 +165,12 @@ abstract class Profile extends Page
|
|||
&& $this->rules->editConfig
|
||||
) {
|
||||
$btns['edit-settings'] = [
|
||||
$this->c->Router->link('EditUserBoardConfig', ['id' => $this->curUser->id]),
|
||||
$this->c->Router->link(
|
||||
'EditUserBoardConfig',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Configure '),
|
||||
];
|
||||
}
|
||||
|
@ -159,13 +184,19 @@ abstract class Profile extends Page
|
|||
*/
|
||||
protected function linkChangeGroup(): string
|
||||
{
|
||||
return $this->c->Router->link('AdminUsersAction', [
|
||||
'action' => 'change_group',
|
||||
'ids' => $this->curUser->id,
|
||||
'token' => $this->c->Csrf->create('AdminUsersAction', [
|
||||
return $this->c->Router->link(
|
||||
'AdminUsersAction',
|
||||
[
|
||||
'action' => 'change_group',
|
||||
'ids' => $this->curUser->id,
|
||||
]),
|
||||
]);
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminUsersAction',
|
||||
[
|
||||
'action' => 'change_group',
|
||||
'ids' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,7 +80,17 @@ class Config extends Profile
|
|||
$this->fIswev = $v->getErrors();
|
||||
}
|
||||
|
||||
$this->crumbs = $this->crumbs([$this->c->Router->link('EditUserBoardConfig', ['id' => $this->curUser->id]), __('Board configuration')]);
|
||||
$this->crumbs = $this->crumbs(
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserBoardConfig',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Board configuration'),
|
||||
]
|
||||
);
|
||||
$this->form = $this->form();
|
||||
$this->actionBtns = $this->btns('config');
|
||||
|
||||
|
@ -108,9 +118,19 @@ class Config extends Profile
|
|||
protected function form(): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('EditUserBoardConfig', ['id' => $this->curUser->id]),
|
||||
'action' => $this->c->Router->link(
|
||||
'EditUserBoardConfig',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('EditUserBoardConfig', ['id' => $this->curUser->id]),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'EditUserBoardConfig',
|
||||
[
|
||||
'id' => $this->curUser->id
|
||||
]
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [
|
||||
|
|
|
@ -136,7 +136,17 @@ class Edit extends Profile
|
|||
}
|
||||
}
|
||||
|
||||
$this->crumbs = $this->crumbs([$this->c->Router->link('EditUserProfile', ['id' => $this->curUser->id]), __('Editing profile')]);
|
||||
$this->crumbs = $this->crumbs(
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Editing profile'),
|
||||
]
|
||||
);
|
||||
$this->form = $this->form();
|
||||
$this->actionBtns = $this->btns('edit');
|
||||
|
||||
|
@ -189,9 +199,19 @@ class Edit extends Profile
|
|||
protected function form(): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('EditUserProfile', ['id' => $this->curUser->id]),
|
||||
'action' => $this->c->Router->link(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('EditUserProfile', ['id' => $this->curUser->id]),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [
|
||||
|
@ -243,7 +263,12 @@ class Edit extends Profile
|
|||
'type' => 'link',
|
||||
'value' => __('Configure moderator rights'),
|
||||
'title' => __('Configure moderator rights'),
|
||||
'href' => $this->c->Router->link('EditUserModeration', ['id' => $this->curUser->id]),
|
||||
'href' => $this->c->Router->link(
|
||||
'EditUserModeration',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
];
|
||||
}
|
||||
if ($this->rules->setTitle) {
|
||||
|
@ -266,7 +291,12 @@ class Edit extends Profile
|
|||
$fields['change_pass'] = [
|
||||
'type' => 'link',
|
||||
'value' => __('Change passphrase'),
|
||||
'href' => $this->c->Router->link('EditUserPass', ['id' => $this->curUser->id]),
|
||||
'href' => $this->c->Router->link(
|
||||
'EditUserPass',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
];
|
||||
}
|
||||
if ($this->rules->useAvatar) {
|
||||
|
@ -376,7 +406,12 @@ class Edit extends Profile
|
|||
$fields['change_email'] = [
|
||||
'type' => 'link',
|
||||
'value' => __('To change email'),
|
||||
'href' => $this->c->Router->link('EditUserEmail', ['id' => $this->curUser->id]),
|
||||
'href' => $this->c->Router->link(
|
||||
'EditUserEmail',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
];
|
||||
}
|
||||
$fields['email_setting'] = [
|
||||
|
|
|
@ -93,7 +93,15 @@ class Email extends Profile
|
|||
} else {
|
||||
$key = $this->c->Secury->randomPass(33);
|
||||
$hash = $this->c->Secury->hash($this->curUser->id . $v->new_email . $key);
|
||||
$link = $this->c->Router->link('SetNewEmail', ['id' => $this->curUser->id, 'email' => $v->new_email, 'key' => $key, 'hash' => $hash]);
|
||||
$link = $this->c->Router->link(
|
||||
'SetNewEmail',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
'email' => $v->new_email,
|
||||
'key' => $key,
|
||||
'hash' => $hash,
|
||||
]
|
||||
);
|
||||
$tplData = [
|
||||
'fRootLink' => $this->c->Router->link('Index'),
|
||||
'fMailer' => __('Mailer', $this->c->config->o_board_title),
|
||||
|
@ -134,8 +142,24 @@ class Email extends Profile
|
|||
|
||||
|
||||
$this->crumbs = $this->crumbs(
|
||||
[$this->c->Router->link('EditUserEmail', ['id' => $this->curUser->id]), __('Change email')],
|
||||
[$this->c->Router->link('EditUserProfile', ['id' => $this->curUser->id]), __('Editing profile')]
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserEmail',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Change email'),
|
||||
],
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Editing profile'),
|
||||
]
|
||||
);
|
||||
$this->form = $this->form();
|
||||
$this->actionBtns = $this->btns('edit');
|
||||
|
@ -151,9 +175,19 @@ class Email extends Profile
|
|||
protected function form(): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('EditUserEmail', ['id' => $this->curUser->id]),
|
||||
'action' => $this->c->Router->link(
|
||||
'EditUserEmail',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('EditUserEmail', ['id' => $this->curUser->id]),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'EditUserEmail',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'new-email' => [
|
||||
|
|
|
@ -64,8 +64,24 @@ class Mod extends Profile
|
|||
}
|
||||
|
||||
$this->crumbs = $this->crumbs(
|
||||
[$this->c->Router->link('EditUserModeration', ['id' => $this->curUser->id]), __('Moderator rights')],
|
||||
[$this->c->Router->link('EditUserProfile', ['id' => $this->curUser->id]), __('Editing profile')]
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserModeration',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Moderator rights'),
|
||||
],
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Editing profile'),
|
||||
]
|
||||
);
|
||||
$this->form = $this->form();
|
||||
$this->actionBtns = $this->btns('edit');
|
||||
|
@ -95,9 +111,19 @@ class Mod extends Profile
|
|||
protected function form(): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('EditUserModeration', ['id' => $this->curUser->id]),
|
||||
'action' => $this->c->Router->link(
|
||||
'EditUserModeration',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('EditUserModeration', ['id' => $this->curUser->id]),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'EditUserModeration',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
],
|
||||
'sets' => [],
|
||||
'btns' => [
|
||||
|
|
|
@ -67,8 +67,24 @@ class Pass extends Profile
|
|||
}
|
||||
|
||||
$this->crumbs = $this->crumbs(
|
||||
[$this->c->Router->link('EditUserPass', ['id' => $this->curUser->id]), __('Change pass')],
|
||||
[$this->c->Router->link('EditUserProfile', ['id' => $this->curUser->id]), __('Editing profile')]
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserPass',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Change pass'),
|
||||
],
|
||||
[
|
||||
$this->c->Router->link(
|
||||
'EditUserProfile',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
__('Editing profile'),
|
||||
]
|
||||
);
|
||||
$this->form = $this->form();
|
||||
$this->actionBtns = $this->btns('edit');
|
||||
|
@ -84,9 +100,19 @@ class Pass extends Profile
|
|||
protected function form(): array
|
||||
{
|
||||
$form = [
|
||||
'action' => $this->c->Router->link('EditUserPass', ['id' => $this->curUser->id]),
|
||||
'action' => $this->c->Router->link(
|
||||
'EditUserPass',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('EditUserPass', ['id' => $this->curUser->id]),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'EditUserPass',
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'new-pass' => [
|
||||
|
|
|
@ -169,7 +169,12 @@ class View extends Profile
|
|||
'type' => 'link',
|
||||
'caption' => __('Email info'),
|
||||
'value' => __('Send email'),
|
||||
'href' => $this->c->Router->link('', ['id' => $this->curUser->id]), // ????
|
||||
'href' => $this->c->Router->link(
|
||||
'', // ????
|
||||
[
|
||||
'id' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -245,7 +250,13 @@ class View extends Profile
|
|||
'type' => 'link',
|
||||
'caption' => __('Posts info'),
|
||||
'value' => $this->user->showPostCount ? \ForkBB\num($this->curUser->num_posts) : __('Show posts'),
|
||||
'href' => $this->c->Router->link('SearchAction', ['action' => 'posts', 'uid' => $this->curUser->id]),
|
||||
'href' => $this->c->Router->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'posts',
|
||||
'uid' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
'title' => __('Show posts'),
|
||||
];
|
||||
$fields['topics'] = [
|
||||
|
@ -253,7 +264,13 @@ class View extends Profile
|
|||
'type' => 'link',
|
||||
'caption' => __('Topics info'),
|
||||
'value' => $this->user->showPostCount ? \ForkBB\num($this->curUser->num_topics) : __('Show topics'),
|
||||
'href' => $this->c->Router->link('SearchAction', ['action' => 'topics', 'uid' => $this->curUser->id]),
|
||||
'href' => $this->c->Router->link(
|
||||
'SearchAction',
|
||||
[
|
||||
'action' => 'topics',
|
||||
'uid' => $this->curUser->id,
|
||||
]
|
||||
),
|
||||
'title' => __('Show topics'),
|
||||
];
|
||||
} elseif ($this->user->showPostCount) {
|
||||
|
@ -280,7 +297,12 @@ class View extends Profile
|
|||
'type' => 'link',
|
||||
'caption' => __('IP'),
|
||||
'value' => $this->curUser->registration_ip,
|
||||
'href' => $this->c->Router->link('AdminHost', ['ip' => $this->curUser->registration_ip]),
|
||||
'href' => $this->c->Router->link(
|
||||
'AdminHost',
|
||||
[
|
||||
'ip' => $this->curUser->registration_ip,
|
||||
]
|
||||
),
|
||||
'title' => __('IP title'),
|
||||
];
|
||||
}
|
||||
|
|
|
@ -27,7 +27,10 @@ class Redirect extends Page
|
|||
*/
|
||||
public function page(string $marker, array $args = []): Page
|
||||
{
|
||||
$this->link = $this->c->Router->link($marker, $args);
|
||||
$this->link = $this->c->Router->link(
|
||||
$marker,
|
||||
$args
|
||||
);
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
|
|
@ -172,7 +172,13 @@ class Register extends Page
|
|||
'fRootLink' => $this->c->Router->link('Index'),
|
||||
'fMailer' => __('Mailer', $this->c->config->o_board_title),
|
||||
'username' => $v->username,
|
||||
'userLink' => $this->c->Router->link('User', ['id' => $newUserId, 'name' => $v->username]),
|
||||
'userLink' => $this->c->Router->link(
|
||||
'User',
|
||||
[
|
||||
'id' => $newUserId,
|
||||
'name' => $v->username,
|
||||
]
|
||||
),
|
||||
];
|
||||
|
||||
try {
|
||||
|
@ -194,7 +200,14 @@ class Register extends Page
|
|||
// отправка письма активации аккаунта
|
||||
if ('1' == $this->c->config->o_regs_verify) {
|
||||
$hash = $this->c->Secury->hash($newUserId . $key);
|
||||
$link = $this->c->Router->link('RegActivate', ['id' => $newUserId, 'key' => $key, 'hash' => $hash]);
|
||||
$link = $this->c->Router->link(
|
||||
'RegActivate',
|
||||
[
|
||||
'id' => $newUserId,
|
||||
'key' => $key,
|
||||
'hash' => $hash,
|
||||
]
|
||||
);
|
||||
$tplData = [
|
||||
'fTitle' => $this->c->config->o_board_title,
|
||||
'fRootLink' => $this->c->Router->link('Index'),
|
||||
|
|
|
@ -112,9 +112,15 @@ class Report extends Page
|
|||
protected function formReport(array $args, array $data): array
|
||||
{
|
||||
return [
|
||||
'action' => $this->c->Router->link('ReportPost', $args),
|
||||
'action' => $this->c->Router->link(
|
||||
'ReportPost',
|
||||
$args
|
||||
),
|
||||
'hidden' => [
|
||||
'token' => $this->c->Csrf->create('ReportPost', $args),
|
||||
'token' => $this->c->Csrf->create(
|
||||
'ReportPost',
|
||||
$args
|
||||
),
|
||||
],
|
||||
'sets' => [
|
||||
'report' => [
|
||||
|
@ -158,7 +164,12 @@ class Report extends Page
|
|||
$tplData = [
|
||||
'fMailer' => __('Mailer', $this->c->config->o_board_title),
|
||||
'username' => $report->author->username,
|
||||
'postLink' => $this->c->Router->link('ViewPost', ['id' => $report->post->id]),
|
||||
'postLink' => $this->c->Router->link(
|
||||
'ViewPost',
|
||||
[
|
||||
'id' => $report->post->id,
|
||||
]
|
||||
),
|
||||
'reason' => $report->message,
|
||||
'forumId' => $report->post->parent->parent->id,
|
||||
'topicSubject' => $report->post->parent->subject,
|
||||
|
|
|
@ -148,7 +148,14 @@ class Topic extends Page
|
|||
$this->nameTpl = 'topic';
|
||||
$this->onlinePos = 'topic-' . $topic->id;
|
||||
$this->onlineDetail = true;
|
||||
$this->canonical = $this->c->Router->link('Topic', ['id' => $topic->id, 'name' => \ForkBB\cens($topic->subject), 'page' => $topic->page]);
|
||||
$this->canonical = $this->c->Router->link(
|
||||
'Topic',
|
||||
[
|
||||
'id' => $topic->id,
|
||||
'name' => \ForkBB\cens($topic->subject),
|
||||
'page' => $topic->page
|
||||
]
|
||||
);
|
||||
$this->model = $topic;
|
||||
$this->posts = $posts;
|
||||
$this->crumbs = $this->crumbs($topic);
|
||||
|
|
|
@ -116,7 +116,10 @@ class Userlist extends Page
|
|||
|
||||
foreach (['ASC', 'DESC'] as $j => $dir) {
|
||||
$vars['dir'] = $dir;
|
||||
$links[$i * 2 + $j] = $this->c->Router->link('Userlist', $vars);
|
||||
$links[$i * 2 + $j] = $this->c->Router->link(
|
||||
'Userlist',
|
||||
$vars
|
||||
);
|
||||
|
||||
if (
|
||||
$v->sort === $sort
|
||||
|
@ -138,7 +141,10 @@ class Userlist extends Page
|
|||
$this->fIndex = 'userlist';
|
||||
$this->nameTpl = 'userlist';
|
||||
$this->onlinePos = 'userlist';
|
||||
$this->canonical = $this->c->Router->link('Userlist', $args);
|
||||
$this->canonical = $this->c->Router->link(
|
||||
'Userlist',
|
||||
$args
|
||||
);
|
||||
$this->robots = 'noindex';
|
||||
$this->crumbs = $this->crumbs([$this->c->Router->link('Userlist'), __('User list')]);
|
||||
$this->pagination = $this->c->Func->paginate($pages, $page, 'Userlist', $args);
|
||||
|
|
|
@ -88,35 +88,40 @@ class Delete extends Action
|
|||
//???? подписки, опросы, предупреждения
|
||||
|
||||
if ($usersToGuest) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $usersToGuest,
|
||||
];
|
||||
$sql = 'UPDATE ::posts
|
||||
SET poster_id=1
|
||||
WHERE poster_id IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::posts
|
||||
SET poster_id=1
|
||||
WHERE poster_id IN (?ai:users)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
if ($usersDel) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $usersDel,
|
||||
];
|
||||
$sql = 'SELECT p.topic_id
|
||||
FROM ::posts as p
|
||||
WHERE p.poster_id IN (?ai:users)
|
||||
GROUP BY p.topic_id';
|
||||
$parents = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.topic_id
|
||||
FROM ::posts as p
|
||||
WHERE p.poster_id IN (?ai:users)
|
||||
GROUP BY p.topic_id';
|
||||
|
||||
$sql = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE p.poster_id IN (?ai:users)';
|
||||
$notUse = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$parents = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
$query = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE p.poster_id IN (?ai:users)';
|
||||
|
||||
$notUse = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
$parents = \array_diff($parents, $notUse); //????
|
||||
|
||||
$sql = 'DELETE FROM ::posts
|
||||
WHERE poster_id IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::posts
|
||||
WHERE poster_id IN (?ai:users)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
foreach ($parents as &$parent) {
|
||||
$parent = $this->c->topics->load($parent); //???? ааааАААААААААААААА О_о
|
||||
|
@ -124,45 +129,52 @@ class Delete extends Action
|
|||
unset($parent);
|
||||
}
|
||||
if ($forums) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':forums' => \array_keys($forums),
|
||||
];
|
||||
$sql = 'SELECT p.poster_id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums)
|
||||
GROUP BY p.poster_id';
|
||||
$users = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.poster_id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums)
|
||||
GROUP BY p.poster_id';
|
||||
|
||||
$sql = 'DELETE FROM ::posts
|
||||
WHERE topic_id IN (
|
||||
SELECT id
|
||||
FROM ::topics
|
||||
WHERE forum_id IN (?ai:forums)
|
||||
)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$users = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
$query = 'DELETE
|
||||
FROM ::posts
|
||||
WHERE topic_id IN (
|
||||
SELECT id
|
||||
FROM ::topics
|
||||
WHERE forum_id IN (?ai:forums)
|
||||
)';
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
if ($topics) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':topics' => \array_keys($topics),
|
||||
];
|
||||
$sql = 'SELECT p.poster_id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id IN (?ai:topics)
|
||||
GROUP BY p.poster_id';
|
||||
$users = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.poster_id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id IN (?ai:topics)
|
||||
GROUP BY p.poster_id';
|
||||
|
||||
$sql = 'DELETE FROM ::posts
|
||||
WHERE topic_id IN (?ai:topics)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$users = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
$query = 'DELETE
|
||||
FROM ::posts
|
||||
WHERE topic_id IN (?ai:topics)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
if ($posts) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':posts' => $posts,
|
||||
];
|
||||
$sql = 'DELETE FROM ::posts
|
||||
WHERE id IN (?ai:posts)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::posts
|
||||
WHERE id IN (?ai:posts)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
if ($parents) {
|
||||
$topics = $parents;
|
||||
|
|
|
@ -15,10 +15,11 @@ class Load extends Action
|
|||
*/
|
||||
protected function getSql(string $where): string
|
||||
{
|
||||
$sql = 'SELECT p.*
|
||||
FROM ::posts AS p
|
||||
WHERE ' . $where;
|
||||
return $sql;
|
||||
$query = 'SELECT p.*
|
||||
FROM ::posts AS p
|
||||
WHERE ' . $where;
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -46,12 +47,13 @@ class Load extends Action
|
|||
throw new InvalidArgumentException('Expected a positive topic id');
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':pid' => $id,
|
||||
':tid' => $tid,
|
||||
];
|
||||
$sql = $this->getSql(null !== $tid ? 'p.id=?i:pid AND p.topic_id=?i:tid' : 'p.id=?i:pid');
|
||||
$data = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$query = $this->getSql(null !== $tid ? 'p.id=?i:pid AND p.topic_id=?i:tid' : 'p.id=?i:pid');
|
||||
|
||||
$data = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
if (empty($data)) {
|
||||
return null;
|
||||
|
@ -90,11 +92,12 @@ class Load extends Action
|
|||
}
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ids' => $ids,
|
||||
];
|
||||
$sql = $this->getSql('p.id IN (?ai:ids)');
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$query = $this->getSql('p.id IN (?ai:ids)');
|
||||
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
|
||||
$result = [];
|
||||
$topicIds = [];
|
||||
|
|
|
@ -43,7 +43,12 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getlink(): string
|
||||
{
|
||||
return $this->c->Router->link('ViewPost', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'ViewPost',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -78,7 +83,12 @@ class Model extends DataModel
|
|||
|
||||
protected function getlinkReport(): string
|
||||
{
|
||||
return $this->c->Router->link('ReportPost', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'ReportPost',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
protected function getcanDelete(): bool
|
||||
|
@ -117,7 +127,12 @@ class Model extends DataModel
|
|||
|
||||
protected function getlinkDelete(): string
|
||||
{
|
||||
return $this->c->Router->link('DeletePost', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'DeletePost',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
protected function getcanEdit(): bool
|
||||
|
@ -147,7 +162,12 @@ class Model extends DataModel
|
|||
|
||||
protected function getlinkEdit(): string
|
||||
{
|
||||
return $this->c->Router->link('EditPost', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'EditPost',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
protected function getcanQuote(): bool
|
||||
|
@ -157,7 +177,13 @@ class Model extends DataModel
|
|||
|
||||
protected function getlinkQuote(): string
|
||||
{
|
||||
return $this->c->Router->link('NewReply', ['id' => $this->parent->id, 'quote' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'NewReply',
|
||||
[
|
||||
'id' => $this->parent->id,
|
||||
'quote' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,16 +16,17 @@ class PreviousPost extends Action
|
|||
*/
|
||||
public function previousPost(Post $post): ?int
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':pid' => $post->id,
|
||||
':tid' => $post->topic_id,
|
||||
];
|
||||
$sql = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.id < ?i:pid AND p.topic_id=?i:tid
|
||||
ORDER BY p.id DESC
|
||||
LIMIT 1';
|
||||
$id = $this->c->DB->query($sql, $vars)->fetchColumn();
|
||||
$query = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.id < ?i:pid AND p.topic_id=?i:tid
|
||||
ORDER BY p.id DESC
|
||||
LIMIT 1';
|
||||
|
||||
$id = $this->c->DB->query($query, $vars)->fetchColumn();
|
||||
|
||||
return empty($id) ? null : $id;
|
||||
}
|
||||
|
|
|
@ -18,19 +18,18 @@ class RebuildIndex extends Action
|
|||
*/
|
||||
public function rebuildIndex(int $start, int $limit, string $mode): int
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':start' => $start,
|
||||
':limit' => $limit,
|
||||
];
|
||||
$query = 'SELECT p.id, p.message, t.id as topic_id, t.subject, t.first_post_id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE p.id>=?i:start
|
||||
ORDER BY p.id ASC
|
||||
LIMIT ?i:limit';
|
||||
|
||||
$sql = 'SELECT p.id, p.message, t.id as topic_id, t.subject, t.first_post_id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE p.id>=?i:start
|
||||
ORDER BY p.id ASC
|
||||
LIMIT ?i:limit';
|
||||
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
$number = 0;
|
||||
|
||||
while ($row = $stmt->fetch()) {
|
||||
|
|
|
@ -16,16 +16,16 @@ class UserInfoFromIP extends Action
|
|||
*/
|
||||
public function userInfoFromIP(string $ip): array
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ip' => $ip,
|
||||
];
|
||||
$sql = 'SELECT p.poster_id, p.poster
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_ip=?s:ip
|
||||
GROUP BY p.poster_id, p.poster
|
||||
ORDER BY p.poster';
|
||||
$query = 'SELECT p.poster_id, p.poster
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_ip=?s:ip
|
||||
GROUP BY p.poster_id, p.poster
|
||||
ORDER BY p.poster';
|
||||
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
$result = [];
|
||||
$ids = [];
|
||||
|
||||
|
|
|
@ -17,15 +17,15 @@ class UserStat extends Action
|
|||
*/
|
||||
public function userStat(int $id): array
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':id' => $id,
|
||||
];
|
||||
$sql = 'SELECT p.poster_ip, MAX(p.posted) AS last_used, COUNT(p.id) AS used_times
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_id=?i:id
|
||||
GROUP BY p.poster_ip
|
||||
ORDER BY last_used DESC';
|
||||
$query = 'SELECT p.poster_ip, MAX(p.posted) AS last_used, COUNT(p.id) AS used_times
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_id=?i:id
|
||||
GROUP BY p.poster_ip
|
||||
ORDER BY last_used DESC';
|
||||
|
||||
return $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
return $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_UNIQUE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,13 +40,14 @@ class View extends Action
|
|||
}
|
||||
|
||||
if (! $review) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ids' => $arg->idsList,
|
||||
];
|
||||
$sql = 'SELECT w.id, w.message, w.poster, w.posted
|
||||
FROM ::warnings AS w
|
||||
WHERE w.id IN (?ai:ids)';
|
||||
$warnings = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_GROUP);
|
||||
$query = 'SELECT w.id, w.message, w.poster, w.posted
|
||||
FROM ::warnings AS w
|
||||
WHERE w.id IN (?ai:ids)';
|
||||
|
||||
$warnings = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_GROUP);
|
||||
}
|
||||
|
||||
$userIds = [];
|
||||
|
|
|
@ -23,13 +23,14 @@ class Load extends Action
|
|||
throw new InvalidArgumentException('Expected a positive report id');
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':id' => $id,
|
||||
];
|
||||
$sql = 'SELECT r.*
|
||||
FROM ::reports AS r
|
||||
WHERE r.id=?i:id';
|
||||
$data = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$query = 'SELECT r.*
|
||||
FROM ::reports AS r
|
||||
WHERE r.id=?i:id';
|
||||
|
||||
$data = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
if (empty($data)) {
|
||||
return null;
|
||||
|
@ -53,18 +54,18 @@ class Load extends Action
|
|||
$vars = [];
|
||||
|
||||
if ($noZapped) {
|
||||
$sql = 'SELECT r.*
|
||||
FROM ::reports AS r
|
||||
WHERE r.zapped=0
|
||||
ORDER BY r.id DESC';
|
||||
$query = 'SELECT r.*
|
||||
FROM ::reports AS r
|
||||
WHERE r.zapped=0
|
||||
ORDER BY r.id DESC';
|
||||
} else {
|
||||
$sql = 'SELECT r.*
|
||||
FROM ::reports AS r
|
||||
WHERE r.zapped!=0
|
||||
ORDER BY r.zapped DESC'; // LIMIT 10 не нужен, если при обработке сигнала будут удалены старые
|
||||
$query = 'SELECT r.*
|
||||
FROM ::reports AS r
|
||||
WHERE r.zapped!=0
|
||||
ORDER BY r.zapped DESC'; // LIMIT 10 не нужен, если при обработке сигнала будут удалены старые
|
||||
}
|
||||
|
||||
$data = $this->c->DB->query($sql, $vars)->fetchAll();
|
||||
$data = $this->c->DB->query($query, $vars)->fetchAll();
|
||||
|
||||
foreach ($data as $row) {
|
||||
$result[] = $this->manager->create($row);
|
||||
|
|
|
@ -96,7 +96,12 @@ class Manager extends ManagerModel
|
|||
if ($this->c->Cache->has('report')) {
|
||||
$last = $this->list = $this->c->Cache->get('report');
|
||||
} else {
|
||||
$last = (int) $this->c->DB->query('SELECT r.id FROM ::reports AS r ORDER BY r.id DESC LIMIT 1')->fetchColumn();
|
||||
$query = 'SELECT r.id
|
||||
FROM ::reports AS r
|
||||
ORDER BY r.id DESC
|
||||
LIMIT 1';
|
||||
|
||||
$last = (int) $this->c->DB->query($query)->fetchColumn();
|
||||
|
||||
$this->c->Cache->set('report', $last);
|
||||
}
|
||||
|
@ -109,20 +114,23 @@ class Manager extends ManagerModel
|
|||
*/
|
||||
public function clear(): void
|
||||
{
|
||||
$sql = 'SELECT r.zapped
|
||||
FROM ::reports as r
|
||||
WHERE r.zapped!=0
|
||||
ORDER BY r.zapped DESC
|
||||
LIMIT 10,1';
|
||||
$time = (int) $this->c->DB->query($sql)->fetchColumn();
|
||||
$query = 'SELECT r.zapped
|
||||
FROM ::reports as r
|
||||
WHERE r.zapped!=0
|
||||
ORDER BY r.zapped DESC
|
||||
LIMIT 10,1';
|
||||
|
||||
$time = (int) $this->c->DB->query($query)->fetchColumn();
|
||||
|
||||
if ($time > 0) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':time' => $time,
|
||||
];
|
||||
$sql = 'DELETE FROM ::reports
|
||||
WHERE zapped<=?i:time';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::reports
|
||||
WHERE zapped<=?i:time';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,10 +138,18 @@ class Model extends DataModel
|
|||
public function getlinkZap(): string
|
||||
{
|
||||
if (empty($this->zapped)) {
|
||||
return $this->c->Router->link('AdminReportsZap', [
|
||||
'id' => $this->id,
|
||||
'token' => $this->c->Csrf->create('AdminReportsZap', ['id' => $this->id]),
|
||||
]);
|
||||
return $this->c->Router->link(
|
||||
'AdminReportsZap',
|
||||
[
|
||||
'id' => $this->id,
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminReportsZap',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
),
|
||||
]
|
||||
);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -30,41 +30,29 @@ class ActionP extends Method
|
|||
return [];
|
||||
}
|
||||
|
||||
$sql = null;
|
||||
$query = null;
|
||||
switch ($action) {
|
||||
case 'search':
|
||||
$list = $this->model->queryIds;
|
||||
break;
|
||||
case 'posts':
|
||||
$sql = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND p.poster_id=?i:uid
|
||||
ORDER BY p.posted DESC';
|
||||
$query = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND p.poster_id=?i:uid
|
||||
ORDER BY p.posted DESC';
|
||||
break;
|
||||
|
||||
# case 'last':
|
||||
# $sql = 'SELECT t.id
|
||||
# FROM ::topics AS t
|
||||
# WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0
|
||||
# ORDER BY t.last_post DESC';
|
||||
# break;
|
||||
# case 'unanswered':
|
||||
# $sql = 'SELECT t.id
|
||||
# FROM ::topics AS t
|
||||
# WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND t.num_replies=0
|
||||
# ORDER BY t.last_post DESC';
|
||||
# break;
|
||||
default:
|
||||
throw new InvalidArgumentException('Unknown action: ' . $action);
|
||||
}
|
||||
|
||||
if (null !== $sql) {
|
||||
if (null !== $query) {
|
||||
$vars = [
|
||||
':forums' => $forums,
|
||||
':uid' => $uid,
|
||||
];
|
||||
$list = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
$list = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
|
||||
$this->model->numPages = (int) \ceil((\count($list) ?: 1) / $this->c->user->disp_posts);
|
||||
|
|
|
@ -30,61 +30,62 @@ class ActionT extends Method
|
|||
return [];
|
||||
}
|
||||
|
||||
$sql = null;
|
||||
$query = null;
|
||||
switch ($action) {
|
||||
case 'search':
|
||||
$list = $this->model->queryIds;
|
||||
break;
|
||||
case 'latest_active_topics':
|
||||
$sql = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0
|
||||
ORDER BY t.last_post DESC';
|
||||
$query = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0
|
||||
ORDER BY t.last_post DESC';
|
||||
break;
|
||||
case 'unanswered_topics':
|
||||
$sql = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND t.num_replies=0
|
||||
ORDER BY t.last_post DESC';
|
||||
$query = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND t.num_replies=0
|
||||
ORDER BY t.last_post DESC';
|
||||
break;
|
||||
case 'topics_with_your_posts':
|
||||
$sql = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND p.poster_id=?i:uid
|
||||
GROUP BY t.id
|
||||
ORDER BY t.last_post DESC';
|
||||
$query = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND p.poster_id=?i:uid
|
||||
GROUP BY t.id
|
||||
ORDER BY t.last_post DESC';
|
||||
break;
|
||||
case 'topics':
|
||||
$sql = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND p.poster_id=?i:uid
|
||||
ORDER BY t.last_post DESC';
|
||||
$query = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0 AND p.poster_id=?i:uid
|
||||
ORDER BY t.last_post DESC';
|
||||
break;
|
||||
case 'new':
|
||||
$sql = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND mot.tid=t.id)
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:uid AND mof.fid=t.forum_id)
|
||||
WHERE t.forum_id IN (?ai:forums)
|
||||
AND t.last_post>?i:max
|
||||
AND t.moved_to=0
|
||||
AND (mot.mt_last_visit IS NULL OR t.last_post>mot.mt_last_visit)
|
||||
AND (mof.mf_mark_all_read IS NULL OR t.last_post>mof.mf_mark_all_read)
|
||||
ORDER BY t.last_post DESC';
|
||||
$query = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND mot.tid=t.id)
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:uid AND mof.fid=t.forum_id)
|
||||
WHERE t.forum_id IN (?ai:forums)
|
||||
AND t.last_post>?i:max
|
||||
AND t.moved_to=0
|
||||
AND (mot.mt_last_visit IS NULL OR t.last_post>mot.mt_last_visit)
|
||||
AND (mof.mf_mark_all_read IS NULL OR t.last_post>mof.mf_mark_all_read)
|
||||
ORDER BY t.last_post DESC';
|
||||
break;
|
||||
default:
|
||||
throw new InvalidArgumentException('Unknown action: ' . $action);
|
||||
}
|
||||
|
||||
if (null !== $sql) {
|
||||
if (null !== $query) {
|
||||
$vars = [
|
||||
':forums' => $forums,
|
||||
':uid' => $uid,
|
||||
':max' => \max((int) $this->c->user->last_visit, (int) $this->c->user->u_mark_all_read),
|
||||
];
|
||||
$list = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
$list = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
|
||||
$this->model->numPages = (int) \ceil((\count($list) ?: 1) / $this->c->user->disp_topics);
|
||||
|
|
|
@ -76,51 +76,55 @@ class Delete extends Method
|
|||
throw new InvalidArgumentException('Expected only User(s), Forum(s), Topic(s) or Post(s)');
|
||||
}
|
||||
|
||||
$sql = null;
|
||||
$query = null;
|
||||
|
||||
if ($users) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $users,
|
||||
];
|
||||
$sql = 'DELETE FROM ::search_matches
|
||||
WHERE post_id IN (
|
||||
SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_id IN (?ai:users)
|
||||
)';
|
||||
$query = 'DELETE
|
||||
FROM ::search_matches
|
||||
WHERE post_id IN (
|
||||
SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_id IN (?ai:users)
|
||||
)';
|
||||
}
|
||||
if ($forums) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':forums' => \array_keys($forums),
|
||||
];
|
||||
$sql = 'DELETE FROM ::search_matches
|
||||
WHERE post_id IN (
|
||||
SELECT p.id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums)
|
||||
)';
|
||||
$query = 'DELETE
|
||||
FROM ::search_matches
|
||||
WHERE post_id IN (
|
||||
SELECT p.id
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
WHERE t.forum_id IN (?ai:forums)
|
||||
)';
|
||||
}
|
||||
if ($topics) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':topics' => \array_keys($topics),
|
||||
];
|
||||
$sql = 'DELETE FROM ::search_matches
|
||||
WHERE post_id IN (
|
||||
SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id IN (?ai:topics)
|
||||
)';
|
||||
$query = 'DELETE
|
||||
FROM ::search_matches
|
||||
WHERE post_id IN (
|
||||
SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id IN (?ai:topics)
|
||||
)';
|
||||
}
|
||||
if ($posts) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':posts' => \array_keys($posts),
|
||||
];
|
||||
$sql = 'DELETE FROM ::search_matches
|
||||
WHERE post_id IN (?ai:posts)';
|
||||
$query = 'DELETE
|
||||
FROM ::search_matches
|
||||
WHERE post_id IN (?ai:posts)';
|
||||
}
|
||||
if ($sql) {
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
if ($query) {
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,15 +54,16 @@ class Execute extends Method
|
|||
$v->author . '-' .
|
||||
$v->forums;
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':key' => $key,
|
||||
];
|
||||
$sql = 'SELECT sc.search_time, sc.search_data
|
||||
FROM ::search_cache AS sc
|
||||
WHERE sc.search_key=?s:key
|
||||
ORDER BY sc.search_time DESC
|
||||
LIMIT 1';
|
||||
$row = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$query = 'SELECT sc.search_time, sc.search_data
|
||||
FROM ::search_cache AS sc
|
||||
WHERE sc.search_key=?s:key
|
||||
ORDER BY sc.search_time DESC
|
||||
LIMIT 1';
|
||||
|
||||
$row = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
if (
|
||||
! empty($row['search_time'])
|
||||
|
@ -77,26 +78,25 @@ class Execute extends Method
|
|||
}
|
||||
|
||||
$ids = $this->exec($this->model->queryWords, $queryVars);
|
||||
|
||||
if (1 === $v->sort_dir) {
|
||||
\asort($ids, $this->sortType);
|
||||
} else {
|
||||
\arsort($ids, $this->sortType);
|
||||
}
|
||||
|
||||
$ids = \array_keys($ids);
|
||||
|
||||
$data = [
|
||||
$data = [
|
||||
\implode(',', $ids),
|
||||
];
|
||||
$vars = [
|
||||
$vars = [
|
||||
':data' => \implode("\n", $data),
|
||||
':key' => $key,
|
||||
':time' => \time(),
|
||||
];
|
||||
$sql = 'INSERT INTO ::search_cache (search_key, search_time, search_data)
|
||||
VALUES (?s:key, ?i:time, ?s:data)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'INSERT INTO ::search_cache (search_key, search_time, search_data)
|
||||
VALUES (?s:key, ?i:time, ?s:data)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
$this->model->queryIds = $ids;
|
||||
$this->model->queryNoCache = true;
|
||||
|
|
|
@ -23,14 +23,15 @@ class Index extends Method
|
|||
: [];
|
||||
|
||||
if ('add' !== $mode) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':pid' => $post->id,
|
||||
];
|
||||
$sql = 'SELECT sw.id, sw.word, sm.subject_match
|
||||
FROM ::search_words AS sw
|
||||
INNER JOIN ::search_matches AS sm ON sw.id=sm.word_id
|
||||
WHERE sm.post_id=?i:pid';
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$query = 'SELECT sw.id, sw.word, sm.subject_match
|
||||
FROM ::search_words AS sw
|
||||
INNER JOIN ::search_matches AS sm ON sw.id=sm.word_id
|
||||
WHERE sm.post_id=?i:pid';
|
||||
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
|
||||
$mesCurWords = [];
|
||||
$subCurWords = [];
|
||||
|
@ -67,21 +68,22 @@ class Index extends Method
|
|||
$allWords = \array_unique(\array_merge($words['add']['p'], $words['add']['s']));
|
||||
}
|
||||
if (! empty($allWords)) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':words' => $allWords,
|
||||
];
|
||||
$sql = 'SELECT sw.word
|
||||
FROM ::search_words AS sw
|
||||
WHERE sw.word IN(?as:words)';
|
||||
$oldWords = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT sw.word
|
||||
FROM ::search_words AS sw
|
||||
WHERE sw.word IN(?as:words)';
|
||||
|
||||
$oldWords = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$newWords = \array_diff($allWords, $oldWords);
|
||||
|
||||
if (! empty($newWords)) {
|
||||
$sql = 'INSERT INTO ::search_words (word) VALUES(?s:word)';
|
||||
$query = 'INSERT INTO ::search_words (word) VALUES(?s:word)';
|
||||
$stmt = null;
|
||||
foreach ($newWords as $word) {
|
||||
if (null === $stmt) {
|
||||
$stmt = $this->c->DB->prepare($sql, [':word' => $word]);
|
||||
$stmt = $this->c->DB->prepare($query, [':word' => $word]);
|
||||
$stmt->execute();
|
||||
} else {
|
||||
$stmt->execute([':word' => $word]);
|
||||
|
@ -95,14 +97,16 @@ class Index extends Method
|
|||
continue;
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':pid' => $post->id,
|
||||
':subj' => 's' === $key ? 1 : 0,
|
||||
':ids' => $list,
|
||||
];
|
||||
$sql = 'DELETE FROM ::search_matches
|
||||
WHERE word_id IN(?ai:ids) AND post_id=?i:pid AND subject_match=?i:subj';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::search_matches
|
||||
WHERE word_id IN(?ai:ids) AND post_id=?i:pid AND subject_match=?i:subj';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
|
||||
foreach ($words['add'] as $key => $list)
|
||||
|
@ -111,16 +115,17 @@ class Index extends Method
|
|||
continue;
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':pid' => $post->id,
|
||||
':subj' => 's' === $key ? 1 : 0,
|
||||
':words' => $list,
|
||||
];
|
||||
$sql = 'INSERT INTO ::search_matches (post_id, word_id, subject_match)
|
||||
SELECT ?i:pid, id, ?i:subj
|
||||
FROM ::search_words
|
||||
WHERE word IN(?as:words)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'INSERT INTO ::search_matches (post_id, word_id, subject_match)
|
||||
SELECT ?i:pid, id, ?i:subj
|
||||
FROM ::search_words
|
||||
WHERE word IN(?as:words)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,10 @@ class Model extends ParentModel
|
|||
*/
|
||||
protected function getlink(): string
|
||||
{
|
||||
return $this->c->Router->link($this->linkMarker, $this->linkArgs);
|
||||
return $this->c->Router->link(
|
||||
$this->linkMarker,
|
||||
$this->linkArgs
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -22,12 +22,15 @@ class Access extends Action
|
|||
}
|
||||
|
||||
if (! empty($ids)) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ids' => $ids,
|
||||
':closed' => $open ? 0 : 1,
|
||||
];
|
||||
$sql = 'UPDATE ::topics SET closed=?i:closed WHERE id IN (?ai:ids)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::topics
|
||||
SET closed=?i:closed
|
||||
WHERE id IN (?ai:ids)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,35 +24,35 @@ class CalcStat extends Method
|
|||
if ($this->model->moved_to) {
|
||||
$numReplies = 0;
|
||||
} else {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':tid' => $this->model->id
|
||||
];
|
||||
$sql = 'SELECT COUNT(p.id) - 1
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid';
|
||||
$query = 'SELECT COUNT(p.id) - 1
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid';
|
||||
|
||||
$numReplies = $this->c->DB->query($sql, $vars)->fetchColumn();
|
||||
$numReplies = $this->c->DB->query($query, $vars)->fetchColumn();
|
||||
|
||||
$sql = 'SELECT p.id, p.poster, p.poster_id, p.posted
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id
|
||||
LIMIT 1';
|
||||
$query = 'SELECT p.id, p.poster, p.poster_id, p.posted
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id
|
||||
LIMIT 1';
|
||||
|
||||
$result = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$result = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
$this->model->poster = $result['poster'];
|
||||
$this->model->poster_id = $result['poster_id'];
|
||||
$this->model->posted = $result['posted'];
|
||||
$this->model->first_post_id = $result['id'];
|
||||
|
||||
$sql = 'SELECT p.id, p.poster, p.poster_id, p.posted, p.edited
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id DESC
|
||||
LIMIT 1';
|
||||
$query = 'SELECT p.id, p.poster, p.poster_id, p.posted, p.edited
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id DESC
|
||||
LIMIT 1';
|
||||
|
||||
$result = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$result = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
$this->model->last_post_id = $result['id'];
|
||||
$this->model->last_poster = $result['poster'];
|
||||
|
|
|
@ -73,36 +73,39 @@ class Delete extends Action
|
|||
}
|
||||
|
||||
if ($forums) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':forums' => \array_keys($forums),
|
||||
];
|
||||
$sql = 'SELECT p.poster_id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0
|
||||
GROUP BY p.poster_id';
|
||||
$usersUpd = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.poster_id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE t.forum_id IN (?ai:forums) AND t.moved_to=0
|
||||
GROUP BY p.poster_id';
|
||||
|
||||
$usersUpd = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
if ($topics) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':topics' => \array_keys($topics),
|
||||
];
|
||||
$sql = 'SELECT p.poster_id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE t.id IN (?ai:topics) AND t.moved_to=0
|
||||
GROUP BY p.poster_id';
|
||||
$usersUpd = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.poster_id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE t.id IN (?ai:topics) AND t.moved_to=0
|
||||
GROUP BY p.poster_id';
|
||||
|
||||
$usersUpd = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
if ($usersDel) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $usersDel,
|
||||
];
|
||||
$sql = 'SELECT t.id, t.forum_id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE p.poster_id IN (?ai:users)';
|
||||
$topics = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_KEY_PAIR); //????
|
||||
$query = 'SELECT t.id, t.forum_id
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE p.poster_id IN (?ai:users)';
|
||||
|
||||
$topics = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_KEY_PAIR); //????
|
||||
|
||||
if ($topics) {
|
||||
foreach ($topics as $value) { // ????
|
||||
|
@ -121,54 +124,66 @@ class Delete extends Action
|
|||
// удаление тем-ссылок на удаляемые темы
|
||||
|
||||
if ($users) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $users,
|
||||
];
|
||||
$sql = 'DELETE FROM ::mark_of_topic
|
||||
WHERE uid IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_topic
|
||||
WHERE uid IN (?ai:users)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
if ($usersToGuest) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $usersToGuest,
|
||||
];
|
||||
$sql = 'UPDATE ::topics
|
||||
SET poster_id=1
|
||||
WHERE poster_id IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::topics
|
||||
SET poster_id=1
|
||||
WHERE poster_id IN (?ai:users)';
|
||||
|
||||
$sql = 'UPDATE ::topics
|
||||
SET last_poster_id=1
|
||||
WHERE last_poster_id IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
$query = 'UPDATE ::topics
|
||||
SET last_poster_id=1
|
||||
WHERE last_poster_id IN (?ai:users)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
if ($forums) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':forums' => \array_keys($forums),
|
||||
];
|
||||
$sql = 'DELETE FROM ::mark_of_topic
|
||||
WHERE tid IN (
|
||||
SELECT id
|
||||
FROM ::topics
|
||||
WHERE forum_id IN (?ai:forums)
|
||||
)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_topic
|
||||
WHERE tid IN (
|
||||
SELECT id
|
||||
FROM ::topics
|
||||
WHERE forum_id IN (?ai:forums)
|
||||
)';
|
||||
|
||||
$sql = 'DELETE FROM ::topics
|
||||
WHERE forum_id IN (?ai:forums)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
$query = 'DELETE
|
||||
FROM ::topics
|
||||
WHERE forum_id IN (?ai:forums)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
if ($topics) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':topics' => \array_keys($topics),
|
||||
];
|
||||
$sql = 'DELETE FROM ::mark_of_topic
|
||||
WHERE tid IN (?ai:topics)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::mark_of_topic
|
||||
WHERE tid IN (?ai:topics)';
|
||||
|
||||
$sql = 'DELETE FROM ::topics
|
||||
WHERE id IN (?ai:topics)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
$query = 'DELETE
|
||||
FROM ::topics
|
||||
WHERE id IN (?ai:topics)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
foreach ($parents as $forum) {
|
||||
$this->c->forums->update($forum->calcStat());
|
||||
|
|
|
@ -15,23 +15,24 @@ class Load extends Action
|
|||
protected function getSql(string $where, bool $full): string
|
||||
{
|
||||
if ($this->c->user->isGuest) {
|
||||
$sql = 'SELECT t.*
|
||||
FROM ::topics AS t
|
||||
WHERE ' . $where;
|
||||
$query = 'SELECT t.*
|
||||
FROM ::topics AS t
|
||||
WHERE ' . $where;
|
||||
} elseif ($full) {
|
||||
$sql = 'SELECT t.*, s.user_id AS is_subscribed, mof.mf_mark_all_read, mot.mt_last_visit, mot.mt_last_read
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::topic_subscriptions AS s ON (t.id=s.topic_id AND s.user_id=?i:uid)
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:uid AND t.forum_id=mof.fid)
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND t.id=mot.tid)
|
||||
WHERE ' . $where;
|
||||
$query = 'SELECT t.*, s.user_id AS is_subscribed, mof.mf_mark_all_read, mot.mt_last_visit, mot.mt_last_read
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::topic_subscriptions AS s ON (t.id=s.topic_id AND s.user_id=?i:uid)
|
||||
LEFT JOIN ::mark_of_forum AS mof ON (mof.uid=?i:uid AND t.forum_id=mof.fid)
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND t.id=mot.tid)
|
||||
WHERE ' . $where;
|
||||
} else {
|
||||
$sql = 'SELECT t.*, mot.mt_last_visit, mot.mt_last_read
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND t.id=mot.tid)
|
||||
WHERE ' . $where;
|
||||
$query = 'SELECT t.*, mot.mt_last_visit, mot.mt_last_read
|
||||
FROM ::topics AS t
|
||||
LEFT JOIN ::mark_of_topic AS mot ON (mot.uid=?i:uid AND t.id=mot.tid)
|
||||
WHERE ' . $where;
|
||||
}
|
||||
return $sql;
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -49,12 +50,13 @@ class Load extends Action
|
|||
throw new InvalidArgumentException('Expected a positive topic id');
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':tid' => $id,
|
||||
':uid' => $this->c->user->id,
|
||||
];
|
||||
$sql = $this->getSql('t.id=?i:tid', true);
|
||||
$data = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$query = $this->getSql('t.id=?i:tid', true);
|
||||
|
||||
$data = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
// тема отсутствует или недоступна
|
||||
if (empty($data)) {
|
||||
|
@ -90,12 +92,13 @@ class Load extends Action
|
|||
}
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':ids' => $ids,
|
||||
':uid' => $this->c->user->id,
|
||||
];
|
||||
$sql = $this->getSql('t.id IN (?ai:ids)', $full);
|
||||
$stmt = $this->c->DB->query($sql, $vars);
|
||||
$query = $this->getSql('t.id IN (?ai:ids)', $full);
|
||||
|
||||
$stmt = $this->c->DB->query($query, $vars);
|
||||
|
||||
$result = [];
|
||||
while ($row = $stmt->fetch()) {
|
||||
|
|
|
@ -52,24 +52,26 @@ class Merge extends Action
|
|||
}
|
||||
|
||||
//???? перенести обработку в посты?
|
||||
$vars = [
|
||||
$vars = [
|
||||
'start' => "[from]",
|
||||
'end' => "[/from]\n",
|
||||
'topics' => $ids,
|
||||
];
|
||||
$sql = 'UPDATE ::posts AS p, ::topics as t
|
||||
SET p.message=CONCAT(?s:start, t.subject, ?s:end, p.message)
|
||||
WHERE p.topic_id IN (?ai:topics) AND t.id=p.topic_id';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::posts AS p, ::topics as t
|
||||
SET p.message=CONCAT(?s:start, t.subject, ?s:end, p.message)
|
||||
WHERE p.topic_id IN (?ai:topics) AND t.id=p.topic_id';
|
||||
|
||||
$vars = [
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
$vars = [
|
||||
'id' => $firstTopic->id,
|
||||
'topics' => $ids,
|
||||
];
|
||||
$sql = 'UPDATE ::posts AS p
|
||||
SET p.topic_id=?i:id
|
||||
WHERE p.topic_id IN (?ai:topics)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::posts AS p
|
||||
SET p.topic_id=?i:id
|
||||
WHERE p.topic_id IN (?ai:topics)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
// добавить перенос подписок на первую тему?
|
||||
|
||||
|
@ -79,13 +81,14 @@ class Merge extends Action
|
|||
$this->c->topics->update($topic->calcStat());
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
'topics' => $ids,
|
||||
];
|
||||
$sql = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.moved_to IN (?ai:topics)';
|
||||
$linkTopics = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT t.id
|
||||
FROM ::topics AS t
|
||||
WHERE t.moved_to IN (?ai:topics)';
|
||||
|
||||
$linkTopics = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
foreach ($linkTopics as $topic) {
|
||||
$topic->moved_to = $firstTopic->id;
|
||||
|
|
|
@ -69,7 +69,13 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getlink(): string
|
||||
{
|
||||
return $this->c->Router->link('Topic', ['id' => $this->moved_to ?: $this->id, 'name' => \ForkBB\cens($this->subject)]);
|
||||
return $this->c->Router->link(
|
||||
'Topic',
|
||||
[
|
||||
'id' => $this->moved_to ?: $this->id,
|
||||
'name' => \ForkBB\cens($this->subject),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -79,7 +85,12 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getlinkReply(): string
|
||||
{
|
||||
return $this->c->Router->link('NewReply', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'NewReply',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -92,7 +103,12 @@ class Model extends DataModel
|
|||
if ($this->moved_to) {
|
||||
return null;
|
||||
} else {
|
||||
return $this->c->Router->link('ViewPost', ['id' => $this->last_post_id]);
|
||||
return $this->c->Router->link(
|
||||
'ViewPost',
|
||||
[
|
||||
'id' => $this->last_post_id,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -103,7 +119,12 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getlinkNew(): string
|
||||
{
|
||||
return $this->c->Router->link('TopicViewNew', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'TopicViewNew',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -111,7 +132,12 @@ class Model extends DataModel
|
|||
*/
|
||||
protected function getlinkUnread(): string
|
||||
{
|
||||
return $this->c->Router->link('TopicViewUnread', ['id' => $this->id]);
|
||||
return $this->c->Router->link(
|
||||
'TopicViewUnread',
|
||||
[
|
||||
'id' => $this->id,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -172,13 +198,15 @@ class Model extends DataModel
|
|||
return 0;
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':tid' => $this->id,
|
||||
':visit' => $this->hasNew,
|
||||
];
|
||||
$sql = 'SELECT MIN(p.id) FROM ::posts AS p WHERE p.topic_id=?i:tid AND p.posted>?i:visit';
|
||||
$query = 'SELECT MIN(p.id)
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid AND p.posted>?i:visit';
|
||||
|
||||
$pid = $this->c->DB->query($sql, $vars)->fetchColumn();
|
||||
$pid = $this->c->DB->query($query, $vars)->fetchColumn();
|
||||
|
||||
return $pid ?: 0;
|
||||
}
|
||||
|
@ -194,13 +222,15 @@ class Model extends DataModel
|
|||
return 0;
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':tid' => $this->id,
|
||||
':visit' => $this->hasUnread,
|
||||
];
|
||||
$sql = 'SELECT MIN(p.id) FROM ::posts AS p WHERE p.topic_id=?i:tid AND p.posted>?i:visit';
|
||||
$query = 'SELECT MIN(p.id)
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid AND p.posted>?i:visit';
|
||||
|
||||
$pid = $this->c->DB->query($sql, $vars)->fetchColumn();
|
||||
$pid = $this->c->DB->query($query, $vars)->fetchColumn();
|
||||
|
||||
return $pid ?: 0;
|
||||
}
|
||||
|
@ -264,17 +294,18 @@ class Model extends DataModel
|
|||
throw new InvalidArgumentException('Bad number of displayed page');
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':tid' => $this->id,
|
||||
':offset' => ($this->page - 1) * $this->c->user->disp_posts,
|
||||
':rows' => $this->c->user->disp_posts,
|
||||
];
|
||||
$sql = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id
|
||||
LIMIT ?i:offset, ?i:rows';
|
||||
$list = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id
|
||||
LIMIT ?i:offset, ?i:rows';
|
||||
|
||||
$list = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
if (
|
||||
! empty($list)
|
||||
|
@ -305,16 +336,17 @@ class Model extends DataModel
|
|||
|
||||
$this->page = 1;
|
||||
|
||||
$vars = [
|
||||
':tid' => $this->id,
|
||||
':rows' => $this->c->config->o_topic_review,
|
||||
$vars = [
|
||||
':tid' => $this->id,
|
||||
':rows' => $this->c->config->o_topic_review,
|
||||
];
|
||||
$sql = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id DESC
|
||||
LIMIT 0, ?i:rows';
|
||||
$this->idsList = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.id
|
||||
FROM ::posts AS p
|
||||
WHERE p.topic_id=?i:tid
|
||||
ORDER BY p.id DESC
|
||||
LIMIT 0, ?i:rows';
|
||||
|
||||
$this->idsList = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
return empty($this->idsList) ? [] : $this->c->posts->view($this, true);
|
||||
}
|
||||
|
@ -326,16 +358,16 @@ class Model extends DataModel
|
|||
*/
|
||||
public function calcPage(int $pid): void
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':tid' => $this->id,
|
||||
':pid' => $pid,
|
||||
];
|
||||
$sql = 'SELECT COUNT(p.id) AS num
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::posts AS j ON (j.topic_id=?i:tid AND j.id=?i:pid)
|
||||
WHERE p.topic_id=?i:tid AND p.id<?i:pid'; //???? может на два запроса разбить?
|
||||
$query = 'SELECT COUNT(p.id) AS num
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::posts AS j ON (j.topic_id=?i:tid AND j.id=?i:pid)
|
||||
WHERE p.topic_id=?i:tid AND p.id<?i:pid'; //???? может на два запроса разбить?
|
||||
|
||||
$result = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$result = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
$this->page = empty($result) ? null : (int) \ceil(($result['num'] + 1) / $this->c->user->disp_posts);
|
||||
}
|
||||
|
@ -355,12 +387,14 @@ class Model extends DataModel
|
|||
*/
|
||||
public function incViews(): void
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':tid' => $this->id,
|
||||
];
|
||||
$sql = 'UPDATE ::topics SET num_views=num_views+1 WHERE id=?i:tid';
|
||||
$query = 'UPDATE ::topics
|
||||
SET num_views=num_views+1
|
||||
WHERE id=?i:tid';
|
||||
|
||||
$this->c->DB->query($sql, $vars);
|
||||
$this->c->DB->query($query, $vars);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -398,19 +432,22 @@ class Model extends DataModel
|
|||
empty($this->mt_last_read)
|
||||
&& empty($this->mt_last_visit)
|
||||
) {
|
||||
$sql = 'INSERT INTO ::mark_of_topic (uid, tid, mt_last_visit, mt_last_read)
|
||||
SELECT ?i:uid, ?i:tid, ?i:visit, ?i:read
|
||||
FROM ::groups
|
||||
WHERE NOT EXISTS (SELECT 1
|
||||
FROM ::mark_of_topic
|
||||
WHERE uid=?i:uid AND tid=?i:tid)
|
||||
LIMIT 1';
|
||||
$query = 'INSERT INTO ::mark_of_topic (uid, tid, mt_last_visit, mt_last_read)
|
||||
SELECT ?i:uid, ?i:tid, ?i:visit, ?i:read
|
||||
FROM ::groups
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM ::mark_of_topic
|
||||
WHERE uid=?i:uid AND tid=?i:tid
|
||||
)
|
||||
LIMIT 1';
|
||||
} else {
|
||||
$sql = 'UPDATE ::mark_of_topic
|
||||
SET mt_last_visit=?i:visit, mt_last_read=?i:read
|
||||
WHERE uid=?i:uid AND tid=?i:tid';
|
||||
$query = 'UPDATE ::mark_of_topic
|
||||
SET mt_last_visit=?i:visit, mt_last_read=?i:read
|
||||
WHERE uid=?i:uid AND tid=?i:tid';
|
||||
}
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,15 +45,16 @@ class View extends Action
|
|||
! $this->c->user->isGuest
|
||||
&& '1' == $this->c->config->o_show_dot
|
||||
) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':uid' => $this->c->user->id,
|
||||
':ids' => $arg->idsList,
|
||||
];
|
||||
$sql = 'SELECT p.topic_id
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_id=?i:uid AND p.topic_id IN (?ai:ids)
|
||||
GROUP BY p.topic_id';
|
||||
$dots = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$query = 'SELECT p.topic_id
|
||||
FROM ::posts AS p
|
||||
WHERE p.poster_id=?i:uid AND p.topic_id IN (?ai:ids)
|
||||
GROUP BY p.topic_id';
|
||||
|
||||
$dots = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
foreach ($dots as $id) {
|
||||
if (
|
||||
|
|
|
@ -14,11 +14,13 @@ class AdminsIds extends Action
|
|||
*/
|
||||
public function adminsIds(): array
|
||||
{
|
||||
$vars = [
|
||||
$vars = [
|
||||
':gid' => $this->c->GROUP_ADMIN,
|
||||
];
|
||||
$sql = 'SELECT u.id FROM ::users AS u WHERE u.group_id=?i:gid';
|
||||
$query = 'SELECT u.id
|
||||
FROM ::users AS u
|
||||
WHERE u.group_id=?i:gid';
|
||||
|
||||
return $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
return $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,10 +69,11 @@ class ChangeGroup extends Action
|
|||
':new' => $newGroupId,
|
||||
':ids' => $ids,
|
||||
];
|
||||
$sql = 'UPDATE ::users AS u
|
||||
SET u.group_id = ?i:new
|
||||
WHERE u.id IN (?ai:ids)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::users AS u
|
||||
SET u.group_id = ?i:new
|
||||
WHERE u.id IN (?ai:ids)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
if ($adminPresent) {
|
||||
$this->c->admins->reset();
|
||||
|
|
|
@ -64,12 +64,14 @@ class Delete extends Action
|
|||
$this->c->Online->delete($user);
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':users' => $ids,
|
||||
];
|
||||
$sql = 'DELETE FROM ::users
|
||||
WHERE id IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$query = 'DELETE
|
||||
FROM ::users
|
||||
WHERE id IN (?ai:users)';
|
||||
|
||||
$this->c->DB->exec($query, $vars);
|
||||
|
||||
if ($adminPresent) {
|
||||
$this->c->admins->reset();
|
||||
|
|
|
@ -98,13 +98,12 @@ class Filter extends Action
|
|||
}
|
||||
|
||||
$where = \implode(' AND ', $where);
|
||||
$query = "SELECT u.id
|
||||
FROM ::users AS u
|
||||
WHERE {$where}
|
||||
ORDER BY {$orderBy}";
|
||||
|
||||
$sql = "SELECT u.id
|
||||
FROM ::users AS u
|
||||
WHERE {$where}
|
||||
ORDER BY {$orderBy}";
|
||||
|
||||
$ids = $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
$ids = $this->c->DB->query($query, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
return $ids;
|
||||
}
|
||||
|
|
|
@ -14,11 +14,12 @@ class Load extends Action
|
|||
*/
|
||||
protected function getSql(string $where): string
|
||||
{
|
||||
$sql = 'SELECT u.*, g.*
|
||||
FROM ::users AS u
|
||||
LEFT JOIN ::groups AS g ON u.group_id=g.g_id
|
||||
WHERE ' . $where;
|
||||
return $sql;
|
||||
$query = 'SELECT u.*, g.*
|
||||
FROM ::users AS u
|
||||
LEFT JOIN ::groups AS g ON u.group_id=g.g_id
|
||||
WHERE ' . $where;
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -32,9 +33,10 @@ class Load extends Action
|
|||
throw new InvalidArgumentException('Expected a positive user id');
|
||||
}
|
||||
|
||||
$vars = [':id' => $id];
|
||||
$sql = $this->getSql('u.id=?i:id');
|
||||
$data = $this->c->DB->query($sql, $vars)->fetch();
|
||||
$vars = [':id' => $id];
|
||||
$query = $this->getSql('u.id=?i:id');
|
||||
|
||||
$data = $this->c->DB->query($query, $vars)->fetch();
|
||||
|
||||
return empty($data['id']) ? null : $this->manager->create($data);
|
||||
}
|
||||
|
@ -55,9 +57,10 @@ class Load extends Action
|
|||
}
|
||||
}
|
||||
|
||||
$vars = [':ids' => $ids];
|
||||
$sql = $this->getSql('u.id IN (?ai:ids)');
|
||||
$data = $this->c->DB->query($sql, $vars)->fetchAll();
|
||||
$vars = [':ids' => $ids];
|
||||
$query = $this->getSql('u.id IN (?ai:ids)');
|
||||
|
||||
$data = $this->c->DB->query($query, $vars)->fetchAll();
|
||||
|
||||
$result = [];
|
||||
foreach ($data as $row) {
|
||||
|
@ -71,9 +74,9 @@ class Load extends Action
|
|||
*
|
||||
* @throws ForkException
|
||||
*/
|
||||
protected function returnUser(string $sql, array $vars): ?User
|
||||
protected function returnUser(string $query, array $vars): ?User
|
||||
{
|
||||
$data = $this->c->DB->query($sql, $vars)->fetchAll();
|
||||
$data = $this->c->DB->query($query, $vars)->fetchAll();
|
||||
|
||||
if (empty($data)) {
|
||||
return null;
|
||||
|
@ -91,9 +94,9 @@ class Load extends Action
|
|||
{
|
||||
$where = $caseInsencytive ? 'LOWER(u.username)=LOWER(?s:name)' : 'u.username=?s:name';
|
||||
$vars = [':name' => $name];
|
||||
$sql = $this->getSql($where);
|
||||
$query = $this->getSql($where);
|
||||
|
||||
return $this->returnUser($sql, $vars);
|
||||
return $this->returnUser($query, $vars);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -101,9 +104,9 @@ class Load extends Action
|
|||
*/
|
||||
public function loadByEmail(string $email): ?User
|
||||
{
|
||||
$vars = [':email' => $this->c->NormEmail->normalize($email)];
|
||||
$sql = $this->getSql('u.email_normal=?s:email');
|
||||
$vars = [':email' => $this->c->NormEmail->normalize($email)];
|
||||
$query = $this->getSql('u.email_normal=?s:email');
|
||||
|
||||
return $this->returnUser($sql, $vars);
|
||||
return $this->returnUser($query, $vars);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,7 +172,13 @@ class Model extends DataModel
|
|||
if ($this->isGuest) {
|
||||
return null;
|
||||
} else {
|
||||
return $this->c->Router->link('User', ['id' => $this->id, 'name' => $this->username]);
|
||||
return $this->c->Router->link(
|
||||
'User',
|
||||
[
|
||||
'id' => $this->id,
|
||||
'name' => $this->username,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -365,14 +371,20 @@ class Model extends DataModel
|
|||
&& $this->id !== $post->user->id //????
|
||||
&& 0 < $post->user->g_promote_min_posts * $post->user->g_promote_next_group
|
||||
) {
|
||||
return $this->c->Router->link('AdminUserPromote', [
|
||||
'uid' => $post->user->id,
|
||||
'pid' => $post->id,
|
||||
'token' => $this->c->Csrf->create('AdminUserPromote', [
|
||||
return $this->c->Router->link(
|
||||
'AdminUserPromote',
|
||||
[
|
||||
'uid' => $post->user->id,
|
||||
'pid' => $post->id,
|
||||
]),
|
||||
]);
|
||||
'token' => $this->c->Csrf->create(
|
||||
'AdminUserPromote',
|
||||
[
|
||||
'uid' => $post->user->id,
|
||||
'pid' => $post->id,
|
||||
]
|
||||
),
|
||||
]
|
||||
);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -23,25 +23,27 @@ class Promote extends Action
|
|||
|
||||
// перемещение всех пользователей из группы 0 в группу 1
|
||||
if (2 == $count) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':old' => $args[0]->g_id,
|
||||
':new' => $args[1]->g_id,
|
||||
];
|
||||
$sql = 'UPDATE ::users
|
||||
SET group_id=?i:new
|
||||
WHERE group_id=?i:old';
|
||||
return $this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::users
|
||||
SET group_id=?i:new
|
||||
WHERE group_id=?i:old';
|
||||
|
||||
return $this->c->DB->exec($query, $vars);
|
||||
// продвижение всех пользователей в группе 0
|
||||
} elseif (1 == $count) {
|
||||
$vars = [
|
||||
$vars = [
|
||||
':old' => $args[0]->g_id,
|
||||
':new' => $args[0]->g_promote_next_group,
|
||||
':count' => $args[0]->g_promote_min_posts,
|
||||
];
|
||||
$sql = 'UPDATE ::users
|
||||
SET group_id=?i:new
|
||||
WHERE group_id=?i:old AND num_posts>=?i:count';
|
||||
return $this->c->DB->exec($sql, $vars);
|
||||
$query = 'UPDATE ::users
|
||||
SET group_id=?i:new
|
||||
WHERE group_id=?i:old AND num_posts>=?i:count';
|
||||
|
||||
return $this->c->DB->exec($query, $vars);
|
||||
} else {
|
||||
throw new RuntimeException("Illegal number of parameters ({$count})");
|
||||
}
|
||||
|
|
|
@ -43,17 +43,17 @@ class UpdateCountPosts extends Action
|
|||
];
|
||||
}
|
||||
|
||||
$sql = 'UPDATE ::users AS u
|
||||
SET u.num_posts = (
|
||||
SELECT COUNT(p.id)
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
INNER JOIN ::forums AS f ON f.id=t.forum_id
|
||||
WHERE p.poster_id=u.id AND f.no_sum_mess=0
|
||||
GROUP BY p.poster_id
|
||||
)
|
||||
WHERE ' . $where;
|
||||
$query = 'UPDATE ::users AS u
|
||||
SET u.num_posts = (
|
||||
SELECT COUNT(p.id)
|
||||
FROM ::posts AS p
|
||||
INNER JOIN ::topics AS t ON t.id=p.topic_id
|
||||
INNER JOIN ::forums AS f ON f.id=t.forum_id
|
||||
WHERE p.poster_id=u.id AND f.no_sum_mess=0
|
||||
GROUP BY p.poster_id
|
||||
)
|
||||
WHERE ' . $where;
|
||||
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,16 +43,16 @@ class UpdateCountTopics extends Action
|
|||
];
|
||||
}
|
||||
|
||||
$sql = 'UPDATE ::users AS u
|
||||
SET u.num_topics = (
|
||||
SELECT COUNT(t.id)
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE p.poster_id=u.id AND t.moved_to=0
|
||||
GROUP BY p.poster_id
|
||||
)
|
||||
WHERE ' . $where;
|
||||
$query = 'UPDATE ::users AS u
|
||||
SET u.num_topics = (
|
||||
SELECT COUNT(t.id)
|
||||
FROM ::topics AS t
|
||||
INNER JOIN ::posts AS p ON t.first_post_id=p.id
|
||||
WHERE p.poster_id=u.id AND t.moved_to=0
|
||||
GROUP BY p.poster_id
|
||||
)
|
||||
WHERE ' . $where;
|
||||
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
$this->c->DB->exec($query, $vars);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,11 +23,13 @@ class UsersNumber extends Action
|
|||
return 0;
|
||||
}
|
||||
|
||||
$vars = [
|
||||
$vars = [
|
||||
':gid' => $group->g_id,
|
||||
];
|
||||
$sql = 'SELECT COUNT(u.id) FROM ::users AS u WHERE u.group_id=?i:gid';
|
||||
$query = 'SELECT COUNT(u.id)
|
||||
FROM ::users AS u
|
||||
WHERE u.group_id=?i:gid';
|
||||
|
||||
return $this->c->DB->query($sql, $vars)->fetchColumn();
|
||||
return $this->c->DB->query($query, $vars)->fetchColumn();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,15 +42,15 @@ if (
|
|||
$c->PUBLIC_URL = $c->BASE_URL . $forkPublicPrefix;
|
||||
|
||||
$c->FORK_REVISION = 1;
|
||||
$c->START = $forkStart;
|
||||
$c->DIR_APP = __DIR__;
|
||||
$c->DIR_PUBLIC = $forkPublic;
|
||||
$c->DIR_CONFIG = __DIR__ . '/config';
|
||||
$c->DIR_CACHE = __DIR__ . '/cache';
|
||||
$c->DIR_VIEWS = __DIR__ . '/templates';
|
||||
$c->DIR_LANG = __DIR__ . '/lang';
|
||||
$c->DATE_FORMATS = [$c->config->o_date_format, 'Y-m-d', 'Y-d-m', 'd-m-Y', 'm-d-Y', 'M j Y', 'jS M Y'];
|
||||
$c->TIME_FORMATS = [$c->config->o_time_format, 'H:i:s', 'H:i', 'g:i:s a', 'g:i a'];
|
||||
$c->START = $forkStart;
|
||||
$c->DIR_APP = __DIR__;
|
||||
$c->DIR_PUBLIC = $forkPublic;
|
||||
$c->DIR_CONFIG = __DIR__ . '/config';
|
||||
$c->DIR_CACHE = __DIR__ . '/cache';
|
||||
$c->DIR_VIEWS = __DIR__ . '/templates';
|
||||
$c->DIR_LANG = __DIR__ . '/lang';
|
||||
$c->DATE_FORMATS = [$c->config->o_date_format, 'Y-m-d', 'Y-d-m', 'd-m-Y', 'm-d-Y', 'M j Y', 'jS M Y'];
|
||||
$c->TIME_FORMATS = [$c->config->o_time_format, 'H:i:s', 'H:i', 'g:i:s a', 'g:i a'];
|
||||
|
||||
$controllers = ['Primary', 'Routing'];
|
||||
foreach ($controllers as $controller) {
|
||||
|
@ -76,7 +76,7 @@ if (
|
|||
&& $c->DEBUG > 0
|
||||
) {
|
||||
$debug = $c->View->rendering($c->Debug->debug());
|
||||
$tpl = \str_replace('<!-- debuginfo -->', $debug, $tpl);
|
||||
$tpl = \str_replace('<!-- debuginfo -->', $debug, $tpl);
|
||||
}
|
||||
|
||||
exit($tpl);
|
||||
|
|
Loading…
Reference in a new issue