_sModule = 'bx_help_tours';
$this->_oModule = BxDolModule::getInstance($this->_sModule);
if(!$oTemplate)
$oTemplate = $this->_oModule->_oTemplate;
parent::__construct ($aOptions, $oTemplate);
$this->_iTourId = bx_get('tour');
if ($this->_iTourId) {
$this->_aQueryAppend['tour'] = $this->_iTourId;
$this->_aTourPageBlocks = $this->_oModule->_oDb->getPageBlocksForHelpTour($this->_iTourId);
}
}
protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
{
if(!empty($this->_iTourId)) {
$this->_aOptions['source'] .= $this->_oModule->_oDb->prepareAsString(" AND `tour` = ? ", $this->_iTourId);
return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
}
return false;
}
protected function _getCellElement($mixedValue, $sKey, $aField, $aRow)
{
if (isset($this->_aTourPageBlocks[$aRow['element']])) $mixedValue = htmlspecialchars($this->_aTourPageBlocks[$aRow['element']]);
return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
}
private function getAddEditForm($iEntry) {
$aEntry = false;
if ($iEntry) {
$aEntry = $this->_oModule->_oDb->getTourItemDetails($iEntry);
if (!$aEntry) {
echoJson([]);
exit;
}
}
$oForm = $this->getAddEditFormObject($iEntry);
$oForm->aFormAttrs['action'] = BX_DOL_URL_ROOT.'grid.php?o=' . $this->_sObject . '&a='.($aEntry ? 'edit' : 'add');
if ($aEntry) {
$aEntry['element_helper'] = $aEntry['element'];
if ($aEntry['element'] && !isset($this->_aTourPageBlocks[$aEntry['element']])) $aEntry['element_helper'] = 'custom';
}
$oForm->initChecker($aEntry);
if (isset($oForm->aInputs['element_helper']['value']) && $oForm->aInputs['element_helper']['value'] == 'custom')
unset($oForm->aInputs['element']['tr_attrs']);
if ($oForm->isSubmittedAndValid()) {
if ($aEntry) {
$oForm->update($aEntry['id']);
$iResult = $aEntry['id'];
} else {
$iResult = $oForm->insert();
}
if ($iResult) {
$aRes = ['grid' => $this->getCode(false), 'blink' => $iResult];
} else {
$aRes = ['msg' => "Error occured"]; // if record adding failed, display error message
}
echoJson($aRes);
} else {
$s = '
' . $oForm->getCode(true) . '
';
echoJson(['popup' => [
'html' => BxTemplStudioFunctions::getInstance()->popupBox('bx-tour-item-details-popup', _t('_bx_help_tours_cpt_tour_item_details'), $s),
'options' => [
'onBeforeShow' => empty($aEntry) ? "$('#grid-popup-bx_help_tours_items-edit').remove();" : "$('#grid-popup-bx_help_tours_items-add').remove();",
'closeOnOuterClick' => false,
]]]
);
}
}
public function performActionAdd()
{
if(!$this->canAdd()) {
echoJson([]);
exit;
}
return $this->getAddEditForm(0);
}
public function performActionEdit()
{
$iEntry = !is_null($_REQUEST) && isset($_REQUEST['id']) ? intval($_REQUEST['id']) : intval($_REQUEST['ids'][0]);
if(!$iEntry) {
echoJson([]);
exit;
}
return $this->getAddEditForm($iEntry);
}
private function getAddEditFormObject($iEntry) {
$aArrowOptionsSrc = ['auto', 'auto-start', 'auto-end', 'top', 'top-start', 'top-end', 'bottom', 'bottom-start', 'bottom-end', 'right', 'right-start', 'right-end', 'left', 'left-start', 'left-end'];
$aArrowOptions = ['' => _t('_bx_help_tours_arrow_option_none')];
foreach ($aArrowOptionsSrc as $sOption) {
$aArrowOptions[$sOption] = $sOption;
}
$aForm = [
'form_attrs' => [
'method' => 'post',
'action' => '',
'id' => 'bx-help-tour-item-details-form',
],
'params' => [
'db' => [
'submit_name' => 'submit',
'table' => 'bx_help_tours_items',
'key' => 'id',
'uri' => '',
'uri_title' => '',
],
],
'inputs' => [
'id' => [
'type' => 'hidden',
'name' => 'id',
'value' => $iEntry,
],
'tour' => [
'type' => 'hidden',
'name' => 'tour',
'value' => $this->_iTourId,
'db' => [
'pass' => 'Int',
],
],
'name' => [
'type' => 'text',
'name' => 'name',
'required' => true,
'caption' => _t('_bx_help_tours_form_field_name'),
'info' => _t('_bx_help_tours_form_field_name_info'),
'checker' => [
'func' => 'Avail',
'error' => _t('_bx_help_tours_form_field_name_error'),
],
'db' => [
'pass' => 'Xss',
],
],
'element_helper' => [
'type' => 'select',
'name' => 'element_helper',
'caption' => _t('_bx_help_tours_form_field_element'),
'info' => _t('_bx_help_tours_form_field_element_info'),
'values' =>
['' => _t('_bx_help_tours_form_field_option_none')] +
$this->_aTourPageBlocks +
['custom' => _t('_bx_help_tours_form_field_option_custom')],
'attrs' => [
'onchange' => "
$('#bx-help-tours-input-element').val(this.value == 'custom' ? '' : this.value);
if (this.value == 'custom') $('#bx-form-element-element').fadeIn(); else $('#bx-form-element-element').fadeOut();
",
],
],
'element' => [
'type' => 'text',
'name' => 'element',
'caption' => _t('_bx_help_tours_form_field_element_custom'),
'info' => _t('_bx_help_tours_form_field_element_custom_info'),
'attrs' => [
'id' => 'bx-help-tours-input-element',
],
'tr_attrs' => [
'style' => 'display:none;',
],
'db' => array (
'pass' => 'Xss',
),
],
'title' => [
'type' => 'text_translatable',
'name' => 'title',
'caption' => _t('_bx_help_tours_form_field_title'),
'db' => [
'pass' => 'Xss',
],
],
'text' => [
'type' => 'textarea_translatable',
'name' => 'text',
'required' => true,
'caption' => _t('_bx_help_tours_form_field_text'),
'checker' => [
'func' => 'AvailTranslatable',
'params' => ['text'],
'error' => _t('_bx_help_tours_form_field_text_error'),
],
'db' => [
'pass' => 'Xss',
],
'code' => true, //to avoid loosing HTML formatting
],
'arrow' => [
'type' => 'select',
'name' => 'arrow',
'caption' => _t('_bx_help_tours_form_field_arrow'),
'values' => $aArrowOptions,
'value' => 'auto',
'db' => array (
'pass' => 'Xss',
),
],
'actions' => [
'type' => 'input_set',
0 => [
'type' => 'submit',
'name' => 'submit',
'value' => _t('_Submit'),
],
1 => [
'type' => 'button',
'name' => 'cancel',
'value' => _t('_Cancel'),
'attrs' => [
'style' => 'margin-left: 20px;',
'onclick' => '$(".bx-popup-active:visible").dolPopupHide();',
],
],
],
],
];
return new BxTemplStudioFormView($aForm);
}
public function performActionDelete() {
$aIds = bx_get('ids');
if (!$aIds || !is_array($aIds)) {
echoJson(array());
exit;
}
$oLanguage = BxDolStudioLanguagesUtils::getInstance();
foreach ($aIds as $iEntry) {
$aItem = $this->_oModule->_oDb->getTourItemDetails($iEntry);
$oLanguage->deleteLanguageString($aItem['title']);
$oLanguage->deleteLanguageString($aItem['text']);
$this->_delete($iEntry);
}
echoJson(array(
'grid' => $this->getCode(false),
));
}
public function _getActionPreview($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array()) {
$sUrl = $this->_oModule->_oDb->getTourPageUrl($this->_iTourId);
if (!$sUrl) return '';
$sUrl = trim($sUrl, '/');
$a['attr']['href'] = bx_absolute_url(bx_append_url_params(BxDolPermalinks::getInstance()->permalink($sUrl), ['help_tour_preview' => $this->_iTourId, 'help_tour_item' => $aRow['id']]));
$a['attr']['target'] = '_blank';
$sButton = $this->_getActionDefault($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
$sA = str_replace('button', 'a', $sButton);
return $sA;
}
protected function canAdd()
{
return !empty($this->_iTourId);
}
protected function _getActionAdd($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
{
if(!$this->canAdd())
$isDisabled = true;
return parent::_getActionDefault($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
}
protected function _getFilterControls ()
{
$aTourOptions = $this->_oModule->_oDb->getHelpToursOptions();
if ($aTourOptions) foreach ($aTourOptions as $iTour => $sPage) {
$aPageTitle = $this->_oModule->_oDb->getPageTitleDetails($sPage);
if ($aPageTitle)
$aTourOptions[$iTour] = $aPageTitle['module_title'].': '._t($aPageTitle['title_system']);
}
$aInputTour = [
'type' => 'select',
'name' => 'tour',
'value' => $this->_iTourId,
'values' => ['' => _t('_sys_please_select')] + $aTourOptions,
'attrs' => array(
'id' => 'bx-grid-tour',
'onChange' => 'javascript:' . $this->getJsObject() . '.onChangeTour(this.value);',
),
];
$oForm = new BxTemplStudioFormView(array());
return $oForm->genRow($aInputTour).parent::_getFilterControls();
}
protected function _addJsCss()
{
parent::_addJsCss();
$this->_oModule->_oTemplate->addStudioCss('admin.css');
$this->_oModule->_oTemplate->addStudioJs('grid_items.js');
$oForm = new BxTemplStudioFormView(array());
$oForm->addCssJs();
}
function getJsObject()
{
return 'oBxHelpToursGridItems';
}
function getCode($isDisplayHeader = true)
{
return $this->_oModule->_oTemplate->parseHtmlByName('grid_items.html', [
'module_url' => BX_DOL_URL_ROOT.$this->_oModule->_oConfig->getBaseUri(),
'content' => parent::getCode($isDisplayHeader),
'js_object' => $this->getJsObject(),
'grid_object' => $this->_sObject,
'tour' => $this->_iTourId,
'page_url' => BX_DOL_URL_STUDIO.'module.php?name=' . $this->_sModule . '&page=items',
]);
}
}
/** @} */