Run various checks that are fast.

Paramètres

string $phase: Can be install, update, or runtime.

Return value

array An associative array.

2 calls to advagg_install_fast_checks()
advagg_display_message_if_requirements_not_met dans ./advagg.module
Display a message if there are requirement issues with AdvAgg.
advagg_requirements dans ./advagg.install
Implements hook_requirements().

Fichier

./advagg.install, line 870

Code

function advagg_install_fast_checks($phase = 'runtime') {
    $requirements = array();
    // Ensure translations don't break at install time.
    $t = get_t();
    // Always check these, independent of the current phase.
    $function_list = array(
        'rename',
    );
    // Check each function to make sure it exists.
    foreach ($function_list as $function_name) {
        if (!function_exists($function_name)) {
            $requirements['advagg_function_' . $function_name] = array(
                'title' => $t('Adv CSS/JS Agg - Function Disabled'),
                'value' => $phase === 'install' ? FALSE : $function_name,
                'severity' => REQUIREMENT_ERROR,
                'description' => $t('<a href="!url">%name()</a> is disabled on this server. Please contact your hosting provider or server administrator and see if they can re-enable this function for you.', array(
                    '!url' => 'http://php.net/' . str_replace('_', '-', $function_name),
                    '%name' => $function_name,
                )),
            );
        }
    }
    // Check to see if any incompatible modules are installed.
    if (module_exists('agrcache')) {
        $requirements['advagg_module_agrcache'] = array(
            'title' => $t('Adv CSS/JS Agg - Aggregate cache module'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $phase === 'install' ? FALSE : $t('The Aggregate cache module is incompatible with AdvAgg.'),
            'description' => $t('You need to uninstall the agrcache module or uninstall AdvAgg.'),
        );
    }
    if (module_exists('bundle_aggregation')) {
        $requirements['advagg_module_bundle_aggregation'] = array(
            'title' => $t('Adv CSS/JS Agg - Bundle aggregation module'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $phase === 'install' ? FALSE : $t('The Bundle aggregation module is incompatible with AdvAgg.'),
            'description' => $t('You need to uninstall the bundle_aggregation module or uninstall AdvAgg.'),
        );
    }
    if (module_exists('core_library')) {
        $requirements['advagg_module_core_library'] = array(
            'title' => $t('Adv CSS/JS Agg - Core Library module'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $phase === 'install' ? FALSE : $t('The Core Library module is incompatible with AdvAgg.'),
            'description' => $t('You need to uninstall the core_library module or uninstall AdvAgg.'),
        );
    }
    // If not at runtime, return here.
    if ($phase !== 'runtime') {
        return $requirements;
    }
    // Make sure the advagg default values for variable_get are available.
    drupal_load('module', 'advagg');
    // Do the following checks only at runtime.
    list($css_path, $js_path) = advagg_get_root_files_dir();
    $config_path = advagg_admin_config_root_path();
    // Make sure directories are writable.
    if (!file_prepare_directory($css_path[0], FILE_CREATE_DIRECTORY + FILE_MODIFY_PERMISSIONS)) {
        $requirements['advagg_css_path_0_prepare_dir'] = array(
            'title' => $t('Adv CSS/JS Agg - CSS Path'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('CSS directory is not created or writable.'),
            'description' => $t('%path is not setup correctly.', array(
                '%path' => $css_path[0],
            )),
        );
    }
    if (!is_writable($css_path[0])) {
        $requirements['advagg_css_path_0_write'] = array(
            'title' => $t('Adv CSS/JS Agg - CSS Path'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('CSS directory is not writable.'),
            'description' => $t('%path is not setup correctly.', array(
                '%path' => $css_path[0],
            )),
        );
    }
    if (!is_readable($css_path[0])) {
        $requirements['advagg_css_path_0_read'] = array(
            'title' => $t('Adv CSS/JS Agg - CSS Path'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('CSS directory is not readable.'),
            'description' => $t('%path is not setup correctly.', array(
                '%path' => $css_path[0],
            )),
        );
    }
    $css_wrapper = file_stream_wrapper_get_instance_by_uri($css_path[0]);
    if ($css_wrapper instanceof DrupalLocalStreamWrapper) {
        if (!is_writable($css_path[1])) {
            $requirements['advagg_css_path_1_write'] = array(
                'title' => $t('Adv CSS/JS Agg - CSS Path'),
                'severity' => REQUIREMENT_ERROR,
                'value' => $t('CSS directory is not writable.'),
                'description' => $t('%path is not setup correctly.', array(
                    '%path' => $css_path[1],
                )),
            );
        }
        if (!is_readable($css_path[1])) {
            $requirements['advagg_css_path_1_read'] = array(
                'title' => $t('Adv CSS/JS Agg - CSS Path'),
                'severity' => REQUIREMENT_ERROR,
                'value' => $t('CSS directory is not readable.'),
                'description' => $t('%path is not setup correctly.', array(
                    '%path' => $css_path[1],
                )),
            );
        }
    }
    if (!file_prepare_directory($js_path[0], FILE_CREATE_DIRECTORY + FILE_MODIFY_PERMISSIONS)) {
        $requirements['advagg_js_path_0_prepare_dir'] = array(
            'title' => $t('Adv CSS/JS Agg - JS Path'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('JS directory is not created or writable.'),
            'description' => $t('%path is not setup correctly.', array(
                '%path' => $js_path[0],
            )),
        );
    }
    if (!is_writable($js_path[0])) {
        $requirements['advagg_js_path_0_write'] = array(
            'title' => $t('Adv CSS/JS Agg - JS Path'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('JS directory is not writable.'),
            'description' => $t('%path is not setup correctly.', array(
                '%path' => $js_path[0],
            )),
        );
    }
    if (!is_readable($js_path[0])) {
        $requirements['advagg_js_path_0_read'] = array(
            'title' => $t('Adv CSS/JS Agg - JS Path'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('JS directory is not readable.'),
            'description' => $t('%path is not setup correctly.', array(
                '%path' => $js_path[0],
            )),
        );
    }
    $js_wrapper = file_stream_wrapper_get_instance_by_uri($js_path[0]);
    if ($js_wrapper instanceof DrupalLocalStreamWrapper) {
        if (!is_writable($js_path[1])) {
            $requirements['advagg_js_path_1_write'] = array(
                'title' => $t('Adv CSS/JS Agg - JS Path'),
                'severity' => REQUIREMENT_ERROR,
                'value' => $t('JS directory is not writable.'),
                'description' => $t('%path is not setup correctly.', array(
                    '%path' => $js_path[1],
                )),
            );
        }
        if (!is_readable($js_path[1])) {
            $requirements['advagg_js_path_1_read'] = array(
                'title' => $t('Adv CSS/JS Agg - JS Path'),
                'severity' => REQUIREMENT_ERROR,
                'value' => $t('JS directory is not readable.'),
                'description' => $t('%path is not setup correctly.', array(
                    '%path' => $js_path[1],
                )),
            );
        }
    }
    if (!variable_get('advagg_skip_enabled_preprocess_check', ADVAGG_SKIP_ENABLED_PREPROCESS_CHECK)) {
        // Make sure variables are set correctly.
        if (!variable_get('advagg_enabled', ADVAGG_ENABLED)) {
            $requirements['advagg_not_on'] = array(
                'title' => $t('Adv CSS/JS Agg - Enabled'),
                'severity' => REQUIREMENT_WARNING,
                'value' => $t('Advanced CSS/JS aggregation is disabled.'),
                'description' => $t('Go to the Advanced CSS/JS aggregation <a href="@settings">settings page</a> and enable it.', array(
                    '@settings' => url($config_path . '/advagg'),
                )),
            );
        }
        if (!variable_get('preprocess_css', FALSE) || !variable_get('preprocess_js', FALSE)) {
            $requirements['advagg_core_off'] = array(
                'title' => $t('Adv CSS/JS Agg - Core Variables'),
                'severity' => REQUIREMENT_ERROR,
                'value' => $t('Core CSS and/or JS aggregation is disabled.'),
                'description' => $t('"Aggregate and compress CSS files" and "Aggregate JavaScript files" on the <a href="@performance">performance page</a> should be enabled.', array(
                    '@performance' => url('admin/config/development/performance', array(
                        'fragment' => 'edit-bandwidth-optimization',
                    )),
                )),
            );
        }
    }
    // Check that the menu router handler is working.
    // Paths will vary based on s3fs no_rewrite_cssjs setting.
    if (advagg_s3fs_evaluate_no_rewrite_cssjs(FALSE)) {
        // If using s3fs and no_rewrite_cssjs is not set, external paths are needed.
        // Use $css_path[0] and $js_path[0] since they contain the scheme.
        $menu_path_key = 0;
        $menu_css_path = trim(parse_url(file_create_url($css_path[0] . '/test.css'), PHP_URL_PATH));
        if (strpos($menu_css_path, $GLOBALS['base_path']) === 0) {
            $menu_css_path = substr($menu_css_path, strlen($GLOBALS['base_path']));
        }
        $menu_js_path = trim(parse_url(file_create_url($js_path[0] . '/test.js'), PHP_URL_PATH));
        if (strpos($menu_js_path, $GLOBALS['base_path']) === 0) {
            $menu_js_path = substr($menu_js_path, strlen($GLOBALS['base_path']));
        }
    }
    else {
        // Determine paths if not using s3fs, or no_rewrite_cssjs is set.
        // Use $css_path[1] and $js_path[1] since they are without schemes.
        $menu_path_key = 1;
        $menu_css_path = $css_path[1] . '/test.css';
        $menu_js_path = $js_path[1] . '/test.js';
    }
    // Use the paths set above to check menu router handler.
    $advagg_async_generation_menu_issue = FALSE;
    if (!file_uri_scheme($css_path[$menu_path_key])) {
        $item_css = menu_get_item($menu_css_path);
        if (empty($item_css['page_callback']) || strpos($item_css['page_callback'], 'advagg') === FALSE) {
            $advagg_async_generation_menu_issue = TRUE;
        }
    }
    if (!file_uri_scheme($js_path[$menu_path_key])) {
        $item_js = menu_get_item($menu_js_path);
        if (empty($item_js['page_callback']) || strpos($item_js['page_callback'], 'advagg') === FALSE) {
            $advagg_async_generation_menu_issue = TRUE;
        }
    }
    if ($advagg_async_generation_menu_issue) {
        $requirements['advagg_async_generation_menu_issue'] = array(
            'title' => $t('Adv CSS/JS Agg - Async Mode'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('Flush your caches.'),
            'description' => $t('You need to flush your menu cache. This can be done at the top of the <a href="@performance">performance page</a>; under "Clear cache" press the "Clear all caches" button.', array(
                '@performance' => url('admin/config/development/performance'),
            )),
        );
    }
    // Make hook_element_info_alter worked.
    $styles_info = element_info('styles');
    $scripts_info = element_info('scripts');
    if (empty($styles_info['#pre_render']) || !is_array($styles_info['#pre_render']) || !in_array('advagg_modify_css_pre_render', $styles_info['#pre_render']) || empty($scripts_info['#pre_render']) || !is_array($scripts_info['#pre_render']) || !in_array('advagg_modify_js_pre_render', $scripts_info['#pre_render'])) {
        if (!empty($scripts_info['#group_callback']) && $scripts_info['#group_callback'] === 'omega_group_js') {
            $requirements['advagg_hook_element_info_alter_omega'] = array(
                'title' => $t('Adv CSS/JS Agg - omega theme patch'),
                'severity' => REQUIREMENT_WARNING,
                'value' => $t('Omega theme needs a patch.'),
                'description' => $t('The <a href="@patch">patch</a> can be found in <a href="@issue">this issue</a>', array(
                    '@patch' => 'https://www.drupal.org/files/issues/omega-2492461-1-smarter-element-info-alter.patch',
                    '@issue' => 'https://www.drupal.org/node/2492461',
                )),
            );
        }
        else {
            $requirements['advagg_hook_element_info_alter'] = array(
                'title' => $t('Adv CSS/JS Agg - element_info'),
                'severity' => REQUIREMENT_WARNING,
                'value' => $t('Flush your caches.'),
                'description' => $t('You need to flush your cache_bootstrap cache bin as advagg_hook_element_info_alter() is not working correctly. This can be done near the top of the <a href="@performance">performance page</a> under Clear cache. <br>Styles: <p><code>@styles</code></p>Scripts:<p><code>@scripts</code></p>', array(
                    '@performance' => url('admin/config/development/performance'),
                    '@styles' => print_r($styles_info, TRUE),
                    '@scripts' => print_r($scripts_info, TRUE),
                )),
            );
        }
    }
    // Make sure some modules have the correct patches installed.
    if (module_exists('css_emimage')) {
        $file_path = drupal_get_path('module', 'css_emimage');
        if (!file_exists($file_path . '/css_emimage.advagg.inc')) {
            $requirements['advagg_module_css_emimage_patch'] = array(
                'title' => $t('Adv CSS/JS Agg - CSS Embedded Images module'),
                'severity' => REQUIREMENT_ERROR,
                'value' => $t('The CSS Embedded Images module needs to be updated.'),
                'description' => $t('<a href="@link">CSS Embedded Images</a> needs to be upgraded to version 1.3 or higher, the currently installed version is incompatible with AdvAgg.', array(
                    '@link' => 'http://drupal.org/project/css_emimage',
                )),
            );
        }
    }
    if (module_exists('labjs')) {
        if (!function_exists('labjs_advagg_modify_js_pre_render_alter')) {
            $requirements['advagg_module_labjs_patch'] = array(
                'title' => $t('Adv CSS/JS Agg - LAB.js module'),
                'severity' => REQUIREMENT_ERROR,
                'value' => $t('The LAB.js module needs a patch to be compatible with AdvAgg.'),
                'description' => $t('You need to install the latest patch in <a href="@link">this issue</a>.', array(
                    '@link' => 'http://drupal.org/node/1977122',
                )),
            );
        }
    }
    // Adjust some modules settings.
    $search404_ignore_query = variable_get('search404_ignore_query', 'gif jpg jpeg bmp png');
    if (module_exists('search404') && (strpos($search404_ignore_query, 'css') === FALSE || strpos($search404_ignore_query, 'js') === FALSE)) {
        $added_ext = array();
        if (strpos($search404_ignore_query, 'css') === FALSE) {
            $added_ext[] = 'css';
        }
        if (strpos($search404_ignore_query, 'js') === FALSE) {
            $added_ext[] = 'js';
        }
        $requirements['advagg_search404_module'] = array(
            'title' => $t('Adv CSS/JS Agg - Search 404 Settings'),
            'severity' => REQUIREMENT_ERROR,
            'value' => $t('HTTP requests to advagg for css/js files may not be generating correctly.'),
            'description' => $t('The Search 404 module is enabled. You need to change the <code>search404_ignore_query</code> setting, also known as "Extensions to abort search" so advagg will work. Go to the <a href="@config">Search 404 settings</a> page under the "Advanced settings" fieldgroup and look for the "Extensions to abort search" setting. Add <code>@code</code> to the string that looks like this: <p><code>@old</code></p> so it will then look like this: <p><code>@new</code></p>', array(
                '@config' => url('admin/config/search/search404'),
                '@code' => ' ' . implode(' ', $added_ext),
                '@old' => $search404_ignore_query,
                '@new' => trim($search404_ignore_query) . ' ' . implode(' ', $added_ext),
            )),
        );
    }
    if (module_exists('securepages') && variable_get('securepages_enable', 0) && function_exists('securepages_match')) {
        $test_css = securepages_match($css_path[1] . '/test.css');
        $test_js = securepages_match($js_path[1] . '/test.js');
        if ($test_css === 0 || $test_js === 0) {
            $added_paths = array();
            $securepages_ignore = variable_get('securepages_ignore', '');
            if (strpos($securepages_ignore, $css_path[1]) === FALSE) {
                $added_paths[] = $css_path[1] . '/*';
            }
            if (strpos($securepages_ignore, $js_path[1]) === FALSE) {
                $added_paths[] = $js_path[1] . '/*';
            }
            if (!empty($added_paths)) {
                $requirements['advagg_securepages_module'] = array(
                    'title' => $t('Adv CSS/JS Agg - Secure Pages Settings'),
                    'severity' => REQUIREMENT_ERROR,
                    'value' => $t('Requests to advagg for css/js files may be getting redirected to http on a https page.'),
                );
                if (!empty($securepages_ignore)) {
                    $requirements['advagg_securepages_module']['description'] = $t('The Secure Pages module is enabled. You need to change the <code>securepages_ignore</code> setting, also known as "Ignore pages" so advagg will work. Go to the <a href="@config">Secure Pages settings</a> page and under the "Ignore pages" setting add <p><code>!code</code></p> to the string that looks like this: <p><code>@old</code></p> so it will then look like this: <p><code>@old<br>!code</code></p>', array(
                        '@config' => url('admin/config/system/securepages', array(
                            'fragment' => 'edit-securepages-ignore',
                        )),
                        '!code' => implode("\n<br>", $added_paths),
                        '@old' => trim($securepages_ignore),
                    ));
                }
                else {
                    $requirements['advagg_securepages_module']['description'] = $t('The Secure Pages module is enabled. You need to change the <code>securepages_ignore</code> setting, also known as "Ignore pages" so advagg will work. Go to the <a href="@config">Secure Pages settings</a> page and under the "Ignore pages" setting add <p><code>!code</code></p> to that section.', array(
                        '@config' => url('admin/config/system/securepages', array(
                            'fragment' => 'edit-securepages-ignore',
                        )),
                        '!code' => implode("\n<br>", $added_paths),
                    ));
                }
            }
        }
    }
    // Check that https is correct.
    if (empty($GLOBALS['is_https']) && (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) === 'on' || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' || isset($_SERVER['HTTP_HTTPS']) && $_SERVER['HTTP_HTTPS'] === 'on')) {
        $requirements['advagg_is_https_check'] = array(
            'title' => $t('Adv CSS/JS Agg - HTTPS'),
            'severity' => REQUIREMENT_WARNING,
            'value' => $t('The core global $is_https is not TRUE.'),
            'description' => $t('You need to add in this logic near the top your settings.php file: <pre>@code</pre>', array(
                '@code' => 'if ((isset($_SERVER[\'HTTPS\']) && strtolower($_SERVER[\'HTTPS\']) == \'on\')
  || (isset($_SERVER[\'HTTP_X_FORWARDED_PROTO\']) && $_SERVER[\'HTTP_X_FORWARDED_PROTO\'] == \'https\')
  || (isset($_SERVER[\'HTTP_HTTPS\']) && $_SERVER[\'HTTP_HTTPS\'] == \'on\')
) {
  $_SERVER[\'HTTPS\'] = \'on\';
}',
            )),
        );
    }
    // Make sure $base_url is correct.
    // Site is https but $base_url starts with http://.
    if (!empty($GLOBALS['is_https']) && strpos($GLOBALS['base_url'], 'http://') === 0) {
        $requirements['advagg_is_https_check'] = array(
            'title' => $t('Adv CSS/JS Agg - $base_url'),
            'severity' => REQUIREMENT_WARNING,
            'value' => $t('The core global $base_url\'s scheme is incorrect.'),
            'description' => $t('You need to add in this logic near the bottom of your settings.php file: <p><pre>@code</pre></p>', array(
                '@code' => 'if (isset($_SERVER["HTTPS"]) && strtolower($_SERVER["HTTPS"]) == "on" && isset($base_url)) {
  $base_url = str_replace("http://", "https://", $base_url);
}',
            )),
        );
    }
    return $requirements;
}