com web/doc: revcheck rewritten: include/lib_revcheck.inc .php www/revcheck.php
| From: | sobak@php.net | Date: | Thu, 20 Mar 2014 17:53:32 +0000 |
| Subject: | com web/doc: revcheck rewritten: include/lib_revcheck.inc .php www/revcheck.php | ||
| Groups: | php.doc.web | ||
| Request: | Send a blank email to doc-web+get-2320@lists.php.net to get a copy of this message | ||
Commit: cc2113bb79d2619f18ad16c12fb156945a74173b
Author: Sobak <msobaczewski@gmail.com> Thu, 20 Mar 2014 18:53:32 +0100
Parents: 87e71fc492382a38e29471f1c1fb961140074e82
Branches: master
Link: http://git.php.net/?p=web/doc.git;a=commitdiff;h=cc2113bb79d2619f18ad16c12fb156945a74173b
Log:
revcheck rewritten
Changed paths:
M include/lib_revcheck.inc.php
M www/revcheck.php
diff --git a/include/lib_revcheck.inc.php b/include/lib_revcheck.inc.php index 8e00965..e54bfa4 100644 --- a/include/lib_revcheck.inc.php +++ b/include/lib_revcheck.inc.php @@ -33,8 +33,6 @@ define("REV_NOTRANS", 6); // file without translation define("REV_CREDIT", 7); // only used in translators list define("REV_WIP", 8); // only used in translators list - - // Return an array of directory containing outdated files function get_dirs($idx, $lang) { @@ -208,11 +206,10 @@ function revcheck_available_languages($idx) // Return en integer function get_nb_EN_files($idx) { - $sql = "select COUNT(*) as total FROM files WHERE lang = 'en'"; + $sql = "SELECT COUNT(*) AS total FROM files WHERE lang = 'en'"; $res = sqlite_query($idx, $sql); $row = sqlite_fetch_array($res, SQLITE_ASSOC); - $files_EN = $row['total']; - return $files_EN; + return $row['total']; } function get_missfiles($idx, $lang) @@ -279,12 +276,21 @@ function get_oldfiles($idx, $lang) return $tmp; } -function get_description($idx, $lang) +function get_misstags($idx, $lang) { - $sql = 'SELECT intro FROM description WHERE lang = "' . $lang . '";'; + $sql = 'SELECT + d.name AS dir, b.size AS en_size, a.size AS trans_size, a.name AS name + FROM files a, dirs d + LEFT JOIN files b ON a.dir = b.dir AND a.name = b.name + WHERE a.lang="'.$lang.'" AND b.lang="en" AND a.revision IS NULL + AND a.size IS NOT NULL AND a.dir = d.id'; + $result = sqlite_query($idx, $sql); - $row = sqlite_fetch_array($result, SQLITE_ASSOC); - return $row['intro']; + while($row = sqlite_fetch_array($result, SQLITE_ASSOC)) { + $tmp[] = $row; + } + + return $tmp; } // Return an integer @@ -698,4 +704,9 @@ function get_stats_notag($idx, $lang) $r = sqlite_fetch_array($result, SQLITE_ASSOC); $result = array($r['total'], $r['size']); return $result; +} + +function gen_date($file) +{ + return '<small>Generated: '.date('d M Y H:i:s', filemtime($file)).'</small>'; } \ No newline at end of file diff --git a/www/revcheck.php b/www/revcheck.php index 833533d..f22d932 100644 --- a/www/revcheck.php +++ b/www/revcheck.php @@ -2,150 +2,63 @@ include '../include/init.inc.php'; include '../include/lib_revcheck.inc.php'; -$LANG = LANGC; -$language = $_GET['lang']; -if (in_array($language, array_keys($LANGUAGES))) { - $language = 'en'; +if (isset($_GET['lang']) && in_array($_GET['lang'], array_keys($LANGUAGES))) { + $lang = $_GET['lang']; +} +else { + $lang = 'en'; +} + +$lang_name = $LANGUAGES[$lang]; + +if (isset($_GET['p'])) { + $tool = $_GET['p']; } $DBLANG = SQLITE_DIR . 'rev.php.sqlite'; -if (LANGC == 'en' ||LANGC == 'all') { - if ($dbhandle = @sqlite_open($DBLANG)) { - $langs = revcheck_available_languages($dbhandle); - if(!$langs) { - echo site_header('docweb.common.header.revcheck'); - ?> - <div class="ColoredDiv"> - <h2 class="c">Status of the translated PHP Manual</h2> - <p class="c" style="font-size:12px;"><span class="Flag"> - <?php - if (LANGC != 'all') { - echo '<img src="/images/flags/' . LANGC .'.png" alt="'. LANGD . '" title="' . LANGD . '" />'; - } ?></span> Language: <?php echo LANGD; ?> : This documentation don't exist yet.<br /> - </p> - </div> - <?php - echo site_footer(); - die(); - } else { - echo site_header('docweb.common.header.revcheck'); - echo " - <p class=\"c\"> - <img src=\"/images/revcheck/info_revcheck_php_all_lang.png\" alt=\"Info\" /> - </p>"; - echo site_footer(); - die(); - } - } else { - echo site_header('docweb.common.header.revcheck'); - echo "Couldn't connect to the revcheck database"; - echo site_footer(); - die(); + +// Check if db connection can be established and if revcheck for requested lang exists +if ($dbhandle = sqlite_open($DBLANG)) { + $sql = "SELECT charset FROM description WHERE lang = '$lang'"; + if ($lang != 'en' && (!($res = sqlite_query($dbhandle, $sql)) || !sqlite_num_rows($res))) { + site_header(); + echo "<p>This revision check doesn't exist yet.</p>"; + site_footer(); + die; } } -$sql = "SELECT charset FROM description WHERE lang='" . LANGC . "';"; -if (!($dbhandle = @sqlite_open($DBLANG)) || !($res = @sqlite_query($dbhandle, $sql)) || !sqlite_num_rows($res)) -{ - // if there's no description, there's no documentation - echo site_header('docweb.common.header.revcheck'); -?> - <div class="ColoredDiv"> - <h2 class="c">Status of the translated PHP Manual</h2> - <p class="c" style="font-size:12px;"><span class="Flag"> - <?php - if (LANGC != 'all') { - echo '<img src="/images/flags/' . LANGC .'.png" alt="'. LANGD . '" title="' . LANGD . '" />'; - } ?></span> Language: <?php echo LANGD; ?><br /> - </p> - </div> - <blockquote> - This revision check don't exist yet. - </blockquote> -<?php -echo site_footer(); -die; +else { + site_header(); + echo "<p>Database connection couldn't be established</p>"; + site_footer(); + die; } -$charset = sqlite_fetch_single($res); -define('ENCODING', $charset); -sqlite_close($dbhandle); -echo site_header('docweb.common.header.revcheck'); -if (isset($_GET['p'])) { - $PART = $_GET['p']; -} else { - $PART = 'start'; -} - -// Colors used to mark files by status (colors for the above types) -$CSS = array( -REV_UPTODATE => "act", -REV_NOREV => "norev", -REV_CRITICAL => "crit", -REV_OLD => "old", -REV_NOTAG => "wip", -REV_NOTRANS => "wip", -REV_CREDIT => "wip", -REV_WIP => "wip", -); - - -$file_types = array( -array (REV_UPTODATE, "Up to date files"), -array (REV_OLD, "Old files"), -array (REV_CRITICAL, "Critical files"), -array (REV_WIP, "Work in progress"), -array (REV_NOREV, "Files without revision number"), -array (REV_NOTAG, "Files without revision tag"), -array (REV_NOTRANS, "Files available for translation") -); - -?> - -<div class="ColoredDiv"> - <h2 class="c">Status of the translated PHP Manual</h2> - <p class="c" style="font-size:12px;"> - Generated: <?php echo date("r", filemtime($DBLANG)); ?> / <span class="Flag"><img src="/images/flags/<?php echo LANGC; ?>.png" alt="<?php echo LANGD; ?>" title="<?php echo LANGD; ?>" /></span> Language: <?php echo LANGD; ?><br /> - </p> -</div> - <ul> - <li<?php echo ($PART == 'intro' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=intro">Introduction</a>'; ?></li> - <li<?php echo ($PART == 'translators' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=translators">Translators</a>'; ?></li> - <li<?php echo ($PART == 'filesummary' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=filesummary">File summary by type</a>'; ?></li> - <li<?php echo ($PART == 'files' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=files">Files</a>'; ?></li> - <li<?php echo ($PART == 'misstags' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=misstags">Missing revision numbers</a>'; ?></li> - <li<?php echo ($PART == 'missfiles' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=missfiles">Untranslated files</a>'; ?></li> - <li<?php echo ($PART == 'oldfiles' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=oldfiles">Not in EN tree</a>'; ?></li> - <li<?php echo ($PART == 'graph' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=graph">Graph</a>'; ?></li> - </ul> -<?php +site_header(true); +switch($tool) { + case 'translators': + $translators = get_translators($dbhandle, $lang); -if ($dbhandle = sqlite_open($DBLANG)) { - switch($PART) { - case 'translators' : - - $translators = get_translators($dbhandle, $LANG); - - $uptodate = translator_get_uptodate($dbhandle, $LANG); - $old = translator_get_old($dbhandle, $LANG); - $critical = translator_get_critical($dbhandle, $LANG); - $wip = translator_get_wip($dbhandle, $LANG); - - foreach($translators as $nick =>$data) { - $files_w[$nick] = array('uptodate' => '', 'old' =>'', 'critical' => '', 'norev' => '', 'wip' => ''); - $files_w[$nick]['uptodate'] = isset($uptodate[$nick]) ? $uptodate[$nick] : ''; - $files_w[$nick]['wip'] = isset($wip[$nick]) ? $wip[$nick] : ''; - $files_w[$nick]['old'] = isset($old[$nick]) ? $old[$nick] : ''; - $files_w[$nick]['critical'] = isset($critical[$nick]) ? $critical[$nick] : ''; - } - - echo '<a name="translators"></a>'; - if (empty($translators)) { - echo 'No translators info'; - } else { - echo <<<TRANSLATORS_HEAD -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="820" border="0" cellpadding="4" cellspacing="1" class="Tc"> -<tr class="blue"> + if (empty($translators)) { + echo '<p>No translators info.</p>'; + } + else { + $uptodate = translator_get_uptodate($dbhandle, $lang); + $old = translator_get_old($dbhandle, $lang); + $critical = translator_get_critical($dbhandle, $lang); + $wip = translator_get_wip($dbhandle, $lang); + + foreach($translators as $nick =>$data) { + $files_w[$nick] = array('uptodate' => '', 'old' =>'', 'critical' => '', 'norev' => '', 'wip' => ''); + $files_w[$nick]['uptodate'] = isset($uptodate[$nick]) ? $uptodate[$nick] : ''; + $files_w[$nick]['wip'] = isset($wip[$nick]) ? $wip[$nick] : ''; + $files_w[$nick]['old'] = isset($old[$nick]) ? $old[$nick] : ''; + $files_w[$nick]['critical'] = isset($critical[$nick]) ? $critical[$nick] : ''; + } + + echo <<<TRANSLATORS_HEAD +<table border="0" cellpadding="4" cellspacing="1"> +<tr> <th rowspan="2">Name</th> <th rowspan="2">Contact email</th> <th rowspan="2">Nick</th> @@ -153,371 +66,344 @@ if ($dbhandle = sqlite_open($DBLANG)) { <th colspan="7">Files maintained</th> </tr> <tr> -<th class="wip" style="color:#000000">cre-<br />dits</th> -<th class="act" style="color:#000000">upto-<br />date</th> -<th class="old" style="color:#000000">old</th> -<th class="crit" style="color:#000000">cri-<br />tical</th> -<th class="norev" style="color:#000000">no<br />rev</th> -<th class="wip" style="color:#000000">wip</th> -<th class="blue">sum</th> +<th>upto-<br>date</th> +<th>old</th> +<th>cri-<br>tical</th> +<th>wip</th> +<th>sum</th> </tr> TRANSLATORS_HEAD; - $class = 'old'; - - foreach ($translators as $nick => $data) { - if ($data['svn'] == 'yes') { - $svnu = 'x'; - $col = 'old'; - } else { - $svnu = ' '; - $col = 'wip'; - } - echo '<tr class="', $col, '">' . "\n"; - echo '<td><a name="maint-'.$nick.'" href="'.BASE_URL. '/revcheck.php?p=files&user='.$nick. '">'. $data['name'] . '</a></td>', "\n"; - echo '<td>', $data['mail'], '</td>', "\n"; - echo '<td>', $nick, '</td>', "\n"; - echo '<td class="c">', $svnu, '</td>', "\n"; - echo '<td class="c"> </td>' , - '<td class="c">' , @$files_w[$nick]['uptodate'], "</td>" , - '<td class="c">' , @$files_w[$nick]['old'] , "</td>" , - '<td class="c">' , $files_w[$nick]['critical'], "</td>" , - '<td class="c"> </td>' , - '<td class="c">', $files_w[$nick]['wip'], '</td>' , - '<th class="blue">' , @array_sum($files_w[$nick]), "</th>" , "\n"; - echo '</tr>', "\n"; - } - echo '</table>'."\n</div>"; - } - break; - - case 'missfiles' : - $missfiles = get_missfiles($dbhandle, $LANG); - if (!$missfiles) { - echo 'No missfile info'; - } else { - $num = count($missfiles); - echo <<<MISSTAGS_HEAD -<p> </p> -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="400" border="0" cellpadding="3" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="1">Available for translation ($num files):</th> - <th colspan="1">kB</th> - </tr> - -MISSTAGS_HEAD; - - $last_dir = false; - $total_size = 0; - foreach ($missfiles as $miss) { - if (!$last_dir || $last_dir != $miss['dir']) { - echo '<tr class="blue"><th colspan="2">' . $miss['dir'] . '</th></tr>'; - $last_dir = $miss['dir']; - } - echo '<tr class="wip"><td>', $miss['file'], '</td><td class="r">', $miss['size'], '</td></tr>'; - $total_size += $miss['size']; - // flush every 200 kbytes - if (($total_size % 200) == 0) { - flush(); - } - } - echo '<tr class="blue"> - <th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th> - </tr>'; - echo '</table></div>'; - } - break; - - case 'oldfiles' : - $oldfiles = get_oldfiles($dbhandle, $LANG); - if (!$oldfiles) { - echo 'No old file info'; - } else { - $num = count($oldfiles); - echo <<<OLDTAGS_HEAD -<p> </p> -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="400" border="0" cellpadding="3" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="1">Not in EN tree ($num files):</th> - <th colspan="1">kB</th> - </tr> - -OLDTAGS_HEAD; - - $last_dir = false; - $total_size = 0; - foreach ($oldfiles as $old) { - if (!$last_dir || $last_dir != $old['dir']) { - echo '<tr class="blue"><th colspan="2">' . $old['dir'] . '</th></tr>'; - $last_dir = $old['dir']; - } - echo '<tr class="wip"><td>', $old['file'], '</td><td class="r">', $old['size'], '</td></tr>'; - $total_size += $old['size']; - // flush every 200 kbytes - if (($total_size % 200) == 0) { - flush(); - } - } - echo '<tr class="blue"> - <th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th> - </tr>'; - echo '</table></div>'; - } - break; - - case 'misstags' : - $sql = 'select - d.name as dir, b.size as en_size, a.size as trans_size, a.name as name - from files a, dirs d - left join files b on a.dir = b.dir and a.name = b.name - where a.lang="' . $LANG .'" and b.lang="en" and a.revision is NULL - and a.size is not NULL and a.dir = d.id'; - - $result = sqlite_query($dbhandle, $sql); - $num = sqlite_num_rows($result); - if ($num == 0) { - echo 'No misstags info'; - } else { - echo <<<MISSTAGS_HEAD -<p> </p> -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="400" border="0" cellpadding="3" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="2">Files without Revision-comment ($num files):</th> - <th colspan="3">Sizes in kB</th> - </tr> - <tr class="blue"> - <th>en</th> - <th>$LANG</th> - <th>diff</th> - </tr> - -MISSTAGS_HEAD; - - $last_dir = false; - - while($row = sqlite_fetch_array($result, SQLITE_ASSOC)) { - if (!$last_dir || $last_dir != $row['dir']) { - echo '<tr class="blue"><th colspan="4">' . $row['dir'] . '</th></tr>'; - $last_dir = $row['dir']; - } - echo '<tr class="wip"><td>', $row['name'], '</td><td class="r">', $row['en_size'], '</td><td class="r">', $row['trans_size'], '</td><td class="r">', (intval($row['en_size'] - $row['trans_size'])) ,'</td></tr>'; - } - echo '</table></div>'; - } - break; - - - case 'filesummary' : - - $file_summary_array = array( - REV_UPTODATE => array(0,0), - REV_NOREV => array(0,0), - REV_CRITICAL => array(0,0), - REV_OLD => array(0,0), - REV_NOTAG => array(0,0), - REV_NOTRANS => array(0,0), - REV_CREDIT => array(0,0), - REV_WIP => array(0,0) - ); - - - $file_summary_array[REV_WIP] = get_stats_wip($dbhandle, $LANG); - $file_summary_array[REV_CRITICAL] = get_stats_critical($dbhandle, $LANG); - $file_summary_array[REV_UPTODATE] = get_stats_uptodate($dbhandle, LANGC); - $file_summary_array[REV_OLD] = get_stats_old($dbhandle, $LANG); - $file_summary_array[REV_NOTAG] = get_stats_notag($dbhandle, $LANG); - $file_summary_array[REV_NOTRANS] = get_stats_notrans($dbhandle, $LANG); - - echo <<<END_OF_MULTILINE -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="450" border="0" cellpadding="4" cellspacing="1" class="Tc"> -<tr class="blue"> -<th>File status type</th> -<th>Number of files</th> -<th>Percent of files</th> -<th>Size of files (kB)</th> -<th>Percent of size</th> -</tr> -END_OF_MULTILINE; - $percent = array(0, 0); - - foreach($file_summary_array as $t => $a) { - $percent[0] += $a[0]; - $percent[1] += $a[1]; - } - - foreach ($file_types as $num => $type) { - - $tmp_num_percent_0 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][0] * 100 / $percent[0], 2 ); - $tmp_num_percent_1 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][1] * 100 / $percent[1], 2); - - - echo "<tr class=\"".$CSS[$type[0]]."\">". - "<td>".$type[1]."</td>". - "<td class=\"c\">" . $file_summary_array[$type[0]][0] . "</td>". - "<td class=\"c\">" . $tmp_num_percent_0 . "%</td>". - "<td class=\"c\">".$file_summary_array[$type[0]][1]."</td>". - "<td class=\"c\">" . $tmp_num_percent_1 . "%</td></tr>\n"; - } - - echo "<tr class=\"blue\"><th>Files total</th><th>$percent[0]</th><th>100%</th><th>" . $percent[1] . "</th><th>100%</th></tr>\n". - "</table></div>\n<p> </p>\n"; - - break; - - - case 'files' : - // we need a dir to browse - $dirs = get_dirs($dbhandle, $LANG); - $users = get_translators($dbhandle, $LANG); - - if (empty($dirs)) { - echo 'No files'; - } else { - echo '<p>Choose a directory :</p>'; - echo '<form method="get" action="' . BASE_URL . '/revcheck.php?p=files"><p><select name="dir">'; - foreach ($dirs as $id => $name) { - if (isset($_GET['dir']) && $_GET['dir'] == $id) { - $selected = ' selected="selected"'; - } else { - $selected = ''; - } - echo '<option value="' . $id . '"' . $selected . '>' . $name . '</option>' . "\n"; - } - echo '</select><input type="hidden" name="p" value="files" /><input type="submit" value="See outdated files" /></p></form>'; - - echo '<p>Or choose a translator :</p>'; - echo '<form method="get" action="' . BASE_URL . '/revcheck.php?p=files"><p><select name="user">'; - foreach ($users as $id => $user) { - if (isset($_GET['user']) && $_GET['user'] == $id) { - $selected = ' selected="selected"'; - } else { - $selected = ''; - } - echo '<option value="' . $id . '"' . $selected . '>' . $id . '</option>' . "\n"; - } - echo '</select><input type="hidden" name="p" value="files" /><input type="submit" value="See outdated files" /></p></form>'; - } - - if (!empty($dirs) && (isset($_GET['dir']) || isset($_GET['user']))) { - if (isset($_GET['user'])) { - $outdated = get_outdated_translator_files($dbhandle, $LANG, $_GET['user']); - } else { - $outdated = get_outdated_files($dbhandle, $LANG, $_GET['dir']); - } - if (empty($outdated)) { - echo 'No files info'; - } else { - echo <<<END_OF_MULTILINE -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="820" border="0" cellpadding="4" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="2">Translated file</th> - <th colspan="2">Revision</th> - <th colspan="3">Size in kB</th> - <th colspan="3">Age in days</th> - <th rowspan="2">Maintainer</th> - <th rowspan="2">Status</th> - </tr> - <tr class="blue"> - <th>en</th> - <th>$LANG</th> - <th>en</th> - <th>$LANG</th> - <th>diff</th> - <th>en</th> - <th>$LANG</th> - <th>diff</th> - </tr> - <tr class="blue"><th colspan="12">{$outdated[0]['name']}</th></tr> + foreach ($translators as $nick => $data) { + $svn = ($data['svn'] == 'yes') ? '✓' : ' '; + + echo '<tr>', + '<td><a href="/revcheck.php?p=files&user='.$nick.'">'.$data['name'].'</a></td>', + '<td>', $data['mail'], '</td>', + '<td>', $nick, '</td>', + '<td>', $svn, '</td>', + '<td>' , @$files_w[$nick]['uptodate'], '</td>', + '<td>' , @$files_w[$nick]['old'], '</td>', + '<td>' , $files_w[$nick]['critical'], '</td>', + '<td>', $files_w[$nick]['wip'], '</td>', + '<th>' , @array_sum($files_w[$nick]), '</th>', + '</tr>'; + } + echo '</table>'; + } + echo gen_date($DBLANG); + break; -END_OF_MULTILINE; - $last_dir = false; - $prev_name = $outdated[0]['name']; - - foreach ($outdated as $r) { - if ($r['name'] != $prev_name) { - echo '<tr class="blue"><th colspan="12">'.$r['name'].'</th></tr>'; - $prev_name = $r['name']; - } - $r['en_date'] = intval((time() - $r['en_date']) / 86400); - $r['trans_date'] = intval((time() - $r['trans_date']) / 86400); - // Make decision on file category by revision, date and size - $rev_diff = intval($r['en_rev']) - intval($r['trans_rev']); - $size_diff = intval($r['en_size']) - intval($r['trans_size']); - $date_diff = $r['en_date'] - $r['trans_date']; - if ($r['trans_rev'] === 'n/a') { - $status_mark = REV_NOREV; - } else if ($rev_diff > 0 || $size_diff >= ALERT_SIZE || $date_diff <= ALERT_DATE) { - $status_mark = REV_CRITICAL; - } else { - // We need a value here for the CSS, default to 'old' - $status_mark = REV_OLD; - } - - // Make the maintainer a link, if we have that maintainer in the list - if ($r['maintainer'] && $r["maintainer"] != 'nobody') { - $r["maintainer"] = '<a href="?p=translators#maint-' . $r['maintainer'] . '">' . $r["maintainer"] . '</a>'; - } - - // If we have a 'numeric' revision diff and it is not zero, - // make a link to the SVN repository's diff script - if ($r['trans_rev'] !== 'n/a') { - $r['short_name'] = '<a href="http://svn.php.net/viewvc/' . - $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . - "?r1=" . $r["trans_rev"] . - "&r2=" . $r["en_rev"] . - '&view=patch">' . $r['file'] . '</a>'; - - // Add a [NoWS] link - $r['short_name'] .= ' <a href="http://svn.php.net/viewvc/' . - $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . - '?r1=' . $r['trans_rev'] . - '&r2=' . $r['en_rev'] . - '">[NoWS]</a>'; - } else { - $r['short_name'] = $r['file']; - } - - - - // Write out the line for the current file (get file name shorter) - echo "<tr class=\"{$CSS[$status_mark]}\">". - "<td>{$r['short_name']}</td>". - "<td>{$r['en_rev']}</td>" . - "<td>{$r['trans_rev']}</td>" . - "<td> {$r['en_size']}</td>" . - "<td> {$r['trans_size']}</td>" . - "<td align=\"right\"><strong>" . $size_diff . "</strong></td>" . - "<td> {$r['en_date']}</td>" . - "<td> {$r['trans_date']}</td>" . - "<td align=\"right\"><strong>" . $date_diff . "</strong></td>" . - "<td> {$r['maintainer']}</td>" . - "<td> {$r['status']}</td></tr>\n"; - - } - echo '</table></div>'; -} -} -break; - -case "graph" : -if (is_readable("images/revcheck/info_revcheck_php_" . LANGC . ".png")) { - echo "<p class=\"c\"> - <img src=\"/images/revcheck/info_revcheck_php_" . LANGC . ".png\" alt=\"Info\" /> - </p>"; -} else { - echo 'Can\'t find graph'; -} -break; + case 'missfiles': + $missfiles = get_missfiles($dbhandle, $lang); + if (!$missfiles) { + echo '<p>No missfile info.</p>'; + } + else { + $num = count($missfiles); + echo '<table border="0" cellpadding="3" cellspacing="1" style="text-align:center">'; + echo '<tr><th rowspan="1">Available for translation ('.$num.' files):</th><th colspan="1">kB</th></tr>'; + + $last_dir = false; + $total_size = 0; + foreach ($missfiles as $miss) { + if (!$last_dir || $last_dir != $miss['dir']) { + echo '<tr><th colspan="2">'.$miss['dir'].'</th></tr>'; + $last_dir = $miss['dir']; + } + echo '<tr><td>'.$miss['file'].'</td><td>'.$miss['size'].'</td></tr>'; + $total_size += $miss['size']; + // flush every 200 kbytes + if (($total_size % 200) == 0) { + flush(); + } + } + echo '<tr><th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th></tr>'; + echo '</table>'; + } + echo gen_date($DBLANG); + break; + + case 'oldfiles': + $oldfiles = get_oldfiles($dbhandle, $lang); + if (!$oldfiles) { + echo '<p>No old files info.</p>'; + } + else { + $num = count($oldfiles); + echo '<table width="400" border="0" cellpadding="3" cellspacing="1" style="text-align:center">'; + echo '<tr><th rowspan="1">Not in EN tree ('.$num.' files):</th><th colspan="1">kB</th></tr>'; + + $last_dir = false; + $total_size = 0; + foreach ($oldfiles as $old) { + if (!$last_dir || $last_dir != $old['dir']) { + echo '<tr><th colspan="2">'.$old['dir'].'</th></tr>'; + $last_dir = $old['dir']; + } + echo '<tr><td>', $old['file'], '</td><td class="r">'.$old['size'].'</td></tr>'; + $total_size += $old['size']; + // flush every 200 kbytes + if (($total_size % 200) == 0) { + flush(); + } + } + echo '<tr><th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th></tr>'; + echo '</table>'; + } + echo gen_date($DBLANG); + break; + + case 'misstags': + $misstags = get_misstags($dbhandle, $lang); + $num = count($misstags); + if (!$num) { + echo 'No misstags info'; + } + else { + echo '<table border="0" cellpadding="3" cellspacing="1" style="text-align:center">'; + echo '<tr><th rowspan="2">Files without Revision-comment ('.$num.' files):</th><th colspan="3">Sizes in kB</th></tr>'; + echo '<tr><th>en</th><th>'.$lang.'</th><th>diff</th></</tr>'; + + $last_dir = false; + + foreach ($misstags as $row) { + if (!$last_dir || $last_dir != $row['dir']) { + echo '<tr><th colspan="4">'.$row['dir'].'</th></tr>'; + $last_dir = $row['dir']; + } + echo '<tr><td>'.$row['name'].'</td><td>'.$row['en_size'].'</td><td>'.$row['trans_size'].'</td><td>'.(intval($row['en_size'] - $row['trans_size'])).'</td></tr>'; + } + echo '</table>'; + } + echo gen_date($DBLANG); + break; + + + case 'filesummary': + $file_types = array( + array (REV_UPTODATE, 'Up to date files'), + array (REV_OLD, 'Old files'), + array (REV_CRITICAL, 'Critical files'), + array (REV_WIP, 'Work in progress'), + array (REV_NOREV, 'Files without revision number'), + array (REV_NOTAG, 'Files without revision tag'), + array (REV_NOTRANS, 'Files available for translation') + ); + + $file_summary_array = array( + REV_UPTODATE => array(0,0), + REV_NOREV => array(0,0), + REV_CRITICAL => array(0,0), + REV_OLD => array(0,0), + REV_NOTAG => array(0,0), + REV_NOTRANS => array(0,0), + REV_CREDIT => array(0,0), + REV_WIP => array(0,0) + ); + + $file_summary_array[REV_WIP] = get_stats_wip($dbhandle, $lang); + $file_summary_array[REV_CRITICAL] = get_stats_critical($dbhandle, $lang); + $file_summary_array[REV_UPTODATE] = get_stats_uptodate($dbhandle, $lang); + $file_summary_array[REV_OLD] = get_stats_old($dbhandle, $lang); + $file_summary_array[REV_NOTAG] = get_stats_notag($dbhandle, $lang); + $file_summary_array[REV_NOTRANS] = get_stats_notrans($dbhandle, $lang); + + echo '<table border="0" cellpadding="4" cellspacing="1" style="text-align:center;">'; + echo '<tr><th>File status type</th><th>Number of files</th><th>Percent of files</th><th>Size of files (kB)</th><th>Percent of size</th></tr>'; + + $percent = array(0, 0); + + foreach($file_summary_array as $t => $a) { + $percent[0] += $a[0]; + $percent[1] += $a[1]; + } + + foreach ($file_types as $num => $type) { + $tmp_num_percent_0 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][0] * 100 / $percent[0], 2 ); + $tmp_num_percent_1 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][1] * 100 / $percent[1], 2); + + echo '<tr>'; + echo '<td>'.$type[1].'</td>'; + echo '<td>'.$file_summary_array[$type[0]][0].'</td>'; + echo '<td>'.$tmp_num_percent_0.'%</td>'; + echo '<td>'.$file_summary_array[$type[0]][1].'</td>'; + echo '<td>'.$tmp_num_percent_1.'%</td>'; + echo '</tr>'; + } + + echo '<tr><th>Files total</th><th>'.$percent[0].'</th><th>100%</th><th>'.$percent[1].'</th><th>100%</th></tr>'; + echo '</table>'; + echo gen_date($DBLANG); + break; -default : -echo '<p>' . get_description($dbhandle, $LANG) . '</p>'; -break; - } + + case 'files' : + // we need a dir to browse + $dirs = get_dirs($dbhandle, $lang); + $users = get_translators($dbhandle, $lang); + + if (empty($dirs)) { + echo '<p>No files</p>'; + } + else { + echo '<p>Choose a directory:</p>'; + echo '<form method="get" action="revcheck.php?p=files&lang='.$lang.'"><p><select name="dir">'; + foreach ($dirs as $id => $name) { + if (isset($_GET['dir']) && $_GET['dir'] == $id) { + $selected = ' selected="selected"'; + } + else { + $selected = ''; + } + echo '<option value="'.$id.'"'.$selected.'>'.$name.'</option>'; + } + echo '</select><input type="hidden" name="p" value="files"><input type="submit" value="See outdated files"></p></form>'; + + echo '<p>Or choose a translator:</p>'; + echo '<form method="get" action="revcheck.php?p=files&lang='.$lang.'"><p><select name="user">'; + foreach ($users as $id => $user) { + if (isset($_GET['user']) && $_GET['user'] == $id) { + $selected = ' selected="selected"'; + } + else { + $selected = ''; + } + echo '<option value="'.$id.'"'.$selected.'>'.$id.'</option>'; + } + echo '</select><input type="hidden" name="p" value="files"><input type="submit" value="See outdated files"></p></form>'; + } + + if (!empty($dirs) && (isset($_GET['dir']) || isset($_GET['user']))) { + if (isset($_GET['user'])) { + $outdated = get_outdated_translator_files($dbhandle, $lang, $_GET['user']); + } + else { + $outdated = get_outdated_files($dbhandle, $lang, $_GET['dir']); + } + if (empty($outdated)) { + echo 'No files info'; + } + else { + echo <<<END_OF_MULTILINE + <table border="0" cellpadding="4" cellspacing="1" style="text-align:center"> + <tr> + <th rowspan="2">Translated file</th> + <th colspan="2">Revision</th> + <th colspan="3">Size in kB</th> + <th colspan="3">Age in days</th> + <th rowspan="2">Maintainer</th> + <th rowspan="2">Status</th> + </tr> + <tr> + <th>en</th> + <th>$lang</th> + <th>en</th> + <th>$lan</th> + <th>diff</th> + <th>en</th> + <th>$lang</th> + <th>diff</th> + </tr> + <tr><th colspan="12">{$outdated[0]['name']}</th></tr> +END_OF_MULTILINE; + $last_dir = false; + $prev_name = $outdated[0]['name']; + + foreach ($outdated as $r) { + if ($r['name'] != $prev_name) { + echo '<tr><th colspan="12">'.$r['name'].'</th></tr>'; + $prev_name = $r['name']; + } + $r['en_date'] = intval((time() - $r['en_date']) / 86400); + $r['trans_date'] = intval((time() - $r['trans_date']) / 86400); + // Make decision on file category by revision, date and size + $rev_diff = intval($r['en_rev']) - intval($r['trans_rev']); + $size_diff = intval($r['en_size']) - intval($r['trans_size']); + $date_diff = $r['en_date'] - $r['trans_date']; + if ($r['trans_rev'] === 'n/a') { + $status_mark = REV_NOREV; + } + elseif ($rev_diff > 0 || $size_diff >= ALERT_SIZE || $date_diff <= ALERT_DATE) { + $status_mark = REV_CRITICAL; + } + else { + // We need a value here for the CSS, default to 'old' + $status_mark = REV_OLD; + } + + // Make the maintainer a link, if we have that maintainer in the list + if ($r['maintainer'] && $r["maintainer"] != 'nobody') { + $r["maintainer"] = '<a href="?p=translators#maint-' . $r['maintainer'] . '">' . $r["maintainer"] . '</a>'; + } + + // If we have a 'numeric' revision diff and it is not zero, + // make a link to the SVN repository's diff script + if ($r['trans_rev'] !== 'n/a') { + $r['short_name'] = '<a href="http://svn.php.net/viewvc/' . + $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . + "?r1=" . $r["trans_rev"] . + "&r2=" . $r["en_rev"] . + '&view=patch">' . $r['file'] . '</a>'; + + // Add a [NoWS] link + $r['short_name'] .= ' <a href="http://svn.php.net/viewvc/' . + $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . + '?r1=' . $r['trans_rev'] . + '&r2=' . $r['en_rev'] . + '">[NoWS]</a>'; + } + else { + $r['short_name'] = $r['file']; + } + + // Write out the line for the current file (get file name shorter) + echo '<tr>'. + "<td>{$r['short_name']}</td>". + "<td>{$r['en_rev']}</td>" . + "<td>{$r['trans_rev']}</td>" . + "<td> {$r['en_size']}</td>" . + "<td> {$r['trans_size']}</td>" . + "<td align=\"right\"><strong>" . $size_diff . "</strong></td>" . + "<td> {$r['en_date']}</td>" . + "<td> {$r['trans_date']}</td>" . + "<td align=\"right\"><strong>" . $date_diff . "</strong></td>" . + "<td> {$r['maintainer']}</td>" . + "<td> {$r['status']}</td></tr>\n"; + + } + echo '</table>'; + } + } + echo gen_date($DBLANG); + break; + + case 'graph': + $path = "images/revcheck/info_revcheck_php_$lang.png"; + if (is_readable($path)) { + echo '<img src="'.$path.'" alt="info">'; + echo gen_date($DBLANG); + } + else { + echo "<p>Can't find graph.</p>"; + } + break; + + default: + if ($lang == 'en') { + echo '<img src="images/revcheck/info_revcheck_php_all_lang.png" alt="Info" class="chart">'; + echo '<p>This is all what we can show for original manual. To get more tools, please select translation language.</p>'; + $sidebar = nav_languages(); + site_footer($sidebar); + } + else { + echo '<p>Please choose a specified tool from the right side.</p>'; + } + echo gen_date($DBLANG); + break; } -echo site_footer(); \ No newline at end of file +if ($lang != 'en') { + $sidebar = nav_tools($lang); + site_footer($sidebar); +} \ No newline at end of file
diff --git a/include/lib_revcheck.inc.php b/include/lib_revcheck.inc.php index 8e00965..e54bfa4 100644 --- a/include/lib_revcheck.inc.php +++ b/include/lib_revcheck.inc.php @@ -33,8 +33,6 @@ define("REV_NOTRANS", 6); // file without translation define("REV_CREDIT", 7); // only used in translators list define("REV_WIP", 8); // only used in translators list - - // Return an array of directory containing outdated files function get_dirs($idx, $lang) { @@ -208,11 +206,10 @@ function revcheck_available_languages($idx) // Return en integer function get_nb_EN_files($idx) { - $sql = "select COUNT(*) as total FROM files WHERE lang = 'en'"; + $sql = "SELECT COUNT(*) AS total FROM files WHERE lang = 'en'"; $res = sqlite_query($idx, $sql); $row = sqlite_fetch_array($res, SQLITE_ASSOC); - $files_EN = $row['total']; - return $files_EN; + return $row['total']; } function get_missfiles($idx, $lang) @@ -279,12 +276,21 @@ function get_oldfiles($idx, $lang) return $tmp; } -function get_description($idx, $lang) +function get_misstags($idx, $lang) { - $sql = 'SELECT intro FROM description WHERE lang = "' . $lang . '";'; + $sql = 'SELECT + d.name AS dir, b.size AS en_size, a.size AS trans_size, a.name AS name + FROM files a, dirs d + LEFT JOIN files b ON a.dir = b.dir AND a.name = b.name + WHERE a.lang="'.$lang.'" AND b.lang="en" AND a.revision IS NULL + AND a.size IS NOT NULL AND a.dir = d.id'; + $result = sqlite_query($idx, $sql); - $row = sqlite_fetch_array($result, SQLITE_ASSOC); - return $row['intro']; + while($row = sqlite_fetch_array($result, SQLITE_ASSOC)) { + $tmp[] = $row; + } + + return $tmp; } // Return an integer @@ -698,4 +704,9 @@ function get_stats_notag($idx, $lang) $r = sqlite_fetch_array($result, SQLITE_ASSOC); $result = array($r['total'], $r['size']); return $result; +} + +function gen_date($file) +{ + return '<small>Generated: '.date('d M Y H:i:s', filemtime($file)).'</small>'; } \ No newline at end of file diff --git a/www/revcheck.php b/www/revcheck.php index 833533d..f22d932 100644 --- a/www/revcheck.php +++ b/www/revcheck.php @@ -2,150 +2,63 @@ include '../include/init.inc.php'; include '../include/lib_revcheck.inc.php'; -$LANG = LANGC; -$language = $_GET['lang']; -if (in_array($language, array_keys($LANGUAGES))) { - $language = 'en'; +if (isset($_GET['lang']) && in_array($_GET['lang'], array_keys($LANGUAGES))) { + $lang = $_GET['lang']; +} +else { + $lang = 'en'; +} + +$lang_name = $LANGUAGES[$lang]; + +if (isset($_GET['p'])) { + $tool = $_GET['p']; } $DBLANG = SQLITE_DIR . 'rev.php.sqlite'; -if (LANGC == 'en' ||LANGC == 'all') { - if ($dbhandle = @sqlite_open($DBLANG)) { - $langs = revcheck_available_languages($dbhandle); - if(!$langs) { - echo site_header('docweb.common.header.revcheck'); - ?> - <div class="ColoredDiv"> - <h2 class="c">Status of the translated PHP Manual</h2> - <p class="c" style="font-size:12px;"><span class="Flag"> - <?php - if (LANGC != 'all') { - echo '<img src="/images/flags/' . LANGC .'.png" alt="'. LANGD . '" title="' . LANGD . '" />'; - } ?></span> Language: <?php echo LANGD; ?> : This documentation don't exist yet.<br /> - </p> - </div> - <?php - echo site_footer(); - die(); - } else { - echo site_header('docweb.common.header.revcheck'); - echo " - <p class=\"c\"> - <img src=\"/images/revcheck/info_revcheck_php_all_lang.png\" alt=\"Info\" /> - </p>"; - echo site_footer(); - die(); - } - } else { - echo site_header('docweb.common.header.revcheck'); - echo "Couldn't connect to the revcheck database"; - echo site_footer(); - die(); + +// Check if db connection can be established and if revcheck for requested lang exists +if ($dbhandle = sqlite_open($DBLANG)) { + $sql = "SELECT charset FROM description WHERE lang = '$lang'"; + if ($lang != 'en' && (!($res = sqlite_query($dbhandle, $sql)) || !sqlite_num_rows($res))) { + site_header(); + echo "<p>This revision check doesn't exist yet.</p>"; + site_footer(); + die; } } -$sql = "SELECT charset FROM description WHERE lang='" . LANGC . "';"; -if (!($dbhandle = @sqlite_open($DBLANG)) || !($res = @sqlite_query($dbhandle, $sql)) || !sqlite_num_rows($res)) -{ - // if there's no description, there's no documentation - echo site_header('docweb.common.header.revcheck'); -?> - <div class="ColoredDiv"> - <h2 class="c">Status of the translated PHP Manual</h2> - <p class="c" style="font-size:12px;"><span class="Flag"> - <?php - if (LANGC != 'all') { - echo '<img src="/images/flags/' . LANGC .'.png" alt="'. LANGD . '" title="' . LANGD . '" />'; - } ?></span> Language: <?php echo LANGD; ?><br /> - </p> - </div> - <blockquote> - This revision check don't exist yet. - </blockquote> -<?php -echo site_footer(); -die; +else { + site_header(); + echo "<p>Database connection couldn't be established</p>"; + site_footer(); + die; } -$charset = sqlite_fetch_single($res); -define('ENCODING', $charset); -sqlite_close($dbhandle); -echo site_header('docweb.common.header.revcheck'); -if (isset($_GET['p'])) { - $PART = $_GET['p']; -} else { - $PART = 'start'; -} - -// Colors used to mark files by status (colors for the above types) -$CSS = array( -REV_UPTODATE => "act", -REV_NOREV => "norev", -REV_CRITICAL => "crit", -REV_OLD => "old", -REV_NOTAG => "wip", -REV_NOTRANS => "wip", -REV_CREDIT => "wip", -REV_WIP => "wip", -); - - -$file_types = array( -array (REV_UPTODATE, "Up to date files"), -array (REV_OLD, "Old files"), -array (REV_CRITICAL, "Critical files"), -array (REV_WIP, "Work in progress"), -array (REV_NOREV, "Files without revision number"), -array (REV_NOTAG, "Files without revision tag"), -array (REV_NOTRANS, "Files available for translation") -); - -?> - -<div class="ColoredDiv"> - <h2 class="c">Status of the translated PHP Manual</h2> - <p class="c" style="font-size:12px;"> - Generated: <?php echo date("r", filemtime($DBLANG)); ?> / <span class="Flag"><img src="/images/flags/<?php echo LANGC; ?>.png" alt="<?php echo LANGD; ?>" title="<?php echo LANGD; ?>" /></span> Language: <?php echo LANGD; ?><br /> - </p> -</div> - <ul> - <li<?php echo ($PART == 'intro' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=intro">Introduction</a>'; ?></li> - <li<?php echo ($PART == 'translators' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=translators">Translators</a>'; ?></li> - <li<?php echo ($PART == 'filesummary' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=filesummary">File summary by type</a>'; ?></li> - <li<?php echo ($PART == 'files' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=files">Files</a>'; ?></li> - <li<?php echo ($PART == 'misstags' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=misstags">Missing revision numbers</a>'; ?></li> - <li<?php echo ($PART == 'missfiles' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=missfiles">Untranslated files</a>'; ?></li> - <li<?php echo ($PART == 'oldfiles' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=oldfiles">Not in EN tree</a>'; ?></li> - <li<?php echo ($PART == 'graph' ) ? ' class="liSelected"' : ''; ?>><a href="<?php echo BASE_URL . '/revcheck.php?p=graph">Graph</a>'; ?></li> - </ul> -<?php +site_header(true); +switch($tool) { + case 'translators': + $translators = get_translators($dbhandle, $lang); -if ($dbhandle = sqlite_open($DBLANG)) { - switch($PART) { - case 'translators' : - - $translators = get_translators($dbhandle, $LANG); - - $uptodate = translator_get_uptodate($dbhandle, $LANG); - $old = translator_get_old($dbhandle, $LANG); - $critical = translator_get_critical($dbhandle, $LANG); - $wip = translator_get_wip($dbhandle, $LANG); - - foreach($translators as $nick =>$data) { - $files_w[$nick] = array('uptodate' => '', 'old' =>'', 'critical' => '', 'norev' => '', 'wip' => ''); - $files_w[$nick]['uptodate'] = isset($uptodate[$nick]) ? $uptodate[$nick] : ''; - $files_w[$nick]['wip'] = isset($wip[$nick]) ? $wip[$nick] : ''; - $files_w[$nick]['old'] = isset($old[$nick]) ? $old[$nick] : ''; - $files_w[$nick]['critical'] = isset($critical[$nick]) ? $critical[$nick] : ''; - } - - echo '<a name="translators"></a>'; - if (empty($translators)) { - echo 'No translators info'; - } else { - echo <<<TRANSLATORS_HEAD -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="820" border="0" cellpadding="4" cellspacing="1" class="Tc"> -<tr class="blue"> + if (empty($translators)) { + echo '<p>No translators info.</p>'; + } + else { + $uptodate = translator_get_uptodate($dbhandle, $lang); + $old = translator_get_old($dbhandle, $lang); + $critical = translator_get_critical($dbhandle, $lang); + $wip = translator_get_wip($dbhandle, $lang); + + foreach($translators as $nick =>$data) { + $files_w[$nick] = array('uptodate' => '', 'old' =>'', 'critical' => '', 'norev' => '', 'wip' => ''); + $files_w[$nick]['uptodate'] = isset($uptodate[$nick]) ? $uptodate[$nick] : ''; + $files_w[$nick]['wip'] = isset($wip[$nick]) ? $wip[$nick] : ''; + $files_w[$nick]['old'] = isset($old[$nick]) ? $old[$nick] : ''; + $files_w[$nick]['critical'] = isset($critical[$nick]) ? $critical[$nick] : ''; + } + + echo <<<TRANSLATORS_HEAD +<table border="0" cellpadding="4" cellspacing="1"> +<tr> <th rowspan="2">Name</th> <th rowspan="2">Contact email</th> <th rowspan="2">Nick</th> @@ -153,371 +66,344 @@ if ($dbhandle = sqlite_open($DBLANG)) { <th colspan="7">Files maintained</th> </tr> <tr> -<th class="wip" style="color:#000000">cre-<br />dits</th> -<th class="act" style="color:#000000">upto-<br />date</th> -<th class="old" style="color:#000000">old</th> -<th class="crit" style="color:#000000">cri-<br />tical</th> -<th class="norev" style="color:#000000">no<br />rev</th> -<th class="wip" style="color:#000000">wip</th> -<th class="blue">sum</th> +<th>upto-<br>date</th> +<th>old</th> +<th>cri-<br>tical</th> +<th>wip</th> +<th>sum</th> </tr> TRANSLATORS_HEAD; - $class = 'old'; - - foreach ($translators as $nick => $data) { - if ($data['svn'] == 'yes') { - $svnu = 'x'; - $col = 'old'; - } else { - $svnu = ' '; - $col = 'wip'; - } - echo '<tr class="', $col, '">' . "\n"; - echo '<td><a name="maint-'.$nick.'" href="'.BASE_URL. '/revcheck.php?p=files&user='.$nick. '">'. $data['name'] . '</a></td>', "\n"; - echo '<td>', $data['mail'], '</td>', "\n"; - echo '<td>', $nick, '</td>', "\n"; - echo '<td class="c">', $svnu, '</td>', "\n"; - echo '<td class="c"> </td>' , - '<td class="c">' , @$files_w[$nick]['uptodate'], "</td>" , - '<td class="c">' , @$files_w[$nick]['old'] , "</td>" , - '<td class="c">' , $files_w[$nick]['critical'], "</td>" , - '<td class="c"> </td>' , - '<td class="c">', $files_w[$nick]['wip'], '</td>' , - '<th class="blue">' , @array_sum($files_w[$nick]), "</th>" , "\n"; - echo '</tr>', "\n"; - } - echo '</table>'."\n</div>"; - } - break; - - case 'missfiles' : - $missfiles = get_missfiles($dbhandle, $LANG); - if (!$missfiles) { - echo 'No missfile info'; - } else { - $num = count($missfiles); - echo <<<MISSTAGS_HEAD -<p> </p> -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="400" border="0" cellpadding="3" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="1">Available for translation ($num files):</th> - <th colspan="1">kB</th> - </tr> - -MISSTAGS_HEAD; - - $last_dir = false; - $total_size = 0; - foreach ($missfiles as $miss) { - if (!$last_dir || $last_dir != $miss['dir']) { - echo '<tr class="blue"><th colspan="2">' . $miss['dir'] . '</th></tr>'; - $last_dir = $miss['dir']; - } - echo '<tr class="wip"><td>', $miss['file'], '</td><td class="r">', $miss['size'], '</td></tr>'; - $total_size += $miss['size']; - // flush every 200 kbytes - if (($total_size % 200) == 0) { - flush(); - } - } - echo '<tr class="blue"> - <th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th> - </tr>'; - echo '</table></div>'; - } - break; - - case 'oldfiles' : - $oldfiles = get_oldfiles($dbhandle, $LANG); - if (!$oldfiles) { - echo 'No old file info'; - } else { - $num = count($oldfiles); - echo <<<OLDTAGS_HEAD -<p> </p> -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="400" border="0" cellpadding="3" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="1">Not in EN tree ($num files):</th> - <th colspan="1">kB</th> - </tr> - -OLDTAGS_HEAD; - - $last_dir = false; - $total_size = 0; - foreach ($oldfiles as $old) { - if (!$last_dir || $last_dir != $old['dir']) { - echo '<tr class="blue"><th colspan="2">' . $old['dir'] . '</th></tr>'; - $last_dir = $old['dir']; - } - echo '<tr class="wip"><td>', $old['file'], '</td><td class="r">', $old['size'], '</td></tr>'; - $total_size += $old['size']; - // flush every 200 kbytes - if (($total_size % 200) == 0) { - flush(); - } - } - echo '<tr class="blue"> - <th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th> - </tr>'; - echo '</table></div>'; - } - break; - - case 'misstags' : - $sql = 'select - d.name as dir, b.size as en_size, a.size as trans_size, a.name as name - from files a, dirs d - left join files b on a.dir = b.dir and a.name = b.name - where a.lang="' . $LANG .'" and b.lang="en" and a.revision is NULL - and a.size is not NULL and a.dir = d.id'; - - $result = sqlite_query($dbhandle, $sql); - $num = sqlite_num_rows($result); - if ($num == 0) { - echo 'No misstags info'; - } else { - echo <<<MISSTAGS_HEAD -<p> </p> -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="400" border="0" cellpadding="3" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="2">Files without Revision-comment ($num files):</th> - <th colspan="3">Sizes in kB</th> - </tr> - <tr class="blue"> - <th>en</th> - <th>$LANG</th> - <th>diff</th> - </tr> - -MISSTAGS_HEAD; - - $last_dir = false; - - while($row = sqlite_fetch_array($result, SQLITE_ASSOC)) { - if (!$last_dir || $last_dir != $row['dir']) { - echo '<tr class="blue"><th colspan="4">' . $row['dir'] . '</th></tr>'; - $last_dir = $row['dir']; - } - echo '<tr class="wip"><td>', $row['name'], '</td><td class="r">', $row['en_size'], '</td><td class="r">', $row['trans_size'], '</td><td class="r">', (intval($row['en_size'] - $row['trans_size'])) ,'</td></tr>'; - } - echo '</table></div>'; - } - break; - - - case 'filesummary' : - - $file_summary_array = array( - REV_UPTODATE => array(0,0), - REV_NOREV => array(0,0), - REV_CRITICAL => array(0,0), - REV_OLD => array(0,0), - REV_NOTAG => array(0,0), - REV_NOTRANS => array(0,0), - REV_CREDIT => array(0,0), - REV_WIP => array(0,0) - ); - - - $file_summary_array[REV_WIP] = get_stats_wip($dbhandle, $LANG); - $file_summary_array[REV_CRITICAL] = get_stats_critical($dbhandle, $LANG); - $file_summary_array[REV_UPTODATE] = get_stats_uptodate($dbhandle, LANGC); - $file_summary_array[REV_OLD] = get_stats_old($dbhandle, $LANG); - $file_summary_array[REV_NOTAG] = get_stats_notag($dbhandle, $LANG); - $file_summary_array[REV_NOTRANS] = get_stats_notrans($dbhandle, $LANG); - - echo <<<END_OF_MULTILINE -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="450" border="0" cellpadding="4" cellspacing="1" class="Tc"> -<tr class="blue"> -<th>File status type</th> -<th>Number of files</th> -<th>Percent of files</th> -<th>Size of files (kB)</th> -<th>Percent of size</th> -</tr> -END_OF_MULTILINE; - $percent = array(0, 0); - - foreach($file_summary_array as $t => $a) { - $percent[0] += $a[0]; - $percent[1] += $a[1]; - } - - foreach ($file_types as $num => $type) { - - $tmp_num_percent_0 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][0] * 100 / $percent[0], 2 ); - $tmp_num_percent_1 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][1] * 100 / $percent[1], 2); - - - echo "<tr class=\"".$CSS[$type[0]]."\">". - "<td>".$type[1]."</td>". - "<td class=\"c\">" . $file_summary_array[$type[0]][0] . "</td>". - "<td class=\"c\">" . $tmp_num_percent_0 . "%</td>". - "<td class=\"c\">".$file_summary_array[$type[0]][1]."</td>". - "<td class=\"c\">" . $tmp_num_percent_1 . "%</td></tr>\n"; - } - - echo "<tr class=\"blue\"><th>Files total</th><th>$percent[0]</th><th>100%</th><th>" . $percent[1] . "</th><th>100%</th></tr>\n". - "</table></div>\n<p> </p>\n"; - - break; - - - case 'files' : - // we need a dir to browse - $dirs = get_dirs($dbhandle, $LANG); - $users = get_translators($dbhandle, $LANG); - - if (empty($dirs)) { - echo 'No files'; - } else { - echo '<p>Choose a directory :</p>'; - echo '<form method="get" action="' . BASE_URL . '/revcheck.php?p=files"><p><select name="dir">'; - foreach ($dirs as $id => $name) { - if (isset($_GET['dir']) && $_GET['dir'] == $id) { - $selected = ' selected="selected"'; - } else { - $selected = ''; - } - echo '<option value="' . $id . '"' . $selected . '>' . $name . '</option>' . "\n"; - } - echo '</select><input type="hidden" name="p" value="files" /><input type="submit" value="See outdated files" /></p></form>'; - - echo '<p>Or choose a translator :</p>'; - echo '<form method="get" action="' . BASE_URL . '/revcheck.php?p=files"><p><select name="user">'; - foreach ($users as $id => $user) { - if (isset($_GET['user']) && $_GET['user'] == $id) { - $selected = ' selected="selected"'; - } else { - $selected = ''; - } - echo '<option value="' . $id . '"' . $selected . '>' . $id . '</option>' . "\n"; - } - echo '</select><input type="hidden" name="p" value="files" /><input type="submit" value="See outdated files" /></p></form>'; - } - - if (!empty($dirs) && (isset($_GET['dir']) || isset($_GET['user']))) { - if (isset($_GET['user'])) { - $outdated = get_outdated_translator_files($dbhandle, $LANG, $_GET['user']); - } else { - $outdated = get_outdated_files($dbhandle, $LANG, $_GET['dir']); - } - if (empty($outdated)) { - echo 'No files info'; - } else { - echo <<<END_OF_MULTILINE -<div style="text-align:center"> <!-- Compatibility with old IE --> -<table width="820" border="0" cellpadding="4" cellspacing="1" class="Tc"> - <tr class="blue"> - <th rowspan="2">Translated file</th> - <th colspan="2">Revision</th> - <th colspan="3">Size in kB</th> - <th colspan="3">Age in days</th> - <th rowspan="2">Maintainer</th> - <th rowspan="2">Status</th> - </tr> - <tr class="blue"> - <th>en</th> - <th>$LANG</th> - <th>en</th> - <th>$LANG</th> - <th>diff</th> - <th>en</th> - <th>$LANG</th> - <th>diff</th> - </tr> - <tr class="blue"><th colspan="12">{$outdated[0]['name']}</th></tr> + foreach ($translators as $nick => $data) { + $svn = ($data['svn'] == 'yes') ? '✓' : ' '; + + echo '<tr>', + '<td><a href="/revcheck.php?p=files&user='.$nick.'">'.$data['name'].'</a></td>', + '<td>', $data['mail'], '</td>', + '<td>', $nick, '</td>', + '<td>', $svn, '</td>', + '<td>' , @$files_w[$nick]['uptodate'], '</td>', + '<td>' , @$files_w[$nick]['old'], '</td>', + '<td>' , $files_w[$nick]['critical'], '</td>', + '<td>', $files_w[$nick]['wip'], '</td>', + '<th>' , @array_sum($files_w[$nick]), '</th>', + '</tr>'; + } + echo '</table>'; + } + echo gen_date($DBLANG); + break; -END_OF_MULTILINE; - $last_dir = false; - $prev_name = $outdated[0]['name']; - - foreach ($outdated as $r) { - if ($r['name'] != $prev_name) { - echo '<tr class="blue"><th colspan="12">'.$r['name'].'</th></tr>'; - $prev_name = $r['name']; - } - $r['en_date'] = intval((time() - $r['en_date']) / 86400); - $r['trans_date'] = intval((time() - $r['trans_date']) / 86400); - // Make decision on file category by revision, date and size - $rev_diff = intval($r['en_rev']) - intval($r['trans_rev']); - $size_diff = intval($r['en_size']) - intval($r['trans_size']); - $date_diff = $r['en_date'] - $r['trans_date']; - if ($r['trans_rev'] === 'n/a') { - $status_mark = REV_NOREV; - } else if ($rev_diff > 0 || $size_diff >= ALERT_SIZE || $date_diff <= ALERT_DATE) { - $status_mark = REV_CRITICAL; - } else { - // We need a value here for the CSS, default to 'old' - $status_mark = REV_OLD; - } - - // Make the maintainer a link, if we have that maintainer in the list - if ($r['maintainer'] && $r["maintainer"] != 'nobody') { - $r["maintainer"] = '<a href="?p=translators#maint-' . $r['maintainer'] . '">' . $r["maintainer"] . '</a>'; - } - - // If we have a 'numeric' revision diff and it is not zero, - // make a link to the SVN repository's diff script - if ($r['trans_rev'] !== 'n/a') { - $r['short_name'] = '<a href="http://svn.php.net/viewvc/' . - $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . - "?r1=" . $r["trans_rev"] . - "&r2=" . $r["en_rev"] . - '&view=patch">' . $r['file'] . '</a>'; - - // Add a [NoWS] link - $r['short_name'] .= ' <a href="http://svn.php.net/viewvc/' . - $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . - '?r1=' . $r['trans_rev'] . - '&r2=' . $r['en_rev'] . - '">[NoWS]</a>'; - } else { - $r['short_name'] = $r['file']; - } - - - - // Write out the line for the current file (get file name shorter) - echo "<tr class=\"{$CSS[$status_mark]}\">". - "<td>{$r['short_name']}</td>". - "<td>{$r['en_rev']}</td>" . - "<td>{$r['trans_rev']}</td>" . - "<td> {$r['en_size']}</td>" . - "<td> {$r['trans_size']}</td>" . - "<td align=\"right\"><strong>" . $size_diff . "</strong></td>" . - "<td> {$r['en_date']}</td>" . - "<td> {$r['trans_date']}</td>" . - "<td align=\"right\"><strong>" . $date_diff . "</strong></td>" . - "<td> {$r['maintainer']}</td>" . - "<td> {$r['status']}</td></tr>\n"; - - } - echo '</table></div>'; -} -} -break; - -case "graph" : -if (is_readable("images/revcheck/info_revcheck_php_" . LANGC . ".png")) { - echo "<p class=\"c\"> - <img src=\"/images/revcheck/info_revcheck_php_" . LANGC . ".png\" alt=\"Info\" /> - </p>"; -} else { - echo 'Can\'t find graph'; -} -break; + case 'missfiles': + $missfiles = get_missfiles($dbhandle, $lang); + if (!$missfiles) { + echo '<p>No missfile info.</p>'; + } + else { + $num = count($missfiles); + echo '<table border="0" cellpadding="3" cellspacing="1" style="text-align:center">'; + echo '<tr><th rowspan="1">Available for translation ('.$num.' files):</th><th colspan="1">kB</th></tr>'; + + $last_dir = false; + $total_size = 0; + foreach ($missfiles as $miss) { + if (!$last_dir || $last_dir != $miss['dir']) { + echo '<tr><th colspan="2">'.$miss['dir'].'</th></tr>'; + $last_dir = $miss['dir']; + } + echo '<tr><td>'.$miss['file'].'</td><td>'.$miss['size'].'</td></tr>'; + $total_size += $miss['size']; + // flush every 200 kbytes + if (($total_size % 200) == 0) { + flush(); + } + } + echo '<tr><th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th></tr>'; + echo '</table>'; + } + echo gen_date($DBLANG); + break; + + case 'oldfiles': + $oldfiles = get_oldfiles($dbhandle, $lang); + if (!$oldfiles) { + echo '<p>No old files info.</p>'; + } + else { + $num = count($oldfiles); + echo '<table width="400" border="0" cellpadding="3" cellspacing="1" style="text-align:center">'; + echo '<tr><th rowspan="1">Not in EN tree ('.$num.' files):</th><th colspan="1">kB</th></tr>'; + + $last_dir = false; + $total_size = 0; + foreach ($oldfiles as $old) { + if (!$last_dir || $last_dir != $old['dir']) { + echo '<tr><th colspan="2">'.$old['dir'].'</th></tr>'; + $last_dir = $old['dir']; + } + echo '<tr><td>', $old['file'], '</td><td class="r">'.$old['size'].'</td></tr>'; + $total_size += $old['size']; + // flush every 200 kbytes + if (($total_size % 200) == 0) { + flush(); + } + } + echo '<tr><th colspan="2">Total Size ('.$num.' files): '.$total_size.' kB</th></tr>'; + echo '</table>'; + } + echo gen_date($DBLANG); + break; + + case 'misstags': + $misstags = get_misstags($dbhandle, $lang); + $num = count($misstags); + if (!$num) { + echo 'No misstags info'; + } + else { + echo '<table border="0" cellpadding="3" cellspacing="1" style="text-align:center">'; + echo '<tr><th rowspan="2">Files without Revision-comment ('.$num.' files):</th><th colspan="3">Sizes in kB</th></tr>'; + echo '<tr><th>en</th><th>'.$lang.'</th><th>diff</th></</tr>'; + + $last_dir = false; + + foreach ($misstags as $row) { + if (!$last_dir || $last_dir != $row['dir']) { + echo '<tr><th colspan="4">'.$row['dir'].'</th></tr>'; + $last_dir = $row['dir']; + } + echo '<tr><td>'.$row['name'].'</td><td>'.$row['en_size'].'</td><td>'.$row['trans_size'].'</td><td>'.(intval($row['en_size'] - $row['trans_size'])).'</td></tr>'; + } + echo '</table>'; + } + echo gen_date($DBLANG); + break; + + + case 'filesummary': + $file_types = array( + array (REV_UPTODATE, 'Up to date files'), + array (REV_OLD, 'Old files'), + array (REV_CRITICAL, 'Critical files'), + array (REV_WIP, 'Work in progress'), + array (REV_NOREV, 'Files without revision number'), + array (REV_NOTAG, 'Files without revision tag'), + array (REV_NOTRANS, 'Files available for translation') + ); + + $file_summary_array = array( + REV_UPTODATE => array(0,0), + REV_NOREV => array(0,0), + REV_CRITICAL => array(0,0), + REV_OLD => array(0,0), + REV_NOTAG => array(0,0), + REV_NOTRANS => array(0,0), + REV_CREDIT => array(0,0), + REV_WIP => array(0,0) + ); + + $file_summary_array[REV_WIP] = get_stats_wip($dbhandle, $lang); + $file_summary_array[REV_CRITICAL] = get_stats_critical($dbhandle, $lang); + $file_summary_array[REV_UPTODATE] = get_stats_uptodate($dbhandle, $lang); + $file_summary_array[REV_OLD] = get_stats_old($dbhandle, $lang); + $file_summary_array[REV_NOTAG] = get_stats_notag($dbhandle, $lang); + $file_summary_array[REV_NOTRANS] = get_stats_notrans($dbhandle, $lang); + + echo '<table border="0" cellpadding="4" cellspacing="1" style="text-align:center;">'; + echo '<tr><th>File status type</th><th>Number of files</th><th>Percent of files</th><th>Size of files (kB)</th><th>Percent of size</th></tr>'; + + $percent = array(0, 0); + + foreach($file_summary_array as $t => $a) { + $percent[0] += $a[0]; + $percent[1] += $a[1]; + } + + foreach ($file_types as $num => $type) { + $tmp_num_percent_0 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][0] * 100 / $percent[0], 2 ); + $tmp_num_percent_1 = ($percent[0] == 0) ? 0 : number_format($file_summary_array[$type[0]][1] * 100 / $percent[1], 2); + + echo '<tr>'; + echo '<td>'.$type[1].'</td>'; + echo '<td>'.$file_summary_array[$type[0]][0].'</td>'; + echo '<td>'.$tmp_num_percent_0.'%</td>'; + echo '<td>'.$file_summary_array[$type[0]][1].'</td>'; + echo '<td>'.$tmp_num_percent_1.'%</td>'; + echo '</tr>'; + } + + echo '<tr><th>Files total</th><th>'.$percent[0].'</th><th>100%</th><th>'.$percent[1].'</th><th>100%</th></tr>'; + echo '</table>'; + echo gen_date($DBLANG); + break; -default : -echo '<p>' . get_description($dbhandle, $LANG) . '</p>'; -break; - } + + case 'files' : + // we need a dir to browse + $dirs = get_dirs($dbhandle, $lang); + $users = get_translators($dbhandle, $lang); + + if (empty($dirs)) { + echo '<p>No files</p>'; + } + else { + echo '<p>Choose a directory:</p>'; + echo '<form method="get" action="revcheck.php?p=files&lang='.$lang.'"><p><select name="dir">'; + foreach ($dirs as $id => $name) { + if (isset($_GET['dir']) && $_GET['dir'] == $id) { + $selected = ' selected="selected"'; + } + else { + $selected = ''; + } + echo '<option value="'.$id.'"'.$selected.'>'.$name.'</option>'; + } + echo '</select><input type="hidden" name="p" value="files"><input type="submit" value="See outdated files"></p></form>'; + + echo '<p>Or choose a translator:</p>'; + echo '<form method="get" action="revcheck.php?p=files&lang='.$lang.'"><p><select name="user">'; + foreach ($users as $id => $user) { + if (isset($_GET['user']) && $_GET['user'] == $id) { + $selected = ' selected="selected"'; + } + else { + $selected = ''; + } + echo '<option value="'.$id.'"'.$selected.'>'.$id.'</option>'; + } + echo '</select><input type="hidden" name="p" value="files"><input type="submit" value="See outdated files"></p></form>'; + } + + if (!empty($dirs) && (isset($_GET['dir']) || isset($_GET['user']))) { + if (isset($_GET['user'])) { + $outdated = get_outdated_translator_files($dbhandle, $lang, $_GET['user']); + } + else { + $outdated = get_outdated_files($dbhandle, $lang, $_GET['dir']); + } + if (empty($outdated)) { + echo 'No files info'; + } + else { + echo <<<END_OF_MULTILINE + <table border="0" cellpadding="4" cellspacing="1" style="text-align:center"> + <tr> + <th rowspan="2">Translated file</th> + <th colspan="2">Revision</th> + <th colspan="3">Size in kB</th> + <th colspan="3">Age in days</th> + <th rowspan="2">Maintainer</th> + <th rowspan="2">Status</th> + </tr> + <tr> + <th>en</th> + <th>$lang</th> + <th>en</th> + <th>$lan</th> + <th>diff</th> + <th>en</th> + <th>$lang</th> + <th>diff</th> + </tr> + <tr><th colspan="12">{$outdated[0]['name']}</th></tr> +END_OF_MULTILINE; + $last_dir = false; + $prev_name = $outdated[0]['name']; + + foreach ($outdated as $r) { + if ($r['name'] != $prev_name) { + echo '<tr><th colspan="12">'.$r['name'].'</th></tr>'; + $prev_name = $r['name']; + } + $r['en_date'] = intval((time() - $r['en_date']) / 86400); + $r['trans_date'] = intval((time() - $r['trans_date']) / 86400); + // Make decision on file category by revision, date and size + $rev_diff = intval($r['en_rev']) - intval($r['trans_rev']); + $size_diff = intval($r['en_size']) - intval($r['trans_size']); + $date_diff = $r['en_date'] - $r['trans_date']; + if ($r['trans_rev'] === 'n/a') { + $status_mark = REV_NOREV; + } + elseif ($rev_diff > 0 || $size_diff >= ALERT_SIZE || $date_diff <= ALERT_DATE) { + $status_mark = REV_CRITICAL; + } + else { + // We need a value here for the CSS, default to 'old' + $status_mark = REV_OLD; + } + + // Make the maintainer a link, if we have that maintainer in the list + if ($r['maintainer'] && $r["maintainer"] != 'nobody') { + $r["maintainer"] = '<a href="?p=translators#maint-' . $r['maintainer'] . '">' . $r["maintainer"] . '</a>'; + } + + // If we have a 'numeric' revision diff and it is not zero, + // make a link to the SVN repository's diff script + if ($r['trans_rev'] !== 'n/a') { + $r['short_name'] = '<a href="http://svn.php.net/viewvc/' . + $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . + "?r1=" . $r["trans_rev"] . + "&r2=" . $r["en_rev"] . + '&view=patch">' . $r['file'] . '</a>'; + + // Add a [NoWS] link + $r['short_name'] .= ' <a href="http://svn.php.net/viewvc/' . + $PROJECTS[$project][2] . '/trunk/' . $r['name'] . '/' . $r['file'] . + '?r1=' . $r['trans_rev'] . + '&r2=' . $r['en_rev'] . + '">[NoWS]</a>'; + } + else { + $r['short_name'] = $r['file']; + } + + // Write out the line for the current file (get file name shorter) + echo '<tr>'. + "<td>{$r['short_name']}</td>". + "<td>{$r['en_rev']}</td>" . + "<td>{$r['trans_rev']}</td>" . + "<td> {$r['en_size']}</td>" . + "<td> {$r['trans_size']}</td>" . + "<td align=\"right\"><strong>" . $size_diff . "</strong></td>" . + "<td> {$r['en_date']}</td>" . + "<td> {$r['trans_date']}</td>" . + "<td align=\"right\"><strong>" . $date_diff . "</strong></td>" . + "<td> {$r['maintainer']}</td>" . + "<td> {$r['status']}</td></tr>\n"; + + } + echo '</table>'; + } + } + echo gen_date($DBLANG); + break; + + case 'graph': + $path = "images/revcheck/info_revcheck_php_$lang.png"; + if (is_readable($path)) { + echo '<img src="'.$path.'" alt="info">'; + echo gen_date($DBLANG); + } + else { + echo "<p>Can't find graph.</p>"; + } + break; + + default: + if ($lang == 'en') { + echo '<img src="images/revcheck/info_revcheck_php_all_lang.png" alt="Info" class="chart">'; + echo '<p>This is all what we can show for original manual. To get more tools, please select translation language.</p>'; + $sidebar = nav_languages(); + site_footer($sidebar); + } + else { + echo '<p>Please choose a specified tool from the right side.</p>'; + } + echo gen_date($DBLANG); + break; } -echo site_footer(); \ No newline at end of file +if ($lang != 'en') { + $sidebar = nav_tools($lang); + site_footer($sidebar); +} \ No newline at end of file