This commit is contained in:
2024-05-20 15:37:46 +03:00
commit 00b7dbd0b7
10404 changed files with 3285853 additions and 0 deletions

View File

@ -0,0 +1,386 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Asset\AssetManager;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\PageFlow;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Slider\ResponsiveType\ResponsiveTypeFactory;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
use Nextend\SmartSlider3\SmartSlider3Info;
use Nextend\SmartSlider3\Widget\WidgetGroupFactory;
class ControllerAjaxSlider extends AdminAjaxController {
use TraitAdminUrl;
public function actionRestore() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderID = Request::$REQUEST->getVar('slider');
$this->validateVariable(!empty($sliderID), 'slider');
$slidersModel = new ModelSliders($this);
$slidersModel->restore($sliderID);
Notification::success(n2_('Slider restored.'));
$this->response->respond();
}
public function actionDeletePermanently() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderID = Request::$REQUEST->getVar('slider');
$this->validateVariable(!empty($sliderID), 'slider');
$slidersModel = new ModelSliders($this);
$deletedSliderIDs = $slidersModel->deletePermanently($sliderID);
Notification::success(n2_('Slider permanently deleted.'));
$this->response->respond(array(
'sliderIDs' => $deletedSliderIDs
));
}
public function actionCreate() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slidersModel = new ModelSliders($this);
$projectName = Request::$REQUEST->getVar('projectName');
$this->validateVariable(!empty($projectName), 'projectName');
$slider = array(
'title' => $projectName,
'width' => max(Request::$REQUEST->getInt('sliderWidth', 1200), 200),
'height' => max(Request::$REQUEST->getInt('sliderHeight', 600), 100),
'responsiveLimitSlideWidth' => 1
);
$projectType = Request::$REQUEST->getVar('projectType', 'slider');
if ($projectType == 'block') {
$slider['type'] = 'block';
} else {
switch (Request::$REQUEST->getVar('sliderType', 'simple')) {
case 'carousel':
$slider['type'] = 'carousel';
$slider['maximum-pane-width'] = $slider['width'];
$slider['slide-width'] = max(Request::$REQUEST->getInt('slideWidth', 600), 200);
$slider['slide-height'] = max(Request::$REQUEST->getInt('slideHeight', 400), 100);
$slider['widget-bullet-enabled'] = 1;
$slider['widgetbullet'] = 'transitionRectangle';
$slider['widget-arrow-enabled'] = 1;
$slider['widgetarrow'] = 'imageEmpty';
break;
case 'showcase':
$slider['type'] = 'showcase';
$slider['slide-width'] = max(Request::$REQUEST->getInt('slideWidth', 600), 200);
$slider['slide-height'] = max(Request::$REQUEST->getInt('slideHeight', 400), 100);
$slider['widget-bullet-enabled'] = 1;
$slider['widgetbullet'] = 'transitionRectangle';
break;
case 'simple':
default:
$slider['type'] = 'simple';
$slider['widget-arrow-enabled'] = 1;
$slider['widgetarrow'] = 'imageEmpty';
break;
}
}
switch (Request::$REQUEST->getVar('responsiveMode', 'fullwidth')) {
case 'fullpage':
$slider['responsive-mode'] = 'fullpage';
break;
case 'boxed':
$slider['responsive-mode'] = 'auto';
break;
case 'fullwidth':
default:
$slider['responsive-mode'] = 'fullwidth';
break;
}
$groupID = Request::$REQUEST->getVar('groupID', 0);
$sliderid = $slidersModel->create($slider, $groupID);
Notification::success(n2_('Slider created.'));
$this->response->redirect($this->getUrlSliderEdit($sliderid, $groupID));
}
public function actionRename() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderId = Request::$REQUEST->getInt('sliderid');
$this->validateVariable($sliderId > 0, 'Slider');
$title = Request::$REQUEST->getVar('title');
$slidersModel = new ModelSliders($this);
$slidersModel->setTitle($sliderId, $title);
Notification::success(n2_('Slider renamed.'));
$this->response->respond();
}
public function actionEdit() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get(Request::$REQUEST->getInt('sliderid'));
$this->validateDatabase($slider);
$responseData = $slidersModel->save($slider['id'], Request::$REQUEST->getVar('slider'));
if ($responseData !== false) {
Notification::success(n2_('Slider saved.'));
$this->response->respond($responseData);
}
}
public function actionImportDemo() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$key = 'http:' . Base64::decode(Request::$REQUEST->getVar('key'));
if (strpos($key, 'http://smartslider3.com/') !== 0) {
Notification::error(sprintf(n2_('Import url is not valid: %s'), $key));
$this->response->error();
}
$posts = array(
'action' => 'asset',
'asset' => $key,
'version' => SmartSlider3Info::$version
);
$result = SmartSlider3Info::api($posts);
if (!is_string($result)) {
$hasError = SmartSlider3Info::hasApiError($result['status'], array(
'key' => $key
));
if ($hasError == 'dashboard') {
$this->redirect($this->getUrlDashboard());
} else if ($hasError !== false) {
$this->response->error();
}
} else {
$import = new ImportSlider($this);
$groupID = Request::$REQUEST->getVar('groupID', 0);
$sliderId = $import->import($result, $groupID, 'clone', 1, false);
if ($sliderId !== false) {
Notification::success(n2_('Slider imported.'));
$this->response->redirect($this->getUrlSliderEdit($sliderId, $groupID));
} else {
Notification::error(n2_('Import error!'));
$this->response->error();
}
}
$this->response->respond();
}
public function actionDuplicate() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderId = Request::$REQUEST->getInt('sliderid');
$this->validateVariable($sliderId > 0, 'Slider');
$slidersModel = new ModelSliders($this);
$newSliderId = $slidersModel->duplicate($sliderId, true);
$slider = $slidersModel->getWithThumbnail($newSliderId);
$this->validateDatabase($slider);
Notification::success(n2_('Slide duplicated.'));
$view = new ViewAjaxSliderBox($this);
$view->setSlider($slider);
$this->response->respond(array(
'html' => $view->display(),
'sliderCount' => $slidersModel->getSlidersCount('published', true)
));
}
public function actionChangeSliderType() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderID = Request::$GET->getInt('sliderID');
if ($sliderID > 0) {
$targetSliderType = Request::$POST->getVar('targetSliderType');
$availableTypes = SliderTypeFactory::getAdminTypes();
if (isset($availableTypes[$targetSliderType])) {
$slidersModel = new ModelSliders($this);
$slidersModel->changeSliderType($sliderID, $targetSliderType);
$this->response->respond();
} else {
Notification::error(sprintf(n2_('%s slider type is not available.'), ucfirst($targetSliderType)));
$this->response->error();
}
} else {
Notification::error('Slider ID error: ' . $sliderID);
$this->response->error();
}
}
public function actionRenderResponsiveType() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$responsiveType = ResponsiveTypeFactory::getType(Request::$POST->getVar('value'))
->createAdmin();
if ($responsiveType) {
$values = Request::$REQUEST->getVar('values', array());
$form = new Form($this->applicationType, 'slider');
$form->loadArray($values);
PageFlow::cleanOutputBuffers();
ob_start();
$responsiveType->renderFields($form->getContainer());
$form->render();
$scripts = AssetManager::generateAjaxJS();
$html = ob_get_clean();
$this->response->respond(array(
'html' => $html,
'scripts' => $scripts
));
} else {
Notification::error('Responsive type not found: ' . Request::$POST->getVar('value'));
$this->response->error();
}
}
public function actionRenderWidgetArrow() {
$this->renderWidgetForm('arrow');
}
public function actionRenderWidgetAutoplay() {
$this->renderWidgetForm('autoplay');
}
public function actionRenderWidgetBar() {
$this->renderWidgetForm('bar');
}
public function actionRenderWidgetBullet() {
$this->renderWidgetForm('bullet');
}
public function actionRenderWidgetFullscreen() {
$this->renderWidgetForm('fullscreen');
}
public function actionRenderWidgetHtml() {
$this->renderWidgetForm('html');
}
public function actionRenderWidgetIndicator() {
$this->renderWidgetForm('indicator');
}
public function actionRenderWidgetShadow() {
$this->renderWidgetForm('shadow');
}
public function actionRenderWidgetThumbnail() {
$this->renderWidgetForm('thumbnail');
}
private function renderWidgetForm($type) {
$this->validateToken();
$this->validatePermission('smartslider_config');
$group = WidgetGroupFactory::getGroup($type);
$value = Request::$POST->getVar('value');
$widget = $group->getWidget($value);
if ($widget) {
$values = Request::$REQUEST->getVar('values', array());
$form = new Form($this->applicationType, 'slider');
$values = array_merge($widget->getDefaults(), $values);
$form->loadArray($values);
PageFlow::cleanOutputBuffers();
ob_start();
$widget->renderFields($form->getContainer());
$form->render();
$scripts = AssetManager::generateAjaxJS();
$html = ob_get_clean();
$this->response->respond(array(
'html' => $html,
'scripts' => $scripts
));
} else {
Notification::error('Not found: ' . $value);
$this->response->error();
}
}
}

