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;
 }
Exemple #3
0
 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;
 }