GhostSess class added to manage logout reasons
[brisk.git] / web / index.php
index 9a7665b..31d3711 100644 (file)
@@ -38,8 +38,10 @@ $mlang_room = array( 'userpasserr'  => array('it' => 'Utente e/o password errati
                                              'en' => 'Standing players'),
                      'headline'     => array('it' => 'briscola chiamata in salsa ajax',
                                              'en' => 'declaration briscola in ajax sauce <b>(Beta)</b>'),
-                     'welcome'      => array('it' => 'Digita il tuo nickname per accedere ai tavoli della briscola',
-                                             'en' => 'Enter your nickname to access to the tables of briscola'),
+                     'welcome'      => array('it' => 'Digita il tuo nickname per accedere ai tavoli della briscola.',
+                                             'en' => 'Enter your nickname to access to the tables of briscola.'),
+                     'reas_anot'    => array('it' => 'La tua sessione è stata assegnata ad un altro browser.',
+                                             'en' => 'EN La tua sessione è stata assegnata ad un altro browser.'),
                      'btn_enter'    => array('it' => 'entra',
                                              'en' => 'enter'),
                      'passwarn'     => array('it' => 'Se non hai ancora una password, lascia il campo in bianco ed entra.',
@@ -237,12 +239,71 @@ function poll_dom() {
     return '';
 }
 
-function index_main(&$brisk, $transp_type, &$header_out, $addr, $get, $post, $cookie)
+function sidebanners_init($sidebanner_idx)
+{
+    for ($i = 0 ; $i < count($sidebanner_idx) ; $i++) {
+        printf("     sidebanner_init(%d);\n", $i);
+    }
+}
+
+function sidebanners_render($sidebanner, $sidebanner_idx)
+{
+    $sb_n = count($sidebanner_idx);
+    if ($sb_n == 0) {
+        return;
+    }
+
+    if ($sb_n == 1) {
+        printf("<br><br>");
+    }
+
+    for ($i = 0 ; $i < $sb_n ; $i++) {
+        $idx = $sidebanner_idx[$i];
+        $sb  = $sidebanner[$idx];
+        if (!array_key_exists('link', $sb)
+            || !array_key_exists('title', $sb)
+            || !array_key_exists('icon_big', $sb)) {
+            continue;
+        }
+        $sb_type = (array_key_exists('type', $sb) ? $sb['type'] : 'meeting');
+        if (array_key_exists('icon', $sb)) {
+            $sb_icon = $sb['icon'];
+        }
+        else {
+            if ($sb_type == 'meeting') {
+                if ($sb_n < 3) {
+                    $sb_icon = 'img/brisk_meeting60.gif';
+                }
+                else {
+                    $sb_icon = 'img/brisk_meeting35.gif';
+                }
+            }
+            else {
+                // no standard icon for other type of events please add them
+                continue;
+            }
+        }
+        $sb_dx =  (array_key_exists('dx', $sb) ? $sb['dx'] : 100);
+        $sb_dy =  (array_key_exists('dy', $sb) ? $sb['dy'] : -230);
+
+        printf('<div class="sidebanner" style="background: #ffd780; border: solid 1px #ffae00; width: 60px;" id="sidebanner%d">', $i);
+        printf('<a target="_blank" href="%s">', $sb['link']);
+        printf('<img style="position: static; border: solid 0px black;" src="%s"', $sb_icon);
+        printf('  onMouseOver="show_bigpict($(\'sidebanner%d\'), \'over\', %d, %d, \'\');"', $i, $sb_dx, $sb_dy);
+        printf('  onMouseOut="show_bigpict($(\'sidebanner%d\'), \'out\', 0, 0, \'\');"', $i);
+        $tit = eschtml($sb['title']);
+        printf('  alt="%s" title="%s"></a></div>', $tit, $tit);
+        printf("\n");
+        printf('<img class="nobohide" style="z-index: 255; border: 1px solid gray;" id="sidebanner%d_big" src="%s">', $i, $sb['icon_big']);
+        printf("\n");
+    }
+}
+
+function index_main(&$brisk, $transp_type, $header, &$header_out, $remote_addr_full, $get, $post, $cookie)
 {
     GLOBAL $G_with_donors, $G_donors_cur, $G_donors_all;
     GLOBAL $G_with_topbanner, $G_topbanner, $G_is_local;
-    GLOBAL $G_with_sidebanner, $G_sidebanner;
-    GLOBAL $G_with_sidebanner2, $G_sidebanner2;
+    GLOBAL $G_sidebanner, $G_sidebanner_idx;
     GLOBAL $G_with_poll;
     GLOBAL $G_lang, $G_lng, $mlang_room;
     GLOBAL $BRISK_SHOWHTML, $BRISK_DEBUG, $_SERVER;
@@ -258,8 +319,10 @@ function index_main(&$brisk, $transp_type, &$header_out, $addr, $get, $post, $co
     if (($table_token = gpcs_var('table_idx', $get, $post, $cookie)) === FALSE)
         unset ($table_token);
 
+    $remote_addr = addrtoipv4($remote_addr_full);
+
     // Use of proxies isn't allowed.
-    if (!$G_is_local && is_proxy($addr)) {
+    if (!$G_is_local && is_proxy($remote_addr)) {
         return FALSE;
     }
 
@@ -275,7 +338,11 @@ function index_main(&$brisk, $transp_type, &$header_out, $addr, $get, $post, $co
       $curtime = time();
 
       /* Actions */
-
+      if (($ghost_sess = $brisk->ghost_sess->pop($sess)) != FALSE) {
+          if ($ghost_sess->reas == GHOST_SESS_REAS_ANOT) {
+              $last_msg = $mlang_room['reas_anot'][$G_lang];
+          }
+      }
       if (validate_sess($sess)) {
           log_main("pre garbage_manager UNO");
           $brisk->garbage_manager(TRUE);
@@ -295,18 +362,25 @@ function index_main(&$brisk, $transp_type, &$header_out, $addr, $get, $post, $co
           }
       }
 
+      $banned = FALSE;
       if ($ACTION == "login" && isset($name)) {
           log_main("pre garbage_manager DUE");
 
-          if (isset($pass_private) == FALSE) {
+          if (isset($pass_private) == FALSE || $pass_private == "") {
               $pass_private = FALSE;
+
+              if ($brisk->ban_check($remote_addr)) {
+                  // TODO: find a way to add a nonblocking sleep(5) here
+                  $banned = TRUE;
+                  $idx = -1;
+              }
           }
 
           $brisk->garbage_manager(TRUE);
           /* try login */
 
-          $ipv4addr = addrtoipv4($addr);
-          if (($user = $brisk->add_user(&$sess, &$idx, $name, $pass_private, $ipv4addr, $cookie)) != FALSE) {
+          if ($banned == FALSE &&
+              ($user = $brisk->add_user(&$sess, &$idx, $name, $pass_private, $remote_addr, $header, $cookie)) != FALSE) {
               $brisk->sess_cur_set($user->sess);
               $ACTION = "room";
               if ($idx < 0) {
@@ -314,7 +388,7 @@ function index_main(&$brisk, $transp_type, &$header_out, $addr, $get, $post, $co
                   $is_login = TRUE;
               }
 
-              log_legal($curtime, $ipv4addr, $user, "STAT:LOGIN", '');
+              log_legal($curtime, $remote_addr, $user, "STAT:LOGIN", '');
 
               // recovery lost game
               if ($user->stat == "table") {
@@ -372,7 +446,7 @@ function index_main(&$brisk, $transp_type, &$header_out, $addr, $get, $post, $co
       $tables .= '<div class="room_tab">';
       $tables .= '<table class="room_tab">';
       for ($ii = 0 ; $ii < TABLES_N ; $ii++) {
-          if ($user->flags & USER_FLAG_AUTH)
+          if ($user->is_auth())
               $i = $ii;
           else
               $i = TABLES_N - $ii - 1;
@@ -807,7 +881,7 @@ google_color_url = "000000";
           // MLANG garantisci
           .$mlang_room['tit_splash'][$G_lang].
           '</a><br>
-'.($user->flags & USER_FLAG_AUTH ? '
+'.($user->is_auth() ? '
 <a href="#" title="'
           // MLANG garantisci per un tuo conoscente
           .$mlang_room['prefs_desc'][$G_lang].'"
@@ -914,13 +988,8 @@ supported by:<br>
 <?php
      if ($G_with_topbanner) {
        printf("     topbanner_init();\n");
-    }
-     if ($G_with_sidebanner) {
-       printf("     sidebanner_init();\n");
-    }
-     if ($G_with_sidebanner2) {
-       printf("     sidebanner2_init();\n");
-    }
+     }
+     sidebanners_init($G_sidebanner_idx);
 ?>
 
      g_withflash = DetectFlashVer(6,0,0);
@@ -960,18 +1029,7 @@ supported by:<br>
     printf("<table class=\"floaty\"><tr><td class=\"floatyleft\">\n");
     printf($brisk_vertical_menu, '', '');
 
-   if ($G_with_sidebanner xor $G_with_sidebanner2) {
-     printf("<br><br>");
-   }
-
-   if ($G_with_sidebanner) {
-     printf("%s", $G_sidebanner);
-   }
-
-
-   if ($G_with_sidebanner2) {
-     printf("%s", $G_sidebanner2);
-   }
+    sidebanners_render($G_sidebanner, $G_sidebanner_idx);
    printf("</td><td>");
 ?> 
 
@@ -1086,13 +1144,7 @@ else {
      if ($G_with_topbanner) {
        printf("     topbanner_init();\n");
      }
-     if ($G_with_sidebanner) {
-       printf("     sidebanner_init();\n");
-    }
-     if ($G_with_sidebanner2) {
-       printf("     sidebanner2_init();\n");
-    }
-
+     sidebanners_init($G_sidebanner_idx);
 ?>
      sess = "<?php echo "$sess"; ?>";
 xstm = new xynt_streaming(window, "<?php echo "$transp_type"; ?>", 80, 2, null /* console */, gst, 'index_php', 'sess', sess, $('sandbox'), 'index_rd.php', function(com){eval(com);});
@@ -1152,19 +1204,7 @@ if ($is_login) {
    printf("<table class=\"floaty\"><tr><td class=\"floatyleft\">\n");
    printf($brisk_vertical_menu, '', $brisk_donate);
 
-
-   if ($G_with_sidebanner xor $G_with_sidebanner2) {
-     printf("<br><br>");
-   }
-
-   if ($G_with_sidebanner) {
-     printf("%s", $G_sidebanner);
-   }
-
-
-   if ($G_with_sidebanner2) {
-     printf("%s", $G_sidebanner2);
-   }
+   sidebanners_render($G_sidebanner, $G_sidebanner_idx);
 
    printf("</td><td>");
 ?>