checkPassword($_SESSION["mainconf_password"])) { $exporter = new ConfigDataExporter(); if (!headers_sent()) { header('Content-Type: application/json; charset=utf-8'); header('Content-disposition: attachment; filename=lam-config.json'); } try { echo $exporter->exportAsJson(); } catch (LAMException $e) { logNewMessage('ERROR', $e->getTitle() . ' ' . $e->getMessage()); } exit; } echo $_SESSION['header']; printHeaderContents(_("Import and export configuration"), '../..'); ?>


setCSSClasses(array('maxrow fullwidth roundedShadowBox spacing5')); if ($message !== null) { $loginContent->add($message, 12); } $pwdInput = new htmlResponsiveInputField(_("Master password"), 'password', '', '236'); $pwdInput->setIsPassword(true); $pwdInput->setCSSClasses(array('lam-initial-focus')); $loginContent->add($pwdInput, 12); $loginContent->addLabel(new htmlOutputText(' ', false)); $loginContent->addField(new htmlButton('submitLogin', _("Ok"))); $content->add($loginContent, 12); parseHtml(null, $content, array(), false, $tabindex, null); renderBackLink(); } /** * Renders the link back to login page. */ function renderBackLink() { $tabindex = 0; $content = new htmlResponsiveRow(); $content->addVerticalSpacer('2rem'); $content->add(new htmlLink(_('Back to login'), '../login.php', '../../graphics/undo.png'), 12); $content->addVerticalSpacer('1rem'); parseHtml(null, $content, array(), false, $tabindex, null); } /** * Checks the login password. * * @param LAMCfgMain $cfg main config * @return bool login ok */ function checkLogin($cfg) { $password = $_POST['password']; if ($cfg->checkPassword($password)) { $_SESSION["mainconf_password"] = $password; return true; } showLoginDialog(new htmlStatusMessage('ERROR', _('The password is invalid! Please try again.'))); return false; } /** * Displays the import/export functions. */ function displayImportExport() { $tabindex = 0; $content = new htmlResponsiveRow(); $content->add(new htmlSubTitle(_('Export')), 12); $content->add(new htmlButton('exportConfig', _('Export')), 12); $content->add(new htmlSubTitle(_('Import')), 12); renderImportPart($content); parseHtml(null, $content, array(), false, $tabindex, null); renderBackLink(); } /** * Renders the import area. * * @param htmlResponsiveRow $content content where to add import part */ function renderImportPart($content) { $validUpload = false; $importSteps = array(); if (isset($_POST['importConfig'])) { try { if (empty($_FILES['import-file']['tmp_name'])) { throw new LAMException('The file you uploaded is too large. Please check php.ini, upload_max_size setting'); } $handle = fopen($_FILES['import-file']['tmp_name'], "r"); $data = fread($handle, 100000000); fclose($handle); $importer = new ConfigDataImporter(); $importSteps = $importer->getPossibleImportSteps($data); $tmpFile = __DIR__ . '/../../tmp/internal/import_' . getRandomNumber() . '.tmp'; $file = @fopen($tmpFile, "w"); if ($file) { fputs($file, $data); fclose($file); chmod($tmpFile, 0600); } $_SESSION['configImportFile'] = $tmpFile; $validUpload = true; } catch (LAMException $e) { $content->add(new htmlStatusMessage('ERROR', htmlspecialchars($e->getTitle()), htmlspecialchars($e->getMessage())), 12); } } if (!isset($_POST['importConfigConfirm']) && !$validUpload) { $content->add(new htmlInputFileUpload('import-file'), 12); $content->add(new htmlButton('importConfig', _('Submit')), 12); } elseif (isset($_POST['importConfig'])) { $content->add(new htmlOutputText(_('Import steps')), 12); foreach ($importSteps as $importStep) { $stepKey = 'step_' . $importStep->getKey(); $stepCheckbox = new htmlResponsiveInputCheckbox($stepKey, true, $importStep->getLabel()); $stepCheckbox->setLabelAfterCheckbox(); $stepCheckbox->setCSSClasses(array('bold')); $subStepIds = array(); $content->add($stepCheckbox, 12); $content->addVerticalSpacer('0.3rem'); foreach ($importStep->getSubSteps() as $subStep) { $subStepKey = 'step_' . $subStep->getKey(); $subStepIds[] = $subStepKey; $subStepCheckbox = new htmlResponsiveInputCheckbox($subStepKey, true, $subStep->getLabel()); $subStepCheckbox->setLabelAfterCheckbox(); $content->add($subStepCheckbox, 12); } $stepCheckbox->setTableRowsToShow($subStepIds); $content->addVerticalSpacer('1rem'); } $buttonGroup = new htmlGroup(); $buttonGroup->addElement(new htmlButton('importConfigConfirm', _('Import'))); $buttonGroup->addElement(new htmlButton('importCancel', _('Cancel'))); $content->add($buttonGroup, 12); } elseif (isset($_POST['importConfigConfirm'])) { $handle = fopen($_SESSION['configImportFile'], "r"); $data = fread($handle, 100000000); fclose($handle); try { $importer = new ConfigDataImporter(); $importSteps = $importer->getPossibleImportSteps($data); foreach ($importSteps as $importStep) { $importStep->setActive(isset($_POST['step_' . $importStep->getKey()])); foreach ($importStep->getSubSteps() as $subStep) { $subStep->setActive(isset($_POST['step_' . $subStep->getKey()])); } } $importer->runImport($importSteps); unlink($_SESSION['configImportFile']); $content->add(new htmlStatusMessage('INFO', _('Configuration import ended successful.')), 12); $content->add(new htmlButton('importNew', _('New import')), 12); } catch (LAMException $e) { $content->add(new htmlStatusMessage('ERROR', htmlspecialchars($e->getTitle()), htmlspecialchars($e->getMessage())), 12); $content->add(new htmlButton('importCancel', _('Back')), 12); } } } ?>