269 lines
9.6 KiB
PHP
269 lines
9.6 KiB
PHP
<?php
|
|
|
|
class AutomaticImports extends Window
|
|
{
|
|
protected $tableName = 'import';
|
|
protected $template = 'window/automatic_import.tpl';
|
|
|
|
public function get_vars()
|
|
{
|
|
$ID = $this->getID();
|
|
$vars = parent::get_vars();
|
|
$pageVars = getVal('body', $vars);
|
|
$acn = $this->getAction();
|
|
|
|
if ($acn == 'edit' || ($acn == 'add' && $this->isDuplicate() && !empty($ID))) {
|
|
$SQL = sqlQuery('SELECT s.*
|
|
FROM '.getTableName('import')." s
|
|
WHERE s.id='".$ID."' ");
|
|
if (sqlNumRows($SQL) == 1) {
|
|
$pageVars['data'] = sqlFetchArray($SQL);
|
|
if ($acn == 'add' && $this->isDuplicate() && !empty($ID)) {
|
|
$pageVars['data']['name'] = stringCopy(trim($pageVars['data']['name']));
|
|
}
|
|
$pageVars['data']['local_file'] = $GLOBALS['cfg']['Path']['data'].'/tmp/autoimport_'.$ID;
|
|
if (empty($pageVars['data']['source']) && file_exists($pageVars['data']['local_file'])) {
|
|
$pageVars['data']['source_type'] = 'upload';
|
|
} else {
|
|
$pageVars['data']['source_type'] = 'url';
|
|
}
|
|
}
|
|
} elseif ($acn == 'add') {
|
|
$pageVars['data']['source_type'] = 'upload';
|
|
$pageVars['data']['source'] = '';
|
|
$pageVars['data']['type'] = AutomaticImport::TYPE_XML;
|
|
$pageVars['data']['interval'] = 1;
|
|
$pageVars['data']['delete_old'] = null;
|
|
$pageVars['data']['modify_in_store'] = 1;
|
|
$pageVars['data']['pair'] = 1;
|
|
$pageVars['data']['local_file'] = null;
|
|
}
|
|
|
|
$sql = sqlQuery('SELECT id, name FROM '.getTableName('suppliers'));
|
|
foreach ($sql as $row) {
|
|
$pageVars['suppliers'][$row['id']] = $row['name'];
|
|
}
|
|
|
|
$pageVars['automatic_import'] = AutomaticImport::$types;
|
|
|
|
if (file_exists($pageVars['data']['local_file'])) {
|
|
$pageVars['data']['local_file_time'] = date('d.m.Y H:i:s', filemtime($pageVars['data']['local_file']));
|
|
}
|
|
|
|
$pageVars['choices'] = ['1' => 'u produktu/varianty'];
|
|
if (findModule(\Modules::PRODUCTS_SUPPLIERS) || findModule(\Modules::SUPPLIERS)) {
|
|
$pageVars['choices']['0'] = 'u dodavatele';
|
|
}
|
|
|
|
$pageVars['add_new'] = [
|
|
'0' => 'Pouze aktualizovat stávající',
|
|
'1' => 'Přidat nové i aktualizovat stávající',
|
|
'2' => 'Pouze přidat nové',
|
|
'3' => 'Přidat a aktualizovat pouze varianty',
|
|
];
|
|
$pageVars['pair'] = ['0' => 'Ne', '1' => 'Ano'];
|
|
|
|
if (findModule('products_suppliers') && !empty($pageVars['data']['id_supplier'])) {
|
|
$pageVars['products_of_suppliers'] = returnSQLResult('SELECT COUNT(*) FROM '.getTableName('products_of_suppliers')." pos WHERE pos.id_supplier='{$pageVars['data']['id_supplier']}'");
|
|
}
|
|
|
|
$vars['type'] = 'automatic_import';
|
|
$vars['body'] = $pageVars;
|
|
|
|
return $vars;
|
|
}
|
|
|
|
// protected function getData()
|
|
// {
|
|
// $data = parent::getData();
|
|
//
|
|
// $data['transformation'] = $this->prettyXml($data['transformation']);
|
|
//
|
|
// return $data;
|
|
// }
|
|
//
|
|
// function prettyXml($string)
|
|
// {
|
|
// $domxml = new DOMDocument('1.0');
|
|
// $domxml->preserveWhiteSpace = false;
|
|
// $domxml->formatOutput = true;
|
|
//
|
|
// /* @var $xml SimpleXMLElement */
|
|
// $domxml->loadXML($string);
|
|
// return $domxml->saveXML();
|
|
// }
|
|
|
|
public function handle()
|
|
{
|
|
$ID = $this->getID();
|
|
|
|
ini_set('memory_limit', '1024M');
|
|
|
|
$synchronize = getVal('synchronize');
|
|
$synchronize_try = getVal('synchronize_try');
|
|
if ((!empty($synchronize) || !empty($synchronize_try)) && !empty($ID)) {
|
|
// $errors = error_reporting(E_ALL|E_STRICT);
|
|
|
|
$import = \KupShop\KupShopBundle\Util\Compat\ServiceContainer::getService(\KupShop\AdminBundle\Util\AutomaticImport::class);
|
|
|
|
$import->setData($ID);
|
|
|
|
if (getVal('dumpXmlBefore') || getVal('dumpXmlAfter')) {
|
|
if (!$import->parseParams()) {
|
|
exit($import->error);
|
|
}
|
|
|
|
if (!$import->getSourceFile()) {
|
|
exit($import->error);
|
|
}
|
|
|
|
if (!$import->getXML()) {
|
|
exit($import->error);
|
|
}
|
|
|
|
if (getVal('dumpXmlBefore')) {
|
|
exit($import->dumpXML());
|
|
}
|
|
|
|
if (!$import->transformXML()) {
|
|
exit($import->error);
|
|
}
|
|
|
|
exit($import->dumpXML());
|
|
}
|
|
|
|
if (!$import->process(!empty($synchronize_try))) {
|
|
redirect('launch.php?s=automatic_import.php&acn=edit&refresh=parent&ID='.$ID.'&ErrStr='.urlencode("Chyba importu: {$import->error}"));
|
|
}
|
|
|
|
$import->deleteOldProducts();
|
|
|
|
$import->showUpdatedProducts();
|
|
|
|
// presmerovani
|
|
if (empty($synchronize_try)) {
|
|
$smarty = createSmarty(true, true);
|
|
$smarty->assign(Window::get_vars());
|
|
$smarty->assign([
|
|
'ID' => $this->getID(),
|
|
'import' => $import,
|
|
'view' => $this,
|
|
]);
|
|
$columns = $import->getDebugData();
|
|
|
|
$updatedProducts = array_filter($import->updatedCreatedProducts ?? [], function ($product) {
|
|
return $product['status'] != 'ignorován';
|
|
});
|
|
|
|
$smarty->assign(['updatedProducts' => $updatedProducts]);
|
|
$smarty->assign($columns);
|
|
$smarty->display('window/import.result.tpl');
|
|
if (in_array('import_error', $columns['columns'])) {
|
|
$number = 0;
|
|
foreach ($columns['products'] as $product) {
|
|
if (!empty($product['import_error'])) {
|
|
$number++;
|
|
}
|
|
}
|
|
writeDownActivity('Pozor: Auto. import - počet neúspěšně importovaných souborů:'.$number);
|
|
}
|
|
exit;
|
|
/*$ret = "";
|
|
$ret .= "Načteno {$import->stats['products']} produktů\\n";
|
|
$ret .= "Načteno {$import->stats['variations']} variant\\n";
|
|
$ret .= "Vytvořeno {$import->stats['products_created']} produktů\\n";
|
|
$ret .= "Vytvořeno {$import->stats['variations_created']} variant\\n";
|
|
$ret .= "Aktualizováno {$import->stats['products_updated']} produktů\\n";
|
|
$ret .= "Aktualizováno {$import->stats['variations_updated']} variant\\n";
|
|
$ret .= "Smazáno ".count($import->stats['deleted'])." starých produktů/variant\\n";
|
|
//$ret .= "Smazáno ".count($import->stats['variations_deleted'])." starých variant\\n";
|
|
|
|
redirect("launch.php?s=automatic_import.php&acn=edit&refresh=parent&ID=".$ID."&ErrStr=".urlencode($ret));*/
|
|
} else {
|
|
$smarty = createSmarty(true, true);
|
|
$smarty->assign(Frame::get_vars());
|
|
$smarty->assign([
|
|
'data' => $this->getData(),
|
|
'ID' => $this->getID(),
|
|
'import' => $import,
|
|
'view' => $this,
|
|
'all' => getVal('all'),
|
|
]);
|
|
$smarty->assign($import->getDebugData());
|
|
$smarty->display('window/automatic_import.dump.tpl');
|
|
exit;
|
|
}
|
|
|
|
// error_reporting($errors);
|
|
}
|
|
|
|
parent::handle();
|
|
}
|
|
|
|
public function handleUpdate()
|
|
{
|
|
$data = $this->getData();
|
|
$ID = $this->getID();
|
|
$acn = $this->getAction();
|
|
|
|
$SQL = parent::handleUpdate();
|
|
|
|
if ($SQL) {
|
|
if ($acn == 'add') {
|
|
$ID = sqlInsertID();
|
|
}
|
|
if (!empty($_FILES['source_file']) && is_uploaded_file($_FILES['source_file']['tmp_name'])) {
|
|
$data['local_file'] = $GLOBALS['cfg']['Path']['data'].'/tmp/autoimport_'.$ID;
|
|
if (!move_uploaded_file($_FILES['source_file']['tmp_name'], $data['local_file'])) {
|
|
$ErrStr = 'Nelze přesunout uploadovaný soubor.';
|
|
}
|
|
}
|
|
}
|
|
|
|
return $SQL;
|
|
}
|
|
|
|
public function handleDownload()
|
|
{
|
|
$ID = $this->getID();
|
|
$type = returnSqlResult('SELECT type
|
|
FROM '.getTableName('import')." s
|
|
WHERE s.id='{$ID}' ");
|
|
|
|
$file = $GLOBALS['cfg']['Path']['data'].'/tmp/autoimport_'.$ID;
|
|
|
|
if (!file_exists($file)) {
|
|
$this->returnError('Soubor neexistuje');
|
|
}
|
|
|
|
switch ($type) {
|
|
case AutomaticImport::TYPE_XML:
|
|
$contentType = 'application/pdf';
|
|
$extension = 'pdf';
|
|
break;
|
|
|
|
case AutomaticImport::TYPE_CSV:
|
|
$contentType = 'text/csv';
|
|
$extension = 'csv';
|
|
break;
|
|
|
|
case AutomaticImport::TYPE_XLS:
|
|
$contentType = 'application/vnd.ms-excel';
|
|
$extension = 'xls';
|
|
break;
|
|
|
|
default:
|
|
$contentType = 'application/octet-stream';
|
|
$extension = 'bin';
|
|
}
|
|
|
|
header("Content-type: {$contentType}");
|
|
header("Content-Disposition: attachment; filename=\"automatic_import_{$ID}.{$extension}\"");
|
|
|
|
readfile($file);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
return AutomaticImports::class;
|