Ejemplo n.º 1
0
    /**
     * @param $data
     * @param $params
     * @param $parser Parser
     * @return string
     */
    public static function languages($data, $params, $parser)
    {
        $title = $parser->getTitle();
        // Check if this is a source page or a translation page
        $page = TranslatablePage::newFromTitle($title);
        if ($page->getMarkedTag() === false) {
            $page = TranslatablePage::isTranslationPage($title);
        }
        if ($page === false || $page->getMarkedTag() === false) {
            return '';
        }
        $status = $page->getTranslationPercentages();
        if (!$status) {
            return '';
        }
        // Fix title
        $title = $page->getTitle();
        // Sort by language code, which seems to be the only sane method
        ksort($status);
        $options = $parser->getOptions();
        if (method_exists($options, 'getUserLang')) {
            $userLangCode = $options->getUserLang();
        } else {
            // Backward compat for MediaWiki 1.17
            global $wgLang;
            $userLangCode = $wgLang->getCode();
        }
        // BC for <1.19
        $linker = class_exists('DummyLinker') ? new DummyLinker() : new Linker();
        $languages = array();
        foreach ($status as $code => $percent) {
            $name = TranslateUtils::getLanguageName($code, false, $userLangCode);
            $name = htmlspecialchars($name);
            // Unlikely, but better safe
            /* Percentages are too accurate and take more
             * space than simple images */
            $percent *= 100;
            if ($percent < 20) {
                $image = 1;
            } elseif ($percent < 40) {
                $image = 2;
            } elseif ($percent < 60) {
                $image = 3;
            } elseif ($percent < 80) {
                $image = 4;
            } else {
                $image = 5;
            }
            $percent = Xml::element('img', array('src' => TranslateUtils::assetPath("resources/images/prog-{$image}.png"), 'alt' => "{$percent}%", 'title' => "{$percent}%", 'width' => '9', 'height' => '9'));
            // Add links to other languages
            $suffix = $code === 'en' ? '' : "/{$code}";
            $_title = Title::makeTitle($title->getNamespace(), $title->getDBkey() . $suffix);
            if ($parser->getTitle()->getText() === $_title->getText()) {
                $name = Html::rawElement('span', array('class' => 'mw-pt-languages-selected'), $name);
                $languages[] = "{$name} {$percent}";
            } else {
                if ($code === $userLangCode) {
                    $name = Html::rawElement('span', array('class' => 'mw-pt-languages-ui'), $name);
                }
                $languages[] = $linker->linkKnown($_title, "{$name} {$percent}");
            }
        }
        $legend = wfMsg('tpt-languages-legend');
        $languages = implode(wfMsg('tpt-languages-separator'), $languages);
        return <<<FOO
<div class="mw-pt-languages">
<table><tbody>

<tr valign="top">
<td class="mw-pt-languages-label"><b>{$legend}</b></td>
<td class="mw-pt-languages-list">{$languages}</td></tr>

</tbody></table>
</div>
FOO;
    }