0) { $aes = '2'; } if($aes === '2' && is_file(dirname(__DIR__).'/www/lib/class.aes'.$aes.'.php')) { include_once dirname(__DIR__).'/www/lib/class.aes'.$aes.'.php'; }elseif(is_file(dirname(__DIR__) . '/www/lib/class.aes.php')){ include_once dirname(__DIR__) . '/www/lib/class.aes.php'; } include_once dirname(__DIR__).'/www/lib/class.remote.php'; if(!class_exists('app_t')){ class app_t extends ApplicationCore { public $DB; public $user; public $mail; public $erp; public $remote; } } if(empty($app)){ $conf = new Config(); $app = new app_t($conf); $app->DB = new DB($conf->WFdbhost,$conf->WFdbname,$conf->WFdbuser,$conf->WFdbpass,null,$conf->WFdbport); $app->Conf = $conf; $app->erp = new erpAPI($app); $app->remote = new Remote($app); $app->Secure = new Secure($app); } if(!is_file(dirname(__DIR__).'/www/pages/shopimporter_ebay.php') || !$app->erp->ModulVorhanden('shopimporter_ebay')) { return; } $app->DB->Update("UPDATE prozessstarter SET mutexcounter = mutexcounter + 1 WHERE mutex = 1 AND (parameter = 'ebay_bulkjobs' ) AND aktiv = 1"); if(!$app->DB->Select("SELECT id FROM prozessstarter WHERE mutex = 0 AND (parameter = 'ebay_bulkjobs') AND aktiv = 1")) { return; } $query = "SELECT id FROm shopexport WHERE modulename='shopimporter_ebay' AND aktiv=1 AND lagerexport=1"; $shopIds = $app->DB->SelectArr($query); if(empty($shopIds)) { return; } foreach ($shopIds as $shopId){ $shopId = $shopId['id']; /** @var Shopimporter_Ebay $importer */ $importer = $app->loadModule('shopimporter_ebay', true); $importer->getKonfig($shopId, ''); if($importer->isThrottled()) { continue; } do{ $jobIdInternal = ''; $lookForNextJob = false; $updateJobInDatabase = false; $query = sprintf( "SELECT `id`, `uuid`, `job_id`, `file_id`, `status`, `next_action`, `notes`, `type` FROM `ebay_bulk_jobs` WHERE `status` NOT IN ('%s', '%s', '%s', '%s') AND `shop_id` = %d ORDER BY `created_at` ASC LIMIT 1", 'Completed','Failed', 'Aborted', 'Error', $shopId ); $activeJob = $app->DB->SelectRow($query); if(empty($activeJob)){ break; } $jobIdInternal = $activeJob['id']; $jobIdExternal = $activeJob['job_id']; $fileReferenceId = $activeJob['file_id']; $jobStatus = $activeJob['status']; $jobType = $activeJob['type']; $nextAction = $activeJob['next_action']; $uuid = $activeJob['uuid']; $notes = $activeJob['notes']; if(empty($jobIdExternal)){ break; } $response = $importer->getBulkJobStatus($jobIdExternal); if((string)$response->ack === 'Success'){ $jobStatus = (string)$response->jobProfile->jobStatus; $updateJobInDatabase = true; $finalAction = 'Undefined'; $responseFileId = ''; $notes = ''; switch ($jobStatus){ case 'Completed': $lookForNextJob = true; $notes = 'Errorcount: '.$response->jobProfile->errorCount; $responseFileId = (string)$response->jobProfile->fileReferenceId; $finalAction = 'None'; break; case 'Aborted': case 'Failed': $lookForNextJob = true; $finalAction = 'None'; break; case 'InProcess': $notes = 'Percent Complete: '.$response->jobProfile->percentComplete; case 'Scheduled': $finalAction='WaitForFinish'; break; case 'Created': $updateJobInDatabase = false; default: break; } if($updateJobInDatabase){ $query = sprintf( "UPDATE `ebay_bulk_jobs` SET `status` = '%s', `next_action` = '%s', `response_file_id` = '%s', `notes` = '%s', `last_updated_at` = NOW() WHERE `id` = %d", $jobStatus, $finalAction, $responseFileId, $notes, $jobIdInternal ); $app->DB->Update($query); if($jobStatus === 'Completed'){ $importer->logStockResultsForFinishedJob($jobIdExternal,$fileReferenceId,$responseFileId); } if($finalAction === 'WaitForFinish'){ break; } } continue; } if(!empty($notes)){ $jobStatus = 'Error'; $nextAction = 'Undefined'; } $notes = $response->errorMessage->error->severity.': '.$response->errorMessage->error->message; $query = sprintf( "UPDATE `ebay_bulk_jobs` SET `status` = '%s', `next_action` = '%s', `notes` = '%s', `last_updated_at` = NOW() WHERE `id` = %d", $jobStatus, $nextAction, $notes, $jobIdInternal ); $app->DB->Update($query); $lookForNextJob = true; }while($lookForNextJob); if(empty($jobIdInternal)){ continue; } $reasonForAbort = 'Undefined'; if($nextAction === 'CreateJob'){ if($importer->isThrottled('createBulkJob')) { continue; } $response = $importer->createBulkJob($jobType, $jobIdInternal,$uuid); $nextAction = $response['next_action']; $jobIdExternal = $response['jobId']; $fileReferenceId = $response['fileReferenceId']; $reasonForAbort = 'Unerwarteten Job gefunden'; } if($nextAction === 'UploadFile'){ $gatheredRequests = $importer->createBulkRequests($jobType); if(empty($gatheredRequests)){ $nextAction = 'AbortJob'; $reasonForAbort = 'Keine Artikel zum Synchronisieren vorhanden'; }else{ $response = $importer->uploadBulkFile($jobIdExternal,$fileReferenceId,$gatheredRequests); $nextAction = $response['next_action']; $reasonForAbort = 'Datei kann nicht hochgeladen werden'; } } if($nextAction === 'StartJob'){ $response = $importer->startBulkJob($jobIdExternal); $nextAction = $response['next_action']; $reasonForAbort = 'Job kann nicht gestartet werden'; } if($nextAction === 'AbortJob' ){ if(!empty($jobIdExternal)){ $response = $importer->abortBulkJob($jobIdInternal, $jobIdExternal, $reasonForAbort); }elseif(empty($fileReferenceId)){ $query = sprintf("UPDATE ebay_bulk_jobs SET status='Error', notes = 'Fehlerhafte Dateireferenz' WHERE id=%d", $jobIdInternal); $app->DB->UPDATE($query); } } $app->DB->Update("UPDATE prozessstarter SET mutex = 1 , mutexcounter = 0, letzteausfuerhung = now() WHERE (parameter = 'ebay_bulkjobs' ) AND aktiv = 1"); } $app->DB->Update("UPDATE prozessstarter SET mutex = 0, mutexcounter = 0, letzteausfuerhung = now() WHERE (parameter = 'ebay_bulkjobs' ) AND aktiv = 1");