ver. 0.294: Remove all 12 legacy autoload/shop/ classes (~2363 lines)

Complete Domain-Driven Architecture migration:
- Phase 1-4: Transport, ProductSet, Coupon, Shop, Search, Basket,
  ProductCustomField, Category, ProductAttribute, Promotion
- Phase 5: Order (~562 lines) + Product (~952 lines)
- ~20 Product methods migrated to ProductRepository
- Apilo sync migrated to OrderAdminService
- Production hotfixes: stale Redis cache (prices 0.00), unqualified
  Product:: refs in LayoutEngine, object->array template conversion
- AttributeRepository::getAttributeValueById() Redis cache added

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-18 02:05:39 +01:00
parent 22530df501
commit 69e78ca248
74 changed files with 2176 additions and 2669 deletions

View File

@@ -167,7 +167,7 @@ class ShopOrderController
$coupon = null;
if (!empty($order) && !empty($order['coupon_id'])) {
$coupon = new \shop\Coupon((int)$order['coupon_id']);
$coupon = ( new \Domain\Coupon\CouponRepository( $GLOBALS['mdb'] ) )->find((int)$order['coupon_id']);
}
return \Shared\Tpl\Tpl::view('shop-order/order-details', [
@@ -191,7 +191,7 @@ class ShopOrderController
return \Shared\Tpl\Tpl::view('shop-order/order-edit', [
'order' => $this->service->details($orderId),
'order_statuses' => $this->service->statuses(),
'transport' => \shop\Transport::transport_list(),
'transport' => ( new \Domain\Transport\TransportRepository( $GLOBALS['mdb'] ) )->allActive(),
'payment_methods' => ( new \Domain\PaymentMethod\PaymentMethodRepository( $GLOBALS['mdb'] ) )->allActive(),
]);
}

View File

@@ -221,7 +221,7 @@ class ShopProductController
$categories = ( new CategoryRepository( $db ) )->subcategories( null );
$layouts = $this->layoutsForProductEdit( $db );
$products = $this->repository->allProductsList();
$sets = \shop\ProductSet::sets_list();
$sets = ( new \Domain\ProductSet\ProductSetRepository( $db ) )->allSets();
$producers = ( new \Domain\Producer\ProducerRepository( $db ) )->allProducers();
$units = ( new \Domain\Dictionaries\DictionariesRepository( $db ) )->allUnits();
$dlang = $this->languagesRepository->defaultLanguage();
@@ -920,7 +920,7 @@ class ShopProductController
*/
public function ajax_product_url(): void
{
echo json_encode( [ 'url' => \shop\Product::getProductUrl( (int) \Shared\Helpers\Helpers::get( 'product_id' ) ) ] );
echo json_encode( [ 'url' => ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->getProductUrl( (int) \Shared\Helpers\Helpers::get( 'product_id' ) ) ] );
exit;
}
@@ -931,7 +931,7 @@ class ShopProductController
{
$response = [ 'status' => 'error', 'msg' => 'Podczas generowania kodu sku wystąpił błąd. Proszę spróbować ponownie.' ];
$sku = \shop\Product::generate_sku_code( (int) \Shared\Helpers\Helpers::get( 'product_id' ) );
$sku = ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->generateSkuCode();
if ( $sku ) {
$response = [ 'status' => 'ok', 'sku' => $sku ];
}

View File

@@ -71,7 +71,7 @@ class ShopPromotionController
'lp' => $lp++ . '.',
'status' => $status === 1 ? 'tak' : '<span style="color: #FF0000;">nie</span>',
'name' => '<a href="/admin/shop_promotion/edit/id=' . $id . '">' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '</a>',
'condition_type' => htmlspecialchars((string)(\shop\Promotion::$condition_type[$conditionType] ?? '-'), ENT_QUOTES, 'UTF-8'),
'condition_type' => htmlspecialchars((string)(\Domain\Promotion\PromotionRepository::$condition_type[$conditionType] ?? '-'), ENT_QUOTES, 'UTF-8'),
'date_from' => $dateFrom !== '' ? htmlspecialchars($dateFrom, ENT_QUOTES, 'UTF-8') : '-',
'date_to' => $dateTo !== '' ? htmlspecialchars($dateTo, ENT_QUOTES, 'UTF-8') : '-',
'_actions' => [
@@ -248,13 +248,13 @@ class ShopPromotionController
FormField::select('condition_type', [
'label' => 'Warunki promocji',
'tab' => 'settings',
'options' => \shop\Promotion::$condition_type,
'options' => \Domain\Promotion\PromotionRepository::$condition_type,
'required' => true,
]),
FormField::select('discount_type', [
'label' => 'Typ rabatu',
'tab' => 'settings',
'options' => \shop\Promotion::$discount_type,
'options' => \Domain\Promotion\PromotionRepository::$discount_type,
'required' => true,
]),
FormField::text('min_product_count', [