ver. 0.323: fix import zdjęć, trwałe usuwanie produktów, fix API upload path

- IntegrationsRepository: refactor importu zdjęć — walidacja HTTP, curl timeouty, logi, czytelny komunikat
- ProductRepository: saveCustomFields tylko gdy klucz istnieje (partial API update), delete() czyści custom_fields
- ProductArchiveController: przycisk i metoda delete_permanent() do trwałego usunięcia z archiwum
- ProductsApiController: fix ścieżki upload (api.php działa z rootu projektu)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-24 21:05:23 +01:00
parent c44f59894e
commit 3b2d156e84
7 changed files with 135 additions and 11 deletions

View File

@@ -106,6 +106,14 @@ class ProductArchiveController
'confirm_ok' => 'Przywroc',
'confirm_cancel' => 'Anuluj',
],
[
'label' => 'Usun trwale',
'url' => '/admin/product_archive/delete_permanent/product_id=' . $id,
'class' => 'btn btn-xs btn-danger',
'confirm' => 'UWAGA! Operacja nieodwracalna!' . "\n\n" . 'Produkt "' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '" zostanie trwale usuniety razem ze wszystkimi zdjeciami i zalacznikami z serwera.' . "\n\n" . 'Czy na pewno chcesz usunac ten produkt?',
'confirm_ok' => 'Tak, usun trwale',
'confirm_cancel' => 'Anuluj',
],
],
];
}
@@ -162,4 +170,24 @@ class ProductArchiveController
header( 'Location: /admin/product_archive/list/' );
exit;
}
public function delete_permanent(): void
{
$productId = (int) \Shared\Helpers\Helpers::get( 'product_id' );
if ( $productId <= 0 ) {
\Shared\Helpers\Helpers::alert( 'Nieprawidłowe ID produktu.' );
header( 'Location: /admin/product_archive/list/' );
exit;
}
if ( $this->productRepository->delete( $productId ) ) {
\Shared\Helpers\Helpers::set_message( 'Produkt został trwale usunięty wraz ze zdjęciami i załącznikami.' );
} else {
\Shared\Helpers\Helpers::alert( 'Podczas usuwania produktu wystąpił błąd. Proszę spróbować ponownie.' );
}
header( 'Location: /admin/product_archive/list/' );
exit;
}
}