Files
2025-06-24 14:14:35 +02:00

420 lines
19 KiB
PHP

<?php
/**
* NOTICE OF LICENSE
*
* This file is licenced under the Software License Agreement.
* With the purchase or the installation of the software in your application
* you accept the licence agreement.
*
* You must not modify, adapt or create derivative works of this source code
*
* @author PrestaHelp.com
* @copyright 2019 PrestaHelp
* @license LICENSE.txt
*/
require_once dirname(__FILE__).'/../inpostship.php';
class InpostError
{
private $module_name;
public function __construct()
{
$this->module_name = new InpostShip();
}
public static function showError($error)
{
if (!empty($error['error'])) {
$error_result = (array)$error['result'];
$error_status = $error_result['status'];
$error_message = $error_result['message'];
$error_detail = (array)$error_result['details'];
return 'ERROR <b>'.$error_status.'</b>: '.$error_message.' Details: '.$error_detail;
}
}
public function newErrorListDetailsCalculate($error)
{
$details = array();
$errorApi = $error['result']->details;
// print_r($errorApi);exit();
if (!empty($errorApi)) {
foreach ($errorApi as $key => $item) { // shipments
foreach ($item as $key2 => $item2) { // []
foreach ($item2 as $key3 => $item3) { // SHIPMENT1
foreach ($item3 as $key4 => $item4) { // type, eg. receiver
$name = $this->translateF1($key4);
foreach ($item4 as $key5 => $item5) { // []
foreach ($item5 as $key6 => $item6) { // eg. phone
$name2 = $this->translateF2($key6);
foreach ($item6 as $key7 => $item7) { // []
$name3 = $this->translateF4($item7);
$details[] = '['.$name.'] <b>'.$name2.'</b> '.$name3;
}
}
}
}
}
}
}
}
return $details;
}
public function newErrorListDetails($error)
{
$details = array();
$errorApi = $error['result']->details;
// print_r($errorApi);exit();
if (!empty($errorApi)) {
foreach ($errorApi as $key => $item) { // eg. receiver
$name = $this->translateF1($key);
foreach ($item as $key2 => $item2) { // []
foreach ($item2 as $key3 => $item3) { // eg.phone
$name2 = $this->translateF2($key3);
foreach ($item3 as $key4 => $item4) { // type, eg. phone
$name3 = $this->translateF4($item4);
$details[] = '['.$name.'] <b>'.$name2.'</b> '.$name3;
}
}
}
}
}
return $details;
}
private static function showDetail($detail)
{
$details = array();
foreach ($detail as $key => $d) {
foreach ($d as $dd) {
foreach ($dd as $k1 => $d2) {
$details[] = $key.' '.$k1.' => '.(string)$d2[0];
}
}
}
if (!empty($details)) {
return implode(',', $details);
}
return null;
}
private static function detailInfo($error)
{
switch ($error) {
case 'already_dispatched':
$name = '';
break;
}
return $name;
}
/**
* Show errors API
* @param $error
* @param int $type
* @return string
*/
public function displayErrors($error, $type = 1)
{
$description = '';
if (!empty($error['error'])) {
$error_result = (array)$error['result'];
$error_status = $error_result['status'];
$error_message = $error_result['message'];
$error_detail = (array)$error_result['details'];
$description = $this->module_name->l('ERROR', 'inposterrors').' <b>'.$error_status.'</b> - '.
$this->translateF($error_message).'<br />';
if (!empty($error_detail)) {
if ($type == 2) {
$details = $this->newErrorListDetailsCalculate($error);
} else {
$details = $this->newErrorListDetails($error);
}
}
if (!empty($details)) {
$description .= $this->module_name->l('Details', 'inposterrors') . ':';
foreach ($details as $d) {
$description .= '<br />' . $d;
}
}
}
return $description;
}
private function showDetailsError($error)
{
$details = array();
foreach ($error as $key => $d) { // sender, receiver
if (is_array($d)) {
foreach ($d as $dd) { // array list
$dd = (array)$dd;
if (is_array($dd)) {
foreach ($dd as $k1 => $d2) { //
// echo "<pre>";print_r($d2);echo "</pre>";
if (is_array($d2)) {
if (isset($d2[0]) && $d2[0] == 'required') {
$details[] = '[' . $this->translateF1($key) . '] ' . $this->translateF2($k1) .
'' . ($d2[0] == 'required' ? ' ' .
$this->module_name->l('required', 'inposterrors') : '');
} elseif (isset($d2[0]) && $d2[0] == 'invalid') {
$details[] = '[' . $this->translateF1($key) . '] ' . $this->translateF2($k1) . '' .
($d2[0] == 'invalid' ? ' ' . $this->module_name->l('invalid', 'inposterrors') : '');
} elseif (isset($d2[0]) && $d2[0] == 'does_not_exist') {
$details[] = '[' . $this->translateF1($key) . '] ' . $this->translateF2($k1)
. '' . ($d2[0] == 'does_not_exist' ? ' ' .
$this->module_name->l('does_not_exist', 'inposterrors') : '');
} elseif (isset($d2[0]) && $d2[0] == 'already_bought') {
$details[] = '[' . $this->translateF1($key) . '] ' . ($d2[0] == 'already_bought' ? ' ' .
$this->module_name->l('already_bought', 'inposterrors') : '');
} else {
foreach ($d2 as $d3) {
foreach ($d3 as $k3 => $d4) {
foreach ($d4 as $d5) {
$details[] = '[' . $this->translateF1($key) . '] ' .
$this->translateF2($k1) . ' => ' . $this->translateF3($k3) .
($d5 == 'required' ? ' ' .
$this->module_name->l('required', 'inposterrors') :
($d5 == 'invalid' ? ' ' .
$this->module_name->l('invalid', 'inposterrors') : ''));
}
}
}
}
} else {
if (!is_object($d2)) {
$details[] = '[' . $this->translateF1($key) . '] => ' . $this->translateF4($d2);
} else {
$errors = (array)$d2;
foreach ($errors as $key1 => $e1) {
$e1 = (array)$e1;
foreach ($e1 as $key2 => $e2) {
$e2 = (array)$e2;
foreach ($e2 as $key3 => $e3) {
$e3 = (array)$e3;
foreach ($e3 as $key4 => $e4) {
$e4 = (array)$e4;
$errorInfo = '[' . $this->translateF1($key) . '] => ';
$errorInfo .= $this->translateF1($key1);
if (is_string($key1) && $key1 != 'parcels') {
$errorInfo .= $this->translateF2($key1);
} else {
$errorInfo .= ': '.$this->translateF2($key4);
}
foreach ($e4 as $key5 => $e5) {
$e5 = (array)$e5;
foreach ($e5 as $key6 => $e6) {
$e6 = (array)$e6;
if (is_string($key3)) {
$errorInfo .= ' (' . $this->translateF3($key3) . ') ' . $this->translateF4($e6[0]);
} else {
if (is_string($key6)) {
$errorInfo .= ' (' . $this->translateF3($key6) . ') ' . $this->translateF4($e6[0]);
} else {
$errorInfo .= ' ' . $this->translateF4($e6[0]);
}
}
}
}
$details[] = $errorInfo;
}
}
}
}
}
}
}
} else {
if (isset($dd) && $dd == 'required') {
$details[] = '[' . $this->translateF1($key) . '] ' . $this->translateF2($key) . '' .
($dd == 'required' ? ' ' . $this->module_name->l('required', 'inposterrors') : '');
} elseif (isset($dd) && $dd == 'invalid') {
$details[] = '[' . $this->translateF1($key) . '] ' . $this->translateF2($key) . '' .
($dd == 'invalid' ? ' ' . $this->module_name->l('invalid', 'inposterrors') : '');
} elseif (isset($dd) && $dd == 'does_not_exist') {
$details[] = '[' . $this->translateF1($key) . '] ' . $this->translateF2($key) . '' .
($dd == 'does_not_exist' ? ' ' . $this->module_name->l('does_not_exist', 'inposterrors') : '');
} elseif (isset($dd) && $dd == 'already_bought') {
$details[] = '[' . $this->translateF1($key) . '] ' . ($dd == 'already_bought' ? ' ' .
$this->module_name->l('already_bought', 'inposterrors') : '');
} elseif (isset($dd) && $dd == 'too_short') {
$details[] = '[' . $this->translateF1($key) . '] ' . ($dd == 'too_short' ? ' ' .
$this->module_name->l('too_short', 'inposterrors') : '');
} elseif (isset($dd) && $dd == 'Parameter: street cannot be empty.') {
$details[] = '[Zlecenie odbioru] Parametr: ulica nie może być pusty';
}
}
}
} else { // $d is array
switch ($d) {
case 'Parameter: street cannot be empty.':
$details[] = '[Zlecenie odbioru] Parametr: ulica nie może być pusty';
break;
}
}
}
return $details;
}
private function translateF($option)
{
$name = null;
if (!empty($option)) {
switch ($option) {
case 'There are some validation errors. Check details object for more info.':
$name = $this->module_name->l('There are some validation errors. Check details object for more info.', 'inposterrors');
break;
default:
$name = $this->module_name->l($option, 'inposterrors');
break;
}
}
return $name;
}
private function translateF1($option)
{
$name = null;
if (!empty($option)) {
switch ($option) {
case "sender":
$name = $this->module_name->l('Sender', 'inposterrors');
break;
case "receiver":
$name = $this->module_name->l('Receiver', 'inposterrors');
break;
case "custom_attributes":
$name = $this->module_name->l('Atrybuty przesyłki', 'inposterrors');
break;
case "shipment":
$name = $this->module_name->l('Shipment', 'inposterrors');
break;
case "shipments":
$name = $this->module_name->l('Shipments', 'inposterrors');
break;
case "reference":
$name = $this->module_name->l('Numer referencyjny', 'inposterrors');
break;
case "parcels":
$name = $this->module_name->l('Paczka', 'inposterrors');
break;
case "target_point":
$name = $this->module_name->l('Paczkomat odbiorczy', 'inposterrors');
break;
case "dropoff_point":
$name = $this->module_name->l('Paczkomat nadawczy', 'inposterrors');
break;
}
}
return $name;
}
private function translateF2($option)
{
$name = null;
if (!empty($option)) {
switch ($option) {
case "address":
$name = $this->module_name->l('Address', 'inposterrors');
break;
case "phone":
$name = $this->module_name->l('Phone', 'inposterrors');
break;
case "company_name":
$name = $this->module_name->l('Company name', 'inposterrors');
break;
case "first_name":
$name = $this->module_name->l('First name', 'inposterrors');
break;
case "last_name":
$name = $this->module_name->l('Last name', 'inposterrors');
break;
case "email":
$name = $this->module_name->l('E-mail', 'inposterrors');
break;
case "weight":
$name = $this->module_name->l('waga', 'inposterrors');
break;
case "cod":
$name = $this->module_name->l('pobranie', 'inposterrors');
break;
case "insurance":
$name = $this->module_name->l('ubezpieczenie', 'inposterrors');
break;
case "target_point":
$name = $this->module_name->l('Paczkomat odbiorczy', 'inposterrors');
break;
case "dropoff_point":
$name = $this->module_name->l('Paczkomat nadawczy', 'inposterrors');
break;
case "does_not_exist":
$name = $this->module_name->l('nie istnieje', 'inposterrors');
break;
}
}
return $name;
}
private function translateF3($option)
{
$name = null;
if (!empty($option)) {
switch ($option) {
case "street":
$name = $this->module_name->l('street', 'inposterrors');
break;
case "building_number":
$name = $this->module_name->l('building number', 'inposterrors');
break;
case "city":
$name = $this->module_name->l('city', 'inposterrors');
break;
case "post_code":
$name = $this->module_name->l('post code', 'inposterrors');
break;
case "amount":
$name = $this->module_name->l('ilość', 'inposterrors');
break;
case "does_not_exist":
$name = $this->module_name->l('nie istnieje', 'inposterrors');
break;
}
}
return $name;
}
private function translateF4($option)
{
$name = null;
if (!empty($option)) {
switch ($option) {
case 'already_dispatched':
$name = $this->module_name->l('Przesyłka została już nadana do odbioru przez kuriera.', 'inposterrors');
break;
case 'too_short':
$name = $this->module_name->l('jest za krótki', 'inposterrors');
break;
case 'too_small':
$name = $this->module_name->l('jest za mała', 'inposterrors');
break;
case 'should_be_greater_than_cod':
$name = $this->module_name->l('musi być większe od pobrania', 'inposterrors');
break;
case "does_not_exist":
$name = $this->module_name->l('nie istnieje', 'inposterrors');
break;
}
}
return $name;
}
}