Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Thursday, April 18, 2024

Diff for wolboard/wolboard.php between version 1.7 and 1.13

version 1.7, 2002/03/29 19:45:45 version 1.13, 2002/06/10 14:23:45
Line 1 
Line 1 
 <?  <?
 /*  /*
         Module: WolBoard.php3          Module: WolBoard.php3
           
         Author: Martin Karas a.k.a. Wolcano          Author: Martin Karas a.k.a. Wolcano
         Date:   14.03.2002          Date:   24.04.2002
         Mail:   wolcano@pobox.sk          Mail:   wolcano@pobox.sk
         Version:        v5.0          Version:        v5.2
         License:        not chosen yet - this file is strictly private,          License:        not chosen yet - this file is strictly private,
                 you may not copy/change/distribute it without authors                  you may not copy/change/distribute it without authors
                 explicit premission.                  explicit premission.
         Description:    Simple message-board. Can store data in files or          Description:    Simple message-board. Can store data in files or
                 PEAR-compliant DB (not fully implemented yet)                  PEAR-compliant DB (not fully implemented yet)
           Copyright: Platon SDG     http://www.platon.sk
         TODO: (see TODO file)  
                   TODO: (see TODO file)
         External files specification:  
         $message_file :== (<message_line><eoln>)*          External files specification:
                 <message_line> :== <unix_time>:<username>:<message> ||          $message_file :== (<message_line><eoln>)*
                         <unix_time>:<username>:<deleted_message>                  <message_line> :== <unix_time>:<username>:<message> ||
                 <deleted_message> :== *<message>                          <unix_time>:<username>:<deleted_message>
                   <deleted_message> :== *<message>
         $user_file :== (<user_line><eoln>)*  
                 <user_line> :== <username>:<email>:<md5sum_of_password>          $user_file :== (<user_line><eoln>)*
                   <user_line> :== <username>:<email>:<md5sum_of_password>
         Database specification:  
         create table messages <unknown for now>          Database specification:
                   See "sql/" files.
         create table users <unknown>  
           Input parameters:
                   $pagesize       - # of messages  per page
         Input parameters:                  $page           - #th page
                 $pagesize       - # of messages  per page                  $autorefresh    - refresh time (secs)
                 $page           - #th page  //              $admin          - user/message mantainance
                 $autorefresh    - refresh time (secs)                  $style          - message view style (0 = board, 1 = chat)
 //              $admin          - user/message mantainance                  $time           - message time index
                 $style          - message view style (0 = board, 1 = chat)                  $nick           - user nickname
                 $time           - message time index                  $pass           - password
                 $nick           - user nickname                  $message        - text of the posted message
                 $pass           - password                  $header         - shows only header
                 $message        - text of the posted message                  $body           - show only body
                 $header         - shows only header                  $bodyframe      - target body frame
                 $body           - show only body                  $headerframe    - targer header frame
                 $bodyframe      - target body frame                  $disablepart    - Wont show some parts of the whole document
                 $headerframe    - targer header frame                          (0 - none, 1 - body, 2 - head, 3 - both)
                 $disablepart    - Wont show some parts of the whole document                  $setframes      - 1 - create <framesset>
                         (0 - none, 1 - body, 2 - head, 3 - both)                          0 - disable frames (?? :))
                 $setframes      - 1 - create <framesset>                  $frameset       - are the frames set? :)
                         0 - disable frames (?? :))                  $setframes      - do we want to create framewires?
                 $frameset       - are the frames set? :)  
                   $createuser     - (internal)
                 $createuser     - (internal)                  $deleteok       - (internal)
                 $deleteok       - (internal)                  $newnick        - (internal)
                 $newnick        - (internal)                  $archive        - archive file prefix
                 $archive        - archive file prefix                  $archive_no     - index of archived file
                 $archive_no     - index of archived file                  $submit_type    - submit button type
                 $submit_type    - submit button type                  $reply_to       - index of message you want to reply (inserts quoted message)
                   $rootlogin      - wether should display the root login dialog
                 CHANGE LOG:  
                 * 5.0   - DB implementation finished (hopefully)                  CHANGE LOG:
                         - now allowing some html tags (specified by (array) $allowed_tags)                  * 5.4   - "fixed" adduser bug (now ignoring result of flock() :()
                                 - no more dependent on external <framesets>! :) we do the dirty work                          - added root login for viewing deleted messages
                                   ourselves (try setting the setframes=1 GET parameter)                  * 5.3   - external CSS file
                 * 4.4.2 - 3/4 implementation DB done                  * 5.2   - added "reply" link
                 * 4.4   - DB/PEAR drafts                  * 5.1   - updated SQL queries
                         - sources moved to CVS                                     - sprtinf()-ed and quote()-ed all SQL queries
                 * 4.3   - starting MySQL DB implementation                          - some bug fixes
                 * 4.2   - started documentation                  * 5.0   - DB implementation finished (hopefully)
                         - removed autosubmit on nick change                          - now allowing some html tags (specified by (array) $allowed_tags)
                             - changed default autorefresh to 5 mins                                  - no more dependent on external <framesets>! :) we do the dirty work
                             *FIX* now rawurldecoding username (previously rawurlencoded)                                    ourself (try setting the setframes=1 GET parameter)
                 * 4.1   - undocumented :)                  * 4.4.2 - 3/4 implementation DB done
 */                  * 4.4   - DB/PEAR drafts
                           - sources moved to CVS
                   * 4.3   - starting MySQL DB implementation
         // IMPORTANT CONSTANTS (change if needed)                  * 4.2   - started documentation
         $WB_version = "5.0";                          - removed autosubmit on nick change
         $WB_name = "Wol's Message Board";                              - changed default autorefresh to 5 mins
         $strip_slashes = 1;                              *FIX* now rawurldecoding username (previously rawurlencoded)
         $DEFAULT_HEAD_FRAME = "";                  * 4.1   - undocumented :)
         $DEFAULT_BODY_FRAME = "";  */
         $use_virtual_delete = 1;        //use delete flagging instead of real delete  
         $root_name = "root";  
         $root_md5_password = "896ae34257056a6edb7643e3db85bb21";          // IMPORTANT CONSTANTS (change if needed)
           $WB_version = "5.2";
         // Filesystem defaults          $WB_name = "Wol's Message Board";
         $message_file = "board_messages.txt";          $strip_slashes = 1;
         $user_file = "board_emails.txt";          $DEFAULT_HEAD_FRAME = "";
         $move_old_mesages = 1;          $DEFAULT_BODY_FRAME = "";
         $old_messages_folder = "history/";          $css_file = "style.css";
         $hist_file_prefix = "board_hist_file_"; // used in REGEXPs! alphabeticals only          $use_virtual_delete = 1;        //use delete flagging instead of real delete
         $max_msgs_in_one_file = 200;          $root_name = "root";
         $min_msgs_in_board = 50;          $root_md5_password = "896ae34257056a6edb7643e3db85bb21";
   
         // Database defaults          // Filesystem defaults
         $use_db = 1;          $message_file = "messages.dat";
         $db_message_table = "wolboard_messages";          $user_file = "users.dat";
         $db_user_table = "wolboard_users";          $move_old_mesages = 1;
         //$db_host = "db.host.sk";          $old_messages_folder = "history/";
         $db_host = "localhost";          $hist_file_prefix = "board_hist_file_"; // used in REGEXPs! alphabeticals only
         $db_database = "syndrome";          $max_msgs_in_one_file = 200;
         //$db_user = "syndrome";          $min_msgs_in_board = 50;
         $db_user = "";  
         //$db_pass = "kofola";          // Database defaults
         $db_pass = "";          $use_db = 0;
           $db_message_table = "wolboard_messages";
         $allowed_tags = array(          $db_user_table = "wolboard_users";
                 "<b>", "</b>",          //$db_host = "db.host.sk";
                 "<i>", "</i>",          $db_host = "localhost";
                 "<u>", "</u>",          $db_database = "syndrome";
                 "<del>", "</del>",          $db_user = "";
                 "&copy;"          $db_pass = "";
                 );  
           $allowed_tags = array(
                   "<b>", "</b>",
         // FUNCTIONS                  "<i>", "</i>",
                           "<u>", "</u>",
         function good($a) {                  "<del>", "</del>",
                 return (isset($a)                  "&copy;"
                  && (                  );
                         (is_string($a) && ($a != "")) ||  
                         (!is_string($a) && ($a != 0))  
                         )          // FUNCTIONS
                 );  
         }          function good($a) {
                           return (isset($a)
         function link_replace($link, $paramname, $paramvalue) {                   && (
                 $link = eregi_replace("&$", "", $link);                          (is_string($a) && ($a != "")) ||
                 $link = eregi_replace("&?$paramname=[^&]*", "", $link);                          (!is_string($a) && ($a != 0))
                 if ($paramvalue)                          )
                         $link .= "&$paramname=$paramvalue";                  );
                 return $link;          } // good($a)
         }  
           function link_replace($link, $paramname, $paramvalue) {
         function show_array($a) {                  $link = eregi_replace("&$", "", $link);
                 echo "<table border=1>\n";                  $link = eregi_replace("&?$paramname=[^&]*", "", $link);
                 $keys = array_keys($a);                  if ($paramvalue)
                           $link .= "&$paramname=$paramvalue";
                 for($i = 0; $i < sizeof($a); $i++) {                  return $link;
                         echo "<tr>\n";          } // link_replace($link, $paramname, $paramvalue)
                         echo "<td>";  
                         echo $keys[$i]."</td>\n<td>";          function show_array($a) {
                   echo "<table border=1>\n";
                         if ((is_array($a[$keys[$i]])) && ($keys[$i] !== "GLOBALS")) {                  $keys = array_keys($a);
                                 show_array($a[$keys[$i]]);  
                         }                  for($i = 0; $i < sizeof($a); $i++) {
                         else {                          echo "<tr>\n";
                                 echo $a[$keys[$i]];                          echo "<td>";
                         };                          echo $keys[$i] . "</td>\n<td>";
                         echo "</td>\n</tr>\n";  
                 }                          if ((is_array($a[$keys[$i]])) && ($keys[$i] !== "GLOBALS")) {
                 echo "</table>";                                  show_array($a[$keys[$i]]);
         }                          }
                           else {
         function array_copy($a, $i, $n = "x") {                                  echo $a[$keys[$i]];
                 if (($n == "x") || ($n > (sizeof($a) - $i)))                          };
                         $n = sizeof($a) - $i;                          echo "</td>\n</tr>\n";
                                           }
                 for($j = 0; $j < $n; $j++) {                  echo "</table>";
                         $ret[$j] = $a[$j + $i];          } // show_array($a)
                 }  
           function array_copy($a, $i, $n = "x") {
                 return $ret;                  if (($n == "x") || ($n > (sizeof($a) - $i)))
         }                          $n = sizeof($a) - $i;
   
         function array_chunk($a, $n) {                  for($j = 0; $j < $n; $j++) {
                 if (!is_array($a))                          $ret[$j] = $a[$j + $i];
                         return $a;                  }
                 $splits = sizeof($a) / $n;  
                 for($i = 0; $i < $splits; $i++) {                  return $ret;
                         $ret[$i] = array_copy($a, $i*$n, $n);          } // array_copy($a, $i, $n = "x")
                 }  
                 return $ret;          function array_chunk($a, $n) {
         }                  if (!is_array($a))
                           return $a;
         function w_chk($n, $v) {                  $splits = sizeof($a) / $n;
                 return ($v?"$n=$v&":"");                  for($i = 0; $i < $splits; $i++) {
         }                          $ret[$i] = array_copy($a, $i*$n, $n);
                   }
         function create_link() {                  return $ret;
                 global $pagesize, $page, $autorefresh, $admin, $style,          } // array_chunk($a, $n)
                         $time, $nick, $pass, $message, $createuser, $deleteok,  
                         $autorefresh, $disablepart, $frameset, $headframe,          function w_chk($n, $v) {
                         $bodyframe, $archive, $archive_no;                  return ($v ? "$n=$v&" : "");
                 return eregi_replace("&$", "",          } // w_chk($n, $v)
                         w_chk("nick", $nick).  
                         w_chk("pagesize", $pagesize).          function create_link() {
                         w_chk("page", $page).                  global $pagesize, $page, $autorefresh, $admin, $style,
 //                      w_chk("time", $time).                          $time, $nick, $pass, $message, $createuser, $deleteok,
 //                      w_chk("pass", $pass).                          $autorefresh, $disablepart, $frameset, $headframe,
 //                      w_chk("message", $message).                          $bodyframe, $archive, $archive_no;
 //                      w_chk("deleteok", $deleteok).                  return eregi_replace("&$", "",
 //                      w_chk("createuser", $createuser).                          w_chk("nick", $nick) .
 //                      w_chk("newnick", $newnick).                          w_chk("pagesize", $pagesize) .
                         w_chk("autorefresh", $autorefresh).                          w_chk("page", $page) .
                         w_chk("style", $style).  //                      w_chk("time", $time) .
                         w_chk("admin", $admin).  //                      w_chk("pass", $pass) .
                         w_chk("disablepart", $disablepart).  //                      w_chk("message", $message) .
                         w_chk("frameset", $frameset).  //                      w_chk("deleteok", $deleteok) .
                         w_chk("headframe", $headframe).  //                      w_chk("createuser", $createuser) .
                         w_chk("bodyframe", $bodyframe).  //                      w_chk("newnick", $newnick) .
                         w_chk("archive", $archive).                          w_chk("autorefresh", $autorefresh) .
                         w_chk("archive_no", $archive_no)                          w_chk("style", $style) .
                 );                          w_chk("admin", $admin) .
         }                          w_chk("disablepart", $disablepart) .
                           w_chk("frameset", $frameset) .
         function wait_read_lock($f, $max_wait = 9999) {                          w_chk("headframe", $headframe) .
                 $start = time();                          w_chk("bodyframe", $bodyframe) .
                 while ((!flock($f, 1)) && ($start + $max_wait < time()))                          w_chk("archive", $archive) .
                         sleep(1);                          w_chk("archive_no", $archive_no)
                 return ($start + $max_wait < time())?                  );
                         1:0;          } // create_link()
         }  
           function split_url_vars($s) {
         function wait_write_lock($f, $max_wait = 9999) {                  $a = explode('&', $s);
                 $start = time();                  $i = 0;
                 while ((!flock($f, 2)) && ($start + $max_wait < time()))                  $s = array();
                         sleep(1);                  while ($i < sizeof($a)) {
         }                          $b = explode('=', $a[$i]);
                           $s[htmlspecialchars(urldecode($b[0]))] =
         function release_lock($f) {                                  htmlspecialchars(urldecode($b[1]));
                 flock($f, 3);                          $i++;
                 return 1;                  }
         }                  return $s;
           } // split_url_vars($s)
         function show_options($optnames, $optvalues, $selected) {  
                 if (!is_array($optvalues))          function create_hidden_inputs($a, $val = 0) {
                         return 0;                  if (is_array($a)) {
                           $k = array_keys($a);
                 $found = 0;                          $ret = '';
                 $ret = "";                          for($i = 0; $i < sizeof($a); $i++) {
                 for($i = 0; $i < sizeof($optvalues); $i++) {                                  $ret .= "<input type=hidden name=\"$k[$i]\" ".
                         $ret .= "<option";                                          "value=\"" . $a[$k[$i]] . "\">\n";
                         if (good($optvalues[$i])) {                          }
                                 $ret .= " value=".$optvalues[$i];                          return $ret;
                                 if ($optvalues[$i] == $selected) {                  }
                                         $found++;                  else {
                                         $ret .= " selected";                          return "<input type=hidden name=\"$a\" value=\"$val\">\n";
                                 }                  }
                         }          } // create_hidden_inputs($a);
                         $ret .= ">";  
                         if (good($optnames[$i]))          function create_reply($msg_arr) {
                                 $ret .= $optnames[$i];                  /*
                         $ret .= "</option>\n";                   $msg_arr keys: time, name, message, email
                 }                  */
                 if ((!$found) && ($selected != ""))                  $quote_string = "&gt; ";
                         $ret .= "<option value=$selected selected>Custom</option>\n";                  $ret = $msg_arr["name"] .
                 echo $ret;                          " (" .
         }                          format_time($msg_arr["time"]) .
                           ")<br>\n$quote_string" .
         function get_user($str, $i = 0) {                          eregi_replace("\n", "\n$quote_string", $msg_arr["message"]) .
                 $tmp = strtok(trim($str), ":");                          "<br>";
                 if ($i)                  return $ret;
                         // (1) from $MESSAGE_FILE          } // create_reply($msg_arr)
                         return strtok(":");  
                 else          function wait_read_lock($f, $max_wait = 9999) {
                         // (0) from $USER_FILE                  $start = time();
                         return $tmp;                  while ((!flock($f, 1)) && ($start + $max_wait < time()))
         }                          sleep(1);
                           return ($start + $max_wait < time());
         function get_users($usr_file, $use_db = 0, $db_conn = 0) {          } // wait_read_lock($f, $max_wait = 9999)
                 if (!$use_db) {  
                         // Working with files          function wait_write_lock($f, $max_wait = 9999) {
                         $fp = fopen($usr_file, "r");                  $start = time();
                         wait_read_lock($fp);                  while ((!flock($f, 2)) && ($start + $max_wait < time()))
                         $ret = file($usr_file);                          sleep(1);
                         for($i = 0; $i < sizeof($ret); $i++) {                  return ($start + $max_wait < time());
                                 $ret[$i] = trim($ret[$i]);          } // wait_write_lock($f, $max_wait = 9999)
                                 $ret[$i] = get_user($ret[$i], 0);  
                         }          function release_lock($f) {
                         release_lock($fp);                  flock($f, 3);
                         return $ret;                  return 1;
                 }          } // release_lock($f)
                 else {  
                         // Working with DB          function show_options($optnames, $optvalues, $selected) {
                         // $usr_file stores Table name                  if (!is_array($optvalues))
                         if (!$db_conn)                          return 0;
                                 return false;  
                   $found = 0;
                         $res = $db_conn->query("select nick from $usr_file");                  $ret = "";
                         $i = 0;                  for($i = 0; $i < sizeof($optvalues); $i++) {
                         while ($tmp = $res->fetchRow()) {                          $ret .= "<option";
                                 $ret[$i++] = $tmp["nick"];                          if (good($optvalues[$i])) {
                         }                                  $ret .= " value=" . $optvalues[$i];
                                   if ($optvalues[$i] == $selected) {
                         $db_conn->free;                                          $found++;
                         return $ret;                                          $ret .= " selected";
                 }                                  }
         }                          }
                                   $ret .= ">";
         function format_time($time, $style = 0) {                          if (good($optnames[$i]))
                 switch($style) {                                  $ret .= $optnames[$i];
                         case 1:                          $ret .= "</option>\n";
                                 return date("H:i:s", $time);                  }
                         default:                  if ((!$found) && ($selected != ""))
                                 return date("H:i:s - d. M Y", $time);                          $ret .= "<option value=$selected selected>Custom</option>\n";
                 }                  echo $ret;
         }          } // show_options($optnames, $optvalues, $selected)
   
         function get_time($str) {          function get_user($str, $i = 0) {
                 return strtok(trim($str), ":");                  $tmp = strtok(trim($str), ":");
         }                  if ($i)
                                   // (1) from $MESSAGE_FILE
         function get_pass($str) {                          return strtok(":");
                 return rawurldecode(trim(strtr(strrchr($str, ":"), ":", ";")));                  else
         }                          // (0) from $USER_FILE
                           return $tmp;
         function get_email($str) {          } // get_user($str, $i = 0)
                 if (ereg("[^:]*:([^:]*):", $str, $regs))  
                         return $regs[1];          function get_users($usr_file, $use_db = 0, $db_conn = 0) {
                 else                  if (!$use_db) {
                         return "";                          // Working with files
         }                          $fp = fopen($usr_file, "r");
                                   wait_read_lock($fp);
         function write_mail($usr_file, $user, $mail = "", $pass = "", $use_db = 0, $db_conn) {                          $ret = file($usr_file);
                 $pass = md5(rawurlencode($pass));                          for($i = 0; $i < sizeof($ret); $i++) {
                 if (!$use_db) {                                  $ret[$i] = trim($ret[$i]);
                         // Working with files                                  $ret[$i] = get_user($ret[$i], 0);
                         $fp = fopen($usr_file, "a");                          }
                         if (!wait_write_lock($fp))                          release_lock($fp);
                                 return false;                          return $ret;
                         fwrite($fp, strtr($user, ":", ";").":".strtr($mail, ":", ";").                  }
                                 ":".$pass."\n");                  else {
                         release_lock($fp);                          // Working with DB
                         fclose($fp);                          // $usr_file stores Table name
                         return true;                          if (!$db_conn)
                 }                                  return false;
                 else {  
                         // Working with DB                          $sql = "SELECT nick FROM $usr_file";
                         if (!$db_conn)                          $res = $db_conn->query($sql);
                                 return false;  
                           if (DB::isError($res))
                         $user = addslashes($user);                                  return false;
                         $mail = addslashes($mail);  
                         $sql = "insert into $usr_file ".                          $i = 0;
                                 "(nick, email, pass) ".                          while ($tmp = $res->fetchRow()) {
                                 "values ".                                  $ret[$i++] = $tmp["nick"];
                                 "('$user', '$mail', '$pass')";                          }
                         $res = $db_conn->query($sql);  
                         return (DB::isError($res));                          $res->free();
                 }                          return $ret;
         }                  }
           } // get_users($usr_file, $use_db = 0, $db_conn = 0)
         function change_mail($usr_file, $user, $newmail = "", $pass = "",  
                 $use_db = 0, $db_conn = 0) {          function format_time($time, $style = 0) {
                 function set_mail($usr_line, $newmail) {                  switch($style) {
                         $ret = strtok($usr_line, ":");                          case 1:
                         strtok(":");                                  return date("H:i:s", $time);
                         $ret .= $newmail.":".strtok(":");                          default:
                         return $ret;                                  return date("H:i:s - d. M Y", $time);
                 }                  }
           } // format_time($time, $style = 0)
                 if (!$use_db) {  
                         //check if valid data is sent          function get_time($str) {
                         //we dont want to run for now                  return strtok(trim($str), ":");
                         if (true)//!!!!!!!!          } // get_time($str)
                                 return 0;  
           function get_pass($str) {
                         // Using files                  return rawurldecode(trim(strtr(strrchr($str, ":"), ":", " ")));
                         $fp = fopen($usr_file, "w+");          } // get_pass($str)
                         wait_write_lock($fp);  
                         $tmp = files($usr_file);          function get_email($str) {
                         $i = 0;                  if (ereg("[^:]*:([^:]*):", $str, $regs))
                         $found = false;                          return $regs[1];
                         while (($i < length($tmp)) && (!$found)) {                  else
                                 $u = get_user($tmp[$i]);                          return "";
                                 if ($u == $user) {          } // get_email($str)
                                         $tmp[$i] = set_mail($tmp[$i], $newmail);  
                                         $found = true;          function write_mail($usr_file, $user, $mail = '', $pass = '', $root_name = '', $use_db = 0, $db_conn) {
                                 }                  $pass = md5(rawurlencode($pass));
                                 $i++;                  if ($user == $root_name)
                         }                          return false;
                           if (!$use_db) {
                         if ($found) {                          // Working with files
                                 fwrite($fp, $u);                          $fp = fopen($usr_file, "a");
                                 release_lock($fp);                          wait_write_lock($fp);
                                 fclose($fp);                          /*
                                 return 1;                          // this should work, but doesn't :(((
                         }                          // won't use this shitty file locking mechanism
                         else                          if (!wait_write_lock($fp))
                                 return 0;                                  return false;
                 }                          */
                 else {                          fwrite($fp, strtr($user, ":", ";") . ":" . strtr($mail, ":", ";") .
                         // Using DB                                  ":" . $pass . "\n");
                         if (!$db_conn)                          release_lock($fp);
                                 return false;                          fclose($fp);
                           return true;
                         $sql = "update $usr_file set mail = '$newmail' ".                  }
                                 "where name = '$user' and pass = '$pass'";                  else {
                         $res = $db_conn->query($sql);                          // Working with DB
                         if (DB::isError($res))                          if (!$db_conn)
                                 return false;                                  return false;
                         return 1;  
                 }                          $sql = sprintf("INSERT INTO %s (nick, email, pass) VALUES (%s, %s, %s)",
         }                                  $usr_file, $db_conn->quote($user),
                                           $db_conn->quote($mail), $db_conn->quote($pass));
         function delete_mail($usr_file, $user = "", $mail = "", $pass = "",  
                 $use_db = 0, $db_conn = 0) {                          $res = $db_conn->query($sql);
                 if (!$use_db) {  
                         //!!!! TODO                          return !(DB::isError($res));
                         // Use files                  }
                         return 0;                } // write_mail($usr_file, $user, $mail = "", $pass = "", $use_db = 0, $db_conn)
                 }  
                 else {          function change_mail($usr_file, $user, $newmail = "", $pass = "",
                         // Use DB                  $use_db = 0, $db_conn = 0) {
                         if (!$db_conn)                  function set_mail($usr_line, $newmail) {
                                 return false;                          $ret = strtok($usr_line, ":");
                           strtok(":");
                         $sql = "update $usr_file set mail = '' ".                          $ret .= $newmail . ":" . strtok(":");
                                 "where name = '$user' and pass = '$pass'".                          return $ret;
                                 "and mail = '$mail'";                  }
                         $res = $db_conn->query($sql);  
                         if (DB::isError($res))                  if (!$use_db) {
                                 return false;                          //check if valid data is sent
                           //we dont want to run for now
                         return 0;                                if (true)//!!!!!!!!
                 }                                  return 0;
         }  
                                   // Using files
         function get_emails($usr_file, $use_db = 0, $db_conn = 0) {                          $fp = fopen($usr_file, "w+");
                 if (!$use_db) {                          wait_write_lock($fp);
                         // Use files                          $tmp = files($usr_file);
                         $fp = fopen($usr_file, "r");                          $i = 0;
                         wait_read_lock($fp);                          $found = false;
                         $f = file($usr_file);                          while (($i < length($tmp)) && (!$found)) {
                         for($i = 0; $i < sizeof($f); $i++)                                  $u = get_user($tmp[$i]);
                                 $ret[get_user($f[$i], 0)] = get_email($f[$i]);                                  if ($u == $user) {
                                                   $tmp[$i] = set_mail($tmp[$i], $newmail);
                         release_lock($fp);                                          $found = true;
                         return $ret;                                  }
                 }                                  $i++;
                 else {                          }
                         // Use DB  
                         if (!$db_conn)                          if ($found) {
                                 return false;                                  fwrite($fp, $u);
                                   release_lock($fp);
                         $sql = "select nick, email from $usr_file";                                  fclose($fp);
                         $res = $db_conn->query($sql);                                  return 1;
                         if (DB::isError($res))                          }
                                 return false;                          else
                         while ($row = $res->fetchRow()) {                                  return 0;
                                 $rows[$row["nick"]] = $row["email"];                  }
                         }                  else {
                         return $rows;                          // Using DB
                 }                          if (!$db_conn)
         }                                  return false;
   
         function read_messages($msg_file, $usr_file, $full = 0, $use_db = 0,                          $sql = sprintf("UPDATE %s SET mail = %s WHERE name = %s AND pass = %s",
                 $db_conn = 0) {                                  $usr_file, $db_conn->quote($newmail),
                 if (!$use_db) {                                  $db_conn->quote($user), $db_conn->quote($pass));
                         $mails = get_emails($usr_file, 0);                          $res = $db_conn->query($sql);
                         $mfp = fopen($msg_file, "r");  
                         wait_read_lock($mfp);                          return !(DB::isError($res));
                         $f = file($msg_file);                  }
                         $n = 0;          }
                         for ($i = 0; $i < sizeof($f); $i++) {  
                                 if ($f[$i] != "") {          function delete_mail($usr_file, $user = "", $mail = "", $pass = "",
                                         if ((!$full) && ereg("[^:]*:[^:]*:\*", $f[$i], $regs))                  $use_db = 0, $db_conn = 0) {
                                                 continue;                  if (!$use_db) {
                                         $ret[$n]["time"] = strtok($f[$i], ":");                          //!!!! TODO
                                         $ret[$n]["name"] = rawurldecode(strtok(":"));                          // Use files
                                         $ret[$n]["message"] = trim(rawurldecode(strtok(":")));                          return false;
                                         $ret[$n]["email"] = $mails[$ret[$n]["name"]];                  }
                                         $n++;                  else {
                                 }                          // Use DB
                         }                          if (!$db_conn)
                         release_lock($mfp);                                  return false;
                         return $ret;  
                 }                          $sql = sprintf("UPDATE %s SET mail = '' WHERE ".
                 else {                                  "name = %s AND pass = %s AND mail = %s",
                         // Use DB                                  $usr_file, $db_conn->quote($user),
                         if (!$db_conn)                                  $db_conn->quote($pass), $db_conn->quote($mail));
                                 return false;                          $res = $db_conn->query($sql);
   
                         $sql = "select author_id, created AS time, text AS message from $msg_file";                          return !(DB::isError($res));
                         if (!$full)                  }
                                 $sql .= " where flags = 0";          }
                           
                         $res = $db_conn->query($sql);          function get_emails($usr_file, $use_db = 0, $db_conn = 0) {
                   if (!$use_db) {
                         if (DB::isError($res))                          // Use files
                                 return false;                          $fp = fopen($usr_file, "r");
                         $j = 0;                          wait_read_lock($fp);
                         while ($row = $res->fetchRow()) {                          $f = file($usr_file);
                                 $authors[$row["author_id"]][] = $j;                          for($i = 0; $i < sizeof($f); $i++)
                                 $t = $row["time"];                                  $ret[get_user($f[$i], 0)] = get_email($f[$i]);
                                 /*  
                                 $time = unpack($row["time"],                          release_lock($fp);
                                         "a4year/a2month/a2day/a2hours/a2minutes/a2seconds");                          return $ret;
                                 $row["time"] = mktime($time["seconds"],                  }
                                         $time["minutes"], $time["hours"],                  else {
                                         $time["day"], $time["month"], $time["year"]);                          // Use DB
                                 /*/                          if (!$db_conn)
                                 $row["time"] = mktime(                                  return false;
                                         $row["time"][8] . $row["time"][9],  
                                         $row["time"][10] . $row["time"][11],                          $sql = sprintf("SELECT nick, email FROM %s", $usr_file);
                                         $row["time"][12] . $row["time"][13],                          $res = $db_conn->query($sql);
                                         $row["time"][4] . $row["time"][5],                          if (DB::isError($res))
                                         $row["time"][6] . $row["time"][7],                                  return false;
                                         $row["time"][0] . $row["time"][1] .  
                                         $row["time"][2] . $row["time"][3]                          while ($row = $res->fetchRow()) {
                                 );                                  $rows[$row["nick"]] = $row["email"];
                                 //*/                          }
                                 $row["message"] = rawurldecode($row["message"]);  
                                 $messages[$j++] = $row;                          $res->free();
                         }  
                         $req->free;                          return $rows;
                                           }
                         $sql = "select id, nick AS name, email from $usr_file ";          } // get_emails($usr_file, $use_db = 0, $db_conn = 0)
                         if (is_array($authors))  
                                 $sql .= "where id = " . implode(array_keys($authors), "or id = ");          function read_messages($msg_file, $usr_file, $full = 0, $use_db = 0,
                   $db_conn = 0) {
                         $res = $db_conn->query($sql);                  if (!$use_db) {
                           $mails = get_emails($usr_file, 0);
                         if (DB::isError($res))                          $mfp = fopen($msg_file, "r");
                                 return false;                          wait_read_lock($mfp);
                           $f = file($msg_file);
                         while ($row = $res->fetchRow())                          $n = 0;
                                 for ($i = 0; $i < sizeof($authors[$row["id"]]); $i++) {                          for ($i = 0; $i < sizeof($f); $i++) {
                                         $messages[$authors[$row["id"]][$i]]["name"] = rawurldecode($row["name"]);                                  if ($f[$i] != "") {
                                         $messages[$authors[$row["id"]][$i]]["email"] = $row["email"];                                          if ((!$full) && ereg("[^:]*:[^:]*:\*", $f[$i], $regs))
                                 }                                                  continue;
                                                                   $ret[$n]["time"] = strtok($f[$i], ":");
                         return $messages;                                          $ret[$n]["name"] = rawurldecode(strtok(":"));
                 }                                          $ret[$n]["message"] = trim(rawurldecode(strtok(":")));
         }                                          $ret[$n]["email"] = $mails[$ret[$n]["name"]];
                                           $n++;
         function need_to_split($a, $max, $min) {                                  }
                 if ((sizeof($a) - $max) <= $min)                          }
                         return false;                          release_lock($mfp);
                 else                          return $ret;
                         return true;                  }
         }                  else {
                           // Use DB
         function split_messages_to_more_files($msgs, $max_len, $min_len,                          if (!$db_conn)
         $hist_dir, $hist_file_prefix = "board_hist_file_", $index_style = 0) {                                  return false;
                 if (!need_to_split($msgs, $max_len, $min_len))  
                         return $msgs;                          $sql = sprintf("SELECT author_id, created AS time, " .
                 $full = array_chunk($msgs, $max_len);                                  "text AS message FROM %s", $msg_file);
                           if (!$full)
                 $d = opendir($hist_dir);                                  $sql .= " WHERE flags = 0";
                 $i = -1;  
                 $max_num = -1;                          $res = $db_conn->query($sql);
                 // looking for previous save of maximum index (and count of saves)                          if (DB::isError($res))
                 while (($file = readdir($d)) !== false) {                                  return false;
                         if (ereg("^$hist_file_prefix([0-9]*)", $file, $regs)) {  
                                 $i++;                          $j = 0;
                                 if ($max_num < $regs[1])                          while ($row = $res->fetchRow()) {
                                         $max_num = $regs[1];                                  $authors[$row["author_id"]][] = $j;
                         }                                  $t = $row["time"];
                 }  
                 closedir($d);                                  $row["time"] = mktime(
                                           $row["time"][8] . $row["time"][9],
                 switch($index_style) {                                          $row["time"][10] . $row["time"][11],
                         case "0":                                          $row["time"][12] . $row["time"][13],
                                 $new_index = $max_num + 1;                                          $row["time"][4] . $row["time"][5],
                                 break;                                          $row["time"][6] . $row["time"][7],
                         case "1":                                          $row["time"][0] . $row["time"][1] .
                                 $new_index = ++$i;                                          $row["time"][2] . $row["time"][3]
                                 break;                                  );
                 }  
                                                   $row["message"] = rawurldecode($row["message"]);
                 for($i = 0; $i < (sizeof($full) - 1); $i++) {                                  $messages[$j++] = $row;
                         $new_file = $hist_dir.$hist_file_prefix.($new_index + $i);                          }
                         $fp = fopen($new_file, "a");                          $res->free;
                         wait_write_lock($fp);  
                         fwrite($fp, implode($full[$i], ""));                          $sql = sprintf("SELECT id, nick AS name, email FROM %s", $usr_file);
                         release_lock($fp);                          if (is_array($authors)) {
                 }                                  $sql .= " WHERE";
                 $msgs = $full[sizeof($full) - 1];                                  $ids = array_keys($authors);
                                                   for ($i = 0;;) {
                 return $msgs;                                          $sql .= " id = '" . $db_conn->quote($ids[$i]) . "'";
         }  
                                                   if ($i < sizeof($ids))
         function validate_message($message, $allowed_tags) {                                                  break;
                 $message = trim($message);  
                 //some fun :)                                          if ((++$i) < sizeof($ids))
                 $message = ereg_replace("ignor[^a-zA-Z]*", "igno-what? &copy; Wol ", $message);                                                  $sql .= " OR";
                 $message = rawurlencode(nl2br(htmlspecialchars($message)));                                  }
                           }
                 for ($i = 0; $i < sizeof($allowed_tags); $i++) {  
                         $message = str_replace(                          $res = $db_conn->query($sql);
                                 rawurlencode(htmlspecialchars($allowed_tags[$i])),  
                                 $allowed_tags[$i],                          if (DB::isError($res))
                                 $message                                  return false;
                         );  
                 }                          while ($row = $res->fetchRow())
                                   for ($i = 0; $i < sizeof($authors[$row["id"]]); $i++) {
                 return $message;                                          $messages[$authors[$row["id"]][$i]]["name"] = rawurldecode($row["name"]);
         }                                          $messages[$authors[$row["id"]][$i]]["email"] = $row["email"];
                                           }
         function write_message($msg_file, $usr_file, $user = "Anonym", $text = "<no message>",  
                 $time = 0, $old_messages_folder, $max_msgs_in_one_file, $min_msgs_in_board,                          $res->free();
                 $hist_file_prefix, $allowed_tags, $use_db = 0, $db_conn = 0) {  
                           return $messages;
                 if (($time == 0) || !ereg("^[0-9]*$", $time))                  }
                         $time = time();          }
                 $text = validate_message($text, $allowed_tags);  
           function need_to_split($a, $max, $min) {
                 if (!$use_db) {                  if ((sizeof($a) - $max) <= $min)
                         // Use files                          return false;
                         $user = rawurlencode($user);                  else
                         if ($text[0] == '*')    // this is used as the deleted flag prefix                          return true;
                                 $text = " ".$text;          } // need_to_split($a, $max, $min)
                         $new_msg =  
                                 "$time:$user:$text\n";          function split_messages_to_more_files($msgs, $max_len, $min_len,
                         $msgs = file($msg_file);          $hist_dir, $hist_file_prefix = "board_hist_file_", $index_style = 0) {
                         $msgs[] = $new_msg;                  if (!need_to_split($msgs, $max_len, $min_len))
                                   return $msgs;
                         if (need_to_split($msgs, $max_msgs_in_one_file,                  $full = array_chunk($msgs, $max_len);
                                                                                 $min_msgs_in_board)) {  
                                 $fp = fopen($msg_file, "w");                  $d = opendir($hist_dir);
                                 wait_write_lock($fp);                  $i = -1;
                                 sort($msgs);                  $max_num = -1;
                                 $msgs = split_messages_to_more_files(                  // looking for previous save of maximum index (and count of saves)
                                         $msgs,                  while (($file = readdir($d)) !== false) {
                                         $max_msgs_in_one_file,                          if (ereg("^$hist_file_prefix([0-9]*)", $file, $regs)) {
                                         $min_msgs_in_board,                                  $i++;
                                         $old_messages_folder,                                  if ($max_num < $regs[1])
                                         $hist_file_prefix,                                          $max_num = $regs[1];
                                         0                          }
                                 );                  }
                                 $msgs = implode($msgs, "");                  closedir($d);
                                 if (trim($msgs) == "")  
                                         $msgs = "";                  switch($index_style) {
                                 fwrite($fp, $msgs);                          case "0":
                         }                                  $new_index = $max_num + 1;
                         else {                                  break;
                                 unset($msgs);                          case "1":
                                 $fp = fopen($msg_file, "a");                                  $new_index = ++$i;
                                 wait_write_lock($fp);                                  break;
                                 fwrite($fp, $new_msg);                  }
                         }  
                           for($i = 0; $i < (sizeof($full) - 1); $i++) {
                         release_lock($fp);                          $new_file = $hist_dir . $hist_file_prefix . ($new_index + $i);
                         fclose($fp);                          $fp = fopen($new_file, "a");
                         return 1;                          wait_write_lock($fp);
                 }                          fwrite($fp, implode($full[$i], ""));
                 else {                          release_lock($fp);
                         // Use DB                  }
                         // $msg_file stores Message Table name                  $msgs = $full[sizeof($full) - 1];
                         if (!$db_conn)  
                                 return false;                  return $msgs;
           }
                         $user = addslashes($user);  
                         $text = addslashes($text);          function validate_message($message, $allowed_tags) {
                   $message = trim($message);
                         // get the authors id                  //some fun :)
                         $sql = "select id from $usr_file where nick='$user'";                  $message = ereg_replace("ignor[^a-zA-Z]*", "igno-what? &copy; Wol ", $message);
                         $res = $db_conn->query($sql);                  $message = rawurlencode(nl2br(htmlspecialchars($message)));
   
                         if (DB::isError($res))                  for ($i = 0; $i < sizeof($allowed_tags); $i++) {
                                 return false;                          $message = str_replace(
                                                           rawurlencode(htmlspecialchars($allowed_tags[$i])),
                         $row = $res->fetchRow();                                  $allowed_tags[$i],
                         $author_id = $row["id"];                                  $message
                           );
                         $sql = "insert into $msg_file" .                  }
                                 " (author_id, created, text) values " .  
                                 " ('$author_id', sysdate(), '$text')";                  return $message;
                         $res = $db_conn->query($sql);          } // validate_message($message, $allowed_tags)
   
                         if (DB::isError($res))          function write_message($msg_file, $usr_file, $user = "Anonym", $text = "<no message>",
                                 return false;                  $time = 0, $old_messages_folder, $max_msgs_in_one_file, $min_msgs_in_board,
                   $hist_file_prefix, $allowed_tags, $use_db = 0, $db_conn = 0) {
                         return true;  
                 }                  if (($time == 0) || !ereg("^[0-9]*$", $time))
         }                          $time = time();
                           $text = validate_message($text, $allowed_tags);
   
         function delete_message($msg_file, $usr_file, $user, $time, $pass,                  if (!$use_db) {
                 $use_virtual_delete, $use_db = 0, $db_conn = 0) {                          // Use files
                 if (!$use_db) {                          $user = rawurlencode($user);
                         // Use files                          if ($text[0] == '*')    // this is used as the deleted flag prefix
                         $found = false;                                  $text = " " . $text;
                         $i = 0;                          $new_msg =
                         $fp = fopen($usr_file, "r");                                  "$time:$user:$text\n";
                         wait_read_lock($fp);                          $msgs = file($msg_file);
                         $p = file($usr_file);                          $msgs[] = $new_msg;
                         release_lock($fp);  
                         if ($user != "") {                          if (need_to_split($msgs, $max_msgs_in_one_file,
                                 while ((!$found) && ($i < sizeof($p))) {                                                                                  $min_msgs_in_board)) {
                                         if ($user == get_user($p[$i], 0))                                  $fp = fopen($msg_file, "w");
                                                 $found = true;                                  wait_write_lock($fp);
                                         $i++;                                  sort($msgs);
                                 };                                  $msgs = split_messages_to_more_files(
                         }                                          $msgs,
                         else                                          $max_msgs_in_one_file,
                                 $found = true;                                          $min_msgs_in_board,
                                                   $old_messages_folder,
                         if (!$found)                                          $hist_file_prefix,
                                 return 1;                                          0
                                           );
                         if (!(($user == "") && ($pass == "")))                                  $msgs = implode($msgs, "");
                                 if (get_pass($p[--$i]) != md5($pass))                                  if (trim($msgs) == "")
                                         return 2;                                          $msgs = "";
                                                           fwrite($fp, $msgs);
                         $fp = fopen($msg_file, "r");                          }
                         wait_read_lock($fp);                          else {
                         $f = file($msg_file);                                  unset($msgs);
                         $found = false;                                  $fp = fopen($msg_file, "a");
                         $i = 0;                                  wait_write_lock($fp);
                         while (!$found && ($i < sizeof($f))) {                                  fwrite($fp, $new_msg);
                                 if (get_user($f[$i], 1) == $user && get_time($f[$i]) == $time)                          }
                                         $found = true;  
                                 $i++;                          release_lock($fp);
                         }                          fclose($fp);
                         if (!$found)                          return 1;
                                 return 3;                  }
                         $i--;                  else {
                           // Use DB
                         if ($use_virtual_delete) {                          // $msg_file stores Message Table name
                                 // if already marked as deleted then delete it really                          if (!$db_conn)
                                 if (ereg("[^:]*:[^:]*:\*.*", $f[$i], $regs))                                  return false;
                                         $f[$i] = $f[sizeof($f) - 1];  
                                 // if not marked, mark it :)                          // get the authors id
                                 else                          $sql = sprintf("SELECT id FROM %s WHERE nick=%s",
                                         $f[$i] = ereg_replace("([^:]*:[^:]*:)(.*)", "\\1*\\2", $f[$i]);                                  $usr_file, $db_conn->quote($user));
                         }                          $author_id = $db_conn->getOne($sql);
                         else {  
                                 if (sizeof($f) > 0) {                          if (DB::isError($author_id))
                                         $f[$i] = $f[sizeof($f) - 1];                                  return false;
                                 }  
                                 else                          /*
                                         $f = array();                          $row = $res->fetchRow();
                         }                          $res->free();
                                   $author_id = $row["id"];
                         // we supppose the array to be sorted (sorting while insert)                          */
                         //sort($f);  
                                                   $sql = sprintf("INSERT INTO %s (author_id, created, text) VALUES " .
                         release_lock($fp);                                  "(%s, sysdate(), %s)",
                                                           $msg_file, $db_conn->quote($author_id), $db_conn->quote($text));
                         $fp = fopen($msg_file, "w");                          $res = $db_conn->query($sql);
                         wait_write_lock($fp);  
                         if (is_array($f))                          return !(DB::isError($res));
                                 fwrite($fp, trim(implode($f, ""))."\n");                  }
                         else          }
                                 if (trim($f) != "")  
                                         fwrite($fp, trim($f)."\n");  
                         release_lock($fp);          function delete_message($msg_file, $usr_file, $user, $time, $pass,
                         fclose($fp);                  $use_virtual_delete, $use_db = 0, $db_conn = 0) {
                           if (!$use_db) {
                         return 0;                          // Use files
                 }                          $found = false;
                 else {                          $i = 0;
                         // Use DB                          $fp = fopen($usr_file, "r");
                         if (!$db_conn)                          wait_read_lock($fp);
                                 return false;                          $p = file($usr_file);
                           release_lock($fp);
                         $user = addslashes($user);                          if ($user != "") {
                         $pass = md5(addslashes($pass));                                  while ((!$found) && ($i < sizeof($p))) {
                         $time = date("YmdHis", $time);                                          if ($user == get_user($p[$i], 0))
                                                   $found = true;
                         $sql = "select id from $usr_file where " .                                          $i++;
                                 "nick = '$user' and pass = '$pass'";                                  };
                         $res = $db_conn->query($sql);                          }
                           else
                         if ((DB::isError($res)) || ($res->numRows() != 1))                                  $found = true;
                                 return 0;  
                           if (!$found)
                         $res->fetchInto($row);                                  return 1;
                         $res->free;  
                         $author_id = $row["id"];                          if (!(($user == "") && ($pass == "")))
                                                           if (get_pass($p[--$i]) != md5($pass))
                         switch($use_virtual_delete) {                                          return 2;
                                 case true:  
                                         $sql = "select id from $msg_file where flags=1 and author_id='".                          $fp = fopen($msg_file, "r");
                                                 "$author_id' and created='$time'";                          wait_read_lock($fp);
                                         $res = $db_conn->query($sql);                          $f = file($msg_file);
                                         if ($res->numRows() == 0) {                          $found = false;
                                                 $sql = "update $msg_file " .                          $i = 0;
                                                         "set created='$time', deleted=sysdate(), flags=1 where ".                          while (!$found && ($i < sizeof($f))) {
                                                         "author_id = '$author_id' and created='$time'";                                  if (get_user($f[$i], 1) == $user && get_time($f[$i]) == $time)
                                                 $res->free;                                          $found = true;
                                                 break;                                  $i++;
                                         }                          }
                                         // else continue to hard delete                          if (!$found)
                                 case false:                                  return 3;
                                         $sql = "delete from $msg_file where ".                          $i--;
                                                 "author_id = '$author_id' and created='$time'";  
                         }                          if ($use_virtual_delete) {
                         echo "!@#$sql#@!";                                  // if already marked as deleted then delete it really
                         $res = $db_conn->query($sql);                                  if (ereg("[^:]*:[^:]*:\*.*", $f[$i], $regs))
                         if (DB::isError($res))                                          $f[$i] = $f[sizeof($f) - 1];
                                 return false;                                  // if not marked, mark it :)
                                                           else
                         $res->free;                                          $f[$i] = ereg_replace("([^:]*:[^:]*:)(.*)", "\\1*\\2", $f[$i]);
                         return true;                          }
                 }                          else {
         }                                  if (sizeof($f) > 0) {
                                           $f[$i] = $f[sizeof($f) - 1];
         function show_data_form($user_file, $self, $nick,                                  }
                 $style, $WB_name, $autorefresh, $pagesize, $use_db = 0, $db_conn = 0) {                                  else
                 global $headframe;                                          $f = array();
                 global $bodyframe;                          }
                 global $show_body;  
                 global $frameset;                          // we supppose the array to be sorted (sorting while insert)
 ?>                          //sort($f);
 <center>  
 <font color="#C0C0C0" face="Courier" size=5><b><?echo $WB_name?></b></font><br>                          release_lock($fp);
 Current time is <?echo format_time(time())?>.  
 <br>                          $fp = fopen($msg_file, "w");
 <table border=0>                          wait_write_lock($fp);
 <form name=data method=POST action="<?                          if (is_array($f))
         echo "$self?";                                  fwrite($fp, trim(implode($f, "")) . "\n");
         $tmp = link_replace(create_link(), "page", "");                          else
         if (good($frameset))                                  if (trim($f) != "")
                 $tmp = link_replace($tmp, "disablepart", "2");                                          fwrite($fp, trim($f) . "\n");
         echo $tmp;                          release_lock($fp);
 ?>" target="<?echo $bodyframe?>">                          fclose($fp);
 <tr>  
         <td align=center valign=middle rowspan=3>                          return 0;
                 <textarea name="message" cols=30 rows=5></textarea></td>                  }
         <td align=center valign=middle><font face="Arial" color=#ffcc00 size=3>Nick</font></td>                  else {
         <td align=left valign=middle>                          // Use DB
                 <select name="nick">                          if (!$db_conn)
                         <option value="Anonym">&lt;choose&gt;</option>                                  return false;
 <?  
                                                   $pass = md5($pass);
                 $nicknames = get_users($user_file, $use_db, $db_conn);                          $time = date("YmdHis", $time);
                 sort($nicknames);  
                 show_options(                          $sql = sprintf("SELECT id FROM %s WHERE nick=%s AND pass=%s",
                         $nicknames,                                  $usr_file, $db_conn->quote($user), $db_conn->quote($pass));
                         $nicknames,                          $author_id = $db_conn->getOne($sql);
                         $nick);  
 ?>                          if (DB::isError($author_id))
                 </select>                                  return 2; // wrong password (or no such user)
         </td>  
 </tr>                          switch($use_virtual_delete) {
 <tr>                                  case true:
         <td valign=middle align=center colspan=2 rowspan=1><input type=submit name=submit_type value="Send"<?                                          $sql = sprintf("SELECT id FROM %s WHERE flags=1 AND author_id=%s " .
         // TODO redo the JS inline function (it doesn't clear the memo now)                                                  "AND created=%s",
         if (!$show_body)                                                  $msg_file, $db_conn->quote($author_id), $db_conn->quote($time));
                 echo " onClick=\"javascript:submit();message.value=''\"";                                          $res = $db_conn->query($sql);
   
 ?>></td>                                          if (DB::isError($res))
 </tr>                                                  return false;
 <tr></tr>  
 <tr>                                          if ($res->numRows() == 0) {
         <td align=center>                                                  $res->free();
                 <a href="<?echo $self."?".link_replace(create_link(), "createuser", "1")?>">New nick</a>                                                  $sql = sprintf("UPDATE %s SET created=%s, deleted=sysdate(), " .
         </td>                                                          "flags=1 WHERE author_id = %s AND created=%s",
         <td align=right><?                                                          $msg_file, $db_conn->quote($time),
         if (!$style)                                                          $db_conn->quote($author_id), $db_conn->quote($time));
                 echo "Board\t /</td><td><a href=$self?".                                                  break;
                         link_replace(create_link(), "style", "1").">Chat</a></td>";                                          }
         else                                          // else continue to hard delete
                 echo "<a href=$self?".link_replace(create_link(), "style", "0").                                  case false:
                         ">Board</a> /</td><td>Chat</td>";                                          $sql = sprintf("DELETE FROM %s WHERE author_id=%s AND created=%s",
 ?>                                                  $msg_file, $db_conn->quote($author_id), $db_conn->quote($time));
 </tr>                          }
 <tr>                          //echo "!@#$sql#@!";
         <td align=center colspan=1>Autorefresh time:                          $res = $db_conn->query($sql);
                 <select name=autorefresh onChange="javascript:form.submit()">  
 <?                          if (DB::isError($res))
         show_options(                                  return 4; // unknown error (or No such message)
                 array("10 secs","30 secs", "1 min", "5 min", "10 min", "30 min", "infinite"),                          else
                 array("10", "30", "60", "300", "600", "1800", "999999999"),                                  return 0;
                 $autorefresh);                  }
 ?>          }
                 </select>  
         </td><td align=center colspan=1>Page size:          function show_root_login_form($rootnick, $user_nick = '') {
                 <select name=pagesize onChange="javascript:form.submit()">                  global $self;
 <?                  echo "\n<center><h3><b>Admin login</b></h3><br><br>";
         show_options(                  echo "\n<center>\n<form name=rootlogin method=get action=$self>\n";
                 array("10", "25", "50", "100", "all"),                  echo create_hidden_inputs(split_url_vars(link_replace(link_replace(create_link(), 'nick', $rootnick), 'newnick', $user_nick)));
                 array("10", "25", "50", "100", "999999"),                  echo "<table align=center>\n";
                 $pagesize);                  echo "\t\n<tr>\n\t\t<td>Password:</td><td><input type=password name=pass></td></tr>\n";
 ?>                  echo "\t\n<tr>\n\t\t<td colspan=2 align=center><input type=submit name=submit_type value=Login>\n</td></tr>\n";
                 </select>                  echo "\t<tr><td align=center colspan=2><a href=$self?" .
         </td>                          create_link() .
         <td align=center>                          ">cancel</a></td></tr>\n";
                 <a href="<?                  echo "</table>\n";
         echo "$self?".link_replace(link_replace(create_link(), "setframes", 1), "disablepart", 3);                  echo "</form>\n</center>\n";
 ?>" target=_top>Switch to frames</a>          } // show_root_login_form($rootnick, $user_nick)
         </td>  
 </tr>          function show_data_form($user_file, $self, $nick, $message,
 </form>                  $style, $WB_name, $autorefresh, $pagesize, $use_db = 0, $db_conn = 0) {
 </table>                  // TODO !!!!!!
 </center>                  global $headframe;
 <?                  global $bodyframe;
                 return 1;                  global $show_body;
         }                  global $frameset;
   ?>
         function show_page_walk($currentpage, $pagesize, $nummsgs, $firstmsg, $lastmsg) {  <center>
                 global $self;  <h3><?echo $WB_name?></h3>
                 $lastpage = ceil($nummsgs / $pagesize);  Current time is <?echo format_time(time())?>.
   <br>
                 echo "<center>Messages ".($firstmsg + 1)."-".  <table border=0>
                         ($lastmsg + 1)." of $nummsgs<br>";  <form name=data method=GET action="<?echo "$self"?>" target="<?echo $bodyframe?>">
   <?
                 // REWIND to begin                  $tmp = link_replace(create_link(), 'page', '');
                 if ($firstmsg == 0)                  if (good($frameset))
                         echo "&lt;&lt;";                          $tmp = link_replace($tmp, 'disablepart', '2');
                 else                  echo create_hidden_inputs(split_url_vars($tmp));
                         echo "<a href=$self?".link_replace(create_link(), "page", "1").">&lt;&lt;</a>";  ?>
                 echo " ";  <tr>
           <td align=center valign=middle rowspan=3>
                 // PREVIOUS PAGE                  <textarea name="message" cols=40 rows=<?
                 if ($firstmsg == 0)          echo (sizeof(explode("\n",$message)) + 5)?>><?echo $message?></textarea></td>
                         echo "&lt;";          <td align=center valign=middle>Nick</td>
                 else          <td align=left valign=middle>
                         echo "<a href=$self?".link_replace(create_link(), "page", ($currentpage-1)).">&lt;</a>";                  <select name="nick">
                                           <option value="Anonym">&lt;choose&gt;</option>
                 echo " ";  <?
                   $nicknames = get_users($user_file, $use_db, $db_conn);
                 // OTHER PAGES  
                 for ($i = 1; $i <= $lastpage; $i++) {                  if (good($nicknames)) {
                         echo ($i == $currentpage)?"$i ":"<a href=$self?".                          sort($nicknames);
                                 link_replace(create_link(), "page", $i).">".$i."</a> ";                          show_options(
                 }                                  $nicknames,
                                   $nicknames,
                 // NEXT PAGE                                  $nick);
                 if ($lastmsg >= ($nummsgs - 1))                  }
                         echo "&gt;";  
                 else                  unset($nicknames);
                         echo "<a href=$self?".  ?>
                                 link_replace(create_link(), "page", ($currentpage+1)).                  </select>
                                 ">&gt;</a>";          </td>
   </tr>
                 echo " ";  <tr>
           <td valign=middle align=center colspan=1 rowspan=1><input type=submit name=submit_type value="Send"<?
                 // REWIND PAGE to end                  // TODO redo the JS inline function (it doesn't clear the memo now)
                 if ($lastmsg >= ($nummsgs - 1))                  if (!$show_body)
                         echo "&gt;&gt;";                          echo " onClick=\"javascript:submit();message.value=''\"";
                 else  
                         echo "<a href=$self?".  ?>></td>
                                 link_replace(create_link(), "page", $lastpage).          <td align=center>
                                 ">&gt;&gt;</a>";                  <a href="<?echo $self . "?" . link_replace(create_link(), "createuser", "1")?>">New nick</a>
                           </td>
                 echo "</center>\n";  </tr>
         }  <tr></tr>
   <tr>
         function show_nonrefresh_head() {          <td align=right><?
                 global $WB_name, $WB_version;                  if (!$style)
 ?>                          echo "Board /</td><td><a href=$self?" .
 <html>                                  link_replace(create_link(), "style", "1") . ">Chat</a></td>";
 <head>                  else
 <title><?echo "$WB_name v$WB_version"?></title>                          echo "<a href=$self?" . link_replace(create_link(), "style", "0") .
 </head>                                  ">Board</a> /</td><td>Chat</td>";
 <body bgcolor="black" text="#C0C0C0" link="#888ff" alink="#888ff" vlink="#888ff">  ?>
 <?  </tr>
         }  <tr>
           <td align=center colspan=1>Autorefresh time:
         function show_delete_dialog($nick, $time) {                  <select name=autorefresh onChange="javascript:form.submit()">
                 global $self; //!!!!!!!TODO  <?
                 echo "\n<center><font color=#C0C0C0 face=Courier size=4><b>Delete message</font></b><br><br>";                  show_options(
                 echo "\n<center>\n<form name=deletemessage method=post action=$self?".                          array("10 secs", "30 secs", "1 min", "5 min", "10 min", "30 min", "infinite"),
                         link_replace(link_replace(create_link(), "deleteok", 1),                          array("10", "30", "60", "300", "600", "1800", "999999999"),
                                 "time", $time).">\n";                          $autorefresh);
                 echo "<table align=center>\n";  ?>
                 echo "\t\n<tr>\n\t\t<td>Nick:</td><td><input type=text value=\"$nick\" readonly></td></tr>\n";                  </select>
                 echo "\t\n<tr>\n\t\t<td>Message No.:</td><td><input type=text value=\"$time\" readonly></td></tr>\n";          </td><td align=center colspan=1>Page size:
                 echo "\t\n<tr>\n\t\t<td>Password:</td><td><input type=password name=pass></td></tr>\n";                  <select name=pagesize onChange="javascript:form.submit()">
                 echo "\t\n<tr>\n\t\t<td colspan=2 align=center><input type=submit name=submit_type value=Delete>\n</td></tr>\n";  <?
                 echo "\t<tr><td align=center colspan=2><a href=$self?".                  show_options(
                         create_link().                          array("10", "25", "50", "100", "all"),
                         ">cancel</a></td></tr>\n";                          array("10", "25", "50", "100", "999999"),
                 echo "</table>\n";                          $pagesize);
                 echo "</form>\n</center>\n";  ?>
         }                  </select>
                   </td>
         function show_createuser_dialog($newnick, $email) {          <td align=center>
                 global $self; // !!! TODO                  <a href="<?
                 echo "\n<center><font color=#C0C0C0 face=Courier size=4><b>Create new user</font></b><br><br>";                  echo "$self?" . link_replace(link_replace(create_link(), "setframes", 1), "disablepart", 3);
                 echo "<table size=90% align=center>\n";  ?>" target=_top>Switch to frames</a> <font size=-3><a href="<?
                                   echo $self . '?' . link_replace(create_link(), 'rootlogin', '1');
                 echo "\n<form name=createuser method=post action=$self?".  ?>">&pi;</a></font>
                         link_replace(link_replace(          </td>
                                 create_link(), "createok", 1), "createuser", 1  </tr>
                         ).  </form>
                         ">\n";  </table>
                 echo "\t<tr>\n\t\t<td>New Nick:</td><td><input type=text name=newnick maxsize=16 value=$newnick></td>\n";  </center>
                 echo "\t<tr><td>E-mail:</td><td><input type=text name=mail value=$email></td>\n\t</tr>\n";  <?
                 echo "\t<tr><td>Password:</td><td><input type=password name=pass></td>\n\t</tr>\n";                  return 1;
                 echo "\t<tr><td align=center colspan=2><input type=submit name=submit_type value=Create></td>\n\t</tr>\n";          }
                 echo "\t<tr><td align=center colspan=2><a href=$self?".  
                         link_replace(create_link(), "createuser", "").          function show_page_walk($currentpage, $pagesize, $nummsgs, $firstmsg, $lastmsg) {
                         ">cancel</a></td></tr>\n";                  global $self;
                 echo "</form>\n</table>\n</center>\n";                  $lastpage = ceil($nummsgs / $pagesize);
         }  
                   echo "<center>Messages " . ($firstmsg + 1) . "-" .
         function show_message($message, $style = 0) {                          ($lastmsg + 1) . " of $nummsgs<br>";
                 global $self; // !!!TODO  
                 switch($style) {                  // REWIND to begin
                         case 1:                  if ($firstmsg == 0)
                         // Chat message line                          echo "&lt;&lt;";
                                 echo "<tr><td valign=top>";                  else
                                 echo "<a href=$self?".                          echo "<a href=$self?" . link_replace(create_link(), "page", "1") . ">&lt;&lt;</a>";
                                         link_replace(                  echo " ";
                                                 link_replace(  
                                                         create_link(), "time", $message["time"]                  // PREVIOUS PAGE
                                                         ),                  if ($firstmsg == 0)
                                                 "nick",                          echo "&lt;";
                                                 $message["name"]).                  else
                                         ">".format_time($message["time"], 1)."</a>_";                          echo "<a href=$self?" . link_replace(create_link(), "page", ($currentpage-1)) .
                                 if ($message["email"] != "")                                  ">&lt;</a>";
                                         echo "<a href=\"mailto:".$message["email"].  
                                                 "\""." class=\"amsg\">".                  echo " ";
                                                 $message["name"]."</a>";  
                                 else                  // OTHER PAGES
                                         echo $message["name"];                  for ($i = 1; $i <= $lastpage; $i++) {
                                 echo ":</td><td>".$message["message"];                          echo ($i == $currentpage) ? "$i " : "<a href=$self?" .
                                 echo "</td></tr>\n";                                  link_replace(create_link(), "page", $i) . ">" . $i . "</a> ";
                                 break;                  }
                         default:  
                         // Board message style                  // NEXT PAGE
                                 echo "<tr><td>";                  if ($lastmsg >= ($nummsgs - 1))
                                 if ($message["email"] != "")                          echo "&gt;";
                                         echo "<a href=\"mailto:" .                  else
                                                 $message["email"] .                          echo "<a href=$self?" .
                                                 "\" class=\"amsg\">\n";                                  link_replace(create_link(), "page", ($currentpage+1)) .
                                 echo "\t" . $message["name"] . "\n";                                  ">&gt;</a>";
                                 echo "</a>\n\t - ";  
                                 echo "\t" . format_time($message["time"])."\n";                  echo " ";
                                 echo "\t\t - <a href=$self?" .  
                                         link_replace(                  // REWIND PAGE to end
                                                 link_replace(                  if ($lastmsg >= ($nummsgs - 1))
                                                         create_link(), "time", $message["time"]                          echo "&gt;&gt;";
                                                         ),                  else
                                                 "nick",                          echo "<a href=$self?" .
                                                 $message["name"]).                                  link_replace(create_link(), "page", $lastpage) .
                                         ">delete</a>\n";                                  ">&gt;&gt;</a>";
                                 echo "<br>";  
                                 echo "\t" . $message["message"] . "\n";                  echo "</center>\n";
                                 echo "</td></tr>\n";          } // show_page_walk($currentpage, $pagesize, $nummsgs, $firstmsg, $lastmsg)
                                 break;  
                 }          function show_nonrefresh_head() {
         }                  global $WB_name, $WB_version;
   ?>
         function show_messages($message_file, $user_file, $page, $pagesize,  <html>
                 $msg_style = 0, $show_all = 0, $use_db = 0, $db_conn = 0) {  <head>
   <title><?echo "$WB_name v$WB_version"?></title>
                 $messages = read_messages($message_file, $user_file, $show_all,  <link rel="stylesheet" href="<?echo $css_file?>" type="text/css">
                         $use_db, $db_conn);  </head>
                 if ($messages === false)  <body>
                         $messages = array();  <?
                 $n = sizeof($messages);          } // show_nonrefresh_head()
                 global $self;//!!!!! TODO  
                           function show_delete_dialog($nick, $time) {
                 if ($n <= 0) {                  global $self;
                         echo "<center><font color=red><b>No messages YeT !</b></font></center>";                  echo "\n<center><h3><b>Delete message</b></h3><br><br>";
                 }                  echo "\n<center>\n<form name=deletemessage method=get action=$self>\n";
                 else {                  echo create_hidden_inputs(split_url_vars(link_replace(link_replace(create_link(), "deleteok", 1), "time", $time)));
                         if ($page < 1)                  echo "<table align=center>\n";
                                 $page = 1;                  echo "\t\n<tr>\n\t\t<td>Your Nick:</td><td><input type=text value=\"$nick\" readonly></td></tr>\n";
                         if ($page >= ($n / $pagesize))                  echo "\t\n<tr>\n\t\t<td>Message No.:</td><td><input type=text value=\"$time\" readonly></td></tr>\n";
                                 $page = ceil($n / $pagesize);                  echo "\t\n<tr>\n\t\t<td>Password:</td><td><input type=password name=pass></td></tr>\n";
                                           echo "\t\n<tr>\n\t\t<td colspan=2 align=center><input type=submit name=submit_type value=Delete>\n</td></tr>\n";
                         $first = $pagesize * ($page - 1);                  echo "\t<tr><td align=center colspan=2><a href=$self?" .
                         $last = ($pagesize * $page) - 1;                          create_link() .
                                                   ">cancel</a></td></tr>\n";
                         if ($first < 0)                  echo "</table>\n";
                                 $first = 0;                  echo "</form>\n</center>\n";
                         if ($first > $n)          } // show_delete_dialog($nick, $time)
                                 $first = $n - 1;  
                           function show_createuser_dialog($newnick, $email) {
                         if ($last > ($n - 1))                  global $self;
                                 $last = $n - 1;                  echo "\n<center><h3><b>Create new user</b></h3><br><br>";
                         if ($last < $first)                  echo "<table size=90% align=center>\n";
                                 $last = $first;  
                           echo "\n<form name=createuser method=get action=$self>";
                         show_page_walk($page, $pagesize, $n, $first, $last);                  echo create_hidden_inputs(split_url_vars(
                                   link_replace(link_replace(
                         echo "<table width=100%>";                                  create_link(), "createok", 1), "createuser", 1
                         for ($i = $first; $i <= $last; $i++) {                          )));
                                 show_message($messages[sizeof($messages) - 1 - $i], $msg_style);                  echo "\t<tr>\n\t\t<td>New Nick:</td><td><input type=text name=newnick maxsize=16 value=$newnick></td>\n";
                         }                  echo "\t<tr><td>E-mail:</td><td><input type=text name=mail value=$email></td>\n\t</tr>\n";
                         echo "</table>";                  echo "\t<tr><td>Password:</td><td><input type=password name=pass></td>\n\t</tr>\n";
                           echo "\t<tr><td align=center colspan=2><input type=submit name=submit_type value=Create></td>\n\t</tr>\n";
                         show_page_walk($page, $pagesize, $n, $first, $last);                  echo "\t<tr><td align=center colspan=2><a href=$self?" .
                 }                          link_replace(create_link(), "createuser", "") .
         }                          ">cancel</a></td></tr>\n";
                   echo "</form>\n</table>\n</center>\n";
           } // show_createuser_dialog($newnick, $email)
 // ///////////////////////////////////////////////  
 // /////////// THIS IS MAIN FUNCTION /////////////          function show_message($message, $style = 0) {
 // ///////////////////////////////////////////////                  global $self;
                   global $headframe;
         // DEFAULTS                  switch($style) {
                           case 1:
         if (!good($self))                          // Chat message line
                 $self = $PHP_SELF;                                  echo "<tr><td valign=top class=time>";
                                   echo "<a href=$self?" .
         if ($strip_slashes) {                                          link_replace(
                 $message = stripslashes($message);                                                  link_replace(
                 $nick = stripslashes($nick);                                                          create_link(), "time", $message["time"]
                 $pass = stripslashes($pass);                                                          ),
                 $header = stripslashes($header);                                                  "nick",
                 $body = stripslashes($body);                                                  $message["name"]) .
                 $bodyframe = stripslashes($bodyframe);                                          " class=time>" . format_time($message["time"], 1) . "</a></td>";
                 $headerframe = stripslashes($headerframe);                                  if ($message["email"] != "")
                 $disablepart = stripslashes($disablepart);                                          echo "<td valign=top class=email><a href=\"mailto:" . $message["email"] .
                 $newnick = stripslashes($newnick);                                                  "\">" . $message["name"] . "</a>";
         }                                  else
                                                   echo "<td valign=top class=nick>" . $message["name"];
                                   echo ":</td><td class=msg width=99%>" . $message["message"];
         if ($pagesize < 10)                                  echo "</td></tr>\n";
                 $pagesize = 50;                                  break;
         settype($pagesize, integer);                          default:
                           // Board message style
         if ($autorefresh < 10)                                  // remark this /* to a //* and the modes will switch
                 $autorefresh = 300;                                  /*
         settype($autorefresh, integer);                                  echo "<tr><td valign=top class=email>";
                                   if ($message["email"] != "")
         if (!good($disablepart) || ($disablepart > 3) || ($disablepart < 0))                                          echo "<a href=\"mailto:" . $message["email"] . "\">\n";
                 $disablepart = 0;                                  echo $message["name"] . "</a></td>\n";
                                           echo "\t<td class=time>" . format_time($message["time"]) . "</td>";
         if (!good($headframe))                                  echo "<td><a href=$self?" .
                 $headframe = $DEFAULT_HEAD_FRAME;                                          link_replace(
                                                   link_replace(
         if (!good($bodyframe))                                                          create_link(), "time", $message["time"]
                 $bodyframe = $DEFAULT_BODY_FRAME;                                                          ),
                                                           "nick",
         switch ($disablepart) {                                                  $message["name"]) .
                 case 0:                                          ">delete</a>\n";
                         $show_body = true;                                  echo "</td></tr><tr><td colspan=3>";
                         $show_head = true;                                  echo "\t" . $message["message"] . "\n";
                         break;                                  echo "</td></tr>\n";
                 case 1:                                  /*/
                         $show_head = true;                                  echo "<tr><td valign=top>";
                         $show_body = false;                                  if ($message["email"] != "")
                         break;                                          echo "<a href=\"mailto:" . $message["email"] . "\">\n";
                 case 2:                                  echo $message["name"] . "</a>\n";
                         $show_head = false;                                  echo "" . format_time($message["time"]) . "";
                         $show_body = true;                                  echo " <a href=$self?" .
                         break;                                          link_replace(
                 case 3:                                                  link_replace(
                         $show_body = false;                                                          create_link(), "time", $message["time"]
                         $show_head = false;                                                          ),
                         break;                                                  "nick",
         }                                                  $message["name"]) .
                                           ">delete</a>\n";
         if (!good($page))                                  echo "<a href=$self?" .
                 $page = 0;                                          link_replace(
                                                   create_link(),
         if (!isset($nick) && good($newnick))                                                  "reply_to",
                 $nick = $newnick;                                                  rawurlencode($message["name"]."#".$message["time"])
                                                   ) .
         if (!good($mail))                                          " target=$headframe>reply</a>\n";
                 $mail = get_email($nick);                                  echo "</td></tr><tr><td>";
                                           echo "\t" . $message["message"] . "\n";
         if (good($archive))                                  echo "</td></tr>\n";
                 $hist_file_prefix = $archive;  
                                   //*/
         if (good($archive_no) && !$use_db)                                  break;
                 $message_file = $old_messages_folder.$hist_file_prefix.$archive_no;                  }
           } // show_message($message, $style = 0)
         //header ("Cache-Control: no-cache, must-revalidate");  
         //header ("Pragma: no-cache");          function show_messages($message_file, $user_file, $page, $pagesize,
                   $msg_style = 0, $show_all = 0, $use_db = 0, $db_conn = 0) {
         if ($use_db) {  
                 require_once "DB.php";                  $messages = read_messages($message_file, $user_file, $show_all,
                 $db_handle = DB::connect("mysql://$db_user:$db_pass"                          $use_db, $db_conn);
                                                                 . "@$db_host/$db_database");  
                 if (DB::isError($db_handle)) {                  if (!good($messages))
                         echo $db_handle->getMessage();                          $messages = array();
                         $db_handle = 0;                  $n = sizeof($messages);
                         //exit;                  global $self;
                 }  
                 if ($use_db) {                  if ($n <= 0) {
                         $db_handle->setFetchMode(DB_FETCHMODE_ASSOC);                          echo "<center><font color=red><b>No messages YeT !</b></font></center>";
                         $user_file = $db_user_table;                  }
                         $message_file = $db_message_table;                  else {
                 }                          if ($page < 1)
         }                                  $page = 1;
         // CREATE NEW USER                          if ($page >= ($n / $pagesize))
         if ($createuser) {                                  $page = ceil($n / $pagesize);
                 $mails = get_emails($user_file, $use_db, $db_handle);  
                           $first = $pagesize * ($page - 1);
                 if (good($newnick) &&                          $last = ($pagesize * $page) - 1;
                         ($mails[$newnick] == "") &&  
                         good($createok) &&                          if ($first < 0)
                         ($createok == 1))                                  $first = 0;
                         write_mail($user_file, $newnick, $mail, $pass, $use_db, $db_handle);                          if ($first > $n)
                 else {                                  $first = $n - 1;
                         show_nonrefresh_head();  
                         show_createuser_dialog($newnick, $email);                          if ($last > ($n - 1))
                         $show_head = false;                                  $last = $n - 1;
                         $show_body = false;                          if ($last < $first)
                 }                                  $last = $first;
         }  
                           show_page_walk($page, $pagesize, $n, $first, $last);
         // WRITE MESSAGE TO DB  
         if (good($message) && good($submit_type))                          echo "<table border=0>";
                 write_message($message_file, $user_file, $nick, $message, 0,                          for ($i = $first; $i <= $last; $i++) {
                         $old_messages_folder, $max_msgs_in_one_file, $min_msgs_in_board,                                  show_message($messages[sizeof($messages) - 1 - $i], $msg_style);
                         $hist_file_prefix, $allowed_tags, $use_db, $db_handle);                          }
                           echo "</table>";
         // DELETE MESSAGE FROM DB  
         if (good($time)) {                          show_page_walk($page, $pagesize, $n, $first, $last);
                 if (good($deleteok) && ($deleteok == 1)){                  }
                         switch(delete_message($message_file, $user_file, $nick,          }
                                 $time, $pass, $use_virtual_delete, $use_db, $db_handle)) {  
                         // TOTO ESTE DOROBIT - SPRAVANIE SA  
                         // SKRIPTU KED NASTANU PROBLEMY PRI DELETOVANI SPRAVY  // ///////////////////////////////////////////////
                                 case 0: // All OK  // /////////// THIS IS MAIN FUNCTION /////////////
 //                                      echo "<center>Message deleted succesfully<br></center>\n";  // ///////////////////////////////////////////////
                                         break;  
                                 case 1: // No such user          // DEFAULTS
 //                                      echo "<center>Error while deleting: There is no such user!<br></center>\n";  
                                         break;          if (!good($self))
                                 case 2: // Wrong password                  $self = $PHP_SELF;
 //                                      echo "<center>Error while deleting: Wrong password!<br></center>\n";  
                                         break;          $abs_self = "http://" . $GLOBALS["HTTP_HOST"] . $self;
                                 case 3: // No such message  
 //                                      echo "<center>Error while deleting: No such message!<br></center>\n";          header ("Cache-Control: no-cache, must-revalidate");
                                         break;          header ("Pragma: no-cache");
                                 default:// Unknown error  
 //                                      echo "<center>Fatal Error while deleting: unknown error code!</center><br>\n";          if ($strip_slashes) {
                                         break;                  $message = stripslashes($message);
                         }                  $nick = stripslashes($nick);
                 } else {                  $pass = stripslashes($pass);
                         show_nonrefresh_head();                  $header = stripslashes($header);
                         show_delete_dialog($nick, $time);                  $body = stripslashes($body);
                         $show_body = false;                  $bodyframe = stripslashes($bodyframe);
                         $show_head = false;                  $headerframe = stripslashes($headerframe);
                 }                  $disablepart = stripslashes($disablepart);
         }                  $newnick = stripslashes($newnick);
           }
         // check for superuser view  
         if (($nick == $root_name) && (md5($pass) == $root_md5_password))  
                 $superuser = 1;          settype($pagesize, integer);
         else          if ($pagesize < 10)
                 $superuser = 0;                  $pagesize = 50;
   
         // We don't want to show body, when other form is shown          settype($autorefresh, integer);
                   if ($autorefresh < 10)
 ?>                  $autorefresh = 300;
 <html>  
 <head>          if (!good($disablepart) || ($disablepart > 3) || ($disablepart < 0))
 <title><?echo "$WB_name v$WB_version"?></title>                  $disablepart = 0;
 <?  
         /*          if (!good($headframe))
                 If set, do nothing, just create frames and recursively call self                  $headframe = $DEFAULT_HEAD_FRAME;
         */  
         if (good($setframes)) {          if (!good($bodyframe))
                 $frmlnk =                  $bodyframe = $DEFAULT_BODY_FRAME;
                         link_replace(  
                                 link_replace(          switch ($disablepart) {
                                         link_replace(create_link(), "frameset", 1),                  case 0:
                                         "bodyframe",                          $show_body = true;
                                         "bodyframe"),                          $show_head = true;
                                 "headframe",                          break;
                                 "headframe"                  case 1:
                         );                          $show_head = true;
                 echo "<frameset rows=\"230,*\" framespacing=0 cols=*>\n";                          $show_body = false;
                 echo "<frame name=headframe src=\"$self?" .                          break;
                         link_replace($frmlnk, "disablepart", 1) .                  case 2:
                         "\">\n";                          $show_head = false;
                 echo "<frame name=headframe src=\"$self?" .                          $show_body = true;
                         link_replace($frmlnk, "disablepart", 2) .                          break;
                         "\" scrolling=AUTO>\n";                  case 3:
                 echo "</frameset>\n";                          $show_body = false;
                 echo "</html>";                          $show_head = false;
                 $show_body = false;                          break;
                 $show_head = false;          }
         }  
           if (!good($page))
         if ($show_head) {                  $page = 0;
 ?>  
 </head>          // check for superuser view
 <body bgcolor=black text=#C0C0C0 link=#888ff alink=#888ff vlink=#888ff>          if ($nick == $root_name) {
 <?                  if (md5($pass) == $root_md5_password)
                 show_data_form($user_file, $self, $nick, $style, $WB_name,                          $superuser = 1;
                         $autorefresh, $pagesize, $use_db, $db_handle);                  else {
         }                          unset($nick);
                                   $superuser = 0;
         if ($show_body) {                  }
                 echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"$autorefresh URL=$self?".          }
                         create_link()."\">\n";  
 ?>          // SHOW ROOT LOGIN FORM
 </head>          if ($rootlogin) {
 <body bgcolor=black text=#C0C0C0 link=#888ff alink=#888ff vlink=#888ff>                  show_nonrefresh_head();
 <?                  show_root_login_form($root_name, $nick);
                 show_messages($message_file, $user_file, $page, $pagesize,                  $show_body = false;
                         $style, $superuser, $use_db, $db_handle);                  $show_head = false;
         }          }
   
         if ($use_db && $db_handle) {          if (!isset($nick) && good($newnick))
                 $db_handle->disconnect();                  $nick = $newnick;
         }  
 ?>          if (!good($mail))
 </body>                  $mail = get_email($nick);
 </html>  
           if (good($archive))
                   $hist_file_prefix = $archive;
   
           if (good($archive_no) && !$use_db)
                   $message_file = $old_messages_folder . $hist_file_prefix . $archive_no;
   
           if ($use_db) {
                   require_once "DB.php";
   
                   $db_handle = DB::connect("mysql://$db_user:$db_pass"
                                                                   . "@$db_host/$db_database");
                   if (DB::isError($db_handle)) {
                           echo $db_handle->getMessage();
                           $db_handle = 0;
                           $use_db = 0;
                           //exit;
                   }
                   if ($use_db) {
                           $db_handle->setFetchMode(DB_FETCHMODE_ASSOC);
                           $user_file = $db_user_table;
                           $message_file = $db_message_table;
                   }
           }
   
           // Insert quoted REPLY TO message
           if (good($reply_to)) {
                   $pivot = strrpos($reply_to, "#");
                   if (!($pivot === false)) {
                           $tmp_name = substr($reply_to, 0, $pivot);
                           $tmp_time = substr($reply_to, $pivot + 1);
                           $messages = read_messages($message_file, $user_file, $superuser,
                                   $use_db, $db_conn);
                           for ($i = 0; $i < sizeof($messages); $i++) {
                                   if (($messages[$i]["time"] == $tmp_time) &&
                                           ($messages[$i]["name"] == $tmp_name)){
                                           $found = true;
                                           break;
                                   }
                           }
                           if ($found) {
                                   $tmp_msg = create_reply($messages[$i]);
                                   if (good($message)) {
                                           $tmp_msg .= $message;
                                   }
                                   $message = $tmp_msg;
                           $message = strip_tags($message);
                           }
                   }
           }
   
           // CREATE NEW USER
           if ($createuser) {
                   $mails = get_emails($user_file, $use_db, $db_handle);
                   if ((!($mails === false)) &&
                           good($newnick) &&
                           ($mails[$newnick] == "") &&
                           good($createok) &&
                           ($createok == 1)) {
                           if (!write_mail($user_file, $newnick, $mail, $pass, $root_name, $use_db, $db_handle)) {
                                   //echo "drblo to"; // something failed, ignoring for now
                                   die();
                           }
   
                           header("HTTP/1.0 302 Found");
                           header("Location: $abs_self?" . create_link());
                           die();
                   }
                   else {
                           show_nonrefresh_head();
                           show_createuser_dialog($newnick, $email);
                           $show_head = false;
                           $show_body = false;
                   }
           }
   
           // WRITE MESSAGE TO DB
           if (good($message) && good($submit_type)) {
                   if (write_message($message_file, $user_file, $nick, $message, 0,
                           $old_messages_folder, $max_msgs_in_one_file, $min_msgs_in_board,
                           $hist_file_prefix, $allowed_tags, $use_db, $db_handle))
                           ; // something failed, ignoring for now
   
                   $message = '';
                   header('HTTP/1.0 302 Found');
                   header("Location: $abs_self?" . create_link());
                   die();
           }
   
           // DELETE MESSAGE FROM DB
           if (good($time)) {
                   if (good($deleteok) && ($deleteok == 1)){
                           header('HTTP/1.0 302 Found');
                           header("Location: $abs_self?" . create_link());
                           switch(delete_message($message_file, $user_file, $nick,
                                   $time, $pass, $use_virtual_delete, $use_db, $db_handle)) {
                                   case 0: // All OK
                                           echo "<center>Message deleted succesfully<br></center>\n";
                                           break;
                                   case 1: // No such user
                                           echo "<center>Error while deleting: There is no such user!<br></center>\n";
                                           break;
                                   case 2: // Wrong password
                                           echo "<center>Error while deleting: Wrong password!<br></center>\n";
                                           break;
                                   case 3: // No such message
                                           echo "<center>Error while deleting: No such message!<br></center>\n";
                                           break;
                                   default:// Unknown error
                                           echo "<center>Fatal Error while deleting: unknown error code!</center><br>\n";
                                           break;
                           }
                           die();
                   } else {
                           show_nonrefresh_head();
                           show_delete_dialog($nick, $time);
                           $show_body = false;
                           $show_head = false;
                   }
           }
   
   
           // We don't want to show body, when other form is shown
   
   ?>
   <html>
   <head>
   <title><?echo "$WB_name v$WB_version"?></title>
   <link rel="stylesheet" href="<?echo $css_file?>" type="text/css">
   </head>
   <body>
   <?
           /*
                   If set, do nothing, just create frames and recursively call self
           */
           if (good($setframes)) {
                   $frmlnk =
                           link_replace(
                                   link_replace(
                                           link_replace(create_link(), "frameset", 1),
                                           "bodyframe",
                                           "bodyframe"),
                                   "headframe",
                                   "headframe"
                           );
                   echo "<frameset rows=\"230,*\" framespacing=0 cols=*>\n";
                   echo "<frame name=headframe src=\"$self?" .
                           link_replace($frmlnk, "disablepart", 1) .
                           "\">\n";
                   echo "<frame name=bodyframe src=\"$self?" .
                           link_replace($frmlnk, "disablepart", 2) .
                           "\" scrolling=AUTO>\n";
                   echo "</frameset>\n";
                   echo "</html>";
                   $show_body = false;
                   $show_head = false;
           }
   
           if ($show_head) {
                   show_data_form($user_file, $self, $nick, $message, $style,
                           $WB_name, $autorefresh, $pagesize, $use_db, $db_handle);
           }
   
           if ($show_body) {
                   echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"$autorefresh URL=$self?" .
                           create_link() . "\">\n";
                   show_messages($message_file, $user_file, $page, $pagesize,
                           $style, $superuser, $use_db, $db_handle);
           }
   
           if ($use_db && $db_handle) {
                   $db_handle->disconnect();
           }
   ?>
   </body>
   </html>

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.13

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top