*/
function escape($input)
{
+ if (is_bool($input)) {
+ return $input;
+ }
+
if (is_array($input)) {
$out = array();
- foreach($input as $key => $value) {
+ foreach ($input as $key => $value) {
$out[$key] = escape($value);
}
return $out;
return $finalReferer;
}
-/**
- * Validate session ID to prevent Full Path Disclosure.
- *
- * See #298.
- * The session ID's format depends on the hash algorithm set in PHP settings
- *
- * @param string $sessionId Session ID
- *
- * @return true if valid, false otherwise.
- *
- * @see http://php.net/manual/en/function.hash-algos.php
- * @see http://php.net/manual/en/session.configuration.php
- */
-function is_session_id_valid($sessionId)
-{
- if (empty($sessionId)) {
- return false;
- }
-
- if (!$sessionId) {
- return false;
- }
-
- if (!preg_match('/^[a-zA-Z0-9,-]{2,128}$/', $sessionId)) {
- return false;
- }
-
- return true;
-}
-
/**
* Sniff browser language to set the locale automatically.
* Note that is may not work on your server if the corresponding locale is not installed.
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
$val = intval(substr($val, 0, -1));
- switch($last) {
- case 'g': $val *= 1024;
- case 'm': $val *= 1024;
- case 'k': $val *= 1024;
+ switch ($last) {
+ case 'g':
+ $val *= 1024;
+ case 'm':
+ $val *= 1024;
+ case 'k':
+ $val *= 1024;
}
return $val;
}
$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);
+ }
+}
+
+/**
+ * Wrapper function for translation which match the API
+ * of gettext()/_() and ngettext().
+ *
+ * @param string $text Text to translate.
+ * @param string $nText The plural message ID.
+ * @param int $nb The number of items for plural forms.
+ * @param string $domain The domain where the translation is stored (default: shaarli).
+ *
+ * @return string Text translated.
+ */
+function t($text, $nText = '', $nb = 1, $domain = 'shaarli')
+{
+ return dn__($domain, $text, $nText, $nb);
}