Skip to content
Snippets Groups Projects
Commit 11c68ef7 authored by twistor's avatar twistor Committed by Chris Leppanen
Browse files

Issue #2333029 by twistor, MegaChriz: Extend mapping API to allow for defaults...

Issue #2333029 by twistor, MegaChriz: Extend mapping API to allow for defaults and multiple callbacks
parent 79918b8f
No related branches found
No related tags found
No related merge requests found
......@@ -236,11 +236,13 @@ class FeedsMapperTaxonomyTestCase extends FeedsMapperTestCase {
'term_search' => FEEDS_TAXONOMY_SEARCH_TERM_ID,
);
taxonomy_feeds_set_target(NULL, $entity, $target, $terms, $mapping);
$source = FeedsSource::instance('tmp', 0);
taxonomy_feeds_set_target($source, $entity, $target, $terms, $mapping);
$this->assertEqual(count($entity->field_tags[LANGUAGE_NONE]), 10);
// Test a second mapping with a bogus term id.
taxonomy_feeds_set_target(NULL, $entity, $target, array(1234), $mapping);
taxonomy_feeds_set_target($source, $entity, $target, array(1234), $mapping);
$this->assertEqual(count($entity->field_tags[LANGUAGE_NONE]), 10);
}
......@@ -284,14 +286,16 @@ class FeedsMapperTaxonomyTestCase extends FeedsMapperTestCase {
'term_search' => FEEDS_TAXONOMY_SEARCH_TERM_GUID,
);
taxonomy_feeds_set_target(NULL, $entity, $target, $guids, $mapping);
$source = FeedsSource::instance('tmp', 0);
taxonomy_feeds_set_target($source, $entity, $target, $guids, $mapping);
$this->assertEqual(count($entity->field_tags[LANGUAGE_NONE]), 10);
foreach ($entity->field_tags[LANGUAGE_NONE] as $delta => $values) {
$this->assertEqual($tids[$delta], $values['tid'], 'Correct term id foud.');
}
// Test a second mapping with a bogus term id.
taxonomy_feeds_set_target(NULL, $entity, $target, array(1234), $mapping);
taxonomy_feeds_set_target($source, $entity, $target, array(1234), $mapping);
$this->assertEqual(count($entity->field_tags[LANGUAGE_NONE]), 10);
foreach ($entity->field_tags[LANGUAGE_NONE] as $delta => $values) {
$this->assertEqual($tids[$delta], $values['tid'], 'Correct term id foud.');
......
......@@ -102,15 +102,26 @@ function feeds_tests_files_remote() {
}
/**
* Implements hook_feeds_processor_targets_alter().
* Implements hook_feeds_processor_targets().
*/
function feeds_tests_feeds_processor_targets_alter(&$targets, $entity_type, $bundle) {
function feeds_tests_feeds_processor_targets($entity_type, $bundle) {
$targets = array();
// Tests that old keys still work.
$targets['test_target_compat'] = array(
'name' => t('Old style target'),
'callback' => 'feeds_tests_mapper_set_target',
'summary_callback' => 'feeds_tests_mapper_summary',
'form_callback' => 'feeds_tests_mapper_form',
);
$targets['test_target'] = array(
'name' => t('Test Target'),
'description' => t('This is a test target.'),
'callback' => 'feeds_tests_mapper_set_target',
'summary_callback' => 'feeds_tests_mapper_summary',
'form_callback' => 'feeds_tests_mapper_form',
'summary_callbacks' => array('feeds_tests_mapper_summary', 'feeds_tests_mapper_summary_2'),
'form_callbacks' => array('feeds_tests_mapper_form', 'feeds_tests_mapper_form_2'),
'preprocess_callbacks' => array(array(new FeedsTestsPreprocess(), 'callback')),
);
$targets['test_unique_target'] = array(
......@@ -119,7 +130,34 @@ function feeds_tests_feeds_processor_targets_alter(&$targets, $entity_type, $bun
'callback' => 'feeds_tests_mapper_set_target',
'optional_unique' => TRUE,
'unique_callbacks' => array('feeds_tests_mapper_unique'),
'preprocess_callbacks' => array(
array('FeedsTestsPreprocess', 'callback'),
// Make sure that invalid callbacks are filtered.
'__feeds_tests_invalid_callback',
),
);
return $targets;
}
/**
* Implements hook_feeds_processor_targets_alter().
*/
function feeds_tests_feeds_processor_targets_alter(array &$targets, $entity_type, $bundle) {
if (!isset($targets['test_target'])) {
return;
}
$targets['test_target']['description'] = t('The target description was altered.');
}
/**
* Preprocess callback for test_target.
*
* @see feeds_tests_feeds_processor_targets()
*/
function feeds_tests_preprocess_callback(FeedsSource $source, $target_item, $target, array &$mapping) {
$mapping['required_value'] = TRUE;
}
/**
......@@ -127,7 +165,11 @@ function feeds_tests_feeds_processor_targets_alter(&$targets, $entity_type, $bun
*
* @see my_module_set_target()
*/
function feeds_tests_mapper_set_target($source, $entity, $target, $value, $mapping) {
function feeds_tests_mapper_set_target(FeedsSource $source, $entity, $target, array $values, array $mapping) {
if (empty($mapping['required_value'])) {
trigger_error('The required value was not set.', E_USER_ERROR);
}
$entity->body['und'][0]['value'] = serialize($mapping);
}
......@@ -136,7 +178,7 @@ function feeds_tests_mapper_set_target($source, $entity, $target, $value, $mappi
*
* @see my_module_summary_callback()
*/
function feeds_tests_mapper_summary($mapping, $target, $form, $form_state) {
function feeds_tests_mapper_summary(array $mapping, $target, array $form, array $form_state) {
$options = array(
'option1' => t('Option 1'),
'option2' => t('Another Option'),
......@@ -171,10 +213,20 @@ function feeds_tests_mapper_summary($mapping, $target, $form, $form_state) {
return drupal_render($list);
}
/**
* Provides a second summary callback.
*
* @see my_module_summary_callback()
*/
function feeds_tests_mapper_summary_2(array $mapping, $target, array $form, array $form_state) {
$mapping += array('second_value' => '');
return t('Second summary: @value', array('@value' => $mapping['second_value']));
}
/**
* Provides the form with mapper settings.
*/
function feeds_tests_mapper_form($mapping, $target, $form, $form_state) {
function feeds_tests_mapper_form(array $mapping, $target, array $form, array $form_state) {
$mapping += array(
'checkbox' => FALSE,
'textfield' => '',
......@@ -214,10 +266,23 @@ function feeds_tests_mapper_form($mapping, $target, $form, $form_state) {
);
}
/**
* Provides a second settings form.
*/
function feeds_tests_mapper_form_2(array $mapping, $target, array $form, array $form_state) {
return array(
'second_value' => array(
'#type' => 'textfield',
'#title' => t('The second callback value'),
'#default_value' => !empty($mapping['second_value']) ? $mapping['second_value'] : '',
),
);
}
/**
* Callback for unique_callbacks for test_target mapper.
*
* @see feeds_tests_feeds_processor_targets_alter()
* @see feeds_tests_feeds_processor_targets()
*/
function feeds_tests_mapper_unique(FeedsSource $source, $entity_type, $bundle, $target, array $values) {
$query = new EntityFieldQuery();
......@@ -231,3 +296,19 @@ function feeds_tests_mapper_unique(FeedsSource $source, $entity_type, $bundle, $
return key($result[$entity_type]);
}
}
/**
* Helper class to ensure callbacks can be objects.
*/
class FeedsTestsPreprocess {
/**
* Preprocess callback for test_target.
*
* @see feeds_tests_feeds_processor_targets()
*/
public static function callback(FeedsSource $source, $target_item, $target, array &$mapping) {
$mapping['required_value'] = TRUE;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment