Generates a missing CSS/JS file and send it to client.

Return value

string text if bundle couldn't be generated.

1 call to advagg_missing_generate()
advagg_missing_aggregate dans ./advagg.missing.inc
Menu Callback; generates a missing CSS/JS file.

Fichier

./advagg.missing.inc, line 64

Code

function advagg_missing_generate($input = '') {
    // Make sure we are not in a redirect loop.
    $redirect_counter = isset($_GET['redirect_counter']) ? intval($_GET['redirect_counter']) : 0;
    if ($redirect_counter > 5) {
        watchdog('advagg', 'This request could not generate correctly. Loop detected. Request data: %info', array(
            '%info' => $_GET['q'],
        ));
        return t('In a loop.');
    }
    // Get filename from request.
    $arg = arg();
    $filename = array_pop($arg);
    $filename = explode('?', $filename);
    $filename = array_shift($filename);
    // Quit ASAP if filename does not match the AdvAgg pattern.
    $data = advagg_get_hashes_from_filename($filename);
    if (is_string($data) || !is_array($data)) {
        // Try again with the function input.
        $filename = $input;
        $data1 = advagg_get_hashes_from_filename($filename);
        if (is_string($data1) || !is_array($data1)) {
            return "{$data} {$data1}";
        }
        else {
            $data = $data1;
        }
    }
    // Check to see if the file exists.
    list($css_path, $js_path) = advagg_get_root_files_dir();
    if ($data[0] === 'css') {
        $uri = $css_path[0] . '/' . $filename;
    }
    elseif ($data[0] === 'js') {
        $uri = $js_path[0] . '/' . $filename;
    }
    if (file_exists($uri) && filesize($uri) >= 0) {
        // File does exist and filesize is bigger than zero, 307 to it.
        $uri = advagg_generate_location_uri($filename, $data[0], $data[3]);
        ++$redirect_counter;
        $uri .= '?redirect_counter=' . $redirect_counter;
        header('Location: ' . $uri, TRUE, 307);
        exit;
    }
    // Get lock so only one process will do the work.
    $lock_name = 'advagg_' . $filename;
    $uri = $GLOBALS['base_path'] . $_GET['q'];
    $created = FALSE;
    $files_to_save = array();
    if (variable_get('advagg_no_locks', ADVAGG_NO_LOCKS)) {
        $return = advagg_missing_create_file($filename, FALSE, $data);
        if (!is_array($return)) {
            return $return;
        }
        else {
            list($files_to_save, $type) = $return;
            $created = TRUE;
        }
    }
    elseif (lock_acquire($lock_name, 10) || $redirect_counter > 4) {
        if ($redirect_counter > 4) {
            $return = advagg_missing_create_file($filename, TRUE, $data);
        }
        else {
            $return = advagg_missing_create_file($filename, FALSE, $data);
        }
        lock_release($lock_name);
        if (!is_array($return)) {
            return $return;
        }
        else {
            list($files_to_save, $type) = $return;
            $created = TRUE;
        }
    }
    else {
        // Wait for another request that is already doing this work.
        // We choose to block here since otherwise the router item may not
        // be available in menu_execute_active_handler() resulting in a 404.
        lock_wait($lock_name, 10);
        if (file_exists($uri) && filesize($uri) > 0) {
            $type = $data[0];
            $created = TRUE;
        }
    }
    // Redirect and try again on failure.
    if (empty($created)) {
        $uri = advagg_generate_location_uri($filename, $data[0], $data[3]);
        ++$redirect_counter;
        $uri .= '?redirect_counter=' . $redirect_counter;
        header('Location: ' . $uri, TRUE, 307);
        exit;
    }
    if ($redirect_counter > 4) {
        watchdog('advagg', 'One of the alter hooks failed when generating this file: %uri. Thus this file was created without any alter hooks.', array(
            '%uri' => $uri,
        ), WATCHDOG_ERROR);
    }
    // Output file's contents if creating the file was successful.
    // This function will call exit.
    advagg_missing_send_saved_file($files_to_save, $uri, $created, $filename, $type, $redirect_counter, $data[3]);
}