2013-11-10 03:07:45 +01:00
< ? php
2014-05-13 14:32:30 +02:00
namespace ManiaControl\Utils ;
2013-11-10 17:38:54 +01:00
2017-03-26 19:44:55 +02:00
use ManiaControl\General\UsageInformationAble ;
use ManiaControl\General\UsageInformationTrait ;
2014-08-03 13:29:54 +02:00
use ManiaControl\Logger ;
2013-11-10 03:07:45 +01:00
/**
2013-12-30 14:09:58 +01:00
* Class offering Methods to format Texts and Values
2013-11-10 03:07:45 +01:00
*
2014-05-02 17:40:47 +02:00
* @ author ManiaControl Team < mail @ maniacontrol . com >
2020-01-22 10:39:35 +01:00
* @ copyright 2014 - 2020 ManiaControl Team
2014-05-02 17:40:47 +02:00
* @ license http :// www . gnu . org / licenses / GNU General Public License , Version 3
2013-11-10 03:07:45 +01:00
*/
2017-03-26 19:44:55 +02:00
abstract class Formatter implements UsageInformationAble {
use UsageInformationTrait ;
2013-11-10 03:07:45 +01:00
2014-05-09 18:42:17 +02:00
/**
* Return the given Text with Escaping around it
*
* @ param string $text
* @ return string
*/
public static function escapeText ( $text ) {
return '$<' . $text . '$>' ;
}
2013-11-10 03:07:45 +01:00
/**
2014-04-12 12:14:37 +02:00
* Format the given Time ( in Milliseconds )
2013-11-10 03:07:45 +01:00
*
2014-01-09 16:41:17 +01:00
* @ param int $time
2013-11-10 03:07:45 +01:00
* @ return string
*/
public static function formatTime ( $time ) {
2014-06-15 02:50:13 +02:00
// TODO: use gmdate()
2017-03-26 19:44:55 +02:00
$time = ( int ) $time ;
2013-11-10 03:07:45 +01:00
$milliseconds = $time % 1000 ;
2014-01-09 16:41:17 +01:00
$seconds = floor ( $time / 1000 );
$minutes = floor ( $seconds / 60 );
$hours = floor ( $minutes / 60 );
2017-03-26 19:44:55 +02:00
$minutes -= $hours * 60 ;
2017-07-18 12:16:54 +02:00
$seconds -= ( $hours * 60 + $minutes ) * 60 ;
2017-03-26 19:44:55 +02:00
$format = ( $hours > 0 ? $hours . ':' : '' );
$format .= ( $hours > 0 && $minutes < 10 ? '0' : '' ) . $minutes . ':' ;
Multiple Features to improve ManiaControl usability (#234)
* ServerUIPropertiesMenu for Configurator to edit builtin UIProperties of MP
* fixed unregister-functions of CallbackManager
* Reducing menuItemHeight in Configurator to avoid overlapping of the menu items
* Fully rebuild the admins menu after a player rights changed
* Added function to FileUtil to improve realpath, so symbolic links can be resolved
* Fixed indentation
* Update FileUtil.php
Fixed error in case of an absolute path on Unix-like systems.
* New CallQueue which runs once inbetween the MC-loops
* Added important queued call to be executed earlier
* ErrorMethod made optional, as in some cases, there might be nothing to fail
* Clean up repository from unnecessary files
* Added easy installation script for DB on Unix-like systems
* Replaced deprecated is_real by is_float
* Add milliseconds with dot instead of double colon
* Resolved deprecated curly braces error
* gitignore all hidden files (except git and gitignore)
* Update MC-update-check-interval, so that a restart is not required
* Update gitignore to not ignore changes in MCTeam-Plugins
* Update gitignore again
* And another try
* fixed MasterAdmin //delrec, added personal /delrec-command with permission-setting
* Increase version number of local records plugin
* Add Permission to delete any record
* Reworked notifications of locals, removed private only, added private at rank
* Fix formatting
* Allow AuthenticationManager to store Plugin Permissions
* Method to check, if a named function call is already queued
* Added command disable feature
* Reset timer if DeltaTime updated, so it does not try to catch up missed timings
* Added private notification setting
* To reduce load of multiple records (especially in rounds), queue call chat notifications
* Added internal function to plugin manager to return plugin menu
* restore .idea codestyle files
* Update MC-Version number to 0.250
2020-02-24 17:20:51 +01:00
$format .= ( $seconds < 10 ? '0' : '' ) . $seconds . '.' ;
2017-03-26 19:44:55 +02:00
$format .= ( $milliseconds < 100 ? '0' : '' ) . ( $milliseconds < 10 ? '0' : '' ) . $milliseconds ;
2013-11-10 03:07:45 +01:00
return $format ;
}
2014-01-09 16:41:17 +01:00
/**
2014-05-02 15:26:07 +02:00
* Format an elapsed time String ( 2 days ago ... ) by a given timestamp
2014-01-09 16:41:17 +01:00
*
2017-03-26 19:44:55 +02:00
* @ param int $time Input time
2015-11-16 17:43:25 +01:00
* @ param boolean $short Short version
* @ return string Formatted elapsed time string
2014-01-09 16:41:17 +01:00
*/
2015-11-16 17:43:25 +01:00
public static function timeElapsedString ( $time , $short = false ) {
$elapsedTime = time () - $time ;
2017-03-26 19:44:55 +02:00
$second = $short ? 'sec.' : 'second' ;
$minute = $short ? 'min.' : 'minute' ;
$hour = $short ? 'h' : 'hour' ;
$day = $short ? 'd' : 'day' ;
$month = $short ? 'm' : 'month' ;
$year = $short ? 'y' : 'year' ;
2014-01-09 16:41:17 +01:00
2015-11-16 17:43:25 +01:00
if ( $elapsedTime < 1 ) {
return $short ? '0 sec.' : '0 seconds' ;
2014-01-09 16:41:17 +01:00
}
2017-03-26 19:44:55 +02:00
$calculateSeconds = array ( 12 * 30 * 24 * 60 * 60 => $year , 30 * 24 * 60 * 60 => $month , 24 * 60 * 60 => $day , 60 * 60 => $hour , 60 => $minute , 1 => $second );
2014-01-09 16:41:17 +01:00
2015-11-16 17:43:25 +01:00
foreach ( $calculateSeconds as $secs => $str ) {
$d = $elapsedTime / $secs ;
2014-01-31 15:16:26 +01:00
if ( $d >= 1 ) {
2014-01-09 16:41:17 +01:00
$r = round ( $d );
2015-11-16 17:43:25 +01:00
return $r . ' ' . $str . ( $r > 1 ? ( ! $short ? 's' : '' ) : '' ) . ' ago' ;
2014-01-09 16:41:17 +01:00
}
}
2014-02-13 00:46:41 +01:00
return '' ;
2014-01-09 16:41:17 +01:00
}
2013-11-10 03:07:45 +01:00
/**
2014-05-02 15:26:07 +02:00
* Format the given Time ( Seconds ) to hh : mm : ss
2013-11-10 03:07:45 +01:00
*
2014-01-09 16:41:17 +01:00
* @ param int $seconds
2013-11-10 03:07:45 +01:00
* @ return string
*/
2013-11-12 19:33:25 +01:00
public static function formatTimeH ( $seconds ) {
2017-05-21 20:40:30 +02:00
$hrs = floor ( $seconds / 3600 );
2023-01-17 12:32:10 +01:00
$mins = intval ( floor (( $seconds / 60 ) % 60 ));
2017-05-21 20:40:30 +02:00
$sec = intval ( $seconds % 60 );
$hrs = str_pad ( $hrs , 2 , '0' , STR_PAD_LEFT );
$mins = str_pad ( $mins , 2 , '0' , STR_PAD_LEFT );
$sec = str_pad ( $sec , 2 , '0' , STR_PAD_LEFT );
$str = '' ;
$str .= $hrs . ':' ;
$str .= $mins . ':' ;
$str .= $sec ;
return $str ;
2013-11-10 03:07:45 +01:00
}
/**
2013-12-30 14:09:58 +01:00
* Convert the given Time ( Seconds ) to MySQL Timestamp
2013-11-10 03:07:45 +01:00
*
2014-01-09 16:41:17 +01:00
* @ param int $seconds
2013-11-10 03:07:45 +01:00
* @ return string
*/
2013-11-12 19:33:25 +01:00
public static function formatTimestamp ( $seconds ) {
2014-06-15 02:50:13 +02:00
return date ( 'Y-m-d H:i:s' , $seconds );
2013-11-10 03:07:45 +01:00
}
2013-11-12 16:08:22 +01:00
2013-12-24 13:27:59 +01:00
/**
2013-12-30 14:09:58 +01:00
* Remove possibly dangerous Codes
* ( Dangerous Codes are Links and Formats that might screw up the following Styling )
*
2014-01-09 16:41:17 +01:00
* @ param string $string
2013-12-30 14:09:58 +01:00
* @ return string
2013-12-24 13:27:59 +01:00
*/
2013-12-30 14:09:58 +01:00
public static function stripDirtyCodes ( $string ) {
2013-12-24 13:27:59 +01:00
$string = self :: stripLinks ( $string );
2013-12-30 14:09:58 +01:00
$string = preg_replace ( '/(?<!\$)((?:\$\$)*)\$[ow<>]/iu' , '$1' , $string );
2013-12-24 13:27:59 +01:00
return $string ;
}
2013-11-12 16:08:22 +01:00
/**
2014-05-02 17:40:47 +02:00
* Remove Links from the String
2013-11-12 16:08:22 +01:00
*
2014-01-09 16:41:17 +01:00
* @ param string $string
2013-11-12 16:08:22 +01:00
* @ return string
*/
2014-05-02 17:40:47 +02:00
public static function stripLinks ( $string ) {
return preg_replace ( '/(?<!\$)((?:\$\$)*)\$[hlp](?:\[.*?\])?(.*?)(?:\$[hlp]|(\$z)|$)/iu' , '$1$2$3' , $string );
2013-11-12 16:08:22 +01:00
}
/**
2014-05-02 17:40:47 +02:00
* Remove all Codes from the String
2013-11-12 16:08:22 +01:00
*
2014-01-09 16:41:17 +01:00
* @ param string $string
2013-11-12 16:08:22 +01:00
* @ return string
*/
2014-05-02 17:40:47 +02:00
public static function stripCodes ( $string ) {
$string = self :: stripLinks ( $string );
$string = self :: stripColors ( $string );
$string = preg_replace ( '/(?<!\$)((?:\$\$)*)\$[^$0-9a-hlp]/iu' , '$1' , $string );
return $string ;
2013-11-12 16:08:22 +01:00
}
/**
2013-12-30 14:09:58 +01:00
* Remove Colors from the String
2013-11-12 16:08:22 +01:00
*
2014-01-09 16:41:17 +01:00
* @ param string $string
2013-11-12 16:08:22 +01:00
* @ return string
*/
2013-12-30 14:09:58 +01:00
public static function stripColors ( $string ) {
2013-11-12 16:08:22 +01:00
return preg_replace ( '/(?<!\$)((?:\$\$)*)\$(?:g|[0-9a-f][^\$]{0,2})/iu' , '$1' , $string );
}
2013-12-26 11:28:58 +01:00
/**
2013-12-30 14:09:58 +01:00
* Map Country Names to 3 - letter Nation Abbreviations
2013-12-26 11:28:58 +01:00
* Created by Xymph
* Based on http :// en . wikipedia . org / wiki / List_of_IOC_country_codes
* See also http :// en . wikipedia . org / wiki / Comparison_of_IOC , _FIFA , _and_ISO_3166_country_codes
2013-12-30 14:09:58 +01:00
*
2014-01-09 16:41:17 +01:00
* @ param string $country
2013-12-30 14:09:58 +01:00
* @ return string
2013-12-26 11:28:58 +01:00
*/
2013-12-30 14:09:58 +01:00
public static function mapCountry ( $country ) {
2017-03-26 19:44:55 +02:00
$nations = array ( 'Afghanistan' => 'AFG' , 'Albania' => 'ALB' , 'Algeria' => 'ALG' , 'Andorra' => 'AND' , 'Angola' => 'ANG' , 'Argentina' => 'ARG' , 'Armenia' => 'ARM' , 'Aruba' => 'ARU' ,
'Australia' => 'AUS' , 'Austria' => 'AUT' , 'Azerbaijan' => 'AZE' , 'Bahamas' => 'BAH' , 'Bahrain' => 'BRN' , 'Bangladesh' => 'BAN' , 'Barbados' => 'BAR' ,
'Belarus' => 'BLR' , 'Belgium' => 'BEL' , 'Belize' => 'BIZ' , 'Benin' => 'BEN' , 'Bermuda' => 'BER' , 'Bhutan' => 'BHU' , 'Bolivia' => 'BOL' ,
'Bosnia&Herzegovina' => 'BIH' , 'Botswana' => 'BOT' , 'Brazil' => 'BRA' , 'Brunei' => 'BRU' , 'Bulgaria' => 'BUL' , 'Burkina Faso' => 'BUR' , 'Burundi' => 'BDI' ,
'Cambodia' => 'CAM' , 'Cameroon' => 'CAR' , // actually CMR
'Canada' => 'CAN' , 'Cape Verde' => 'CPV' , 'Central African Republic' => 'CAF' , 'Chad' => 'CHA' , 'Chile' => 'CHI' , 'China' => 'CHN' ,
'Chinese Taipei' => 'TPE' , 'Colombia' => 'COL' , 'Congo' => 'CGO' , 'Costa Rica' => 'CRC' , 'Croatia' => 'CRO' , 'Cuba' => 'CUB' , 'Cyprus' => 'CYP' ,
'Czech Republic' => 'CZE' , 'Czech republic' => 'CZE' , 'DR Congo' => 'COD' , 'Denmark' => 'DEN' , 'Djibouti' => 'DJI' , 'Dominica' => 'DMA' ,
'Dominican Republic' => 'DOM' , 'Ecuador' => 'ECU' , 'Egypt' => 'EGY' , 'El Salvador' => 'ESA' , 'Eritrea' => 'ERI' , 'Estonia' => 'EST' , 'Ethiopia' => 'ETH' ,
'Fiji' => 'FIJ' , 'Finland' => 'FIN' , 'France' => 'FRA' , 'Gabon' => 'GAB' , 'Gambia' => 'GAM' , 'Georgia' => 'GEO' , 'Germany' => 'GER' , 'Ghana' => 'GHA' ,
'Greece' => 'GRE' , 'Grenada' => 'GRN' , 'Guam' => 'GUM' , 'Guatemala' => 'GUA' , 'Guinea' => 'GUI' , 'Guinea-Bissau' => 'GBS' , 'Guyana' => 'GUY' ,
'Haiti' => 'HAI' , 'Honduras' => 'HON' , 'Hong Kong' => 'HKG' , 'Hungary' => 'HUN' , 'Iceland' => 'ISL' , 'India' => 'IND' , 'Indonesia' => 'INA' ,
'Iran' => 'IRI' , 'Iraq' => 'IRQ' , 'Ireland' => 'IRL' , 'Israel' => 'ISR' , 'Italy' => 'ITA' , 'Ivory Coast' => 'CIV' , 'Jamaica' => 'JAM' , 'Japan' => 'JPN' ,
2018-07-12 22:39:40 +02:00
'Jordan' => 'JOR' , 'Kazakhstan' => 'KAZ' , 'Kenya' => 'KEN' , 'Kiribati' => 'KIR' , 'South Korea' => 'KOR' , 'Korea' => 'KOR' , 'Kuwait' => 'KUW' , 'Kyrgyzstan' => 'KGZ' , 'Laos' => 'LAO' ,
2017-03-26 19:44:55 +02:00
'Latvia' => 'LAT' , 'Lebanon' => 'LIB' , 'Lesotho' => 'LES' , 'Liberia' => 'LBR' , 'Libya' => 'LBA' , 'Liechtenstein' => 'LIE' , 'Lithuania' => 'LTU' ,
'Luxembourg' => 'LUX' , 'Macedonia' => 'MKD' , 'Malawi' => 'MAW' , 'Malaysia' => 'MAS' , 'Mali' => 'MLI' , 'Malta' => 'MLT' , 'Mauritania' => 'MTN' ,
'Mauritius' => 'MRI' , 'Mexico' => 'MEX' , 'Moldova' => 'MDA' , 'Monaco' => 'MON' , 'Mongolia' => 'MGL' , 'Montenegro' => 'MNE' , 'Morocco' => 'MAR' ,
'Mozambique' => 'MOZ' , 'Myanmar' => 'MYA' , 'Namibia' => 'NAM' , 'Nauru' => 'NRU' , 'Nepal' => 'NEP' , 'Netherlands' => 'NED' , 'New Zealand' => 'NZL' ,
'Nicaragua' => 'NCA' , 'Niger' => 'NIG' , 'Nigeria' => 'NGR' , 'Norway' => 'NOR' , 'Oman' => 'OMA' , 'Other Countries' => 'OTH' , 'Pakistan' => 'PAK' ,
'Palau' => 'PLW' , 'Palestine' => 'PLE' , 'Panama' => 'PAN' , 'Paraguay' => 'PAR' , 'Peru' => 'PER' , 'Philippines' => 'PHI' , 'Poland' => 'POL' ,
'Portugal' => 'POR' , 'Puerto Rico' => 'PUR' , 'Qatar' => 'QAT' , 'Romania' => 'ROM' , // actually ROU
'Russia' => 'RUS' , 'Rwanda' => 'RWA' , 'Samoa' => 'SAM' , 'San Marino' => 'SMR' , 'Saudi Arabia' => 'KSA' , 'Senegal' => 'SEN' , 'Serbia' => 'SCG' ,
// actually SRB
'Sierra Leone' => 'SLE' , 'Singapore' => 'SIN' , 'Slovakia' => 'SVK' , 'Slovenia' => 'SLO' , 'Somalia' => 'SOM' , 'South Africa' => 'RSA' , 'Spain' => 'ESP' ,
'Sri Lanka' => 'SRI' , 'Sudan' => 'SUD' , 'Suriname' => 'SUR' , 'Swaziland' => 'SWZ' , 'Sweden' => 'SWE' , 'Switzerland' => 'SUI' , 'Syria' => 'SYR' ,
'Taiwan' => 'TWN' , 'Tajikistan' => 'TJK' , 'Tanzania' => 'TAN' , 'Thailand' => 'THA' , 'Togo' => 'TOG' , 'Tonga' => 'TGA' , 'Trinidad and Tobago' => 'TRI' ,
'Tunisia' => 'TUN' , 'Turkey' => 'TUR' , 'Turkmenistan' => 'TKM' , 'Tuvalu' => 'TUV' , 'Uganda' => 'UGA' , 'Ukraine' => 'UKR' , 'United Arab Emirates' => 'UAE' ,
2017-05-17 12:27:35 +02:00
'United Kingdom' => 'GBR' , 'United States of America' => 'USA' , 'United States' => 'USA' , 'Uruguay' => 'URU' , 'Uzbekistan' => 'UZB' , 'Vanuatu' => 'VAN' ,
2018-07-12 22:39:40 +02:00
'Venezuela' => 'VEN' , 'Vietnam' => 'VIE' , 'Yemen' => 'YEM' , 'Zambia' => 'ZAM' , 'Zimbabwe' => 'ZIM' , 'Vatican City' => 'VAT' , 'Bosnia and Herzegovina' => 'BIH' , 'Saint Lucia' => 'LCA' );
2014-01-31 15:16:26 +01:00
if ( array_key_exists ( $country , $nations )) {
2013-12-30 14:09:58 +01:00
return $nations [ $country ];
}
2014-01-31 15:16:26 +01:00
if ( $country ) {
2014-08-03 13:29:54 +02:00
Logger :: logWarning ( " Couldn't map Country: ' { $country } '! " );
2013-12-26 11:28:58 +01:00
}
2013-12-30 14:09:58 +01:00
return 'OTH' ;
2013-12-26 11:28:58 +01:00
}
2014-05-24 18:56:07 +02:00
/**
* Parse the given Value into a Bool
*
* @ param mixed $value
* @ return bool
*/
public static function parseBoolean ( $value ) {
if ( is_string ( $value )) {
$value = strtolower ( $value );
}
2014-06-23 15:45:40 +02:00
return filter_var ( $value , FILTER_VALIDATE_BOOLEAN );
2014-05-24 18:56:07 +02:00
}
2014-06-17 21:18:17 +02:00
/**
* Make sure the given Text is encoded in UTF - 8
*
* @ param string $text
2020-04-21 17:57:36 +02:00
* @ return array | string
2014-06-17 21:18:17 +02:00
*/
public static function utf8 ( $text ) {
2014-06-26 11:13:59 +02:00
if ( is_array ( $text )) {
$newArray = array ();
foreach ( $text as $key => $value ) {
2014-06-26 11:18:00 +02:00
if ( is_string ( $value )) {
$newArray [ $key ] = self :: utf8 ( $value );
} else {
$newArray [ $key ] = $value ;
}
2014-06-26 11:13:59 +02:00
}
return $newArray ;
}
return mb_convert_encoding ( $text , 'UTF-8' , 'UTF-8' );
2014-06-17 21:18:17 +02:00
}
2013-11-10 03:07:45 +01:00
}