function filter_format_save
Saves a text format object to the database.
Parameters
$format: A format object having the properties:
- format: A machine-readable name representing the ID of the text format to save. If this corresponds to an existing text format, that format will be updated; otherwise, a new format will be created.
- name: The title of the text format.
- status: (optional) An integer indicating whether the text format is enabled (1) or not (0). Defaults to 1.
- weight: (optional) The weight of the text format, which controls its placement in text format lists. If omitted, the weight is set to 0.
- filters: (optional) An associative, multi-dimensional array of filters
assigned to the text format, keyed by the name of each filter and using
the properties:
- weight: (optional) The weight of the filter in the text format. If omitted, either the currently stored weight is retained (if there is one), or the filter is assigned a weight of 10, which will usually put it at the bottom of the list.
- status: (optional) A boolean indicating whether the filter is enabled in the text format. If omitted, the filter will be disabled.
- settings: (optional) An array of configured settings for the filter. See hook_filter_info() for details.
Return value
7 calls to filter_format_save()
- FilterCRUDTestCase::testTextFormatCRUD in modules/
filter/ filter.test - Tests CRUD operations for text formats and filters.
- FilterFormatUpgradePathTestCase::testFilterFormatUpgrade in modules/
simpletest/ tests/ upgrade/ upgrade.filter.test - Test a successful upgrade.
- FilterSettingsTestCase::testFilterDefaults in modules/
filter/ filter.test - Tests explicit and implicit default settings for filters.
- filter_admin_format_form_submit in modules/
filter/ filter.admin.inc - Form submission handler for filter_admin_format_form().
- filter_install in modules/
filter/ filter.install - Implements hook_install().
File
-
modules/
filter/ filter.module, line 206
Code
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;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.