X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2FUtils.php;h=4a2f5561cfdf5dfb38ed9a0a4c0f46b58b27c8c6;hb=9f32160c323e77237e4051056c1f1061586cc12e;hp=3ef2a7e2cd1d2d4800a1df1f37e4fbe8fc873a8d;hpb=2109bb9d9a355787f8beea8cbfaed2eb1d53283f;p=github%2Fshaarli%2FShaarli.git diff --git a/application/Utils.php b/application/Utils.php index 3ef2a7e2..4a2f5561 100644 --- a/application/Utils.php +++ b/application/Utils.php @@ -91,6 +91,10 @@ function endsWith($haystack, $needle, $case = true) */ function escape($input) { + if (is_bool($input)) { + return $input; + } + if (is_array($input)) { $out = array(); foreach($input as $key => $value) { @@ -414,23 +418,55 @@ function human_bytes($bytes) $bytes /= 1024; } - return $bytes . $units[$i]; + return round($bytes) . $units[$i]; } /** * Try to determine max file size for uploads (POST). - * Returns an integer (in bytes) + * Returns an integer (in bytes) or formatted depending on $format. * * @param mixed $limitPost post_max_size PHP setting * @param mixed $limitUpload upload_max_filesize PHP setting + * @param bool $format Format max upload size to human readable size * - * @return int max upload file size in bytes. + * @return int|string max upload file size */ -function get_max_upload_size($limitPost, $limitUpload) +function get_max_upload_size($limitPost, $limitUpload, $format = true) { $size1 = return_bytes($limitPost); $size2 = return_bytes($limitUpload); // Return the smaller of two: $maxsize = min($size1, $size2); - return human_bytes($maxsize); + return $format ? human_bytes($maxsize) : $maxsize; +} + +/** + * Sort the given array alphabetically using php-intl if available. + * Case sensitive. + * + * Note: doesn't support multidimensional arrays + * + * @param array $data Input array, passed by reference + * @param bool $reverse Reverse sort if set to true + * @param bool $byKeys Sort the array by keys if set to true, by value otherwise. + */ +function alphabetical_sort(&$data, $reverse = false, $byKeys = false) +{ + $callback = function($a, $b) use ($reverse) { + // Collator is part of PHP intl. + if (class_exists('Collator')) { + $collator = new Collator(setlocale(LC_COLLATE, 0)); + if (!intl_is_failure(intl_get_error_code())) { + return $collator->compare($a, $b) * ($reverse ? -1 : 1); + } + } + + return strcasecmp($a, $b) * ($reverse ? -1 : 1); + }; + + if ($byKeys) { + uksort($data, $callback); + } else { + usort($data, $callback); + } }