[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package acm 5 * @version $Id$ 6 * @copyright (c) 2005 phpBB Group 7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License 8 * 9 */ 10 11 /** 12 * @ignore 13 */ 14 if (!defined('IN_PHPBB')) 15 { 16 exit; 17 } 18 19 /** 20 * Class for grabbing/handling cached entries, extends acm_file or acm_db depending on the setup 21 * @package acm 22 */ 23 class cache extends acm 24 { 25 /** 26 * Get config values 27 */ 28 function obtain_config() 29 { 30 global $db; 31 32 if (($config = $this->get('config')) !== false) 33 { 34 $sql = 'SELECT config_name, config_value 35 FROM ' . CONFIG_TABLE . ' 36 WHERE is_dynamic = 1'; 37 $result = $db->sql_query($sql); 38 39 while ($row = $db->sql_fetchrow($result)) 40 { 41 $config[$row['config_name']] = $row['config_value']; 42 } 43 $db->sql_freeresult($result); 44 } 45 else 46 { 47 $config = $cached_config = array(); 48 49 $sql = 'SELECT config_name, config_value, is_dynamic 50 FROM ' . CONFIG_TABLE; 51 $result = $db->sql_query($sql); 52 53 while ($row = $db->sql_fetchrow($result)) 54 { 55 if (!$row['is_dynamic']) 56 { 57 $cached_config[$row['config_name']] = $row['config_value']; 58 } 59 60 $config[$row['config_name']] = $row['config_value']; 61 } 62 $db->sql_freeresult($result); 63 64 $this->put('config', $cached_config); 65 } 66 67 return $config; 68 } 69 70 /** 71 * Obtain list of naughty words and build preg style replacement arrays for use by the 72 * calling script 73 */ 74 function obtain_word_list() 75 { 76 global $db; 77 78 if (($censors = $this->get('_word_censors')) === false) 79 { 80 $sql = 'SELECT word, replacement 81 FROM ' . WORDS_TABLE; 82 $result = $db->sql_query($sql); 83 84 $censors = array(); 85 while ($row = $db->sql_fetchrow($result)) 86 { 87 $censors['match'][] = get_censor_preg_expression($row['word']); 88 $censors['replace'][] = $row['replacement']; 89 } 90 $db->sql_freeresult($result); 91 92 $this->put('_word_censors', $censors); 93 } 94 95 return $censors; 96 } 97 98 /** 99 * Obtain currently listed icons 100 */ 101 function obtain_icons() 102 { 103 if (($icons = $this->get('_icons')) === false) 104 { 105 global $db; 106 107 // Topic icons 108 $sql = 'SELECT * 109 FROM ' . ICONS_TABLE . ' 110 ORDER BY icons_order'; 111 $result = $db->sql_query($sql); 112 113 $icons = array(); 114 while ($row = $db->sql_fetchrow($result)) 115 { 116 $icons[$row['icons_id']]['img'] = $row['icons_url']; 117 $icons[$row['icons_id']]['width'] = (int) $row['icons_width']; 118 $icons[$row['icons_id']]['height'] = (int) $row['icons_height']; 119 $icons[$row['icons_id']]['display'] = (bool) $row['display_on_posting']; 120 } 121 $db->sql_freeresult($result); 122 123 $this->put('_icons', $icons); 124 } 125 126 return $icons; 127 } 128 129 /** 130 * Obtain ranks 131 */ 132 function obtain_ranks() 133 { 134 if (($ranks = $this->get('_ranks')) === false) 135 { 136 global $db; 137 138 $sql = 'SELECT * 139 FROM ' . RANKS_TABLE . ' 140 ORDER BY rank_min DESC'; 141 $result = $db->sql_query($sql); 142 143 $ranks = array(); 144 while ($row = $db->sql_fetchrow($result)) 145 { 146 if ($row['rank_special']) 147 { 148 $ranks['special'][$row['rank_id']] = array( 149 'rank_title' => $row['rank_title'], 150 'rank_image' => $row['rank_image'] 151 ); 152 } 153 else 154 { 155 $ranks['normal'][] = array( 156 'rank_title' => $row['rank_title'], 157 'rank_min' => $row['rank_min'], 158 'rank_image' => $row['rank_image'] 159 ); 160 } 161 } 162 $db->sql_freeresult($result); 163 164 $this->put('_ranks', $ranks); 165 } 166 167 return $ranks; 168 } 169 170 /** 171 * Obtain allowed extensions 172 * 173 * @param mixed $forum_id If false then check for private messaging, if int then check for forum id. If true, then only return extension informations. 174 * 175 * @return array allowed extensions array. 176 */ 177 function obtain_attach_extensions($forum_id) 178 { 179 if (($extensions = $this->get('_extensions')) === false) 180 { 181 global $db; 182 183 $extensions = array( 184 '_allowed_post' => array(), 185 '_allowed_pm' => array(), 186 ); 187 188 // The rule is to only allow those extensions defined. ;) 189 $sql = 'SELECT e.extension, g.* 190 FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g 191 WHERE e.group_id = g.group_id 192 AND (g.allow_group = 1 OR g.allow_in_pm = 1)'; 193 $result = $db->sql_query($sql); 194 195 while ($row = $db->sql_fetchrow($result)) 196 { 197 $extension = strtolower(trim($row['extension'])); 198 199 $extensions[$extension] = array( 200 'display_cat' => (int) $row['cat_id'], 201 'download_mode' => (int) $row['download_mode'], 202 'upload_icon' => trim($row['upload_icon']), 203 'max_filesize' => (int) $row['max_filesize'], 204 'allow_group' => $row['allow_group'], 205 'allow_in_pm' => $row['allow_in_pm'], 206 ); 207 208 $allowed_forums = ($row['allowed_forums']) ? unserialize(trim($row['allowed_forums'])) : array(); 209 210 // Store allowed extensions forum wise 211 if ($row['allow_group']) 212 { 213 $extensions['_allowed_post'][$extension] = (!sizeof($allowed_forums)) ? 0 : $allowed_forums; 214 } 215 216 if ($row['allow_in_pm']) 217 { 218 $extensions['_allowed_pm'][$extension] = 0; 219 } 220 } 221 $db->sql_freeresult($result); 222 223 $this->put('_extensions', $extensions); 224 } 225 226 // Forum post 227 if ($forum_id === false) 228 { 229 // We are checking for private messages, therefore we only need to get the pm extensions... 230 $return = array('_allowed_' => array()); 231 232 foreach ($extensions['_allowed_pm'] as $extension => $check) 233 { 234 $return['_allowed_'][$extension] = 0; 235 $return[$extension] = $extensions[$extension]; 236 } 237 238 $extensions = $return; 239 } 240 else if ($forum_id === true) 241 { 242 return $extensions; 243 } 244 else 245 { 246 $forum_id = (int) $forum_id; 247 $return = array('_allowed_' => array()); 248 249 foreach ($extensions['_allowed_post'] as $extension => $check) 250 { 251 // Check for allowed forums 252 if (is_array($check)) 253 { 254 $allowed = (!in_array($forum_id, $check)) ? false : true; 255 } 256 else 257 { 258 $allowed = true; 259 } 260 261 if ($allowed) 262 { 263 $return['_allowed_'][$extension] = 0; 264 $return[$extension] = $extensions[$extension]; 265 } 266 } 267 268 $extensions = $return; 269 } 270 271 if (!isset($extensions['_allowed_'])) 272 { 273 $extensions['_allowed_'] = array(); 274 } 275 276 return $extensions; 277 } 278 279 /** 280 * Obtain active bots 281 */ 282 function obtain_bots() 283 { 284 if (($bots = $this->get('_bots')) === false) 285 { 286 global $db; 287 288 switch ($db->sql_layer) 289 { 290 case 'mssql': 291 case 'mssql_odbc': 292 case 'mssqlnative': 293 $sql = 'SELECT user_id, bot_agent, bot_ip 294 FROM ' . BOTS_TABLE . ' 295 WHERE bot_active = 1 296 ORDER BY LEN(bot_agent) DESC'; 297 break; 298 299 case 'firebird': 300 $sql = 'SELECT user_id, bot_agent, bot_ip 301 FROM ' . BOTS_TABLE . ' 302 WHERE bot_active = 1 303 ORDER BY CHAR_LENGTH(bot_agent) DESC'; 304 break; 305 306 // LENGTH supported by MySQL, IBM DB2 and Oracle for sure... 307 default: 308 $sql = 'SELECT user_id, bot_agent, bot_ip 309 FROM ' . BOTS_TABLE . ' 310 WHERE bot_active = 1 311 ORDER BY LENGTH(bot_agent) DESC'; 312 break; 313 } 314 $result = $db->sql_query($sql); 315 316 $bots = array(); 317 while ($row = $db->sql_fetchrow($result)) 318 { 319 $bots[] = $row; 320 } 321 $db->sql_freeresult($result); 322 323 $this->put('_bots', $bots); 324 } 325 326 return $bots; 327 } 328 329 /** 330 * Obtain cfg file data 331 */ 332 function obtain_cfg_items($theme) 333 { 334 global $config, $phpbb_root_path; 335 336 $parsed_items = array( 337 'theme' => array(), 338 'template' => array(), 339 'imageset' => array() 340 ); 341 342 foreach ($parsed_items as $key => $parsed_array) 343 { 344 $parsed_array = $this->get('_cfg_' . $key . '_' . $theme[$key . '_path']); 345 346 if ($parsed_array === false) 347 { 348 $parsed_array = array(); 349 } 350 351 $reparse = false; 352 $filename = $phpbb_root_path . 'styles/' . $theme[$key . '_path'] . '/' . $key . '/' . $key . '.cfg'; 353 354 if (!file_exists($filename)) 355 { 356 continue; 357 } 358 359 if (!isset($parsed_array['filetime']) || (($config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime']))) 360 { 361 $reparse = true; 362 } 363 364 // Re-parse cfg file 365 if ($reparse) 366 { 367 $parsed_array = parse_cfg_file($filename); 368 $parsed_array['filetime'] = @filemtime($filename); 369 370 $this->put('_cfg_' . $key . '_' . $theme[$key . '_path'], $parsed_array); 371 } 372 $parsed_items[$key] = $parsed_array; 373 } 374 375 return $parsed_items; 376 } 377 378 /** 379 * Obtain disallowed usernames 380 */ 381 function obtain_disallowed_usernames() 382 { 383 if (($usernames = $this->get('_disallowed_usernames')) === false) 384 { 385 global $db; 386 387 $sql = 'SELECT disallow_username 388 FROM ' . DISALLOW_TABLE; 389 $result = $db->sql_query($sql); 390 391 $usernames = array(); 392 while ($row = $db->sql_fetchrow($result)) 393 { 394 $usernames[] = str_replace('%', '.*?', preg_quote(utf8_clean_string($row['disallow_username']), '#')); 395 } 396 $db->sql_freeresult($result); 397 398 $this->put('_disallowed_usernames', $usernames); 399 } 400 401 return $usernames; 402 } 403 404 /** 405 * Obtain hooks... 406 */ 407 function obtain_hooks() 408 { 409 global $phpbb_root_path, $phpEx; 410 411 if (($hook_files = $this->get('_hooks')) === false) 412 { 413 $hook_files = array(); 414 415 // Now search for hooks... 416 $dh = @opendir($phpbb_root_path . 'includes/hooks/'); 417 418 if ($dh) 419 { 420 while (($file = readdir($dh)) !== false) 421 { 422 if (strpos($file, 'hook_') === 0 && substr($file, -(strlen($phpEx) + 1)) === '.' . $phpEx) 423 { 424 $hook_files[] = substr($file, 0, -(strlen($phpEx) + 1)); 425 } 426 } 427 closedir($dh); 428 } 429 430 $this->put('_hooks', $hook_files); 431 } 432 433 return $hook_files; 434 } 435 } 436 437 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Oct 2 15:03:47 2013 | Cross-referenced by PHPXref 0.7.1 |