This commit is contained in:
2026-02-04 14:50:08 +03:00
parent 9c6adf8b73
commit 3f8bac0cb1
21 changed files with 1016 additions and 72 deletions
+114
View File
@@ -0,0 +1,114 @@
<?php
namespace Bx\Discount\Handlers;
use Bitrix\Main\Entity\Event;
use Bx\Discount\Tools;
class ADiscount
{
protected static array $lang = [
'EMPTY_PRODUCT_TYPE' => 'Не выбран тип визуального представления скидки на сайте'
];
public static function getLang($code)
{
return static::$lang[$code];
}
protected static function isValidData()
{
return isset($_POST['PRODUCT_TYPE']) && $_POST['PRODUCT_TYPE'] !== '0' && $_POST['PRODUCT_TYPE'] !== '';
}
protected static function updateAdditionalDiscountData($id)
{
$depsLoaded = \Bitrix\Main\Loader::includeModule('iblock');
if(!$depsLoaded) {
return;
}
$res_element = \CIBlockElement::GetList(
['SORT' => 'ASC'],
['IBLOCK_ID' => discountApp()->config('DISCOUNT_TYPE_IBLOCK_ID'), 'NAME' => $id],
false,
false,
['ID', 'NAME', 'PROPERTY_TYPE']
);
$res_element_count = $res_element->SelectedRowsCount();
if($res_element_count){
$obElement = $res_element->GetNext();
\CIBlockElement::SetPropertyValuesEx(
$obElement['ID'],
discountApp()->config('DISCOUNT_TYPE_IBLOCK_ID'),
[
'TYPE' => $_POST['PRODUCT_TYPE'],
'MIN_COUNT_PROD' => $_POST['MIN_COUNT_PROD']
]
);
} else {
$el = new \CIBlockElement();
$arTypeField = [
'IBLOCK_ID' => discountApp()->config('DISCOUNT_TYPE_IBLOCK_ID'),
'NAME' => $id,
'PROPERTY_VALUES' => [
'TYPE' => $_POST['PRODUCT_TYPE'],
'MIN_COUNT_PROD' => $_POST['MIN_COUNT_PROD'],
],
];
$el->Add($arTypeField);
}
}
protected static function addAdditionalDiscountData($id)
{
$depsLoaded = \Bitrix\Main\Loader::includeModule('iblock');
if(!$depsLoaded) {
return;
}
$el = new \CIBlockElement();
$arTypeField = [
'IBLOCK_ID' => discountApp()->config('DISCOUNT_TYPE_IBLOCK_ID'),
'NAME' => $id,
'PROPERTY_VALUES' => [
'TYPE' => $_POST['PRODUCT_TYPE'],
'MIN_COUNT_PROD' => $_POST['MIN_COUNT_PROD'],
],
];
$r = $el->Add($arTypeField);
}
/**
* Немного бреда с седых времен
* я хз что тут происходит
* коммент от старого разработчика: при поиске оптимальной цены на товар не учитываем скидки типа "От кол-ва"
* @see /local/php_interface/include/events.php [git history]
* @see BxDiscount [old functions]
*
* Желательно избавиться от функционала Q !!!
*
* @param $arResult
* @return void
*/
public static function onGetDiscountResult(&$arResult)
{
global $scriptType;
$counter = 1;
if($scriptType === 'XML_EXPORT'){
$counter = 0;
}
if(count($arResult) > $counter){
foreach($arResult as $key => $discount){
$discountViewType = Tools::getProductTypeArray($discount['ID']);
if($discountViewType['PRODUCT_TYPE'] === 'Q'){
unset($arResult[$key]);
}
}
}
}
}
+96
View File
@@ -0,0 +1,96 @@
<?php
namespace Bx\Discount\Handlers;
use Bx\Discount\Tools;
class CatalogDiscount extends ADiscount
{
public static function onBeforeAdd(&$arFields)
{
if(!Tools::isEnable()){
return true;
}
if(!static::isValidData()){
global $APPLICATION;
$APPLICATION->ThrowException(
static::getLang('EMPTY_PRODUCT_TYPE')
);
return false;
}
return true;
}
public static function onAfterAdd($id, $arFields)
{
if(!Tools::isEnable()){
return;
}
if(!Tools::isSaleDiscountEditPage()){
return;
}
if(!Tools::isValidRequestData()){
return;
}
static::updateAdditionalDiscountData($id);
}
public static function onBeforeUpdate($id, &$arFields)
{
if(!Tools::isEnable()){
return true;
}
$isSaleDiscountEditPage = Tools::isSaleDiscountEditPage();
if(!$isSaleDiscountEditPage){
return true;
}
if(!static::isValidData()){
global $APPLICATION;
$APPLICATION->ThrowException(static::$lang['EMPTY_PRODUCT_TYPE'], $id);
return false;
}
return true;
}
public static function onAfterUpdate($id, $arFields)
{
if(!Tools::isEnable()){
return true;
}
if(!Tools::isSaleDiscountEditPage()){
return true;
}
if(!Tools::isValidRequestData()){
return true;
}
static::updateAdditionalDiscountData($id);
return true;
}
public static function onBeforeDelete($id)
{
if(!Tools::isEnable()){
return;
}
}
public static function onAfterDelete($id)
{
if(!Tools::isEnable()){
return;
}
}
}
+160
View File
@@ -0,0 +1,160 @@
<?php
namespace Bx\Discount\Handlers;
use Bitrix\Main\Entity\Event;
use Bx\Discount\Tools;
class SaleDiscount extends ADiscount
{
public static function onBeforeAdd(Event $event)
{
if(!Tools::isEnable()){
return;
}
$id = $event->getParameter("id");
if(is_array($id))
$id = $id["ID"];
$entity = $event->getEntity();
$entityDataClass = $entity->GetDataClass();
$eventType = $event->getEventType();
$arParameters = $event->getParameters();
$result = new \Bitrix\Main\Entity\EventResult();
if(!static::isValidData()){
$result->addError(
new \Bitrix\Main\Entity\EntityError(static::$lang['EMPTY_PRODUCT_TYPE'])
);
return $result;
}
}
public static function onAfterAdd(Event $event)
{
if(!Tools::isEnable()){
return;
}
$id = $event->getParameter('id');
if(is_array($id))
$id = $id['ID'];
$entity = $event->getEntity();
$entityDataClass = $entity->GetDataClass();
$eventType = $event->getEventType();
$arParameters = $event->getParameters();
if(!Tools::isSaleDiscountEditPage()){
return;
}
if(!Tools::isValidRequestData()){
return;
}
static::addAdditionalDiscountData($id);
}
public static function onBeforeUpdate(Event $event)
{
if(!Tools::isEnable()){
return;
}
$id = $event->getParameter('id');
if(is_array($id))
$id = $id['ID'];
$entity = $event->getEntity();
$entityDataClass = $entity->GetDataClass();
$eventType = $event->getEventType();
$arParameters = $event->getParameters();
$arFields = $event->getParameter('fields');
$isSaleDiscountEditPage = Tools::isSaleDiscountEditPage();
if(!$isSaleDiscountEditPage){
return;
}
//dd($id);
//$event->setParameter("fields",$arFields);
$result = new \Bitrix\Main\Entity\EventResult();
if(!static::isValidData()){
$result->addError(
new \Bitrix\Main\Entity\EntityError(static::$lang['EMPTY_PRODUCT_TYPE'])
);
return $result;
}
}
public static function onAfterUpdate(Event $event)
{
if(!Tools::isEnable()){
return;
}
$id = $event->getParameter('id');
if(is_array($id))
$id = $id['ID'];
$entity = $event->getEntity();
$entityDataClass = $entity->GetDataClass();
$eventType = $event->getEventType();
$arParameters = $event->getParameters();
$arFields = $event->getParameter('fields');
if(!Tools::isSaleDiscountEditPage()){
return;
}
if(!Tools::isValidRequestData()){
return;
}
static::updateAdditionalDiscountData($id);
}
public static function onBeforeDelete(Event $event)
{
if(!Tools::isEnable()){
return;
}
$id = $event->getParameter('id');
if(is_array($id))
$id = $id['ID'];
$entity = $event->getEntity();
$entityDataClass = $entity->GetDataClass();
$eventType = $event->getEventType();
$arParameters = $event->getParameters();
}
public static function onAfterDelete(Event $event)
{
if(!Tools::isEnable()){
return;
}
$id = $event->getParameter('id');
if(is_array($id))
$id = $id['ID'];
$entity = $event->getEntity();
$entityDataClass = $entity->GetDataClass();
$eventType = $event->getEventType();
$arParameters = $event->getParameters();
}
}
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace Bx\Discount\Handlers;
use Bitrix\Main\Page\Asset;
use Bitrix\Main\Page\AssetLocation;
use Bx\Discount\Tools;
use Wt\Core\Templater\Shell;
class SaleDiscountEditPage
{
public static function onPageStartHandler()
{
if(!Tools::isEnable()){
return;
}
$isSaleDiscountEditPage = Tools::isSaleDiscountEditPage();
if(!$isSaleDiscountEditPage){
return;
}
$discountID = 0;
$copy = false;
if (isset($_REQUEST['ID']))
{
$discountID = (int)$_REQUEST['ID'];
if ($discountID < 0)
$discountID = 0;
}
if ($discountID > 0)
{
$copy = (isset($_REQUEST['action']) && (string)$_REQUEST['action'] == 'copy');
}
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace Bx\Discount\Handlers;
class SpiderHandler
{
public static function saleDiscountOnAfterAdd()
{
static::resetSpider();
}
public static function saleDiscountOnAfterUpdate()
{
static::resetSpider();
}
public static function saleDiscountOnAfterDelete()
{
static::resetSpider();
}
public static function resetSpider()
{
discountApp()->service()->spider()->reset();
}
}