Refactor code structure for improved readability and maintainability

This commit is contained in:
2026-02-21 21:48:03 +01:00
parent ebab220f7e
commit 5eee2c6649
21 changed files with 172 additions and 150 deletions

View File

@@ -13,7 +13,8 @@
"Bash(git status:*)",
"Bash(powershell -Command \"& { Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::OpenRead\\(''updates/0.20/ver_0.296.zip''\\).Entries | ForEach-Object { Write-Output $_.FullName } }\")",
"Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../ver_0.296.zip'' -Force\")",
"Bash(powershell -Command \"Add-Type -AssemblyName System.IO.Compression.FileSystem; [IO.Compression.ZipFile]::OpenRead\\(\\(Resolve-Path ''updates/0.20/ver_0.296.zip''\\)\\).Entries.FullName\")"
"Bash(powershell -Command \"Add-Type -AssemblyName System.IO.Compression.FileSystem; [IO.Compression.ZipFile]::OpenRead\\(\\(Resolve-Path ''updates/0.20/ver_0.296.zip''\\)\\).Entries.FullName\")",
"Bash(powershell -Command \"Compress-Archive -Path ''*'' -DestinationPath ''../ver_0.297.zip'' -Force\")"
]
}
}

File diff suppressed because one or more lines are too long

1
.vscode/ftp-kr.diff.ver_0.298.zi# vendored Normal file
View File

@@ -0,0 +1 @@
c:\visual studio code\projekty\shopPRO\updates\0.20\ver_0.298.zi#

View File

@@ -577,7 +577,7 @@ class OrderAdminService
return false;
}
$email = new \Email(0);
$email = new \Shared\Email\Email();
$email->load_by_name('#sklep-zmiana-statusu-zamowienia');
$email->text = str_replace('[NUMER_ZAMOWIENIA]', $number, $email->text);
@@ -800,4 +800,4 @@ class OrderAdminService
FILE_APPEND
);
}
}
}

View File

