From 2dda03de718aeaff861f2e12ef1a5af66d1b1a3e Mon Sep 17 00:00:00 2001 From: CaMer0n Date: Sun, 22 Jul 2012 03:28:06 +0000 Subject: [PATCH] Work on import routines. --- e107_plugins/import/admin_import.php | 429 +++++++++++------- e107_plugins/import/images/coppermine.png | Bin 0 -> 1803 bytes e107_plugins/import/images/drupal.png | Bin 0 -> 1735 bytes e107_plugins/import/images/e107.png | Bin 0 -> 2880 bytes e107_plugins/import/images/ikonboard.png | Bin 0 -> 1506 bytes e107_plugins/import/images/joomla.png | Bin 0 -> 2211 bytes e107_plugins/import/images/mambo.png | Bin 0 -> 2976 bytes e107_plugins/import/images/phpbb2.png | Bin 0 -> 2161 bytes e107_plugins/import/images/phpnuke.png | Bin 0 -> 2593 bytes e107_plugins/import/images/smf.png | Bin 0 -> 1519 bytes e107_plugins/import/images/wordpress.png | Bin 0 -> 2777 bytes e107_plugins/import/import_classes.php | 217 ++++++--- .../import/languages/English_admin_import.php | 2 +- .../PHPFusion_import_class.php | 0 .../{ => providers}/PHPNuke_import_class.php | 0 .../coppermine_import_class.php | 0 .../{ => providers}/drupal_import_class.php | 0 .../{ => providers}/e107_import_class.php | 0 .../ikonboard_import_class.php | 0 .../import/providers/joomla_import_class.php | 83 ++++ .../{ => providers}/mambo_import_class.php | 0 .../{ => providers}/phpbb2_import_class.php | 0 .../import/providers/rss_import_class.php | 294 ++++++++++++ .../{ => providers}/smf_import_class.php | 0 .../providers/wordpress_import_class.php | 354 +++++++++++++++ .../import/wordpress_import_class.php | 141 ------ 26 files changed, 1131 insertions(+), 389 deletions(-) create mode 100644 e107_plugins/import/images/coppermine.png create mode 100644 e107_plugins/import/images/drupal.png create mode 100644 e107_plugins/import/images/e107.png create mode 100644 e107_plugins/import/images/ikonboard.png create mode 100644 e107_plugins/import/images/joomla.png create mode 100644 e107_plugins/import/images/mambo.png create mode 100644 e107_plugins/import/images/phpbb2.png create mode 100644 e107_plugins/import/images/phpnuke.png create mode 100644 e107_plugins/import/images/smf.png create mode 100644 e107_plugins/import/images/wordpress.png rename e107_plugins/import/{ => providers}/PHPFusion_import_class.php (100%) rename e107_plugins/import/{ => providers}/PHPNuke_import_class.php (100%) rename e107_plugins/import/{ => providers}/coppermine_import_class.php (100%) rename e107_plugins/import/{ => providers}/drupal_import_class.php (100%) rename e107_plugins/import/{ => providers}/e107_import_class.php (100%) rename e107_plugins/import/{ => providers}/ikonboard_import_class.php (100%) create mode 100644 e107_plugins/import/providers/joomla_import_class.php rename e107_plugins/import/{ => providers}/mambo_import_class.php (100%) rename e107_plugins/import/{ => providers}/phpbb2_import_class.php (100%) create mode 100644 e107_plugins/import/providers/rss_import_class.php rename e107_plugins/import/{ => providers}/smf_import_class.php (100%) create mode 100644 e107_plugins/import/providers/wordpress_import_class.php delete mode 100644 e107_plugins/import/wordpress_import_class.php diff --git a/e107_plugins/import/admin_import.php b/e107_plugins/import/admin_import.php index 6818e0a92..653a77279 100644 --- a/e107_plugins/import/admin_import.php +++ b/e107_plugins/import/admin_import.php @@ -59,20 +59,24 @@ $import_class_comment = array(); // Descriptive comment $import_class_support = array(); // Array of data types supported // Definitions of available areas to import -$db_import_blocks = array('users' => array('message' => LAN_CONVERT_25, 'classfile' => 'import_user_class.php', 'classname' => 'user_import'), - 'news' => array('message' => LAN_CONVERT_28), - 'forumdefs' => array('message' => LAN_CONVERT_26), - 'forumposts' => array('message' => LAN_CONVERT_48), - 'polls' => array('message' => LAN_CONVERT_27) - - ); +$db_import_blocks = array( + 'users' => array('message' => LAN_CONVERT_25, 'classfile' => 'import_user_class.php', 'classname' => 'user_import'), + 'news' => array('message' => LAN_CONVERT_28, 'classfile' => 'import_news_class.php', 'classname' => 'news_import'), + 'page' => array('message' => "Pages", 'classfile' => 'import_page_class.php', 'classname' => 'page_import'), + 'links' => array('message' => "Links", 'classfile' => 'import_links_class.php', 'classname' => 'links_import'), + 'media' => array('message' => "Media", 'classfile' => 'import_media_class.php', 'classname' => 'media_import'), + 'comments' => array('message'=> "Comments"), +// 'forumdefs' => array('message' => LAN_CONVERT_26), +// 'forumposts' => array('message' => LAN_CONVERT_48), +// 'polls' => array('message' => LAN_CONVERT_27) +); // See what DB-based imports are available (don't really want it here, but gets it into the header script) require_once(e_HANDLER.'file_class.php'); $fl = new e_file; -$importClassList = $fl->get_files(e_PLUGIN.'import', "^.+?_import_class\.php$", "standard", 1); +$importClassList = $fl->get_files(e_PLUGIN.'import/providers', "^.+?_import_class\.php$", "standard", 1); foreach($importClassList as $file) { $tag = str_replace('_class.php','',$file['fname']); @@ -98,6 +102,7 @@ if(varset($_POST['import_source'])) $current_db_type = varset($_POST['db_import_type'],key($import_class_names)); } + $db_blocks_to_import = array(); @@ -168,193 +173,245 @@ $msg = ''; //====================================================== if(isset($_POST['do_conversion'])) { - $abandon = TRUE; - switch ($import_source) - { - case 'csv' : - if (!isset($csv_formats[$current_csv])) $msg = "CSV File format error

"; - if (!is_readable($csv_data_file)) $msg = LAN_CONVERT_31; - if (!isset($csv_options[$current_csv])) $msg = LAN_CONVERT_37.' '.$current_csv; - if (!isset($csv_option_settings[$csv_options[$current_csv]])) $msg = LAN_CONVERT_37.' '.$csv_options[$current_csv]; - - if (!$msg) - { - $field_list = explode(',',$csv_formats[$current_csv]); - $separator = $csv_option_settings[$csv_options[$current_csv]]['separator']; - $enveloper = $csv_option_settings[$csv_options[$current_csv]]['envelope']; - if (IMPORT_DEBUG) echo "CSV import: {$current_csv} Fields: {$csv_formats[$current_csv]}
"; - require_once('import_user_class.php'); - $usr = new user_import; - $usr->overrideDefault('user_class',$checked_class_list); - if (($source_data = file($csv_data_file)) === FALSE) $msg = LAN_CONVERT_32; - if ($import_delete_existing_data) $usr->emptyTargetDB(); // Delete existing users - reasonably safe now - $line_counter = 0; - $error_counter = 0; - $write_counter = 0; - foreach ($source_data as $line) - { - $line_counter++; - $line_error = FALSE; - if ($line = trim($line)) - { - $usr_data = $usr->getDefaults(); // Reset user data - $line_data = csv_split($line, $separator, $enveloper); - $field_data = current($line_data); - foreach ($field_list as $f) + $abandon = TRUE; + + switch ($import_source) + { + case 'csv' : + if (!isset($csv_formats[$current_csv])) $msg = "CSV File format error

