username = $username; $this->pts = $pts; $this->gam = $gam; } function myclone() { $ret = new Ptsgam($this->username, $this->pts, $this->gam); return ($ret); } function add($pts) { $this->pts += $pts; $this->gam++; } function snormpts() { $ret = sprintf ("%.3f", $this->normpts() * 100.0); if (strchr($ret, ".")) { $ret = rtrim(rtrim($ret, "0"), "."); } return ($ret); } function normpts() { if ($this->gam == 0) return (0); else return ($this->pts / $this->gam); } } // class Ptsgam { function ptsgam_cmp($a, $b) { $norma = $a->normpts(); $normb = $b->normpts(); if ($norma == $normb) { if ($a->gam == $b->gam) return (0); else return ($a->gam < $b->gam ? 1 : -1); } else return (($norma < $normb) ? 1 : -1); } /* types of placing based on delta time */ define('TY_DTIME_TRI', 0); define('TY_DTIME_MON', 1); define('TY_DTIME_WEE', 2); /* subtypes of placing based on number of played games */ define('SUBTY_FREQ_LO', 0); define('SUBTY_FREQ_HI', 1); function placings_show($user) { $mtime = placing_time(); $tm = placing_date($mtime); $ret = sprintf("

CLASSIFICHE

(aggiornate alle ore %s del %s)", $tm[0], $tm[1]); $tmwee = placing_date($mtime - WEE_LIMIT + (3600)); $ret .= sprintf("", $tmwee[1], $tm[1], WEE_MAX_GAMES, placing_show($user, TY_DTIME_WEE, SUBTY_FREQ_HI) ); $ret .= sprintf("\n", $tmwee[1], $tm[1], WEE_MAX_GAMES, WEE_MIN_GAMES, placing_show($user, TY_DTIME_WEE, SUBTY_FREQ_LO) ); $tmmon = placing_date($mtime - MON_LIMIT + (3600)); $ret .= sprintf("", $tmmon[1], $tm[1], MON_MAX_GAMES, placing_show($user, TY_DTIME_MON, SUBTY_FREQ_HI) ); $ret .= sprintf("\n", $tmmon[1], $tm[1], MON_MAX_GAMES, MON_MIN_GAMES, placing_show($user, TY_DTIME_MON, SUBTY_FREQ_LO) ); $tmtri = placing_date($mtime - TRI_LIMIT + (3600)); $ret .= sprintf("", $tmtri[1], $tm[1], TRI_MAX_GAMES, placing_show($user, TY_DTIME_TRI, SUBTY_FREQ_HI)); $ret .= sprintf("", $tmtri[1], $tm[1], TRI_MAX_GAMES, TRI_MIN_GAMES, placing_show($user, TY_DTIME_TRI, SUBTY_FREQ_LO)); $ret .= sprintf("

Settimanale
dal %s al %s
(non meno di %d partite)

%s

Settimanale
dal %s al %s
(meno di %d partite, più di %d)

%s

Mensile
dal %s al %s
(non meno di %d partite)

%s

Mensile
dal %s al %s
(meno di %d partite, più di %d)

%s

Trimestrale
dal %s al %s
(non meno di %d partite)

%s

Trimestrale
dal %s al %s
(meno di %d partite, più di %d)

