app = $app; $this->id = $id; $this->getSettings(); } /** * @param array $settings */ public function setSettings($settings) { $this->settings = $settings; } /** * @return array */ public function capability() { return [ 'functions' => [ 'file_transfer' => true, 'send_documents' => true, 'send_articles' => true, 'send_storage' => true, 'send_tracking' => true, 'send_sales_report' => true, 'receive_documents' => true, 'receive_articles' => true, 'receive_storage' => true, 'receive_tracking' => true, 'receive_sales_report' => true, ], ]; } /** * @param null|Uebertragungen $transferModul * * @return Uebertragungen|null */ public function getTransferModul($transferModul = null) { if($transferModul !== null && $transferModul instanceof Uebertragungen) { $this->transferModule = $transferModul; return $this->transferModule; } if($this->transferModule === null) { $this->transferModule = $this->app->erp->LoadModul('uebertragungen'); } return $this->transferModule; } /** * @param int $requestId * @param string $status * @param string $message * @param string $doctype * @param int $doctypeId * @param int $fileId * @param int $monitorId * * @return int */ public function setRequestItemStatus( $requestId, $status, $message = '', $doctype = '', $doctypeId = 0, $fileId = 0, $monitorId = 0 ) { $requestItem = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM api_request WHERE id = %d', $requestId ) ); if(empty($requestItem)) { return 0; } $requestStatus = stripos($status, 'error')!==false?'error':$status; $this->app->DB->Update( sprintf( "UPDATE api_request SET status = '%s' WHERE id = %d", $this->app->DB->real_escape_string($requestStatus), $requestId ) ); $transferModule = $this->getTransferModul(); if($transferModule === null) { return 0; } return $transferModule->AddUbertragungMonitorLog( $this->id, $fileId, $requestId, $status, $message, '', '', '', $doctype, $doctypeId, $monitorId ); } /** * @param string $name * @param mixed $value * * @return mixed|null */ public function setSetting($name, $value) { $this->getSettings(); $this->settings[$name] = $value; $oldSettingsString = $this->app->DB->Select( sprintf( 'SELECT `einstellungen_json` FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', $this->id ) ); $isOldSettingValid = false; if(!empty($oldSettingsString)) { $oldSettings = json_decode($oldSettingsString, true); if(is_array($oldSettings)) { $isOldSettingValid = true; } } $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update( sprintf( "UPDATE `uebertragungen_account` SET `einstellungen_json` = '%s' WHERE `id` = %d LIMIT 1", $this->app->DB->real_escape_string(json_encode($this->settings)), $this->id ) ); $this->app->erp->WriteChangeLog(); if(!$isOldSettingValid) { return $this->getSettings(); } $newSettings = $this->app->DB->Select( sprintf( 'SELECT `einstellungen_json` FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', $this->id ) ); if(!empty($newSettings)) { $newSettings = json_decode($newSettings, true); if(is_array($newSettings)) { return $this->getSettings(); } } $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update( sprintf( "UPDATE `uebertragungen_account` SET `einstellungen_json` = '%s' WHERE `id` = %d LIMIT 1", $this->app->DB->real_escape_string($oldSettingsString), $this->id ) ); $this->app->erp->WriteChangeLog(); return $this->getSettings(); } /** * @return mixed|null */ public function getSettings() { if($this->id <= 0) { return null; } $this->transferdata = $this->app->DB->SelectRow( 'SELECT a.*, o.uebertragungen_account_id, o.client_id, o.client_secret, o.expiration_date, o.url, o.access_token FROM `uebertragungen_account` AS `a` LEFT JOIN `uebertragungen_account_oauth` AS `o` ON o.uebertragungen_account_id = a.id WHERE a.id = ' . $this->id ); if(!empty($this->app->DB->error())) { $this->transferdata = $this->app->DB->SelectRow( 'SELECT a.* FROM `uebertragungen_account` AS `a` WHERE a.id = ' . $this->id ); } if(!empty($this->transferdata['einstellungen_json'])) { $this->settings = @json_decode($this->transferdata['einstellungen_json'], true); }elseif(!empty($this->stucture)){ foreach($this->stucture as $name => $val) { if(isset($val['default'])) { $this->settings[$name] = $val['default']; } } } if(empty($this->settings)) { $this->settings = null; } return $this->settings; } /** * @return array */ public function getTransferData() { if(empty($this->transferdata)) { $this->getSettings(); } return $this->transferdata; } /** * @return null */ public function SettingsStructure() { return null; } /** * @return array|null */ public function getStructure() { $this->stucture = $this->SettingsStructure(); if($this->app->erp->ModulVorhanden('TransferSmarty')) { $this->stucture = array_merge($this->stucture, [ 'useincommingconverter' => [ 'typ' => 'checkbox', 'bezeichnung' => 'Eingangskonverter verwenden', ], 'incommingtemplate' => [ 'typ' => 'textarea', 'size'=> 40, 'rows'=> 6, 'bezeichnung'=>'Eingang Template:', 'tag' => 'disabled="disabled" style="background-color:#ccc; " ', 'info' => '', ], 'incommingdata' => [ 'typ' => 'hidden', ], ]); } return $this->stucture; } /** * @param string $file * @param Uebertragungen $transferModul * * @return string */ public function convertIncomming($file, $transferModul) { if(!empty($this->settings['useincommingconverter']) && !empty($this->settings['incommingtemplate'])) { $obj = $this->app->loadModule('TranferSmarty'); if(empty($obj) || !method_exists($obj, 'convertIncomingFile')) { return $file; } $obj->setSettings($this->settings); try { $file = $this->convertIncomingFile($file); } catch(Exception $e) { $fileId = $transferModul->GetFileId($this->id, $file, false); $transferModul->AddUbertragungMonitorLog($this->id, $fileId,0,'xml_parseerror', ''); } } return $file; } /** * @param string $target * @param null|array $struktur * * @return string|null */ public function Settings($target = 'return', $struktur = null) { if(!$this->id) { return null; } if($struktur === null){ $struktur = $this->getStructure(); } else { $this->stucture = $struktur; } $this->getSettings(); if($this->app->Secure->GetPOST('speichern')) { $uebertragungen_account = $this->transferdata; $json = $this->settings; $modul = $uebertragungen_account['xml_pdf']; if(!empty($struktur)){ foreach ($struktur as $name => $val) { if($modul === $this->app->Secure->GetPOST('xml_pdf')){ $json[$name] = $this->app->Secure->GetPOST($name, '', '', 1); } if(isset($val['replace'])){ switch ($val['replace']) { case 'lieferantennummer': $json[$name] = $this->app->erp->ReplaceLieferantennummer(1, $json[$name], 1); break; case 'shop': $json[$name] = explode(' ', $json[$name]); $json[$name] = reset($json[$name]); break; case 'lagerplatz': $json[$name] = $this->app->erp->ReplaceLagerPlatz(1, $json[$name], 1); break; case 'Layoutvorlage': $json[$name] = explode(' ', $json[$name]); $json[$name] = (int)reset($json[$name]); break; case 'artikelnummer': $tmp = trim($json[$name]); $rest = explode(' ',$tmp); $rest = $rest[0]; $json[$name] = $this->app->DB->Select( sprintf( "SELECT id FROM artikel WHERE nummer='%s' AND nummer!='' AND geloescht=0 ORDER BY projekt = %d DESC LIMIT 1", $rest, $this->transferdata['projekt'] ) ); break; } } } } $json_str = $this->app->DB->real_escape_string(json_encode($json)); $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update("UPDATE `uebertragungen_account` SET `einstellungen_json` = '$json_str' WHERE `id` = '".$this->id."' LIMIT 1"); $this->app->erp->WriteChangeLog(); } $id = $this->id; $json = $this->app->DB->Select("SELECT einstellungen_json FROM uebertragungen_account WHERE id = '$id' LIMIT 1"); if(!empty($json)) { $json = json_decode($json, true); }else{ $json = null; } foreach($struktur as $name => $val) { $changed = false; if(isset($val['default']) && !isset($json[$name])) { $changed = true; $json[$name] = $val['default']; } } if(!empty($changed)) { $json_str = $this->app->DB->real_escape_string(json_encode($json)); $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update("UPDATE `uebertragungen_account` SET `einstellungen_json` = '$json_str' WHERE `id` = '".$this->id."' LIMIT 1"); $this->app->erp->WriteChangeLog(); } if(!empty($struktur)) { $html = '