Initial import
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
header('Content-type: application/json');
|
||||
use app\models\UserPublic;
|
||||
use app\services\JWT;
|
||||
|
||||
$post = \Yii::$app->request->getRawBody();
|
||||
$postDecode = json_decode($post);
|
||||
|
||||
|
||||
if (!empty($postDecode->device_id) && !empty($postDecode->uid)) {
|
||||
$device_id = $postDecode->device_id;
|
||||
$uid = $postDecode->uid;
|
||||
$user = UserPublic::find()->where(['device_id' => $device_id])->one();
|
||||
if ($user) {
|
||||
$decode = JWT::decode($user->device_id, JWT::SECRET_KEY);
|
||||
if($decode->uid == $uid) {
|
||||
$user->is_mobile_user = 1;
|
||||
$user->save();
|
||||
echo json_encode(['userToken' => JWT::encode(['id' => $user->id], JWT::SECRET_KEY), 'profile'=> $user->profileData()]);
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
echo json_encode(['error' => 'wrong_user']);
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
echo json_encode(['error' => 'wrong_user']);
|
||||
exit;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
header('Content-type: application/json');
|
||||
use app\models\UserPublic;
|
||||
use app\services\JWT;
|
||||
|
||||
$post = \Yii::$app->request->getRawBody();
|
||||
$postDecode = json_decode($post);
|
||||
if (!empty($postDecode->email) && !empty($postDecode->password)) {
|
||||
$email = $postDecode->email;
|
||||
$password = $postDecode->password;
|
||||
$user = UserPublic::find()->where(['email' => $email])->one();
|
||||
|
||||
|
||||
if(!empty($_GET['partner'])) {
|
||||
if(sizeof($user->qrValidators) == 0) {
|
||||
echo json_encode(['error' => 'wrong_user']);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
//echo json_encode(['email' => $user->email, 'password' => password_verify($password, $user->password_hash), 'hash' => $user->password_hash]);
|
||||
//exit;
|
||||
if ($user && password_verify($password, $user->password_hash)) {
|
||||
$user->is_mobile_user = 1;
|
||||
$user->save();
|
||||
echo json_encode(['userToken' => JWT::encode(['id' => $user->id], JWT::SECRET_KEY), 'profile'=> $user->profileData()]);
|
||||
exit;
|
||||
} else {
|
||||
echo json_encode(['error' => 'wrong_user']);
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
echo json_encode(['error' => 'wrong_user']);
|
||||
exit;
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
use app\models\Articles;
|
||||
use app\services\Formatter;
|
||||
use app\services\ViewReg;
|
||||
|
||||
$data = [];
|
||||
if (!empty($_GET['id'])) {
|
||||
$lg = \Yii::$app->language;
|
||||
|
||||
$condition = [];
|
||||
//$condition['is_active'] = 1;
|
||||
$condition['id'] = $_GET['id'];
|
||||
$articles = Articles::find()->where($condition);
|
||||
|
||||
$article = $articles->one();
|
||||
|
||||
$favorite = false;
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
if ($user) {
|
||||
$favoriteExists = \app\models\UserFavorites::find()->where(['user_id' => $user->id, 'table' => 'articles', 'fid' => $_GET['id']])->exists();
|
||||
if ($favoriteExists)
|
||||
$favorite = true;
|
||||
}
|
||||
|
||||
if ($article && $article->article) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $article->title_en ?? $article->title : $article->title;
|
||||
$model->text = strip_tags($article->article->text());
|
||||
$model->type = 'articles';
|
||||
$model->images = $article->article->images('16:11');
|
||||
$model->img = $article->article->image('16:11') ?? \Yii::$app->params['portal'] . '/_public/images/empty-169.png';
|
||||
$model->isFavorite = $favorite;
|
||||
if ($article->art_table == 'campaigns') {
|
||||
$model->date = $article->campaigns->getFormattedDates();
|
||||
$model->location = $lg == 'en' ? $article->campaigns->ts_en_location : $article->campaigns->location;
|
||||
}
|
||||
if ($article->art_table == 'events') {
|
||||
$model->date = $article->events->getFormattedDates();
|
||||
$model->dates = explode(',', $article->events->event_dates);
|
||||
if ($article->events->type == 'booking') {
|
||||
$model->bookingAvailable = $article->events->isBookingAvailable();
|
||||
$model->event_id = $article->events->id;
|
||||
$slug = Formatter::cyrillicTrans($article->article->title());
|
||||
$model->booking_url = Yii::$app->params['portal'] . '/' . $lg . '/sabitia/' . Formatter::encodeId($article->id) . "-$slug/?booking=true&webview_mode=true";
|
||||
if (!empty($_GET['tickets'])) {
|
||||
$tickets = \app\models\OrderBooking::find()->where(['event_id' => $article->events->id])->all();
|
||||
|
||||
$ticketGroups = [];
|
||||
$all_tickets_count = 0;
|
||||
$all_validated = 0;
|
||||
foreach ($tickets as $ticketGroup) {
|
||||
if(empty($ticketGroups[$ticketGroup->ticket_id])) {
|
||||
$ticketGroups[$ticketGroup->ticket_id] = [
|
||||
'count' => $ticketGroup->tickets_count,
|
||||
'name' => $lg == 'en' ? $ticketGroup->name_en : $ticketGroup->name_bg,
|
||||
'validated_count' => $ticketGroup->validated_count
|
||||
];
|
||||
} else {
|
||||
$ticketGroups[$ticketGroup->ticket_id]['count'] += $ticketGroup->tickets_count;
|
||||
$ticketGroups[$ticketGroup->ticket_id]['validated_count'] += $ticketGroup->validated_count;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($ticketGroups as $group) {
|
||||
$all_tickets_count += $group['count'];
|
||||
$all_validated += $group['validated_count'];
|
||||
}
|
||||
$model->tickets = array_values($ticketGroups);
|
||||
$model->total_tickets = $all_tickets_count;
|
||||
$model->total_validated = $all_validated;
|
||||
}
|
||||
}
|
||||
|
||||
$model->location = $lg == 'en' ? $article->events->ts_en_location : $article->events->location;
|
||||
}
|
||||
if ($article->art_table == 'news') {
|
||||
$model->date = date('d.m.Y', strtotime($article->publish_date));
|
||||
}
|
||||
|
||||
|
||||
$model->id = $article->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
}
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data]);
|
||||
exit;
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
use app\models\Articles;
|
||||
|
||||
$lg = \Yii::$app->language;
|
||||
|
||||
$articles = Articles::find();
|
||||
|
||||
$data = [];
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$per_page = 10;
|
||||
$condition = ['and'];
|
||||
//$condition['is_active'] = 1;
|
||||
if (!empty($_GET['type']) && $_GET['type'] != 'default')
|
||||
$condition[] = ['=', 'art_table', $_GET['type']];
|
||||
//region [Articles]
|
||||
|
||||
if (!empty($_GET['token'])) {
|
||||
/** @var \app\models\UserPublic $user */
|
||||
$user = \app\services\Auth::getUserByToken($_GET['token']);
|
||||
if ($user) {
|
||||
$partner_ids = [];
|
||||
foreach ($user->qrValidators as $qrValidator) {
|
||||
$partner_ids[] = $qrValidator->partner_id;
|
||||
}
|
||||
if (sizeof($partner_ids) > 0) {
|
||||
$articles->innerJoinWith('events');
|
||||
|
||||
$condition[] = ['=', 'type', 'booking'];
|
||||
$condition[] = ['IN', 'events.partner_id', $partner_ids];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
$articles->where($condition);
|
||||
|
||||
$articles->orderBy(['publish_date' => SORT_DESC])
|
||||
->offset($page * $per_page - $per_page)->limit($per_page);
|
||||
|
||||
$count = $articles->count();
|
||||
$lastPage = ceil($count / $per_page);
|
||||
|
||||
foreach ($articles->all() as $article) {
|
||||
if ($article->article) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $article->title_en ?? $article->title : $article->title;
|
||||
$model->type = $article->art_table;
|
||||
$model->img = $article->article->image() ?? \Yii::$app->params['portal'] . '/_public/images/empty-169.png';
|
||||
$model->id = $article->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
}
|
||||
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data, 'lastPage' => $lastPage, 'count' => $count]);
|
||||
exit;
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
|
||||
use app\models\register\Fields;
|
||||
use app\models\register\FieldsValuesRelations;
|
||||
use app\services\JR;
|
||||
|
||||
$parent_id = $_GET['parent_value_id'];
|
||||
$id = 1;
|
||||
|
||||
$levels = [];
|
||||
|
||||
//field_type: 1 - specific, 2 - general, 3 - category
|
||||
|
||||
$fieldsValuesRelations = FieldsValuesRelations::find()->where(['parent_value_id' => $parent_id])->all();
|
||||
|
||||
$ids = [];
|
||||
foreach ($fieldsValuesRelations as $fieldsValuesRelation) {
|
||||
if ($fieldsValuesRelation->child_field_id != 0)
|
||||
$ids[] = $fieldsValuesRelation->child_field_id;
|
||||
}
|
||||
|
||||
$fields = Fields::find()->where(['IN', 'id', $ids])->andWhere(['lib_type' => 1])->all();
|
||||
|
||||
foreach ($fields as $field) {
|
||||
//type: 1-dropdown, 2-text
|
||||
if ($field->type == 1) {
|
||||
$options = [];
|
||||
foreach ($field->fieldsValues as $option) {
|
||||
$options[] = ['id' => $option->id, 'name' => $lg == 'en' ? $option->name_en : $option->name];
|
||||
}
|
||||
$levels[] = ['parent_id' => $parent_id, 'dropdown' => $_GET['dropdown'], 'id' => $parent_id . "_" . $id++, 'label' => $field->getNameByLocale(), 'type' => 'select', 'name' => 'name_id_' . $field->id, 'options' => $options, 'dynamic' => true];
|
||||
} else {
|
||||
$levels[] = ['parent_id' => $parent_id, 'dropdown' => $_GET['dropdown'], 'id' => $parent_id . "_" . $id++, 'label' => $field->getNameByLocale(), 'type' => 'input', 'name' => 'name_text_' . $field->id];
|
||||
}
|
||||
}
|
||||
|
||||
JR::message(JR::done, ['levels' => $levels]);
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
|
||||
use app\models\register\Fields;
|
||||
use app\services\JR;
|
||||
|
||||
$translateModule = [
|
||||
'object_name' => [
|
||||
'bg' => 'Име на обект',
|
||||
'en' => 'Object name'
|
||||
],
|
||||
'object_creator' => [
|
||||
'bg' => 'Създател на обект',
|
||||
'en' => 'Object creator'
|
||||
],
|
||||
'year' => [
|
||||
'bg' => 'Година',
|
||||
'en' => 'Year'
|
||||
]
|
||||
];
|
||||
|
||||
$id = 1;
|
||||
|
||||
$levels = [
|
||||
['id' => $id++, 'label' => $translateModule['object_name'][$lg], 'type' => 'input', 'name' => 'object_name'],
|
||||
['id' => $id++, 'label' => $translateModule['object_creator'][$lg], 'type' => 'input', 'name' => 'object_creator'],
|
||||
['id' => $id++, 'label' => $translateModule['year'][$lg], 'type' => 'input-range', 'name' => 'year'],
|
||||
];
|
||||
|
||||
|
||||
|
||||
|
||||
//field_type: 1 - specific, 2 - general, 3 - category
|
||||
$specificFields = Fields::find()->where(['lib_type' => 1, 'field_type' => 2])->andWhere(['>', 'level', 0])->all();
|
||||
foreach ($specificFields as $field) {
|
||||
//type: 1-dropdown, 2-text
|
||||
if($field->type == 1) {
|
||||
$options = [];
|
||||
foreach ($field->fieldsValues as $option) {
|
||||
$options[] = ['id' => $option->id, 'name' => $lg == 'en' ? $option->name_en : $option->name];
|
||||
}
|
||||
$levels[] = ['id' => $id++, 'label' => $field->getNameByLocale(), 'type' => 'select', 'name' => 'name_id_' . $field->id, 'options' => $options, 'dynamic' => false];
|
||||
} else {
|
||||
$levels[] = ['id' => $id++, 'label' => $field->getNameByLocale(), 'type' => 'input', 'name' => 'name_text_' . $field->id];
|
||||
}
|
||||
}
|
||||
|
||||
$categories = Fields::find()->where(['lib_type' => 1, 'field_type' => 3])->andWhere(['>', 'level', 0])->all();
|
||||
foreach ($categories as $field) {
|
||||
//type: 1-dropdown, 2-text
|
||||
if($field->type == 1) {
|
||||
$options = [];
|
||||
foreach ($field->fieldsValues as $option) {
|
||||
$options[] = ['id' => $option->id, 'name' => $lg == 'en' ? $option->name_en : $option->name];
|
||||
}
|
||||
$levels[] = ['id' => $id++, 'label' => $field->getNameByLocale(), 'type' => 'select', 'name' => 'name_id_' . $field->id, 'options' => $options, 'dynamic' => true];
|
||||
} else {
|
||||
$levels[] = ['id' => $id++, 'label' => $field->getNameByLocale(), 'type' => 'input', 'name' => 'name_text_' . $field->id];
|
||||
}
|
||||
}
|
||||
|
||||
$tags = \app\models\register\Tags::find()->all();
|
||||
$tagsParser = [];
|
||||
foreach ($tags as $tag) {
|
||||
$text = $lg == 'en' ? ($tag->text_en ?? $tag->text) : $tag->text;
|
||||
$tagsParser[] = ['id' => $tag->id, 'name' => $text];
|
||||
}
|
||||
JR::message(JR::done, ['levels' => $levels, 'tags' => $tagsParser]);
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
$data = [];
|
||||
$favorite = false;
|
||||
|
||||
|
||||
if (!empty($_GET['id'])) {
|
||||
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
if($user) {
|
||||
$favoriteExists = \app\models\UserFavorites::find()->where(['user_id' => $user->id, 'table' => 'collections', 'fid' => $_GET['id']])->exists();
|
||||
if($favoriteExists)
|
||||
$favorite = true;
|
||||
}
|
||||
$lg = \Yii::$app->language;
|
||||
|
||||
$condition = [];
|
||||
$condition = ['and'];
|
||||
$condition[] = ['=', 'active', 1];
|
||||
$condition[] = ['=', 'published', 1];
|
||||
$condition[] = ['=', 'id', $_GET['id']];
|
||||
|
||||
$collections = \app\models\register\Collections::find()->where($condition);
|
||||
$collection = $collections->one();
|
||||
if ($collection) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $collection->name_en ?? $collection->name : $collection->name;
|
||||
$model->type = 'collections';
|
||||
$model->text = strip_tags($collection->textDescription());
|
||||
$model->img = $collection->getImg(\Yii::$app->params['portal'] . '/_public/images/empty-169.png');
|
||||
$model->id = $collection->id;
|
||||
$model->isFavorite = $favorite;
|
||||
$model->items = [];
|
||||
|
||||
foreach ($collection->collectionsObjects as $collectionsObject) {
|
||||
|
||||
$object = $collectionsObject->object;
|
||||
$item = new stdClass();
|
||||
$item->id = $object->id;
|
||||
$item->title = $object->getTitle();
|
||||
$item->image = $object->getImg();
|
||||
$model->items[] = $item;
|
||||
}
|
||||
$data[] = $model;
|
||||
}
|
||||
}
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data]);
|
||||
exit;
|
||||
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
use app\models\register\Collections;
|
||||
use app\models\register\CollectionsObjects;
|
||||
use app\models\register\Fields;
|
||||
use app\models\register\ObjectTags;
|
||||
use app\models\RegisterObjects;
|
||||
|
||||
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
$per_page = 10;
|
||||
$page = $_GET['page'] ?? 1;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @var \yii\web\View $this
|
||||
*/
|
||||
|
||||
if (!empty($_GET['advance_filter']) || !empty($_GET['tags'])) {
|
||||
|
||||
$objects = RegisterObjects::find();
|
||||
$objects = $objects->select('register_objects.ref_num')->where(['lib_type' => 1]);
|
||||
|
||||
$conditionOr = ['or'];
|
||||
|
||||
|
||||
//[ FILTER BY NAME ]
|
||||
if (!empty($_GET['object_name'])) {
|
||||
$conditionOr[] = ['LIKE', 'name', $_GET['object_name']];
|
||||
$conditionOr[] = ['LIKE', 'ts_en_name', $_GET['object_name']];
|
||||
}
|
||||
|
||||
|
||||
//[ FILTER BY CREATOR ]
|
||||
if (!empty($_GET['created_by'])) {
|
||||
$conditionOr[] = ['=', 'created_by', $_GET['created_by']];
|
||||
}
|
||||
|
||||
$conditionAnd = ['and'];
|
||||
|
||||
//[ FILTER BY YEAR FROM ]
|
||||
if (!empty($_GET['year_from'])) {
|
||||
$conditionAnd[] = ['>=', 'created_year', $_GET['year_from']];
|
||||
}
|
||||
|
||||
//[ FILTER BY YEAR TO ]
|
||||
if (!empty($_GET['year_to'])) {
|
||||
$conditionAnd[] = ['<=', 'created_year', $_GET['year_to']];
|
||||
}
|
||||
|
||||
//region [FILTER BY OBJECT FIELDS]
|
||||
$fields = Fields::find()->where(['lib_type' => 1, 'active' => 1, 'deleted' => 0])->all();
|
||||
$objectFieldIdArray = [];
|
||||
$objectFieldValueTextArray = [];
|
||||
|
||||
foreach ($fields as $field) {
|
||||
if (!empty($_GET['name_id_' . $field->id]))
|
||||
$objectFieldIdArray[] = $_GET['name_id_' . $field->id];
|
||||
if (!empty($_GET['name_text_' . $field->id]))
|
||||
$objectFieldValueTextArray[] = $_GET['name_text_' . $field->id];
|
||||
}
|
||||
|
||||
if (sizeof($objectFieldIdArray) > 0 || sizeof($objectFieldValueTextArray) > 0) {
|
||||
$objects = $objects->joinWith('registerObjectFields');
|
||||
}
|
||||
|
||||
if(sizeof($objectFieldIdArray) > 0) {
|
||||
$conditionOr[] = ['IN', 'value_id', $objectFieldIdArray];
|
||||
}
|
||||
|
||||
if(sizeof($objectFieldValueTextArray) > 0) {
|
||||
foreach ($objectFieldValueTextArray as $value) {
|
||||
$conditionOr[] = ['=', 'value_text', $value];
|
||||
}
|
||||
}
|
||||
$objectIds = [];
|
||||
|
||||
if($conditionOr != ['or'] || $conditionAnd != ['and']) {
|
||||
$objects = $objects->andWhere($conditionOr ?? [])->andWhere($conditionAnd ?? [])->all();
|
||||
foreach ($objects as $object) {
|
||||
$objectIds[] = $object->ref_num;
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($_GET['tags'])) {
|
||||
$tags = explode('_', $_GET['tags']);
|
||||
$objectTags = ObjectTags::find()->where(['IN', 'tag_id', $tags])->andWhere(['active' => 1, 'deleted' => 0])->all();
|
||||
foreach ($objectTags as $objectTag) {
|
||||
if(!in_array($objectTag->object_id, $objectIds)) {
|
||||
$objectIds[] = $objectTag->object_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$collectionObjectConditionAnd = ['and'];
|
||||
$collectionObjectConditionAnd[] = ['IN', 'object_id', $objectIds];
|
||||
$collectionObjectConditionAnd[] = ['=', 'deleted', 0];
|
||||
$collectionObjectConditionAnd[] = ['=', 'active', 1];
|
||||
$collectionObjectConditionAnd[] = ['=', 'published', 1];
|
||||
|
||||
if (!empty($_GET['partner_id']))
|
||||
$collectionObjectConditionAnd[] = ['=', 'partner_id', $_GET['partner_id']];
|
||||
|
||||
$collectionObjectConditionOr = ['or'];
|
||||
$collectionObjectConditionOr[] = ['IS', 'is_payable', NULL];
|
||||
$collectionObjectConditionOr[] = ['=', 'is_payable', 0];
|
||||
|
||||
$collectionObjects = CollectionsObjects::find()->joinWith('collection')
|
||||
->where($collectionObjectConditionOr)
|
||||
->andWhere($collectionObjectConditionAnd)
|
||||
->groupBy('collection_id');
|
||||
|
||||
$count = $collectionObjects->count();
|
||||
if ($count <= $per_page) $page = 1;
|
||||
$collectionObjects->offset($per_page * $page - $per_page)->limit($per_page);
|
||||
|
||||
if (!empty($_GET['order_title'])) {
|
||||
$collectionObjects = $collectionObjects->orderBy([$_GET['order_title'] => SORT_ASC]);
|
||||
} else {
|
||||
$collectionObjects = $collectionObjects->orderBy(['id' => SORT_DESC]);
|
||||
}
|
||||
//region DISPLAY DATA
|
||||
$count = $collectionObjects->count();
|
||||
$data = [];
|
||||
/** @var CollectionsObjects $collectionObject */
|
||||
foreach ($collectionObjects->all() as $collectionObject) {
|
||||
$model = new \stdClass();
|
||||
|
||||
$collection = $collectionObject->collection;
|
||||
|
||||
$model->title = $lg == 'en' ? ($collection->name_en ?? $collection->name) : $collection->name;
|
||||
$model->type = 'collection';
|
||||
$model->img = $collection->getImg(\Yii::$app->params['portal'] . '/_public/images/empty-169.png');
|
||||
$model->id = $collection->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data, 'lastPage' => ceil($count/$per_page), 'count' => $count]);
|
||||
//endregion
|
||||
} else {
|
||||
$collections = Collections::find()->where(['or', ['=', 'is_payable', 0], ['IS', 'is_payable', null]])
|
||||
->andWhere(['deleted' => 0, 'active' => 1, 'published' => 1]);
|
||||
if (!empty($_GET['partner_id'])) {
|
||||
$collections = $collections->andWhere(['partner_id' => $_GET['partner_id']]);
|
||||
}
|
||||
$collections = $collections->offset($per_page * $page - $per_page)->limit($per_page);
|
||||
|
||||
$count = $collections->count();
|
||||
|
||||
|
||||
$data = [];
|
||||
foreach ($collections->all() as $collection) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $collection->name_en ?? $collection->name : $collection->name;
|
||||
$model->type = 'collection';
|
||||
$model->img = $collection->getImg(\Yii::$app->params['portal'] . '/_public/images/empty-169.png');
|
||||
$model->id = $collection->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data, 'lastPage' => ceil($count/$per_page), 'count' => $count]);
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
use app\models\UserExplorerObjects;
|
||||
use app\services\Auth;
|
||||
|
||||
$user = Auth::getUserByToken();
|
||||
if($user) {
|
||||
header('Content-type: application/json');
|
||||
$body = json_decode(Yii::$app->request->getRawBody());
|
||||
if($body->id)
|
||||
$explorerObject = \app\models\ExplorerObjects::findOne($body->id);
|
||||
$userExplorerObject = UserExplorerObjects::find()->where(['user_id' => $user->id, 'explorer_object_id' => $body->id])->one();
|
||||
if(!$userExplorerObject) {
|
||||
$userExplorerObject = new UserExplorerObjects();
|
||||
$userExplorerObject->user_id = $user->id;
|
||||
$userExplorerObject->explorer_object_id = $body->id;
|
||||
$userExplorerObject->date_visit = date('Y-m-d H:i:s');
|
||||
$userExplorerObject->save();
|
||||
echo json_encode(['visit' => 'success', 'points' => $explorerObject->points]);
|
||||
} else {
|
||||
echo json_encode(['visit' => 'visited', 'points' => $explorerObject->points]);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
echo json_encode(['error' => 'User not authenticated']);
|
||||
exit;
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
use app\services\GeoService;
|
||||
|
||||
$lat = $_GET['lat'] ?? 42.698334;
|
||||
$lon = $_GET['lon'] ?? 23.319941;
|
||||
$dist = $_GET['dist'] ?? 50;
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
$nearest = GeoService::getNearestObjects($lat, $lon, $dist);
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => GeoService::orderList($nearest)]);
|
||||
exit;
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
$lat = $_GET['lat'] ?? 42.698334;
|
||||
$lon = $_GET['lon'] ?? 23.319941;
|
||||
$dist = $_GET['dist'] ?? 50;
|
||||
?>
|
||||
<link rel="stylesheet" href="<?= Yii::$app->params['portal'] ?>/_public/plugins/leafletjs/leaflet.css">
|
||||
<script src="<?= Yii::$app->params['portal'] ?>/_public/plugins/leafletjs/leaflet.js"></script>
|
||||
<style>
|
||||
#map {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.leaflet-left {
|
||||
right: 10px;
|
||||
left: auto;
|
||||
}
|
||||
.leaflet-control-attribution.leaflet-control a {
|
||||
display: none;
|
||||
}
|
||||
.leaflet-control-container {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<div id="map"></div>
|
||||
|
||||
<script>
|
||||
let lang = '<?= Yii::$app->language ?>'
|
||||
let host = '<?= Yii::$app->params['portal'] ?>'
|
||||
let addedPoints = [];
|
||||
let mapOptions = {
|
||||
center: [<?=$lat ?>, <?= $lon ?>],
|
||||
zoom: 13
|
||||
}
|
||||
let map = new L.map('map', mapOptions);
|
||||
let layer = new L.TileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png');
|
||||
map.addLayer(layer);
|
||||
let marker = new L.Marker([<?=$lat?>, <?= $lon?>]);
|
||||
marker.addTo(map);
|
||||
|
||||
let icon = L.icon({
|
||||
iconUrl: '/_public/plugins/leafletjs/images/pin-b.png',
|
||||
iconSize: [40, 40]
|
||||
});
|
||||
let iconBlue = L.icon({
|
||||
iconUrl: '/_public/plugins/leafletjs/images/point-blue.png',
|
||||
iconSize: [30, 30]
|
||||
});
|
||||
|
||||
marker.setIcon(icon)
|
||||
|
||||
function addPoints() {
|
||||
const xhr = new XMLHttpRequest()
|
||||
xhr.open('get', `${host}/${lang}/remote/get-nearest-objects/?lat=<?= $lat ?>&lon=<?= $lon ?>&dist=<?= $dist ?>&explorer=1`)
|
||||
if(addedPoints.length > 0) {
|
||||
addedPoints.forEach(pointToDelete => {
|
||||
map.removeLayer(pointToDelete)
|
||||
})
|
||||
}
|
||||
xhr.responseType = 'json';
|
||||
xhr.onload = function () {
|
||||
if (xhr.response) {
|
||||
const points = xhr.response;
|
||||
points.forEach(p => {
|
||||
if (p.latitude !== '<?= $lat?>' && p.longitude !== '<?= $lon?>') {
|
||||
let point = new L.Marker([p.latitude, p.longitude]);
|
||||
point.setIcon(iconBlue)
|
||||
point.addTo(map);
|
||||
addedPoints.push(point)
|
||||
point.addEventListener('click', () => {
|
||||
window.parent.postMessage(JSON.stringify(p), '*');
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
xhr.send();
|
||||
}
|
||||
setTimeout(function () {
|
||||
addPoints()
|
||||
}, 50)
|
||||
</script>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use app\services\JR;
|
||||
$lg = Yii::$app->language;
|
||||
|
||||
$translateModule = [
|
||||
'object_name' => [
|
||||
'bg' => 'Име на обект',
|
||||
'en' => 'Object name'
|
||||
],
|
||||
'category' => [
|
||||
'bg' => 'Категория',
|
||||
'en' => 'Category'
|
||||
],
|
||||
];
|
||||
|
||||
$tags = \app\models\ExpositionsTags::find()->all();
|
||||
$tagsParser = [];
|
||||
foreach ($tags as $tag) {
|
||||
$text = $lg == 'en' ? ($tag->name_en ?? $tag->name) : $tag->name;
|
||||
$tagsParser[] = ['id' => $tag->id, 'name' => $text];
|
||||
}
|
||||
$id = 0;
|
||||
$categories = \app\models\ExpositionsCategories::find()->all();
|
||||
$options = [];
|
||||
foreach ($categories as $category) {
|
||||
$options[] = ['id' => $category->id, 'name' => $category->title()];
|
||||
}
|
||||
$levels[] = ['id' => $id++, 'label' => $translateModule['category'][$lg], 'type' => 'select', 'name' => 'category', 'options' => $options, 'dynamic' => false];
|
||||
|
||||
JR::message(JR::done, ['levels' => $levels, 'tags' => $tagsParser]);
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
use app\models\Articles;
|
||||
use app\models\Expositions;
|
||||
if(empty($_GET['id']))
|
||||
exit;
|
||||
$lg = Yii::$app->language;
|
||||
$favorite = false;
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
if($user) {
|
||||
$favoriteExists = \app\models\UserFavorites::find()->where(['user_id' => $user->id, 'table' => 'expositions', 'fid' => $_GET['id']])->exists();
|
||||
if($favoriteExists)
|
||||
$favorite = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @var \yii\web\View $this
|
||||
*/
|
||||
?>
|
||||
|
||||
<?php
|
||||
|
||||
$condition = [];
|
||||
|
||||
$condition['is_active'] = 1;
|
||||
$condition['id'] = $_GET['id'];
|
||||
|
||||
$exposition = Expositions::find()->where($condition)->one();
|
||||
|
||||
$data = [];
|
||||
$model = new \stdClass();
|
||||
$model->title = $exposition->title();
|
||||
$model->type = 'expositions';
|
||||
$model->text = $exposition->textDescription();
|
||||
$model->img = $exposition->getImg();
|
||||
|
||||
$model->images = $exposition->imagesObjectArray();
|
||||
$model->id = $exposition->id;
|
||||
$model->isFavorite = $favorite;
|
||||
$model->items = [];
|
||||
|
||||
foreach ($exposition->objectList as $collectionsObject) {
|
||||
$object = $collectionsObject->object;
|
||||
$item = new stdClass();
|
||||
$item->id = $object->id;
|
||||
$item->title = $object->getTitle();
|
||||
$item->image = $object->getImg(\Yii::$app->params['portal']. '/_public/images/empty-169.png');
|
||||
$model->items[] = $item;
|
||||
}
|
||||
$data[] = $model;
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data]);
|
||||
exit;
|
||||
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
use app\models\Articles;
|
||||
use app\models\Expositions;
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
$per_page = 10;
|
||||
$page = $_GET['page'] ?? 1
|
||||
/**
|
||||
* @var \yii\web\View $this
|
||||
*/
|
||||
?>
|
||||
|
||||
<?php
|
||||
|
||||
$condition = [];
|
||||
|
||||
$condition['is_active'] = 1;
|
||||
|
||||
$expositions = Expositions::find()->where($condition);
|
||||
|
||||
$expositions = $expositions->offset($per_page * $page - $per_page)->limit($per_page);
|
||||
|
||||
if (!empty($_GET['category']))
|
||||
$expositions = $expositions->andWhere(['category_id' => $_GET['category']]);
|
||||
|
||||
if (!empty($_GET['tags'])) {
|
||||
$tags = explode('_', $_GET['tags']);
|
||||
if (sizeof($tags) > 0)
|
||||
$expositions->joinWith('expositionTags')->andWhere(['IN', 'exposition_tag_id', $tags]);
|
||||
}
|
||||
$count = $expositions->count();
|
||||
$expositions->orderBy(['publish_date' => SORT_DESC]);
|
||||
$data = [];
|
||||
foreach ($expositions->all() as $exposition) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $exposition->title();
|
||||
$model->type = 'exposition';
|
||||
$model->img = $exposition->getImg();
|
||||
$model->id = $exposition->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data, 'lastPage' => ceil($count/$per_page), 'count' => $count]);
|
||||
exit;
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
|
||||
use app\models\Expositions;
|
||||
use app\models\register\Collections;
|
||||
use app\models\RegisterObjects;
|
||||
use app\models\UserFavorites;
|
||||
use app\models\Articles;
|
||||
|
||||
header('Content-type: application/json');
|
||||
|
||||
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
|
||||
if($user) {
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
|
||||
$per_page = 10;
|
||||
|
||||
if (!empty($_GET['type'])) {
|
||||
|
||||
$page = $_GET['page'] ?? 1;
|
||||
|
||||
$fav = UserFavorites::find()->where(['user_id' => $user->id, 'table' => $_GET['type']])->all();
|
||||
$ids = [];
|
||||
|
||||
foreach ($fav as $f)
|
||||
$ids[] = $f->fid;
|
||||
|
||||
switch ($_GET['type']):
|
||||
case 'collections':
|
||||
$data = [];
|
||||
$models = Collections::find()->where(['IN', 'id', $ids]);
|
||||
$count = $models->count();
|
||||
$models = $models->offset($per_page * $page - $per_page)->limit($per_page);
|
||||
foreach ($models->all() as $dbModel) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $dbModel->name_en ?? $dbModel->name : $dbModel->name;
|
||||
$model->type = 'collections';
|
||||
$model->path = '/tabs/search/collection';
|
||||
$model->img = $dbModel->getImg(\Yii::$app->params['portal'] . '/_public/images/empty-169.png');
|
||||
$model->id = $dbModel->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
echo json_encode(['data' => $data, 'lastPage' => ceil($count / $per_page), 'count' => $count]);
|
||||
exit;
|
||||
|
||||
case 'expositions':
|
||||
$data = [];
|
||||
$models = Expositions::find()->where(['IN', 'id', $ids]);
|
||||
$count = $models->count();
|
||||
$models = $models->offset($per_page * $page - $per_page)->limit($per_page);
|
||||
foreach ($models->all() as $dbModel) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $dbModel->ts_en_name ?? $dbModel->name : $dbModel->name;
|
||||
$model->type = 'expositions';
|
||||
$model->path = '/tabs/search/exposition';
|
||||
$model->img = $dbModel->getImg();
|
||||
$model->id = $dbModel->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
echo json_encode(['data' => $data, 'lastPage' => ceil($count / $per_page), 'count' => $count]);
|
||||
exit;
|
||||
|
||||
case 'register_objects':
|
||||
$data = [];
|
||||
$models = RegisterObjects::find()->where(['lib_type' => 1])->andWhere(['IN', 'id', $ids]);
|
||||
$count = $models->count();
|
||||
$models = $models->offset($per_page * $page - $per_page)->limit($per_page);
|
||||
foreach ($models->all() as $dbModel) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $dbModel->ts_en_name ?? $dbModel->name : $dbModel->name;
|
||||
$model->type = 'register_objects';
|
||||
$model->path = '/tabs/search/object';
|
||||
$model->img = $dbModel->getImg(\Yii::$app->params['portal'] . '/_public/images/empty-169.png');
|
||||
$model->id = $dbModel->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
echo json_encode(['data' => $data, 'lastPage' => ceil($count / $per_page), 'count' => $count]);
|
||||
exit;
|
||||
|
||||
|
||||
case 'articles':
|
||||
$data = [];
|
||||
$models = Articles::find()->andWhere(['IN', 'id', $ids]);
|
||||
$count = $models->count();
|
||||
$models = $models->offset($per_page * $page - $per_page)->limit($per_page);
|
||||
foreach ($models->all() as $dbModel) {
|
||||
$model = new \stdClass();
|
||||
$model->title = $lg == 'en' ? $dbModel->title_en ?? $dbModel->title : $dbModel->title;
|
||||
$model->type = $dbModel->art_table;
|
||||
$model->path = '/tabs/articles/' . $dbModel->art_table;
|
||||
$model->img = ($dbModel->getArticle()->image('16:11') ? $dbModel->getArticle()->image('16:11') : \Yii::$app->params['portal'] . '/_public/images/empty-169.png');
|
||||
$model->id = $dbModel->id;
|
||||
$data[] = $model;
|
||||
}
|
||||
echo json_encode(['data' => $data, 'lastPage' => ceil($count / $per_page), 'count' => $count]);
|
||||
exit;
|
||||
|
||||
endswitch;
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode(['error' => 1, 'message' => 'Permission denied']);
|
||||
exit;
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
header('Content-type: application/json');
|
||||
|
||||
use app\models\UserPublic;
|
||||
use app\services\JWT;
|
||||
|
||||
$post = \Yii::$app->request->getRawBody();
|
||||
|
||||
|
||||
$postDecode = json_decode($post);
|
||||
|
||||
if(!empty($postDecode->uid)) {
|
||||
|
||||
function loop($postDecode)
|
||||
{
|
||||
|
||||
if (!$postDecode->uid) return;
|
||||
$server_id = md5(time() . uniqid());
|
||||
$uid = $postDecode->uid;
|
||||
$token = JWT::encode(['server_id' => $server_id, 'uid' => $uid], JWT::SECRET_KEY);
|
||||
$user = UserPublic::find()->where(['device_id' => $token])->exists();
|
||||
if (!$user) {
|
||||
echo json_encode(['device_id' => $token]);
|
||||
exit;
|
||||
} else {
|
||||
loop($postDecode);
|
||||
}
|
||||
}
|
||||
|
||||
loop($postDecode);
|
||||
}
|
||||
exit;
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
|
||||
/** @var \app\models\UserPublic $user */
|
||||
$user = \app\services\Auth::getUserByToken($_GET['token']);
|
||||
if ($user) {
|
||||
$partner_ids = [];
|
||||
foreach ($user->qrValidators as $qrValidator) {
|
||||
$partner_ids[] = $qrValidator->partner_id;
|
||||
}
|
||||
if (sizeof($partner_ids) > 0) {
|
||||
//$articles->innerJoinWith('events');
|
||||
|
||||
$events = \app\models\Events::find();
|
||||
|
||||
$condition = ['and'];
|
||||
$condition[] = ['=', 'type', 'booking'];
|
||||
$condition[] = ['IN', 'partner_id', $partner_ids];
|
||||
$events->where($condition);
|
||||
$data = [];
|
||||
foreach ($events->all() as $event) {
|
||||
$data[] = [
|
||||
'id' => $event->id,
|
||||
'name' => $event->title(),
|
||||
'date' => date('d.m.Y', strtotime($event->event_dates))];
|
||||
}
|
||||
|
||||
echo json_encode(['data' => $data]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use app\services\Auth;
|
||||
use app\services\JR;
|
||||
|
||||
/** @var \app\models\UserPublic $user */
|
||||
//$user = Auth::getUserByToken();
|
||||
$user = \app\models\UserPublic::findOne(34);
|
||||
if(!$user)
|
||||
JR::message(JR::not_authenticated);
|
||||
|
||||
|
||||
JR::message(JR::done, ['profile' => $user->profileData()]);
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
use app\models\Expositions;
|
||||
use app\models\Positions;
|
||||
use app\models\register\Collections;
|
||||
use app\services\JR;
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
$sliderPositions = Positions::findOne(70);
|
||||
$whatsNewPositions = Positions::find()->where(['id' => 1])->one();
|
||||
$collections = Collections::find()->where(['is_selected' => 1, 'deleted' => 0])->all();
|
||||
$expositions = Expositions::find()->where(['is_active' => 1, 'is_selected' => 1])->all();
|
||||
|
||||
$pos = function ($incomingPosition) use ($lg) {
|
||||
$items = [];
|
||||
/** @var Positions $position */
|
||||
foreach ($incomingPosition->positions as $position) {
|
||||
if ($position->articleModel) {
|
||||
$items[] = (object)[
|
||||
'id' => $position->articleModel->id,
|
||||
'img' => $position->articleModel->article->image('16:11'),
|
||||
'title' => $position->articleModel->{'title' . ($lg == 'en' ? '_en' : '')},
|
||||
'type' => $position->articleModel->art_table
|
||||
];
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
};
|
||||
|
||||
$coll = function ($inc) use ($lg) {
|
||||
$items = [];
|
||||
/** @var Collections | Expositions $item */
|
||||
foreach ($inc as $item) {
|
||||
$items[] = (object)[
|
||||
'id' => $item->id,
|
||||
'img' => $item->getImg(),
|
||||
'title' => $item->title()
|
||||
];
|
||||
}
|
||||
return $items;
|
||||
};
|
||||
|
||||
|
||||
JR::message(JR::done, ['obj' => [
|
||||
'slides' => $pos($sliderPositions),
|
||||
'whats_new' => $pos($whatsNewPositions),
|
||||
'collections' => $coll($collections),
|
||||
'expositions' => $coll($expositions)
|
||||
]]);
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
use app\models\TourObjects;
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
$id = $_GET['id'];
|
||||
|
||||
$model = TourObjects::findOne($id);
|
||||
/* @var $this \yii\web\View */
|
||||
if (!$model) exit;
|
||||
$htmlText = $lg == 'en' ? $model->text_en : $model->text;
|
||||
$text = preg_replace('#<a.*?>([^>]*)</a>#i', '$1', $htmlText);
|
||||
/** @var \app\models\register\Partner $partner */
|
||||
$partner = null;
|
||||
if($model->partner_id)
|
||||
$partner = \app\models\register\Partner::findOne($model->partner_id);
|
||||
?>
|
||||
<style>
|
||||
.info-map-box .title {
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
color: var(--color-main);
|
||||
padding-bottom: 5px;
|
||||
|
||||
}
|
||||
|
||||
.info-map-box .body {
|
||||
height: 200px;
|
||||
overflow-y: scroll;
|
||||
padding-right: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.info-map-box .body::-webkit-scrollbar {
|
||||
width: 3px;
|
||||
}
|
||||
|
||||
.info-map-box .body::-webkit-scrollbar-track {
|
||||
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.info-map-box .body::-webkit-scrollbar-thumb {
|
||||
background-color: darkgrey;
|
||||
outline: 1px solid slategrey;
|
||||
}
|
||||
|
||||
.info-map-box .body p {
|
||||
text-align: left !important;
|
||||
}
|
||||
</style>
|
||||
<div class="info-map-box">
|
||||
<div class="title"><?= $lg == 'en' ? $model->name_en : $model->name ?></div>
|
||||
<div class="body">
|
||||
<?= $text ?>
|
||||
</div>
|
||||
<?php if($partner): ?>
|
||||
<div style="margin-top: 10px">
|
||||
<a href="<?= $partner->getUrl() ?>"><?= $lg == 'en' ? "To the website" : 'Към уебсайта'?></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
use app\services\IdServer;
|
||||
use app\services\JWT;
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
|
||||
$object = \app\models\RegisterObjects::findOne($_GET['id']);
|
||||
$data = [];
|
||||
if ($object) {
|
||||
$favorite = false;
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
if ($user) {
|
||||
$favoriteExists = \app\models\UserFavorites::find()->where(['user_id' => $user->id, 'table' => 'register_objects', 'fid' => $_GET['id']])->exists();
|
||||
if ($favoriteExists)
|
||||
$favorite = true;
|
||||
}
|
||||
|
||||
$item = new stdClass();
|
||||
$item->id = $object->id;
|
||||
$item->title = $object->getTitle();
|
||||
$item->text = $object->getLongText();
|
||||
$item->image = $object->getMainImgFile(\Yii::$app->params['portal'] . '/_public/images/empty-169.png');
|
||||
$item->type = 'register_objects';
|
||||
$item->isFavorite = $favorite;
|
||||
$item->images = [];
|
||||
foreach ($object->images(\Yii::$app->params['portal'] . '/_public/images/empty-169.png') as $index => $image) {
|
||||
$item->images[] = [
|
||||
'id' => ($index + 1),
|
||||
'img' => $image
|
||||
];
|
||||
}
|
||||
$item->docs = [];
|
||||
$item->videos = [];
|
||||
$item->models = [];
|
||||
$docs = $object->getPdfDocuments();
|
||||
$videos = $object->getVideoList();
|
||||
$models3d = $object->get3DModelList();
|
||||
if ($videos && sizeof($videos)) {
|
||||
foreach ($videos as $v) {
|
||||
$id = JWT::encode(['id' => $v->id], JWT::SECRET_KEY);
|
||||
$item->videos[] = [
|
||||
'id' => $v->id,
|
||||
'thumb' => IdServer::getVideoThumb($v->id),
|
||||
'url' => Yii::$app->params['media_server'] . '/media/play-mobile/' . $id . '/'
|
||||
];
|
||||
}
|
||||
}
|
||||
if ($models3d && sizeof($models3d) > 0) {
|
||||
foreach ($models3d as $v) {
|
||||
$id = JWT::encode(['id' => $v->id], JWT::SECRET_KEY);
|
||||
$item->models[] = [
|
||||
'id' => $v->id,
|
||||
//'thumb' => IdServer::getVideoThumb($v->id),
|
||||
'title' => $v->video_title ?? ($lg == 'en' ? '3D model' : '3D модел'),
|
||||
'url' => Yii::$app->params['media_server'] . '/api/render-model/' . $id . '/?lg=' . $lg
|
||||
];
|
||||
}
|
||||
}
|
||||
foreach ($docs as $doc) {
|
||||
$id = JWT::encode(['id' => $doc->id], JWT::SECRET_KEY);
|
||||
$item->docs[] = [
|
||||
'img' => $item->image,
|
||||
'url' => Yii::$app->params['portal'] . '/file-system/file-preview-delivery/' . $id . '/'
|
||||
];
|
||||
}
|
||||
$data[] = $item;
|
||||
}
|
||||
|
||||
header('Content-type: application/json');
|
||||
echo json_encode(['data' => $data]);
|
||||
exit;
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
use app\models\Order;
|
||||
use app\services\JR;
|
||||
|
||||
if (empty($_GET['id'])) exit;
|
||||
|
||||
$id = $_GET['id'];
|
||||
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
//$user = \app\models\UserPublic::findOne(34);
|
||||
$lg = Yii::$app->language;
|
||||
$data = [];
|
||||
if ($user) {
|
||||
$per_page = 10;
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$orders = Order::find()->where(['user_id' => $user->id, 'id' => $id])->offset($per_page * $page - $per_page)->orderBy(['id' => SORT_DESC]);
|
||||
|
||||
$count = $orders->count();
|
||||
foreach ($orders->all() as $order) {
|
||||
|
||||
$paying = $order->payment;
|
||||
//$booking = $order->booking;
|
||||
//$event = $booking && $booking->event ? $booking->event->title() : '';
|
||||
$booking = [];
|
||||
foreach ($order->booking as $ticket) {
|
||||
$booking[] = $ticket->responseData();
|
||||
}
|
||||
$default = $booking[0] ?? null;
|
||||
$event = null;
|
||||
if (!empty($booking[0])) {
|
||||
$event = [
|
||||
'name' => $booking[0]['event'],
|
||||
'img' => $booking[0]['event_img'],
|
||||
];
|
||||
}
|
||||
|
||||
$status = [
|
||||
'PAID' => [
|
||||
'bg' => 'Платено',
|
||||
'en' => 'Paid'
|
||||
],
|
||||
'PENDING' => [
|
||||
'bg' => 'Изчаква се плащане',
|
||||
'en' => 'Payment pending'
|
||||
]
|
||||
];
|
||||
|
||||
$item = [
|
||||
'id' => $order->id,
|
||||
'price' => $order->total_price,
|
||||
'date' => $order->order_date,
|
||||
'status' => $paying->status == 'PAID' ? ($status['PAID'][$lg]) : $status['PENDING'][$lg],
|
||||
'booking' => $booking,
|
||||
];
|
||||
if ($event) {
|
||||
$item['event'] = $event;
|
||||
}
|
||||
$data[] = $item;
|
||||
}
|
||||
|
||||
JR::message(JR::done, ['data' => $data, 'lastPage' => ceil($count / $per_page), 'count' => $count]);
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
|
||||
use app\models\Order;
|
||||
use app\services\JR;
|
||||
|
||||
//$user = \app\services\Auth::getUserByToken();
|
||||
$user = \app\models\UserPublic::findOne(34);
|
||||
$lg = Yii::$app->language;
|
||||
$data = [];
|
||||
if ($user) {
|
||||
$per_page = 10;
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$event_ids = [];
|
||||
|
||||
|
||||
if ($user) {
|
||||
$events = \app\models\Events::find();
|
||||
$partner_ids = [];
|
||||
foreach ($user->qrValidators as $qrValidator) {
|
||||
$partner_ids[] = $qrValidator->partner_id;
|
||||
}
|
||||
if (sizeof($partner_ids) > 0) {
|
||||
//$articles->innerJoinWith('events');
|
||||
|
||||
$condition = ['and'];
|
||||
$condition[] = ['=', 'type', 'booking'];
|
||||
$condition[] = ['IN', 'partner_id', $partner_ids];
|
||||
|
||||
$events->where($condition);
|
||||
|
||||
|
||||
|
||||
foreach ($events->all() as $event) {
|
||||
$event_ids[] = $event->id;
|
||||
}
|
||||
}
|
||||
if(!empty($_GET['event_id'])) {
|
||||
$event_ids = [$_GET['event_id']];
|
||||
}
|
||||
if(!empty($_GET['article_id'])) {
|
||||
$article = \app\models\Articles::findOne($_GET['article_id']);
|
||||
if($article) {
|
||||
$event_id = $article->article->id();
|
||||
if($event_id) {
|
||||
$event_ids = [$event_id];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$orders = Order::find()->joinWith('booking')->where(['IN', 'event_id', $event_ids]);
|
||||
|
||||
if(!empty($_GET['order_number'])) {
|
||||
$orders->andWhere(['id' => $_GET['order_number']]);
|
||||
}
|
||||
$orders->offset($per_page * $page - $per_page)->orderBy(['id' => SORT_DESC]);
|
||||
|
||||
$count = $orders->count();
|
||||
foreach ($orders->all() as $order) {
|
||||
|
||||
$paying = $order->payment;
|
||||
//$booking = $order->booking;
|
||||
//$event = $booking && $booking->event ? $booking->event->title() : '';
|
||||
$booking = [];
|
||||
foreach ($order->booking as $ticket) {
|
||||
$count = $ticket->tickets_count;
|
||||
|
||||
$booking[] = [
|
||||
'id' => $ticket->id,
|
||||
'ticket_type' => $ticket->{'name_' . $lg},
|
||||
'event' => $ticket->event->title(),
|
||||
'event_img' => $ticket->event->image('16:11'),
|
||||
'single_price' => $ticket->single_price,
|
||||
'datetime' => $ticket->formatedHtmlDate(),
|
||||
'hashed_id' => $ticket->getHashedId(),
|
||||
'tickets_count' => $count
|
||||
];
|
||||
}
|
||||
$default = $booking[0] ?? null;
|
||||
$event = null;
|
||||
if (!empty($booking[0])) {
|
||||
$event = [
|
||||
'name' => $booking[0]['event'],
|
||||
'img' => $booking[0]['event_img'],
|
||||
];
|
||||
}
|
||||
|
||||
$status = [
|
||||
'PAID' => [
|
||||
'bg' => 'Платено',
|
||||
'en' => 'Paid'
|
||||
],
|
||||
'PENDING' => [
|
||||
'bg' => 'Изчаква се плащане',
|
||||
'en' => 'Payment pending'
|
||||
]
|
||||
];
|
||||
|
||||
$item = [
|
||||
'id' => $order->id,
|
||||
'price' => $order->total_price,
|
||||
'date' => date('d.m.Y H:i', strtotime($order->order_date)),
|
||||
'status' => $paying->status == 'PAID' ? ($status['PAID'][$lg]) : $status['PENDING'][$lg],
|
||||
'booking' => $booking,
|
||||
];
|
||||
if ($event) {
|
||||
$item['event'] = $event;
|
||||
}
|
||||
$data[] = $item;
|
||||
}
|
||||
|
||||
JR::message(JR::done, ['data' => $data, 'lastPage' => ceil($count / $per_page), 'count' => $count]);
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
use app\models\Order;
|
||||
use app\services\JR;
|
||||
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
//$user = \app\models\UserPublic::findOne(34);
|
||||
$lg = Yii::$app->language;
|
||||
$data = [];
|
||||
if ($user) {
|
||||
$per_page = 10;
|
||||
$page = $_GET['page'] ?? 1;
|
||||
$orders = Order::find()->where(['user_id' => $user->id])->offset($per_page * $page - $per_page)->orderBy(['id' => SORT_DESC]);
|
||||
|
||||
$count = $orders->count();
|
||||
foreach ($orders->all() as $order) {
|
||||
|
||||
$paying = $order->payment;
|
||||
//$booking = $order->booking;
|
||||
//$event = $booking && $booking->event ? $booking->event->title() : '';
|
||||
$booking = [];
|
||||
foreach ($order->booking as $ticket) {
|
||||
$count = $ticket->tickets_count;
|
||||
|
||||
$booking[] = [
|
||||
'id' => $ticket->id,
|
||||
'ticket_type' => $ticket->{'name_' . $lg},
|
||||
'event' => $ticket->event->title(),
|
||||
'event_img' => $ticket->event->image('16:11'),
|
||||
'single_price' => $ticket->single_price,
|
||||
'datetime' => $ticket->formatedHtmlDate(),
|
||||
'hashed_id' => $ticket->getHashedId(),
|
||||
'tickets_count' => $count
|
||||
];
|
||||
}
|
||||
$default = $booking[0] ?? null;
|
||||
$event = null;
|
||||
if (!empty($booking[0])) {
|
||||
$event = [
|
||||
'name' => $booking[0]['event'],
|
||||
'img' => $booking[0]['event_img'],
|
||||
];
|
||||
}
|
||||
|
||||
$status = [
|
||||
'PAID' => [
|
||||
'bg' => 'Платено',
|
||||
'en' => 'Paid'
|
||||
],
|
||||
'PENDING' => [
|
||||
'bg' => 'Изчаква се плащане',
|
||||
'en' => 'Payment pending'
|
||||
]
|
||||
];
|
||||
|
||||
$item = [
|
||||
'id' => $order->id,
|
||||
'price' => $order->total_price,
|
||||
'date' => $order->order_date,
|
||||
'status' => $paying->status == 'PAID' ? ($status['PAID'][$lg]) : $status['PENDING'][$lg],
|
||||
'booking' => $booking,
|
||||
];
|
||||
if ($event) {
|
||||
$item['event'] = $event;
|
||||
}
|
||||
$data[] = $item;
|
||||
}
|
||||
|
||||
JR::message(JR::done, ['data' => $data, 'lastPage' => ceil($count / $per_page), 'count' => $count]);
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use app\models\OrderBooking;
|
||||
use app\services\JR;
|
||||
|
||||
$g = $_GET;
|
||||
$event_id = $_GET['event_id'] ?? null;
|
||||
$ticket_token = $_GET['ticket_token'] ?? null;
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
if($event_id && $user) {
|
||||
$booking = OrderBooking::getBookingByHashId($ticket_token);
|
||||
if($event_id != $booking->event_id) {
|
||||
JR::message(JR::error, ['wrong_event' => 1]);
|
||||
}
|
||||
if(empty($_GET['validated_count'])) {
|
||||
if ($booking->validated_count < $booking->tickets_count) {
|
||||
JR::message(JR::done, $booking->responseData());
|
||||
} else {
|
||||
JR::message(JR::done, $booking->responseData());
|
||||
}
|
||||
} else {
|
||||
$count = $booking->validated_count ?? 0;
|
||||
$booking->validated_count = $count + $_GET['validated_count'];
|
||||
$booking->last_validation_time = date('Y-m-d H:i:s');
|
||||
$booking->save();
|
||||
JR::message(JR::done, ['ready' => 1]);
|
||||
}
|
||||
} else {
|
||||
JR::message(JR::not_authenticated);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
header('Content-type: application/json');
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
|
||||
|
||||
if($user) {
|
||||
$jsonData = Yii::$app->request->getRawBody();
|
||||
$data = json_decode($jsonData);
|
||||
|
||||
|
||||
if($data->status) {
|
||||
$user->club_card = $data->status == 'active' ? 1 : null;
|
||||
$user->save();
|
||||
}
|
||||
echo json_encode(['success'=> 1, 'profile' => $user->profileData()]);
|
||||
exit;
|
||||
}
|
||||
echo json_encode(['error' => 1, 'message' => 'Permission denied']);
|
||||
exit;
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
header('Content-type: application/json');
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
|
||||
|
||||
if($user) {
|
||||
$jsonData = Yii::$app->request->getRawBody();
|
||||
$data = json_decode($jsonData);
|
||||
|
||||
|
||||
if($data->isFavorite == true) {
|
||||
$favorite = new \app\models\UserFavorites();
|
||||
$favorite->user_id = $user->id;
|
||||
$favorite->fid = $data->id;
|
||||
$favorite->table = $data->type;
|
||||
$favorite->date_added = date('Y-m-d H:i:s');
|
||||
$favorite->save();
|
||||
} else {
|
||||
$favorite = \app\models\UserFavorites::find()->where(['user_id' => $user->id, 'fid' => $data->id, 'table' => $data->type])->one();
|
||||
if($favorite) {
|
||||
$favorite->delete();
|
||||
}
|
||||
}
|
||||
echo json_encode(['success'=> 1]);
|
||||
exit;
|
||||
}
|
||||
echo json_encode(['error' => 1, 'message' => 'Permission denied']);
|
||||
exit;
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
echo $_GET['ticket'] ?? 'ticket empty'
|
||||
?>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
use app\models\UserExplorerObjects;
|
||||
use app\services\JR;
|
||||
use app\services\Auth;
|
||||
|
||||
$lang = Yii::$app->language;
|
||||
$user = \app\services\Auth::getUserByToken();
|
||||
|
||||
$per_page = 20;
|
||||
$page = $_GET['page'] ?? 1;
|
||||
|
||||
|
||||
/* @var $this \yii\web\View */
|
||||
|
||||
|
||||
if (!$user)
|
||||
JR::message(JR::not_authenticated);
|
||||
|
||||
|
||||
$userExplorerObjects = UserExplorerObjects::find()->where(['user_id' => $user->id]);
|
||||
$count = $userExplorerObjects->count();
|
||||
|
||||
$userExplorerObjects = $userExplorerObjects->limit($per_page)->offset($per_page*$page - $per_page)->orderBy(['date_visit' => SORT_DESC])->all();
|
||||
|
||||
$data = [];
|
||||
|
||||
foreach ($userExplorerObjects as $ueo) {
|
||||
if($ueo->explorerObject && $ueo->explorerObject->tourObject) {
|
||||
$tourObject = $ueo->explorerObject->tourObject;
|
||||
$data[] = (object)['name' => $lang == 'en' ? $tourObject->name_en : $tourObject->name,
|
||||
'points' => $ueo->explorerObject->points,
|
||||
'img' => $ueo->explorerObject->getSrcOfSingleImage('explorer_object_image', '1:1'),
|
||||
'date' => $ueo->date_visit ? date('d.m.Y', strtotime($ueo->date_visit)) : ''
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
JR::message(JR::done, ['data' => $data, 'lastPage' => ceil($count/$per_page), 'count' => $count]);
|
||||
Reference in New Issue
Block a user