[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * @package acp 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 */ 13 define('IN_PHPBB', true); 14 define('ADMIN_START', true); 15 define('NEED_SID', true); 16 17 // Include files 18 $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../'; 19 $phpEx = substr(strrchr(__FILE__, '.'), 1); 20 require($phpbb_root_path . 'common.' . $phpEx); 21 require($phpbb_root_path . 'includes/functions_admin.' . $phpEx); 22 require($phpbb_root_path . 'includes/functions_module.' . $phpEx); 23 24 // Start session management 25 $user->session_begin(); 26 $auth->acl($user->data); 27 $user->setup('acp/common'); 28 // End session management 29 30 // Have they authenticated (again) as an admin for this session? 31 if (!isset($user->data['session_admin']) || !$user->data['session_admin']) 32 { 33 login_box('', $user->lang['LOGIN_ADMIN_CONFIRM'], $user->lang['LOGIN_ADMIN_SUCCESS'], true, false); 34 } 35 36 // Is user any type of admin? No, then stop here, each script needs to 37 // check specific permissions but this is a catchall 38 if (!$auth->acl_get('a_')) 39 { 40 trigger_error('NO_ADMIN'); 41 } 42 43 // We define the admin variables now, because the user is now able to use the admin related features... 44 define('IN_ADMIN', true); 45 $phpbb_admin_path = (defined('PHPBB_ADMIN_PATH')) ? PHPBB_ADMIN_PATH : './'; 46 47 // Some oft used variables 48 $safe_mode = (@ini_get('safe_mode') == '1' || strtolower(@ini_get('safe_mode')) === 'on') ? true : false; 49 $file_uploads = (@ini_get('file_uploads') == '1' || strtolower(@ini_get('file_uploads')) === 'on') ? true : false; 50 $module_id = request_var('i', ''); 51 $mode = request_var('mode', ''); 52 53 // Set custom template for admin area 54 $template->set_custom_template($phpbb_admin_path . 'style', 'admin'); 55 $template->assign_var('T_TEMPLATE_PATH', $phpbb_admin_path . 'style'); 56 57 // the acp template is never stored in the database 58 $user->theme['template_storedb'] = false; 59 60 // Instantiate new module 61 $module = new p_master(); 62 63 // Instantiate module system and generate list of available modules 64 $module->list_modules('acp'); 65 66 // Select the active module 67 $module->set_active($module_id, $mode); 68 69 // Assign data to the template engine for the list of modules 70 // We do this before loading the active module for correct menu display in trigger_error 71 $module->assign_tpl_vars(append_sid("{$phpbb_admin_path}index.$phpEx")); 72 73 // Load and execute the relevant module 74 $module->load_active(); 75 76 // Generate the page 77 adm_page_header($module->get_page_title()); 78 79 $template->set_filenames(array( 80 'body' => $module->get_tpl_name(), 81 )); 82 83 adm_page_footer(); 84 85 /** 86 * Header for acp pages 87 */ 88 function adm_page_header($page_title) 89 { 90 global $config, $db, $user, $template; 91 global $phpbb_root_path, $phpbb_admin_path, $phpEx, $SID, $_SID; 92 93 if (defined('HEADER_INC')) 94 { 95 return; 96 } 97 98 define('HEADER_INC', true); 99 100 // gzip_compression 101 if ($config['gzip_compress']) 102 { 103 if (@extension_loaded('zlib') && !headers_sent()) 104 { 105 ob_start('ob_gzhandler'); 106 } 107 } 108 109 $template->assign_vars(array( 110 'PAGE_TITLE' => $page_title, 111 'USERNAME' => $user->data['username'], 112 113 'SID' => $SID, 114 '_SID' => $_SID, 115 'SESSION_ID' => $user->session_id, 116 'ROOT_PATH' => $phpbb_admin_path, 117 118 'U_LOGOUT' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=logout'), 119 'U_ADM_LOGOUT' => append_sid("{$phpbb_admin_path}index.$phpEx", 'action=admlogout'), 120 'U_ADM_INDEX' => append_sid("{$phpbb_admin_path}index.$phpEx"), 121 'U_INDEX' => append_sid("{$phpbb_root_path}index.$phpEx"), 122 123 'T_IMAGES_PATH' => "{$phpbb_root_path}images/", 124 'T_SMILIES_PATH' => "{$phpbb_root_path}{$config['smilies_path']}/", 125 'T_AVATAR_PATH' => "{$phpbb_root_path}{$config['avatar_path']}/", 126 'T_AVATAR_GALLERY_PATH' => "{$phpbb_root_path}{$config['avatar_gallery_path']}/", 127 'T_ICONS_PATH' => "{$phpbb_root_path}{$config['icons_path']}/", 128 'T_RANKS_PATH' => "{$phpbb_root_path}{$config['ranks_path']}/", 129 'T_UPLOAD_PATH' => "{$phpbb_root_path}{$config['upload_path']}/", 130 131 'ICON_MOVE_UP' => '<img src="' . $phpbb_admin_path . 'images/icon_up.gif" alt="' . $user->lang['MOVE_UP'] . '" title="' . $user->lang['MOVE_UP'] . '" />', 132 'ICON_MOVE_UP_DISABLED' => '<img src="' . $phpbb_admin_path . 'images/icon_up_disabled.gif" alt="' . $user->lang['MOVE_UP'] . '" title="' . $user->lang['MOVE_UP'] . '" />', 133 'ICON_MOVE_DOWN' => '<img src="' . $phpbb_admin_path . 'images/icon_down.gif" alt="' . $user->lang['MOVE_DOWN'] . '" title="' . $user->lang['MOVE_DOWN'] . '" />', 134 'ICON_MOVE_DOWN_DISABLED' => '<img src="' . $phpbb_admin_path . 'images/icon_down_disabled.gif" alt="' . $user->lang['MOVE_DOWN'] . '" title="' . $user->lang['MOVE_DOWN'] . '" />', 135 'ICON_EDIT' => '<img src="' . $phpbb_admin_path . 'images/icon_edit.gif" alt="' . $user->lang['EDIT'] . '" title="' . $user->lang['EDIT'] . '" />', 136 'ICON_EDIT_DISABLED' => '<img src="' . $phpbb_admin_path . 'images/icon_edit_disabled.gif" alt="' . $user->lang['EDIT'] . '" title="' . $user->lang['EDIT'] . '" />', 137 'ICON_DELETE' => '<img src="' . $phpbb_admin_path . 'images/icon_delete.gif" alt="' . $user->lang['DELETE'] . '" title="' . $user->lang['DELETE'] . '" />', 138 'ICON_DELETE_DISABLED' => '<img src="' . $phpbb_admin_path . 'images/icon_delete_disabled.gif" alt="' . $user->lang['DELETE'] . '" title="' . $user->lang['DELETE'] . '" />', 139 'ICON_SYNC' => '<img src="' . $phpbb_admin_path . 'images/icon_sync.gif" alt="' . $user->lang['RESYNC'] . '" title="' . $user->lang['RESYNC'] . '" />', 140 'ICON_SYNC_DISABLED' => '<img src="' . $phpbb_admin_path . 'images/icon_sync_disabled.gif" alt="' . $user->lang['RESYNC'] . '" title="' . $user->lang['RESYNC'] . '" />', 141 142 'S_USER_LANG' => $user->lang['USER_LANG'], 143 'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'], 144 'S_CONTENT_ENCODING' => 'UTF-8', 145 'S_CONTENT_FLOW_BEGIN' => ($user->lang['DIRECTION'] == 'ltr') ? 'left' : 'right', 146 'S_CONTENT_FLOW_END' => ($user->lang['DIRECTION'] == 'ltr') ? 'right' : 'left', 147 )); 148 149 // application/xhtml+xml not used because of IE 150 header('Content-type: text/html; charset=UTF-8'); 151 152 header('Cache-Control: private, no-cache="set-cookie"'); 153 header('Expires: 0'); 154 header('Pragma: no-cache'); 155 156 return; 157 } 158 159 /** 160 * Page footer for acp pages 161 */ 162 function adm_page_footer($copyright_html = true) 163 { 164 global $db, $config, $template, $user, $auth, $cache; 165 global $starttime, $phpbb_root_path, $phpbb_admin_path, $phpEx; 166 167 // Output page creation time 168 if (defined('DEBUG')) 169 { 170 $mtime = explode(' ', microtime()); 171 $totaltime = $mtime[0] + $mtime[1] - $starttime; 172 173 if (!empty($_REQUEST['explain']) && $auth->acl_get('a_') && defined('DEBUG_EXTRA') && method_exists($db, 'sql_report')) 174 { 175 $db->sql_report('display'); 176 } 177 178 $debug_output = sprintf('Time : %.3fs | ' . $db->sql_num_queries() . ' Queries | GZIP : ' . (($config['gzip_compress']) ? 'On' : 'Off') . (($user->load) ? ' | Load : ' . $user->load : ''), $totaltime); 179 180 if ($auth->acl_get('a_') && defined('DEBUG_EXTRA')) 181 { 182 if (function_exists('memory_get_usage')) 183 { 184 if ($memory_usage = memory_get_usage()) 185 { 186 global $base_memory_usage; 187 $memory_usage -= $base_memory_usage; 188 $memory_usage = get_formatted_filesize($memory_usage); 189 190 $debug_output .= ' | Memory Usage: ' . $memory_usage; 191 } 192 } 193 194 $debug_output .= ' | <a href="' . build_url() . '&explain=1">Explain</a>'; 195 } 196 } 197 198 $template->assign_vars(array( 199 'DEBUG_OUTPUT' => (defined('DEBUG')) ? $debug_output : '', 200 'TRANSLATION_INFO' => (!empty($user->lang['TRANSLATION_INFO'])) ? $user->lang['TRANSLATION_INFO'] : '', 201 'S_COPYRIGHT_HTML' => $copyright_html, 202 'CREDIT_LINE' => $user->lang('POWERED_BY', '<a href="https://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Group'), 203 'VERSION' => $config['version']) 204 ); 205 206 $template->display('body'); 207 208 garbage_collection(); 209 exit_handler(); 210 } 211 212 /** 213 * Generate back link for acp pages 214 */ 215 function adm_back_link($u_action) 216 { 217 global $user; 218 return '<br /><br /><a href="' . $u_action . '">« ' . $user->lang['BACK_TO_PREV'] . '</a>'; 219 } 220 221 /** 222 * Build select field options in acp pages 223 */ 224 function build_select($option_ary, $option_default = false) 225 { 226 global $user; 227 228 $html = ''; 229 foreach ($option_ary as $value => $title) 230 { 231 $selected = ($option_default !== false && $value == $option_default) ? ' selected="selected"' : ''; 232 $html .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$title] . '</option>'; 233 } 234 235 return $html; 236 } 237 238 /** 239 * Build radio fields in acp pages 240 */ 241 function h_radio($name, $input_ary, $input_default = false, $id = false, $key = false, $separator = '') 242 { 243 global $user; 244 245 $html = ''; 246 $id_assigned = false; 247 foreach ($input_ary as $value => $title) 248 { 249 $selected = ($input_default !== false && $value == $input_default) ? ' checked="checked"' : ''; 250 $html .= '<label><input type="radio" name="' . $name . '"' . (($id && !$id_assigned) ? ' id="' . $id . '"' : '') . ' value="' . $value . '"' . $selected . (($key) ? ' accesskey="' . $key . '"' : '') . ' class="radio" /> ' . $user->lang[$title] . '</label>' . $separator; 251 $id_assigned = true; 252 } 253 254 return $html; 255 } 256 257 /** 258 * Build configuration template for acp configuration pages 259 */ 260 function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars) 261 { 262 global $user, $module; 263 264 $tpl = ''; 265 $name = 'config[' . $config_key . ']'; 266 267 // Make sure there is no notice printed out for non-existent config options (we simply set them) 268 if (!isset($new[$config_key])) 269 { 270 $new[$config_key] = ''; 271 } 272 273 switch ($tpl_type[0]) 274 { 275 case 'text': 276 case 'password': 277 $size = (int) $tpl_type[1]; 278 $maxlength = (int) $tpl_type[2]; 279 280 $tpl = '<input id="' . $key . '" type="' . $tpl_type[0] . '"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="' . $name . '" value="' . $new[$config_key] . '"' . (($tpl_type[0] === 'password') ? ' autocomplete="off"' : '') . ' />'; 281 break; 282 283 case 'dimension': 284 $size = (int) $tpl_type[1]; 285 $maxlength = (int) $tpl_type[2]; 286 287 $tpl = '<input id="' . $key . '" type="text"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="config[' . $config_key . '_width]" value="' . $new[$config_key . '_width'] . '" /> x <input type="text"' . (($size) ? ' size="' . $size . '"' : '') . ' maxlength="' . (($maxlength) ? $maxlength : 255) . '" name="config[' . $config_key . '_height]" value="' . $new[$config_key . '_height'] . '" />'; 288 break; 289 290 case 'textarea': 291 $rows = (int) $tpl_type[1]; 292 $cols = (int) $tpl_type[2]; 293 294 $tpl = '<textarea id="' . $key . '" name="' . $name . '" rows="' . $rows . '" cols="' . $cols . '">' . $new[$config_key] . '</textarea>'; 295 break; 296 297 case 'radio': 298 $key_yes = ($new[$config_key]) ? ' checked="checked"' : ''; 299 $key_no = (!$new[$config_key]) ? ' checked="checked"' : ''; 300 301 $tpl_type_cond = explode('_', $tpl_type[1]); 302 $type_no = ($tpl_type_cond[0] == 'disabled' || $tpl_type_cond[0] == 'enabled') ? false : true; 303 304 $tpl_no = '<label><input type="radio" name="' . $name . '" value="0"' . $key_no . ' class="radio" /> ' . (($type_no) ? $user->lang['NO'] : $user->lang['DISABLED']) . '</label>'; 305 $tpl_yes = '<label><input type="radio" id="' . $key . '" name="' . $name . '" value="1"' . $key_yes . ' class="radio" /> ' . (($type_no) ? $user->lang['YES'] : $user->lang['ENABLED']) . '</label>'; 306 307 $tpl = ($tpl_type_cond[0] == 'yes' || $tpl_type_cond[0] == 'enabled') ? $tpl_yes . $tpl_no : $tpl_no . $tpl_yes; 308 break; 309 310 case 'select': 311 case 'custom': 312 313 $return = ''; 314 315 if (isset($vars['method'])) 316 { 317 $call = array($module->module, $vars['method']); 318 } 319 else if (isset($vars['function'])) 320 { 321 $call = $vars['function']; 322 } 323 else 324 { 325 break; 326 } 327 328 if (isset($vars['params'])) 329 { 330 $args = array(); 331 foreach ($vars['params'] as $value) 332 { 333 switch ($value) 334 { 335 case '{CONFIG_VALUE}': 336 $value = $new[$config_key]; 337 break; 338 339 case '{KEY}': 340 $value = $key; 341 break; 342 } 343 344 $args[] = $value; 345 } 346 } 347 else 348 { 349 $args = array($new[$config_key], $key); 350 } 351 352 $return = call_user_func_array($call, $args); 353 354 if ($tpl_type[0] == 'select') 355 { 356 $tpl = '<select id="' . $key . '" name="' . $name . '">' . $return . '</select>'; 357 } 358 else 359 { 360 $tpl = $return; 361 } 362 363 break; 364 365 default: 366 break; 367 } 368 369 if (isset($vars['append'])) 370 { 371 $tpl .= $vars['append']; 372 } 373 374 return $tpl; 375 } 376 377 /** 378 * Going through a config array and validate values, writing errors to $error. The validation method accepts parameters separated by ':' for string and int. 379 * The first parameter defines the type to be used, the second the lower bound and the third the upper bound. Only the type is required. 380 */ 381 function validate_config_vars($config_vars, &$cfg_array, &$error) 382 { 383 global $phpbb_root_path, $user; 384 $type = 0; 385 $min = 1; 386 $max = 2; 387 388 foreach ($config_vars as $config_name => $config_definition) 389 { 390 if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) 391 { 392 continue; 393 } 394 395 if (!isset($config_definition['validate'])) 396 { 397 continue; 398 } 399 400 $validator = explode(':', $config_definition['validate']); 401 402 // Validate a bit. ;) (0 = type, 1 = min, 2= max) 403 switch ($validator[$type]) 404 { 405 case 'string': 406 $length = utf8_strlen($cfg_array[$config_name]); 407 408 // the column is a VARCHAR 409 $validator[$max] = (isset($validator[$max])) ? min(255, $validator[$max]) : 255; 410 411 if (isset($validator[$min]) && $length < $validator[$min]) 412 { 413 $error[] = sprintf($user->lang['SETTING_TOO_SHORT'], $user->lang[$config_definition['lang']], $validator[$min]); 414 } 415 else if (isset($validator[$max]) && $length > $validator[2]) 416 { 417 $error[] = sprintf($user->lang['SETTING_TOO_LONG'], $user->lang[$config_definition['lang']], $validator[$max]); 418 } 419 break; 420 421 case 'bool': 422 $cfg_array[$config_name] = ($cfg_array[$config_name]) ? 1 : 0; 423 break; 424 425 case 'int': 426 $cfg_array[$config_name] = (int) $cfg_array[$config_name]; 427 428 if (isset($validator[$min]) && $cfg_array[$config_name] < $validator[$min]) 429 { 430 $error[] = sprintf($user->lang['SETTING_TOO_LOW'], $user->lang[$config_definition['lang']], $validator[$min]); 431 } 432 else if (isset($validator[$max]) && $cfg_array[$config_name] > $validator[$max]) 433 { 434 $error[] = sprintf($user->lang['SETTING_TOO_BIG'], $user->lang[$config_definition['lang']], $validator[$max]); 435 } 436 437 if (strpos($config_name, '_max') !== false) 438 { 439 // Min/max pairs of settings should ensure that min <= max 440 // Replace _max with _min to find the name of the minimum 441 // corresponding configuration variable 442 $min_name = str_replace('_max', '_min', $config_name); 443 444 if (isset($cfg_array[$min_name]) && is_numeric($cfg_array[$min_name]) && $cfg_array[$config_name] < $cfg_array[$min_name]) 445 { 446 // A minimum value exists and the maximum value is less than it 447 $error[] = sprintf($user->lang['SETTING_TOO_LOW'], $user->lang[$config_definition['lang']], (int) $cfg_array[$min_name]); 448 } 449 } 450 break; 451 452 case 'email': 453 if (!preg_match('/^' . get_preg_expression('email') . '$/i', $cfg_array[$config_name])) 454 { 455 $error[] = $user->lang['EMAIL_INVALID_EMAIL']; 456 } 457 break; 458 459 // Absolute path 460 case 'script_path': 461 if (!$cfg_array[$config_name]) 462 { 463 break; 464 } 465 466 $destination = str_replace('\\', '/', $cfg_array[$config_name]); 467 468 if ($destination !== '/') 469 { 470 // Adjust destination path (no trailing slash) 471 if (substr($destination, -1, 1) == '/') 472 { 473 $destination = substr($destination, 0, -1); 474 } 475 476 $destination = str_replace(array('../', './'), '', $destination); 477 478 if ($destination[0] != '/') 479 { 480 $destination = '/' . $destination; 481 } 482 } 483 484 $cfg_array[$config_name] = trim($destination); 485 486 break; 487 488 // Absolute path 489 case 'lang': 490 if (!$cfg_array[$config_name]) 491 { 492 break; 493 } 494 495 $cfg_array[$config_name] = basename($cfg_array[$config_name]); 496 497 if (!file_exists($phpbb_root_path . 'language/' . $cfg_array[$config_name] . '/')) 498 { 499 $error[] = $user->lang['WRONG_DATA_LANG']; 500 } 501 break; 502 503 // Relative path (appended $phpbb_root_path) 504 case 'rpath': 505 case 'rwpath': 506 if (!$cfg_array[$config_name]) 507 { 508 break; 509 } 510 511 $destination = $cfg_array[$config_name]; 512 513 // Adjust destination path (no trailing slash) 514 if (substr($destination, -1, 1) == '/' || substr($destination, -1, 1) == '\\') 515 { 516 $destination = substr($destination, 0, -1); 517 } 518 519 $destination = str_replace(array('../', '..\\', './', '.\\'), '', $destination); 520 if ($destination && ($destination[0] == '/' || $destination[0] == "\\")) 521 { 522 $destination = ''; 523 } 524 525 $cfg_array[$config_name] = trim($destination); 526 527 // Path being relative (still prefixed by phpbb_root_path), but with the ability to escape the root dir... 528 case 'path': 529 case 'wpath': 530 531 if (!$cfg_array[$config_name]) 532 { 533 break; 534 } 535 536 $cfg_array[$config_name] = trim($cfg_array[$config_name]); 537 538 // Make sure no NUL byte is present... 539 if (strpos($cfg_array[$config_name], "\0") !== false || strpos($cfg_array[$config_name], '%00') !== false) 540 { 541 $cfg_array[$config_name] = ''; 542 break; 543 } 544 545 if (!file_exists($phpbb_root_path . $cfg_array[$config_name])) 546 { 547 $error[] = sprintf($user->lang['DIRECTORY_DOES_NOT_EXIST'], $cfg_array[$config_name]); 548 } 549 550 if (file_exists($phpbb_root_path . $cfg_array[$config_name]) && !is_dir($phpbb_root_path . $cfg_array[$config_name])) 551 { 552 $error[] = sprintf($user->lang['DIRECTORY_NOT_DIR'], $cfg_array[$config_name]); 553 } 554 555 // Check if the path is writable 556 if ($config_definition['validate'] == 'wpath' || $config_definition['validate'] == 'rwpath') 557 { 558 if (file_exists($phpbb_root_path . $cfg_array[$config_name]) && !phpbb_is_writable($phpbb_root_path . $cfg_array[$config_name])) 559 { 560 $error[] = sprintf($user->lang['DIRECTORY_NOT_WRITABLE'], $cfg_array[$config_name]); 561 } 562 } 563 564 break; 565 } 566 } 567 568 return; 569 } 570 571 /** 572 * Checks whatever or not a variable is OK for use in the Database 573 * param mixed $value_ary An array of the form array(array('lang' => ..., 'value' => ..., 'column_type' =>))' 574 * param mixed $error The error array 575 */ 576 function validate_range($value_ary, &$error) 577 { 578 global $user; 579 580 $column_types = array( 581 'BOOL' => array('php_type' => 'int', 'min' => 0, 'max' => 1), 582 'USINT' => array('php_type' => 'int', 'min' => 0, 'max' => 65535), 583 'UINT' => array('php_type' => 'int', 'min' => 0, 'max' => (int) 0x7fffffff), 584 // Do not use (int) 0x80000000 - it evaluates to different 585 // values on 32-bit and 64-bit systems. 586 // Apparently -2147483648 is a float on 32-bit systems, 587 // despite fitting in an int, thus explicit cast is needed. 588 'INT' => array('php_type' => 'int', 'min' => (int) -2147483648, 'max' => (int) 0x7fffffff), 589 'TINT' => array('php_type' => 'int', 'min' => -128, 'max' => 127), 590 591 'VCHAR' => array('php_type' => 'string', 'min' => 0, 'max' => 255), 592 ); 593 foreach ($value_ary as $value) 594 { 595 $column = explode(':', $value['column_type']); 596 $max = $min = 0; 597 $type = 0; 598 if (!isset($column_types[$column[0]])) 599 { 600 continue; 601 } 602 else 603 { 604 $type = $column_types[$column[0]]; 605 } 606 607 switch ($type['php_type']) 608 { 609 case 'string' : 610 $max = (isset($column[1])) ? min($column[1],$type['max']) : $type['max']; 611 if (utf8_strlen($value['value']) > $max) 612 { 613 $error[] = sprintf($user->lang['SETTING_TOO_LONG'], $user->lang[$value['lang']], $max); 614 } 615 break; 616 617 case 'int': 618 $min = (isset($column[1])) ? max($column[1],$type['min']) : $type['min']; 619 $max = (isset($column[2])) ? min($column[2],$type['max']) : $type['max']; 620 if ($value['value'] < $min) 621 { 622 $error[] = sprintf($user->lang['SETTING_TOO_LOW'], $user->lang[$value['lang']], $min); 623 } 624 else if ($value['value'] > $max) 625 { 626 $error[] = sprintf($user->lang['SETTING_TOO_BIG'], $user->lang[$value['lang']], $max); 627 } 628 break; 629 } 630 } 631 } 632 633 ?>
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 |