diff --git a/modules/filter/filter.module b/modules/filter/filter.module index 9fe39a55f486712f47aa1077826263bd47c25649..bbfda2aaea5958aa3455d783f6fb31946af88838 100644 --- a/modules/filter/filter.module +++ b/modules/filter/filter.module @@ -368,17 +368,25 @@ function filter_modules_disabled($modules) { * @see filter_formats_reset() */ function filter_formats($account = NULL) { + global $language; $formats = &drupal_static(__FUNCTION__, array()); - // Statically cache all existing formats upfront. + // All available formats are cached for performance. if (!isset($formats['all'])) { - $formats['all'] = db_select('filter_format', 'ff') - ->addTag('translatable') - ->fields('ff') - ->condition('status', 1) - ->orderBy('weight') - ->execute() - ->fetchAllAssoc('format'); + if ($cache = cache_get("filter_formats:{$language->language}")) { + $formats['all'] = $cache->data; + } + else { + $formats['all'] = db_select('filter_format', 'ff') + ->addTag('translatable') + ->fields('ff') + ->condition('status', 1) + ->orderBy('weight') + ->execute() + ->fetchAllAssoc('format'); + + cache_set("filter_formats:{$language->language}", $formats['all']); + } } // Build a list of user-specific formats. @@ -395,11 +403,13 @@ function filter_formats($account = NULL) { } /** - * Resets the static cache of all text formats. + * Resets text format caches. * * @see filter_formats() */ function filter_formats_reset() { + cache_clear_all('filter_formats', 'cache', TRUE); + cache_clear_all('filter_list_format', 'cache', TRUE); drupal_static_reset('filter_list_format'); drupal_static_reset('filter_formats'); } @@ -625,9 +635,15 @@ function filter_list_format($format_id) { $filter_info = filter_get_filters(); if (!isset($filters['all'])) { - $result = db_query('SELECT * FROM {filter} ORDER BY weight, module, name'); - foreach ($result as $record) { - $filters['all'][$record->format][$record->name] = $record; + if ($cache = cache_get('filter_list_format')) { + $filters['all'] = $cache->data; + } + else { + $result = db_query('SELECT * FROM {filter} ORDER BY weight, module, name'); + foreach ($result as $record) { + $filters['all'][$record->format][$record->name] = $record; + } + cache_set('filter_list_format', $filters['all']); } }