function jqp_rebuild_cache in jQuery Plugin Handler (JQP) 6.2
Rebuilds the javascript libraries cache.
It registers both all libraries defined in library info files, as well as libraries defined in hook_jqp.
Parameters
$reset: If true, all javascript libraries are completely reindexed. Otherwise only libraries which havent been costumized by administrators are reindexed.
2 calls to jqp_rebuild_cache()
- jqp_confirm_form_submit in ./
jqp.admin.inc - Submit handler for jqp_confirm_form().
- jqp_status_page in ./
jqp.admin.inc - Page callback for admin/build/jqp.
File
- ./
jqp.module, line 373 - Used to register and load javascript libraries and plugins from a cetral point
Code
function jqp_rebuild_cache($reset = FALSE) {
cache_clear_all('jqp', 'cache');
// Set defaults for library info
$defaults = array(
'description' => '',
'version' => NULL,
);
// The following code is merely copied from drupal_system_listing.
// Added the file_directory to be a possible location for the library directory.
$profile = variable_get('install_profile', 'default');
$directory = 'js_libraries';
$config = conf_path();
$file_dir = file_directory_path();
$js_libraries = array();
$searchdir = array(
"{$directory}",
"sites/all/{$directory}",
"profiles/{$profile}/{$directory}",
"{$config}/{$directory}",
"{$file_dir}/{$directory}",
);
// Get current list of libraries registerd by dot-info files
foreach ($searchdir as $dir) {
if (file_exists($dir)) {
$js_libraries = array_merge($js_libraries, file_scan_directory($dir, '\\.info$', array(
'.',
'..',
'CVS',
), 0, TRUE, 'name', 0));
}
}
// Get all libraries registerd by modules
$module_libraries = module_invoke_all('jqp');
if (is_array($module_libraries)) {
foreach ($module_libraries as $module_library_name => $module_library) {
$js_libraries[$module_library_name] = (object) ($module_library + array(
'type' => 'javascript library',
));
}
}
// Extract current files from database.
system_get_files_database($js_libraries, 'javascript library');
ksort($js_libraries);
foreach ($js_libraries as $name => $library) {
$versions_changed = array();
// Look for the info file.
$library->info = drupal_parse_info_file(dirname($library->filename) . '/' . $library->name . '.info');
// If the library doesn't provide info, we're dealing with an module registered library.
// We'll create the info manually.
if (empty($library->info)) {
$info = clone $library;
unset($info->type, $info->info, $js_libraries[$name]->scripts, $js_libraries[$name]->styles);
$js_libraries[$name]->info = (array) $info;
$js_libraries[$name]->name = $name;
$js_libraries[$name]->filename = "{$name}-module-jqp";
}
// Merge in defaults and save.
$js_libraries[$name]->info = $library->info + $defaults;
// Used to merge saved data with loaded data
$old_library = js_library_load($name);
// Loop trough each file type
foreach (array(
'stylesheets',
'scripts',
) as $type) {
// Continue if no data is found for this file type
if (empty($js_libraries[$name]->info[$type])) {
continue;
}
$files = array();
// Get the data of each file type per version
foreach ($js_libraries[$name]->info[$type] as $version => $data) {
// Check whether this version have been madified and saved before
if (isset($old_library->info[$type][$version]['changed']) && $reset === FALSE) {
$versions_changed[] = $version;
}
foreach ($data as $file_name) {
$dirname = file_exists($js_libraries[$name]->filename) ? dirname($js_libraries[$name]->filename) : '';
$files[$version][$file_name] = $dirname ? "{$dirname}/{$file_name}" : $file_name;
// Let's store the basepath of the dot-info file
$library->info['base'] = $dirname ? $dirname : NULL;
}
}
$js_libraries[$name]->info[$type] = $files;
}
if (!empty($versions_changed)) {
foreach ($versions_changed as $version_changed) {
if (isset($js_libraries[$name]->info['scripts'][$version_changed])) {
$js_libraries[$name]->info['scripts'][$version_changed] = $old_library->info['scripts'][$version_changed];
}
if (isset($js_libraries[$name]->info['stylesheets'][$version_changed])) {
$js_libraries[$name]->info['stylesheets'][$version_changed] = $old_library->info['stylesheets'][$version_changed];
}
}
}
// Invoke hook_system_info_alter() to give installed modules a chance to
// modify the data in the .info files if necessary.
drupal_alter('system_info', $js_libraries[$name]->info, $js_libraries[$name]);
// Update the contents of the system table:
if (isset($library->status) || isset($library->old_filename) && $library->old_filename != $library->filename) {
db_query("UPDATE {system} SET info = '%s', name = '%s', filename = '%s', bootstrap = %d WHERE filename = '%s'", serialize($js_libraries[$name]->info), $library->name, $library->filename, $bootstrap, $library->old_filename);
}
else {
// This is a new library.
db_query("INSERT INTO {system} (name, info, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d)", $name, serialize($js_libraries[$name]->info), 'javascript library', $js_libraries[$name]->filename, 0, 0, $bootstrap);
}
}
return $js_libraries;
}