Retrieves a list of text formats, ordered by weight.
$account: (optional) If provided, only those formats that are allowed for this user account will be returned. All formats will be returned otherwise.
An array of text format objects, keyed by the format ID and ordered by weight.
function filter_formats($account = NULL) {
$language_interface = language(LANGUAGE_TYPE_INTERFACE);
$formats =& drupal_static(__FUNCTION__, array());
// All available formats are cached for performance.
if (!isset($formats['all'])) {
if ($cache = cache()
->get("filter_formats:{$language_interface->langcode}")) {
$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_interface->langcode}", $formats['all'], CacheBackendInterface::CACHE_PERMANENT, array(
'filter_formats' => TRUE,
));
}
}
// Build a list of user-specific formats.
if (isset($account) && !isset($formats['user'][$account->uid])) {
$formats['user'][$account->uid] = array();
foreach ($formats['all'] as $format) {
if (filter_access($format, $account)) {
$formats['user'][$account->uid][$format->format] = $format;
}
}
}
return isset($account) ? $formats['user'][$account->uid] : $formats['all'];
}