mirror of
https://github.com/WhatCD/Gazelle.git
synced 2024-12-15 11:56:25 +00:00
198 lines
5.1 KiB
PHP
198 lines
5.1 KiB
PHP
<?
|
|
// This is a file of miscellaneous functions that are called so damn often
|
|
// that it'd just be annoying to stick them in namespaces.
|
|
|
|
/**
|
|
* Return true if the given string is numeric.
|
|
*
|
|
* @param mixed $Str
|
|
* @return bool
|
|
*/
|
|
if (PHP_INT_SIZE === 4) {
|
|
function is_number($Str) {
|
|
if ($Str === null || $Str === '') {
|
|
return false;
|
|
}
|
|
if (is_int($Str)) {
|
|
return true;
|
|
}
|
|
if ($Str[0] == '-' || $Str[0] == '+') { // Leading plus/minus signs are ok
|
|
$Str[0] = 0;
|
|
}
|
|
return ltrim($Str, "0..9") === '';
|
|
}
|
|
} else {
|
|
function is_number($Str) {
|
|
return $Str == strval(intval($Str));
|
|
}
|
|
}
|
|
|
|
function is_date($Date) {
|
|
list($Y, $M, $D) = explode('-', $Date);
|
|
if (checkdate($M, $D, $Y)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check that some given variables (usually in _GET or _POST) are numbers
|
|
*
|
|
* @param array $Base array that's supposed to contain all keys to check
|
|
* @param array $Keys list of keys to check
|
|
* @param mixed $Error error code or string to pass to the error() function if a key isn't numeric
|
|
*/
|
|
function assert_numbers(&$Base, $Keys, $Error = 0) {
|
|
// make sure both arguments are arrays
|
|
if (!is_array($Base) || !is_array($Keys)) {
|
|
return;
|
|
}
|
|
foreach ($Keys as $Key) {
|
|
if (!isset($Base[$Key]) || !is_number($Base[$Key])) {
|
|
error($Error);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return true, false or null, depending on the input value's "truthiness" or "non-truthiness"
|
|
*
|
|
* @param $Value the input value to check for truthiness
|
|
* @return true if $Value is "truthy", false if it is "non-truthy" or null if $Value was not
|
|
* a bool-like value
|
|
*/
|
|
function is_bool_value($Value) {
|
|
if (is_bool($Value)) {
|
|
return $Value;
|
|
}
|
|
if (is_string($Value)) {
|
|
switch (strtolower($Value)) {
|
|
case 'true':
|
|
case 'yes':
|
|
case 'on':
|
|
case '1':
|
|
return true;
|
|
case 'false':
|
|
case 'no':
|
|
case 'off':
|
|
case '0':
|
|
return false;
|
|
}
|
|
}
|
|
if (is_numeric($Value)) {
|
|
if ($Value == 1) {
|
|
return true;
|
|
} elseif ($Value == 0) {
|
|
return false;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* HTML-escape a string for output.
|
|
* This is preferable to htmlspecialchars because it doesn't screw up upon a double escape.
|
|
*
|
|
* @param string $Str
|
|
* @return string escaped string.
|
|
*/
|
|
function display_str($Str) {
|
|
if ($Str === null || $Str === false || is_array($Str)) {
|
|
return '';
|
|
}
|
|
if ($Str != '' && !is_number($Str)) {
|
|
$Str = Format::make_utf8($Str);
|
|
$Str = mb_convert_encoding($Str, 'HTML-ENTITIES', 'UTF-8');
|
|
$Str = preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,5};)/m", '&', $Str);
|
|
|
|
$Replace = array(
|
|
"'",'"',"<",">",
|
|
'€','‚','ƒ','„','…','†','‡','ˆ',
|
|
'‰','Š','‹','Œ','Ž','‘','’','“',
|
|
'”','•','–','—','˜','™','š','›',
|
|
'œ','ž','Ÿ'
|
|
);
|
|
|
|
$With = array(
|
|
''','"','<','>',
|
|
'€','‚','ƒ','„','…','†','‡','ˆ',
|
|
'‰','Š','‹','Œ','Ž','‘','’','“',
|
|
'”','•','–','—','˜','™','š','›',
|
|
'œ','ž','Ÿ'
|
|
);
|
|
|
|
$Str = str_replace($Replace, $With, $Str);
|
|
}
|
|
return $Str;
|
|
}
|
|
|
|
|
|
/**
|
|
* Send a message to an IRC bot listening on SOCKET_LISTEN_PORT
|
|
*
|
|
* @param string $Raw An IRC protocol snippet to send.
|
|
*/
|
|
function send_irc($Raw) {
|
|
$IRCSocket = fsockopen(SOCKET_LISTEN_ADDRESS, SOCKET_LISTEN_PORT);
|
|
$Raw = str_replace(array("\n", "\r"), '', $Raw);
|
|
fwrite($IRCSocket, $Raw);
|
|
fclose($IRCSocket);
|
|
}
|
|
|
|
|
|
/**
|
|
* Display a critical error and kills the page.
|
|
*
|
|
* @param string $Error Error type. Automatically supported:
|
|
* 403, 404, 0 (invalid input), -1 (invalid request)
|
|
* If you use your own string for Error, it becomes the error description.
|
|
* @param boolean $NoHTML If true, the header/footer won't be shown, just the description.
|
|
* @param string $Log If true, the user is given a link to search $Log in the site log.
|
|
*/
|
|
function error($Error, $NoHTML = false, $Log = false) {
|
|
global $Debug;
|
|
require(SERVER_ROOT.'/sections/error/index.php');
|
|
$Debug->profile();
|
|
die();
|
|
}
|
|
|
|
|
|
/**
|
|
* Convenience function. See doc in permissions.class.php
|
|
*/
|
|
function check_perms($PermissionName, $MinClass = 0) {
|
|
return Permissions::check_perms($PermissionName, $MinClass);
|
|
}
|
|
|
|
/**
|
|
* Print JSON status result with an optional message and die.
|
|
* DO NOT USE THIS FUNCTION!
|
|
*/
|
|
function json_die($Status, $Message) {
|
|
json_print($Status, $Message);
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Print JSON status result with an optional message.
|
|
*/
|
|
function json_print($Status, $Message) {
|
|
if ($Status == 'success' && $Message) {
|
|
print json_encode(array('status' => $Status, 'response' => $Message));
|
|
} elseif ($Message) {
|
|
print json_encode(array('status' => $Status, 'error' => $Message));
|
|
} else {
|
|
print json_encode(array('status' => $Status, 'response' => array()));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Print the site's URL including the appropriate URI scheme, including the trailing slash
|
|
*
|
|
* @param bool $SSL - whether the URL should be crafted for HTTPS or regular HTTP
|
|
*/
|
|
function site_url($SSL = true) {
|
|
return $SSL ? 'https://' . SSL_SITE_URL . '/' : 'http://' . NONSSL_SITE_URL . '/';
|
|
}
|
|
?>
|