/** * @see \wcf\form\IForm::validate() */ public function validate() { parent::validate(); $this->exporter->setData($this->dbHost, $this->dbUser, $this->dbPassword, $this->dbName, $this->dbPrefix, $this->fileSystemPath, $this->additionalData); // validate database Access try { $this->exporter->validateDatabaseAccess(); } catch (DatabaseException $e) { WCF::getTPL()->assign('exception', $e); throw new UserInputException('database'); } // validate selected data if (!$this->exporter->validateSelectedData($this->selectedData)) { throw new UserInputException('selectedData'); } // validate file access if (!$this->exporter->validateFileAccess()) { throw new UserInputException('fileSystemPath'); } // validate user merge mode switch ($this->userMergeMode) { case UserImporter::MERGE_MODE_EMAIL: case UserImporter::MERGE_MODE_USERNAME_OR_EMAIL: break; default: $this->userMergeMode = UserImporter::MERGE_MODE_EMAIL; } }
/** * Reads the selected data which will be imported. */ protected function readSelectedData() { $printPrimaryTypes = true; $selectedData = array(); $supportedDataSelection = array('' => array()); $i = 1; $availablePrimaryDataTypes = array(); foreach ($this->supportedData as $objectType => $subData) { $availablePrimaryDataTypes[$i++] = $objectType; } while (true) { if ($printPrimaryTypes) { // print primary import data types CLIWCF::getReader()->println(WCF::getLanguage()->get('wcf.acp.dataImport.configure.data.description')); $supportedDataIndex = 1; $minSupportedDataIndex = 1; foreach ($this->supportedData as $objectType => $subData) { if (!isset($selectedData[$objectType])) { CLIWCF::getReader()->println($supportedDataIndex . ') ' . WCF::getLanguage()->get('wcf.acp.dataImport.data.' . $objectType)); $supportedDataSelection[''][$supportedDataIndex++] = $objectType; } else { if ($minSupportedDataIndex == $supportedDataIndex) { $minSupportedDataIndex++; } $supportedDataIndex++; } } CLIWCF::getReader()->println(WCF::getLanguage()->getDynamicVariable('wcf.acp.dataImport.cli.selection', array('minSelection' => $minSupportedDataIndex, 'maxSelection' => $supportedDataIndex - 1))); $printPrimaryTypes = false; } // read index of selected primary import data type $selectedObjectTypeIndex = CLIWCF::getReader()->readLine(WCF::getLanguage()->get('wcf.acp.dataImport.configure.data') . '> '); if ($selectedObjectTypeIndex === null) { exit; } // if no primary import data type is selected, finish data selection if ($selectedObjectTypeIndex == '') { // if no data is selected, quit import if (empty($selectedData)) { CLIWCF::getReader()->println(WCF::getLanguage()->get('wcf.acp.dataImport.cli.configure.data.error.noSelection')); $this->quitImport = true; return; } break; } // validate selected primary import data type if (isset($supportedDataSelection[''][$selectedObjectTypeIndex])) { $selectedObjectType = $supportedDataSelection[''][$selectedObjectTypeIndex]; $selectedData[$selectedObjectType] = array(); unset($supportedDataSelection[''][$selectedObjectTypeIndex]); } else { if (isset($availablePrimaryDataTypes[$selectedObjectTypeIndex])) { CLIWCF::getReader()->println(WCF::getLanguage()->get('wcf.acp.dataImport.cli.configure.data.alreadySelected')); continue; } else { CLIWCF::getReader()->println(WCF::getLanguage()->get('wcf.acp.dataImport.cli.configure.data.error.notValid')); continue; } } // handle secondary import data types if (!empty($this->supportedData[$selectedObjectType])) { // print secondary import data types CLIWCF::getReader()->println(' ' . WCF::getLanguage()->get('wcf.acp.dataImport.configure.data.description')); CLIWCF::getReader()->println(' 0) ' . WCF::getLanguage()->get('wcf.acp.dataImport.cli.configure.data.selectAll')); $supportedDataSelection[$selectedObjectType] = array(); $supportedDataIndex = 1; foreach ($this->supportedData[$selectedObjectType] as $objectType) { CLIWCF::getReader()->println(' ' . $supportedDataIndex . ') ' . WCF::getLanguage()->get('wcf.acp.dataImport.data.' . $objectType)); $supportedDataSelection[$selectedObjectType][$supportedDataIndex++] = $objectType; } CLIWCF::getReader()->println(' ' . WCF::getLanguage()->getDynamicVariable('wcf.acp.dataImport.cli.selection', array('minSelection' => 0, 'maxSelection' => $supportedDataIndex - 1))); while (true) { // read index of selected secondary import data type $selectedSecondaryObjectTypeIndex = CLIWCF::getReader()->readLine(' ' . WCF::getLanguage()->get('wcf.acp.dataImport.configure.data') . '> '); if ($selectedSecondaryObjectTypeIndex === null) { exit; } // continue with primary import data type selection if ($selectedSecondaryObjectTypeIndex == '') { break; } // validate selected secondary import data type if ($selectedSecondaryObjectTypeIndex == intval($selectedSecondaryObjectTypeIndex) && !$selectedSecondaryObjectTypeIndex) { // selected all secondary import data type $selectedData[$selectedObjectType] = array_merge($selectedData[$selectedObjectType], $supportedDataSelection[$selectedObjectType]); break; } else { if (isset($supportedDataSelection[$selectedObjectType][$selectedSecondaryObjectTypeIndex])) { $selectedSecondaryObjectType = $supportedDataSelection[$selectedObjectType][$selectedSecondaryObjectTypeIndex]; $selectedData[$selectedObjectType][$selectedSecondaryObjectTypeIndex] = $selectedSecondaryObjectType; unset($supportedDataSelection[$selectedObjectType][$selectedSecondaryObjectTypeIndex]); } else { if (isset($selectedData[$selectedObjectType][$selectedSecondaryObjectTypeIndex])) { CLIWCF::getReader()->println(' ' . WCF::getLanguage()->get('wcf.acp.dataImport.cli.configure.data.alreadySelected')); continue; } else { CLIWCF::getReader()->println(' ' . WCF::getLanguage()->get('wcf.acp.dataImport.cli.configure.data.error.notValid')); continue; } } } // check if all possible secondary import data types are selected if (count($selectedData[$selectedObjectType]) == count($this->supportedData[$selectedObjectType])) { $printPrimaryTypes = true; break; } } if (!empty($supportedDataSelection[$selectedObjectType])) { $printPrimaryTypes = true; } } // check if all possible primary import data types are selected if (count($selectedData) == count($this->supportedData)) { break; } } foreach ($selectedData as $objectType => $objectTypes) { $this->selectedData[] = $objectType; $this->selectedData = array_merge($this->selectedData, $objectTypes); } if (!$this->exporter->validateSelectedData($this->selectedData)) { CLIWCF::getReader()->println(WCF::getLanguage()->get('wcf.acp.dataImport.cli.configure.data.error.noSelection')); $this->quitImport = true; } }