View File

@ -0,0 +1,268 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
class ControllerSlider extends AbstractControllerAdmin {
protected $sliderID = 0;
protected $sliderAliasOrID = 0;
protected $groupID = 0;
public function initialize() {
parent::initialize();
$this->sliderID = Request::$REQUEST->getInt('sliderid');
$this->groupID = Request::$REQUEST->getInt('groupID', 0);
$this->setSliderIDFromAlias();
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
public function setSliderIDFromAlias() {
$this->sliderAliasOrID = Request::$REQUEST->getVar('slideraliasorid');
if (!empty($this->sliderAliasOrID)) {
if (is_numeric($this->sliderAliasOrID)) {
$this->sliderID = $this->sliderAliasOrID;
} else {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->getByAlias($this->sliderAliasOrID);
$this->sliderID = $slider['id'];
}
}
}
public function actionClearCache() {
if ($this->validateToken()) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if ($this->validateDatabase($slider)) {
$slidersModel->refreshCache($this->sliderID);
Notification::success(n2_('Cache cleared.'));
$groupData = $this->getGroupData($this->sliderID);
$this->redirect($this->getUrlSliderEdit($this->sliderID, $groupData['group_id']));
}
}
}
public function actionEdit() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if (!$slider) {
$this->redirectToSliders();
}
if ($slider['type'] == 'group') {
Notification::error(n2_('Groups are only available in the Pro version.'));
$this->redirectToSliders();
if (N2SSPRO) {
$this->doAction('editGroup', array(
$slider
));
} //N2SSPRO
} else {
$groupData = $this->getGroupData($this->sliderID);
$view = new ViewSliderEdit($this);
$view->setGroupData($groupData['group_id'], $groupData['title']);
$view->setSlider($slider);
$view->display();
}
}
}
public function actionSimpleEdit() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if (!$slider) {
$this->redirectToSliders();
}
$groupData = $this->getGroupData($this->sliderID);
if (Request::$POST->getInt('save') && $this->validateToken()) {
$sliderData = new Data(Request::$POST->getVar('slider'));
if ($sliderData->get('delete-slider') == 1) {
$slidersModel->trash($this->sliderID, $groupData['group_id']);
$this->redirectToSliders();
} else {
$params = json_decode($slider['params'], true);
$params['aria-label'] = $sliderData->get('aria-label', '');
$slidersModel->saveSimple($this->sliderID, $sliderData->get('title'), $params);
$slidesModel = new ModelSlides($this);
$slides = Request::$POST->getVar('slide');
$ordering = array();
foreach ($slides as $slideID => $slide) {
$slideData = new Data($slide);
if ($slideData->get('delete-slide') == 1) {
$slidesModel->delete($slideID);
} else {
$ordering[$slideID] = $slideData->get('ordering');
$slideRow = $slidesModel->get($slideID);
$slideParamsData = new Data($slideRow['params']);
$linkV1 = $slideParamsData->get('link', '');
if (!empty($linkV1)) {
list($link, $target) = array_pad((array)Common::parse($linkV1), 2, '');
$slideParamsData->un_set('link');
$slideParamsData->set('href', $link);
$slideParamsData->set('href-target', $target);
}
$slideParamsData->set('href', $slideData->get('href'));
$slideParamsData->set('href-target', $slideData->get('href-target'));
$slideParamsData->set('thumbnailType', $slideData->get('thumbnailType'));
$slideParamsData->set('backgroundImage', $slideData->get('backgroundImage'));
$slidesModel->saveSimple($slideID, $slideData->get('title'), $slideData->get('description'), $slideParamsData->toArray());
}
}
asort($ordering, SORT_NUMERIC);
$slidesModel->order($this->sliderID, array_keys($ordering));
$this->redirect($this->getUrlSliderSimpleEdit($this->sliderID, $groupData['group_id']));
}
}
$view = new ViewSliderSimpleEdit($this);
$view->setGroupData($groupData['group_id'], $groupData['title']);
$view->setSlider($slider);
$view->display();
}
}
public function actionSimpleEditAddSlide() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if (!$slider) {
$this->redirectToSliders();
}
$groupData = $this->getGroupData($this->sliderID);
if (Request::$POST->getInt('save') && $this->validateToken()) {
$slidesModel = new ModelSlides($this);
$slidesModel->createSimpleEditAdd(Request::$POST->getVar('slide'), $this->sliderID);
$this->redirect($this->getUrlSliderSimpleEdit($this->sliderID, $groupData['group_id']));
}
$view = new ViewSliderSimpleEditAddSlide($this);
$view->setGroupData($groupData['group_id'], $groupData['title']);
$view->setSlider($slider);
$view->display();
}
}
public function actionTrash() {
if ($this->validateToken() && $this->validatePermission('smartslider_delete')) {
$slidersModel = new ModelSliders($this);
$mode = $slidersModel->trash($this->sliderID, $this->groupID);
switch ($mode) {
case 'trash':
Notification::success(n2_('Slider moved to the trash.'));
break;
case 'unlink':
Notification::success(n2_('Slider removed from the group.'));
break;
}
if ($this->groupID > 0) {
$this->redirect($this->getUrlSliderEdit($this->groupID));
} else {
$this->redirectToSliders();
}
}
}
public function actionDuplicate() {
if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
if (($sliderid = Request::$REQUEST->getInt('sliderid')) && $slidersModel->get($sliderid)) {
$newSliderId = $slidersModel->duplicate($sliderid);
if ($newSliderId) {
Notification::success(n2_('Slider duplicated.'));
$groupData = $this->getGroupData($newSliderId);
$this->redirect($this->getUrlSliderEdit($newSliderId, $groupData['group_id']));
} else {
Notification::error(n2_('Database error'));
}
}
$this->redirectToSliders();
}
}
public function actionExport() {
if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
$export = new ExportSlider($this, $this->sliderID);
$export->create();
}
}
public function actionExportHTML() {
if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
$export = new ExportSlider($this, $this->sliderID);
$export->createHTML();
}
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderBox\BlockSliderBox;
/**
* @var $this ViewAjaxSliderBox
*/
$blockSliderBox = new BlockSliderBox($this);
$blockSliderBox->setSlider($this->getSlider());
$blockSliderBox->display();

