diff --git a/src/Plugin/migrate/source/d5/FilterFormat.php b/src/Plugin/migrate/source/d5/FilterFormat.php new file mode 100644 index 0000000000000000000000000000000000000000..dca89013e2a2d7554e3daa917ba1e33d473bedcd --- /dev/null +++ b/src/Plugin/migrate/source/d5/FilterFormat.php @@ -0,0 +1,99 @@ +<?php + +namespace Drupal\migrate_drupal_d5\Plugin\migrate\source\d5; + +use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase; +use Drupal\migrate\Row; + +/** + * Drupal 5 filter source from database. + * + * For available configuration keys, refer to the parent classes. + * + * @see \Drupal\migrate\Plugin\migrate\source\SqlBase + * @see \Drupal\migrate\Plugin\migrate\source\SourcePluginBase + * @see \Drupal\filter\Plugin\migrate\source\d6\FilterFormat + * + * @MigrateSource( + * id = "d5_filter_format", + * source_module = "filter" + * ) + */ +class FilterFormat extends DrupalSqlBase { + + /** + * {@inheritdoc} + */ + public function query() { + return $this->select('filter_formats', 'f')->fields('f'); + } + + /** + * {@inheritdoc} + */ + public function fields() { + return [ + 'format' => $this->t('Format ID.'), + 'name' => $this->t('The name of the format.'), + 'cache' => $this->t('Whether the format is cacheable.'), + 'roles' => $this->t('The role IDs which can use the format.'), + 'filters' => $this->t('The filters configured for the format.'), + ]; + } + + /** + * {@inheritdoc} + */ + public function prepareRow(Row $row) { + $filters = []; + $roles = $row->getSourceProperty('roles'); + $row->setSourceProperty('roles', array_values(array_filter(explode(',', $roles)))); + $format = $row->getSourceProperty('format'); + // Find filters for this row. + $results = $this->select('filters', 'f') + ->fields('f', ['module', 'delta', 'weight']) + ->condition('format', $format) + ->execute(); + foreach ($results as $raw_filter) { + $module = $raw_filter['module']; + $delta = $raw_filter['delta']; + $filter = [ + 'module' => $module, + 'delta' => $delta, + 'weight' => $raw_filter['weight'], + 'settings' => [], + ]; + // Load the filter settings for the filter module, modules can use + // hook_migration_d6_filter_formats_prepare_row() to add theirs. + if ($raw_filter['module'] == 'filter') { + if (!$delta) { + if ($setting = $this->variableGet("allowed_html_$format", NULL)) { + $filter['settings']['allowed_html'] = $setting; + } + if ($setting = $this->variableGet("filter_html_help_$format", NULL)) { + $filter['settings']['filter_html_help'] = $setting; + } + if ($setting = $this->variableGet("filter_html_nofollow_$format", NULL)) { + $filter['settings']['filter_html_nofollow'] = $setting; + } + } + elseif ($delta == 3 && ($setting = $this->variableGet("filter_url_length_$format", NULL))) { + $filter['settings']['filter_url_length'] = $setting; + } + } + $filters[] = $filter; + } + + $row->setSourceProperty('filters', $filters); + return parent::prepareRow($row); + } + + /** + * {@inheritdoc} + */ + public function getIds() { + $ids['format']['type'] = 'integer'; + return $ids; + } + +}