Files
register/marko_unpacked/marko/cms/views/partner/website/events.php
T
Admin Nasledstvo ac168868ee Initial import
2026-05-01 20:52:04 +03:00

218 lines
9.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
$tab = $_GET['tab'] ?? 'main';
$partnerUser = Auth::userPartner();
$actions = [
'edit' => 'Редакция на събитие',
'delete' => 'Изтриване на събитие',
'new' => 'Ново събитие'
];
$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' => [
[
'event_dates' => ['Дата', 'c2 fDatepicker'],
'title' => ['Заглавие на събитието', 'c4'],
'is_for_publish' => ['В публ. портал', 'c2', [1 => 'да', 'null' => 'не']],
'is_active' => ['Публикувано', 'c2', [1 => 'да', 'null' => 'не']]
],
],
'top' => [
'title' => 'Събития',
'data' => [
'index/dashboard' => 'Начало',
'website/expositions' => 'Уеб портал',
]
],
'actions' => $actions,
'th' => [
'№' => 'c1 text-right',
'Заглавие' => 'c3',
'Вид събитие' => '',
'Достъп' => 'c0 ct',
'Дати на събитието' => 'c1',
'Партньор' => 'c2',
'История' => 'c0 ct',
'В страница на партньор' => 'c1 ct',
'В публ. портал' => 'c1 ct',
'Публикувано на публ. портал' => 'c1 ct',
'В избрани' => 'c0 ct'
],
'data' => Events::find()->where(Yii::$app->getFilterData('or'))->andWhere(['partner_id' => $partnerUser->partner_id])->orderBy(['id' => SORT_DESC])->loop([
'id',
function (Events $model) {
return '<a href="?o=w&id=' . $model->id . '">' . $model->title . '</a>';
},
function (Events $model) {
return str_replace('събитие', '', Events::eventTypes($model->type));
},
function (Events $model) {
//simple online booking
$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-table="events" data-id="' . $model->id . '" class="la la-history historyButton"></i>';
},
function (Events $model) {
return $model->statusSwitch('on_partner_page', null, ['Събитието е публикувано в сайта на партньора', 'Събитието е махнато от сайта на партньора'], null, 'events');
},
function (Events $model) {
return $model->statusSwitch('is_for_publish', null, ['Събитието е готово за публикуване', 'Събитието все още не е готово за публикуване']);
},
function (Events $model) {
return $model->is_active ? '<span style="color: green">да (' . $model->formatDate($model->publish_date) . ')</span>' : '<span style="color: darkred">не</span>';
},
function (Events $model) {
return $model->statusSwitch('partner_page_selected', null, ['Събитието е добавено в избрани', 'Събитието е добавено в избрани'], null, 'events');
},
], $_GET['p'] ?? 1, 30)
]);
FormWidget::widget([
'top' => [
'title' => 'Ново събитие' . $typeTitle,
'title_edit' => 'Редакция на събитие' . $typeTitle,
'data' => [
'index/dashboard' => 'Начало',
'website/expositions' => 'Уебпортал',
'website/events' => 'Събития'
],
],
'tabs' => $tabs ?? [],
'writeView' => empty($_GET['id']) && empty($_GET['type']) ? "website/default/events_w" : "website/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->{"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) use ($partnerUser) {
$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;
}
}
}
if ($partnerUser)
$model->partner_id = $partnerUser->partner_id;
$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::userPartner()->getFullName() . ' - Партньор', !empty($_GET['id']));
Yii::$app->flash('success', isset($_GET['id']) ? 'Събитието е актуализирано успешно' : 'Събитието е създадено успешно');
$model->smartRedirect();
}
]);