@@ -741,10 +741,11 @@ class OrderRepository
$product_price_tmp = \Domain\Basket\BasketCalculator::calculateBasketProductPrice((float)$product['price_brutto_promo'], (float)$product['price_brutto'], $coupon, $basket_position, $productRepo);
// Cena promo = 0 gdy taka sama jak cena bazowa (brak realnej promocji/kuponu)
$effectivePromoPrice = (float)$product_price_tmp['price_new'];
$effectiveBasePrice = (float)$product_price_tmp['price'];
$promoPrice = ($effectivePromoPrice != $effectiveBasePrice) ? $effectivePromoPrice : 0;
// Cena promo = 0 gdy taka sama jak cena bazowa (brak realnej promocji/kuponu).
// Porównujemy po zaokrągleniu do 2 miejsc, żeby uniknąć artefaktów float (IEEE 754).
$effectivePromoPrice = round((float)$product_price_tmp['price_new'], 2);
$effectiveBasePrice = round((float)$product_price_tmp['price'], 2);
$promoPrice = ($effectivePromoPrice > 0 && $effectivePromoPrice < $effectiveBasePrice) ? $effectivePromoPrice : 0;
$this->db->insert('pp_shop_order_products', [
'order_id' => $order_id,

View File

@@ -1,7 +1,3 @@
# <FilesMatch "\.(php4|php5|php3|php2|php|phtml)$">
# SetHandler application/x-lsphp83 /opt/alt/php83 usr/bin/lsphp
# </FilesMatch>
RewriteEngine On
RewriteBase /
Options +FollowSymlinks
@@ -13,6 +9,7 @@ RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# Przekierowanie z http na https, jeśli nie zawiera www
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/(tpay-status|platnosc-status|przelewy24-status)$ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Usuwanie końcowego slash'a dla niekatalogów
@@ -21,11 +18,9 @@ RewriteCond %{REQUEST_URI} !^/admin/.*$ [NC] # Wyklucza ścieżki rozpoczynając
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
ErrorDocument 404 /index.php
RewriteCond %{REQUEST_URI} !^(.*)/libraries/(.*) [NC]
RewriteCond %{REQUEST_URI} !^(.*)/layout/(.*) [NC]
RewriteRule ^admin/([^/]*)/([^/]*)/(.*)$ admin/index.php?module=$1&action=$2&$3 [QSA,L]
RewriteRule ^admin/([^/]*)/([^/]*)/(.*)$ admin/index.php?module=$1&action=$2&$3 [L]
RewriteRule ^admin/$ admin/index.php [L]
@@ -33,9 +28,9 @@ RewriteRule ^wyszukiwarka/(.*)/([0-9]*)$ index.php?module=search&action=search_r
RewriteRule ^wyszukiwarka/(.*)$ index.php?module=search&action=search_results&query=$1&bs=1 [L]
RewriteRule ^zamowienie/([a-zA-Z0-9-]*)$ index.php?module=shop_order&action=order_details&order_hash=$1 [L]
RewriteRule ^potwierdzenie-platnosci/([a-zA-Z0-9-]*)$ index.php?module=shop_order&action=payment_confirmation&order_hash=$1 [L]
RewriteRule ^tpay-status$ index.php?module=shop_order&action=payment_status_tpay%{QUERY_STRING} [L]
RewriteRule ^platnosc-status$ index.php?module=shop_order&action=payment_status_hotpay%{QUERY_STRING} [L]
RewriteRule ^przelewy24-status$ index.php?module=shop_order&action=payment_status_przelewy24pl%{QUERY_STRING} [L]
RewriteRule ^tpay-status$ index.php?module=shop_order&action=payment_status_tpay [QSA,L]
RewriteRule ^platnosc-status$ index.php?module=shop_order&action=payment_status_hotpay [QSA,L]
RewriteRule ^przelewy24-status$ index.php?module=shop_order&action=payment_status_przelewy24pl [QSA,L]
RewriteRule ^koszyk$ index.php?module=shop_basket&action=main_view [L]
RewriteRule ^koszyk-podsumowanie$ index.php?module=shop_basket&action=summary_view [L]
RewriteRule ^zloz-zamowienie$ index.php?module=shop_basket&action=basket_save [L]

BIN
templates/.DS_Store vendored

Binary file not shown.

View File

@@ -8,7 +8,7 @@
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
$transport_cost = ( new \Domain\Transport\TransportRepository( $GLOBALS['mdb'] ) )->transportCostCached( \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' ) );
$transport_cost = ( new \Domain\Transport\TransportRepository( $GLOBALS['mdb'] ) )->transportCostCached( (int)\Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' ) ) ?? 0.0;
$basket_summary = \Domain\Basket\BasketCalculator::summaryPrice( $basket, $coupon ) + $transport_cost;
?>
@@ -41,4 +41,4 @@
</div>
</div>
<? endif;?>
<? endforeach; endif;?>
<? endforeach; endif;?>

View File

@@ -1,9 +1,22 @@
<div id="category-subcategory-tiles">
<ul class="category-subcategory-tiles">
<?php foreach ( $this -> categories as $category ): ?>
<?php
global $lang_id;
$categoryRepo = new \Domain\Category\CategoryRepository( $GLOBALS['mdb'] );
foreach ( $this -> categories as $category ):
$title = $category['language']['title'] ?? ( $category['title'] ?? '' );
$url = '#';
if ( !empty( $category['id'] ) ) {
$url = $categoryRepo->categoryUrl( (int)$category['id'], (string)$lang_id );
} elseif ( !empty( $category['language']['seo_link'] ) ) {
$url = '/' . ltrim( (string)$category['language']['seo_link'], '/' );
} elseif ( !empty( $category['seo_link'] ) ) {
$url = '/' . ltrim( (string)$category['seo_link'], '/' );
}
?>
<li class="category-subcategory-tile">
<a href="/<?= $category['seo_link']; ?>"><?= $category['title']; ?></a>
<a href="<?= $url; ?>"><?= $title; ?></a>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>

View File

@@ -16,7 +16,7 @@ endif;
if ( $this -> category['view_subcategories'] ):
echo \Shared\Tpl\Tpl::view( 'shop-category/_partials/category-subcategory-tiles', [
'categories' => ( new \Domain\Category\CategoryRepository( $GLOBALS['mdb'] ) )->subcategoriesLangCached( (int)$this -> category['id'] ),
'categories' => ( new \Domain\Category\CategoryRepository( $GLOBALS['mdb'] ) )->categoriesTree( $lang_id, (int)$this -> category['id'] ),
] );
endif;
@@ -36,4 +36,4 @@ if ( $this -> category_description ):
'category' => $this -> category
] );
endif;
?>
?>

View File

@@ -106,23 +106,26 @@ echo $this -> settings['newsletter_header'];
</td>
<td style="text-align: right; white-space: nowrap; padding: 0 5px;">
<?
echo \Shared\Helpers\Helpers::decimal( $position['price_brutto_promo'] ) . ' zł';
if ( $position['price_brutto_promo'] and $position['price_brutto_promo'] < $position['price_brutto'])
echo '<u style="font-size: 15px; font-weight: 400; color: #c3c3c3; margin-left: 5px; text-decoration: line-through;">' . \Shared\Helpers\Helpers::decimal( $position['price_brutto'] ) . ' zł</u>';
if ( $position['price_brutto_promo'] and $position['price_brutto_promo'] < $position['price_brutto'] )
$discount += \Shared\Helpers\Helpers::normalize_decimal( ( $position['price_brutto'] - $position['price_brutto_promo'] ) * $position['quantity'] );
$_promo = round( (float)$position['price_brutto_promo'], 2 );
$_base = round( (float)$position['price_brutto'], 2 );
if ( $_promo > 0 and $_promo < $_base ) {
echo \Shared\Helpers\Helpers::decimal( $_promo ) . ' zł';
echo '<u style="font-size: 15px; font-weight: 400; color: #c3c3c3; margin-left: 5px; text-decoration: line-through;">' . \Shared\Helpers\Helpers::decimal( $_base ) . ' zł</u>';
$discount += \Shared\Helpers\Helpers::normalize_decimal( ( $_base - $_promo ) * $position['quantity'] );
} else {
echo \Shared\Helpers\Helpers::decimal( $_base ) . ' zł';
}
$_effective = ( $_promo > 0 and $_promo < $_base ) ? $_promo : $_base;
?>
</td>
<td style="text-align: right; white-space: nowrap; padding: 0 5px;">
<?= $position['quantity'];?>
</td>
<td style="text-align: right; white-space: nowrap; padding: 0 5px;">
<?= \Shared\Helpers\Helpers::decimal( \Shared\Helpers\Helpers::normalize_decimal( $position['price_brutto_promo'] * $position['quantity'] ) );?> zł
<?= \Shared\Helpers\Helpers::decimal( \Shared\Helpers\Helpers::normalize_decimal( $_effective * $position['quantity'] ) );?> zł
</td>
</tr>
<? $summary += \Shared\Helpers\Helpers::normalize_decimal( $position['price_brutto'] * $position['quantity'] );?>
<? $summary += \Shared\Helpers\Helpers::normalize_decimal( $_base * $position['quantity'] );?>
<? $quantity += $position['quantity'];?>
<? endforeach; endif;?>
<tr>

View File

@@ -1,4 +1,4 @@
<? global $config; $this -> settings['ssl'] ? $base = 'https' : $base = 'http'; $paymentRepo = new \Domain\PaymentMethod\PaymentMethodRepository( $GLOBALS['mdb'] );?>
<? global $config; $this -> settings['ssl'] ? $base = 'https' : $base = 'http'; $base_secure = 'https'; $paymentRepo = new \Domain\PaymentMethod\PaymentMethodRepository( $GLOBALS['mdb'] );?>
<div class="order-summary">
<div class="box-title">
<?= ucfirst( \Shared\Helpers\Helpers::lang( 'szczegoly-zamowienia' ) );?>: <?= $this -> order['number'];?>
@@ -119,9 +119,9 @@
$url .= '&email=' . urlencode( $this -> order['client_email'] );
$url .= '&nazwisko=' . urlencode( $this -> order['client_name'] . ' ' . $this -> order['client_surname'] );
$url .= '&crc=' . $this -> order['hash'];
$url .= '&result_url=' . urlencode( $base . "://" . $_SERVER['SERVER_NAME'] . '/tpay-status' );
$url .= '&return_url=' . urlencode( $base . "://" . $_SERVER['SERVER_NAME'] . '/potwierdzenie-platnosci/' . $this -> order['hash'] );
$url .= '&return_error_url=' . urlencode( $base . "://" . $_SERVER['SERVER_NAME'] . '/zamowienie/' . $this -> order['hash'] );
$url .= '&result_url=' . urlencode( $base_secure . "://" . $_SERVER['SERVER_NAME'] . '/tpay-status' );
$url .= '&return_url=' . urlencode( $base_secure . "://" . $_SERVER['SERVER_NAME'] . '/potwierdzenie-platnosci/' . $this -> order['hash'] );
$url .= '&return_error_url=' . urlencode( $base_secure . "://" . $_SERVER['SERVER_NAME'] . '/zamowienie/' . $this -> order['hash'] );
$url .= '&md5sum=' . md5( $id . '&' . str_replace( ',', '.', round( $this -> order['summary'], 2 ) ) . '&' . $this -> order['hash'] . '&' . $code );
?>
<button type="button" onclick="document.location.href='<?= $url;?>'" class="btn btn-success"><?= \Shared\Helpers\Helpers::lang( 'zaplac-online' );?> <?= \Shared\Helpers\Helpers::decimal( $this -> order['summary'] );?> zł</b></button>
@@ -189,4 +189,4 @@
<? unset( $_SESSION['google-analytics-purchase'] );?>
<? endif;?>
});
</script>
</script>

