_setMessage($message, static::MSG_LOCKED);
$this->_setMessage('Hot spots have been updated', static::MSG_UPDATED);
$this->_getDataObj()->setSlideId(Qs_Request::getRequestValue('slideId'));
$this->_pageHeaderTemplates['headerEdit'] = 'Edit Slide\'s Hot Spots';
$this->_getDataObj()->setResourceName($this->_getDataObj()->getResourceName() . 'HotSpot');
return $this;
}
public function exec()
{
$this->_initBackUrl();
if (true !== $this->getConfig('hasHotSpots')) {
$this->_setBackAttention('Hot Sports are disabled');
parent::_doCancel();
}
return parent::exec();
}
protected function _doEdit()
{
if (!$this->_lock()) {
$this->_setBackUrl($this->_getBackUrl(PARENT_PAGE));
$this->_setBackAttention($this->_createMessage(static::MSG_LOCKED, $this->_getLocker()));
$this->_doBack();
}
if ('image' != $this->_getDataObj()->getSlideData('type')) {
$this->_doc->displayError(
'Only "Image" type slides support "hot spots" function.'
. '
« Back to list'
);
return false;
}
$item = [];
$this->_getDataObj()->initData();
$item['tpl'] = 'Slide/spot_form.tpl';
$item['slide'] = $this->_getDataObj()->getSlideData();
$item['pages'] = App_Cms_Obj::getInstance()->getPages4Select();
$options = [];
$options['cancelUrl'] = $this->url(['action' => 'cancel', 'slideId' => $this->_getDataObj()->getSlideId()]);
$options['spotsList'] = $this->_getDataObj()->getData();
$options['containerWidth'] = $item['slide']['width'];
$options['containerHeight'] = $item['slide']['height'];
$options['slideId'] = $item['slide']['id'];
$this->_addItem($item);
$this->_doc->addScript('js/jquery-ui.js')
->addCriticalStylesheet('css/thirdpart/jquery-ui.css')
->addScript('js/app/admin-slide.js')
->addInitFunction('initAppSlideSpotForm', [$options]);
$this->_log();
return $this;
}
public function _doSave()
{
$this->_doSaveAjax();
}
protected function _doSaveAjax()
{
if ($this->_isLocked()) {
$data = ['isLocked' => true, 'error' => $this->_createMessage(static::MSG_LOCKED, $this->_getLocker())];
} else {
$data = $_REQUEST;
if (true === ($errors = $this->_isValid($data))) {
$this->_getDataObj()->save($data);
$data = ['status' => 'ok', 'backUrl' => $this->_getBackUrl()];
$this->_log();
$this->_setBackMessage(static::MSG_UPDATED);
} else {
$data = ['status' => 'fail', 'errors' => $errors];
}
}
$this->_displayJson($data);
}
protected function _isValid($data)
{
$errors = [];
if (is_array($data['urlType']) && !empty($data['urlType'])) {
foreach ($data['urlType'] as $index => $urlType) {
if ($urlType == 'page' && intval($data['pageId'][$index]) == 0) {
$errors[$index] = 'Please select page.';
break;
}
if ($urlType == 'url') {
if ($data['url'][$index] == '') {
$errors[$index] = 'Url is required.';
break;
} else if (!preg_match('/^(http|ftp)s?:\/\/.+$/', $data['url'][$index])) {
$errors[$index] = 'Url is in wrong format.';
break;
}
}
}
}
return empty($errors) ?: $errors;
}
protected function _initBackUrl()
{
$this->_setBackUrl($this->_getBackUrl(PARENT_PAGE));
return $this;
}
}