public static function getChangedRenderedId(WidgetFramework_DataWriter_Widget $dw, array $changed = array()) { if ($dw->isChanged('position') or $dw->isChanged('display_order') or $dw->isChanged('options')) { $changed[] = $dw->get('widget_id'); $existingPosition = $dw->getExisting('position'); $existingOptions = $dw->getWidgetOptions(true); $existingGroup = ''; if (!empty($existingOptions['tab_group'])) { $existingGroup .= $existingOptions['tab_group']; } $newPosition = $dw->get('position'); $newOptions = $dw->getWidgetOptions(); $newGroup = ''; if (!empty($newOptions['tab_group'])) { $newGroup .= $newOptions['tab_group']; } if ($existingPosition !== $newPosition or $existingGroup !== $newGroup) { if (!empty($existingGroup)) { $changed[] = WidgetFramework_Helper_String::normalizeHtmlElementId($existingGroup); } if (!empty($newGroup)) { $changed[] = WidgetFramework_Helper_String::normalizeHtmlElementId($newGroup); } } } elseif ($dw->isDelete()) { $changed[] = $dw->get('widget_id'); $options = $dw->getWidgetOptions(); if (!empty($options['tab_group'])) { $changed[] = WidgetFramework_Helper_String::normalizeHtmlElementId($options['tab_group']); } } return $changed; }
protected function _wrapWidgets(array $tabs, array $wrapperParams, XenForo_Template_Abstract $template, array $widgetElement) { $wrapperParams['tabs'] = $tabs; $wrapperParams[self::PARAM_GROUP_NAME] = ''; if (!empty($widgetElement['name'])) { $wrapperParams[self::PARAM_GROUP_NAME] = $widgetElement['name']; } $wrapperParams['groupId'] = $wrapperParams[self::PARAM_GROUP_NAME]; $wrapperParams['normalizedGroupId'] = WidgetFramework_Helper_String::normalizeHtmlElementId($wrapperParams[self::PARAM_GROUP_NAME]); if (empty($wrapperParams['normalizedGroupId'])) { $wrapperParams['normalizedGroupId'] = md5(implode(array_keys($tabs))); } $wrapperParams['firstTab'] = reset($tabs); $wrapperParams['isColumns'] = $widgetElement['isColumns']; $wrapperParams['isRows'] = $widgetElement['isRows']; $wrapperParams['isRandom'] = $widgetElement['isRandom']; $wrapperParams['isTabs'] = $widgetElement['isTabs']; $wrapperTemplateName = 'wf_widget_wrapper'; if (WidgetFramework_Option::get('layoutEditorEnabled')) { $wrapperTemplateName = 'wf_layout_editor_widget_wrapper'; $wrapperParams['groupSaveParams'] = array('position_widget' => $wrapperParams['firstTab']['widget_id'], 'position' => $wrapperParams['firstTab']['position']); if (!empty($wrapperParams[self::PARAM_GROUP_NAME])) { $wrapperParams['groupSaveParams']['group'] = $wrapperParams[self::PARAM_GROUP_NAME]; } $wrapperParams['conditionalParams'] = WidgetFramework_Template_Helper_Layout::prepareConditionalParams($wrapperParams); if (!empty($firstTab['widget_page_id']) and !empty($wrapperParams['conditionalParams']['widgetPage'])) { $wrapperParams['groupSaveParams']['widget_page_id'] = $firstTab['widget_page_id']; unset($wrapperParams['conditionalParams']['widgetPage']); } $wrapperParams['groupParentGroupNameNormalized'] = ''; if (!empty($wrapperParams[self::PARAM_PARENT_GROUP_NAME])) { $wrapperParams['groupParentGroupNameNormalized'] = WidgetFramework_Helper_String::normalizeHtmlElementId($wrapperParams[self::PARAM_PARENT_GROUP_NAME]); } } $wrapperTemplateObj = $template->create($wrapperTemplateName, $wrapperParams); return $wrapperTemplateObj; }
protected function _renderWidgetsFor($positionCode, array $params, XenForo_Template_Abstract $template, $html) { if (!isset($this->_positions[$positionCode])) { // stop rendering if no widget configured for this position return $html; } $position =& $this->_positions[$positionCode]; if (empty($position['prepared'])) { // stop rendering if not prepared return $html; } foreach ($position['widgets'] as &$widgetGroup) { $count = 0; $isRandom = strpos($widgetGroup['name'], 'random') === 0; if ($widgetGroup['keys'] === false) { $widgetGroup['keys'] = array_keys($widgetGroup['widgets']); if ($isRandom) { shuffle($widgetGroup['keys']); } } foreach ($widgetGroup['keys'] as $key) { $widget =& $widgetGroup['widgets'][$key]; $widgetHtml = ''; $renderer = self::getRenderer($widget['class'], false); if (!empty($renderer)) { $widgetHtml = strval($renderer->render($widget, $positionCode, $params, $template, $html)); // extra-preparation (this will be run everytime the widget is ready to display) // this method can change the final html in some way if it needs to do that // the changed html won't be store in the cache (caching is processed inside // WidgetFramework_Renderer::render()) $position['extraData'][$widget['widget_id']] = $renderer->extraPrepare($widget, $widgetHtml); } if (!empty($widgetHtml)) { $position['html'][$widget['widget_id']] = $widgetHtml; $count++; } else { $position['html'][$widget['widget_id']] = ''; } if ($isRandom and $count > 0) { // we are in random group // at least 1 widget is rendered // stop the foreach loop now break; } } if ($count > 0) { $tabs = array(); $noWrapper = array(); foreach ($widgetGroup['keys'] as $key) { $widget =& $widgetGroup['widgets'][$key]; $renderer = self::getRenderer($widget['class'], false); if (!empty($position['html'][$widget['widget_id']])) { if ($renderer->useWrapper($widget)) { $widgetClass = $widget['class']; if (!empty($params[WidgetFramework_WidgetRenderer::PARAM_IS_HOOK])) { $widgetClass .= ' non-sidebar-widget'; } $tabs[$widget['widget_id']] = array('widget_id' => $widget['widget_id'], 'title' => WidgetFramework_Helper_String::createWidgetTitleDelayed($renderer, $widget), 'html' => $position['html'][$widget['widget_id']], 'class' => $widgetClass, 'extraData' => $position['extraData'][$widget['widget_id']], 'options' => $widget['options']); } else { $noWrapper[$widget['widget_id']] = $position['html'][$widget['widget_id']]; } } } $htmls = $noWrapper; if (!empty($tabs)) { $htmls[] = WidgetFramework_WidgetRenderer::wrap($tabs, $params, $template, $widgetGroup['name']); } if (count($htmls) > 0) { if ($widgetGroup['display_order'] >= 0) { array_unshift($htmls, $html); } else { $htmls[] = $html; } $html = WidgetFramework_Helper_String::createArrayOfStrings($htmls); } } } return $html; }