PageRenderTime 41ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/e107_plugins/import/admin_import.php

https://github.com/CasperGemini/e107
PHP | 1632 lines | 575 code | 275 blank | 782 comment | 65 complexity | 284fa5126d73f166fce1cb4eb87ee0bb MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. /*
  3. * e107 website system
  4. *
  5. * Copyright (C) 2008-2013 e107 Inc (e107.org)
  6. * Released under the terms and conditions of the
  7. * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
  8. *
  9. */
  10. /**
  11. * e107 Import plugin
  12. *
  13. * @package e107_plugins
  14. * @subpackage import
  15. Routine manages import from other databases
  16. Options supported:
  17. CSV (with format file)
  18. WordPress (users)
  19. Mambo/Joomla
  20. PHPBB2
  21. PHPBB3
  22. SMF
  23. PHPNuke
  24. proboards
  25. PHPFusion
  26. */
  27. define('IMPORT_DEBUG',TRUE);
  28. // define('IMPORT_DEBUG',TRUE);
  29. require_once("../../class2.php");
  30. // define("USE_PERSISTANT_DB",TRUE);
  31. $frm = e107::getForm();
  32. $mes = e107::getMessage();
  33. //e107::lan('import',e_LANGUAGE.'_admin_import.php');
  34. //XXX A Fresh Start
  35. class import_admin extends e_admin_dispatcher
  36. {
  37. protected $modes = array(
  38. 'main' => array(
  39. 'controller' => 'import_main_ui',
  40. 'path' => null,
  41. 'ui' => 'import_admin_form_ui',
  42. 'uipath' => null
  43. ),
  44. 'cat' => array(
  45. 'controller' => 'import_cat_ui',
  46. 'path' => null,
  47. 'ui' => 'import_cat_form_ui',
  48. 'uipath' => null
  49. )
  50. );
  51. protected $adminMenu = array(
  52. 'main/list' => array('caption'=> LAN_LIST, 'perm' => '0'),
  53. // 'main/create' => array('caption'=> 'Create import', 'perm' => '0'),
  54. // 'cat/list' => array('caption'=> 'Categories', 'perm' => '0'),
  55. // 'cat/create' => array('caption'=> "Create Category", 'perm' => '0'),
  56. // 'main/prefs' => array('caption'=> LAN_PREFS, 'perm' => '0'),
  57. // 'main/custom' => array('caption'=> 'Custom Page', 'perm' => '0')
  58. );
  59. protected $adminMenuAliases = array(
  60. 'main/edit' => 'main/list'
  61. );
  62. protected $menuTitle = LAN_PLUGIN_IMPORT_NAME;
  63. }
  64. class import_main_ui extends e_admin_ui
  65. {
  66. protected $pluginTitle = LAN_PLUGIN_IMPORT_NAME;
  67. protected $pluginName = 'import';
  68. protected $table = false;
  69. protected $providers = array(); // the different types of import.
  70. protected $deleteExisting = false; // delete content from existing table during import.
  71. protected $selectedTables = array(); // User selection of what tables to import. eg. news, pages etc.
  72. protected $importClass = null;
  73. protected $checked_class_list = '';
  74. // Definitions of available areas to import
  75. protected $importTables = array(
  76. 'users' => array('message' => LAN_CONVERT_25, 'classfile' => 'import_user_class.php', 'classname' => 'user_import'),
  77. 'news' => array('message' => LAN_CONVERT_28, 'classfile' => 'import_news_class.php', 'classname' => 'news_import'),
  78. 'page' => array('message' => "Pages", 'classfile' => 'import_page_class.php', 'classname' => 'page_import'),
  79. 'links' => array('message' => "Links", 'classfile' => 'import_links_class.php', 'classname' => 'links_import'),
  80. 'media' => array('message' => "Media", 'classfile' => 'import_media_class.php', 'classname' => 'media_import'),
  81. 'forum' => array('message' => "Forum", 'classfile' => 'import_forum_class.php', 'classname' => 'forum_import'),
  82. 'forumthread' => array('message' => "Forum Topics/Threads", 'classfile' => 'import_forum_class.php', 'classname' => 'forumthread_import', 'nolist'=>true),
  83. 'forumpost' => array('message' => "Forum Posts", 'classfile' => 'import_forum_class.php', 'classname' => 'forumpost_import', 'nolist'=>true),
  84. 'forumtrack' => array('message' => "Forum Track", 'classfile' => 'import_forum_class.php', 'classname' => 'forumtrack_import', 'nolist'=>true),
  85. // 'forumpost' => array('message' => "Media", 'classfile' => 'import_media_class.php', 'classname' => 'media_import'),
  86. 'comments' => array('message'=> "Comments"),
  87. // 'forumdefs' => array('message' => LAN_CONVERT_26),
  88. // 'forumposts' => array('message' => LAN_CONVERT_48),
  89. // 'polls' => array('message' => LAN_CONVERT_27)
  90. );
  91. // without any Order or Limit.
  92. function init()
  93. {
  94. $fl = e107::getFile();
  95. $importClassList = $fl->get_files(e_PLUGIN.'import/providers', "^.+?_import_class\.php$", "standard", 1);
  96. foreach($importClassList as $file)
  97. {
  98. $tag = str_replace('_class.php','',$file['fname']);
  99. $key = str_replace("_import_class.php","",$file['fname']);
  100. include_once($file['path'].$file['fname']); // This will set up the variables
  101. $this->providers[$key] = $this->getMeta($tag);
  102. if(vartrue($_GET['type']))
  103. {
  104. $this->importClass = $_GET['type']."_import";
  105. }
  106. }
  107. }
  108. function help()
  109. {
  110. return "Some help text for admin-ui";
  111. }
  112. function getMeta($class_name)
  113. {
  114. if(class_exists($class_name))
  115. {
  116. $obj = new $class_name;
  117. return array('title' => vartrue($obj->title), 'description' => vartrue($obj->description), 'supported' => vartrue($obj->supported));
  118. }
  119. else
  120. {
  121. e107::getMessage()->addDebug("Missing class: ".$class_name);
  122. }
  123. }
  124. // After selection - decide where to route things.
  125. function importPage()
  126. {
  127. // print_a($_POST);
  128. $this->deleteExisting = varset($_POST['import_delete_existing_data'],0);
  129. if(varset($_POST['classes_select']))
  130. {
  131. $this->checked_class_list = implode(',',$_POST['classes_select']);
  132. }
  133. if(vartrue($_POST['createUserExtended'])) //TODO
  134. {
  135. $this->createUserExtended = true;
  136. }
  137. if(vartrue($_POST['selectedTables']))
  138. {
  139. $this->selectedTables = $_POST['selectedTables'];
  140. }
  141. if(vartrue($_POST['runConversion'])) // default method.
  142. {
  143. $this->runConversion($_POST['import_source']);
  144. return;
  145. }
  146. $this->showImportOptions($_GET['type']);
  147. }
  148. function listPage()
  149. {
  150. $mes = e107::getMessage();
  151. $frm = e107::getForm();
  152. $tableCount = 0;
  153. // $mes->addDebug(print_a($this->providers,true));
  154. $text = "
  155. <form method='get' action='".e_SELF."' id='core-import-form'>
  156. <fieldset id='core-import-select-type'>
  157. <legend class='e-hideme'>".'DBLAN_10'."</legend>
  158. ".$frm->hidden('mode','main')."
  159. ".$frm->hidden('action','import')."
  160. <table class='table adminlist'>
  161. <colgroup>
  162. <col />
  163. <col />
  164. <col />
  165. <col />
  166. <col />
  167. </colgroup>
  168. <thead>
  169. <tr>
  170. <th>".LAN_CONVERT_06."</th>";
  171. foreach($this->importTables as $val) // 1 column for each of users, news, forum etc.
  172. {
  173. if(vartrue($val['nolist'])){ continue; }
  174. $text .= "<th class='center'>".$val['message']."</th>";
  175. $tableCount++;
  176. }
  177. $text.="
  178. <th class='center'>".LAN_OPTIONS."</th>
  179. </tr>
  180. </thead>
  181. <tbody>";
  182. /*
  183. $text .= "
  184. <tr>
  185. <td><img src='".e_PLUGIN."import/images/csv.png' alt='' style='float:left;height:32px;width:32px;margin-right:4px'>CSV</td>
  186. <td class='center'>".ADMIN_TRUE_ICON."</td>";
  187. for ($i=0; $i < $tableCount-1; $i++)
  188. {
  189. $text .= "<td>&nbsp;</td>";
  190. }
  191. $text .= "<td class='center middle'>".$frm->admin_button('import_type', 'csv', 'other',"Select")."</td></tr>";
  192. */
  193. foreach ($this->providers as $k=>$info)
  194. {
  195. $title = $info['title'];
  196. $iconFile = e_PLUGIN."import/images/".str_replace("_import","",strtolower($k)).".png";
  197. $icon = (file_exists($iconFile)) ? "<img src='{$iconFile}' alt='' style='float:left;height:32px;width:32px;margin-right:4px'>" : "";
  198. $text .= "<!-- $title -->
  199. <tr><td >".$icon.$title."<div class='smalltext'>".$info['description']."</div></td>\n";
  200. foreach($this->importTables as $key=>$val)
  201. {
  202. if(vartrue($val['nolist'])){ continue; }
  203. $text .= "<td class='center'>".(in_array($key,$info['supported']) ? ADMIN_TRUE_ICON : "&nbsp;")."</td>\n";
  204. }
  205. $text .= "
  206. <td class='center middle'>";
  207. $text .= $frm->admin_button('type', $k, 'other',"Select");
  208. // $text .= $frm->admin_button('import_type', $k, 'other',"Select");
  209. $text .= "
  210. </td>
  211. </tr>";
  212. }
  213. $text .= "
  214. </tbody>
  215. </table>
  216. <div class='buttons-bar center'>
  217. ".$frm->hidden('trigger_import',1)."
  218. </div>
  219. </fieldset>
  220. </form>";
  221. echo $mes->render().$text;
  222. // $ns->tablerender(LAN_PLUGIN_IMPORT_NAME, $mes->render().$text);
  223. }
  224. function runConversion($import_source)
  225. {
  226. $frm = e107::getForm();
  227. $ns = e107::getRender();
  228. $mes = e107::getMessage();
  229. $abandon = TRUE;
  230. switch ($import_source)
  231. {
  232. case 'csv' :
  233. break;
  234. case 'db' :
  235. if($this->dbImport() == false)
  236. {
  237. $abandon = true;
  238. }
  239. break;
  240. case 'rss' :
  241. if($this->rssImport() == false)
  242. {
  243. $abandon = true;
  244. }
  245. break;
  246. }
  247. // if ($msg)
  248. // {
  249. // $mes->add($msg, E_MESSAGE_INFO); // $ns -> tablerender(LAN_CONVERT_30, $msg);
  250. // $msg = '';
  251. // }
  252. if ($abandon)
  253. {
  254. // unset($_POST['do_conversion']);
  255. $text = "
  256. <form method='get' action='".e_SELF."'>
  257. <div class='center'>
  258. ".$frm->admin_button('dummy_continue',LAN_CONTINUE, 'execute')."
  259. </div>
  260. </form>";
  261. echo $mes->render(). $text;
  262. // $ns -> tablerender(LAN_CONVERT_30,$mes->render(). $text);
  263. }
  264. }
  265. function renderConfig()
  266. {
  267. }
  268. function showImportOptions($type='csv')
  269. {
  270. global $csv_names, $e_userclass;
  271. $mode = $this->importClass;
  272. $frm = e107::getForm();
  273. $ns = e107::getRender();
  274. $mes = e107::getMessage();
  275. if (class_exists($mode))
  276. {
  277. $mes->addDebug("Class Available: ".$mode);
  278. $proObj = new $mode;
  279. if($proObj->init()===FALSE)
  280. {
  281. return;
  282. }
  283. }
  284. $message = "<strong>".LAN_CONVERT_05."</strong>";
  285. $mes->add($message, E_MESSAGE_WARNING);
  286. $text = "
  287. <form method='post' action='".e_SELF."?action=main&action=import&type=".$type."'>
  288. <table class='table adminform'>
  289. <colgroup>
  290. <col class='col-label' />
  291. <col class='col-control' />
  292. </colgroup>";
  293. /*
  294. if($mode == "csv")
  295. {
  296. $text .= "
  297. <tr>
  298. <td>".LAN_CONVERT_07."</td>
  299. <td><select name='csv_format' class='tbox'>\n";
  300. foreach ($csv_names as $k => $v)
  301. {
  302. $s = ($current_csv == $k) ? " selected='selected'" : '';
  303. $text .= "<option value='{$k}'{$s}>{$v}</option>\n";
  304. }
  305. $text .= "</select>\n
  306. </td>
  307. </tr>
  308. <tr>
  309. <td>".LAN_CONVERT_36."</td>
  310. <td><input class='tbox' type='text' name='csv_data_file' size='30' value='{$csv_data_file}' maxlength='100' /></td>
  311. </tr>
  312. <tr><td>".LAN_CONVERT_17."
  313. </td>
  314. <td>
  315. <input type='hidden' name='import_source' value='csv' />
  316. <input type='checkbox' name='csv_pw_not_encrypted' value='1'".($csv_pw_not_encrypted ? " checked='checked'" : '')."/>
  317. <span class='smallblacktext'>".LAN_CONVERT_18."</span></td>
  318. </tr>
  319. ";
  320. }
  321. else
  322. */
  323. $importType = $proObj->title;
  324. if($proObj->sourceType == 'db' || !$proObj->sourceType) // STANDARD db Setup
  325. {
  326. $text .= "
  327. <tr>
  328. <td>$importType ".LAN_CONVERT_19."</td>
  329. <td><input class='tbox' type='text' name='dbParamHost' size='30' value='".(varset($_POST['dbParamHost']) ? $_POST['dbParamHost'] : 'localhost')."' maxlength='100' /></td>
  330. </tr>
  331. <tr>
  332. <td >$importType ".LAN_CONVERT_20."</td>
  333. <td >
  334. <input class='tbox' type='text' name='dbParamUsername' size='30' value='".varset($_POST['dbParamUsername'])."' maxlength='100' />
  335. <div class='field-help'>Must be different from the one e107 uses.</div>
  336. </td>
  337. </tr>
  338. <tr>
  339. <td >$importType ".LAN_CONVERT_21."</td>
  340. <td ><input class='tbox' type='text' name='dbParamPassword' size='30' value='".varset($_POST['dbParamPassword'])."' maxlength='100' /></td>
  341. </tr>
  342. <tr>
  343. <td >$importType ".LAN_CONVERT_22."</td>
  344. <td ><input class='tbox' type='text' name='dbParamDatabase' size='30' value='".varset($_POST['dbParamDatabase'])."' maxlength='100' /></td>
  345. </tr>
  346. <tr>
  347. <td >$importType ".LAN_CONVERT_23."</td>
  348. <td ><input class='tbox' type='text' name='dbParamPrefix' size='30' value='".(varset($_POST['dbParamPrefix']) ? $_POST['dbParamPrefix'] : $proObj->mprefix)."' maxlength='100' />
  349. <input type='hidden' name='import_source' value='db' />
  350. </td>
  351. </tr>";
  352. }
  353. if(method_exists($proObj,"config")) // Config Found in Class - render options from it.
  354. {
  355. $ops = $proObj->config();
  356. foreach($ops as $key=>$val)
  357. {
  358. $text .= "<tr>
  359. <td>".$val['caption']."</td>
  360. <td>".$val['html'];
  361. $text .= (vartrue($val['help'])) ? "<div class='field-help'>".$val['help']."</div>" : "";
  362. $text .= "</td>
  363. </tr>\n";
  364. }
  365. }
  366. if($proObj->sourceType)
  367. {
  368. $text .= "<input type='hidden' name='import_source' value='".$proObj->sourceType."' />\n";
  369. }
  370. else
  371. {
  372. $text .= "<input type='hidden' name='import_source' value='db' />";
  373. }
  374. // if($mode != 'csv')
  375. {
  376. $text .= "
  377. <tr>
  378. <td >$importType ".LAN_CONVERT_24."</td>
  379. <td>";
  380. $defCheck = (count($proObj->supported)==1) ? true : false;
  381. foreach ($this->importTables as $k => $v)
  382. {
  383. if(in_array($k, $proObj->supported)) // display only the options supported.
  384. {
  385. $text .= $frm->checkbox('selectedTables['.$k.']', $k, $defCheck,array('label'=>$v['message']));
  386. //$text .= "<input type='checkbox' name='import_block_{$k}' id='import_block_{$k}' value='1' {$defCheck} />&nbsp;".$v['message'];
  387. // $text .= "<br />";
  388. }
  389. }
  390. $text .= "</td></tr>";
  391. }
  392. $text .= "
  393. <tr>
  394. <td>".LAN_CONVERT_38."</td>
  395. <td>".$frm->checkbox('import_delete_existing_data', 1,$_POST['import_delete_existing_data'], array('label'=>'&nbsp;','title'=>LAN_CONVERT_39))."</td>
  396. </tr>";
  397. //TODO
  398. /*
  399. if(in_array('users',$proObj->supported))
  400. {
  401. $text .= "<tr>
  402. <td>Create Extended User Fields</td>
  403. <td>".$frm->checkbox('createUserExtended', 1,'', array('label'=>'&nbsp;','title'=>'Will automatically add missing user-fields when found.'))."
  404. </td>
  405. </tr>";
  406. }
  407. */
  408. if(varset($proObj->defaultClass) !== false)
  409. {
  410. $text .= "
  411. <tr><td>".LAN_CONVERT_16."</td>
  412. <td>";
  413. $text .= $e_userclass->vetted_tree('classes_select',array($e_userclass,'checkbox'), varset($_POST['classes_select']),'main,admin,classes,matchclass, no-excludes');
  414. $text .= "</td></tr>";
  415. }
  416. $action = varset($proObj->action,'runConversion');
  417. $text .= "</table>
  418. <div class='buttons-bar center'>".$frm->admin_button($action,LAN_CONTINUE, 'execute').
  419. $frm->admin_button('back',LAN_CANCEL, 'cancel')."
  420. <input type='hidden' name='db_import_type' value='$mode' />
  421. <input type='hidden' name='import_type' value='".$mode."' />
  422. </div>
  423. </form>";
  424. // Now a little bit of JS to initialise some of the display divs etc
  425. // $temp = '';
  426. // if(varset($import_source)) { $temp .= "disp('{$import_source}');"; }
  427. // if (varset($current_db_type)) $temp .= " flagbits('{$current_db_type}');";
  428. // if (varset($temp)) $text .= "<script type=\"text/javascript\"> {$temp}</script>";
  429. $ns -> tablerender(LAN_PLUGIN_IMPORT_NAME.SEP.$importType, $mes->render().$text);
  430. }
  431. function rssImport()
  432. {
  433. global $current_db_type;
  434. $mes = e107::getMessage();
  435. $mes->addDebug("Loading: RSS");
  436. if(!varset($_POST['runConversion']))
  437. {
  438. $mes->addWarning("Under Construction");
  439. }
  440. return $this->dbImport('xml');
  441. }
  442. /** MAIN IMPORT AREA */
  443. function dbImport($mode='db')
  444. {
  445. $mes = e107::getMessage();
  446. $mes->addDebug("dbImport(): Loading: ".$this->importClass);
  447. if(!is_array($this->importTables))
  448. {
  449. $mes->addError("dbImport(): No areas selected for import"); // db connect failed
  450. return false;
  451. }
  452. if (class_exists($this->importClass))
  453. {
  454. $mes->addDebug("dbImport(): Converter Class Available: ".$this->importClass);
  455. $converter = new $this->importClass;
  456. $converter->init();
  457. }
  458. else
  459. {
  460. $mes->addError(LAN_CONVERT_42. "[".$this->importClass."]");
  461. $mes->addDebug("dbImport(): Class NOT Available: ".$this->importClass);
  462. return false;
  463. }
  464. if($mode == 'db') // Don't do DB check on RSS/XML
  465. {
  466. if (!isset($_POST['dbParamHost']) || !isset($_POST['dbParamUsername']) || !isset($_POST['dbParamPassword']) || !isset($_POST['dbParamDatabase']))
  467. {
  468. $mes->addError(LAN_CONVERT_41);
  469. return false;
  470. }
  471. $result = $converter->db_Connect($_POST['dbParamHost'], $_POST['dbParamUsername'], $_POST['dbParamPassword'], $_POST['dbParamDatabase'], $_POST['dbParamPrefix']);
  472. if ($result !== TRUE)
  473. {
  474. $mes->addError(LAN_CONVERT_43.": ".$result); // db connect failed
  475. return false;
  476. }
  477. }
  478. if(vartrue($converter->override))
  479. {
  480. $mes->addDebug("dbImport(): Override Active!" );
  481. return;
  482. }
  483. // Return
  484. foreach($this->selectedTables as $k => $tm)
  485. {
  486. $v = $this->importTables[$k];
  487. $loopCounter = 0;
  488. $errorCounter = 0;
  489. if (is_readable($v['classfile'])) // Load our class for either news, pages etc.
  490. {
  491. $mes->addDebug("dbImport(): Including File: ".$v['classfile']);
  492. require_once($v['classfile']);
  493. }
  494. else
  495. {
  496. $mes->addError(LAN_CONVERT_45.': '.$v['classfile']); // can't read class file.
  497. return false;
  498. }
  499. $mes->addDebug("dbImport(): Importing: ".$k);
  500. $exporter = new $v['classname']; // Writes the output data
  501. if(is_object($exporter))
  502. {
  503. $mes->addDebug("dbImport(): Exporter Class Initiated: ".$v['classname']);
  504. if(is_object($exporter->helperClass))
  505. {
  506. $mes->addDebug("dbImport(): Initiated Helper Class");
  507. $converter->helperClass = $exporter->helperClass;
  508. }
  509. }
  510. else
  511. {
  512. $mes->addDebug("dbImport(): Couldn't Initiate Class: ".$v['classname']);
  513. }
  514. $result = $converter->setupQuery($k, !$this->deleteExisting);
  515. if ($result !== TRUE)
  516. {
  517. $mes->addError(LAN_CONVERT_44.' '.$k); // couldn't set query
  518. break;
  519. }
  520. if($k == 'users') // Do any type-specific default setting
  521. {
  522. $mes->addDebug("dbImport(): Overriding Default for user_class: ".$this->checked_class_list);
  523. $exporter->overrideDefault('user_class', $this->checked_class_list);
  524. // break;
  525. }
  526. if ($this->deleteExisting == true)
  527. {
  528. $exporter->emptyTargetDB(); // Clean output DB - reasonably safe now
  529. }
  530. while ($row = $converter->getNext($exporter->getDefaults(),$mode))
  531. {
  532. $loopCounter++;
  533. $result = $exporter->saveData($row);
  534. if ($result !== TRUE)
  535. {
  536. $errorCounter++;
  537. $line_error = $exporter->getErrorText($result);
  538. // if ($msg) $msg .= "<br />";
  539. $msg = str_replace(array('--ERRNUM--','--DB--'),array($line_error,$k),LAN_CONVERT_46).$loopCounter;
  540. $mes->addError($msg); // couldn't set query
  541. }
  542. }
  543. $converter->endQuery();
  544. unset($exporter);
  545. $msg = str_replace(array('--LINES--','--USERS--', '--ERRORS--','--BLOCK--'),
  546. array($loopCounter,$loopCounter-$errorCounter,$errorCounter, $k),LAN_CONVERT_47);
  547. $mes->addSuccess($msg); // couldn't set query
  548. }
  549. return true;
  550. // $abandon = FALSE;
  551. }
  552. }
  553. /*
  554. // Source DB types (i.e. CMS types) supported. Key of each element is the 'short code' for the type
  555. $import_class_names = array(); // Title
  556. $import_class_comment = array(); // Descriptive comment
  557. $import_class_support = array(); // Array of data types supported
  558. // Definitions of available areas to import
  559. $db_import_blocks = array(
  560. 'users' => array('message' => LAN_CONVERT_25, 'classfile' => 'import_user_class.php', 'classname' => 'user_import'),
  561. 'news' => array('message' => LAN_CONVERT_28, 'classfile' => 'import_news_class.php', 'classname' => 'news_import'),
  562. 'page' => array('message' => "Pages", 'classfile' => 'import_page_class.php', 'classname' => 'page_import'),
  563. 'links' => array('message' => "Links", 'classfile' => 'import_links_class.php', 'classname' => 'links_import'),
  564. 'media' => array('message' => "Media", 'classfile' => 'import_media_class.php', 'classname' => 'media_import'),
  565. 'comments' => array('message'=> "Comments"),
  566. // 'forumdefs' => array('message' => LAN_CONVERT_26),
  567. // 'forumposts' => array('message' => LAN_CONVERT_48),
  568. // 'polls' => array('message' => LAN_CONVERT_27)
  569. );
  570. // See what DB-based imports are available (don't really want it here, but gets it into the header script)
  571. require_once(e_HANDLER.'file_class.php');
  572. $fl = new e_file;
  573. $importClassList = $fl->get_files(e_PLUGIN.'import/providers', "^.+?_import_class\.php$", "standard", 1);
  574. foreach($importClassList as $file)
  575. {
  576. $tag = str_replace('_class.php','',$file['fname']);
  577. include_once($file['path'].$file['fname']); // This will set up the variables
  578. }
  579. unset($importClassList);
  580. unset($fl);
  581. asort($import_class_names);
  582. if(varset($_POST['import_source']))
  583. {
  584. $import_source = varset($_POST['import_source'],'csv');
  585. if(varset($_POST['classes_select']))
  586. {
  587. $checked_class_list = implode(',',$_POST['classes_select']);
  588. }
  589. $import_delete_existing_data = varset($_POST['import_delete_existing_data'],0);
  590. $current_csv = varset($_POST['csv_format'],'default');
  591. $csv_pw_not_encrypted = varset($_POST['csv_pw_not_encrypted'],0);
  592. $csv_data_file = varset($_POST['csv_data_file'],'import.csv');
  593. $current_db_type = varset($_POST['db_import_type'],key($import_class_names));
  594. }
  595. $db_blocks_to_import = array();
  596. foreach ($db_import_blocks as $k => $v)
  597. {
  598. if (isset($_POST['import_block_'.$k]))
  599. {
  600. $db_blocks_to_import[$k] = 1;
  601. }
  602. }
  603. // require_once(e_ADMIN."auth.php");
  604. if (!is_object($e_userclass))
  605. {
  606. require_once(e_HANDLER."userclass_class.php"); // Modified class handler
  607. $e_userclass = new user_class;
  608. }
  609. define('CSV_DEF_FILE','csv_import.txt'); // Supplementary CSV format definitions
  610. // Definitions of available CSV-based imports
  611. $csv_formats = array('default' => 'user_name,user_password');
  612. $csv_names = array('default' => LAN_CONVERT_12);
  613. $csv_options = array('default' => 'simple');
  614. $csv_option_settings = array(
  615. 'simple' => array('separator' => ',', 'envelope' => ''),
  616. 'simple_sq' => array('separator' => ',', 'envelope' => "'"),
  617. 'simple_dq' => array('separator' => ',', 'envelope' => '"'),
  618. 'simple_semi' => array('separator' => ',', 'envelope' => ';'),
  619. 'simple_bar' => array('separator' => ',', 'envelope' => '|')
  620. );
  621. // See what CSV format definitions are available
  622. if (is_readable(CSV_DEF_FILE))
  623. {
  624. $csv_temp = file(CSV_DEF_FILE);
  625. foreach ($csv_temp as $line)
  626. {
  627. $line = trim(str_replace("\n","",$line));
  628. if ($line)
  629. {
  630. list($temp,$name,$options,$line) = explode(',',$line,4);
  631. $temp = trim($temp);
  632. $name = trim($name);
  633. $options = trim($options);
  634. $line = trim($line);
  635. if ($temp && $name && $options && $line)
  636. {
  637. $csv_formats[$temp] = $line; // Add any new definitions
  638. $csv_names[$temp] = $name;
  639. $csv_options[$temp] = $options;
  640. }
  641. }
  642. }
  643. unset($csv_temp);
  644. }
  645. $msg = '';
  646. //======================================================
  647. // Executive routine - actually do conversion
  648. //======================================================
  649. if(isset($_POST['do_conversion']))
  650. {
  651. $abandon = TRUE;
  652. switch ($import_source)
  653. {
  654. case 'csv' :
  655. if (!isset($csv_formats[$current_csv])) $msg = "CSV File format error<br /><br />";
  656. if (!is_readable($csv_data_file)) $msg = LAN_CONVERT_31;
  657. if (!isset($csv_options[$current_csv])) $msg = LAN_CONVERT_37.' '.$current_csv;
  658. if (!isset($csv_option_settings[$csv_options[$current_csv]]))
  659. {
  660. $msg = LAN_CONVERT_37.' '.$csv_options[$current_csv];
  661. }
  662. if (!$msg)
  663. {
  664. $field_list = explode(',',$csv_formats[$current_csv]);
  665. $separator = $csv_option_settings[$csv_options[$current_csv]]['separator'];
  666. $enveloper = $csv_option_settings[$csv_options[$current_csv]]['envelope'];
  667. if (IMPORT_DEBUG) echo "CSV import: {$current_csv} Fields: {$csv_formats[$current_csv]}<br />";
  668. require_once('import_user_class.php');
  669. $usr = new user_import;
  670. $usr->overrideDefault('user_class',$checked_class_list);
  671. if (($source_data = file($csv_data_file)) === FALSE) $msg = LAN_CONVERT_32;
  672. if ($import_delete_existing_data) $usr->emptyTargetDB(); // Delete existing users - reasonably safe now
  673. $line_counter = 0;
  674. $error_counter = 0;
  675. $write_counter = 0;
  676. foreach ($source_data as $line)
  677. {
  678. $line_counter++;
  679. $line_error = FALSE;
  680. if ($line = trim($line))
  681. {
  682. $usr_data = $usr->getDefaults(); // Reset user data
  683. $line_data = csv_split($line, $separator, $enveloper);
  684. $field_data = current($line_data);
  685. foreach ($field_list as $f)
  686. {
  687. if ($field_data === FALSE) $line_error = TRUE;
  688. if ($f != 'dummy') $usr_data[$f] = $field_data;
  689. $field_data = next($line_data);
  690. }
  691. if ($line_error)
  692. {
  693. if ($msg) $msg .= "<br />";
  694. $msg .= LAN_CONVERT_33.$line_counter;
  695. $error_counter++;
  696. }
  697. else
  698. {
  699. if ($csv_pw_not_encrypted)
  700. {
  701. $usr_data['user_password'] = md5($usr_data['user_password']);
  702. }
  703. $line_error = $usr->saveData($usr_data);
  704. if ($line_error === TRUE)
  705. {
  706. $write_counter++;
  707. }
  708. else
  709. {
  710. $line_error = $usr->getErrorText($line_error);
  711. if ($msg) $msg .= "<br />";
  712. $msg .= str_replace('--ERRNUM--',$line_error,LAN_CONVERT_34).$line_counter;
  713. $error_counter++;
  714. }
  715. }
  716. }
  717. }
  718. if ($msg) $msg .= "<br />";
  719. if ($import_delete_existing_data) $msg .= LAN_CONVERT_40.'<br />';
  720. $msg .= str_replace(array('--LINES--','--USERS--', '--ERRORS--'),array($line_counter,$write_counter,$error_counter),LAN_CONVERT_35);
  721. }
  722. break;
  723. case 'db' :
  724. if(dbImport() == false)
  725. {
  726. $abandon = true;
  727. }
  728. break;
  729. case 'rss' :
  730. if(rssImport() == false)
  731. {
  732. $abandon = true;
  733. }
  734. break;
  735. }
  736. if ($msg)
  737. {
  738. $mes->add($msg, E_MESSAGE_INFO); // $ns -> tablerender(LAN_CONVERT_30, $msg);
  739. $msg = '';
  740. }
  741. if ($abandon)
  742. {
  743. // unset($_POST['do_conversion']);
  744. $text = "
  745. <form method='get' action='".e_SELF."'>
  746. <div class='center'>
  747. ".$frm->admin_button('dummy_continue',LAN_CONTINUE, 'execute')."
  748. </div>
  749. </form>";
  750. $ns -> tablerender(LAN_CONVERT_30,$mes->render(). $text);
  751. require_once(e_ADMIN."footer.php");
  752. exit;
  753. }
  754. }
  755. */
  756. /*
  757. function rssImport()
  758. {
  759. global $current_db_type, $db_import_blocks, $import_delete_existing_data,$db_blocks_to_import;
  760. $mes = e107::getMessage();
  761. $mes->addDebug("Loading: RSS");
  762. if(!varset($_POST['do_conversion']))
  763. {
  764. $mes->addWarning("Under Construction");
  765. }
  766. return dbImport('xml');
  767. }
  768. function dbImport($mode='db')
  769. {
  770. global $current_db_type, $db_import_blocks, $import_delete_existing_data,$db_blocks_to_import;
  771. $mes = e107::getMessage();
  772. // if (IMPORT_DEBUG) echo "Importing: {$current_db_type}<br />";
  773. $mes->addDebug("Loading: ".$current_db_type);
  774. if (class_exists($current_db_type))
  775. {
  776. $mes->addDebug("Class Available: ".$current_db_type);
  777. $converter = new $current_db_type;
  778. $converter->init();
  779. }
  780. else
  781. {
  782. $mes->addError(LAN_CONVERT_42. "[".$current_db_type."]");
  783. return false;
  784. }
  785. if($mode == 'db') // Don't do DB check on RSS/XML
  786. {
  787. if (!isset($_POST['dbParamHost']) || !isset($_POST['dbParamUsername']) || !isset($_POST['dbParamPassword']) || !isset($_POST['dbParamDatabase']))
  788. {
  789. $mes->addError(LAN_CONVERT_41);
  790. return false;
  791. }
  792. $result = $converter->db_Connect($_POST['dbParamHost'], $_POST['dbParamUsername'], $_POST['dbParamPassword'], $_POST['dbParamDatabase'], $_POST['dbParamPrefix']);
  793. if ($result !== TRUE)
  794. {
  795. $mes->addError(LAN_CONVERT_43.": ".$result); // db connect failed
  796. return false;
  797. }
  798. }
  799. if(!is_array($db_import_blocks))
  800. {
  801. $mes->addError("No areas selected for import"); // db connect failed
  802. return false;
  803. }
  804. if(vartrue($converter->override))
  805. {
  806. return;
  807. }
  808. foreach ($db_import_blocks as $k => $v)
  809. {
  810. if (isset($db_blocks_to_import[$k]))
  811. {
  812. $loopCounter = 0;
  813. $errorCounter = 0;
  814. if (is_readable($v['classfile']))
  815. {
  816. require_once($v['classfile']);
  817. }
  818. else
  819. {
  820. $mes->addError(LAN_CONVERT_45.': '.$v['classfile']); // can't read class file.
  821. return false;
  822. }
  823. if (varset($_POST["import_block_{$k}"],0) == 1)
  824. {
  825. //if (IMPORT_DEBUG) echo "Importing: {$k}<br />";
  826. $mes->addDebug("Importing: ".$k);
  827. $result = $converter->setupQuery($k,!$import_delete_existing_data);
  828. if ($result !== TRUE)
  829. {
  830. $mes->addError(LAN_CONVERT_44.' '.$k); // couldn't set query
  831. // $msg .= "Prefix = ".$converter->DBPrefix;
  832. break;
  833. }
  834. $exporter = new $v['classname']; // Writes the output data
  835. switch ($k) // Do any type-specific default setting
  836. {
  837. case 'users' :
  838. $exporter->overrideDefault('user_class',$checked_class_list);
  839. break;
  840. }
  841. if ($import_delete_existing_data)
  842. {
  843. $exporter->emptyTargetDB(); // Clean output DB - reasonably safe now
  844. }
  845. while ($row = $converter->getNext($exporter->getDefaults(),$mode))
  846. {
  847. $loopCounter++;
  848. $result = $exporter->saveData($row);
  849. if ($result !== TRUE)
  850. {
  851. $errorCounter++;
  852. $line_error = $exporter->getErrorText($result);
  853. // if ($msg) $msg .= "<br />";
  854. $msg = str_replace(array('--ERRNUM--','--DB--'),array($line_error,$k),LAN_CONVERT_46).$loopCounter;
  855. $mes->addError($msg); // couldn't set query
  856. }
  857. }
  858. $converter->endQuery();
  859. unset($exporter);
  860. $msg = str_replace(array('--LINES--','--USERS--', '--ERRORS--','--BLOCK--'),
  861. array($loopCounter,$loopCounter-$errorCounter,$errorCounter, $k),LAN_CONVERT_47);
  862. $mes->addSuccess($msg); // couldn't set query
  863. }
  864. else
  865. {
  866. $mes->addDebug("Error: _POST['import_block_{$k}'] = ".$_POST['import_block_{$k}']); // cou
  867. }
  868. }
  869. else
  870. {
  871. $mes->addDebug("\$db_blocks_to_import doesn't contain key: ".$k); // cou
  872. }
  873. }
  874. // $msg = LAN_CONVERT_29;
  875. return true;
  876. // $abandon = FALSE;
  877. }
  878. */
  879. //======================================================
  880. // Display front page
  881. //======================================================
  882. new import_admin();
  883. require_once(e_ADMIN."auth.php");
  884. e107::getAdminUI()->runPage();
  885. require_once(e_ADMIN."footer.php");
  886. exit;
  887. /*
  888. * Currently unused function - shows available import methods and capabilities
  889. */
  890. /*
  891. function showStartPage()
  892. {
  893. global $emessage, $frm, $import_class_names, $import_class_support, $db_import_blocks, $import_class_comment;
  894. $frm = e107::getForm();
  895. $text = "
  896. <form method='get' action='".e_SELF."' id='core-import-form'>
  897. <fieldset id='core-import-select-type'>
  898. <legend class='e-hideme'>".'DBLAN_10'."</legend>
  899. ".$frm->hidden('mode','main')."
  900. ".$frm->hidden('action','import')."
  901. <table class='table adminlist'>
  902. <colgroup>
  903. <col />
  904. <col />
  905. <col />
  906. <col />
  907. <col />
  908. </colgroup>
  909. <thead>
  910. <tr>
  911. <th>".LAN_CONVERT_06."</th>";
  912. foreach($db_import_blocks as $name) // 1 column for each of users, news, forum etc.
  913. {
  914. $text .= "<th class='center'>".$name['message']."</th>";
  915. }
  916. $text.="
  917. <th class='center'>".LAN_OPTIONS."</th>
  918. </tr>
  919. </thead>
  920. <tbody>
  921. <tr>
  922. <td><img src='".e_PLUGIN."import/images/csv.png' alt='' style='float:left;height:32px;width:32px;margin-right:4px'>CSV</td>
  923. <td class='center'>".ADMIN_TRUE_ICON."</td>";
  924. for ($i=0; $i < count($db_import_blocks)-1; $i++)
  925. {
  926. $text .= "<td>&nbsp;</td>";
  927. }
  928. $text .= "<td class='center middle'>".$frm->admin_button('import_type', 'csv', 'other',"Select")."</td></tr>";
  929. foreach ($import_class_names as $k => $title)
  930. {
  931. $iconFile = e_PLUGIN."import/images/".str_replace("_import","",strtolower($k)).".png";
  932. $icon = (file_exists($iconFile)) ? "<img src='{$iconFile}' alt='' style='float:left;height:32px;width:32px;margin-right:4px'>" : "";
  933. $text .= "<!-- $title -->
  934. <tr><td>".$icon.$title."<div class='smalltext'>".$import_class_comment[$k]."</div></td>\n";
  935. foreach($db_import_blocks as $key=>$val)
  936. {
  937. $text .= "<td class='center'>".(in_array($key,$import_class_support[$k]) ? ADMIN_TRUE_ICON : "&nbsp;")."</td>\n";
  938. }
  939. $text .= "
  940. <td class='center middle'>";
  941. $text .= $frm->admin_button('type', $k, 'other',"Select");
  942. // $text .= $frm->admin_button('import_type', $k, 'other',"Select");
  943. $text .= "
  944. </td>
  945. </tr>";
  946. }
  947. $text .= "
  948. </tbody>
  949. </table>
  950. <div class='buttons-bar center'>
  951. ".$frm->hidden('trigger_import',1)."
  952. </div>
  953. </fieldset>
  954. </form>";
  955. echo $emessage->render().$text;
  956. // $ns->tablerender(LAN_PLUGIN_IMPORT_NAME, $emessage->render().$text);
  957. }
  958. function showImportOptions($mode='csv')
  959. {
  960. global $text, $emessage, $csv_names, $import_class_names, $e_userclass, $db_import_blocks, $import_class_support, $import_default_prefix;
  961. $frm = e107::getForm();
  962. $ns = e107::getRender();
  963. $mes = e107::getMessage();
  964. if (class_exists($mode))
  965. {
  966. $mes->addDebug("Class Available: ".$mode);
  967. $proObj = new $mode;
  968. if($proObj->init()===FALSE)
  969. {
  970. return;
  971. }
  972. }
  973. $message = "<strong>".LAN_CONVERT_05."</strong>";
  974. $emessage->add($message, E_MESSAGE_WARNING);
  975. $text = "
  976. <form method='post' action='".e_SELF."?import_type=".$_GET['import_type']."'>
  977. <table class='table adminform'>
  978. <colgroup>
  979. <col class='col-label' />
  980. <col class='col-control' />
  981. </colgroup>";
  982. if($mode == "csv")
  983. {
  984. $text .= "
  985. <tr>
  986. <td>".LAN_CONVERT_07."</td>
  987. <td><select name='csv_format' class='tbox'>\n";
  988. foreach ($csv_names as $k => $v)
  989. {
  990. $s = ($current_csv == $k) ? " selected='selected'" : '';
  991. $text .= "<option value='{$k}'{$s}>{$v}</option>\n";
  992. }
  993. $text .= "</select>\n
  994. </td>
  995. </tr>
  996. <tr>
  997. <td>".LAN_CONVERT_36."</td>
  998. <td><input class='tbox' type='text' name='csv_data_file' size='30' value='{$csv_data_file}' maxlength='100' /></td>
  999. </tr>
  1000. <tr><td>".LAN_CONVERT_17."
  1001. </td>
  1002. <td>
  1003. <input type='hidden' name='import_source' value='csv' />
  1004. <input type='checkbox' name='csv_pw_not_encrypted' value='1'".($csv_pw_not_encrypted ? " checked='checked'" : '')."/>
  1005. <span class='smallblacktext'>".LAN_CONVERT_18."</span></td>
  1006. </tr>
  1007. ";
  1008. }
  1009. elseif(method_exists($proObj,"config"))
  1010. {
  1011. $ops = $proObj->config();
  1012. foreach($ops as $key=>$val)
  1013. {
  1014. $text .= "<tr>
  1015. <td>".$val['caption']."</td>
  1016. <td>".$val['html'];
  1017. $text .= (vartrue($val['help'])) ? "<div class='field-help'>".$val['help']."</div>" : "";
  1018. $text .= "</td>
  1019. </tr>\n";
  1020. }
  1021. if($proObj->sourceType)
  1022. {
  1023. $text .= "<input type='hidden' name='import_source' value='".$proObj->sourceType."' />\n";
  1024. }
  1025. }
  1026. else
  1027. {
  1028. $importType = $import_class_names[$mode];
  1029. $text .= "
  1030. <tr>
  1031. <td>$importType ".LAN_CONVERT_19."</td>
  1032. <td><input class='tbox' type='text' name='dbParamHost' size='30' value='".(varset($_POST['dbParamHost']) ? $_POST['dbParamHost'] : 'localhost')."' maxlength='100' /></td>
  1033. </tr>
  1034. <tr>
  1035. <td >$importType ".LAN_CONVERT_20."</td>
  1036. <td ><input class='tbox' type='text' name='dbParamUsername' size='30' value='".varset($_POST['dbParamUsername'])."' maxlength='100' /></td>
  1037. </tr>
  1038. <tr>
  1039. <td >$importType ".LAN_CONVERT_21."</td>
  1040. <td ><input class='tbox' type='text' name='dbParamPassword' size='30' value='".varset($_POST['dbParamPassword'])."' maxlength='100' /></td>
  1041. </tr>
  1042. <tr>
  1043. <td >$importType ".LAN_CONVERT_22."</td>
  1044. <td ><input class='tbox' type='text' name='dbParamDatabase' size='30' value='".varset($_POST['dbParamDatabase'])."' maxlength='100' /></td>
  1045. </tr>
  1046. <tr>
  1047. <td >$importType ".LAN_CONVERT_23."</td>
  1048. <td ><input class='tbox' type='text' name='dbParamPrefix' size='30' value='".(varset($_POST['dbParamPrefix']) ? $_POST['dbParamPrefix'] : $import_default_prefix[$mode])."' maxlength='100' />
  1049. <input type='hidden' name='import_source' value='db' />
  1050. </td>
  1051. </tr>";
  1052. }
  1053. if($mode != 'csv')
  1054. {
  1055. $text .= "
  1056. <tr>
  1057. <td >$importType ".LAN_CONVERT_24."</td>
  1058. <td >";
  1059. $defCheck = (count($import_class_support[$mode])==1) ? "checked='checked'" : "";
  1060. foreach ($db_import_blocks as $k => $v)
  1061. {
  1062. if(in_array($k, $import_class_support[$mode])) // display only the options supported.
  1063. {
  1064. $text .= "<input type='checkbox' name='import_block_{$k}' id='import_block_{$k}' value='1' {$defCheck} />&nbsp;".$v['message'];
  1065. $text .= "<br />";
  1066. }
  1067. }
  1068. $text .= "</td></tr>";
  1069. }
  1070. $text .= "<tr><td>".LAN_CONVERT_38."</td>
  1071. <td><input type='checkbox' name='import_delete_existing_data' value='1'".(varset($_POST['import_delete_existing_data']) ? " checked='checked'" : '')."/>
  1072. <span class='smallblacktext'>".LAN_CONVERT_39."</span></td>
  1073. </tr>";
  1074. if(varset($proObj->defaultClass) !== false)
  1075. {
  1076. $text .= "
  1077. <tr><td>".LAN_CONVERT_16."</td>
  1078. <td>";
  1079. $text .= $e_userclass->vetted_tree('classes_select',array($e_userclass,'checkbox'), varset($_POST['classes_select']),'main,admin,classes,matchclass, no-excludes');
  1080. $text .= "</td></tr>";
  1081. }
  1082. $action = varset($proObj->action,'do_conversion');
  1083. $text .= "</table>
  1084. <div class='buttons-bar center'>".$frm->admin_button($action,LAN_CONTINUE, 'execute').
  1085. $frm->admin_button('back',LAN_CANCEL, 'cancel')."
  1086. <input type='hidden' name='db_import_type' value='$mode' />
  1087. <input type='hidden' name='import_type' value='".$mode."' />
  1088. </div>
  1089. </form>";
  1090. // Now a little bit of JS to initialise some of the display divs etc
  1091. $temp = '';
  1092. if(varset($import_source)) { $temp .= "disp('{$import_source}');"; }
  1093. if (varset($current_db_type)) $temp .= " flagbits('{$current_db_type}');";
  1094. if (varset($temp)) $text .= "<script type=\"text/javascript\"> {$temp}</script>";
  1095. $ns -> tablerender(LAN_PLUGIN_IMPORT_NAME.SEP.$importType, $emessage->render().$text);
  1096. }
  1097. */
  1098. function csv_split(&$data,$delim=',',$enveloper='')
  1099. {
  1100. $ret_array = array();
  1101. $fldval='';
  1102. $enclosed = false;
  1103. // $fldcount=0;
  1104. // $linecount=0;
  1105. for($i=0;$i<strlen($data);$i++)
  1106. {
  1107. $c=$data[$i];
  1108. switch($c)
  1109. {
  1110. case $enveloper :
  1111. if($enclosed && ($i<strlen($data)) && ($data[$i+1]==$enveloper))
  1112. {
  1113. $fldval .= $c;
  1114. $i++; //skip next char
  1115. }
  1116. else
  1117. {
  1118. $enclosed = !$enclosed;
  1119. }
  1120. break;
  1121. case $delim :
  1122. if(!$enclosed)
  1123. {
  1124. $ret_array[]= $fldval;
  1125. $fldval='';
  1126. }
  1127. else
  1128. {
  1129. $fldval.=$c;
  1130. }
  1131. break;
  1132. case "\r":
  1133. case "\n":
  1134. $fldval .= $c; // We may want to strip these
  1135. break;
  1136. default:
  1137. $fldval .= $c;
  1138. }
  1139. }
  1140. if($fldval)
  1141. $ret_array[] = $fldval;
  1142. return $ret_array;
  1143. }
  1144. function headerjs()
  1145. {
  1146. // global $import_class_names; // Keys are the various db options
  1147. global $import_class_support;
  1148. global $db_import_blocks;
  1149. global $import_class_comment;
  1150. $vals = "var db_names = new Array();\n";
  1151. $texts = "var db_options = new Array();\n";
  1152. $blocks = "var block_names = new Array();\n";
  1153. $comments = "var comment_text = new Array();\n";
  1154. $i = 0;
  1155. foreach ($db_import_blocks as $it => $val)
  1156. {
  1157. $blocks .= "block_names[{$i}]='{$it}';\n";
  1158. $i++;
  1159. }
  1160. $i = 0;
  1161. foreach ($import_class_support as $k => $v)
  1162. {
  1163. $vals .= "db_names[$i] = '{$k}';\n";
  1164. $comments .= "comment_text[$i] = '{$import_class_comment[$k]}';\n";
  1165. // $temp = $import_class_support[$k]; // Array of import types supported
  1166. $j = 0;
  1167. $m = 1; // Mask bit
  1168. foreach ($db_import_blocks as $it => $val)
  1169. {
  1170. if (in_array($it,$v)) $j = $j + $m;
  1171. $m = $m + $m;
  1172. }
  1173. $texts .= "db_options[{$i}] = {$j};\n";
  1174. $i++;
  1175. }
  1176. $text = "
  1177. <script type='text/javascript'>{$vals}{$texts}{$blocks}{$comments}
  1178. function disp(type)
  1179. {
  1180. if(type == 'csv')
  1181. {
  1182. document.getElementById('import_csv').style.display = '';
  1183. document.getElementById('import_db').style.display = 'none';
  1184. return;
  1185. }
  1186. if(type =='db')
  1187. {
  1188. document.getElementById('import_csv').style.display = 'none';
  1189. document.getElementById('import_db').style.display = '';
  1190. return;
  1191. }
  1192. }
  1193. function flagbits(type)
  1194. {
  1195. var i,j;
  1196. for (i = 0; i < ".count($import_class_support)."; i++)
  1197. {
  1198. if (type == db_names[i])
  1199. {
  1200. var mask = 1;
  1201. for (j = 0; j < ".count($db_import_blocks)."; j++)
  1202. {
  1203. var checkbox = document.getElementById('import_block_'+block_names[j]);
  1204. if (checkbox != null)
  1205. {
  1206. if (db_options[i] & mask)
  1207. {
  1208. checkbox.checked = 'checked';
  1209. checkbox.disabled = '';
  1210. }
  1211. else
  1212. {
  1213. checkbox.checked = '';
  1214. checkbox.disabled = 'disabled';
  1215. }
  1216. }
  1217. else
  1218. {
  1219. alert('Could not find: '+'import_block_'+block_names[j]);
  1220. }
  1221. mask = mask + mask;
  1222. }
  1223. var checkbox = document.getElementById('db_comment_block');
  1224. if (checkbox != null) checkbox.innerHTML = comment_text[i];
  1225. return;
  1226. }
  1227. }
  1228. alert('Type not found: '+type);
  1229. }
  1230. </script>";
  1231. return $text;
  1232. }
  1233. ?>