Apply the advagg changes to the $css_js_groups array.

Paramètres

array $css_js_groups: An array of CSS or JS groups as returned by drupal_group_css/js().

array $plans: An array of changes to do to the $css_js_groups array.

Return value

array New version of $css_js_groups.

2 calls to advagg_merge_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.module, line 3171

Code

function advagg_merge_plans(array $css_js_groups, array $plans) {
    $used_keys = array();
    foreach ($plans as $plan) {
        $plan_added = FALSE;
        foreach ($css_js_groups as $key => $group) {
            // Remove files from the old css/js array.
            $file_removed = FALSE;
            foreach ($css_js_groups[$key]['items'] as $k => $values) {
                if (is_array($values) && array_key_exists('data', $values) && is_array($plan['items']['files']) && is_string($values['data'])) {
                    // If the CSS is a split file, the first file is very meaningful, and
                    // is probably the only file.
                    $first_file = reset($plan['items']['files']);
                    if (array_key_exists($values['data'], $plan['items']['files'])) {
                        unset($css_js_groups[$key]['items'][$k]);
                        $file_removed = TRUE;
                    }
                    elseif (!empty($first_file['split'])) {
                        if ($values['data'] == $first_file['split_original']) {
                            if (!empty($first_file['split_last_part'])) {
                                unset($css_js_groups[$key]['items'][$k]);
                            }
                            $file_removed = TRUE;
                        }
                    }
                }
            }
            // Replace first file of the old css/js array with one from advagg.
            if ($file_removed && !$plan_added) {
                $step = 0;
                do {
                    ++$step;
                    $insert_key = '' . floatval($key) . '.' . sprintf('%03d', $step);
                } while (array_key_exists($insert_key, $css_js_groups));
                $css_js_groups[(string) $insert_key] = $plan;
                $plan_added = TRUE;
            }
        }
        // Remove old css/js grouping if no files are left in it.
        foreach ($css_js_groups as $key => $group) {
            if (empty($css_js_groups[$key]['items'])) {
                unset($css_js_groups[$key]);
            }
        }
        if (!$plan_added) {
            foreach ($css_js_groups as $key => $group) {
                if (empty($group['items']['aggregate_filenames_hash']) || $group['items']['aggregate_filenames_hash'] != $plan['items']['aggregate_filenames_hash'] || empty($group['items']['aggregate_contents_hash']) || $group['items']['aggregate_contents_hash'] != $plan['items']['aggregate_contents_hash']) {
                    continue;
                }
                // Insert a unique key.
                do {
                    $key = '' . (floatval($key) + 0.01);
                } while (array_key_exists((string) $key, $css_js_groups) || array_key_exists((string) $key, $used_keys));
                $used_keys[(string) $key] = TRUE;
                $css_js_groups[(string) $key] = $plan;
                $plan_added = TRUE;
                break;
            }
        }
    }
    // Key sort and normalize the array before returning it.
    ksort($css_js_groups);
    $css_js_groups = array_values($css_js_groups);
    return $css_js_groups;
}