<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="robots" content="noindex,nofollow,nosnippet">
    <title>www.mageia.org translation report</title>
    <style>
        html, body { margin: 0; padding: 0; font-family: Verdana, "Trebuchet MS", "Lucida Grande", "Lucida Sans", Verdana, Tahoma, Arial, sans-serif; }
        table, th, td {
            border:1px solid gray;
            border-collapse:collapse;
        }
        th { text-align: left; }
        td, th { font-size: 80%; padding: 0.3em; }
        td a div, td.progress div { float: left; }
        #page { padding: 1em; position: absolute; top: 128px; }
        .done, .partial, .add { }
        .done { color: darkgreen; background: lightgreen; }
        .partial { color: darkslategray; background: orange; }
        .add { color: black; background: lightgrey; }
        .done a, .partial a, .add a { color: inherit; padding-right: 0.5em; }
        .view_page { background: rgba(0, 0, 0, 0.1); border-radius: 3px; padding: 0em 0.5em; margin: 0.3em; }
        .bold { font-weight: bold; }
        .minor { font-weight: normal; font-size: smaller; }
        .progress { text-align: right; }
        .percent { width: 45px; }
        .stat { font-size: smaller; }
    </style>
</head>
<body class="contribute">
    <header id="mgnavt">
        <h1><a href="//www.mageia.org/">www.mageia.org</a> translation report</h1>
        <ul>
            <li>Please check <a href="https://wiki.mageia.org/en/Internationalisation_Team_(i18n)#Website_translation">localization Wiki page</a> for special cases for navigation and some web pages like <a href="https://wiki.mageia.org/en/Internationalisation_Team_%28i18n%29#Special_cases_of_web_pages">downloads/get, constitution, license...</a></li>
        </ul>
    </header>
    <div id="page">

    <p>Report about differences between Transifex and our git repository is available <a href="./report_tx_git.php">here</a>.</p>

    <?php
    define('HLANG', TRUE);

    include 'lib.php';
    $one_language = get_sane_string('l');
    $one_resource = get_sane_string('r');

    $one_language_all_resources      = FALSE;
    $all_languages_only_one_resource = FALSE;

    $otherLangs = get_other_langs();
    if (!empty($one_language) && $one_language != 'all') {
        if (in_array($one_language, $otherLangs)) {
            $one_language_all_resources = TRUE;
            $otherLangs = array('en', $one_language);
        } else {
            echo "<p>Language $one_language is not present in our web site yet.</p>";
        }
    }

    $enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.pot')); // added navigation file
    if (!empty($one_resource) && $one_resource != 'all') {
        if (in_array($one_resource, $enFiles)) {
            $all_languages_only_one_resource = TRUE;
            $enFiles = array($one_resource);
        } else {
            echo "<p>Resource $one_resource is not present in our web site yet.</p>";
        }
    }
    $num_of_enFiles = count($enFiles);


    $report    = array();
    $ok_link   = '<div class="done">%s <a href="%s" title="get a copy of the file">file</a></div>';
    $diff_link = '<div class="partial">%s<a href="diff.php?s=%s&amp;l=%s" title="see detailed diff">';
    $add_trans  = '<div class="add"><a href="missing.php?s=%s&amp;l=%s" class="view_page">add translation</a>%s</div>';

    $unique_lines_in_eng_constitution = array();
    $number_of_unique_lines_in_eng_constitution = 0;

    foreach ($otherLangs as $l) {
        foreach ($enFiles as $f) {
            $references = '';
            $page_not_linked = '';
            $old_page = '';
            $resource = _extract_resource($f);
            $resource_filename = str_replace('index', '', $resource);
            $mga = array('view page' => $resource_filename);
            $langF    = _po_file_switch($f, $l);
            if (strstr($f, '../_nav/langs/en.') !== FALSE) {
                $nav = TRUE;
                $dest_en = sprintf('%s/%s/%s', G_APP_ROOT, '_nav/langs', 'en.pot');
                $dest_l = sprintf('%s/%s/%s', G_APP_ROOT, '_nav/langs', $l . '.po');
                $langF = '../_nav/langs/' . $l . '.po' . (($l == 'en') ? 't' : '');
            } else {
                $nav = FALSE;
                $dest_en = sprintf('%s/%s/%s/%s', G_APP_ROOT, 'en', $resource_filename, 'index.php');
                $dest_l = sprintf('%s/%s/%s/%s', G_APP_ROOT, $l, $resource_filename, 'index.php');
            }

            // if symlink e.g. does directly translated page exist?
            if ((realpath($dest_l) != realpath($dest_en)) && !$nav) {
                $page_not_linked = sprintf('<a href="/%s/%s">old page</a> still exists!', $l, $resource_filename);
                $old_page = sprintf(' by recycling <a href="/%s/%s">old page</a>', $l, $resource_filename);
            }
            $add_new_translation = sprintf($add_trans, $f, $l, $old_page);

            if (file_exists($langF)) {
                $test = _po_diff($l, $resource);
                $num_of_fuzzy_or_missing_strings = count($test['fuzzy_or_missing']);
                $num_of_untranslated_strings = count($test['notrans']);

                if ($nav) {
                    $mga = array('see navigation' => '');
                } else if ($resource_filename == 'downloads/get') {
                    $mga = array(
                        'view page A' => 'downloads/get/index.php?q=Mageia-5-LiveCD-KDE4-en-i586-CD.iso&amp;d=1',
                        'B' => 'downloads/get/index.php?q=Non_existing_file&amp;d=1',
                    );
                } else if ($resource_filename == '2') {
                    $mga = array(
                        'view page A' => '2/index.php',
                        'B' => '2/download_index.php',
                        'C' => '2/for-pc/index.php',
                        'D' => '2/for-server/index.php',
                    );
                } else if ($resource_filename == '3') {
                    $mga = array(
                        'view page A' => '3/index.php',
                        'B' => '3/download_index.php',
                        'C' => '3/for-pc/index.php',
                        'D' => '3/for-server/index.php',
                    );
                } else if ($resource_filename == '4') {
                    $mga = array(
                        'view page A' => '4/index.php',
                        'B' => '4/download_index.php',
                    );
                } else if ($resource_filename == '5') {
                    $mga = array(
                        'view page A' => '5/index.php',
                        'B' => '5/download_index.php',
                    );
                } else if ($resource_filename == 'cauldron') {
                    $mga = array('view page' => '6/index.php');
                } else if ($resource_filename == 'documentation') {
                    $mga = array(
                        'view page doc' => 'doc/index.php',
                        'archive' => 'doc/archive.php',
                    );
                } else if ($resource_filename == 'news') {
                    $mga = array(
                        'view page A' => '',
                        'B' => 'community/',
                    );
                } else if ($resource_filename == 'common_footer') {
                    $mga = array('view footer of page' => '');
                } else if ($resource_filename == 'about/constitution') {
                    $constitution_results = aproximate_number_of_untranslated_constitution_lines(G_APP_ROOT, $l, $unique_lines_in_eng_constitution);
                    if ($l == 'en') {
                        $unique_lines_in_eng_constitution = $constitution_results['unique_lines_in_constitution'];
                        $number_of_unique_lines_in_eng_constitution = count($unique_lines_in_eng_constitution);
                    }
                    $test['a'] += $number_of_unique_lines_in_eng_constitution; // add aproximate number of lines from constitution to translate
                    $num_of_untranslated_strings += $constitution_results['aproximate_number_of_untranslated_lines'];
                } else if ($resource_filename == 'about/license') {
                    require_once('../en/about/license/license.php');
                    $license_numbers = load_license_numbers($l, TRUE);
                    if ($l == 'en') {
                        $number_of_unique_lines_in_eng_license = $license_numbers["all"];
                    }
                    $test['a'] += $license_numbers["all"]; // add aproximate number of untranslated sentences from license
                    $num_of_untranslated_strings += $license_numbers["untran"]; // add number of all license sentences
                }
                $link = '';
                foreach ($mga as $k => $v) {
                    $link .= sprintf('<a href="/%s/%s" class="view_page">%s</a>', $l, $v, $k);
                }
                $link .= $page_not_linked; // . '</div>';

                if ($num_of_fuzzy_or_missing_strings === 0 && $num_of_untranslated_strings === 0) {
                    $references .= sprintf($ok_link, $link, $langF);
                } else {
                    if(($num_of_fuzzy_or_missing_strings + $num_of_untranslated_strings) < $test['a']) {
                        $references .= sprintf($diff_link, $link, $f, $l);
                        $fuzzy = FALSE;
                        if ($num_of_fuzzy_or_missing_strings > 0) {
                            $references .= $num_of_fuzzy_or_missing_strings . '&nbsp;fuzzy or missing';
                            $fuzzy = TRUE;
                        }
                        if ($num_of_untranslated_strings > 0) {
                            $references .= ($fuzzy ? ', ' : '') . $num_of_untranslated_strings . '&nbsp;untranslated';
                        }
                        $references .= '</a></div>';
                    } else {
                        $references .= $add_new_translation;
                    }
                }
            } else { // file $langF doesn't exists
                $references .= $add_new_translation;
                $test = _po_diff('en', $resource);
                $num_of_fuzzy_or_missing_strings = 0;
                $num_of_untranslated_strings = count($test['notrans']);
                if ($resource_filename == 'about/constitution') { // add aproximate number of all lines from constitution
                    $test['a'] += $number_of_unique_lines_in_eng_constitution;
                    $num_of_untranslated_strings += $number_of_unique_lines_in_eng_constitution;
                }
                if ($resource_filename == 'about/license') { // add number of all license sentences
                    $test['a'] += $number_of_unique_lines_in_eng_license;
                    $num_of_untranslated_strings += $number_of_unique_lines_in_eng_license;
                }
            }
            $report[] = array(
                'language'                        => $l,
                'resource_filename'               => $f,
                'num_of_all_strings'              => $test['a'],
                'num_of_fuzzy_or_missing_strings' => $num_of_fuzzy_or_missing_strings,
                'num_of_untranslated_strings'     => $num_of_untranslated_strings,
                'references'                      => $references,
            );
        }
    }

    $summary = build_language_and_resource_summary($report, $all_languages_only_one_resource, $one_resource, $one_language_all_resources, $one_language);
    $total_num_of_strings = $summary['total_num_of_strings']; // total of all source strings
    $language_summary     = $summary['language_summary'];
    $resource_summary     = $summary['resource_summary'];

    if ($one_language_all_resources) {
        $report_text     = '<p>Restore <a href="?l=all" title="see all languages">all languages</a>.</p>';
        $count           = 'One language: ' . $langs[$one_language];
        $summary_text    = 'Summary for each of ' . $num_of_enFiles . ' resources';
        $display_array   = $resource_summary;
        $progress        = 'References</th><th>Progress';
        $stats_width     = '70px';
    } else if ($all_languages_only_one_resource) {
        $report_text     = '<p>Restore <a href="?r=all" title="see all resources">all resources</a>.</p>';
        $count           = 'Together ' . count($otherLangs) . ' languages';
        $summary_text    = 'Summary for resource: ' . $one_resource;
        $eng_language    = array_shift($language_summary); // shift English for proper sorting
        $display_array   = $language_summary;
        $stats_width     = '70px';
        $progress        = 'References</th><th>Progress';
    } else { // all languages, all resources
        $report_text     = ''; // <p>Overview of all languages.</p>
        $count           = 'Together ' . count($otherLangs) . ' languages';
        $summary_text    = 'Summary for all ' . $num_of_enFiles . ' resources';
        $eng_language    = array_shift($language_summary); // shift English for proper sorting
        $display_array   = $language_summary;
        $sum_for_stat    = $total_num_of_strings;
        $stats_width     = '85px';
        $references      = '';
        $progress        = 'Progress';
    }

    // build helper arrays
    foreach ($display_array as $key => $row) {
        if ($one_language_all_resources) {
            $first_helper[$key]  = $row['num_of_translated_strings'] / $row['num_of_all_strings'];
            $second_helper[$key] = $row['num_of_fuzzy_or_missing_strings'] / $row['num_of_all_strings'];
            $third_helper[$key]  = $row['resource_filename'];
        } else if ($all_languages_only_one_resource) {
            $first_helper[$key]  = $row['num_of_translated_strings'] / $row['num_of_all_strings'];
            $second_helper[$key] = $row['num_of_fuzzy_or_missing_strings'] / $row['num_of_all_strings'];
            $third_helper[$key]  = $row['language'];
        } else { // all languages, all resources
            $first_helper[$key]  = $row['num_of_translated_strings'] / $total_num_of_strings;
            $second_helper[$key] = $row['num_of_fuzzy_or_missing_strings'] / $total_num_of_strings;
            $third_helper[$key]  = $row['language'];
        }
    }
    array_multisort($first_helper, SORT_DESC, $second_helper, $third_helper, $display_array); // , SORT_STRING