%s
"); return ($ret); } function placing_time_file() { if (($fp = @fopen(LEGAL_PATH."/class_wee_lo.log", 'r')) == FALSE) { return (FALSE); } $st = fstat($fp); fclose($fp); return ( $st['mtime'] ); } function placing_time_pgsql() { GLOBAL $G_dbpfx; if (($bdb = BriskDB::create()) == FALSE) { log_crit("placing: database connection failed"); return (FALSE); } $mti_sql = sprintf("SELECT CAST(EXTRACT(EPOCH FROM mtime) AS INTEGER) as mtime FROM %sbin5_places_mtime WHERE code = 0;", $G_dbpfx); if (($mti_pg = pg_query($bdb->dbconn->db(), $mti_sql)) == FALSE || pg_numrows($mti_pg) == 0) { // no point found, abort log_crit("placing: get placing mtime failed [$mti_sql]"); return (FALSE); } $mti_pg = pg_fetch_object($mti_pg, 0); return ($mti_pg->mtime); } function placing_time() { GLOBAL $G_dbasetype; $fun_name = "placing_time_${G_dbasetype}"; return ($fun_name()); } function placing_date($mtime) { return array( date('G:i', $mtime), date('j/n/y', $mtime) ); } function placing_show_file($user, $ty, $subty) { $tail = FALSE; $suff = ""; switch($ty) { case TY_DTIME_TRI: $suff = "tri_"; break; case TY_DTIME_MON: $suff = "mon_"; break; case TY_DTIME_WEE: $suff = "wee_"; break; } switch($subty) { case TY_FREQ_LO: $suff .= "lo"; break; case TY_FREQ_HI: $suff .= "hi"; break; } if (($fp = @fopen(LEGAL_PATH."/class_".$suff.".log", 'r')) == FALSE) { return (FALSE); } // MLANG $ret = sprintf(""); $old_normpts = 1000000000; $old_gam = -1; for ($i = 0 ; !feof($fp) ; $i++) { $bf = fgets($fp, 4096); $ar = csplitter($bf, '|'); $pg = new Ptsgam($ar[0], $ar[1], $ar[2]); if ($pg->username == "") continue; if ($pg->normpts() == $old_normpts && $pg->gam == $old_gam) $i--; if ($i < TOP_NUM) { $ret .= sprintf("", $i+1, ($pg->username == $user->name ? "" : ""), xcape($pg->username), ($pg->username == $user->name ? "" : ""), $pg->snormpts(), $pg->pts, $pg->gam); } if ($user != FALSE) { if (strcasecmp($pg->username, $user->name) == 0 && $i >= TOP_NUM) { $tail = sprintf(""); $tail .= sprintf("", $i+1, ($pg->username == $user->name ? "" : ""), xcape($pg->username), ($pg->username == $user->name ? "" : ""), $pg->snormpts(), $pg->pts, $pg->gam); } } $old_normpts = $pg->normpts(); $old_gam = $pg->gam; } if ($tail != FALSE) { $ret .= $tail; } $ret .= "
Pos.UtenteScore(Punti/Partite)
%d%s%s%s%s(%d/%d)
. . . . . . . . . .
%d%s%s%s%s(%d/%d)
"; fclose($fp); return ($ret); } // // function placing_show_pgsql($user, $ty, $subty) { GLOBAL $G_dbpfx; if (($bdb = BriskDB::create()) == FALSE) { log_crit("placing: database connection failed"); return (""); } if ($user != FALSE) { $pla_sql = sprintf("SELECT * from %sbin5_places where type = %d AND (rank <= %d OR ucode = '%s');", $G_dbpfx, ($ty * 2) + $subty, TOP_NUM, escsql($user->code)); } else { $pla_sql = sprintf("SELECT * from %sbin5_places where type = %d AND rank <= %d;", $G_dbpfx, ($ty * 2) + $subty, TOP_NUM); } if (($pla_pg = pg_query($bdb->dbconn->db(), $pla_sql)) == FALSE || pg_numrows($pla_pg) == 0) { // no point found, abort log_crit("placing: get placing list failed [$pla_sql]"); return (""); } // MLANG $ret = sprintf(""); for ($i = 0 ; $i < pg_numrows($pla_pg) ; $i++) { $pla_obj = pg_fetch_object($pla_pg,$i); $ein = ""; $eou = ""; if ($user != FALSE) { if ($user->code == $pla_obj->ucode) { $ein = ""; $eou = ""; } } /* when the user is far from the top-ten we place a ... separator before it */ if ($pla_obj->rank > TOP_NUM) { $ret .= sprintf(""); } $ret .= sprintf("", $pla_obj->rank, $ein, xcape($pla_obj->login), $eou, $ein, $pla_obj->score, $eou, $ein, $pla_obj->pts, $pla_obj->games, $eou); } $ret .= "
Pos.UtenteScore(Punti/Partite)
. . . . . . . . . .
%d%s%s%s%s%12.3f%s%s(%d/%d)%s
"; return ($ret); } function placing_show($user, $ty, $subty) { GLOBAL $G_dbasetype; $fun_name = "placing_show_${G_dbasetype}"; return ($fun_name($user, $ty, $subty)); } ?>