View File

@ -0,0 +1,27 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Asset\Js\Js;
use Nextend\SmartSlider3\Settings;
/**
* @var $this ViewSliderEdit
*/
$slider = $this->getSlider();
JS::addInline('new _N2.SliderEdit(' . json_encode(array(
'previewInNewWindow' => !!Settings::get('preview-new-window', 0),
'saveAjaxUrl' => $this->getAjaxUrlSliderEdit($slider['id']),
'previewUrl' => $this->getUrlPreviewSlider($slider['id']),
'ajaxUrl' => $this->getAjaxUrlSliderEdit($slider['id']),
'formData' => $this->formManager->getData()
)) . ');');
?>
<form id="n2-ss-edit-slider-form" action="#" method="post">
<?php
$this->renderForm();
?>
</form>

View File

@ -0,0 +1,164 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
/**
* @var $this ViewSliderSimpleEdit
*/
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Sanitize;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Slider\SliderParams;
$slider = $this->getSlider();
$sliderParams = new SliderParams($slider['id'], $slider['type'], $slider['params'], true);
$sliderData = $sliderParams->toArray();
$sliderData['title'] = $slider['title'];
$sliderData['type'] = $slider['type'];
$sliderData['thumbnail'] = $slider['thumbnail'];
$sliderData['alias'] = isset($slider['alias']) ? $slider['alias'] : '';
?>
<form id="n2_slider_form" action="<?php echo esc_url($this->getUrlSliderSimpleEdit($slider['id'], $this->groupID)); ?>" method="post">
<div id="slider-settings-region" role="region" tabindex="0" aria-label="<?php echo esc_attr(n2_('Slider settings') . ': ' . $slider['title']); ?>">
<?php
$form = new Form($this, 'slider');
new Token($form->getFieldsetHidden());
$form->loadArray($sliderData);
$table = new ContainerTable($form->getContainer(), 'general', n2_('Slider settings'));
$row1 = $table->createRow('general-1');
new OnOff($row1, 'delete-slider', n2_('Delete slider'), 0);
new Text($row1, 'title', n2_('Name'), n2_('Slider'), array(
'style' => 'width:300px;'
));
new Text($row1, 'aria-label', n2_('ARIA label'), n2_('Slider'), array(
'style' => 'width:200px;',
'tipLabel' => n2_('ARIA label'),
'tipDescription' => n2_('It allows you to label your slider for screen readers.'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1722-slider-settings-general#aria-label'
));
$form->render();
?>
</div>
<?php
$modelSlides = new ModelSlides($this);
$slides = $modelSlides->getAll($slider['id']);
foreach ($slides as $slide) {
$slideParams = new Data($slide['params']);
$slideData = $slideParams->toArray();
$slideData['ordering'] = $slide['ordering'];
$slideData['title'] = $slide['title'];
$slideData['description'] = $slide['description'];
?>
<div role="region" tabindex="0" aria-label="<?php echo esc_attr(n2_('Edit slide') . ': ' . $slide['title']); ?>">
<?php
$form = new Form($this, 'slide[' . $slide['id'] . ']');
$form->loadArray($slideData);
$table = new ContainerTable($form->getContainer(), 'general', n2_('Slide') . ': ' . $slideData['title']);
$row1 = $table->createRow('general-1');
new OnOff($row1, 'delete-slide', n2_('Delete slide'), 0);
new Text\Number($row1, 'ordering', n2_('Ordering'), 0, array(
'wide' => 4
));
new Text($row1, 'title', n2_('Slide title'), '', array(
'style' => 'width:300px;'
));
new Textarea($row1, 'description', n2_('Description'), '', array(
'width' => 314
));
new Text\FieldImage($row1, 'backgroundImage', n2_('Slide background'), '', array(
'width' => 300
));
new Select($row1, 'thumbnailType', n2_('Thumbnail type'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'videoDark' => n2_('Video')
)
));
new Text($row1, 'href', n2_('Link'), '');
new LinkTarget($row1, 'href-target', n2_('Target window'));
$form->render();
?>
</div>
<?php
}
?>
<div style="margin: 20px;">
<?php
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_slider_save');
$buttonSave->display();
?>
</div>
<input type="hidden" name="save" value="1">
</form>
<script>
_N2.r(['$', 'windowLoad'], function () {
var $ = _N2.$;
var $form = $('#n2_slider_form');
$('#slider-settings-region').trigger("focus");
$('.n2_slider_save').on('click', function (e) {
e.preventDefault();
$form.trigger("submit");
});
document.addEventListener('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (e.code === 'KeyS') { // ctrl + s
e.preventDefault();
$form.trigger("submit");
}
}
}, {
capture: true
});
});
</script>
<style>
:FOCUS {
box-shadow: 0 0 3px 1px #1d81f9 !important;
}
</style>

