POST management working, preferences managed (room only)
[brisk.git] / web / Obj / brisk.phh
index 32168a8..803d28b 100644 (file)
@@ -77,6 +77,7 @@ define('DBG_CRIT', 0x0400);
 define('DBG_LMOP', 0x0800);
 define('DBG_TRAC', 0x1000);
 define('DBG_SHME', 0x2000);
+define('DBG_ENGI', 0x4000);
 // NOTE: BRISK DEBUG must be a numerical constant, not the result of operations on symbols 
 define('BRISK_DEBUG', 0x0800);
 
@@ -140,10 +141,10 @@ $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 = "4.5.4";
+$G_brisk_version = "4.6.0";
 
 /* MLANG: ALL THE INFO STRINGS IN brisk.phh */
-$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: nuova visualizzazione dello stato della connessione dati, ... , migliorata la gestione dei tavoli in caso di piccoli blocchi del server.',
+$root_wellarr = array( 'it' => array ( 'Brisk (Ver. '.$G_brisk_version.'), <b>NOVITA\'</b>: aggiunti script di avvio automatico, gestione dei segnali e logging dell\' ultima connessione.',
                                        '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>: usage of reader/writer locking instead of generic exclusive locking.',
                                        'If you want to subscribe our <a target="_blank" href="ml-briscola+subscribe@milug.org">Mailing List</a>, click it!' ) );
@@ -695,6 +696,67 @@ class Delay_Manager
     }
 }
 
