View source
<?php
function filter_features_api() {
return array(
'filter' => array(
'name' => t('Filter formats'),
'default_hook' => 'filter_default_formats',
'default_file' => FEATURES_DEFAULTS_INCLUDED,
'feature_source' => TRUE,
),
);
}
function filter_features_export($data, &$export, $module_name = '') {
$export['dependencies']['features'] = 'features';
$formats = _filter_get_formats();
foreach ($formats as $format) {
if (in_array($format['name'], $data)) {
$export['features']['filter'][$format['name']] = $format['name'];
foreach ($format['filters'] as $filter) {
$export['dependencies'][$filter['module']] = $filter['module'];
}
}
}
$pipe = array();
return $pipe;
}
function filter_features_export_options() {
$options = array();
foreach (_filter_get_formats() as $format) {
$options[$format['name']] = $format['name'];
}
return $options;
}
function filter_features_export_render($module, $data) {
$code = array();
$code[] = ' $formats = array();';
$code[] = '';
$formats = _filter_get_formats();
foreach ($formats as $format) {
if (in_array($format['name'], $data)) {
$format_export = features_var_export($format, ' ');
$format_identifier = features_var_export($format['name']);
$code[] = " // Exported format: {$format['name']}";
$code[] = " \$formats[{$format_identifier}] = {$format_export};";
$code[] = "";
}
}
$code[] = ' return $formats;';
$code = implode("\n", $code);
return array(
'filter_default_formats' => $code,
);
}
function filter_features_revert($module) {
return filter_features_rebuild($module);
}
function filter_features_rebuild($module) {
if ($defaults = features_get_default('filter', $module)) {
foreach ($defaults as $format) {
_filter_features_update($format);
}
}
}
function _filter_get_formats() {
$formats = array();
$roles = _features_get_roles();
$result = db_query("SELECT * FROM {filter_formats}");
while ($row = db_fetch_object($result)) {
$format_roles = array();
foreach ($roles as $name => $role) {
if (strstr($row->roles, ',' . $role['rid'] . ',')) {
$format_roles[$name] = $name;
}
}
$formats[$row->format] = array(
'name' => $row->name,
'roles' => $format_roles,
'filters' => array(),
);
foreach (_filter_list_format($row->format, TRUE) as $filter) {
$formats[$row->format]['filters'][] = array(
'module' => $filter->module,
'delta' => $filter->delta,
'weight' => $filter->weight,
);
}
}
return $formats;
}
function _filter_list_format($format, $reset = FALSE) {
static $filters = array();
if (!isset($filters[$format]) || $reset) {
$result = db_query("SELECT * FROM {filters} WHERE format = %d ORDER BY weight, module, delta", $format);
if (db_affected_rows($result) == 0 && !db_result(db_query("SELECT 1 FROM {filter_formats} WHERE format = %d", $format))) {
$filters[$format] = filter_list_format(variable_get('filter_default_format', 1));
}
else {
$filters[$format] = array();
while ($filter = db_fetch_object($result)) {
$list = module_invoke($filter->module, 'filter', 'list');
if (isset($list) && is_array($list) && isset($list[$filter->delta])) {
$filter->name = $list[$filter->delta];
$filters[$format][$filter->module . '/' . $filter->delta] = $filter;
}
}
}
}
return $filters[$format];
}
function _filter_features_update($format) {
$format_id = db_result(db_query("SELECT format FROM {filter_formats} WHERE name = '%s'", $format['name']));
$roles = _features_get_roles();
$format_rids = array();
foreach ($format['roles'] as $role_name) {
if (!isset($roles[$role_name])) {
$record = array(
'name' => $role_name,
);
drupal_write_record('role', $record);
$roles[$role_name]['rid'] = $record['rid'];
$roles[$role_name]['perm'] = array();
}
if (isset($roles[$role_name])) {
$format_rids[] = $roles[$role_name]['rid'];
}
}
if ($format_id && $format_id == variable_get('filter_default_format', 1)) {
$format['roles'] = ',' . implode(',', array_keys(user_roles())) . ',';
}
else {
$format['roles'] = ',' . implode(',', $format_rids) . ',';
}
if ($format_id) {
$format['format'] = $format_id;
drupal_write_record('filter_formats', $format, 'format');
}
else {
drupal_write_record('filter_formats', $format);
}
if ($format['format']) {
db_query("DELETE FROM {filters} WHERE format = %d", $format['format']);
foreach ($format['filters'] as $filter) {
$filter['format'] = $format['format'];
drupal_write_record('filters', $filter);
}
}
}