Source: filestatus.phps - download
<?php
set_time_limit(0);//avoid Maximum execution time
ini_set("memory_limit","20M"); // I must read the whole file to parse it.
//configration
$repository_path = 'translate';// path to translate repositry
$misc_path = 'misc'; // path to output files
$db[host] = 'localhost';
$db[name] = 'arabeyes';
$db[tbl] = 'proj_about';
$db[user] = 'arabeyes';
$db[pass] = '6ama6im';
// project name
$projects[] = 'actionapps';
$projects[] = 'debian';
$projects[] = 'drupal';
$projects[] = 'fedora';
$projects[] = 'freedesktop';
$projects[] = 'gnome';
$projects[] = 'kde';
$projects[] = 'mandriva';
$projects[] = 'mozilla';
$projects[] = 'openoffice';
$projects[] = 'plone';
$projects[] = 'wordlist';
//connect to database
mysql_connect($db[host],$db[user],$db[pass]);
mysql_select_db($db[name]);
//main
foreach($projects as $project){
$files = getFiles($repository_path.'/'.$project);
$data = makeTable($files);
$fp = fopen($misc_path.'/'.$project.'_status_bar.html','w');
fwrite($fp,$data);
fclose($fp);
$status = @(int) (($status[not]/$status[count])*100);
$sql = "UPDATE `{$db[tbl]}` SET `status`='$status' WHERE `proj_name`='$project' ";
mysql_query($sql);
//print " Project <a href=misc/{$project}_status_bar.html>$project</a> Status Page Generated ($status %)<br />\n";
print " Project misc/{$project}_status_bar.html Status Page Generated ($status %)\n";
$status = array();
}
//Genrate HTML page
function makeTable($files){
global $status;
if(!$files[0]){
foreach($files as $dir){
$out .= makeTable($dir);
}
return($out);
}
$out = '<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 width="100%">
<TR bgcolor=bisque>
<TH align=left>Filename</TH>
<TH>Strings to Translate</TH>
<TH>Strings Translated (done)</TH>
<TH align=center width="20%"></TH>
<TH>%-done</TH>
</TR>';
foreach($files as $file){
$arr = getStatus($file);
$percent = @(int) (($arr[not]/$arr[count])*100);
$out .= "<tr>
<td>$arr[fn]</td>
<td>$arr[count]</td>
<td>$arr[not]</td>
<td><div style='background:green;width:$percent%'> </div></td>
<td>$percent %</td>
</tr>";
$total[count] += $arr[count];
$total[not] += $arr[not];
}
$total[percent] = @(int) (($total[not]/$total[count])*100);
$out .= "<tr bgcolor=gainsboro>
<th>Total</th>
<td>$total[count]</td>
<td>$total[not]</td>
<td><div style='background:green;width:$total[percent]%'> </div></td>
<td>$total[percent] %</td>
</tr></table><br>";
$status[count] +=$total[count];
$status[not] +=$total[not];
return($out);
}
//get all files in path
function getFiles($path,$sub=false){
static $data;
$handle = opendir($path);
while (false !== ($file = readdir($handle))) {
if(is_file($path.'/'.$file)){
$data[$path][] = $path.'/'.$file;
}elseif($file !=='.' && $file !=='..' && $file !=='.svn'){
getFiles($path.'/'.$file,true);
}
}
if(!$sub) return($data);
}
//parse po file and retuen status
function getStatus($fn){
$data = implode('',file($fn));
$arr['not'] = $arr['count'] = 0;
//preg_match_all('/(#.+)msgid (.+)\r\nmsgstr (.+)\r\n\r\n/Us',$data,$out);
preg_match_all('/\r\nmsgstr (.+)\r\n\r\n/Us',$data,$out);
for($i=1;$i<count($out[0]);$i++){
if($out[1][$i] =='""'){
$arr['not'] +=1;
}
$arr['count'] +=1;
}
$arr['fn'] = $fn;
return($arr);
}
?>