Your IP : 216.73.216.170


Current Path : /var/www/iplanru/data/www/i-plan.ru/administrator/components/com_sef/models/
Upload File :
Current File : /var/www/iplanru/data/www/i-plan.ru/administrator/components/com_sef/models/config.php

<?php
/**
 * SEF component for Joomla!
 * 
 * @package   JoomSEF
 * @version   4.7.8
 * @author    ARTIO s.r.o., http://www.artio.net
 * @copyright Copyright (C) 2020 ARTIO s.r.o. 
 * @license   GNU/GPLv3 http://www.artio.net/license/gnu-general-public-license
 */

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die();

jimport('joomla.filesystem.folder');

require_once(JPATH_COMPONENT.'/helpers/artio-update.php');

class SEFModelConfig extends SEFModel
{
    private $_menuitems=null;
    function __construct()
    {
        parent::__construct();
    }

    function getLists()
    {
        $db = JFactory::getDBO();
        $sefConfig = SEFConfig::getConfig();

        $std_opt = 'class="inputbox" size="2"';

        $lists['enabled']           = $this->booleanRadio('enabled',            $std_opt, $sefConfig->enabled);
        $lists['professionalMode']  = $this->booleanRadio('professionalMode',   $std_opt, $sefConfig->professionalMode);
        $lists['lowerCase']         = $this->booleanRadio('lowerCase',          $std_opt, $sefConfig->lowerCase);
        $lists['forceSsl']          = $this->booleanRadio('forceSsl',           $std_opt, $sefConfig->forceSsl);
        $lists['disableNewSEF']     = $this->booleanRadio('disableNewSEF',      $std_opt, $sefConfig->disableNewSEF);
        $lists['dontRemoveSid']     = $this->booleanRadio('dontRemoveSid',      $std_opt, $sefConfig->dontRemoveSid);
        $lists['setQueryString']    = $this->booleanRadio('setQueryString',     $std_opt, $sefConfig->setQueryString);
        $lists['parseJoomlaSEO']    = $this->booleanRadio('parseJoomlaSEO',     $std_opt, $sefConfig->parseJoomlaSEO);
        $lists['checkJunkUrls']     = $this->booleanRadio('checkJunkUrls',      $std_opt, $sefConfig->checkJunkUrls);
        $lists['preventNonSefOverwrite']    = $this->booleanRadio('preventNonSefOverwrite', $std_opt, $sefConfig->preventNonSefOverwrite);

        $basehrefs[] = JHTML::_('select.option', _COM_SEF_BASE_HOMEPAGE,    JText::_('COM_SEF_ONLY_BASE_URL'));
        $basehrefs[] = JHTML::_('select.option', _COM_SEF_BASE_CURRENT,     JText::_('COM_SEF_FULL_SEO_URL'));
        $basehrefs[] = JHTML::_('select.option', _COM_SEF_BASE_NONE,        JText::_('COM_SEF_DISABLE_BASE_HREF'));
        $basehrefs[] = JHTML::_('select.option', _COM_SEF_BASE_IGNORE,      JText::_('COM_SEF_LEAVE_ORIGINAL'));
        $lists['check_base_href'] = JHTML::_('select.genericlist', $basehrefs, 'check_base_href', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->check_base_href);

        // www and non-www handling
        $wwws[] = JHTML::_('select.option', _COM_SEF_WWW_NONE,          JText::_('COM_SEF_DONT_HANDLE'));
        $wwws[] = JHTML::_('select.option', _COM_SEF_WWW_USE_WWW,       JText::_('COM_SEF_USE_WWW'));
        $wwws[] = JHTML::_('select.option', _COM_SEF_WWW_USE_NONWWW,    JText::_('COM_SEF_USE_NON_WWW'));
        $lists['wwwHandling'] = JHTML::_('select.genericlist', $wwws, 'wwwHandling', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->wwwHandling);

        $lists['langEnable']     = $this->booleanRadio('langEnable', $std_opt, $sefConfig->langEnable);
        $langPlacement=array();
        $langPlacement[] = JHTML::_('select.option', _COM_SEF_LANG_PATH,   JText::_('COM_SEF_INCLUDE_IN_PATH'));
        //$langPlacement[] = JHTML::_('select.option', _COM_SEF_LANG_SUFFIX, JText::_('COM_SEF_ADD_AS_SUFFIX'));
        $langPlacement[] = JHTML::_('select.option', _COM_SEF_LANG_DOMAIN, JText::_('COM_SEF_USE_DIFFERENT_DOMAINS'));
        $lists['langPlacementJoomla'] = JHTML::_('select.genericlist', $langPlacement, 'langPlacementJoomla', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->langPlacementJoomla);
        $lists['alwaysUseLangJoomla']     = $this->booleanRadio('alwaysUseLangJoomla', $std_opt, $sefConfig->alwaysUseLangJoomla);
        $lists['alwaysUseLangHomeJoomla'] = $this->booleanRadio('alwaysUseLangHomeJoomla', $std_opt, $sefConfig->alwaysUseLangHomeJoomla);
        $lists['addLangMulti']     = $this->booleanRadio('addLangMulti', $std_opt, $sefConfig->addLangMulti);
        $lists['translateItems'] = $this->booleanRadio('translateItems',$std_opt,$sefConfig->translateItems);
        $lists['browserLangJoomla']     = $this->booleanRadio('browserLangJoomla', $std_opt, $sefConfig->browserLangJoomla);
        $lists['langCookieJoomla']     = $this->booleanRadio('langCookieJoomla', $std_opt, $sefConfig->langCookieJoomla);

        $langs = JLanguageHelper::getLanguages();

        $subdomains = array();
        $sitemaps = array();
        $mainlangs = array();
        foreach ($langs as $lang) {
            $l = new stdClass();
            $l->title = $lang->title;
            $l->sef = $lang->sef;
            $l->value = isset($sefConfig->subDomainsJoomla[$l->sef]) ? $sefConfig->subDomainsJoomla[$l->sef] : JFactory::getUri()->getHost();
            $subdomains[] = $l;

            $mainlangs[] = JHTML::_('select.option', $lang->sef, $lang->title, 'id', 'title');

            $s = new stdClass();
            $s->title = $lang->title;
            $s->sef = $lang->sef;
            $s->value = isset($sefConfig->multipleSitemapsFilenames[$lang->sef]) ? $sefConfig->multipleSitemapsFilenames[$lang->sef] : 'sitemap_'.$lang->sef;
            $sitemaps[] = $s;
        }
        $lists['mainLanguageJoomla'] = JHTML::_('select.genericlist', $mainlangs, 'mainLanguageJoomla', 'class="inputbox"', 'id', 'title', $sefConfig->mainLanguageJoomla);
        $lists['subdomainsJoomla'] = $subdomains;
        $lists['multipleSitemapsFilenames'] = $sitemaps;

        // Options for automatic VM currency selection according to language
        if (JFolder::exists(JPATH_ADMINISTRATOR.'/components/com_virtuemart')) {
            $lists['vm_installed'] = true;

            $lists['vmCurrencyEnable'] = $this->booleanRadio('vmCurrencyEnable', $std_opt, $sefConfig->vmCurrencyEnable);

            // Prepare array of available currencies (used modified SQL from mod_virtuemart_currencies)
            try {
                $query = "SELECT `vendor_accepted_currencies`, `vendor_currency` FROM `#__virtuemart_vendors` LIMIT 1";
                $db->setQuery($query);
                $vendor_currency = $db->loadAssoc();
            } catch (RuntimeException $e) {
                $vendor_currency = null;
            }

            if (!is_array($vendor_currency)) {
                $lists['vm_installed'] = false;
            }
            else {
                $accepted = trim($vendor_currency['vendor_accepted_currencies']);
                $currency = trim($vendor_currency['vendor_currency']);
                $allCurrencies = $accepted;
                if ($currency)
                    $allCurrencies .= ($allCurrencies ? ',' : '').$currency;

                try {
                    $query = "SELECT `virtuemart_currency_id` AS `id`, CONCAT_WS(' ', `currency_name`, `currency_symbol`) AS `title`"
                        ." FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` IN (".$allCurrencies.") AND published = '1' ORDER BY `ordering`, `currency_name`";
                    $db->setQuery($query);
                    $currencies = $db->loadObjectList();
                } catch (RuntimeException $e) {
                    $currencies = null;
                }

                if (!is_array($currencies)) {
                    $lists['vm_installed'] = false;
                }
                else {
                    $lists['vmCurrency'] = array();
                    foreach ($langs as $lang) {
                        $obj = new stdClass();
                        $def = isset($sefConfig->vmCurrency[$lang->sef]) ? $sefConfig->vmCurrency[$lang->sef] : null;
                        $obj->list = JHTML::_('select.genericlist', $currencies, 'vmCurrency['.$lang->sef.']', 'class="inputbox"', 'id', 'title', $def);
                        $obj->lang = $lang->title;
                        $lists['vmCurrency'][] = $obj;
                    }
                }
            }
        }
        else {
            $lists['vm_installed'] = false;
        }

        // Options to handle domain and SEF URL languages mismatch
        $opts = array();
        $opts[] = JHTML::_('select.option', _COM_SEF_WRONG_DOMAIN_REDIRECT,     JText::_('COM_SEF_WRONG_DOMAIN_REDIRECT'));
        $opts[] = JHTML::_('select.option', _COM_SEF_WRONG_DOMAIN_404,          JText::_('COM_SEF_WRONG_DOMAIN_SHOW_404'));
        $opts[] = JHTML::_('select.option', _COM_SEF_WRONG_DOMAIN_DO_NOTHING,   JText::_('COM_SEF_WRONG_DOMAIN_DO_NOTHING'));
        $lists['wrongDomainHandling'] = JHTML::_('select.genericlist', $opts, 'wrongDomainHandling', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->wrongDomainHandling);

        // Options to handle language and Itemid mismatch
        $disabled = (JPluginHelper::isEnabled('system','falangdriver')) ? ' disabled="disabled"' : '';
        $opts = array();
        $opts[] = JHTML::_('select.option', _COM_SEF_MISMATCHED_LANG_DONT_HANDLE,   JText::_('COM_SEF_MISMATCHED_LANG_DONT_HANDLE'));
        $opts[] = JHTML::_('select.option', _COM_SEF_MISMATCHED_LANG_DONT_SEF,      JText::_('COM_SEF_MISMATCHED_LANG_DONT_SEF'));
        $opts[] = JHTML::_('select.option', _COM_SEF_MISMATCHED_LANG_FIX,      JText::_('COM_SEF_MISMATCHED_LANG_FIX'));
        $lists['mismatchedLangHandling'] = JHTML::_('select.genericlist', $opts, 'mismatchedLangHandling', 'class="inputbox" size="1"'.$disabled, 'value', 'text', $sefConfig->mismatchedLangHandling);

        // Options to handle trailing slash redirect
        $opts = array();
        $opts[] = JHTML::_('select.option', COM_SEF_REDIRECT_SLASH_NEVER,       JText::_('COM_SEF_REDIRECT_SLASH_NEVER'));
        $opts[] = JHTML::_('select.option', COM_SEF_REDIRECT_SLASH_ALWAYS,      JText::_('COM_SEF_REDIRECT_SLASH_ALWAYS'));
        $opts[] = JHTML::_('select.option', COM_SEF_REDIRECT_SLASH_EXISTING,    JText::_('COM_SEF_REDIRECT_SLASH_EXISTING'));
        $lists['redirectSlash'] = JHTML::_('select.genericlist', $opts, 'redirectSlash', 'class="inputbox" size="1"', 'value', 'text', (int)$sefConfig->redirectSlash);

        $lists['record404']             = $this->booleanRadio('record404',              $std_opt, $sefConfig->record404);
        $lists['msg404']                = $this->booleanRadio('showMessageOn404',       $std_opt, $sefConfig->showMessageOn404);
        $lists['use404itemid']          = $this->booleanRadio('use404itemid',           $std_opt, $sefConfig->use404itemid);
        $lists['nonSefRedirect']        = $this->booleanRadio('nonSefRedirect',         $std_opt, $sefConfig->nonSefRedirect);
        $lists['useMoved']              = $this->booleanRadio('useMoved',               $std_opt, $sefConfig->useMoved);
        $lists['useMovedAsk']           = $this->booleanRadio('useMovedAsk',            $std_opt, $sefConfig->useMovedAsk);
        $lists['alwaysUseLang']         = $this->booleanRadio('alwaysUseLang',          $std_opt, $sefConfig->alwaysUseLang);
        $lists['translateNames']        = $this->booleanRadio('translateNames',         $std_opt, $sefConfig->translateNames);
        $lists['contentUseIndex']       = $this->booleanRadio('contentUseIndex',        $std_opt, $sefConfig->contentUseIndex);
        $lists['allowUTF']              = $this->booleanRadio('allowUTF',               $std_opt, $sefConfig->allowUTF);
        $lists['excludeSource']         = $this->booleanRadio('excludeSource',          $std_opt, $sefConfig->excludeSource);
        $lists['reappendSource']        = $this->booleanRadio('reappendSource',         $std_opt, $sefConfig->reappendSource);
        $lists['ignoreSource']          = $this->booleanRadio('ignoreSource',           $std_opt, $sefConfig->ignoreSource);
        $lists['alwaysAddItemid']       = $this->booleanRadio('alwaysAddItemid',        $std_opt, $sefConfig->alwaysAddItemid);
        $lists['appendNonSef']          = $this->booleanRadio('appendNonSef',           $std_opt, $sefConfig->appendNonSef);
        $lists['transitSlash']          = $this->booleanRadio('transitSlash',           $std_opt, $sefConfig->transitSlash);
        $lists['useCache']              = $this->booleanRadio('useCache',               $std_opt, $sefConfig->useCache);
        $lists['numberDuplicates']      = $this->booleanRadio('numberDuplicates',       $std_opt, $sefConfig->numberDuplicates);
        $lists['autoCanonical']         = $this->booleanRadio('autoCanonical',          $std_opt, $sefConfig->autoCanonical);
        $lists['cacheRecordHits']       = $this->booleanRadio('cacheRecordHits',        $std_opt, $sefConfig->cacheRecordHits);
        $lists['cacheShowErr']          = $this->booleanRadio('cacheShowErr',           $std_opt, $sefConfig->cacheShowErr);
        $lists['sefComponentUrls']      = $this->booleanRadio('sefComponentUrls',       $std_opt, $sefConfig->sefComponentUrls);
        $lists['versionChecker']        = $this->booleanRadio('versionChecker',         $std_opt, $sefConfig->versionChecker);
        $lists['artioFeedDisplay']      = $this->booleanRadio('artioFeedDisplay',       $std_opt, $sefConfig->artioFeedDisplay);
        $lists['fixIndexPhp']           = $this->booleanRadio('fixIndexPhp',            $std_opt, $sefConfig->fixIndexPhp);
        $lists['fixDocumentFormat']     = $this->booleanRadio('fixDocumentFormat',      $std_opt, $sefConfig->fixDocumentFormat);
        $lists['nonSefQueryVariables']  = $this->booleanRadio('nonSefQueryVariables',   $std_opt, $sefConfig->nonSefQueryVariables);
        $lists['autolock_urls']         = $this->booleanRadio('autolock_urls',          $std_opt, $sefConfig->autolock_urls);

        // #22937: Not used now
        //$lists['update_urls']           = $this->booleanRadio('update_urls',            $std_opt, $sefConfig->update_urls);

        $lists['rootLangRedirect303']   = $this->booleanRadio('rootLangRedirect303',    $std_opt, $sefConfig->rootLangRedirect303);
        $lists['indexPhpCurrentMenu']   = $this->booleanRadio('indexPhpCurrentMenu',    $std_opt, $sefConfig->indexPhpCurrentMenu);
        $lists['langMenuAssociations']  = $this->booleanRadio('langMenuAssociations',   $std_opt, $sefConfig->langMenuAssociations);
        $lists['homePageHits']          = $this->booleanRadio('homePageHits',           $std_opt, $sefConfig->homePageHits);
        $lists['canonicalsRemove']      = $this->booleanRadio('canonicalsRemove',       $std_opt, $sefConfig->canonicalsRemove);
        $lists['canonicalsFix']         = $this->booleanRadio('canonicalsFix',          $std_opt, $sefConfig->canonicalsFix);
        $lists['chunkedExport']         = $this->booleanRadio('chunkedExport',          $std_opt, $sefConfig->chunkedExport);
        $lists['cacheSize']         = '<input type="text" name="cacheSize" size="10" class="inputbox" value="'.$sefConfig->cacheSize.'" />';
        $lists['cacheMinHits']      = '<input type="text" name="cacheMinHits" size="10" class="inputbox" value="'.$sefConfig->cacheMinHits.'" />';
        $lists['junkWords']         = '<input type="text" name="junkWords" size="40" class="inputbox" value="'.$sefConfig->junkWords.'" />';
        $lists['junkExclude']       = '<input type="text" name="junkExclude" size="40" class="inputbox" value="'.$sefConfig->junkExclude.'" />';

        $lists['tag_generator']     = '<input type="text" name="tag_generator" size="60" class="inputbox" value="'.$sefConfig->tag_generator.'" />';
        $lists['tag_googlekey']     = '<input type="text" name="tag_googlekey" size="60" class="inputbox" value="'.$sefConfig->tag_googlekey.'" />';
        $lists['tag_livekey']       = '<input type="text" name="tag_livekey" size="60" class="inputbox" value="'.$sefConfig->tag_livekey.'" />';
        $lists['tag_yahookey']      = '<input type="text" name="tag_yahookey" size="60" class="inputbox" value="'.$sefConfig->tag_yahookey.'" />';

        $lists['artioUserName']     = '<input type="text" name="artioUserName" size="60" class="inputbox" value="'.$sefConfig->artioUserName.'" />';
        $lists['artioPassword']     = '<input type="password" name="artioPassword" size="60" class="inputbox" value="'.$sefConfig->artioPassword.'" />';
        $lists['artioDownloadId']   = '<input type="text" name="artioDownloadId" size="60" class="inputbox" value="'.$sefConfig->artioDownloadId.'" />';

        $lists['logErrors']         = $this->booleanRadio('logErrors', $std_opt, $sefConfig->logErrors);
        $lists['trace']             = $this->booleanRadio('trace', $std_opt, $sefConfig->trace);
        $lists['traceLevel']        = '<input type="text" name="traceLevel" size="2" class="inputbox" value="'.$sefConfig->traceLevel.'" />';

        $useSitenameOpts[] = JHTML::_('select.option', _COM_SEF_SITENAME_BEFORE,    JText::_('COM_SEF_BEFORE_PAGE_TITLE'));
        $useSitenameOpts[] = JHTML::_('select.option', _COM_SEF_SITENAME_AFTER,     JText::_('COM_SEF_AFTER_PAGE_TITLE'));
        $useSitenameOpts[] = JHTML::_('select.option', _COM_SEF_SITENAME_NO,        JText::_('COM_SEF_NO'));
        $lists['use_sitename']  = JHTML::_('select.genericlist', $useSitenameOpts, 'use_sitename', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->use_sitename);

        // metadata
        $lists['enable_metadata']       = $this->booleanRadio('enable_metadata',    $std_opt, $sefConfig->enable_metadata);

        $metadataGenerateOpts[] = JHTML::_('select.option', _COM_SEF_META_GEN_EMPTY,    JText::_('COM_SEF_ONLY_IF_ORIGINAL_EMPTY'));
        $metadataGenerateOpts[] = JHTML::_('select.option', _COM_SEF_META_GEN_ALWAYS,   JText::_('COM_SEF_ALWAYS'));
        $metadataGenerateOpts[] = JHTML::_('select.option', _COM_SEF_META_GEN_NEVER,    JText::_('COM_SEF_NEVER'));
        $lists['metadata_auto']  = JHTML::_('select.genericlist', $metadataGenerateOpts, 'metadata_auto', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->metadata_auto);

        $metadataPriorityOpts[] = JHTML::_('select.option', _COM_SEF_META_PR_ORIGINAL,   JText::_('COM_SEF_PREFER_ORIGINAL'));
        $metadataPriorityOpts[] = JHTML::_('select.option', _COM_SEF_META_PR_JOOMSEF,    JText::_('COM_SEF_PREFER_JOOMSEF'));
        $metadataPriorityOpts[] = JHTML::_('select.option', _COM_SEF_META_PR_JOIN,       JText::_('COM_SEF_JOIN_BOTH'));
        $lists['rewrite_keywords']  = JHTML::_('select.genericlist', $metadataPriorityOpts, 'rewrite_keywords', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->rewrite_keywords);
        $lists['rewrite_description']  = JHTML::_('select.genericlist', $metadataPriorityOpts, 'rewrite_description', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->rewrite_description);

        $lists['prefer_joomsef_title']  = $this->booleanRadio('prefer_joomsef_title',    $std_opt, $sefConfig->prefer_joomsef_title);
        $lists['sitename_sep']          = '<input type="text" name="sitename_sep" size="10" class="inputbox" value="'.$sefConfig->sitename_sep.'" />';
        //$lists['rewrite_keywords']      = $this->booleanRadio('rewrite_keywords',    $std_opt, $sefConfig->rewrite_keywords);
        //$lists['rewrite_description']   = $this->booleanRadio('rewrite_description',    $std_opt, $sefConfig->rewrite_description);
        $lists['prevent_dupl']          = $this->booleanRadio('prevent_dupl',    $std_opt, $sefConfig->prevent_dupl);


        $aliases[] = JHTML::_('select.option', '0', JText::_('COM_SEF_FULL_TITLE'));
        $aliases[] = JHTML::_('select.option', '1', JText::_('COM_SEF_TITLE_ALIAS'));
        $lists['useAlias'] = JHTML::_('select.genericlist', $aliases, 'useAlias', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->useAlias);

        // get a list of the static content items for 404 page
        $query = "SELECT id, title"
        ."\n FROM #__content"
        ."\n WHERE title != '404'"
        ."\n AND catid = 0"
        ."\n ORDER BY ordering"
        ;

        $db->setQuery( $query );
        $items = $db->loadObjectList();

        $options = array(JHTML::_('select.option', _COM_SEF_404_DEFAULT, '('.JText::_('COM_SEF_CUSTOM_404_PAGE').')'));
        $options[] = JHTML::_('select.option', _COM_SEF_404_FRONTPAGE, '('.JText::_('COM_SEF_FRONT_PAGE').')');
        $options[] = JHTML::_('select.option', _COM_SEF_404_JOOMLA, '('.JText::_('COM_SEF_404_JOOMLA').')');

        // assemble menu items to the array
        foreach ( $items as $item ) {
            $options[] = JHTML::_('select.option', $item->id, $item->title);
        }

        $lists['page404'] = JHTML::_('select.genericlist', $options, 'page404', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->page404 );

        // Get the menu selection list
        $selections = $this->linkoptions();
        $lists['itemid404'] = JHTML::_('select.genericlist', $selections, 'itemid404', 'class="inputbox" size="1"', 'value', 'text', $sefConfig->itemid404 );

        $sql="SELECT `id`, `introtext` FROM `#__content` WHERE `title` = '404'";
        $row = null;
        $db->setQuery($sql);
        $row = $db->loadObject();

        $lists['txt404'] = isset($row->introtext) ? $row->introtext : JText::_('COM_SEF_ERROR_DEFAULT_404');

        $lists["google_email"]=$sefConfig->google_email;
        $lists["google_password"]=$sefConfig->google_password;
        $lists["google_id"]=$sefConfig->google_id;
        $lists["google_apikey"]=$sefConfig->google_apikey;
        $lists["google_enable"]=$this->booleanRadio('google_enable',$std_opt,$sefConfig->google_enable);
        $lists["google_demographic_reports"]=$this->booleanRadio('google_demographic_reports',$std_opt,$sefConfig->google_demographic_reports);
        $lists["google_link_attribution"]=$this->booleanRadio('google_link_attribution',$std_opt,$sefConfig->google_link_attribution);
        $lists["google_exclude_ip"]=$sefConfig->google_exclude_ip;
        $lists["google_exclude_level"]=JHTML::_('access.usergroup','google_exclude_level[]',$sefConfig->google_exclude_level,'class="inputbox" multiple="multiple" size="10"',false);

        foreach($this->getLangs() as $sef=>$lang) {
            $lists['subdomains_menus'][$sef] = JHTML::_('select.genericlist',$this->_getMenuItems($lang->lang_code),'subdomain_Itemid');
        }
        $lists['subdomains_remove'] = '<input class="button" type="button" onclick="remove_subdomain(this);" value="'.Jtext::_('COM_SEF_REMOVE_SUBDOMAIN').'" />';

        // Joomla cache info
        $conf = JFactory::getConfig();
        if ($conf->get('caching', '0') != '0') {
            $state = '<span style="color: green;">'.JText::_('COM_SEF_ENABLED').'</span>';
        }
        else {
            $state = '<span style="color: red;">'.JText::_('COM_SEF_DISABLED').'</span>';
        }

        $lists['cache_info'] = JText::sprintf('COM_SEF_CACHE_INFO', $state);

        $this->_lists = $lists;

        return $this->_lists;
    }

