'\/', '^' => '\^', '$' => '\$', '.' => '\.', '[' => '\[', ']' => '\]', '|' => '\|', '(' => '\(', ')' => '\)', '?' => '\?', '*' => '\*', '+' => '\+', '{' => '\{', '}' => '\}', '\\' => '\\\\', '^' => '\^', '-' => '\-'); $utf8 = (KUNENA_CHARSET == 'UTF-8') ? "u" : ""; $type = ($history == 1) ? "-grey" : ""; $message_emoticons = array(); $message_emoticons = $iconList? $iconList : smile::getEmoticons($history); // now the text is parsed, next are the emoticons $fb_message_txt = $fb_message; if ($emoticons != 1) { reset($message_emoticons); while (list($emo_txt, $emo_src) = each($message_emoticons)) { $emo_txt = strtr($emo_txt, $regexp_trans); // Check that smileys are not part of text like:soon (:s) $fb_message_txt = preg_replace('/(\W|\A)'.$emo_txt.'(\W|\Z)/'.$utf8, '\1\2', $fb_message_txt); // Previous check causes :) :) not to work, workaround is to run the same regexp twice $fb_message_txt = preg_replace('/(\W|\A)'.$emo_txt.'(\W|\Z)/'.$utf8, '\1\2', $fb_message_txt); } } return $fb_message_txt; } function smileReplace($fb_message, $history, $emoticons, $iconList = null) { $fb_message_txt = $fb_message; //implement the new parser $parser = new TagParser(); $interpreter = new KunenaBBCodeInterpreter($parser); $task = $interpreter->NewTask(); $task->SetText($fb_message_txt.' _EOP_'); $task->dry = FALSE; $task->drop_errtag = FALSE; $task->history = $history; $task->emoticons = $emoticons; $task->iconList = $iconList; $task->Parse(); // Show Parse errors for debug //$task->ErrorShow(); return substr($task->text,0,-6); } /** * function to retrieve the emoticons out of the database * * @author Niels Vandekeybus * @version 1.0 * @since 2005-04-19 * @param boolean $grayscale * determines wether to return the grayscale or the ordinary emoticon * @param boolean $emoticonbar * only list emoticons to be displayed in the emoticonbar (currently unused) * @return array * array consisting of emoticon codes and their respective location (NOT the entire img tag) */ function getEmoticons($grayscale, $emoticonbar = 0) { $kunena_db = &JFactory::getDBO(); $grayscale == 1 ? $column = "greylocation" : $column = "location"; $sql = "SELECT code, `$column` FROM #__fb_smileys"; if ($emoticonbar == 1) $sql .= " WHERE emoticonbar='1'"; $kunena_db->setQuery($sql); $smilies = $kunena_db->loadObjectList(); check_dberror("Unable to load smilies."); $smileyArray = array(); foreach ($smilies as $smiley) { // We load all smileys in array, so we can sort them $smileyArray[$smiley->code] = '' . KUNENA_URLEMOTIONSPATH . $smiley->$column; // This makes sure that for example :pinch: gets translated before :p } if ($emoticonbar == 0) { // don't sort when it's only for use in the emoticonbar array_multisort(array_keys($smileyArray), SORT_DESC, $smileyArray); reset($smileyArray); } return $smileyArray; } function topicToolbar($selected, $tawidth) { //TO USE // $topicToolbar = smile:topicToolbar(); // echo $topicToolbar; //$selected var is used to check the right selected icon //important for the edit function $selected = (int)$selected; ?> '; } ?> /> /> /> />
/> /> /> />
/si", "", $fb_message_txt); $fb_message_txt = preg_replace("%

%si", "\n", $fb_message_txt); $fb_message_txt = preg_replace("/
/si", "\n", $fb_message_txt); $fb_message_txt = preg_replace("%
%si", "\n", $fb_message_txt); $fb_message_txt = preg_replace("%
%si", "\n", $fb_message_txt); $fb_message_txt = preg_replace("/ /si", " ", $fb_message_txt); $fb_message_txt = preg_replace("/
    /si", "[ol]", $fb_message_txt); $fb_message_txt = preg_replace("%
