Implements hook_js_alter().

This is a locking wrapper for locale_js_alter().

1 call to _advagg_locale_js_alter()
_advagg_locale_changed_files dans ./advagg.advagg.inc
If the locale module is enabled regenerate locale translations.

Fichier

./advagg.module, line 692

Code

function _advagg_locale_js_alter(&$js) {
    // If the variable is empty then get the latest variable from the database.
    $name = 'javascript_parsed';
    $parsed = variable_get($name, array());
    if (empty($parsed)) {
        $variables = array_map('unserialize', db_query('SELECT name, value FROM {variable} WHERE name = :name', array(
            ':name' => $name,
        ))->fetchAllKeyed());
        if (!empty($variables[$name])) {
            $GLOBALS['conf'][$name] = $variables[$name];
        }
    }
    // See if locale_js_alter() needs to do anything.
    $dir = 'public://' . variable_get('locale_js_directory', 'languages');
    $new_files = FALSE;
    // See if a rebuild of the translation file for the current language is
    // needed.
    if (!empty($parsed['refresh:' . $GLOBALS['language']->language])) {
        $new_files = TRUE;
    }
    // Check for new js source files.
    if (empty($new_files)) {
        foreach ($js as $item) {
            // If type is not set, default type in drupal_add_js() is file.
            if (isset($item['type']) && $item['type'] === 'file' && !in_array($item['data'], $parsed) && substr($item['data'], 0, strlen($dir)) != $dir) {
                $new_files = TRUE;
                break;
            }
        }
    }
    if (empty($new_files)) {
        // No new files to manage, just add in available i18n files.
        advagg_locale_js_add_translations($js, $dir);
        // Exit function.
        return;
    }
    $count = 0;
    while (!lock_acquire('locale_js_alter', 10)) {
        ++$count;
        // If we've waited over 3 times then skip.
        if ($count > 3) {
            lock_release('locale_js_alter');
            // Add in available i18n files.
            advagg_locale_js_add_translations($js, $dir);
            // Disable saving to the cache as translations might be missing.
            drupal_page_is_cacheable(FALSE);
            if (variable_get('advagg_cache_level', ADVAGG_CACHE_LEVEL) > 1) {
                $GLOBALS['conf']['advagg_cache_level'] = 0;
            }
            return;
        }
        // Wait for the lock to be available.
        lock_wait('locale_js_alter');
    }
    try {
        // Run the alter.
        locale_js_alter($js);
    } catch (PDOException $e) {
        // If it fails we don't care, javascript_parsed is either already written or
        // it will happen again on the next request.
        // Still log it if in development mode.
        if (variable_get('advagg_cache_level', ADVAGG_CACHE_LEVEL) < 0) {
            watchdog('advagg', 'Development Mode - Caught PDO Exception: <code>@info</code>', array(
                '@info' => $e,
            ));
        }
    }
    lock_release('locale_js_alter');
}