    private function _getMenuItems($lang) {
        $db = JFactory::getDbo();
        $db->setQuery(
            'SELECT menutype AS value, title AS text' .
            ' FROM #__menu_types' .
            ' ORDER BY title'
        );
        $menus = $db->loadObjectList();

        $query    = $db->getQuery(true);
        $query->select('a.id AS value, a.title AS text, a.level, a.menutype');
        $query->from('#__menu AS a');
        $query->where('a.parent_id > 0');
        $query->where('a.type <> '.$db->quote('url'));
        $query->where('a.client_id = 0');
        $query->where('a.language IN('.$db->quote($lang).','.$db->quote('*').')');

        $query->order('a.lft');
        //echo str_replace('#__','jos_',$query)."<br>";

        $db->setQuery($query);
        $items = $db->loadObjectList();

        // Collate menu items based on menutype
        $lookup = array();
        foreach ($items as &$item) {
            if (!isset($lookup[$item->menutype])) {
                $lookup[$item->menutype] = array();
            }
            $lookup[$item->menutype][] = &$item;

            $item->text = str_repeat('- ', $item->level).$item->text;
        }
        $items = array();

        foreach ($menus as &$menu) {
            // Start group:
            $items[] = JHtml::_('select.optgroup',    $menu->text);

            // Special "Add to this Menu" option:
            //$items[] = JHtml::_('select.option', '1', JText::_('JLIB_HTML_ADD_TO_THIS_MENU'));

            // Menu items:
            if (isset($lookup[$menu->value])) {
                foreach ($lookup[$menu->value] as &$item) {
                    $items[] = JHtml::_('select.option', $item->value, $item->text);
                }
            }

            // Finish group:
            $items[] = JHtml::_('select.optgroup',    $menu->text);
        }
        return $items;
    }

