aboutsummaryrefslogtreecommitdiffstats
path: root/langs/report_tx_git.php
diff options
context:
space:
mode:
authorfilip <filip.komar@gmail.com>2014-11-30 16:27:34 +0100
committerfilip <filip.komar@gmail.com>2014-11-30 16:27:34 +0100
commit070c7f127bc814ad6123df4d643df2e50b907886 (patch)
tree58f26f3b493655dcbd7c0c1e3e166a3d4fc5b218 /langs/report_tx_git.php
parentde66e8b545d769161bbf41e518ccd5b60172b985 (diff)
downloadwww-070c7f127bc814ad6123df4d643df2e50b907886.tar
www-070c7f127bc814ad6123df4d643df2e50b907886.tar.gz
www-070c7f127bc814ad6123df4d643df2e50b907886.tar.bz2
www-070c7f127bc814ad6123df4d643df2e50b907886.tar.xz
www-070c7f127bc814ad6123df4d643df2e50b907886.zip
First push of report about differences between Transifex and our git repository
Diffstat (limited to 'langs/report_tx_git.php')
-rw-r--r--langs/report_tx_git.php443
1 files changed, 443 insertions, 0 deletions
diff --git a/langs/report_tx_git.php b/langs/report_tx_git.php
new file mode 100644
index 000000000..29aee5eae
--- /dev/null
+++ b/langs/report_tx_git.php
@@ -0,0 +1,443 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <meta name="robots" content="noindex,nofollow,nosnippet">
+ <title>www.mageia.org report about differences between Transifex and our git repository</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; }
+ li { padding: 3px; }
+ #page { padding: 1em; position: absolute; top: 128px; }
+ .add { color: black; background: lightgrey; }
+ .bold { font-weight: bold; }
+ .stat { font-size: smaller; }
+ .italic { font-style:italic; }
+ </style>
+</head>
+<body class="contribute">
+ <header id="mgnavt">
+ <h1><a href="//www.mageia.org/">www.mageia.org</a> report about differences between Transifex and our git repository</h1>
+ <ul>
+ <li> </li>
+ </ul>
+ </header>
+ <div id="page">
+
+ <p>Progress report is available <a href="./report.php">here</a>.</p>
+
+<?php
+define('HLANG', TRUE);
+include 'lib.php';
+
+$errors = array(); // stored for error management ;)
+$resource_type = 'Webpages'; // Webpages, Documentation, Cauldron
+
+/**
+ * Transifex API implementation in php detailed on http://docs.transifex.com/developer/api/projects
+ *
+ * Returns $tx_result_array from Transifex request
+ *
+ * @param string $tx_request request
+ * @param string $project default project
+ *
+ * @return array
+*/
+function tx_call($tx_request, $project = 'project/mageia/')
+{
+ global $errors;
+ $tx_url_prefix = "http://www.transifex.com/api/2/";
+ $tx_url = $tx_url_prefix . $project . $tx_request;
+
+ // create a new cURL resource
+ $curl_handle = curl_init();
+
+ // TX username and password
+ curl_setopt($curl_handle, CURLOPT_USERPWD, "filip_mageia:report");
+
+ // return, do not echo
+ curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
+
+ // pass url
+ curl_setopt($curl_handle, CURLOPT_URL, $tx_url);
+
+ $tx_result = curl_exec($curl_handle);
+ curl_close($curl_handle);
+
+ $tx_result_array = json_decode($tx_result, TRUE);
+ $json_last_error = json_last_error();
+ if (JSON_ERROR_NONE !== $json_last_error) {
+ $error = "There was an error during API call to Transifex $tx_request ($json_last_error).";
+ $errors['tx_call'] = "$error Please reload the page or report this on mailing list.";
+ $tx_result_array = array();
+ }
+ if (FALSE === $tx_result) {
+ $errors['tx_call'] = "API call to Transifex $tx_request failed. Please reload the page or report this on mailing list.";
+ $tx_result_array = array();
+ }
+ return $tx_result_array;
+}
+
+/**
+ * Build Transifex and git links with numbers of untranslated strings
+ *
+ * Returns text string
+ *
+ * @param string $git_resource_name like 'about/constitution'
+ * @param string $language_code like 'sl'
+ * @param string $resource_type like 'Webpages'
+ * @param array $stat_data with numbers of untranslated strings
+ *
+ * @return string
+*/
+function build_links($git_resource_name, $language_code, $resource_type, $stat_data)
+{
+ $tx_resource_name = str_replace('/', '-', $git_resource_name);
+ $locale_name = locale_underscore_to_hyphen($language_code);
+ if ('nav' == $git_resource_name) {
+ $git_link = sprintf('nav/tree/langs/%s.po', $locale_name);
+ } else {
+ $git_link = sprintf('www/tree/langs/%s/%s.po', $locale_name, $git_resource_name);
+ }
+ $links_and_num = "<a href=\"http://www.transifex.com/organization/MageiaLinux/dashboard/all_resources/";
+ $links_and_num .= "$language_code/#1/?s=$tx_resource_name&amp;c=$resource_type\">Tx</a>: ";
+ $links_and_num .= $stat_data['tx_untran'];
+ $links_and_num .= ', <a href="http://gitweb.mageia.org/web/' . $git_link . '">git</a>: ';
+ $links_and_num .= $stat_data['git_untran'];
+
+ return $links_and_num;
+}
+
+
+$tx_resources = array();
+// get resources data from TX
+$tx_resources = tx_call("resources");
+
+// create separate array ($tx_resources_info) and add statistics to it from TX
+$tx_resources_info = array();
+foreach ($tx_resources as $one_resource) {
+ $one_tx_resource_info = array();
+ $tx_resource_name = $one_resource['slug'];
+ $category = $one_resource['categories'][0];
+ // limit resource type only on one
+ if ($category == $resource_type) {
+ // add statistic
+ $tx_stat_for_resource = tx_call("resource/$tx_resource_name/stats");
+ $tx_resource_name = str_replace('page-', '', $tx_resource_name); // unify resource names
+ $one_resource['tx_resource_name'] = $tx_resource_name;
+ $one_resource['statistic'] = $tx_stat_for_resource;
+ $tx_resources_info[] = $one_resource;
+ }
+}
+
+// create array ($report) with statistics from git
+$report = array();
+$otherLangs = get_other_langs();
+$enFiles = array_merge(array('../_nav/langs/en.pot'), get_lang_references('*.pot')); // added navigation file
+foreach ($otherLangs as $l) {
+ foreach ($enFiles as $f) {
+ $references = '';
+ $resource = _extract_resource($f);
+ $langF = _po_file_switch($f, $l);
+ if (strstr($f, '../_nav/langs/en.') !== FALSE) {
+ $langF = '../_nav/langs/' . $l . '.po' . (($l == 'en') ? 't' : '');
+ }
+ if (file_exists($langF)) {
+ $stat = _po_diff($l, $resource);
+ $num_of_fuzzy_or_missing = count($stat['fuzzy_or_missing']);
+ $num_of_untranslated = count($stat['notrans']);
+ } else { // file $langF doesn't exists
+ $stat = _po_diff('en', $resource);
+ $num_of_fuzzy_or_missing = 0;
+ $num_of_untranslated = count($stat['notrans']);
+ }
+ // unify resource names, navigation is a special exception
+ $resource_name = str_replace(array('../_nav/langs/en', 'en/', '.pot'), array('nav', '', ''), $f);
+ // create pt_BR from pt-br and alike to unify languages
+ $web_language_code = locale_hyphen_underscore($l, true);
+ $num_of_not_fully_trans = $num_of_fuzzy_or_missing + $num_of_untranslated;
+ $report[] = array(
+ 'num_of_all_strings' => $stat['a'],
+ 'resource_name' => $resource_name,
+ 'web_language_code' => $web_language_code,
+ 'num_of_not_fully_trans' => $num_of_not_fully_trans,
+ );
+ }
+}
+
+// core part: building the data
+$tx_lang_completed_treshold = 90; // report new languages above this treshold from 0 to 100 (%)
+$langs_and_res_names_done = FALSE;
+$tx_all_languages = array();
+$tx_all_langs_above_treshold = array();
+$git_all_languages = array();
+$tx_all_resource_names = array();
+$git_all_resource_names = array();
+$git_compare_resources = array();
+$tx_git_difference = array();
+$nonequal_num_of_all_strings = array();
+foreach ($tx_resources_info as $tx_resource_info) {
+ $tx_resource_name = $tx_resource_info['tx_resource_name'];
+ if (!in_array($tx_resource_name, $tx_all_resource_names)) {
+ $tx_all_resource_names[] = $tx_resource_name;
+ }
+ foreach ($tx_resource_info['statistic'] as $tx_resource_language => $tx_resource_language_stat) {
+ $completed = sprintf("%d", $tx_resource_language_stat['completed']);
+ if (!in_array($tx_resource_language, $tx_all_languages)) {
+ $tx_all_languages[] = $tx_resource_language;
+ }
+ if ($tx_lang_completed_treshold <= $completed) {
+ if (!in_array($tx_resource_language, $tx_all_langs_above_treshold)) {
+ $tx_all_langs_above_treshold[] = $tx_resource_language;
+ }
+ }
+ foreach ($report as $git_resource_info) {
+ $git_resource_name = $git_resource_info['resource_name'];
+ $git_compare_resource_name = str_replace('/', '-', $git_resource_name);
+ $git_resource_language = $git_resource_info['web_language_code'];
+ if (!$langs_and_res_names_done) {
+ $git_all_languages[] = $git_resource_language;
+ $git_all_resource_names[] = $git_resource_name;
+ $git_compare_resources[] = $git_compare_resource_name;
+ }
+ // if names and languages match but skip English as a source language
+ if ($tx_resource_language == $git_resource_language && 'en' != $git_resource_language
+ && $tx_resource_name == $git_compare_resource_name) {
+
+ $tx_resource_untrans_in_lang = $tx_resource_language_stat['untranslated_entities'];
+ $tx_resource_all_strings_in_lang = $tx_resource_untrans_in_lang + $tx_resource_language_stat['translated_entities'];
+
+ $git_resource_num_of_all_strings = $git_resource_info['num_of_all_strings'];
+ $git_resource_untrans_in_lang = $git_resource_info['num_of_not_fully_trans'];
+
+ // compare l10n level
+ if ($tx_resource_untrans_in_lang != $git_resource_untrans_in_lang) {
+ $tx_git_difference[$tx_resource_language][$git_resource_name]['tx_num_of_all_strings'] = $tx_resource_all_strings_in_lang;
+ $tx_git_difference[$tx_resource_language][$git_resource_name]['tx_untranslated'] = $tx_resource_untrans_in_lang;
+ $tx_git_difference[$tx_resource_language][$git_resource_name]['git_untranslated'] = $git_resource_untrans_in_lang;
+ }
+ // this bellow should normaly only happen inside of a tx sync window so remember it
+ if ($tx_resource_all_strings_in_lang != $git_resource_num_of_all_strings) {
+ if (!in_array($git_resource_name, $nonequal_num_of_all_strings)) {
+ $nonequal_num_of_all_strings[] = $git_resource_name;
+ }
+ }
+ }
+ }
+ if (!$langs_and_res_names_done) {
+ $git_all_languages = array_unique($git_all_languages);
+ $git_all_resource_names = array_unique($git_all_resource_names);
+ $git_compare_resources = array_unique($git_compare_resources);
+ $langs_and_res_names_done = TRUE;
+ }
+ }
+};
+
+// sorting data
+sort($tx_all_resource_names, SORT_STRING);
+sort($git_all_resource_names, SORT_STRING);
+sort($git_compare_resources, SORT_STRING);
+sort($tx_all_languages);
+sort($tx_all_langs_above_treshold);
+sort($git_all_languages);
+sort($nonequal_num_of_all_strings, SORT_STRING);
+
+$tx_only_resources = array_diff($tx_all_resource_names, $git_compare_resources);
+$git_only_resources = array_diff($git_compare_resources, $tx_all_resource_names);
+$tx_only_languages = array_diff($tx_all_langs_above_treshold, $git_all_languages);
+$git_only_languages = array_diff($git_all_languages, $tx_all_languages);
+
+// preparing text for languages not present yet in our git repositories
+$tx_only_languages_details = '';
+if (0 < count($tx_only_languages)) {
+ $tx_only_languages_details = "<h3>Languages with at least one resource for $resource_type translated over treshold ";
+ $tx_only_languages_details .= "($tx_lang_completed_treshold %) but not present yet in our git:</h3>";
+ $tx_only_languages_details .= '<p>Please add them to our git.</p><ul>';
+ foreach ($tx_only_languages as $tx_only_language) {
+ $tx_language_details = tx_call("language/$tx_only_language", '');
+ $tx_only_languages_details .= '<li><span class="bold">' . $tx_only_language . '</span>: ';
+ $tx_only_languages_details .= '<a href="http://www.transifex.com/organization/MageiaLinux/dashboard/all_resources/';
+ $tx_only_languages_details .= "$tx_only_language/#1/?c=$resource_type\">" . $tx_language_details['name'] . "</a>,</li>";
+ }
+ $tx_only_languages_details .= '</ul>';
+}
+
+// preparing error texts
+if (0 < count($git_only_languages)) {
+ $error = "Some languages (" . implode(", ", $git_only_languages) . ") are present in our git";
+ $errors['git_only_languages'] .= "$error but they are bellow treshold ($tx_lang_completed_treshold %) in Transifex. Please report that.";
+}
+
+if (0 < count($tx_only_resources)) {
+ $error = "Some resources (" . implode(", ", $tx_only_resources) . ") are present only in Transifex";
+ $errors['tx_only_resources'] .= "$error but not in our git. Please report that.";
+}
+
+if (0 < count($git_only_resources)) {
+ $error = "Some resources (" . implode(", ", $git_only_resources) . ") are present only in our git";
+ $errors['git_only_resources'] .= "$error but not in Transifex. Please report that.";
+}
+
+if (0 < count($nonequal_num_of_all_strings)) {
+ $error = "Some resources (" . implode(", ", $nonequal_num_of_all_strings) . ") have different number of all strings";
+ $errors['nonequal_num_of_all_strings'] .= "$error between our git and Transifex. Please report that on the mailing list if it happens several days.";
+}
+
+// making a list of resources with Tx/git differences
+ksort($tx_git_difference);
+$all_languages_with_tx_git_diff = array();
+$all_resources_with_tx_git_diff = array();
+foreach ($tx_git_difference as $one_language_of_tx_git_difference => $resources_with_tx_git_difference) {
+ $all_languages_with_tx_git_diff[] = $one_language_of_tx_git_difference;
+ foreach ($resources_with_tx_git_difference as $one_resource_with_tx_git_difference => $details) {
+ $all_resources_with_tx_git_diff[] = $one_resource_with_tx_git_difference;
+ }
+}
+$all_resources_with_tx_git_diff = array_unique($all_resources_with_tx_git_diff);
+sort($all_resources_with_tx_git_diff, SORT_STRING);
+$num_of_resources_w_difference = count($all_resources_with_tx_git_diff);
+
+$table_difference = '';
+$num_for_switch_table_to_list = 15;
+if (0 < $num_of_resources_w_difference && $num_for_switch_table_to_list > $num_of_resources_w_difference) {
+ // preparing a table represantation of Tx/git differences
+ $i = 0;
+ $table_rows = array();
+ $table_rows[] = "<table>" . PHP_EOL;
+ $table_rows[] = "<thead>" . PHP_EOL;
+ $first_row_pass = TRUE;
+ foreach ($tx_git_difference as $one_language => $one_language_array) {
+ $j = 0;
+ $row = array();
+ $first_col_pass = TRUE;
+ if ($first_row_pass || 0 == $i % 10) {
+ $array_chunks = array_chunk($all_resources_with_tx_git_diff, $col_repeat = 8, TRUE);
+ foreach ($array_chunks as $array_chunk) {
+ $row = array_merge($row, array('&nbsp;'), $array_chunk);
+ }
+ $table_rows[] = "<tr class=\"add\"><th>" . implode("</th><th>", $row) . "</th></tr>" . PHP_EOL; // add header row
+ $row = array();
+ }
+
+ foreach ($all_resources_with_tx_git_diff as $resource_with_tx_git_diff) {
+ if ($first_col_pass || 0 == $j % $col_repeat) { // left cell
+ $row[] = "<div class=\"add\"><span class=\"bold\">" . $langs[locale_underscore_to_hyphen($one_language)] . "</span> - $one_language</div>";
+ $first_col_pass = FALSE;
+ }
+ if (array_key_exists($resource_with_tx_git_diff, $one_language_array)) {
+ $stat_data = array();
+ $stat_data['tx_untran'] = $one_language_array[$resource_with_tx_git_diff]['tx_untranslated'];
+ $stat_data['git_untran'] = $one_language_array[$resource_with_tx_git_diff]['git_untranslated'];
+
+ $cell = "<span class=\"stat\">";
+ $cell .= build_links($resource_with_tx_git_diff, $one_language, $resource_type, $stat_data);
+ $cell .= "</span>";
+ $row[] = $cell;
+ } else {
+ $row[] = '&nbsp;'; // there is no differences
+ }
+ $j++;
+ }
+ $table_rows[] = "<tr><td class=\"add\">" . implode("</td><td>", $row) . "</td></tr>" . PHP_EOL;
+ if ($first_row_pass) {
+ $table_rows[] = "</thead>" . PHP_EOL;
+ $table_rows[] = "<tbody>" . PHP_EOL;
+ $first_row_pass = FALSE;
+ }
+ $i++;
+ }
+ $table_rows[] = "</tbody>" . PHP_EOL;
+ $table_rows[] = "</table>" . PHP_EOL;
+ $table_difference = implode($table_rows);
+}
+
+$list_of_lang_diff = '';
+$list_of_resource_diff = '';
+if (0 < $num_of_resources_w_difference) {
+ // preparing a list represantation of Tx/git differences by language
+ $list_of_lang_diff .= '<ul>' . PHP_EOL;
+ foreach ($tx_git_difference as $one_language => $one_language_array) {
+ $list_of_lang_diff .= '<li><span class="bold">' . $langs[locale_underscore_to_hyphen($one_language)];
+ $list_of_lang_diff .= '</span> - ' . $one_language . ': ' . PHP_EOL;
+ $one_language_resources = array_keys($one_language_array);
+ $miss_first = TRUE;
+ foreach ($one_language_resources as $one_language_resource) {
+ $stat_data = array();
+ $stat_data['tx_untran'] = $one_language_array[$one_language_resource]['tx_untranslated'];
+ $stat_data['git_untran'] = $one_language_array[$one_language_resource]['git_untranslated'];
+
+ $list_of_lang_diff .= ($miss_first ? '' :', ');
+ $list_of_lang_diff .= "<span class=\"italic\">$one_language_resource</span> <span class=\"stat\">(";
+ $list_of_lang_diff .= build_links($one_language_resource, $one_language, $resource_type, $stat_data);
+ $list_of_lang_diff .= ')</span>';
+ $miss_first = FALSE;
+ }
+ $list_of_lang_diff .= '</li>' . PHP_EOL;
+ }
+ $list_of_lang_diff .= '</ul>' . PHP_EOL;
+
+
+ // preparing a list represantation of Tx/git differences by resources
+ $list_of_resource_diff .= '<ul>' . PHP_EOL;
+ foreach ($all_resources_with_tx_git_diff as $resource_with_tx_git_diff) {
+ $list_of_resource_diff .= '<li><span class="bold">' . $resource_with_tx_git_diff .'</span>: ' . PHP_EOL;
+ $miss_first = TRUE;
+ foreach ($tx_git_difference as $one_language => $one_language_array) {
+ if (isset($one_language_array[$resource_with_tx_git_diff])) {
+ $stat_data = array();
+ $stat_data['tx_untran'] = $one_language_array[$resource_with_tx_git_diff]['tx_untranslated'];
+ $stat_data['git_untran'] = $one_language_array[$resource_with_tx_git_diff]['git_untranslated'];
+
+ $list_of_resource_diff .= ($miss_first ? '' :', ');
+ $list_of_resource_diff .= '<span class="italic">' . $langs[locale_underscore_to_hyphen($one_language)];
+ $list_of_resource_diff .= "</span> - $one_language <span class=\"stat\">(";
+ $list_of_resource_diff .= build_links($resource_with_tx_git_diff, $one_language, $resource_type, $stat_data);
+ $list_of_resource_diff .= ')</span>';
+ $miss_first = FALSE;
+ }
+ }
+ $list_of_resource_diff .= '</li>' . PHP_EOL;
+ }
+ $list_of_resource_diff .= '</ul>' . PHP_EOL;
+}
+
+// print out any errors
+if (0 < count($errors)) {
+ $error_text = '<ul>';
+ foreach ($errors as $single_error) {
+ $error_text .= '<li class="bold">' . $single_error . '</li>';
+ }
+ $error_text .= '</ul>';
+ echo $error_text . PHP_EOL;
+}
+
+// print any languages present only in Transifex
+echo $tx_only_languages_details . PHP_EOL;
+
+// print any differences between Transifex and our git repository
+echo '<h3>Languages bellow have some differences between Transifex and our git repository.</h3>';
+echo '<p>To avoid furter alienation and confusion please synchronise them.</p>';
+echo '<p>They differs on number of untranslated strings in resources:</p>';
+
+if (0 < $num_of_resources_w_difference) {
+ // print table if there are only a few resources with differences otherwise print a list
+ if ($num_for_switch_table_to_list > $num_of_resources_w_difference) {
+ echo $table_difference . PHP_EOL;
+ } else {
+ echo $list_of_lang_diff . PHP_EOL;
+ echo '<h3>Same list but arranged by resources:</h3>';
+ echo $list_of_resource_diff . PHP_EOL;
+ }
+}
+?>
+ <p>Source code for this website is
+ <a href="http://gitweb.mageia.org/web/www/tree/langs/report_tx_git.php">available on git</a>.</p>
+ </div>
+ <?php echo '<script src="/_nav/js/source.js"></script>' ?>
+</body>
+</html> \ No newline at end of file