View File

@ -0,0 +1,102 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
/**
* @var $this ViewSliderSimpleEditAddSlide
*/
$slider = $this->getSlider();
?>
<form id="n2_slider_add_slide_form" action="<?php echo esc_url($this->getUrlSliderSimpleEditAddSlide($slider['id'], $this->groupID)); ?>" method="post">
<div id="slider-add-slide-region" role="region" tabindex="0" aria-label="<?php n2_e('Add slide'); ?>">
<?php
$form = new Form($this, 'slide');
new Token($form->getFieldsetHidden());
$table = new ContainerTable($form->getContainer(), 'general', n2_('Add slide'));
$row1 = $table->createRow('general-1');
new Text($row1, 'title', n2_('Slide title'), '', array(
'style' => 'width:300px;'
));
new Textarea($row1, 'description', n2_('Description'), '', array(
'width' => 314
));
new Text\FieldImage($row1, 'backgroundImage', n2_('Slide background'), '', array(
'width' => 300
));
new Text($row1, 'video', n2_('Video url'), '', array(
'style' => 'width:300px;'
));
new Select($row1, 'thumbnailType', n2_('Thumbnail type'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'videoDark' => n2_('Video')
)
));
new Text($row1, 'href', n2_('Link'), '');
new LinkTarget($row1, 'href-target', n2_('Target window'));
$form->render();
?>
</div>
<div style="margin: 20px;">
<?php
$buttonSave = new BlockButtonSave($this);
$buttonSave->setLabel(n2_('Add slide'));
$buttonSave->addClass('n2_slider_add_slide');
$buttonSave->display();
?>
</div>
<input type="hidden" name="save" value="1">
</form>
<script>
_N2.r(['$', 'windowLoad'], function () {
var $ = _N2.$;
var $form = $('#n2_slider_add_slide_form');
$('#slider-add-slide-region').trigger("focus");
$('.n2_slider_add_slide').on('click', function (e) {
e.preventDefault();
$form.trigger("submit");
});
document.addEventListener('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (e.code === 'KeyS') { // ctrl + s
e.preventDefault();
$form.trigger("submit");
}
}
}, {
capture: true
});
});
</script>
<style>
:FOCUS {
box-shadow: 0 0 3px 1px #1d81f9 !important;
}
</style>

