/** * Widget options. * * @return void * * @Route("/widget-options", methods={"GET", "POST"}, name="admin-pages-widget-options") */ public function widgetOptionsAction() { $widgetIndex = $this->request->get('widget_index', 'int', -1); if ($widgetIndex != '0' && intval($widgetIndex) == 0) { $widgetIndex = -1; } $currentPageWidgets = $this->session->get('admin-pages-manage', []); if ($widgetIndex == -1) { $widgetIndex = $this->session->get('admin-pages-widget-index'); $currentPageWidgets[$widgetIndex] = ['widget_index' => $widgetIndex, 'id' => 0, 'layout' => $this->request->get('layout', 'string', 'middle'), 'widget_id' => $this->request->get('widget_id', 'int'), 'params' => []]; } if (empty($currentPageWidgets[$widgetIndex])) { return; } $widgetData = $currentPageWidgets[$widgetIndex]; $id = $widgetData['id']; $widgetParams = $widgetData['params']; $widgetParams['content_id'] = $id; $widget_id = $widgetData['widget_id']; $widgetMetadata = Widget::findFirstById($widget_id); $form = new CoreForm(); // building widget form $adminForm = $widgetMetadata->admin_form; if (empty($adminForm)) { $form->addText('title'); } elseif ($adminForm == 'action') { $widgetName = $widgetMetadata->name; if ($widgetMetadata->module !== null) { $widgetClass = '\\' . ucfirst($widgetMetadata->module) . '\\Widget\\' . $widgetName . '\\Controller'; } else { $widgetClass = '\\Widget\\' . $widgetName . '\\Controller'; } $widgetController = new $widgetClass(); $widgetController->setDefaults($widgetName, ucfirst($widgetMetadata->module), $widgetParams); $widgetController->prepare(); $form = $widgetController->adminAction(); } else { $form = new $adminForm(); } if ($widgetMetadata->is_paginated == 1) { $form->addText('count', 'Items count', null, 10); $form->setOrder('count', 1000); } if ($widgetMetadata->is_acl_controlled == 1) { $form->addMultiSelect('roles', 'Roles', null, Role::find(), null, ['using' => ['id', 'name']]); $form->setOrder('roles[]', 1001); } // set form values if (!empty($widgetParams)) { $form->setValues($widgetParams); } if (!$this->request->isPost() || !$form->isValid()) { $this->view->form = $form; $this->view->id = $id; $this->view->name = $widgetMetadata->name; return; } $currentPageWidgets[$widgetIndex]['params'] = $form->getValues(); $this->resolveModal(['hide' => true, 'customJs' => 'setEditedWidgetIndex(' . $widgetIndex . ');']); $this->session->set('admin-pages-manage', $currentPageWidgets); $this->session->set('admin-pages-widget-index', ++$widgetIndex); }
/** * Get access editing form. * * @param \stdClass $objectAcl Acl object with data. * @param Role $currentRole Role object. * * @return CoreForm */ protected function _getForm($objectAcl, $currentRole) { $form = new CoreForm(); if (!empty($objectAcl->actions)) { $form->addHtml('header_actions', '<h4>' . $this->di->get('i18n')->_('Actions') . '</h4>'); foreach ($objectAcl->actions as $action) { $form->addCheckbox($action, ucfirst($action), sprintf('ACTION_%s_%s_DESCRIPTION', strtoupper(str_replace('\\', '_', $objectAcl->name)), strtoupper($action)), 1, $this->core->acl()->isAllowed($currentRole->name, $objectAcl->name, $action), 0); } } if (!empty($objectAcl->options)) { $form->addHtml('header_options', '<br/><br/><h4>' . $this->di->get('i18n')->_('Options') . '</h4>'); foreach ($objectAcl->options as $option) { $form->addText($option, ucfirst($option), sprintf('OPTION_%s_%s_DESCRIPTION', strtoupper(str_replace('\\', '_', $objectAcl->name)), strtoupper($option)), $this->core->acl()->getAllowedValue($objectAcl->name, $currentRole, $option)); } } $form->addFooterFieldSet()->addButton('save')->addButtonLink('cancel', 'Cancel', ['for' => 'admin-access']); return $form; }
/** * Admin action for editing widget options through admin panel. * * @return CoreForm */ public function adminAction() { $form = new CoreForm(); $form->addText('title'); // Adding additional html for language selector support. $languageSelectorHtml = ' <style type="text/css"> form .form_elements > div{ min-height: auto !important; padding-top: 0px !important; } form .form_elements > div:nth-last-child(2){ padding-top: 10px !important; } </style> <script type="text/javascript"> var defaultLanguage = "%s"; $(document).ready(function(){ $("#html_block_language").change(function(){ $("#cke_html_"+$(this).val()).closest(".form_element_container").show(); $(".cke").not("#cke_html_"+$(this).val()).closest(".form_element_container").hide(); }); // Hide inactive. $("textarea").not("#html_"+defaultLanguage).closest(".form_element_container").hide(); setTimeout( function(){ $(".cke").not("#cke_html_"+defaultLanguage).closest(".form_element_container").hide(); }, 200); }); </script> <div class="form_element_container" style="float: left;"> <div class="form_label"> <label for="title">%s</label> </div> <div class="form_element"> <select id="html_block_language" style="width: 120px;"> %s </select> </div> </div> '; // Creating languages boxes. $languages = Language::find(); $languageHtmlItems = ''; $defaultLanguage = Settings::getSetting('system_default_language', 'en'); if ($defaultLanguage == 'auto') { $defaultLanguage = 'en'; } $elements = []; foreach ($languages as $language) { $selectedLanguage = ''; if ($language->language == $defaultLanguage) { $selectedLanguage = 'selected="selected"'; } $elementName = 'html_' . $language->language; $elements[$elementName] = 'HTML (' . strtoupper($language->language) . ')'; $languageHtmlItems .= '<option ' . $selectedLanguage . ' value=' . $language->language . '>' . $language->name . '</option>'; } $languageSelectorHtml = sprintf($languageSelectorHtml, $defaultLanguage, $this->di->get('i18n')->_('HTML block, for:'), $languageHtmlItems); // Adding created html to form. $form->addHtml('html_language', $languageSelectorHtml); foreach ($elements as $elementName => $elementTitle) { $form->addCkEditor($elementName, $elementTitle); } $form->addHtml('separator'); return $form; }