mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-25 14:10:28 +01:00
124 lines
3.2 KiB
PHP
124 lines
3.2 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* @param ApplicationCore $app
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
function update($app)
|
||
|
{
|
||
|
// url with latest update links
|
||
|
$versandarr = $app->DB->SelectArr("SELECT id FROM versandarten WHERE modul = 'internetmarke'");
|
||
|
if(!empty($versandarr)){
|
||
|
foreach ($versandarr as $versandrow) {
|
||
|
if(file_exists(dirname(__DIR__) . '/www/lib/versandarten/ppl_prices_' . $versandrow['id'] . '.xml')){
|
||
|
@unlink(dirname(__DIR__) . '/www/lib/versandarten/ppl_prices_' . $versandrow['id'] . '.xml');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$url = 'https://www.deutschepost.de/content/dam/dpag/images/i_i/Internetmarke/technische_downloads/update_internetmarke/ppl_update.xml';
|
||
|
|
||
|
$curl = curl_init($url);
|
||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||
|
$result = curl_exec($curl);
|
||
|
|
||
|
// error handling
|
||
|
checkCurlError($curl, $result);
|
||
|
|
||
|
// parsing XML to get the final XML link
|
||
|
$xml = new SimpleXMLElement($result);
|
||
|
$link = (string)$xml->xpath('/addins/app/updates/li/updateLink')[0];
|
||
|
|
||
|
if(empty($link)){
|
||
|
throw new RuntimeException('Update-link not found');
|
||
|
}
|
||
|
|
||
|
// downloading final content
|
||
|
curl_setopt($curl, CURLOPT_URL, $link);
|
||
|
$csv = curl_exec($curl);
|
||
|
|
||
|
checkCurlError($curl, $csv);
|
||
|
|
||
|
|
||
|
// writing final csv file
|
||
|
$csvFile = dirname(__DIR__) . '/www/lib/versandarten/ppl_latest.csv';
|
||
|
|
||
|
if(md5($csv) === md5_file($csvFile)){
|
||
|
//file already the same
|
||
|
return false;
|
||
|
}
|
||
|
$app->erp->LogFile("Update link: {$link}", '', 'Internetmarke');
|
||
|
|
||
|
$written = file_put_contents($csvFile, $csv);
|
||
|
|
||
|
// error handling once again...oh those stupid errors
|
||
|
if(!$written){
|
||
|
throw new RuntimeException("Error writing to csv file: $csvFile");
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function isInternetmarkeInUse($app)
|
||
|
{
|
||
|
$count = (int)$app->DB->Select('SELECT COUNT(*) FROM versandarten WHERE modul="internetmarke"');
|
||
|
|
||
|
return $count > 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param mixed $curl
|
||
|
* @param string $result
|
||
|
*/
|
||
|
function checkCurlError($curl, $result)
|
||
|
{
|
||
|
$error = curl_error($curl);
|
||
|
if($error !== ''){
|
||
|
throw new RuntimeException("cURL error: $error");
|
||
|
}
|
||
|
if(empty($result)){
|
||
|
throw new RuntimeException('Empty response from server');
|
||
|
}
|
||
|
|
||
|
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||
|
$url = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
|
||
|
|
||
|
switch ($code) {
|
||
|
case 404:
|
||
|
throw new RuntimeException("Seite {$url} nicht erreichbar");
|
||
|
}
|
||
|
|
||
|
if(strpos((string)$code,'2') !== 0) {
|
||
|
throw new RuntimeException("Fehlerhafte Antwort: {$code}");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// include dirname(__DIR__) . '/xentral_autoloader.php';
|
||
|
$app = new ApplicationCore();
|
||
|
|
||
|
if(!isInternetmarkeInUse($app)){
|
||
|
$app->erp->LogFile('Internetmarke not in use', '', 'Internetmarke');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
if(update($app)){
|
||
|
$app->erp->LogFile('Successfully updated Internetmarke PPL', '', 'Internetmarke');
|
||
|
}else{
|
||
|
$app->erp->LogFile('no new PPL', '', 'Internetmarke');
|
||
|
}
|
||
|
} catch (RuntimeException $e) {
|
||
|
$app->erp->LogFile('Error updating PPL', $e->getMessage(), 'Internetmarke');
|
||
|
/** @var Systemhealth $systemHealth */
|
||
|
$systemHealth = $app->loadModule('systemhealth');
|
||
|
$systemHealth->createEntryWithCategoryIfError(
|
||
|
'internetmarke',
|
||
|
'Internetmarke',
|
||
|
'updater',
|
||
|
'Produktliste Updater Status',
|
||
|
'warning',
|
||
|
'Fehler: ' . $e->getMessage(),
|
||
|
true
|
||
|
);
|
||
|
}
|