[ Index ] |
|
Code source de Phorum 5.1.25 |
1 <?php 2 3 //////////////////////////////////////////////////////////////////////////////// 4 // // 5 // Copyright (C) 2006 Phorum Development Team // 6 // http://www.phorum.org // 7 // // 8 // This program is free software. You can redistribute it and/or modify // 9 // it under the terms of either the current Phorum License (viewable at // 10 // phorum.org) or the Phorum License that was distributed with this file // 11 // // 12 // This program is distributed in the hope that it will be useful, // 13 // but WITHOUT ANY WARRANTY, without even the implied warranty of // 14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // 15 // // 16 // You should have received a copy of the Phorum License // 17 // along with this program. // 18 //////////////////////////////////////////////////////////////////////////////// 19 20 if ( !defined( "PHORUM" ) ) return; 21 22 /** 23 * Formats forum messages. 24 * 25 * @param data - An array containing a messages to be formatted. 26 * @return data - The formatted messages. 27 */ 28 function phorum_format_messages ($data) 29 { 30 $PHORUM = $GLOBALS["PHORUM"]; 31 32 // Prepare the bad-words replacement code. 33 $bad_word_check= false; 34 $banlists = phorum_db_get_banlists(); 35 if (isset($banlists[PHORUM_BAD_WORDS]) && is_array($banlists[PHORUM_BAD_WORDS])) { 36 $replace_vals = array(); 37 $replace_words = array(); 38 foreach ($banlists[PHORUM_BAD_WORDS] as $item) { 39 $replace_words[] = "/\b".preg_quote($item['string'])."(ing|ed|s|er|es)*\b/i"; 40 $replace_vals[] = PHORUM_BADWORD_REPLACE; 41 $bad_word_check = true; 42 } 43 } 44 45 // A special <br> tag to keep track of breaks that are added by phorum. 46 $phorum_br = '<phorum break>'; 47 48 // Apply Phorum's formatting rules to all messages. 49 foreach( $data as $key => $message ) 50 { 51 // Work on the message body ======================== 52 53 if (isset($message["body"])) 54 { 55 $body = $message["body"]; 56 57 // Convert legacy <> urls into bare urls. 58 $body = preg_replace("/<((http|https|ftp):\/\/[a-z0-9;\/\?:@=\&\$\-_\.\+!*'\(\),~%]+?)>/i", "$1", $body); 59 60 // Escape special HTML characters. The function htmlspecialchars() 61 // does too much, prior to PHP version 4.0.3. 62 $body = str_replace(array("&","<",">"), array("&","<",">"), $body); 63 64 // Replace newlines with $phorum_br temporarily. 65 // This way the mods know what Phorum did vs the user. 66 $body = str_replace("\n", "$phorum_br\n", $body); 67 68 // Run bad word replacement code. 69 if($bad_word_check) { 70 $body = preg_replace($replace_words, $replace_vals, $body); 71 } 72 73 $data[$key]["body"] = $body; 74 } 75 76 // Work on the other fields ======================== 77 78 // Run bad word replacement code on subject and author. 79 if($bad_word_check) { 80 if (isset($message["subject"])) 81 $message["subject"] = preg_replace($replace_words, $replace_vals, $message["subject"]); 82 if (isset($message["author"])) 83 $message["author"] = preg_replace($replace_words, $replace_vals, $message["author"]); 84 } 85 86 // Escape special HTML characters in fields. 87 if (isset($message["email"])) 88 $data[$key]["email"] = str_replace(array("<",">"), array("<",">"), $message["email"]); 89 if (isset($message["subject"])) 90 $data[$key]["subject"] = str_replace(array("&","<",">"), array("&","<",">"), $message["subject"]); 91 92 // Some special things we have to do for the escaped author name. 93 // We never should have put HTML in the core. Now we have to 94 // do this hack to get the escaped author name in the linked_author. 95 if (isset($message["author"])) { 96 $data[$key]["author"] = str_replace(array("<",">"), array("<",">"), $message["author"]); 97 $safe_author = str_replace(array("&","<",">"), array("&","<",">"), $message["author"]); 98 if ($safe_author != $data[$key]["author"] && isset($data[$key]["linked_author"])) { 99 $data[$key]["linked_author"] = str_replace($data[$key]["author"], $safe_author, $data[$key]["linked_author"]); 100 $data[$key]["author"] = $safe_author; 101 } 102 } 103 } 104 105 // A hook for module writers to apply custom message formatting. 106 $data = phorum_hook("format", $data); 107 108 // Clean up after the mods are done. 109 foreach( $data as $key => $message ) { 110 111 // Clean up line breaks inside pre and xmp tags. These tags 112 // take care of showing newlines as breaks themselves. 113 if (isset($message["body"])) { 114 foreach (array("pre","goep","xmp") as $tagname) { 115 if (preg_match_all( "/(<$tagname.*?>).+?(<\/$tagname>)/si", $message["body"], $matches)) { 116 foreach ($matches[0] as $match) { 117 $stripped = str_replace ($phorum_br, "", $match); 118 $message["body"] = str_replace ($match, $stripped, $message["body"]); 119 } 120 } 121 } 122 // Remove line break after quote and code tags. These tags have 123 // their own line break. Without this, there would be to much 124 // white lines. 125 $message["body"] = preg_replace("/\s*(<\/*(xmp|blockquote|pre).*?>)\s*\Q$phorum_br\E/", "$1", $message["body"]); 126 127 // Normalize the Phorum line breaks that are left. 128 $data[$key]["body"] = str_replace($phorum_br, "<br />", $message["body"]); 129 } 130 } 131 132 return $data; 133 } 134 135 /** 136 * Formats an epoch timestamp to a date/time for displaying on screen. 137 * 138 * @param picture - The time formatting to use, in strftime() format 139 * @param ts - The epoch timestamp to format 140 * @return datetime - The formatted date/time string 141 */ 142 function phorum_date( $picture, $ts ) 143 { 144 $PHORUM = $GLOBALS["PHORUM"]; 145 146 // Setting locale. 147 if (!isset($PHORUM['locale'])) 148 $PHORUM['locale']="EN"; 149 setlocale(LC_TIME, $PHORUM['locale']); 150 151 // Format the date. 152 if ($PHORUM["user_time_zone"] && isset($PHORUM["user"]["tz_offset"]) && $PHORUM["user"]["tz_offset"]!=-99) { 153 $ts += $PHORUM["user"]["tz_offset"] * 3600; 154 return gmstrftime( $picture, $ts ); 155 } else { 156 $ts += $PHORUM["tz_offset"] * 3600; 157 return strftime( $picture, $ts ); 158 } 159 } 160 161 /** 162 * Strips HTML <tags> and BBcode [tags] from the body. 163 * 164 * @param body - The block of body text to strip 165 * @return stripped - The stripped body 166 */ 167 function phorum_strip_body( $body ) 168 { 169 // Strip HTML <tags> 170 $stripped = preg_replace("|</*[a-z][^>]*>|i", "", $body); 171 // Strip BB Code [tags] 172 $stripped = preg_replace("|\[/*[a-z][^\]]*\]|i", "", $stripped); 173 174 // do badwords check 175 // Prepare the bad-words replacement code. 176 $bad_word_check= false; 177 $banlists = phorum_db_get_banlists(); 178 if (isset($banlists[PHORUM_BAD_WORDS]) && is_array($banlists[PHORUM_BAD_WORDS])) { 179 $replace_vals = array(); 180 $replace_words = array(); 181 foreach ($banlists[PHORUM_BAD_WORDS] as $item) { 182 $replace_words[] = "/\b".preg_quote($item['string'])."(ing|ed|s|er|es)*\b/i"; 183 $replace_vals[] = PHORUM_BADWORD_REPLACE; 184 $bad_word_check = true; 185 } 186 } 187 188 if ($bad_word_check) { 189 $stripped = preg_replace($replace_words, $replace_vals, $stripped); 190 } 191 return $stripped; 192 } 193 194 /** 195 * Formats a file size in bytes to a human readable format. Human 196 * readable formats are MB (MegaByte), KB (KiloByte) and byte. 197 * 198 * @param bytes - The number of bytes 199 * @param formatted - The formatted size 200 */ 201 function phorum_filesize( $bytes ) 202 { 203 if ($bytes >= 1024*1024) { 204 return round($bytes/1024/1024, 2) . "MB"; 205 } elseif ($bytes >= 1024) { 206 return round($bytes/1024, 1) . "KB"; 207 } else { 208 return $bytes . ($bytes == 1 ? " byte" : " bytes"); 209 } 210 } 211 212 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Nov 29 12:22:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |