Files
grzanieplus.pl/plugins/stAllegroPlugin/lib/validator/stAllegroVariantsValidator.class.php
2025-03-12 17:06:23 +01:00

77 lines
3.2 KiB
PHP

<?php
class stAllegroVariantsValidator extends sfValidator {
public function execute(&$value, &$error) {
$product = ProductPeer::retrieveByPk($this->getContext()->getRequest()->getParameter('product_id', null));
$i18n = $this->getContext()->getI18n();
$variant = null;
foreach ($value['attributes'] as $attributeId => $attribute) {
$attributeJson = json_decode($attribute['attribute'], true);
if ($attributeJson['sellFormTitle'] == 'Rozmiar') {
$variant = $attribute;
break;
}
}
if ($variant !== null) {
$size = array_combine(explode('|', $attributeJson['sellFormOptsValues']), explode('|', $attributeJson['sellFormDesc']));
if ($product->getOptHasOptions() > 1) {
if (!isset($variant['value']) || empty($variant['value'])) {
$error = $i18n->__('<b>(Rozmiar)</b> - proszę wybrać minimuj jedną opcje.');
return false;
}
$variant['options'];
foreach ($variant['value'] as $id) {
if (empty($variant['quantity'][$id])) {
$error = $i18n->__('<b>(Rozmiar: %size%)</b> - ilość produktów do wystawienia musi być większa od 0.', array('%size%' => $size[$id]));
return false;
}
if (!isset($variant['options'][$id]) && empty($variant['options'][$id])) {
$error = $i18n->__('<b>(Rozmiar: %size%)</b> - każda opcja musi mieć wybraną opcje produktów.', array('%size%' => $size[$id]));
return false;
}
$options = ProductOptionsValuePeer::retrieveByPKs(explode(',', $variant['options'][$id]));
stNewProductOptions::updateProductBySelectedOptions($product, $options);
if ($variant['quantity'][$id] > $product->getStock()) {
$error = $i18n->__('<b>(Rozmiar: %size%)</b> - brak dostępnej ilości produktów w magazynie.', array('%size%' => $size[$id]));
return false;
}
}
} else {
$sumStock = 0;
foreach ($variant['quantity'] as $key => $quantity) {
if (isset($variant['value'][$key])) {
$sumStock += (int) $quantity;
if ((int) $quantity == 0) {
$error = $i18n->__('<b>(Rozmiar: %size%)</b> - ilość produktów do wystawienia musi być większa od 0.', array('%size%' => $size[$id]));
return false;
}
}
}
if ($sumStock > $product->getStock()) {
$error = $i18n->__('<b>(Rozmiar: %size%)</b> - brak dostępnej ilości produktów w magazynie.', array('%size%' => $size[$id]));
return false;
}
}
}
return true;
}
public function initialize($context, $parameters = null) {
parent::initialize($context);
$this->getParameterHolder()->add($parameters);
return true;
}
}