View File

@ -0,0 +1,32 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\View\AbstractViewAjax;
class ViewAjaxSliderBox extends AbstractViewAjax {
/** @var array */
protected $slider;
public function display() {
return $this->render('AjaxSliderBox');
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
}

View File

@ -0,0 +1,211 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Acl\Acl;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\FormManager\FormManagerSlider;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Banner\BlockBannerActivate;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenu;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenuItem;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\BlockSlideManager;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
class ViewSliderEdit extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
protected $slider;
/**
* @var BlockHeader
*/
protected $blockHeader;
/**
* @var FormManagerSlider
*/
protected $formManager;
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @param mixed $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
public function display() {
$this->formManager = new FormManagerSlider($this, $this->slider);
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle), 'ssi_16 ssi_16--folderclosed', $this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']), 'ssi_16 ssi_16--image', $this->getUrlSliderEdit($this->slider['id'], $this->groupID));
$slideManager = new BlockSlideManager($this);
$slideManager->setGroupID($this->groupID);
$slideManager->setSliderID($this->slider['id']);
$subNavigationHTML = '';
$subNavigationHTML .= $slideManager->toHTML();
$this->layout->setSubNavigation($subNavigationHTML);
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_slider_settings_save');
$buttonSave->addClass('n2_button--inactive');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
if ($this->groupID != 0) {
$buttonBack->setUrl($this->getUrlSliderEdit($this->groupID));
} else {
$buttonBack->setUrl($this->getUrlDashboard());
}
$buttonBack->addClass('n2_slider_settings_back');
$topBar->addPrimaryBlock($buttonBack);
$buttonPreview = new BlockButtonPlainIcon($this);
$buttonPreview->addClass('n2_top_bar_button_icon');
$buttonPreview->addClass('n2_top_bar_main__preview');
$buttonPreview->setIcon('ssi_24 ssi_24--preview');
$buttonPreview->addAttribute('data-n2tip', n2_('Preview'));
$buttonPreview->setUrl($this->getUrlPreviewIndex($this->slider['id']));
$topBar->addPrimaryBlock($buttonPreview);
$this->layout->setTopBar($topBar->toHTML());
$this->displayHeader();
$this->layout->addContent($this->render('Edit'));
$this->layout->render();
}
protected function displayHeader() {
$this->blockHeader = new BlockHeader($this);
$this->blockHeader->setHeading($this->slider['title']);
$this->blockHeader->setHeadingAfter('ID: ' . $this->slider['id']);
$this->formManager->addTabsToHeader($this->blockHeader);
$this->addHeaderActions();
$this->layout->addContentBlock($this->blockHeader);
}
public function getSlider() {
return $this->slider;
}
private function addHeaderActions() {
$accessEdit = Acl::canDo('smartslider_edit', $this);
$accessDelete = Acl::canDo('smartslider_delete', $this);
if ($accessEdit || $accessDelete) {
$sliderid = $this->slider['id'];
$actionsMenu = new BlockFloatingMenu($this);
$actions = new BlockButton($this);
$actions->setBig();
$actions->setLabel(n2_('Actions'));
$actions->setIcon('ssi_16 ssi_16--buttonarrow');
$actionsMenu->setButton($actions);
if ($accessEdit) {
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Change slider type'));
$item->setIcon('ssi_16 ssi_16--arrowright');
$item->addClass('n2_slider_action__change_slider_type');
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Clear cache'));
$item->setIcon('ssi_16 ssi_16--reset');
$item->setUrl($this->getUrlSliderClearCache($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(sprintf(n2_('Export %1$s as HTML'), n2_('Slider')));
$item->setIcon('ssi_16 ssi_16--download');
$item->setUrl($this->getUrlSliderExportHtml($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Export'));
$item->setIcon('ssi_16 ssi_16--download');
$item->setUrl($this->getUrlSliderExport($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Duplicate slider'));
$item->setIcon('ssi_16 ssi_16--duplicate');
$item->setUrl($this->getUrlSliderDuplicate($sliderid, $this->groupID));
$actionsMenu->addMenuItem($item);
}
if ($accessDelete) {
$item = new BlockFloatingMenuItem($this);
$item->setRed();
$item->setLabel(n2_('Move to trash'));
$item->setIcon('ssi_16 ssi_16--delete');
$item->setUrl($this->getUrlSliderMoveToTrash($sliderid, $this->groupID));
$actionsMenu->addMenuItem($item);
}
$this->blockHeader->addAction($actionsMenu->toHTML());
}
}
public function renderForm() {
$this->formManager->render();
}
}

View File

@ -0,0 +1,105 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSliderSimpleEdit extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
/**
* @var array
*/
protected $slider;
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle), 'ssi_16 ssi_16--folderclosed', $this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']), 'ssi_16 ssi_16--image', $this->getUrlSliderEdit($this->slider['id'], $this->groupID));
$this->layout->addBreadcrumb(n2_('Simple edit'), 'ssi_16 ssi_16--cog', $this->getUrlSliderSimpleEdit($this->slider['id'], $this->groupID));
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_slider_save');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
if ($this->groupID != 0) {
$buttonBack->setUrl($this->getUrlSliderEdit($this->groupID));
} else {
$buttonBack->setUrl($this->getUrlDashboard());
}
$buttonBack->addClass('n2_slider_settings_back');
$topBar->addPrimaryBlock($buttonBack);
$this->layout->setTopBar($topBar->toHTML());
$this->displayHeader();
$this->layout->addContent($this->render('SimpleEdit'));
$this->layout->render();
}
protected function displayHeader() {
$blockHeader = new BlockHeader($this);
$blockHeader->setHeading($this->slider['title']);
$blockHeader->setHeadingAfter('ID: ' . $this->slider['id']);
$addSlide = new BlockButton($this);
$addSlide->setGreen();
$addSlide->setBig();
$addSlide->setLabel(n2_('Add slide'));
$addSlide->setUrl($this->getUrlSliderSimpleEditAddSlide($this->slider['id'], $this->groupID));
$blockHeader->addAction($addSlide->toHTML());
$this->layout->addContentBlock($blockHeader);
}
}

View File

@ -0,0 +1,82 @@
<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSliderSimpleEditAddSlide extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
/**
* @var array
*/
protected $slider;
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle), 'ssi_16 ssi_16--folderclosed', $this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']), 'ssi_16 ssi_16--image', $this->getUrlSliderEdit($this->slider['id'], $this->groupID));
$this->layout->addBreadcrumb(n2_('Simple edit'), 'ssi_16 ssi_16--cog', $this->getUrlSliderSimpleEdit($this->slider['id'], $this->groupID));
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->setLabel(n2_('Add slide'));
$buttonSave->addClass('n2_slider_add_slide');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlSliderSimpleEdit($this->slider['id'], $this->groupID));
$topBar->addPrimaryBlock($buttonBack);
$this->layout->setTopBar($topBar->toHTML());
$this->layout->addContent($this->render('SimpleEditAddSlide'));
$this->layout->render();
}
}