%si", "[/ol]", $fb_message_txt); $fb_message_txt = preg_replace("/%si", "[/ul]", $fb_message_txt); $fb_message_txt = preg_replace("/
  • /si", "[li]", $fb_message_txt); $fb_message_txt = preg_replace("%
  • %si", "[/li]", $fb_message_txt); $fb_message_txt = preg_replace("/
    /si", "[quote]", $fb_message_txt); $fb_message_txt = preg_replace("%
    %si", "[/quote]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[b]", $fb_message_txt); $fb_message_txt = preg_replace("%%si", "[/b]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[i]", $fb_message_txt); $fb_message_txt = preg_replace("%%si", "[/i]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[u]", $fb_message_txt); $fb_message_txt = preg_replace("%%si", "[/u]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[strike]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[sub]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[sup]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[left]", $fb_message_txt); $fb_message_txt = preg_replace("/
    /si", "[center]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[right]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[s]", $fb_message_txt); $fb_message_txt = preg_replace("%%si", "[/s]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[b]", $fb_message_txt); $fb_message_txt = preg_replace("%%si", "[/b]", $fb_message_txt); $fb_message_txt = preg_replace("//si", "[i]", $fb_message_txt); $fb_message_txt = preg_replace("%%si", "[/i]", $fb_message_txt); //okay, now we've converted all HTML to known boardcode, nuke everything remaining itteratively: while ($fb_message_txt != strip_tags($fb_message_txt)) { $fb_message_txt = strip_tags($fb_message_txt); } return $fb_message_txt; } // fbStripHtmlTags() /** * This will convert all remaining HTML tags to innocent tags able to be displayed in full */ function fbHtmlSafe($text) { $fb_message_txt = $text; $fb_message_txt = str_replace("<", "<", $fb_message_txt); $fb_message_txt = str_replace(">", ">", $fb_message_txt); return $fb_message_txt; } // fbHtmlSafe() /** * This function will write the TextArea */ function fbWriteTextarea($areaname, $html, $width, $height, $useRte, $emoticons) { // well $html is the $message to edit, generally it means in PLAINTEXT @Kunena! global $editmode; // ERROR: mixed global $editmode $fbConfig =& CKunenaConfig::getInstance(); // (JJ) JOOMLA STYLE CHECK if ($fbConfig->joomlastyle < 1) { $boardclass = "fb_"; } ?> :
    B I U S Sub Sup <?php @print(_SMILE_SIZE); ?> <?php @print(_SMILE_COLOUR); ?> showspoilertag) {?> Spoiler Hide ul ol li left center right Quote Code Img URL showebaytag) {?> Ebay showvideotag) {?>   video
    :
    (+) / (-)


    ]*>.*?'si", "", $text); $text = preg_replace('/]*>([^<]+)<\/a>/is', '\2 (\1)', $text); $text = preg_replace('//', '', $text); $text = preg_replace('/{.+?}/', '', $text); $text = preg_replace('/ /', ' ', $text); $text = preg_replace('/&/', ' ', $text); $text = preg_replace('/"/', ' ', $text); //smilies $text = preg_replace('/:laugh:/', ':-D', $text); $text = preg_replace('/:angry:/', ' ', $text); $text = preg_replace('/:mad:/', ' ', $text); $text = preg_replace('/:unsure:/', ' ', $text); $text = preg_replace('/:ohmy:/', ':-O', $text); $text = preg_replace('/:blink:/', ' ', $text); $text = preg_replace('/:huh:/', ' ', $text); $text = preg_replace('/:dry:/', ' ', $text); $text = preg_replace('/:lol:/', ':-))', $text); $text = preg_replace('/:money:/', ' ', $text); $text = preg_replace('/:rolleyes:/', ' ', $text); $text = preg_replace('/:woohoo:/', ' ', $text); $text = preg_replace('/:cheer:/', ' ', $text); $text = preg_replace('/:silly:/', ' ', $text); $text = preg_replace('/:blush:/', ' ', $text); $text = preg_replace('/:kiss:/', ' ', $text); $text = preg_replace('/:side:/', ' ', $text); $text = preg_replace('/:evil:/', ' ', $text); $text = preg_replace('/:whistle:/', ' ', $text); $text = preg_replace('/:pinch:/', ' ', $text); //bbcode $text = preg_replace('/\[hide==([1-3])\](.*?)\[\/hide\]/s', '', $text); $text = preg_replace('/(\[b\])/', ' ', $text); $text = preg_replace('/(\[\/b\])/', ' ', $text); $text = preg_replace('/(\[s\])/', ' ', $text); $text = preg_replace('/(\[\/s\])/', ' ', $text); $text = preg_replace('/(\[i\])/', ' ', $text); $text = preg_replace('/(\[\/i\])/', ' ', $text); $text = preg_replace('/(\[u\])/', ' ', $text); $text = preg_replace('/(\[\/u\])/', ' ', $text); $text = preg_replace('/(\[quote\])/', ' ', $text); $text = preg_replace('/(\[\/quote\])/', ' ', $text); $text = preg_replace('/(\[code:1\])(.*?)(\[\/code:1\])/', '\\2', $text); $text = preg_replace('/(\[ul\])(.*?)(\[\/ul\])/s', '\\2', $text); $text = preg_replace('/(\[li\])(.*?)(\[\/li\])/s', '\\2', $text); $text = preg_replace('/(\[ol\])(.*?)(\[\/ol\])/s', '\\2', $text); $text = preg_replace('/\[img size=([0-9][0-9][0-9])\](.*?)\[\/img\]/s', '\\2', $text); $text = preg_replace('/\[img size=([0-9][0-9])\](.*?)\[\/img\]/s', '\\2', $text); $text = preg_replace('/\[img\](.*?)\[\/img\]/s', '\\1', $text); $text = preg_replace('/\[url\](.*?)\[\/url\]/s', '\\1', $text); $text = preg_replace('/\[url=(.*?)\](.*?)\[\/url\]/s', '\\2 (\\1)', $text); $text = preg_replace('/(.*)<\/A>/i', '\\2', $text); $text = preg_replace('/\[file(.*?)\](.*?)\[\/file\]/s', '\\2', $text); $text = preg_replace('/\[hide(.*?)\](.*?)\[\/hide\]/s', ' ', $text); $text = preg_replace('/\[spoiler(.*?)\](.*?)\[\/spoiler\]/s', ' ', $text); $text = preg_replace('/\[size=([1-7])\](.+?)\[\/size\]/s', '\\2', $text); $text = preg_replace('/\[color=(.*?)\](.*?)\[\/color\]/s', '\\2', $text); $text = preg_replace('/\[video\](.*?)\[\/video\]/s', '\\1', $text); $text = preg_replace('/\[ebay\](.*?)\[\/ebay\]/s', '\\1', $text); $text = preg_replace('#/n#s', ' ', $text); $text = strip_tags($text); //$text = stripslashes(kunena_htmlspecialchars($text)); $text = stripslashes($text); return ($text); } //purify function urlMaker($text) { $text = str_replace("\n", " \n ", $text); $words = explode(' ', $text); for ($i = 0; $i < sizeof($words); $i++) { $word = $words[$i]; //Trim below is necessary is the tag is placed at the begin of string $c = 0; if (strtolower(substr($words[$i], 0, 7)) == 'http://') { $c = 1; $word = '' . $word . ''; } elseif (strtolower(substr($words[$i], 0, 8)) == 'https://') { $c = 1; $word = '' . $word . ''; } elseif (strtolower(substr($words[$i], 0, 6)) == 'ftp://') { $c = 1; $word = '' . $word . ''; } elseif (strtolower(substr($words[$i], 0, 4)) == 'ftp.') { $c = 1; $word = '' . $word . ''; } elseif (strtolower(substr($words[$i], 0, 4)) == 'www.') { $c = 1; $word = '' . $word . ''; } elseif (strtolower(substr($words[$i], 0, 7)) == 'mailto:') { $c = 1; $word = '' . $word . ''; } if ($c == 1) $words[$i] = $word; //$words[$i] = str_replace ("\n ", "\n", $words[$i]); } $ret = str_replace(" \n ", "\n", implode(' ', $words)); return $ret; } /* ************************************************************** * htmlwrap() function - v1.7 * Copyright (c) 2004-2008 Brian Huisman AKA GreyWyvern * * This program may be distributed under the terms of the GPL * - http://www.gnu.org/licenses/gpl.txt * * * htmlwrap -- Safely wraps a string containing HTML formatted text (not * a full HTML document) to a specified width * * * Requirements * htmlwrap() requires a version of PHP later than 4.1.0 on *nix or * 4.2.3 on win32. * * * Changelog * 1.7 - Fix for buggy handling of \S with PCRE_UTF8 modifier * - Reported by marj * * 1.6 - Fix for endless loop bug on certain special characters * - Reported by Jamie Jones & Steve * * 1.5 - Tags no longer bulk converted to lowercase * - Fixes a bug reported by Dave * * 1.4 - Made nobreak algorithm more robust * - Fixes a bug reported by Jonathan Wage * * 1.3 - Added automatic UTF-8 encoding detection * - Fixed case where HTML entities were not counted correctly * - Some regexp speed tweaks * * 1.2 - Removed nl2br feature; script now *just* wraps HTML * * 1.1 - Now optionally works with UTF-8 multi-byte characters * * * Description * * string htmlwrap ( string str [, int width [, string break [, string nobreak]]]) * * htmlwrap() is a function which wraps HTML by breaking long words and * preventing them from damaging your layout. This function will NOT * insert
    tags every "width" characters as in the PHP wordwrap() * function. HTML wraps automatically, so this function only ensures * wrapping at "width" characters is possible. Use in places where a * page will accept user input in order to create HTML output like in * forums or blog comments. * * htmlwrap() won't break text within HTML tags and also preserves any * existing HTML entities within the string, like   and < It * will only count these entities as one character. * * The function also allows you to specify "protected" elements, where * line-breaks are not inserted. This is useful for elements like
    	* if you don't want the code to be damaged by insertion of newlines.
    	* Add the names of the elements you wish to protect from line-breaks as
    	* as a space separate list to the nobreak argument.  Only names of
    	* valid HTML tags are accepted.  (eg. "code pre blockquote")
    	*
    	* htmlwrap() will *always* break long strings of characters at the
    	* specified width.  In this way, the function behaves as if the
    	* wordwrap() "cut" flag is always set.  However, the function will try
    	* to find "safe" characters within strings it breaks, where inserting a
    	* line-break would make more sense.  You may edit these characters by
    	* adding or removing them from the $lbrks variable.
    	*
    	* htmlwrap() is safe to use on strings containing UTF-8 multi-byte
    	* characters.
    	*
    	* See the inline comments and http://www.greywyvern.com/php.php
    	* for more info
    	******************************************************************** */
    
    	function htmlwrap($str, $width = 60, $break = "\n", $nobreak = "") {
    
    	  // Split HTML content into an array delimited by < and >
    	  // The flags save the delimeters and remove empty variables
    	  $content = preg_split("/([<>])/", $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
    
    	  // Transform protected element lists into arrays
    	  $nobreak = explode(" ", strtolower($nobreak));
    
    	  // Variable setup
    	  $intag = false;
    	  $innbk = array();
    	  $drain = "";
    
    	  // List of characters it is "safe" to insert line-breaks at
    	  // It is not necessary to add < and > as they are automatically implied
    	  $lbrks = "/?!%)-}]\\\"':;&";
    
    	  // Is $str a UTF8 string?
    //	  $utf8 = (preg_match("/^([\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/", $str)) ? "u" : "";
    	  // original utf8 problems seems to cause problems with very long text (forumposts)
    	  // replaced by a little simpler function call by fxstein 8-13-08
    	  $utf8 = (KUNENA_CHARSET == 'UTF-8') ? "u" : "";
    
    	  while (list(, $value) = each($content)) {
    	    switch ($value) {
    
    	      // If a < is encountered, set the "in-tag" flag
    	      case "<": $intag = true; break;
    
    	      // If a > is encountered, remove the flag
    	      case ">": $intag = false; break;
    
    	      default:
    
    	        // If we are currently within a tag...
    	        if ($intag) {
    
    	          // Create a lowercase copy of this tag's contents
    	          $lvalue = strtolower($value);
    
    	          // If the first character is not a / then this is an opening tag
    	          if ($lvalue{0} != "/") {
    
    	            // Collect the tag name
    	            preg_match("/^(\w*?)(\s|$)/", $lvalue, $t);
    
    	            // If this is a protected element, activate the associated protection flag
    	            if (in_array($t[1], $nobreak)) array_unshift($innbk, $t[1]);
    
    	          // Otherwise this is a closing tag
    	          } else {
    
    	            // If this is a closing tag for a protected element, unset the flag
    	            if (in_array(substr($lvalue, 1), $nobreak)) {
    	              reset($innbk);
    	              while (list($key, $tag) = each($innbk)) {
    	                if (substr($lvalue, 1) == $tag) {
    	                  unset($innbk[$key]);
    	                  break;
    	                }
    	              }
    	              $innbk = array_values($innbk);
    	            }
    	          }
    
    	        // Else if we're outside any tags...
    	        } else if ($value) {
    
    	          // If unprotected...
    	          if (!count($innbk)) {
    
    	            // Use the ACK (006) ASCII symbol to replace all HTML entities temporarily
    	            $value = str_replace("\x06", "", $value);
    	            preg_match_all("/&([a-z\d]{2,7}|#\d{2,5});/i", $value, $ents);
    	            $value = preg_replace("/&([a-z\d]{2,7}|#\d{2,5});/i", "\x06", $value);
    
    	            // Enter the line-break loop
    	            do {
    	              $store = $value;
    
    	              // Find the first stretch of characters over the $width limit
    	              if (preg_match("/^(.*?\s)?([^\s]{".$width."})(?!(".preg_quote($break, "/")."|\s))(.*)$/s{$utf8}", $value, $match)) {
    
    	                if (strlen($match[2])) {
    	                  // Determine the last "safe line-break" character within this match
    	                  for ($x = 0, $ledge = 0; $x < strlen($lbrks); $x++) $ledge = max($ledge, strrpos($match[2], $lbrks{$x}));
    	                  if (!$ledge) $ledge = strlen($match[2]) - 1;
    
    	                  // Insert the modified string
    	                  $value = $match[1].substr($match[2], 0, $ledge + 1).$break.substr($match[2], $ledge + 1).$match[4];
    	                }
    	              }
    
    	            // Loop while overlimit strings are still being found
    	            } while ($store != $value);
    
    	            // Put captured HTML entities back into the string
    	            foreach ($ents[0] as $ent) $value = preg_replace("/\x06/", $ent, $value, 1);
    	          }
    	        }
    	    }
    
    	    // Send the modified segment down the drain
    	    $drain .= $value;
    	  }
    
    	  // Return contents of the drain
    	  return $drain;
    	}
    } //class
    ?>