features.filter.inc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. /**
  3. * Implements hook_features_api().
  4. */
  5. function filter_features_api() {
  6. return array(
  7. 'filter' => array(
  8. 'name' => t('Text formats'),
  9. 'default_hook' => 'filter_default_formats',
  10. 'default_file' => FEATURES_DEFAULTS_INCLUDED,
  11. 'feature_source' => TRUE
  12. ),
  13. );
  14. }
  15. /**
  16. * Implements hook_features_export_options().
  17. */
  18. function filter_features_export_options() {
  19. $options = array();
  20. foreach (filter_formats() as $format => $info) {
  21. $options[$format] = $info->name;
  22. }
  23. return $options;
  24. }
  25. /**
  26. * Implements hook_features_export().
  27. */
  28. function filter_features_export($data, &$export, $module_name = '') {
  29. // The filter_default_formats() hook integration is provided by the
  30. // features module so we need to add it as a dependency.
  31. $export['dependencies']['features'] = 'features';
  32. $filter_info = filter_get_filters();
  33. foreach ($data as $name) {
  34. if ($format = features_filter_format_load($name)) {
  35. // Add format to exports
  36. $export['features']['filter'][$format->format] = $format->format;
  37. // Iterate through filters and ensure each filter's module is included as a dependency
  38. foreach (array_keys($format->filters) as $name) {
  39. if (isset($filter_info[$name], $filter_info[$name]['module'])) {
  40. $module = $filter_info[$name]['module'];
  41. $export['dependencies'][$module] = $module;
  42. }
  43. }
  44. }
  45. }
  46. $pipe = array();
  47. return $pipe;
  48. }
  49. /**
  50. * Implements hook_features_export_render().
  51. */
  52. function filter_features_export_render($module, $data, $export = NULL) {
  53. $code = array();
  54. $code[] = ' $formats = array();';
  55. $code[] = '';
  56. foreach ($data as $name) {
  57. if ($format = features_filter_format_load($name)) {
  58. $format_export = features_var_export($format, ' ');
  59. $format_identifier = features_var_export($format->format);
  60. $code[] = " // Exported format: {$format->name}.";
  61. $code[] = " \$formats[{$format_identifier}] = {$format_export};";
  62. $code[] = "";
  63. }
  64. }
  65. $code[] = ' return $formats;';
  66. $code = implode("\n", $code);
  67. return array('filter_default_formats' => $code);
  68. }
  69. /**
  70. * Implements hook_features_revert().
  71. */
  72. function filter_features_revert($module) {
  73. return filter_features_rebuild($module);
  74. }
  75. /**
  76. * Implements hook_features_rebuild().
  77. */
  78. function filter_features_rebuild($module) {
  79. if ($defaults = features_get_default('filter', $module)) {
  80. foreach ($defaults as $format) {
  81. $format = (object) $format;
  82. filter_format_save($format);
  83. }
  84. }
  85. }
  86. /**
  87. * Load a filter format by its name.
  88. */
  89. function features_filter_format_load($name) {
  90. // Use machine name for retrieving the format if available.
  91. $query = db_select('filter_format');
  92. $query->fields('filter_format');
  93. $query->condition('format', $name);
  94. // Retrieve filters for the format and attach.
  95. if ($format = $query->execute()->fetchObject()) {
  96. $format->filters = array();
  97. foreach (filter_list_format($format->format) as $filter) {
  98. if (!empty($filter->status)) {
  99. $format->filters[$filter->name]['weight'] = $filter->weight;
  100. $format->filters[$filter->name]['status'] = $filter->status;
  101. $format->filters[$filter->name]['settings'] = $filter->settings;
  102. }
  103. }
  104. return $format;
  105. }
  106. return FALSE;
  107. }