protected function _preSave() { $this->_bumpAddOnVersionId(); $templateForHooks = $this->getExtraData(self::EXTRA_DATA_TEMPLATE_FOR_HOOKS); if ($templateForHooks !== null) { // this extra data has been set somehow $this->set('template_for_hooks', $templateForHooks); } if ($this->get('widget_id') and !empty($this->_newData['xf_widget'])) { WidgetFramework_Helper_LayoutEditor::keepWidgetChanges($this->get('widget_id'), $this, $this->_newData['xf_widget']); } parent::_preSave(); }
protected function _addWidgets_addWidgetToWidgetsByGroup(array &$newWidget, array &$widgets, $groupPrefix = '') { $group = ''; if (!empty($newWidget['tab_group'])) { $group = $newWidget['tab_group']; foreach ($widgets as &$widgetRef) { if (empty($widgetRef['name']) or !isset($widgetRef['widgets'])) { // not a group continue; } if ($group === $widgetRef['name']) { $widgetRef['widgets'][$newWidget['widget_id']] =& $newWidget; return true; } elseif (strpos($group, $widgetRef['name']) === 0) { $added = $this->_addWidgets_addWidgetToWidgetsByGroup($newWidget, $widgetRef['widgets'], $widgetRef['name']); if ($added) { return true; } } } } $preparedWidget = array('widgets' => array(), 'widget_id' => $newWidget['widget_id'], 'position' => $newWidget['position'], 'widget_page_id' => $newWidget['widget_page_id'], 'tab_group' => $newWidget['tab_group'], 'display_order' => $newWidget['display_order']); $groupWithoutPrefix = substr($group, strlen($groupPrefix)); $groupWithoutPrefix = trim($groupWithoutPrefix, '/'); if (empty($groupWithoutPrefix)) { $preparedWidget['name'] = $newWidget['tab_group']; $preparedWidget['widgets'][$newWidget['widget_id']] = $newWidget; } else { $groupPrefixParts = WidgetFramework_Helper_LayoutEditor::splitGroupParts($groupPrefix); $groupWithoutPrefixParts = WidgetFramework_Helper_LayoutEditor::splitGroupParts($groupWithoutPrefix); $groupPrefixParts[] = array_shift($groupWithoutPrefixParts); $groupPrefixAppended = implode('/', $groupPrefixParts); $preparedWidget['name'] = $groupPrefixAppended; $preparedWidget['tab_group'] = $groupPrefixAppended; } $nameParts = WidgetFramework_Helper_LayoutEditor::splitGroupParts($preparedWidget['name']); $nameLastPart = array_pop($nameParts); $preparedWidget['isColumns'] = strpos($nameLastPart, 'column') === 0; $preparedWidget['isRows'] = strpos($nameLastPart, 'row') === 0; $preparedWidget['isRandom'] = strpos($nameLastPart, 'random') === 0; $preparedWidget['isTabs'] = !$preparedWidget['isColumns'] && !$preparedWidget['isRows'] && !$preparedWidget['isRandom']; $widgets[$newWidget['widget_id']] = $preparedWidget; if (!empty($preparedWidget['widgets'])) { return true; } else { return $this->_addWidgets_addWidgetToWidgetsByGroup($newWidget, $widgets, $groupPrefix); } }
public function actionDelete() { $widgetId = $this->_input->filterSingle('widget_id', XenForo_Input::UINT); $widget = $this->_getWidgetOrError($widgetId); if ($this->isConfirmedPost()) { /** @var WidgetFramework_DataWriter_Widget $dw */ $dw = XenForo_DataWriter::create('WidgetFramework_DataWriter_Widget'); $dw->setExistingData($widgetId); $dw->delete(); $link = XenForo_Link::buildAdminLink('widgets'); $widgetPageId = $dw->getExisting('widget_page_id'); if (!empty($widgetPageId)) { $link = XenForo_Link::buildAdminLink('widget-pages/edit', array('node_id' => $widgetPageId)); } $notLink = XenForo_Link::buildAdminLink('full:widgets/delete', $widget); $link = $this->getDynamicRedirectIfNot($notLink, $link); if ($this->_input->filterSingle('_layoutEditor', XenForo_Input::UINT)) { $changedRenderedId = WidgetFramework_Helper_LayoutEditor::getChangedRenderedId($dw); $viewParams = array('changedRenderedId' => $changedRenderedId); return $this->responseView('WidgetFramework_ViewAdmin_Widget_Save', '', $viewParams); } else { return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $link); } } else { $viewParams = array('widget' => $widget, '_layoutEditor' => $this->_input->filterSingle('_layoutEditor', XenForo_Input::UINT)); return $this->responseView('WidgetFramework_ViewAdmin_Widget_Delete', 'wf_widget_delete', $viewParams); } }
public function renderJson() { return XenForo_ViewRenderer_Json::jsonEncodeForOutput(array('hasRenderData' => count($this->_params['changedRenderedId']) > 0 ? 1 : 0, '_getRender' => 1, '_renderedIds' => implode(',', $this->_params['changedRenderedId']), 'saveMessage' => new XenForo_Phrase('wf_widget_saved_successfully'), 'changes' => WidgetFramework_Helper_LayoutEditor::getWidgetChanges())); }