diff options
Diffstat (limited to 'langs/report.php')
-rw-r--r-- | langs/report.php | 561 |
1 files changed, 306 insertions, 255 deletions
diff --git a/langs/report.php b/langs/report.php index 99dffe6ed..c0a3d1f40 100644 --- a/langs/report.php +++ b/langs/report.php @@ -5,25 +5,26 @@ <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; } - #page { padding: 1em; position: absolute; top: 128px; } - th { text-align: left; } - .ok a { - text-decoration: none; - color: inherit; - } - .ok { color: darkgreen; background: lightgreen; } - .ok, .strings, .missing { text-align: center; } - .number { text-align: right; } - .strings { background: orange; } - .strings, .missing, .small { font-size: 80%; } - td, th { vertical-align: top; font-family: Arial; font-size: 80%; padding: 0.3em; } - td { vertical-align: middle; } - .action { font-size: smaller; display: block; text-align: center; - text-decoration: none; padding: 0.3em 0.5em; border-radius: 3px; - background: rgba(0, 0, 0, 0.1); margin: 0.5em 0; } - .partial { display: inline; margin-left: 0.3em; margin-top: 0.3em; } - .addlang { color: #333; } + 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"> @@ -35,324 +36,373 @@ </header> <div id="page"> <?php - /** + define('HLANG', TRUE); + + /* + * from http://www.php.net/manual/en/function.array-search.php#91365 + * + * copyright (c) the PHP Documentation + * covered by the Creative Commons Attribution 3.0 License (http://creativecommons.org/licenses/by/3.0/legalcode) */ - define('HLANG', true); + function recursive_array_search($needle, $haystack) + { + foreach ($haystack as $key => $value) { + $current_key = $key; + if ($needle === $value OR (is_array($value) && recursive_array_search($needle, $value) !== FALSE)) { + return $current_key; + } + } + return FALSE; + } + include 'lib.php'; - $one_language = isset($_GET['l']) ? strip_tags(trim($_GET['l'])) : null; - $one_resource = isset($_GET['r']) ? strip_tags(trim($_GET['r'])) : null; + $one_language = isset($_GET['l']) ? strip_tags(trim($_GET['l'])) : NULL; + $one_resource = isset($_GET['r']) ? strip_tags(trim($_GET['r'])) : NULL; - $restore_languages = FALSE; - $restore_resources = FALSE; + $one_language_all_resources = FALSE; + $all_languages_only_one_resource = FALSE; if (isset($one_language) && $one_language != 'all') { + $one_language_all_resources = TRUE; $otherLangs = array('en', $one_language); - $restore_languages = TRUE; } else { $otherLangs = get_other_langs(); } if (isset($one_resource) && $one_resource != 'all') { - $enFiles = array($one_resource); - $restore_resources = TRUE; + $all_languages_only_one_resource = TRUE; + $enFiles = array($one_resource); } else { - $enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.lang'), get_lang_references('*.pot')); // added navigation file - sort($enFiles); + $enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.pot')); // added navigation file } $num_of_enFiles = count($enFiles); - $enStringsCount = array(); - $report = array(); - $stats = array(); - $stats['en']['files'] = 0; - $num_of_col = 0; - $diff_link = '<a href="diff.php?s=%s&l=%s" title="see detailed diff">'; + $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&l=%s" title="see detailed diff">'; + $add_trans = '<div class="add"><a href="missing.php?s=%s&l=%s" class="view_page">add translation</a>%s</div>'; - $languages = array(); $unique_lines_in_eng_constitution = array(); $number_of_unique_lines_in_eng_constitution = 0; foreach ($otherLangs as $l) { - - $stats['en']['files'] += 1; - $stats[$l]['files'] = 0; - $stats[$l]['strings'] = 0; - if ($l == 'en' || $restore_languages) { - $link_one_language = '%s'; - } else { - $link_one_language = '<a href="?l=' . $l . '" title="see this language only">%s</a>'; - } - - $s = sprintf('<tr><th>' . $link_one_language . '<br><span style="font-weight: normal; font-size: smaller;">%s</span></th>', - $langs[$l], $l); - - $cols = ''; - $lang_coloumn = ''; - foreach ($enFiles as $f) { - - if (strrpos($f, '.pot')) { - $gettext = true; - $resource = _extract_resource($f); - $langF = _po_file_switch($f, $l); - } else { - $gettext = false; - $resource = _extract_resource($f, '.en.lang'); - $langF = _lang_file_switch($f, $l); - } - $enStringsCount[$f] = 0; - if (false !== strstr($f, '../_nav/langs/en.')) { - $nav = true; - $langF = '../_nav/langs/' . $l . '.po' . (($l == 'en') ? 't' : ''); - } else { - $nav = false; - } - - $link = str_replace('index', '', $resource); - if ($nav) { + $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 { - $dest_en = sprintf('%s/%s/%s/%s', G_APP_ROOT, 'en', $link, 'index.php'); - $dest_l = sprintf('%s/%s/%s/%s', G_APP_ROOT, $l, $link, 'index.php'); + $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 = ''; - $old_page = ''; - } else { - $page_not_linked = sprintf('<a href="/%s/%s">old page</a> still exists!', $l, $link); - $old_page = sprintf('by recycling <a href="/%s/%s">old page</a>', $l, $link); + 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_translation = sprintf('<td class="missing"><a href="missing.php?s=%s&l=%s" class="action addlang">add translation</a>%s</td>', - $f, $l, $old_page - ); + $add_new_translation = sprintf($add_trans, $f, $l, $old_page); if (file_exists($langF)) { - - $stats[$l]['files'] += 1; - - if ($gettext) { - $test = _po_diff($l, $resource); - $num_of_missing_strings = 0; - $num_of_fuzzy_or_missing_strings = count($test['fuzzy_or_missing']); - } else { - $test = _lang_diff($f, $langF); - $num_of_missing_strings = count($test['missing']); - $num_of_fuzzy_or_missing_strings = 0; - } + $test = _po_diff($l, $resource); + $num_of_fuzzy_or_missing_strings = count($test['fuzzy_or_missing']); $num_of_untranslated_strings = count($test['notrans']); - $num_of_duplicated_strings = count($test['dup_str']); - $num_of_extra_strings = count($test['extra']); - - if ($link == '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']; - } - if ($link == 'about/license') { - require_once('../en/about/license/license.php'); - $license_numbers = load_license_numbers($l, true); // reading cache - $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 - } if ($nav) { - $mga = array(); - } else if ($link == 'downloads/get') { + $mga = array('see navigation' => ''); + } else if ($resource_filename == 'downloads/get') { $mga = array( - 'A' => 'downloads/get/index.php?q=Mageia-2-dual-CD.iso&d=1', // " style="display: block; + 'view page A' => 'downloads/get/index.php?q=Mageia-2-dual-CD.iso&d=1', 'B' => 'downloads/get/index.php?q=Non_existing_file&d=1', ); - } else if ($link == '2') { + } else if ($resource_filename == '2') { $mga = array( - 'A' => '2/index.php', + '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 ($link == '3') { + } else if ($resource_filename == '3') { $mga = array( - 'A' => '3/index.php', + '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 ($link == '4') { + } else if ($resource_filename == '4') { $mga = array( - 'A' => '4/index.php', + 'view page A' => '4/index.php', 'B' => '4/download_index.php', ); - } else if ($link == 'cauldron') { - $mga = array( - 'view page' => '5/download_index.php', - ); - } else if ($link == 'documentation') { + } else if ($resource_filename == 'cauldron') { + $mga = array('view page' => '5/download_index.php'); + } else if ($resource_filename == 'documentation') { $mga = array( - 'doc' => 'doc/index.php', + 'view page doc' => 'doc/index.php', 'archive' => 'doc/archive.php', ); - } else { - $mga = array( - 'view page' => $link, - ); + } 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 = '<div>'; + $link = ''; foreach ($mga as $k => $v) { - $link .= sprintf('<a href="/%s/%s" class="action partial">%s</a>', $l, $v, $k); + $link .= sprintf('<a href="/%s/%s" class="view_page">%s</a>', $l, $v, $k); } - $link .= $page_not_linked . '</div>'; - - if ($num_of_missing_strings === 0 - && $num_of_fuzzy_or_missing_strings === 0 - && $num_of_untranslated_strings === 0) { - - $extra = null; - if ($num_of_extra_strings > 0) { - $extra = ' <span class="small">' . sprintf($diff_link, $f, $l) . '+' . $num_of_extra_strings . '</a></span>'; - } - if ($num_of_duplicated_strings > 0) { - $extra .= ' <span class="small">' . sprintf($diff_link, $f, $l) . 'dup: ' . $num_of_duplicated_strings . '</a></span>'; - } - - $cols .= sprintf('<td class="ok"><a href="%s" title="get a copy of the file">OK</a>%s%s</td>', - $langF, $extra, $link); + $link .= $page_not_linked; // . '</div>'; - $done = $test['a']; + if ($num_of_fuzzy_or_missing_strings === 0 && $num_of_untranslated_strings === 0) { + $references .= sprintf($ok_link, $link, $langF); } else { - // special case, en - if ($l == 'en') { - $cols .= '<td class="number">' . $num_of_untranslated_strings . ' strings</td>'; - $enStringsCount[$f] += $test['a']; - $done = $test['a']; - - // regular case - } else { - - if(($num_of_missing_strings + $num_of_fuzzy_or_missing_strings + $num_of_untranslated_strings) < $test['a']) { - $cols .= sprintf('<td class="strings">' . $diff_link, $f, $l); - - if ($num_of_missing_strings > 0) { - $cols .= $num_of_missing_strings . ' missing<br>'; - } - if ($num_of_fuzzy_or_missing_strings > 0) { - $cols .= $num_of_fuzzy_or_missing_strings . ' fuzzy or missing<br>'; - } - if ($num_of_untranslated_strings > 0) { - $cols .= $num_of_untranslated_strings . ' untranslated<br>'; - } - if ($num_of_extra_strings > 0) { - $cols .= $num_of_extra_strings . ' extra<br>'; - } - if ($num_of_duplicated_strings > 0) { - $cols .= $num_of_duplicated_strings . ' duplicate'; - $cols .= ($num_of_duplicated_strings > 1 ? 's' : ''); - } - $cols .= '</a>'; - $cols .= $link . '</td>'; - } else { - $cols .= $add_translation; + 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 . ' fuzzy or missing'; + $fuzzy = TRUE; + } + if ($num_of_untranslated_strings > 0) { + $references .= ($fuzzy ? ', ' : '') . $num_of_untranslated_strings . ' untranslated'; } - $done = $test['a'] - $num_of_untranslated_strings - $num_of_missing_strings - $num_of_fuzzy_or_missing_strings; + $references .= '</a></div>'; + } else { + $references .= $add_new_translation; } } - $stats[$l]['strings'] += $done; - - } else { - $cols .= $add_translation; - } - $num_clmns_to_repeat = 9; - $num_of_col++; - if ($num_of_col % $num_clmns_to_repeat == 0 && $num_of_col <= $num_of_enFiles - ($num_clmns_to_repeat / 3)) { - if ($l == 'en') { - $cols .= $lang_coloumn = '<td style="font-weight: bold;">Language</td>'; - } else { - $cols .= $lang_coloumn = sprintf('<td style="font-weight: bold; vertical-align: top;">' . $link_one_language . '<br><span style="font-weight: normal; font-size: smaller;">%s</span></td>', $langs[$l], $l); + } 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; } } - } - $cols .= $lang_coloumn; // last coloumn - $num_of_col = 0; // reset counter of coloumns - - $progress = floor($stats[$l]['strings'] / $stats['en']['strings'] * 100); - // special case, en - if ($l == 'en') { - $s .= sprintf('<td class="number">%d strings</td>', $stats[$l]['strings']); - // regular case - } else { - $s .= sprintf( - '<td class="number">%d%%<br><span style="font-size: smaller;">%d / %d</span></td>', - $progress, - $stats[$l]['strings'], - $stats['en']['strings'] + $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, ); } - $s .= $cols; - $s .= '</tr>' . PHP_EOL; - $languages[$stats[$l]['strings'] . '-' . $l] = $s; } - $en_language = array_shift($languages); // shift English for proper sorting - krsort($languages, SORT_NUMERIC); - // add language coloumn repeating - $lang_line = array(); - $num_of_h_col = 0; - $add_last_coloumn = FALSE; - $resources = ($restore_resources ? ' ' : $num_of_enFiles . ' resources'); - foreach ($enFiles as $lang_chunk) { - $num_of_h_col++; - if ($restore_resources) { - $lang_line[] = str_replace('en/', '', $lang_chunk); - } else { - $lang_line[] = '<a href="?r=' . $lang_chunk . '" title="see only this resource">' . str_replace('en/', '', $lang_chunk) . '</a>'; + $total_num_of_strings = 0; // total of all source strings + $language_summary = array(); + $resource_summary = array(); + foreach ($report as $resource_data) { + if ($resource_data['language'] == 'en') { + $total_num_of_strings += $resource_data['num_of_all_strings']; } - if ($num_of_h_col % $num_clmns_to_repeat == 0 && $num_of_h_col <= $num_of_enFiles - ($num_clmns_to_repeat / 3)) { - $lang_line[] = $resources; - $add_last_coloumn = TRUE; + // don't add if there is a need to store languages only for one resource + if(!$all_languages_only_one_resource || $resource_data['resource_filename'] == $one_resource) { + $key_exists = recursive_array_search($resource_data['language'], $language_summary); // is language already in the $language_summary array? + if($resource_data['resource_filename'] == $one_resource) { + $temp_var[0]['language'] = $resource_data['language']; + $temp_var[0]['num_of_all_strings'] = $resource_data['num_of_all_strings']; + $temp_var[0]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings']; + $temp_var[0]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings']; + $temp_var[0]['references'] = $resource_data['references']; + $language_summary[] = $temp_var[0]; + unset($temp_var[0]); // clear var + } else { + if ($key_exists !== FALSE) { + $language_summary[$key_exists]['num_of_all_strings'] += $resource_data['num_of_all_strings']; + $language_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] += $resource_data['num_of_fuzzy_or_missing_strings']; + $language_summary[$key_exists]['num_of_untranslated_strings'] += $resource_data['num_of_untranslated_strings']; + } else { + if($key_exists === FALSE) { + $key_exists = count($language_summary); + } + $language_summary[$key_exists]['language'] = $resource_data['language']; + $language_summary[$key_exists]['num_of_all_strings'] = $resource_data['num_of_all_strings']; + $language_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings']; + $language_summary[$key_exists]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings']; + $language_summary[$key_exists]['references'] = $resource_data['references']; + } + } + } + + // don't add if there is a need to store resources only for one language + if(!$one_language_all_resources || ($resource_data['language'] == $one_language || $resource_data['language'] == 'en')) { + $key_exists = recursive_array_search($resource_data['resource_filename'], $resource_summary); // is resource already in the $resource_summary array? + if($resource_data['language'] == 'en') { + $temp_var[0]['resource_filename'] = $resource_data['resource_filename']; + $temp_var[0]['num_of_all_strings'] = $resource_data['num_of_all_strings']; + $temp_var[0]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings']; + $temp_var[0]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings']; + $temp_var[0]['references'] = $resource_data['references']; + $resource_summary[] = $temp_var[0]; + unset($temp_var[0]); // clear var + } else { + if($one_language_all_resources) { + if($key_exists === FALSE) { + $key_exists = count($resource_summary); + } + $resource_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] = $resource_data['num_of_fuzzy_or_missing_strings']; + $resource_summary[$key_exists]['num_of_untranslated_strings'] = $resource_data['num_of_untranslated_strings']; + $resource_summary[$key_exists]['references'] = $resource_data['references']; + } else if ($key_exists !== FALSE) { + $resource_summary[$key_exists]['num_of_all_strings'] += $resource_data['num_of_all_strings']; + $resource_summary[$key_exists]['num_of_fuzzy_or_missing_strings'] += $resource_data['num_of_fuzzy_or_missing_strings']; + $resource_summary[$key_exists]['num_of_untranslated_strings'] += $resource_data['num_of_untranslated_strings']; + } + } } } - if ($add_last_coloumn) { - $lang_line[] = $resources;// last h coloumn + foreach ($language_summary as &$single_language_summary) { + $single_language_summary['num_of_translated_strings'] = + $single_language_summary['num_of_all_strings'] - + $single_language_summary['num_of_fuzzy_or_missing_strings'] - + $single_language_summary['num_of_untranslated_strings']; } - - $thfiles = '<th>' . implode('</th><th>', $lang_line) . '</th>' . PHP_EOL; - if (!$restore_languages && !$restore_resources) { - $count = ' '; + unset($single_language_summary); // foreach by reference + foreach ($resource_summary as &$single_resource_summary) { + $single_resource_summary['num_of_translated_strings'] = + $single_resource_summary['num_of_all_strings'] - + $single_resource_summary['num_of_fuzzy_or_missing_strings'] - + $single_resource_summary['num_of_untranslated_strings']; } - if ($restore_languages) { - echo '<p>Restore <a href="?l=all" title="see all languages">all languages</a>.</p>'; - $count = ' '; - } else { - $count = count($otherLangs) . ' languages'; + unset($single_resource_summary); // foreach by reference + + 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 = '55px'; + } 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 = '60px'; + $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 = '70px'; + $references = ''; + $progress = 'Progress'; } - if ($restore_resources) { - echo '<p>Restore <a href="?r=all" title="see all resources">all resources</a>.</p>'; + + // 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']; + } } - $chunks = array_chunk($languages, $num_lines_to_repeat = 8); // add header repeating - $table_body = array(); - foreach ($chunks as $chunk) { - $table_body = array_merge($table_body, $chunk, array(count($chunk) > ($num_lines_to_repeat / 2) ? '<tr><th>' . $count . '</th><th>' . $resources . '</th>' . $thfiles : '')); + 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']; + 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;"> </div>' . PHP_EOL; + $row .= '<div style="width: ' . $progress_fom_round . 'px; background-color: Orange;"> </div>' . PHP_EOL; + $row .= '<div style="width: ' . $progress_untrans . 'px; background-color: OrangeRed;"> </div>' . PHP_EOL; + $row .= '</a></td></tr>' . PHP_EOL; + $table_lines[] = $row; } - array_unshift($table_body, $en_language); // unshift English back - $s = implode($table_body); + $table_rows = implode('', $table_lines); + echo $report_text; echo <<<S -<table border="1"> +<table> <thead><tr> <th>{$count}</th> - <th>Progress</th> - {$thfiles} + <th>{$progress}</th> + <th>{$summary_text}</th> </tr></thead> <tbody> -{$s} +{$table_rows} </tbody> </table> @@ -366,6 +416,7 @@ S; // regenerating cache // TODO move it to the cron +require_once('../en/about/license/license.php'); foreach ($otherLangs as $lang) { load_license_numbers($lang); }
\ No newline at end of file |