    function getSubDomains() {
        $menu=JHTML::_('menu.menuitems');

        $query="SELECT * FROM `#__sef_subdomains`";
        $query.=" WHERE `option`=".$this->_db->quote("");
        $query.=" ORDER BY `subdomain`";
        $this->_db->setQuery($query);
        $subdomains_o=$this->_db->loadObjectList();

        $subdomains=array();
        $lang = JFactory::getLanguage();
        $tag = $lang->getDefault();
        $this->_db->setQuery("SELECT sef FROM #__languages WHERE lang_code = ".$this->_db->quote($tag));
        $sef = $this->_db->loadResult();
        foreach($subdomains_o as $subdomain) {
            if (empty($subdomain->lang)) {
                  $subdomain->lang = $sef;
            }
            $subdomains[$subdomain->lang][]=$subdomain;
        }

        $data=array();

        foreach($subdomains as $lang=>$lsubdomains) {
            foreach($lsubdomains as $i=>$subdomain) {
                $menu=$this->_getMenuItems($this->_langs[$subdomain->lang]->lang_code);
                $item=new stdClass();
                $item->subdomain=$subdomain->subdomain;
                $item->Itemid=JHTML::_('select.genericlist',$menu,'subdomain[Itemid]['.$subdomain->lang.']['.$i.'][]',array('list.attr'=>array('size'=>10,'multiple'=>'multiple'),'list.select'=>explode(",",$subdomain->Itemid)));
                $item->Itemid_titlepage=JHTML::_('select.genericlist',$menu,'subdomain[titlepage]['.$subdomain->lang.']['.$i.']',array('list.select'=>$subdomains_o[$i]->Itemid_titlepage));
                $data[$subdomain->lang][]=$item;
            }

        }
        return $data;
    }

