? .git ? .gitignore ? 433384-3_feedapi_node_independent.patch ? 433384-4_feedapi_node_independent.patch ? 433384-5_feedapi_node_independent.patch Index: feedapi_mapper.api.php =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/Attic/feedapi_mapper.api.php,v retrieving revision 1.1.2.3 diff -u -p -r1.1.2.3 feedapi_mapper.api.php --- feedapi_mapper.api.php 9 May 2009 14:28:33 -0000 1.1.2.3 +++ feedapi_mapper.api.php 14 Jul 2009 17:14:52 -0000 @@ -60,8 +60,10 @@ * @param $op * Operation to perform. * Value of $op is one of 'describe', 'list' or 'map'. + * @param $feed_node + * Drupal node object that is the feed node. * @param $node - * Drupal node object. + * Drupal node object that is the feed item to perform the mapping on. * @param $feed_element * Parameter only present on $op = 'map' * Element of the feed to map from. A simple data type (number, string) or a @@ -76,12 +78,19 @@ * $op = 'list'. * */ -function hook_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function hook_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // This mapper only operates on feedapi_node processors. If there is no + // content type for the feed item nodes, abort. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + if ($op == 'describe') { return t('Maps a string or an array of strings to myfields.'); } else if ($op == 'list') { - if ($myfields = myfields_get_available_fields()) { + if ($myfields = myfields_get_available_fields($node_type)) { return $myfields; } return FALSE; Index: feedapi_mapper.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/feedapi_mapper.module,v retrieving revision 1.1.2.7.2.30 diff -u -p -r1.1.2.7.2.30 feedapi_mapper.module --- feedapi_mapper.module 14 Jul 2009 01:25:16 -0000 1.1.2.7.2.30 +++ feedapi_mapper.module 14 Jul 2009 17:14:53 -0000 @@ -125,7 +125,7 @@ function theme_feedapi_mapper_form($form drupal_render($form['add']), ); - $form['mapping']['table']['#value'] = theme('table', array(t('Feed item'), t('Node')), $rows); + $form['mapping']['table']['#value'] = theme('table', array(t('Source'), t('Target')), $rows); $output .= drupal_render($form); @@ -154,8 +154,7 @@ function feedapi_mapper_access_mapper($n else { return FALSE; } - $settings = feedapi_get_settings($node_type); - if (!empty($settings['processors']['feedapi_node']['enabled'])) { + if (feedapi_enabled_type($node_type)) { return TRUE; } } @@ -183,7 +182,7 @@ function _feedapi_mapper_map(&$node) { $element_path = unserialize($element_path); // Get the feed item element on $element_path and pass it into the mapping function. $feed_item_element = _feedapi_mapper_get_feed_item_element($element_path, $feed_item); - $node = call_user_func($field[0] .'_feedapi_mapper', 'map', $node, $feed_item_element, $field[1], isset($field[2]) ? $field[2] : NULL); + $node = call_user_func($field[0] .'_feedapi_mapper', 'map', $feed_node, $node, $feed_item_element, $field[1], isset($field[2]) ? $field[2] : NULL); } } } @@ -248,7 +247,7 @@ function feedapi_mapper_page($node) { } $names = node_get_types('names'); drupal_set_title(check_plain($node->title ? $node->title : $names[$node->type])); - $output = t('Map feed item elements to feed item node fields.'); + $output = t('Map feed elements of feed to feed items.'); $output .= drupal_get_form('feedapi_mapper_form', $node); return $output; } @@ -256,21 +255,14 @@ function feedapi_mapper_page($node) { /** * Mapping form. */ -function feedapi_mapper_form($form_state, $node) { - // Get fields of node type with available feed element mappers. - if (isset($node->feed->settings['processors']['feedapi_node']['content_type'])) { - $settings = $node->feed->settings; - } - else { - $settings = feedapi_get_settings($node->type); - } - $feed_item_type = $settings['processors']['feedapi_node']['content_type']; - $field_map = _feedapi_mapper_get_field_mappers($feed_item_type); +function feedapi_mapper_form($form_state, $feed_node) { + + $field_map = _feedapi_mapper_get_field_mappers($feed_node); // Get elements of feed items. $elements = array(); - if ($merged_item = _feedapi_mapper_get_items_merged($node)) { - $merged_item = _feedapi_mapper_simplify_raw($merged_item, $node->feed->parsers); + if ($merged_item = _feedapi_mapper_get_items_merged($feed_node)) { + $merged_item = _feedapi_mapper_simplify_raw($merged_item, $feed_node->feed->parsers); $elements = _feedapi_mapper_get_feed_elements($merged_item); } $elements = array_merge($elements, _feedapi_mapper_get_standard_elements()); @@ -278,11 +270,11 @@ function feedapi_mapper_form($form_state $feed_map = array_flip($elements); // Load stored mapping. - if (!$mapping = _feedapi_mapper_load_mapping($node->nid)) { - $mapping = _feedapi_mapper_load_mapping($node->type); + if (!$mapping = _feedapi_mapper_load_mapping($feed_node->nid)) { + $mapping = _feedapi_mapper_load_mapping($feed_node->type); } - $form['#node'] = $node; + $form['#node'] = $feed_node; $form['#feed_map'] = $feed_map; $form['#field_map'] = $field_map; @@ -327,10 +319,10 @@ function feedapi_mapper_form($form_state '#type' => 'submit', '#value' => t('Add'), ); - + // Print descriptions for available mapping targets. // This is done by iterating through $field_map and extracting module names from it. - $descriptions = _feedapi_mapper_get_field_mappers_descriptions($feed_item_type); + $descriptions = _feedapi_mapper_get_field_mappers_descriptions($feed_node); $descriptions_filtered = array(); foreach ($field_map as $key => $target) { if (is_array($target)) { @@ -441,6 +433,20 @@ function feedapi_mapper_delete_mapping($ } /** + * Helper function - determines content type of feed _item_. + */ +function feedapi_mapper_get_item_node_type($feed_node) { + $settings = feedapi_get_settings($feed_node->type, $feed_node->vid); + if (!isset($settings['processors']['feedapi_node']['content_type'])) { + return FALSE; + } + if (isset($settings['processors']['feedapi_node']['enabled']) && $settings['processors']['feedapi_node']['enabled'] === 0) { + return FALSE; + } + return $settings['processors']['feedapi_node']['content_type']; +} + +/** * Retrieve mapping from db. * @param $param * node id or node type @@ -508,9 +514,9 @@ function _feedapi_mapper_simplify_raw($i /** * Returns all feed items on node as one merged item. */ -function _feedapi_mapper_get_items_merged($node) { - if ($node->feed) { - $feed = _feedapi_parse($node->feed); +function _feedapi_mapper_get_items_merged($feed_node) { + if ($feed_node->feed) { + $feed = _feedapi_parse($feed_node->feed); // Convert items to array. $items = _feedapi_mapper_obj2array($feed->items); // Merge items to one item. @@ -703,15 +709,14 @@ function _feedapi_mapper_array_merge_rec * @return * Array of fields that are mappable for this content type. */ -function _feedapi_mapper_get_field_mappers($node_type) { - $node = new stdClass(); - $node->type = $node_type; +function _feedapi_mapper_get_field_mappers($feed_node) { // Load all available mappers and create an array of fields available as mapping target. _feedapi_mapper_load_mappers(); $modules = module_implements('feedapi_mapper'); + $field_mappers = array(); foreach ($modules as $module) { - if ($fields = module_invoke($module, 'feedapi_mapper', 'list', $node)) { + if ($fields = module_invoke($module, 'feedapi_mapper', 'list', $feed_node)) { foreach ($fields as $field_name => $sub_fields) { $field_label = is_string($sub_fields) ? $sub_fields : $field_name; $field_category = t('Map to @field (@module)', array('@field' => $field_label, '@module' => $module)); @@ -740,15 +745,13 @@ function _feedapi_mapper_get_field_mappe * 'field_name_b' => array(...), * ); */ -function _feedapi_mapper_get_field_mappers_descriptions($node_type) { - $node = new stdClass(); - $node->type = $node_type; +function _feedapi_mapper_get_field_mappers_descriptions($feed_node) { // Load all available mappers and create an array of fields available as mapping target. _feedapi_mapper_load_mappers(); $modules = module_implements('feedapi_mapper'); $descriptions = array(); foreach ($modules as $module) { - if ($description = module_invoke($module, 'feedapi_mapper', 'describe', $node)) { + if ($description = module_invoke($module, 'feedapi_mapper', 'describe', $feed_node)) { $descriptions[$module] = $description; } } Index: mappers/feedapi_mapper_content.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_content.inc,v retrieving revision 1.1.2.4.2.5 diff -u -p -r1.1.2.4.2.5 feedapi_mapper_content.inc --- mappers/feedapi_mapper_content.inc 25 Jun 2009 17:14:22 -0000 1.1.2.4.2.5 +++ mappers/feedapi_mapper_content.inc 14 Jul 2009 17:14:53 -0000 @@ -6,13 +6,19 @@ * * @see hook_feedapi_mapper() */ -function content_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function content_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + // Test for the node field that we would like to map to. if ($op == 'describe') { return t('Maps a string or a number to this CCK field.'); } else if ($op == 'list') { - $info = content_types($node->type); + $info = content_types($node_type); $fields = array(); if (@count($info['fields'])) { foreach ($info['fields'] as $field_name => $field) { Index: mappers/feedapi_mapper_date.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_date.inc,v retrieving revision 1.1.2.3.2.10 diff -u -p -r1.1.2.3.2.10 feedapi_mapper_date.inc --- mappers/feedapi_mapper_date.inc 14 May 2009 21:25:52 -0000 1.1.2.3.2.10 +++ mappers/feedapi_mapper_date.inc 14 Jul 2009 17:14:53 -0000 @@ -6,7 +6,13 @@ * * @see hook_feedapi_mapper() */ -function date_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function date_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + switch ($op) { case 'describe': // Describe what we are doing in this mapper. This shows up as help text on the mapping page. @@ -27,7 +33,7 @@ function date_feedapi_mapper($op, $node, $sub_fields['all_day'] = 'All Day'; $sub_fields['timezone'] = 'Timezone'; - $info = content_types($node->type); + $info = content_types($node_type); $fields = array(); if (@count($info['fields'])) { foreach ($info['fields'] as $field_name => $field) { Index: mappers/feedapi_mapper_emimage.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_emimage.inc,v retrieving revision 1.1.2.3 diff -u -p -r1.1.2.3 feedapi_mapper_emimage.inc --- mappers/feedapi_mapper_emimage.inc 20 Apr 2009 13:31:04 -0000 1.1.2.3 +++ mappers/feedapi_mapper_emimage.inc 14 Jul 2009 17:14:53 -0000 @@ -6,13 +6,19 @@ * * @see hook_feedapi_mapper() */ -function emimage_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function emimage_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + switch ($op) { case 'describe': // Describe what we are doing in this mapper. This shows up as help text on the mapping page. return t('Maps a link to a image to the Embedded Media Image CCK field. Use the original_url element for mapping to this field.'); case 'list': - $info = content_types($node->type); + $info = content_types($node_type); $fields = array(); if (@count($info['fields'])) { foreach ($info['fields'] as $field_name => $field) { Index: mappers/feedapi_mapper_emvideo.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_emvideo.inc,v retrieving revision 1.1.2.3 diff -u -p -r1.1.2.3 feedapi_mapper_emvideo.inc --- mappers/feedapi_mapper_emvideo.inc 20 Apr 2009 13:31:04 -0000 1.1.2.3 +++ mappers/feedapi_mapper_emvideo.inc 14 Jul 2009 17:14:53 -0000 @@ -6,13 +6,19 @@ * * @see hook_feedapi_mapper() */ -function emvideo_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function emvideo_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + switch ($op) { case 'describe': // Describe what we are doing in this mapper. This shows up as help text on the mapping page. return t('Maps a link to a video to the Embedded Media Video CCK field. Use the original_url element for mapping to this field.'); case 'list': - $info = content_types($node->type); + $info = content_types($node_type); $fields = array(); if (@count($info['fields'])) { foreach ($info['fields'] as $field_name => $field) { Index: mappers/feedapi_mapper_link.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_link.inc,v retrieving revision 1.1.2.4.2.4 diff -u -p -r1.1.2.4.2.4 feedapi_mapper_link.inc --- mappers/feedapi_mapper_link.inc 20 Apr 2009 16:01:34 -0000 1.1.2.4.2.4 +++ mappers/feedapi_mapper_link.inc 14 Jul 2009 17:14:53 -0000 @@ -6,13 +6,19 @@ * * @see hook_feedapi_mapper() */ -function link_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function link_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + // Test for the node field that we would like to map to. if ($op == 'describe') { return t('Maps a URL to this link CCK field.'); } else if ($op == 'list') { - $info = content_types($node->type); + $info = content_types($node_type); $fields = array(); if (@count($info['fields'])) { foreach ($info['fields'] as $field_name => $field) { Index: mappers/feedapi_mapper_location.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_location.inc,v retrieving revision 1.1.2.4 diff -u -p -r1.1.2.4 feedapi_mapper_location.inc --- mappers/feedapi_mapper_location.inc 13 Jul 2009 21:29:25 -0000 1.1.2.4 +++ mappers/feedapi_mapper_location.inc 14 Jul 2009 17:14:53 -0000 @@ -6,13 +6,19 @@ * * @see hook_feedapi_mapper() */ -function location_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function location_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + if ($op == 'describe') { return t('Maps pairs of geographic coordinates to the location of a node.'); } else if ($op == 'list') { $sub_fields = array('latitude' => t('Latitude'), 'longitude' => t('Longitude')); - $info = content_types($node->type); + $info = content_types($node_type); $fields = array(); if (@count($info['fields'])) { foreach ($info['fields'] as $field_name => $field) { Index: mappers/feedapi_mapper_node.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_node.inc,v retrieving revision 1.1.2.5 diff -u -p -r1.1.2.5 feedapi_mapper_node.inc --- mappers/feedapi_mapper_node.inc 19 Jun 2009 16:52:06 -0000 1.1.2.5 +++ mappers/feedapi_mapper_node.inc 14 Jul 2009 17:14:53 -0000 @@ -12,7 +12,13 @@ * - if default mapping is removed, nothing is mapped to target (= e. g. body * stays empty) */ -function node_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function node_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + if ($op == 'describe') { return t('Maps a feed element to the title, created date, published state or body of a node. Note that standard field mapping by FeedAPI still applies. For example if there is no feed element mapped to the node body you will still find the description in node body because that is how FeedAPI stores nodes.'); } Index: mappers/feedapi_mapper_taxonomy.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/feedapi_mapper_taxonomy.inc,v retrieving revision 1.1.4.4 diff -u -p -r1.1.4.4 feedapi_mapper_taxonomy.inc --- mappers/feedapi_mapper_taxonomy.inc 20 Apr 2009 13:31:04 -0000 1.1.4.4 +++ mappers/feedapi_mapper_taxonomy.inc 14 Jul 2009 17:14:53 -0000 @@ -6,12 +6,18 @@ * * @see hook_feedapi_mapper() */ -function taxonomy_feedapi_mapper($op, $node, $feed_element = array(), $field_name = '', $sub_field = '') { +function taxonomy_feedapi_mapper($op, $feed_node, $node = NULL, $feed_element = array(), $field_name = '', $sub_field = '') { + + // Only map nodes. + if (!$node_type = feedapi_mapper_get_item_node_type($feed_node)) { + return; + } + if ($op == 'describe') { return t('Maps a string or an array of strings to taxonomy terms. Chose a vocabulary from sub options.'); } else if ($op == 'list') { - if ($vocabularies = taxonomy_get_vocabularies($node->type)) { + if ($vocabularies = taxonomy_get_vocabularies($node_type)) { foreach ($vocabularies as $v) { $sub_fields[$v->vid] = $v->name; }