5 * Copyright (C) 2011 Matteo Nastasi
6 * mailto: nastasi@alternativeoutput.it
7 * matteo.nastasi@milug.org
8 * web: http://www.alternativeoutput.it
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details. You should have received a
19 * copy of the GNU General Public License along with this program; if
20 * not, write to the Free Software Foundation, Inc, 59 Temple Place -
21 * Suite 330, Boston, MA 02111-1307, USA.
27 require_once("Obj/brisk.phh");
28 require_once("Obj/dbase_pgsql.phh");
30 ini_set("max_execution_time", "300");
47 function ImpPoints($s)
50 $arr = explode('|', $s);
51 // error_log("TTOK: ".count($arr), 0);
53 if (count($arr) != 20) {
54 // error_log("COUNT: ".count($arr));
59 $this->time = $arr[0];
60 $this->usess = $arr[1];
61 $this->isauth = $arr[2];
62 $this->username = $arr[3];
63 $this->useraddr = $arr[4];
64 $this->where = $arr[5];
65 $this->ttok = $arr[6];
66 $this->tidx = $arr[7];
67 $this->nplayers = $arr[8];
69 $this->logins = array();
72 for ($i = 9 ; $i < 19 ; $i+=2) {
74 $this->logins[$idx] = strtolower($arr[$i]);
75 $this->pts[$idx] = $arr[$i+1];
84 GLOBAL $cont, $G_dbpfx, $G_alarm_passwd, $F_pass_private, $F_ACT, $F_filename;
87 if (FALSE && $F_pass_private != $G_alarm_passwd) {
88 $cont .= sprintf("Wrong password, operation aborted.<br>\n");
92 if ($F_ACT == "append") {
95 if ($F_pass_private != $G_alarm_passwd) {
96 $cont .= sprintf("Wrong password, operation aborted.<br>\n");
99 $cont .= sprintf("FILENAME: %s<br>\n", $F_filename);
100 if (($olddb = new LoginDBOld($F_filename)) == FALSE) {
101 $cont .= sprintf("Loading failed.<br>\n");
105 if (($newdb = BriskDB::create()) == FALSE) {
106 $cont .= sprintf("Database connection failed.<br>\n");
109 $newdb->users_load();
110 if ($newdb->addusers_from_olddb($olddb, $cont) == FALSE) {
111 $cont .= sprintf("Insert failed.<br>\n");
113 $cont .= sprintf("<b>SUCCESS</b><br>Item number: %d<br>\n", $olddb->count());
116 else if ($F_ACT == "pointsimp") {
118 if (!file_exists($F_filename)) {
119 $cont .= sprintf("File [%s] not exists.<br>\n", $F_filename);
123 $cont .= sprintf("FILENAME: %s<br>\n", $F_filename);
125 if (!($fp = @fopen($F_filename, "r"))) {
126 $cont .= sprintf("Open file [%s] failed.<br>\n", $F_filename);
130 if (($newdb = BriskDB::create()) == FALSE) {
131 $cont .= sprintf("Database connection failed.<br>\n");
135 $newdb->users_load();
136 $dbconn = $newdb->getdbconn();
137 for ($pts_n = 0 ; !feof($fp) ; $pts_n++) {
138 $bf = fgets($fp, 4096);
142 if (($pts = new ImpPoints($bf)) == FALSE) {
143 $cont .= sprintf("Import failed at line [%s]<br>\n", eschtml($bf));
146 if ($pts->time < 1285884000) {
150 // $cont .= sprintf("ttok: %s<br>\n", $pts->ttok);
156 $mtc_sql = sprintf("SELECT * FROM %sbin5_matches WHERE ttok = '%s';", $G_dbpfx, escsql($pts->ttok));
157 if (($mtc_pg = pg_query($dbconn->db(), $mtc_sql)) == FALSE || pg_numrows($mtc_pg) != 1) {
158 // match not exists, insert it
159 $mtc_sql = sprintf("INSERT INTO %sbin5_matches (ttok, tidx) VALUES ('%s', %d) RETURNING *;",
160 $G_dbpfx, escsql($pts->ttok), $pts->tidx);
161 if ( ! (($mtc_pg = pg_query($dbconn->db(), $mtc_sql)) != FALSE &&
162 pg_affected_rows($mtc_pg) == 1) ) {
163 $cont .= sprintf("Matches insert failed at line [%s] [%s]<br>\n",
164 eschtml($bf), eschtml($mtc_sql));
169 $mtc_obj = pg_fetch_object($mtc_pg,0);
170 // $cont .= sprintf("MTC: %s<br>\n", esclfhtml(print_r($mtc_obj, TRUE)));
171 // $cont .= sprintf("pts_n: %d mtc_match_code: %d<br>\n", $pts_n, $mtc_obj->code);
176 $gam_sql = sprintf("SELECT * FROM %sbin5_games WHERE mcode = %d and tstamp = to_timestamp(%d);",
177 $G_dbpfx, $mtc_obj->code, $pts->time);
178 if (($gam_pg = pg_query($dbconn->db(), $gam_sql)) == FALSE || pg_numrows($gam_pg) != 1) {
179 // match not exists, insert it
180 $gam_sql = sprintf("INSERT INTO %sbin5_games (mcode, tstamp)
181 VALUES (%d, to_timestamp(%d)) RETURNING *;",
182 $G_dbpfx, $mtc_obj->code, $pts->time);
183 if ( ! (($gam_pg = pg_query($dbconn->db(), $gam_sql)) != FALSE &&
184 pg_affected_rows($gam_pg) == 1) ) {
185 $cont .= sprintf("Games insert failed at line [%s] [%s]<br>\n",
186 eschtml($bf), eschtml($gam_sql));
190 $gam_obj = pg_fetch_object($gam_pg,0);
191 // $cont .= sprintf("GAM: %s<br>\n", esclfhtml(print_r($gam_obj, TRUE)));
192 // $cont .= sprintf("pts_n: %d mtc_match_code: %d<br>\n", $pts_n, $gam_obj->code);
197 for ($i = 0 ; $i < 5 ; $i++) {
198 /* get the login associated code */
199 $usr_sql = sprintf("SELECT * FROM %susers WHERE login = '%s';",
200 $G_dbpfx, escsql($pts->logins[$i]));
201 if (($usr_pg = pg_query($dbconn->db(), $usr_sql)) == FALSE || pg_numrows($usr_pg) != 1) {
202 $cont .= sprintf("User [%s] not found [%s]<br>\n", eschtml($pts->logins[$i]), eschtml($usr_sql));
203 save_rej($pts->logins[$i]);
206 $usr_obj = pg_fetch_object($usr_pg,0);
209 $pts_sql = sprintf("INSERT INTO %sbin5_points (gcode, ucode, pts)
210 VALUES (%d, %d, %d) RETURNING *;",
211 $G_dbpfx, $gam_obj->code, $usr_obj->code, $pts->pts[$i]);
212 if ( ! (($pts_pg = pg_query($dbconn->db(), $pts_sql)) != FALSE &&
213 pg_affected_rows($pts_pg) == 1) ) {
214 $cont .= sprintf("Point insert failed at line [%s] [%s] idx: [%d]<br>\n",
215 eschtml($bf), eschtml($gam_sql), $i);
224 $cont .= sprintf("FINE FILE<br>\n");
228 function save_rej($s)
230 if (($fp = fopen(LEGAL_PATH."/rej.txt", "a+")) == FALSE)
233 fwrite($fp, sprintf("%s\n", $s));
243 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
250 <b>Append users from a file</b><br>
251 <form accept-charset="utf-8" method="post" action="<?php echo $PHP_SELF;?>">
252 <input type="hidden" name="F_ACT" value="append">
253 <table><tr><td>Admin Password:</td>
254 <td><input name="F_pass_private" type="password" value=""></td></tr>
255 <tr><td>Filename:</td>
256 <td><input type="text" name="F_filename"></td></tr>
257 <tr><td colspan=2><input type="submit" value="append users"></td></tr>
261 <b>Points importer from file to db</b><br>
262 <form accept-charset="utf-8" method="post" action="<?php echo $PHP_SELF;?>">
263 <input type="hidden" name="F_ACT" value="pointsimp">
264 <table><tr><td>Admin Password:</td>
265 <td><input name="F_pass_private" type="password" value=""></td></tr>
266 <tr><td>Filename:</td>
267 <td><input type="text" name="F_filename"></td></tr>
268 <tr><td colspan=2><input type="submit" value="import points"></td></tr>