/** * Constructor * * @param array $config An array of configuration options (name, state, dbo, table_path, ignore_request). * * @since 3.3.4 * @throws Exception */ public function __construct($config = array()) { $this->app = JArrayHelper::getValue($config, 'app', JFactory::getApplication()); $this->user = JArrayHelper::getValue($config, 'user', JFactory::getUser()); $this->config = JArrayHelper::getValue($config, 'config', JFactory::getConfig()); $this->session = JArrayHelper::getValue($config, 'session', JFactory::getSession()); $this->date = JArrayHelper::getValue($config, 'date', JFactory::getDate()); $this->lang = JArrayHelper::getValue($config, 'lang', JFactory::getLanguage()); $this->package = $this->app->getUserState('com_fabrik.package', 'fabrik'); parent::__construct($config); }
/** * Method to handle any login logic and report back to the subject. * * @param array $user Holds the user data. * @param array $options Array holding options (remember, autoregister, group). * * @return boolean True on success. * * @since 1.5 */ public function onUserLogin($user, $options = array()) { $menu = $this->app->getMenu(); if ($this->app->isSite()) { if ($this->params->get('automatic_change', 1)) { $assoc = JLanguageAssociations::isEnabled(); $lang_code = $user['language']; // If no language is specified for this user, we set it to the site default language if (empty($lang_code)) { $lang_code = $this->default_lang; } jimport('joomla.filesystem.folder'); // The language has been deleted/disabled or the related content language does not exist/has been unpublished // or the related home page does not exist/has been unpublished if (!array_key_exists($lang_code, $this->lang_codes) || !array_key_exists($lang_code, JLanguageMultilang::getSiteHomePages()) || !JFolder::exists(JPATH_SITE . '/language/' . $lang_code)) { $lang_code = $this->current_lang; } // Try to get association from the current active menu item $active = $menu->getActive(); $foundAssociation = false; if ($active) { if ($assoc) { $associations = MenusHelper::getAssociations($active->id); } // The login menu item contains a redirection. // This will override the automatic change to the user preferred language if ($active->params['login_redirect_url']) { $this->app->setUserState('users.login.form.return', JRoute::_($this->app->getUserState('users.login.form.return'), false)); } elseif ($this->app->getUserState('users.login.form.return')) { // The login module contains a menu item redirection. Try to get association from that menu item. $itemid = preg_replace('/\\D+/', '', $this->app->getUserState('users.login.form.return')); if ($assoc) { $associations = MenusHelper::getAssociations($itemid); } if (isset($associations[$lang_code]) && $menu->getItem($associations[$lang_code])) { $associationItemid = $associations[$lang_code]; $this->app->setUserState('users.login.form.return', 'index.php?Itemid=' . $associationItemid); $foundAssociation = true; } } elseif (isset($associations[$lang_code]) && $menu->getItem($associations[$lang_code])) { $associationItemid = $associations[$lang_code]; $this->app->setUserState('users.login.form.return', 'index.php?Itemid=' . $associationItemid); $foundAssociation = true; } elseif ($active->home) { // We are on a Home page, we redirect to the user site language home page $item = $menu->getDefault($lang_code); if ($item && $item->language != $active->language && $item->language != '*') { $this->app->setUserState('users.login.form.return', 'index.php?Itemid=' . $item->id); $foundAssociation = true; } } } if ($foundAssociation && $lang_code != $this->current_lang) { // Change language. $this->current_lang = $lang_code; // Create a cookie. $this->setLanguageCookie($lang_code); // Change the language code. JFactory::getLanguage()->setLanguage($lang_code); } } else { if ($this->app->getUserState('users.login.form.return')) { $this->app->setUserState('users.login.form.return', JRoute::_($this->app->getUserState('users.login.form.return'), false)); } } } }
/** * Set the List's tab HTML * * @return array Tabs */ public function loadTabs() { $this->tabs = array(); $tabs = $this->getTabCategories(); if (!is_array($tabs) || empty($tabs)) { return $this->tabs; } $package = $this->app->getUserState('com_fabrik.package', 'fabrik'); $listId = $this->getId(); $tabsField = $this->getTabField(); $itemId = FabrikWorker::itemId(); $uri = JURI::getInstance(); $urlBase = $uri->toString(array('path')); $urlBase .= '?option=com_' . $package . '&'; if ($this->app->isAdmin()) { $urlBase .= 'task=list.view&'; } else { $urlBase .= 'view=list&'; } $urlBase .= 'listid=' . $listId . '&resetfilters=1'; $urlEquals = $urlBase . '&' . $tabsField . '=%s'; $urlRange = $urlBase . '&' . $tabsField . '[value][]=%s&' . $tabsField . '[value][]=%s&' . $tabsField . '[condition]=BETWEEN'; $uri = JURI::getInstance(); $thisUri = rawurldecode($uri->toString(array('path', 'query'))); foreach ($tabs as $i => $tabArray) { $row = new stdClass(); list($label, $range) = $tabArray; $row->label = $label; if (is_null($range)) { $row->href = $urlBase; } elseif (!is_array($range)) { $row->href = sprintf($urlEquals, $range); } else { list($low, $high) = $range; $row->href = sprintf($urlEquals, sprintf($urlRange, $low, $high)); } if ($itemId) { $row->href .= '&Itemid=' . $itemId; } $row->id = 'list_tabs_' . $this->getId() . '_' . $i; $row->js = false; $row->class = $thisUri == $row->href ? 'active' : ''; $this->tabs[] = $row; } return $this->tabs; }