X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Fbriskin5%2FObj%2Fplacing.phh;h=ad69d50b8a8646ba8d4d4d76377c557a94c06f96;hb=995b984df0dbfd59e8d6bc1727d35cde44e52001;hp=cd2a87137f29e6127ff8f2b71726c190d902e2eb;hpb=1721ff2bb2e90719658b2687874b1fbdfc1dcff5;p=brisk.git diff --git a/web/briskin5/Obj/placing.phh b/web/briskin5/Obj/placing.phh index cd2a871..ad69d50 100644 --- a/web/briskin5/Obj/placing.phh +++ b/web/briskin5/Obj/placing.phh @@ -2,7 +2,7 @@ /* * brisk - placing.phh * - * Copyright (C) 2009 Matteo Nastasi + * Copyright (C) 2009-2012 Matteo Nastasi * mailto: nastasi@alternativeoutput.it * matteo.nastasi@milug.org * web: http://www.alternativeoutput.it @@ -20,20 +20,30 @@ * not, write to the Free Software Foundation, Inc, 59 Temple Place - * Suite 330, Boston, MA 02111-1307, USA. * - * $Id$ - * */ +define('TOP_NUM', 10); +define('TRI_LIMIT', (90 * 24 * 60 * 60)); +if (BIN5_PLAYERS_N != 5) + define('TRI_MIN_GAMES', 0); +else + define('TRI_MIN_GAMES', 70); +define('TRI_MAX_GAMES', 140); -define(TRI_LIMIT, (90 * 24 * 60 * 60)); -define(TRI_FEW_GAMES, 60); - -define(MON_LIMIT, (30 * 24 * 60 * 60)); -define(MON_FEW_GAMES, 20); +define('MON_LIMIT', (30 * 24 * 60 * 60)); +if (BIN5_PLAYERS_N != 5) + define('MON_MIN_GAMES', 0); +else + define('MON_MIN_GAMES', 35); +define('MON_MAX_GAMES', 70); -define(WEE_LIMIT, (7 * 24 * 60 * 60)); -define(WEE_FEW_GAMES, 10); +define('WEE_LIMIT', (7 * 24 * 60 * 60)); +if (BIN5_PLAYERS_N != 5) + define('WEE_MIN_GAMES', 0); +else + define('WEE_MIN_GAMES', 10); +define('WEE_MAX_GAMES', 35); class Ptsgam { @@ -48,7 +58,7 @@ class Ptsgam { $this->gam = $gam; } - function &clone() + function myclone() { $ret = new Ptsgam($this->username, $this->pts, $this->gam); @@ -77,7 +87,7 @@ class Ptsgam { else return ($this->pts / $this->gam); } -} +} // class Ptsgam { function ptsgam_cmp($a, $b) { @@ -94,26 +104,113 @@ function ptsgam_cmp($a, $b) return (($norma < $normb) ? 1 : -1); } -function placings_show(&$user) +/* 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) { - $ret = sprintf("
"); - $ret .= sprintf("", WEE_FEW_GAMES, placing_show($user, "wee_hi") ); - $ret .= sprintf("\n", WEE_FEW_GAMES, placing_show($user, "wee_lo") ); + $mtime = placing_time(); + $tm = placing_date($mtime); + $ret = sprintf("

CLASSIFICHE

(aggiornate alle ore %s del %s)

Settimanale
(non meno di %d partite)

%s

Settimanale
(meno di %d partite)

%s
", $tm[0], $tm[1]); - $ret .= sprintf("", MON_FEW_GAMES, placing_show($user, "mon_hi") ); - $ret .= sprintf("\n", MON_FEW_GAMES, placing_show($user, "mon_lo") ); + $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) ); - $ret .= sprintf("", TRI_FEW_GAMES, placing_show($user, "tri_hi")); - $ret .= sprintf("", TRI_FEW_GAMES, placing_show($user, "tri_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("

Mensile
(non meno di %d partite)

%s

Mensile
(meno di %d partite)

%s

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

%s

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

%s

Trimestrale
(non meno di %d partite)

%s

Trimestrale
(meno di %d partite)

%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_show(&$user, $suff) +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); @@ -121,6 +218,9 @@ function placing_show(&$user, $suff) // MLANG $ret = sprintf(""); + + $old_normpts = 1000000000; + $old_gam = -1; for ($i = 0 ; !feof($fp) ; $i++) { $bf = fgets($fp, 4096); $ar = csplitter($bf, '|'); @@ -130,17 +230,22 @@ function placing_show(&$user, $suff) if ($pg->username == "") continue; - if ($i < 5) { + if ($pg->normpts() == $old_normpts && $pg->gam == $old_gam) + $i--; + + if ($i < TOP_NUM) { $ret .= sprintf("", $i+1, - ($pg->username == $user->name ? "" : ""), $pg->username, ($pg->username == $user->name ? "" : ""), $pg->snormpts(), $pg->pts, $pg->gam); + ($pg->username == $user->name ? "" : ""), xcape($pg->username), ($pg->username == $user->name ? "" : ""), $pg->snormpts(), $pg->pts, $pg->gam); } if ($user != FALSE) { - if ($pg->username == $user->name && $i >= 5) { + if (strcasecmp($pg->username, $user->name) == 0 && $i >= TOP_NUM) { $tail = sprintf(""); $tail .= sprintf("", $i+1, - ($pg->username == $user->name ? "" : ""), $pg->username, ($pg->username == $user->name ? "" : ""), $pg->snormpts(), $pg->pts, $pg->gam); + ($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) { @@ -152,3 +257,69 @@ function placing_show(&$user, $suff) 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("
Pos.UtenteScore(Punti/Partite)
%d%s%s%s%s(%d/%d)
. . . . . . . . . .
%d%s%s%s%s(%d/%d)
"); + + 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)); +} + +?> \ No newline at end of file