| 4 |
|
|
| 5 |
Originally written by Stefano Fabri <bluefuture@nospam@email.it> |
Originally written by Stefano Fabri <bluefuture@nospam@email.it> |
| 6 |
Copyright 2004, Stefano Fabri |
Copyright 2004, Stefano Fabri |
| 7 |
Copyright 2007 by Raphael Geissert <atomo64@gmail.com> |
Copyright 2007, 2008 by Raphael Geissert <atomo64@gmail.com> |
| 8 |
|
|
| 9 |
This program is free software; you can redistribute it and/or modify |
This program is free software; you can redistribute it and/or modify |
| 10 |
it under the terms of the GNU General Public License as published by |
it under the terms of the GNU General Public License as published by |
| 28 |
ini_set ( "memory_limit", "40M"); |
ini_set ( "memory_limit", "40M"); |
| 29 |
#print_R($_SERVER); |
#print_R($_SERVER); |
| 30 |
require "dehs.config.inc"; |
require "dehs.config.inc"; |
| 31 |
|
require "events.class.php"; |
| 32 |
dir_ctrl($dirs); |
dir_ctrl($dirs); |
| 33 |
if (!function_exists('file_get_contents')) { |
if (!function_exists('file_get_contents')) { |
| 34 |
function file_get_contents($filename) { |
function file_get_contents($filename) { |
| 64 |
elseif (in_array("-dl_diffs",$argv) || in_array("-keep_diff",$argv)) dl_diffs($argv[2]); |
elseif (in_array("-dl_diffs",$argv) || in_array("-keep_diff",$argv)) dl_diffs($argv[2]); |
| 65 |
elseif (in_array("-keep_sources",$argv) || in_array("-download_sources",$argv)) download_sources(); |
elseif (in_array("-keep_sources",$argv) || in_array("-download_sources",$argv)) download_sources(); |
| 66 |
elseif (in_array("-db_popcon",$argv)) db_popcon($argv[2]); |
elseif (in_array("-db_popcon",$argv)) db_popcon($argv[2]); |
| 67 |
elseif (in_array("-dl_popcon",$argv) || in_array("-keep_popcon",$argv)) dl_popcon($argv[2]); |
elseif (in_array("-dl_popcon",$argv) || in_array("-keep_popcon",$argv)) dl_popcon(); |
| 68 |
elseif (in_array("-db_upstream",$argv)) db_upstream((!empty($argv[2])?$argv[2]:'%')); |
elseif (in_array("-db_upstream",$argv)) db_upstream((!empty($argv[2])?$argv[2]:'%')); |
| 69 |
elseif (in_array("-update_all",$argv)) update_all(); |
elseif (in_array("-update_all",$argv)) update_all(); |
| 70 |
elseif (in_array("-update_new",$argv)) update_new(); |
elseif (in_array("-update_new",$argv)) update_new(); |
| 169 |
print "Download Diff.gz of package $pkg => Fallito\n"; |
print "Download Diff.gz of package $pkg => Fallito\n"; |
| 170 |
return false; |
return false; |
| 171 |
} |
} |
| 172 |
function db_add($initial='', $clear_db = true) { |
function db_add($initial='') { |
| 173 |
global $dirs,$dists,$dbconn; |
global $dirs,$dists,$dbconn; |
| 174 |
check_db(); |
check_db(); |
| 175 |
download_sources(); |
download_sources(); |
| 219 |
if ($version != $matches[4]) { |
if ($version != $matches[4]) { |
| 220 |
// only update the dversionmangled field if the versions differ |
// only update the dversionmangled field if the versions differ |
| 221 |
$extra = ",dversionmangled='$matches[4]'"; |
$extra = ",dversionmangled='$matches[4]'"; |
| 222 |
|
// and reset wwiz_type |
| 223 |
|
$extra = ",wwiz_type=NULL"; |
| 224 |
} |
} |
| 225 |
$rst=@pg_exec($db, "UPDATE pkgs SET name='$matches[1]',version='$matches[4]'$extra,maint='$matches[5]',dir='$matches[6]',md5_atsource='$matches[7]',bytes='$matches[8]',dist='$dist',section='$section',uploaders='$matches[10]' WHERE name='$matches[1]' AND dist='$dist'") OR die_status("\nDb adding error =>" . pg_last_error() . "\n"); |
$rst=@pg_exec($db, "UPDATE pkgs SET name='$matches[1]',version='$matches[4]'$extra,maint='$matches[5]',dir='$matches[6]',md5_atsource='$matches[7]',bytes='$matches[8]',dist='$dist',section='$section',uploaders='$matches[10]' WHERE name='$matches[1]' AND dist='$dist'") OR die_status("\nDb adding error =>" . pg_last_error() . "\n"); |
| 226 |
} |
} |
| 243 |
gzclose($zp) ; |
gzclose($zp) ; |
| 244 |
} |
} |
| 245 |
} |
} |
| 246 |
clear_db($db, $clear_db); |
clear_db($db); |
| 247 |
pg_close($db); |
pg_close($db); |
| 248 |
} |
} |
| 249 |
function db_query($pkg,$dist='%') { |
function db_query($pkg,$dist='%') { |
| 250 |
global $dirs,$dbconn; |
global $dirs,$dbconn; |
| 251 |
$db = pg_pconnect($dbconn ) or die_status(pg_last_error($db)); |
$db = pg_pconnect($dbconn ) or die_status(pg_last_error($db)); |
| 252 |
$rsql=pg_exec($db, "SELECT pkgs.* ,mpop_inst FROM (SELECT name,MAX(binpkgs.pop_inst) AS mpop_inst FROM binpkgs GROUP BY name) |
$rsql=pg_exec($db, "SELECT * FROM pkgs |
| 253 |
AS binpkgs INNER JOIN pkgs ON pkgs.name=binpkgs.name |
WHERE name='$pkg' AND dist LIKE '$dist';"); |
|
WHERE pkgs.name='$pkg' AND dist='$dist';"); |
|
| 254 |
while ($res_array=pg_fetch_array($rsql)) { |
while ($res_array=pg_fetch_array($rsql)) { |
| 255 |
print "Package=> " . $res_array['name'] . "\n"; |
print "Package=> " . $res_array['name'] . "\n"; |
| 256 |
print "Version => " . $res_array['version'] . "\n"; |
print "Version => " . $res_array['version'] . "\n"; |
| 260 |
print "Distribution => " . $res_array['dist'] . "\n"; |
print "Distribution => " . $res_array['dist'] . "\n"; |
| 261 |
print "Section => " . $res_array['section'] . "\n"; |
print "Section => " . $res_array['section'] . "\n"; |
| 262 |
print "KBytes => " . number_format ( $res_array['bytes']/1024, 2, ",",".") . "\n"; |
print "KBytes => " . number_format ( $res_array['bytes']/1024, 2, ",",".") . "\n"; |
| 263 |
print "Pop Inst=>" . $res_array['mpop_inst'] . "\n"; |
print "Pop Inst=>" . $res_array['pop_inst'] . "\n"; |
| 264 |
if ($res_array['watch']) { |
if ($res_array['watch']) { |
| 265 |
$uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$res_array['watch']); |
$uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$res_array['watch']); |
| 266 |
print "Version Upstream => " . $uscan_res[0] . "\n"; |
print "Version Upstream => " . $uscan_res['uversion'] . "\n"; |
| 267 |
print "Watch => " . trim($res_array['watch'])."\n"; |
print "Watch => " . trim($res_array['watch'])."\n"; |
| 268 |
print "Watch Warnings => " . $uscan_res[1]; |
print "Watch Warnings => " . $uscan_res['warnings']; |
| 269 |
} |
} |
| 270 |
else print "Watch => Not present" . "\n"; |
else print "Watch => Not present" . "\n"; |
| 271 |
if ($res_array['wwiz_type']) { |
if ($res_array['wwiz_type']) { |
| 272 |
$uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$res_array['wwiz']); |
$uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$res_array['wwiz']); |
| 273 |
print "WWiz Upstream => " . $uscan_res[0] . "\n"; |
print "WWiz Upstream => " . $uscan_res['uversion'] . "\n"; |
| 274 |
print "WWiz => " . $res_array['wwiz']."\n"; |
print "WWiz => " . $res_array['wwiz']."\n"; |
| 275 |
print "WWiz Warings => " . $uscan_res[1]; |
print "WWiz Warings => " . $uscan_res['warnings']; |
| 276 |
} |
} |
| 277 |
print "\n"; |
print "\n"; |
| 278 |
} |
} |
| 321 |
# 183dea9ca3c2e35ffd6cf5eee9501c21 2941637 main/binary-i386/Packages.gz |
# 183dea9ca3c2e35ffd6cf5eee9501c21 2941637 main/binary-i386/Packages.gz |
| 322 |
} |
} |
| 323 |
|
|
| 324 |
function vers_conv($debvers) { |
function vers_conv($debvers, $extendedConv = true) { |
| 325 |
// Strip off the epoch |
// Strip off the epoch |
| 326 |
$pos = strpos($debvers, ':'); |
$pos = strpos($debvers, ':'); |
| 327 |
if ( $pos !== FALSE) { |
if ( $pos !== FALSE) { |
| 334 |
$debvers = substr($debvers, 0, $pos); |
$debvers = substr($debvers, 0, $pos); |
| 335 |
} |
} |
| 336 |
|
|
| 337 |
// strip off repacking indicators |
if ($extendedConv) { |
| 338 |
$debvers = preg_replace("/[-.+~]?(ds|dfsg|debian)(.*)/i", "", $debvers); |
// strip off repacking indicators |
| 339 |
|
$debvers = preg_replace("/[-.+~]?(ds|dfsg|debian)(.*)/i", "", $debvers); |
| 340 |
|
} |
| 341 |
|
|
| 342 |
return $debvers; |
return $debvers; |
| 343 |
} |
} |
| 344 |
function check_db() { |
function check_db() { |
| 345 |
global $dirs,$dbconn; |
global $dirs,$dbconn; |
| 346 |
$db = pg_pconnect($dbconn) or die_status(1/*pg_last_notice($db)*/); |
$db = pg_pconnect($dbconn) or die_status(1/*pg_last_notice($db)*/); |
| 347 |
if (!pg_table_exists($db, "pkgs")) { |
if (!pg_table_exists($db, "pkgs")) { |
| 348 |
pg_exec($db, "CREATE TABLE pkgs (id serial PRIMARY KEY,name text,version text, dversionmangled text,maint text, uploaders text, dir text,watch text,md5_diff text,md5_atsource text,bytes numeric,dist text,section text,up_version text,up_changes text, up_url text,watch_warn text,updated bool, keep_changes bool, wwiz text,wwiz_version text, wwiz_type text, lastcheck timestamp, homepage text, vcs_browser text, lastupvsdebsync timestamp)") or die_status('Error creating table pkgs\n'); |
pg_exec($db, "CREATE TABLE pkgs (id serial PRIMARY KEY,name text,version text, dversionmangled text,maint text, uploaders text, dir text,watch text,md5_diff text,md5_atsource text,bytes numeric,dist text,section text,up_version text,up_changes text, up_url text,watch_warn text,updated bool, keep_changes bool, wwiz text,wwiz_version text, wwiz_type text, lastcheck timestamp, homepage text, vcs text, vcs_type text, vcs_browser text, lastupvsdebsync timestamp, pop_inst numeric,pop_vote numeric)") or die_status('Error creating table pkgs\n'); |
| 349 |
pg_exec($db, "CREATE UNIQUE INDEX idxname on pkgs (name,dist)") or die_status('Errore creating index - ' . pg_last_error($db)); |
pg_exec($db, "CREATE UNIQUE INDEX idxname on pkgs (name,dist)") or die_status('Errore creating index - ' . pg_last_error($db)); |
| 350 |
pg_exec($db, "CREATE INDEX checkx on pkgs (lastcheck)") or die_status('Errore creating index - ' . pg_last_error($db)); |
pg_exec($db, "CREATE INDEX checkx on pkgs (lastcheck)") or die_status('Errore creating index - ' . pg_last_error($db)); |
| 351 |
|
pg_exec($db, "CREATE INDEX maintx on pkgs (maint)") or die_status('Errore creating index - ' . pg_last_error($db)); |
| 352 |
$sw=true; |
$sw=true; |
| 353 |
} |
} |
| 354 |
if (!pg_table_exists($db, "binpkgs")) { |
if (!pg_table_exists($db, "binpkgs")) { |
| 357 |
$sw=true; |
$sw=true; |
| 358 |
} |
} |
| 359 |
if (!pg_table_exists($db, "events")) { |
if (!pg_table_exists($db, "events")) { |
| 360 |
pg_exec($db, "CREATE TABLE events (id serial PRIMARY KEY, name text,type text, dist text, stamp timestamp, content text)") or die_status('Error creating table binpkgs\n'); |
pg_exec($db, "CREATE TABLE events (id serial PRIMARY KEY, name text,type text, dist text, stamp timestamp, content text)") or die_status('Error creating table events\n'); |
| 361 |
pg_exec($db, "CREATE UNIQUE INDEX idxevents on events (name,dist)") or die_status('Errore creating index - ' . pg_last_error($db)); |
pg_exec($db, "CREATE UNIQUE INDEX idxevents on events (name,dist,content)") or die_status('Error creating index - ' . pg_last_error($db)); |
| 362 |
pg_exec($db, "CREATE INDEX pkgxeventtype on events (name,type,dist)") or die_status('Errore creating index - ' . pg_last_error($db)); |
pg_exec($db, "CREATE INDEX pkgxeventtype on events (name,type,dist)") or die_status('Error creating index - ' . pg_last_error($db)); |
| 363 |
|
$sw=true; |
| 364 |
|
} |
| 365 |
|
if (!pg_table_exists($db, "stamps")) { |
| 366 |
|
pg_exec($db, "CREATE TABLE stamps (type text PRIMARY KEY, stamp timestamp, pid text)") or die_status('Error creating table stamps\n'); |
| 367 |
$sw=true; |
$sw=true; |
| 368 |
} |
} |
| 369 |
#if (!pg_table_exists($db,"upstream")){ |
#if (!pg_table_exists($db,"upstream")){ |
| 402 |
#else |
#else |
| 403 |
return "/debian/dists"; |
return "/debian/dists"; |
| 404 |
} |
} |
| 405 |
function clear_db(&$db, $fullClean = true) { |
function clear_db(&$db) { |
| 406 |
#global $dbconn; |
#global $dbconn; |
| 407 |
#if (check_db()) die_status("Il Database era vuoto\n"); |
#if (check_db()) die_status("Il Database era vuoto\n"); |
| 408 |
#download_sources(); |
#download_sources(); |
| 410 |
$sql1= "Delete from binpkgs where id NOT IN |
$sql1= "Delete from binpkgs where id NOT IN |
| 411 |
(select id FROM binpkgs INNER JOIN bin_atsrc USING (name,bin_name,dist))" ; |
(select id FROM binpkgs INNER JOIN bin_atsrc USING (name,bin_name,dist))" ; |
| 412 |
$sql2= "Delete from pkgs where id NOT IN (select id FROM pkgs INNER JOIN pkgs_atsrc USING (name,dist))" ; |
$sql2= "Delete from pkgs where id NOT IN (select id FROM pkgs INNER JOIN pkgs_atsrc USING (name,dist))" ; |
| 413 |
$sql3= "UPDATE pkgs SET wwiz=NULL, wwiz_type=NULL, wwiz_version=NULL WHERE watch IS NOT NULL or watch!=''" ; |
$sql3= "UPDATE pkgs SET wwiz=NULL, wwiz_type=NULL, wwiz_version=NULL WHERE watch IS NOT NULL and watch!=''" ; |
| 414 |
$sql4= "UPDATE pkgs SET up_changes=NULL WHERE wwiz_version=up_version OR up_version=version" ; |
$sql4= "UPDATE pkgs SET up_changes=NULL WHERE updated='1'"; |
| 415 |
if(pg_exec($db,$sql1) && pg_exec($db,$sql2) && (!$fullClean || (pg_exec($db,$sql3) && pg_exec($db,$sql4)))) { |
if(pg_exec($db,$sql1) && pg_exec($db,$sql2) && pg_exec($db,$sql3) && pg_exec($db,$sql4)) { |
| 416 |
print "Db clear complete\n"; |
print "Db clear complete\n"; |
| 417 |
} |
} |
| 418 |
} |
} |
| 419 |
function db_popcon($initial='') { |
function db_popcon($initial='') { |
| 420 |
global $dirs,$dbconn; |
global $dirs,$dbconn; |
| 421 |
$db = pg_pconnect($dbconn) or die_status(pg_last_error($db)); |
$db = pg_pconnect($dbconn) or die_status(pg_last_error($db)); |
| 422 |
$filename=$dirs[popcon_dir] . "/all-popcon-results.txt.gz"; |
$filename=$dirs[popcon_dir] . "/popcon.db"; |
| 423 |
/* package name vote old recent nofiles*/ |
$popcon_db = dba_open("$filename", 'r-', 'db4'); |
| 424 |
$regexp="/Package:\s($initial\S*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/iS"; |
|
| 425 |
$zp = gzopen($filename, "r") or die_status("Could not open $filename"); |
$rsql = pg_exec($db, "SELECT name FROM pkgs"); |
| 426 |
$tin=time(); |
|
| 427 |
if(filesize($filename)>20) { |
while ($res_array=pg_fetch_array($rsql)) { |
| 428 |
#pg_exec($db, "BEGIN TRANSACTION") OR die_status("Impossibile iniziare la transazione"); |
$package = $res_array['name']; |
| 429 |
while (!gzeof($zp)) { |
|
| 430 |
$line = gzgets ($zp,4096) ; |
if (!dba_exists('p:' . $package, $popcon_db)) { |
| 431 |
if (preg_match($regexp,$line,$matches)) { |
continue; |
|
$pop_inst = $matches[2] + $matches[3] + $matches[4] + $matches[5]; |
|
|
#print "\rName => $matches[1] Install => $matches[2] Vote => $matches[3]"; |
|
|
@pg_exec($db, "UPDATE binpkgs SET pop_inst='$pop_inst',pop_vote='$matches[2]' WHERE bin_name='$matches[1]'"); |
|
|
/*$processed++; |
|
|
$elapsed_time=time()-$tin; |
|
|
if (($elapsed_time % 20)==0 AND $updtime!=$elapsed_time) { |
|
|
$updtime=$elapsed_time; |
|
|
$wprocessed=$processed-$wprocessed; |
|
|
$avg_time=$wprocessed/20; |
|
|
$wprocessed=$processed; |
|
|
$countdown=(34701- $processed)/$avg_time; |
|
|
$last_time=time(); |
|
|
} |
|
|
print "\rProcessing Popcon: " . date("i:s",$countdown=$countdown-(time()-$last_time)) . " =>" . (34701-$processed) . " Media $avg_time"; |
|
|
$last_time=time();*/ |
|
|
} |
|
| 432 |
} |
} |
| 433 |
#pg_exec($db, "COMMIT") OR die_status("Impossibile commsionare la transazione"); |
|
| 434 |
|
$inst = dba_fetch("pi:$package", $popcon_db); |
| 435 |
|
$vote = dba_fetch("pv:$package", $popcon_db); |
| 436 |
|
|
| 437 |
|
@pg_exec($db, "UPDATE pkgs SET pop_inst='$inst',pop_vote='$vote' WHERE name='$package'"); |
| 438 |
} |
} |
| 439 |
|
|
| 440 |
|
dba_close($popcon_db); |
| 441 |
@pg_close($db); |
@pg_close($db); |
| 442 |
} |
} |
| 443 |
function dl_popcon() { |
function dl_popcon() { |
| 444 |
global $dirs,$dbconn; |
global $dirs,$dbconn; |
| 445 |
$localfile=$dirs[popcon_dir] . "/all-popcon-results.txt.gz"; |
|
| 446 |
$remotefile="http://popcon.debian.org/all-popcon-results.txt.gz"; |
$localtempfile=$dirs[popcon_dir] . "/popcon.db.new"; |
| 447 |
@file_put_contents($localfile,file_get_contents($remotefile),'w') or die_status("Errore nello scaricare il file popcon\n"); |
$localfile=$dirs[popcon_dir] . "/popcon.db"; |
| 448 |
} |
$remotefile='http://qa.debian.org/data/popcon/popcon.db'; |
| 449 |
function is_updated ($up_vers,$debian_vers) { |
|
| 450 |
if ($up_vers=='') return true; |
$return = 0; |
| 451 |
passthru("dpkg --compare-versions '".escapeshellarg($up_vers)."' le '" . escapeshellarg(vers_conv($debian_vers)) . "'",$great); |
$output = null; |
| 452 |
return !($great); |
exec('/usr/bin/wget -qNc -O'.escapeshellarg($localtempfile).' ' . escapeshellarg($remotefile), $output, $return); |
| 453 |
|
|
| 454 |
|
if ($return != 0) { |
| 455 |
|
echo __FUNCTION__ . "wget exited with status $return!\n"; |
| 456 |
|
return false; |
| 457 |
|
} |
| 458 |
|
|
| 459 |
|
return copy($localtempfile, $localfile); |
| 460 |
} |
} |
| 461 |
function db_upstream($initial='%') { |
function is_updated ($up_vers,$debian_vers, $dversionAsIs = false) { |
| 462 |
global $dirs,$dbconn; |
if ($up_vers=='') return 1; |
| 463 |
|
|
| 464 |
|
$extendedConv = true; |
| 465 |
|
|
| 466 |
|
if ($up_vers === $debian_vers) $dversionAsIs = true; |
| 467 |
|
|
| 468 |
|
if (strpos(strtolower($up_vers), 'dfsg') !== false && strpos(strtolower($debian_vers), 'dfsg') !== false) { |
| 469 |
|
$extendedConv = false; |
| 470 |
|
} |
| 471 |
|
|
| 472 |
|
passthru("dpkg --compare-versions ".escapeshellarg($up_vers)." le " . escapeshellarg($dversionAsIs?$debian_vers:vers_conv($debian_vers, $extendedConv)),$great); |
| 473 |
|
|
| 474 |
|
return (int)!($great); |
| 475 |
|
} |
| 476 |
|
function db_upstream($initial='%', $checkStamps = false, $limit = null) { |
| 477 |
|
global $dirs, $dbconn, $minimumAge; |
| 478 |
|
|
| 479 |
check_db(); |
check_db(); |
| 480 |
$db = pg_pconnect($dbconn) ; |
$db = pg_pconnect($dbconn) ; |
| 481 |
events::DB($db); |
events::DB($db); |
| 482 |
$rsql=pg_exec($db, "SELECT id, name,dist,up_version,version,watch,lastupvsdebsync FROM pkgs WHERE watch is not null AND name LIKE '$initial' ORDER BY name DESC"); |
|
| 483 |
|
$postWHERE = ''; |
| 484 |
|
if ($checkStamps) { |
| 485 |
|
$postWHERE = "AND (lastcheck<='".sqldate(time() - ($minimumAge*24*3600))."' OR lastcheck IS NULL)"; |
| 486 |
|
} |
| 487 |
|
|
| 488 |
|
$postORDER = ''; |
| 489 |
|
if ($limit !== null && is_int($limit)) { |
| 490 |
|
$postORDER = 'LIMIT ' . $limit; |
| 491 |
|
} |
| 492 |
|
|
| 493 |
|
$rsql=pg_exec($db, "SELECT id, name,dist,up_version,version,watch,lastupvsdebsync FROM pkgs WHERE watch is not null AND name LIKE '$initial' $postWHERE ORDER BY lastcheck DESC $postORDER"); |
| 494 |
$tot=pg_numrows($rsql); |
$tot=pg_numrows($rsql); |
| 495 |
|
|
| 496 |
while ($res_array=pg_fetch_array($rsql)) { |
while ($res_array=pg_fetch_array($rsql)) { |
| 497 |
|
|
| 498 |
$uscan_res=uscan_foo($res_array['name'],$res_array['version'],$res_array['watch']); |
$uscan_res=uscan_foo($res_array['name'],$res_array['version'],$res_array['watch']); |
| 499 |
|
|
| 500 |
#print $uscan_res[0] . "\n Name => $res_array[name]\n"; |
#print $uscan_res['uversion'] . "\n Name => $res_array[name]\n"; |
| 501 |
$version = $res_array['version']; |
$version = $res_array['version']; |
| 502 |
$dversionmangled = $res_array['version']; |
$dversionmangled = $res_array['version']; |
| 503 |
$lastupvsdebsync = $res_array['lastupvsdebsync']; |
$lastupvsdebsync = $res_array['lastupvsdebsync']; |
| 504 |
|
$mangle = true; |
| 505 |
|
|
| 506 |
print "\rVersion=>" . $uscan_res[3]; |
print "\rVersion=>" . $uscan_res['dversion']; |
| 507 |
if ($uscan_res[3]!=null) $version=$uscan_res[3]; |
if ($uscan_res['dversion']!=null) $version=$uscan_res['dversion']; |
| 508 |
if ($uscan_res[5]!=null && $uscan_res[5] != vers_conv($res_array['version'])) $dversionmangled=$uscan_res[5]; |
if ($uscan_res['dversionmangled']!=null && $uscan_res['dversionmangled'] != vers_conv($res_array['version'])) { |
| 509 |
|
$dversionmangled=$uscan_res['dversionmangled']; |
| 510 |
|
$mangle = false; |
| 511 |
|
} |
| 512 |
|
|
| 513 |
|
$up_url=iconv("ISO-8859-1","UTF-8",$uscan_res['uurl']); |
| 514 |
|
$up_version=iconv("ISO-8859-1","UTF-8",$uscan_res['uversion']); |
| 515 |
|
|
| 516 |
$updated = $uscan_res[4]; |
$updated = $uscan_res['updated']; |
| 517 |
|
|
| 518 |
/*if (!$updated)*/ { |
/*if (!$updated)*/ { |
| 519 |
$updated=is_updated($uscan_res[0], $dversionmangled); |
$updated=is_updated($uscan_res['uversion'], $dversionmangled, !$mangle); |
| 520 |
} |
} |
| 521 |
|
|
| 522 |
if (!$updated) { |
if (!$updated) { |
| 523 |
events::newVersion($res_array['name'], $res_array['version'], $uscan_res[0], $res_array['dist']); |
events::newVersion($res_array['name'], $res_array['version'], $uscan_res['uversion'], $res_array['dist'], $up_url); |
| 524 |
} else { |
} else { |
| 525 |
$lastupvsdebsync = sqldate(); |
$lastupvsdebsync = sqldate(); |
| 526 |
} |
} |
| 527 |
|
|
| 528 |
if ($uscan_res[0]!=$res_array[up_version]) ($keep_changes=1); |
if ($lastupvsdebsync === null) { |
| 529 |
else $keep_changes=0; |
$lastupvsdebsync = sqldate(0); |
| 530 |
|
} |
| 531 |
|
|
| 532 |
$up_url=iconv("ISO-8859-1","UTF-8",$uscan_res[2]); |
if ($uscan_res['uversion']!=$res_array[up_version]) ($keep_changes=1); |
| 533 |
$up_version=iconv("ISO-8859-1","UTF-8",$uscan_res[0]); |
else $keep_changes=0; |
| 534 |
|
|
| 535 |
$watch_warn=''; |
$watch_warn=''; |
| 536 |
if($uscan_res[1] != null) { |
if($uscan_res['warnings'] != null) { |
| 537 |
$watch_warn=pg_escape_string(iconv("ISO-8859-1","UTF-8", $uscan_res[1])); |
$watch_warn=pg_escape_string(iconv("ISO-8859-1","UTF-8", $uscan_res['warnings'])); |
| 538 |
} |
} |
| 539 |
|
|
| 540 |
pg_exec($db, "UPDATE pkgs SET up_version='" . pg_escape_string($up_version) . "', dversionmangled='".pg_escape_string($dversionmangled)."',up_url='" . pg_escape_string($up_url) . "', watch_warn='" . $watch_warn . "',keep_changes='$keep_changes', wwiz_version=NULL, wwiz_type=NULL, wwiz=NULL, updated='$updated', lastcheck=now(), lastupvsdebsync='$lastupvsdebsync' WHERE id=$res_array[id]") or die_status("Error in update pkgs upstream"); |
pg_exec($db, "UPDATE pkgs SET up_version='" . pg_escape_string($up_version) . "', dversionmangled='".pg_escape_string($dversionmangled)."',up_url='" . pg_escape_string($up_url) . "', watch_warn='" . $watch_warn . "',keep_changes='$keep_changes', wwiz_version=NULL, wwiz_type=NULL, wwiz=NULL, updated='$updated', lastcheck=now(), lastupvsdebsync='$lastupvsdebsync' WHERE id=$res_array[id]") or die_status("Error in update pkgs upstream"); |
| 541 |
#print "\rUpdated " . $res_array['name'] . " => $updated Up Version => ". $uscan_res[0]; |
#print "\rUpdated " . $res_array['name'] . " => $updated Up Version => ". $uscan_res['uversion']; |
| 542 |
print "\t Upstream left => " . $tot --; |
print "\t Upstream left => " . $tot --; |
| 543 |
# } |
# } |
| 544 |
# else print "Added ". $res_array['name'] ."\n"; |
# else print "Added ". $res_array['name'] ."\n"; |
| 546 |
|
|
| 547 |
# print "Package=> " . $res_array['name'] . "\n"; |
# print "Package=> " . $res_array['name'] . "\n"; |
| 548 |
# print "Version => " . $res_array['version'] . "\n"; |
# print "Version => " . $res_array['version'] . "\n"; |
| 549 |
# print "Upstream Ver=> " . $uscan_res[0] . "\n"; |
# print "Upstream Ver=> " . $uscan_res['uversion'] . "\n"; |
| 550 |
#print "Watch warings=> " . $uscan_res[1] . "\n"; |
#print "Watch warings=> " . $uscan_res['warnings'] . "\n"; |
| 551 |
# } |
# } |
| 552 |
} |
} |
| 553 |
print "\n"; |
print "\n"; |
| 674 |
if ($warnings=='') $warnings=null; |
if ($warnings=='') $warnings=null; |
| 675 |
if ($deb_mangled_vers=='') $deb_mangled_vers=null; |
if ($deb_mangled_vers=='') $deb_mangled_vers=null; |
| 676 |
|
|
| 677 |
return array($upstream, $warnings, $up_url, $deb_vers, $updated, $deb_mangled_vers); |
$ret = array(); |
| 678 |
|
$ret['uversion'] = $upstream; |
| 679 |
|
$ret['warnings'] = $warnings; |
| 680 |
|
$ret['uurl'] = $up_url; |
| 681 |
|
$ret['dversion'] = $deb_vers; |
| 682 |
|
$ret['dversionmangled'] = $deb_mangled_vers; |
| 683 |
|
$ret['updated'] = $updated; |
| 684 |
|
|
| 685 |
|
return $ret; |
| 686 |
} |
} |
| 687 |
function db_up_error() { |
function db_up_error() { |
| 688 |
global $dbconn; |
global $dbconn; |
| 716 |
} |
} |
| 717 |
pg_close($db); |
pg_close($db); |
| 718 |
} |
} |
| 719 |
function watch_wizard($src_name='%'){ |
function watch_wizard($src_name='%', $checkStamps = false, $limit = null){ |
| 720 |
global $dirs,$dbconn,$sfIgnore,$watchFileExts,$watchFileDversionMangle,$watchFormat; |
global $dirs,$dbconn,$sfIgnore,$watchFileExts,$watchFileDversionMangle,$watchFormat,$minimumAge; |
| 721 |
$db = pg_pconnect($dbconn) or die_status ("Db error"); |
$db = pg_pconnect($dbconn) or die_status ("Db error"); |
| 722 |
$checked=$errors=$notfound=$verok=$notmatch=0; |
$checked=$errors=$notfound=$verok=$notmatch=0; |
| 723 |
|
|
| 758 |
} |
} |
| 759 |
} |
} |
| 760 |
|
|
| 761 |
$sqlstring="SELECT mpop_inst,name,pkgs.version,pkgs.dversionmangled,pkgs.section,pkgs.dist,tot_up_error, tot_avg_error_date, wwiz_version FROM pkgs INNER JOIN |
$postWHERE = ''; |
| 762 |
(Select max(pop_inst) as mpop_inst,SUM(up_error) as tot_up_error,AVG(avg_error_date) as tot_avg_error_date,name,dist FROM binpkgs GROUP BY name,dist HAVING max(pop_inst) IS NOT NULL) as binpkgs using(name,dist) |
if ($checkStamps) { |
| 763 |
WHERE (watch IS NULL OR watch='') AND name LIKE '$src_name' ORDER BY mpop_inst DESC"; |
$postWHERE = "AND (lastcheck<='".sqldate(time() - ($minimumAge*24*3600))."' OR lastcheck IS NULL)" |
| 764 |
|
. " AND wwiz_type!='no_cright' AND wwiz_type!='notmatch'"; |
| 765 |
|
} |
| 766 |
|
|
| 767 |
|
$postORDER = ''; |
| 768 |
|
if ($limit !== null && is_int($limit)) { |
| 769 |
|
$postORDER = 'LIMIT ' . $limit; |
| 770 |
|
} |
| 771 |
|
|
| 772 |
|
$sqlstring="SELECT name,version,dversionmangled,section,dist, wwiz_version FROM pkgs |
| 773 |
|
WHERE (watch IS NULL OR watch='') AND name LIKE '$src_name' $postWHERE ORDER BY lastcheck DESC $postORDER"; |
| 774 |
$rsql=pg_exec($db, $sqlstring); |
$rsql=pg_exec($db, $sqlstring); |
| 775 |
|
|
| 776 |
while ($res_array=pg_fetch_array($rsql)) { |
while ($res_array=pg_fetch_array($rsql)) { |
| 853 |
if (empty($generatedWatches)) { |
if (empty($generatedWatches)) { |
| 854 |
$notmatch++; |
$notmatch++; |
| 855 |
$contents=iconv("ISO-8859-1","UTF-8",$contents); |
$contents=iconv("ISO-8859-1","UTF-8",$contents); |
| 856 |
pg_exec($db, "UPDATE pkgs SET wwiz_version=NULL, wwiz='" . pg_escape_string($contents) . "', wwiz_type='notmatch', up_url='', up_changes='',keep_changes='f' where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'"); |
pg_exec($db, "UPDATE pkgs SET wwiz_version=NULL, wwiz='" . pg_escape_string($contents) . "', wwiz_type='notmatch', up_url='', up_changes='', lastcheck=now(), keep_changes='f' where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'"); |
| 857 |
|
|
| 858 |
} else { |
} else { |
| 859 |
|
|
| 871 |
|
|
| 872 |
$uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$watch); |
$uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$watch); |
| 873 |
|
|
| 874 |
if ($uscan_res[0] && levenshtein($uscan_res[0], $res_array['version']) < strlen($res_array['version'])) { |
if ($uscan_res['uversion'] && levenshtein($uscan_res['uversion'], $res_array['version']) < strlen($res_array['version'])) { |
| 875 |
break; |
break; |
| 876 |
} |
} |
| 877 |
} |
} |
| 878 |
|
|
| 879 |
if ($uscan_res[1] && !$uscan_res[0]) { |
if ($uscan_res['warnings'] && !$uscan_res['uversion']) { |
| 880 |
pg_exec($db, "UPDATE pkgs SET wwiz_version=NULL, wwiz='" . pg_escape_string($uscan_res[1]) . "', wwiz_type='error', up_url='', up_changes='', keep_changes='f' where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'"); |
pg_exec($db, "UPDATE pkgs SET wwiz_version=NULL, wwiz='" . pg_escape_string($uscan_res['warnings']) . "', wwiz_type='error', up_url='', up_changes='', lastcheck=now(), keep_changes='f' where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'"); |
| 881 |
$errors++; |
$errors++; |
| 882 |
} else { |
} else { |
| 883 |
$verok++; |
$verok++; |
| 884 |
if ($uscan_res[0] != $res_array['wwiz_version']) { |
if ($uscan_res['uversion'] != $res_array['wwiz_version']) { |
| 885 |
$keep_changes = 1; |
$keep_changes = 1; |
| 886 |
} else { |
} else { |
| 887 |
$keep_changes = 0; |
$keep_changes = 0; |
| 888 |
} |
} |
| 889 |
|
|
| 890 |
$dversionmangled = $res_array[version]; |
$dversionmangled = $res_array[version]; |
| 891 |
if ($uscan_res[5]!=null && $uscan_res[5] != vers_conv($res_array['version'])) $dversionmangled=$uscan_res[5]; |
if ($uscan_res['dversionmangled']!=null && $uscan_res['dversionmangled'] != vers_conv($res_array['version'])) $dversionmangled=$uscan_res['dversionmangled']; |
| 892 |
|
|
| 893 |
$updated = $uscan_res[4]; |
$updated = $uscan_res['updated']; |
| 894 |
/*if ($updated)*/ { |
/*if ($updated)*/ { |
| 895 |
$updated = is_updated($uscan_res[0], $dversionmangled); |
$updated = is_updated($uscan_res['uversion'], $dversionmangled, $dversionmangled != $uscan_res['dversionmangled']); |
| 896 |
} |
} |
| 897 |
|
|
| 898 |
/*if (!$updated) { |
/*if (!$updated) { |
| 899 |
events::newVersion($res_array['name'], $res_array['version'], $uscan_res[0], $res_array['dist']); |
events::newVersion($res_array['name'], $res_array['version'], $uscan_res['uversion'], $res_array['dist']); |
| 900 |
}*/ |
}*/ |
| 901 |
|
|
| 902 |
pg_exec($db, "UPDATE pkgs SET wwiz='" . pg_escape_string($watch) ."', wwiz_type='watch', wwiz_version='" . pg_escape_string($uscan_res[0]) . "',dversionmangled='".pg_escape_string($dversionmangled)."', up_url='" . pg_escape_string($uscan_res[2]) . "', keep_changes='$keep_changes', updated='$updated', lastcheck=now() where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'"); |
pg_exec($db, "UPDATE pkgs SET wwiz='" . pg_escape_string($watch) ."', wwiz_type='watch', wwiz_version='" . pg_escape_string($uscan_res['uversion']) . "',dversionmangled='".pg_escape_string($dversionmangled)."', up_url='" . pg_escape_string($uscan_res['uurl']) . "', keep_changes='$keep_changes', updated='$updated', lastcheck=now() where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'"); |
| 903 |
} |
} |
| 904 |
} |
} |
| 905 |
} else { |
} else { |
| 928 |
foreach ($dists as $dist) { |
foreach ($dists as $dist) { |
| 929 |
$id=dbqa_conn($dir1 . "dehs_qa_" . $dist . ".db",'n'); |
$id=dbqa_conn($dir1 . "dehs_qa_" . $dist . ".db",'n'); |
| 930 |
$db = pg_pconnect($dbconn) or die_status ("Db error"); |
$db = pg_pconnect($dbconn) or die_status ("Db error"); |
| 931 |
$sql="SELECT name, id, up_version, wwiz_version, watch, wwiz_type, watch_warn, version, dversionmangled FROM pkgs WHERE dist='$dist'"; |
$sql="SELECT name, id, up_version, wwiz_version, watch, wwiz_type, watch_warn, version, dversionmangled, updated FROM pkgs WHERE dist='$dist'"; |
| 932 |
$rsql=pg_exec($db, $sql); |
$rsql=pg_exec($db, $sql); |
| 933 |
while($res_array=pg_fetch_array($rsql)) { |
while($res_array=pg_fetch_array($rsql)) { |
| 934 |
|
|
| 939 |
if ($res_array['wwiz_type']=="watch") $wwiz=$res_array['wwiz_version']; |
if ($res_array['wwiz_type']=="watch") $wwiz=$res_array['wwiz_version']; |
| 940 |
else $wwiz=$res_array[wwiz_type]; |
else $wwiz=$res_array[wwiz_type]; |
| 941 |
|
|
| 942 |
|
$updated = $res_array['updated']? 'yes' : 'no'; |
| 943 |
|
|
| 944 |
$xml="<data><id>$res_array[id]</id>" . |
$xml="<data><id>$res_array[id]</id>" . |
| 945 |
"<up_version>$version</up_version>" . |
"<up_version>$version</up_version>" . |
| 946 |
"<dversion>$res_array[version]</dversion>" . |
"<dversion>$res_array[version]</dversion>" . |
| 947 |
"<dversionmangled>$res_array[dversionmangled]</dversionmangled>" . |
"<dversionmangled>$res_array[dversionmangled]</dversionmangled>" . |
| 948 |
|
"<updated>$updated</updated>" . |
| 949 |
"<wwiz>$wwiz</wwiz>" . |
"<wwiz>$wwiz</wwiz>" . |
| 950 |
"</data>"; |
"</data>"; |
| 951 |
$value=addslashes($xml); |
$value=addslashes($xml); |
| 964 |
} |
} |
| 965 |
} |
} |
| 966 |
function update_all() { |
function update_all() { |
| 967 |
global $email; |
global $email, $timeStamp_basedCheck; |
| 968 |
$intime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2); |
$intime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2); |
| 969 |
echo __FUNCTION__ . ' started the ' . $intime . "\n"; |
echo __FUNCTION__ . ' started the ' . $intime . "\n"; |
| 970 |
db_add(); |
db_add(); |
|
dl_popcon(); |
|
|
db_popcon(); |
|
| 971 |
dl_diffs(); |
dl_diffs(); |
| 972 |
db_up_error(); |
db_up_error(); |
| 973 |
db_upstream(); |
db_upstream('%', in_array('all', $timeStamp_basedCheck)); |
| 974 |
watch_wizard(); |
watch_wizard('%', in_array('all', $timeStamp_basedCheck)); |
| 975 |
up_changes(); |
up_changes(); |
| 976 |
dehsqa_db(); |
dehsqa_db(); |
| 977 |
$endtime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2); |
$endtime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2); |
| 985 |
global $email_all; |
global $email_all; |
| 986 |
$intime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2); |
$intime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2); |
| 987 |
echo __FUNCTION__ . ' started the ' . $intime . "\n"; |
echo __FUNCTION__ . ' started the ' . $intime . "\n"; |
| 988 |
db_add('',false); |
db_add(); |
|
dl_popcon(); |
|
|
db_popcon(); |
|
| 989 |
|
|
| 990 |
global $dbconn; |
global $dbconn; |
| 991 |
check_db(); |
check_db(); |
| 992 |
$db = pg_pconnect($dbconn); |
$db = pg_pconnect($dbconn); |
| 993 |
$sql="SELECT name FROM pkgs WHERE (md5_diff!=md5_atsource or md5_diff is null)"; |
$sql="SELECT name FROM pkgs WHERE (md5_diff!=md5_atsource or md5_diff is null) or (lastcheck is null and watch is not null)"; |
| 994 |
$rsql=pg_exec($db, $sql); |
$rsql=pg_exec($db, $sql); |
| 995 |
$res_array=pg_fetch_all($rsql); |
$res_array=pg_fetch_all($rsql); |
| 996 |
pg_close($db); |
pg_close($db); |
| 1049 |
} else if (is_int($msg) && $status == 1 /* default */) { |
} else if (is_int($msg) && $status == 1 /* default */) { |
| 1050 |
die($msg); |
die($msg); |
| 1051 |
} else { |
} else { |
| 1052 |
echo $msg; |
fwrite(STDERR, $msg); |
| 1053 |
die($status); |
die($status); |
| 1054 |
} |
} |
| 1055 |
} |
} |
| 1056 |
|
|
|
class events |
|
|
{ |
|
|
|
|
|
function DB($db = null) |
|
|
{ |
|
|
static $_db; |
|
|
|
|
|
if ($db === null) { |
|
|
return $_db; |
|
|
} |
|
|
$_db = $db; |
|
|
} |
|
|
|
|
|
function newVersion($sourcePackage, $currentVersion, $newVersion, $distribution, $downloadLink = '') |
|
|
{ |
|
|
global $base, $sendNotifications; |
|
|
|
|
|
if (!$sendNotifications) { |
|
|
return null; |
|
|
} |
|
|
|
|
|
$eventsId = events::_searchEvent(__FUNCTION__, $sourcePackage, $newVersion); |
|
|
|
|
|
if (empty($eventsId)) { |
|
|
echo "Skipping ".__FUNCTION__." event for v$newVersion of $sourcePackage; already sent"; |
|
|
return null; |
|
|
} |
|
|
|
|
|
$tpl = file_get_contents($base . '/tpls/new_version.mail.tpl'); |
|
|
|
|
|
$search = array(); |
|
|
$replace = array(); |
|
|
|
|
|
$search [] = '#PACKAGE#'; |
|
|
$replace[] = $sourcePackage; |
|
|
$search [] = '#DVERSION#'; |
|
|
$replace[] = $currentVersion; |
|
|
$search [] = '#UVERSION#'; |
|
|
$replace[] = $newVersion; |
|
|
$search [] = '#DISTRO#'; |
|
|
$replace[] = $distribution; |
|
|
$search [] = '#LINK#'; |
|
|
$replace[] = $downloadLink; |
|
|
|
|
|
$message = str_replace($search, $replace, $tpl); |
|
|
$subject = events::_extractHeader('subject', $message); |
|
|
$to = events::_extractHeader('to', $message); |
|
|
$bcc = events::_extractHeader('bcc', $message); |
|
|
|
|
|
$extraHeaders = events::_getDefaultExtraHeaders(); |
|
|
$extraHeaders[] = 'X-DEHS-UVERSION: ' . $newVersion; |
|
|
$extraHeaders[] = 'BCC: ' . $bcc; |
|
|
|
|
|
if (!mail($to, $subject, $message, implode("\r\n", $extraHeaders))) |
|
|
return false; |
|
|
|
|
|
events::_recordEvent(__FUNCTION__, $sourcePackage, $distribution, $newVersion); |
|
|
} |
|
|
|
|
|
function _extractHeader($header, &$message) |
|
|
{ |
|
|
$regex = '/^' . preg_quote($header, '/') . ':([ \t]*)(.*)$/i'; |
|
|
|
|
|
$matches = array(); |
|
|
|
|
|
if (preg_match($regex, $message, $matches)) { |
|
|
|
|
|
$spacer = $matches[1]; |
|
|
$value = $matches[2]; |
|
|
|
|
|
$message = ltrim(preg_replace($regex, '', $message)); |
|
|
|
|
|
return $value; |
|
|
|
|
|
} |
|
|
return false; |
|
|
} |
|
|
|
|
|
function _getDefaultExtraHeaders() |
|
|
{ |
|
|
global $notificationsMailFrom; |
|
|
$headers = array(); |
|
|
|
|
|
$headers[] = 'From: ' . $notificationsMailFrom; |
|
|
$headers[] = 'X-PTS-Approved: sure'; |
|
|
$headers[] = 'X-BY-DEHS: sure'; |
|
|
|
|
|
return $headers; |
|
|
} |
|
|
|
|
|
function _recordEvent($eventType, $packageName, $distribution, $content) |
|
|
{ |
|
|
$db = events::DB(); |
|
|
|
|
|
$eventType = pg_escape_string($eventType); |
|
|
$packageName = pg_escape_string($packageName); |
|
|
$distribution = pg_escape_string($distribution); |
|
|
$content = pg_escape_string($content); |
|
|
|
|
|
pg_exec($db, "INSERT INTO events (name,type,dist,content,stamp) VALUES ('$packageName','$eventType','$distribution','$content',now())") OR die_status("Failed to record event: $packageName|$eventType|$distribution|$content"); |
|
|
} |
|
|
|
|
|
function _searchEvent($eventType, $packageName, $contentSearch, $distribution = '') |
|
|
{ |
|
|
$db = events::DB(); |
|
|
|
|
|
$eventType = pg_escape_string($eventType); |
|
|
$packageName = pg_escape_string($packageName); |
|
|
|
|
|
$result = pg_exec($db, "SELECT id FROM events WHERE name='$packageName' and type='$eventType' ".($distribution? "and dist='$distribution'":'')." and content LIKE '$contentSearch'"); |
|
|
return pg_fetch_all($result); |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
| 1057 |
function sqldate($timestamp=null) { |
function sqldate($timestamp=null) { |
| 1058 |
if ($timestamp===null) $timestamp=time(); |
if ($timestamp===null) $timestamp=time(); |
| 1059 |
return gmdate("Y-m-d H:i:s", $timestamp); |
return gmdate("Y-m-d H:i:s", $timestamp); |