forkbb/app/Models/Pages/Admin/Maintenance.php
2018-04-23 18:23:32 +07:00

228 lines
7.8 KiB
PHP

<?php
namespace ForkBB\Models\Pages\Admin;
use ForkBB\Core\Validator;
use ForkBB\Models\Pages\Admin;
use ForkBB\Models\Config\Model as Config;
class Maintenance extends Admin
{
/**
* Обслуживание
*
* @param array $args
* @param string $method
*
* @return Page
*/
public function view(array $args, $method)
{
$this->c->Lang->load('admin_maintenance');
$config = clone $this->c->config;
if ('POST' === $method) {
$v = $this->c->Validator->reset()
->addValidators([
'check_message' => [$this, 'vCheckMessage'],
])->addRules([
'token' => 'token:AdminMaintenance',
'o_maintenance' => 'required|integer|in:0,1',
'o_maintenance_message' => 'string:trim|max:65000 bytes|check_message',
])->addAliases([
])->addArguments([
])->addMessages([
]);
if ($v->validation($_POST)) {
$this->c->DB->beginTransaction();
$this->c->config->o_maintenance = $v->o_maintenance;
$this->c->config->o_maintenance_message = $v->o_maintenance_message;
$this->c->config->save();
$this->c->DB->commit();
return $this->c->Redirect->page('AdminMaintenance')->message('Data updated redirect');
}
$this->fIswev = $v->getErrors();
}
$this->formMaintenance = [
'action' => $this->c->Router->link('AdminMaintenance'),
'hidden' => [
'token' => $this->c->Csrf->create('AdminMaintenance'),
],
'sets' => [
'maint' => [
'fields' => [
'o_maintenance' => [
'type' => 'radio',
'value' => $config->o_maintenance,
'values' => [1 => \ForkBB\__('Yes'), 0 => \ForkBB\__('No')],
'caption' => \ForkBB\__('Maintenance mode label'),
'info' => \ForkBB\__('Maintenance mode help'),
],
'o_maintenance_message' => [
'type' => 'textarea',
'value' => $config->o_maintenance_message,
'caption' => \ForkBB\__('Maintenance message label'),
'info' => \ForkBB\__('Maintenance message help'),
],
],
],
],
'btns' => [
'submit' => [
'type' => 'submit',
'value' => \ForkBB\__('Save changes'),
'accesskey' => 's',
],
],
];
$this->formRebuild = [
'action' => $this->c->Router->link('AdminMaintenanceRebuild'),
'hidden' => [
'token' => $this->c->Csrf->create('AdminMaintenanceRebuild'),
],
'sets' => [
'indx-info' => [
'info' => [
'info1' => [
'type' => '', //????
'value' => \ForkBB\__('Rebuild index info'),
'html' => true,
],
],
],
'indx' => [
'legend' => \ForkBB\__('Rebuild index head'),
'fields' => [
'limit' => [
'type' => 'number',
'min' => 1,
'max' => 9999,
'value' => 100,
'caption' => \ForkBB\__('Posts per cycle label'),
'info' => \ForkBB\__('Posts per cycle help'),
],
'start' => [
'type' => 'number',
'min' => 1,
'max' => 9999999999,
'value' => 1,
'caption' => \ForkBB\__('Starting post label'),
'info' => \ForkBB\__('Starting post help'),
],
'clear' => [
'type' => 'checkbox',
'value' => '1',
'checked' => true,
'caption' => \ForkBB\__('Empty index label'),
'label' => \ForkBB\__('Empty index help'),
],
],
],
'indx-info2' => [
'info' => [
'info1' => [
'type' => '', //????
'value' => \ForkBB\__('Rebuild completed info'),
'html' => true,
],
],
],
],
'btns' => [
'rebuild' => [
'type' => 'submit',
'value' => \ForkBB\__('Rebuild index'),
'accesskey' => 'r',
],
],
];
$this->nameTpl = 'admin/maintenance';
$this->aIndex = 'maintenance';
return $this;
}
/**
* Подстановка значения по умолчанию
*
* @param Validator $v
* @param string $value
*
* @return string
*/
public function vCheckMessage(Validator $v, $value)
{
if (1 === $v->o_maintenance && 0 === strlen($value)) {
$value = \ForkBB\__('Default maintenance message');
}
return $value;
}
/**
* Пересоздание поискового индекса
*
* @param array $args
* @param string $method
*
* @return Page
*/
public function rebuild(array $args, $method)
{
$this->c->Lang->load('admin_maintenance');
$v = $this->c->Validator->reset()
->addValidators([
])->addRules([
'token' => 'token:' . ('POST' === $method ? 'AdminMaintenanceRebuild' : 'AdminRebuildIndex'),
'limit' => 'required|integer|min:1|max:9999',
'start' => 'required|integer|min:1|max:9999999999',
'clear' => 'checkbox',
])->addAliases([
])->addArguments([
'token' => $args,
])->addMessages([
]);
if (('POST' === $method && ! $v->validation($_POST))
|| ('POST' !== $method && ! $v->validation($args))
) {
$this->fIswev = $v->getErrors();
return $this->view([], 'GET');
}
$this->c->DB->beginTransaction();
@\set_time_limit(0);
if ('POST' === $method && $v->clear) {
$this->c->search->truncateIndex();
}
$last = $this->c->posts->rebuildIndex($v->start, $v->limit, $v->clear ? 'add' : 'edit');
$this->c->DB->commit();
if ($last) {
$args = [
'token' => '',
'limit' => $v->limit,
'start' => $last + 1,
'clear' => $v->clear ? '1' : '0',
];
$args['token'] = $this->c->Csrf->create('AdminRebuildIndex', $args);
return $this->c->Redirect->page('AdminRebuildIndex', $args)->message(\ForkBB\__('Processed posts', $v->start, $last));
} else {
return $this->c->Redirect->page('AdminMaintenance')->message('Rebuilding index end');
}
}
}