"; + if (!is_readable($csv_data_file)) $msg = LAN_CONVERT_31; + if (!isset($csv_options[$current_csv])) $msg = LAN_CONVERT_37.' '.$current_csv; + if (!isset($csv_option_settings[$csv_options[$current_csv]])) { - if ($field_data === FALSE) $line_error = TRUE; - if ($f != 'dummy') $usr_data[$f] = $field_data; - $field_data = next($line_data); + $msg = LAN_CONVERT_37.' '.$csv_options[$current_csv]; + } + + if (!$msg) + { + $field_list = explode(',',$csv_formats[$current_csv]); + $separator = $csv_option_settings[$csv_options[$current_csv]]['separator']; + $enveloper = $csv_option_settings[$csv_options[$current_csv]]['envelope']; + if (IMPORT_DEBUG) echo "CSV import: {$current_csv} Fields: {$csv_formats[$current_csv]}
"; + require_once('import_user_class.php'); + $usr = new user_import; + $usr->overrideDefault('user_class',$checked_class_list); + if (($source_data = file($csv_data_file)) === FALSE) $msg = LAN_CONVERT_32; + if ($import_delete_existing_data) $usr->emptyTargetDB(); // Delete existing users - reasonably safe now + $line_counter = 0; + $error_counter = 0; + $write_counter = 0; + foreach ($source_data as $line) + { + $line_counter++; + $line_error = FALSE; + if ($line = trim($line)) + { + $usr_data = $usr->getDefaults(); // Reset user data + $line_data = csv_split($line, $separator, $enveloper); + $field_data = current($line_data); + foreach ($field_list as $f) + { + if ($field_data === FALSE) $line_error = TRUE; + if ($f != 'dummy') $usr_data[$f] = $field_data; + $field_data = next($line_data); + } + if ($line_error) + { + if ($msg) $msg .= "
"; + $msg .= LAN_CONVERT_33.$line_counter; + $error_counter++; + } + else + { + if ($csv_pw_not_encrypted) + { + $usr_data['user_password'] = md5($usr_data['user_password']); + } + $line_error = $usr->saveData($usr_data); + if ($line_error === TRUE) + { + $write_counter++; + } + else + { + $line_error = $usr->getErrorText($line_error); + if ($msg) $msg .= "
"; + $msg .= str_replace('--ERRNUM--',$line_error,LAN_CONVERT_34).$line_counter; + $error_counter++; + } + } + } + } + + if ($msg) $msg .= "
"; + if ($import_delete_existing_data) $msg .= LAN_CONVERT_40.'
'; + $msg .= str_replace(array('--LINES--','--USERS--', '--ERRORS--'),array($line_counter,$write_counter,$error_counter),LAN_CONVERT_35); } - if ($line_error) + break; + + case 'db' : + if(dbImport() == false) { - if ($msg) $msg .= "
"; - $msg .= LAN_CONVERT_33.$line_counter; - $error_counter++; - } - else + $abandon = true; + }; + break; + + case 'rss' : + if(rssImport() == false) { - if ($csv_pw_not_encrypted) - { - $usr_data['user_password'] = md5($usr_data['user_password']); - } - $line_error = $usr->saveData($usr_data); - if ($line_error === TRUE) - { - $write_counter++; - } - else - { - $line_error = $usr->getErrorText($line_error); - if ($msg) $msg .= "
"; - $msg .= str_replace('--ERRNUM--',$line_error,LAN_CONVERT_34).$line_counter; - $error_counter++; - } - } - } - } - if ($msg) $msg .= "
"; - if ($import_delete_existing_data) $msg .= LAN_CONVERT_40.'
'; - $msg .= str_replace(array('--LINES--','--USERS--', '--ERRORS--'),array($line_counter,$write_counter,$error_counter),LAN_CONVERT_35); - } - break; + $abandon = true; + }; + break; + } - case 'db' : + if ($msg) + { + $emessage->add($msg, E_MESSAGE_INFO); // $ns -> tablerender(LAN_CONVERT_30, $msg); + $msg = ''; + } - if (IMPORT_DEBUG) echo "Importing: {$current_db_type}
"; - if (!isset($_POST['dbParamHost']) || !isset($_POST['dbParamUsername']) || !isset($_POST['dbParamPassword']) || !isset($_POST['dbParamDatabase'])) - { - $msg = LAN_CONVERT_41; - } - if (!$msg) - { - if (class_exists($current_db_type)) + if ($abandon) + { + // unset($_POST['do_conversion']); + $text = " +
+ + + +
+ +
"; + $ns -> tablerender(LAN_CONVERT_30,$emessage->render(). $text); + require_once(e_ADMIN."footer.php"); + exit; + } +} + + +function rssImport() +{ + global $current_db_type, $db_import_blocks, $import_delete_existing_data,$db_blocks_to_import; + + $mes = e107::getMessage(); + $mes->addDebug("Loading: RSS"); + $mes->addWarning("Under Construction"); + return dbImport('xml'); + +} + +function dbImport($mode='db') +{ + global $current_db_type, $db_import_blocks, $import_delete_existing_data,$db_blocks_to_import; + + $mes = e107::getMessage(); + + // if (IMPORT_DEBUG) echo "Importing: {$current_db_type}
"; + $mes->addDebug("Loading: ".$current_db_type); + + if (class_exists($current_db_type)) + { + $mes->addDebug("Class Available: ".$current_db_type); + $converter = new $current_db_type; + } + else + { + $mes->addError(LAN_CONVERT_42); + return false; + } + + if($mode == 'db') // Don't do DB check on RSS/XML + { + if (!isset($_POST['dbParamHost']) || !isset($_POST['dbParamUsername']) || !isset($_POST['dbParamPassword']) || !isset($_POST['dbParamDatabase'])) { - $converter = new $current_db_type; + $mes->addError(LAN_CONVERT_41); + return false; } - else - { - $msg = LAN_CONVERT_42; - } - } - if (!$msg) - { - + $result = $converter->db_Connect($_POST['dbParamHost'], $_POST['dbParamUsername'], $_POST['dbParamPassword'], $_POST['dbParamDatabase'], $_POST['dbParamPrefix']); - - - if ($result !== TRUE) { - $msg = LAN_CONVERT_43.": ".$result; // db connect failed - } - } - if (!$msg) - { - foreach ($db_import_blocks as $k => $v) + $mes->addError(LAN_CONVERT_43.": ".$result); // db connect failed + return false; + } + } + + + foreach ($db_import_blocks as $k => $v) + { + if (isset($db_blocks_to_import[$k])) { - if (isset($db_blocks_to_import[$k])) - { $loopCounter = 0; $errorCounter = 0; + if (is_readable($v['classfile'])) { require_once($v['classfile']); } else { - $msg = LAN_CONVERT_45.': '.$v['classfile']; // can't read class file. + $mes->addError(LAN_CONVERT_45.': '.$v['classfile']); // can't read class file. + return false; } - if (!$msg && (varset($_POST["import_block_{$k}"],0) == 1)) + + if (varset($_POST["import_block_{$k}"],0) == 1) { - if (IMPORT_DEBUG) echo "Importing: {$k}
"; - $result = $converter->setupQuery($k,!$import_delete_existing_data); - if ($result !== TRUE) - { - $msg = LAN_CONVERT_44.' '.$k; - // $msg .= "Prefix = ".$converter->DBPrefix; - break; - } - $exporter = new $v['classname']; // Writes the output data - // Do any type-specific default setting - switch ($k) - { - case 'users' : - $exporter->overrideDefault('user_class',$checked_class_list); - break; - } - if ($import_delete_existing_data) $exporter->emptyTargetDB(); // Clean output DB - reasonably safe now - while ($row = $converter->getNext($exporter->getDefaults())) - { - $loopCounter++; - $result = $exporter->saveData($row); - if ($result !== TRUE) + //if (IMPORT_DEBUG) echo "Importing: {$k}
"; + $mes->addDebug("Importing: ".$k); + + $result = $converter->setupQuery($k,!$import_delete_existing_data); + + if ($result !== TRUE) + { + $mes->addError(LAN_CONVERT_44.' '.$k); // couldn't set query + // $msg .= "Prefix = ".$converter->DBPrefix; + break; + } + + $exporter = new $v['classname']; // Writes the output data + + switch ($k) // Do any type-specific default setting { - $errorCounter++; - $line_error = $exporter->getErrorText($result); - if ($msg) $msg .= "
"; - $msg .= str_replace(array('--ERRNUM--','--DB--'),array($line_error,$k),LAN_CONVERT_46).$loopCounter; + case 'users' : + $exporter->overrideDefault('user_class',$checked_class_list); + break; } - } - $converter->endQuery; - unset($exporter); - if ($msg) $msg .= "
"; - $msg .= str_replace(array('--LINES--','--USERS--', '--ERRORS--','--BLOCK--'), - array($loopCounter,$loopCounter-$errorCounter,$errorCounter, $k),LAN_CONVERT_47); + + if ($import_delete_existing_data) + { + $exporter->emptyTargetDB(); // Clean output DB - reasonably safe now + } + + while ($row = $converter->getNext($exporter->getDefaults(),$mode)) + { + $loopCounter++; + $result = $exporter->saveData($row); + if ($result !== TRUE) + { + $errorCounter++; + $line_error = $exporter->getErrorText($result); + // if ($msg) $msg .= "
"; + $msg = str_replace(array('--ERRNUM--','--DB--'),array($line_error,$k),LAN_CONVERT_46).$loopCounter; + $mes->addError($msg); // couldn't set query + } + } + + $converter->endQuery(); + + unset($exporter); + + + $msg = str_replace(array('--LINES--','--USERS--', '--ERRORS--','--BLOCK--'), + array($loopCounter,$loopCounter-$errorCounter,$errorCounter, $k),LAN_CONVERT_47); + $mes->addSuccess($msg); // couldn't set query } } } - } + // $msg = LAN_CONVERT_29; - $abandon = FALSE; - break; - } - - if ($msg) - { - $emessage->add($msg, E_MESSAGE_INFO); // $ns -> tablerender(LAN_CONVERT_30, $msg); - $msg = ''; - } - - if ($abandon) - { -// unset($_POST['do_conversion']); - $text = " -
- - - -
- -
"; - $ns -> tablerender(LAN_CONVERT_30, $text); - require_once(e_ADMIN."footer.php"); - exit; - } + return true; + // $abandon = FALSE; } - - //====================================================== // Display front page //====================================================== @@ -411,19 +468,25 @@ function showStartPage() - CSV - ".ADMIN_TRUE_ICON." -   -   -   -   - ".$frm->radio('import_type', 'csv').""; + CSV + ".ADMIN_TRUE_ICON.""; + + for ($i=0; $i < count($db_import_blocks)-1; $i++) + { + $text .= " "; + } + + + $text .= "".$frm->radio('import_type', 'csv').""; foreach ($import_class_names as $k => $title) { + $iconFile = e_PLUGIN."import/images/".str_replace("_import","",strtolower($k)).".png"; + $icon = (file_exists($iconFile)) ? "" : ""; + $text .= " - ".$title."
".$import_class_comment[$k]."
\n"; + ".$icon.$title."
".$import_class_comment[$k]."
\n"; foreach($db_import_blocks as $key=>$val) { @@ -500,6 +563,15 @@ function showImportOptions($mode='csv') "; } + elseif($mode == 'rss_import') + { + $text .= " + Feed URL + + + + "; + } else { $importType = $import_class_names[$mode]; @@ -526,7 +598,13 @@ function showImportOptions($mode='csv') - + "; + + } + + if($mode != 'csv') + { + $text .= " $importType ".LAN_CONVERT_24." "; @@ -540,9 +618,10 @@ function showImportOptions($mode='csv') $text .= "
"; } } - $text .= ""; + $text .= ""; } + $text .= "".LAN_CONVERT_38." ".LAN_CONVERT_39." diff --git a/e107_plugins/import/images/coppermine.png b/e107_plugins/import/images/coppermine.png new file mode 100644 index 0000000000000000000000000000000000000000..5fefbe50148bcbb9eccd39ec44fa70d2908d9164 GIT binary patch literal 1803 zcmV+m2lV)fP)WdK)YWFR>pMrC3kGB7bQATcvKFfckZHXto9HZU+K35ve}000McNliru z+X4y^87B3)5b6K`010qNS#tmY9>D+r9>D>_X;f1H000DMK}|sb0I`n?{9y$E00v`8 zL_t(|+U-_bY#h}Y{{M5%%_N5!csRaFXVL8xj~A!t?Qq3}@g z(5hSn5!N4SveOsrM#^UOGWr%hweRj2gl= zNg#?0Vm2xmt%6qCtJp9eG4P~S!6>DWR?w_q#Roagr{TAAokP3IqdRJA4#MKRdh+f5 z;oe@Pik-+@6F!JOHrUHCLWEJ$T2V351p}8RiB+U1B6&dT;JwtzlC!9;_xopBXTQ0z zx~VF~dhj>nw5e1MoFWh@GJGnW5uOwtIOw3fT*I9~&6GwSupYB6#0s8@#*|`Hh!j>L z4G7fj)#Bs-I0v8R^vU{j^;UmxVu83|DgebyQYBPYphh}T55PM`)tdR$9 z*#}DTlv1Hfj%{zGkEQm__hxkR<+~5I{1vfq0-%x`D*TnHfOzn84}pzVvAQ9v-RZ1_mij%t44 zTZ22d_EMzp|NZ3ibDi!zTjPNWj0ssS{dHpbzM~iJ9W4Cd+VZAKf`YK{C4g4s?Gs~5 zldTjh0Bps26A7z@NhM9kn)ZQ>#eI8s5(192ULAP%+361T7q2gB z;a`3nZ`kn*z9&-F19I8-)4xo;lhHT&jFZkrZnTp5js*A*AI-<_s_QbnURAFkP-Iq zfNbdFxq!~Wy@k32X|am~!)JDRsWG>>cI&+Je6G=z5_svb)#YtHdbaKHYu5$qkO6)T zd5Bt#ooVb|zh3nZJoUwOkAKjlz5==~$(&G!;zxe>{?pSbfq?fHDK2fP4g9dQRQ>b( zNHUL>{8uwQbL&PZT{m;7^KD1YQR;-OFbFhq~teeNZ4l;5%2}^`F_v6%P%$t6x>2l48y`t+mFaR{9pggA6?Q zdX?sJM?ZUc?71I}z{lv$q0vthu&lV@{YYZIf8@fBzNsDCYoy|Dk8HV&r#%Yo=4}M) z4)Ujm@4W9=+ZKUwpiN2i$K~t~hwHagAWlKbns&*iQsqYT(XqvH1hL}bf_iv-C7D~k zp+bppI0HQLM~-aw=l@&)H3|xf2hfNgeC6;yXiRCK1BK(D9C+YWqs8%ABhfj1qmAg{>vE!EhFQ>bL}fofto}?bV}krHIt{V?j0? zjDezX1SUa@S?ppa$V8KohD&&c(orTPLs~hPJv@Oi?42~-iIzVw(x-;5sr_WIl(sW@ zDu`-yMZdUh9Y9JU@vAG$*18OEiQ02&IraX6_2?(5v~V6EI*@roaF+AnX~O* z>>11z4~*Hc@#v4Y)B8*FX(-4H@K9Sss`75a0#eiD0GslnQ_4Aw_23PZ03sky%2^5< zLeu-doo*i5Gq64%%NHAU;ndXb{YNI2JzWt|Bme*rly`0PqrLN2i2Qv*<&#LQ%7{=P z(5jMCH`}cF%{w;_4PSNnTSb1@=@a$W$IqWWp9yy$xr`AdlMD=7GrIPkLb<->-@;<) t*1?kc`j(!nuNl1bZHWK>Zu(z$@DY?PLtc*pA|?O;002ovPDHLkV1h`{epLVf literal 0 HcmV?d00001 diff --git a/e107_plugins/import/images/drupal.png b/e107_plugins/import/images/drupal.png new file mode 100644 index 0000000000000000000000000000000000000000..63ecb58f41c73769feb77dbefc72ab5470ddc039 GIT binary patch literal 1735 zcmV;&1~~bNP)eFM8Zb{7PB ziVu7M7BoV>iV+51&FCm%vhRCu=icQd3o2lpnVoz0p2zR^edqUm=Q|X~aTscIaG>NA2DOlAu%JJc z+{jw6>o{jH(c-~^4~c-w#wsN0C}izD<8HUp)c;E0+_g$BAy)m3jdr0(r$Sb4A$zBV z_WjQZ&{m7+(1okZl}aUw?g8iP+QiTK@;dyc3DmR$R=Ie z__XA4`F?T{0g>Qj<$Zj3q7Icthi9;x^*kja&pZEg8L@qKboSdBNuLhd1BWk`FG+|B zE*u*XYT*A{oj~F37UZ43gY)%vxIjLLWPML2M8a7I(&M;_-77K^m2wI9#00D^mipzl zvc(xGi3fvJa^YK>#etKz&B!Zm#Knddh$)Zo8A{qGzL;})`UsI((QX`GGeguDi9QJ& zK3lqE&XfrUeHA{iyG5vKHsW|KjgLzjVA0z>E`HKR^bzi6Ff(3U`qj$J)W;I|xvXN| z*vPP>G1?$Bwpnng(T*RhjQG9s9;}3n1CoKo8QZZ<79F^}CDbDckgO(s=g1Z3%!wnQ zXB4Px(Bt!4Wc!W8Y9hV?S>B6;#A-wUt4D3_N^zjCg6-^j$ebN#ZWMprD8*%)9<5Cl zG&>v}z_P*T%nlE@Nr<+X8SF3kb9K)Av^*~lv^yC}`F=hNE>IAVATYkKKa~%J0B?l3 z5wIH&9_WYKU28-Nk>~vAva9q~eKH(UVFIsSLBT@>7ZAuAtc`@0kys>##b8GH?Yc0p zR9tlD!A{8h@KhUbJqbfCt%DYB;ggw?5kWUD^&(KAvkR#fPoX~OCO};8vcO=aJ2u=C z1m%r}bzTITEp|xR?m@k?n%A#qUq4OjY9|qNS1`)Ji9KE*>o*(eNUtd1#V8ym6z2`j zXErf|j95QR85ImQ$&RfgGaj!rqO`%%o&S5z;Vo~eCnj=G6JS-aKQWR-mCFe;(>=C} zK#;7%adlhpMMuR2M5UNz*%^ArUrS&cK^1$Q>Mb4MyrX5|bWIbI=p9{pK2>(ZFO{oy$ zqj}>ne{2x89j76a1!2R?B&3cRCXgiYht7bG4EBYT(rou4FfDQPKK0SNJ6bvEL;IN- zr|DRvpGIOEL?3+Km^vmBQLpdo)ji zazQGQJ`&tXhB=ACYnt?UDfb9QtUG|`v%kRpi&X;PLwY6~O0jl#bcnyb&zkV$TbUHE z-p&L9;*Ha!0O`|eK4M8pVzS$@>EJmeY&?LIH|wGC7vr9T!5e!EvFFq^P)s)oov{tE zA)3mbOL?8G%i=`%wb}uLj1vfafB8PrV*Ro3*|2Vx5|`6<2HzE3#g_c5xKDD(2MeZP z(WH^E*=(?rNSeF#2yzZyfLkiY+Vo^_EQgY-)h{egPi=f;J;gRTAJpB#Ik<&1oEJed#W62hQsufF~Zb8%4&pXd{PXw3LpB@ zS0<}N)q$?ZRzwy5=!ebUa_D|7DFXQgTYHyX{2W4z?-LPV197C9oS?!xaT5QXZ>_w8 zB`h?W;V8(S8j>6vp?{)#L40_y?%3v+LndhZseTAh8VRxY7N#IjDf8qHzMv6#!Z$2N zgRQI50RI3)4iE1a{IOMW8*LMB{nyjCi-l4=J?EMqhpw-b~EbPHXS(2-PD<3vX}`G36%Z{#0?KX?y~d& dUsC@SU;qFR+b9Sb?3e%m002ovPDHLkV1hX3J-Pq@ literal 0 HcmV?d00001 diff --git a/e107_plugins/import/images/e107.png b/e107_plugins/import/images/e107.png new file mode 100644 index 0000000000000000000000000000000000000000..5ead55e2116c7e53f30031da3ac4fcc2a5611c41 GIT binary patch literal 2880 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 elFfcO&_=LCuxj^vg)2BOk?i@RI zY}c+`+qZAGx3?D%5MW_pF?Q-Pb(v)2J=NA{wu9eH=b$+*A&b4ER`|!R3Q5@#p1LMB zdrM5#j>P=!sl|IT%l7A19W1On;t@L2(7wgorGr~6TudfZS|eS}Fjv#8T+6bBjmJ${ zCyh_UTUI$*TC0MU%ZZiCR#4Q0nN9uw|NqRaQjBcY%*?D1SB(%-e5VG`r#=j#K41?Y zkYJEt5N8lSAbu$UC<+2h4C^aY%Ac1#E?b|=D8ef8n}OjYBUlC)k83V4GcbpOc`QJ3 z2M`PWTpy*MSq)V$^m9kTOa|_<^|6fnLchMOGGO?{lvBQ%chy{e7RK_P3|0oAUmk}| zMZPnHuz^Be=+_qiA_i3k2L_J=Lciu5He={v@BoTJ>@@&7CubE<8PJ>)OgRh^mm%U2 z3=CzP6E`P1Bu13!lx+s8U!Qp)(V^^j+2)U|B0%*(pwGZqwmxcohJeWLGLDa|Ou643 z^!K?sGB7eYlwXc<@c6pBpMe8p*YDi#9N*tCeP_yLV-*ql&GD;);W~p5gU6+|X9}0@ zGyG=ofS3t%LjzL|(43rA2EPTE9)Z*xhuF0RND2KC`Ym((4TAvKOrhWY-z^vznQ|fS z2igh@LyMU|3xFyaOM?7@862M7NCR<_yxm;OkH}&M20djEW~^9hUj__- zJWm(L5DWj_tKEI83X*zb$E!!;$|f`h zJb&TS$a8q2SElurxy+6ex;ahR8e0 zxoC-h_U2tidkgkAt+I=~#kX~(iur-R|E7FAxI8(;)$_w~R(C_s%S}fTFEy@~JIWJR zKgs-a-tn4Rx0AOg_4<8Ur;;1@?d0Me9LAN+J%!mUd#bnA#?96{=yUIJMC{j>ODb}E z7T4IwdCq!jd3MKT-4{ni?!@g7HM|iPDB?6tMcXld`=T8)eQd?cB`ip4-KhA6tS$=p^ZhYOZ~TyM$&Z zAM%_cqj3Ly`Tcr3d6BipCS=W0t4vVWY3DPIkJFI<`EkD+#MV=1|+S~ZFOXcm{hr6{?qr9${HFM1C`ZZ03^>_XL zwy>p(zbia!P}iMz@9>N~FYm)Ym~Hp||JVQFdHu|MCHGm*JD;T30h1$xr>mdKI;Vst E0OQv6V*mgE literal 0 HcmV?d00001 diff --git a/e107_plugins/import/images/joomla.png b/e107_plugins/import/images/joomla.png new file mode 100644 index 0000000000000000000000000000000000000000..86a7136a2cbb3733fa17970da308081c63ad355f GIT binary patch literal 2211 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 literal 0 HcmV?d00001 diff --git a/e107_plugins/import/images/phpnuke.png b/e107_plugins/import/images/phpnuke.png new file mode 100644 index 0000000000000000000000000000000000000000..0f55e0bff51ba772adf87f6d6042d4c9908e99ac GIT binary patch literal 2593 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 == NULL) + /** + * Connect to the external DB if not already connected + */ + function db_Connect($server, $user, $password, $database, $prefix) { - $this->ourDB = new db; - $result = $this->ourDB->db_Connect($server, $user, $password, $database); - $this->DBPrefix = $prefix; - if ($result) - { - return $result; - } + if ($this->ourDB == NULL) + { + $this->ourDB = new db; + $result = $this->ourDB->db_Connect($server, $user, $password, $database); + $this->DBPrefix = $prefix; + if ($result) + { + return $result; + } + } + + return TRUE; } - return TRUE; - } - - // Set up a query for the specified task. If $blank_user is TRUE, user ID Data in source data is ignored - // Returns TRUE on success. FALSE on error - function setupQuery($task, $blank_user=FALSE) - { - return FALSE; - } - - - function saveData($dataRecord) - { - switch($this->currentTask) + /** + * Set up a query for the specified task. If $blank_user is TRUE, user ID Data in source data is ignored + * @return boolean TRUE on success. FALSE on error + */ + function setupQuery($task, $blank_user=FALSE) { - case 'users' : - return $this->saveUserData($dataRecord); - break; - case 'forumdefs' : - return $this->saveForumData($dataRecord); - return FALSE; - case 'forumposts' : - return $this->savePostData($dataRecord); - return FALSE; - case 'polls' : - return FALSE; - case 'news' : - return FALSE; + return FALSE; } - return FALSE; + + + function saveData($dataRecord) + { + switch($this->currentTask) + { + case 'users' : + return $this->saveUserData($dataRecord); + break; + + case 'news' : + return $this->saveNewsData($dataRecord); + break; + + case 'page' : + return $this->savePageData($dataRecord); + break; + + case 'links' : + return $this->saveLinksData($dataRecord); + break; + + case 'media' : + return $this->saveMediaData($dataRecord); + break; + + case 'forumdefs' : + return $this->saveForumData($dataRecord); + break; + + case 'forumposts' : + return $this->savePostData($dataRecord); + break; + + case 'polls' : + break; + } + + return FALSE; } // Return the next record as an array. All data has been converted to the appropriate E107 formats // Return FALSE if no more data // Its passed a record initialised with the default values - function getNext($initial) - { - $result = $this->ourDB->db_Fetch(); - if (!$result) return FALSE; - switch($this->currentTask) + function getNext($initial,$mode='db') { - case 'users' : - return $this->copyUserData($initial, $result); - break; - case 'forumdefs' : - return FALSE; - case 'forumposts' : - return FALSE; - case 'polls' : - return FALSE; - case 'news' : - return FALSE; + if($mode == 'db') + { + $result = $this->ourDB->db_Fetch(); + } + else + { + $result = current($this->arrayData); + next($this->arrayData); + } + + + if (!$result) return FALSE; + switch($this->currentTask) + { + case 'users' : + return $this->copyUserData($initial, $result); + break; + + case 'news' : + return $this->copyNewsData($initial, $result); + break; + + case 'page' : + return $this->copyPageData($initial, $result); + break; + + case 'links' : + return $this->copyLinksData($initial, $result); + break; + + case 'media' : + return $this->copyMediaData($initial, $result); + break; + + case 'forumdefs' : + break; + + case 'forumposts' : + break; + + case 'polls' : + break; + + + } + + return FALSE; } - return FALSE; - } - // Called to signal that current task is complete; tidy up as required - function endQuery() - { - $this->currentTask = ''; - } + // Called to signal that current task is complete; tidy up as required + function endQuery() + { + $this->currentTask = ''; + } - // Empty function which descendants can inherit from - function copyUserData(&$target, &$source) - { - return $target; - } + // Empty functions which descendants can inherit from + + function copyUserData(&$target, &$source) + { + return $target; + } + + function copyNewsData(&$target, &$source) + { + return $target; + } + + function copyPageData(&$target, &$source) + { + return $target; + } + + function copyLinksData(&$target, &$source) + { + return $target; + } + + function copyMediaData(&$target, &$source) + { + return $target; + } } diff --git a/e107_plugins/import/languages/English_admin_import.php b/e107_plugins/import/languages/English_admin_import.php index ebe184769..9ccbc74b3 100644 --- a/e107_plugins/import/languages/English_admin_import.php +++ b/e107_plugins/import/languages/English_admin_import.php @@ -73,5 +73,5 @@ define('LAN_CONVERT_43','Error connecting to source database'); define('LAN_CONVERT_44','Query setup error for '); define('LAN_CONVERT_45','Cannot read import code file'); define('LAN_CONVERT_46','Error: --ERRNUM-- while writing to --DB-- database, line '); -define('LAN_CONVERT_47','Block --BLOCK-- import completed. --LINES-- read, --USERS-- added, --ERRORS-- errors'); +define('LAN_CONVERT_47','Batch --BLOCK-- import completed. --LINES-- read, --USERS-- added, --ERRORS-- errors'); define('LAN_CONVERT_48','Forum posts'); diff --git a/e107_plugins/import/PHPFusion_import_class.php b/e107_plugins/import/providers/PHPFusion_import_class.php similarity index 100% rename from e107_plugins/import/PHPFusion_import_class.php rename to e107_plugins/import/providers/PHPFusion_import_class.php diff --git a/e107_plugins/import/PHPNuke_import_class.php b/e107_plugins/import/providers/PHPNuke_import_class.php similarity index 100% rename from e107_plugins/import/PHPNuke_import_class.php rename to e107_plugins/import/providers/PHPNuke_import_class.php diff --git a/e107_plugins/import/coppermine_import_class.php b/e107_plugins/import/providers/coppermine_import_class.php similarity index 100% rename from e107_plugins/import/coppermine_import_class.php rename to e107_plugins/import/providers/coppermine_import_class.php diff --git a/e107_plugins/import/drupal_import_class.php b/e107_plugins/import/providers/drupal_import_class.php similarity index 100% rename from e107_plugins/import/drupal_import_class.php rename to e107_plugins/import/providers/drupal_import_class.php diff --git a/e107_plugins/import/e107_import_class.php b/e107_plugins/import/providers/e107_import_class.php similarity index 100% rename from e107_plugins/import/e107_import_class.php rename to e107_plugins/import/providers/e107_import_class.php diff --git a/e107_plugins/import/ikonboard_import_class.php b/e107_plugins/import/providers/ikonboard_import_class.php similarity index 100% rename from e107_plugins/import/ikonboard_import_class.php rename to e107_plugins/import/providers/ikonboard_import_class.php diff --git a/e107_plugins/import/providers/joomla_import_class.php b/e107_plugins/import/providers/joomla_import_class.php new file mode 100644 index 000000000..e8f37d4f0 --- /dev/null +++ b/e107_plugins/import/providers/joomla_import_class.php @@ -0,0 +1,83 @@ +ourDB == NULL) return FALSE; + switch ($task) + { + case 'users' : + $result = $this->ourDB->db_Select_gen("SELECT * FROM {$this->DBPrefix}users"); + if ($result === FALSE) return FALSE; + break; + default : + return FALSE; + } + $this->copyUserInfo = !$blank_user; + $this->currentTask = $task; + return TRUE; + } + + + //------------------------------------ + // Internal functions below here + //------------------------------------ + + // Copy data read from the DB into the record to be returned. + function copyUserData(&$target, &$source) + { + if ($this->copyUserInfo) $target['user_id'] = $source['id']; + $target['user_name'] = $source['name']; + $target['user_loginname'] = $source['username']; + $target['user_password'] = $source['password']; + $target['user_email'] = $source['email']; +// $target['user_hideemail'] = $source['user_viewemail']; + $target['user_join'] = $source['registerDate']; + $target['user_admin'] = ($source['usertype'] == 'superadministrator') ? 1 : 0; + + if ($target['user_admin'] != 0) + { + $target['user_perms'] = '0.'; + } + + $target['user_lastvisit'] = $source['lastvisitDate']; + $target['user_login'] = $source['name']; + $target['user_ban'] = ($source['block'] ? 2 : 0); + + return $target; + } + +} + + +?> \ No newline at end of file diff --git a/e107_plugins/import/mambo_import_class.php b/e107_plugins/import/providers/mambo_import_class.php similarity index 100% rename from e107_plugins/import/mambo_import_class.php rename to e107_plugins/import/providers/mambo_import_class.php diff --git a/e107_plugins/import/phpbb2_import_class.php b/e107_plugins/import/providers/phpbb2_import_class.php similarity index 100% rename from e107_plugins/import/phpbb2_import_class.php rename to e107_plugins/import/providers/phpbb2_import_class.php diff --git a/e107_plugins/import/providers/rss_import_class.php b/e107_plugins/import/providers/rss_import_class.php new file mode 100644 index 000000000..94054db4a --- /dev/null +++ b/e107_plugins/import/providers/rss_import_class.php @@ -0,0 +1,294 @@ +setOptArrayTags('plugin'); // make sure 'plugin' tag always returns an array + + + switch ($task) + { + case 'users' : + //$query = "SELECT * FROM {$this->DBPrefix}users WHERE `user_id` != 1"; + + break; + + case 'news' : + // $result = $xml->loadXMLfile($file,true); + // $rawData = $xml->getRemoteFile($file); + // $rss = new MagpieRSS( $rawData ); + // $array = $xml->xml2array($rss); + + $xml->setOptArrayTags('item'); // make sure 'plugin' tag always returns an array + $array = $xml->loadXMLfile($file,'advanced'); + $this->arrayData = $array['channel']['item']; + + if ($result === FALSE) return FALSE; + break; + + case 'page' : + + if ($result === FALSE) return FALSE; + break; + + case 'media' : + + break; + + case 'links': + + if ($result === FALSE) return FALSE; + break; + + default : + return FALSE; + } + + $this->copyUserInfo = !$blank_user; + $this->currentTask = $task; + return TRUE; + } + + + //------------------------------------ + // Internal functions below here + //------------------------------------ + + /** + * Align source data to e107 User Table + * @param $target array - default e107 target values for e107_user table. + * @param $source array - WordPress table data + */ + function copyUserData(&$target, &$source) + { + + } + + /** + * Align source data to e107 News Table + * @param $target array - default e107 target values for e107_news table. + * @param $source array - WordPress table data + */ + function copyNewsData(&$target, &$source) + { + /* Example: + [ID] => 88 + [post_author] => 1 + [post_date] => 2012-01-25 04:11:22 + [post_date_gmt] => 2012-01-25 09:11:22 + [post_content] => [gallery itemtag="div" icontag="span" captiontag="p" link="file"] + [post_title] => Media Gallery + [post_excerpt] => + [post_status] => inherit + [comment_status] => open + [ping_status] => open + [post_password] => + [post_name] => 10-revision-6 + [to_ping] => + [pinged] => + [post_modified] => 2012-01-25 04:11:22 + [post_modified_gmt] => 2012-01-25 09:11:22 + [post_content_filtered] => + [post_parent] => 10 + [guid] => http://siteurl.com/2012/01/25/10-revision-6/ + [menu_order] => 0 + [post_type] => post + [post_mime_type] => + [comment_count] => 0 + */ + + // $target['news_id'] = $source['ID']; + $target['news_title'] = $source['post_title']; + $target['news_sef'] = $source['post_name']; + $target['news_body'] = $source['post_content']; + // $target['news_extended'] = ''; + // $target['news_meta_keywords'] = ''; + // $target['news_meta_description'] = ''; + $target['news_datestamp'] = strtotime($source['post_date']); + $target['news_author'] = $source['post_author']; + // $target['news_category'] = ''; + $target['news_allow_comments'] = ($source['comment_status']=='open') ? 1 : 0; + $target['news_start'] = ''; + $target['news_end'] = ''; + $target['news_class'] = ''; + $target['news_render_type'] = ''; + $target['news_comment_total'] = $source['comment_count']; + $target['news_summary'] = $source['post_excerpt']; + $target['news_thumbnail'] = ''; + $target['news_sticky'] = ''; + + // return $target; // comment out to debug + + // DEBUG INFO BELOW. + $this->renderDebug($source,$target); + } + + + + + /** + * Align source data to e107 Page Table + * @param $target array - default e107 target values for e107_page table. + * @param $source array - WordPress table data + */ + function copyPageData(&$target, &$source) + { + $tp = e107::getParser(); + /* post_status: + publish - A published post or page + inherit - a revision + pending - post is pending review + private - a private post + future - a post to publish in the future + draft - a post in draft status + trash - post is in trashbin (available with 2.9) + */ + + if($source['post_status']=='private' || $source['post_status']=='future' || $source['post_status'] == 'draft') + { + $target['page_class'] = e_UC_ADMIN; + } + + // $target['page_id'] = $source['ID']; // auto increment + $target['page_title'] = $source['post_title']; + $target['page_sef'] = $source['post_name']; + $target['page_text'] = "[html]".$source['post_content']."[/html]"; + $target['page_metakeys'] = ''; + $target['page_metadscr'] = ''; + $target['page_datestamp'] = strtotime($source['post_date']); + $target['page_author'] = $source['post_author']; + // $target['page_category'] = '', + $target['page_comment_flag'] = ($source['comment_status']=='open') ? 1 : 0; + $target['page_password'] = $source['post_password']; + + return $target; // comment out to debug + + // DEBUG INFO BELOW. + $this->renderDebug($source,$target); + + } + + + /** + * Align source data to e107 Links Table + * @param $target array - default e107 target values for e107_links table. + * @param $source array - WordPress table data + */ + function copyLinksData(&$target, &$source) + { + $tp = e107::getParser(); + /* WP + link_id + link_url + link_name + link_image + link_target + link_description + link_visible + link_owner + link_rating + link_updated + link_rel + link_notes + link_rss + * + * e107 + * link_id + link_name + link_url + link_description + link_button + link_category + link_order + link_parent + link_open + link_class + link_function + link_sefurl + */ + + + // $target['page_id'] = $source['ID']; // auto increment + $target['link_name'] = $source['post_title']; + $target['link_url'] = $source['post_name']; + $target['link_description'] = "[html]".$source['post_content']."[/html]"; + $target['link_button'] = ''; + $target['link_category'] = ''; + $target['link_order'] = strtotime($source['post_date']); + $target['link_parent'] = $source['post_author']; + $target['link_open'] = ''; + $target['link_class'] = ''; + $target['link_sefurl'] = $source['post_password']; + + // return $target; // comment out to debug + + // DEBUG INFO BELOW. + $this->renderDebug($source,$target); + + } + + + + + + + + + + + function renderDebug($source,$target) + { + echo " +
+ + + + + +
".print_a($source,TRUE)."".print_a($target,TRUE)."
+
"; + } + +} + + +?> \ No newline at end of file diff --git a/e107_plugins/import/smf_import_class.php b/e107_plugins/import/providers/smf_import_class.php similarity index 100% rename from e107_plugins/import/smf_import_class.php rename to e107_plugins/import/providers/smf_import_class.php diff --git a/e107_plugins/import/providers/wordpress_import_class.php b/e107_plugins/import/providers/wordpress_import_class.php new file mode 100644 index 000000000..0f4b342cc --- /dev/null +++ b/e107_plugins/import/providers/wordpress_import_class.php @@ -0,0 +1,354 @@ +ourDB == NULL) return FALSE; + + switch ($task) + { + case 'users' : + //$query = "SELECT * FROM {$this->DBPrefix}users WHERE `user_id` != 1"; + + $query = "SELECT u.*, + w.meta_value AS admin, + f.meta_value as firstname, + l.meta_value as lastname + FROM {$this->DBPrefix}users AS u + LEFT JOIN {$this->DBPrefix}usermeta AS w ON (u.ID = w.user_id AND w.meta_key = 'wp_capabilities') + LEFT JOIN {$this->DBPrefix}usermeta AS f ON (u.ID = f.user_id AND f.meta_key = 'first_name') + LEFT JOIN {$this->DBPrefix}usermeta AS l ON (u.ID = l.user_id AND l.meta_key = 'last_name') + GROUP BY u.ID"; + + // $this->ourDB -> db_Select_gen($query); + + $result = $this->ourDB->db_Select_gen($query); + + if ($result === FALSE) return FALSE; + + break; + + case 'userclass' : + /* For reference: (stored in usermeta -> wp_capabilities + * Administrator - Somebody who has access to all the administration features + * Editor - Somebody who can publish posts, manage posts as well as manage other people's posts, etc. + * Author - Somebody who can publish and manage their own posts + * Contributor - Somebody who can write and manage their posts but not publish posts + * Subscriber - Somebody who can read comments/comment/receive news letters, etc. + */ + + break; + + case 'news' : + $query = "SELECT * FROM {$this->DBPrefix}posts WHERE post_type = 'post' AND post_status !='trash' ORDER BY ID"; + $result = $this->ourDB->db_Select_gen($query); + if ($result === FALSE) return FALSE; + break; + + case 'page' : + $query = "SELECT * FROM {$this->DBPrefix}posts WHERE post_type = 'page' AND post_status !='trash' ORDER BY ID"; + $result = $this->ourDB->db_Select_gen($query); + if ($result === FALSE) return FALSE; + break; + + case 'media' : + $query = "SELECT * FROM {$this->DBPrefix}posts WHERE post_type = 'attachment' AND post_status !='trash' ORDER BY ID"; + $result = $this->ourDB->db_Select_gen($query); + if ($result === FALSE) return FALSE; + break; + + case 'links': + $query = "SELECT * FROM {$this->DBPrefix}links WHERE link_id !='' ORDER BY link_id"; + $result = $this->ourDB->db_Select_gen($query); + if ($result === FALSE) return FALSE; + break; + + default : + return FALSE; + } + + $this->copyUserInfo = !$blank_user; + $this->currentTask = $task; + return TRUE; + } + + + //------------------------------------ + // Internal functions below here + //------------------------------------ + + /** + * Align source data to e107 User Table + * @param $target array - default e107 target values for e107_user table. + * @param $source array - WordPress table data + */ + function copyUserData(&$target, &$source) + { + $user_meta = unserialize($source['admin']); + + if ($this->copyUserInfo) + { + $target['user_id'] = $source['ID']; + } + + $target['user_name'] = $source['user_nicename']; + $target['user_loginname'] = $source['user_login']; + $target['user_password'] = $source['user_pass']; // needs to be salted!!!! + $target['user_email'] = $source['user_email']; + $target['user_hideemail'] = $source['user_hideemail']; + $target['user_join'] = strtotime($source['user_registered']); + $target['user_admin'] = ($user_meta['administrator'] == 1) ? 1 : 0; + $target['user_lastvisit'] = $source['user_lastvisit']; + $target['user_login'] = $source['firstname']." ".$source['lastname']; + $target['user_ban'] = $source['user_ban']; + $target['user_customtitle'] = $source['display_name']; + $target['user_sess'] = $source['user_sess']; // Photo + $target['user_signature'] = $source['user_signature']; + $target['user_image'] = $source['user_image']; // Avatar + $target['user_currentvisit'] = $source['user_currentvisit']; + $target['user_lastpost'] = $source['user_lastpost']; + $target['user_chats'] = $source['user_chats']; + $target['user_comments'] = $source['user_comments']; + + $target['user_ip'] = $source['user_ip']; + $target['user_prefs'] = $source['user_prefs']; + $target['user_visits'] = $source['user_visits']; + $target['user_class'] = $source['user_class']; + $target['user_perms'] = $source['user_perms']; + $target['user_xup'] = $source['user_xup']; + $target['user_language'] = $source['user_language']; + $target['user_country'] = $source['user_country']; + $target['user_location'] = $source['user_location']; + $target['user_aim'] = $source['user_aim']; + $target['user_icq'] = $source['user_icq']; + $target['user_yahoo'] = $source['user_yahoo']; + $target['user_msn'] = $source['user_msn']; + $target['user_homepage'] = $source['user_url']; + $target['user_birthday'] = $source['user_birthday']; + $target['user_timezone'] = $source['user_timezone']; + + $this->renderDebug($source,$target); + + //return $target; + } + + /** + * Align source data to e107 News Table + * @param $target array - default e107 target values for e107_news table. + * @param $source array - WordPress table data + */ + function copyNewsData(&$target, &$source) + { + /* Example: + [ID] => 88 + [post_author] => 1 + [post_date] => 2012-01-25 04:11:22 + [post_date_gmt] => 2012-01-25 09:11:22 + [post_content] => [gallery itemtag="div" icontag="span" captiontag="p" link="file"] + [post_title] => Media Gallery + [post_excerpt] => + [post_status] => inherit + [comment_status] => open + [ping_status] => open + [post_password] => + [post_name] => 10-revision-6 + [to_ping] => + [pinged] => + [post_modified] => 2012-01-25 04:11:22 + [post_modified_gmt] => 2012-01-25 09:11:22 + [post_content_filtered] => + [post_parent] => 10 + [guid] => http://siteurl.com/2012/01/25/10-revision-6/ + [menu_order] => 0 + [post_type] => post + [post_mime_type] => + [comment_count] => 0 + */ + + // $target['news_id'] = $source['ID']; + $target['news_title'] = $source['post_title']; + $target['news_sef'] = $source['post_name']; + $target['news_body'] = $source['post_content']; + // $target['news_extended'] = ''; + // $target['news_meta_keywords'] = ''; + // $target['news_meta_description'] = ''; + $target['news_datestamp'] = strtotime($source['post_date']); + $target['news_author'] = $source['post_author']; + // $target['news_category'] = ''; + $target['news_allow_comments'] = ($source['comment_status']=='open') ? 1 : 0; + $target['news_start'] = ''; + $target['news_end'] = ''; + $target['news_class'] = ''; + $target['news_render_type'] = ''; + $target['news_comment_total'] = $source['comment_count']; + $target['news_summary'] = $source['post_excerpt']; + $target['news_thumbnail'] = ''; + $target['news_sticky'] = ''; + + return $target; // comment out to debug + + // DEBUG INFO BELOW. + $this->renderDebug($source,$target); + } + + + + + /** + * Align source data to e107 Page Table + * @param $target array - default e107 target values for e107_page table. + * @param $source array - WordPress table data + */ + function copyPageData(&$target, &$source) + { + $tp = e107::getParser(); + /* post_status: + publish - A published post or page + inherit - a revision + pending - post is pending review + private - a private post + future - a post to publish in the future + draft - a post in draft status + trash - post is in trashbin (available with 2.9) + */ + + if($source['post_status']=='private' || $source['post_status']=='future' || $source['post_status'] == 'draft') + { + $target['page_class'] = e_UC_ADMIN; + } + + // $target['page_id'] = $source['ID']; // auto increment + $target['page_title'] = $source['post_title']; + $target['page_sef'] = $source['post_name']; + $target['page_text'] = "[html]".$source['post_content']."[/html]"; + $target['page_metakeys'] = ''; + $target['page_metadscr'] = ''; + $target['page_datestamp'] = strtotime($source['post_date']); + $target['page_author'] = $source['post_author']; + // $target['page_category'] = '', + $target['page_comment_flag'] = ($source['comment_status']=='open') ? 1 : 0; + $target['page_password'] = $source['post_password']; + + return $target; // comment out to debug + + // DEBUG INFO BELOW. + $this->renderDebug($source,$target); + + } + + + /** + * Align source data to e107 Links Table + * @param $target array - default e107 target values for e107_links table. + * @param $source array - WordPress table data + */ + function copyLinksData(&$target, &$source) + { + $tp = e107::getParser(); + /* WP + link_id + link_url + link_name + link_image + link_target + link_description + link_visible + link_owner + link_rating + link_updated + link_rel + link_notes + link_rss + * + * e107 + * link_id + link_name + link_url + link_description + link_button + link_category + link_order + link_parent + link_open + link_class + link_function + link_sefurl + */ + + + // $target['page_id'] = $source['ID']; // auto increment + $target['link_name'] = $source['post_title']; + $target['link_url'] = $source['post_name']; + $target['link_description'] = "[html]".$source['post_content']."[/html]"; + $target['link_button'] = ''; + $target['link_category'] = ''; + $target['link_order'] = strtotime($source['post_date']); + $target['link_parent'] = $source['post_author']; + $target['link_open'] = ''; + $target['link_class'] = ''; + $target['link_sefurl'] = $source['post_password']; + + // return $target; // comment out to debug + + // DEBUG INFO BELOW. + $this->renderDebug($source,$target); + + } + + + + + + + + + + + function renderDebug($source,$target) + { + echo " +
+ + + + + +
".print_a($source,TRUE)."".print_a($target,TRUE)."
+
"; + } + +} + + +?> \ No newline at end of file diff --git a/e107_plugins/import/wordpress_import_class.php b/e107_plugins/import/wordpress_import_class.php deleted file mode 100644 index 4fc467e63..000000000 --- a/e107_plugins/import/wordpress_import_class.php +++ /dev/null @@ -1,141 +0,0 @@ -ourDB == NULL) return FALSE; - switch ($task) - { - case 'users' : - $query = "SELECT * FROM {$this->DBPrefix}users WHERE `user_id` != 1"; - - $query = "SELECT u.*, - w.meta_value AS admin, - f.meta_value as firstname, - l.meta_value as lastname - FROM {$this->DBPrefix}users AS u - LEFT JOIN {$this->DBPrefix}usermeta AS w ON (u.ID = w.user_id AND w.meta_key = 'wp_capabilities') - LEFT JOIN {$this->DBPrefix}usermeta AS f ON (u.ID = f.user_id AND f.meta_key = 'first_name') - LEFT JOIN {$this->DBPrefix}usermeta AS l ON (u.ID = l.user_id AND l.meta_key = 'last_name') - GROUP BY u.ID"; - - $this->ourDB -> db_Select_gen($query); - - $result = $this->ourDB->db_Select_gen($query); - - if ($result === FALSE) return FALSE; - break; - - case 'userclass' : - - /* For reference: (stored in usermeta -> wp_capabilities - * Administrator - Somebody who has access to all the administration features - * Editor - Somebody who can publish posts, manage posts as well as manage other people's posts, etc. - * Author - Somebody who can publish and manage their own posts - * Contributor - Somebody who can write and manage their posts but not publish posts - * Subscriber - Somebody who can read comments/comment/receive news letters, etc. - */ - - break; - - - - default : - return FALSE; - } - $this->copyUserInfo = !$blank_user; - $this->currentTask = $task; - return TRUE; - } - - - //------------------------------------ - // Internal functions below here - //------------------------------------ - - // Copy data read from the DB into the record to be returned. - function copyUserData(&$target, &$source) - { - $user_meta = unserialize($source['admin']); - - if ($this->copyUserInfo) - { - $target['user_id'] = $source['ID']; - } - $target['user_name'] = $source['user_nicename']; - $target['user_loginname'] = $source['user_login']; - $target['user_password'] = $source['user_pass']; // needs to be salted!!!! - $target['user_email'] = $source['user_email']; - $target['user_hideemail'] = $source['user_hideemail']; - $target['user_join'] = strtotime($source['user_registered']); - $target['user_admin'] = ($user_meta['administrator'] == 1) ? 1 : 0; - $target['user_lastvisit'] = $source['user_lastvisit']; - $target['user_login'] = $source['firstname']." ".$source['lastname']; - $target['user_ban'] = $source['user_ban']; - $target['user_customtitle'] = $source['display_name']; - $target['user_sess'] = $source['user_sess']; // Photo - $target['user_signature'] = $source['user_signature']; - $target['user_image'] = $source['user_image']; // Avatar - $target['user_currentvisit'] = $source['user_currentvisit']; - $target['user_lastpost'] = $source['user_lastpost']; - $target['user_chats'] = $source['user_chats']; - $target['user_comments'] = $source['user_comments']; - - $target['user_ip'] = $source['user_ip']; - $target['user_prefs'] = $source['user_prefs']; - $target['user_visits'] = $source['user_visits']; - $target['user_class'] = $source['user_class']; - $target['user_perms'] = $source['user_perms']; - $target['user_xup'] = $source['user_xup']; - $target['user_language'] = $source['user_language']; - $target['user_country'] = $source['user_country']; - $target['user_location'] = $source['user_location']; - $target['user_aim'] = $source['user_aim']; - $target['user_icq'] = $source['user_icq']; - $target['user_yahoo'] = $source['user_yahoo']; - $target['user_msn'] = $source['user_msn']; - $target['user_homepage'] = $source['user_url']; - $target['user_birthday'] = $source['user_birthday']; - $target['user_timezone'] = $source['user_timezone']; - - -// user_pass user_nicename user_email user_url user_registered user_activation_key user_status display_name - - return $target; - } - -} - - -?>