Verzeichnisstruktur phpBB-1.0.0


Veröffentlicht
15.12.2000

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

functions.php

Zuletzt modifiziert: 09.10.2024, 12:50 - Dateigröße: 24.31 KiB


 001  <?php
 002  /***************************************************************************
 003                             functions.php  -  description
 004                               -------------------
 005      begin                : Sat June 17 2000
 006      copyright            : (C) 2000 by James Atkinson
 007      email                : james@totalgeek.org
 008   
 009      $Id: functions.php,v 1.58 2000/12/09 20:19:09 thefinn Exp $
 010   
 011   ***************************************************************************/
 012   
 013  /***************************************************************************
 014   *                                                                                         
 015   *   This program is free software; you can redistribute it and/or modify      
 016   *   it under the terms of the GNU General Public License as published by  
 017   *   the Free Software Foundation; either version 2 of the License, or            
 018   *   (at your option) any later version.
 019   *
 020   ***************************************************************************/
 021   
 022  /**
 023   * Start session-management functions - Nathan Codding, July 21, 2000.
 024   */
 025   
 026  /**
 027   * new_session()
 028   * Adds a new session to the database for the given userid.
 029   * Returns the new session ID.
 030   * Also deletes all expired sessions from the database, based on the given session lifespan.
 031   */
 032  function new_session($userid, $remote_ip, $lifespan, $db) {
 033   
 034      mt_srand((double)microtime()*1000000);
 035      $sessid = mt_rand();
 036        
 037      $currtime = (string) (time());
 038      $expirytime = (string) (time() - $lifespan);
 039   
 040      $deleteSQL = "DELETE FROM sessions WHERE (start_time < $expirytime)";
 041      $delresult = mysql_query($deleteSQL, $db);
 042   
 043      if (!$delresult) {
 044          die("Delete failed in new_session()");
 045      }
 046   
 047      $sql = "INSERT INTO sessions (sess_id, user_id, start_time, remote_ip) VALUES ($sessid, $userid, $currtime, '$remote_ip')";
 048      
 049      $result = mysql_query($sql, $db);
 050      
 051      if ($result) {
 052          return $sessid;
 053      } else {
 054          echo mysql_errno().": ".mysql_error()."<BR>";
 055          die("Insert failed in new_session()");
 056      } // if/else
 057   
 058  } // new_session()
 059   
 060  /**
 061   * Sets the sessID cookie for the given session ID. the $cookietime parameter
 062   * is no longer used, but just hasn't been removed yet. It'll break all the modules
 063   * (just login) that call this code when it gets removed. 
 064   * Sets a cookie with no specified expiry time. This makes the cookie last until the
 065   * user's browser is closed. (at last that's the case in IE5 and NS4.7.. Haven't tried
 066   * it with anything else.)
 067   */
 068  function set_session_cookie($sessid, $cookietime, $cookiename, $cookiepath, $cookiedomain, $cookiesecure) {
 069   
 070      // This sets a cookie that will persist until the user closes their browser window.
 071      // since session expiry is handled on the server-side, cookie expiry time isn't a big deal.
 072      setcookie($cookiename,$sessid,'',$cookiepath,$cookiedomain,$cookiesecure);
 073   
 074  } // set_session_cookie()
 075   
 076   
 077  /**
 078   * Returns the userID associated with the given session, based on
 079   * the given session lifespan $cookietime and the given remote IP
 080   * address. If no match found, returns 0.
 081   */
 082  function get_userid_from_session($sessid, $cookietime, $remote_ip, $db) {
 083   
 084      $mintime = time() - $cookietime;
 085      $sql = "SELECT user_id FROM sessions WHERE (sess_id = $sessid) AND (start_time > $mintime) AND (remote_ip = '$remote_ip')";
 086      $result = mysql_query($sql, $db);
 087      if (!$result) {
 088          echo mysql_error() . "<br>\n";
 089          die("Error doing DB query in get_userid_from_session()");
 090      }
 091      $row = mysql_fetch_array($result);
 092      
 093      if (!$row) {
 094          return 0;
 095      } else {
 096          return $row[user_id];
 097      }
 098      
 099  } // get_userid_from_session()
 100   
 101  /**
 102   * Refresh the start_time of the given session in the database.
 103   * This is called whenever a page is hit by a user with a valid session.
 104   */
 105  function update_session_time($sessid, $db) {
 106      
 107      $newtime = (string) time();
 108      $sql = "UPDATE sessions SET start_time=$newtime WHERE (sess_id = $sessid)";
 109      $result = mysql_query($sql, $db);
 110      if (!$result) {
 111          echo mysql_error() . "<br>\n";
 112          die("Error doing DB update in update_session_time()");
 113      }
 114      return 1;
 115   
 116  } // update_session_time()
 117   
 118  /**
 119   * Delete the given session from the database. Used by the logout page.
 120   */
 121  function end_user_session($userid, $db) {
 122   
 123      $sql = "DELETE FROM sessions WHERE (user_id = $userid)";
 124      $result = mysql_query($sql, $db);
 125      if (!$result) {
 126          echo mysql_error() . "<br>\n";
 127          die("Delete failed in end_user_session()");
 128      }
 129      return 1;
 130      
 131  } // end_session()
 132   
 133  /**
 134   * Prints either "logged in as [username]. Log out." or 
 135   * "Not logged in. Log in.", depending on the value of
 136   * $user_logged_in.
 137   */
 138  function print_login_status($user_logged_in, $username, $url_phpbb) {
 139      global $phpEx;
 140      if($user_logged_in) {
 141          echo "<b>Logged in as $username. <a href=\"$url_phpbb/logout.$phpEx\">Log out.</a></b><br>\n";
 142      } else {
 143          echo "<b>Not logged in. <a href=\"$url_phpbb/login.$phpEx\">Log in.</a></b><br>\n";
 144      }
 145  } // print_login_status()
 146   
 147  /**
 148   * Prints a link to either login.php or logout.php, depending
 149   * on whether the user's logged in or not.
 150   */
 151  function make_login_logout_link($user_logged_in, $url_phpbb) {
 152      global $phpEx;
 153      if ($user_logged_in) {
 154          $link = "<a href=\"$url_phpbb/logout.$phpEx\">Logout</a>";
 155      } else {
 156          $link = "<a href=\"$url_phpbb/login.$phpEx\">Login</a>";
 157      }
 158      return $link;
 159  } // make_login_logout_link()
 160   
 161  /**
 162   * End session-management functions
 163   */
 164   
 165  /*
 166   * Gets the total number of topics in a form
 167   */
 168  function get_total_topics($forum_id, $db) {
 169      $sql = "SELECT count(*) AS total FROM topics WHERE forum_id = '$forum_id'";
 170      if(!$result = mysql_query($sql, $db))
 171          return("ERROR");
 172      if(!$myrow = mysql_fetch_array($result))
 173          return("ERROR");
 174      
 175      return($myrow[total]);
 176  }
 177  /*
 178   * Shows the 'header' data from the header/meta/footer table
 179   */
 180  function showheader($db) {
 181          $sql = "SELECT header FROM headermetafooter";
 182          if($result = mysql_query($sql, $db)) {
 183              if($header = mysql_fetch_array($result)) {
 184                  echo stripslashes($header[header]);
 185          }
 186      }
 187  }
 188  /*
 189   * Shows the meta information from the header/meta/footer table
 190   */
 191  function showmeta($db) {
 192          $sql = "SELECT meta FROM headermetafooter";
 193          if($result = mysql_query($sql, $db)) {
 194              if($meta = mysql_fetch_array($result)) {
 195                      echo stripslashes($meta[meta]);
 196          }
 197      }
 198  }
 199  /*
 200   * Show the footer from the header/meta/footer table
 201   */
 202  function showfooter($db) {
 203          $sql = "SELECT footer FROM headermetafooter";
 204          if($result = mysql_query($sql, $db)) {
 205              if($footer = mysql_fetch_array($result)) {
 206                  echo stripslashes($footer[footer]);
 207          }
 208      }
 209  } 
 210   
 211  /*
 212   * Used to keep track of all the people viewing the forum at this time
 213   * Anyone who's been on the board within the last 300 seconds will be 
 214   * returned. Any data older then 300 seconds will be removed
 215   */
 216  function get_whosonline($IP, $username, $forum, $db) {
 217      if($username == '')
 218          $username = "Guest";
 219   
 220      $time= explode(  " ", microtime());
 221      $userusec= (double)$time[0];
 222      $usersec= (double)$time[1];
 223      $deleteuser= mysql_query( "delete from whosonline where date < $usersec - 300", $db);
 224      $userlog= mysql_fetch_row(MYSQL_QUERY( "SELECT * FROM whosonline where IP = '$IP'", $db));
 225      if($userlog == false) {
 226          $ok= @mysql_query( "insert INTO whosonline (ID,IP,DATE,username,forum) VALUES('$User_Id','$IP','$usersec', '$username', '$forum')", $db)or die( "Unable to query db!");
 227      }
 228      $resultlogtab   = mysql_query("SELECT Count(*) as total FROM whosonline", $db);
 229      $numberlogtab   = mysql_fetch_array($resultlogtab);
 230      return($numberlogtab[total]);
 231   
 232  }
 233   
 234  /*
 235   * Returns the total number of posts in the whole system, a forum, or a topic
 236   * Also can return the number of users on the system.
 237   */ 
 238  function get_total_posts($id, $db, $type) {
 239     switch($type) {
 240      case 'users':
 241        $sql = "SELECT count(*) AS total FROM users WHERE user_id != -1";
 242        break;
 243      case 'all':
 244        $sql = "SELECT count(*) AS total FROM posts";
 245        break;
 246      case 'forum':
 247        $sql = "SELECT count(*) AS total FROM posts WHERE forum_id = '$id'";
 248        break;
 249      case 'topic':
 250        $sql = "SELECT count(*) AS total FROM posts WHERE topic_id = '$id'";
 251        break;
 252     // Old, we should never get this.   
 253      case 'user':
 254        die("Should be using the users.user_posts column for this.");
 255     }
 256     if(!$result = mysql_query($sql, $db))
 257       return("ERROR");
 258     if(!$myrow = mysql_fetch_array($result))
 259       return("0");
 260     
 261     return($myrow[total]);
 262     
 263  }
 264   
 265  /*
 266   * Returns the most recent post in a forum, or a topic
 267   */
 268  function get_last_post($id, $db, $type) {
 269     switch($type) {
 270      case 'forum':
 271        $sql = "SELECT p.post_time, p.poster_id, u.username FROM posts p, users u WHERE p.forum_id = '$id' AND p.poster_id = u.user_id ORDER BY post_time DESC";
 272        break;
 273      case 'topic':
 274        $sql = "SELECT p.post_time, u.username FROM posts p, users u WHERE p.topic_id = '$id' AND p.poster_id = u.user_id ORDER BY post_time DESC";
 275        break;
 276      case 'user':
 277        $sql = "SELECT p.post_time FROM posts p WHERE p.poster_id = '$id'";
 278        break;
 279     }
 280     if(!$result = mysql_query($sql, $db))
 281       return("ERROR");
 282     
 283     if(!$myrow = mysql_fetch_array($result))
 284       return("No posts");
 285     if($type != "user")
 286       $val = sprintf("%s <br> by %s", $myrow[post_time], $myrow[username]);
 287     else
 288       $val = $myrow[post_time];
 289     
 290     return($val);
 291  }
 292   
 293  /*
 294   * Returns an array of all the moderators of a forum
 295   */
 296  function get_moderators($forum_id, $db) {
 297     $sql = "SELECT u.user_id, u.username FROM users u, forum_mods f WHERE f.forum_id = '$forum_id' and f.user_id = u.user_id";
 298      if(!$result = mysql_query($sql, $db))
 299       return("-1");
 300     if(!$myrow = mysql_fetch_array($result))
 301       return("-1");
 302     do {
 303        $array[] = array("$myrow[user_id]" => "$myrow[username]");
 304     } while($myrow = mysql_fetch_array($result));
 305     return($array);
 306  }
 307   
 308  /*
 309   * Checks if a user (user_id) is a moderator of a perticular forum (forum_id)
 310   * Retruns 1 if TRUE, 0 if FALSE or Error
 311   */
 312  function is_moderator($forum_id, $user_id, $db) {
 313     $sql = "SELECT user_id FROM forum_mods WHERE forum_id = '$forum_id' AND user_id = '$user_id'";
 314     if(!$result = mysql_query($sql, $db))
 315       return("0");
 316     if(!$myrow = mysql_fetch_array($result))
 317       return("0");
 318     if($myrow[user_id] != '')
 319       return("1");
 320     else
 321       return("0");
 322  }
 323   
 324  /**
 325   * Nathan Codding - July 19, 2000
 326   * Checks the given password against the DB for the given username. Returns true if good, false if not.
 327   */
 328  function check_user_pw($username, $password, $db) {
 329      $password = md5($password);
 330      $sql = "SELECT user_id FROM users WHERE (username = '$username') AND (user_password = '$password')";
 331      $resultID = mysql_query($sql, $db);
 332      if (!$resultID) {
 333          echo mysql_error() . "<br>";
 334          die("Error doing DB query in check_user_pw()");
 335      }
 336      return mysql_num_rows($resultID);
 337  } // check_user_pw()
 338   
 339   
 340  /**
 341   * Nathan Codding - July 19, 2000
 342   * Returns a count of the given userid's private messages.
 343   */
 344  function get_pmsg_count($user_id, $db) {
 345      $sql = "SELECT msg_id FROM priv_msgs WHERE (to_userid = $user_id)";
 346      $resultID = mysql_query($sql);
 347      if (!$resultID) {
 348          echo mysql_error() . "<br>";
 349          die("Error doing DB query in get_pmsg_count");
 350      }
 351      return mysql_num_rows($resultID);
 352  } // get_pmsg_count()
 353   
 354   
 355  /**
 356   * Nathan Codding - July 19, 2000
 357   * Checks if a given username exists in the DB. Returns true if so, false if not.
 358   */
 359  function check_username($username, $db) {
 360      $sql = "SELECT user_id FROM users WHERE (username = '$username') AND (user_level != '-1')";
 361      $resultID = mysql_query($sql);
 362      if (!$resultID) {
 363          echo mysql_error() . "<br>";
 364          die("Error doing DB query in check_username()");
 365      }
 366      return mysql_num_rows($resultID);
 367  } // check_username()
 368   
 369   
 370  /**
 371   * Nathan Codding, July 19/2000
 372   * Get a user's data, given their user ID. 
 373   */
 374   
 375  function get_userdata_from_id($userid, $db) {
 376      
 377      $sql = "SELECT * FROM users WHERE user_id = $userid";
 378      if(!$result = mysql_query($sql, $db)) {
 379          $userdata = array("error" => "1");
 380          return ($userdata);
 381      }
 382      if(!$myrow = mysql_fetch_array($result)) {
 383          $userdata = array("error" => "1");
 384          return ($userdata);
 385      }
 386      
 387      return($myrow);
 388  }
 389   
 390  /* 
 391   * Gets user's data based on their username
 392   */
 393  function get_userdata($username, $db) {
 394      $sql = "SELECT * FROM users WHERE username = '$username' AND user_level != -1";
 395      if(!$result = mysql_query($sql, $db))
 396          $userdata = array("error" => "1");
 397      if(!$myrow = mysql_fetch_array($result))
 398          $userdata = array("error" => "1");
 399      
 400      return($myrow);
 401  }
 402   
 403  /*
 404   * Returns all the rows in the themes table
 405   */
 406  function setuptheme($theme, $db) {
 407      $sql = "SELECT * FROM themes WHERE theme_id = '$theme'";
 408      if(!$result = mysql_query($sql, $db))
 409          return(0);
 410      if(!$myrow = mysql_fetch_array($result))
 411          return(0);
 412      return($myrow);
 413  }
 414   
 415  /*
 416   * Checks if a forum or a topic exists in the database. Used to prevent
 417   * users from simply editing the URL to post to a non-existant forum or topic
 418   */
 419  function does_exists($id, $db, $type) {
 420      switch($type) {
 421          case 'forum':
 422              $sql = "SELECT forum_id FROM forums WHERE forum_id = '$id'";
 423          break;
 424          case 'topic':
 425              $sql = "SELECT topic_id FROM topics WHERE topic_id = '$id'";
 426          break;
 427      }
 428      if(!$result = mysql_query($sql, $db))
 429          return(0);
 430      if(!$myrow = mysql_fetch_array($result)) 
 431          return(0);
 432      return(1);
 433  }
 434   
 435  /*
 436   * Checks if a topic is locked
 437   */
 438  function is_locked($topic, $db) {
 439      $sql = "SELECT topic_status FROM topics WHERE topic_id = '$topic'";
 440      if(!$r = mysql_query($sql, $db))
 441          return(FALSE);
 442      if(!$m = mysql_fetch_array($r))
 443          return(FALSE);
 444      if($m[topic_status] == 1)
 445          return(TRUE);
 446      else
 447          return(FALSE);
 448  }
 449   
 450  /*
 451   * Changes :) to an <IMG> tag based on the smiles table in the database
 452   * TODO: Get rid of global variables.
 453   */
 454  function smile($message) {
 455     global $db, $url_smiles;
 456     
 457     if ($getsmiles = mysql_query("SELECT * FROM smiles")){
 458        while ($smiles = mysql_fetch_array($getsmiles)) {
 459       $message = str_replace($smiles[code], "<IMG SRC=\"$url_smiles/$smiles[smile_url]\">", $message);
 460        }
 461     }
 462     return($message);
 463  }
 464   
 465  /*
 466   * Changes a Smiliy <IMG> tag into its corrasponding smile
 467   * TODO: Get rid of golbal variables, and implement a method of distinguishing between :D and :grin: using the <IMG> tag
 468   */
 469  function desmile($message) {
 470     // Ick Ick Global variables...remind me to fix these! - theFinn
 471     global $db, $url_smiles;
 472     
 473     if ($getsmiles = mysql_query("SELECT * FROM smiles")){
 474        while ($smiles = mysql_fetch_array($getsmiles)) {
 475       $message = str_replace("<IMG SRC=\"$url_smiles/$smiles[smile_url]\">", $smiles[code], $message);
 476        }
 477     }
 478     return($message);
 479  }
 480   
 481  /**
 482   * bbdecode/bbencode functions:
 483   * Rewritten - Nathan Codding - Aug 24, 2000
 484   * Using Perl-Compatible regexps now. Won't kill special chars 
 485   * outside of a [code]...[/code] block now, and all BBCode tags
 486   * are implemented.
 487   * Note: the "i" matching switch is used, so BBCode tags are 
 488   * case-insensitive.
 489   */
 490  function bbdecode($message) {
 491                  
 492          // Undo [code]
 493          $message = preg_replace("#<!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>(.*?)</PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->#s", "[code]\\1[/code]", $message);
 494                  
 495          // Undo [quote]                        
 496          $message = preg_replace("#<!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>(.*?)</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->#s", "[quote]\\1[/quote]", $message);
 497          
 498          // Undo [b] and [i]
 499          $message = preg_replace("#<!-- BBCode Start --><B>(.*?)</B><!-- BBCode End -->#s", "[b]\\1[/b]", $message);
 500          $message = preg_replace("#<!-- BBCode Start --><I>(.*?)</I><!-- BBCode End -->#s", "[i]\\1[/i]", $message);
 501          
 502          // Undo [url] (both forms)
 503          $message = preg_replace("#<!-- BBCode Start --><A HREF=\"http://(.*?)\" TARGET=\"_blank\">(.*?)</A><!-- BBCode End -->#s", "[url=\\1]\\2[/url]", $message);
 504          
 505          // Undo [email]
 506          $message = preg_replace("#<!-- BBCode Start --><A HREF=\"mailto:(.*?)\">(.*?)</A><!-- BBCode End -->#s", "[email]\\1[/email]", $message);
 507          
 508          // Undo [img]
 509          $message = preg_replace("#<!-- BBCode Start --><IMG SRC=\"(.*?)\"><!-- BBCode End -->#s", "[img]\\1[/img]", $message);
 510          
 511          // Undo lists (unordered/ordered)
 512      
 513          // unordered list code..
 514          $matchCount = preg_match_all("#<!-- BBCode ulist Start --><UL>(.*?)</UL><!-- BBCode ulist End -->#s", $message, $matches);
 515      
 516          for ($i = 0; $i < $matchCount; $i++)
 517          {
 518              $currMatchTextBefore = preg_quote($matches[1][$i]);
 519              $currMatchTextBefore = escape_slashes($currMatchTextBefore);
 520              $currMatchTextAfter = preg_replace("#<LI>#s", "[*]", $matches[1][$i]);
 521          
 522              $message = preg_replace("#<!-- BBCode ulist Start --><UL>$currMatchTextBefore</UL><!-- BBCode ulist End -->#s", "[list]" . $currMatchTextAfter . "[/list]", $message);
 523          }
 524          
 525          // ordered list code..
 526          $matchCount = preg_match_all("#<!-- BBCode olist Start --><OL TYPE=([A1])>(.*?)</OL><!-- BBCode olist End -->#si", $message, $matches);
 527          
 528          for ($i = 0; $i < $matchCount; $i++)
 529          {
 530              $currMatchTextBefore = preg_quote($matches[2][$i]);
 531              $currMatchTextBefore = escape_slashes($currMatchTextBefore);
 532              $currMatchTextAfter = preg_replace("#<LI>#s", "[*]", $matches[2][$i]);
 533              
 534              $message = preg_replace("#<!-- BBCode olist Start --><OL TYPE=([A1])>$currMatchTextBefore</OL><!-- BBCode olist End -->#si", "[list=\\1]" . $currMatchTextAfter . "[/list]", $message);
 535          }    
 536          
 537          return($message);
 538  }
 539   
 540  function bbencode($message) {
 541   
 542      // [CODE] and [/CODE] for posting code (HTML, PHP, C etc etc) in your posts.
 543      $matchCount = preg_match_all("#\[code\](.*?)\[/code\]#si", $message, $matches);
 544      
 545      for ($i = 0; $i < $matchCount; $i++)
 546      {
 547          $currMatchTextBefore = preg_quote($matches[1][$i]);
 548          $currMatchTextBefore = escape_slashes($currMatchTextBefore);
 549          $currMatchTextAfter = htmlspecialchars($matches[1][$i]);
 550          
 551          $message = preg_replace("/\[code\]$currMatchTextBefore\[\/code\]/si", "<!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>$currMatchTextAfter</PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->", $message);
 552      }
 553   
 554      // [QUOTE] and [/QUOTE] for posting replies with quote, or just for quoting stuff.    
 555      $message = preg_replace("/\[quote\](.*?)\[\/quote]/si", "<!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>\\1</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->", $message);
 556      
 557      // [b] and [/b] for bolding text.
 558      $message = preg_replace("/\[b\](.*?)\[\/b\]/si", "<!-- BBCode Start --><B>\\1</B><!-- BBCode End -->", $message);
 559      
 560      // [i] and [/i] for italicizing text.
 561      $message = preg_replace("/\[i\](.*?)\[\/i\]/si", "<!-- BBCode Start --><I>\\1</I><!-- BBCode End -->", $message);
 562      
 563      // [url]www.phpbb.com[/url] code..
 564      $message = preg_replace("/\[url\](http:\/\/)?(.*?)\[\/url\]/si", "<!-- BBCode Start --><A HREF=\"http://\\2\" TARGET=\"_blank\">\\2</A><!-- BBCode End -->", $message);
 565      
 566      // [url=www.phpbb.com]phpBB[/url] code..
 567      $message = preg_replace("/\[url=(http:\/\/)?(.*?)\](.*?)\[\/url\]/si", "<!-- BBCode Start --><A HREF=\"http://\\2\" TARGET=\"_blank\">\\3</A><!-- BBCode End -->", $message);
 568      
 569      // [email]user@domain.tld[/email] code..
 570      $message = preg_replace("/\[email\](.*?)\[\/email\]/si", "<!-- BBCode Start --><A HREF=\"mailto:\\1\">\\1</A><!-- BBCode End -->", $message);
 571      
 572      // [img]image_url_here[/img] code..
 573      $message = preg_replace("/\[img\](.*?)\[\/img\]/si", "<!-- BBCode Start --><IMG SRC=\"\\1\"><!-- BBCode End -->", $message);
 574      
 575      // unordered list code..
 576      $matchCount = preg_match_all("/\[list\](.*?)\[\/list\]/si", $message, $matches);
 577      
 578      for ($i = 0; $i < $matchCount; $i++)
 579      {
 580          $currMatchTextBefore = preg_quote($matches[1][$i]);
 581          $currMatchTextBefore = escape_slashes($currMatchTextBefore);
 582          $currMatchTextAfter = preg_replace("#\[\*\]#si", "<LI>", $matches[1][$i]);
 583          
 584          $message = preg_replace("/\[list\]$currMatchTextBefore\[\/list\]/si", "<!-- BBCode ulist Start --><UL>$currMatchTextAfter</UL><!-- BBCode ulist End -->", $message);
 585      }
 586      
 587      // ordered list code..
 588      $matchCount = preg_match_all("/\[list=([a1])\](.*?)\[\/list\]/si", $message, $matches);
 589      
 590      for ($i = 0; $i < $matchCount; $i++)
 591      {
 592          $currMatchTextBefore = preg_quote($matches[2][$i]);
 593          $currMatchTextBefore = escape_slashes($currMatchTextBefore);
 594          $currMatchTextAfter = preg_replace("\\[\*\]/si", "<LI>", $matches[2][$i]);
 595          
 596          $message = preg_replace("/\[list=([a1])\]$currMatchTextBefore\[\/list\]/si", "<!-- BBCode olist Start --><OL TYPE=\\1>$currMatchTextAfter</OL><!-- BBCode olist End -->", $message);
 597      }
 598          
 599      return($message);
 600  }
 601   
 602   
 603  /**
 604   * Nathan Codding - Oct. 30, 2000
 605   *
 606   * Escapes the "/" character with "\/". This is useful when you need
 607   * to stick a runtime string into a PREG regexp that is being delimited 
 608   * with slashes.
 609   */
 610  function escape_slashes($input)
 611  {
 612      $output = preg_replace("#/#", "\/", $input);
 613      return $output;
 614  }
 615   
 616  /*
 617   * Returns the name of the forum based on ID number
 618   */
 619  function get_forum_name($forum_id, $db) {
 620      $sql = "SELECT forum_name FROM forums WHERE forum_id = '$forum_id'";
 621      if(!$r = mysql_query($sql, $db))
 622          return("ERROR");
 623      if(!$m = mysql_fetch_array($r))
 624          return("None");
 625      return($m[forum_name]);
 626  }
 627   
 628   
 629  /**
 630   * Modified by Nathan Codding - July 20, 2000.
 631   * Made it only work on URLs and e-mail addresses preceeded by a space, in order to stop
 632   * mangling HTML code.
 633   *
 634   * The Following function was taken from the Scriplets area of http://www.phpwizard.net, and was written by Tobias Ratschiller.
 635   *   Visit phpwizard.net today, its an excellent site! 
 636   */
 637   
 638  function make_clickable($text) {
 639      $ret = eregi_replace(" ([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", " <a href=\"\\1://\\2\\3\" target=\"_blank\" target=\"_new\">\\1://\\2\\3</a>", $text);
 640          $ret = eregi_replace(" (([a-z0-9_]|\\-|\\.)+@([^[:space:]]*)([[:alnum:]-]))", " <a href=\"mailto:\\1\" target=\"_new\">\\1</a>", $ret);
 641          return($ret);
 642  }
 643   
 644  /**
 645   * Nathan Codding - August 24, 2000.
 646   * Takes a string, and does the reverse of the PHP standard function
 647   * htmlspecialchars().
 648   */
 649  function undo_htmlspecialchars($input) {
 650      $input = preg_replace("/&gt;/i", ">", $input);
 651      $input = preg_replace("/&lt;/i", "<", $input);
 652      $input = preg_replace("/&quot;/i", "\"", $input);
 653      $input = preg_replace("/&amp;/i", "&", $input);
 654      
 655      return $input;
 656  }
 657  /*
 658   * Make sure a username isn't on the disallow list
 659   */
 660  function validate_username($username, $db) {
 661      $sql = "SELECT disallow_username FROM disallow WHERE disallow_username = '" . addslashes($username) . "'";
 662      if(!$r = mysql_query($sql, $db))
 663          return(0);
 664      if($m = mysql_fetch_array($r)) {
 665          if($m[disallow_username] == $username)
 666              return(1);
 667          else
 668              return(0);
 669      }
 670      return(0);
 671  }
 672  /*
 673   * Check if this is the first post in a topic. Used in editpost.php
 674   */
 675  function is_first_post($topic_id, $post_id, $db) {
 676     $sql = "SELECT post_id FROM posts WHERE topic_id = '$topic_id' ORDER BY post_id LIMIT 1";
 677     if(!$r = mysql_query($sql, $db))
 678       return(0);
 679     if(!$m = mysql_fetch_array($r))
 680       return(0);
 681     if($m[post_id] == $post_id)
 682       return(1);
 683     else
 684       return(0);
 685  }
 686   
 687  /*
 688   * Replaces banned words in a string with their replacements
 689   */
 690  function censor_string($string, $db) {
 691     $sql = "SELECT word, replacement FROM words";
 692     if(!$r = mysql_query($sql, $db))
 693        die("Error, could not contact the database! Please check your database settings in config.$phpEx");
 694     while($w = mysql_fetch_array($r)) {
 695        $word = stripslashes($w[word]);
 696        $replacement = stripslashes($w[replacement]);
 697        $string = eregi_replace(" $word", " $replacement", $string);
 698        $string = eregi_replace("^$word", "$replacement", $string);
 699        $string = eregi_replace("<BR>$word", "<BR>$replacement", $string);
 700     }
 701     return($string);
 702  }
 703   
 704  function is_banned($ipuser, $type, $db) {
 705     
 706     // Remove old bans
 707     $sql = "DELETE FROM banlist WHERE (ban_end < ". mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")).") AND (ban_end > 0)";
 708     @mysql_query($sql, $db);
 709     
 710     switch($type) {
 711      case "ip":
 712        $sql = "SELECT ban_ip FROM banlist";
 713        if($r = mysql_query($sql, $db)) {
 714       while($iprow = mysql_fetch_array($r)) {
 715          $ip = $iprow[ban_ip];
 716          if($ip[strlen($ip) - 1] == ".") {
 717             $db_ip = explode(".", $ip);
 718             $this_ip = explode(".", $ipuser);
 719             
 720             for($x = 0; $x < count($db_ip) - 1; $x++) 
 721           $my_ip .= $this_ip[$x] . ".";
 722   
 723             if($my_ip == $ip)
 724           return(TRUE);
 725          }
 726          else {
 727             if($ipuser == $ip)
 728           return(TRUE);
 729          }
 730       }
 731        }
 732        else 
 733      return(FALSE);
 734        break;
 735      case "username":
 736        $sql = "SELECT ban_userid FROM banlist WHERE ban_userid = '$ipuser'";
 737        if($r = mysql_query($sql, $db)) {
 738       if(mysql_num_rows($r) > 0)
 739         return(TRUE);
 740        }
 741        break;
 742     }
 743     
 744     return(FALSE);
 745  }
 746   
 747   
 748  ?>
 749