585 lines
21 KiB
PHP
585 lines
21 KiB
PHP
<?php
|
|
|
|
namespace app\controllers;
|
|
|
|
use app\models\Categories;
|
|
use app\models\CmsRoles;
|
|
use app\models\CommonFields;
|
|
use app\models\Expositions;
|
|
use app\models\ExpositionsObjects;
|
|
use app\models\Help;
|
|
use app\models\History;
|
|
use app\models\ObjectTemplate;
|
|
use app\models\ObjectTemplateField;
|
|
use app\models\ObjectTemplates;
|
|
use app\models\Positions;
|
|
use app\models\QrValidators;
|
|
use app\models\RegisterObjects;
|
|
use app\models\settlement\Ekatte;
|
|
use app\models\UserSession;
|
|
use app\services\Auth;
|
|
use yii\base\BaseObject;
|
|
use yii\web\Controller;
|
|
|
|
class RemoteController extends Controller
|
|
{
|
|
|
|
public function beforeAction($action)
|
|
{
|
|
date_default_timezone_set('Europe/Sofia');
|
|
$global = Auth::userAdminGlobal();
|
|
$partner = Auth::userPartner();
|
|
$cms = Auth::userAdminCms();
|
|
if (!$global && !$partner && !$cms)
|
|
exit;
|
|
return parent::beforeAction($action); // TODO: Change the autogenerated stub
|
|
}
|
|
|
|
public function actionRoleRights()
|
|
{
|
|
|
|
$rights = [];
|
|
if (!empty($_GET['role_id'])) {
|
|
$role = CmsRoles::findOne($_GET['role_id']);
|
|
if ($role) {
|
|
$rights = $role->getRightsIds();
|
|
}
|
|
}
|
|
echo json_encode(['rights' => $rights]);
|
|
exit;
|
|
}
|
|
|
|
public function actionGetHistory()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$table = $_POST['table'];
|
|
$id = $_POST['id'];
|
|
$data = History::find()->where(['table_name' => $table, 'history_id' => $id])
|
|
->orderBy(['date_time' => SORT_DESC])->all();
|
|
$historyData = [];
|
|
foreach ($data as $d) {
|
|
$row = [
|
|
'<div style="color: var(--base-background-dark); font-size: 14px"><b>' . ($d->action == 1 ? 'Създаване' : 'Редакция') . '</b></div>',
|
|
'<div>' . $d->user . '</div>',
|
|
'<div style="font-style: italic; color: darkorange">' . date('d.m.Y H:i', strtotime($d->date_time)) . '<div>'
|
|
];
|
|
|
|
$historyData[] = implode('', $row);
|
|
}
|
|
if (sizeof($historyData) == 0) {
|
|
$historyData[] = 'Историята е празна';
|
|
}
|
|
return $this->asJson($historyData);
|
|
}
|
|
return $this->asJson([]);
|
|
|
|
}
|
|
|
|
public function actionNewArticlePosition()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
if (!empty($_POST['group_id'])) {
|
|
$model = Positions::findOne($_POST['group_id']);
|
|
if ($model) {
|
|
$newPosition = new Positions();
|
|
$newPosition->group_id = $model->id;
|
|
$newPosition->order_index = $model->getNextOrderIndex();
|
|
$newPosition->save();
|
|
\Yii::$app->flash('success', 'Позицията е добавена успешно');
|
|
echo json_encode(['success' => true]);
|
|
exit;
|
|
}
|
|
}
|
|
\Yii::$app->flash('error', 'Възникна грешка, позицията не беше добавена');
|
|
echo json_encode(['success' => false]);
|
|
exit;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionNewSubCategory()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
if (!empty($_POST['parent_id'])) {
|
|
$model = Categories::findOne($_POST['parent_id']);
|
|
if ($model) {
|
|
$orderIndex = 0;
|
|
if ($model->id) {
|
|
$last = Categories::find()->where(['parent_id' => $model->id])->orderBy(['order_index' => SORT_DESC])->one();
|
|
if ($last)
|
|
$orderIndex = $last->order_index;
|
|
}
|
|
$subCategory = new Categories();
|
|
$subCategory->parent_id = $model->id;
|
|
$subCategory->order_index = ++$orderIndex;
|
|
$subCategory->save();
|
|
echo json_encode([
|
|
'success' => true,
|
|
'id' => $subCategory->id,
|
|
'orderIndex' => $subCategory->order_index,
|
|
'msg' => 'Подкатегорията е добавена успешно'
|
|
]);
|
|
exit;
|
|
}
|
|
}
|
|
echo json_encode(['success' => false, 'msg' => 'Възникна грешка, подкатегорията не беше добавена']);
|
|
exit;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionNewCommonFieldOption()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
if (!empty($_POST['parent_id'])) {
|
|
$model = CommonFields::findOne($_POST['parent_id']);
|
|
if ($model) {
|
|
$orderIndex = 0;
|
|
if ($model->id) {
|
|
$last = CommonFields::find()->where(['parent_id' => $model->id])->orderBy(['order_index' => SORT_DESC])->one();
|
|
if ($last)
|
|
$orderIndex = $last->order_index;
|
|
}
|
|
$commonFieldOption = new CommonFields();
|
|
$commonFieldOption->parent_id = $model->id;
|
|
$commonFieldOption->order_index = ++$orderIndex;
|
|
$commonFieldOption->save();
|
|
echo json_encode([
|
|
'success' => true,
|
|
'id' => $commonFieldOption->id,
|
|
'orderIndex' => $commonFieldOption->order_index,
|
|
'msg' => 'Опцията е добавена успешно'
|
|
]);
|
|
exit;
|
|
}
|
|
}
|
|
echo json_encode(['success' => false, 'msg' => 'Възникна грешка, полето не беше добавено']);
|
|
exit;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionNewDynamicField()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
if (!empty($_POST['ot_id'])) {
|
|
$model = ObjectTemplate::findOne($_POST['ot_id']);
|
|
|
|
if ($model) {
|
|
$orderIndex = ObjectTemplateField::getNextOrderIndex($_POST['ot_id']);
|
|
|
|
$objectType = new ObjectTemplateField();
|
|
$objectType->ot_id = $model->id;
|
|
$objectType->order_index = $orderIndex;
|
|
$objectType->save();
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'id' => $objectType->id,
|
|
'orderIndex' => $objectType->order_index,
|
|
'msg' => 'Динамичното поле е добавена успешно'
|
|
]);
|
|
exit;
|
|
}
|
|
}
|
|
echo json_encode(['success' => false, 'msg' => 'Възникна грешка, динамичното поле не беше добавено']);
|
|
exit;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionUpdateCategoryIndexes()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
echo json_encode($_POST);
|
|
}
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$indexes = json_decode($_POST['indexes']);
|
|
foreach ($indexes as $index) {
|
|
$file = Categories::findOne($index->id);
|
|
$file->order_index = $index->order_index;
|
|
$file->save();
|
|
}
|
|
echo json_encode(['success' => true]);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionUpdatePositionsIndexes()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
echo json_encode($_POST);
|
|
}
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$indexes = json_decode($_POST['indexes']);
|
|
foreach ($indexes as $index) {
|
|
$position = Positions::findOne($index->id);
|
|
$position->order_index = $index->order_index;
|
|
$position->save();
|
|
}
|
|
echo json_encode(['success' => true]);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionUpdateCommonFieldIndexes()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
echo json_encode($_POST);
|
|
}
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$indexes = json_decode($_POST['indexes']);
|
|
foreach ($indexes as $index) {
|
|
$file = CommonFields::findOne($index->id);
|
|
$file->order_index = $index->order_index;
|
|
$file->save();
|
|
}
|
|
echo json_encode(['success' => true]);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionUpdateDynamicFieldsIndexes()
|
|
{
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$indexes = json_decode($_POST['indexes']);
|
|
foreach ($indexes as $index) {
|
|
$model = ObjectTemplateField::findOne($index->id);
|
|
$model->order_index = $index->order_index;
|
|
$model->save();
|
|
}
|
|
echo json_encode(['success' => true]);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionUpdateDynamicTypeValues()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$option = null;
|
|
|
|
if (!empty($_POST['id'])) {
|
|
$option = ObjectTemplateField::findOne($_POST['id']);
|
|
|
|
if (empty($_POST['remove'])) {
|
|
//UPDATE
|
|
if (!empty($_POST['bg']))
|
|
$option->name = $_POST['bg'];
|
|
if (!empty($_POST['en']))
|
|
$option->ts_en_name = $_POST['en'];
|
|
$option->save();
|
|
} else {
|
|
//DELETE
|
|
$option->delete();
|
|
}
|
|
} //CREATE
|
|
else if (!empty($_POST['parent_id'])) {
|
|
$model = ObjectTemplateField::findOne($_POST['parent_id']);
|
|
if ($model) {
|
|
$option = new ObjectTemplateField();
|
|
if (!empty($_POST['bg']))
|
|
$option->name = $_POST['bg'];
|
|
if (!empty($_POST['en']))
|
|
$option->ts_en_name = $_POST['en'];
|
|
$option->parent_id = $_POST['parent_id'];
|
|
$option->save();
|
|
}
|
|
}
|
|
$response = ['success' => true];
|
|
if ($option) {
|
|
$response['id'] = $option->id;
|
|
}
|
|
echo json_encode($response);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionGetArticlePositions()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$positionGroups = [];
|
|
foreach (Positions::find()->where(['IS', 'group_id', null])->all() as $group) {
|
|
$positions = [];
|
|
|
|
foreach ($group->positions as $position) {
|
|
|
|
$positions[] = [
|
|
'id' => $position->id,
|
|
'checked' => $position->{'position_article_key'} == $_POST['article_key'],
|
|
'checked_fa' => !empty($position->{'position_article_key'})
|
|
&& $position->{'position_article_key'} != $_POST['article_key']
|
|
];
|
|
}
|
|
$positionGroups[] = [
|
|
"group" => $group->group_name,
|
|
'positions' => $positions
|
|
];
|
|
}
|
|
echo json_encode($positionGroups);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionUpdateArticlePosition()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$position = Positions::findOne($_POST['id']);
|
|
if ($position) {
|
|
if ($_POST['checked'] == "true") {
|
|
$position->{'position_article_key'} = $_POST['article_key'];
|
|
} else {
|
|
$position->{'position_article_key'} = NULL;
|
|
}
|
|
$position->save();
|
|
echo json_encode(['message' => 'Позицията е актуализирана успешно']);
|
|
}
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionUpdateListIndexes()
|
|
{
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
echo json_encode(['message' => 'Позицията е актуализирана успешно']);
|
|
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function actionGetObjectTypes()
|
|
{
|
|
//return $this->asJson(ObjectTemplate::getResponseData());
|
|
}
|
|
|
|
public function actionGetAutocompleteObjects()
|
|
{
|
|
if (!empty($_GET['q'])) {
|
|
$ekatte = RegisterObjects::find()->where(['LIKE', 'name', $_GET['q'] . '%', false])->limit(10)->all();
|
|
$data = [];
|
|
foreach ($ekatte as $row) {
|
|
$data[] = [
|
|
'object_id' => $row->id,
|
|
'name' => '<div class="flex row-result"><div class="img-container"><img src="' . $row->getMainImgFile() . '" style="height: 80px" ></div><div style="padding-top: 25px; margin-left: 10px">' . $row->name . '</div></div>',
|
|
];
|
|
}
|
|
return $this->asJson($data);
|
|
}
|
|
if (!empty($_GET['settlement_id'])) {
|
|
$row = RegisterObjects::findOne($_GET['settlement_id']);
|
|
|
|
if ($row)
|
|
return $this->asJson([
|
|
'object_id' => $row->id,
|
|
'name' => $row->name . '<img src="' . $row->getMainImgFile() . '" width="80px">',
|
|
]);
|
|
|
|
die('Wrong settlement_id');
|
|
}
|
|
die('Missing get parameter "q" or "settlement_id"');
|
|
}
|
|
|
|
public function actionGetExpositionObjects()
|
|
{
|
|
if (!empty($_GET['exposition_remote_list'])) {
|
|
|
|
$id = $_GET['exposition_remote_list'];
|
|
|
|
$exposition = Expositions::findOne($id);
|
|
$html = '';
|
|
foreach ($exposition->objectList as $expositionObject) {
|
|
$html .= '<div class="flex row-result">
|
|
<div class="img-container flex flex-center">
|
|
<img src="' . $expositionObject->object->getMainImgFile() . '" style="height: 80px">
|
|
</div>
|
|
<div style="padding-top: 30px; margin-left: 10px">
|
|
<a href="' . $expositionObject->object->getUrl() . '">' . $expositionObject->object->name . '</a>
|
|
</div>
|
|
<div onclick="removeObject(this)" data-object-id="' . $expositionObject->object_id . '"
|
|
data-exposition-id="' . $exposition->id . '" class="remove-object"><i class="la la-remove"></i></div>
|
|
</div>';
|
|
}
|
|
|
|
echo $html;
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function actionAddObjectToExposition()
|
|
{
|
|
$p = (object)$_POST;
|
|
|
|
if (!empty($p->{'exposition_id'}) && !empty($p->{'object_id'}) && empty($p->{'delete'})) {
|
|
$eo = ExpositionsObjects::find()->where(['exposition_id' => $p->{'exposition_id'}, 'object_id' => $p->{'object_id'}])->one();
|
|
if (!$eo) {
|
|
$eo = new ExpositionsObjects();
|
|
$eo->object_id = $p->{'object_id'};
|
|
$eo->exposition_id = $p->{'exposition_id'};
|
|
$eo->save();
|
|
echo json_encode(['success' => 1, 'message' => '']);
|
|
exit;
|
|
} else {
|
|
echo json_encode(['error' => 1, 'message' => 'Object already added']);
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function actionRemoveObjectFromExposition()
|
|
{
|
|
$p = (object)$_POST;
|
|
|
|
if (!empty($p->{'exposition_id'}) && !empty($p->{'object_id'})) {
|
|
$eo = ExpositionsObjects::find()->where(['exposition_id' => $p->{'exposition_id'}, 'object_id' => $p->{'object_id'}])->one();
|
|
if ($eo)
|
|
$eo->delete();
|
|
echo json_encode(['success' => 1, 'message' => 'Object is removed']);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function actionCheckActivity()
|
|
{
|
|
$admin = Auth::userAdminGlobal();
|
|
if ($admin && $admin->open_id) {
|
|
$us = UserSession::find()->where(['sub' => $admin->open_id])->one();
|
|
if (!$us) {
|
|
Auth::userAdminGlobalLogout();
|
|
return $this->asJson(['status' => 'inactive', 'redirect' => '/admin-global/']);
|
|
} else {
|
|
return $this->asJson(['status' => 'active']);
|
|
}
|
|
}
|
|
$partner = Auth::userPartner();
|
|
if ($partner && $partner->open_id) {
|
|
$us = UserSession::find()->where(['sub' => $partner->open_id])->one();
|
|
if (!$us) {
|
|
Auth::userPartnerLogout();
|
|
return $this->asJson(['status' => 'inactive', 'redirect' => '/partner/']);
|
|
} else {
|
|
return $this->asJson(['status' => 'active']);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function actionGetIp()
|
|
{
|
|
echo $_SERVER['REMOTE_ADDR'];
|
|
exit;
|
|
}
|
|
|
|
public function actionHelpKeysRemote($page)
|
|
{
|
|
if ($page == 'prepare-help') {
|
|
if (!empty($_GET['help_keys'])) {
|
|
if ($_GET['help_keys'] == 'active') {
|
|
$_SESSION['help_keys'] = 1;
|
|
$message = 'Ключовете за помощна информация са показани';
|
|
\Yii::$app->flash('success', $message);
|
|
}
|
|
if ($_GET['help_keys'] == 'inactive') {
|
|
if (!empty($_SESSION['help_keys'])) {
|
|
unset($_SESSION['help_keys']);
|
|
}
|
|
$message = 'Ключовете за помощна информация са скрити';
|
|
\Yii::$app->flash('success', $message);
|
|
}
|
|
echo json_encode(['success' => 1]);
|
|
exit;
|
|
}
|
|
}
|
|
if ($page == 'set-help') {
|
|
if (!empty($_POST['key'])) {
|
|
$help = Help::find()->where(['key' => $_POST['key']])->one();
|
|
if (!$help) {
|
|
$help = new Help();
|
|
$help->key = $_POST['key'];
|
|
if (!empty($_POST['title'])) {
|
|
$help->title = $_POST['title'];
|
|
}
|
|
$help->save();
|
|
}
|
|
echo json_encode(['url_to' => '/admin-global/index/help/?o=w&id=' . $help->id]);
|
|
exit;
|
|
}
|
|
echo json_encode(['error' => 1]);
|
|
exit;
|
|
}
|
|
if ($page == 'get-list') {
|
|
if (!empty($_GET['keys'])) {
|
|
$helpKeys = Help::find()->where(['IN', 'key', explode(',', $_GET['keys'])])->all();
|
|
$list = [];
|
|
foreach ($helpKeys as $helpKey) {
|
|
$list[] = ['key' => $helpKey->key, 'id' => $helpKey->id];
|
|
}
|
|
echo json_encode(['list' => $list]);
|
|
}
|
|
}
|
|
if ($page == 'get-content') {
|
|
return $this->renderPartial('help-info-content');
|
|
}
|
|
if ($page == 'delete-help') {
|
|
if (!empty($_POST['id'])) {
|
|
$help = Help::findOne($_POST['id']);
|
|
if ($help) {
|
|
$help->delete();
|
|
\Yii::$app->flash('success', 'Помощната информация беше изтрита');
|
|
echo json_encode(['url_to' => '/admin-global/index/help/']);
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
exit;
|
|
}
|
|
|
|
|
|
public function actionChangeLocale()
|
|
{
|
|
if (!empty($_POST['lg'])) {
|
|
setcookie('cookie_lg', $_POST['lg'], time() + (86400 * 1), "/");
|
|
echo json_encode(['success' => true, 'lg' => $_POST['lg']]);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function actionUpdateQrValidators()
|
|
{
|
|
if (!empty($_POST['partner_id'])) {
|
|
$partner_id = $_POST['partner_id'];
|
|
if(!empty($_POST['validators'])) {
|
|
|
|
$validators = explode(',', $_POST['validators']);
|
|
/** @var \app\models\QrValidators[] $added */
|
|
$added = QrValidators::find()->where(['partner_id' => $partner_id])->all();
|
|
$current = [];
|
|
//delete;
|
|
foreach ($added as $v) {
|
|
$current[] = $v->user_id;
|
|
if (!in_array($v->user_id, $validators)) {
|
|
$v->delete();
|
|
}
|
|
}
|
|
|
|
//add new
|
|
foreach ($validators as $id) {
|
|
if (!in_array($id, $current)) {
|
|
$qrv = new QrValidators();
|
|
$qrv->partner_id = $partner_id;
|
|
$qrv->user_id = $id;
|
|
$qrv->save();
|
|
}
|
|
}
|
|
echo json_encode(['success' => 1]);
|
|
} else {
|
|
$added = QrValidators::find()->where(['partner_id' => $partner_id])->all();
|
|
foreach ($added as $item) {
|
|
$item->delete();
|
|
}
|
|
echo json_encode(['success' => 1]);
|
|
}
|
|
//add new
|
|
}
|
|
exit;
|
|
}
|
|
}
|