Initial import
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
echo $this->render('/_mobile_view_mode');
|
||||
use app\models\Ts;
|
||||
|
||||
if(!empty($_GET['webview_mode'])) {
|
||||
if(empty($_SESSION['token']) ) {
|
||||
if(!empty($_GET['token'])) {
|
||||
$_SESSION['token'] = $_GET['token'];
|
||||
header('Location: ?booking=true&webview_mode=true');
|
||||
exit;
|
||||
} else {
|
||||
header('Location: /bg/mobile-api/browser-close/');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @var \app\models\Articles $model ;
|
||||
*/
|
||||
/** @var \app\models\Events $event */
|
||||
$event = $model->getArticle();
|
||||
if ($event->type == 'booking'): ?>
|
||||
<input id="error-msg-1" type="hidden" value="<?= Ts::get(177)?>">
|
||||
<input id="error-msg-2" type="hidden" value="<?= Ts::get(178) ?>">
|
||||
<input id="event_id" type="hidden" value="<?= $event->id ?>">
|
||||
<div class="content">
|
||||
<div class="main-profile-panel top50 open">
|
||||
<div class="header-toggle-panel text-uppercase ct static-header">
|
||||
<?= Ts::get(171) ?>
|
||||
</div>
|
||||
<div class="body booking-panel">
|
||||
<div class="title"><?= $event->title() ?></div>
|
||||
|
||||
<div class="flex flex-center ticket-row select-date-time">
|
||||
<div class="select-time">
|
||||
<select id="select-date">
|
||||
<option value=""><?= Ts::get(192) ?></option>
|
||||
<?php foreach ($event->eventDatesArray() as $date): ?>
|
||||
<option value="<?= $date ?>"><?= date_create($date)->format('d.m.Y') ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<i class="la la-calendar"></i>
|
||||
</div>
|
||||
<div class="select-time">
|
||||
<select id="select-time">
|
||||
<option value=""><?= Ts::get(193) ?></option>
|
||||
<?php foreach ($event->eventTimesArray() as $time): ?>
|
||||
<option value="<?= $time ?>"><?= $time ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<i class="la la-clock-o"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="top50"></div>
|
||||
<div class="ticket-row header flex mobile-hide">
|
||||
<div><?= Ts::get(172) ?></div>
|
||||
<div class="ct"><?= Ts::get(173) ?></div>
|
||||
<div class="ct"><?= Ts::get(174) ?></div>
|
||||
<div class="rt"><?= Ts::get(175) ?></div>
|
||||
</div>
|
||||
<?php
|
||||
/** @var \app\models\PriceObject $price_object */
|
||||
foreach ($event->price_objects as $price_object): ?>
|
||||
<div class="ticket-row ticket flex">
|
||||
<div class="ticket-label mobile-show"><?= Ts::get(172) ?></div>
|
||||
<div><?= $price_object->{'text_' . Yii::$app->language} ?></div>
|
||||
<div class="ticket-label mobile-show"><?= Ts::get(173) ?></div>
|
||||
<div class="flex flex-center no-padding">
|
||||
<div data-relate-btn="<?= $price_object->id ?>" onclick="booking.countDecrease(this)"
|
||||
class="counter-btn">-
|
||||
</div>
|
||||
<div data-cart="<?= $price_object->id ?>" data-relate-counter="<?= $price_object->id ?>" data-counter="0" class="counter">0</div>
|
||||
<div data-relate-btn="<?= $price_object->id ?>" onclick="booking.countIncrease(this)"
|
||||
class="counter-btn">+
|
||||
</div>
|
||||
</div>
|
||||
<div class="ticket-label mobile-show"><?= Ts::get(174) ?></div>
|
||||
<div data-relate-price="<?= $price_object->id ?>"
|
||||
data-price="<?= (double)$price_object->price ?>" class="ct"><?= $price_object->price ?> лв.
|
||||
</div>
|
||||
<div class="ticket-label mobile-show"><?= Ts::get(175) ?></div>
|
||||
<div data-realte-amount="<?= $price_object->id ?>" data-amount="0" class="rt"><span
|
||||
class="amount">0.00</span> лв.
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<div class="ticket-row header total flex">
|
||||
<div><?= Ts::get(100)?>:</div>
|
||||
<div class="ct"></div>
|
||||
<div class="ct"></div>
|
||||
<div data-total="0" class="rt"><span>0.00</span> лв.</div>
|
||||
</div>
|
||||
<div class="flex flex-center top25">
|
||||
<div onclick="<?= empty($_GET['webview_mode']) ? 'booking.pay(this)' : 'booking.pay(this, 1)' ?>" class="pay-btn"><i class="la la-shopping-cart"></i> <?= Ts::get(244)?></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<script src="/_public/assets/js/booking.js"></script>
|
||||
<script>
|
||||
const booking = new Booking();
|
||||
booking.default('<?= Yii::$app->language ?>')
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,369 @@
|
||||
|
||||
<link href="/_public/plugins/photoswipe/photoswipe.css" rel="stylesheet">
|
||||
<link href="/_public/plugins/photoswipe/default-skin/default-skin.css" rel="stylesheet">
|
||||
<style>
|
||||
.pswp img {
|
||||
max-width: none;
|
||||
object-fit: contain;
|
||||
}
|
||||
</style>
|
||||
<!-- Root element of PhotoSwipe. Must have class pswp. -->
|
||||
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
|
||||
<!-- Background of PhotoSwipe.
|
||||
It's a separate element as animating opacity is faster than rgba(). -->
|
||||
<div class="pswp__bg"></div>
|
||||
|
||||
<!-- Slides wrapper with overflow:hidden. -->
|
||||
<div class="pswp__scroll-wrap">
|
||||
|
||||
<!-- Container that holds slides.
|
||||
PhotoSwipe keeps only 3 of them in the DOM to save memory.
|
||||
Don't modify these 3 pswp__item elements, data is added later on. -->
|
||||
<div class="pswp__container">
|
||||
<div class="pswp__item"></div>
|
||||
<div class="pswp__item"></div>
|
||||
<div class="pswp__item"></div>
|
||||
</div>
|
||||
|
||||
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
|
||||
<div class="pswp__ui pswp__ui--hidden">
|
||||
|
||||
<div class="pswp__top-bar">
|
||||
|
||||
<!-- Controls are self-explanatory. Order can be changed. -->
|
||||
|
||||
<div class="pswp__counter"></div>
|
||||
<div id="pswp__title" style="color: #FFFFFF; position: absolute; width: 100%; top: 8px; text-align: center"></div>
|
||||
|
||||
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
|
||||
|
||||
<!--<button class="pswp__button pswp__button--share" title="Share"></button>-->
|
||||
|
||||
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
|
||||
|
||||
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
|
||||
|
||||
<!-- Preloader demo https://codepen.io/dimsemenov/pen/yyBWoR -->
|
||||
<!-- element will get class pswp__preloader--active when preloader is running -->
|
||||
<div class="pswp__preloader">
|
||||
<div class="pswp__preloader__icn">
|
||||
<div class="pswp__preloader__cut">
|
||||
<div class="pswp__preloader__donut"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
|
||||
<div class="pswp__share-tooltip"></div>
|
||||
</div>
|
||||
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
|
||||
</button>
|
||||
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
|
||||
</button>
|
||||
<div class="pswp__caption">
|
||||
<div class="pswp__caption__center" style="text-align: center"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/_public/plugins/photoswipe/photoswipe.min.js"></script>
|
||||
<script src="/_public/plugins/photoswipe/photoswipe-ui-default.min.js"></script>
|
||||
|
||||
<script>
|
||||
var initPhotoSwipeFromDOM = function (gallerySelector) {
|
||||
|
||||
var parseThumbnailElements = function (el) {
|
||||
var thumbElements = el.childNodes,
|
||||
numNodes = thumbElements.length,
|
||||
items = [],
|
||||
el,
|
||||
childElements,
|
||||
thumbnailEl,
|
||||
size,
|
||||
item;
|
||||
|
||||
for (var i = 0; i < numNodes; i++) {
|
||||
el = thumbElements[i];
|
||||
|
||||
// include only element nodes
|
||||
if (el.nodeType !== 1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
childElements = el.children;
|
||||
|
||||
size = el.getAttribute('data-size').split('x');
|
||||
|
||||
// create slide object
|
||||
item = {
|
||||
src: el.getAttribute('href'),
|
||||
w: parseInt(size[0], 10),
|
||||
h: parseInt(size[1], 10),
|
||||
author: el.getAttribute('data-author')
|
||||
};
|
||||
|
||||
item.el = el; // save link to element for getThumbBoundsFn
|
||||
|
||||
if (childElements.length > 0) {
|
||||
item.msrc = childElements[0].getAttribute('src'); // thumbnail url
|
||||
if (childElements.length > 1) {
|
||||
item.title = childElements[1].innerHTML; // caption (contents of figure)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var mediumSrc = el.getAttribute('data-med');
|
||||
if (mediumSrc) {
|
||||
size = el.getAttribute('data-med-size').split('x');
|
||||
// "medium-sized" image
|
||||
item.m = {
|
||||
src: mediumSrc,
|
||||
w: parseInt(size[0], 10),
|
||||
h: parseInt(size[1], 10)
|
||||
};
|
||||
}
|
||||
// original image
|
||||
item.o = {
|
||||
src: item.src,
|
||||
w: item.w,
|
||||
h: item.h
|
||||
};
|
||||
|
||||
item.title = el.getAttribute('data-title');
|
||||
|
||||
items.push(item);
|
||||
}
|
||||
|
||||
return items;
|
||||
};
|
||||
|
||||
// find nearest parent element
|
||||
var closest = function closest(el, fn) {
|
||||
return el && ( fn(el) ? el : closest(el.parentNode, fn) );
|
||||
};
|
||||
|
||||
var onThumbnailsClick = function (e) {
|
||||
e = e || window.event;
|
||||
e.preventDefault ? e.preventDefault() : e.returnValue = false;
|
||||
|
||||
var eTarget = e.target || e.srcElement;
|
||||
|
||||
var clickedListItem = closest(eTarget, function (el) {
|
||||
return el.tagName === 'A';
|
||||
});
|
||||
|
||||
if (!clickedListItem) {
|
||||
return;
|
||||
}
|
||||
|
||||
var clickedGallery = clickedListItem.parentNode;
|
||||
|
||||
var childNodes = clickedListItem.parentNode.childNodes,
|
||||
numChildNodes = childNodes.length,
|
||||
nodeIndex = 0,
|
||||
index;
|
||||
|
||||
for (var i = 0; i < numChildNodes; i++) {
|
||||
if (childNodes[i].nodeType !== 1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (childNodes[i] === clickedListItem) {
|
||||
index = nodeIndex;
|
||||
break;
|
||||
}
|
||||
nodeIndex++;
|
||||
}
|
||||
|
||||
if (index >= 0) {
|
||||
openPhotoSwipe(index, clickedGallery);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
var photoswipeParseHash = function () {
|
||||
var hash = window.location.hash.substring(1),
|
||||
params = {};
|
||||
|
||||
if (hash.length < 5) { // pid=1
|
||||
return params;
|
||||
}
|
||||
|
||||
var vars = hash.split('&');
|
||||
for (var i = 0; i < vars.length; i++) {
|
||||
if (!vars[i]) {
|
||||
continue;
|
||||
}
|
||||
var pair = vars[i].split('=');
|
||||
if (pair.length < 2) {
|
||||
continue;
|
||||
}
|
||||
params[pair[0]] = pair[1];
|
||||
}
|
||||
|
||||
if (params.gid) {
|
||||
params.gid = parseInt(params.gid, 10);
|
||||
}
|
||||
|
||||
return params;
|
||||
};
|
||||
|
||||
var openPhotoSwipe = function (index, galleryElement, disableAnimation, fromURL) {
|
||||
var pswpElement = document.querySelectorAll('.pswp')[0],
|
||||
gallery,
|
||||
options,
|
||||
items;
|
||||
|
||||
items = parseThumbnailElements(galleryElement);
|
||||
|
||||
// define options (if needed)
|
||||
options = {
|
||||
|
||||
galleryUID: galleryElement.getAttribute('data-pswp-uid'),
|
||||
|
||||
getThumbBoundsFn: function (index) {
|
||||
// See Options->getThumbBoundsFn section of docs for more info
|
||||
var thumbnail = items[index].el.children[0],
|
||||
pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
|
||||
rect = thumbnail.getBoundingClientRect();
|
||||
|
||||
return {x: rect.left, y: rect.top + pageYScroll, w: rect.width};
|
||||
},
|
||||
|
||||
addCaptionHTMLFn: function (item, captionEl, isFake) {
|
||||
if (!item.title) {
|
||||
captionEl.children[0].innerText = '';
|
||||
return false;
|
||||
}
|
||||
captionEl.children[0].innerHTML = item.title;
|
||||
return true;
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
||||
if (fromURL) {
|
||||
if (options.galleryPIDs) {
|
||||
// parse real index when custom PIDs are used
|
||||
// http://photoswipe.com/documentation/faq.html#custom-pid-in-url
|
||||
for (var j = 0; j < items.length; j++) {
|
||||
if (items[j].pid == index) {
|
||||
options.index = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
options.index = parseInt(index, 10) - 1;
|
||||
}
|
||||
} else {
|
||||
options.index = parseInt(index, 10);
|
||||
}
|
||||
|
||||
// exit if index not found
|
||||
if (isNaN(options.index)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var radios = document.getElementsByName('gallery-style');
|
||||
for (var i = 0, length = radios.length; i < length; i++) {
|
||||
if (radios[i].checked) {
|
||||
if (radios[i].id == 'radio-all-controls') {
|
||||
|
||||
} else if (radios[i].id == 'radio-minimal-black') {
|
||||
options.mainClass = 'pswp--minimal--dark';
|
||||
options.barsSize = {top: 0, bottom: 0};
|
||||
options.captionEl = false;
|
||||
options.fullscreenEl = false;
|
||||
options.shareEl = false;
|
||||
options.bgOpacity = 0.85;
|
||||
options.tapToClose = true;
|
||||
options.tapToToggleControls = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (disableAnimation) {
|
||||
options.history = false;
|
||||
options.focus = false;
|
||||
options.showAnimationDuration = 0;
|
||||
options.hideAnimationDuration = 0;
|
||||
}
|
||||
|
||||
// Pass data to PhotoSwipe and initialize it
|
||||
gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);
|
||||
|
||||
// see: http://photoswipe.com/documentation/responsive-images.html
|
||||
var realViewportWidth,
|
||||
useLargeImages = false,
|
||||
firstResize = true,
|
||||
imageSrcWillChange;
|
||||
|
||||
gallery.listen('beforeResize', function () {
|
||||
|
||||
var dpiRatio = window.devicePixelRatio ? window.devicePixelRatio : 1;
|
||||
dpiRatio = Math.min(dpiRatio, 2.5);
|
||||
realViewportWidth = gallery.viewportSize.x * dpiRatio;
|
||||
|
||||
|
||||
if (realViewportWidth >= 1200 || (!gallery.likelyTouchDevice && realViewportWidth > 800) || screen.width > 1200) {
|
||||
if (!useLargeImages) {
|
||||
useLargeImages = true;
|
||||
imageSrcWillChange = true;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (useLargeImages) {
|
||||
useLargeImages = false;
|
||||
imageSrcWillChange = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (imageSrcWillChange && !firstResize) {
|
||||
gallery.invalidateCurrItems();
|
||||
}
|
||||
|
||||
if (firstResize) {
|
||||
firstResize = false;
|
||||
}
|
||||
|
||||
imageSrcWillChange = false;
|
||||
|
||||
});
|
||||
|
||||
gallery.listen('gettingData', function (index, item) {
|
||||
if (useLargeImages) {
|
||||
item.src = item.o.src;
|
||||
item.w = item.o.w;
|
||||
item.h = item.o.h;
|
||||
} else {
|
||||
item.src = item.m.src;
|
||||
item.w = item.m.w;
|
||||
item.h = item.m.h;
|
||||
}
|
||||
});
|
||||
|
||||
gallery.init();
|
||||
};
|
||||
|
||||
// select all gallery elements
|
||||
var galleryElements = document.querySelectorAll(gallerySelector);
|
||||
for (var i = 0, l = galleryElements.length; i < l; i++) {
|
||||
galleryElements[i].setAttribute('data-pswp-uid', i + 1);
|
||||
galleryElements[i].onclick = onThumbnailsClick;
|
||||
}
|
||||
|
||||
// Parse URL and open gallery if it contains #&pid=3&gid=1
|
||||
var hashData = photoswipeParseHash();
|
||||
if (hashData.pid && hashData.gid) {
|
||||
openPhotoSwipe(hashData.pid, galleryElements[hashData.gid - 1], true, true);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
initPhotoSwipeFromDOM('.photoswipe-gallery')
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* @var \app\models\Events $model
|
||||
*/
|
||||
|
||||
use app\models\Ts;
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<?php if ($model->type == 'booking'): ?>
|
||||
<div class="article-site-bar">
|
||||
<div class="row font-bold"><?= Ts::get(105) ?>:</div>
|
||||
<div class="row">
|
||||
<div class="sub-row">
|
||||
<i class="la la-calendar"></i><?= Ts::get(106) ?>:<span
|
||||
class="font-bold left-15"><?= $model->getFormattedDates() ?></span>
|
||||
</div>
|
||||
<div class="sub-row">
|
||||
<i class="la la-clock"></i><?= Ts::get(107) ?>:<span
|
||||
class="font-bold left-15"><?= $model->daily_open_time ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row flex">
|
||||
<i class="la la-map-marker" style="margin-top: -5px"></i><?= Ts::get(108) ?>:<span
|
||||
class="font-bold left-15"><?= $model->getPlace() ?></span>
|
||||
</div>
|
||||
<?php if ($model->isBookingAvailable()): ?>
|
||||
<a href="?booking=1" class="row booking font-bold">
|
||||
<i class="la la-calendar-check"></i><?= Ts::get(109) ?>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<?php elseif ($model->type == 'online'): ?>
|
||||
<div class="article-site-bar">
|
||||
<div class="row font-bold"><?= Ts::get(110) ?>:</div>
|
||||
<div class="row">
|
||||
<div class="sub-row">
|
||||
<i class="la la-calendar"></i><?= Ts::get(106) ?>:<span
|
||||
class="font-bold left-15"><?= $model->getFormattedDates() ?></span>
|
||||
</div>
|
||||
<div class="sub-row">
|
||||
<i class="la la-clock"></i><?= Ts::get(107) ?>:<span
|
||||
class="font-bold left-15"><?= $model->daily_open_time ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row booking font-bold">
|
||||
<i class="la la-file-movie-o"></i><?= Ts::get(111) ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* @var \app\models\RegisterObjects $model
|
||||
*/
|
||||
|
||||
use app\models\Ts;
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
?>
|
||||
|
||||
<div class="flex top25">
|
||||
<i class="la la-folder-open-o"></i>
|
||||
<div class="row-info-object">
|
||||
<?php foreach ($model->registerObjectFields as $registerObjectField): ?>
|
||||
<div class="row-info">
|
||||
<?php if ($registerObjectField->field): ?>
|
||||
<?= $registerObjectField->field->{$lg == 'en' ? 'name_en' : 'name'} ?>
|
||||
<?php endif; ?>
|
||||
<?php if ($registerObjectField->fieldValue): ?>
|
||||
: <b><?= $registerObjectField->fieldValue->{$lg == 'en' ? 'name_en' : 'name'} ?></b>
|
||||
<?php else: ?>
|
||||
: <b><?= $registerObjectField->value_text ?></b>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php if ($model->created_year): ?>
|
||||
<div class="row-info"><?= Ts::get(250)?>: <b><?= $model->created_year ?></b></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($model->created_by): ?>
|
||||
<div class="row-info"><?= Ts::get(249)?>: <b><?= $model->created_by ?></b></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex top25">
|
||||
<i class="la la-map-marker"></i>
|
||||
<div class="row-info-object">
|
||||
<div class="row-info">
|
||||
<b><?= Ts::get(158) ?></b>
|
||||
</div>
|
||||
<div class="row-info">
|
||||
<?= Ts::get(159) ?>: <b><?= $model->city_id ? $model->city->name : Ts::get(161) ?></b>
|
||||
</div>
|
||||
<div class="row-info">
|
||||
<?= Ts::get(160) ?>: <b><?= $model->getAdmAddress() ?></b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if ($model->getAnyInfocenter(['name' => true, 'address' => true, 'email' => false, 'website' => false])): ?>
|
||||
<div class="flex top25">
|
||||
<i class="la la-info-circle"></i>
|
||||
<div class="row-info-object">
|
||||
<div class="row-info">
|
||||
<b><?= Ts::get(157) ?></b>
|
||||
</div>
|
||||
<?php if ($model->getInfocenter('name', true)): ?>
|
||||
<div class="row-info">
|
||||
<?= Ts::get(155) ?>: <b><?= $model->getInfocenter('name', true) ?></b>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($model->getInfocenter('address', true)): ?>
|
||||
<div class="row-info">
|
||||
<?= Ts::get(133) ?>: <b><?= $model->getInfocenter('address', true) ?></b>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($model->getInfocenter('email', false)): ?>
|
||||
<div class="row-info">
|
||||
Email: <b><?= $model->getInfocenter('email', false) ?></b>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($model->getInfocenter('website', false)): ?>
|
||||
<div class="row-info">
|
||||
<?= Ts::get(156) ?>: <b><?= $model->getInfocenter('website', false) ?></b>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
use app\models\Articles;
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
/**
|
||||
* @var int | null $partner_id
|
||||
*/
|
||||
|
||||
?>
|
||||
<div class="content">
|
||||
<div class="filter-buttons top50">
|
||||
<button data-filter="art_table=all"><?= Ts::get(5) ?></button>
|
||||
<button data-filter="art_table=news"><?= Ts::get(6) ?></button>
|
||||
<button data-filter="art_table=events"><?= Ts::get(7) ?></button>
|
||||
<button data-filter="art_table=campaigns"><?= Ts::get(8) ?></button>
|
||||
<button data-switch="order_title=title<?= $lg == 'en' ? '_en' : '' ?>"><?= Ts::get(9) ?></button>
|
||||
</div>
|
||||
<div class="top50"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="content-out" id="list-article"></div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
let articleFilter = {}
|
||||
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.search) {
|
||||
let serialize = atob(window.location.search.substr(1))
|
||||
try {
|
||||
articleFilter = JSON.parse(serialize)
|
||||
console.log(articleFilter);
|
||||
} catch (e) {
|
||||
console.log('Invalid query string');
|
||||
}
|
||||
}
|
||||
document.querySelector(`[data-filter="${articleFilter['art_table'] || 'art_table=all'}"]`).classList.add('active')
|
||||
let switcher = document.querySelector(`[data-switch="${articleFilter['switch_on'] || ''}"]`);
|
||||
if (switcher)
|
||||
switcher.classList.add('switch_on')
|
||||
filter();
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-filter]').forEach(button => {
|
||||
button.addEventListener('click', function () {
|
||||
const active = document.querySelector('[data-filter].active');
|
||||
active.classList.remove('active');
|
||||
button.classList.add('active');
|
||||
button.scrollIntoView()
|
||||
articleFilter['art_table'] = button.dataset.filter || null
|
||||
filter();
|
||||
})
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-switch]').forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
if (!button.classList.contains('switch_on')) {
|
||||
button.classList.add('switch_on')
|
||||
articleFilter['switch_on'] = button.dataset.switch
|
||||
} else {
|
||||
button.classList.remove('switch_on')
|
||||
articleFilter['switch_on'] = null
|
||||
}
|
||||
filter()
|
||||
})
|
||||
})
|
||||
|
||||
function filter() {
|
||||
let serializeArray = [];
|
||||
Object.keys(articleFilter).forEach(key => {
|
||||
if (articleFilter[key])
|
||||
serializeArray.push(articleFilter[key])
|
||||
})
|
||||
let serialize = serializeArray.join('&')
|
||||
if (serialize)
|
||||
window.history.replaceState(null, null, `?${btoa(JSON.stringify(articleFilter))}`);
|
||||
contentRequest(`/<?= $lg ?>/remote/get-articles/?${serialize}`, '#list-article', '#pagination', page => {
|
||||
articleFilter['page'] = `page=${page}`;
|
||||
filter()
|
||||
})
|
||||
console.log(articleFilter);
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,206 @@
|
||||
<?php
|
||||
|
||||
use app\models\register\Tags;
|
||||
use app\models\Ts;
|
||||
use app\models\Articles;
|
||||
|
||||
$lg = Yii::$app->language
|
||||
/**
|
||||
*
|
||||
*/
|
||||
?>
|
||||
<div class="content">
|
||||
<div class="filter-buttons top50">
|
||||
<button data-filter=""><?= Ts::get(5) ?></button>
|
||||
<?php if ($lg == 'en'): ?>
|
||||
<button data-switch="order_title=ts_en_name"><?= Ts::get(9) ?></button>
|
||||
<?php else: ?>
|
||||
<button data-switch="order_title=name"><?= Ts::get(9) ?></button>
|
||||
<?php endif; ?>
|
||||
<div class="tags cw3 right-10">
|
||||
<select id="tags" style="display:none;" class="search-select-box" multiple>
|
||||
<option disabled value=""><?= Ts::get(48) ?></option>
|
||||
<?php foreach (Tags::find()->where(['deleted' => 0, 'active' => 1, 'lib_type' => 1])->all() as $tag): ?>
|
||||
<option value="<?= $tag->id ?>"><?= $tag->getName() ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<button class="filter mobile-hide"><?= Ts::get(11) ?></button>
|
||||
<button class="filter-mobile-btn mobile-show"><?= Ts::get(11) ?></button>
|
||||
</div>
|
||||
<div class="top50"></div>
|
||||
</div>
|
||||
<div id="list-article"></div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
let articleFilter = {}
|
||||
|
||||
const searchBox = new SearchBox('#tags')
|
||||
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.search) {
|
||||
let serialize = atob(window.location.search.substr(1))
|
||||
try {
|
||||
articleFilter = JSON.parse(serialize)
|
||||
} catch (e) {
|
||||
console.log('Invalid query string');
|
||||
}
|
||||
}
|
||||
console.log(articleFilter);
|
||||
document.querySelector(`[data-filter="${articleFilter['art_table'] || ''}"]`).classList.add('active')
|
||||
let switcher = document.querySelector(`[data-switch="${articleFilter['switch_on'] || ''}"]`);
|
||||
if (switcher)
|
||||
switcher.classList.add('switch_on')
|
||||
filter();
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-filter]').forEach(button => {
|
||||
button.addEventListener('click', function () {
|
||||
const active = document.querySelector('[data-filter].active');
|
||||
active.classList.remove('active');
|
||||
button.classList.add('active');
|
||||
button.scrollIntoView()
|
||||
articleFilter['art_table'] = button.dataset.filter || null
|
||||
filter();
|
||||
})
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-switch]').forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
if (!button.classList.contains('switch_on')) {
|
||||
button.classList.add('switch_on')
|
||||
articleFilter['switch_on'] = button.dataset.switch
|
||||
} else {
|
||||
button.classList.remove('switch_on')
|
||||
articleFilter['switch_on'] = null
|
||||
}
|
||||
filter()
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
let filterBtn = document.querySelector('.filter');
|
||||
let filterApplyBtn = document.querySelector('#filter-apply')
|
||||
let filterClearBtn = document.querySelector('#filter-clear')
|
||||
let filterMobile = document.querySelector('.filter-mobile-btn')
|
||||
|
||||
filterBtn.addEventListener('click', () => {
|
||||
let lib = document.querySelector('.library');
|
||||
let filterPanel = document.querySelector('.filter-panel')
|
||||
|
||||
if (lib.classList.contains('filter-open')) {
|
||||
lib.classList.remove('filter-open')
|
||||
filterPanel.classList.remove('show');
|
||||
filterBtn.classList.remove('switch_on')
|
||||
filterClear()
|
||||
} else {
|
||||
lib.classList.add('filter-open')
|
||||
filterPanel.classList.add('show')
|
||||
filterBtn.classList.add('switch_on')
|
||||
}
|
||||
})
|
||||
|
||||
filterMobile.addEventListener('click', () => {
|
||||
let lib = document.querySelector('.library');
|
||||
let filterPanel = document.querySelector('.filter-panel')
|
||||
|
||||
if (lib.classList.contains('filter-open-mobile')) {
|
||||
//Close
|
||||
lib.classList.remove('filter-open-mobile')
|
||||
filterPanel.classList.remove('filter-mobile');
|
||||
filterMobile.classList.remove('switch_on')
|
||||
} else {
|
||||
//Open
|
||||
lib.classList.add('filter-open-mobile')
|
||||
filterPanel.classList.add('filter-mobile');
|
||||
filterMobile.classList.add('switch_on')
|
||||
}
|
||||
})
|
||||
|
||||
function filterApply() {
|
||||
document.querySelectorAll('[data-filter-input]').forEach(input => {
|
||||
console.log(input.dataset.filterInput);
|
||||
//console.log(input.value);
|
||||
if (input.value)
|
||||
articleFilter[input.dataset.filterInput] = input.dataset.filterInput + '=' + input.value
|
||||
})
|
||||
if (Object.keys(articleFilter).length > 0) {
|
||||
articleFilter['advance_filter'] = 'advance_filter=1';
|
||||
}
|
||||
filter()
|
||||
filterMobile.classList.remove('switch_on')
|
||||
}
|
||||
|
||||
function filterClear() {
|
||||
articleFilter = {}
|
||||
filter()
|
||||
if (window.location.href) {
|
||||
let newUrl = window.location.href.split('?')[0]
|
||||
window.history.replaceState(null, null, newUrl)
|
||||
}
|
||||
document.querySelector('.filter').classList.remove('switch_on')
|
||||
filterMobile.classList.remove('switch_on')
|
||||
searchBox.clearBoxSelected();
|
||||
}
|
||||
|
||||
function clearSingle(e) {
|
||||
let input = e.parentNode.querySelector('[data-filter-input]');
|
||||
delete articleFilter[input.dataset.filterInput];
|
||||
|
||||
if (articleFilter['switch_on']) {
|
||||
delete articleFilter['switch_on'];
|
||||
document.querySelector('.filter').classList.remove('switch_on')
|
||||
filterMobile.classList.remove('switch_on')
|
||||
}
|
||||
if (Object.keys(articleFilter).length === 1) {
|
||||
if (articleFilter['advance_filter']) {
|
||||
articleFilter = {}
|
||||
if (window.location.href) {
|
||||
let newUrl = window.location.href.split('?')[0]
|
||||
window.history.replaceState(null, null, newUrl)
|
||||
}
|
||||
}
|
||||
}
|
||||
filter();
|
||||
}
|
||||
|
||||
function filter() {
|
||||
let serializeArray = [];
|
||||
Object.keys(articleFilter).forEach(key => {
|
||||
if (articleFilter[key])
|
||||
serializeArray.push(articleFilter[key])
|
||||
})
|
||||
let serialize = serializeArray.join('&')
|
||||
|
||||
if (serialize) {
|
||||
let str = JSON.stringify(articleFilter)
|
||||
let base64 = btoa(str.replace(/[\u00A0-\u2666]/g, function (c) {
|
||||
return '&#' + c.charCodeAt(0) + ';';
|
||||
}));
|
||||
window.history.replaceState(null, null, `?${base64}`);
|
||||
}
|
||||
contentRequest(`/<?= $lg ?>/remote/get-collections/?${serialize}`, '#list-article', '#pagination', page => {
|
||||
articleFilter['page'] = `page=${page}`;
|
||||
filter()
|
||||
})
|
||||
}
|
||||
|
||||
searchBox.onChange(function (data, ids) {
|
||||
if(ids) {
|
||||
articleFilter['tags'] = `tags=${ids}`;
|
||||
} else {
|
||||
if(articleFilter['tags']) {
|
||||
delete articleFilter['tags']
|
||||
}
|
||||
}
|
||||
filter();
|
||||
})
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
|
||||
|
||||
$lg = Yii::$app->language
|
||||
/**
|
||||
* @var \app\models\register\Collections $model
|
||||
*/
|
||||
?>
|
||||
<link href="/_public/assets/css/collection-objects-greed.css" rel="stylesheet">
|
||||
<link href="/_public/assets/css/article-module.css" rel="stylesheet">
|
||||
<div class="content">
|
||||
<div class="flex top25">
|
||||
<div class="flex-left cw6">
|
||||
<div class="title-list top15">
|
||||
<?= Ts::get(47)?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-hide filter-buttons flex-right cw6">
|
||||
<button data-render="grid" class="active"><i class="la la-grip-horizontal"></i></button>
|
||||
<button data-render="list"><i class="la la-grip-lines"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collection-greed top25">
|
||||
<div class="content-out gallery" id="list-article"></div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
let articleFilter = {}
|
||||
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.search) {
|
||||
let serialize = atob(window.location.search.substr(1))
|
||||
try {
|
||||
articleFilter = JSON.parse(serialize)
|
||||
} catch (e) {
|
||||
console.log('Invalid query string');
|
||||
}
|
||||
}
|
||||
console.log(articleFilter);
|
||||
filter();
|
||||
document.querySelectorAll('.filter-buttons button').forEach(e => {
|
||||
e.addEventListener('click', () => {
|
||||
const gallery = document.querySelector('.collection-greed .gallery');
|
||||
document.querySelectorAll('.filter-buttons button').forEach(x => {
|
||||
x.classList.remove('active');
|
||||
})
|
||||
|
||||
if(e.dataset.render === 'list') {
|
||||
gallery.classList.add('list');
|
||||
} else {
|
||||
gallery.classList.remove('list');
|
||||
}
|
||||
e.classList.add('active');
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
function filter() {
|
||||
let serializeArray = [];
|
||||
articleFilter.collection_id = 'collection_id=<?= $model->id?>';
|
||||
Object.keys(articleFilter).forEach(key => {
|
||||
if (articleFilter[key])
|
||||
serializeArray.push(articleFilter[key])
|
||||
})
|
||||
let serialize = serializeArray.join('&')
|
||||
if (serialize)
|
||||
window.history.replaceState(null, null, `?${btoa(JSON.stringify(articleFilter))}`);
|
||||
contentRequest(`/<?= $lg ?>/remote/get-collection-objects/?${serialize}`, '#list-article', '#pagination', page => {
|
||||
articleFilter['page'] = `page=${page}`;
|
||||
filter()
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
|
||||
|
||||
$lg = Yii::$app->language
|
||||
/**
|
||||
* @var \app\models\RegisterObjects $model
|
||||
*
|
||||
*/
|
||||
?>
|
||||
|
||||
|
||||
<link href="/_public/assets/css/collection-objects-greed.css" rel="stylesheet">
|
||||
<link href="/_public/assets/css/article-module.css" rel="stylesheet">
|
||||
<script src="https://cdn.jsdelivr.net/npm/hls.js@1"></script>
|
||||
<script>
|
||||
function streamFrame(e) {
|
||||
modal.modalFrame(`<?= Yii::$app->params['media_server']?>/media/play/${e.dataset.id}/`);
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="content">
|
||||
<div class="flex top25">
|
||||
<div class="flex-left cw6">
|
||||
<div class="title-list top15">
|
||||
<?= Ts::get(240) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collection-greed top25">
|
||||
<div class="content-out gallery" id="video-list"></div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
videoList()
|
||||
})
|
||||
|
||||
function videoList() {
|
||||
let q = '?object_id=<?= $model->id ?>';
|
||||
console.log(q);
|
||||
contentRequest(`/<?= $lg ?>/remote/get-objects-models/${q}`, '#video-list', '#pagination', page => {
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Or if you want the latest version from the main branch -->
|
||||
<!-- <script src="https://cdn.jsdelivr.net/npm/hls.js@canary"></script> -->
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
|
||||
|
||||
$lg = Yii::$app->language
|
||||
/**
|
||||
* @var \app\models\RegisterObjects $model
|
||||
*
|
||||
*/
|
||||
?>
|
||||
|
||||
|
||||
<link href="/_public/assets/css/collection-objects-greed.css" rel="stylesheet">
|
||||
<link href="/_public/assets/css/article-module.css" rel="stylesheet">
|
||||
<script src="https://cdn.jsdelivr.net/npm/hls.js@1"></script>
|
||||
<script>
|
||||
function streamFrame(e) {
|
||||
modal.modalFrame(`<?= Yii::$app->params['media_server']?>/media/play/${e.dataset.id}/`);
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="content">
|
||||
<div class="flex top25">
|
||||
<div class="flex-left cw6">
|
||||
<div class="title-list top15">
|
||||
<?= Ts::get(41) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collection-greed top25">
|
||||
<div class="content-out gallery" id="video-list"></div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
videoList()
|
||||
})
|
||||
function videoList() {
|
||||
let q = '?object_id=<?= $model->id ?>';
|
||||
console.log(q);
|
||||
contentRequest(`/<?= $lg ?>/remote/get-objects-videos/${q}`, '#video-list', '#pagination', page => {
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Or if you want the latest version from the main branch -->
|
||||
<!-- <script src="https://cdn.jsdelivr.net/npm/hls.js@canary"></script> -->
|
||||
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
use app\models\Articles;
|
||||
|
||||
$lg = Yii::$app->language
|
||||
/**
|
||||
*
|
||||
*/
|
||||
?>
|
||||
<div class="content">
|
||||
<div class="filter-buttons top50">
|
||||
<button data-filter="" style="height: 0; width: 0; padding: 0 !important; overflow: hidden; opacity: 0; margin: 0 !important;"><?= Ts::get(5) ?></button>
|
||||
<button data-switch="order_title=<?= $lg == 'en' ? 'ts_en_' : '' ?>name"><?= Ts::get(9) ?></button>
|
||||
<button class="filter mobile-hide"><?= Ts::get(11) ?></button>
|
||||
<button class="filter-mobile-btn mobile-show"><?= Ts::get(11) ?></button>
|
||||
</div>
|
||||
<div class="top50"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="content-out flex" id="list-article-library"></div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
let articleFilter = {}
|
||||
|
||||
|
||||
|
||||
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.search) {
|
||||
let serialize = atob(window.location.search.substr(1))
|
||||
try {
|
||||
|
||||
articleFilter = JSON.parse(serialize)
|
||||
if(articleFilter.advance_filter === 'advance_filter=1') {
|
||||
document.querySelector('.filter').classList.add('switch_on')
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Invalid query string');
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelector(`[data-filter="${articleFilter['art_table'] || ''}"]`).classList.add('active')
|
||||
let switcher = document.querySelector(`[data-switch="${articleFilter['switch_on'] || ''}"]`);
|
||||
if (switcher)
|
||||
switcher.classList.add('switch_on')
|
||||
filter();
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-filter]').forEach(button => {
|
||||
button.addEventListener('click', function () {
|
||||
const active = document.querySelector('[data-filter].active');
|
||||
active.classList.remove('active');
|
||||
button.classList.add('active');
|
||||
button.scrollIntoView()
|
||||
articleFilter['art_table'] = button.dataset.filter || null
|
||||
filter();
|
||||
})
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-switch]').forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
if (!button.classList.contains('switch_on')) {
|
||||
button.classList.add('switch_on')
|
||||
articleFilter['switch_on'] = button.dataset.switch
|
||||
} else {
|
||||
button.classList.remove('switch_on')
|
||||
articleFilter['switch_on'] = null
|
||||
}
|
||||
filter()
|
||||
})
|
||||
})
|
||||
|
||||
let filterBtn = document.querySelector('.filter');
|
||||
let filterApplyBtn = document.querySelector('#filter-apply')
|
||||
let filterClearBtn = document.querySelector('#filter-clear')
|
||||
let filterMobile = document.querySelector('.filter-mobile-btn')
|
||||
|
||||
filterBtn.addEventListener('click', () => {
|
||||
let lib = document.querySelector('.library');
|
||||
let filterPanel = document.querySelector('.filter-panel')
|
||||
|
||||
if (lib.classList.contains('filter-open')) {
|
||||
lib.classList.remove('filter-open')
|
||||
filterPanel.classList.remove('show');
|
||||
filterBtn.classList.remove('switch_on')
|
||||
filterClear()
|
||||
} else {
|
||||
lib.classList.add('filter-open')
|
||||
filterPanel.classList.add('show')
|
||||
filterBtn.classList.add('switch_on')
|
||||
}
|
||||
})
|
||||
|
||||
filterMobile.addEventListener('click', () => {
|
||||
let lib = document.querySelector('.library');
|
||||
let filterPanel = document.querySelector('.filter-panel')
|
||||
|
||||
if(lib.classList.contains('filter-open-mobile')) {
|
||||
//Close
|
||||
lib.classList.remove('filter-open-mobile')
|
||||
filterPanel.classList.remove('filter-mobile');
|
||||
filterMobile.classList.remove('switch_on')
|
||||
} else {
|
||||
//Open
|
||||
lib.classList.add('filter-open-mobile')
|
||||
filterPanel.classList.add('filter-mobile');
|
||||
filterMobile.classList.add('switch_on')
|
||||
}
|
||||
})
|
||||
|
||||
function filterApply() {
|
||||
document.querySelectorAll('[data-filter-input]').forEach(input => {
|
||||
console.log(input.dataset.filterInput);
|
||||
articleFilter[input.dataset.filterInput] = input.dataset.filterInput + '=' + input.value
|
||||
})
|
||||
articleFilter['advance_filter'] = 'advance_filter=1';
|
||||
filter()
|
||||
filterMobile.classList.remove('switch_on')
|
||||
}
|
||||
|
||||
function filterClear() {
|
||||
articleFilter = {}
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
filter()
|
||||
console.log(window.location.href)
|
||||
if(window.location.href) {
|
||||
let newUrl = window.location.href.split('?')[0]
|
||||
window.history.replaceState(null, null, newUrl)
|
||||
}
|
||||
document.querySelector('.filter').classList.remove('switch_on')
|
||||
filterMobile.classList.remove('switch_on')
|
||||
}
|
||||
|
||||
function clearSingle(e) {
|
||||
let input = e.parentNode.querySelector('[data-filter-input]');
|
||||
delete articleFilter[input.dataset.filterInput];
|
||||
|
||||
filter();
|
||||
}
|
||||
|
||||
|
||||
function filter() {
|
||||
let serializeArray = [];
|
||||
Object.keys(articleFilter).forEach(key => {
|
||||
if (articleFilter[key])
|
||||
serializeArray.push(articleFilter[key])
|
||||
})
|
||||
let serialize = serializeArray.join('&')
|
||||
|
||||
if (serialize) {
|
||||
let str = JSON.stringify(articleFilter)
|
||||
let base64 = btoa(str.replace(/[\u00A0-\u2666]/g, function(c) {
|
||||
return '&#' + c.charCodeAt(0) + ';';
|
||||
}));
|
||||
window.history.replaceState(null, null, `?${base64}`);
|
||||
}
|
||||
contentRequest(`/<?= $lg ?>/remote/get-e-library/?${serialize}`, '#list-article-library', '#pagination', page => {
|
||||
articleFilter['page'] = `page=${page}`;
|
||||
filter()
|
||||
})
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
use app\models\Articles;
|
||||
|
||||
$lg = Yii::$app->language;
|
||||
$categories = \app\models\ExpositionsCategories::listActive();
|
||||
/**
|
||||
*
|
||||
*/
|
||||
?>
|
||||
|
||||
<div class="content">
|
||||
<div class="filter-buttons top50 flex-center">
|
||||
<?php if ($lg == 'en'): ?>
|
||||
<button data-switch="order_title=ts_en_name"><?= Ts::get(9) ?></button>
|
||||
<?php else: ?>
|
||||
<button data-switch="order_title=name"><?= Ts::get(9) ?></button>
|
||||
<?php endif; ?>
|
||||
<button data-filter=""><?= Ts::get(5) ?></button>
|
||||
<?php foreach ($categories as $category): ?>
|
||||
<button data-filter="category=<?= $category->id ?>"><?= $category->{$lg == 'en' ? 'name_en' : 'name'} ?></button>
|
||||
<?php endforeach; ?>
|
||||
<div class="tags cw3">
|
||||
<select id="tags" style="display:none;" class="search-select-box" multiple>
|
||||
<option disabled value=""><?= Ts::get(48)?></option>
|
||||
<?php foreach (\app\models\Expositions::getTagList() as $item): ?>
|
||||
<?php if(empty($item['name'])) continue; ?>
|
||||
<option <?= $item['selected'] ?>
|
||||
value="<?= $item['id'] ?>"><?= $item['name'] ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="top50"></div>
|
||||
</div>
|
||||
<div class="collection-greed">
|
||||
<div class="content-out gallery" id="list-article"></div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
let articleFilter = {}
|
||||
|
||||
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.search) {
|
||||
let serialize = atob(window.location.search.substr(1))
|
||||
try {
|
||||
articleFilter = JSON.parse(serialize)
|
||||
} catch (e) {
|
||||
console.log('Invalid query string');
|
||||
}
|
||||
}
|
||||
document.querySelector(`[data-filter="${articleFilter['art_table'] || ''}"]`).classList.add('active')
|
||||
let switcher = document.querySelector(`[data-switch="${articleFilter['switch_on'] || ''}"]`);
|
||||
if (switcher)
|
||||
switcher.classList.add('switch_on')
|
||||
filter();
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-filter]').forEach(button => {
|
||||
button.addEventListener('click', function () {
|
||||
const active = document.querySelector('[data-filter].active');
|
||||
active.classList.remove('active');
|
||||
button.classList.add('active');
|
||||
button.scrollIntoView()
|
||||
articleFilter['category'] = button.dataset.filter || null
|
||||
filter();
|
||||
})
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-switch]').forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
if (!button.classList.contains('switch_on')) {
|
||||
button.classList.add('switch_on')
|
||||
articleFilter['switch_on'] = button.dataset.switch
|
||||
} else {
|
||||
button.classList.remove('switch_on')
|
||||
articleFilter['switch_on'] = null
|
||||
}
|
||||
filter()
|
||||
})
|
||||
})
|
||||
|
||||
function filter() {
|
||||
let serializeArray = [];
|
||||
Object.keys(articleFilter).forEach(key => {
|
||||
if (articleFilter[key])
|
||||
serializeArray.push(articleFilter[key])
|
||||
})
|
||||
let serialize = serializeArray.join('&')
|
||||
//if (serialize)
|
||||
// window.history.replaceState(null, null, `?${btoa(JSON.stringify(articleFilter))}`);
|
||||
contentRequest(`/<?= $lg ?>/remote/get-expositions/?${serialize}`, '#list-article', '#pagination', page => {
|
||||
articleFilter['page'] = `page=${page}`;
|
||||
filter()
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<script src="/_public/assets/js/search-box.js"></script>
|
||||
<script>
|
||||
document.querySelectorAll('.search-select-box').forEach(el => {
|
||||
const searchBox = new SearchBox(el)
|
||||
searchBox.onChange(function (data, ids) {
|
||||
articleFilter['tags'] = `tags=${ids}`;
|
||||
filter();
|
||||
})
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
|
||||
|
||||
$lg = Yii::$app->language
|
||||
/**
|
||||
* @var \app\models\Expositions $model
|
||||
* @var null|int $parent_id
|
||||
*/
|
||||
?>
|
||||
<link href="/_public/assets/css/collection-objects-greed.css" rel="stylesheet">
|
||||
<link href="/_public/assets/css/article-module.css" rel="stylesheet">
|
||||
<div class="content">
|
||||
<div class="flex top25 cw6">
|
||||
<div class="flex-left">
|
||||
<div class="title-list top15">
|
||||
<?= Ts::get(47)?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="filter-buttons flex-right cw6 mobile-hide">
|
||||
<button data-render="grid" class="active"><i class="la la-grip-horizontal"></i></button>
|
||||
<button data-render="list"><i class="la la-grip-lines"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collection-greed top25">
|
||||
<div class="content-out gallery" id="list-article"></div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
let articleFilter = {}
|
||||
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.search) {
|
||||
let serialize = atob(window.location.search.substr(1))
|
||||
try {
|
||||
articleFilter = JSON.parse(serialize)
|
||||
} catch (e) {
|
||||
console.log('Invalid query string');
|
||||
}
|
||||
}
|
||||
console.log(articleFilter);
|
||||
filter();
|
||||
document.querySelectorAll('.filter-buttons button').forEach(e => {
|
||||
e.addEventListener('click', () => {
|
||||
const gallery = document.querySelector('.collection-greed .gallery');
|
||||
document.querySelectorAll('.filter-buttons button').forEach(x => {
|
||||
x.classList.remove('active');
|
||||
})
|
||||
|
||||
if(e.dataset.render === 'list') {
|
||||
gallery.classList.add('list');
|
||||
} else {
|
||||
gallery.classList.remove('list');
|
||||
}
|
||||
e.classList.add('active');
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
function filter() {
|
||||
let serializeArray = [];
|
||||
articleFilter.exposition_id = 'exposition_id=<?= $model->id?>';
|
||||
Object.keys(articleFilter).forEach(key => {
|
||||
if (articleFilter[key])
|
||||
serializeArray.push(articleFilter[key])
|
||||
})
|
||||
let serialize = serializeArray.join('&')
|
||||
if (serialize)
|
||||
window.history.replaceState(null, null, `?${btoa(JSON.stringify(articleFilter))}`);
|
||||
contentRequest(`/<?= $lg ?>/remote/get-exposition-objects/?${serialize}`, '#list-article', '#pagination', page => {
|
||||
articleFilter['page'] = `page=${page}`;
|
||||
filter()
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* @var \app\models\RegisterObjects $model
|
||||
*/
|
||||
|
||||
use app\services\JWT;
|
||||
$lg = Yii::$app->language;
|
||||
$poster = $model->getMainImgFile();
|
||||
?>
|
||||
<link rel="stylesheet" href="/_public/assets/css/user.css">
|
||||
|
||||
<div class="top25">
|
||||
<?php foreach ($model->pdfDocuments as $pdf): ?>
|
||||
<div class="e-book-panel">
|
||||
<div class="poster"><img src="<?= $poster ?>"></div>
|
||||
<div style="padding-left: 30px">
|
||||
<div class="title-list"><?= $lg=='en' ?'E-book' :'Електрона книга'?></div>
|
||||
<div class="padding10">
|
||||
<div data-pdf="<?= JWT::encode(['id' => $pdf->id], JWT::SECRET_KEY) ?>"
|
||||
class="profile-submit gradient ct"><i class="la la-book-open"></i> <?= $lg == 'en' ? 'Read' : 'Прочети' ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
use app\models\Ts;
|
||||
use app\models\Articles;
|
||||
|
||||
$lg = Yii::$app->language
|
||||
/**
|
||||
*
|
||||
*/
|
||||
?>
|
||||
<div class="content">
|
||||
<div class="filter-buttons top50">
|
||||
<button style="display: none" data-filter=""><?= Ts::get(5) ?></button>
|
||||
<button data-switch="order_title=title<?= $lg == 'en' ? '_en' : '' ?>"><?= Ts::get(9) ?></button>
|
||||
</div>
|
||||
<div class="top50"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="content-out" id="list-article"></div>
|
||||
<div class="content">
|
||||
<div id="pagination" class="filter-buttons flex-center top50"></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
let articleFilter = {}
|
||||
|
||||
|
||||
<?php if(!empty($partner_id)):?>
|
||||
articleFilter['partner_id'] = 'partner_id=<?= $partner_id?>';
|
||||
<?php endif; ?>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (window.location.search) {
|
||||
let serialize = atob(window.location.search.substr(1))
|
||||
try {
|
||||
articleFilter = JSON.parse(serialize)
|
||||
} catch (e) {
|
||||
console.log('Invalid query string');
|
||||
}
|
||||
}
|
||||
console.log(articleFilter);
|
||||
document.querySelector(`[data-filter="${articleFilter['art_table'] || ''}"]`).classList.add('active')
|
||||
let switcher = document.querySelector(`[data-switch="${articleFilter['switch_on'] || ''}"]`);
|
||||
if (switcher)
|
||||
switcher.classList.add('switch_on')
|
||||
filter();
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-filter]').forEach(button => {
|
||||
button.addEventListener('click', function () {
|
||||
const active = document.querySelector('[data-filter].active');
|
||||
active.classList.remove('active');
|
||||
button.classList.add('active');
|
||||
button.scrollIntoView()
|
||||
articleFilter['art_table'] = button.dataset.filter || null
|
||||
filter();
|
||||
})
|
||||
})
|
||||
|
||||
document.querySelectorAll('[data-switch]').forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
if (!button.classList.contains('switch_on')) {
|
||||
button.classList.add('switch_on')
|
||||
articleFilter['switch_on'] = button.dataset.switch
|
||||
} else {
|
||||
button.classList.remove('switch_on')
|
||||
articleFilter['switch_on'] = null
|
||||
}
|
||||
filter()
|
||||
})
|
||||
})
|
||||
|
||||
function filter() {
|
||||
let serializeArray = [];
|
||||
Object.keys(articleFilter).forEach(key => {
|
||||
if (articleFilter[key])
|
||||
serializeArray.push(articleFilter[key])
|
||||
})
|
||||
let serialize = serializeArray.join('&')
|
||||
if (serialize)
|
||||
window.history.replaceState(null, null, `?${btoa(JSON.stringify(articleFilter))}`);
|
||||
contentRequest(`/<?= $lg ?>/remote/get-projects/?${serialize}`, '#list-article', '#pagination', page => {
|
||||
articleFilter['page'] = `page=${page}`;
|
||||
filter()
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1 @@
|
||||
<?php
|
||||
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
use app\models\UserFavorites;
|
||||
use app\services\Auth;
|
||||
use app\models\Ts;
|
||||
|
||||
$fid = isset($model) ? $model->id : '';
|
||||
$table = isset($model) ? $model->getTableName() : '';
|
||||
$userFavorite = null;
|
||||
$lg = Yii::$app->language;
|
||||
if (!empty($fid) && !empty($table)) {
|
||||
if (Auth::getUser()) {
|
||||
$user = Auth::getUser();
|
||||
$userFavorite = UserFavorites::find()->where(['table' => $table, 'fid' => $fid, 'user_id' => $user->id])->one();
|
||||
}
|
||||
}
|
||||
|
||||
$hoverLabels = [
|
||||
'favorites' => [
|
||||
'bg' => 'Запазване в любими',
|
||||
'en' => 'Save to favorites'
|
||||
],
|
||||
'copy_link' => [
|
||||
'bg' => 'Копиране връзка',
|
||||
'en' => 'Copy link',
|
||||
],
|
||||
'share' => [
|
||||
'bg' => 'Споделяне на страница',
|
||||
'en' => 'Share a page'
|
||||
],
|
||||
'copy_message' => [
|
||||
'bg' => 'Връзката е копирана успешно',
|
||||
'en' => 'Link copied successfully'
|
||||
]
|
||||
]
|
||||
?>
|
||||
<div class="flex flex-center relation-buttons">
|
||||
<?php if (empty($_SESSION['register_user'])): ?>
|
||||
<div data-hover-title="<?= $hoverLabels['share'][$lg] ?>" data-fid="<?= $fid ?>" data-table="<?= $table ?>"
|
||||
class="fvt la <?= $userFavorite ? 'la-heart' : 'la-heart-o' ?>"></div>
|
||||
<?php endif; ?>
|
||||
<div onclick="copyLink()" data-hover-title="<?= $hoverLabels['copy_link'][$lg] ?>" class="la la-link"></div>
|
||||
<div onclick="shareLink()" data-hover-title="<?= $hoverLabels['share'][$lg] ?>" class="la la-share-alt-square"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const fvt = document.querySelector('.fvt')
|
||||
const lg = '<?= $lg ?>'
|
||||
fvt.addEvents({
|
||||
click: () => {
|
||||
<?php if(!Auth::getUser()): ?>
|
||||
flash.warning('<?= Ts::get(223) ?> <a style=\'color: #ffffff\' href=\'<?= Yii::$app->goToAction('user/login') ?>\'><?= $lg == 'en' ? 'Log in' : 'Вход' ?></a>')
|
||||
<?php else: ?>
|
||||
updateFavorites(fvt.dataset.fid, fvt.dataset.table)
|
||||
|
||||
<?php endif; ?>
|
||||
}
|
||||
})
|
||||
|
||||
function updateFavorites(fid, table) {
|
||||
|
||||
if (fid && table) {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('post', '/<?= $lg ?>/remote/favorites/')
|
||||
xhr.responseType = 'json'
|
||||
xhr.onload = () => {
|
||||
const messageAdd = {
|
||||
bg: 'Страницата е добавена в любими',
|
||||
en: 'The webpage is added to favorites'
|
||||
}
|
||||
|
||||
const messageRemove = {
|
||||
bg: 'Страницата е премахната от любими',
|
||||
en: 'The webpage is remove from favorites'
|
||||
}
|
||||
|
||||
if (xhr.response && xhr.response.action) {
|
||||
switch (xhr.response.action) {
|
||||
case 'add':
|
||||
flash.success(messageAdd[lg])
|
||||
break;
|
||||
case 'remove':
|
||||
flash.success(messageRemove[lg])
|
||||
break
|
||||
}
|
||||
fvt.switchClass('la-heart-o', 'la-heart')
|
||||
}
|
||||
}
|
||||
xhr.send(JSON.stringify({fid, table}))
|
||||
}
|
||||
}
|
||||
|
||||
function copyLink() {
|
||||
navigator.clipboard.writeText(window.location.href);
|
||||
flash.success('<?= $hoverLabels['copy_message'][$lg] ?>');
|
||||
}
|
||||
|
||||
function shareLink () {
|
||||
var url = window.location.href
|
||||
window.open('http://facebook.com/sharer/sharer.php?u='+encodeURIComponent(url), '', 'left=0,top=0,width=650,height=420,personalbar=0,toolbar=0,scrollbars=0,resizable=0');
|
||||
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user