+ function match_continue(&$bri, $user, $match_id_s)
+ {
+ $ret = FALSE;
+ $curtime = time();
+
+ do {
+ /* - verify if match_id and user are both valid to accept
+ the match_continue request - */
+ $match_id = (int)$match_id_s;
+ if ($match_id <= 0) {
+ $msg = "questa partita non esiste";
+ break;
+ }
+
+ if ($user->continue_get() == BIN5_USER_CONTINUE_ALREADY) {
+ $msg = "Hai già richiesto di continuare una partita.";
+ break;
+ }
+
+ if ($user->continue_get() == $match_id) {
+ $msg = "Hai già richiesto di continuare questa partita.";
+ break;
+ }
+ // retrieves users list for this match
+ $match_data = array();
+ if (($bdb = BriskDB::create()) != FALSE) {
+ // match_order_get return FALSE for old matches
+ $ucodes = $bdb->match_order_get($match_data, $match_id, BIN5_PLAYERS_N);
+ unset($bdb);
+ }
+ if ($ucodes == FALSE) {
+ $msg = "questa partita non è stata memorizzata correttamente";
+ break;
+ }
+
+ // if current user code must be in the users list
+ if (array_search($user->code, $ucodes) === FALSE) {
+ $msg = sprintf("Questo utente non compare nella partita che si vuole continuare [%d].", $user->code);
+ break;
+ }
+
+ /* - the user is in the list, add the match_id to his profile
+ and check if he is the N'th to require continue - */
+
+ // set the match_id for the current user
+ $user->continue_set($match_id);
+
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+ if ($user_cur->continue_get() != $match_id) {
+ break;
+ }
+ }
+ $ret = TRUE;
+ // not all players set the continue match than we exit
+ if ($i < BIN5_PLAYERS_N) {
+ $msg = sprintf("<b>L'utente <i>%s</i> vorrebbe continuare la partita n° %d.</b>",
+ xcape($user->name), $match_id);
+ break;
+ }
+
+ /* - all users decide to continue the same match, update all infos and rearrange users
+ to the right positions on the table - */
+
+ /* reset users table order */
+ for ($i = 0 ; $i < BIN5_PLAYERS_N - 1 ; $i++) {
+ if ($bri->user[$this->player[$i]]->code == $ucodes[$i]) {
+ continue;
+ }
+ for ($e = $i + 1 ; $e < BIN5_PLAYERS_N ; $e++) {
+ if ($bri->user[$this->player[$e]]->code == $ucodes[$i]) {
+ $swap = $this->player[$i];
+ $this->player[$i] = $this->player[$e];
+ $this->player[$e] = $swap;
+ $bri->user[$this->player[$i]]->table_pos = $i;
+ $bri->user[$this->player[$e]]->table_pos = $e;
+ }
+ }
+ }
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ fprintf(STDERR, "USERZ: [%s]\n", $bri->user[$this->player[$i]]->name);
+ }
+
+ // update database info to be aligned with current table (ttok and table_idx
+ if (($bdb = BriskDB::create()) != FALSE) {
+ if ($bdb->match_continue($match_id, $this, $user->table_orig) == FALSE) {
+ unset($bdb);
+ $msg = "aggiornamento dei dati della partita fallito";
+ break;
+ }
+ unset($bdb);
+ }
+
+ /* bunch and multiplier status set */
+ $this->mazzo = $match_data['mazzo_next'];
+ $this->mult = $match_data['mult_next'];
+ $this->match_id = $match_id;
+ $this->game_init($bri->user);
+
+ /* reload of the page with the new layout */
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ $user_cur = &$bri->user[$this->player[$i]];
+ $user_cur->continue_set(BIN5_USER_CONTINUE_ALREADY);
+
+ $user_cur->trans_step = $user_cur->step + 1;
+ $user_cur->comm[$user_cur->step % COMM_N] = sprintf('gst.st_loc++; gst.st=%d; xstm.stop(); window.onunload = null ; window.onbeforeunload = null ; document.location.assign("index.php");|', $user_cur->step+1);
+ $user_cur->step_inc();
+
+ // a void command force xynt-streamer to flush all data to client
+ $user_cur->trans_step = $user_cur->step + 1;
+ $user_cur->comm[$user_cur->step % COMM_N] = "";
+ $user_cur->step_inc();
+
+ $user_cur->comm[$user_cur->step % COMM_N] = show_table($bri, $user_cur, $user_cur->step+1, TRUE, FALSE);
+ $user_cur->step_inc();
+ }
+ return (TRUE);
+ } while (FALSE);
+
+ $dt = date("H:i ", $curtime);
+ for ($i = 0 ; $i < BIN5_PLAYERS_N ; $i++) {
+ if ($ret == FALSE && $this->player[$i] != $user->idx)
+ continue;
+ $user_cur = &$bri->user[$this->player[$i]];
+ $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ";
+ $user_cur->comm[$user_cur->step % COMM_N] .= nickserv_msg($dt, $msg);
+ $user_cur->step_inc();
+ }
+ }
+