reference operator removed because class are passed by reference as default in php5
[brisk.git] / web / Obj / brisk.phh
index 3f65f17..87185da 100644 (file)
@@ -134,12 +134,12 @@ $mlang_brisk = array( 'btn_backstand'=> array( 'it' => 'torna in piedi',
 $G_lng = langtolng($G_lang);
 
 $G_all_points = array( 11,10,4,3,2, 0,0,0,0,0 );
-$G_brisk_version = "3.4.2";
+$G_brisk_version = "3.4.3";
 
 /* MLANG: ALL THE INFO STRINGS IN brisk.phh */
-$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: versione di test per la nuova gestione dei dati volatili.',
+$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: versione di test per la nuova gestione dei dati volatili, rivista gestione del ticker.',
                                        'Se vuoi iscriverti alla <a target="_blank" href="mailto:ml-briscola+subscribe@milug.org">Mailing List</a>, cliccala!' ),
-                       'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NEWS</b>: test version for the new volatile data management.',
+                       'en' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NEWS</b>: test version for the new volatile data management, ticker management refactored.',
                                        'If you want to subscribe our <a target="_blank" href="ml-briscola+subscribe@milug.org">Mailing List</a>, click it!' ) );
 
 $G_room_help = array( 'it' => '
@@ -694,8 +694,10 @@ class User {
 
     $i_start = (1 > ($from->step - COMM_N) ? 1 : ($from->step - COMM_N)); 
     for ($i = $i_start ; $i < $from->step ; $i++) {
-      $ii = $i % COMM_N;
-      $this->comm[$ii] = $from->comm[$ii];
+        $ii = $i % COMM_N;
+        if (isset($from->comm[$ii])) {
+            $this->comm[$ii] = $from->comm[$ii];
+        }
     }
     $this->asta_card  = $from->asta_card;
     $this->asta_pnt   = $from->asta_pnt;
@@ -806,39 +808,46 @@ class User {
     */
   }
 
-  function step_set($step) {
-    $this->step = $step;
-    
-    do {
-      if (validate_sess($this->sess) == FALSE)
-       break;
-      if (file_exists(PROXY_PATH) == FALSE)
-        mkdir(PROXY_PATH);
-      if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE)
-       break;
-      fwrite($fp, pack("LL",$this->step, $this->idx));
-      fclose($fp);
-
-      return (TRUE);
-    } while (0);
+  function step_set($step) 
+  {
+      $this->step = $step & 0x7fffffff;
+      
+      do {
+          if (validate_sess($this->sess) == FALSE)
+              break;
+          if (file_exists(PROXY_PATH) == FALSE)
+              mkdir(PROXY_PATH);
+          if (($fp = @fopen(PROXY_PATH."/".$this->sess.".step", 'w')) == FALSE)
+              break;
+          fwrite($fp, pack("LL",$this->step, $this->idx));
+          fclose($fp);
 
-    return (FALSE);
+          log_main("step_set [".$this->sess. "] [".$this->step."]"); 
+          
+          return (TRUE);
+      } while (0);
+      
+      return (FALSE);
   }
-
+  
   function step_inc($delta = 1) {
-    $this->step += $delta;
-    
-    if (validate_sess($this->sess)) {
-      if (file_exists(PROXY_PATH) == FALSE)
-        mkdir(PROXY_PATH);
-      $fp = fopen(PROXY_PATH."/".$this->sess.".step", 'w');
-      fwrite($fp, pack("LL", $this->step, $this->idx));
-      fclose($fp);
-
-      return (TRUE);
-    }
-    
-    return (FALSE);
+      $this->step += $delta;
+      /* modularization because unpack() not manage unsigned 32bit int correctly */
+      $this->step &= 0x7fffffff;
+      
+      if (validate_sess($this->sess)) {
+          if (file_exists(PROXY_PATH) == FALSE)
+              mkdir(PROXY_PATH);
+          $fp = fopen(PROXY_PATH."/".$this->sess.".step", 'w');
+          fwrite($fp, pack("LL", $this->step, $this->idx));
+          fclose($fp);
+
+          log_main("step_inc [".$this->sess. "] [".$this->step."]"); 
+          
+          return (TRUE);
+      }
+      
+      return (FALSE);
   }
 
   function reset() {
@@ -862,12 +871,12 @@ class User {
 
 
   // SHSPLIT save and load function for the User class.
-  function load_data($id
+  static function load_data($id, $sess
   {
-    GLOBAL $sess;
-
     // error_log("User::load_data BEGIN", 0);
 
+    log_main("load_data: id [".$id."] sess [".($sess == FALSE ? "FALSE" : $sess)."] ");
+
     $doexit = FALSE;
     do {
       if (($tok = @ftok(FTOK_PATH."/user".$id, "B")) == -1) {
@@ -886,7 +895,11 @@ class User {
       if ($shm = shm_attach($tok, $shm_sz)) {
        $user = @shm_get_var($shm, $tok);
        
-       log_only("bri ==  ".($user == FALSE ?   "FALSE" : "TRUE")."  bri ===  ".($user === FALSE ? "FALSE" : "TRUE")."  bri isset ".(isset($user) ?   "TRUE" : "FALSE"));
+        if ($sess != FALSE && $user->sess != $sess) {
+            $doexit = TRUE;
+            break;
+        }
+       log_only("user ==  ".($user == FALSE ?   "FALSE" : "TRUE")."  user ===  ".($user === FALSE ? "FALSE" : "TRUE")."  user isset ".(isset($user) ?   "TRUE" : "FALSE"));
        if (isset($user)) 
          log_only("bri count ".count($user));
        
@@ -894,7 +907,7 @@ class User {
          log_only("INIT MAIN DATA");
          
           // SHSPLIT FIXME: init_data for User class ??
-         $user =& User::create($id, "", "");
+         $user = User::create($id, "", "");
          if (@shm_put_var($shm, $tok, $user) == FALSE) {
               log_only("PUT_VAR FALLITA ".strlen(serialize($user)));
               log_only(serialize($user));
@@ -919,7 +932,7 @@ class User {
   }
   
 
-  function save_data(&$user, $id) 
+  function save_data($user, $id) 
   {
     GLOBAL $sess;
     
@@ -955,39 +968,39 @@ class User {
   }
 
 
+  static function step_get($sess)
+  {
+      $fp = FALSE;
+      do {
+          if (validate_sess($sess) == FALSE)
+              break;
+          
+          if (file_exists(PROXY_PATH) == FALSE)
+              mkdir(PROXY_PATH);
+          if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE)
+              break;
+          if (($s = fread($fp, 8)) == FALSE)
+              break;
+          if (strlen($s) != 8)
+              break;
+          $arr = unpack('Ls/Li', $s);
+          fclose($fp);
+          
+          // log_rd2("A0: ".$arr[0]."  A1: ".$arr[1]);
+          return ($arr);
+      } while (0);
+      
+      if ($fp != FALSE)
+          fclose($fp);
+      
+      log_rd2("STEP_GET [".$sess."]: return false ");
+      
+      return (FALSE);
+  }
 
 } // end class User
 
 
-function step_get($sess) {
-  $fp = FALSE;
-  do {
-    if (validate_sess($sess) == FALSE)
-      break;
-
-    if (file_exists(PROXY_PATH) == FALSE)
-      mkdir(PROXY_PATH);
-    if (($fp = @fopen(PROXY_PATH."/".$sess.".step", 'rb')) == FALSE)
-      break;
-    if (($s = fread($fp, 8)) == FALSE)
-      break;
-    if (strlen($s) != 8)
-      break;
-    $arr = unpack('Ls/Li', $s);
-    fclose($fp);
-
-    // log_rd2("A0: ".$arr[0]."  A1: ".$arr[1]);
-    return ($arr);
-  } while (0);
-
-  if ($fp != FALSE)
-    fclose($fp);
-
-  log_rd2("STEP_GET: return false ");
-
-  return (FALSE);
-}
-
 function step_unproxy($sess) {
   log_rd2("UNPROXY: ".PROXY_PATH."/".$sess.".step");
   if (file_exists(PROXY_PATH) == FALSE)
@@ -1267,7 +1280,7 @@ class Room {
        $user_cur = &$this->user[$table->player[$i]];
        log_main("PREIMPOST: INLOOP name: ".$user_cur->name);
 
-       if ($user_cur != $user) {
+       if ($user->idx_get() != $table->player[$i]) {
          $user_cur->stat_set("room");
          $user_cur->subst = "sitdown";
          $user_cur->laccwr = $curtime;
@@ -1304,7 +1317,7 @@ class Room {
       // log_main("VALORI: name: ".$user_cur->name."from_table: ".$from_table."  tab: ".$user_cur->table." taix: ".$table_idx."  ucur: ".$user_cur."  us: ".$user);
 
       $ret = "gst.st = ".($user_cur->step+1)."; ".($remove_wagon ? sprintf("tra.rem(%d);",$table_idx) : "");
-      if ($from_table && ($user_cur->table == $table_idx || $user_cur == $user)) {
+      if ($from_table && ($user_cur->table == $table_idx || $user->idx_get() == $i)) {
        $ret .= 'gst.st_loc++; the_end=true; window.onunload = null; window.onbeforeunload = null; document.location.assign("index.php");|';
        // $ret .= 'gst.st_loc++; document.location.assign("index.php");|';
        log_main("DOCUMENT.index.php: from table");
@@ -1318,7 +1331,7 @@ class Room {
        // $ret .= table_act_content(FALSE, 0, $table_idx, $user->table, FALSE);
        $ret .= $table->act_content($user);
 
-       if ($user_cur == $user) {
+       if ($user->idx_get() == $i) {
          // set the new status 
          $ret .=  'subst = "standup"; tra.show(); ';
          // clean the action buttons in other tables
@@ -1374,13 +1387,13 @@ class Room {
          $user_cur->table = -1;
          $user_wup[$user_wup_n++] = &$user_cur;
           
-          $remove_wagon = false;
-          if($table->wag_own == $user_cur) {
-            $remove_wagon = true;
+          $remove_wagon = FALSE;
+          if($table->wag_own == $table->player[$i]) {
+            $remove_wagon = TRUE;
             $table->wag_reset($curtime);
           }
        }
-       $user_tab[$user_tab_n++] = &$user_cur;
+       $user_tab[$user_tab_n++] = $table->player[$i];
       }
     }
 
@@ -1413,8 +1426,8 @@ class Room {
 
 
        for ($tab_idx = 0 ; $tab_idx < $user_tab_n  ; $tab_idx++)
-         if ($user_cur == $user_tab[$tab_idx]
-           break;
+            if ($user_tab[$tab_idx] == $i
+                break;
 
        // for users that wakeup the room will be reconstructed by index_rd.php
        if ($tab_idx < $user_tab_n) {
@@ -1472,7 +1485,7 @@ class Room {
       if ($table_idx > -1)
        $ret .= $this->table_content($user_cur, $table_idx);
       
-      if ($user_cur == $user) {
+      if ($user->idx_get() == $i) {
         $itin = ($user->flags & USER_FLAG_AUTH ? "<i>" : "");
         $itou = ($user->flags & USER_FLAG_AUTH ? "</i>" : "");
        $ret .= sprintf('$("myname").innerHTML = "<b>%s%s%s</b>: ";', $itin, xcape($user->name), $itou);
@@ -1516,7 +1529,7 @@ class Room {
       $ret .= $this->table_content($user_cur, $table_idx);
       $ret .= $this->standup_content($user_cur);
       
-      if ($user_cur == $user) {
+      if ($user->idx_get() == $i) {
        $ret .=  'subst = "sitdown"; tra.hide(); ';
        // clean the action buttons in other tables
        for ($e = 0 ; $e < TABLES_N ; $e++) {
@@ -1858,8 +1871,7 @@ class Room {
         $user_cur = $this->user[$i];
         if ($target != "" && $user_cur->name != $target)
           continue;
-        //     if ($user_cur->sess == '' || $user_cur->stat != 'room')
-        if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user_cur == $user)
+        if ($user_cur->sess == '' || $user_cur->stat == 'table' || $user->idx_get() == $i)
           continue;
         
         if ($is_normchat == TRUE) {
@@ -2197,7 +2209,7 @@ class Room {
       
       if ($user_cur->stat == 'room') {
        $user_cur->comm[$user_cur->step % COMM_N] = "gst.st = ".($user_cur->step+1)."; ".$this->standup_content($user_cur);
-       if ($user_cur == $user) {
+       if ($user->idx_get() == $i) {
           $itin = ($user->flags & USER_FLAG_AUTH ? "<i>" : "");
           $itou = ($user->flags & USER_FLAG_AUTH ? "</i>" : "");
 
@@ -2407,8 +2419,8 @@ class Room {
     if ($user->stat != 'room')
       return;
     
-    for ($e = 0 , $ct = 0 ; $ct < 4 && $e < MAX_PLAYERS ; $e++) {
-      if ($this->user[$e]->sess == "" || $this->user[$e]->stat != "room" || $this->user[$e]->name == "")
+    for ($i = 0 , $ct = 0 ; $ct < 4 && $i < MAX_PLAYERS ; $i++) {
+      if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
         continue;
       $ct++;
     }
@@ -2417,20 +2429,19 @@ class Room {
     
     $content = ' j_stand_cont( [ ';
 
-    for ($e = 0 , $ct = 0 ; $e < MAX_PLAYERS ; $e++) {
-      if ($this->user[$e]->sess == "" || $this->user[$e]->stat != "room" || $this->user[$e]->name == "")
+    for ($i = 0 , $ct = 0 ; $i < MAX_PLAYERS ; $i++) {
+      if ($this->user[$i]->sess == "" || $this->user[$i]->stat != "room" || $this->user[$i]->name == "")
         continue;
       
-      $flags = $this->user[$e]->flags;
+      $flags = $this->user[$i]->flags;
       
-      if ($this->user[$e]->subst == "standup") {
-        if ($this->user[$e] == $user) 
-          { 
-            $flags |= 1;
+      if ($this->user[$i]->subst == "standup") {
+          if ($user->idx_get() == $i) { 
+              $flags |= 1;
           }
-        
-        $content .= sprintf('%s[ %d, "%s" ]',($ct > 0 ? ', ' : ''), $flags, xcape($this->user[$e]->name));
-        $ct++;
+          
+          $content .= sprintf('%s[ %d, "%s" ]',($ct > 0 ? ', ' : ''), $flags, xcape($this->user[$i]->name));
+          $ct++;
       }
     }
     $content .= ' ]);';
@@ -2455,16 +2466,16 @@ class Room {
     
     $content = "[ ";
     for ($i = 0 ; $i < $table->player_n ; $i++) {
-      $user_cur = &$this->user[$table->player[$i]];
-
-      $flags = $user_cur->flags;
-
-      if ($user_cur == $user
-        $flags |= 1;
-      
-      log_main($user_cur->name. sprintf(" IN TABLE [%d]", $table_idx));
-      
-      $content .= sprintf('%s[ %d, "%s" ]',($i == 0 ? '' : ', '), $flags, xcape($user_cur->name));
+        $user_cur = &$this->user[$table->player[$i]];
+        
+        $flags = $user_cur->flags;
+        
+        if ($user->idx_get() == $table->player[$i]
+            $flags |= 1;
+        
+        log_main($user_cur->name. sprintf(" IN TABLE [%d]", $table_idx));
+        
+        $content .= sprintf('%s[ %d, "%s" ]',($i == 0 ? '' : ', '), $flags, xcape($user_cur->name));
     }
 
     $content .= ' ]';