123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- /**
- * @file
- * Support for migrate module.
- *
- * With Migrate 2.4 or later, you can use the subfield syntax to set the title
- * and attributes:
- *
- * @code
- * $this->addFieldMapping('field_my_link', 'source_url');
- * $this->addFieldMapping('field_my_link:title', 'source_title');
- * $this->addFieldMapping('field_my_link:attributes', 'source_attributes');
- * @endcode
- *
- * With earlier versions of Migrate, you must pass an arguments array:
- *
- * @code
- * $link_args = array(
- * 'title' => array('source_field' => 'source_title'),
- * 'attributes' => array('source_field' => 'source_attributes'),
- * );
- * $this->addFieldMapping('field_my_link', 'source_url')
- * ->arguments($link_args);
- * @endcode
- */
- /**
- * Implements hook_migrate_api().
- */
- function link_migrate_api() {
- return array(
- 'api' => 2,
- 'field handlers' => array('MigrateLinkFieldHandler'),
- );
- }
- class MigrateLinkFieldHandler extends MigrateFieldHandler {
- public function __construct() {
- $this->registerTypes(array('link_field'));
- }
- static function arguments($title = NULL, $attributes = NULL, $language = NULL) {
- $arguments = array();
- if (!is_null($title)) {
- $arguments['title'] = $title;
- }
- if (!is_null($attributes)) {
- $arguments['attributes'] = $attributes;
- }
- if (!is_null($language)) {
- $arguments['language'] = $language;
- }
- return $arguments;
- }
- /**
- * Implementation of MigrateFieldHandler::fields().
- *
- * @param $type
- * The field type.
- * @param $instance
- * Instance info for the field.
- * @param Migration $migration
- * The migration context for the parent field. We can look at the mappings
- * and determine which subfields are relevant.
- * @return array
- */
- public function fields($type, $instance, $migration = NULL) {
- return array(
- 'title' => t('Subfield: The link title attribute'),
- 'attributes' => t('Subfield: The attributes for this link'),
- 'language' => t('Subfield: The language for the field'),
- );
- }
- public function prepare($entity, array $field_info, array $instance, array $values) {
- if (isset($values['arguments'])) {
- $arguments = $values['arguments'];
- unset($values['arguments']);
- }
- else {
- $arguments = array();
- }
- $language = $this->getFieldLanguage($entity, $field_info, $arguments);
- $values = array_filter($values);
- foreach ($values as $delta => $value) {
- $item = array();
- if (isset($arguments['title'])) {
- if (!is_array($arguments['title'])) {
- $item['title'] = $arguments['title'];
- }
- elseif (isset($arguments['title'][$delta])) {
- $item['title'] = $arguments['title'][$delta];
- }
- }
- if (isset($arguments['attributes'])) {
- if (is_array($arguments['attributes']) && isset($arguments['attributes'][$delta])) {
- $item['attributes'] = $arguments['attributes'][$delta];
- }
- else {
- $item['attributes'] = $arguments['attributes'];
- }
- }
- $item['url'] = $value;
- $return[$language][$delta] = $item;
- }
- return isset($return) ? $return : NULL;
- }
- }
|