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') {