/**
  * Update advanced configuration.
  */
 function procAdminUpdateAdvanced()
 {
     $vars = Context::getRequestVars();
     // Default URL
     $default_url = rtrim(trim($vars->default_url), '/\\') . '/';
     if (!filter_var($default_url, FILTER_VALIDATE_URL) || !preg_match('@^https?://@', $default_url)) {
         return new Object(-1, 'msg_invalid_default_url');
     }
     if (parse_url($default_url, PHP_URL_PATH) !== RX_BASEURL) {
         return new Object(-1, 'msg_invalid_default_url');
     }
     // SSL and ports
     if ($vars->http_port == 80) {
         $vars->http_port = null;
     }
     if ($vars->https_port == 443) {
         $vars->https_port = null;
     }
     $use_ssl = $vars->use_ssl ?: 'none';
     // Check if all URL configuration is consistent
     if ($use_ssl === 'always' && !preg_match('@^https://@', $default_url)) {
         return new Object(-1, 'msg_default_url_ssl_inconsistent');
     }
     if ($vars->http_port && preg_match('@^http://@', $default_url) && parse_url($default_url, PHP_URL_PORT) != $vars->http_port) {
         return new Object(-1, 'msg_default_url_http_port_inconsistent');
     }
     if ($vars->https_port && preg_match('@^https://@', $default_url) && parse_url($default_url, PHP_URL_PORT) != $vars->https_port) {
         return new Object(-1, 'msg_default_url_https_port_inconsistent');
     }
     // Set all URL configuration
     Rhymix\Framework\Config::set('url.default', $default_url);
     Rhymix\Framework\Config::set('url.http_port', $vars->http_port ?: null);
     Rhymix\Framework\Config::set('url.https_port', $vars->https_port ?: null);
     Rhymix\Framework\Config::set('url.ssl', $use_ssl);
     getController('module')->updateSite((object) array('site_srl' => 0, 'domain' => preg_replace('@^https?://@', '', $default_url)));
     // Object cache
     if ($vars->object_cache_type) {
         if ($vars->object_cache_type === 'memcached' || $vars->object_cache_type === 'redis') {
             $cache_servers = array($vars->object_cache_type . '://' . $vars->object_cache_host . ':' . intval($vars->object_cache_port));
             if ($vars->object_cache_type === 'redis') {
                 $cache_servers[0] .= '/' . intval($vars->object_cache_dbnum);
             }
         } else {
             $cache_servers = array();
         }
         if (!Rhymix\Framework\Cache::getDriverInstance($vars->object_cache_type, $cache_servers)) {
             return new Object(-1, 'msg_cache_handler_not_supported');
         }
         Rhymix\Framework\Config::set('cache', array('type' => $vars->object_cache_type, 'ttl' => intval($vars->cache_default_ttl ?: 86400), 'servers' => $cache_servers));
     } else {
         Rhymix\Framework\Config::set('cache', array());
     }
     // Thumbnail settings
     $args = new stdClass();
     $args->thumbnail_type = $vars->thumbnail_type === 'ratio' ? 'ratio' : 'crop';
     $oModuleController = getController('module');
     $oModuleController->insertModuleConfig('document', $args);
     // Other settings
     Rhymix\Framework\Config::set('use_rewrite', $vars->use_rewrite === 'Y');
     Rhymix\Framework\Config::set('use_sso', $vars->use_sso === 'Y');
     Rhymix\Framework\Config::set('session.delay', $vars->delay_session === 'Y');
     Rhymix\Framework\Config::set('session.use_db', $vars->use_db_session === 'Y');
     Rhymix\Framework\Config::set('view.minify_scripts', $vars->minify_scripts ?: 'common');
     Rhymix\Framework\Config::set('view.concat_scripts', $vars->concat_scripts ?: 'none');
     Rhymix\Framework\Config::set('view.server_push', $vars->use_server_push === 'Y');
     Rhymix\Framework\Config::set('view.use_gzip', $vars->use_gzip === 'Y');
     // Save
     Rhymix\Framework\Config::save();
     $this->setMessage('success_updated');
     $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminConfigAdvanced'));
 }