+class Client_prefs {
+    var $listen;
+
+    function Client_prefs()
+    {
+    }
+
+    static function from_user($user)
+    {
+        $thiz = new Client_prefs();
+        $thiz->user_load($user);
+
+        return ($thiz);
+    }
+
+    static function from_json($json)
+    {
+        $thiz = new Client_prefs();
+        if ($thiz->json_load($json) == FALSE) {
+            return (FALSE);
+        }
+
+        return ($thiz);
+    }
+
+    function user_load($user)
+    {
+        fprintf(STDERR, "QQ %s: %x\n", __FUNCTION__, $user->flags);
+        $this->listen = ($user->flags & USER_FLAG_MAP_AUTH) >> 2;
+
+        fprintf(STDERR, "QQ %s: LISTEN: %d\n", __FUNCTION__, $this->listen);
+    }
+
+    function json_load($json_s)
+    {
+        if (gettype($json_s) == "string") {
+            if (($json = json_decode($json_s)) == FALSE)
+                return FALSE;
+        }
+        else {
+            $json = $json_s;
+        }
+        $this->listen = $json->listen;
+
+        return TRUE;
+    }
+
+    function store($user, $is_save)
+    {
+        // save into DB
+        fprintf(STDERR, "QQ %s::%s PRE: %x\n", __CLASS__, __FUNCTION__,
+                $user->flags & (~USER_FLAG_S_ALL & ~USER_FLAG_AUTH));
+        $user->flags_set(($this->listen << 2), USER_FLAG_MAP_AUTH);
+        fprintf(STDERR, "QQ %s::%s %x\n", __CLASS__, __FUNCTION__,
+                $user->flags);
+        if ($is_save)
+            $user->store_set();
+    }
+}
+
+
 class Room
 {
     static $delta_t;
@@ -916,14 +978,19 @@ class Room
     
     $ret = sprintf('gst.st = %d; ',  $user_step);
 
-    if ($user->flags & USER_FLAG_ISOLAUTH) {
-      $ret .= 'list_set(\'isolation\', false, \''.$mlang_brisk['tit_onisol'][$G_lang].'\' ); ';
-    }
-    else if ($user->flags & USER_FLAG_LISTAUTH) {
-      $ret .= 'list_set(\'auth\', false, \''.$mlang_brisk['tit_onauth'][$G_lang].'\' ); ';
-    }
-    else {
-      $ret .= 'list_set(\'all\', false, \'\' ); ';
+    $prefs = Client_prefs::from_user($user);
+    $ret .= sprintf('prefs_load(\'%s\', false, false);', json_encode($prefs));
+
+    if(false) {
+        if ($user->flags & USER_FLAG_ISOLAUTH) {
+            $ret .= 'list_set(\'isolation\', false, \''.$mlang_brisk['tit_onisol'][$G_lang].'\' ); ';
+        }
+        else if ($user->flags & USER_FLAG_LISTAUTH) {
+            $ret .= 'list_set(\'auth\', false, \''.$mlang_brisk['tit_onauth'][$G_lang].'\' ); ';
+        }
+        else {
+            $ret .= 'list_set(\'all\', false, \'\' ); ';
+        }
     }
 
     if ($user->subst == 'standup')
@@ -1812,27 +1879,33 @@ class Room
       $this->user[$idx]->flags |= ($authenticate != FALSE ? USER_FLAG_AUTH : 0x00);
       $this->user[$idx]->flags |= ( ($pass != FALSE && $bdb == FALSE) ? USER_FLAG_DBFAILED : 0x00);
       log_auth("XXX", sprintf("FLAGS: [%x]", $this->user[$idx]->flags));
-
       
       if ($authenticate != FALSE) {
-        $this->user[$idx]->code = $authenticate->code_get();
-        $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
-
-        if (isset($cookie['CO_list'])) {
-          if (strcmp($cookie['CO_list'], "auth") == 0) {
-            $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
-            $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
-          }
-          if (strcmp($cookie['CO_list'], "isolation") == 0) {
-            $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
-            $this->user[$idx]->flags |= USER_FLAG_ISOLAUTH;
+          $this->user[$idx]->code = $authenticate->code_get();
+          if (0 == 1) {
+              // all this part is included in the db server
+              $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
+
+              if (isset($cookie['CO_list'])) {
+                  fprintf(STDERR, "QQ: %s CO_list: [%s]\n", __FUNCTION__, $cookie['CO_list']);
+                  if (strcmp($cookie['CO_list'], "auth") == 0) {
+                      $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+                      $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
+                  }
+                  if (strcmp($cookie['CO_list'], "isolation") == 0) {
+                      $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+                      $this->user[$idx]->flags |= USER_FLAG_ISOLAUTH;
+                  }
+                  else {
+                      $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+                  }
+              }
           }
           else {
-            $this->user[$idx]->flags &= ~USER_FLAG_MAP_AUTH;
+              fprintf(STDERR, "QQ: CO_list not set flags: %x\n", __FUNCTION__, $this->user[$idx]->flags);
           }
-        }
       }
-      
+      fprintf(STDERR, "QQ %s: flag %x\n", __FUNCTION__, $this->user[$idx]->flags);
       if ($ghost > -1) {
         log_main("ghost: rename!");
         $ghost_user = $this->user[$ghost];
@@ -2175,7 +2248,7 @@ class Room
 
   function request_mgr(&$s_a_p, $header, &$header_out, &$new_socket, $path, $addr, $get, $post, $cookie)
   {
-      printf("NEW_SOCKET (root): %d\n", intval($new_socket));
+      printf("NEW_SOCKET (root): %d PATH [%s]\n", intval($new_socket), $path);
 
       $enc = get_encoding($header);
       if (isset($header['User-Agent'])) {
@@ -2199,17 +2272,24 @@ class Room
           $content = ob_get_contents();
           ob_end_clean();
 
-          $s_a_p->pgflush_try_add($enc, $new_socket, 20, $header_out, $content);
+          // fprintf(STDERR, "\n\nCONTENT [%s]\n\n", $content);
+          $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
           return TRUE;
 
           break;
       case "index_wr.php":
+          //
+          // Enhance required: in the POST case, after the header you must get content
+          //                   from the socket, waiting if necessary
+          //
+
+          fprintf(STDERR, "\n\nDENTRO QUI\n\n");
           ob_start();
           index_wr_main($this, $addr, $get, $post, $cookie);
           $content = ob_get_contents();
           ob_end_clean();
           
-          $s_a_p->pgflush_try_add($enc, $new_socket, 20, $header_out, $content);
+          $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
           return TRUE;
 
           break;
@@ -2222,7 +2302,7 @@ class Room
                   
                   $content = User::stream_fini($transp, $s_a_p->rndstr, TRUE);
 
-                  $s_a_p->pgflush_try_add($enc, $new_socket, 20, $header_out, $content);
+                  $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
                   return TRUE;
 
                   break;
@@ -2252,7 +2332,7 @@ class Room
               fflush($new_socket);
               
               
-              $s_a_p->socks_set($new_socket, $user);
+              $s_a_p->socks_set($new_socket, $user, NULL);
               $user->rd_socket_set($new_socket);
               printf(" - qui ci siamo - ");
               return TRUE;
@@ -2260,7 +2340,20 @@ class Room
           
           return FALSE;
           break;
-
+      case 'test.php':
+          if (!(BRISK_DEBUG & DBG_ENGI))
+              return (FALSE);
+          fprintf(STDERR, "TEST.PHP running\n");
+          if (isset($post['data'])) {
+              $content = $post['data'];
+          }
+          else {
+              $content = "NO DATA AVAILABLE";
+          }
+          $header_out['Content-Type'] = 'text/plain';
+          $s_a_p->pendpage_try_addflush($new_socket, 20, $enc, $header_out, $content);
+          return TRUE;
+          break;
       default:
           /* FAR TODO: move all into an array of registered sub-apps */
           $subs = "briskin5/";