Панель модератора

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich 2021-09-16 10:58:47 +10:00
parent a36f62e510
commit 134ce8f162
4 changed files with 220 additions and 71 deletions

View File

@ -0,0 +1,102 @@
<?php
declare(strict_types=1);
namespace app\controllers;
use yii;
use yii\web\Controller;
use yii\web\Response;
use yii\filters\AccessControl;
use app\models\Account;
class AccountController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::class,
'rules' => [
[
'allow' => true,
'roles' => ['@'],
'actions' => [
'index',
'edit',
]
],
[
'allow' => false,
'roles' => ['?'],
'denyCallback' => [$this, 'accessDenied']
]
]
]
];
}
public function accessDenied()
{
// Инициализация
$cookies = yii::$app->response->cookies;
// Запись cookie с редиректом, который выполнится после авторизации
$cookies->add(new Cookie([
'name' => 'redirect',
'value' => yii::$app->request->pathInfo
]));
if (Yii::$app->request->isPost) {
// POST-запрос
// Настройка
Yii::$app->response->format = Response::FORMAT_JSON;
// Генерация ответа
Yii::$app->response->content = json_encode([
'main' => $this->renderPartial('/account/index'),
'redirect' => yii::$app->request->pathInfo,
'_csrf' => Yii::$app->request->getCsrfToken()
]);
} else if (Yii::$app->request->isGet) {
// GET-запрос
$this->redirect('/authentication');
}
}
public function actionIndex()
{
return $this->renderPartial('/accounts/index');
}
public function actionEdit(int $_key, string $target)
{
if (yii::$app->user->isGuest) {
// Аккаунт не аутентифицирован
} else {
if (yii::$app->request->isPost) {
// AJAX-POST-запрос
if ($account = Account::searchById(Account::collectionName() . '/' . $_key)) {
// Аккаунт найден
// Запись параметра
$account->{$target} = yii::$app->request->post('value') ?? yii::$app->request->get('value') ?? 'Неизвестно';
// Настройка формата ответа
yii::$app->response->format = Response::FORMAT_JSON;
return $account->update() > 0;
}
}
}
// Запись кода ответа
yii::$app->response->statusCode = 500;
return false;
}
}

View File