View File

@@ -65,20 +65,23 @@
<div class="prices">
<div class="price">
<?
echo \Shared\Helpers\Helpers::decimal( $product['price_brutto_promo'] ) . ' zł';
if ( $product['price_brutto_promo'] and $product['price_brutto_promo'] < $product['price_brutto'] )
echo '<u>' . \Shared\Helpers\Helpers::decimal( $product['price_brutto'] ) . ' zł</u>';
if ( $product['price_brutto_promo'] and $product['price_brutto_promo'] < $product['price_brutto'] )
$discount += \Shared\Helpers\Helpers::normalize_decimal( ( $product['price_brutto'] - $product['price_brutto_promo'] ) * $product['quantity'] );
$_promo = round( (float)$product['price_brutto_promo'], 2 );
$_base = round( (float)$product['price_brutto'], 2 );
if ( $_promo > 0 and $_promo < $_base ) {
echo \Shared\Helpers\Helpers::decimal( $_promo ) . ' zł';
echo '<u>' . \Shared\Helpers\Helpers::decimal( $_base ) . ' zł</u>';
$discount += \Shared\Helpers\Helpers::normalize_decimal( ( $_base - $_promo ) * $product['quantity'] );
} else {
echo \Shared\Helpers\Helpers::decimal( $_base ) . ' zł';
}
$effective_price = ( $_promo > 0 and $_promo < $_base ) ? $_promo : $_base;
?>
<span>x <?= $product['quantity'];?></span>
<?= \Shared\Helpers\Helpers::decimal( \Shared\Helpers\Helpers::normalize_decimal( $product['price_brutto'] * $product['quantity'] ) );?> zł
<?= \Shared\Helpers\Helpers::decimal( \Shared\Helpers\Helpers::normalize_decimal( $effective_price * $product['quantity'] ) );?> zł
</div>
</div>
</div>
<? $summary += \Shared\Helpers\Helpers::normalize_decimal( $product['price_brutto'] * $product['quantity'] );?>
<? $summary += \Shared\Helpers\Helpers::normalize_decimal( $_base * $product['quantity'] );?>
<? endforeach;?>
<div class="basket-summary">
Wartość koszyka <span><?= \Shared\Helpers\Helpers::decimal( $summary );?> zł</span>

