Source for file MessageInserter.class.php

Documentation is available at MessageInserter.class.php

  1. <?php
  2. /**
  3.  * Class MessageInserter, insert system and user messages into DB and transform it if needed
  4.  *
  5.  * LICENSE: CREATIVE COMMONS PUBLIC LICENSE  "Namensnennung — Nicht-kommerziell 2.0"
  6.  *
  7.  * @copyright  2009 <SEDesign />
  8.  * @license    http://creativecommons.org/licenses/by-nc/2.0/de/
  9.  * @version    $3.0.6$
  10.  * @link       http://www.sedesign.de/de_produkte_chat-v3.html
  11.  * @since      File available since Alpha 1.0
  12.  */
  13.  
  14. class MessageInserter extends EtChatConfig
  15. {
  16.     /**
  17.     * DB-Connection Obj
  18.     * @var ConnectDB 
  19.     */
  20.     private $dbObj;
  21.     
  22.     /**
  23.     * Status var only needed for information if the user will be inserted into blacklist because of spam
  24.     * @var String 
  25.     */
  26.     public $status;
  27.  
  28.     /**
  29.     * Constructor
  30.     *
  31.     * @param  ConnectDB $dbObj, Obj with the db connection handler
  32.     * @param  Array $raum_array 
  33.     * @uses ConnectDB::sqlSet()
  34.     * @return void 
  35.     */
  36.     public function __construct ($dbObj$raum_array)
  37.         
  38.         // call parent Constructor from class EtChatConfig
  39.         parent::__construct();
  40.         
  41.         $this->dbObj=$dbObj;
  42.         
  43.         // message after room entrance
  44.         if ($_POST['roomchange']=="true" && !empty($raum_array[0][3])){        
  45.             // line break WIN
  46.             $room_message_insert str_replace("\r\n","<br />",$raum_array[0][3]);
  47.             // line break LIN, Uniux, MacOS
  48.             $room_message_insert str_replace("\n","<br />",$room_message_insert);
  49.             
  50.             new SysMessage($this->dbObj"<br /><div style=\"margin: 4px;\">".$room_message_insert."<div>",(int)$_POST['room'],$_SESSION['etchat_'.$this->_prefix.'user_id']);
  51.         }
  52.     
  53.         if (isset($_POST['sysmess'])){
  54.             $_POST['message'htmlspecialchars($_POST['message']ENT_QUOTES"UTF-8");
  55.             $_POST['message'"<b>".$_SESSION['etchat_'.$this->_prefix.'username']."</b> ".$_POST['message'];
  56.     
  57.             // do not create a visible room entrance message if the user is invisible, just make the message as a private one
  58.             if ($_POST['roomchange']=="true" && $_SESSION['etchat_'.$this->_prefix.'userstatus']=="status_invisible"
  59.                 $_POST['privat']=$_SESSION['etchat_'.$this->_prefix.'user_id'];
  60.             
  61.             new SysMessage($this->dbObj$_POST['message'],(int)$_POST['room'],(int)$_POST['privat']);
  62.         }
  63.         else{
  64.             
  65.             // spam test
  66.             if ($this->spamTester()) {
  67.                 $this->status = "spam";
  68.                 return false;
  69.             }
  70.             
  71.             // transforms the $_POST['message'] before inserting it
  72.             $this->messageTransformer();
  73.             
  74.             // message style parameters
  75.             $style "color:".htmlentities($_POST['color']ENT_QUOTES"UTF-8").";font-weight:".htmlentities($_POST['bold']ENT_QUOTES"UTF-8").";font-style:".htmlentities($_POST['italic']ENT_QUOTES"UTF-8").";";
  76.             
  77.             // inserts the user message into the DB
  78.             $this->dbObj->sqlSet("INSERT INTO {$this->_prefix}etchat_messages ( etchat_user_fid, etchat_text, etchat_text_css, etchat_timestamp, etchat_fid_room, etchat_privat, etchat_user_ip)
  79.                 VALUES ( '".$_SESSION['etchat_'.$this->_prefix.'user_id']."', '".$_POST['message']."', '".$style."', ".date('U').", ".(int)$_POST['room'].", ".(int)$_POST['privat'].", '".$_SERVER['REMOTE_ADDR']."')");
  80.         
  81.  
  82.             // BOT -------------------------------------------
  83.             /*
  84.             if (substr($_POST['message'], 0, 5)==".time"){
  85.                 $db->sql("INSERT INTO {$this->_prefix}etchat_messages ( etchat_user_fid , etchat_text, etchat_text_css, etchat_timestamp, etchat_fid_room, etchat_privat)
  86.                     VALUES ( 1, '".date('d.m.Y - H:i')."', 'color:#".$_SESSION['etchat_'.$this->_prefix.'syscolor'].";font-weight:normal;font-style:normal;', ".date('U').", ".(int)$_POST['room'].", 0)", false);
  87.             }
  88.             if (substr($_POST['message'], 0, 8)==".version"){
  89.                 $db->sql("INSERT INTO {$this->_prefix}etchat_messages ( etchat_user_fid , etchat_text, etchat_text_css, etchat_timestamp, etchat_fid_room, etchat_privat)
  90.                     VALUES ( 1, 'ET-Chat v3.0.5', 'color:#".$_SESSION['etchat_'.$this->_prefix.'syscolor'].";font-weight:normal;font-style:normal;', ".date('U').", ".(int)$_POST['room'].", 0)", false);
  91.             }
  92.             if (substr($_POST['message'], 0, 1)=="/"){
  93.                 $db->sql("INSERT INTO {$this->_prefix}etchat_messages ( etchat_user_fid , etchat_text, etchat_text_css, etchat_timestamp, etchat_fid_room, etchat_privat)
  94.                     VALUES ( 1, 'IRC Befehle werden hier nicht unterstützt. Alle Einstellungen können stattdessen in Menues bequemm eingestellt werden.', 'color:#".$_SESSION['etchat_'.$this->_prefix.'syscolor'].";font-weight:normal;font-style:normal;', ".date('U').", ".(int)$_POST['room'].", 0)", false);
  95.             }
  96.             */
  97.             //--------------------------------
  98.         }
  99.     }
  100.  
  101.     
  102.     /**
  103.     * Transforms the message
  104.     *
  105.     * @return void
  106.     */
  107.     private function messageTransformer(){
  108.         $_POST['message'] =    substr($_POST['message'], 0, 1000);
  109.         if (strlen($_POST['message'])>999) $_POST['message'] .="...";
  110.  
  111.         $woerter_array=explode(" ",$_POST['message']);
  112.         foreach($woerter_array as $wort){
  113.             if (strlen($wort)>50 && substr($wort, 0, 7)!="http://" && substr($wort, 0, 8)!="https://" && substr($wort, 0, 6)!="ftp://" && stripos($wort, ']http://')===false){
  114.                 $new_wort = wordwrap( $wort, 50, " ", 1);
  115.                 $_POST['message'] = str_replace($wort, $new_wort, $_POST['message']);
  116.             }
  117.         }
  118.         $_POST['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES, "UTF-8");
  119.     }
  120.     
  121.     
  122.     /**
  123.     * Test if the message is a spam, warns the user and insert him into the blacklist if needed
  124.     *
  125.     * @uses LangXml object creation
  126.     * @uses LangXml::getLang() parser method
  127.     * @uses Blacklist object creation
  128.     * @uses Blacklist::userInBlacklist() checks if in the Blacklist
  129.     * @uses Blacklist::insertUser()
  130.     * @uses Blacklist::allowedToAndSetCookie()
  131.     * @uses Blacklist::killUserSession()
  132.     * @return bool
  133.     */
  134.     private function spamTester(){
  135.     
  136.         $_SESSION['etchat_'.$this->_prefix.'spam'][]=date('U');
  137.  
  138.         // do not overload the session array in the case of server performanse, so clear it every 200 entries
  139.         if (count($_SESSION['etchat_'.$this->_prefix.'spam'])>200) {
  140.             unset($_SESSION['etchat_'.$this->_prefix.'spam']);
  141.             $_SESSION['etchat_'.$this->_prefix.'spam']=array();
  142.         }
  143.  
  144.         // 3 messages one after another are allowed, excepting ADMIN/MOD
  145.         if (count($_SESSION['etchat_'.$this->_prefix.'spam'])>3 && $_SESSION['etchat_'.$this->_prefix.'user_priv']!="admin" && $_SESSION['etchat_'.$this->_prefix.'user_priv']!="mod"){
  146.     
  147.             $spam_interval=($_SESSION['etchat_'.$this->_prefix.'spam'][(count($_SESSION['etchat_'.$this->_prefix.'spam'])-1)] - $_SESSION['etchat_'.$this->_prefix.'spam'][(count($_SESSION['etchat_'.$this->_prefix.'spam'])-4)]);
  148.     
  149.             if ($spam_interval < 6 ){        
  150.                 // create new LangXml Object
  151.                 $langObj = new <a href="../ET-Chat/LangXml.html">LangXml</a>();
  152.                 $lang=$langObj->getLang()->reloader_php[0];
  153.                 new <a href="../ET-Chat/SysMessage.html">SysMessage</a>($this->dbObj, $lang->spam[0]->tagData,(int)$_POST['room'],(int)$_SESSION['etchat_'.$this->_prefix.'user_id']);
  154.  
  155.                 $_SESSION['etchat_'.$this->_prefix.'spam_warn']++;
  156.         
  157.                 if ($_SESSION['etchat_'.$this->_prefix.'spam_warn']>2){
  158.                     // create new Blacklist Object
  159.                     $blObj = new <a href="../ET-Chat/Blacklist.html">Blacklist</a>($this->dbObj);
  160.                     $blObj->insertUser($_SESSION['etchat_'.$this->_prefix.'user_id'],300);
  161.                     $blObj->userInBlacklist();
  162.                     $blObj->allowedToAndSetCookie();
  163.                     $blObj->killUserSession();
  164.                     return true;
  165.                 }
  166.                 else return false;        
  167.             }
  168.         }    
  169.     
  170.     }
  171.     
  172.     

Documentation generated on Thu, 05 May 2011 14:05:57 +0000 by phpDocumentor 1.4.3