/mantisbt-1.2.8/core/utility_api.php
PHP | 256 lines | 154 code | 17 blank | 85 comment | 41 complexity | aa7f8a329014fd5b6ef725b63eaf0bbe MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0
- <?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;
- }