| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | <?php | 
					
						
							|  |  |  |  | /* | 
					
						
							|  |  |  |  |   +----------------------------------------------------------------------+ | 
					
						
							| 
									
										
										
										
											2004-04-14 15:25:57 +00:00
										 |  |  |  |   | PHP Version 5                                                        | | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  |   +----------------------------------------------------------------------+ | 
					
						
							|  |  |  |  |   | Copyright (c) 1997-2004 The PHP Group                                | | 
					
						
							|  |  |  |  |   +----------------------------------------------------------------------+ | 
					
						
							|  |  |  |  |   | This source file is subject to version 3.0 of the PHP license,       | | 
					
						
							|  |  |  |  |   | that is bundled with this package in the file LICENSE, and is        | | 
					
						
							|  |  |  |  |   | available through the world-wide-web at the following url:           | | 
					
						
							|  |  |  |  |   | http://www.php.net/license/3_0.txt.                                  | | 
					
						
							|  |  |  |  |   | If you did not receive a copy of the PHP license and are unable to   | | 
					
						
							|  |  |  |  |   | obtain it through the world-wide-web, please send a note to          | | 
					
						
							|  |  |  |  |   | license@php.net so we can mail you a copy immediately.               | | 
					
						
							|  |  |  |  |   +----------------------------------------------------------------------+ | 
					
						
							|  |  |  |  |   | Authors:    Thomas Sch<EFBFBD>fbeck <tom@php.net>                           | | 
					
						
							|  |  |  |  |   |             Gabor Hojtsy <goba@php.net>                              | | 
					
						
							|  |  |  |  |   |             Mark Kronsbein <mk@php.net>                              | | 
					
						
							|  |  |  |  |   |             Jan Fabry <cheezy@php.net> | 
					
						
							|  |  |  |  |   +----------------------------------------------------------------------+ | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | if ($argc < 2 || $argc > 3) { | 
					
						
							|  |  |  |  | ?>
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Check the revision of translated files against | 
					
						
							|  |  |  |  | the actual english xml files, and print statistics | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   Usage: | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |   <?php echo $argv[0]; ?> <language-code> [<maintainer>] [><revcheck.html>]
 | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   <language-code> must be a valid language code used | 
					
						
							|  |  |  |  |   in the repository | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   If you specify <maintainer>, the script only checks | 
					
						
							|  |  |  |  |   the files maintained by the person you add here | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   If you specify ><revcheck.html>, the output is an html file. | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |   Read more about Revision comments and related | 
					
						
							|  |  |  |  |   funcionality in the PHP Documentation Howto. | 
					
						
							|  |  |  |  |     | 
					
						
							|  |  |  |  |   Authors: Thomas Sch<EFBFBD>fbeck <tom@php.net> | 
					
						
							|  |  |  |  |            Gabor Hojtsy <goba@php.net> | 
					
						
							|  |  |  |  |            Mark Kronsbein <mk@php.net>  | 
					
						
							|  |  |  |  |            Jan Fabry <cheezy@php.net> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <?php | 
					
						
							|  |  |  |  |   exit; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Long runtime
 | 
					
						
							|  |  |  |  | set_time_limit(0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-14 15:25:57 +00:00
										 |  |  |  | // disable E_NOTICE
 | 
					
						
							|  |  |  |  | error_reporting(E_ALL ^ E_NOTICE); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | // A file is criticaly "outdated' if
 | 
					
						
							|  |  |  |  | define("ALERT_REV",   10); // translation is 10 or more revisions behind the en one
 | 
					
						
							|  |  |  |  | define("ALERT_SIZE",   3); // translation is  3 or more kB smaller than the en one
 | 
					
						
							|  |  |  |  | define("ALERT_DATE", -30); // translation is 30 or more days older than the en one
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Revision marks used to flag files
 | 
					
						
							|  |  |  |  | define("REV_UPTODATE", 1); // actual file
 | 
					
						
							|  |  |  |  | define("REV_NOREV",    2); // file with revision comment without revision
 | 
					
						
							|  |  |  |  | define("REV_CRITICAL", 3); // criticaly old / small / outdated
 | 
					
						
							|  |  |  |  | define("REV_OLD",      4); // outdated file
 | 
					
						
							|  |  |  |  | define("REV_NOTAG",    5); // file without revision comment
 | 
					
						
							|  |  |  |  | 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
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // 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", | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Option for the link to cvs.php.net: normal: "&f=h"
 | 
					
						
							|  |  |  |  | // long diff: "&f=h&num=10", unified (text): "&f=u"
 | 
					
						
							| 
									
										
										
										
											2004-10-25 11:13:34 +00:00
										 |  |  |  | define("CVS_OPT", "&ty=u"); | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | // Initializing variables from parameters
 | 
					
						
							|  |  |  |  | $LANG = $argv[1]; | 
					
						
							|  |  |  |  | if ($argc == 3) { | 
					
						
							|  |  |  |  |     $MAINT = $argv[2]; | 
					
						
							|  |  |  |  | } else { | 
					
						
							|  |  |  |  |     $MAINT = ""; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Main directory of the PHP documentation (depends on the
 | 
					
						
							|  |  |  |  | // sapi used). We do need the trailing slash!
 | 
					
						
							|  |  |  |  | if ("cli" === php_sapi_name()) { | 
					
						
							|  |  |  |  | 	if (isset($PHPDOCDIR) && is_dir($PHPDOCDIR)) | 
					
						
							|  |  |  |  | 		$DOCDIR = $PHPDOCDIR."/"; | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 		$DOCDIR = "./"; | 
					
						
							|  |  |  |  | } else | 
					
						
							|  |  |  |  | 	$DOCDIR = "../"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Functions to get revision info and credits from a file
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Grabs the revision tag and stores credits from the file given
 | 
					
						
							|  |  |  |  | function get_tags($file, $val = "en-rev") | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     // Read the first 500 chars. The comment should be at
 | 
					
						
							|  |  |  |  |     // the begining of the file
 | 
					
						
							|  |  |  |  |     $fp = @fopen($file, "r") or die ("Unable to read $file."); | 
					
						
							|  |  |  |  |     $line = fread($fp, 500); | 
					
						
							|  |  |  |  |     fclose($fp); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Check for English CVS revision tag (. is for $ in the preg!),
 | 
					
						
							|  |  |  |  |     // Return if this was needed (it should be there)
 | 
					
						
							|  |  |  |  |     if ($val == "en-rev") { | 
					
						
							|  |  |  |  |         preg_match("/<!-- .Revision: \d+\.(\d+) . -->/", $line, $match); | 
					
						
							|  |  |  |  |         return $match[1]; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Handle credits (only if no maintainer is specified)
 | 
					
						
							|  |  |  |  |     if ($val == "\\S*") { | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |         global $files_by_maint; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Find credits info, let more credits then one,
 | 
					
						
							|  |  |  |  |         // using commas as list separator
 | 
					
						
							|  |  |  |  |         if (preg_match("'<!--\s*CREDITS:\s*(.+)\s*-->'U", $line, $match_credit)) { | 
					
						
							|  |  |  |  |            | 
					
						
							|  |  |  |  |             // Explode with commas a separators
 | 
					
						
							|  |  |  |  |             $credits = explode(",", $match_credit[1]); | 
					
						
							|  |  |  |  |            | 
					
						
							|  |  |  |  |             // Store all elements
 | 
					
						
							|  |  |  |  |             foreach ($credits as $num => $credit) { | 
					
						
							|  |  |  |  |                 $files_by_maint[trim($credit)][REV_CREDIT]++; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |            | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // No match before the preg
 | 
					
						
							|  |  |  |  |     $match = array(); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Check for the translations "revision tag"
 | 
					
						
							|  |  |  |  |     preg_match ("/<!--\s*EN-Revision:\s*\d+\.(\d+)\s*Maintainer:\s*(" | 
					
						
							|  |  |  |  |                 . $val . ")\s*Status:\s*(.+)\s*-->/U",  | 
					
						
							|  |  |  |  |                 $line, | 
					
						
							|  |  |  |  |                 $match | 
					
						
							|  |  |  |  |     ); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // The tag with revision number is not found so search
 | 
					
						
							|  |  |  |  |     // for n/a revision comment (comment where revision is not known)
 | 
					
						
							|  |  |  |  |     if (count($match) == 0) { | 
					
						
							|  |  |  |  |         preg_match ("'<!--\s*EN-Revision:\s*(n/a)\s*Maintainer:\s*(" | 
					
						
							|  |  |  |  |                     . $val . ")\s*Status:\s*(.+)\s*-->'U", | 
					
						
							|  |  |  |  |                     $line, | 
					
						
							|  |  |  |  |                     $match | 
					
						
							|  |  |  |  |         ); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Return with found revision info (number, maint, status)
 | 
					
						
							|  |  |  |  |     return $match; | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  | } // get_tags() function end
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Functions to check file status in translated directory, and store info
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Checks a file, and gather status info
 | 
					
						
							|  |  |  |  | function get_file_status($file) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     // The information is contained in these global arrays and vars
 | 
					
						
							|  |  |  |  |     global $DOCDIR, $LANG, $MAINT, $files_by_mark, $files_by_maint; | 
					
						
							|  |  |  |  |     global $file_sizes_by_mark; | 
					
						
							|  |  |  |  |     global $missing_files, $missing_tags, $using_rev; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Transform english file name to translated file name
 | 
					
						
							|  |  |  |  |     $trans_file = preg_replace("'^".$DOCDIR."en/'", $DOCDIR.$LANG."/", $file); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // If we cannot find the file, we push it into the missing files list
 | 
					
						
							|  |  |  |  |     if (!@file_exists($trans_file)) { | 
					
						
							|  |  |  |  |         $files_by_mark[REV_NOTRANS]++; | 
					
						
							|  |  |  |  |         $trans_name = substr($trans_file, strlen($DOCDIR) + strlen($LANG) + 1); | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |         $size = intval(filesize($file)/1024); | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  |         $missing_files[$trans_name] = array( $size ); | 
					
						
							|  |  |  |  |         $file_sizes_by_mark[REV_NOTRANS] += $size; | 
					
						
							|  |  |  |  |         // compute en-tags just if they're needed in the WIP-Table
 | 
					
						
							|  |  |  |  |         if($using_rev) { | 
					
						
							|  |  |  |  |         	$missing_files[$trans_name][] = "1.".get_tags($file); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         return FALSE; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // No specific maintainer, check for a revision tag
 | 
					
						
							|  |  |  |  |     if (empty($MAINT)) { | 
					
						
							|  |  |  |  |         $trans_tag = get_tags($trans_file, "\\S*"); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     // If we need to check for a specific translator
 | 
					
						
							|  |  |  |  |     else { | 
					
						
							|  |  |  |  |         // Get translated files tag, with maintainer
 | 
					
						
							|  |  |  |  |         $trans_tag = get_tags($trans_file, $MAINT); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // If this is a file belonging to another
 | 
					
						
							|  |  |  |  |         // maintainer, than we would not like to
 | 
					
						
							|  |  |  |  |         // deal with it anymore
 | 
					
						
							|  |  |  |  |         if (count($trans_tag) == 0) { | 
					
						
							|  |  |  |  |             $trans_tag = get_tags($trans_file, "\\S*"); | 
					
						
							|  |  |  |  |             // We found a tag for another maintainer
 | 
					
						
							|  |  |  |  |             if (count($trans_tag) > 0) { | 
					
						
							|  |  |  |  |                 return FALSE; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Compute sizes and diffs
 | 
					
						
							|  |  |  |  |     $en_size    = intval(filesize($file) / 1024); | 
					
						
							|  |  |  |  |     $trans_size = intval(filesize($trans_file) / 1024); | 
					
						
							|  |  |  |  |     $size_diff  = intval($en_size) - intval($trans_size); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // If we found no revision tag, then collect this
 | 
					
						
							|  |  |  |  |     // file in the missing tags list
 | 
					
						
							|  |  |  |  |     if (count($trans_tag) == 0) { | 
					
						
							|  |  |  |  |         $files_by_mark[REV_NOTAG]++; | 
					
						
							|  |  |  |  |         $file_sizes_by_mark[REV_NOTAG] += $en_size; | 
					
						
							|  |  |  |  |         $missing_tags[] = array(substr($trans_file, strlen($DOCDIR)), $en_size, $trans_size, $size_diff); | 
					
						
							|  |  |  |  |         return FALSE; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Distribute values in separate vars for further processing
 | 
					
						
							|  |  |  |  |     list(, $this_rev, $this_maint, $this_status) = $trans_tag; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Get English file revision
 | 
					
						
							|  |  |  |  |     $en_rev = get_tags($file); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // If we have a numeric revision number (not n/a), compute rev. diff
 | 
					
						
							|  |  |  |  |     if (is_numeric($this_rev)) { | 
					
						
							|  |  |  |  |         $rev_diff   = intval($en_rev) - intval($this_rev); | 
					
						
							|  |  |  |  |         $trans_rev  = "1." . $this_rev; | 
					
						
							|  |  |  |  |         $en_rev     = "1." . $en_rev; | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |         // If we have no numeric revision, make all revision
 | 
					
						
							|  |  |  |  |         // columns hold the rev from the translated file
 | 
					
						
							|  |  |  |  |         $rev_diff = $trans_rev = $this_rev; | 
					
						
							|  |  |  |  |         $en_rev   = "1." . $en_rev; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // If the file is up-to-date
 | 
					
						
							|  |  |  |  |     if ($rev_diff === 0) { | 
					
						
							|  |  |  |  |         // Store file by status and maintainer
 | 
					
						
							|  |  |  |  |         $files_by_mark[REV_UPTODATE]++; | 
					
						
							|  |  |  |  |         $files_by_maint[$this_maint][REV_UPTODATE]++; | 
					
						
							|  |  |  |  |         $file_sizes_by_mark[REV_UPTODATE] += $en_size; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         return FALSE; | 
					
						
							|  |  |  |  |     }  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Compute times and diffs
 | 
					
						
							|  |  |  |  |     $en_date    = intval((time() - filemtime($file)) / 86400); | 
					
						
							|  |  |  |  |     $trans_date = intval((time() - filemtime($trans_file)) / 86400); | 
					
						
							|  |  |  |  |     $date_diff  = $en_date - $trans_date; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Make decision on file category by revision, date and size
 | 
					
						
							|  |  |  |  |     if ($rev_diff >= ALERT_REV || $size_diff >= ALERT_SIZE || $date_diff <= ALERT_DATE) { | 
					
						
							|  |  |  |  |         $status_mark = REV_CRITICAL; | 
					
						
							|  |  |  |  |     } elseif ($rev_diff === "n/a") { | 
					
						
							|  |  |  |  |         $status_mark = REV_NOREV; | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |         $status_mark = REV_OLD; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Store files by status, and by maintainer too
 | 
					
						
							|  |  |  |  |     $files_by_mark[$status_mark]++; | 
					
						
							|  |  |  |  |     $files_by_maint[$this_maint][$status_mark]++; | 
					
						
							|  |  |  |  |     $file_sizes_by_mark[$status_mark] += $en_size; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     return array( | 
					
						
							|  |  |  |  |         "full_name"  => $file, | 
					
						
							|  |  |  |  |         "short_name" => basename($trans_file), | 
					
						
							|  |  |  |  |         "revision"   => array($en_rev,  $trans_rev,  $rev_diff), | 
					
						
							|  |  |  |  |         "size"       => array($en_size, $trans_size, $size_diff), | 
					
						
							|  |  |  |  |         "date"       => array($en_date, $trans_date, $date_diff), | 
					
						
							|  |  |  |  |         "maintainer" => $this_maint, | 
					
						
							|  |  |  |  |         "status"     => $this_status, | 
					
						
							|  |  |  |  |         "mark"       => $status_mark | 
					
						
							|  |  |  |  |     ); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  | } // get_file_status() function end
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // A function to check directory status in translated directory
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Check the status of files in a diretory of smarty/doc XML files
 | 
					
						
							|  |  |  |  | // The English directory is passed to this function to check
 | 
					
						
							|  |  |  |  | function get_dir_status($dir) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Collect files and diretcories in these arrays
 | 
					
						
							|  |  |  |  |     $directories = array(); | 
					
						
							|  |  |  |  |     $files       = array(); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Open the directory 
 | 
					
						
							|  |  |  |  |     $handle = @opendir($dir); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Walk through all names in the directory
 | 
					
						
							|  |  |  |  |     while ($file = @readdir($handle)) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // If we found a file with one or two point as a name,
 | 
					
						
							|  |  |  |  |       // or a CVS directory, skip the file
 | 
					
						
							|  |  |  |  |       if (preg_match("/^\.{1,2}/",$file) || $file == 'CVS') | 
					
						
							|  |  |  |  |         continue; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // Collect files and directories
 | 
					
						
							|  |  |  |  |       if (is_dir($dir.$file)) { $directories[] = $file; } | 
					
						
							|  |  |  |  |       else { $files[] = $file; } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Close the directory
 | 
					
						
							|  |  |  |  |     @closedir($handle); | 
					
						
							|  |  |  |  |        | 
					
						
							|  |  |  |  |     // Sort files and directories
 | 
					
						
							|  |  |  |  |     sort($directories); | 
					
						
							|  |  |  |  |     sort($files); | 
					
						
							|  |  |  |  |        | 
					
						
							|  |  |  |  |     // Go through files first
 | 
					
						
							|  |  |  |  |     $dir_status = array(); | 
					
						
							|  |  |  |  |     foreach ($files as $file) { | 
					
						
							|  |  |  |  |         // If the file status is OK, append the status info
 | 
					
						
							|  |  |  |  |         if ($file_status = get_file_status($dir.$file)) { | 
					
						
							|  |  |  |  |             $dir_status[] = $file_status; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Then go through subdirectories, merging all the info
 | 
					
						
							|  |  |  |  |     // coming from subdirs to one array
 | 
					
						
							|  |  |  |  |     foreach ($directories as $file) { | 
					
						
							|  |  |  |  |         $dir_status = array_merge( | 
					
						
							|  |  |  |  |             $dir_status,  | 
					
						
							|  |  |  |  |             get_dir_status($dir.$file.'/') | 
					
						
							|  |  |  |  |         ); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Return with collected file info in
 | 
					
						
							|  |  |  |  |     // this dir and subdirectories [if any]
 | 
					
						
							|  |  |  |  |     return $dir_status; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } // get_dir_status() function end
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-07-03 08:49:02 +00:00
										 |  |  |  | // Check for files removed in the EN tree, but still living in the translation
 | 
					
						
							|  |  |  |  | function get_old_files($dir) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     global $DOCDIR, $LANG; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Collect files and diretcories in these arrays
 | 
					
						
							|  |  |  |  |     $directories = array(); | 
					
						
							|  |  |  |  |     $files       = array(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     $special_files = array( | 
					
						
							|  |  |  |  |       // french
 | 
					
						
							|  |  |  |  |      'translation.xml' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // todo: add all missing languages
 | 
					
						
							|  |  |  |  |     ); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Open the directory
 | 
					
						
							|  |  |  |  |     $handle = @opendir($dir); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Walk through all names in the directory
 | 
					
						
							|  |  |  |  |     while ($file = @readdir($handle)) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // If we found a file with one or two point as a name,
 | 
					
						
							|  |  |  |  |       // or a CVS directory, skip the file
 | 
					
						
							|  |  |  |  |       if (preg_match("/^\.{1,2}/", $file) || $file == 'CVS') | 
					
						
							|  |  |  |  |         continue; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // skip this files
 | 
					
						
							|  |  |  |  |       if (in_array($file, $special_files)) { | 
					
						
							|  |  |  |  |         continue; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // Collect files and directories
 | 
					
						
							|  |  |  |  |       if (is_dir($dir.$file)) { | 
					
						
							|  |  |  |  |         $directories[] = $file; | 
					
						
							|  |  |  |  |       } else { | 
					
						
							|  |  |  |  |         $files[] = $file; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Close the directory
 | 
					
						
							|  |  |  |  |     @closedir($handle); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Sort files and directories
 | 
					
						
							|  |  |  |  |     sort($directories); | 
					
						
							|  |  |  |  |     sort($files); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Go through files first
 | 
					
						
							|  |  |  |  |     $old_files_status = array(); | 
					
						
							|  |  |  |  |     foreach ($files as $file) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       $en_dir = preg_replace("'^".$DOCDIR.$LANG."/'", $DOCDIR."en/", $dir); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       if (!@file_exists($en_dir.$file) ) { | 
					
						
							|  |  |  |  |         $old_files_status[$dir.$file] = array(0=>intval(filesize($dir.$file)/1024)); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Then go through subdirectories, merging all the info
 | 
					
						
							|  |  |  |  |     // coming from subdirs to one array
 | 
					
						
							|  |  |  |  |     foreach ($directories as $file) { | 
					
						
							|  |  |  |  |         $old_files_status = array_merge( | 
					
						
							|  |  |  |  |             $old_files_status,  | 
					
						
							|  |  |  |  |             get_old_files($dir.$file.'/') | 
					
						
							|  |  |  |  |         ); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     return $old_files_status; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } // get_old_files() function end
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Functions to read in the translation.xml file and process contents
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Get a multidimensional array with tag attributes
 | 
					
						
							|  |  |  |  | function parse_attr_string ($tags_attrs) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     $tag_attrs_processed = array(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Go through the tag attributes
 | 
					
						
							|  |  |  |  |     foreach($tags_attrs as $attrib_list) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // Get attr name and values
 | 
					
						
							|  |  |  |  |       preg_match_all("!(.+)=\\s*([\"'])\\s*(.+)\\2!U", $attrib_list, $attribs); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // Assign all attributes to one associative array
 | 
					
						
							|  |  |  |  |       $attrib_array = array(); | 
					
						
							|  |  |  |  |       foreach ($attribs[1] as $num => $attrname) { | 
					
						
							|  |  |  |  |         $attrib_array[trim($attrname)] = trim($attribs[3][$num]); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // Collect in order of tags received
 | 
					
						
							|  |  |  |  |       $tag_attrs_processed[] = $attrib_array; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Retrun with collected attributes
 | 
					
						
							|  |  |  |  |     return $tag_attrs_processed; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } // parse_attr_string() end
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Parse the translation.xml file for
 | 
					
						
							|  |  |  |  | // translation related meta information
 | 
					
						
							|  |  |  |  | function parse_translation($DOCDIR, $LANG, $MAINT) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     global $files_by_mark; | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Path to find translation.xml file, set default values,
 | 
					
						
							|  |  |  |  |     // in case we can't find the translation file
 | 
					
						
							|  |  |  |  |     $translation_xml = $DOCDIR.$LANG."/translation.xml"; | 
					
						
							|  |  |  |  |     $output_charset  = 'iso-8859-1'; | 
					
						
							|  |  |  |  |     $translation     = array( | 
					
						
							|  |  |  |  |         "intro"    => "", | 
					
						
							|  |  |  |  |         "persons"  => array(), | 
					
						
							|  |  |  |  |         "files"    => array(), | 
					
						
							|  |  |  |  |         "allfiles" => array(), | 
					
						
							|  |  |  |  |     ); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Check for file availability, return with default
 | 
					
						
							|  |  |  |  |     // values, if we cannot find the file
 | 
					
						
							|  |  |  |  |     if (!@file_exists($translation_xml)) { | 
					
						
							|  |  |  |  |         return array($output_charset, $translation); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Else go on, and load in the file, replacing all
 | 
					
						
							|  |  |  |  |     // space type chars with one space
 | 
					
						
							|  |  |  |  |     $txml = join("", file($translation_xml)); | 
					
						
							|  |  |  |  |     $txml = preg_replace("/\\s+/", " ", $txml); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Get intro text (different for a persons info and
 | 
					
						
							|  |  |  |  |     // for a whole group info page)
 | 
					
						
							|  |  |  |  |     if (empty($MAINT)) { | 
					
						
							|  |  |  |  |         preg_match("!<intro>(.+)</intro>!s", $txml, $match); | 
					
						
							|  |  |  |  |         $translation["intro"] = trim($match[1]); | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |         $translation["intro"] = "Personal Statistics for ".$MAINT; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Get encoding for the output, from the translation.xml
 | 
					
						
							|  |  |  |  |     // file encoding (should be the same as the used encoding
 | 
					
						
							|  |  |  |  |     // in HTML)
 | 
					
						
							|  |  |  |  |     preg_match("!<\?xml(.+)\?>!U", $txml, $match); | 
					
						
							|  |  |  |  |     $xmlinfo = parse_attr_string($match); | 
					
						
							|  |  |  |  |     $output_charset = $xmlinfo[1]["encoding"]; | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Get persons list preg pattern, only check for a specific
 | 
					
						
							|  |  |  |  |     // maintainer, if the users asked for it
 | 
					
						
							|  |  |  |  |     if (empty($MAINT)) { | 
					
						
							|  |  |  |  |         $pattern = "!<person(.+)/\\s?>!U"; | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |         $pattern = "!<person([^<]+nick=\"".$MAINT."\".+)/\\s?>!U"; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Find all persons matching the pattern
 | 
					
						
							|  |  |  |  |     preg_match_all($pattern, $txml, $matches); | 
					
						
							|  |  |  |  |     $translation['persons'] = parse_attr_string($matches[1]); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Get list of work in progress files
 | 
					
						
							|  |  |  |  |     if (empty($MAINT)) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Get all wip files
 | 
					
						
							|  |  |  |  |         preg_match_all("!<file(.+)/\\s?>!U", $txml, $matches); | 
					
						
							|  |  |  |  |         $translation['files'] = parse_attr_string($matches[1]); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Provide info about number of WIP files
 | 
					
						
							|  |  |  |  |         $files_by_mark[REV_WIP] += count($translation['files']); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         // Only check for a specific maintainer, if we were asked to
 | 
					
						
							|  |  |  |  |         preg_match_all("!<file([^<]+person=\"".$MAINT."\".+)/\\s?>!U", $txml, $matches); | 
					
						
							|  |  |  |  |         $translation['files'] = parse_attr_string($matches[1]); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Other maintainers wip files need to be cleared from
 | 
					
						
							|  |  |  |  |         // available files list in the future, so store that info too.
 | 
					
						
							|  |  |  |  |         preg_match_all("!<file(.+)/\\s?>!U", $txml, $matches); | 
					
						
							|  |  |  |  |         $translation['allfiles'] = parse_attr_string($matches[1]); | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         // Provide info about number of WIP files
 | 
					
						
							|  |  |  |  |         $files_by_mark[REV_WIP] += count($translation['allfiles']); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Return with collected info in two vars
 | 
					
						
							|  |  |  |  |     return array($output_charset, $translation); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } // parse_translation() function end()
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Start of the program execution
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Check for directory validity
 | 
					
						
							|  |  |  |  | if (!@is_dir($DOCDIR . $LANG)) { | 
					
						
							|  |  |  |  |     die("The $LANG language code is not valid"); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  | // Parse translation.xml file for more information
 | 
					
						
							|  |  |  |  | list($charset, $translation) = parse_translation($DOCDIR, $LANG, $MAINT); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Add WIP files to maintainers file count and figure out,
 | 
					
						
							|  |  |  |  | // if we need to use optional date and revision columns
 | 
					
						
							|  |  |  |  | $using_date = FALSE; $using_rev = FALSE; | 
					
						
							|  |  |  |  | foreach ($translation["files"] as $num => $fileinfo) { | 
					
						
							|  |  |  |  |     $files_by_maint[$fileinfo["person"]][REV_WIP]++; | 
					
						
							|  |  |  |  |     if (isset($fileinfo["date"]))     { $using_date = TRUE; } | 
					
						
							|  |  |  |  |     if (isset($fileinfo["revision"])) { $using_rev = TRUE; } | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Get all files status
 | 
					
						
							|  |  |  |  | $files_status = get_dir_status($DOCDIR."en/"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-07-03 08:49:02 +00:00
										 |  |  |  | // Get all old files in <lang> directory
 | 
					
						
							|  |  |  |  | $old_files = get_old_files($DOCDIR.$LANG."/"); | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | $navbar = "<p class=c><a href=\"#intro\">Introduction</a> | " . | 
					
						
							|  |  |  |  |           "<a href=\"#translators\">Translators</a> | " . | 
					
						
							|  |  |  |  |           "<a href=\"#filesummary\">File summary by type</a> | " . | 
					
						
							|  |  |  |  |           "<a href=\"#files\">Files</a> | "; | 
					
						
							|  |  |  |  | if (count($translation["files"]) != 0) | 
					
						
							|  |  |  |  | 	$navbar .= "<a href=\"#wip\">Work in progress</a> | "; | 
					
						
							|  |  |  |  | $navbar .= "<a href=\"#misstags\">Missing revision numbers</a> | " . | 
					
						
							| 
									
										
										
										
											2005-07-03 08:49:02 +00:00
										 |  |  |  |            "<a href=\"#missfiles\">Untranslated files</a> | " . | 
					
						
							|  |  |  |  |            "<a href=\"#oldfiles\">Old files</a></p>\n"; | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Figure out generation date
 | 
					
						
							|  |  |  |  | $date = date("r"); | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Start of HTML page
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | print <<<END_OF_MULTILINE | 
					
						
							|  |  |  |  | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"> | 
					
						
							|  |  |  |  | <html> | 
					
						
							|  |  |  |  | <head> | 
					
						
							| 
									
										
										
										
											2004-05-28 21:30:11 +00:00
										 |  |  |  | <title>Smarty Manual Revision-check</title> | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | <meta http-equiv="Content-Type" content="text/html; charset={$charset}"> | 
					
						
							|  |  |  |  | <style type="text/css"> | 
					
						
							|  |  |  |  | <!-- | 
					
						
							|  |  |  |  | h2,td,a,p,a.ref,th { font-family:Arial,Helvetica,sans-serif; font-size:14px; } | 
					
						
							|  |  |  |  | h2,th,a.ref { color:#FFFFFF; }
 | 
					
						
							|  |  |  |  | td,a,p { color:#000000; }
 | 
					
						
							|  |  |  |  | h2     { font-size:28px; } | 
					
						
							|  |  |  |  | th     { font-weight:bold; } | 
					
						
							|  |  |  |  | .blue  { background-color:#666699; }
 | 
					
						
							|  |  |  |  | .act   { background-color:#68D888; }
 | 
					
						
							|  |  |  |  | .norev { background-color:#f4a460; }
 | 
					
						
							|  |  |  |  | .old   { background-color:#eee8aa; }
 | 
					
						
							|  |  |  |  | .crit  { background-color:#ff6347; }
 | 
					
						
							|  |  |  |  | .wip   { background-color:#dcdcdc; }
 | 
					
						
							|  |  |  |  | .r     { text-align:right } | 
					
						
							|  |  |  |  | .rb    { text-align:right; font-weight:bold; } | 
					
						
							|  |  |  |  | .c     { text-align:center } | 
					
						
							|  |  |  |  | body   { margin:0px 0px 0px 0px; background-color:#F0F0F0; }
 | 
					
						
							|  |  |  |  | //-->
 | 
					
						
							|  |  |  |  | </style> | 
					
						
							|  |  |  |  | </head> | 
					
						
							|  |  |  |  | <body> | 
					
						
							|  |  |  |  | <table width="100%" border="0" cellspacing="0" bgcolor="#666699"> | 
					
						
							|  |  |  |  | <tr><td> | 
					
						
							|  |  |  |  | <table width="100%" border="0" cellspacing="1" bgcolor="#9999CC"> | 
					
						
							|  |  |  |  | <tr><td><h2 class=c>Status of the translated Smarty Manual</h2><p class=c style="font-size:12px;">Generated: {$date}   /   Language: $LANG<br></p></td></tr> | 
					
						
							|  |  |  |  | </table> | 
					
						
							|  |  |  |  | </td></tr> | 
					
						
							|  |  |  |  | </table> | 
					
						
							|  |  |  |  | END_OF_MULTILINE; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | print ($navbar); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Intro block goes here
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // If we have an introduction text, print it out, with an anchor
 | 
					
						
							|  |  |  |  | if (!empty($translation["intro"])) { | 
					
						
							|  |  |  |  |     print '<a name="intro"></a>'; | 
					
						
							|  |  |  |  |     print '<table width="800" align="center"><tr><td class=c>' . | 
					
						
							|  |  |  |  |            $translation['intro'] . '</td></tr></table><p></p>'; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Translators table goes here
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // If person list available (valid translation.xml file in lang), print out
 | 
					
						
							|  |  |  |  | // the person list, with respect to the maintainer parameter specified
 | 
					
						
							|  |  |  |  | if (!empty($translation["persons"])) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | print <<<END_OF_MULTILINE | 
					
						
							|  |  |  |  | <a name="translators"></a> | 
					
						
							|  |  |  |  | <table width="820" border="0" cellpadding="4" cellspacing="1" align="center"> | 
					
						
							|  |  |  |  | <tr class=blue> | 
					
						
							|  |  |  |  | <th rowspan=2>Translator's name</th> | 
					
						
							|  |  |  |  | <th rowspan=2>Contact email</th> | 
					
						
							|  |  |  |  | <th rowspan=2>Nick</th> | 
					
						
							|  |  |  |  | <th rowspan=2>C<br>V<br>S</th> | 
					
						
							|  |  |  |  | <th colspan=7>Files maintained</th> | 
					
						
							|  |  |  |  | </tr> | 
					
						
							|  |  |  |  | <tr> | 
					
						
							|  |  |  |  | <th class="{$CSS[REV_CREDIT]}" style="color:#000000">cre-<br>dits</th> | 
					
						
							|  |  |  |  | <th class="{$CSS[REV_UPTODATE]}" style="color:#000000">upto-<br>date</th> | 
					
						
							|  |  |  |  | <th class="{$CSS[REV_OLD]}" style="color:#000000">old</th> | 
					
						
							|  |  |  |  | <th class="{$CSS[REV_CRITICAL]}" style="color:#000000">cri-<br>tical</th> | 
					
						
							|  |  |  |  | <th class="{$CSS[REV_NOREV]}" style="color:#000000">no<br>rev</th> | 
					
						
							|  |  |  |  | <th class="{$CSS[REV_WIP]}" style="color:#000000">wip</th> | 
					
						
							|  |  |  |  | <th class="blue">sum</th> | 
					
						
							|  |  |  |  | </tr> | 
					
						
							|  |  |  |  | END_OF_MULTILINE; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // ' Please leave this comment here
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // We will collect the maintainers by nick here
 | 
					
						
							|  |  |  |  |     $maint_by_nick = array(); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     // Print out a line for each maintainer (with respect to
 | 
					
						
							|  |  |  |  |     // maintainer setting provided in command line)
 | 
					
						
							|  |  |  |  |     foreach($translation["persons"] as $num => $person) { | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         // Do not print out this person, if a
 | 
					
						
							|  |  |  |  |         // specific maintainer info is asked for
 | 
					
						
							|  |  |  |  |         if (!empty($MAINT) && $person["nick"] != $MAINT) { | 
					
						
							|  |  |  |  |             continue; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         // Put maintaner number into associative array
 | 
					
						
							|  |  |  |  |         // [Used in further tables for referencing]
 | 
					
						
							|  |  |  |  |         $maint_by_nick[$person["nick"]] = $num; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         // Decide on the CVS text and the color of the line
 | 
					
						
							|  |  |  |  |         if ($person["cvs"] === "yes") { | 
					
						
							|  |  |  |  |             $cvsu = "x"; | 
					
						
							|  |  |  |  |             $col = "old"; | 
					
						
							|  |  |  |  |         } else { | 
					
						
							|  |  |  |  |             $cvsu = " "; | 
					
						
							|  |  |  |  |             $col = "wip"; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         // Try to do some antispam actions
 | 
					
						
							|  |  |  |  |         $person["email"] = str_replace( | 
					
						
							|  |  |  |  |             "@", | 
					
						
							|  |  |  |  |             "<small>:at:</small>", | 
					
						
							|  |  |  |  |             $person["email"] | 
					
						
							|  |  |  |  |         ); | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         // Get file info for this person
 | 
					
						
							|  |  |  |  |         if (isset($files_by_maint[$person["nick"]])) { | 
					
						
							|  |  |  |  |             $pi = $files_by_maint[$person["nick"]]; | 
					
						
							|  |  |  |  |         } else { | 
					
						
							|  |  |  |  |             $pi = array(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         print("<tr class=$col>" . | 
					
						
							|  |  |  |  |               "<td><a name=\"maint$num\">$person[name]</a></td>" .
 | 
					
						
							|  |  |  |  |               "<td>$person[email]</td>" . | 
					
						
							|  |  |  |  |               "<td>$person[nick]</td>" . | 
					
						
							|  |  |  |  |               "<td class=c>$cvsu</td>" . | 
					
						
							|  |  |  |  |               "<td class=c>" . $pi[REV_CREDIT]   . "</td>" . | 
					
						
							|  |  |  |  |               "<td class=c>" . $pi[REV_UPTODATE] . "</td>" . | 
					
						
							|  |  |  |  |               "<td class=c>" . $pi[REV_OLD]      . "</td>" . | 
					
						
							|  |  |  |  |               "<td class=c>" . $pi[REV_CRITICAL] . "</td>" . | 
					
						
							|  |  |  |  |               "<td class=c>" . $pi[REV_NOREV]    . "</td>" . | 
					
						
							|  |  |  |  |               "<td class=c>" . $pi[REV_WIP]      . "</td>" . | 
					
						
							|  |  |  |  |               "<th class=blue>" . array_sum($pi) . "</th>" . | 
					
						
							|  |  |  |  |               "</tr>\n"); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |     print "</table>\n<p> </p>\n"; | 
					
						
							|  |  |  |  | }  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Files summary table goes here
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Do not print out file summary table, if we are printing out a page
 | 
					
						
							|  |  |  |  | // for only one maintainer (his personal summary is in the table above)
 | 
					
						
							|  |  |  |  | if (empty($MAINT)) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	print <<<END_OF_MULTILINE | 
					
						
							|  |  |  |  | <a name="filesummary"></a> | 
					
						
							|  |  |  |  | <table width="450" border="0" cellpadding="4" cellspacing="1" align="center"> | 
					
						
							|  |  |  |  | <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; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     $files_sum = array_sum($files_by_mark); | 
					
						
							|  |  |  |  |     $file_sizes_sum = array_sum($file_sizes_by_mark); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     $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") | 
					
						
							|  |  |  |  |     ); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     foreach ($file_types as $num => $type) { | 
					
						
							|  |  |  |  |     	print "<tr class=".$CSS[$type[0]].">". | 
					
						
							|  |  |  |  |     		  "<td>".$type[1]."</td>". | 
					
						
							|  |  |  |  |     		  "<td class=c>".intval($files_by_mark[$type[0]])."</td>". | 
					
						
							|  |  |  |  |     		  "<td class=c>".number_format($files_by_mark[$type[0]] * 100 / $files_sum, 2 ). | 
					
						
							|  |  |  |  |     		  "%</td>". | 
					
						
							|  |  |  |  |                   "<td class=c>".intval($file_sizes_by_mark[$type[0]])."</td>". | 
					
						
							|  |  |  |  |                   "<td class=c>".number_format($file_sizes_by_mark[$type[0]] * 100 / $file_sizes_sum, 2). | 
					
						
							|  |  |  |  |                   "%</td></tr>\n"; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	print "<tr class=blue><th>Files total</th><th>$files_sum</th><th>100%</th><th>$file_sizes_sum</th><th>100%</th></tr>\n". | 
					
						
							|  |  |  |  | 		  "</table>\n<p> </p>\n"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | print ($navbar."<p> </p>\n"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Files table goes here
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  | if (count($files_status) != 0) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | print <<<END_OF_MULTILINE | 
					
						
							|  |  |  |  | <a name="files"></a> | 
					
						
							|  |  |  |  | <table width="820" border="0" cellpadding="4" cellspacing="1" align="center"> | 
					
						
							|  |  |  |  | <tr class=blue> | 
					
						
							|  |  |  |  | <th rowspan=2>Translated file</th> | 
					
						
							|  |  |  |  | <th colspan=3>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>diff</th> | 
					
						
							|  |  |  |  | <th>en</th> | 
					
						
							|  |  |  |  | <th>$LANG</th> | 
					
						
							|  |  |  |  | <th>diff</th> | 
					
						
							|  |  |  |  | <th>en</th> | 
					
						
							|  |  |  |  | <th>$LANG</th> | 
					
						
							|  |  |  |  | <th>diff</th> | 
					
						
							|  |  |  |  | </tr> | 
					
						
							|  |  |  |  | END_OF_MULTILINE; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  |     // This was the previous directory [first]
 | 
					
						
							|  |  |  |  |     $prev_dir = $new_dir = $DOCDIR."en"; | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  |      | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  |     // Go through all files collected
 | 
					
						
							|  |  |  |  |     foreach ($files_status as $num => $file) { | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |         // Make the maintainer a link, if we have that maintainer in the list
 | 
					
						
							|  |  |  |  |         if (isset($maint_by_nick[$file["maintainer"]])) { | 
					
						
							|  |  |  |  |           $file["maintainer"] = '<a href="#maint' . $maint_by_nick[$file["maintainer"]] . | 
					
						
							|  |  |  |  |                                 '">' . $file["maintainer"] . '</a>'; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |         // If we have a 'numeric' revision diff and it is not zero,
 | 
					
						
							|  |  |  |  |         // make a link to the CVS repository's diff script
 | 
					
						
							|  |  |  |  |         if ($file["revision"][2] != "n/a" && $file["revision"][2] !== 0) { | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |             $url = 'http://cvs.php.net/diff.php/' . | 
					
						
							|  |  |  |  |                    preg_replace( "'^".$DOCDIR."'", 'smarty/docs/', $file['full_name']) . | 
					
						
							|  |  |  |  |                    '?r1=' . $file['revision'][1] .  | 
					
						
							|  |  |  |  |                    '&r2=' . $file['revision'][0] . | 
					
						
							|  |  |  |  |                    CVS_OPT; | 
					
						
							|  |  |  |  |             $url_ws = $url . '&ws=0'; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             $file['short_name'] = '<a href="' . $url . '">'. $file["short_name"] . '</a> '. | 
					
						
							|  |  |  |  |                                   '<a href="' . $url_ws . '">[NoWS]</a>'; | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |         // Guess the new directory from the full name of the file
 | 
					
						
							|  |  |  |  |         $new_dir = dirname($file["full_name"]); | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  |          | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |         // If this is a new directory, put out old dir lines
 | 
					
						
							|  |  |  |  |         if ($new_dir != $prev_dir && isset($lines)) { | 
					
						
							|  |  |  |  |             echo $prev_diplay_dir; | 
					
						
							|  |  |  |  |             echo " ($line_number)</th></tr>"; | 
					
						
							|  |  |  |  |     	echo $lines; | 
					
						
							|  |  |  |  |     	 | 
					
						
							|  |  |  |  |     	$lines = ''; | 
					
						
							|  |  |  |  |     	$line_number = 0; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  |             // Store the new actual directory
 | 
					
						
							|  |  |  |  |             $prev_dir = $new_dir; | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |         // Drop out the unneeded parts from the dirname...
 | 
					
						
							|  |  |  |  |         $display_dir = str_replace($DOCDIR."en/", "", dirname($file["full_name"])); | 
					
						
							|  |  |  |  |         $prev_diplay_dir = "<tr class=blue><th colspan=12>$display_dir"; | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  |          | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |         // Save the line for the current file (get file name shorter)
 | 
					
						
							|  |  |  |  |         $lines .= "<tr class={$CSS[$file['mark']]}><td>{$file['short_name']}</td>". | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  |               "<td> {$file['revision'][0]}</td>" . | 
					
						
							|  |  |  |  |               "<td> {$file['revision'][1]}</td>". | 
					
						
							|  |  |  |  |               "<td class=rb>{$file['revision'][2]} </td>". | 
					
						
							|  |  |  |  |               "<td class=r>{$file['size'][0]} </td>". | 
					
						
							|  |  |  |  |               "<td class=r>{$file['size'][1]} </td>". | 
					
						
							|  |  |  |  |               "<td class=rb>{$file['size'][2]} </td>". | 
					
						
							|  |  |  |  |               "<td class=r>{$file['date'][0]} </td>". | 
					
						
							|  |  |  |  |               "<td class=r>{$file['date'][1]} </td>". | 
					
						
							|  |  |  |  |               "<td class=rb>{$file['date'][2]} </td>". | 
					
						
							|  |  |  |  |               "<td class=c>{$file['maintainer']}</td>". | 
					
						
							|  |  |  |  |               "<td class=c>".trim($file['status'])."</td></tr>\n"; | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |          $line_number++; | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  |      | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  |     // echo the last dir and $lines
 | 
					
						
							|  |  |  |  |     echo "$prev_diplay_dir ($line_number)</th></tr>"; | 
					
						
							|  |  |  |  |     echo $lines; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 14:23:22 +00:00
										 |  |  |  |     print("</table>\n<p> </p>\n$navbar<p> </p>\n"); | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | // Work in progress table goes here
 | 
					
						
							|  |  |  |  | // =========================================================================
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // If work-in-progress list is available (valid translation.xml file in lang)
 | 
					
						
							|  |  |  |  | if (count($translation["files"]) != 0) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // Print out files table header
 | 
					
						
							|  |  |  |  |     print "<a name=\"wip\"></a>\n" . | 
					
						
							|  |  |  |  |     "<table width=\"820\" border=\"0\" cellpadding=\"4\" cellspacing=\"1\" align=\"center\">\n" . | 
					
						
							|  |  |  |  |     "<tr class=blue>". | 
					
						
							|  |  |  |  |     "<th>Work in progress files</th>". | 
					
						
							|  |  |  |  |     "<th>Translator</th>". | 
					
						
							|  |  |  |  |     "<th>Type</th>"; | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |     // Print out date and revision columns if needed
 | 
					
						
							|  |  |  |  |     if ($using_date) { | 
					
						
							|  |  |  |  |         print '<th>Date</th>'; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     if ($using_rev) { | 
					
						
							|  |  |  |  |         print '<th>CO-Revision</th>' . | 
					
						
							|  |  |  |  |               '<th>EN-Revision</th>'; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     print "</tr>\n"; | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |     // Go through files, and print out lines for them
 | 
					
						
							|  |  |  |  |     foreach($translation["files"] as $num => $finfo) { | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |         // If we have a valid maintainer, link to the summary
 | 
					
						
							|  |  |  |  |         if (isset($maint_by_nick[$finfo["person"]])) { | 
					
						
							|  |  |  |  |             $finfo["person"] = '<a href="#maint' . $maint_by_nick[$finfo["person"]] . | 
					
						
							|  |  |  |  |                                '">' . $finfo["person"] . '</a>'; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         | 
					
						
							|  |  |  |  |         // Print out the line with the first columns
 | 
					
						
							|  |  |  |  |         print "<tr class=wip><td>$finfo[name]</td>" . | 
					
						
							|  |  |  |  |               "<td>$finfo[person]</td><td>$finfo[type]</td>"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // If we need the date column, print it out
 | 
					
						
							|  |  |  |  |         if ($using_date) { | 
					
						
							|  |  |  |  |             print "<td>$finfo[date]</td>"; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // If we need the revision column, print it out
 | 
					
						
							|  |  |  |  |         if ($using_rev) { | 
					
						
							|  |  |  |  |             print "<td>$finfo[revision]</td><td>" . | 
					
						
							|  |  |  |  |                   $missing_files[$finfo["name"]][1] . | 
					
						
							|  |  |  |  |                   "</td>"; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |        | 
					
						
							|  |  |  |  |         // End the line
 | 
					
						
							|  |  |  |  |         print "</tr>\n"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Collect files in WIP list
 | 
					
						
							|  |  |  |  |         $wip_files[$finfo["name"]] = TRUE; | 
					
						
							|  |  |  |  |     }  | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |     print "</table>\n<p> </p>\n$navbar<p> </p>\n"; | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  | }  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Files translated, but without a revision comment
 | 
					
						
							|  |  |  |  | $count = count($missing_tags); | 
					
						
							|  |  |  |  | if ($count > 0) { | 
					
						
							|  |  |  |  |     print "<a name=\"misstags\"></a>" . | 
					
						
							|  |  |  |  |           "<table width=\"400\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\" align=\"center\">\n". | 
					
						
							|  |  |  |  |           "<tr class=blue><th rowspan=2>Files without Revision-comment ($count files):</th>". | 
					
						
							|  |  |  |  |           "<th colspan=3>Sizes in kB</th></tr>\n". | 
					
						
							|  |  |  |  |           "<tr class=blue><th>en</th><th>$LANG</th><th>diff</th></tr>\n"; | 
					
						
							|  |  |  |  |     foreach($missing_tags as $val) { | 
					
						
							|  |  |  |  |         // Shorten the filename (we have directory headers)
 | 
					
						
							|  |  |  |  |         $short_file = basename($val[0]); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Guess the new directory from the full name of the file
 | 
					
						
							|  |  |  |  |         $new_dir = dirname($val[0]); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |         // If this is a new directory, put out dir headline
 | 
					
						
							|  |  |  |  |         if ($new_dir != $prev_dir) { | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |             // Print out directory header
 | 
					
						
							|  |  |  |  |             print "<tr class=blue><th colspan=4>$new_dir</th></tr>\n"; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |             // Store the new actual directory
 | 
					
						
							|  |  |  |  |             $prev_dir = $new_dir; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         print "<tr class=wip><td>$short_file</td><td class=r>$val[1]</td>". | 
					
						
							|  |  |  |  |               "<td class=r>$val[2]</td><td class=r>$val[3]</td></tr>\n"; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     print "</table>\n<p> </p>\n$navbar<p> </p>\n"; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Merge all work in progress files collected
 | 
					
						
							|  |  |  |  | $wip_files = array_merge( | 
					
						
							|  |  |  |  |     $translation["files"],    // Files for this translator
 | 
					
						
							|  |  |  |  |     $translation["allfiles"]  // Files for all the translators
 | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Delete wip entires from available files list
 | 
					
						
							|  |  |  |  | foreach ($wip_files as $file) { | 
					
						
							|  |  |  |  |     if (isset($missing_files[$file['name']])) { | 
					
						
							|  |  |  |  |         unset($missing_files[$file['name']]); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Files not translated and not "wip"
 | 
					
						
							|  |  |  |  | $count = count($missing_files); | 
					
						
							|  |  |  |  | if ($count > 0) { | 
					
						
							|  |  |  |  |     print "<a name=\"missfiles\"></a>" . | 
					
						
							|  |  |  |  |           "<table width=\"400\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\" align=\"center\">\n" . | 
					
						
							|  |  |  |  |           "<tr class=blue><th><a name=\"avail\" class=\"ref\">" . | 
					
						
							|  |  |  |  |           " Available for translation</a> ($count files):</th><th>kB</th></tr>\n"; | 
					
						
							|  |  |  |  |     foreach($missing_files as $file => $info) { | 
					
						
							|  |  |  |  |         // Shorten the filename (we have directory headers)
 | 
					
						
							|  |  |  |  |         $short_file = basename($file); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Guess the new directory from the full name of the file
 | 
					
						
							|  |  |  |  |         $new_dir = dirname($file); | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |         // If this is a new directory, put out dir headline
 | 
					
						
							|  |  |  |  |         if ($new_dir != $prev_dir) { | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |             // Print out directory header if not "."
 | 
					
						
							|  |  |  |  |             print "<tr class=blue><th colspan=2>$new_dir</th></tr>\n"; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |             // Store the new actual directory
 | 
					
						
							|  |  |  |  |             $prev_dir = $new_dir; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         print "<tr class=wip><td><a href=\"http://cvs.php.net/co.php/smarty/docs/en/$file\">$short_file</a></td>" .
 | 
					
						
							|  |  |  |  |               "<td class=r>$info[0]</td></tr>\n"; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     print "</table>\n<p> </p>\n$navbar<p> </p>\n"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-07-03 08:49:02 +00:00
										 |  |  |  | // Files not in EN tree
 | 
					
						
							|  |  |  |  | $count = count($old_files); | 
					
						
							|  |  |  |  | if ($count > 0) { | 
					
						
							|  |  |  |  |     print "<a name=\"oldfiles\"></a>" . | 
					
						
							|  |  |  |  |           "<table width=\"400\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\" align=\"center\">\n" . | 
					
						
							|  |  |  |  |           "<tr class=blue><th><a name=\"avail\" class=\"ref\">" . | 
					
						
							|  |  |  |  |           " Not in EN Tree</a> ($count files):</th><th>kB</th></tr>\n"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     foreach($old_files as $file => $info) { | 
					
						
							|  |  |  |  |         // Shorten the filename (we have directory headers)
 | 
					
						
							|  |  |  |  |         $short_file = basename($file); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // Guess the new directory from the full name of the file
 | 
					
						
							|  |  |  |  |         $new_dir = dirname($file); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // If this is a new directory, put out dir headline
 | 
					
						
							|  |  |  |  |         if ($new_dir != $prev_dir) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // Print out directory header if not "."
 | 
					
						
							|  |  |  |  |             print "<tr class=blue><th colspan=2>$new_dir</th></tr>\n"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // Store the new actual directory
 | 
					
						
							|  |  |  |  |             $prev_dir = $new_dir; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         print "<tr class=wip><td>$short_file</td>" . | 
					
						
							|  |  |  |  |               "<td class=r>$info[0]</td></tr>\n"; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     print "</table>\n<p> </p>\n$navbar<p> </p>\n"; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-13 16:24:12 +00:00
										 |  |  |  | // All OK, end the file
 | 
					
						
							|  |  |  |  | print "</body>\n</html>\n"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-07-13 15:37:19 +00:00
										 |  |  |  | ?>
 |