From fef8537adbf12d200eca51d7d27fe597a43ebeda Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 11 Sep 2015 09:12:20 -0400
Subject: [PATCH] Improved multi-folder search performance on sort order change or list page change by proper index serialization and skipped redundant sorting
---
program/lib/Roundcube/bootstrap.php | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/program/lib/Roundcube/bootstrap.php b/program/lib/Roundcube/bootstrap.php
index 2b7682b..c173274 100644
--- a/program/lib/Roundcube/bootstrap.php
+++ b/program/lib/Roundcube/bootstrap.php
@@ -45,8 +45,10 @@
foreach ($config as $optname => $optval) {
$ini_optval = filter_var(ini_get($optname), is_bool($optval) ? FILTER_VALIDATE_BOOLEAN : FILTER_VALIDATE_INT);
if ($optval != $ini_optval && @ini_set($optname, $optval) === false) {
- $error = "ERROR: Wrong '$optname' option value and it wasn't possible to set it to required value ($optval).\n"
+ $optval = !is_bool($optval) ? $optval : ($optval ? 'On' : 'Off');
+ $error = "ERROR: Wrong '$optname' option value and it wasn't possible to set it to required value ($optval).\n"
. "Check your PHP configuration (including php_admin_flag).";
+
if (defined('STDERR')) fwrite(STDERR, $error); else echo $error;
exit(1);
}
@@ -104,19 +106,29 @@
/**
- * Similar function as in_array() but case-insensitive
+ * Similar function as in_array() but case-insensitive with multibyte support.
*
- * @param string $needle Needle value
- * @param array $heystack Array to search in
+ * @param string $needle Needle value
+ * @param array $heystack Array to search in
*
* @return boolean True if found, False if not
*/
function in_array_nocase($needle, $haystack)
{
- $needle = mb_strtolower($needle);
- foreach ((array)$haystack as $value) {
- if ($needle === mb_strtolower($value)) {
- return true;
+ // use much faster method for ascii
+ if (is_ascii($needle)) {
+ foreach ((array) $haystack as $value) {
+ if (strcasecmp($value, $needle) === 0) {
+ return true;
+ }
+ }
+ }
+ else {
+ $needle = mb_strtolower($needle);
+ foreach ((array) $haystack as $value) {
+ if ($needle === mb_strtolower($value)) {
+ return true;
+ }
}
}
--
Gitblit v1.9.1