X-Git-Url: http://mop.ddnsfree.com/gitweb/?p=brisk.git;a=blobdiff_plain;f=web%2FObj%2Fdbase_pgsql.phh;h=a757c09173c11330055fe930dd14acc16a1afdee;hp=8316d85b7652d394ff234055d11431e9ea683b0a;hb=7332bf2e21e419c2f5af5f7e955367b59c9da135;hpb=4d6334859a2357cd090fd0e58b8f3b6356a0cfc1 diff --git a/web/Obj/dbase_pgsql.phh b/web/Obj/dbase_pgsql.phh index 8316d85..a757c09 100644 --- a/web/Obj/dbase_pgsql.phh +++ b/web/Obj/dbase_pgsql.phh @@ -113,6 +113,10 @@ class BriskDB function query($sql) { + if (!$this->dbconn) + if (($this->dbconn = DBConn::recover()) == FALSE) + return FALSE; + if (($res = @pg_query($this->dbconn->db(), $sql)) == FALSE) { error_log('pg_result_status: ' . pg_result_status($res)); error_log('pg_connection_status: ' . pg_connection_status($this->dbconn->db())); @@ -206,10 +210,6 @@ class BriskDB return (FALSE); } - if (($sere_pg = $this->query($sere_sql)) == FALSE) { - return (FALSE); - } - $sere_sql = sprintf("SELECT * FROM %sselfreg_chk WHERE (ip & %d) = %d;", $G_dbpfx, int2four($G_selfreg_mask), int2four($laddr & $G_selfreg_mask)); if (($sere_pg = $this->query($sere_sql)) == FALSE) { @@ -355,11 +355,9 @@ class BriskDB $user_sql = sprintf("UPDATE %susers SET (type, supp_comp) = (%d, '%s') WHERE code = %d;", $G_dbpfx, $flags, escsql($supp_comp), $code); - fprintf(STDERR, "REQUEST [%s]\n", $user_sql); if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) { return FALSE; } - fprintf(STDERR, "REQUEST GOOD [%s]\n", $user_sql); return TRUE; } @@ -370,11 +368,9 @@ class BriskDB $user_sql = sprintf("UPDATE %susers SET (type, disa_reas) = (%d, %d) WHERE code = %d;", $G_dbpfx, $flags, $disa_reas, $code); - fprintf(STDERR, "REQUEST [%s]\n", $user_sql); if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) { return FALSE; } - fprintf(STDERR, "REQUEST GOOD [%s]\n", $user_sql); return TRUE; } @@ -385,11 +381,9 @@ class BriskDB $user_sql = sprintf("UPDATE %susers SET (tos_vers) = ('%s') WHERE code = %d;", $G_dbpfx, escsql($tos_vers), $code); - fprintf(STDERR, "REQUEST [%s]\n", $user_sql); if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) { return FALSE; } - fprintf(STDERR, "REQUEST GOOD [%s]\n", $user_sql); return TRUE; } @@ -634,12 +628,14 @@ class BriskDB } $gam_obj = pg_fetch_object($gam_pg, 0); - $table->old_reason = game_description($gam_obj->act, 'html', $gam_obj->mult, + // FIXME + $rules_name = "Rules_old_rules"; + $table->old_reason = ${rules_name}::game_description($gam_obj->act, 'html', $gam_obj->mult, $gam_obj->asta_win, ($gam_obj->asta_win != -1 ? $users[$gam_obj->asta_win]['login'] : ""), $gam_obj->friend, ($gam_obj->friend != -1 ? $users[$gam_obj->friend]['login'] : ""), - $gam_obj->pnt, $gam_obj->asta_pnt); + $gam_obj->pnt, $gam_obj->asta_pnt, $gam_obj->tourn_pts); // update matches with new ttok and table idx $mtc_sql = sprintf("UPDATE %sbin5_matches SET (ttok, tidx) = ('%s', %d) WHERE code = %d RETURNING *;", @@ -718,8 +714,9 @@ class BriskDB if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_numrows($mtc_pg) != 1) { // match not exists, insert it - $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx, mazzo_next, mult_next) VALUES ('%s', %d, %d, %d) RETURNING *;", - $G_dbpfx, $sql_ttok, $tidx, $table->mazzo, $table->mult); + // , BIN5_TOURNAMENT_NO_DRAW + $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx, mazzo_next, mult_next, tcode) VALUES ('%s', %d, %d, %d, %d) RETURNING *;", + $G_dbpfx, $sql_ttok, $tidx, $table->mazzo, $table->mult, BIN5_TOURNAMENT_OLDRULES); if (($mtc_pg = $this->query($mtc_sql)) == FALSE || pg_affected_rows($mtc_pg) != 1) { log_crit(sprintf("bin5_points_save: failed at insert match [%s]", $mtc_sql)); break; @@ -766,13 +763,14 @@ class BriskDB /* * games management */ - $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp, act, asta_pnt, pnt, asta_win, friend, mazzo, mult) - VALUES (%d, to_timestamp(%d), %d, %d, %d, %d, %d, %d, %d) RETURNING *;", + $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp, act, asta_pnt, pnt, asta_win, friend, mazzo, mult, tourn_pts) + VALUES (%d, to_timestamp(%d), %d, %d, %d, %d, %d, %d, %d, %d) RETURNING *;", $G_dbpfx, $mtc_obj->code, $date, $action, $table->old_asta_pnt, $table->old_pnt, $table->old_asta_win, $table->old_friend, - $table->old_mazzo, $table->old_mult); + $table->old_mazzo, $table->old_mult, + $table->old_tourn_pts); if (($gam_pg = $this->query($gam_sql)) == FALSE || pg_affected_rows($gam_pg) != 1) { log_crit(sprintf("bin5_points_save: failed at insert game [%s]", $gam_sql)); break; @@ -858,28 +856,140 @@ INSERT INTO %smails (code, ucode, type, tstamp, subj, body_txt, body_htm, hash) return (TRUE); } - function usersnet_bycode($owner, $target) + function friendship_default() + { + return (array(usersnet_friend_getlabel(1) => "0", + usersnet_friend_getlabel(2) => "0", + usersnet_friend_getlabel(3) => "0", + usersnet_friend_getlabel(4) => "0", + usersnet_friend_getlabel(5) => "0")); + } + + function usersnet_widefriend($owner, $target) + { + GLOBAL $G_dbpfx; + + $widefriend = $this->friendship_default(); + + $wfri_sql = sprintf("SELECT * FROM %susersnet_widefriend WHERE owner = %d AND target = %d;", + $G_dbpfx, $owner, $target); + if (($wfri_pg = $this->query($wfri_sql)) == FALSE) { + return ($widefriend); + } + + for ($i = 0 ; $i < pg_numrows($wfri_pg) ; $i++) { + $wfri_obj = pg_fetch_object($wfri_pg, $i); + $widefriend[usersnet_friend_getlabel(intval($wfri_obj->friend))] = $wfri_obj->count; + } + + return ($widefriend); + } + + function usersnet_wideskill($owner, $target) + { + GLOBAL $G_dbpfx; + + $wideskill = "//"; + + $wskl_sql = sprintf("SELECT * FROM %susersnet_wideskill WHERE owner = %d AND target = %d;", + $G_dbpfx, $owner, $target); + if (($wskl_pg = $this->query($wskl_sql)) == FALSE) { + return ($wideskill); + } + + if (pg_numrows($wskl_pg) > 0) { + $wskl_obj = pg_fetch_object($wskl_pg, 0); + // TODO: UNCOMMENT IF THE NETWORK WORKS VERY WELL + // if ($wskl_obj->count >= 3) + $wideskill = sprintf("%3.2f", $wskl_obj->skill); + } + return ($wideskill); + } + + function usersnet_narrowfriend($owner, $target) + { + GLOBAL $G_dbpfx; + + $narrowfriend = $this->friendship_default(); + + $nfri_sql = sprintf("SELECT * FROM %susersnet_narrowfriend WHERE owner = %d AND target = %d;", + $G_dbpfx, $owner, $target); + if (($nfri_pg = $this->query($nfri_sql)) == FALSE) { + return $narrowfriend; + } + + for ($i = 0 ; $i < pg_numrows($nfri_pg) ; $i++) { + $nfri_obj = pg_fetch_object($nfri_pg, $i); + $narrowfriend[usersnet_friend_getlabel(intval($nfri_obj->friend))] = $nfri_obj->count; + } + return ($narrowfriend); + } + + function usersnet_narrowskill($owner, $target) + { + GLOBAL $G_dbpfx; + + $narrowskill = "//"; + + $nskl_sql = sprintf("SELECT * FROM %susersnet_narrowskill WHERE owner = %d AND target = %d;", + $G_dbpfx, $owner, $target); + if (($nskl_pg = $this->query($nskl_sql)) == FALSE) { + return ($narrowskill); + } + + if (pg_numrows($nskl_pg) > 0) { + $nskl_obj = pg_fetch_object($nskl_pg, 0); + // TODO: UNCOMMENT IF THE NETWORK WORKS VERY WELL + // if ($nskl_obj->count >= 3) + $narrowskill = sprintf("%3.2f", $nskl_obj->skill); + } + return ($narrowskill); + } + + function usersnet_partyskill($owner, $target) + { + GLOBAL $G_dbpfx; + + $partyskill = "non disponibile"; + + $pskl_sql = sprintf("SELECT * FROM %susersnet_party WHERE owner = %d AND target = %d;", + $G_dbpfx, $owner, $target); + if (($pskl_pg = $this->query($pskl_sql)) == FALSE) { + return ($partyskill); + } + + if (pg_numrows($pskl_pg) > 0) { + $pskl_obj = pg_fetch_object($pskl_pg, 0); + // TODO: UNCOMMENT IF THE NETWORK WORKS VERY WELL + // if ($wskl_obj->count >= 3) + $partyskill = sprintf("%3.2f", $pskl_obj->skill); + } + return ($partyskill); + } + + function usersnet_bycode($owner, $target, $widefriend, $narrowfriend) { GLOBAL $G_dbpfx; $ret = FALSE; $net_sql = sprintf("SELECT * FROM %susersnet WHERE owner = %d AND target = %d;", - $G_dbpfx, $owner, $target); - if (($net_pg = $this->query($net_sql)) == FALSE) { + $G_dbpfx, $owner, $target); + if (($net_pg = $this->query($net_sql)) == FALSE) return FALSE; - } + if (pg_numrows($net_pg) != 1) return FALSE; $net_obj = pg_fetch_object($net_pg, 0); - return (UsersNetItem::UsersNetItemFromRecord($net_obj)); + return (UsersNetItem::UsersNetItemFromRecord($net_obj, $widefriend, $narrowfriend)); } - function usersnet_default($owner, $target) + function usersnet_default($owner, $target, $widefriend, $narrowfriend) { - return (UsersNetItem::UsersNetItemDefaults($owner, $target)); + return (UsersNetItem::UsersNetItemDefaults($owner, $target, $widefriend, $narrowfriend)); } + function usersnet_save($owner_id, $json) { GLOBAL $G_dbpfx; @@ -889,54 +999,70 @@ INSERT INTO %smails (code, ucode, type, tstamp, subj, body_txt, body_htm, hash) do { $friend = usersnet_friend_getid($json->friend); + $json->skill = intval($json->skill); + $json->trust = intval($json->trust); + if ($json->skill < 1 || $json->skill > 5 || $json->trust < 1 || $json->trust > 5 || $friend == FALSE) { $ret = 1; break; } - $this->transaction('BEGIN'); $trans = TRUE; - // try to update - $net_sql = sprintf(" + if ($friend == USERSNET_FRIEND_UNKNOWN) { + // try to update + $net_sql = sprintf(" + DELETE FROM %susersnet + USING %susers as us + WHERE owner = %d AND us.login = '%s' AND target = us.code;", + $G_dbpfx, $G_dbpfx, + $owner_id, escsql(strtolower($json->login))); + + if (($net_pg = $this->query($net_sql)) == FALSE) { + $ret = 5; + break; + } + } + else { // if ($friend == USERSNET_FRIEND_UNKNOWN + // try to update + $net_sql = sprintf(" UPDATE %susersnet SET (friend, skill, trust, mtime) = (%d, %d, %d, now()) FROM %susers as us WHERE owner = %d AND us.login = '%s' AND target = us.code RETURNING *;", - $G_dbpfx, - $friend, $json->skill, $json->trust, - $G_dbpfx, - $owner_id, escsql($json->login)); - if (($net_pg = $this->query($net_sql)) == FALSE || pg_numrows($net_pg) == 0) { - $net_sql = sprintf(" + $G_dbpfx, + $friend, $json->skill, $json->trust, + $G_dbpfx, + $owner_id, escsql(strtolower($json->login))); + if (($net_pg = $this->query($net_sql)) == FALSE || pg_numrows($net_pg) == 0) { + $net_sql = sprintf(" INSERT INTO %susersnet SELECT %d AS owner, us.code as target, %d as friend, %d as skill, %d as trust FROM %susers as us WHERE us.login = '%s' RETURNING *;", - $G_dbpfx, $owner_id, - $friend, $json->skill, $json->trust, - $G_dbpfx, $json->login); - if (($net_pg = $this->query($net_sql)) == FALSE) { - log_wr('insert query failed'); - $ret = 2; - break; - } - if (pg_numrows($net_pg) != 1) { - log_wr(sprintf('insert numrow failed [%s] [%d]', $net_sql, pg_numrows($net_pg))); - $ret = 3; - break; + $G_dbpfx, $owner_id, + $friend, $json->skill, $json->trust, + $G_dbpfx, escsql(strtolower($json->login))); + if (($net_pg = $this->query($net_sql)) == FALSE) { + log_wr('insert query failed'); + $ret = 2; + break; + } + if (pg_numrows($net_pg) != 1) { + log_wr(sprintf('insert numrow failed [%s] [%d]', $net_sql, pg_numrows($net_pg))); + $ret = 3; + break; + } } - } - else { - if (pg_numrows($net_pg) != 1) { - log_wr('update numrow failed'); - $ret = 4; - break; + else { + if (pg_numrows($net_pg) != 1) { + log_wr('update numrow failed'); + $ret = 4; + break; + } } } - - $net_obj = pg_fetch_object($net_pg, 0); $this->transaction('COMMIT'); return (0); } while (0);