View File

@@ -1,23 +1,10 @@
<? if ( is_array( $this -> custom_fields ) ) : ?>
<? foreach ( $this -> custom_fields as $custom_field ): ?>
<? if ( $custom_field['type'] == 'text' ) : ?>
<div class="custom-field">
<div class="_name">
<?= $custom_field['name'];?><? if ( !empty( $custom_field['is_required'] ) ): ?>*<? endif; ?>:
</div>
<div class="_input">
<input type="text" class="form-control" name="custom_field[<?= $custom_field['id_additional_field'];?>]" field_name="<?= $custom_field['name'];?>" value="" <? if ( !empty( $custom_field['is_required'] ) ): ?>required<? endif; ?>>
</div>
</div>
<? elseif ( $custom_field['type'] == 'image' ) : ?>
<div class="custom-field">
<div class="_name">
<?= $custom_field['name'];?><? if ( !empty( $custom_field['is_required'] ) ): ?>*<? endif; ?>:
</div>
<div class="_input">
<input type="file" class="form-control-file" name="custom_field[<?= $custom_field['id_additional_field'];?>]" field_name="<?= $custom_field['name'];?>" src="" alt="" <? if ( !empty( $custom_field['is_required'] ) ): ?>required<? endif; ?>>
</div>
</div>
<? endif; ?>
<? endforeach; ?>
<? endif;?>
<? if ( is_array( $this -> custom_fields ) ): foreach ( $this -> custom_fields as $custom_field ):?>
<div class="custom-field">
<div class="_name">
<?= $custom_field['name'];?><? if ( !empty( $custom_field['is_required'] ) ): ?>*<? endif; ?>:
</div>
<div class="_input">
<input type="text" class="form-control" name="custom_field[<?= $custom_field['id_additional_field'];?>]" field_name="<?= $custom_field['name'];?>" value="" <? if ( !empty( $custom_field['is_required'] ) ): ?>required<? endif; ?>>
</div>
</div>
<? endforeach; endif;?>

View File

