From 16cccac782412a4372b1af78ff10ab95c1fafaae Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Wed, 4 Feb 2026 22:30:36 +0100 Subject: [PATCH] =?UTF-8?q?Dodano=20obs=C5=82ug=C4=99=20duplikat=C3=B3w=20?= =?UTF-8?q?zam=C3=B3wie=C5=84=20w=20Apilo=20oraz=20zaktualizowano=20dokume?= =?UTF-8?q?ntacj=C4=99=20i=20wersj=C4=99=20do=200.236?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 3 +- UPDATE_INSTRUCTIONS.md | 9 +++++ cron.php | 66 ++++++++++++++++++++++++++++++++---- updates/0.20/ver_0.236.zip | Bin 0 -> 8456 bytes updates/changelog.php | 3 ++ updates/versions.php | 2 +- 6 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 updates/0.20/ver_0.236.zip diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 7cb3889..1327049 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,7 +1,8 @@ { "permissions": { "allow": [ - "Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../ver_0.234.zip'' -Force\")" + "Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../ver_0.234.zip'' -Force\")", + "Bash(powershell -Command:*)" ] } } diff --git a/UPDATE_INSTRUCTIONS.md b/UPDATE_INSTRUCTIONS.md index 57e30fb..e03d0a5 100644 --- a/UPDATE_INSTRUCTIONS.md +++ b/UPDATE_INSTRUCTIONS.md @@ -7,6 +7,7 @@ Aktualizacje znajdują się w folderze `updates/0.XX/` gdzie XX oznacza dziesią ### Pliki aktualizacji: - `ver_X.XXX.zip` - paczka ZIP ze zmienionymi plikami (BEZ folderu wersji, bezpośrednio struktura katalogów) - `ver_X.XXX_sql.txt` - opcjonalny plik z zapytaniami SQL (jeśli wymagane zmiany w bazie) +- `ver_X.XXX_files.txt` - opcjonalny plik z listą plików do **USUNIĘCIA** przy aktualizacji (format: `F: ../sciezka/do/pliku.php`) - `changelog.php` - historia zmian - `versions.php` - konfiguracja wersji (zmienna `$current_ver`) @@ -61,6 +62,14 @@ $current_ver = 234; // dla wersji 0.234 ### 8. (Opcjonalnie) Utwórz plik SQL Jeśli aktualizacja wymaga zmian w bazie danych, utwórz plik `ver_X.XXX_sql.txt` z zapytaniami SQL. +### 9. (Opcjonalnie) Utwórz plik z listą plików do usunięcia +Jeśli aktualizacja wymaga usunięcia przestarzałych plików, utwórz plik `ver_X.XXX_files.txt`: +``` +F: ../sciezka/do/pliku1.php +F: ../sciezka/do/pliku2.php +``` +**UWAGA:** Pliki wymienione w tym pliku zostaną USUNIĘTE z systemu podczas aktualizacji. + ## Przykład - aktualizacja 0.234 Zmienione pliki: diff --git a/cron.php b/cron.php index 0a4e56b..3e5e005 100644 --- a/cron.php +++ b/cron.php @@ -672,14 +672,66 @@ if ( $apilo_settings['enabled'] and $apilo_settings['sync_orders'] and $apilo_se } elseif ( $response['message'] == 'Validation error' ) { - echo '
';
-      echo print_r( $response, true );
-      echo print_r( $postData, true );
-      echo '
'; + // sprawdzanie czy błąd dotyczy duplikatu idExternal + $is_duplicate_idexternal = false; + if ( isset( $response['errors'] ) and is_array( $response['errors'] ) ) + { + foreach ( $response['errors'] as $error ) + { + if ( isset( $error['field'] ) and $error['field'] == 'idExternal' and + ( strpos( $error['message'], 'już wykorzystywana' ) !== false or + strpos( $error['message'], 'already' ) !== false ) ) + { + $is_duplicate_idexternal = true; + break; + } + } + } - $email_data = print_r( $response, true ); - $email_data .= print_r( $postData, true ); - \S::send_email( 'biuro@project-pro.pl', 'Błąd wysyłania zamówienia do apilo.com', $email_data ); + if ( $is_duplicate_idexternal ) + { + // próba pobrania zamówienia z Apilo na podstawie idExternal + $ch_get = curl_init(); + curl_setopt( $ch_get, CURLOPT_URL, "https://projectpro.apilo.com/rest/api/orders/?idExternal=" . $order['id'] ); + curl_setopt( $ch_get, CURLOPT_RETURNTRANSFER, true ); + curl_setopt( $ch_get, CURLOPT_HTTPHEADER, array( + "Authorization: Bearer " . $access_token, + "Accept: application/json" + )); + $get_response = curl_exec( $ch_get ); + curl_close( $ch_get ); + + $get_response_data = json_decode( $get_response, true ); + + if ( isset( $get_response_data['list'] ) and count( $get_response_data['list'] ) > 0 ) + { + $apilo_order_id = $get_response_data['list'][0]['id']; + $mdb -> update( 'pp_shop_orders', [ 'apilo_order_id' => $apilo_order_id ], [ 'id' => $order['id'] ] ); + echo '

Zamówienie już istnieje w Apilo. Zaktualizowano ID zamówienia: ' . $apilo_order_id . '

'; + } + else + { + echo '
';
+          echo print_r( $response, true );
+          echo print_r( $postData, true );
+          echo '
'; + + $email_data = print_r( $response, true ); + $email_data .= print_r( $postData, true ); + \S::send_email( 'biuro@project-pro.pl', 'Błąd wysyłania zamówienia do apilo.com - nie znaleziono zamówienia', $email_data ); + } + } + else + { + echo '
';
+        echo print_r( $response, true );
+        echo print_r( $postData, true );
+        echo '
'; + + $email_data = print_r( $response, true ); + $email_data .= print_r( $postData, true ); + \S::send_email( 'biuro@project-pro.pl', 'Błąd wysyłania zamówienia do apilo.com', $email_data ); + } } else { diff --git a/updates/0.20/ver_0.236.zip b/updates/0.20/ver_0.236.zip new file mode 100644 index 0000000000000000000000000000000000000000..7e5a956f7b58da164e14aaf0889b2d258211fedb GIT binary patch literal 8456 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 literal 0 HcmV?d00001 diff --git a/updates/changelog.php b/updates/changelog.php index 6dbc061..45703d0 100644 --- a/updates/changelog.php +++ b/updates/changelog.php @@ -1,3 +1,6 @@ +ver. 0.236
+- FIX - zabezpieczenie przed duplikatami zamówień w Apilo - automatyczne pobieranie ID zamówienia przy błędzie "idExternal już wykorzystywany" +
ver. 0.235
- FIX - poprawka funkcji aktualizacji
diff --git a/updates/versions.php b/updates/versions.php index da24e24..7799a9d 100644 --- a/updates/versions.php +++ b/updates/versions.php @@ -1,5 +1,5 @@