/**
  * Adds Focus tab to main navigation
  * @param SkinTemplate $sktemplate
  * @param BaseTemplate $tpl
  * @return boolean Always true to keep hook running
  */
 public function onSkinTemplateOutputPageBeforeExec(&$sktemplate, &$tpl)
 {
     $aViews = array();
     $oUser = $sktemplate->getUser();
     $oCurrentTitle = $sktemplate->getTitle();
     $sEditLink = '';
     if ($oUser->isLoggedIn() === false) {
         $this->getDefaultWidgets($aViews, $oUser, $oCurrentTitle);
     } else {
         $oTitle = Title::makeTitle(NS_USER, $oUser->getName() . '/Sidebar');
         $sEditLink = Linker::link($oTitle, '', array('id' => 'bs-usersidebar-edit', 'class' => 'icon-pencil'), array('action' => 'edit', 'preload' => ''));
         if ($oTitle->exists() === false) {
             $this->getDefaultWidgets($aViews, $oUser, $oTitle);
         } else {
             $aWidgets = BsWidgetListHelper::getInstanceForTitle($oTitle)->getWidgets();
             if (empty($aWidgets)) {
                 $this->getDefaultWidgets($aViews, $oUser, $oTitle);
             }
             $aViews = array_merge($aViews, $aWidgets);
         }
     }
     $aOut = array();
     $aOut[] = $sEditLink;
     foreach ($aViews as $oView) {
         if ($oView instanceof ViewBaseElement) {
             $aOut[] = $oView->execute();
         }
     }
     if ($tpl instanceof BsBaseTemplate) {
         $tpl->data['bs_navigation_main']['bs-usersidebar'] = array('position' => 20, 'label' => wfMessage('bs-tab_focus')->plain(), 'class' => 'icon-clipboard', 'content' => implode("\n", $aOut));
     } else {
         $tpl->data['sidebar'][wfMessage('bs-tab_focus')->plain()] = implode("\n", $aOut);
     }
     return true;
 }
 protected function getWidgets($oCurrentTitle, $oUser)
 {
     $oWidgetListView = new ViewWidgetList();
     $aWidgetViews = array();
     if ($oCurrentTitle->userCan('read') == false) {
         if ($oCurrentTitle->isSpecialPage() && $oUser->isLoggedIn()) {
             $oView = $oWidgetListView->setWidgets($this->getDefaultWidgets($aWidgetViews, $oUser, $oCurrentTitle));
         } else {
             // set widget list to empty when user cannot read the page
             $oView = $oWidgetListView->setWidgets(array());
         }
         return $oView;
     }
     $oTitle = Title::makeTitle(NS_USER, $oUser->getName() . '/Widgetbar');
     if ($oTitle->exists() === false) {
         $oView = $oWidgetListView->setWidgets($this->getDefaultWidgets($aWidgetViews, $oUser, $oTitle));
         return $oView;
     }
     $aWidgets = BsWidgetListHelper::getInstanceForTitle($oTitle)->getWidgets();
     if (empty($aWidgets)) {
         $aWidgets = $this->getDefaultWidgets($aWidgetViews, $oUser, $oTitle);
     }
     $oWidgetListView->setWidgets($aWidgets);
     $oView = $oWidgetListView;
     return $oView;
 }