0byt3m1n1
Path:
/
data
/
applications
/
aps
/
mantis
/
1.2.7-0
/
standard
/
htdocs
/
core
/
[
Home
]
File: utility_api.php
<?php # MantisBT - a php based bugtracking system # MantisBT is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # MantisBT is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with MantisBT. If not, see <http://www.gnu.org/licenses/>. /** * Utility functions are *small* functions that are used often and therefore * have *no* prefix, to keep their names short. * * Utility functions have *no* dependencies on any other APIs, since they are * included first in order to make them available to all the APIs. * Miscellaneous functions that provide functionality on top of other APIS * are found in the helper_api. * * @package CoreAPI * @subpackage UtilityAPI * @copyright Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org * @copyright Copyright (C) 2002 - 2011 MantisBT Team - mantisbt-dev@lists.sourceforge.net * @link http://www.mantisbt.org */ /** * converts a 1 value to X * converts a 0 value to a space * @param int $p_num boolean numeric * @return string X or space * @access public */ function trans_bool( $p_num ) { if( 0 == $p_num ) { return ' '; } else { return 'X'; } } /** * Add a trailing DIRECTORY_SEPARATOR to a string if it isn't present * @param string $p_path * @return string * @access public */ function terminate_directory_path( $p_path ) { return rtrim( $p_path, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR; } /** * Return true if the parameter is an empty string or a string * containing only whitespace, false otherwise * @param string $p_var string to test * @return bool * @access public */ function is_blank( $p_var ) { $p_var = trim( $p_var ); $str_len = strlen( $p_var ); if( 0 == $str_len ) { return true; } return false; } /** * Get the named php ini variable but return it as a bool * @param string $p_name * @return bool * @access public */ function ini_get_bool( $p_name ) { $result = ini_get( $p_name ); if( is_string( $result ) ) { switch( $result ) { case 'off': case 'false': case 'no': case 'none': case '': case '0': return false; break; case 'on': case 'true': case 'yes': case '1': return true; break; } } else { return (bool) $result; } } /** * Get the named php.ini variable but return it as a number after converting * the giga (g/G), mega (m/M) and kilo (k/K) postfixes. These postfixes do not * adhere to IEEE 1541 in that k=1024, not k=1000. For more information see * http://www.php.net/manual/en/faq.using.php#faq.using.shorthandbytes * @param string $p_name Name of the configuration option to read. * @return int Integer value of the configuration option. * @access public */ function ini_get_number( $p_name ) { $t_value = ini_get( $p_name ); $t_result = 0; switch( substr( $t_value, -1 ) ) { case 'G': case 'g': $t_result = (int)$t_value * 1073741824; break; case 'M': case 'm': $t_result = (int)$t_value * 1048576; break; case 'K': case 'k': $t_result = (int)$t_value * 1024; break; default: $t_result = (int)$t_value; break; } return $t_result; } /** * Sort a multi-dimensional array by one of its keys * @param array $p_array Array to sort * @param string $p_key key to sort array on * @param int $p_direction sort direction * @return array sorted array * @access public */ function multi_sort( $p_array, $p_key, $p_direction = ASCENDING ) { if( DESCENDING == $p_direction ) { $t_factor = -1; } else { # might as well allow everything else to mean ASC rather than erroring $t_factor = 1; } if( empty( $p_array ) ) { return $p_array; } if( !is_array( current($p_array ) ) ) { error_parameters( 'tried to multisort an invalid multi-dimensional array' ); trigger_error(ERROR_GENERIC, ERROR); } // Security measure: see http://www.mantisbt.org/bugs/view.php?id=9704 for details if( array_key_exists( $p_key, current($p_array) ) ) { $t_function = create_function( '$a, $b', "return $t_factor * strnatcasecmp( \$a['" . $p_key . "'], \$b['" . $p_key . "'] );" ); uasort( $p_array, $t_function ); } else { trigger_error(ERROR_INVALID_SORT_FIELD, ERROR); } return $p_array; } /** * Return GD version * It doesn't use gd_info() so it works with PHP < 4.3.0 as well * @return int represents gd version * @access public */ function get_gd_version() { $t_GDfuncList = get_extension_funcs( 'gd' ); if( !is_array( $t_GDfuncList ) ) { return 0; } else { if( in_array( 'imagegd2', $t_GDfuncList ) ) { return 2; } else { return 1; } } } /** * return true or false if string matches current page name * @param string $p_string page name * @return bool * @access public */ function is_page_name( $p_string ) { return isset( $_SERVER['SCRIPT_NAME'] ) && ( 0 < strpos( $_SERVER['SCRIPT_NAME'], $p_string ) ); } function is_windows_server() { if( defined( 'PHP_WINDOWS_VERSION_MAJOR' ) ) { return (PHP_WINDOWS_VERSION_MAJOR > 0); } return ('WIN' == substr( PHP_OS, 0, 3 ) ); } function getClassProperties($className, $types='public', $return_object = false, $include_parent = false ) { $ref = new ReflectionClass($className); $props = $ref->getProperties(); $props_arr = array(); foreach($props as $prop){ $f = $prop->getName(); if($prop->isPublic() and (stripos($types, 'public') === FALSE)) continue; if($prop->isPrivate() and (stripos($types, 'private') === FALSE)) continue; if($prop->isProtected() and (stripos($types, 'protected') === FALSE)) continue; if($prop->isStatic() and (stripos($types, 'static') === FALSE)) continue; if ( $return_object ) $props_arr[$f] = $prop; else $props_arr[$f] = true; } if ( $include_parent ) { if($parentClass = $ref->getParentClass()){ $parent_props_arr = getClassProperties($parentClass->getName());//RECURSION if(count($parent_props_arr) > 0) $props_arr = array_merge($parent_props_arr, $props_arr); } } return $props_arr; } function get_font_path() { $t_font_path = config_get_global( 'system_font_folder' ); if( $t_font_path == '' ) { if ( is_windows_server() ) { $sroot = $_SERVER['SystemRoot']; if( empty($sroot) ) { return ''; } else { $t_font_path = $sroot.'/fonts/'; } } else { if( file_exists( '/usr/share/fonts/corefonts/' ) ) { $t_font_path = '/usr/share/fonts/corefonts/'; } else if( file_exists( '/usr/share/fonts/truetype/msttcorefonts/' ) ) { $t_font_path = '/usr/share/fonts/truetype/msttcorefonts/'; } else if( file_exists( '/usr/share/fonts/msttcorefonts/' ) ) { $t_font_path = '/usr/share/fonts/msttcorefonts/'; } else { $t_font_path = '/usr/share/fonts/truetype/'; } } } return $t_font_path; }