[ Index ] |
|
Code source de Phorum 5.1.25 |
1 <?php 2 3 // A library of common functions and definitions for 4 // the smileys mod. This library is only loaded when 5 // initializing or saving module settings. 6 7 if(!defined("PHORUM") && !defined("PHORUM_ADMIN")) return; 8 9 // A match for filtering files that are accepted as smiley images. 10 define('MOD_SMILEYS_IMAGE_MATCH', '/^.+\.(gif|png|jpg|jpeg)$/i'); 11 12 // A match for matching absolute file paths. Paths that I could think of: 13 // UNIX path /... 14 // URL proto://... 15 // Windows path X:\... or X:/... 16 // Windows net path \\... 17 define('MOD_SMILEYS_ABSPATH_MATCH', '!^/|^\w+://|^\w:[/\\\\]|^\\\\\\\\!i'); 18 19 // The default smiley prefix path. 20 global $MOD_SMILEY_DEFAULT_PREFIX; 21 $MOD_SMILEY_DEFAULT_PREFIX = './mods/smileys/images/'; 22 23 // The default list of smileys to install upon initial setup. 24 global $MOD_SMILEY_DEFAULT_SMILEYS; 25 $MOD_SMILEY_DEFAULT_SMILEYS = array( 26 "(:P)" => "smiley25.gif spinning smiley sticking its tongue out", 27 "(td)" => "smiley23.gif thumbs down", 28 "(tu)" => "smiley24.gif thumbs up", 29 ":)-D" => "smiley15.gif smileys with beer", 30 ">:D<" => "smiley14.gif the finger smiley", 31 "(:D" => "smiley12.gif smiling bouncing smiley", 32 "8-)" => "smilie8.gif eye rolling smiley", 33 ":)o" => "smiley16.gif drinking smiley", 34 "::o" => "smilie10.gif eye popping smiley", 35 "B)-" => "smilie7.gif smoking smiley", 36 ":(" => "smilie2.gif sad smiley", 37 ":)" => "smilie1.gif smiling smiley", 38 ":?" => "smiley17.gif moody smiley", 39 ":D" => "smilie5.gif grinning smiley", 40 ":P" => "smilie6.gif tongue sticking out smiley", 41 ":S" => "smilie11.gif confused smiley", 42 ":X" => "smilie9.gif angry smiley", 43 ":o" => "smilie4.gif yawning smiley", 44 ";)" => "smilie3.gif winking smiley", 45 "B)" => "cool.gif cool smiley", 46 "X(" => "hot.gif hot smiley", 47 ); 48 49 /** 50 * Sets up initial settings for the smileys mod or upgrades 51 * the settings from old versions. 52 * @return modinfo - Updated module information. 53 */ 54 function phorum_mod_smileys_initsettings() 55 { 56 $PHORUM = $GLOBALS["PHORUM"]; 57 global $MOD_SMILEY_DEFAULT_PREFIX; 58 global $MOD_SMILEY_DEFAULT_SMILEYS; 59 $modinfo = isset($PHORUM["mod_smileys"]) ? $PHORUM["mod_smileys"] : array(); 60 61 // Keep track if we need to store settings in the database. 62 $do_db_update = false; 63 64 // Set default for the image prefix path. 65 if(! isset($modinfo['prefix'])) { 66 $modinfo['prefix'] = $MOD_SMILEY_DEFAULT_PREFIX; 67 // So phorum_mod_smileys_available() sees it right away. 68 $GLOBALS["PHORUM"]["mod_smileys"]["prefix"] = $MOD_SMILEY_DEFAULT_PREFIX; 69 $do_db_update = true; 70 } 71 72 // Set a default list of smileys or upgrade from existing smiley mod. 73 if (! isset($modinfo['smileys'])) 74 { 75 $modinfo['smileys'] = array(); 76 77 // Check if we have smileys from the previous version of the 78 // smiley mod. These were stored at the same level as the 79 // settings. 80 $upgrade_list = array(); 81 if (isset($PHORUM["mod_smileys"])) { 82 foreach ($PHORUM["mod_smileys"] as $id => $smiley) { 83 if (is_numeric($id)) { 84 $upgrade_list[$id] = $smiley; 85 } 86 } 87 } 88 89 // We have an existing list of smileys to upgrade. Move the 90 // smileys to their new location. 91 if (count($upgrade_list)) { 92 foreach ($upgrade_list as $id => $smiley) { 93 unset($modinfo[$id]); 94 $modinfo["smileys"][$id] = $smiley; 95 } 96 $do_db_update = true; 97 } 98 // Set an initial list of smileys. 99 else { 100 foreach ($MOD_SMILEY_DEFAULT_SMILEYS as $search => $data) { 101 list($smiley, $alt) = preg_split('/\s+/', $data, 2); 102 $modinfo["smileys"][] = array( 103 "search" => $search, 104 "alt" => $alt, 105 "smiley" => $smiley, 106 "uses" => 2, 107 ); 108 } 109 $do_db_update = true; 110 } 111 } 112 113 // Store the changed settings in the database. Errors are 114 // silently ignored here, to keep them away from end-users. 115 if ($do_db_update) { 116 list($modinfo, $message) = phorum_mod_smileys_store($modinfo); 117 $GLOBALS["PHORUM"]["mod_smileys"] = $modinfo; 118 return $modinfo; 119 } 120 } 121 122 /** 123 * Reads in the list of available smiley images. 124 * @return smileys - An array of smiley image filenames. 125 */ 126 function phorum_mod_smileys_available() 127 { 128 $PHORUM = $GLOBALS["PHORUM"]; 129 130 $available_smileys = array(); 131 if(file_exists($PHORUM['mod_smileys']['prefix'])){ 132 $d = dir($PHORUM['mod_smileys']['prefix']); 133 while($entry=$d->read()) { 134 if(preg_match(MOD_SMILEYS_IMAGE_MATCH, $entry)) { 135 $available_smileys[$entry]=$entry; 136 } 137 } 138 } 139 asort($available_smileys); 140 return $available_smileys; 141 } 142 143 /** 144 * Compiles replacement arrays for the smileys mod and stores the 145 * data for the module in the database. 146 * @param modinfo - The configuration array for mod_smileys. 147 * @return result - An array containing two elements: 148 * updated module info or NULL on failure and 149 * a message that can be displayed to the user. 150 */ 151 function phorum_mod_smileys_store($modinfo) 152 { 153 // Get the current list of available smiley images. 154 $available_smileys = phorum_mod_smileys_available(); 155 156 // Sort the smileys by length. We need to do this to replace the 157 // longest smileys matching strings first. Else for example the 158 // smiley ":)-D" could end up as (smileyimage)-D, because ":)" 159 // was replaced first. 160 uasort($modinfo["smileys"],'phorum_mod_smileys_sortbylength'); 161 162 // Create and fill replacement arrays for subject and body. 163 $smiley_subject_key = array(); 164 $smiley_subject_val = array(); 165 $smiley_body_key = array(); 166 $smiley_body_val = array(); 167 $seen_images = array(); 168 foreach ($modinfo["smileys"] as $id => $smiley) 169 { 170 // Check if the smiley image is available. Skip and keep track 171 // of missing smiley images. 172 $active = isset($available_smileys[$smiley["smiley"]]) ? true : false; 173 $modinfo["smileys"][$id]['active'] = $active; 174 if (! $active) continue; 175 176 // Check if the smiley image has been seen before. If is has, mark 177 // the current smiley as being an alias. This is used in the editor 178 // smiley help, to show only one version of a smiley image. 179 $is_alias = isset($seen_images[$smiley["smiley"]]) ? true : false; 180 $seen_images[$smiley["smiley"]] = 1; 181 $modinfo["smileys"][$id]["is_alias"] = $is_alias; 182 183 // Create HTML image code for the smiley. 184 $prefix = $modinfo["prefix"]; 185 $src = htmlspecialchars("$prefix{$smiley['smiley']}"); 186 $alttxt = empty($smiley['alt']) ? $smiley["search"] : $smiley["alt"]; 187 $alt = htmlspecialchars($alttxt); 188 $img = "<img class=\"mod_smileys_img\" src=\"$src\" alt=\"$alt\" title=\"$alt\"/>"; 189 190 // Below we use htmlspecialchars() on the search string. 191 // This is done, because the smiley mod is run after formatting 192 // by Phorum, so characters like < and > are HTML escaped. 193 194 // Body only replace (0) or subject and body replace (2). 195 if ($smiley['uses'] == 0 || $smiley['uses'] == 2) { 196 $smiley_body_key[] = htmlspecialchars($smiley['search']); 197 $smiley_body_val[] = $img; 198 } 199 200 // Subject only replace (1) or subject and body replace (2). 201 if ($smiley['uses'] == 1 || $smiley['uses'] == 2) { 202 $smiley_subject_key[] = htmlspecialchars($smiley['search']); 203 $smiley_subject_val[] = $img; 204 } 205 } 206 207 // Store replacement arrays in the module settings. 208 $modinfo["replacements"] = array( 209 "subject" => count($smiley_subject_key) 210 ? array($smiley_subject_key, $smiley_subject_val) 211 : NULL, 212 "body" => count($smiley_body_key) 213 ? array($smiley_body_key, $smiley_body_val) 214 : NULL 215 ); 216 217 // For quickly determining if the smiley replacements must be run. 218 $modinfo["do_smileys"] = $modinfo["replacements"]["subject"] != NULL || 219 $modinfo["replacements"]["body"] != NULL; 220 221 // Store the module settings in the database. 222 if (! phorum_db_update_settings(array("mod_smileys" => $modinfo))) { 223 return array(NULL, "Saving the smiley settings to the database failed."); 224 } else { 225 return array($modinfo, "The smiley settings were successfully saved."); 226 } 227 } 228 229 /** 230 * A callback function for sorting smileys by their search string length. 231 * usage: uasort($array_of_smileys, 'phorum_mod_smileys_sortbylength'); 232 */ 233 function phorum_mod_smileys_sortbylength($a, $b) { 234 if (isset($a["search"]) && isset($b["search"])) { 235 if (strlen($a["search"]) == strlen($b["search"])) { 236 return strcmp($a["search"], $b["search"]); 237 } else { 238 return strlen($a["search"]) < strlen($b["search"]); 239 } 240 } else { 241 return 0; 242 } 243 } 244 ?>
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 |
![]() |