Initial import

This commit is contained in:
Admin Nasledstvo
2026-05-01 20:52:04 +03:00
commit ac168868ee
10028 changed files with 2337954 additions and 0 deletions
@@ -0,0 +1,30 @@
<?php
use app\models\CommonFields;
$commonFields = CommonFields::find()->where(['IS', 'parent_id', NULL])->all();
?>
<div class="advanced-filter filter">
<div class="filter-header">
<div class="close-filter"><i class="la la-remove"></i></div>
</div>
<div class="filter-body">
<div class="row top15">
<label>Вид шаблон</label>
<select style="display: none" class="objet_type_select" multiple >
<option value="">-- без филтър --</option>
</select>
</div>
<?php foreach ($commonFields as $commonField): ?>
<div class="row top15">
<label><?= $commonField->name ?></label>
<select style="display: none" class="advanced-select" multiple >
<option value="">-- без филтър --</option>
<?php foreach ($commonField->options as $option): ?>
<option value="<?= $option->id ?>"><?= $option->name ?></option>
<?php endforeach; ?>
</select>
</div>
<?php endforeach; ?>
</div>
</div>
@@ -0,0 +1,72 @@
<?php
use app\models\Expositions;
use app\models\ExpositionsCategories;
use app\models\History;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
/**
* @var $listtabs
* @var $tab
*/
TableWidget::widget([
'top' => [
'title' => 'Експозиции категории',
'data' => [
'index/dashboard' => 'Начало',
]
],
'listTabs' => $listtabs,
'actions' => [
'new' => 'Нова категория',
'edit' => 'Редакция на категория',
'delete' => 'Изтриване на категори'
],
'th' => [
'№' => 'c0 text-right',
'Име на категория (bg)' => '',
'Име на категория (en)' => '',
],
'data' => ExpositionsCategories::find()->where([])->orderBy(['id' => SORT_ASC])->loop([
'id',
function (ExpositionsCategories $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
'name_en'
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова категория',
'title_edit' => 'Редакция на категория',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions?listtab=categories' => 'Категории експозиции'
],
],
'tabs' => ['main' => '<i class="la la-database"></i> Основни данни'],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/expositions_categories_w",
'model' => ExpositionsCategories::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{'name'}))
return ["name" => 'Моля, въведете име на категорията'];
if (empty($p->{'name_en'}))
return ["name_en" => 'Моля, въведете име на категорията на английски'];
}
return null;
},
'postService' => function ($p, ExpositionsCategories $model) {
$model->setPostDataToModel();
$model->save();
History::addNew($model->id, 'expositions-categories', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Категорията експозиция е актуализирана успешно' : 'Категорията експозиция е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,132 @@
<?php
use app\models\Expositions;
use app\models\ExpositionsObjects;
use app\models\History;
use app\models\register\Partner;
use app\services\Auth;
use app\services\Formatter;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
/**
* @var $listtabs
* @var $tab
*/
TableWidget::widget([
'filter' => [
[
'name' => ['Име', 'c4'],
'partner_id' => ['Организация', 'c3', Partner::partnerList()],
'is_for_publish' => ['За публикувне', 'c1', [1 => 'да', 'null' => 'не']],
'is_active' => ['Публикувано', 'c1', [1 => 'да', 'null' => 'не']]
]
],
'top' => [
'title' => 'Експозиции на обекти',
'data' => [
'index/dashboard' => 'Начало'
]
],
'listTabs' => $listtabs,
'actions' => [
'new' => 'Нова експозиция',
'edit' => 'Редакция на експозиция',
'delete' => 'Изтриване на експозиция'
],
'th' => [
'№' => 'c0 text-right',
'Име на експозиция' => '',
'История' => 'c1 ct',
'Добавена в избрани' => 'c1 ct',
'За публикуване' => 'c1 ct',
'Публикувана' => 'c1 ct',
'Дата на публикуване' => 'c1 ct',
],
'data' => Expositions::find()->where(Yii::$app->getFilterData('or'))->orderBy(['id' => SORT_DESC])->loop([
'id',
function (Expositions $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
function (Expositions $model) {
return '<i data-table="expositions" data-id="' . $model->id . '" class="la la-history historyButton"></i>';
},
function (Expositions $model) {
return $model->statusSwitch('is_selected', null, ['Експозицията е добавена в избрани', 'Експозицията е махната от избрани']);
},
function (Expositions $model) {
return $model->is_for_publish ? '<span id="blink_' . $model->id . '" class="' . (!$model->is_active ? 'blink-green' : '') . '">да</span>' : 'не';
},
function (Expositions $model) {
return $model->statusSwitch('is_active', null, ['Експозицията е видима на сайта', 'Експозицията е свалена от сайта']);
},
function (Expositions $model) {
if ($model->publish_date)
return Formatter::date($model->publish_date);
},
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова експозиция',
'title_edit' => 'Редакция на експозиция',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Експозиции на обекти'
],
],
'tabs' => $tabs ?? [],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/expositions_w",
'model' => Expositions::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{'name'}))
return ["name" => 'Моля, въведете име на експозицията'];
if (empty($p->{'ts_en_name'}))
return ["ts_en_name" => 'Моля, въведете име на експозицията на английски'];
if (empty($p->{'category_id'}))
return ["category_id" => 'Моля, изберете категория на експозицията'];
if (empty($p->{'annotation'}))
return ["annotation" => 'Моля, въведете анотация на експозицията'];
if (empty($p->{'description'}))
return ["description" => 'Моля, въведете описание на експозицията'];
if (empty($p->{'partner_id'}))
return ["partner_id" => 'Моля, изберете партноьор, който представя експозицията'];
if (empty($p->{'info_center'}))
return ["info_center" => 'Моля, попълнете име на информационен център'];
if (empty($p->{'info_center_address'}))
return ["info_center_address" => 'Моля, попълнете адрес на информационен център'];
} else if (Includes::inLocales($tab)) {
if (empty($p->{$tab . '_annotation'}))
return [$tab . "_annotation" => 'Моля, въведете анотация на експозицията'];
if (empty($p->{$tab . '_description'}))
return [$tab . "_description" => 'Моля, въведете описание на експозицията'];
if (empty($p->{$tab . '_info_center'}))
return [$tab . "_info_center" => 'Моля, попълнете име на информационен център'];
if (empty($p->{$tab . '_info_center_address'}))
return [$tab . "_info_center_address" => 'Моля, попълнете адрес на информационен център'];
}
return null;
},
'postService' => function ($p, Expositions $model) {
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->delete();
echo json_encode(['success' => 1, 'message' => '']);
exit;
}
$model->setPostDataToModel();
$model->save();
if (empty($p->{'tag_list'})) {
$model->updateExpositionTags([]);
} else {
$model->updateExpositionTags($p->{'tag_list'});
}
History::addNew($model->id, 'expositions', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Експозицията е актуализирана успешно' : 'Експозицията е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,32 @@
<?php
use app\models\ExpositionsTags;
use app\widgets\FormWidget;
$_GET['o'] = 'w';
FormWidget::widget([
'top' => [
'title' => 'Експозиции тагове',
'title_edit' => '',
'data' => [
'index/dashboard' => 'Начало',
],
],
'writeView' => "web-portal/tabs/main/expositions_tags_w",
'model' => ExpositionsTags::class,
'validation' => function ($p) {
},
'postService' => function ($p, ExpositionsTags $model) {
$model->setPostDataToModel();
if (isset($p->{'name'}) && $p->name == 'null')
$model->name = null;
if (isset($p->{'name_en'}) && $p->name_en == 'null')
$model->name_en = null;
$model->save();
echo json_encode(['id' => $model->id]);
exit;
}
]);
@@ -0,0 +1,48 @@
<?php
/**
* @var $expId
*/
$filterData = [];
?>
<style>
.filter-box {
position: fixed;
right: 0;
height: calc(100% - 137px);
background: #FFFFFF;
width: 600px;
top: 45px;
transform: translateX(650px);
transition: all 0.3s;
padding: 30px 20px 10px 30px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
}
.filter-box.open {
transform: translateX(0);
}
</style>
<div class="filter-box">
<div class="row">
<label>Реф. номер</label>
<input data-format="integer" id="filter_object_ref_num" value="<?= $_GET['ref_num'] ?? ''?>" style="width: 200px">
</div>
<div class="row top15">
<label>Име на обект</label>
<input id="filter_object_name" value="<?= $_GET['name'] ?? ''?>">
</div>
<div class="flex flex-center top15">
<div onclick="filterExpObjects()" class="btn-ib btn-default"><i class="la la-filter"></i> Филтрирай</div>
<div onclick="clearFilterExpObjects()" class="btn-ib btn-rem"><i class="la la-remove"></i> Изчисти</div>
</div>
</div>
<script>
//dataFormat()
</script>
<!-- //filter_object_name -->
@@ -0,0 +1,310 @@
<style>
.page-navbar {
display: none;
}
.header {
display: none;
}
.cms-table {
margin: 45px 0 35px 0;
}
.pagination {
position: fixed;
bottom: 0;
left: 0;
justify-content: left !important;
background: #FFFFFF;
padding: 15px;
box-shadow: 0 -3px 10px rgba(0, 0, 0, 0.3);
width: 100%;
margin-left: 0 !important;
}
.page-content {
width: 100%;
padding: 0 !important;
}
.flex.top {
position: fixed;
top: 0;
left: 0;
background: #FFFFFF;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
z-index: 10000;
padding-left: 15px;
margin-left: 0;
width: 100%;
}
.flex.top .top-title {
padding-top: 15px !important;
padding-bottom: 10px !important;
width: 100%;
white-space: nowrap;
overflow-x: hidden;
font-size: 16px;
color: var(--base-background-dark);
}
.inner-content {
padding: 1px !important;
position: relative;
}
.filter-button {
position: fixed;
right: 15px;
bottom: 70px;
height: 50px !important;
width: 50px !important;
text-align: center;
line-height: 60px;
cursor: pointer;
border-radius: 100%;
border: 1px solid var(--base-background-dark);
background: #FFFFFF;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
z-index: 100000;
}
.filter-button:hover {
background: var(--base-background-ultra-bright-clear);
}
.filter-button .la {
font-size: 25px;
color: var(--base-background-dark);
}
.breadcrumb {
display: none;
}
</style>
<?php
/**
* @var $this \yii\web\View
*/
use app\models\History;
use app\models\RegisterObjects;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
$_GET['tab'] = $tab;
$title = null;
$expId = null;
$partner_id = null;
if (!empty($_GET['expId'])) {
$exp = \app\models\Expositions::findOne($_GET['expId']);
if ($exp) {
$title = $exp->name;
$expId = $exp->id;
$partner_id = $exp->partner_id;
}
}
if(!$partner_id) exit;
$specialCondition = [];
$specialCondition['partner_id'] = $partner_id;
$specialCondition['lib_type'] = 1;
if(!empty($_GET['ref_num'])) {
$specialCondition['ref_num'] = (int)$_GET['ref_num'];
}
if(!empty($_GET['name'])) {
$specialCondition['name'] = $_GET['name'];
}
$data = RegisterObjects::find()->where($specialCondition)->orderBy(['date_updated' => SORT_DESC]);
TableWidget::widget([
//'advanced_filter' => $this->render('_advanced_filters/object'),
'top' => [
'title' => $title ? 'Експозиция: ' . $title : '',
'data' => [
//'index/dashboard' => 'Начало',
//'web-portal/expositions' => 'Уебпортал',
]
],
'actions' => [
// 'edit' => 'Редакция на обект',
// 'delete' => 'Изтриване на обект'
],
'th' => [
//'ID' => 'c05 text-right',
'Реф. №' => 'c05 text-right',
'Добавяне в експозицията' => 'c1',
'Изображение' => 'ct c1',
'Наименование' => '',
],
'data' => $data->loop([
//'id',
'ref_num',
function (RegisterObjects $model) use ($expId) {
$button = $model->isAddedToExposition($expId);
return '<div data-exposition-id="' . $expId . '" data-object-id="' . $model->id . '" class="flex flex-center">' . $button . '</div>';
},
function (RegisterObjects $model) {
if ($model->mainImgFile) {
return '<img src="' . $model->mainImgFile . '" style="height: 130px">';
}
},
function (RegisterObjects $model) {
if ($model->name)
return $model->name;
},
/*function (RegisterObjects $model) {
if ($model->city)
return $model->city->place;
},*/
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
],
'tabs' => $tabs ?? [],
'writeView' => empty($_GET['id']) ? "web-portal/tabs/main/register_objects_w" : "web-portal/tabs/" . Includes::tab($tab) . "/register_objects_w",
'model' => RegisterObjects::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($_GET['id'])) {
//NEW OBJECT
if (empty($p->{'sc_id'}))
return ['sc_id' => 'Моля, изберете категория'];
if (empty($p->{'sc_id'}))
return ['ot_id' => 'Моля, изберете шаблон на обект'];
} else {
//UPDATE GENERAL DATA
if (empty($p->{'name'}))
return ['name' => 'Моля, въведете име на обекта'];
if (empty($p->{'annotation'}))
return ['annotation' => 'Моля, въведете анотация'];
if (empty($p->{'description'}))
return ['description' => 'Моля, въведете описание'];
}
} else if (Includes::inLocales($tab)) {
if (empty($p->{$tab . '_name'}))
return [$tab . '_name' => 'Моля, въведете име на обекта'];
if (empty($p->{$tab . '_annotation'}))
return [$tab . '_annotation' => 'Моля, въведете анотация'];
if (empty($p->{$tab . '_description'}))
return [$tab . '_description' => 'Моля, въведете описание'];
}
return null;
},
'postService' => function ($p, RegisterObjects $model) use ($tab) {
$model->setPostDataToModel();
$model->save();
History::addNew($model->id, 'register_objects', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
if (empty($_GET['media_key_update'])) {
Yii::$app->flash('success', isset($_GET['id']) ? 'Обекта е актуализиран успешно' : 'Обекта е създаден успешно');
$model->smartRedirect();
}
}
]);
echo $this->render('_list_object_filter', ['expId' => $expId])
?>
<script>
function addExpObject(elem) {
const exposition_id = elem.parentNode.dataset.expositionId;
const object_id = elem.parentNode.dataset.objectId;
elem.classList.add('disabled')
request({
url: '/remote/add-object-to-exposition/',
post: {
exposition_id,
object_id
},
done: (e) => {
if (e.error) {
flash.error('Този обект вече е добавен, изберете друг', true);
} else {
flash.success('Обекта е добавен към експозицията', true);
elem.parentNode.innerHTML = '<div onclick="removeExpObject(this)" class="btn-rem btn-ib"><i class="la la-remove"></i> Премахни</div>'
}
window.parent.loadExpositionObjects()
}
})
}
function removeExpObject(elem) {
const exposition_id = elem.parentNode.dataset.expositionId;
const object_id = elem.parentNode.dataset.objectId;
elem.classList.add('disabled');
request({
url: '/remote/remove-object-from-exposition/',
post: {
exposition_id,
object_id
},
done: (e) => {
if (e.error) {
} else {
flash.success('Обекта е премахнат от експозицията', true);
elem.parentNode.innerHTML = '<div onclick="addExpObject(this)" class="btn-ib btn-default"><i class="la la-plus-circle"></i> Добави</div>'
window.parent.loadExpositionObjects()
}
}
})
}
window.addEventListener('DOMContentLoaded', function () {
const top = document.querySelector('.inner-content');
const fbx = document.querySelector('.filter-box');
const fb = one('filter-button', top);
fb.innerHTML = '<i class="la la-search"></i>'
fb.addEventListener('click', () => {
if (fbx.classList.contains('open')) {
fbx.classList.remove('open')
fb.innerHTML = '<i class="la la-search"></i>';
} else {
fbx.classList.add('open')
fb.innerHTML = '<i class="la la-remove"></i>';
}
})
})
function filterExpObjects() {
let expId = '<?= $_GET['expId'] ?? '' ?>';
let p = '<?= $_GET['p'] ?? '1' ?>';
let filter_object_ref_num = document.querySelector('#filter_object_ref_num')
let filter_object_name = document.querySelector('#filter_object_name')
let filters = [];
if (filter_object_name.value !== '')
filters.push(`name=${filter_object_name.value}`)
if (filter_object_ref_num.value !== '')
filters.push(`ref_num=${filter_object_ref_num.value}`)
let q = ''
if(filters.length > 0) {
q = `&${filters.join('&')}`
}
window.location.href = `?expId=${expId}&p=${p}${q}`
}
function clearFilterExpObjects() {
let expId = '<?= $_GET['expId'] ?? '' ?>';
window.location.href = `?expId=${expId}`
}
</script>
@@ -0,0 +1,128 @@
<?php
use app\models\Campaigns;
use app\models\History;
use app\models\register\Partner;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
TableWidget::widget([
'filter' => [
[
'event_dates' => ['Дата', 'c2 fDatepicker'],
'title' => ['Заглавие на кампанията', 'c4'],
'partner_id' => ['Организация', 'c3', Partner::partnerList()],
'is_for_publish' => ['За публикувне', 'c1', [1 => 'да', 'null' => 'не']],
'is_active' => ['Публикувана', 'c1', [1 => 'да', 'null' => 'не']]
],
],
'top' => [
'title' => 'Кампании',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'actions' => [
'new' => 'Нова кампания',
'edit' => 'Редакция на кампания',
'delete' => 'Изтриване на кампания'
],
'th' => [
'№' => 'c1 text-right',
'Заглавие' => '',
'Дати на кампанията' => '',
'Партньор' => 'c4',
'Тематични зони' => 'c0 ct',
'История' => 'c0 ct',
'За публикуване' => 'c0 ct',
'Публикуване' => 'c0 ct',
],
'data' => Campaigns::find()->where(Yii::$app->getFilterData())->orderBy(['id' => SORT_DESC])->loop([
'id',
function (Campaigns $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->title . '</a>';
},
function (Campaigns $model) {
$event_dates = '';
foreach (explode(',', $model->event_dates) as $d) {
$event_dates .= '<div class="badge-dark right3">' . date('d.m.Y', strtotime($d)) . '</div>';
}
return '<div class="flex-wrap">' . $event_dates . '</div>';
},
function (Campaigns $model) {
if ($model->partner)
return $model->partner->name;
},
function (Campaigns $model) {
return '<i data-article-key="'.$model->article_key.'" class="la la-stream positionButton"></i>';
},
function (Campaigns $model) {
return '<i data-table="campaigns" data-id="' . $model->id . '" class="la la-history historyButton"></i>';
},
function (Campaigns $model) {
return $model->is_for_publish ? '<span data-published="Пуликувана" data-unpublished="да" id="blink_' . $model->id . '" class="' . (!$model->is_active ? 'blink-green' : '') . '">'. ((!$model->is_active) ? 'да' : 'Публикувана').'</span>' : 'не';
},
function (Campaigns $model) {
return $model->statusSwitch('is_active', null, ['Кампанията е публикувана на сайта', 'Кампанията е свалена от сайта']);
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова кампания',
'title_edit' => 'Редакция на кампания',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/campaigns' => 'Кампании'
],
],
'tabs' => [
'main' => '<i class="la la-database"></i> Основни данни',
'ts_en' => '<i class="lg lg-en"></i> Превод английски'
],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/campaigns_w",
'model' => Campaigns::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{'event_dates'}))
return ["event_dates" => 'Моля, въведете дати на кампанията'];
if (empty($p->{"title"}))
return ["title" => 'Моля, въведете заглавие на кампанията'];
if (empty($p->{"partner_id"}))
return ["partner_id" => 'Моля, изберете организация'];
if (empty($p->{"text_short"}))
return ["text_short" => 'Моля, въведете кратък текст на кампанията'];
if (empty($p->{"text"}))
return ["text" => 'Моля, въведете пълен текст на кампанията'];
if (!empty($p->{"stream_url"})) {
if (empty($p->{"stream_access"}))
return ["stream_access" => 'Моля, изберете стрийминг достъп'];
}
}
if (Includes::inLocales($tab)) {
if (empty($p->{$tab . "_title"}))
return [$tab . "_title" => 'Моля, въведете заглавие на кампанията'];
if (empty($p->{$tab . "_text_short"}))
return [$tab . "_text_short" => 'Моля, въведете кратък текст на кампанията'];
if (empty($p->{$tab . "_text"}))
return [$tab . "_text" => 'Моля, въведете пълен текст на кампанията'];
}
return null;
},
'postService' => function ($p, Campaigns $model) {
$model->setPostDataToModel();
$model->save();
\app\models\Articles::updateArticle($model);
History::addNew($model->id, 'campaigns', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Кампанията е актуализирана успешно' : 'Кампанията е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,95 @@
<?php
use app\models\register\Partner;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
use app\models\register\Collections;
$tab = $_GET['tab'] ?? 'main';
$filter = Yii::$app->getFilterData('and');
$filter[0] = 'and';
$filter[] = ['=', 'deleted', 0];
$filter[] = ['=', 'active', 1];
$filter[] = ['=', 'published', 1];
TableWidget::widget([
'top' => [
'title' => 'Колекции',
'data' => [
'index/dashboard' => 'Начало'
]
],
'filter' => [
[
'name' => ['Заглавие на колекция', 'c4'],
'partner_id' => ['Организация', 'c3', Partner::partnerList()],
'is_selected' => ['Избрани колекции', 'c1', [1 => 'да', 'null' => 'не']],
'private' => ['С абонамент', 'c1', [1 => 'да', 'null' => 'не']]
],
],
'actions' => [
//'new' => 'Нова категория',
//'edit' => 'Преглед на колекция',
// 'delete' => 'Изтриване на колекция'
],
'th' => [
'№' => 'c0 text-right',
'Колекция' => '',
'Изображение' => '',
'Партньор' => '',
'Добавена в избрани' => '',
'Достъп с абонамент' => '',
],
'data' => Collections::find()
->where(['or', ['=', 'is_payable', 0], ['IS', 'is_payable', null]])
->andWhere($filter)
->orderBy(['modified_on' => SORT_DESC])
->loop([
'id',
function (Collections $model) {
return '<a href="?o=w&id=' . $model->id . '">' . $model->name . '</a>';
},
function (Collections $model) {
if ($model->thumbnail && $model->thumbnail != "''")
return '<img src="' . Yii::$app->params['register'] . '/uploads/collections/' . $model->thumbnail . '" style="height: 200px">';
},
function (Collections $model) {
if ($model->partner)
return $model->partner->name;
},
function (Collections $model) {
return $model->statusSwitch('is_selected', null, ['Колекцията е добавена в избрани', 'Колекцията е махната от избрани']);
},
function (Collections $model) {
return $model->statusSwitch('private', null, ['Колекцията е само за лица с платен абонамент', 'Колекцията е за всички']);
}
], $_GET['p'] ?? 1, 50)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова колекция',
'title_edit' => 'Преглед на колекция',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions/' => 'Уебпортал',
'web-portal/collections/' => 'Колекции'
],
],
'tabs' => [
//'main' => '<i class="la la-database"></i> Основни данни',
//'ts_en' => '<i class="lg lg-en"></i> Превод английски'
],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/collections_register_w",
'model' => Collections::class,
'validation' => function ($p) use ($tab) {
},
'postService' => function ($p, Collections $model) {
}
]);
@@ -0,0 +1,11 @@
<div class="inner-content p10">
<div class="row c2">
<div class="top-title" style="color: var(--base-background);">Изберете вида на събитието</div>
</div>
<div class="row flex top15">
<?php foreach (\app\models\Events::eventTypes() as $type => $title): ?>
<a href="<?= Yii::$app->setQueryString(['type' => $type]) ?>"
class="btn btn-default right5"><?= $title ?></a>
<?php endforeach; ?>
</div>
</div>
@@ -0,0 +1,140 @@
<?php
use app\models\History;
use app\models\register\CollectionsObjects;
use app\models\RegisterObjects;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
$_GET['tab'] = $tab;
if (!empty($_GET['id'])) {
//$tabs['nomenclature'] = '<i class="la la-clipboard-list"></i> Номенклатури';
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['ts_en'] = '<i class="lg lg-en"></i> Превод английски';
//$tabs['media'] = '<i class="la la-file-movie-o"></i> Медия файлове';
}
$condition = Yii::$app->getFilterData('or', ['identifier']);
$identifier = null;
if (!empty($_GET['q'])) {
foreach (explode('|', $_GET['q']) as $id) {
$filter = explode(':', $id);
if ($filter[0] == 'identifier' && !empty($filter[1])) {
$identifier = $filter[1];
break;
}
}
}
$data = RegisterObjects::find();
$data->where(['lib_type' => 2]);
if ($identifier) {
$data->innerJoinWith('library');
$data->andWhere([
'or',
['LIKE', 'lib_identifier_isbn_print', $identifier],
['LIKE', 'lib_identifier_isbn_online', $identifier],
['LIKE', 'lib_identifier_issn_print', $identifier],
['LIKE', 'lib_identifier_issn_online', $identifier],
['LIKE', 'lib_identifier_doi', $identifier],
['LIKE', 'lib_identifier_ismn', $identifier],
['LIKE', 'lib_identifier_isan', $identifier],
]);
}
$data->andWhere($condition)
->orderBy(['date_updated' => SORT_DESC]);
TableWidget::widget([
'filter' => [
[
'identifier' => ['Идентификатор', 'c2'],
'name' => ['Наименование', 'c3'],
'ref_num' => ['Реф.№', 'c1'],
'partner_id' => ['Партньор', 'c3', \app\models\register\Partner::partnerList()]
]
],
//'advanced_filter' => $this->render('_advanced_filters/object'),
'top' => [
'title' => 'Е-библиотека',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
]
],
'actions' => [
'edit' => 'Преглед на публикация',
//'delete' => 'Изтриване'
],
'th' => [
'ID' => 'c05 text-right',
'Реф. №' => 'c05 text-right',
'Наименование' => 'c2 ct',
'Изображение' => 'ct c1',
'Партньор' => 'c2 ct',
'Дата на добавяне' => 'ct',
'Дата на последна актуализация' => 'ct',
'Публикувана' => '',
],
'data' => $data->loop([
'id',
'ref_num',
function (RegisterObjects $model) {
if ($model->name)
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
function (RegisterObjects $model) {
if ($model->mainImgFile) {
return '<img src="' . $model->mainImgFile . '" style="height: 130px">';
}
},
function (RegisterObjects $model) {
if ($model->partner)
return $model->partner->name;
},
function (RegisterObjects $model) {
//date published
if ($model->date_added)
return date('d.m.Y H:i', strtotime($model->date_added));
},
function (RegisterObjects $model) {
//date published
if ($model->date_updated)
return date('d.m.Y H:i', strtotime($model->date_updated));
},
function (RegisterObjects $model) {
//return $model->is_active ? 'да': ''
return $model->statusSwitch('is_active', null, ['Публикацията е публикувана на сайта', 'Публикацията е свалена от сайта']);
},
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова публикация',
'title_edit' => 'Преглед на публикация',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
'web-portal/e-library' => 'Е-библиотека'
],
],
'tabs' => $tabs ?? [],
'writeView' => empty($_GET['id']) ? "web-portal/tabs/main/e_library_w" : "web-portal/tabs/" . Includes::tab($tab) . "/e_library_w",
'model' => RegisterObjects::class,
'validation' => function ($p) use ($tab) {
},
'postService' => function ($p, RegisterObjects $model) use ($tab) {
}
]);
@@ -0,0 +1,208 @@
<?php
use app\models\Events;
use app\models\History;
use app\models\Partner;
use app\models\PriceObject;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$model = Events::getModel();
$typeTitle = '';
//exit;
$tab = $_GET['tab'] ?? 'main';
if (!empty($_GET['type'])) {
if ($_GET['type'] == 'booking')
$tabs['booking'] = '<i class="la la-cog"></i> Резервация';
if ($_GET['type'] == 'online')
$tabs['online'] = '<i class="la la-cog"></i> Стрийминг';
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['ts_en'] = '<i class="lg lg-en"></i> Превод английски';
$typeTitle = Events::eventTypes($_GET['type']);
$typeTitle = $typeTitle ? " [ $typeTitle ]" : "";
}
if (!empty($_GET['id'])) {
if ($model->type == 'online')
$tabs['online'] = '<i class="la la-cog"></i> Стрийминг';
if ($model->type == 'booking')
$tabs['booking'] = '<i class="la la-cog"></i> Резервация';
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['ts_en'] = '<i class="lg lg-en"></i> Превод английски';
$typeTitle = Events::eventTypes($model->type);
$typeTitle = $typeTitle ? " [ $typeTitle ]" : "";
}
TableWidget::widget([
'filter' => [
[
'type' => ['Вид събитие', 'c3', Events::eventTypes()],
'event_dates' => ['Дата', 'c2 fDatepicker'],
'title' => ['Заглавие на събитието', 'c4'],
'partner_id' => ['Организация', 'c3', Partner::partnerList()],
'is_for_publish' => ['За публикувне', 'c1', [1 => 'да', 'null' => 'не']],
'is_active' => ['Публикувано', 'c1', [1 => 'да', 'null' => 'не']]
],
],
'top' => [
'title' => 'Събития',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
]
],
'actions' => [
'new' => 'Ново събитие',
'edit' => 'Редакция на събитие',
'delete' => 'Изтриване на събитие'
],
'th' => [
'№' => 'c1 text-right',
'Заглавие' => 'c3',
'Вид събитие' => '',
'Достъп' => 'c0 ct',
'Дати на събитието' => 'c4',
'Партньор' => 'c3',
'Тематични зони' => 'c0 ct',
'История' => 'c0 ct',
'За публикуване' => 'c0 ct',
'Публикуване' => 'c0 ct'
],
'data' => Events::find()->where(Yii::$app->getFilterData('or'))->orderBy(['id' => SORT_DESC])->loop([
'id',
function (Events $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->title . '</a>';
},
function (Events $model) {
return str_replace('събитие', '', Events::eventTypes($model->type));
},
function (Events $model) {
$access = [1 => 'частен достъп', 2 => 'свободно'];
switch ($model->type) {
case 'online':
return !empty($access[$model->stream_access]) ? $access[$model->stream_access] : 'не определен';
case 'booking':
return 'с резервация';
case 'simple':
return 'свободно';
}
},
function (Events $model) {
$event_dates = '';
foreach (explode(',', $model->event_dates) as $d) {
$event_dates .= '<div class="badge-dark right3">' . date('d.m.Y', strtotime($d)) . '</div>';
}
return '<div class="flex-wrap">' . $event_dates . '</div>';
},
function (Events $model) {
if ($model->partner)
return $model->partner->name;
},
function (Events $model) {
return '<i data-article-key="'.$model->article_key.'" class="la la-stream positionButton"></i>';
},
function (Events $model) {
return '<i data-table="events" data-id="' . $model->id . '" class="la la-history historyButton"></i>';
},
function (Events $model) {
return $model->is_for_publish ? '<span data-published="Пуликувано" data-unpublished="да" id="blink_' . $model->id . '" class="' . (!$model->is_active ? 'blink-green' : '') . '">'. ((!$model->is_active) ? 'да' : 'Публикувано').'</span>' : 'не';
},
function (Events $model) {
return $model->statusSwitch('is_active', null, ['Събитието е публикувано на сайта', 'Събитието е свалено от сайта']);
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Ново събитие' . $typeTitle,
'title_edit' => 'Редакция на събитие' . $typeTitle,
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
'web-portal/events' => 'Събития'
],
],
'tabs' => $tabs ?? [],
'writeView' => empty($_GET['id']) && empty($_GET['type']) ? "web-portal/default/events_w" : "web-portal/tabs/" . Includes::tab($tab) . "/events_w",
'model' => Events::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{'event_dates'}))
return ["event_dates" => 'Моля, въведете дати на събитието'];
if (empty($p->{"title"}))
return ["title" => 'Моля, въведете заглавие на събитието'];
if (empty($p->{"partner_id"}))
return ["partner_id" => 'Моля, изберете организация'];
if (empty($p->{"text_short"}))
return ["text_short" => 'Моля, въведете кратък текст на събитието'];
if (empty($p->{"text"}))
return ["text" => 'Моля, въведете пълен текст на събитието'];
} else if (Includes::inLocales($tab)) {
if (empty($p->{$tab . "_title"}))
return [$tab . "_title" => 'Моля, въведете заглавие на събитието'];
if (empty($p->{$tab . "_text_short"}))
return [$tab . "_text_short" => 'Моля, въведете кратък текст на събитието'];
if (empty($p->{$tab . "_text"}))
return [$tab . "_text" => 'Моля, въведете пълен текст на събитието'];
} else if ($tab == 'booking') {
if (empty($p->{'daily_open_time'}))
return ['daily_open_time' => 'Моля, попълнете вярно времето за дневно посещение'];
if (empty($p->{'max_visitors'}))
return ['max_visitors' => 'Моля, попълнете максимален брой посетители за деня'];
} else if ($tab == 'online') {
if (empty($p->{'daily_open_time'}))
return ['daily_open_time' => 'Моля, изберете време, в което стийминга ще бъде излъчен'];
if (empty($p->{"stream_url"}))
return ["stream_url" => 'Моля, попълнете стрийминг линк'];
if ($p->{"stream_access"} == 1 && $p->{"stream_purchase_type"} == 'individual_price' && empty($p->{"stream_price"}))
return ['stream_price' => 'Моля, попълнете индивидуална цена'];
}
return null;
},
'postService' => function ($p, Events $model) {
$model->setPostDataToModel();
if (!empty($p->{'stream_access'})) {
if ($p->{'stream_access'} == 2) {
$model->stream_purchase_type = null;
$model->stream_price = null;
} else {
if ($model->stream_purchase_type == 'subscription') {
$model->stream_price = null;
}
}
}
$model->setFirstLast();
$model->save();
if ($model->type == 'booking') {
if(!empty($p->{'price_object'})) {
foreach ($p->{'price_object'} as $key => $object) {
$keyArr = explode('_', $key);
$priceObject = $keyArr[0] == 'id' ? PriceObject::findOne($keyArr[1]) : new PriceObject();
$priceObject->text_bg = $object['text_bg'];
$priceObject->text_en = $object['text_en'];
$priceObject->price = $object['price'];
$priceObject->event_id = $model->id;
$priceObject->save();
}
}
}
\app\models\Articles::updateArticle($model);
History::addNew($model->id, 'events', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Събитието е актуализирано успешно' : 'Събитието е създадено успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,72 @@
<?php
use app\models\Expositions;
use app\models\ExpositionsCategories;
use app\models\History;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$model = ExpositionsCategories::getModel();
$tab = $_GET['tab'] ?? 'main';
$tabs = [
];
TableWidget::widget([
'top' => [
'title' => 'Експозиции категории',
'data' => [
'index/dashboard' => 'Начало'
]
],
'actions' => [
'new' => 'Нова категория',
'edit' => 'Редакция на категория',
'delete' => 'Изтриване на категори'
],
'th' => [
'№' => 'c0 text-right',
'Наименование на категория (bg)' => '',
'Наименование на категория (en)' => '',
],
'data' => ExpositionsCategories::find()->where([])->orderBy(['id' => SORT_ASC])->loop([
'id',
function (ExpositionsCategories $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
'name_en'
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова колекция',
'title_edit' => 'Редакция на експозиция',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Експозиции на обекти'
],
],
'tabs' => $tabs ?? [],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/expositions_categories_w",
'model' => ExpositionsCategories::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{'name'}))
return ["name" => 'Моля, въведете име на категорията'];
if (empty($p->{'name_en'}))
return ["name_en" => 'Моля, въведете име на категорията на английски'];
}
return null;
},
'postService' => function ($p, ExpositionsCategories $model) {
$model->setPostDataToModel();
$model->save();
History::addNew($model->id, 'expositions-categories', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Категорията експозиция е актуализирана успешно' : 'Категорията експозиция е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,45 @@
<?php
/**
* @var $this \yii\web\View
*/
use app\models\Expositions;
$model = Expositions::getModel();
$tab = $_GET['tab'] ?? 'main';
$tabs = [
'main' => '<i class="la la-database"></i> Основни данни',
'ts_en' => '<i class="lg lg-en"></i> Превод английски',
'objects' => '<i class="la la-object-group"></i> Обекти',
];
$listtabs = [
'list' => '<i class="la la-navicon"></i> Списък с експозиции',
'categories' => '<i class="la la-navicon"></i> Категории',
'tags' => '<i class="la la-navicon"></i> Тагове',
];
$_GET['listtab'] = $_GET['listtab'] ?? 'list';
switch ($_GET['listtab']) {
case 'list':
echo $this->render('_expositions_list', ['model' => $model, 'tab' => $tab, 'tabs' => $tabs, 'listtabs' => $listtabs]);
break;
case 'categories':
echo $this->render('_expositions_categories', ['model' => $model, 'tab' => $tab, 'tabs' => $tabs, 'listtabs' => $listtabs]);
break;
case 'tags':
echo $this->render('_expositions_tags', ['model' => $model, 'tab' => $tab, 'tabs' => $tabs, 'listtabs' => $listtabs]);
}
?>
<?php if (empty($model->id)): ?>
<style>
#tab_objects {
opacity: 0.5;
pointer-events: none;
}
</style>
<?php endif; ?>
@@ -0,0 +1,75 @@
<?php
use app\models\Navigation;
use app\widgets\FormWidget;
use app\widgets\TableWidget;
$_GET['listtab'] = $_GET['listtab'] ?? 'main';
TableWidget::widget([
'top' => [
'title' => 'Навигация',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'actions' => [
'new' => 'Нов бутон',
'edit' => 'Редакция на бутон',
'delete' => 'Изтриване на бутон'
],
'th' => [
'№' => 'c1 text-right',
'Заглавие' => '',
'Текст' => 'c4'
],
'model' => Navigation::class,
'data' => Navigation::find()
->where(['menu_type' => $_GET['listtab']])->orderBy(['order_index' => SORT_ASC])->loop([
'id',
function(Navigation $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
'relation',
'order_index',
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нов слайд',
'title_edit' => 'Редакция на слайд',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/home-slider' => 'Слайдер начална страница'
],
],
'writeView' => "web-portal/tabs/main/navigation_w",
'model' => Navigation::class,
'validation' => function ($p) {
if (empty($p->{"title"}))
return ["title" => 'Моля, въведете заглавие на слайда'];
if (empty($p->{"ts_en_title"}))
return ["ts_en_title" => 'Моля, въведете заглавие на слайда'];
return null;
},
'postService' => function ($p, Navigation $model) {
$model->setPostDataToModel();
if(empty($_GET['id'])) {
$nextIndex = 0;
$last = Navigation::find()->where(['menu_type' => $p->menu_type])->orderBy(['order_index' => SORT_DESC])->one();
if($last) {
$nextIndex = $last->order_index + 1;
}
$model->order_index = $nextIndex;
}
$model->save();
Yii::$app->flash('success', isset($_GET['id']) ? 'Навигацията е актуализирана успешно' : 'Навигацията е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,63 @@
<?php
Yii::$app->controller->pageTitle = 'Връзки';
use app\models\CmsRights;
use app\models\JoinToUs;
use app\widgets\FormWidget;
use app\widgets\TableWidget;
TableWidget::widget([
'filter' => [
['name' => ['Наименование', 'c3']]
],
'top' => [
'title' => 'Права',
'data' => [
'index/dashboard' => 'Начало',
'user/admin' => 'Потребители'
]
],
'actions' => [
'new' => 'Ново право',
'edit' => 'Редакция на право',
//'delete' => 'Изтриване на право'
],
'th' => [
'№' => 'c1 text-right',
'Наименование на потребителското правото' => '',
'Активен' => ''
],
'data' => \app\models\JoinToUs::find()->where(Yii::$app->getFilterData())->orderBy(['id' => SORT_DESC])->loop([
'id',
'name',
function(JoinToUs $model) {
return $model->statusSwitch('is_active', null, ['Записа е активиран', 'Записа е деактивиран']);
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Ново право',
'title_edit' => 'Редакция на връзка',
'data' => [
'index/dashboard' => 'Начало',
'user/admin' => 'Потребители',
'user/rights' => 'Права'
]
],
'writeView' => ' web-/rights_w',
'model' => CmsRights::class,
'validation' => function ($p) {
if (empty($p->{'name'}))
return ['name' => 'Моля, въведете наименование на връзката'];
//if (CmsRights::recordExists('name', $p->{'name'}))
// return ['name' => 'Това име вече е въведено, моля използвайте друго наименование'];
},
'postService' => function ($p, CmsRights $model) {
$model->setPostDataToModel();
$model->save();
Yii::$app->flash('success', isset($_GET['id']) ? 'Записът е актуализиран успешно' : 'Записът е създадено успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,119 @@
<?php
use app\models\Navigation;
use app\widgets\FormWidget;
use app\widgets\TableWidget;
$_GET['listtab'] = $_GET['listtab'] ?? 'main';
$listtabs = [
'main' => '<i class="la la-navicon"></i> Основна навигация',
//'header_hidden' => '<i class="la la-bars"></i> Скрита навигация хедър',
'footer' => '<i class="la la-navicon"></i> Навигация футър 1',
'footer_2' => '<i class="la la-navicon"></i> Навигация футър 2',
'footer_3' => '<i class="la la-navicon"></i> Навигация футър 3'
];
TableWidget::widget([
'top' => [
'title' => 'Навигация',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'listTabs' => $listtabs,
'actions' => [
'new' => 'Нов бутон',
'edit' => 'Редакция на бутон',
'delete' => 'Изтриване на бутон'
],
'th' => [
'№' => 'c1 text-right',
'Име' => '',
'Връзка' => 'c4',
'Във външни връзки на начална стр.' => 'c1 ct',
'В скрита навигация' => 'c1 ct',
'В страница на партньор' => 'c1 ct',
'Активен' => 'c1 ct',
],
'model' => Navigation::class,
'data' => Navigation::find()
->where(['menu_type' => $_GET['listtab']])->orderBy(['order_index' => SORT_ASC])->loop([
'id',
function (Navigation $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
function (Navigation $model) {
if ($model->page_id)
return '<a target="_blank" href="' . Yii::$app->goTo('web-portal/pages') . '?o=w&id=' . $model->page_id . '">' . $model->page->name . '</a>';
return '<a target="_blank" href="' . $model->url . '">' . $model->url . '</a>';
},
function (Navigation $model) {
return $model->statusSwitch('home_conn');
},
function (Navigation $model) {
return $model->statusSwitch('in_submenu');
},
function (Navigation $model) {
return $model->statusSwitch('partner_page', null, ['Връзката е добавена в страницата на партньора', 'Връзката е премахната от страницата на партньора']);
},
function (Navigation $model) {
return $model->statusSwitch('is_active');
},
'order_index',
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нов бутон - ' . mb_strtolower(strip_tags($listtabs[$_GET['listtab']])),
'title_edit' => 'Редакция на бутон - ' . mb_strtolower(strip_tags($listtabs[$_GET['listtab']])),
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/navigation' => 'Навигация'
],
],
'writeView' => "web-portal/tabs/main/navigation_w",
'model' => Navigation::class,
'validation' => function ($p) {
if (empty($p->{"name"}))
return ["name" => 'Моля, въведете име на бутона'];
if (empty($p->{"ts_en_name"}))
return ["ts_en_name" => 'Моля, въведете име на бутона'];
if (empty($p->{'relation_type'}))
return ["relation_type" => 'Моля, изберете връзка'];
if ($p->{'relation_type'} == 'inner_page' && empty($p->{'page_id'}))
return ["page_id" => 'Моля, изберете вътрешна страницата'];
if ($p->{'relation_type'} == 'outer_page' && empty($p->{'url'}))
return ["url" => 'Моля, въведете url адрес'];
if ($p->{'relation_type'} == 'outer_page' && !empty($p->{'url'})) {
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $p->{'url'}))
return ["url" => 'Моля, въведете валиден url адрес'];
}
return null;
},
'postService' => function ($p, Navigation $model) {
$model->setPostDataToModel();
if ($p->{'relation_type'} == 'inner_page')
$model->url = NULL;
if ($p->{'relation_type'} == 'outer_page')
$model->page_id = NULL;
if (empty($_GET['id'])) {
$nextIndex = 0;
$last = Navigation::find()->where(['menu_type' => $p->menu_type])->orderBy(['order_index' => SORT_DESC])->one();
if ($last) {
$nextIndex = $last->order_index + 1;
}
$model->order_index = $nextIndex;
$model->is_active = 1;
}
$model->save();
Yii::$app->flash('success', isset($_GET['id']) ? 'Навигацията е актуализирана успешно' : 'Навигацията е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,113 @@
<?php
use app\models\History;
use app\models\News;
use app\models\register\Partner;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
TableWidget::widget([
'filter' => [
[
'title' => ['Заглавие на новина', 'c4'],
'partner_id' => ['Организация', 'c3', Partner::partnerList()],
'is_for_publish' => ['За публикувне', 'c1', [1 => 'да', 'null' => 'не']],
'is_active' => ['Публикувана', 'c1', [1 => 'да', 'null' => 'не']]
],
],
'top' => [
'title' => 'Новини',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'actions' => [
'new' => 'Нова новина',
'edit' => 'Редакция на новина',
'delete' => 'Изтриване на новина'
],
'th' => [
'№' => 'c1 text-right',
'Заглавие' => '',
'Партньор' => 'c4',
'Тематични зони' => 'c0 ct',
'История' => 'c0 ct',
'За публикуване' => 'c0 ct',
'Публикуване' => 'c0 ct'
],
'data' => News::find()->where(Yii::$app->getFilterData('and'))->orderBy(['id' => SORT_DESC])->loop([
'id',
function (News $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->title . '</a>';
},
function (News $model) {
if ($model->partner)
return $model->partner->name;
},
function (News $model) {
return '<i data-article-key="'.$model->article_key.'" class="la la-stream positionButton"></i>';
},
function (News $model) {
return '<i data-table="news" data-id="' . $model->id . '" class="la la-history historyButton"></i>';
},
function (News $model) {
return $model->is_for_publish ? '<span data-published="Пуликувана" data-unpublished="да" id="blink_' . $model->id . '" class="' . (!$model->is_active ? 'blink-green' : '') . '">'. ((!$model->is_active) ? 'да' : 'Публикувана').'</span>' : 'не';
},
function (News $model) {
return $model->statusSwitch('is_active', null, ['Новината е публикувана на сайта', 'Новината е свалена от сайта']);
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова новина',
'title_edit' => 'Редакция на новина',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/news' => 'Новини'
],
],
'tabs' => [
'main' => '<i class="la la-database"></i> Основни данни',
'ts_en' => '<i class="lg lg-en"></i> Превод английски'
],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/news_w",
'model' => News::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{"partner_id"}))
return ["partner_id" => 'Моля, изберете организация'];
if (empty($p->{"title"}))
return ["title" => 'Моля, въведете заглавие на новината'];
if (empty($p->{"text_short"}))
return ["text_short" => 'Моля, въведете кратък текст на новината'];
if (empty($p->{"text"}))
return ["text" => 'Моля, въведете пълен текст на новината'];
}
if (Includes::inLocales($tab)) {
if (empty($p->{$tab . "_title"}))
return [$tab . "_title" => 'Моля, въведете заглавие на новината'];
if (empty($p->{$tab . "_text_short"}))
return [$tab . "_text_short" => 'Моля, въведете кратък текст на новината'];
if (empty($p->{$tab . "_text"}))
return [$tab . "_text" => 'Моля, въведете пълен текст на новината'];
}
return null;
},
'postService' => function ($p, News $model) {
$model->setPostDataToModel();
$model->save();
\app\models\Articles::updateArticle($model);
History::addNew($model->id, 'news', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Новината е актуализирана успешно' : 'Новината е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,170 @@
<?php
use app\models\History;
use app\models\register\CollectionsObjects;
use app\models\RegisterObjects;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
$_GET['tab'] = $tab;
if (!empty($_GET['id'])) {
$tabs['nomenclature'] = '<i class="la la-clipboard-list"></i> Номенклатури';
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['ts_en'] = '<i class="lg lg-en"></i> Превод английски';
$tabs['media'] = '<i class="la la-file-movie-o"></i> Медия файлове';
}
$condition = Yii::$app->getFilterData('or', ['collection_id']);
$collection_id = Yii::$app->getFilterDataAsArray('collection_id');
if($collection_id) {
$collectionsObjects = CollectionsObjects::find()->select('object_id')->where(['collection_id' => $collection_id])->all();
$objectIds = [];
foreach ($collectionsObjects as $collectionsObject)
$objectIds[] = $collectionsObject->object_id;
$condition[] = ['IN', 'ref_num', $objectIds];
}
$data = RegisterObjects::find()
->where(['lib_type' => 1])
->andWhere($condition)
->orderBy(['date_updated' => SORT_DESC]);
TableWidget::widget([
'filter' => [
[
'name' => ['Наименование', 'c3'],
'ref_num' => ['Реф.№', 'c1'],
'partner_id' => ['Партньор', 'c3', \app\models\register\Partner::partnerList()],
'collection_id' => ['Колекция', 'c3', \app\models\register\Collections::getDropDownData()]
]
],
//'advanced_filter' => $this->render('_advanced_filters/object'),
'top' => [
'title' => 'Обекти',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
]
],
'actions' => [
'edit' => 'Преглед на обект',
//'delete' => 'Изтриване'
],
'th' => [
'ID' => 'c05 text-right',
'Реф. №' => 'c05 text-right',
'Наименование' => 'c2 ct',
'Населено място' => '',
'Изображение' => 'ct c1',
'Колекции' => '',
'Тагове' => '',
'Партньор' => 'c2 ct',
'Дата на добавяне' => 'ct',
'Дата на последна актуализация' => 'ct',
'Публикуван' => '',
],
'data' => $data->loop([
'id',
'ref_num',
function (RegisterObjects $model) {
if ($model->name)
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
function (RegisterObjects $model) {
if ($model->city)
return $model->city->place;
},
function (RegisterObjects $model) {
if ($model->mainImgFile) {
return '<img src="' . $model->mainImgFile . '" style="height: 130px">';
}
},
function (RegisterObjects $model) {
return $model->getCollectionsListStr();
},
function (RegisterObjects $model) {
return $model->getTagsList();
},
function (RegisterObjects $model) {
if($model->partner)
return $model->partner->name;
},
function (RegisterObjects $model) {
//date published
if ($model->date_added)
return date('d.m.Y H:i', strtotime($model->date_added));
},
function (RegisterObjects $model) {
//date published
if ($model->date_updated)
return date('d.m.Y H:i', strtotime($model->date_updated));
},
function (RegisterObjects $model) {
//return $model->is_active ? 'да': ''
return $model->statusSwitch('is_active', null, ['Обекта е публикуван на сайта', 'Обекта е свален от сайта']);
},
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нов обект',
'title_edit' => 'Преглед на обект',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
'web-portal/objects-register' => 'Обекти'
],
],
'tabs' => $tabs ?? [],
'writeView' => empty($_GET['id']) ? "web-portal/tabs/main/register_objects_w" : "web-portal/tabs/" . Includes::tab($tab) . "/register_objects_w",
'model' => RegisterObjects::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($_GET['id'])) {
//NEW OBJECT
if (empty($p->{'sc_id'}))
return ['sc_id' => 'Моля, изберете категория'];
if (empty($p->{'sc_id'}))
return ['ot_id' => 'Моля, изберете шаблон на обект'];
} else {
//UPDATE GENERAL DATA
if (empty($p->{'name'}))
return ['name' => 'Моля, въведете име на обекта'];
if (empty($p->{'annotation'}))
return ['annotation' => 'Моля, въведете анотация'];
if (empty($p->{'description'}))
return ['description' => 'Моля, въведете описание'];
}
} else if (Includes::inLocales($tab)) {
if (empty($p->{$tab . '_name'}))
return [$tab . '_name' => 'Моля, въведете име на обекта'];
if (empty($p->{$tab . '_annotation'}))
return [$tab . '_annotation' => 'Моля, въведете анотация'];
if (empty($p->{$tab . '_description'}))
return [$tab . '_description' => 'Моля, въведете описание'];
}
return null;
},
'postService' => function ($p, RegisterObjects $model) use ($tab) {
$model->setPostDataToModel();
$model->save();
History::addNew($model->id, 'register_objects', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
if (empty($_GET['media_key_update'])) {
Yii::$app->flash('success', isset($_GET['id']) ? 'Обекта е актуализиран успешно' : 'Обекта е създаден успешно');
$model->smartRedirect();
}
}
]);
@@ -0,0 +1,193 @@
<?php
use app\models\History;
use app\models\Objects;
use app\models\ObjectTemplate;
use app\models\register\Partner;
use app\services\api\NomenclatureService;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
/** @var Objects $model */
$model = Objects::getModel();
$tab = $_GET['tab'] ?? 'nomenclature';
$_GET['tab'] = $tab;
if (!empty($_GET['id'])) {
$tabs['nomenclature'] = '<i class="la la-clipboard-list"></i> Номенклатури';
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['ts_en'] = '<i class="lg lg-en"></i> Превод английски';
$tabs['media'] = '<i class="la la-file-movie-o"></i> Медия файлове';
}
TableWidget::widget([
'filter' => [
[
'objects.name' => ['Наименование', 'c3'],
'description' => ['Описание', 'c3'],
'annotation' => ['Анотация', 'c3'],
'partner_id' => ['Партньор', 'c3', Partner::partnerList()],
'heritage_type' => ['Вид наследсво', 'c3', ObjectTemplate::heritageTypesByCategory()],
'sc_id' => ['Категория', 'c3 category_search_box', NomenclatureService::categoryFilterSelect()],
]
],
'advanced_filter' => $this->render('_advanced_filters/object'),
'top' => [
'title' => 'Обекти',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
]
],
'actions' => [
'new' => 'Нов обект',
'edit' => 'Редакция на обект',
'delete' => 'Изтриване на обект'
],
'th' => [
'ID' => 'c05 text-right',
'Наименование' => 'c2',
'Изображение' => 'c1 ct',
'Категория' => '',
'Колекция' => '',
'Вид шаблон' => 'c1',
'Партньор' => '',
'Дата на добавяне' => 'ct',
'История' => 'ct',
'Активен' => '',
],
'data' => Objects::find()->andWhere(Yii::$app->getFilterData('or'))
->innerJoin('object_template', 'object_template.id = objects.ot_id')
->orderBy(['id' => SORT_DESC])->loop([
'id',
function (Objects $model) {
if ($model->name)
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
function (Objects $model) {
if ($model->media_key) {
$src = $model->getSrcOfSingleImage('title_object_image', 'thumb');
return '<img style="width: 100px" src="' . $src . '">';
}
},
function (Objects $model) {
return $model->subCategory->name;
},
function (Objects $model) {
if ($model->collections)
return $model->collectionConcatList;
},
function (Objects $model) {
if ($model->objectTemplate)
return $model->objectTemplate->name;
},
function (Objects $model) {
if ($model->partner)
return $model->partner->name;
},
function (Objects $model) {
if ($model->history)
return $model->history->date;
},
function (Objects $model) {
return '<i data-table="objects" data-id="' . $model->id . '" class="la la-history historyButton"></i>';
},
function (Objects $model) {
return $model->statusSwitch('is_active', null, ['Обекта е видим на сайта', 'Обекта е свален от сайта']);
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нов обект',
'title_edit' => 'Редакция на обект',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уебпортал',
'web-portal/objects' => 'Обекти'
],
],
'tabs' => $tabs ?? [],
'writeView' => empty($_GET['id']) ? "web-portal/tabs/nomenclature/objects_w" : "web-portal/tabs/" . Includes::tab($tab) . "/objects_w",
'model' => Objects::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($_GET['id'])) {
//NEW OBJECT
if (empty($p->{'sc_id'}))
return ['sc_id' => 'Моля, изберете категория'];
if (empty($p->{'sc_id'}))
return ['ot_id' => 'Моля, изберете шаблон на обект'];
} else {
//UPDATE GENERAL DATA
if (empty($p->{'name'}))
return ['name' => 'Моля, въведете име на обекта'];
if (empty($p->{'annotation'}))
return ['annotation' => 'Моля, въведете анотация'];
if (empty($p->{'description'}))
return ['description' => 'Моля, въведете описание'];
}
} else if (Includes::inLocales($tab)) {
if (empty($p->{$tab . '_name'}))
return [$tab . '_name' => 'Моля, въведете име на обекта'];
if (empty($p->{$tab . '_annotation'}))
return [$tab . '_annotation' => 'Моля, въведете анотация'];
if (empty($p->{$tab . '_description'}))
return [$tab . '_description' => 'Моля, въведете описание'];
}
return null;
},
'postService' => function ($p, Objects $model) use ($tab) {
$model->setPostDataToModel();
$model->save();
if ($tab == 'nomenclature') {
$model->setObjectFields($p);
$model->setCollections($p);
}
History::addNew($model->id, 'objects', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
if (empty($_GET['media_key_update'])) {
Yii::$app->flash('success', isset($_GET['id']) ? 'Обекта е актуализиран успешно' : 'Обекта е създаден успешно');
$model->smartRedirect();
}
}
]);
?>
<script src="/_public/assets/js/search-box.js"></script>
<script>
new SearchBox('#collections')
const category_search_box = new SearchBox('.category_search_box select')
const objet_type_select = new SearchBox('.objet_type_select')
const
categorySearchBox = new SearchBox('#category_search_box'),
objectTypeSearchBox = new SearchBox('#object_type_search_box')
if (categorySearchBox && objectTypeSearchBox) {
objectTypeSearchBox.updateFromObject({
searchBox: categorySearchBox,
url: '/api/object-templates/',
queryId: 'sc_id',
data: {id: 'id', name: 'name'}
})
}
if (category_search_box && objet_type_select) {
objet_type_select.updateFromObject({
searchBox: category_search_box,
url: '/api/object-templates/',
queryId: 'sc_id',
data: {id: 'id', name: 'name'}
})
}
all('.advanced-select', e => {
new SearchBox(e)
})
</script>
@@ -0,0 +1,100 @@
<?php
use app\models\Pages;
use app\services\Formatter;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
$_GET['tab'] = $tab;
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['media'] = '<i class="la la-file-movie-o"></i> Медия файлове';
TableWidget::widget([
'top' => [
'title' => 'Страници',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'actions' => [
'new' => 'Нова страница',
'edit' => 'Редакция на страница',
'delete' => 'Изтриване на страница'
],
'th' => [
'№' => 'c1 text-right',
'Заглавие на страница' => '',
],
'model' => Pages::class,
'data' => Pages::find()->loop([
'id',
function (Pages $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->name . '</a>';
},
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова страница',
'title_edit' => 'Редакция на страница',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/navigation' => 'Страници'
],
],
'tabs' => $tabs ?? [],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/pages_w" ,
'model' => Pages::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{"name"}))
return ["name" => 'Моля, въведете заглавие на страницата'];
if (empty($p->{"name_en"}))
return ["name_en" => 'Моля, въведете заглавие на страницата'];
if (Pages::exists(['slug' => Formatter::cyrillicTrans(ltrim(rtrim($p->{"name"})))]))
return ["name" => 'Заглавието вече съществува'];
if (Pages::exists(['slug_en' => Formatter::cyrillicTrans(ltrim(rtrim($p->{"name_en"})))]))
return ["name_en" => 'Заглавието вече съществува'];
} else if (Includes::inLocales($tab)) {
}
return null;
},
'postService' => function ($p, Pages $model) use ($tab) {
$model->setPostDataToModel();
if ($tab == 'main') {
if ($p->{'name'}) {
$name = ltrim($p->{'name'}, ' ');
$name = rtrim($name, ' ');
$model->name = $name;
$model->slug = Formatter::cyrillicTrans($name);
}
if ($p->{'name_en'}) {
$name_en = ltrim($p->{'name_en'}, ' ');
$name_en = rtrim($name_en, ' ');
$model->name_en = $name_en;
$model->slug_en = Formatter::cyrillicTrans($name_en);
}
}
$model->save();
if(!empty($p->contacts) && $model->contact) {
$contactModel = \app\models\Contacts::findOne($model->contact->id);
foreach ($p->contacts as $contact => $value) {
$contactModel->{$contact} = $value;
}
$contactModel->save();
}
if (empty($_GET['media_key_update'])) {
Yii::$app->flash('success', isset($_GET['id']) ? 'Страницата е актуализирана успешно' : 'Страницата е създадена успешно');
$model->smartRedirect();
}
}
]);
@@ -0,0 +1,80 @@
<?php
use app\models\Positions;
use app\services\Auth;
use app\widgets\FormWidget;
use app\widgets\TableWidget;
TableWidget::widget([
'top' => [
'title' => 'Тематични зони',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'actions' => [
'new' => 'Нова група',
'edit' => 'Редакция на група',
//'delete' => 'Изтриване на група'
],
'th' => [
'№' => 'c1 text-right',
'Тематична зона' => '',
'Брой позиции' => 'c4'
],
'data' => Positions::find()->where(['IS', 'group_id', null])->orderBy(['id' => SORT_DESC])->loop([
'id',
function (Positions $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->group_name . '</a>';
},
function (Positions $model) {
return $model->positionsCount;
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова група',
'title_edit' => 'Редакция на тематична зона',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/positions' => 'Тематични зони'
],
],
'writeView' => "web-portal/tabs/main/positions_group_w",
'model' => Positions::class,
'validation' => function ($p) {
if (empty($p->{"group_name"}))
return ["group_name" => 'Моля, въведете име на групата'];
if (empty($p->{"positions_count"}) && $p->{'positions_count_ready'} == 0)
return ["positions_count" => 'Моля, въведете брой позиции'];
return null;
},
'postService' => function ($p, Positions $model) {
$model->setPostDataToModel();
$model->save();
if(!empty($p->positions_count)) {
for ($i = 0; $i < $p->positions_count; $i++) {
$position = new Positions();
$position->group_id = $model->id;
$position->order_index = $i;
$position->save();
}
}
if(!empty($p->enter_class_name)) {
foreach ($p->enter_class_name as $id => $class_name) {
$positionToUpdate = Positions::findOne($id);
if($positionToUpdate) {
$positionToUpdate->class_name = $class_name;
$positionToUpdate->save();
}
}
}
Yii::$app->flash('success', isset($_GET['id']) ? 'Групата на позициите е актуализирана успешно' : 'Групата на позициите е създадена успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,115 @@
<?php
use app\models\Projects;
use app\models\History;
use app\models\ProjectsPartner;
use app\services\Auth;
use app\services\Formatter;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
if (!empty($_GET['id'])) {
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['ts_en'] = '<i class="lg lg-en"></i> Превод английски';
$tabs['docs'] = '<i class="la la-file"></i> Документи';
$tabs['media'] = '<i class="la la-images"></i> Галерия (снимки)';
}
TableWidget::widget([
'filter' => [
[
'period_date_start' => ['Начална дата', 'c2 fDatepicker'],
'title' => ['Заглавие на проекта', 'c4'],
'is_active' => ['Публикувана', 'c1', [1 => 'да', 'null' => 'не']]
],
],
'top' => [
'title' => 'Проекти',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'actions' => [
'new' => 'Нов проект',
'edit' => 'Редакция на проект',
'delete' => 'Изтриване на проект'
],
'th' => [
'№' => 'c1 text-right',
'Заглавие' => '',
'Период' => 'c2 ct',
'История' => 'c0 ct',
'Дата на публикуване' => 'c1 ct',
'За публикуване' => 'c0 ct',
'Публикуване' => 'c0 ct',
],
'data' => Projects::find()->where(Yii::$app->getFilterData())->orderBy(['id' => SORT_DESC])->loop([
'id',
function (Projects $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . $model->title . '</a>';
},
function (Projects $model) {
return $model->period;
},
function (Projects $model) {
return '<i data-table="projects" data-id="' . $model->id . '" class="la la-history historyButton"></i>';
},
function (Projects $model) {
return $model->formatDate($model->publish_date);
},
function (Projects $model) {
return $model->is_for_publish ? '<span id="blink_' . $model->id . '" class="' . (!$model->is_active ? 'blink-green' : '') . '">да</span>' : 'не';
},
function (Projects $model) {
return $model->statusSwitch('is_active', null, ['Проекта е публикуван на сайта', 'Проекта е свален от сайта']);
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нова проект',
'title_edit' => 'Редакция на проект',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/projects' => 'Проекти'
],
],
'tabs' => $tabs ?? [],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/projects_w",
'model' => Projects::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{"title"}))
return ["title" => 'Моля, въведете заглавие на проекта'];
if (empty($p->{"text"}))
return ["text" => 'Моля, въведете пълен текст на проекта'];
if(!empty($p->{'website'}) ) {
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $p->{'website'})) {
return ["website" => 'Моля, въведете валиден url адрес'];
}
}
}
if (Includes::inLocales($tab)) {
if (empty($p->{$tab . "_title"}))
return [$tab . "_title" => 'Моля, въведете заглавие на проекта'];
if (empty($p->{$tab . "_text"}))
return [$tab . "_text" => 'Моля, въведете пълен текст на проекта'];
}
return null;
},
'postService' => function ($p, Projects $model) {
$model->setPostDataToModel();
$model->save();
ProjectsPartner::updateRecords($_POST['partners'] ?? [], ['partner_id', 'project_id', $model->id]);
History::addNew($model->id, 'projects', Auth::userAdminGlobal()->getFullName() . ' - Глобален администратор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Проекта е актуализиран успешно' : 'Проекта е създаден успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,77 @@
<?php
use app\models\Pages;
use app\models\SeoManagement;
use app\services\Formatter;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
$_GET['tab'] = $tab;
$_GET['id'] = 1;
$_GET['o'] = 'w';
TableWidget::widget([
'top' => [
'title' => 'SEO управление',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'actions' => [
//'new' => 'Нов SEO запис',
//'edit' => 'Редакция на SEO запис',
//'delete' => 'Изтриване на SEO запис'
],
'th' => [
'№' => 'c1 text-right',
'Ключови думи' => '',
'Текст' => '',
'Страница' => '',
],
'model' => SeoManagement::class,
'data' => SeoManagement::find()->loop([
'id',
'key_words',
'text',
function (SeoManagement $model) {
if ($model->page) {
return $model->page->name;
} else {
return 'основни данни';
}
}
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нов SEO запис',
'title_edit' => 'Редакция на SEO запис',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/navigation' => 'SEO управление'
],
],
'tabs' => [],
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/seo_w",
'model' => SeoManagement::class,
'validation' => function ($p) {
if(empty($p->{'page_seo'})) {
if(empty($p->{'page_id'})) {
return ["page_id" => 'Моля, изберете страница, за която искате да се отнасят данни'];
}
}
},
'postService' => function ($p, SeoManagement $model) {
$model->setPostDataToModel();
$model->save();
Yii::$app->flash('success', isset($_GET['id']) ? 'Записа е актуализирана успешно' : 'Записа е създадена успешно');
$model->redirectTo('web-portal/seo');
}
]);
@@ -0,0 +1,102 @@
<?php
use app\models\Navigation;
use app\models\Slides;
use app\widgets\FormWidget;
use app\widgets\services\Includes;
use app\widgets\TableWidget;
$_GET['listtab'] = $_GET['listtab'] ?? 'home_page';
$listtabs = [
'home_page' => '<i class="la la-navicon"></i> Начална страница'
];
$tab = $_GET['tab'] ?? 'main';
$tabs = [
'main' => '<i class="la la-database"></i> Основни данни',
'ts_en' => '<i class="lg lg-en"></i> Превод английски'
];
TableWidget::widget([
'top' => [
'title' => 'Слайдер',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
]
],
'listTabs' => $listtabs,
'actions' => [
'new' => 'Нов бутон',
'edit' => 'Редакция на бутон',
'delete' => 'Изтриване на бутон'
],
'th' => [
'№' => 'c1 text-right',
'Заглавие' => '',
'Url адрес' => 'c4',
'Активен' => 'c1 ct'
],
'model' => Slides::class,
'data' => Slides::find()
->where(['type' => $_GET['listtab']])->orderBy(['order_index' => SORT_ASC])->loop([
'id',
function (Slides $model) {
return '<a href="' . Yii::$app->setQueryString(['o' => 'w', 'id' => $model->id]) . '">' . ($model->title ?? $model->ts_en_title) . '</a>';
},
'relation',
function (Slides $model) {
return $model->statusSwitch('is_active');
},
'order_index',
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Нов слайд',
'title_edit' => 'Редакция на слайд',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал',
'web-portal/slider' => 'Слайдер начална страница'
],
],
'tabs' => $tabs,
'writeView' => "web-portal/tabs/" . Includes::tab($tab) . "/slider_w",
'model' => Slides::class,
'validation' => function ($p) use ($tab) {
if ($tab == 'main') {
if (empty($p->{"title"}))
return ["title" => 'Моля, въведете заглавие на слайда'];
if (empty($p->{"text"}))
return ["text" => 'Моля, въведете текст на слайда'];
}
if (Includes::inLocales($tab)) {
if (empty($p->{$tab . "_title"}))
return [$tab . "_title" => 'Моля, въведете заглавие на слайда'];
if (empty($p->{$tab . "_text"}))
return [$tab . "_text" => 'Моля, въведете текст на слайда'];
}
return null;
},
'postService' => function ($p, Slides $model) {
$model->setPostDataToModel();
if (empty($_GET['id'])) {
$nextIndex = 0;
$last = Slides::find()->where(['type' => $p->type])->orderBy(['order_index' => SORT_DESC])->one();
if ($last) {
$nextIndex = $last->order_index + 1;
}
$model->order_index = $nextIndex;
$model->is_active = 1;
}
$model->save();
Yii::$app->flash('success', isset($_GET['id']) ? 'Слайда е актуализиран успешно' : 'Слайда е създаден успешно');
$model->smartRedirect();
}
]);
@@ -0,0 +1,201 @@
<?php
use app\models\Events;
use app\models\PriceObject;
use app\widgets\services\Includes;
/**
* @var Events $model
* @var PriceObject $object
*/
?>
<div class="inner-content p10">
<?php if (empty($model->id)): ?>
<p style="color: darkorange; font-weight: bold">* Формата ще бъде активна след попълването на "Основни
данни"</p>
<?php endif; ?>
<form autocomplete="off" class="<?= empty($model->id) ? 'disabled' : '' ?>">
<div class="row" style="width: 250px">
<label class="require">Време за дневно посещение</label>
<input data-min-h="7" data-max-h="20" type="hidden" name="daily_open_time" id="daily_open_time"
value="<?= $model->daily_open_time ?>">
</div>
<div class="row c4 top15">
<label class="require">Максимален брой посетители за деня</label>
<input data-format="integer" name="max_visitors" style="width: 60px" value="<?= $model->max_visitors ?>">
</div>
<div class="row top15">
<label>Цени</label>
</div>
<div class="top-page-panel c9">
<div class="row c5">
<div onclick="addPrice(this)" data-id="<?= $model->id ?>"
class="btn-ib btn-default">
<i class="la la-plus-circle"></i> Добавяне на цена
</div>
<div id="bDelete" data-model="app\models\PriceObject" onclick="checkDelete(this)"
class="btn-ib btn-default ct disabled">
<i class="la la-trash-o"></i> Изтриване на цена <span id="delCount">(0)</span>
</div>
</div>
<div class="top15">
<table class="cms-table">
<thead>
<tr>
<th class="text-right c1">
<input id="checkAll" onclick="checkAllPositions(this)" title="Избери всички"
class="delete-checkbox <?= sizeof($model->price_objects) == 0 ? 'hide' : '' ?>" type="checkbox">
No
</th>
<th>Текст [bg]</th>
<th>Текст [en]</th>
<th style="width: 100px">Цена</th>
</tr>
</thead>
<tbody id="price_list">
<?php foreach ($model->price_objects as $i => $object): ?>
<tr>
<td class="text-right">
<input onclick="checkSingle(this)"
data-del="<?= $object->id ?>"
class="delete-checkbox"
type="checkbox"
style="top: calc(50% - 10px)">
<span><?= $i + 1 ?></span></td>
<td><input name="price_object[id_<?= $object->id ?>][text_bg]" value="<?= $object->text_bg ?>" type="text"></td>
<td><input name="price_object[id_<?= $object->id ?>][text_en]" value="<?= $object->text_en ?>" type="text"></td>
<td><input name="price_object[id_<?= $object->id ?>][price]" value="<?= $object->price ?>" type="text"
data-format="money"></td>
</tr>
<?php endforeach; ?>
</tbody>
<tr id="empty_row" class="<?= (sizeof($model->price_objects) > 0 ? 'hide' : '') ?>">
<td colspan="4" class="ct"
style="font-size: 14px; padding: 15px; color: var(--base-background-dark); pointer-events: none">
Няма добавени цени
</td>
</tr>
</table>
</div>
</div>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/events') ?>
</div>
</form>
</div>
<script>
const checkAll = one('#checkAll');
function addPrice(e) {
const price_list = one('#price_list');
const row = document.createElement('tr');
const count = all('#price_list tr').length
one('#empty_row').addClass('hide')
row.innerHTML = `
<td class="text-right">
<input onclick="checkSingle(this)"
data-del
class="delete-checkbox"
type="checkbox"
style="top: calc(50% - 10px)">
<span>${count + 1}</span></td>
<td><input name="price_object[c_${count + 1}][text_bg]" type="text"></td>
<td><input name="price_object[c_${count + 1}][text_en]" type="text"></td>
<td><input name="price_object[c_${count + 1}][price]" type="text" data-format="money"></td>
`;
price_list.appendChild(row);
dataFormat();
checkAll.removeClass('hide')
}
timeRange('#daily_open_time');
let sl = [];
function checkAllPositions(el) {
sl = [];
all('td [data-del]').forEach(e => {
e.checked = el.checked === true;
if (el.checked) {
sl.push(e.dataset.del);
e.parentNode.parentNode.addClass('checked');
} else {
e.parentNode.parentNode.removeClass('checked');
}
})
updateActionButtons();
}
function checkSingle(e) {
if (e.checked) {
sl.push(e.dataset.del);
console.log(sl)
e.parentNode.parentNode.addClass('checked');
} else {
one('#checkAll').checked = false;
e.parentNode.parentNode.removeClass('checked');
const f = sl.indexOf(e.dataset.del);
sl.splice(f, 1);
}
updateActionButtons(e.dataset.del);
}
function updateActionButtons() {
const bDelete = one('#bDelete');
const delCount = one('#delCount');
const c = sl.length;
if (delCount)
delCount.innerText = '(' + c + ')';
if (c > 0) {
if (bDelete)
bDelete.removeClass('disabled');
} else {
if (bDelete)
bDelete.addClass('disabled');
}
}
function checkDelete(e) {
const msg = 'Сигурни ли сте, че искате да изтриете ' + (sl.length > 1 ? 'тези ' + sl.length + ' записа?' : 'този запис?');
modal.confirm(msg, () => {
if(all('[data-del]').length === 0) {
const checkAll = one('#checkAll')
checkAll.checked = false;
checkAll.addClass('hide')
one('#empty_row').removeClass('hide')
}
all('[data-del]').forEach(e => {
if (e.checked)
e.parentNode.parentNode.remove();
});
all('[data-del]').forEach((e, i) => {
const number = e.parentNode.querySelector('span');
number.innerText = (i + 1).toString();
})
const ids = [];
sl.forEach(value => {
if(value) {
ids.push(value);
}
});
sl = [];
updateActionButtons();
if(ids.length > 0) {
request({
url: window.location.href.split('?')[0] + '?o=d',
post: {
ids: JSON.stringify(ids),
model: e.dataset.model
},
done: e => {
window.location.reload()
}
})
}
});
}
</script>
@@ -0,0 +1,15 @@
<?php
use app\models\Projects;
use app\widgets\DocumentWidget;
/**
* @var $model Projects
*/
$document_key = $model->getDocumentKey();
DocumentWidget::widget([
'document_key' => $document_key,
'model_class' => Projects::class,
'model' => $model
]);
@@ -0,0 +1,133 @@
<?php
use app\models\Campaigns;
use app\models\register\Partner;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var Campaigns $model
*/
$media_key = $model->getMediaKey();
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c2">
<label class="require">Дати на кампанията</label>
<input type="hidden" name="event_dates" id="event_dates" value="<?= $model->event_dates ?>">
</div>
<div class="row c6 top15">
<label>Локация</label>
<input name="location" placeholder="Въведи локация на събитието" value="<?= $model->location ?>"/>
</div>
<div class="row c6 top15">
<label class="require">Заглавие</label>
<input name="title" placeholder="Въведи заглавие на събитието" value="<?= $model->title ?>"/>
</div>
<div class="row c6 top15">
<label class="require">Пртньор</label>
<select name="partner_id">
<option disabled selected>-- Избери организация --</option>
<?php foreach (Partner::partnerList() as $id => $name): ?>
<option <?= $model->partner_id == $id ? 'selected' : '' ?>
value="<?= $id ?>"><?= $name ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row top15" style="width: 350px">
<label>Заглавно изображение</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'title_campaigns_image',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне',
'edit' => 'Редакция',
'delete' => 'Премахване'
],
'single_file' => true,
'resolutions' => ['16:11', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<?= $this->render('/shared/instruction_1') ?>
<div class="row c9 top15">
<label class="require">Кратък текст</label>
<textarea class="ckEditor" name="text_short"><?= $model->text_short ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Пълен текст</label>
<textarea class="ckEditor" name="text"><?= $model->text ?></textarea>
</div>
<div class="row c9 top15">
<label>Изображения в кампанията</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'campaigns_images',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображения',
'edit' => 'Редакция на изображение',
'delete' => 'Премахване на изображения'
],
'resolutions' => ['16:11', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<div class="row c9 top15 flex">
<div class="c7 right10">
<label>Стрийминг линк</label>
<input onkeyup="updateLabelRequire(this, '#sta')" name="stream_url"
placeholder="Въведи линк на стрийминг"
value="<?= $model->stream_url ?>"/>
</div>
<div class="left10">
<label id="sta">Достъп</label>
<div class="flex top-page-panel"
style="height: 14px; border-radius: 3px; border-color: var(--base-background-dark)">
<?php foreach ([1 => 'Частен', 2 => 'Публичен'] as $v => $t): ?>
<label style="margin-top: -3px" class="right10 radio-error"><input
style="width: 14px; height: 14px;" type="radio"
name="stream_access" <?= $model->stream_access == $v ? 'checked' : '' ?>
value="<?= $v ?>"/> <?= $t ?>
</label>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="row c3 top15">
<label class="require">Дата на публикуване</label>
<input type="hidden" name="publish_date" id="publish_date" value="<?= $model->getPublishDate() ?>">
</div>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/campaigns') ?>
</div>
</form>
</div>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<script src="/_public/plugins/air-datepicker/locales.js"></script>
<script src="/_public/plugins/air-datepicker/air-datepicker.js"></script>
<script>
new AirDatepicker('#event_dates', {
inline: true,
locale: locales.bg,
multipleDates: true,
multipleDatesSeparator: ',',
selectedDates: document.querySelector('#event_dates').value.split(',')
});
new AirDatepicker('#publish_date', {
inline: true,
locale: locales.bg,
selectedDates: [document.querySelector('#publish_date').value]
});
</script>
@@ -0,0 +1,49 @@
<?php
/** @var Collections $model */
use app\models\register\Collections;
?>
<div class="inner-content p20">
<?php if ($model->thumbnail && $model->thumbnail != "''"): ?>
<img src="<?= Yii::$app->params['register'] ?>/uploads/collections/<?= $model->thumbnail ?>" style="height: 200px">
<?php endif; ?>
<div class="flex">
<div class="row c6">
<p><i class="lg lg-bg"></i> български</p>
<div class="row">
<h2><?= $model->name ?></h2>
</div>
<div class="row top15">
<label>Кратко описание</label>
<div>
<?= $model->annotation ?>
</div>
</div>
<div class="row top15">
<label>Oписание</label>
<div>
<?= $model->description ?>
</div>
</div>
</div>
<div class="row c6">
<p><i class="lg lg-bg"></i> английски</p>
<div class="row">
<h2><?= $model->name_en ?></h2>
</div>
<div class="row top15">
<label>Кратко описание</label>
<div>
<?= $model->annotation_en ?>
</div>
</div>
<div class="row top15">
<label>Oписание</label>
<div>
<?= $model->description_en ?>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,89 @@
<?php
use app\models\RegisterObjects;
use app\services\ELibraryModels;
use app\services\JWT;
/**
* @var RegisterObjects $model
*/
$download = null;
if (sizeof($model->getRegisterObjectFiles()->all()) > 0) {
$download = $model->getRegisterObjectFiles()->all()[0]->file_url;
}
$lib_variants = [1 => 'Книга', 2 => 'Периодично издание', 3 => 'Статия'];
$lib_formats = ["1" => 'Електронно', "3" => 'Печатно', "2" => 'Електронно и печатно'];
?>
<div class="inner-content p10 preview-mode">
<?php if ($model->mainImgFile): ?>
<img data-preview="<?= $model->mainImgFile ?>" src="<?= $model->mainImgFile ?>" style="height: 300px">
<?php endif; ?>
<?php if ($model->pdf): ?>
<div class="row top15 c7 flex">
<button data-pdf="https://portal.nasledstvo.bg/file-system/file-preview-delivery/<?= JWT::encode(['id' => $model->pdf->id], JWT::SECRET_KEY) ?>/"
class="btn btn-default"><i class="la la-file-pdf"></i> Преглед
</button>
<?php if ($download): ?>
<a href="<?= $download ?>" download="true" class="left10 btn btn-default"><i class="la la-download"></i>
Сваляне на файл</a>
<?php endif; ?>
</div>
<?php endif; ?>
<!-- EDIT -->
<div class="row top15 c7">
<label>Име на публикацията</label>
<div><?= $model->name ?></div>
</div>
<div class="row top15 c7">
<label>Анотация</label>
<div><?= $model->annotation ?></div>
</div>
<?php //if (!empty($_GET['lib']) && $_GET['lib'] == 'sichtbar'): ?>
<div class="row top15 c7">
<label>Ключови думи</label>
<div><?= $model->getTagsList(', ') ?></div>
</div>
<?php if ($model->library): ?>
<div class="row top15 c7">
<label>Информация</label>
<div>
<?php foreach ($model->library as $key => $value):
if ($key == "id" || $key == "object_id" || $value == "''" || $value == "") continue;
switch ($key) {
case 'lib_variant':
$value = ELibraryModels::$lib_types[$value][0] ?? $value[0];
break;
case 'lib_format':
$value = ELibraryModels::$lib_format_opt[$value][0] ?? $value[0];
break;
case 'lib_license':
$value = ELibraryModels::$lib_licenses[$value][0];
break;
case 'lib_rights':
$value = ELibraryModels::$lib_rights[$value][0];
break;
case 'lib_language':
$value = ELibraryModels::getLanguages($value);
break;
}
?>
<div><b><?= ELibraryModels::$key_labels[$key] ?? $key ?></b>: <?= strip_tags($value) ?></div>
<?php endforeach; ?>
</div>
</div>
<?php endif ?>
<?php //endif; ?>
</div>
<script>
document.querySelectorAll('[data-preview]').forEach(e => {
e.classList.add('pointer')
e.addEventListener('click', () => {
modal.modalPreview(e.dataset.preview);
})
})
</script>
@@ -0,0 +1,138 @@
<?php
use app\models\Events;
use app\models\register\Partner;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var Events $model
*/
$media_key = $model->getMediaKey();
?>
<div class="inner-content p10">
<form autocomplete="off">
<?php if ($model->getEventType()): ?>
<input name="type" type="hidden" value="<?= $model->getEventType() ?>">
<?php endif; ?>
<div class="row c2">
<label class="require">Дати на събитието</label>
<input type="hidden" name="event_dates" id="event_dates" value="<?= $model->event_dates ?>">
</div>
<div class="row c6 top15">
<label>Локация</label>
<input name="location" placeholder="Въведи локация на събитието" value="<?= $model->location ?>"/>
</div>
<div class="row c6 top15">
<label class="require">Заглавие</label>
<input name="title" placeholder="Въведи заглавие на събитието" value="<?= $model->title ?>"/>
</div>
<div class="row c6 top15">
<label class="require">Пртньор</label>
<select name="partner_id">
<option disabled selected>-- Избери организация --</option>
<?php foreach (Partner::partnerList() as $id => $name): ?>
<option <?= $model->partner_id == $id ? 'selected' : '' ?>
value="<?= $id ?>"><?= $name ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row top15" style="width: 350px">
<label>Заглавно изображение</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'title_event_image',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне',
'edit' => 'Редакция',
'delete' => 'Премахване'
],
'single_file' => true,
'resolutions' => ['16:11', '21:11', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<?= $this->render('/shared/instruction_1') ?>
<div class="row c9 top15">
<label class="require">Кратък текст</label>
<textarea class="ckEditor" name="text_short"><?= $model->text_short ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Подробен текст</label>
<textarea class="ckEditor" name="text"><?= $model->text ?></textarea>
</div>
<div class="row c9 top15">
<label>Изображения в събитието</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'event_images',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображения',
'edit' => 'Редакция на изображение',
'delete' => 'Премахване на изображения'
],
'resolutions' => ['16:11', '21:11', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<?php if ($model->type == 'simple'): ?>
<div class="row c9 top15 flex">
<div class="c7 right10">
<label>Стрийминг линк</label>
<input onkeyup="updateLabelRequire(this, '#sta')" name="stream_url"
placeholder="Въведи линк на стрийминг"
value="<?= $model->stream_url ?>"/>
</div>
<div class="left10">
<label id="sta">Достъп</label>
<div class="flex top-page-panel"
style="height: 14px; border-radius: 3px; border-color: var(--base-background-dark)">
<?php foreach ([1 => 'Частен', 2 => 'Публичен'] as $v => $t): ?>
<label style="margin-top: -3px" class="right10 radio-error"><input
style="width: 14px; height: 14px;" type="radio"
name="stream_access" <?= $model->stream_access == $v ? 'checked' : '' ?>
value="<?= $v ?>"/> <?= $t ?>
</label>
<?php endforeach; ?>
</div>
</div>
</div>
<?php endif; ?>
<div class="row c3 top15">
<label class="require">Дата на публикуване</label>
<input type="hidden" name="publish_date" id="publish_date" value="<?= $model->getPublishDate() ?>">
</div>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/events') ?>
</div>
</form>
</div>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<script src="/_public/plugins/air-datepicker/locales.js"></script>
<script src="/_public/plugins/air-datepicker/air-datepicker.js"></script>
<script>
new AirDatepicker('#event_dates', {
inline: true,
locale: locales.bg,
multipleDates: true,
multipleDatesSeparator: ',',
minDate: '<?= date('Y-m-d') ?>',
selectedDates: document.querySelector('#event_dates').value.split(',')
});
new AirDatepicker('#publish_date', {
inline: true,
locale: locales.bg,
minDate: '<?= date('Y-m-d') ?>',
selectedDates: [document.querySelector('#publish_date').value]
});
</script>
@@ -0,0 +1,27 @@
<?php
use app\widgets\services\Includes;
/**
* @var \app\models\ExpositionsCategories $model
*/
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="flex top15 c9">
<div class="row c6 right10">
<label class="require">Наименование на категория (BG)</label>
<input name="name" placeholder="Въведи наименование на категория"
value="<?= $model->name ?>"/>
</div>
<div class="row c6">
<label class="require">Наименование на категория (EN)</label>
<input name="name_en" placeholder="Въведи наименование на категория"
value="<?= $model->name_en ?>"/>
</div>
</div>
<div class="row flex c9 top15">
<?= Includes::formButtons('web-portal/expositions?listtab=categories') ?>
</div>
</form>
</div>
@@ -0,0 +1,163 @@
<div class="wl-switch">
<a class="" href="?listtab=list"><i class="la la-navicon"></i> Списък с експозиции</a>
<a class="" href="?listtab=categories"><i class="la la-navicon"></i> Категории</a>
<a class="selected" href="?listtab=tags"><i class="la la-navicon"></i> Тагове</a>
</div>
<?php
use app\models\ExpositionsTags;
$translations = ExpositionsTags::find()->orderBy(['id' => SORT_DESC])->all();
?>
<div class="inner-content p10">
<div class="c10 row">
<div class="row top15">
<div onclick="addTs(this)" class="btn-ib btn-default add-ts"><i class="la la-plus-circle"></i> Добави нов
таг
</div>
</div>
<div class="row-panel top15">
<input id="searchByName" style="height:13px; width: 300px" type="text" onkeydown="searchByName(this)"
placeholder="Търси по име на таг">
<div id="clearButton" onclick="clearButton()" class="btn-ib btn-default add-ts disabled left5"><i
class="la la-remove"></i>
Изчисти
</div>
<div onclick="searchButton()" class="btn-ib btn-default add-ts"><i class="la la-search"></i> Търси</div>
</div>
<table class="cms-table top15">
<thead id="header" class="<?= sizeof($translations) == 0 ? 'hidden-row' : '' ?>">
</thead>
<tbody id="tslist">
<?php if (sizeof($translations) == 0): ?>
<tr id="empty-row">
<td class="ct" style="font-size: 16px; padding: 20px" colspan="3">Няма добавени тагове</td>
</tr>
<?php else: ?>
<?php foreach ($translations as $ts): ?>
<tr id="ID<?= $ts->id ?>" data-row-id="<?= $ts->id ?>">
<td class="c5">
<div class="flex left10">
<i class="lg lg-bg" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="<?= $ts->id ?>"
name="name" placeholder="[BG]" value="<?= $ts->name ?>"/>
</div>
</td>
<td class="c5">
<div class="flex left10">
<i class="lg lg-en" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="<?= $ts->id ?>"
name="name_en" placeholder="[EN]" value="<?= $ts->name_en ?>"/>
</div>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
<script>
const newRow = (id) => {
return `<tr id="ID${id}" data-row-id="${id}">
<td class="c5">
<div class="flex left10">
<i class="lg lg-bg" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="${id}" name="name" placeholder="[BG]" value=""/>
</div>
</td>
<td class="c5">
<div class="flex left10">
<i class="lg lg-en" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="${id}" name="name_en" placeholder="[EN]" value=""/>
</div>
</td>
</tr>`;
}
const addTs = (e) => {
e.classList.add('disabled')
request({
post: {},
done: r => {
if (r.id) {
e.classList.remove('disabled')
if (one('#empty-row')) {
one('#tslist').innerHTML = newRow(r.id)
one('#header').classList.remove('hidden-row')
} else {
let firstRow = one('#tslist tr:first-child')
let tb = document.createElement('tbody')
tb.innerHTML = newRow(r.id)
one('#tslist').insertBefore(tb.firstChild, firstRow)
}
}
}
})
}
const updateTs = (e) => {
let post = {}
post[e.name] = e.value || 'null'
request({
url: `?listtab=tags&o=w&id=${e.dataset.inputId}`, post
})
}
const searchByName = (e) => {
if (event.keyCode === 13) {
const search = e.value.toLowerCase();
const clearButton = one('#clearButton');
if (search !== '') {
clearButton.removeClass('disabled');
} else {
clearButton.addClass('disabled');
}
document.querySelectorAll(`#tslist tr`).forEach(tr => {
const vBg = tr.querySelector('td:nth-child(1) input').value.toLowerCase();
const vEn = tr.querySelector('td:nth-child(2) input').value.toLowerCase();
if (search !== '') {
if (vBg.indexOf(search) > -1 || vEn.indexOf(search) > -1) {
tr.classList.remove('hidden-row')
} else {
tr.classList.add('hidden-row')
}
} else {
tr.classList.remove('hidden-row')
}
})
}
}
const searchButton = () => {
const search = one('#searchByName').value.toLowerCase();
const clearButton = one('#clearButton');
if (search !== '') {
clearButton.removeClass('disabled');
} else {
clearButton.addClass('disabled');
}
document.querySelectorAll(`#tslist tr`).forEach(tr => {
const vBg = tr.querySelector('td:nth-child(1) input').value.toLowerCase();
const vEn = tr.querySelector('td:nth-child(2) input').value.toLowerCase();
if (search !== '') {
if (vBg.indexOf(search) > -1 || vEn.indexOf(search) > -1) {
tr.classList.remove('hidden-row')
} else {
tr.classList.add('hidden-row')
}
} else {
tr.classList.remove('hidden-row')
}
});
}
const clearButton = () => {
one('#searchByName').value = '';
document.querySelectorAll(`#tslist tr`).forEach(tr => {
tr.classList.remove('hidden-row')
})
const clearButton = one('#clearButton');
clearButton.addClass('disabled');
}
</script>
@@ -0,0 +1,114 @@
<?php
use app\models\ExpositionsCategories;
use app\models\Partner;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var \app\models\Expositions $model
*/
$media_key = $model->getMediaKey();
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c9 top15">
<label>Галерия</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'title_expositions_images',
'media_key' => $media_key,
'model_id' => $model->id,
'model_class' => \app\models\Expositions::class,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображение',
'edit' => 'Редакция на изображенито',
'delete' => 'Премахване на изображението'
],
'resolutions' => ['1:1', '16:11'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<div class="flex top15 c9">
<div class="row c6 right10">
<label class="require">Наименование на експозиция (BG)</label>
<input name="name" placeholder="Въведи наименование на експозиция"
value="<?= $model->name ?>"/>
</div>
<div class="row c6">
<label class="require">Наименование на експозиция (EN)</label>
<input name="ts_en_name" placeholder="Въведи наименование на експозиция"
value="<?= $model->ts_en_name ?>"/>
</div>
</div>
<div class="flex top15 c9">
<div class="row c3 right10">
<label class="require">Категория</label>
<select name="category_id">
<option selected disabled>-- избери категория --</option>
<?php foreach (ExpositionsCategories::dropDownList($model->category_id) as $category): ?>
<option value="<?= $category->id ?>" <?= $category->selected ?>><?= $category->name ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="row c9 top15">
<label class="require">Анотация</label>
<textarea class="ckEditor" name="annotation"><?= $model->{'annotation'} ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Описание</label>
<textarea class="ckEditor" name="description"><?= $model->{'description'} ?></textarea>
</div>
<div class="row c9 top15">
<label>Тагове</label>
<select style="display:none;" class="search-select-box" multiple
name="tag_list[]">
<option disabled value="">-- избери тагове --</option>
<?php foreach ($model->getTagList() as $item): ?>
<option <?= $item['selected'] ?>
value="<?= $item['id'] ?>"><?= $item['name'] ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row c9 top15">
<label class="require">Партньор</label>
<select name="partner_id">
<option selected disabled value="">-- Изберете партньор --</option>
<?php foreach (\app\models\register\Partner::partnerList() as $id => $name): ?>
<option <?= $model->partner_id == $id ? 'selected' : '' ?> value="<?= $id ?>"><?= $name ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row c9 top15">
<label class="require">Информационен център</label>
<input name="info_center" placeholder="Въведи наименование на информационен център"
value="<?= $model->info_center ?>"/>
</div>
<div class="row c9 top15">
<label class="require">Информационен център адрес</label>
<input name="info_center_address" placeholder="Въведи адрес на информационен център"
value="<?= $model->info_center_address ?>"/>
</div>
<div class="row flex c9 top15">
<?= Includes::formButtons('web-portal/expositions') ?>
</div>
</form>
</div>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<script src="/_public/assets/js/search-box.js"></script>
<script>
all('.search-select-box').forEach(el => {
new SearchBox(el)
})
</script>
@@ -0,0 +1,94 @@
<?php
use app\models\Navigation;
use app\models\Pages;
use app\widgets\services\Includes;
/**
* @var Navigation $model
*/
$availableListTabs = ['main', 'footer', 'footer_2', 'footer_3'];
?>
<?php if (!empty($_GET['listtab']) && in_array($_GET['listtab'], $availableListTabs)): ?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="c10 row">
<label class="require">Име на бутон</label>
<div class="flex row row-panel">
<div class="row c6 right10">
<label><i class="lg lg-bg"></i> BG</label>
<input name="name" placeholder="Въведи име на бутона"
value="<?= $model->name ?>"/>
</div>
<div class="row c6">
<label><i class="lg lg-en"></i> EN</label>
<input name="ts_en_name" placeholder="Въведи име на бутона"
value="<?= $model->ts_en_name ?>"/>
</div>
</div>
</div>
<div class="c10 row top15">
<label class="require">Връзка</label>
<div class="flex row row-panel">
<div class="row c6 right10">
<label class="inner-block"><input <?= $model->isRelationType('inner_page') ?>
value="inner_page" type="radio" name="relation_type"> Вътрешна страница
</label>
<select data-content="inner_page" <?= $model->isRelationTypeFor('inner_page') ?> name="page_id">
<option value="" disabled selected>Избери вътрешна страница</option>
<?php foreach (Pages::getList() as $id => $page): ?>
<option <?= $id == $model->page_id ? 'selected' : '' ?>
value="<?= $id ?>"><?= $page ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row c6">
<label class="inner-block"><input <?= $model->isRelationType('outer_page') ?>
value="outer_page" type="radio" name="relation_type"> Url адрес на страница
</label>
<div>
<input placeholder="Въведи url адрес на външна или вътрешна страница"
data-content="outer_page" <?= $model->isRelationTypeFor('outer_page') ?> name="url"
value="<?= $model->url ?>">
</div>
<div class="top5">
<input placeholder="Въведи url адрес на външна или вътрешна страница за уторизирани потребители"
data-content="outer_page" <?= $model->isRelationTypeFor('outer_page') ?>
name="url_authorised"
value="<?= $model->url_authorised ?>">
</div>
</div>
</div>
</div>
<?php if (empty($_GET['id'])): ?>
<input name="menu_type" type="hidden" value="<?= $_GET['listtab'] ?>">
<?php endif; ?>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/navigation/?listtab=' . $_GET['listtab']) ?>
</div>
</form>
</div>
<?php endif; ?>
<script>
all('[name="relation_type"]', e => {
e.addEventListener('click', () => {
all('[data-content]', (elm) => {
elm.parentNode.removeClass('form-error')
let msg = elm.parentNode.querySelector('.error-bubble');
if (msg) {
msg.remove();
}
if (elm.dataset.content === e.value) {
elm.removeAttribute('readonly')
elm.removeClass('disabled')
} else {
elm.setAttribute('readonly', true)
elm.addClass('disabled')
elm.value = ''
}
})
})
})
</script>
@@ -0,0 +1,110 @@
<?php
use app\models\News;
use app\models\register\Partner;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var News $model
*/
$media_key = $model->getMediaKey();
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c5">
<label class="require">Пртньор</label>
<select name="partner_id">
<option disabled selected>-- Избери организация --</option>
<?php foreach (Partner::partnerList() as $id => $name): ?>
<option <?= $model->partner_id == $id ? 'selected' : '' ?>
value="<?= $id ?>"><?= $name ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row c5 top15">
<label class="require">Заглавие</label>
<input name="title" placeholder="Въведи заглавие на новината" value="<?= $model->title ?>"/>
</div>
<div class="row c9 top15">
<label>Заглавно изображение</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'title_news_image',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображение',
'edit' => 'Редакция на изображенито',
'delete' => 'Премахване на изображението'
],
'single_file' => true,
'resolutions' => ['16:11', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<?= $this->render('/shared/instruction_1') ?>
<div class="row c9 top15">
<label class="require">Кратък текст (на български)</label>
<textarea class="ckEditor" name="text_short"><?= $model->text_short ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Пълен текст (на български)</label>
<textarea class="ckEditor" name="text"><?= $model->text ?></textarea>
</div>
<div class="row c9 top15">
<label>Изображения в новината</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'news_images',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображения',
'edit' => 'Редакция на изображение',
'delete' => 'Премахване на изображения'
],
'resolutions' => ['16:11', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<div class="row c9 top15 flex">
<div class="c7 right10">
<label>Стрийминг линк</label>
<input onkeyup="updateLabelRequire(this, '#sta')" name="stream_url" placeholder="Въведи линк на стрийминг"
value="<?= $model->stream_url ?>"/>
</div>
<div class="left10">
<label id="sta">Достъп</label>
<div class="flex top-page-panel" style="height: 14px; border-radius: 3px; border-color: var(--base-background-dark)">
<?php foreach ([1 => 'Частен', 2 => 'Публичен'] as $v => $t): ?>
<label style="margin-top: -3px" class="right10 radio-error"><input style="width: 14px; height: 14px;" type="radio" name="stream_access" <?= $model->stream_access == $v ? 'checked' : '' ?>
value="<?= $v ?>"/> <?= $t ?>
</label>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="row c3 top15">
<label class="require">Дата на публикуване</label>
<input type="hidden" name="publish_date" id="publish_date" value="<?= $model->getPublishDate() ?>">
</div>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/news') ?>
</div>
</form>
</div>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<script src="/_public/plugins/air-datepicker/locales.js"></script>
<script src="/_public/plugins/air-datepicker/air-datepicker.js"></script>
<script>
new AirDatepicker('#publish_date', {
inline: true,
locale: locales.bg,
selectedDates: [document.querySelector('#publish_date').value]
});
</script>
@@ -0,0 +1,60 @@
<?php
use app\models\Objects;
use app\models\Partner;
use app\widgets\services\Includes;
/**
* @var Objects $model
*/
?>
<div class="inner-content p10">
<form autocomplete="off">
<?php if ($model->ot_id && $model->sc_id): ?>
<!-- EDIT -->
<div class="row info-table c4 top15">
<div class="row-flex">
<div>Категория:</div>
<div class="fl-capitalize"><?= $model->subCategory->mainCategory->name ?></div>
</div>
<div class="row-flex">
<div>Под категория:</div>
<div class="fl-capitalize"><?= $model->subCategory->name ?></div>
</div>
<div class="row-flex">
<div>Вид обект:</div>
<div class="fl-capitalize"><?= $model->objectTemplate->name ?></div>
</div>
<div class="row-flex">
<div>Партньор:</div>
<div class="fl-capitalize"><?= $model->partner->name ?></div>
</div>
</div>
<div class="row c7 top15">
<label class="require">Партньор</label>
<select name="partner_id">
<option selected disabled value="">-- Изберете партньор--</option>
<?php foreach (Partner::partnerList() as $id => $name): ?>
<option <?= $model->partner_id == $id ? 'selected': ''?> value="<?= $id ?>"><?= $name ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row top15 c7">
<label class="require">Наименование на обекта</label>
<input name="name" value="<?= $model->name ?>">
</div>
<div class="row top15 c7">
<label class="require">Анотация</label>
<textarea name="annotation"><?= $model->annotation ?></textarea>
</div>
<div class="row top15 c7">
<label class="require">Подробно описание</label>
<textarea class="ckEditor" name="description"><?= $model->description ?></textarea>
</div>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/objects') ?>
</div>
<?php endif; ?>
</form>
</div>
@@ -0,0 +1,91 @@
<?php
use app\models\Pages;
use app\widgets\services\Includes;
/**
* @var Pages $model
*/
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="c10 row">
<label>Заглавие страница</label>
<div class="flex row row-panel">
<div class="row c6 right10">
<label class="require"><i class="lg lg-bg"></i> Български</label>
<input name="name" placeholder="Въведи заглавието страницата [BG]" value="<?= $model->name ?>"/>
</div>
<div class="row c6 right10">
<label class="require"><i class="lg lg-en"></i> Английски</label>
<input name="name_en" placeholder="Въведи заглавието страницата [EN]" value="<?= $model->name_en ?>"/>
</div>
</div>
</div>
<div class="c10 row top15">
<label>Текст</label>
<div class="row row-panel">
<div class="row c12">
<label><i class="lg lg-bg"></i> Български</label>
<textarea class="ckEditor" name="text" placeholder="Въведи текст на страницата [BG]"><?= $model->text ?></textarea>
</div>
<div class="row c12 top15">
<label><i class="lg lg-en"></i> Английски</label>
<textarea class="ckEditor" name="text_en" placeholder="Въведи текст на страницата [EN]"><?= $model->text_en ?></textarea>
</div>
</div>
</div>
<?php if($model && $model->contact): ?>
<div class="panel row-panel top15 c10">
<h2>Контакти</h2>
<div class="row">
<div class="flex row">
<div class="row c6 right10">
<label>Телефон</label>
<input name="contacts[phone]" value="<?= $model->contact->phone ?>">
</div>
<div class="row c6">
<label>E-mail</label>
<input name="contacts[email]" value="<?= $model->contact->email ?>">
</div>
</div>
<div class="flex row top15">
<div class="row c12">
<label>Уебсайт</label>
<input name="contacts[website]" value="<?= $model->contact->website ?>">
</div>
</div>
</div>
<div class="row top15">
<label>Адрес</label>
<div class="flex row row-panel">
<div class="row c6 right10">
<label class="require"><i class="lg lg-bg"></i> Български</label>
<input name="contacts[address]" placeholder="Въведи адрес [BG]" value="<?= $model->contact->address ?>"/>
</div>
<div class="row c6 right10">
<label class="require"><i class="lg lg-en"></i> Английски</label>
<input name="contacts[address_en]" placeholder="Въведи адрес [EN]" value="<?= $model->contact->address_en ?>"/>
</div>
</div>
</div>
<div class="row top15">
<label>Управляващ орган</label>
<div class="flex row row-panel">
<div class="row c6 right10">
<label class="require"><i class="lg lg-bg"></i> Български</label>
<input name="contacts[managing_authority]" placeholder="Въведи управляващ орган [BG]" value="<?= $model->contact->managing_authority ?>"/>
</div>
<div class="row c6 right10">
<label class="require"><i class="lg lg-en"></i> Английски</label>
<input name="contacts[managing_authority_en]" placeholder="Въведи управляващ орган [EN]" value="<?= $model->contact->managing_authority_en ?>"/>
</div>
</div>
</div>
</div>
<?php endif ?>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/pages') ?>
</div>
</form>
</div>
@@ -0,0 +1,173 @@
<?php
use app\models\Positions;
use app\widgets\services\Includes;
/**
* @var Positions $model
*/
$media_key = $model->getMediaKey();
$min = 1;
$max = 15;
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c3 top15">
<label class="require">Име на групата</label>
<input name="group_name" placeholder="Въведи име на групата на позициите"
value="<?= $model->group_name ?>"/>
</div>
<?php if($model->id == 1):?>
<p class="upload-info">Материалите се показват на началната страница за да иглеждат добре е препоръчително броят на активните позиции в тематичната зона да бъде нечетно число.</i></p>
<?php endif; ?>
<?php if ($model->positionsCount == 0): ?>
<div class="row c3 top15">
<label class="require">Брой позиции</label>
<input onkeyup="validateNumber(this, <?= $min ?>, <?= $max ?>)" type="number" min="<?= $min ?>"
max="<?= $max ?>" name="positions_count" placeholder="Въведи колко на брой ще бъдат позициите"/>
</div>
<?php else: ?>
<div class="row c5 top15">
<div onclick="addPosition(this)" data-id="<?= $model->id ?>"
class="btn-ib btn-default <?= $model->positionsCount >= $max ? 'disabled' : '' ?>">
<i class="la la-plus-circle"></i> Добавяне на позиция
</div>
<div id="bDelete" data-model="app\models\Positions" onclick="checkDelete(this)"
class="btn-ib btn-default ct disabled">
<i class="la la-trash-o"></i> Изтриване на позиции <span id="delCount">(0)</span>
</div>
</div>
<div class="c9 top15">
<table class="cms-table">
<thead>
<tr>
<th class="text-right c0">
<input id="checkAll" onclick="checkAllPositions(this)" title="Избери всички"
class="delete-checkbox" type="checkbox">
No
</th>
<th>Материял</th>
</tr>
</thead>
<tbody>
<?php
$articles = ['Новина', 'Събитие', 'Кампания'];
foreach ($model->positions as $i => $position): ?>
<tr draggable="true" data-index="<?= $position->order_index ?>">
<td class="text-right">
<input onclick="checkSingle(this)" data-del="<?= $position->id ?>"
class="delete-checkbox"
type="checkbox"
style="top: calc(50% - 10px)">
<span class="order-index"><?= $position->order_index + 1 ?></span>
</td>
<td><?= $position->article ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
<input type="hidden" name="positions_count_ready" value="<?= $model->positionsCount ?>">
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/positions') ?>
</div>
</form>
</div>
<script src="/_public/assets/js/order.js"></script>
<script>
orderItems('[data-index]', '/update-positions-indexes/', function () {
var index = 0
all('[data-index] .order-index').forEach(e => {
e.innerText = ++index
})
});
function validateNumber(e, min, max) {
if (e.value !== '') {
if (e.value < min)
e.value = min;
if (e.value > max)
e.value = max;
}
}
let sl = [];
function checkAllPositions(el) {
sl = [];
all('td [data-del]').forEach(e => {
e.checked = el.checked === true;
if (el.checked) {
sl.push(e.dataset.del);
e.parentNode.parentNode.addClass('checked');
} else {
e.parentNode.parentNode.removeClass('checked');
}
})
updateActionButtons();
}
function checkSingle(e) {
if (e.checked) {
sl.push(e.dataset.del);
e.parentNode.parentNode.addClass('checked');
} else {
one('#checkAll').checked = false;
e.parentNode.parentNode.removeClass('checked');
const f = sl.indexOf(e.dataset.del);
sl.splice(f, 1);
}
updateActionButtons(e.dataset.del);
}
function updateActionButtons() {
const bDelete = one('#bDelete');
const delCount = one('#delCount');
const c = sl.length;
if (delCount)
delCount.innerText = '(' + c + ')';
if (c > 0) {
if (bDelete)
bDelete.removeClass('disabled');
} else {
if (bDelete)
bDelete.addClass('disabled');
}
}
function checkDelete(e) {
const msg = 'Сигурни ли сте, че искате да изтриете ' + (sl.length > 1 ? 'тези ' + sl.length + ' записа?' : 'този запис?');
modal.confirm(msg, () => {
request({
url: window.location.href.split('?')[0] + '?o=d',
post: {
ids: JSON.stringify(sl),
model: e.dataset.model
},
done: e => {
window.location.reload();
}
})
});
}
function addPosition(e) {
request({
url: '/new-article-position/',
post: {
group_id: e.dataset.id
},
done: e => {
window.location.reload();
}
})
}
</script>
@@ -0,0 +1,80 @@
<?php
use app\models\Projects;
use app\models\register\Partner;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var Projects $model
*/
$media_key = $model->getMediaKey();
$partnerIds = $model->partnersIds();
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c5">
<label>Партньори</label>
<select style="display:none;" class="search-select-box" multiple name="partners[]">
<option disabled value="">-- избери партньори --</option>
<?php foreach (Partner::partnerList() as $id => $name): ?>
<option <?= $model->isSelected($partnerIds, $id) ?> value="<?= $id ?>"><?= $name ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row c5 top15">
<label class="require">Заглавие</label>
<input name="title" placeholder="Въведи заглавие на проекта" value="<?= $model->title ?>"/>
</div>
<div class="row c9 top15">
<label>Заглавно изображение</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'title_project_image',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображение',
'edit' => 'Редакция на изображенито',
'delete' => 'Премахване на изображението'
],
'single_file' => true,
'resolutions' => ['11:14', '16:11', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<div class="row c9 top15">
<label class="require">Пълен текст (на български)</label>
<textarea class="ckEditor" name="text"><?= $model->text ?></textarea>
</div>
<div class="row c9 top15">
<label>Кратък текст (на български)</label>
<textarea class="ckEditor" name="text_short"><?= $model->text_short ?></textarea>
</div>
<div class="row c9 top15">
<label>Договор (на български)</label>
<textarea class="ckEditor" name="text_contract"><?= $model->text_contract ?></textarea>
</div>
<div class="row c5 top15">
<label>Период (начална дата - крайна дата)</label>
<input name="period" value="<?= $model->period ?>">
</div>
<div class="row c5 top15">
<label>Уебсайт на проекта</label>
<input name="website" placeholder="Въведи заглавие на проекта" value="<?= $model->website ?>"/>
</div>
<div class="row c9 top30 flex">
<?= Includes::formButtons('web-portal/projects') ?>
</div>
</form>
</div>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<script src="/_public/assets/js/search-box.js"></script>
<script>
all('.search-select-box').forEach(el => {
new SearchBox(el)
})
</script>
@@ -0,0 +1,52 @@
<?php
use app\models\RegisterObjects;
use app\models\Partner;
use app\widgets\services\Includes;
/**
* @var RegisterObjects $model
*/
?>
<div class="inner-content p10 preview-mode">
<!-- EDIT -->
<div class="row top15 c7">
<?php if ($model->mainImgFile): ?>
<label>Изображение на обекта</label>
<div><img src="<?= $model->mainImgFile ?>" style="height: 130px"></div>
<?php endif; ?>
</div>
<div class="row top15 c7">
<label>Наименование на обекта</label>
<div><?= $model->name ?></div>
</div>
<div class="row top15 c7">
<label>Реф. номер</label>
<div><?= $model->ref_num ?></div>
</div>
<?php if($model->created_year): ?>
<div class="row top15 c7">
<label>Година на създаване</label>
<div><?= $model->created_year ?></div>
</div>
<?php endif; ?>
<?php if($model->created_by): ?>
<div class="row top15 c7">
<label>Създател</label>
<div><?= $model->created_by ?></div>
</div>
<?php endif; ?>
<div class="row top15 c7">
<label>Анотация</label>
<div><?= $model->annotation ?></div>
</div>
<div class="row top15 c7">
<label>Кратко описание</label>
<div><?= $model->short_description ?></div>
</div>
<div class="row top15 c7">
<label>Подробно описание</label>
<div><?= $model->description ?></div>
</div>
</div>
@@ -0,0 +1,75 @@
<?php
use app\models\Pages;
use app\widgets\services\Includes;
/**
* @var \app\models\SeoManagement $model
*/
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="c10 row top15">
<label>Заглавие</label>
<div class="row row-panel">
<div class="row c12">
<label><i class="lg lg-bg"></i> Български</label>
<input name="title" placeholder="Въведи заглавие [BG]" value="<?= $model->title ?>">
</div>
<div class="row c12 top15">
<label><i class="lg lg-en"></i> Английски</label>
<input name="title_en" placeholder="Въведи заглавие [EN]" value="<?= $model->title_en ?>">
</div>
</div>
</div>
<div class="c10 row top15">
<label>Ключови думи</label>
<div class="row row-panel">
<div class="row c12">
<label><i class="lg lg-bg"></i> Български</label>
<textarea name="key_words"
placeholder="Въведи ключови думи [BG]"><?= $model->key_words ?></textarea>
</div>
<div class="row c12 top15">
<label><i class="lg lg-en"></i> Английски</label>
<textarea name="key_words_en"
placeholder="Въведи ключови думи [EN]"><?= $model->key_words_en ?></textarea>
</div>
</div>
</div>
<div class="c10 row top15">
<label>Текст</label>
<div class="row row-panel">
<div class="row c12">
<label><i class="lg lg-bg"></i> Български</label>
<textarea name="text" placeholder="Въведи текст на страницата [BG]"><?= $model->text ?></textarea>
</div>
<div class="row c12 top15">
<label><i class="lg lg-en"></i> Английски</label>
<textarea name="text_en"
placeholder="Въведи текст на страницата [EN]"><?= $model->text_en ?></textarea>
</div>
</div>
</div>
<?php if ($model->id != 1): ?>
<div class="c10 row top15">
<label>Страница</label>
<select name="page_id">
<option></option>
<?php foreach (Pages::find()->all() as $page): ?>
<option <?= $model->page_id == $page->id ? 'selected' : '' ?>
value="<?= $page->id ?>"><?= $page->name ?></option>
<?php endforeach; ?>
</select>
</div>
<?php else: ?>
<input type="hidden" name="page_seo" value="1">
<?php endif; ?>
<div class="row c9 top15 flex">
<button id="save" class="btn btn-default">
<i class="la la-save"></i> Запази
</button>
</div>
</form>
</div>
@@ -0,0 +1,69 @@
<?php
use app\models\Slides;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var Slides $model
*/
$media_key = $model->getMediaKey();
?>
<?php if (!empty($_GET['listtab']) && in_array($_GET['listtab'], ['home_page'])): ?>
<div class="inner-content p10">
<form autocomplete="off">
<p class="upload-info">За вътрешни страници въвеждайте url адрес без домейн например: /novini/ на български</p>
<div class="c8 row">
<label><i class="lg lg-bg"></i> Български</label>
<div class="flex row row-panel">
<div class="row c6 right10">
<label class="require">Заглавие</label>
<input name="title" placeholder="Въведи заглавие"
value="<?= $model->title ?>"/>
</div>
<div class="row c6">
<label>Url адрес</label>
<input name="relation" placeholder="Въведи url адрес"
value="<?= $model->relation ?>"/>
</div>
</div>
<div class="row top15">
<label class="require">Текст</label>
<textarea name="text" class="ckEditor"><?= $model->text ?></textarea>
</div>
<div class="row top15" style="width: 350px">
<label>Изображение слайд</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'slide_home_page_image',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне',
'edit' => 'Редакция',
'delete' => 'Премахване'
],
'single_file' => true,
'resolutions' => ['16:10'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<p class="upload-info">Слайда ще се появи на сайта, след като има качено и обработено изображение във формат 16:9</p>
<div class="row top15">
<label>Url адрес на видео файл (за тест)</label>
<input name="video_url" value="<?= $model->video_url ?>">
</div>
</div>
<?php if (empty($_GET['id'])): ?>
<input name="type" type="hidden" value="<?= $_GET['listtab'] ?>">
<?php endif; ?>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/slider/?listtab=' . $_GET['listtab']) ?>
</div>
</form>
</div>
<?php endif; ?>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
@@ -0,0 +1,118 @@
<?php
use app\models\Translation;
$translations = Translation::find()->orderBy(['id' => SORT_DESC])->all();
?>
<div class="inner-content p10">
<div class="c10 row">
<div class="row top15">
<div onclick="addTs(this)" class="btn-ib btn-default add-ts"><i class="la la-plus-circle"></i> Добави нов
превод
</div>
</div>
<table class="cms-table top15">
<thead id="header" class="<?= sizeof($translations) == 0 ? 'hidden-row':'' ?>">
<tr>
<td style="padding: 10px; width: 150px"><input type="number" onkeydown="searchById(this)" placeholder="Търси по ID">
</td>
<td></td>
<td></td>
</tr>
</thead>
<tbody id="tslist">
<?php if (sizeof($translations) == 0): ?>
<tr id="empty-row">
<td class="ct" style="font-size: 16px; padding: 20px" colspan="3">Няма добавени преводи</td>
</tr>
<?php else: ?>
<?php foreach ($translations as $ts): ?>
<tr id="ID<?= $ts->id ?>" data-row-id="<?= $ts->id ?>">
<td>
#ID: <b><?= $ts->id ?></b>
</td>
<td class="c5">
<div class="flex left10">
<i class="lg lg-bg" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="<?= $ts->id ?>"
name="name" placeholder="[BG]" value="<?= $ts->name ?>"/>
</div>
</td>
<td class="c5">
<div class="flex left10">
<i class="lg lg-en" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="<?= $ts->id ?>"
name="name_en" placeholder="[EN]" value="<?= $ts->name_en ?>"/>
</div>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
<script>
const newRow = (id) => {
return `<tr id="ID${id}" data-row-id="${id}">
<td>#ID: <b>${id}</b></td>
<td class="c5">
<div class="flex left10">
<i class="lg lg-bg" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="${id}" name="name" placeholder="[BG]" value=""/>
</div>
</td>
<td class="c5">
<div class="flex left10">
<i class="lg lg-en" style="margin-top: 10px"></i>
<input autocomplete="off" oninput="updateTs(this)" data-input-id="${id}" name="name_en" placeholder="[EN]" value=""/>
</div>
</td>
</tr>`;
}
const addTs = (e) => {
e.classList.add('disabled')
request({
post: {},
done: r => {
if (r.id) {
e.classList.remove('disabled')
if (one('#empty-row')) {
one('#tslist').innerHTML = newRow(r.id)
one('#header').classList.remove('hidden-row')
} else {
let firstRow = one('#tslist tr:first-child')
let tb = document.createElement('tbody')
tb.innerHTML = newRow(r.id)
one('#tslist').insertBefore(tb.firstChild, firstRow)
}
}
}
})
}
const updateTs = (e) => {
let post = {}
post[e.name] = e.value || 'null'
request({
url: `?o=w&id=${e.dataset.inputId}`, post
})
}
const searchById = (e) => {
if (event.keyCode === 13) {
document.querySelectorAll(`#tslist tr`).forEach(tr => {
if(one(`#ID${e.value}`)) {
if (tr.id === `ID${e.value}`) {
tr.classList.remove('hidden-row')
} else {
tr.classList.add('hidden-row')
}
} else {
tr.classList.remove('hidden-row')
}
})
}
}
</script>
@@ -0,0 +1,66 @@
<?php
use app\models\Collections;
use app\widgets\FileWidget;
/**
* @var $model \app\models\Expositions
*/
$media_key = $model->getMediaKey();
?>
<div class="inner-content p10">
<?php if (empty($model->id)): ?>
<p style="color: darkorange; font-weight: bold">* Формата ще бъде активна след попълването на "Основни
данни"</p>
<?php endif; ?>
<div class="<?= empty($model->id) ? 'disabled' : '' ?>">
<div class="inner-content p10">
<?php if ($model->name): ?>
<div class="row info-table c5 top15">
<div class="row-flex">
<div>Име на експозиция:</div>
<div class="txt-no-transform"><?= $model->name ?></div>
</div>
</div>
<?php endif; ?>
<div class="row c9 top15">
<label>Заглавно изображение</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'title_expositions_image',
'media_key' => $media_key,
'model_id' => $model->id,
'model_class' => \app\models\Expositions::class,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображение',
'edit' => 'Редакция на изображенито',
'delete' => 'Премахване на изображението'
],
'single_file' => true,
'resolutions' => ['1:1', '16:11'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
</div>
</div>
</div>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<?php if ($model->id && !$model->media_key): ?>
<script>
const media_key = '<?= $media_key ?>';
request({
url: window.location.href + '&media_key_update=1',
post: {media_key: media_key}
})
</script>
<?php endif; ?>
@@ -0,0 +1,85 @@
<?php
use app\models\Objects;
use app\widgets\FileWidget;
/**
* @var $model Objects
*/
$media_key = $model->getMediaKey();
?>
<?php if ($model->ot_id && $model->sc_id): ?>
<form autocomplete="off">
<div class="inner-content p10">
<div class="row info-table c5 top15">
<div class="row-flex">
<div>Категория:</div>
<div><?= $model->subCategory->mainCategory->name ?></div>
</div>
<div class="row-flex">
<div>Под категория:</div>
<div><?= $model->subCategory->name ?></div>
</div>
<div class="row-flex">
<div>Вид обект:</div>
<div><?= $model->objectTemplate->name ?></div>
</div>
<?php if ($model->name): ?>
<div class="row-flex">
<div>Име на обект:</div>
<div><?= $model->name ?></div>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<div class="row c9 top15">
<label>Заглавно изображение</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'title_object_image',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображение',
'edit' => 'Редакция на изображенито',
'delete' => 'Премахване на изображението'
],
'single_file' => true,
'resolutions' => ['4:3', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<div class="row c9 top15">
<label>Изображения в обекта</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'object_images',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображения',
'edit' => 'Редакция на изображение',
'delete' => 'Премахване на изображения'
],
'resolutions' => ['4:3', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
</div>
</form>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<?php if (!$model->media_key): ?>
<script>
const media_key = '<?= $media_key ?>';
request({
url: window.location.href + '&media_key_update=1',
post: {media_key: media_key}
})
</script>
<?php endif; ?>
@@ -0,0 +1,75 @@
<?php
use app\models\Pages;
use app\widgets\FileWidget;
/**
* @var $model Pages
*/
$media_key = $model->getMediaKey();
?>
<form autocomplete="off">
<div class="inner-content p10">
<?php if ($model->name): ?>
<div class="row info-table c5 top15">
<div class="row-flex">
<div>Страница</div>
<div class="txt-no-transform"><?= $model->name ?></div>
</div>
</div>
<?php endif; ?>
<div class="row c9 top15">
<label>Хедър изображение</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'header_page_image',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображение',
'edit' => 'Редакция на изображенито',
'delete' => 'Премахване на изображението'
],
'single_file' => true,
'resolutions' => ['21:5'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
<div class="row c9 top15">
<label>Изображения в страницата</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'page_images',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображения',
'edit' => 'Редакция на изображение',
'delete' => 'Премахване на изображения'
],
'resolutions' => ['4:3', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
</div>
</form>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<?php if (!$model->media_key): ?>
<script>
const media_key = '<?= $media_key ?>';
request({
url: window.location.href + '&media_key_update=1',
post: {media_key: media_key}
})
</script>
<?php endif; ?>
@@ -0,0 +1,46 @@
<?php
/**
* @var $model Projects
*/
use app\models\Projects;
use app\widgets\FileWidget;
$media_key = $model->getMediaKey();
?>
<form autocomplete="off">
<div class="inner-content p10">
<div class="row c9 top15">
<label>Изображения в проекта</label>
<?= FileWidget::widget([
'media_type' => 'image',
'object_key' => 'project_images',
'media_key' => $media_key,
'files' => $model->getFiles('thumb'),
'actions' => [
'add' => 'Добавяне на изображения',
'edit' => 'Редакция на изображение',
'delete' => 'Премахване на изображения'
],
'resolutions' => ['16:11', '16:9', '1:1'],
'max_file_size' => 2,
'error_message' => 'Файловете по-големи от 2МБ, не бяха добавени'
]) ?>
</div>
</div>
</form>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
<?php if (!$model->media_key): ?>
<script>
const media_key = '<?= $media_key ?>';
request({
url: window.location.href + '&media_key_update=1',
post: {media_key: media_key}
})
</script>
<?php endif; ?>
@@ -0,0 +1,11 @@
<?php
use app\models\RegisterObjects;
use app\services\JWT;
use app\widgets\FileWidget;
/**
* @var $model RegisterObjects
*/
echo $this->render('/shared/register_object_files', ['model' => $model])
?>
@@ -0,0 +1,89 @@
<?php
use app\models\RegisterObjects;
/**
* @var RegisterObjects $model
*/
?>
<style>
.nom {
width: calc(100% / 4 - 16px);
padding: 8px;
height: 50px;
margin-bottom: 30px;
}
.nom .row-panel {
height: 100%;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2);
border: 1px solid #cccccc;
background: #FFFFFF;
}
.bold {
font-weight: bold;
}
</style>
<div class="inner-content p10 top30">
<!--
<div class="flex flex-wrap">
<?php if ($model->city): ?>
<div class="row nom">
<div class="row-panel">
<label>Населено място</label>
<div><?= $model->city->place ?></div>
</div>
</div>
<?php endif; ?>
<?php foreach ($model->registerObjectFields as $registerObjectField): ?>
<div class="row nom">
<div class="row-panel">
<label>
<?php if ($registerObjectField->field): ?>
<?= $registerObjectField->field->name ?>
</label>
<?php endif; ?>
<div>
<?php if ($registerObjectField->fieldValue): ?>
<?= $registerObjectField->fieldValue->name ?>
<?php endif; ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
-->
<table class="cms-table">
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php if ($model->city): ?>
<tr>
<td class="c2 text-right bold">Населено място:</td>
<td><?= $model->city->place ?></td>
</tr>
<?php endif; ?>
<?php foreach ($model->registerObjectFields as $registerObjectField): ?>
<tr>
<td class="c2 text-right bold">
<?php if ($registerObjectField->field): ?>
<?= $registerObjectField->field->name ?>:
<?php endif; ?>
</td>
<td>
<?php if ($registerObjectField->fieldValue): ?>
<?= $registerObjectField->fieldValue->name ?>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
@@ -0,0 +1,144 @@
<?php
use app\models\Collections;
use app\models\Objects;
use app\services\api\NomenclatureService;
use app\widgets\services\Includes;
/**
* @var Objects $model
*/
?>
<div class="inner-content p10">
<?php if ($model->ot_id && $model->sc_id): ?>
<?php $newTemplateFields = $model->newTemplateFields() ?>
<?php if (!empty($newTemplateFields)): ?>
<form autocomplete="off">
<div class="row-info c5 top15">
<p class="upload-info">В шаблона на обекта има нови полета. Желаете ли да бъдат добавени в
обекта?</p>
<div class="row info-table top15">
<?php
$index = 0;
foreach ($model->newTemplateFields() as $id => $field): ?>
<div class="row-flex">
<div style="width: 350px"><?= ++$index ?>. <?= $field['type'] ?>:</div>
<div><?= $field['name'] ?></div>
</div>
<?php endforeach; ?>
</div>
<input name="new_object_fields" type="hidden" value="1">
<div class="row c9 top15 flex">
<button id="save" class="btn btn-default">
<i class="la la-arrow-right"></i> Добави новите полета
</button>
</div>
</div>
</form>
<?php endif; ?>
<?php endif; ?>
<form autocomplete="off">
<!-- EDIT -->
<?php if ($model->ot_id && $model->sc_id): ?>
<div class="row info-table c5 top15">
<div class="row-flex">
<div>Категория:</div>
<div class="fl-capitalize"><?= $model->subCategory->mainCategory->name ?></div>
</div>
<div class="row-flex">
<div>Под категория:</div>
<div class="fl-capitalize"><?= $model->subCategory->name ?></div>
</div>
<div class="row-flex">
<div>Вид обект:</div>
<div class="fl-capitalize"><?= $model->objectTemplate->name ?></div>
</div>
<?php if ($model->name): ?>
<div class="row-flex">
<div>Име на обект:</div>
<div class="fl-capitalize"><?= $model->name ?></div>
</div>
<?php endif; ?>
<div class="row-flex">
<div>Партньор:</div>
<div class="fl-capitalize"><?= $model->partner->name ?></div>
</div>
</div>
<div class="row c5">
<label>Колекции</label>
<select style="display: none" id="collections" multiple name="collections[]">
<option disabled value="">-- Закачи към колекции --</option>
<?php foreach ($model->getCollectionsSelectList() as $id => $item): ?>
<option <?= $item['selected'] ? 'selected' : '' ?> value="<?= $id ?>"><?= $item['name'] ?></option>
<?php endforeach; ?>
</select>
</div>
<?php foreach ($model->objectFields as $objectField): ?>
<div class="row c10 top15"><?= $objectField->getUserInterface() ?></div>
<?php endforeach; ?>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/objects') ?>
</div>
<?php else: ?>
<div class="row c6">
<label class="require">Партньор</label>
<select name="partner_id">
<option value=""> -- Изберете партньор --</option>
<?php foreach (\app\models\Partner::partnerList() as $id => $name): ?>
<option value="<?= $id ?>"><?= $name ?></option>
<?php endforeach; ?>
</select>
</div>
<!-- NEW -->
<div class="row c6 top15">
<label class="require">Категория</label>
<select name="sc_id" id="category_search_box" style="display: none">
<option value=""> -- Изберете категория --</option>
<?php foreach (NomenclatureService::categorySelect() as $item): ?>
<option value="<?= $item['id'] ?>"><?= $item['name'] ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="row c6 top15">
<label class="require">Вид обект</label>
<select name="ot_id" id="object_type_search_box" class="disabled" style="display: none">
<option value="">-- Изберете вид обект --</option>
</select>
</div>
<p class="upload-info top15">Изберете първо категорията и вида на обекта, след което ще получите
възможност
да
попълнете
данните за конкретния обект.</p>
<div class="row c9 top15 flex">
<a href="<?= Yii::$app->goTo('web-portal/objects') ?><?= isset($_GET['p']) ? '?p=' . $_GET['p'] : '' ?>"
class="btn btn-default right10"><i class="la la-undo"></i> Назад</a>
<button id="save" class="btn btn-default">
<i class="la la-arrow-right"></i> Потвърди и продължи
</button>
</div>
<?php endif; ?>
</form>
</div>
<script src="/_public/plugins/air-datepicker/locales.js"></script>
<script src="/_public/plugins/air-datepicker/air-datepicker.js"></script>
<script>
all('[data-format="date"]', e => {
if (e.dataset.format === 'date') {
new AirDatepicker(`[name="${e.name}"]`, {
inline: true,
locale: locales.bg,
selectedDates: [e.value]
});
}
})
</script>
<script src="/_public/assets/js/search-box-remote.js"></script>
<script>
new SearchBoxRemote('.sbr', {
url: '/settlements/get-data/',
id: 'settlement_id',
columns: {t_v_m: 'град/село', name: 'Населено място', oblast: 'Област', obstina: 'Община'}
})
</script>
@@ -0,0 +1,92 @@
<?php
use app\models\RegisterObjects;
/**
* @var RegisterObjects $model
*/
?>
<style>
.nom {
width: calc(100% / 4 - 16px);
padding: 8px;
height: 50px;
margin-bottom: 30px;
}
.nom .row-panel {
height: 100%;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2);
border: 1px solid #cccccc;
background: #FFFFFF;
}
.bold {
font-weight: bold;
}
</style>
<div class="inner-content p10 top30">
<!--
<div class="flex flex-wrap">
<?php if ($model->city): ?>
<div class="row nom">
<div class="row-panel">
<label>Населено място</label>
<div><?= $model->city->place ?></div>
</div>
</div>
<?php endif; ?>
<?php foreach ($model->registerObjectFields as $registerObjectField): ?>
<div class="row nom">
<div class="row-panel">
<label>
<?php if ($registerObjectField->field): ?>
<?= $registerObjectField->field->name ?>
</label>
<?php endif; ?>
<div>
<?php if ($registerObjectField->fieldValue): ?>
<?= $registerObjectField->fieldValue->name ?>
<?php else: ?>
<?= $registerObjectField->value_text ?>
<?php endif; ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
-->
<table class="cms-table">
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php if ($model->city): ?>
<tr>
<td class="c2 text-right bold">Населено място:</td>
<td><?= $model->city->place ?></td>
</tr>
<?php endif; ?>
<?php foreach ($model->registerObjectFields as $registerObjectField): ?>
<tr>
<td class="c2 text-right bold">
<?php if ($registerObjectField->field): ?>
<?= $registerObjectField->field->name ?>:
<?php endif; ?>
</td>
<td>
<?php if ($registerObjectField->fieldValue): ?>
<?= $registerObjectField->fieldValue->name ?>
<?php else: ?>
<?= $registerObjectField->value_text ?>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
@@ -0,0 +1,22 @@
<?php
use app\models\RegisterObjects;
use app\widgets\TableWidget;
$tab = $_GET['tab'] ?? 'main';
$_GET['tab'] = $tab;
if (!empty($_GET['id'])) {
$tabs['nomenclature'] = '<i class="la la-clipboard-list"></i> Номенклатури';
$tabs['main'] = '<i class="la la-database"></i> Основни данни';
$tabs['ts_en'] = '<i class="lg lg-en"></i> Превод английски';
$tabs['media'] = '<i class="la la-file-movie-o"></i> Медия файлове';
}
/**
* @var RegisterObjects $model
*/
echo '<h1>Обекти</h1>';
?>
@@ -0,0 +1,102 @@
<?php
/**
* @var \app\models\Expositions $model
* @var $this \yii\web\View
*/
?>
<link href="/_public/assets/css/search-box-remote.css" rel="stylesheet">
<div class="inner-content p10">
<?php if ($model->name): ?>
<div class="row-panel info-table c9 top15">
<div class="row-flex">
<div>експозиция</div>
<div class="txt-no-transform"><?= $model->name ?></div>
</div>
</div>
<?php endif; ?>
<input type="hidden" id="exposition_id" value="<?= $model->id ?>">
<div class="row-panel c9">
<div class="row" style="position: relative">
<div data-domain="<?= Yii::$app->params['cms'] ?>" onclick="openObjects(this)" data-exposition-id="<?= $model->id ?>" class="btn btn-default pointer input-main-search"><i
class="la la-database"></i> Избери и добави обект към тази експозиция
</div>
</div>
</div>
<div class="row-panel c9">
<div class="object-list"></div>
</div>
</div>
<script>
function openObjects(e) {
modal.modalFrame(`${e.dataset.domain}/admin-global/web-portal/_objects-register/?expId= ${e.dataset.expositionId}`)
}
function clearSelected() {
event.preventDefault();
const smi = one('.input-main-search')
smi.innerHTML = '<i class="la la-database"></i> Избери и добави обект към тази експозиция';
}
function addSelected() {
event.preventDefault();
const smi = one('.input-main-search')
const hiddenInput = document.querySelector('input[name="search-object"]');
const exposition_id = document.querySelector('#exposition_id').value;
const object_id = hiddenInput.value;
request({
post: {
exposition_id,
object_id
},
done: (e) => {
if (e.error) {
flash.error('Този обект вече е добавен, изберете друг');
} else {
flash.success('Обекта е добавен към експозицията');
}
}
})
smi.innerHTML = '<i class="la la-database"></i> Избери и добави обект към тази експозиция';
}
function removeObject(e) {
//alert(e.dataset.objectId)
const container = e.parentNode;
e.classList.add('disabled')
request({
post: {
exposition_id: e.dataset.expositionId,
object_id: e.dataset.objectId,
delete: 1
},
done: (data) => {
if (container)
container.remove();
flash.success('Обекта е махнат от експозицията');
}
})
}
function loadExpositionObjects() {
request({
url: '/remote/get-exposition-objects/',
dataType: 'text',
get: {
exposition_remote_list: '<?= $model->id ?>'
},
done: function (html) {
const list = document.querySelector('.object-list');
list.innerHTML = html;
}
})
}
window.addEventListener('DOMContentLoaded', function () {
loadExpositionObjects();
})
</script>
@@ -0,0 +1,99 @@
<?php
/**
* @var \app\models\Expositions $model
*/
?>
<div class="inner-content p10">
<?php if ($model->name): ?>
<div class="row-panel info-table c9 top15">
<div class="row-flex">
<div></div>
<div class="txt-no-transform"><?= $model->name ?></div>
</div>
</div>
<?php endif; ?>
<input type="hidden" id="exposition_id" value="<?= $model->id ?>">
<div class="row-panel c9">
<div class="row" style="position: relative">
<div class="sbr input-main-search" data-sbr-name="search-object" data-sbr-value=""><i
class="la la-database"></i> Избери и добави обект към тази експозиция
</div>
</div>
</div>
<div class="row-panel c9">
<div class="object-list">
<?php foreach ($model->objectList as $expositionObject): ?>
<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="<?= $model->id ?>" class="remove-object"><i class="la la-remove"></i></div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<script src="/_public/assets/js/search-box-remote-select.js"></script>
<script>
window.addEventListener('DOMContentLoaded', function () {
new SearchBoxRemote('.sbr', {
url: '/remote/get-autocomplete-objects/',
id: 'object_id',
columns: {name: 'Наименование на обект'}
})
})
function clearSelected() {
event.preventDefault();
const smi = one('.input-main-search')
smi.innerHTML = '<i class="la la-database"></i> Избери и добави обект към тази експозиция';
}
function addSelected() {
event.preventDefault();
const smi = one('.input-main-search')
const hiddenInput = document.querySelector('input[name="search-object"]');
const exposition_id = document.querySelector('#exposition_id').value;
const object_id = hiddenInput.value;
request({
post: {
exposition_id,
object_id
},
done: (e) => {
if (e.error) {
flash.error('Този обект вече е добавен, изберете друг');
} else {
flash.success('Обекта е добавен към експозицията');
}
}
})
smi.innerHTML = '<i class="la la-database"></i> Избери и добави обект към тази експозиция';
}
function removeObject(e) {
//alert(e.dataset.objectId)
const container = e.parentNode;
e.classList.add('disabled')
request({
post: {
exposition_id: e.dataset.expositionId,
object_id: e.dataset.objectId,
delete: 1
},
done: (data) => {
if(container)
container.remove();
flash.success('Обекта е махнат от експозицията');
}
})
}
</script>
@@ -0,0 +1,107 @@
<?php
use app\models\Events;
use app\widgets\services\Includes;
/**
* @var Events $model
*/
?>
<div class="inner-content p10">
<?php if(empty($model->id)): ?>
<p style="color: darkorange; font-weight: bold">* Формата ще бъде активна след попълването на "Основни данни"</p>
<?php endif; ?>
<form autocomplete="off" class="<?= empty($model->id) ? 'disabled' : '' ?>">
<?php if ($model->getEventType()): ?>
<input name="type" type="hidden" value="<?= $model->getEventType() ?>">
<?php endif; ?>
<div class="row top15" style="width: 300px">
<label class="require">Време на излъчване</label>
<input data-min-h="0" data-max-h="23" type="hidden" name="daily_open_time" id="daily_open_time"
value="<?= $model->daily_open_time ?>">
</div>
<div class="row c9 top15 flex">
<div class="c9 right10">
<label class="require">Стрийминг линк</label>
<input onkeyup="updateLabelRequire(this, '#sta')" name="stream_url"
placeholder="Въведи линк на стрийминг"
value="<?= $model->stream_url ?>"/>
</div>
<div class="left10">
<label id="sta">Достъп</label>
<div class="flex top-page-panel"
style="width: 200px; height: 14px; border-radius: 3px; border-color: var(--base-background-dark)">
<?php foreach ([1 => 'Частен', 2 => 'Публичен'] as $v => $t): ?>
<label onclick="updateStreamAccess(this)" style="margin-top: -3px" class="right10 radio-error"><input
style="width: 14px; height: 14px;" type="radio"
name="stream_access" <?= $model->get_stream_access() == $v ? 'checked' : '' ?>
value="<?= $v ?>"/> <?= $t ?>
</label>
<?php endforeach; ?>
</div>
</div>
</div>
<div id="price_selection" class="row c4 top15 <?= $model->get_stream_access() == 2 ? 'disabled' : '' ?>" >
<label id="price_module" class="<?= $model->get_stream_access() == 1 ? 'require' : '' ?>">Цена</label>
<div class="flex top-page-panel"
style="height: 30px; border-radius: 3px; border-color: var(--base-background-super-bright); width: 400px">
<input id="individual_price" <?= $model->get_stream_purchase_type() != 'individual_price' ? 'readonly class="disabled"' : '' ?>
data-format="money" style="height: 20px; width: 60px; margin-top: -3px; margin-right: 10px"
name="stream_price"
value="<?= $model->stream_purchase_type == 'individual_price' ? $model->stream_price : '' ?>">
<?php foreach (['individual_price' => 'Индивидуална цена', 'subscription' => 'С абонамент'] as $v => $t): ?>
<label style="margin-top: 7px;" onclick="updateIndividualPrice(this)" class="right10 radio-error">
<input style="width: 14px; height: 14px;" type="radio"
name="stream_purchase_type" <?= $model->get_stream_purchase_type() == $v ? 'checked' : '' ?>
value="<?= $v ?>"/> <?= $t ?>
</label>
<?php endforeach; ?>
</div>
</div>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/events') ?>
</div>
</form>
</div>
<script>
timeRange('#daily_open_time')
function updateIndividualPrice(e) {
let ip = one('#individual_price')
let check = e.querySelector('input')
if(check.checked && check.value === 'individual_price') {
ip.removeAttribute('readonly')
ip.removeClass('disabled')
} else {
ip.setAttribute('readonly', true)
ip.addClass('disabled')
ip.value = ''
e.parentNode.removeClass('form-error')
}
}
function updateStreamAccess(e) {
let ps = one('#price_selection')
let ip = one('#individual_price')
let price_module = one('#price_module')
let check = e.querySelector('input')
let stream_purchase_type = all('[name="stream_purchase_type"]')
if(check.checked && check.value === '1') {
ps.removeClass('disabled')
price_module.addClass('require');
stream_purchase_type[0].checked = true
stream_purchase_type[1].checked = false
} else {
ps.addClass('disabled')
ip.value = ''
stream_purchase_type[0].checked = false
stream_purchase_type[1].checked = false
ip.removeAttribute('readonly')
ip.removeClass('disabled')
price_module.removeClass('require')
ip.parentNode.removeClass('form-error')
}
}
</script>
@@ -0,0 +1,35 @@
<?php
use app\models\Campaigns;
use app\widgets\services\Includes;
/**
* @var Campaigns $model
*/
$ts = $_GET['tab'];
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c5 top15">
<label>Локация</label>
<input name="<?= $ts ?>_location" placeholder="Въведи локация на кампанията"
value="<?= $model->{$ts . '_location'} ?>"/>
</div>
<div class="row c5 top15">
<label class="require">Заглавие</label>
<input name="<?= $ts ?>_title" placeholder="Въведи заглавие на кампанията"
value="<?= $model->{$ts . '_title'} ?>"/>
</div>
<div class="row c9 top15">
<label class="require">Кратък текст</label>
<textarea class="ckEditor" name="<?= $ts ?>_text_short"><?= $model->{$ts . '_text_short'} ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Пълен текст</label>
<textarea class="ckEditor" name="<?= $ts ?>_text"><?= $model->{$ts . '_text'} ?></textarea>
</div>
<div class="row flex c9 top15">
<?= Includes::formButtons('web-portal/campaigns') ?>
</div>
</form>
</div>
@@ -0,0 +1,29 @@
<?php
use app\models\RegisterObjects;
use app\widgets\services\Includes;
/**
* @var RegisterObjects $model
*/
$ts = $_GET['tab']
?>
<div class="inner-content p10 preview-mode">
<!-- EDIT -->
<div class="row top15 c7">
<label>Име на публикацията</label>
<div><?= $model->{$ts . '_name'} ?></div>
</div>
<div class="row top15 c7">
<label>Анотация</label>
<div><?= $model->{$ts . '_annotation'} ?></div>
</div>
<div class="row top15 c7">
<label>Кратко описание</label>
<div><?= $model->{$ts . '_short_description'} ?></div>
</div>
<div class="row top15 c7">
<label>Подробно описание</label>
<div><?= $model->{$ts . '_description'} ?></div>
</div>
</div>
@@ -0,0 +1,42 @@
<?php
use app\models\Events;
use app\widgets\services\Includes;
/**
* @var Events $model
*/
$ts = $_GET['tab'];
?>
<div class="inner-content p10">
<?php if(empty($model->id)): ?>
<p style="color: darkorange; font-weight: bold">* Формата ще бъде активна след попълването на "Основни данни"</p>
<?php endif; ?>
<form autocomplete="off" class="<?= empty($model->id) ? 'disabled' : '' ?>">
<?php if ($model->getEventType()): ?>
<input name="type" type="hidden" value="<?= $model->getEventType() ?>">
<?php endif; ?>
<div class="row c5 top15">
<label>Локация</label>
<input name="<?= $ts ?>_location" placeholder="Въведи локация на събитието"
value="<?= $model->{$ts . '_location'} ?>"/>
</div>
<div class="row c5 top15">
<label class="require">Заглавие</label>
<input name="<?= $ts ?>_title" placeholder="Въведи заглавие на събитието"
value="<?= $model->{$ts . '_title'} ?>"/>
</div>
<div class="row c9 top15">
<label class="require">Кратък текст</label>
<textarea class="ckEditor" name="<?= $ts ?>_text_short"><?= $model->{$ts . '_text_short'} ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Пълен текст</label>
<textarea class="ckEditor" name="<?= $ts ?>_text"><?= $model->{$ts . '_text'} ?></textarea>
</div>
<div class="row flex c9 top15">
<?= Includes::formButtons('web-portal/events') ?>
</div>
</form>
</div>
@@ -0,0 +1,40 @@
<?php
use app\models\Collections;
use app\widgets\services\Includes;
/**
* @var \app\models\Expositions $model
*/
$ts = $_GET['tab'];
?>
<div class="inner-content p10">
<?php if (empty($model->id)): ?>
<p style="color: darkorange; font-weight: bold">* Формата ще бъде активна след попълването на "Основни
данни"</p>
<?php endif; ?>
<form autocomplete="off" class="<?= empty($model->id) ? 'disabled' : '' ?>">
<div class="row c9 top15">
<label class="require">Анотация</label>
<textarea class="ckEditor" name="<?= $ts ?>_annotation"><?= $model->{$ts . '_annotation'} ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Описание</label>
<textarea class="ckEditor" name="<?= $ts ?>_description"><?= $model->{$ts . '_description'} ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Информационен център</label>
<input name="<?= $ts ?>_info_center" placeholder="Въведи име на информационен център"
value="<?= $model->{$ts . '_info_center'} ?>"/>
</div>
<div class="row c9 top15">
<label class="require">Информационен център адрес</label>
<input name="<?= $ts ?>_info_center_address" placeholder="Въведи адрес на информационен център"
value="<?= $model->{$ts.'_info_center_address'} ?>"/>
</div>
<div class="row flex c9 top15">
<?= Includes::formButtons('nomenclature/collections') ?>
</div>
</form>
</div>
@@ -0,0 +1,30 @@
<?php
use app\models\News;
use app\widgets\services\Includes;
/**
* @var News $model
*/
$ts = $_GET['tab'];
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c5 top15">
<label class="require">Заглавие</label>
<input name="<?= $ts ?>_title" placeholder="Въведи заглавие на новината"
value="<?= $model->{$ts . '_title'} ?>"/>
</div>
<div class="row c9 top15">
<label class="require">Кратък текст</label>
<textarea class="ckEditor" name="<?= $ts ?>_text_short"><?= $model->{$ts . '_text_short'} ?></textarea>
</div>
<div class="row c9 top15">
<label class="require">Пълен текст</label>
<textarea class="ckEditor" name="<?= $ts ?>_text"><?= $model->{$ts . '_text'} ?></textarea>
</div>
<div class="row flex c9 top15">
<?= Includes::formButtons('web-portal/news') ?>
</div>
</form>
</div>
@@ -0,0 +1,66 @@
<?php
use app\models\Objects;
use app\services\api\NomenclatureService;
use app\widgets\services\Includes;
/**
* @var Objects $model
*/
$ts = $_GET['tab']
?>
<div class="inner-content p10">
<form autocomplete="off">
<?php if ($model->ot_id && $model->sc_id): ?>
<!-- EDIT -->
<div class="info-table c5 top15">
<div class="row-flex">
<div>Категория:</div>
<div><?= $model->subCategory->mainCategory->name ?></div>
</div>
<div class="row-flex">
<div>Под категория:</div>
<div><?= $model->subCategory->name ?></div>
</div>
<div class="row-flex">
<div>Вид обект:</div>
<div><?= $model->objectTemplate->name ?></div>
</div>
<div class="row-flex">
<div>Партньор:</div>
<div class="fl-capitalize"><?= $model->partner->name ?></div>
</div>
</div>
<div class="row top15 c5">
<label class="require">Име на обекта</label>
<input name="<?= $ts ?>_name" value="<?= $model->{$ts . '_name'} ?>">
</div>
<div class="row top15 c7">
<label class="require">Анотация</label>
<textarea name="<?= $ts ?>_annotation"><?= $model->{$ts . '_annotation'} ?></textarea>
</div>
<div class="row top15 c7">
<label class="require">Подробно описание</label>
<textarea class="ckEditor" name="<?= $ts ?>_description"><?= $model->{$ts . '_description'} ?></textarea>
</div>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/objects') ?>
</div>
<?php endif; ?>
</form>
</div>
<script src="/_public/assets/js/search-box.js"></script>
<script>
const
categorySearchBox = new SearchBox('#category_search_box'),
objectTypeSearchBox = new SearchBox('#object_type_search_box')
objectTypeSearchBox.updateFromObject({
searchBox: categorySearchBox,
url: '/api/object-templates/',
queryId: 'sc_id',
data: {id: 'id', name: 'name'}
})
</script>
@@ -0,0 +1,37 @@
<?php
use app\models\Projects;
use app\models\register\Partner;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var Projects $model
*/
$ts = $_GET['tab'];
?>
<div class="inner-content p10">
<form autocomplete="off">
<div class="row c5 top15">
<label class="require">Заглавие</label>
<input name="<?= $ts ?>_title" placeholder="Въведи заглавие на проекта" value="<?= $model->{$ts.'_title'} ?>"/>
</div>
<div class="row c9 top15">
<label class="require">Пълен текст (на английски)</label>
<textarea class="ckEditor" name="<?= $ts ?>_text"><?= $model->{$ts. '_text'} ?></textarea>
</div>
<div class="row c9 top15">
<label>Кратък текст (на английски)</label>
<textarea class="ckEditor" name="<?= $ts ?>_text_short"><?= $model->{ $ts. '_text_short'} ?></textarea>
</div>
<div class="row c9 top15">
<label>Договор (на английски)</label>
<textarea class="ckEditor" name="<?= $ts ?>_text_contract"><?= $model->{$ts. '_text_contract'} ?></textarea>
</div>
<div class="row c9 top30 flex">
<?= Includes::formButtons('web-portal/projects') ?>
</div>
</form>
</div>
@@ -0,0 +1,29 @@
<?php
use app\models\RegisterObjects;
use app\widgets\services\Includes;
/**
* @var RegisterObjects $model
*/
$ts = $_GET['tab']
?>
<div class="inner-content p10 preview-mode">
<!-- EDIT -->
<div class="row top15 c5">
<label>Име на обекта</label>
<div><?= $model->{$ts . '_name'} ?></div>
</div>
<div class="row top15 c7">
<label>Анотация</label>
<div><?= $model->{$ts . '_annotation'} ?></div>
</div>
<div class="row top15 c7">
<label>Кратко описание</label>
<div><?= $model->{$ts . '_short_description'} ?></div>
</div>
<div class="row top15 c7">
<label>Подробно описание</label>
<div><?= $model->{$ts . '_description'} ?></div>
</div>
</div>
@@ -0,0 +1,46 @@
<?php
use app\models\Slides;
use app\widgets\FileWidget;
use app\widgets\services\Includes;
/**
* @var Slides $model
*/
$ts = $_GET['tab']
?>
<?php if (!empty($_GET['listtab']) && in_array($_GET['listtab'], ['home_page'])): ?>
<div class="inner-content p10">
<form autocomplete="off">
<p class="upload-info">За вътрешни страници въвеждайте url адрес без домейн например: /news/ на английски</p>
<div class="c8 row">
<label><i class="lg lg-en"></i> Английски</label>
<div class="flex row row-panel">
<div class="row c6 right10">
<label class="require">Заглавие</label>
<input name="<?= $ts ?>_title" placeholder="Въведи заглавие"
value="<?= $model->{$ts . '_title'} ?>"/>
</div>
<div class="row c6">
<label>Url адрес</label>
<input name="<?= $ts ?>_relation" placeholder="Въведи url адрес"
value="<?= $model->{$ts . '_relation'} ?>"/>
</div>
</div>
<div class="row top15">
<label class="require">Текст</label>
<textarea name="<?= $ts ?>_text" class="ckEditor"><?= $model->{$ts . '_text'} ?></textarea>
</div>
</div>
<?php if (empty($_GET['id'])): ?>
<input name="type" type="hidden" value="<?= $_GET['listtab'] ?>">
<?php endif; ?>
<div class="row c9 top15 flex">
<?= Includes::formButtons('web-portal/slider/?listtab=' . $_GET['listtab']) ?>
</div>
</form>
</div>
<?php endif; ?>
<script src="/_public/assets/js/order.js"></script>
<script src="/_public/assets/js/file-img.js"></script>
<script src="/_public/plugins/cropperJs/cropper.min.js"></script>
@@ -0,0 +1,34 @@
<?php
use app\models\Translation;
use app\widgets\FormWidget;
$_GET['o'] = 'w';
FormWidget::widget([
'top' => [
'title' => 'Статични преводи',
'title_edit' => 'Редакция на статични преводи',
'data' => [
'index/dashboard' => 'Начало',
'web-portal/expositions' => 'Уеб портал'
],
],
'writeView' => "web-portal/tabs/main/translations_w",
'model' => Translation::class,
'validation' => function ($p) {
},
'postService' => function ($p, Translation $model) {
$model->setPostDataToModel();
if (isset($p->{'name'}) && $p->name == 'null')
$model->name = null;
if (isset($p->{'name_en'}) && $p->name_en == 'null')
$model->name_en = null;
$model->save();
echo json_encode(['id' => $model->id]);
exit;
}
]);