Files
shopPRO/admin/templates/shop-product/mass-edit-custom-script.php
Jacek Pyziak c8469f4371 ver. 0.277: ShopProduct factory, Dashboard, Update migration, legacy cleanup, admin\App
- ShopProduct factory: full migration (~40 ProductRepository methods, ~30 controller actions)
- Dashboard: Domain+DI migration (DashboardRepository + DashboardController)
- Update: Domain+DI migration (UpdateRepository + UpdateController, template rewrite)
- Renamed admin\Site to admin\App, removed dead fallback routing
- Removed all legacy folders: admin/controls, admin/factory, admin/view
- Newsletter: switched from admin\factory\Articles to ArticleRepository
- 414 tests, 1335 assertions passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 01:06:29 +01:00

159 lines
5.3 KiB
PHP

<script type="text/javascript" src="/libraries/jquery-nested-sortable/jquery.mjs.nestedSortable.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('ol.sortable').nestedSortable({
forcePlaceholderSize: true,
handle: 'div.content',
cancel: 'input,textarea,button,select,option,.icheckbox_minimal-blue,.iradio_minimal-blue,ins.iCheck-helper',
helper: 'original',
items: 'li',
opacity: .6,
placeholder: 'placeholder',
revert: 250,
tabSize: 25,
tolerance: 'pointer',
toleranceElement: '> div.content',
maxLevels: 4,
isTree: true,
expandOnHover: 700,
isAllowed: function() { return false; }
});
function refreshTreeDisclosureState() {
$('ol.sortable li').each(function() {
var $li = $(this);
var hasChildren = $li.children('ol').children('li').length > 0;
var $disclose = $li.children('div').children('.disclose');
if (hasChildren) {
$li.removeClass('sort-leaf');
if (!$li.hasClass('sort-collapsed') && !$li.hasClass('sort-expanded'))
$li.addClass('sort-collapsed');
$li.addClass('sort-branch');
$disclose.attr('aria-expanded', $li.hasClass('sort-expanded') ? 'true' : 'false');
$disclose.show();
} else {
$li.removeClass('sort-branch sort-collapsed sort-expanded').addClass('sort-leaf');
$disclose.attr('aria-expanded', 'false');
$disclose.hide();
}
});
}
refreshTreeDisclosureState();
// Inicjalizacja iCheck — osobno dla produktów i kategorii
if ($.fn && typeof $.fn.iCheck === 'function') {
$('.product-item .g-checkbox').iCheck({
checkboxClass: 'icheckbox_minimal-blue',
radioClass: 'iradio_minimal-blue'
});
$('#sortable input.g-checkbox').iCheck({
checkboxClass: 'icheckbox_minimal-blue',
radioClass: 'iradio_minimal-blue'
});
}
$('body').on('click', '.disclose', function() {
var $li = $(this).closest('li');
if (!$li.hasClass('sort-branch')) return;
$li.toggleClass('sort-collapsed').toggleClass('sort-expanded');
$(this).attr('aria-expanded', $li.hasClass('sort-expanded') ? 'true' : 'false');
this.blur();
});
$('.disclose').mousedown(function(e) {
if (e.which === 1) {
var category_id = $(this).parent('div').parent('li').attr('id');
$.ajax({
type: 'POST',
cache: false,
url: '/admin/shop_category/cookie_categories/',
data: { category_id: category_id }
});
}
});
<?php
$array = isset($_COOKIE['cookie_categories']) ? @unserialize($_COOKIE['cookie_categories']) : [];
if (is_array($array)):
foreach ($array as $key => $val):
if ($val):
?>
$('#<?= $key; ?>').children('div').children('button.disclose').click();
<?php
endif;
endforeach;
endif;
?>
$('.select-all').click(function() {
$('.product-item .g-checkbox').iCheck('check');
});
$('.deselect-all').click(function() {
$('.product-item .g-checkbox').iCheck('uncheck');
});
$('body').on('click', 'span[field-id="discount_percent"]', function() {
$('.ajax-msg').remove();
var discount_percent = $('#discount_percent').val();
var products = [];
$('input[name="products[]"]:checked').each(function() {
products.push($(this).val());
});
function saveProduct(index) {
if (index < products.length) {
$.ajax({
url: '/admin/shop_product/mass_edit_save/',
type: 'post',
data: { discount_percent: discount_percent, products: [products[index]] },
success: function(data) {
data = JSON.parse(data);
if (data.status == 'ok') {
if (data.price_brutto_promo)
$('label[for="product' + products[index] + '"]').append(' <span class="ajax-msg text-success">cena promocyjna: ' + data.price_brutto_promo + ' zł, cena zwykła: ' + data.price_brutto + '</span>');
else
$('label[for="product' + products[index] + '"]').append(' <span class="ajax-msg text-success">cena zwykła: ' + data.price_brutto + '</span>');
} else {
alert('Błąd przy zapisie produktu: ' + products[index]);
}
saveProduct(index + 1);
},
error: function() {
alert('Błąd przy zapisie produktu: ' + products[index]);
}
});
} else {
$.alert({
title: 'Informacja',
content: 'Zakończono zapisywanie produktów',
type: 'orange',
closeIcon: true,
closeIconClass: 'fa fa-close',
typeAnimated: true,
animation: 'opacity',
useBootstrap: false,
theme: 'modern',
autoClose: 'cancel|10000',
icon: 'fa fa-exclamation',
buttons: {
confirm: {
text: 'Zamknij',
btnClass: 'btn-blue',
keys: ['enter'],
action: function() {}
}
}
});
}
}
if (products.length > 0) {
saveProduct(0);
}
});
});
</script>