@@ -260,11 +260,13 @@
<a href="javascript:history.go(-1)" class="btn btn-success history-back"><?= \Shared\Helpers\Helpers::lang( 'wstecz' );?></a>
</div>
<link class="footer" rel="stylesheet" type="text/css" href="/libraries/fancybox3/css/core.css">
<link class="footer" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link class="footer" rel="stylesheet" type="text/css" href="/plugins/OwlCarousel/owl.carousel.css">
<link class="footer" rel="stylesheet" type="text/css" href="/plugins/OwlCarousel/owl.theme.default.css">
<script class="footer" type="text/javascript" src="/libraries/fancybox3/js/core.js"></script>
<script class="footer" type="text/javascript" src="/libraries/fancybox3/js/guestures.js"></script>
<script class="footer" type="text/javascript" src="/libraries/fancybox3/js/wheel.js"></script>
<script class="footer" type="text/javascript" src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script class="footer" type="text/javascript" src="/plugins/OwlCarousel/owl.carousel.js"></script>
<script type="text/javascript">
$(function(){

Binary file not shown.

View File

@@ -1,11 +1 @@
DELETE r1 FROM pp_redirects r1
INNER JOIN pp_redirects r2
ON r1.`from` = r2.`from`
AND (r1.lang_id <=> r2.lang_id)
AND (
IFNULL(r1.date_add, '1000-01-01 00:00:00') < IFNULL(r2.date_add, '1000-01-01 00:00:00')
OR (
IFNULL(r1.date_add, '1000-01-01 00:00:00') = IFNULL(r2.date_add, '1000-01-01 00:00:00')
AND r1.id < r2.id
)
);
DELETE FROM pp_redirects WHERE id IN (SELECT id FROM (SELECT r1.id FROM pp_redirects r1 INNER JOIN pp_redirects r2 ON r1.`from` = r2.`from` AND (r1.lang_id <=> r2.lang_id) AND (IFNULL(r1.date_add, '1000-01-01 00:00:00') < IFNULL(r2.date_add, '1000-01-01 00:00:00') OR (IFNULL(r1.date_add, '1000-01-01 00:00:00') = IFNULL(r2.date_add, '1000-01-01 00:00:00') AND r1.id < r2.id))) AS tmp);

View File

@@ -0,0 +1,23 @@
D: ../autoload/admin/controls/
D: ../autoload/admin/factory/
D: ../autoload/admin/view/
D: ../autoload/cms/
D: ../autoload/front/controls/
D: ../autoload/front/factory/
D: ../autoload/front/view/
D: ../autoload/shop/
F: ../autoload/admin/class.Site.php
F: ../autoload/class.Article.php
F: ../autoload/class.Cache.php
F: ../autoload/class.CacheHandler.php
F: ../autoload/class.DbModel.php
F: ../autoload/class.Email.php
F: ../autoload/class.Html.php
F: ../autoload/class.Image.php
F: ../autoload/class.Log.php
F: ../autoload/class.Mobile_Detect.php
F: ../autoload/class.RedisConnection.php
F: ../autoload/class.S.php
F: ../autoload/class.Tpl.php
F: ../autoload/curl.class.php
D: ../updates/

BIN
updates/0.20/ver_0.298.zip Normal file

Binary file not shown.

View File

@@ -1,3 +1,6 @@
<b>ver. 0.298 - 20.02.2026</b><br />
- FIX - kilka poprawek po aktualizacji
<hr>
<b>ver. 0.297 - 19.02.2026</b><br />
- NEW - REST API produktów (lista, szczegóły, tworzenie, aktualizacja)
- NEW - Endpoint products z filtrowaniem, sortowaniem i paginacją
@@ -318,7 +321,7 @@
<hr><b>ver. 0.257 - 12.02.2026</b><br />
- NEW - migracja modulu `Newsletter` do architektury Domain + DI (`Domain\\Newsletter\\NewsletterRepository`, `Domain\\Newsletter\\NewsletterPreviewRenderer`, `admin\\Controllers\\NewsletterController`)
- UPDATE - widoki `/admin/newsletter/*` przepiete z legacy `grid/gridEdit` na nowe komponenty (`components/table-list`, `components/form-edit`) + nowy endpoint `/admin/newsletter/preview/`
- UPDATE - routing DI (`admin\\Site`) rozszerzony o moduł `Newsletter`
- UPDATE - routing DI (`admin\\Site`) rozszerzony o moduł `Newsletter`
- UPDATE - `admin\\factory\\Newsletter` dziala jako fasada do nowego repozytorium (backward compatibility)
- UPDATE - `front\\factory\\Newsletter` nie korzysta juz z `admin\\view\\Newsletter`
- CLEANUP - usuniete legacy klasy `autoload/admin/controls/class.Newsletter.php`, `autoload/admin/view/class.Newsletter.php`
@@ -339,7 +342,7 @@
- UPDATE - migracja widokow languages (`languages-list`, `language-edit`, `translations-list`, `translation-edit`) na `components/table-list` i `components/form-edit`
- UPDATE - routing DI dla `Languages` w `admin\\Site` oraz kompatybilna fasada `admin\\factory\\Languages` delegujaca do repozytorium
- UPDATE - naprawiono zapis edycji jezyka (ID jezyka pobierane z URL przy edycji)
- UPDATE - globalne poprawki UX filtrĂłw w `components/table-list` (kompaktowe kolumny `Aktywny`/`Domyslny`, spacing i pelna szerokosc selecta)
- UPDATE - globalne poprawki UX filtrów w `components/table-list` (kompaktowe kolumny `Aktywny`/`Domyslny`, spacing i pelna szerokosc selecta)
- CLEANUP - usuniete legacy klasy: `autoload/admin/controls/class.Languages.php`, `autoload/admin/view/class.Languages.php`
<hr>
<b>ver. 0.253 - 12.02.2026</b><br />
@@ -402,74 +405,74 @@
- UPDATE - refaktoryzacja: article_save przeniesiony do Domain\Article\ArticleRepository::save() z prywatnymi helperami
- UPDATE - refaktoryzacja: article_delete przeniesiony do Domain\Article\ArticleRepository::archive()
- UPDATE - ArticlesController: nowe akcje save() i delete() z DI
- UPDATE - admin\factory\Articles::article_save() i articles_set_archive() delegują do repozytorium (kompatybilność)
- UPDATE - admin\factory\Articles::article_save() i articles_set_archive() delegują do repozytorium (kompatybilność)
<hr><b>ver. 0.243</b><br />
- UPDATE - refaktoryzacja: cleanup nieprzypisanych plików/zdjęć artykułów przeniesiony do Domain\Article\ArticleRepository
- UPDATE - ArticlesController::edit() używa repozytorium do cleanupu, a admin\factory\Articles zachowuje delegowanie (kompatybilność)
- UPDATE - refaktoryzacja: cleanup nieprzypisanych plików/zdjęć artykułów przeniesiony do Domain\Article\ArticleRepository
- UPDATE - ArticlesController::edit() używa repozytorium do cleanupu, a admin\factory\Articles zachowuje delegowanie (kompatybilność)
<hr><b>ver. 0.242</b><br />
- NEW - refaktoryzacja: Domain\Article\ArticleRepository + migracja article_edit do admin\Controllers\ArticlesController (DI)
- UPDATE - admin\factory\Articles::article_details() deleguje do nowego repozytorium (kompatybilność zachowana)
- UPDATE - metody przejęte przez nowe kontrolery oznaczone jako @deprecated w legacy kontrolerach admin\controls
- UPDATE - admin\factory\Articles::article_details() deleguje do nowego repozytorium (kompatybilność zachowana)
- UPDATE - metody przejęte przez nowe kontrolery oznaczone jako @deprecated w legacy kontrolerach admin\controls
<hr><b>ver. 0.241</b><br />
- NEW - refaktoryzacja: admin\Controllers\ProductArchiveController - archiwum produktĂłw z DI
- NEW - refaktoryzacja: admin\Controllers\ProductArchiveController - archiwum produktów z DI
- NEW - ProductRepository::archive(), unarchive() - operacje archiwizacji w repozytorium
- FIX - naprawiono SQL w liście archiwum (puste wyszukiwanie filtrowało wszystkie wyniki)
- FIX - naprawiono brakujÄ…cy filtr archive = 1 w zapytaniu bez wyszukiwania
- UPDATE - wyczyszczono szablony archiwum (usunięto zbędne funkcje: apilo, baselinker, duplikowanie)
- FIX - naprawiono SQL w liście archiwum (puste wyszukiwanie filtrowało wszystkie wyniki)
- FIX - naprawiono brakujący filtr archive = 1 w zapytaniu bez wyszukiwania
- UPDATE - wyczyszczono szablony archiwum (usunięto zbędne funkcje: apilo, baselinker, duplikowanie)
<hr>
<b>ver. 0.240</b><br />
- NEW - refaktoryzacja: Domain\Settings\SettingsRepository + admin\Controllers\SettingsController (architektura Domain-Driven)
- NEW - refaktoryzacja: Domain\Cache\CacheRepository - czyszczenie cache z obsĹugÄ… Redis
- FIX - komunikat potwierdzenia zapisu ustawień w panelu administratora
- NEW - refaktoryzacja: Domain\Cache\CacheRepository - czyszczenie cache z obsługą Redis
- FIX - komunikat potwierdzenia zapisu ustawień w panelu administratora
- FIX - naprawiono element #content w layoucie admina (powiadomienia grid.js)
<hr><b>ver. 0.239</b><br />
- NEW - refaktoryzacja: Domain\Banner\BannerRepository + admin\Controllers\BannerController (pełna migracja kontrolera)
- NEW - refaktoryzacja: Domain\Banner\BannerRepository + admin\Controllers\BannerController (pełna migracja kontrolera)
- NEW - refaktoryzacja: Domain\Product\ProductRepository::getPrice(), getName() - migracja kolejnych metod
- NEW - router admin z obsĹugÄ… nowych kontrolerĂłw (fallback na stare)
- UPDATE - shop\Product::get_product_price(), get_product_name() używają nowego repozytorium (kompatybilność zachowana)
- NEW - router admin z obsługą nowych kontrolerów (fallback na stare)
- UPDATE - shop\Product::get_product_price(), get_product_name() używają nowego repozytorium (kompatybilność zachowana)
<hr>
<b>ver. 0.238</b><br />
- NEW - refaktoryzacja: Domain\Product\ProductRepository - pierwsza klasa w nowej architekturze Domain-Driven
- NEW - Dependency Injection zamiast global variables
- UPDATE - shop\Product::get_product_quantity() używa teraz nowego repozytorium (kompatybilność zachowana)
- UPDATE - shop\Product::get_product_quantity() używa teraz nowego repozytorium (kompatybilność zachowana)
<hr>
<b>ver. 0.237</b><br />
- NEW - automatyczne czyszczenie cache produktu po aktualizacji przez CRON (Sellasist, Apilo, Baselinker)
- UPDATE - przycisk "Wyczyść cache" w panelu administratora z obsĹugÄ… AJAX i komunikatami o postÄ™pie
- UPDATE - przycisk "Wyczyść cache" w panelu administratora z obsługą AJAX i komunikatami o postępie
<hr>
<b>ver. 0.236</b><br />
- FIX - zabezpieczenie przed duplikatami zamówień w Apilo - automatyczne pobieranie ID zamówienia przy błędzie "idExternal już wykorzystywany"
- FIX - zabezpieczenie przed duplikatami zamówień w Apilo - automatyczne pobieranie ID zamówienia przy błędzie "idExternal już wykorzystywany"
<hr>
<b>ver. 0.235</b><br />
- FIX - poprawka funkcji aktualizacji
<hr>
<b>ver. 0.234</b><br />
- NEW - przycisk zaznaczania zamówienia jako wysłane do trustmate.io
- NEW - przycisk zaznaczania zamówienia jako wysłane do trustmate.io
<hr>
<b>ver. 0.232</b><br />
- NEW - opcje GPSR
<hr>
<b>ver. 0.231</b><br />
- FIX - poprawki bezpieczeństwa + dwuetapowa weryfikacja logowania
- FIX - poprawki bezpieczeństwa + dwuetapowa weryfikacja logowania
<hr>
<b>ver. 0.230</b><br />
- FIX - poprawki bezpieczeństwa
- FIX - poprawki bezpieczeństwa
<hr>
<b>ver. 0.229</b><br />
- NEW - pola dodatkowe z opcjÄ… wymagane/niewymagane
- NEW - pola dodatkowe z opcją wymagane/niewymagane
<hr>
<b>ver. 0.228</b><br />
- NEW - cron do wysyłania zamówień do trustmate.io
- NEW - cron do wysyłania zamówień do trustmate.io
<hr>
<b>ver. 0.227</b><br />
- NEW - historia kodĂłw rabatowych
- NEW - historia kodów rabatowych
<hr>
<b>ver. 0.226</b><br />
- NEW - dodanie opcji faktury do zamĂłwienia
- NEW - dodanie opcji faktury do zamówienia
<hr>
<b>ver. 0.225</b><br />
- NEW - przycisk czyszczenia cache<br>
- NEW - ponowne wysyłanie zamówienia do apilo
- NEW - ponowne wysyłanie zamówienia do apilo
<hr>
<b>ver. 0.224</b><br />
- NEW - sortowanie form dostawy
@@ -481,20 +484,20 @@
- NEW - integracja z Orlen Paczka
<hr>
<b>ver. 0.221</b><br />
- NEW - Automatyczne przekierowania adresĂłw URL produktĂłw, zmiany w pliku htaccess
- NEW - Automatyczne przekierowania adresów URL produktów, zmiany w pliku htaccess
<hr>
<b>ver. 0.220</b><br />
- NEW - Dodanie możliwości wyświetlenia na strone ostatnio dodane produkty [PRODUKTY_NEW] lub [PRODUKTY_NEW:10].<br>
- NEW - Dodanie możliwości wyświetlenia na strone popularnych produktów [PRODUKTY_TOP] lub [PRODUKTY_TOP:10].
- NEW - Dodanie możliwości wyświetlenia na strone ostatnio dodane produkty [PRODUKTY_NEW] lub [PRODUKTY_NEW:10].<br>
- NEW - Dodanie możliwości wyświetlenia na strone popularnych produktów [PRODUKTY_TOP] lub [PRODUKTY_TOP:10].
<hr>
<b>ver. 0.219</b><br />
- NEW - Dodanie możliwości zmiany daty w artykułach
- NEW - Dodanie możliwości zmiany daty w artykułach
<hr>
<b>ver. 0.218</b><br />
- NEW - indywidualny kod GTM
<hr>
<b>ver. 0.217</b><br />
- NEW - zwiększenie obsługi REDIS
- NEW - zwiększenie obsługi REDIS
<hr>
<b>ver. 0.216</b><br />
- NEW - aktualizacja api i cron (apilo)
@@ -509,43 +512,43 @@
- FIX - wyliczenie darmowej dostawy
<hr>
<b>ver. 0.212</b><br />
- NEW - zmiany w zapisywaniu zamĂłwienia do apilo
- NEW - zmiany w zapisywaniu zamówienia do apilo
<hr>
<b>ver. 0.211</b><br />
- NEW - Debugowanie apilo + wyświetlanie podkategorii
- NEW - Debugowanie apilo + wyświetlanie podkategorii
<hr>
<b>ver. 0.210</b><br />
- NEW - dodatkowe pola w widoku produktĂłw
- NEW - dodatkowe pola w widoku produktów
<hr>
<b>ver. 0.209</b><br />
- NEW - zmiany w widoku produktĂłw (panel administratora)
- NEW - zmiany w widoku produktów (panel administratora)
<hr>
<b>ver. 0.208</b><br />
- NEW - zmiany w wyszukiwarce produktĂłw
- NEW - zmiany w wyszukiwarce produktów
<hr>
<b>ver. 0.204-0.207</b><br />
- NEW - htaccess update
<hr>
<b>ver. 0.204-0.206</b><br />
- NEW - wysyłanie produktów do apilo
- NEW - wysyłanie produktów do apilo
<hr>
<b>ver. 0.203</b><br />
- NEW - zmiana sposobu wyliczania cen produkty z dodatkami
<hr>
<b>ver. 0.202</b><br />
- NEW - dodano "główne zdjęcie" w edycji artykułu
- NEW - dodano "ówne zdjęcie" w edycji artykułu
<hr>
<b>ver. 0.201</b><br />
- FIX - aktualizacja statusĂłw na podstawie baselinkera
- FIX - aktualizacja statusów na podstawie baselinkera
<hr>
<b>ver. 0.200</b><br />
- NEW - wysyłanie produktów do baselinker
- NEW - wysyłanie produktów do baselinker
<hr>
<b>ver. 0.199</b><br />
- NEW - usprawnienie edycji danych do XML
<hr>
<b>ver. 0.198</b><br />
- NEW - automatyczne generowanie kodĂłw SKU
- NEW - automatyczne generowanie kodów SKU
<hr>
<b>ver. 0.197</b><br />
- FIX - poprawki w Dashboard
@@ -554,7 +557,7 @@
- FIX - integracja z apilo.com
<hr>
<b>ver. 0.195</b><br />
- FIX - aktualizacja statusĂłw
- FIX - aktualizacja statusów
<hr>
<b>ver. 0.194</b><br />
- UPDATE - integracja apilo
@@ -563,46 +566,46 @@
- UPDATE - aktualizacja synchronizacji z baselinker
<hr>
<b>ver. 0.192</b><br />
- NEW - pobieranie statusĂłw z sellasist
- NEW - pobieranie statusów z sellasist
<hr>
<b>ver. 0.191</b><br />
- NEW - integracja z selasist
<hr>
<b>ver. 0.190</b><br />
- FIX - produkty powiÄ…zane
- FIX - produkty powiązane
<hr>
<b>ver. 0.189</b><br />
- FIX - ceny promocyjne produktĂłw z dodatkiem
- FIX - ceny promocyjne produktów z dodatkiem
<hr>
<b>ver. 0.188</b><br />
- NEW - widok listy produktĂłw
- NEW - widok listy produktów
<hr>
<b>ver. 0.187</b><br />
- FIX - pobieranie cen z APILO
<hr>
<b>ver. 0.186</b><br />
- FIX - dodawanie do koszyka tych samych produktów ale z różną personalizacją
- FIX - dodawanie do koszyka tych samych produktów ale z różną personalizacją
<hr>
<b>ver. 0.185</b><br />
- FIX - masowa edycja produktĂłw
- FIX - masowa edycja produktów
<hr>
<b>ver. 0.184</b><br />
- NEW - druga część integracji z apilo, masowa edycja produktów
- NEW - druga część integracji z apilo, masowa edycja produktów
<hr>
<b>ver. 0.183</b><br />
- NEW - pierwsza część integracji z apilo
- NEW - pierwsza część integracji z apilo
<hr>
<b>ver. 0.182</b><br />
- FIX - layout
<hr>
<b>ver. 0.181</b><br />
- NEW - infinitescroll - opcja włączy/wyłącz
- NEW - infinitescroll - opcja włączy/wyłącz
<hr>
<b>ver. 0.180</b><br />
- NEW - aktualizacja dashboard
<hr>
<b>ver. 0.179</b><br />
- NEW - obsługa EAN
- NEW - obsługa EAN
<hr>
<b>ver. 0.177, 0.178</b><br />
- FIX - custom_label
@@ -618,7 +621,7 @@
<hr>
<b>ver. 0.173</b><br />
- NEW - duplikowanie produktu wraz z kombinacjami
- NEW - dodanie przechodzenia pomiędzy zamówienia (poprzednie/następne zamówienie)
- NEW - dodanie przechodzenia pomiędzy zamówienia (poprzednie/następne zamówienie)
<hr>
<b>ver. 0.172</b><br />
- FIX - poprawki w Cache
@@ -630,22 +633,22 @@
- NEW - usuwanie cache produktu przy zapisie
<hr>
<b>ver. 0.169</b><br />
- FIX - poprawki w liście produktów
- FIX - poprawki w liście produktów
<hr>
<b>ver. 0.168</b><br />
- NEW - archiwum produktĂłw
- NEW - archiwum produktów
<hr>
<b>ver. 0.167</b><br />
- NEW - dodanie obsługi cen i stanów magazynowych kombinacji produktów
- NEW - dodanie obsługi cen i stanów magazynowych kombinacji produktów
<hr>
<b>ver. 0.166</b><br />
- NEW - współpraca z GTM
- NEW - współpraca z GTM
<hr>
<b>ver. 0.164/5</b><br />
- FIX - ukrywanie produktĂłw nieaktywnych
- FIX - ukrywanie produktów nieaktywnych
<hr>
<b>ver. 0.163</b><br />
- NEW - automatyczne podpowiadanie produktów do zestawu na podstawie wcześniejszych zakupów klientów
- NEW - automatyczne podpowiadanie produktów do zestawu na podstawie wcześniejszych zakupów klientów
<hr>
<b>ver. 0.162</b><br />
- NEW - GA4
@@ -661,7 +664,7 @@
- FIX - cron Baselinker
<hr>
<b>ver. 0.158</b><br />
- UPDATE - poprawa kolorystyki przyciskĂłw
- UPDATE - poprawa kolorystyki przycisków
<hr>
<b>ver. 0.157</b><br />
- NEW - szybka zmiana statusu produktu
@@ -673,10 +676,10 @@
- NEW - infinite scroll w widoku kategorii
<hr>
<b>ver. 0.154</b><br />
- FIX - atrybuty produktĂłw
- FIX - atrybuty produktów
<hr>
<b>ver. 0.153</b><br />
- FIX - atrybuty produktĂłw
- FIX - atrybuty produktów
<hr>
<b>ver. 0.152</b><br />
- FIX - tematy maili
@@ -685,7 +688,7 @@
- FIX - tematy maili
<hr>
<b>ver. 0.150</b><br />
- NEW - domyślna forma transportu
- NEW - domyślna forma transportu
<hr>
<b>ver. 0.149</b><br />
- NEW - tematy maili
@@ -703,10 +706,10 @@
- NEW - omnibus ready
<hr>
<b>ver. 0.144</b><br />
- FIX - usunięcie adresu marianek.pl z kodu
- FIX - usunięcie adresu marianek.pl z kodu
<hr>
<b>ver. 0.143</b><br />
- FIX - poprawa generowania plikĂłw WEBP
- FIX - poprawa generowania plików WEBP
<hr>
<b>ver. 0.142</b><br />
- FIX - poprawa adresu strony głównej
- FIX - poprawa adresu strony ównej

View File

@@ -1,5 +1,5 @@
<?
$current_ver = 297;
$current_ver = 298;
for ($i = 1; $i <= $current_ver; $i++)
{