diff --git a/classes/cache/CacheMemcache.php b/classes/cache/CacheMemcache.php index 543a7e797..277c918bd 100755 --- a/classes/cache/CacheMemcache.php +++ b/classes/cache/CacheMemcache.php @@ -46,26 +46,28 @@ class CacheMemcacheCore extends Cache // Get keys (this code comes from Doctrine 2 project) $this->keys = array(); - $all_slabs = $this->memcache->getExtendedStats('slabs'); - - foreach ($all_slabs as $server => $slabs) - { - if (is_array($slabs)) - { - foreach (array_keys($slabs) as $slab_id) - { - $dump = $this->memcache->getExtendedStats('cachedump', (int)$slab_id); - if ($dump) - { - foreach ($dump as $entries) - { - if ($entries) - $this->keys = array_merge($this->keys, array_keys($entries)); - } - } - } - } - } + $servers = self::getMemcachedServers(); + if(is_array($servers) && count($servers) > 0) + $all_slabs = $this->memcache->getExtendedStats('slabs'); + if(isset($all_slabs) && is_array($all_slabs)) + foreach ($all_slabs as $server => $slabs) + { + if (is_array($slabs)) + { + foreach (array_keys($slabs) as $slab_id) + { + $dump = $this->memcache->getExtendedStats('cachedump', (int)$slab_id); + if ($dump) + { + foreach ($dump as $entries) + { + if ($entries) + $this->keys = array_merge($this->keys, array_keys($entries)); + } + } + } + } + } } public function __destruct() @@ -78,8 +80,12 @@ class CacheMemcacheCore extends Cache */ public function connect() { - $this->memcache = new Memcache(); - $servers = CacheMemcache::getMemcachedServers(); + if (class_exists('Memcache') && extension_loaded('memcache')) + $this->memcache = new Memcache(); + else + return false; + + $servers = self::getMemcachedServers(); if (!$servers) return false; foreach ($servers as $server) diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 3c03a518b..5c2b8076d 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -2192,9 +2192,10 @@ class AdminControllerCore extends Controller $class_name = $this->className; /* Class specific validation rules */ - $rules = call_user_func(array($class_name, 'getValidationRules'), $class_name); + if (!empty($class_name)) + $rules = call_user_func(array($class_name, 'getValidationRules'), $class_name); - if ((count($rules['requiredLang']) || count($rules['sizeLang']) || count($rules['validateLang']))) + if (isset($rules) && count($rules) && (count($rules['requiredLang']) || count($rules['sizeLang']) || count($rules['validateLang']))) { /* Language() instance determined by default language */ $default_language = new Language((int)Configuration::get('PS_LANG_DEFAULT')); @@ -2204,56 +2205,61 @@ class AdminControllerCore extends Controller } /* Checking for required fields */ - foreach ($rules['required'] as $field) - if (($value = Tools::getValue($field)) == false && (string)$value != '0') - if (!Tools::getValue($this->identifier) || ($field != 'passwd' && $field != 'no-picture')) - $this->errors[] = sprintf( - Tools::displayError('The field %s is required.'), - call_user_func(array($class_name, 'displayFieldName'), $field, $class_name) - ); + if (isset($rules['required']) && is_array($rules['required'])) + foreach ($rules['required'] as $field) + if (($value = Tools::getValue($field)) == false && (string)$value != '0') + if (!Tools::getValue($this->identifier) || ($field != 'passwd' && $field != 'no-picture')) + $this->errors[] = sprintf( + Tools::displayError('The field %s is required.'), + call_user_func(array($class_name, 'displayFieldName'), $field, $class_name) + ); /* Checking for multilingual required fields */ - foreach ($rules['requiredLang'] as $field_lang) - if (($empty = Tools::getValue($field_lang.'_'.$default_language->id)) === false || $empty !== '0' && empty($empty)) - $this->errors[] = sprintf( - Tools::displayError('The field %1$s is required at least in %2$s.'), - call_user_func(array($class_name, 'displayFieldName'), $field_lang, $class_name), - $default_language->name - ); + if (isset($rules['requiredLang']) && is_array($rules['requiredLang'])) + foreach ($rules['requiredLang'] as $field_lang) + if (($empty = Tools::getValue($field_lang.'_'.$default_language->id)) === false || $empty !== '0' && empty($empty)) + $this->errors[] = sprintf( + Tools::displayError('The field %1$s is required at least in %2$s.'), + call_user_func(array($class_name, 'displayFieldName'), $field_lang, $class_name), + $default_language->name + ); /* Checking for maximum fields sizes */ - foreach ($rules['size'] as $field => $max_length) - if (Tools::getValue($field) !== false && Tools::strlen(Tools::getValue($field)) > $max_length) - $this->errors[] = sprintf( - Tools::displayError('The field %1$s is too long (%2$d chars max).'), - call_user_func(array($class_name, 'displayFieldName'), $field, $class_name), - $max_length - ); - - /* Checking for maximum multilingual fields size */ - foreach ($rules['sizeLang'] as $field_lang => $max_length) - foreach ($languages as $language) - { - $field_lang_value = Tools::getValue($field_lang.'_'.$language['id_lang']); - if ($field_lang_value !== false && Tools::strlen($field_lang_value) > $max_length) + if (isset($rules['size']) && is_array($rules['size'])) + foreach ($rules['size'] as $field => $max_length) + if (Tools::getValue($field) !== false && Tools::strlen(Tools::getValue($field)) > $max_length) $this->errors[] = sprintf( - Tools::displayError('The field %1$s (%2$s) is too long (%3$d chars max, html chars including).'), - call_user_func(array($class_name, 'displayFieldName'), $field_lang, $class_name), - $language['name'], + Tools::displayError('The field %1$s is too long (%2$d chars max).'), + call_user_func(array($class_name, 'displayFieldName'), $field, $class_name), $max_length ); - } + + /* Checking for maximum multilingual fields size */ + if (isset($rules['sizeLang']) && is_array($rules['sizeLang'])) + foreach ($rules['sizeLang'] as $field_lang => $max_length) + foreach ($languages as $language) + { + $field_lang_value = Tools::getValue($field_lang.'_'.$language['id_lang']); + if ($field_lang_value !== false && Tools::strlen($field_lang_value) > $max_length) + $this->errors[] = sprintf( + Tools::displayError('The field %1$s (%2$s) is too long (%3$d chars max, html chars including).'), + call_user_func(array($class_name, 'displayFieldName'), $field_lang, $class_name), + $language['name'], + $max_length + ); + } /* Overload this method for custom checking */ $this->_childValidation(); /* Checking for fields validity */ - foreach ($rules['validate'] as $field => $function) - if (($value = Tools::getValue($field)) !== false && ($field != 'passwd')) - if (!Validate::$function($value) && !empty($value)) - $this->errors[] = sprintf( - Tools::displayError('The field %s is invalid.'), - call_user_func(array($class_name, 'displayFieldName'), $field, $class_name) - ); + if (isset($rules['validate']) && is_array($rules['validate'])) + foreach ($rules['validate'] as $field => $function) + if (($value = Tools::getValue($field)) !== false && ($field != 'passwd')) + if (!Validate::$function($value) && !empty($value)) + $this->errors[] = sprintf( + Tools::displayError('The field %s is invalid.'), + call_user_func(array($class_name, 'displayFieldName'), $field, $class_name) + ); /* Checking for passwd_old validity */ if (($value = Tools::getValue('passwd')) != false) @@ -2271,15 +2277,16 @@ class AdminControllerCore extends Controller } /* Checking for multilingual fields validity */ - foreach ($rules['validateLang'] as $field_lang => $function) - foreach ($languages as $language) - if (($value = Tools::getValue($field_lang.'_'.$language['id_lang'])) !== false && !empty($value)) - if (!Validate::$function($value)) - $this->errors[] = sprintf( - Tools::displayError('The field %1$s (%2$s) is invalid.'), - call_user_func(array($class_name, 'displayFieldName'), $field_lang, $class_name), - $language['name'] - ); + if (isset($rules['validateLang']) && is_array($rules['validateLang'])) + foreach ($rules['validateLang'] as $field_lang => $function) + foreach ($languages as $language) + if (($value = Tools::getValue($field_lang.'_'.$language['id_lang'])) !== false && !empty($value)) + if (!Validate::$function($value)) + $this->errors[] = sprintf( + Tools::displayError('The field %1$s (%2$s) is invalid.'), + call_user_func(array($class_name, 'displayFieldName'), $field_lang, $class_name), + $language['name'] + ); } /** diff --git a/controllers/admin/AdminPerformanceController.php b/controllers/admin/AdminPerformanceController.php index d09925582..dbd1d5280 100644 --- a/controllers/admin/AdminPerformanceController.php +++ b/controllers/admin/AdminPerformanceController.php @@ -725,6 +725,7 @@ class AdminPerformanceControllerCore extends AdminController $cache_active = 0; else $cache_active = 1; + if (!$caching_system = Tools::getValue('caching_system')) $this->errors[] = Tools::displayError('Caching system is missing'); else @@ -733,6 +734,7 @@ class AdminPerformanceControllerCore extends AdminController 'define(\'_PS_CACHING_SYSTEM_\', \''.$caching_system.'\');', $new_settings ); + if ($cache_active && $caching_system == 'CacheMemcache' && !extension_loaded('memcache')) $this->errors[] = Tools::displayError('To use Memcached, you must install the Memcache PECL extension on your server.').' http://www.php.net/manual/en/memcache.installation.php'; @@ -778,8 +780,7 @@ class AdminPerformanceControllerCore extends AdminController else $this->errors[] = Tools::displayError('You do not have permission to edit here.'); } - - if ($redirecAdmin) + if ($redirecAdmin && (!isset($this->errors) || !count($this->errors))) Tools::redirectAdmin(self::$currentIndex.'&token='.Tools::getValue('token').'&conf=4'); else return parent::postProcess();