Save an aggregate given a filename, the files included in it, and the type.

Parameters

string $filename: Just the filename no path information.

array $files: Array of filenames.

string $type: String: css or js.

array $aggregate_settings: Array of settings.

Return value

array array($files_to_save, $errors).

2 calls to advagg_save_aggregate()
advagg_missing_create_file in ./advagg.missing.inc
Given a filename create that file.
advagg_requirements in ./advagg.install
Implements hook_requirements().

File

./advagg.missing.inc, line 1166

Code

function advagg_save_aggregate($filename, array $files, $type, array $aggregate_settings = array()) {
    list($css_path, $js_path) = advagg_get_root_files_dir();
    $uri = '';
    if ($type === 'css') {
        $uri = $css_path[0] . '/' . $filename;
    }
    elseif ($type === 'js') {
        $uri = $js_path[0] . '/' . $filename;
    }
    if (empty($aggregate_settings)) {
        $aggregate_settings = advagg_current_hooks_hash_array();
    }
    // Allow other modules to alter the location, files included, and settings.
    if (empty($aggregate_settings['settings']['no_alters'])) {
        // Call hook_advagg_save_aggregate_pre_alter().
        drupal_alter('advagg_save_aggregate_pre', $uri, $files, $aggregate_settings);
    }
    // Build the aggregates contents.
    $contents = '';
    if ($type === 'css') {
        list($contents, $write_aggregate) = advagg_get_css_aggregate_contents($files, $aggregate_settings, $filename);
    }
    elseif ($type === 'js') {
        list($contents, $write_aggregate) = advagg_get_js_aggregate_contents($files, $aggregate_settings, $filename);
    }
    if (variable_get('advagg_cache_level', ADVAGG_CACHE_LEVEL) < 0) {
        $contents = "/* This aggregate contains the following files:\n" . implode(",\n", array_keys($files)) . ". */\n\n" . $contents;
    }
    // List of files to save.
    $files_to_save = array(
        $uri => $contents,
    );
    // Allow other modules to alter the contents and add new files to save.
    // Call hook_advagg_save_aggregate_alter().
    $other_parameters = array(
        $files,
        $type,
    );
    if (empty($aggregate_settings['settings']['no_alters'])) {
        drupal_alter('advagg_save_aggregate', $files_to_save, $aggregate_settings, $other_parameters);
    }
    $errors = array();
    if ($write_aggregate) {
        foreach ($files_to_save as $uri => $data) {
            $errors = advagg_save_data($uri, $data);
            if (!file_exists($uri) || filesize($uri) == 0) {
                if ($type === 'css') {
                    $full_dir = DRUPAL_ROOT . '/' . $css_path[1];
                }
                elseif ($type === 'js') {
                    $full_dir = DRUPAL_ROOT . '/' . $js_path[1];
                }
                $free_space = @disk_free_space($full_dir);
                if ($free_space !== FALSE && strlen($data) > $free_space) {
                    watchdog('advagg', 'Write to file system failed. Disk is full. %uri. !errors. %full_dir.', array(
                        '%uri' => $uri,
                        '!errors' => print_r($errors, TRUE),
                        '%full_dir' => $full_dir,
                    ), WATCHDOG_ALERT);
                }
                elseif (!is_writable($full_dir)) {
                    watchdog('advagg', 'Write to file system failed. Check directory permissions. %uri. !errors. %full_dir.', array(
                        '%uri' => $uri,
                        '!errors' => print_r($errors, TRUE),
                        '%full_dir' => $full_dir,
                    ), WATCHDOG_ERROR);
                }
                else {
                    watchdog('advagg', 'Write to file system failed. %uri. !errors. %full_dir.', array(
                        '%uri' => $uri,
                        '!errors' => print_r($errors, TRUE),
                        '%full_dir' => $full_dir,
                    ), WATCHDOG_ERROR);
                }
                // If the file is empty, remove it. Serving via drupal is better than an
                // empty aggregate being served.
                if (file_exists($uri) && filesize($uri) == 0) {
                    @unlink($uri);
                }
            }
        }
    }
    return array(
        $files_to_save,
        $errors,
    );
}