//    array_unshift($language_summary, $eng_language); // unshift English back
    $table_lines = array();
    $progress_width = 350;
    foreach ($display_array as $one_member) {
        $translation_status  =  'translated: ' . $one_member['num_of_translated_strings'];
        $translation_status .=  ', fuzzy or missing: ' .  $one_member['num_of_fuzzy_or_missing_strings'];
        $translation_status .=  ', untranslated: ' .  $one_member['num_of_untranslated_strings'];
        if ($one_language_all_resources) {
            $first_clmn      = $one_member['resource_filename'];
            $link_one        = '<a href="?r=' . $first_clmn . '" title="%s">';
            if ($first_clmn == '../_nav/langs/en.pot') {
                $frst_clmn_t = '_nav/langs/en.pot';
            } else {
                $frst_clmn_t = str_replace('en/', '', $first_clmn);
            }
            $first_clm_text  = sprintf('<span class="bold">' . $link_one . '%s</a></span>', 'see this resource only', $frst_clmn_t);
            $single_stat     = $one_member['num_of_translated_strings'];
            $sum_for_stat    = $one_member['num_of_all_strings'];
            $references      = '<td>' . $one_member['references'] . '</td>';
        } else if ($all_languages_only_one_resource) {
            $first_clmn      = $one_member['language'];
            $link_one        = '<a href="?l=' . $first_clmn . '" title="%s">';
            $first_clm_text  = sprintf('<span class="bold">' . $link_one . '%s</a></span>, ', 'see this language only', $langs[$first_clmn]);
            $single_stat     = $one_member['num_of_translated_strings'];
            $sum_for_stat    = $one_member['num_of_all_strings'];
            $references      = '<td>' . $one_member['references'] . '</td>';
        } else { // all languages, all resources
            $first_clmn      = $one_member['language'];
            $link_one        = '<a href="?l=' . $first_clmn . '" title="%s">';
            $first_clm_text  = sprintf('<span class="bold">' . $link_one . '%s</a></span>, ', 'see this language only', $langs[$first_clmn]);
            $first_clm_text .= sprintf('<span class="minor">%s</span>', $first_clmn);
            $single_stat     = $one_member['num_of_translated_strings'];
        }
        $progress_tran_float = $one_member['num_of_translated_strings'] / $sum_for_stat;
        $progress_trans      = floor($progress_tran_float * 100);
        $progress_tran_round = floor($progress_tran_float * $progress_width);
        $progress_fom_float  = $one_member['num_of_fuzzy_or_missing_strings'] / $sum_for_stat;
        $progress_fom_round  = round($progress_fom_float * $progress_width);
        $progress_untrans    = $progress_width - $progress_tran_round - $progress_fom_round;


        $row                 = '<tr><td>' . $first_clm_text . '</td>';
        $row                .= $references;
        $row                .= '<td class="progress"><div class="percent">' . $progress_trans . ' %</div>';
        $row                .= '<div class="stat" style="width: ' . $stats_width . ';"> (' . $single_stat . ' / ' . $sum_for_stat . ')</div></td>';
        $row                .= sprintf('<td>' . $link_one, $translation_status);
        $row                .= '<div style="width: ' . $progress_tran_round . 'px; background-color: LightGreen;">&nbsp;</div>' . PHP_EOL;
        $row                .= '<div style="width: ' . $progress_fom_round . 'px; background-color: Orange;">&nbsp;</div>' . PHP_EOL;
        $row                .= '<div style="width: ' . $progress_untrans . 'px; background-color: OrangeRed;">&nbsp;</div>' . PHP_EOL;
        $row                .= '</a></td></tr>' . PHP_EOL;
        $table_lines[]       = $row;
    }
    $table_rows = implode('', $table_lines);

    echo $report_text;

    echo <<<S
<table>
<thead><tr>
    <th>{$count}</th>
    <th>{$progress}</th>
    <th>{$summary_text}</th>
</tr></thead>
<tbody>
{$table_rows}
</tbody>
</table>

<hr>
S;
?>
    <p>Source code for this website is
    <a href="http://gitweb.mageia.org/web/www/tree/langs/report.php">available on git</a>.</p>

    </div>
    <script src="//nav.mageia.org/js/"></script>
</body>
</html><?php

// regenerating cache
// TODO move it to the cron
require_once('../en/about/license/license.php');
foreach ($otherLangs as $lang) {
    load_license_numbers($lang);
}