/** * Get widget object. * * @return Widget||null */ public function getWidget() { if ($this->type !== Manager::PACKAGE_TYPE_WIDGET) { return null; } $data = $this->getData(); if (empty($data['widget_id'])) { return null; } return Widget::findFirstById($data['widget_id']); }
/** * 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); }