Saves a text format object to the database.
$format: A format object having the properties:
function filter_format_save($format) {
$format->name = trim($format->name);
$format->cache = _filter_format_is_cacheable($format);
if (!isset($format->status)) {
$format->status = 1;
}
if (!isset($format->weight)) {
$format->weight = 0;
}
// Insert or update the text format.
$return = db_merge('filter_format')
->key(array(
'format' => $format->format,
))
->fields(array(
'name' => $format->name,
'cache' => (int) $format->cache,
'status' => (int) $format->status,
'weight' => (int) $format->weight,
))
->execute();
// Programmatic saves may not contain any filters.
if (!isset($format->filters)) {
$format->filters = array();
}
$filter_info = filter_get_filters();
foreach ($filter_info as $name => $filter) {
// If the format does not specify an explicit weight for a filter, assign
// a default weight, either defined in hook_filter_info(), or the default of
// 0 by filter_get_filters()
if (!isset($format->filters[$name]['weight'])) {
$format->filters[$name]['weight'] = $filter['weight'];
}
$format->filters[$name]['status'] = isset($format->filters[$name]['status']) ? $format->filters[$name]['status'] : 0;
$format->filters[$name]['module'] = $filter['module'];
// If settings were passed, only ensure default settings.
if (isset($format->filters[$name]['settings'])) {
if (isset($filter['default settings'])) {
$format->filters[$name]['settings'] = array_merge($filter['default settings'], $format->filters[$name]['settings']);
}
}
else {
$format->filters[$name]['settings'] = isset($filter['default settings']) ? $filter['default settings'] : array();
}
$fields = array();
$fields['weight'] = $format->filters[$name]['weight'];
$fields['status'] = $format->filters[$name]['status'];
$fields['module'] = $format->filters[$name]['module'];
$fields['settings'] = serialize($format->filters[$name]['settings']);
db_merge('filter')
->key(array(
'format' => $format->format,
'name' => $name,
))
->fields($fields)
->execute();
}
if ($return == SAVED_NEW) {
module_invoke_all('filter_format_insert', $format);
}
else {
module_invoke_all('filter_format_update', $format);
// Explicitly indicate that the format was updated. We need to do this
// since if the filters were updated but the format object itself was not,
// the merge query above would not return an indication that anything had
// changed.
$return = SAVED_UPDATED;
// Clear the filter cache whenever a text format is updated.
cache_clear_all($format->format . ':', 'cache_filter', TRUE);
}
filter_formats_reset();
return $return;
}