ver. 0.274 - ShopProduct mass_edit + tree UI cleanup

This commit is contained in:
2026-02-15 11:41:04 +01:00
parent 8e84c6b567
commit 2eab1b1cbe
22 changed files with 905 additions and 251 deletions

View File

@@ -440,7 +440,9 @@ class ArticlesController
$html .= '<ol class="sortable" id="sortable_' . $menuId . '">';
$html .= '<li id="list_' . $menuId . '" class="menu_' . $menuId . '" menu="' . $menuId . '">';
$html .= '<div class="context_0 content content_menu"' . ($menuStatus ? '' : ' style="color: #cc0000;"') . '>';
$html .= '<span class="disclose"><span></span></span>Menu: <b>' . $menuName . '</b>';
$html .= '<button type="button" class="disclose layout-tree-toggle" aria-expanded="false" title="Rozwin / zwin">'
. '<i class="fa fa-caret-right"></i>'
. '</button>Menu: <b>' . $menuName . '</b>';
$html .= '</div>';
$html .= \Tpl::view('articles/subpages-list', [
'pages' => $menuPages,

View File

@@ -0,0 +1,70 @@
<?php
namespace admin\Controllers;
use Domain\Product\ProductRepository;
/**
* Kontroler masowej edycji produktów.
* Obsługuje akcje: mass_edit (widok), mass_edit_save (AJAX), get_products_by_category (AJAX).
* Pozostałe akcje shop_product (view_list, product_edit, save itd.) nadal działają
* przez fallback na \admin\controls\ShopProduct.
*/
class ShopProductController
{
private ProductRepository $repository;
public function __construct(ProductRepository $repository)
{
$this->repository = $repository;
}
/**
* Widok masowej edycji produktów.
*/
public function mass_edit(): string
{
return \Tpl::view( 'shop-product/mass-edit', [
'products' => $this->repository->allProductsForMassEdit(),
'categories' => \admin\factory\ShopCategory::subcategories( null ),
'dlang' => \front\factory\Languages::default_language()
] );
}
/**
* AJAX: zastosowanie rabatu procentowego na zaznaczonych produktach.
*/
public function mass_edit_save(): void
{
$discountPercent = \S::get( 'discount_percent' );
$products = \S::get( 'products' );
if ( $discountPercent != '' && $products && is_array( $products ) && count( $products ) > 0 ) {
$productId = (int) $products[0];
$result = $this->repository->applyDiscountPercent( $productId, (float) $discountPercent );
if ( $result !== null ) {
echo json_encode( [
'status' => 'ok',
'price_brutto_promo' => $result['price_brutto_promo'],
'price_brutto' => $result['price_brutto']
] );
exit;
}
}
echo json_encode( [ 'status' => 'error' ] );
exit;
}
/**
* AJAX: pobranie ID produktów z danej kategorii.
*/
public function get_products_by_category(): void
{
$categoryId = (int) \S::get( 'category_id' );
$products = $this->repository->getProductsByCategory( $categoryId );
echo json_encode( [ 'status' => 'ok', 'products' => $products ] );
exit;
}
}