BriskDB and DBConn classes now have a static constructor method that can be failed
[brisk.git] / web / Obj / brisk.phh
index 02b91d6..480f3a2 100644 (file)
@@ -277,7 +277,6 @@ Copyright 2006-2009 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nasta
 <br><b>version '.$G_brisk_version.'</b><br><br>
 Copyright 2006-2009 <a href=\\"mailto:brisk@alternativeoutput.it\\">Matteo Nastasi</a> (aka mop)<br><br>');
 
-
 $escinp_from = array( "\""     );
 $escinp_to = array(   "&quot;" );
 
@@ -293,6 +292,11 @@ function eschtml($s)
     return htmlentities($s);
 }
 
+function esclfhtml($s)
+{
+    return str_replace("\n", "<br>\n", htmlentities($s));
+}
+
 
 function langtolng($lang)
 {
@@ -589,11 +593,15 @@ define(USER_FLAG_S_MOP,   0xb00); // done
 define(USER_FLAG_S_ALL,   0xf00); // done
 
 /* type of user normal, supporter etc ... */
-define(USER_FLAG_TY_ALL,   0xf0000); // done
-define(USER_FLAG_TY_NORM,  0x10000); // done
-define(USER_FLAG_TY_SUPER, 0x20000); // done
+define(USER_FLAG_TY_ALL,     0xff0000); // done
+define(USER_FLAG_TY_NORM,    0x010000); // done
+define(USER_FLAG_TY_SUPER,   0x020000); // done
+//  ... other usefull status ...
+define(USER_FLAG_TY_SUSPEND, 0x400000); // done
+define(USER_FLAG_TY_DISABLE, 0x800000); // done
 
 class User {
+  var $code;       // authentication code
   var $name;       // name of the user
   var $sess;       // session of the user
   var $ip;         // ip of the user
@@ -633,6 +641,7 @@ class User {
     if (($thiz =& new User()) == FALSE)
       return ($G_false);
 
+    $thiz->code  = -1;
     $thiz->name  = $name;
     $thiz->sess  = $sess;
     $thiz->ip    = $ip;
@@ -669,6 +678,7 @@ class User {
   {
     GLOBAL $G_false;
     
+    $this->code       = $from->code;
     $this->name       = $from->name;
     $this->sess       = $from->sess;
     $this->ip         = $from->ip;
@@ -730,6 +740,7 @@ class User {
     if (($thiz =& new User()) == FALSE)
       return ($G_false);
     
+    $thiz->code       = $from->code;
     $thiz->name       = $from->name;
     $thiz->sess       = $from->sess;
     $thiz->ip         = $from->ip;
@@ -772,6 +783,10 @@ class User {
 
     return ($thiz);
   }
+
+  function code_get() {
+      return ($this->code);
+  }
   
   function stat_set($stat) {
     log_main("sess: [".$this->sess. "] NEW STAT: [".$stat."]"); 
@@ -923,7 +938,7 @@ class Room {
 
   function garbage_manager($force)
   {
-    GLOBAL $G_lang, $mlang_brisk;
+    GLOBAL $G_lang, $mlang_brisk, $G_base;
 
     $ismod = FALSE;
 
@@ -934,7 +949,7 @@ class Room {
     if ($force || $this->garbage_timeout < $curtime) {
       
       // FIXME BRISK4: include for each kind of table
-      require_once("briskin5/Obj/briskin5.phh");
+      require_once("${G_base}briskin5/Obj/briskin5.phh");
 
       // Before all align times with table timeout
       for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
@@ -1423,7 +1438,7 @@ class Room {
 
   function chatt_send(&$user, $mesg)
   {
-    GLOBAL $G_alarm_passwd, $mlang_brisk, $G_lang;
+    GLOBAL $G_base, $G_alarm_passwd, $mlang_brisk, $G_lang;
     $only_you = FALSE;
     
     // common settings
@@ -1612,9 +1627,11 @@ class Room {
        $user->name = $name_new; // OK - nick changed
         /* se nome gia' in uso, segnala cosa potrebbe capitare */
         if (($user->flags & USER_FLAG_AUTH) == 0) {
-          $userdb = new LoginDB();
+            // FIXME: now create can return FALSE
+          $bdb = BriskDB::create();
+          $bdb->users_load();
           /* MLANG: "Il nickname <b>\'%s\'</b> &egrave; gi&agrave; registrato, <b>se il suo proprietario si autentificher&agrave; verrai rinominato d\'ufficio come ghost<i>N</i>.</b>" */
-          if ($userdb->login_exists($name_new)) {
+          if ($bdb->login_exists($name_new)) {
             $prestr = sprintf($mlang_brisk['nickjust'][$G_lang], xcape($name_new));
             $to_user .= sprintf('chatt_sub("%s", [2, "%s"],"%s");', $dt, NICKSERV, $prestr);
           }
@@ -1768,7 +1785,7 @@ class Room {
     
     if ($to_tabl) {
       // FIXME BRISK4: include for each kind of table
-      require_once("briskin5/Obj/briskin5.phh");
+      require_once("${G_base}briskin5/Obj/briskin5.phh");
       // Before all align times with table timeout
       for ($table_idx = 0 ; $table_idx < TABLES_N ; $table_idx++) {
         $table_cur =& $this->table[$table_idx];
@@ -1865,7 +1882,7 @@ class Room {
 
   function &add_user(&$sess, &$idx, $name, $pass, $ip)
   {
-    GLOBAL $G_false, $CO_list;
+    GLOBAL $G_base, $G_false, $CO_list;
 
     $idx = 0;
 
@@ -1876,7 +1893,8 @@ class Room {
     $ghost_auth = FALSE;
     $idx = -1;
     $idfree = -1;
-    
+    $code = FALSE;
+
     if (($name_new = validate_name($name)) == FALSE) {
       $idx = -2;
       return ($G_false);
@@ -1888,14 +1906,17 @@ class Room {
 
     /* if pass != FALSE verify the login with pass */
     log_auth("XXX", "auth1");
-    $userdb = new LoginDB();
-    if ($pass != FALSE) {
+
+    // FIXME: now create can return FALSE
+    if (($bdb = BriskDB::create()) != FALSE)
+        $bdb->users_load();
+    if ($pass != FALSE && $bdb != FALSE) { // TODO: here add a method to $bdb to check if the db is available.
       log_auth("XXX", "auth2");
-      $authenticate = $userdb->login_verify($name_new, $pass);
+      $authenticate = $bdb->login_verify($name_new, $pass, $code);
       log_auth("XXX", "authenticate: ".($authenticate != FALSE ? "TRUE" : "FALSE"));
       
       if ($authenticate != FALSE) {
-          $user_type = $authenticate->typeget();
+          $user_type = $authenticate->type_get();
       }
       else {
           $idx = -3;
@@ -1903,7 +1924,7 @@ class Room {
       }
     }
     else {
-      $login_exists =  $userdb->login_exists($name_new);
+      $login_exists =  $bdb->login_exists($name_new);
     }
     for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
       /* free user ? */
@@ -1949,7 +1970,7 @@ class Room {
       $table_idx = $ghost_user->table;
       if ($ghost_user->stat == "table" && $this->table[$table_idx]->player_n == PLAYERS_N) {
         // FIXME BRISK4: include for each kind of table
-        require_once("briskin5/Obj/briskin5.phh");
+        require_once("${G_base}briskin5/Obj/briskin5.phh");
         if (($brisem = Briskin5::lock_data($table_idx)) != FALSE) { 
           if (($bri = &Briskin5::load_data($table_idx)) != FALSE) {
             if ($bri->the_end != TRUE) {
@@ -1991,6 +2012,7 @@ class Room {
 
       
       if ($authenticate != FALSE) {
+        $this->user[$idx]->code = $authenticate->code_get();
         $this->user[$idx]->flags |= USER_FLAG_LISTAUTH;
 
         if (isset($CO_list)) {
@@ -2050,8 +2072,10 @@ class Room {
       $real_idx = $idx;
       if ($login_exists)
         $idx = -($idx + 1);
-      log_main(sprintf("TROVATO LIBERO A [%d] sess [%s] name [%s] count [%d] [%s]", $idx, $sess, $name_new, count($this->user),$this->user[$real_idx]->name));
-      return ($this->user[$real_idx]);
+      log_main(sprintf("TROVATO LIBERO A [%d] sess [%s] name [%s] count [%d] name [%s] code [%s]", $idx, $sess, $name_new, count($this->user),$this->user[$real_idx]->name, $this->user[$real_idx]->code));
+
+      $ret = $this->user[$real_idx];
+      return ($ret);
     }
 
     return ($G_false);
@@ -2539,21 +2563,6 @@ function log_legal($curtime, &$user, $where, $mesg)
   }
 }
 
-function log_points($curtime, &$user, $where, $mesg) 
-{
-  GLOBAL $_SERVER;
-
-  if (($fp = @fopen(LEGAL_PATH."/points.log", 'a')) != FALSE) {
-    /* Unix time | session | nickname | IP | where was | mesg */
-    fwrite($fp, sprintf("%ld|%s|%s|%s|%s|%s|%s|\n", $curtime, $user->sess,
-                        ($user->flags & USER_FLAG_AUTH ? 'A' : 'N'),
-                        $user->name, $_SERVER['REMOTE_ADDR'], $where , $mesg));
-    fclose($fp);
-  }
-}
-
-
-
 
 function lock_banlist()
 {