vtenext/modules/Settings/DataImporter/DataImporterAjax.php
2021-04-28 20:10:26 +02:00

208 lines
5.7 KiB
PHP

<?php
/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
/* crmv@64542 */
require_once('vtlib/Vtecrm/Utils.php');
require_once('modules/Settings/DataImporter/DataImporterUtils.php');
require_once('modules/Settings/DataImporter/DataImporterSteps.php');
global $adb, $table_prefix;
global $mod_strings, $app_strings, $theme;
global $currentModule, $current_user;
$smarty = new VteSmarty();
$smarty->assign("MOD",$mod_strings);
$smarty->assign("APP",$app_strings);
$smarty->assign("THEME", $theme);
$smarty->assign("IMAGE_PATH", "themes/$theme/images/");
$mode = 'ajax';
$importid = intval($_REQUEST['importid']);
$action = $_REQUEST['subaction'];
$raw = null;
$tpl = '';
$json = null;
$DIUtils = new DataImporterUtils();
$DISteps = new DataImporterSteps($DIUtils);
$DIAjax = new DataImporterAjax($DIUtils, $DISteps);
if ($action == 'enable_import') {
$error = $DIAjax->enableImport($importid);
$json = array('success' => empty($error), 'error' => $error);
} elseif ($action == 'disable_import') {
$error = $DIAjax->disableImport($importid);
$json = array('success' => empty($error), 'error' => $error);
} elseif ($action == 'delete_import') {
$error = $DIAjax->deleteImport($importid);
$json = array('success' => empty($error), 'error' => $error);
} elseif ($action == 'add_default_field' || $action == 'del_default_field') {
$step = 5;
$vars = $_REQUEST;
$DISteps->preprocessStepVars($mode, $step, 0, $vars);
$vars = $DISteps->extractStepVars($vars);
if ($action == 'add_default_field') {
$DIAjax->addDefaultField($_REQUEST['type'], $vars);
} elseif ($action == 'del_default_field') {
$DIAjax->delDefaultField($_REQUEST['type'], $vars, $_REQUEST['fieldno']);
}
// then prepare the vars for the output
$DISteps->processStepVars($mode, $step, 0, $vars);
$smarty->assign("STEPVARS", $vars);
$importRow = $DISteps->getAllVarsForSave();
$allFields = $DIUtils->getMappableFields($importRow);
$smarty->assign("ALLFIELDS", $allFields);
// users and group lists
$smarty->assign('USERS_LIST', $DIUtils->getAvailableUsers($destModule));
$smarty->assign('GROUPS_LIST', $DIUtils->getAvailableGroups($destModule));
$tpl = 'Step5DefFields.tpl';
//$json = array('success' => empty($error), 'error' => $error);
} elseif ($action == 'getlog') {
$log = $DIAjax->getLastImportLog($importid);
$error = null;
$json = array('success' => empty($error), 'error' => $error, 'log' => $log);
} elseif ($action == 'run') {
$error = $DIAjax->runNow($importid);
$json = array('success' => empty($error), 'error' => $error);
} elseif ($action == 'abort') {
$error = $DIAjax->abortImport($importid);
$json = array('success' => empty($error), 'error' => $error);
}
// output
if (!is_null($raw)) {
echo $raw;
exit(); // sorry, I have to do this, some html shit is spitted out at the end of the page
} elseif (!empty($tpl)) {
$smarty->display('Settings/DataImporter/'.$tpl);
} elseif (!empty($json)) {
echo Zend_Json::encode($json);
exit(); // idem
} else {
echo "No data returned";
}
// ---------------------- CLASSES ---------------------
// assume the blocks and fields are ordered sequentially by arraykey
class DataImporterAjax {
protected $disteps = null;
protected $diutils = null;
public function __construct($diutils = null, $disteps = null) {
$this->diutils = $diutils;
$this->disteps = $disteps;
}
public function enableImport($importid) {
$info = $this->diutils->getImporterInfo($importid);
if (empty($info)) return "Importer not found";
if ($info['enabled'] == '0') {
$this->diutils->setEnabled($importid);
}
return null;
}
public function disableImport($importid) {
$info = $this->diutils->getImporterInfo($importid);
if (empty($info)) return "Importer not found";
if ($info['running'] == '1') return getTranslatedString('LBL_CANT_DISABLE_RUNNING_IMPORT');
if ($info['enabled'] == '1') {
$this->diutils->setEnabled($importid, 0);
}
return null;
}
public function deleteImport($importid) {
$info = $this->diutils->getImporterInfo($importid);
if (empty($info)) return "Importer not found";
if ($info['running'] == '1') return getTranslatedString('LBL_CANT_DELETE_RUNNING_IMPORT');
$this->diutils->deleteImporter($importid, 0);
return null;
}
public function addDefaultField($type, &$vars) {
if (!is_array($vars['dimport_deffields'])) {
$vars['dimport_deffields'] = array('create' => array(), 'update' => array());
}
if ($type == 'create' || $type == 'update') {
$vars['dimport_deffields'][$type][] = array(
'field' => '',
'default' => '',
);
}
}
public function delDefaultField($type, &$vars, $fieldno) {
if ($type == 'create' || $type == 'update') {
unset($vars['dimport_deffields'][$type][$fieldno]);
$vars['dimport_deffields'][$type] = array_values($vars['dimport_deffields'][$type]);
}
}
public function getLastImportLog($importid) {
$path = $this->diutils->getLastLogPath($importid);
if (file_exists($path)) {
return file_get_contents($path);
} else {
return 'No data';
}
}
public function runNow($importid) {
if (!$this->diutils->canRunManually()) return "Not permitted";
$info = $this->diutils->getImporterInfo($importid);
if (empty($info)) return "Importer not found";
if ($info['running'] == '1') return getTranslatedString('LBL_IMPORT_IS_ALREADY_RUNNING');
$ok = $this->diutils->run($importid, true);
if (!$ok) return "Error";
return null;
}
public function abortImport($importid) {
$info = $this->diutils->getImporterInfo($importid);
if (empty($info)) return "Importer not found";
$ok = $this->diutils->abort($importid);
if (!$ok) return "Error";
return null;
}
}