@ -10,7 +10,6 @@ use yii\web\Controller;
use yii\web\Response;
use yii\web\Cookie;
use yii\web\UploadedFile;
use yii\web\User;
use app\models\Account;
use app\models\Supply;
@ -21,9 +20,9 @@ use app\models\Settings;
use app\models\Dellin;
use app\models\SettingsEdgeSettings;
use app\models\Terminal;
use Dadata\DadataClient as Dadata;
use Exception;
use moonland\phpexcel\Excel;
use Throwable;
class ProfileController extends Controller
@ -798,12 +797,14 @@ class ProfileController extends Controller
// Перебор журнала
if ($jrnl['action'] === 'create') {
// Заявка найдена
// Запись о создании найдена
// Запись даты регистрации
$registration_date = $jrnl['date'];
} else if ($jrnl['action'] === 'request to become a supplier') {
// Заявка найдена
}
if ($jrnl['action'] === 'request to become a supplier') {
// Запись о подаче заявку на становление поставщиком найдена
// Запись даты отправки заявки
$supplier_date = $jrnl['date'];
@ -816,26 +817,43 @@ class ProfileController extends Controller
if (empty($supplier_data) || empty($supplier_date) || empty($registration_date)) {
// Данные из журнала не найдены
// Запись кода ответа
yii::$app->response->statusCode = 500;
return;
// Пропуск
continue;
}
// if (!isset($account->indx) || empty($account->indx)) {
if (empty($account->indx)) {
// Индекс не инициализирован
// Инициализация индекса
Account::generateIndexes([$account]);
}
// if (!isset($account->pswd) || empty($account->pswd)) {
if (empty($account->pswd)) {
// Пароль не инициализирован
// Инициализация пароля
$account->passwordInit();
}
// Запись в буфер ответа
$response[] = [
'_key' => $account->_key,
'name' => $account->name,
'mail' => $account->mail,
'boss' => $account->boss,
'desc' => $account->desc,
'simc' => $account->simc,
'simc' => $account->simc,
'comp' => $account->comp,
'cntc' => $account->cntc,
'taxn' => $account->taxn,
'cntg' => $account->cntg,
'fadd' => $account->fadd,
'ladd' => $account->ladd,
'chck' => $account->chck,
'indx' => $account->indx,
'pswd' => $account->pswd,
'vrfy' => Account::validateVrfy($account->vrfy),
'data' => $supplier_data,
'date' => [

View File

@ -38,22 +38,29 @@ class Account extends Document implements IdentityInterface, PartnerInterface
return array_merge(
parent::attributes(),
[
'auth',
'name',
'mail',
'desc',
'indx',
'pswd',
'name',
'simc',
'city',
'boss',
'sity',
'zone',
'comp',
'cntc',
'taxn',
'cntg',
'fadd',
'ladd',
'chck',
'onec',
'opts',
'agnt',
'type',
'vrfy',
'geol',
'auth',
'acpt'
]
);
@ -67,22 +74,29 @@ class Account extends Document implements IdentityInterface, PartnerInterface
return array_merge(
parent::attributeLabels(),
[
'auth' => 'Аутентификационный хеш',
'name' => 'Контактное лицо',
'mail' => 'Почта',
'desc' => 'Описание',
'indx' => 'Псевдоанонимный идентификатор',
'pswd' => 'Пароль',
'name' => 'Имя',
'simc' => 'Номер',
'boss' => 'Директор',
'sity' => 'Город',
'zone' => 'Часовой пояс',
'comp' => 'Компания',
'cntc' => 'Контакты',
'taxn' => 'ИНН',
'cntg' => 'КПП',
'fadd' => 'Фактический адрес',
'ladd' => 'Юридический адрес',
'chck' => 'Расчетный счет',
'onec' => 'Данные 1C',
'opts' => 'Параметры',
'agnt' => 'Агент (поставщик)',
'type' => 'Тип аккаунта',
'vrfy' => 'Статус подтверждения владением почты',
'geol' => 'Геолокация',
'auth' => 'Аутентификационный хеш',
'acpt' => 'Согласие с офертой'
]
);

View File

@ -65,7 +65,6 @@ function page_profile_panel_input_suppliers_requests_init() {
};
function page_profile_panel_suppliers_choose(button) {
if (button === 'profile_panel_input_suppliers') {
document.getElementById('profile_panel_input_notifications').addAttribute('onclick', 'return page_profile_panel_input_suppliers_notifications_init();');
document.getElementById('profile_panel_input_settings').addAttribute('onclick', 'return page_profile_panel_input_suppliers_settings_init();');
@ -226,7 +225,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_name.setAttribute('class', 'form-control button_clean mb-3');
input_name.setAttribute('type', 'text');
input_name.setAttribute('placeholder', 'Иванов Иван Иванович');
input_name.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_name_edit(' + account._key + ', this);');
input_name.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "name", this.value);');
input_name.value = account.name ?? '';
// Инициализация ярлыка "BOSS"
@ -240,7 +239,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_boss.setAttribute('class', 'form-control button_clean mb-3');
input_boss.setAttribute('type', 'text');
input_boss.setAttribute('placeholder', 'Иванов Иван Иванович');
input_boss.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_boss_edit(' + account._key + ', this);');
input_boss.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "boss", this.value);');
input_boss.value = account.boss ?? '';
// Инициализация ярлыка "SIMC" (телефон)
@ -253,7 +252,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_simc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_simc_' + account._key);
input_simc.setAttribute('class', 'form-control button_clean mb-3');
input_simc.setAttribute('type', 'number');
input_simc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_simc_edit(' + account._key + ', this);');
input_simc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "simc", this.value);');
input_simc.value = account.simc ?? '';
// Инициализация ярлыка "MAIL"
@ -266,7 +265,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_mail.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_mail_' + account._key);
input_mail.setAttribute('class', 'form-control button_clean mb-3');
input_mail.setAttribute('type', 'mail');
input_mail.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_mail_edit(' + account._key + ', this);');
input_mail.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "mail", this.value);');
input_mail.value = account.mail ?? '';
// Инициализация колонки с вторичными данными аккаунта
@ -288,7 +287,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_indx.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_indx_' + account._key);
input_indx.setAttribute('class', 'col form-control button_clean');
input_indx.setAttribute('type', 'text');
input_indx.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_indx_edit(' + account._key + ', this);');
input_indx.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "indx", this.value);');
input_indx.value = account.indx ?? '';
// Инициализация кнопки "INDX"
@ -298,29 +297,29 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
button_indx.setAttribute('role', 'button');
button_indx.innerHTML = '<i class="fas fa-redo-alt"></i>';
// Инициализация ярлыка "PSWD"
let label_pswd = document.createElement('label');
label_pswd.setAttribute('class', 'control-label');
label_pswd.innerText = 'Пароль';
// // Инициализация ярлыка "PSWD"
// let label_pswd = document.createElement('label');
// label_pswd.setAttribute('class', 'control-label');
// label_pswd.innerText = 'Пароль';
// Инициализация оболочки "PSWD"
let wrap_pswd = document.createElement('div');
wrap_pswd.setAttribute('class', 'row mx-0 mb-3');
// // Инициализация оболочки "PSWD"
// let wrap_pswd = document.createElement('div');
// wrap_pswd.setAttribute('class', 'row mx-0 mb-3');
// Инициализация поля "PSWD"
let input_pswd = document.createElement('input');
input_pswd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_pswd_' + account._key);
input_pswd.setAttribute('class', 'col form-control button_clean');
input_pswd.setAttribute('type', 'text');
input_pswd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_pswd_edit(' + account._key + ', this);');
input_pswd.value = account.pswd ?? '';
// // Инициализация поля "PSWD"
// let input_pswd = document.createElement('input');
// input_pswd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_pswd_' + account._key);
// input_pswd.setAttribute('class', 'col form-control button_clean');
// input_pswd.setAttribute('type', 'text');
// input_pswd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "pswd", this.value);');
// input_pswd.value = account.pswd ?? '';
// Инициализация кнопки "PSWD"
let button_pswd = document.createElement('a');
button_pswd.setAttribute('class', 'ml-2 my-auto text-dark');
button_pswd.setAttribute('type', 'button');
button_pswd.setAttribute('role', 'button');
button_pswd.innerHTML = '<i class="fas fa-redo-alt"></i>';
// // Инициализация кнопки "PSWD"
// let button_pswd = document.createElement('a');
// button_pswd.setAttribute('class', 'ml-2 my-auto text-dark');
// button_pswd.setAttribute('type', 'button');
// button_pswd.setAttribute('role', 'button');
// button_pswd.innerHTML = '<i class="fas fa-redo-alt"></i>';
// Инициализация ярлыка "FILE"
let label_file = document.createElement('label');
@ -343,7 +342,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_taxn.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_taxn_' + account._key);
input_taxn.setAttribute('class', 'form-control button_clean mb-3');
input_taxn.setAttribute('type', 'text');
input_taxn.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_taxn_edit(' + account._key + ', this);');
input_taxn.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "taxn", this.value);');
input_taxn.value = account.taxn ?? '';
// Инициализация ярлыка "CNTG"
@ -356,7 +355,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_cntg.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_cntg_' + account._key);
input_cntg.setAttribute('class', 'form-control button_clean mb-3');
input_cntg.setAttribute('type', 'text');
input_cntg.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_cntg_edit(' + account._key + ', this);');
input_cntg.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntg", this.value);');
input_cntg.value = account.cntg ?? '';
// Инициализация ярлыка "FADD"
@ -369,7 +368,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_fadd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_fadd_' + account._key);
input_fadd.setAttribute('class', 'form-control button_clean mb-3');
input_fadd.setAttribute('type', 'text');
input_fadd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_fadd_edit(' + account._key + ', this);');
input_fadd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "fadd", this.value);');
input_fadd.value = account.fadd ?? '';
// Инициализация ярлыка "LADD"
@ -382,34 +381,34 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_ladd.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_ladd_' + account._key);
input_ladd.setAttribute('class', 'form-control button_clean mb-3');
input_ladd.setAttribute('type', 'text');
input_ladd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_ladd_edit(' + account._key + ', this);');
input_ladd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "ladd", this.value);');
input_ladd.value = account.ladd ?? '';
// Инициализация ярлыка "CHCK"
let label_chck = document.createElement('label');
label_chck.setAttribute('class', 'control-label');
label_chck.innerText = 'Расчетный адрес';
label_chck.innerText = 'Расчетный счет';
// Инициализация поля "CHCK"
let input_chck = document.createElement('input');
input_chck.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_chck_' + account._key);
input_chck.setAttribute('class', 'form-control button_clean mb-3');
input_chck.setAttribute('type', 'text');
input_chck.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_chck_edit(' + account._key + ', this);');
input_chck.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "chck", this.value);');
input_chck.value = account.chck ?? '';
// Инициализация ярлыка "CMPN"
let label_cmpn = document.createElement('label');
label_cmpn.setAttribute('class', 'control-label');
label_cmpn.innerText = 'Организация';
// Инициализация ярлыка "COMP"
let label_comp = document.createElement('label');
label_comp.setAttribute('class', 'control-label');
label_comp.innerText = 'Организация';
// Инициализация поля "CMPN"
let input_cmpn = document.createElement('input');
input_cmpn.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_cmpn_' + account._key);
input_cmpn.setAttribute('class', 'form-control button_clean mb-3');
input_cmpn.setAttribute('type', 'text');
input_cmpn.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_cmpn_edit(' + account._key + ', this);');
input_cmpn.value = account.cmpn ?? '';
// Инициализация поля "COMP"
let input_comp = document.createElement('input');
input_comp.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_comp_' + account._key);
input_comp.setAttribute('class', 'form-control button_clean mb-3');
input_comp.setAttribute('type', 'text');
input_comp.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "comp", this.value);');
input_comp.value = account.comp ?? '';
// Инициализация ярлыка "CNTC"
let label_cntc = document.createElement('label');
@ -421,7 +420,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
input_cntc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_cntc_' + account._key);
input_cntc.setAttribute('class', 'form-control button_clean profile_panel_input_suppliers_requests_block_textarea');
input_cntc.setAttribute('type', 'text');
input_cntc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_cntc_edit(' + account._key + ', this);');
input_cntc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntc", this.value);');
input_cntc.value = account.cntc ?? '';
// Инициализация ярлыка "DESC"
@ -434,7 +433,7 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
textarea_desc.setAttribute('id', 'profile_panel_input_suppliers_requests_block_info_desc_' + account._key);
textarea_desc.setAttribute('class', 'form-control button_clean mb-3 profile_panel_input_suppliers_requests_block_textarea');
textarea_desc.setAttribute('type', 'text');
textarea_desc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_desc_edit(' + account._key + ', this);');
textarea_desc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "desc", this.value);');
textarea_desc.value = account.desc ?? '';
// Инициализация разделителя для геолокации
@ -470,10 +469,10 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
wrap_indx.appendChild(button_indx);
block_info.appendChild(wrap_indx);
block_info.appendChild(label_pswd);
wrap_pswd.appendChild(input_pswd);
wrap_pswd.appendChild(button_pswd);
block_info.appendChild(wrap_pswd);
// block_info.appendChild(label_pswd);
// wrap_pswd.appendChild(input_pswd);
// wrap_pswd.appendChild(button_pswd);
// block_info.appendChild(wrap_pswd);
block_info.appendChild(label_desc);
block_info.appendChild(textarea_desc);
@ -485,8 +484,8 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
block_details.appendChild(label_boss);
block_details.appendChild(input_boss);
block_details.appendChild(label_cmpn);
block_details.appendChild(input_cmpn);
block_details.appendChild(label_comp);
block_details.appendChild(input_comp);
block_details.appendChild(label_taxn);
block_details.appendChild(input_taxn);
@ -551,3 +550,19 @@ function page_profile_panel_input_suppliers_requests_generate(suppliers) {
// Возврат
return html;
}
function profile_panel_input_suppliers_requests_block_edit(_key, target, value) {
$.ajax({
url: `/account/${_key}/${target}/edit`,
type: 'post',
dataType: 'json',
data: {
'_csrf': yii.getCsrfToken(),
'value': value
},
success: page_profile_response_success,
error: page_profile_response_error
});
return false;
}