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 0000000..7e5a956 Binary files /dev/null and b/updates/0.20/ver_0.236.zip differ 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 @@