Example #1
0
    /**
     * Returns the HTML for a language selector.  This can be a list of flags, or
     * names of languages, or a select list of names of languages.
     *
     * @param $params An associative array of parameters for this method.
     *		Keys:
     *			name : The name of the select widget or id of the ul (if unordered list)
     *			var  : The GET variable that will be set by selecting one of these languages.
     *			selected : The code of the language that is considered to be currently selected.
     *			autosubmit : Whether the select list should auto submit
     *			type	   : 'select' or 'ul'
     *			lang	   : language code override
     *			use_flags  : default true.
     */
    function getLanguageSelectorHTML($params = array())
    {
        $languages = $this->app->_conf['languages'];
        if (!isset($params['use_flags'])) {
            $params['use_flags'] = true;
        }
        import('I18Nv2/Language.php');
        $langcode = isset($params['lang']) ? $params['lang'] : $this->app->_conf['lang'];
        $languageCodes = new I18Nv2_Language($langcode);
        $currentLanguage = @$languages[$langCode] ? $languages[$langCode] : $languageCodes->getName($this->app->_conf['lang']);
        $name = isset($params['name']) ? $params['name'] : 'language';
        $options = array();
        $var = isset($params['var']) ? $params['var'] : '-lang';
        $selected = isset($params['selected']) ? $params['selected'] : $this->app->_conf['lang'];
        $selectedValue = @$languages[$selected] ? $languages[$selected] : $languageCodes->getName($selected);
        $autosubmit = isset($params['autosubmit']) and $params['autosubmit'];
        $type = isset($params['type']) ? $params['type'] : 'select';
        if (isset($params['table'])) {
            $table =& Dataface_Table::loadTable($params['table']);
            $tlangs = array_keys($table->getTranslations());
            foreach ($tlangs as $tcode) {
                if (!isset($languages[$tcode])) {
                    $languages[$tcode] = $languageCodes->getName($tcode);
                    if (!$languages[$tcode]) {
                        $languages[$tcode] = $tcode;
                    }
                }
            }
        }
        if (!is_array($languages)) {
            return '';
        }
        if ($autosubmit) {
            $onchange = 'javascript:window.location=this.options[this.selectedIndex].value;';
            foreach ($languages as $lang => $langname) {
                //$curri18n = new I18Nv2_Language($langCode);
                //$langname = $curri18n->getName($lang);
                $options[$this->app->url($var . '=' . $lang)] = array('code' => $lang, 'name' => $langname);
            }
        } else {
            $onchange = '';
            foreach ($languages as $lang => $langname) {
                //$curri18n = new I18Nv2_Language($langCode);
                //$langname = $curri18n->getName($lang);
                $options[$lang] = array('code' => $lang, 'name' => $langname);
            }
        }
        if (count($options) <= 1) {
            return '';
        }
        ob_start();
        if ($type == 'select') {
            echo '<select name="' . df_escape($name) . '" ' . ($onchange ? 'onchange="' . df_escape($onchange) . '"' : '') . '>
			';
            foreach ($options as $code => $value) {
                echo '<option value="' . df_escape($code) . '"' . ($value['code'] == $selected ? ' selected' : '') . '>' . df_escape($value['name']) . '</option>
				';
            }
            echo '</select>';
        } else {
            echo '<ul id="' . df_escape($name) . '" class="language-selection-list">
			';
            foreach ($languages as $code => $languageName) {
                //if ( !isset($params['lang']) and @$this->app->_conf['language_labels'][$code] and $this->app->_conf['language_labels'][$code] != $code ){
                //        $languageName = $this->app->_conf['language_labels'][$code];
                //} else {
                //	$languageName = $languageCodes->getName($code);
                //}
                //$languageName = $languageCodes->getName($code);
                echo '<li class="language-selection-item ' . ($code == $this->app->_conf['lang'] ? ' selected-language' : '') . '">
				<a href="' . df_escape($this->app->url($var . '=' . $code)) . '">';
                if ($params['use_flags'] or !$languageName) {
                    echo '<img src="' . df_escape(DATAFACE_URL . '/images/flags/' . $code . '_small.gif') . '" alt="' . df_escape($languageName) . '" />';
                } else {
                    echo df_escape($languageName);
                }
                echo '</a></li>';
            }
            echo "</ul>";
        }
        $out = ob_get_contents();
        ob_end_clean();
        return $out;
    }