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;