* Changed admin list processing
This commit is contained in:
parent
feb06dd233
commit
7ff2129ede
9 changed files with 92 additions and 51 deletions
app
Controllers
Models
config
|
@ -32,8 +32,8 @@ class Primary
|
|||
public function check()
|
||||
{
|
||||
if ($this->c->config->o_maintenance && ! $this->c->MAINTENANCE_OFF) {
|
||||
if (! \in_array($this->c->Cookie->uId, $this->c->admins->list) //????
|
||||
|| ! \in_array($this->c->user->id, $this->c->admins->list) //????
|
||||
if (! isset($this->c->admins->list[$this->c->Cookie->uId])
|
||||
|| ! isset($this->c->admins->list[$this->c->user->id])
|
||||
) {
|
||||
if (! $this->c->isInit('user')) {
|
||||
$this->c->user = $this->c->users->create(['id' => 1, 'group_id' => $this->c->GROUP_GUEST]);
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace ForkBB\Models;
|
||||
|
||||
use ForkBB\Models\Model;
|
||||
|
||||
class AdminList extends Model
|
||||
{
|
||||
/**
|
||||
* Загружает список id админов из кеша/БД
|
||||
*
|
||||
* @return AdminList
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
if ($this->c->Cache->has('admins')) {
|
||||
$this->list = $this->c->Cache->get('admins');
|
||||
} else {
|
||||
$this->load();
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace ForkBB\Models\AdminList;
|
||||
|
||||
use ForkBB\Models\Method;
|
||||
use PDO;
|
||||
|
||||
class Load extends Method
|
||||
{
|
||||
/**
|
||||
* Заполняет модель данными из БД
|
||||
* Создает кеш
|
||||
*
|
||||
* @return AdminList
|
||||
*/
|
||||
public function load()
|
||||
{
|
||||
$list = $this->c->DB->query('SELECT u.id FROM ::users AS u WHERE u.group_id=?i', [$this->c->GROUP_ADMIN])->fetchAll(PDO::FETCH_COLUMN);
|
||||
$this->model->list = $list;
|
||||
$this->c->Cache->set('admins', $list);
|
||||
return $this->model;
|
||||
}
|
||||
}
|
35
app/Models/AdminList/Model.php
Normal file
35
app/Models/AdminList/Model.php
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace ForkBB\Models\AdminList;
|
||||
|
||||
use ForkBB\Models\Model as BaseModel;
|
||||
|
||||
class Model extends BaseModel
|
||||
{
|
||||
/**
|
||||
* Загружает список id админов из кеша/БД
|
||||
*
|
||||
* @return Models\AdminList
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
if ($this->c->Cache->has('admins')) {
|
||||
$this->list = $this->c->Cache->get('admins');
|
||||
} else {
|
||||
$this->list = \array_flip($this->c->users->adminsIds());
|
||||
$this->c->Cache->set('admins', $this->list);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Сбрасывает кеш списка id админов
|
||||
*
|
||||
* @return Models\AdminList
|
||||
*/
|
||||
public function reset()
|
||||
{
|
||||
$this->c->Cache->delete('admins');
|
||||
return $this;
|
||||
}
|
||||
}
|
24
app/Models/User/AdminsIds.php
Normal file
24
app/Models/User/AdminsIds.php
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace ForkBB\Models\User;
|
||||
|
||||
use ForkBB\Models\Action;
|
||||
use PDO;
|
||||
|
||||
class AdminsIds extends Action
|
||||
{
|
||||
/**
|
||||
* Загружает список id админов из БД
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function adminsIds()
|
||||
{
|
||||
$vars = [
|
||||
':gid' => $this->c->GROUP_ADMIN,
|
||||
];
|
||||
$sql = 'SELECT u.id FROM ::users AS u WHERE u.group_id=?i:gid';
|
||||
|
||||
return $this->c->DB->query($sql, $vars)->fetchAll(PDO::FETCH_COLUMN);
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@ class ChangeGroup extends Action
|
|||
|
||||
$ids = [];
|
||||
$moderators = [];
|
||||
$adminPresent = $newGroup->groupAdmin;
|
||||
foreach ($users as $user) {
|
||||
if (! $user instanceof User) {
|
||||
throw new InvalidArgumentException('Expected User');
|
||||
|
@ -39,6 +40,9 @@ class ChangeGroup extends Action
|
|||
if (1 != $newGroup->g_moderator && $user->isAdmMod) {
|
||||
$moderators[$user->id] = $user;
|
||||
}
|
||||
if ($user->isAdmin) {
|
||||
$adminPresent = true;
|
||||
}
|
||||
|
||||
$ids[] = $user->id;
|
||||
$user->__group_id = $newGroupId;
|
||||
|
@ -62,5 +66,9 @@ class ChangeGroup extends Action
|
|||
SET u.group_id = ?i:new
|
||||
WHERE u.id IN (?ai:ids)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
|
||||
if ($adminPresent) {
|
||||
$this->c->admins->reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ class Delete extends Action
|
|||
|
||||
$ids = [];
|
||||
$moderators = [];
|
||||
$adminPresent = false;
|
||||
foreach ($users as $user) {
|
||||
if (! $user instanceof User) {
|
||||
throw new InvalidArgumentException('Expected User');
|
||||
|
@ -40,6 +41,9 @@ class Delete extends Action
|
|||
if ($user->isAdmMod) {
|
||||
$moderators[$user->id] = $user;
|
||||
}
|
||||
if ($user->isAdmin) {
|
||||
$adminPresent = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($moderators)) {
|
||||
|
@ -69,5 +73,9 @@ class Delete extends Action
|
|||
$sql = 'DELETE FROM ::users
|
||||
WHERE id IN (?ai:users)';
|
||||
$this->c->DB->exec($sql, $vars);
|
||||
|
||||
if ($adminPresent) {
|
||||
$this->c->admins->reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,12 +38,16 @@ class Save extends Action
|
|||
$where = 'id=?i';
|
||||
}
|
||||
$set = $vars = [];
|
||||
$resAdmins = false;
|
||||
foreach ($modified as $name) {
|
||||
if (! isset($fileds[$name])) {
|
||||
continue;
|
||||
}
|
||||
$vars[] = $values[$name];
|
||||
$set[] = $name . '=?' . $fileds[$name];
|
||||
if ('group_id' === $name) {
|
||||
$resAdmins = true;
|
||||
}
|
||||
}
|
||||
if (empty($set)) {
|
||||
return $user;
|
||||
|
@ -56,6 +60,10 @@ class Save extends Action
|
|||
$this->c->DB->query('UPDATE ::' . $table . ' SET ' . \implode(', ', $set) . ' WHERE ' . $where, $vars);
|
||||
$user->resModified();
|
||||
|
||||
if ($resAdmins) {
|
||||
$this->c->admins->reset();
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
|
@ -91,6 +99,10 @@ class Save extends Action
|
|||
$user->id = $this->c->DB->lastInsertId();
|
||||
$user->resModified();
|
||||
|
||||
if ($user->isAdmin) {
|
||||
$this->c->admins->reset();
|
||||
}
|
||||
|
||||
return $user->id;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -89,7 +89,7 @@ return [
|
|||
'bans' => '@ModelBanList:init',
|
||||
'censorship' => '@CensorshipModel:init',
|
||||
'stats' => '@ModelStats:init',
|
||||
'admins' => '@ModelAdminList:init',
|
||||
'admins' => '@AdminListModel:init',
|
||||
'smilies' => '@ModelSmileyList:init',
|
||||
'dbMap' => '@ModelDBMap:init',
|
||||
'stopwords' => '@ModelStopwords:init',
|
||||
|
@ -194,8 +194,7 @@ return [
|
|||
'ModelStats' => \ForkBB\Models\Stats::class,
|
||||
'StatsLoad' => \ForkBB\Models\Stats\Load::class,
|
||||
|
||||
'ModelAdminList' => \ForkBB\Models\AdminList::class,
|
||||
'AdminListLoad' => \ForkBB\Models\AdminList\Load::class,
|
||||
'AdminListModel' => \ForkBB\Models\AdminList\Model::class,
|
||||
|
||||
'ModelSmileyList' => \ForkBB\Models\SmileyList::class,
|
||||
'SmileyListLoad' => \ForkBB\Models\SmileyList\Load::class,
|
||||
|
@ -217,6 +216,7 @@ return [
|
|||
'UserManagerFilter' => \ForkBB\Models\User\Filter::class,
|
||||
'UserManagerDelete' => \ForkBB\Models\User\Delete::class,
|
||||
'UserManagerChangeGroup' => \ForkBB\Models\User\ChangeGroup::class,
|
||||
'UserManagerAdminsIds' => \ForkBB\Models\User\AdminsIds::class,
|
||||
|
||||
'ForumModel' => \ForkBB\Models\Forum\Model::class,
|
||||
'ForumModelCalcStat' => \ForkBB\Models\Forum\CalcStat::class,
|
||||
|
|
Loading…
Add table
Reference in a new issue