self::$_ticker + 1)) {
self::$_ticker = time();
return true;
}
return false;
}
/**
* clean_utf8
*
* Removes characters that aren't valid in XML (which is a subset of valid
* UTF-8, but close enough for our purposes.)
* See http://www.w3.org/TR/2006/REC-xml-20060816/#charsets
*/
public static function clean_utf8($string)
{
if ($string) {
$clean = preg_replace('/[^\x{9}\x{a}\x{d}\x{20}-\x{d7ff}\x{e000}-\x{fffd}\x{10000}-\x{10ffff}]|[\x{7f}-\x{84}\x{86}-\x{9f}\x{fdd0}-\x{fddf}\x{1fffe}-\x{1ffff}\x{2fffe}-\x{2ffff}\x{3fffe}-\x{3ffff}\x{4fffe}-\x{4ffff}\x{5fffe}-\x{5ffff}\x{6fffe}-\x{6ffff}\x{7fffe}-\x{7ffff}\x{8fffe}-\x{8ffff}\x{9fffe}-\x{9ffff}\x{afffe}-\x{affff}\x{bfffe}-\x{bffff}\x{cfffe}-\x{cffff}\x{dfffe}-\x{dffff}\x{efffe}-\x{effff}\x{ffffe}-\x{fffff}\x{10fffe}-\x{10ffff}]/u', '', $string);
// Other cleanup regex. Takes too long to process.
/*$regex = <<<'END'
/
(
(?: [\x00-\x7F] # single-byte sequences 0xxxxxxx
| [\xC0-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
| [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences 1110xxxx 10xxxxxx * 2
| [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3
){1,100} # ...one or more times
)
| . # anything else
/x
END;
$clean = preg_replace($regex, '$1', $string);*/
if ($clean) {
return $clean;
}
debug_event('UI', 'Charset cleanup failed, something might break', 1);
}
}
/**
* flip_class
*
* First initialised with an array of two class names. Subsequent calls
* reverse the array then return the first element.
*/
public static function flip_class($classes = null)
{
if (is_array($classes)) {
self::$_classes = $classes;
} else {
self::$_classes = array_reverse(self::$_classes);
}
return self::$_classes[0];
}
/**
* format_bytes
*
* Turns a size in bytes into the best human-readable value
*/
public static function format_bytes($value, $precision = 2)
{
$pass = 0;
while (strlen(floor($value)) > 3) {
$value /= 1024;
$pass++;
}
switch ($pass) {
case 1: $unit = 'kB'; break;
case 2: $unit = 'MB'; break;
case 3: $unit = 'GB'; break;
case 4: $unit = 'TB'; break;
case 5: $unit = 'PB'; break;
default: $unit = 'B'; break;
}
return round($value, $precision) . ' ' . $unit;
}
/**
* unformat_bytes
*
* Parses a human-readable size
*/
public static function unformat_bytes($value)
{
if (preg_match('/^([0-9]+) *([[:alpha:]]+)$/', $value, $matches)) {
$value = $matches[1];
$unit = strtolower(substr($matches[2], 0, 1));
} else {
return $value;
}
switch ($unit) {
case 'p':
$value *= 1024;
case 't':
$value *= 1024;
case 'g':
$value *= 1024;
case 'm':
$value *= 1024;
case 'k':
$value *= 1024;
}
return $value;
}
/**
* get_icon
*
* Returns an
tag for the specified icon
*/
public static function get_icon($name, $title = null, $id = null)
{
$bUseSprite = file_exists(AmpConfig::get('prefix') . AmpConfig::get('theme_path') . '/images/icons.sprite.png');
if (is_array($name)) {
$hover_name = $name[1];
$name = $name[0];
}
$title = $title ?: T_(ucfirst($name));
$icon_url = self::_find_icon($name);
if (isset($hover_name)) {
$hover_url = self::_find_icon($hover_name);
}
if ($bUseSprite) {
$tag = 'load($GLOBALS['user'])) {
$plugin->_plugin->display_on_footer();
}
}
require_once AmpConfig::get('prefix') . '/templates/footer.inc.php';
if (isset($_REQUEST['profiling'])) {
Dba::show_profile();
}
}
/**
* show_box_top
*
* This shows the top of the box.
*/
public static function show_box_top($title = '', $class = '')
{
require AmpConfig::get('prefix') . '/templates/show_box_top.inc.php';
}
/**
* show_box_bottom
*
* This shows the bottom of the box
*/
public static function show_box_bottom()
{
require AmpConfig::get('prefix') . '/templates/show_box_bottom.inc.php';
}
public static function show_custom_style()
{
if (AmpConfig::get('custom_login_logo')) {
echo "";
}
$favicon = AmpConfig::get('custom_favicon') ?: AmpConfig::get('web_path') . "/favicon.ico";
echo "\n";
}
/**
* update_text
*
* Convenience function that, if the output is going to a browser,
* blarfs JS to do a fancy update. Otherwise it just outputs the text.
*/
public static function update_text($field, $value)
{
if (defined('CLI')) {
echo $value . "\n";
return;
}
static $id = 1;
if (defined('SSE_OUTPUT')) {
echo "id: " . $id . "\n";
echo "data: displayNotification('" . json_encode($value) . "', 5000)\n\n";
} else {
if (!empty($field)) {
echo "\n";
} else {
echo "
" . $value . "
\n";
}
}
ob_flush();
flush();
$id++;
}
public static function get_logo_url()
{
if (AmpConfig::get('custom_logo')) {
return AmpConfig::get('custom_logo');
} else {
return AmpConfig::get('web_path') . AmpConfig::get('theme_path') . '/images/ampache.png';
}
}
}