Index: wordpress_import.module =================================================================== --- wordpress_import.module (revision 83) +++ wordpress_import.module (working copy) @@ -297,7 +297,22 @@ '#collapsible' => FALSE, '#tree' => TRUE ); + + + // Menu to import into + $menus = array('' => '', 'noimport' => t('Don\'t import')); + if (module_exists('menu')){ + $menus = array_merge($menus, menu_get_menus()); + } + $form['basic_options']['menu'] = array( + '#type' => 'select', + '#title' => t('Import content into menu'), + '#description' => t('All imported content will be imported into the selected menu under a new item called "Wordpress import".'), + '#default_value' => '', + '#options' => $menus, + ); + // Post content type $node_types = node_get_types(); $content_types = array('' => '', 'noimport' => t('Don\'t import')); @@ -419,6 +434,11 @@ $form['advanced_options']['aliases']['#default_value'] = FALSE; $form['advanced_options']['aliases']['#disabled'] = TRUE; } + if (!module_exists('menu')) { + drupal_set_message(t('Could not find module "menu". Menu will not be imported'), 'error'); + $form['basic_options']['menu']['#default_value'] = 'noimport'; + $form['basic_options']['menu']['#disabled'] = TRUE; + } if (!extension_loaded('curl')) { drupal_set_message(t('cURL PHP extension not available. Transfer images option disabled.'), 'warning'); $form['advanced_options']['images']['#default_value'] = FALSE; @@ -433,6 +453,10 @@ return; } + if (empty($form_state['values']['basic_options']['menu'])) { + form_set_error('basic_options][menu',t('You must specify a menu to import Wordpress content into.')); + } + if (empty($form_state['values']['basic_options']['nodetype_post'])) { form_set_error('basic_options][nodetype',t('You must specify a content type to import Wordpress posts into.')); } @@ -734,6 +758,7 @@ $context['sandbox']['progress'] = 0; $context['results']['created_users'] = 0; $context['results']['created_nodes'] = 0; + $context['results']['created_menu_items'] = 0; $context['results']['created_terms'] = 0; $context['results']['created_categories'] = 0; $context['results']['downloaded_images'] = array(); @@ -815,11 +840,74 @@ if ($context['sandbox']['progress'] < $wordpress_import->count['posts']) { $context['finished'] = $context['sandbox']['progress'] / ($wordpress_import->count['posts'] - 1); + }else{ + // Menu must be created after all nodes are processed. + wordpress_import_process_menu($wordpress_import, $context); } $wordpress_import->reader->close(); } + +/** + * Create menu items + */ +function wordpress_import_process_menu(&$wordpress_import, &$context) { + + if($wordpress_import->options['menu'] == 'noimport'){ + watchdog("wordpress_import", "Menu was not imported."); + return; + } + + watchdog("wordpress_import", "Menu is chosen, creating import menu item."); + + $root_array = array_filter($wordpress_import->data['menu'], create_function('$array', 'return $array["parent"]==0;')); + + // Create root menu item + $root_link = array( + 'menu_name' => $wordpress_import->options['menu'], + 'link_path' => "", + 'link_title' => "Wordpress Import", + ); + + $root_mlid = menu_link_save($root_link); + + if($root_mlid){ + $context['results']['created_menu_items']++; + watchdog("wordpress_import", "Created root menu item with mlid $root_mlid"); + wordpress_import_process_menu_process($wordpress_import, $context, $root_array, $root_mlid); + } + +} + +function wordpress_import_process_menu_process(&$wordpress_import, &$context, $siblings, $plid) { + if($plid){ + watchdog("wordpress_import", "Processing ".count($siblings)." children of mlid $plid"); + foreach($siblings as $post_id => $post_data){ + watchdog("wordpress_import", "Processing post '$post_id'"); + if($post_id){ + $link = array( + 'menu_name' => $wordpress_import->options['menu'], + 'link_path' => "node/".$post_data['nid'], + 'link_title' => $post_data['title'], + 'plid' => $plid, + ); + $mlid = menu_link_save($link); + $context['results']['created_menu_items']++; + $children = array_filter($wordpress_import->data['menu'], create_function('$array', 'return $array["parent"]=='.$post_id.';')); + if(!empty($children)){ + wordpress_import_process_menu_process($wordpress_import, $context, $children, $mlid); + } + }else{ + watchdog("wordpress_import", "Blank post id, skipping."); + } + } + }else{ + watchdog("wordpress_import", "No parent mlid, skipping."); + } +} + + /** * Import categories and tags as taxonomy terms */ @@ -947,6 +1035,14 @@ $reader->read(); $post['link'] = $reader->value; break; + case 'wp:post_id' : + $reader->read(); + $post['post_id'] = $reader->value; + break; + case 'wp:post_parent' : + $reader->read(); + $post['parent_id'] = $reader->value; + break; case 'wp:comment_status' : $reader->read(); $post['comment_status'] = $reader->value; @@ -1095,6 +1191,14 @@ // Save the node $node = (object)$node; node_save($node); + + // Set up menu data about this node + if($wordpress_import->options['menu'] != "noimport"){ + $wordpress_import->data['menu'][$post['post_id']]['nid'] = $node->nid; + $wordpress_import->data['menu'][$post['post_id']]['parent'] = $post['parent_id']; + $wordpress_import->data['menu'][$post['post_id']]['title'] = $node->title; + watchdog("wordpress_import", "Adding menu data for nid {$node->nid}: parent {$post['parent_id']}, title {$node->title}."); + } // Process comments and trackbacks for this post if (module_exists('comment') && !empty($post['comments'])) { @@ -1366,6 +1470,7 @@ $msg_results = array(); $msg_results[] = '
  • ' . t('@created_nodes nodes', array('@created_nodes' => $results['created_nodes'])) . '
  • '; + $msg_results[] = '
  • ' . t('@created_menu_items menu items', array('@created_menu_items' => $results['created_menu_items'])) . '
  • '; $msg_results[] = '
  • ' . t('@created_users users', array('@created_users' => $results['created_users'])) . '
  • '; $msg_results[] = '
  • ' . t('@created_terms taxonomy terms', array('@created_terms' => $results['created_terms'])) . '
  • '; $msg_results[] = '
  • ' . t('@created_comments comments', array('@created_comments' => $results['created_comments'])) . '
  • '; @@ -1411,6 +1516,7 @@ $wordpress_import->data['categories'] = array(); $wordpress_import->data['tags'] = array(); + $wordpress_import->data['menu'] = array(); $wordpress_import->usermap = array(); $wordpress_import->count['posts'] = 0; $wordpress_import->count['author_posts'] = array(); @@ -1476,6 +1582,12 @@ $wordpress_import->usermap[$reader->value] = 0; $wordpress_import->count['author_posts'][$reader->value]++; } + + // Create array to hold menu data + if ($reader->name == 'wp:post_id') { + $reader->read(); + $wordpress_import->data['menu'][$reader->value] = array(); + } // Count comments if ($reader->name == 'wp:comment') {