Replacement for drupal_build_css_cache() and drupal_build_js_cache().

Paramètres

array $files_to_aggregate: An array of CSS/JS groups.

string $type: String; css or js.

Return value

array array of aggregate files.

2 calls to advagg_build_aggregate_plans()
_advagg_aggregate_css dans ./advagg.module
Default callback to aggregate CSS files and inline content.
_advagg_aggregate_js dans ./advagg.module
Default callback to aggregate JavaScript files.

Fichier

./advagg.inc, line 1420

Code

function advagg_build_aggregate_plans(array $files_to_aggregate, $type) {
    if ($type !== 'css' && $type !== 'js') {
        return array();
    }
    // Place into biggest grouping possible.
    $groups = advagg_generate_groups($files_to_aggregate, $type);
    // Get filenames.
    $files = advagg_generate_filenames($groups, $type);
    // Insert/Update Database.
    advagg_insert_update_db($files, $type, 1);
    // Update atimes for root.
    advagg_multi_update_atime($files);
    // Run hooks to modify the aggregate.
    // Call hook_advagg_build_aggregate_plans_alter().
    $modified = FALSE;
    drupal_alter('advagg_build_aggregate_plans', $files, $modified, $type);
    // If the hook above modified anything, re-insert into database.
    if ($modified) {
        // Insert/Update Database.
        advagg_insert_update_db($files, $type, 0);
        // Update atimes for non root.
        advagg_multi_update_atime($files);
    }
    // Get file paths.
    list($css_path, $js_path) = advagg_get_root_files_dir();
    // Build the plan.
    $plans = array();
    foreach ($files as $agg_filename => $values) {
        if ($type === 'css') {
            $mixed_media = FALSE;
            $media = NULL;
            foreach ($values['files'] as $value) {
                if (!isset($value['media'])) {
                    continue;
                }
                if (is_null($media)) {
                    $media = $value['media'];
                }
                if ($media != $value['media']) {
                    $mixed_media = TRUE;
                }
            }
        }
        $onload = array();
        $onerror = array();
        $attributes = array();
        $onloadcss = array();
        foreach ($values['files'] as &$items) {
            // Get onload.
            if (!empty($items['onload'])) {
                $onload[] = $items['onload'];
            }
            // Get attributes onload.
            if (!empty($items['attributes']['onload'])) {
                $onload[] = $items['attributes']['onload'];
                unset($items['attributes']['onload']);
            }
            // Get onerror.
            if (!empty($items['onerror'])) {
                $onload[] = $items['onerror'];
            }
            // Get attributes onerror.
            if (!empty($items['attributes']['onerror'])) {
                $onload[] = $items['attributes']['onerror'];
                unset($items['attributes']['onerror']);
            }
            // Get attributes onloadCSS.
            if (!empty($items['onloadCSS'])) {
                $onloadcss[] = $items['onloadCSS'];
            }
            // Get attributes onloadCSS.
            if (!empty($items['attributes']['onloadCSS'])) {
                $onloadcss[] = $items['attributes']['onloadCSS'];
                unset($items['attributes']['onloadCSS']);
            }
            // Get attributes.
            if (!empty($items['attributes'])) {
                $attributes += $items['attributes'];
            }
        }
        $onload = implode(';', array_unique(array_filter($onload)));
        $onerror = implode(';', array_unique(array_filter($onerror)));
        $onloadcss = implode(';', array_unique(array_filter($onloadcss)));
        $first = reset($values['files']);
        if (!empty($mixed_media)) {
            $first['media'] = 'all';
        }
        $url = $type === 'css' ? $css_path[0] : $js_path[0];
        $path = $type === 'css' ? $css_path[1] : $js_path[1];
        $plans[$agg_filename] = array(
            'data' => $url . '/' . $agg_filename,
            'media' => isset($first['media']) ? $first['media'] : '',
            'defer' => isset($first['defer']) ? $first['defer'] : '',
            'async' => isset($first['async']) ? $first['async'] : '',
            'onload' => $onload,
            'onerror' => $onerror,
            'browsers' => isset($first['browsers']) ? $first['browsers'] : array(),
            'cache' => isset($first['cache']) ? $first['cache'] : TRUE,
            'type' => $first['type'],
            'items' => $values,
            'filepath' => $path . '/' . $agg_filename,
            'filename' => $agg_filename,
            'attributes' => $attributes,
        );
        if (!empty($onloadcss)) {
            $plans[$agg_filename]['attributes']['onloadCSS'] = $onloadcss;
        }
    }
    $plans = array_values($plans);
    // Create the aggregate files.
    if (variable_get('advagg_pregenerate_aggregate_files', ADVAGG_PREGENERATE_AGGREGATE_FILES)) {
        advagg_create_aggregate_files($plans, $type);
    }
    // Run hooks to modify the plans.
    // Call hook_advagg_build_aggregate_plans_post_alter().
    drupal_alter('advagg_build_aggregate_plans_post', $plans, $type);
    return $plans;
}