    function getLangs() {
        return $this->_langs=JLanguageHelper::getLanguages('sef');
    }

    /**
     * Method to store a record
     *
     * @access    public
     * @return    boolean    True on success
     */
    function store()
    {
        $db = JFactory::getDBO();
        $sefConfig = SEFConfig::getConfig();
        $sef_config_file = JPATH_COMPONENT . '/' . 'configuration.php';

        // Get POST variables through Joomla API to correctly support magic_quotes_gpc
        $post = JRequest::get('POST', JREQUEST_NOTRIM | JREQUEST_ALLOWRAW);

        // Unset the empty meta tags
        if (isset($post['metanames']) && is_array($post['metanames'])) {
            for ($i = 0, $n = count($post['metanames']); $i < $n; $i++) {
                if (empty($post['metanames'][$i])) {
                    unset($post['metanames'][$i]);
                    if (isset($post['metacontents'][$i])) {
                        unset($post['metacontents'][$i]);
                    }
                }
            }

            // Create the associative array of custom meta tags
            $post['customMetaTags'] = array_combine($post['metanames'], $post['metacontents']);
        }
        else {
            // No meta tags
            $post['customMetaTags'] = array();
        }

        // Parse the sitemap ping services
        if (isset($post['sitemap_services']) && !empty($post['sitemap_services'])) {
            $services = str_replace("\r", '', $post['sitemap_services']);
            $services = array_map('trim', explode("\n", $services));
            $post['sitemap_services'] = $services;
        }
        else {
            $post['sitemap_services'] = array();
        }

        // Check empty google_exclude_level
        if (!isset($post['google_exclude_level'])) {
            $post['google_exclude_level'] = array();
        }

        // Set values
        foreach($post as $key => $value) {
            $sefConfig->set($key, $value);
        }

        // 404
        $sql = 'SELECT id,language  FROM #__content WHERE `title` = "404"';
        $db->setQuery( $sql );

        $introtext = $post['introtext'];
        if ($page404 = $db->loadObject()){
            $sql = 'UPDATE #__content SET introtext='.$db->quote($introtext).',  modified ='.$db->quote(date("Y-m-d H:i:s")).(($page404->language == '') ? ', language="*"' : '').' WHERE `id` = '.$db->quote($page404->id).';';
        }
        else {
            $sql = 'INSERT INTO #__content (title, alias, introtext, `fulltext`, state, catid, created, created_by, created_by_alias, modified, modified_by, publish_up, publish_down, images, urls, attribs, version, ordering, metakey, metadesc, access, hits, language) '.
            'VALUES ("404", "404", '.$db->quote($introtext).', "", "1", "0", '.$db->quote(date("Y-m-d H:i:s")).', "'.JFactory::getUser()->id.'", "", "0000-00-00 00:00:00", "0", "2001-01-01 00:00:00", "0000-00-00 00:00:00", "", "", "menu_image=-1\nitem_title=0\npageclass_sfx=\nback_button=\nrating=0\nauthor=0\ncreatedate=0\nmodifydate=0\npdf=0\nprint=0\nemail=0", "1", "0", "", "", "1", "0", "*");';
        }

        $db->setQuery( $sql );
        if (!$db->query()) {
            echo "<script> alert('".addslashes($db->getErrorMsg())."'); window.history.go(-1); </script>\n";
            exit();
        }

        // Check the domains configuration
        if( count($sefConfig->jfSubDomains) ) {
            foreach($sefConfig->jfSubDomains as $code => $domain) {
                $domain = str_replace(array('http://', 'https://'), '', $domain);
                $domain = preg_replace('#/.*$#', '', $domain);
                $sefConfig->jfSubDomains[$code] = $domain;
            }
        }

        $subdomains=JRequest::getVar('subdomain',array(),'post','array');

        $query="DELETE FROM #__sef_subdomains \n";
        $query.="WHERE `option`=".$this->_db->quote("");
        $this->_db->setQuery($query);
        if(!$this->_db->query()) {
            $this->setError($this->_db->stderr(true));
            return false;
        }

        if (isset($subdomains['title']) && is_array($subdomains['title'])) {
            foreach($subdomains["title"] as $lang=>$items) {
                foreach($items as $i=>$item) {
                    $query="INSERT INTO #__sef_subdomains SET subdomain=".$this->_db->quote($item).", Itemid=".$this->_db->quote(implode(",",$subdomains["Itemid"][$lang][$i])).", \n";
                    $query.="Itemid_titlepage=".$this->_db->quote($subdomains["titlepage"][$lang][$i]).", lang=".$this->_db->quote($lang)." \n";
                    $this->_db->setQuery($query);
                    if(!$this->_db->query()) {
                        $this->setError($this->_db->stderr(true));
                        return false;
                    }
                }
            }
        }

        if (!AUpdateHelper::setUpdateLink('com_joomsef', $sefConfig->artioDownloadId)) {
            return false;
        }

        $config_written = $sefConfig->saveConfig(0);

        if( $config_written != 0 ) {
            if($sefConfig->langEnable) {
                $query=$db->getQuery(true);
                $query->select('enabled')->from('#__extensions')->where('element='.$db->quote('languagefilter'));
                $db->setQuery($query);
                $enabled=$db->loadResult();
                if($enabled==1) {
                    JError::raiseWarning('',JText::_('COM_JOOMSEF_DISABLE_LANGUAGEFILTER'));
                }
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Fixed version of JHtmlMenu::linkoptions() for Joomla 3.0
     * until the bug with missing m.ordering column is fixed
     */
    protected function linkoptions($all = false, $unassigned = false)
    {
        if (!class_exists('JHtmlMenu')) {
            require_once(JPATH_LIBRARIES.'/joomla/html/html/menu.php');
        }

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);

        // Get a list of the menu items
        $query->select('m.id, m.parent_id, m.title, m.menutype');
        $query->from($db->quoteName('#__menu') . ' AS m');
        $query->where($db->quoteName('m.published') . ' = 1');
        $query->order('m.menutype, m.parent_id, m.lft');
        $db->setQuery($query);

        $mitems = $db->loadObjectList();

        if (!$mitems)
        {
            $mitems = array();
        }

        // Establish the hierarchy of the menu
        $children = array();

        // First pass - collect children
        foreach ($mitems as $v)
        {
            $pt = $v->parent_id;
            $list = @$children[$pt] ? $children[$pt] : array();
            array_push($list, $v);
            $children[$pt] = $list;
        }
        // Second pass - get an indent list of the items
        $list = JHtmlMenu::TreeRecurse((int) $mitems[0]->parent_id, '', array(), $children, 9999, 0, 0);

        // Code that adds menu name to Display of Page(s)

        $mitems = array();
        if ($all | $unassigned)
        {
            $mitems[] = JHtml::_('select.option', '<OPTGROUP>', JText::_('JOPTION_MENUS'));

            if ($all)
            {
                $mitems[] = JHtml::_('select.option', 0, JText::_('JALL'));
            }
            if ($unassigned)
            {
                $mitems[] = JHtml::_('select.option', -1, JText::_('JOPTION_UNASSIGNED'));
            }

            $mitems[] = JHtml::_('select.option', '</OPTGROUP>');
        }

        $lastMenuType = null;
        $tmpMenuType = null;
        foreach ($list as $list_a)
        {
            if ($list_a->menutype != $lastMenuType)
            {
                if ($tmpMenuType)
                {
                    $mitems[] = JHtml::_('select.option', '</OPTGROUP>');
                }
                $mitems[] = JHtml::_('select.option', '<OPTGROUP>', $list_a->menutype);
                $lastMenuType = $list_a->menutype;
                $tmpMenuType = $list_a->menutype;
            }

            $mitems[] = JHtml::_('select.option', $list_a->id, $list_a->title);
        }
        if ($lastMenuType !== null)
        {
            $mitems[] = JHtml::_('select.option', '</OPTGROUP>');
        }

        return $mitems;
    }
}
?>