WordPress.org

Plugin Directory

Changeset 628750


Ignore:
Timestamp:
11/22/12 17:55:50 (5 years ago)
Author:
slickplan
Message:

Updated to version 0.3

Location:
slickplan-importer
Files:
3 added
2 edited

Legend:

Unmodified
Added
Removed
  • slickplan-importer/trunk/readme.txt

    r601099 r628750  
    1919== Changelog == 
    2020 
     21= 0.3 = 
     22* New: Import sections 
     23 
    2124= 0.2 = 
    2225* New: Import notes as pages contents 
  • slickplan-importer/trunk/slickplan-importer.php

    r601099 r628750  
    33Plugin Name: Slickplan Importer 
    44Plugin URI: http://wordpress.org/extend/plugins/slickplan-importer/ 
    5 Description: Import pages from a Slickplan's XML export file. To use go to the Tools -> Import screen and click on Slickplan. 
     5Description: Import pages from a Slickplan's XML export file. To use go to the <a href="import.php">Tools -> Import</a> screen and select Slickplan. 
    66Author: slickplan.com 
    77Author URI: http://slickplan.com/ 
    8 Version: 0.2 
     8Version: 0.3 
    99License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 
    1010*/ 
     
    2828 
    2929        private $_xml; 
    30         private $_default_data = array( 
    31             'post_status' => 'publish', 
    32             'post_content' => '', 
    33             'post_type' => 'page', 
    34             // 'post_parent' => '', 
    35             // 'post_title' => '', 
    36         ); 
     30        private $_default_data = array(); 
    3731        private $_import_notes = false; 
     32        private $_import_sections = 4; 
     33        private $_sitemap = array(); 
     34        private $_parsed_array; 
     35        private $_sections_list = array(); 
     36 
     37        public function __construct() 
     38        { 
     39            $this->_default_data = array( 
     40                'post_status' => 'publish', 
     41                'post_content' => '', 
     42                'post_type' => 'page', 
     43            ); 
     44            parent::__construct(); 
     45        } 
    3846 
    3947        public function dispatch() 
     
    4250            echo '<div class="wrap">'; 
    4351            screen_icon(); 
    44             echo '<h2>' . __('Import Slickplan\'s XML', 'slickplan-importer') . '</h2>'; 
     52            echo '<h2>Import Slickplan\'s XML</h2>'; 
    4553            switch ($step) { 
    4654                case 0: 
    4755                    echo '<div class="narrow">'; 
    4856                    if (function_exists('simplexml_load_file')) { 
    49                         echo '<p>' . __('This importer allows you to import pages structure from a Slickplan\'s XML export file into your WordPress site. Pick an XML file to upload and click Import.', 'slickplan-importer') . '</p>'; 
     57                        echo '<p>This importer allows you to import pages structure from a Slickplan\'s XML export file into your WordPress site. Pick an XML file to upload and click Import.</p>'; 
    5058                        ob_start(); 
    5159                        wp_import_upload_form('admin.php?import=slickplan&step=1'); 
     
    5361                        ob_end_clean(); 
    5462                        if (strpos($form, '</p>') !== false){ 
    55                             $form = substr_replace($form, '<p><label for="importnotes"><input type="checkbox" name="importnotes" id="importnotes" value="2"> ' . __('Import Notes as Pages Contents', 'slickplan-importer') . '</label></p>', strpos($form, '</p>') + 4, 0); 
     63                            $form = substr_replace($form, 
     64                                '<p><label for="importnotes"><input type="checkbox" name="importnotes" id="importnotes" value="2"> Import Notes as Pages Contents</label></p>' 
     65                              . '<p>Sections:<br /><label for="importsections_2"><input type="radio" name="importsections" id="importsections_2" value="2" checked="checked"> Import as Child Pages</label><br />' 
     66                              . '<label for="importsections_3"><input type="radio" name="importsections" id="importsections_3" value="3"> Import as Pages</label><br />' 
     67                              . '<label for="importsections_4"><input type="radio" name="importsections" id="importsections_4" value="4"> Do Not Import</label></p>' 
     68                            , strpos($form, '</p>') + 4, 0); 
    5669                        }  
    5770                        echo $form; 
    5871                    } 
    5972                    else { 
    60                         echo '<p>' . __('Sorry! This importer requires the libxml and SimpleXML PHP extensions.', 'slickplan-importer') . '</p>'; 
     73                        echo '<p>Sorry! This importer requires the libxml and SimpleXML PHP extensions.</p>'; 
    6174                    } 
    6275                    echo '</div>'; 
     
    7386        } 
    7487 
    75         private function _fetch_pages($data, $parent_id = 0) 
    76         { 
    77             $parent_id = (int) $parent_id; 
    78             foreach ($data as $item) { 
    79                 $page = $this->_default_data; 
    80                 $page['post_title'] = (string) $item->title; 
    81                 if ($this->_import_notes) { 
    82                     $page['post_content'] = (string) $item->description; 
    83                 } 
    84                 if ($parent_id) { 
    85                     $page['post_parent'] = $parent_id; 
    86                 } 
    87                 echo '<li>' . __('Importing page... ', 'slickplan-importer'); 
     88        private function _create_page($item, $parent_id = 0) 
     89        { 
     90            $page = $this->_default_data; 
     91            $page['post_title'] = (string) $item['name']; 
     92            $label = 'Importing page'; 
     93            if ($this->_import_notes and isset($item['data']['note']) and !empty($item['data']['note'])) { 
     94                $page['post_content'] = (string) $item['data']['note']; 
     95                $label .= ' with content'; 
     96            } 
     97            if ($parent_id) { 
     98                $page['post_parent'] = $parent_id; 
     99                $label .= ' (child of ' . $parent_id . ')'; 
     100            } 
     101            echo '<li>' . $label . '&hellip; '; 
     102            $page_id = wp_insert_post($page); 
     103            if (is_wp_error($page_id) or !$page_id) { 
    88104                echo $page['post_title']; 
    89                 $page_id = wp_insert_post($page); 
    90                 if (is_wp_error($page_id)) { 
    91                     return $page_id; 
    92                 } 
    93                 if (!$page_id) { 
    94                     echo '<span style="color: #d00">'; 
    95                     _e('Couldn\'t get post ID', 'slickplan-importer'); 
    96                     echo '</span>'; 
    97                     return; 
    98                 } 
    99                 echo '<span style="color: #080">'; 
    100                 _e(' - Done!', 'slickplan-importer'); 
    101                 echo '</span>'; 
    102                 if (isset($item->child->item)) { 
    103                     $this->_fetch_pages($item->child->item, $page_id); 
    104                 } 
    105             } 
    106         } 
    107  
    108         private function _import_pages() 
    109         { 
    110             echo '<ol>'; 
    111             if (isset($this->_xml->home->title)) { 
    112                 $page = $this->_default_data; 
    113                 $page['post_title'] = (string) $this->_xml->home->title; 
    114                 echo '<li>' . __('Importing page... ', 'slickplan-importer'); 
    115                 echo $page['post_title']; 
    116                 $page_id = wp_insert_post($page); 
    117                 if (is_wp_error($page_id)) { 
    118                     return $page_id; 
    119                 } 
    120                 if (!$page_id) { 
    121                     echo '<span style="color: #d00">'; 
    122                     _e('Couldn\'t get post ID', 'slickplan-importer'); 
    123                     echo '</span>'; 
    124                     return; 
    125                 } 
    126                 echo '<span style="color: #080">'; 
    127                 _e(' - Done!', 'slickplan-importer'); 
    128                 echo '</span>'; 
    129             } 
    130             if (isset($this->_xml->utilities->item)) { 
    131                 $this->_fetch_pages($this->_xml->utilities->item); 
    132             } 
    133             if (isset($this->_xml->items->item)) { 
    134                 $this->_fetch_pages($this->_xml->items->item); 
    135             } 
    136             if (isset($this->_xml->footer->item)) { 
    137                 $this->_fetch_pages($this->_xml->footer->item); 
    138             } 
    139             echo '</ol>'; 
     105                echo '<span style="color: #d00"> - Error!</span>'; 
     106                return false; 
     107            } 
     108            echo '<a href="' . get_admin_url(null, 'post.php?post=' . $page_id . '&action=edit') . '">' . $page['post_title'] . ' (ID: ' . $page_id . ')</a>'; 
     109            echo '<span style="color: #080"> - Done!</span>'; 
     110            if (isset($item['child'])) { 
     111                foreach ($item['child'] as $child) { 
     112                    $this->_create_page($child, $page_id); 
     113                } 
     114            } 
     115            if ($this->_import_sections === 2 and isset($item['data']['section'])) { 
     116                $section = (int) $item['data']['section']; 
     117                if (isset($this->_sitemap[$section])) { 
     118                    foreach ($this->_sitemap[$section] as $child) { 
     119                        $this->_create_page($child, $page_id); 
     120                    } 
     121                } 
     122            } 
    140123        } 
    141124 
     
    153136            $this->_xml = simplexml_load_file($file['file']); 
    154137            $this->_import_notes = (isset($_POST['importnotes']) and intval($_POST['importnotes']) === 2); 
    155             if (isset($this->_xml->link, $this->_xml->items, $this->_xml->title, $this->_xml->version) and strstr($this->_xml->link, 'slickplan')) { 
    156                 $result = $this->_import_pages(); 
     138            $this->_import_sections = isset($_POST['importsections']) ? intval($_POST['importsections']) : 4; 
     139            if (isset($this->_xml->link, $this->_xml->title, $this->_xml->version) and strstr($this->_xml->link, 'slickplan')) { 
     140                echo '<ol>'; 
     141                $this->_parse_slickplan($this->_xml); 
     142                foreach ($this->_sitemap as $key => $array) { 
     143                    if ($key > 0 and $this->_import_sections !== 3) { 
     144                        break; 
     145                    } 
     146                    foreach ($array as $item) { 
     147                        $this->_create_page($item); 
     148                    } 
     149                } 
     150                echo '</ol>'; 
    157151            } 
    158152            else { 
    159                 _e('Incorrect XML file format.', 'slickplan-importer'); 
     153                echo 'Incorrect XML file format.'; 
    160154                return; 
    161             } 
    162             if (is_wp_error($result)) { 
    163                 return $result; 
    164155            } 
    165156            wp_import_cleanup($file['id']); 
    166157            do_action('import_done', 'slickplan'); 
    167158            echo '<h3>'; 
    168             printf(__('All done. <a href="%s">Have fun!</a>', 'slickplan-importer'), get_admin_url(null, 'edit.php?post_type=page')); 
     159            printf('All done. <a href="%s">Have fun!</a>', get_admin_url(null, 'edit.php?post_type=page')); 
    169160            echo '</h3>'; 
    170161        } 
    171162 
     163        private function _parse_slickplan(&$xml) 
     164        { 
     165            $this->_sitemap = array(); 
     166            $sections = isset($xml->section) ? $xml->section : array(0 => $xml); 
     167            foreach ($sections as $xml) { 
     168                $attributes = (array) $xml->attributes(); 
     169                if (isset($attributes['@attributes']['id'])) { 
     170                    $this->_sections_list[] = (int) $attributes['@attributes']['id']; 
     171                } 
     172            } 
     173            $key = -1; 
     174            foreach ($sections as $xml) { 
     175                $attributes = (array) $xml->attributes(); 
     176                if (isset($attributes['@attributes']['id'])) { 
     177                    $key = (int) $attributes['@attributes']['id']; 
     178                } 
     179                else { 
     180                    do { 
     181                        ++$key; 
     182                    } while (isset($this->_sitemap[$key])); 
     183                } 
     184                $this->_sitemap[$key] = array(); 
     185                if ($key === 0 and isset($xml->utilities->item)) { 
     186                    $this->_sitemap[$key] = array_merge($this->_sitemap[$key], $this->_get_slickplan_cells($xml->utilities->item)); 
     187                } 
     188                elseif ($key === 0 and isset($xml->utility->item)) { 
     189                    $this->_sitemap[$key] = array_merge($this->_sitemap[$key], $this->_get_slickplan_cells($xml->utility->item)); 
     190                } 
     191                if ($key === 0 and isset($xml->footer->item)) { 
     192                    $this->_sitemap[$key] = array_merge($this->_sitemap[$key], $this->_get_slickplan_cells($xml->footer->item)); 
     193                } 
     194                if (isset($xml->items)) { 
     195                    if ($key === 0 and isset($xml->items->home->title)) { 
     196                        $this->_sitemap[$key] = array_merge($this->_sitemap[$key], $this->_get_slickplan_cells($xml->items->home)); 
     197                    } 
     198                    if (isset($xml->items->item)) { 
     199                        $this->_sitemap[$key] = array_merge($this->_sitemap[$key], $this->_get_slickplan_cells($xml->items->item)); 
     200                    } 
     201                } 
     202                else if (isset($xml->main)) { 
     203                    if ($key === 0 and isset($xml->main->home->title)) { 
     204                        $this->_sitemap[$key] = array_merge($this->_sitemap[$key], $this->_get_slickplan_cells($xml->main->home)); 
     205                    } 
     206                    if (isset($xml->main->item)) { 
     207                        $this->_sitemap[$key] = array_merge($this->_sitemap[$key], $this->_get_slickplan_cells($xml->main->item)); 
     208                    } 
     209                } 
     210            } 
     211            $this->_sitemap = (array) $this->_sitemap; 
     212            return $this->_sitemap; 
     213        } 
     214 
     215        private function _get_slickplan_cells($data) 
     216        { 
     217            $return = array(); 
     218            foreach ($data as $item) { 
     219                $cell = array('name' => (string) $item->title); 
     220                if (isset($item->description)) { 
     221                    $cell['data']['note'] = (string) $item->description; 
     222                } 
     223                if (isset($item->section) and intval($item->section) > 0 and in_array(intval($item->section), $this->_sections_list, true)) { 
     224                    $cell['data']['section'] = (int) $item->section; 
     225                } 
     226                if (isset($item->child->item)) { 
     227                    $cell['child'] = $this->_get_slickplan_cells($item->child->item); 
     228                } 
     229                $return[] = $cell; 
     230            } 
     231            return $return; 
     232        } 
     233 
    172234    } 
    173235 
    174236    $slickplan_import = new Slickplan_Import(); 
    175     register_importer('slickplan', __('Slickplan', 'slickplan-importer'), __('Import pages from a Slickplan\'s XML export file.', 'slickplan-importer'), array($slickplan_import, 'dispatch')); 
     237    register_importer('slickplan', 'Slickplan', 'Import pages from a Slickplan\'s XML export file.', array($slickplan_import, 'dispatch')); 
    176238} 
Note: See TracChangeset for help on using the changeset viewer.