Add more checks and return by anchor

This commit is contained in:
Visman 2023-10-23 20:52:16 +07:00
parent 2c94e1bc69
commit a6f39ae72a
7 changed files with 64 additions and 60 deletions

View file

@ -839,11 +839,17 @@ class Routing
'AdminAntispam'
);
$r->add(
$r::DUO,
$r::GET,
'/admin/extensions',
'AdminExtensions:info',
'AdminExtensions'
);
$r->add(
$r::PST,
'/admin/extensions/action',
'AdminExtensions:action',
'AdminExtensionsAction'
);
}
$uri = $_SERVER['REQUEST_URI'];

View file

@ -51,6 +51,11 @@ class Extension extends Model
return $this->dbData['name'] ?? $this->fileData['name'];
}
protected function getid(): string
{
return 'ext-' . \trim(\preg_replace('%\W+%', '-', $this->name), '-');
}
protected function getdescription(): string
{
return $this->dbData['description'] ?? $this->fileData['description'];

View file

@ -132,7 +132,7 @@ class Extensions extends Manager
$v = $v->reset()
->addValidators([
])->addRules([
'name' => 'required|string',
'name' => 'required|string|regex:%^[a-z0-9](?:[_.-]?[a-z0-9]+)*/[a-z0-9](?:[_.-]?[a-z0-9]+)*$%',
'type' => 'required|string|in:forkbb-extension',
'description' => 'required|string',
'homepage' => 'string',
@ -225,8 +225,6 @@ class Extensions extends Manager
$query = 'INSERT INTO ::extensions (ext_name, ext_status, ext_data)
VALUES(?s:name, 1, ?s:data)';
$this->c->DB->exec($query, $vars);
$ext->setModelAttrs([
'name' => $ext->name,
'dbStatus' => 1,
@ -234,10 +232,16 @@ class Extensions extends Manager
'fileData' => $ext->fileData,
]);
$this->updateCommon($ext);
if (true !== $this->updateCommon($ext)) {
$this->error = 'An error occurred in updateCommon';
return false;
}
$this->updateIndividual();
$this->c->DB->exec($query, $vars);
return true;
}
@ -261,8 +265,6 @@ class Extensions extends Manager
FROM ::extensions
WHERE ext_name=?s:name';
$this->c->DB->exec($query, $vars);
$ext->setModelAttrs([
'name' => $ext->name,
'dbStatus' => null,
@ -270,12 +272,18 @@ class Extensions extends Manager
'fileData' => $ext->fileData,
]);
$this->updateCommon($ext);
if (true !== $this->updateCommon($ext)) {
$this->error = 'An error occurred in updateCommon';
return false;
}
if ($oldStatus) {
$this->updateIndividual();
}
$this->c->DB->exec($query, $vars);
return true;
}
@ -284,44 +292,13 @@ class Extensions extends Manager
*/
public function update(Extension $ext): bool
{
if (true !== $ext->canUpdate) {
if (true === $ext->canUpdate) {
return $this->updown($ext);
} else {
$this->error = 'Invalid action';
return false;
}
$oldStatus = $ext->dbStatus;
$result = $ext->prepare();
if (true !== $result) {
$this->error = $result;
return false;
}
$vars = [
':name' => $ext->name,
':data' => \json_encode($ext->fileData, FORK_JSON_ENCODE),
];
$query = 'UPDATE ::extensions SET ext_data=?s:data
WHERE ext_name=?s:name';
$this->c->DB->exec($query, $vars);
$ext->setModelAttrs([
'name' => $ext->name,
'dbStatus' => $ext->dbStatus,
'dbData' => $ext->fileData,
'fileData' => $ext->fileData,
]);
$this->updateCommon($ext);
if ($oldStatus) {
$this->updateIndividual();
}
return true;
}
/**
@ -329,12 +306,17 @@ class Extensions extends Manager
*/
public function downdate(Extension $ext): bool
{
if (true !== $ext->canDowndate) {
if (true === $ext->canDowndate) {
return $this->updown($ext);
} else {
$this->error = 'Invalid action';
return false;
}
}
protected function updown(Extension $ext): bool
{
$oldStatus = $ext->dbStatus;
$result = $ext->prepare();
@ -351,8 +333,6 @@ class Extensions extends Manager
$query = 'UPDATE ::extensions SET ext_data=?s:data
WHERE ext_name=?s:name';
$this->c->DB->exec($query, $vars);
$ext->setModelAttrs([
'name' => $ext->name,
'dbStatus' => $ext->dbStatus,
@ -360,12 +340,18 @@ class Extensions extends Manager
'fileData' => $ext->fileData,
]);
$this->updateCommon($ext);
if (true !== $this->updateCommon($ext)) {
$this->error = 'An error occurred in updateCommon';
return false;
}
if ($oldStatus) {
$this->updateIndividual();
}
$this->c->DB->exec($query, $vars);
return true;
}
@ -386,8 +372,6 @@ class Extensions extends Manager
$query = 'UPDATE ::extensions SET ext_status=1
WHERE ext_name=?s:name';
$this->c->DB->exec($query, $vars);
$ext->setModelAttrs([
'name' => $ext->name,
'dbStatus' => 1,
@ -397,6 +381,8 @@ class Extensions extends Manager
$this->updateIndividual();
$this->c->DB->exec($query, $vars);
return true;
}
@ -417,8 +403,6 @@ class Extensions extends Manager
$query = 'UPDATE ::extensions SET ext_status=0
WHERE ext_name=?s:name';
$this->c->DB->exec($query, $vars);
$ext->setModelAttrs([
'name' => $ext->name,
'dbStatus' => 0,
@ -428,6 +412,8 @@ class Extensions extends Manager
$this->updateIndividual();
$this->c->DB->exec($query, $vars);
return true;
}
@ -530,6 +516,9 @@ class Extensions extends Manager
return true;
}
/**
* Вычисляет расхождение для PRE-данных
*/
protected function diffPre(array $a, array $b): array
{
$result = [];

View file

@ -25,24 +25,22 @@ class Extensions extends Admin
{
$this->c->Lang->load('admin_extensions');
if ('POST' === $method) {
return $this->action($args, $method);
}
$this->nameTpl = 'admin/extensions';
$this->aIndex = 'extensions';
$this->extensions = $this->c->extensions->repository;
$this->actionLink = $this->c->Router->link('AdminExtensions');
$this->formsToken = $this->c->Csrf->create('AdminExtensions');
$this->actionLink = $this->c->Router->link('AdminExtensionsAction');
$this->formsToken = $this->c->Csrf->create('AdminExtensionsAction');
return $this;
}
protected function action(array $args, string $method): Page
public function action(array $args, string $method): Page
{
$this->c->Lang->load('admin_extensions');
$v = $this->c->Validator->reset()
->addRules([
'token' => 'token:AdminExtensions',
'token' => 'token:AdminExtensionsAction',
'name' => 'required|string',
'confirm' => 'required|string|in:1',
'install' => 'string',
@ -81,6 +79,6 @@ class Extensions extends Admin
return $this->c->Message->message($this->c->extensions->error);
}
return $this->c->Redirect->page('AdminExtensions')->message("Redirect {$action}", FORK_MESS_SUCC);
return $this->c->Redirect->page('AdminExtensions', ['#' => $ext->id])->message("Redirect {$action}", FORK_MESS_SUCC);
}
}

View file

@ -113,3 +113,6 @@ msgstr "PRE name not found."
msgid "Template file '%s' not found"
msgstr "Template file '%s' not found."
msgid "An error occurred in updateCommon"
msgstr "An error occurred in updateCommon."

View file

@ -113,3 +113,6 @@ msgstr "PRE-имя не найдено."
msgid "Template file '%s' not found"
msgstr "Файл шаблона '%s' не найден."
msgid "An error occurred in updateCommon"
msgstr "Возникла ошибка в updateCommon."

View file

@ -6,7 +6,7 @@
<fieldset>
<ol>
@foreach ($p->extensions as $ext)
<li class="f-extli f-ext-status{{ $ext->status }}">
<li id="{{ $ext->id }}" class="f-extli f-ext-status{{ $ext->status }}">
<details class="f-extdtl">
<summary class="f-extsu">
<span>{{ $ext->dispalyName }}</span>