private static function getInstance() { if (self::$instance) { return self::$instance; } $loader = new BitrixLoader($_SERVER['DOCUMENT_ROOT']); $c = Configuration::getInstance(); $config = $c->get('maximaster'); $twigConfig = (array) $config['tools']['twig']; $defaultConfig = array('debug' => false, 'charset' => SITE_CHARSET, 'cache' => $_SERVER['DOCUMENT_ROOT'] . '/bitrix/cache/maximaster/tools.twig', 'auto_reload' => isset($_GET['clear_cache']) && strtoupper($_GET['clear_cache']) == 'Y', 'autoescape' => false); $twigOptions = array_merge($defaultConfig, $twigConfig); $twig = new \Twig_Environment($loader, $twigOptions); if ($twig->isDebug()) { $twig->addExtension(new \Twig_Extension_Debug()); } $twig->addExtension(new BitrixExtension()); $twig->addExtension(new CustomFunctionsExtension()); $event = new Event('', 'onAfterTwigTemplateEngineInited', array($twig)); $event->send(); if ($event->getResults()) { foreach ($event->getResults() as $evenResult) { if ($evenResult->getType() == \Bitrix\Main\EventResult::SUCCESS) { $twig = current($evenResult->getParameters()); } } } return self::$instance = $twig; }
function onExecuteStartWriting(\Bitrix\Main\Event $event) { $parameters = $event->getParameters(); $userId = $parameters[0]; $dialogId = $parameters[1] . $parameters[2]; if ($userId > 0) { if (!\Bitrix\Main\Loader::includeModule('pull')) { return; } \CPushManager::DeleteFromQueueBySubTag($userId, 'IM_MESS'); if (intval($dialogId) > 0) { \CPullStack::AddByUser($dialogId, array('module_id' => 'im', 'command' => 'startWriting', 'expiry' => 60, 'params' => array('senderId' => $userId, 'dialogId' => $dialogId))); } elseif (substr($dialogId, 0, 4) == 'chat') { $chatId = substr($dialogId, 4); $arRelation = \CIMChat::GetRelationById($chatId); unset($arRelation[$userId]); $pullMessage = array('module_id' => 'im', 'command' => 'startWriting', 'expiry' => 60, 'params' => array('senderId' => $userId, 'dialogId' => $dialogId)); \CPullStack::AddByUsers(array_keys($arRelation), $pullMessage); $orm = \Bitrix\Im\ChatTable::getById($chatId); $chat = $orm->fetch(); if ($chat['TYPE'] == IM_MESSAGE_OPEN) { \CPullWatch::AddToStack('IM_PUBLIC_' . $chatId, $pullMessage); } } } }
public static function initClassesList() { if (static::$classes !== null) { return true; } $classes = array('\\Bitrix\\Sale\\Delivery\\ExtraServices\\Enum' => 'lib/delivery/extra_services/enum.php', '\\Bitrix\\Sale\\Delivery\\ExtraServices\\Store' => 'lib/delivery/extra_services/store.php', '\\Bitrix\\Sale\\Delivery\\ExtraServices\\String' => 'lib/delivery/extra_services/string.php', '\\Bitrix\\Sale\\Delivery\\ExtraServices\\Checkbox' => 'lib/delivery/extra_services/checkbox.php'); \Bitrix\Main\Loader::registerAutoLoadClasses('sale', $classes); unset($classes['\\Bitrix\\Sale\\Delivery\\ExtraServices\\Store']); static::$classes = array_keys($classes); $event = new Event('sale', 'onSaleDeliveryExtraServicesClassNamesBuildList'); $event->send(); $resultList = $event->getResults(); if (is_array($resultList) && !empty($resultList)) { $customClasses = array(); foreach ($resultList as $eventResult) { /** @var EventResult $eventResult*/ if ($eventResult->getType() != EventResult::SUCCESS) { throw new SystemException("Can't add custom tracking class successfully"); } $params = $eventResult->getParameters(); if (!empty($params) && is_array($params)) { $customClasses = array_merge($customClasses, $params); } } if (!empty($customClasses)) { \Bitrix\Main\Loader::registerAutoLoadClasses(null, $customClasses); $classes = array_merge($customClasses, $classes); } } static::$classes = array_merge(array_keys($classes), static::$classes); return static::$classes; }
public static function isSuccess(\Bitrix\Main\Event $event) { foreach ($event->getResults() as $result) { if ($result->getType() === EventResult::ERROR) { return false; } } return true; }
public function clearCollection() { /** @var Main\Entity\Event $event */ $event = new Main\Event('sale', 'OnBeforeCollectionClear', array('COLLECTION' => $this->collection)); $event->send(); /** @var CollectableEntity $item */ foreach ($this->collection as $item) { $item->delete(); } }
/** * Defines if page file should be overridden * * @param \Bitrix\Main\Event $event Event. * @return string|null */ public static function onFileRewrite(\Bitrix\Main\Event $event) { $path = $event->getParameter('path'); $result = null; if ($context = Helper::getContext()) { if ($context['section'] == 'B') { $result = Helper::getAlternative('page', $path); } } return $result; }
/** * @param \Bitrix\Main\Event $event * @return mixed */ public static function handleEvent(Event $event) { $eventData = $event->getParameters(); $eventData = $eventData[0]; $eventName = $eventData['EVENT_NAME']; $fields = is_array($eventData['C_FIELDS']) ? $eventData['C_FIELDS'] : array(); if (static::isPreventable($eventName, $fields)) { // error $result = new EventResult(EventResult::ERROR); } else { // success $result = new EventResult(EventResult::SUCCESS); } return $result; }
/** * @return array */ public static function getList() { $resultList = array(); $event = new Event('sender', 'OnPresetMailBlockList'); $event->send(); foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == EventResult::ERROR) { continue; } $eventResultParameters = $eventResult->getParameters(); if (!empty($eventResultParameters)) { $resultList = array_merge($resultList, $eventResultParameters); } } return $resultList; }
public function testUseHandlerClassParams() { $eventType = EventType::createByParams("ws.tools", "test"); $this->manager()->subscribe($eventType, $handler = new TestHandler(array('init params'))); $this->manager()->trigger($eventType, array('process params')); $history = $handler->getHistory(); $this->assertEquals($history[0], array('identity', array('init params'), array('process params'))); $this->assertEquals($history[1], array('process', array('init params'), array('process params'))); $this->manager()->trigger($eventType, array('process2 params')); $history = $handler->getHistory(); $this->assertEquals($history[3], array('process', array('init params'), array('process2 params'))); $e = new Event("ws.tools", "test", array('process3 params')); $e->send($this); $history = $handler->getHistory(); $this->assertEquals($history[5], array('process', array('init params'), array('process3 params'))); }
/** * @param string $eventName * @param array $parameters */ public function __construct($eventName, array $parameters = array()) { if (FormEvents::BUILD != $eventName && FormEvents::PRE_STORAGE != $eventName && FormEvents::STORAGE != $eventName) { throw new \InvalidArgumentException('Invalid event name, see FormEvents'); } parent::__construct(self::MODULE_ID, $eventName, $parameters); }
/** * Добавляет расширения, в том числе расширение для битрикса, * в котором добавляются нужные глобальные переменные и т.п. */ private function addExtensions() { $this->getEnvironment()->addExtension(new \Twig_Extension_Debug()); $this->getEnvironment()->addExtension(new BitrixExtension()); $event = new Event('wlbl.twigrix', 'onAddExtensions'); $event->send(); foreach ($event->getResults() as $result) { if ($result->getType() == EventResult::SUCCESS) { foreach ($result->getParameters() as $extension) { if ($extension instanceof \Twig_Extension) { $this->getEnvironment()->addExtension($extension); } } } } }
protected function __construct() { $event = new Main\Event("main", "OnApplicationsBuildList"); $event->send(); foreach ($event->getResults() as $eventResult) { $result = $eventResult->getParameters(); if (is_array($result)) { if (!is_array($result[0])) { $result = array($result); } foreach ($result as $app) { $this->applications[$app["ID"]] = $app; } } } Main\Type\Collection::sortByColumn($this->applications, "SORT"); }
/** * Создается событие для внесения в Twig изменения из проекта */ private function generateInitEvent() { $eventName = 'onAfterTwigTemplateEngineInited'; $event = new Event('', $eventName, array($this->engine)); $event->send(); if ($event->getResults()) { foreach ($event->getResults() as $evenResult) { if ($evenResult->getType() == \Bitrix\Main\EventResult::SUCCESS) { $twig = current($evenResult->getParameters()); if (!$twig instanceof \Twig_Environment) { throw new \LogicException("Событие '{$eventName}' должно возвращать экземпляр класса '\\Twig_Environment' при успешной отработке"); } $this->engine = $twig; } } } }
public function onStartUserReplication(\Bitrix\Main\Event $event) { $parameters = $event->getParameters(); $userId = $parameters[0]; $domain = $parameters[2]; $domainId = getNameByDomain($domain); if (!$domainId) { return; } $mapper = \Bitrix\Replica\Mapper::getInstance(); $map = $mapper->getByPrimaryValue("b_user.ID", false, $userId); if (!$map) { return; } $guid = key($map); $event = array("operation" => "im_status_bind", "guid" => $guid); \Bitrix\Replica\Log\Client::getInstance()->write(array($domainId), $event); \Bitrix\Replica\Mapper::getInstance()->add("b_im_status.USER_ID", $userId, $domainId, $event["guid"]); }
function onExecuteStartWriting(\Bitrix\Main\Event $event) { $parameters = $event->getParameters(); $userId = $parameters[0]; $dialogId = $parameters[1] . $parameters[2]; if ($userId > 0) { if (!\Bitrix\Main\Loader::includeModule('pull')) { return; } \CPushManager::DeleteFromQueueBySubTag($userId, 'IM_MESS'); if (intval($dialogId) > 0) { \CPullStack::AddByUser($dialogId, array('module_id' => 'im', 'command' => 'startWriting', 'expiry' => 60, 'params' => array('senderId' => $userId, 'dialogId' => $dialogId))); } elseif (substr($dialogId, 0, 4) == 'chat') { $arRelation = \CIMChat::GetRelationById(substr($dialogId, 4)); foreach ($arRelation as $rel) { if ($rel['USER_ID'] == $userId) { continue; } \CPullStack::AddByUser($rel['USER_ID'], array('module_id' => 'im', 'command' => 'startWriting', 'expiry' => 60, 'params' => array('senderId' => $userId, 'dialogId' => $dialogId))); } } } }
/** * @return Entity\AddResult|Entity\UpdateResult * @throws ArgumentException * @throws ArgumentNullException * @throws \Exception */ public function save() { $id = $this->getId(); $changedFields = $this->fields->getChangedValues(); $isNew = $id <= 0; if (!empty($changedFields)) { /** @var array $oldEntityValues */ $oldEntityValues = $this->fields->getOriginalValues(); /** @var Event $event */ $event = new Event('sale', EventActions::EVENT_ON_BASKET_ITEM_BEFORE_SAVED, array('ENTITY' => $this, 'IS_NEW' => $isNew, 'VALUES' => $oldEntityValues)); $event->send(); if ($event->getResults()) { $result = new Result(); /** @var EventResult $eventResult */ foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == EventResult::ERROR) { $errorMsg = new ResultError(Loc::getMessage('SALE_EVENT_ON_BEFORE_BASKET_ITEM_SAVED'), 'SALE_EVENT_ON_BEFORE_BASKET_ITEM_SAVED'); if (isset($eventResultData['ERROR']) && $eventResultData['ERROR'] instanceof ResultError) { $errorMsg = $eventResultData['ERROR']; } $result->addError($errorMsg); } } if (!$result->isSuccess()) { return $result; } } } $fields = $this->fields->getValues(); if ($this->isBundleParent()) { $bundleBasketCollection = $this->getBundleCollection(); } if ($id > 0) { $fields = $changedFields; if (!isset($fields["ORDER_ID"]) || intval($fields["ORDER_ID"]) == 0) { $orderId = null; if ($this->getParentOrderId() > 0) { $orderId = $this->getParentOrderId(); } if ($this->isBundleChild() && $orderId === null) { /** @var BasketItem $parentBasket */ if (!($parentBasket = $this->getParentBasketItem())) { throw new ObjectNotFoundException('Entity parent "BasketItem" not found'); } $orderId = $parentBasket->getParentOrderId(); } if (intval($orderId) > 0 && $this->getField('ORDER_ID') != $orderId) { $fields['ORDER_ID'] = $orderId; } } if (!empty($fields) && is_array($fields)) { if (isset($fields["QUANTITY"]) && floatval($fields["QUANTITY"]) == 0) { return new Entity\UpdateResult(); } $fields['DATE_UPDATE'] = new DateTime(); $this->setFieldNoDemand('DATE_UPDATE', $fields['DATE_UPDATE']); $r = Internals\BasketTable::update($id, $fields); if (!$r->isSuccess()) { return $r; } } $result = new Entity\UpdateResult(); } else { $fields['ORDER_ID'] = $this->getParentOrderId(); $fields['DATE_INSERT'] = new DateTime(); $fields['DATE_UPDATE'] = new DateTime(); $this->setFieldNoDemand('DATE_INSERT', $fields['DATE_INSERT']); $this->setFieldNoDemand('DATE_UPDATE', $fields['DATE_UPDATE']); if (!$this->isBundleChild() && (!isset($fields["FUSER_ID"]) || intval($fields["FUSER_ID"]) <= 0)) { /** @var Basket $basket */ if (!($basket = $this->getCollection())) { throw new ObjectNotFoundException('Entity "Basket" not found'); } $fields["FUSER_ID"] = intval($basket->getFUserId()); } /** @var Basket $basket */ if (!($basket = $this->getCollection())) { throw new ObjectNotFoundException('Entity "Basket" not found'); } /** @var Order $order */ if ($order = $basket->getOrder()) { if (!isset($fields["LID"]) || strval($fields["LID"]) == '') { $fields['LID'] = $order->getField('LID'); } } else { if ($siteId = $basket->getSiteId()) { $fields['LID'] = $siteId; } } if ($this->isBundleChild()) { if (!($parentBasketItem = $this->getParentBasketItem())) { throw new ObjectNotFoundException('Entity parent "BasketItem" not found'); } $fields['LID'] = $parentBasketItem->getField('LID'); if (!isset($fields["FUSER_ID"]) || intval($fields["FUSER_ID"]) <= 0) { $fields['FUSER_ID'] = intval($parentBasketItem->getField('FUSER_ID')); } } if (!isset($fields["LID"]) || strval(trim($fields["LID"])) == '') { throw new ArgumentNullException('lid'); } if ($this->isBundleChild() && (!isset($fields["SET_PARENT_ID"]) || intval($fields["QUANTITY"]) <= 0)) { $fields["SET_PARENT_ID"] = $this->getParentBasketItemId(); $this->setFieldNoDemand('SET_PARENT_ID', $fields['SET_PARENT_ID']); } if (!isset($fields["QUANTITY"]) || floatval($fields["QUANTITY"]) == 0) { return new Entity\AddResult(); } if (!isset($fields["CURRENCY"]) || strval(trim($fields["CURRENCY"])) == '') { throw new ArgumentNullException('currency'); } $r = Internals\BasketTable::add($fields); if (!$r->isSuccess()) { return $r; } $id = $r->getId(); $this->setFieldNoDemand('ID', $id); $this->setFieldNoDemand('LID', $fields['LID']); $this->setFieldNoDemand('FUSER_ID', $fields['FUSER_ID']); if ($basket->getOrder() && $basket->getOrderId() > 0) { OrderHistory::addAction('BASKET', $order->getId(), 'BASKET_ADDED', $id, $this); } $result = new Entity\AddResult(); } if ($isNew || !empty($changedFields)) { /** @var array $oldEntityValues */ $oldEntityValues = $this->fields->getOriginalValues(); /** @var Event $event */ $event = new Event('sale', EventActions::EVENT_ON_BASKET_ITEM_SAVED, array('ENTITY' => $this, 'IS_NEW' => $isNew, 'VALUES' => $oldEntityValues)); $event->send(); if ($event->getResults()) { $result = new Result(); /** @var EventResult $eventResult */ foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == EventResult::ERROR) { $errorMsg = new ResultError(Loc::getMessage('SALE_EVENT_ON_BEFORE_BASKET_ITEM_SAVED'), 'SALE_EVENT_ON_BEFORE_BASKET_ITEM_SAVED'); if (isset($eventResultData['ERROR']) && $eventResultData['ERROR'] instanceof ResultError) { $errorMsg = $eventResultData['ERROR']; } $result->addError($errorMsg); } } if (!$result->isSuccess()) { return $result; } } } if ($eventName = static::getEntityEventName()) { /** @var array $oldEntityValues */ $oldEntityValues = $this->fields->getOriginalValues(); if (!empty($oldEntityValues)) { /** @var Event $event */ $event = new Event('sale', 'On' . $eventName . 'EntitySaved', array('ENTITY' => $this, 'VALUES' => $oldEntityValues)); $event->send(); } } $this->fields->clearChanged(); // bundle if ($this->isBundleParent()) { if (!empty($bundleBasketCollection)) { if (!($order = $bundleBasketCollection->getOrder())) { /** @var Basket $basketCollection */ $basketCollection = $this->getCollection(); if ($order = $basketCollection->getOrder()) { $bundleBasketCollection->setOrder($order); } } $itemsFromDb = array(); if (!$isNew) { $itemsFromDbList = Internals\BasketTable::getList(array("filter" => array("SET_PARENT_ID" => $id), "select" => array("ID"))); while ($itemsFromDbItem = $itemsFromDbList->fetch()) { if ($itemsFromDbItem["ID"] == $id) { continue; } $itemsFromDb[$itemsFromDbItem["ID"]] = true; } } /** @var BasketItem $bundleBasketItem */ foreach ($bundleBasketCollection as $bundleBasketItem) { $r = $bundleBasketItem->save(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } if (isset($itemsFromDb[$bundleBasketItem->getId()])) { unset($itemsFromDb[$bundleBasketItem->getId()]); } } foreach ($itemsFromDb as $k => $v) { Internals\BasketTable::delete($k); } } } /** @var BasketPropertiesCollection $basketPropertyCollection */ $basketPropertyCollection = $this->getPropertyCollection(); $r = $basketPropertyCollection->save(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } return $result; }
$bCanEdit = false; } //need fm_lpa for every .php file, even with no php code inside if ($bCanEdit && !$USER->CanDoOperation('edit_php') && in_array(GetFileExtension($currentFilePath), GetScriptFileExt()) && !$USER->CanDoFileOperation('fm_lpa', array(SITE_ID, $currentFilePath))) { $bCanEdit = false; } if ($bCanEdit && IsModuleInstalled("fileman") && !($USER->CanDoOperation("fileman_admin_files") && $USER->CanDoOperation("fileman_edit_existent_files"))) { $bCanEdit = false; } if ($bCanEdit) { echo $APPLICATION->IncludeStringBefore(); $BX_GLOBAL_AREA_EDIT_ICON = true; } } } define("START_EXEC_PROLOG_AFTER_2", microtime()); $GLOBALS["BX_STATE"] = "WA"; $APPLICATION->RestartWorkarea(true); //magically replacing the current file with another one $event = new Main\Event("main", "OnFileRewrite", array("path" => Main\Context::getCurrent()->getRequest()->getScriptFile())); $event->send(); foreach ($event->getResults() as $evenResult) { if (($result = $evenResult->getParameters()) != '') { $file = new Main\IO\File($_SERVER["DOCUMENT_ROOT"] . $result); if ($file->isExists()) { //only the first result matters include $file->getPhysicalPath(); die; } } }
public function moderate($show) { if ($this->message === null) { $this->errorCollection->addOne(new Error(Loc::getMessage("FORUM_CM_ERR_COMMENT_IS_LOST3"), self::ERROR_MESSAGE_IS_NULL)); } else { $fields = array("APPROVED" => $show ? "Y" : "N"); if ($this->message["ID"] == $fields["APPROVED"] || ($mid = \CForumMessage::Update($this->message["ID"], $fields)) > 0) { $this->setComment($this->message["ID"]); /***************** Events ******************************************/ /***************** Event onMessageModerate *************************/ $event = new Event("forum", "onMessageModerate", array($this->message["ID"], $show ? "SHOW" : "HIDE", $this->message, $this->topic)); $event->send(); /***************** Events OnAfterCommentUpdate *********************/ $fields = array($this->entity->getType(), $this->entity->getId(), array("TOPIC_ID" => $this->topic["ID"], "MESSAGE_ID" => $this->message["ID"], "MESSAGE" => $this->getComment(), "ACTION" => $show ? "SHOW" : "HIDE", "PARAMS" => $fields)); $event = new Event("forum", "OnAfterCommentUpdate", $fields); $event->send(); /***************** Events OnCommentModerate ************************/ $event = new Event("forum", "OnCommentModerate", $fields); $event->send(); /***************** /Events *****************************************/ $res = serialize(array("ID" => $this->message["ID"], "AUTHOR_NAME" => $this->message["AUTHOR_NAME"], "POST_MESSAGE" => $this->message["POST_MESSAGE"], "TITLE" => $this->topic["TITLE"], "TOPIC_ID" => $this->topic["ID"], "FORUM_ID" => $this->topic["FORUM_ID"])); \CForumMessage::SendMailMessage($this->message["ID"], array(), false, $show ? "NEW_FORUM_MESSAGE" : "EDIT_FORUM_MESSAGE"); \CForumEventLog::Log("message", $show ? "approve" : "unapprove", $this->message["ID"], $res); return $this->getComment(); } else { $text = Loc::getMessage("FORUM_CM_ERR_MODERATE"); if (($ex = $this->getApplication()->getException()) && $ex) { $text = $ex->getString(); } $this->errorCollection->addOne(new Error($text, self::ERROR_PARAMS_MESSAGE)); } } return false; }
/** * @return Entity\AddResult|Entity\UpdateResult * @throws Main\ArgumentOutOfRangeException * @throws Main\ObjectNotFoundException * @throws \Exception */ public function save() { $id = $this->getId(); $fields = $this->fields->getValues(); if ($id > 0) { $fields = $this->fields->getChangedValues(); if (!empty($fields) && is_array($fields)) { // $fields['DATE_UPDATE'] = new Main\Type\DateTime(); $r = Internals\ShipmentTable::update($id, $fields); if (!$r->isSuccess()) { return $r; } } $result = new Entity\UpdateResult(); if (!empty($fields['TRACKING_NUMBER'])) { $oldEntityValues = $this->fields->getOriginalValues(); /** @var Main\Event $event */ $event = new Main\Event('sale', EventActions::EVENT_ON_SHIPMENT_TRACKING_NUMBER_CHANGE, array('ENTITY' => $this, 'VALUES' => $oldEntityValues)); $event->send(); } } else { $fields['ORDER_ID'] = $this->getParentOrderId(); $fields['DATE_INSERT'] = new Main\Type\DateTime(); $fields['SYSTEM'] = $fields['SYSTEM'] ? 'Y' : 'N'; $r = Internals\ShipmentTable::add($fields); if (!$r->isSuccess()) { return $r; } $id = $r->getId(); $this->setFieldNoDemand('ID', $id); $result = new Entity\AddResult(); /** @var ShipmentItemCollection $shipmentItemCollection */ if (!($shipmentItemCollection = $this->getShipmentItemCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found'); } /** @var Shipment $shipment */ if (!($shipment = $shipmentItemCollection->getShipment())) { throw new Main\ObjectNotFoundException('Entity "Shipment" not found'); } /** @var ShipmentCollection $shipmentCollection */ if (!($shipmentCollection = $shipment->getCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found'); } /** @var Order $order */ if (!($order = $shipmentCollection->getOrder())) { throw new Main\ObjectNotFoundException('Entity "Order" not found'); } if ($order->getId() > 0 && !$this->isSystem()) { OrderHistory::addAction('SHIPMENT', $order->getId(), 'SHIPMENT_ADDED', $id, $this); } } if ($result->isSuccess() && !$this->isSystem()) { $this->saveExtraServices(); $this->saveStoreId(); } /** @var ShipmentItemCollection $shipmentItemCollection */ if (!($shipmentItemCollection = $this->getShipmentItemCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentItemCollection" not found'); } $r = $shipmentItemCollection->save(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } if ($result->isSuccess()) { /** @var Shipment $shipment */ if (!($shipment = $shipmentItemCollection->getShipment())) { throw new Main\ObjectNotFoundException('Entity "Shipment" not found'); } /** @var ShipmentCollection $shipmentCollection */ if (!($shipmentCollection = $shipment->getCollection())) { throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found'); } /** @var Order $order */ if (!($order = $shipmentCollection->getOrder())) { throw new Main\ObjectNotFoundException('Entity "Order" not found'); } if (!$this->isSystem()) { OrderHistory::collectEntityFields('SHIPMENT', $order->getId(), $id); } } return $result; }
/** * @param $id * @param int $timeout * @param int $maxMailCount * @return bool|string * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\DB\Exception * @throws \Bitrix\Main\Db\SqlQueryException * @throws \Exception */ public static function send($id, $timeout = 0, $maxMailCount = 0) { $start_time = getmicrotime(); @set_time_limit(0); static::$emailSentPerIteration = 0; $postingDb = PostingTable::getList(array('select' => array('ID', 'STATUS', 'MAILING_ID', 'MAILING_CHAIN_ID', 'MAILING_CHAIN_REITERATE' => 'MAILING_CHAIN.REITERATE', 'MAILING_CHAIN_IS_TRIGGER' => 'MAILING_CHAIN.IS_TRIGGER'), 'filter' => array('ID' => $id, 'MAILING.ACTIVE' => 'Y', 'MAILING_CHAIN.STATUS' => MailingChainTable::STATUS_SEND))); $postingData = $postingDb->fetch(); // posting not found if (!$postingData) { return static::SEND_RESULT_ERROR; } // if posting in new status, then import recipients from groups and set right status for sending $isInitGroupRecipients = false; $isChangeStatusToPart = false; if ($postingData["STATUS"] == PostingTable::STATUS_NEW) { $isInitGroupRecipients = true; $isChangeStatusToPart = true; } if ($postingData["STATUS"] != PostingTable::STATUS_PART && $postingData["MAILING_CHAIN_IS_TRIGGER"] == 'Y') { $isInitGroupRecipients = false; $isChangeStatusToPart = true; } if ($isInitGroupRecipients) { PostingTable::initGroupRecipients($postingData['ID']); } if ($isChangeStatusToPart) { PostingTable::update(array('ID' => $postingData['ID']), array('STATUS' => PostingTable::STATUS_PART)); $postingData["STATUS"] = PostingTable::STATUS_PART; } // posting not in right status if ($postingData["STATUS"] != PostingTable::STATUS_PART) { return static::SEND_RESULT_ERROR; } // lock posting for exclude double parallel sending if (static::lockPosting($id) === false) { throw new \Bitrix\Main\DB\Exception(Loc::getMessage('SENDER_POSTING_MANAGER_ERR_LOCK')); } // select all recipients of posting, only not processed $recipientDataDb = PostingRecipientTable::getList(array('filter' => array('POSTING_ID' => $postingData['ID'], 'STATUS' => PostingRecipientTable::SEND_RESULT_NONE), 'limit' => $maxMailCount)); while ($recipientData = $recipientDataDb->fetch()) { // create name from email $recipientEmail = $recipientData["EMAIL"]; if (empty($recipientData["NAME"])) { $recipientEmailParts = explode('@', $recipientEmail); $recipientName = $recipientEmailParts[0]; } else { $recipientName = $recipientData["NAME"]; } // prepare params for send $sendParams = array('FIELDS' => array('EMAIL_TO' => $recipientEmail, 'NAME' => $recipientName, 'USER_ID' => $recipientData["USER_ID"], 'SENDER_CHAIN_CODE' => 'sender_chain_item_' . $postingData["MAILING_CHAIN_ID"], 'UNSUBSCRIBE_LINK' => Subscription::getLinkUnsub(array('MAILING_ID' => $postingData['MAILING_ID'], 'EMAIL' => $recipientEmail, 'RECIPIENT_ID' => $recipientData["ID"]))), 'TRACK_READ' => array('MODULE_ID' => "sender", 'FIELDS' => array('RECIPIENT_ID' => $recipientData["ID"])), 'TRACK_CLICK' => array('MODULE_ID' => "sender", 'FIELDS' => array('RECIPIENT_ID' => $recipientData["ID"]), 'URL_PARAMS' => array('bx_sender_conversion_id' => $recipientData["ID"]))); if (is_array($recipientData['FIELDS']) && count($recipientData) > 0) { $sendParams['FIELDS'] = $sendParams['FIELDS'] + $recipientData['FIELDS']; } // set sending result to recipient $mailSendResult = static::sendInternal($postingData['MAILING_CHAIN_ID'], $sendParams); PostingRecipientTable::update(array('ID' => $recipientData["ID"]), array('STATUS' => $mailSendResult, 'DATE_SENT' => new Type\DateTime())); // send event $eventData = array('SEND_RESULT' => $mailSendResult == PostingRecipientTable::SEND_RESULT_SUCCESS, 'RECIPIENT' => $recipientData, 'POSTING' => $postingData); $event = new Event('sender', 'OnAfterPostingSendRecipient', array($eventData)); $event->send(); // limit executing script by time if ($timeout > 0 && getmicrotime() - $start_time >= $timeout) { break; } // increment sending statistic static::$emailSentPerIteration++; } //set status and delivered and error emails $statusList = PostingTable::getRecipientCountByStatus($id); if (!array_key_exists(PostingRecipientTable::SEND_RESULT_NONE, $statusList)) { if (array_key_exists(PostingRecipientTable::SEND_RESULT_ERROR, $statusList)) { $STATUS = PostingTable::STATUS_SENT_WITH_ERRORS; } else { $STATUS = PostingTable::STATUS_SENT; } $DATE = new Type\DateTime(); } else { $STATUS = PostingTable::STATUS_PART; $DATE = null; } // unlock posting for exclude double parallel sending static::unlockPosting($id); // update status of posting PostingTable::update(array('ID' => $id), array('STATUS' => $STATUS, 'DATE_SENT' => $DATE)); // return status to continue or end of sending if ($STATUS == PostingTable::STATUS_PART) { return static::SEND_RESULT_CONTINUE; } else { return static::SEND_RESULT_SENT; } }
/** * Add new user to b_user table. * Returns its identifier or false on failure. * * @param array $params * * @return integer|false */ public function addUser($params) { if (!$this->isEnabled()) { $this->errorCollection[] = new Error(Loc::getMessage('B24NET_NETWORK_IN_NOT_ENABLED'), self::ERROR_NETWORK_IN_NOT_ENABLED); return false; } $password = md5($params['XML_ID'] . '|' . $params['CLIENT_DOMAIN'] . '|' . rand(1000, 9999) . '|' . time() . '|' . uniqid()); $photo = \CFile::MakeFileArray($params['PERSONAL_PHOTO_ORIGINAL']); $groups = array(); if (Loader::includeModule('extranet')) { $groups[] = \CExtranet::GetExtranetUserGroupID(); } $addParams = array('LOGIN' => $params['NETWORK_USER_ID'] . '@' . $params['CLIENT_DOMAIN'], 'NAME' => $params['NAME'], 'EMAIL' => $params['EMAIL'], 'LAST_NAME' => $params['LAST_NAME'], 'SECOND_NAME' => $params['SECOND_NAME'], 'PERSONAL_GENDER' => $params['PERSONAL_GENDER'], 'PERSONAL_PHOTO' => $photo, 'WORK_POSITION' => $params['CLIENT_DOMAIN'], 'XML_ID' => $params['XML_ID'], 'EXTERNAL_AUTH_ID' => self::EXTERNAL_AUTH_ID, "ACTIVE" => "Y", "PASSWORD" => $password, "CONFIRM_PASSWORD" => $password, "GROUP_ID" => $groups); if (isset($params['EMAIL'])) { $addParams['EMAIL'] = $params['EMAIL']; } $user = new \CUser(); $userId = $user->Add($addParams); if (intval($userId) <= 0) { $this->errorCollection[] = new Error($user->LAST_ERROR, self::ERROR_REGISTER_USER); return false; } $event = new Event("socialservices", "OnAfterRegisterUserByNetwork", array($userId, $params['NETWORK_USER_ID'], $params['CLIENT_DOMAIN'])); $event->send(); return $userId; }
/** * @param bool $hasMeaningfulField * @return Result * @throws Main\ArgumentNullException * @throws Main\ObjectNotFoundException */ public function doFinalAction($hasMeaningfulField = false) { $result = new Result(); if (!$hasMeaningfulField) { $this->clearStartField(); return $result; } if ($basket = $this->getBasket()) { $this->setMathActionOnly(true); if ($eventName = static::getEntityEventName()) { $event = new Main\Event('sale', 'OnBefore' . $eventName . 'FinalAction', array('ENTITY' => $this, 'HAS_MEANINGFUL_FIELD' => $hasMeaningfulField, 'BASKET' => $basket)); $event->send(); if ($event->getResults()) { /** @var Main\EventResult $eventResult */ foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == Main\EventResult::ERROR) { $errorMsg = new ResultError(Main\Localization\Loc::getMessage('SALE_EVENT_ON_BEFORE_' . strtoupper($eventName) . '_FINAL_ACTION_ERROR'), 'SALE_EVENT_ON_BEFORE_' . strtoupper($eventName) . '_FINAL_ACTION_ERROR'); if ($eventResultData = $eventResult->getParameters()) { if (isset($eventResultData['ERROR']) && $eventResultData['ERROR'] instanceof ResultError) { $errorMsg = $eventResultData['ERROR']; } } $result->addError($errorMsg); } } } if (!$result->isSuccess()) { return $result; } } // discount $discount = $this->getDiscount(); $r = $discount->calculate(); if (!$r->isSuccess()) { // $this->clearStartField(); // $result->addErrors($r->getErrors()); // return $result; } if ($r->isSuccess() && ($discountData = $r->getData()) && !empty($discountData) && is_array($discountData)) { /** @var Result $r */ $r = $this->applyDiscount($discountData); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); return $result; } } if (!$this->isExternal()) { /** @var Tax $tax */ $tax = $this->getTax(); /** @var Result $r */ $r = $tax->calculate(); if (!$result->isSuccess()) { return $r; } $r = $tax->calculateDelivery(); if (!$result->isSuccess()) { return $r; } $taxChanged = false; $taxResult = $r->getData(); if (isset($taxResult['TAX_PRICE']) && floatval($taxResult['TAX_PRICE']) >= 0) { if (!$this->isUsedVat()) { $taxChanged = true; $this->setField('TAX_PRICE', $taxResult['TAX_PRICE']); $this->setFieldNoDemand("PRICE", $this->getBasket()->getPrice() + $this->getShipmentCollection()->getPriceDelivery() + $taxResult['TAX_PRICE']); } } if ($taxChanged || $this->isUsedVat()) { $taxValue = $this->isUsedVat() ? $this->getVatSum() : $this->getField('TAX_PRICE'); if (floatval($taxValue) != floatval($this->getField('TAX_VALUE'))) { $this->setField('TAX_VALUE', floatval($taxValue)); } } } } // $this->setMathActionOnly(false); // /** @var Result $r */ $r = $this->syncOrderAndPayments(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } $this->clearStartField(); if ($eventName = static::getEntityEventName()) { $event = new Main\Event('sale', 'OnAfter' . $eventName . 'FinalAction', array('ENTITY' => $this)); $event->send(); } return $result; }
/** * Return array of connectors information by endpoints array. * * @param array|null * @return array */ public static function getConnectorClassList(array $endpointList = null) { $resultList = array(); $moduleIdFilter = null; $moduleConnectorFilter = null; if ($endpointList) { $moduleIdFilter = array(); foreach ($endpointList as $endpoint) { $moduleIdFilter[] = $endpoint['MODULE_ID']; $moduleConnectorFilter[$endpoint['MODULE_ID']][] = $endpoint['CODE']; } } $data = array(); $event = new Event('sender', 'OnConnectorList', array($data), $moduleIdFilter); $event->send(); foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == EventResult::ERROR) { continue; } $eventResultParameters = $eventResult->getParameters(); if ($eventResultParameters && array_key_exists('CONNECTOR', $eventResultParameters)) { $connectorClassName = $eventResultParameters['CONNECTOR']; if (!is_subclass_of($connectorClassName, '\\Bitrix\\Sender\\Connector')) { continue; } $connectorCode = call_user_func(array($connectorClassName, 'getCode')); if ($moduleConnectorFilter && !in_array($connectorCode, $moduleConnectorFilter[$eventResult->getModuleId()])) { continue; } $connectorName = call_user_func(array($connectorClassName, 'getName')); $connectorRequireConfigure = call_user_func(array($connectorClassName, 'requireConfigure')); $resultList[] = array('MODULE_ID' => $eventResult->getModuleId(), 'CLASS_NAME' => $connectorClassName, 'CODE' => $connectorCode, 'NAME' => $connectorName, 'REQUIRE_CONFIGURE' => $connectorRequireConfigure); } } if (!empty($resultList)) { usort($resultList, array(__CLASS__, 'sort')); } return $resultList; }
/** * * @param array $values * @return Result * @throws Main\ArgumentOutOfRangeException * @throws Main\NotSupportedException * @throws \Exception */ public function setFields(array $values) { $resultData = array(); $result = new Result(); $oldValues = null; foreach ($values as $key => $value) { $oldValues[$key] = $this->fields->get($key); } if ($eventName = static::getEntityEventName()) { $event = new Main\Event('sale', 'OnBefore' . $eventName . 'SetFields', array('ENTITY' => $this, 'VALUES' => $values, 'OLD_VALUES' => $oldValues)); $event->send(); if ($event->getResults()) { /** @var Main\EventResult $eventResult */ foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == Main\EventResult::SUCCESS) { if ($eventResultData = $eventResult->getParameters()) { if (isset($eventResultData['VALUES'])) { $values = $eventResultData['VALUES']; } } } elseif ($eventResult->getType() == Main\EventResult::ERROR) { $errorMsg = new ResultError(Main\Localization\Loc::getMessage('SALE_EVENT_ON_BEFORE_' . strtoupper($eventName) . '_SET_FIELDS_ERROR'), 'SALE_EVENT_ON_BEFORE_' . strtoupper($eventName) . '_SET_FIELDS_ERROR'); if ($eventResultData = $eventResult->getParameters()) { if (isset($eventResultData['ERROR']) && $eventResultData['ERROR'] instanceof ResultError) { $errorMsg = $eventResultData['ERROR']; } } $result->addError($errorMsg); } } } } if (!$result->isSuccess()) { return $result; } $isStartField = $this->isStartField(); foreach ($values as $key => $value) { $r = $this->setField($key, $value); if (!$r->isSuccess()) { $data = $r->getData(); if (!empty($data) && is_array($data)) { $resultData = array_merge($resultData, $data); } $result->addErrors($r->getErrors()); } } if (!empty($resultData)) { $result->setData($resultData); } if ($isStartField) { $hasMeaningfulFields = $this->hasMeaningfulField(); /** @var Result $r */ $r = $this->doFinalAction($hasMeaningfulFields); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } else { if (($data = $r->getData()) && !empty($data) && is_array($data)) { $result->setData($result->getData() + $data); } } } return $result; }
/** * @return Entity\Result|bool * @throws \Bitrix\Main\ArgumentException * @throws \Bitrix\Main\ArgumentNullException */ public function save() { $result = new Result(); /** @var Order $order */ $order = $this->getOrder(); $itemsFromDb = array(); $filter = array(); if (!$order) { /** @var Main\Entity\Event $event */ $event = new Main\Event('sale', EventActions::EVENT_ON_BASKET_BEFORE_SAVED, array('ENTITY' => $this)); $event->send(); if ($event->getResults()) { $result = new Result(); /** @var Main\EventResult $eventResult */ foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == Main\EventResult::ERROR) { $errorMsg = new ResultError(Main\Localization\Loc::getMessage('SALE_EVENT_ON_BEFORE_BASKET_SAVED'), 'SALE_EVENT_ON_BEFORE_BASKET_SAVED'); if (isset($eventResultData['ERROR']) && $eventResultData['ERROR'] instanceof ResultError) { $errorMsg = $eventResultData['ERROR']; } $result->addError($errorMsg); } } if (!$result->isSuccess()) { return $result; } } } $isNew = $order && $order->isNew() ? true : false; if ($order && !$isNew) { $filter['ORDER_ID'] = $order->getId(); } else { if ($this->isLoadForFuserId()) { $filter = array('FUSER_ID' => $this->getFUserId(), 'ORDER_ID' => null, 'LID' => $this->getSiteId()); } if ($isNew) { $fUserId = $this->getFUserId(true); if ($fUserId <= 0) { $userId = $order->getUserId(); if (intval($userId) > 0) { $fUserId = Fuser::getIdByUserId($userId); if ($fUserId > 0) { $this->setFUserId($fUserId); } } } } } if (!empty($filter)) { $itemsFromDbList = Internals\BasketTable::getList(array("filter" => $filter, "select" => array("ID", 'TYPE', 'SET_PARENT_ID', 'PRODUCT_ID', 'NAME', 'QUANTITY'))); while ($itemsFromDbItem = $itemsFromDbList->fetch()) { if (intval($itemsFromDbItem['SET_PARENT_ID']) > 0 && intval($itemsFromDbItem['SET_PARENT_ID']) != $itemsFromDbItem['ID']) { continue; } $itemsFromDb[$itemsFromDbItem["ID"]] = $itemsFromDbItem; } } /** @var BasketItem $basketItem */ foreach ($this->collection as $index => $basketItem) { $r = $basketItem->save(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } if (isset($itemsFromDb[$basketItem->getId()]) && $basketItem->getQuantity() > 0) { unset($itemsFromDb[$basketItem->getId()]); } } if (!empty($filter)) { foreach ($itemsFromDb as $k => $v) { if ($v['TYPE'] == static::TYPE_SET) { Internals\BasketTable::deleteBundle($k); } else { Internals\BasketTable::deleteWithItems($k); } /** @var Order $order */ if ($order && $order->getId() > 0) { OrderHistory::addAction('BASKET', $order->getId(), 'BASKET_REMOVED', $k, null, array('NAME' => $v['NAME'], 'QUANTITY' => $v['QUANTITY'], 'PRODUCT_ID' => $v['PRODUCT_ID'])); } } } if ($order && $order->getId() > 0) { OrderHistory::collectEntityFields('BASKET', $order->getId()); } if (!$order) { /** @var Main\Entity\Event $event */ $event = new Main\Event('sale', EventActions::EVENT_ON_BASKET_SAVED, array('ENTITY' => $this)); $event->send(); if ($event->getResults()) { $result = new Result(); /** @var Main\EventResult $eventResult */ foreach ($event->getResults() as $eventResult) { if ($eventResult->getType() == Main\EventResult::ERROR) { $errorMsg = new ResultError(Main\Localization\Loc::getMessage('SALE_EVENT_ON_BASKET_SAVED'), 'SALE_EVENT_ON_BASKET_SAVED'); if (isset($eventResultData['ERROR']) && $eventResultData['ERROR'] instanceof ResultError) { $errorMsg = $eventResultData['ERROR']; } $result->addError($errorMsg); } } if (!$result->isSuccess()) { return $result; } } } return $result; }
/** * Extend basket data. * * @param Main\Event $event Event. * @return Main\EventResult */ public static function extendOrderData(Main\Event $event) { $process = true; $resultData = array(); $orderData = $event->getParameter('ORDER'); $entityList = $event->getParameter('ENTITY'); if (empty($orderData) || !is_array($orderData)) { $process = false; } else { if (!isset($orderData['BASKET_ITEMS']) || !is_array($orderData['BASKET_ITEMS'])) { $process = false; } } $entityData = false; $iblockData = false; if ($process && !empty($orderData['BASKET_ITEMS'])) { $entityData = self::prepareEntity($entityList); if (empty($entityData)) { $process = false; } } if ($process) { $productMap = array(); $productList = array(); $productData = array(); $basket = array_filter($orderData['BASKET_ITEMS'], '\\Bitrix\\Catalog\\Discount\\DiscountManager::basketFilter'); if (!empty($basket)) { foreach ($basket as $basketCode => $basketItem) { $basketItem['PRODUCT_ID'] = (int) $basketItem['PRODUCT_ID']; $productList[] = $basketItem['PRODUCT_ID']; if (!isset($productMap[$basketItem['PRODUCT_ID']])) { $productMap[$basketItem['PRODUCT_ID']] = array(); } $productMap[$basketItem['PRODUCT_ID']][] =& $basket[$basketCode]; } unset($basketItem, $basketCode); $productData = array_fill_keys($productList, array()); $iblockData = self::getProductIblocks($productList); self::fillProductPropertyList($entityData, $iblockData); } if (!empty($iblockData['iblockElement'])) { self::getProductData($productData, $entityData, $iblockData); } if (!empty($iblockData['iblockElement'])) { foreach ($productData as $product => $data) { if (empty($productMap[$product])) { continue; } foreach ($productMap[$product] as &$basketItem) { $basketItem['CATALOG'] = $data; } unset($basketItem); } unset($product, $data); $resultData['BASKET_ITEMS'] = $basket; } unset($basket, $productData, $productMap, $productList); } if ($process) { $result = new Main\EventResult(Main\EventResult::SUCCESS, $resultData, 'catalog'); } else { $result = new Main\EventResult(Main\EventResult::ERROR, null, 'catalog'); } unset($process, $resultData); return $result; }
/** * @param Main\Event $event * * @return Main\EventResult */ public static function onBasketItemChange(Main\Event $event) { $parameters = $event->getParameters(); /** @var Sale\BasketItem $basketItem */ $basketItem = $parameters[0]; if (!$basketItem instanceof Sale\BasketItem) { return new Main\EventResult(Main\EventResult::ERROR, new Sale\ResultError(Main\Localization\Loc::getMessage('SALE_EVENT_COMPATIBILITY_BASKET_ITEM_CHANGE_WRONG_BASKET'), 'SALE_EVENT_COMPATIBILITY_BASKET_ITEM_CHANGE_WRONG_BASKET'), 'sale'); } $currentBasketFields = $basketFields = BasketCompatibility::convertBasketItemToArray($basketItem); if ($basketItem->getId() == 0) { foreach (GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BEFORE_BASKET_ITEM_ADD, true) as $oldEvent) { if (ExecuteModuleEventEx($oldEvent, array(&$basketFields)) === false) { continue; } } } else { foreach (GetModuleEvents("sale", static::EVENT_COMPATIBILITY_ON_BEFORE_BASKET_ITEM_UPDATE, true) as $oldEvent) { if (ExecuteModuleEventEx($oldEvent, array($basketItem->getId(), &$basketFields)) === false) { continue; } } } foreach ($currentBasketFields as $key => $value) { if (isset($basketFields[$key]) && $basketFields[$key] != $value) { $basketItem->setFieldNoDemand($key, $basketFields[$key]); } } return new Main\EventResult(Main\EventResult::SUCCESS, null, 'sale'); }
/** * Create coupon code. * * @param bool $check Check new coupon or no. * @return string */ public static function generateCoupon($check = false) { static $eventExists = null; $check = $check === true; if ($eventExists === true || $eventExists === null) { $event = new Main\Event('sale', self::EVENT_ON_GENERATE_COUPON, array('CHECK' => $check)); $event->send(); $resultList = $event->getResults(); if (!empty($resultList) && is_array($resultList)) { /** @var Main\EventResult $eventResult */ foreach ($resultList as &$eventResult) { if ($eventResult->getType() != Main\EventResult::SUCCESS) { continue; } $eventExists = true; $result = $eventResult->getParameters(); if (!empty($result) && is_string($result)) { return $result; } } unset($eventResult); } if ($eventExists === null) { $eventExists = false; } } $allchars = 'ABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789'; $charsLen = strlen($allchars) - 1; do { $resultCorrect = true; $partOne = ''; $partTwo = ''; for ($i = 0; $i < 5; $i++) { $partOne .= substr($allchars, rand(0, $charsLen), 1); } for ($i = 0; $i < 7; $i++) { $partTwo .= substr($allchars, rand(0, $charsLen), 1); } $result = 'SL-' . $partOne . '-' . $partTwo; if ($check) { $existCoupon = Sale\DiscountCouponsManager::isExist($result); $resultCorrect = empty($existCoupon); } } while (!$resultCorrect); return $result; }
private function sendToEventHandler(array $handler, Event $event) { try { $result = true; $event->addDebugInfo($handler); if (isset($handler["TO_MODULE_ID"]) && !empty($handler["TO_MODULE_ID"]) && $handler["TO_MODULE_ID"] != 'main') { $result = Loader::includeModule($handler["TO_MODULE_ID"]); } elseif (isset($handler["TO_PATH"]) && !empty($handler["TO_PATH"])) { $path = ltrim($handler["TO_PATH"], "/"); if (($path = Loader::getLocal($path)) !== false) { $result = (include_once $path); } } elseif (isset($handler["FULL_PATH"]) && !empty($handler["FULL_PATH"]) && IO\File::isFileExists($handler["FULL_PATH"])) { $result = (include_once $handler["FULL_PATH"]); } $event->addDebugInfo($result); if (isset($handler["TO_METHOD_ARG"]) && is_array($handler["TO_METHOD_ARG"]) && !empty($handler["TO_METHOD_ARG"])) { $args = $handler["TO_METHOD_ARG"]; } else { $args = array(); } if ($handler["VERSION"] > 1) { $args[] = $event; } else { $args = array_merge($args, array_values($event->getParameters())); } $callback = null; if (isset($handler["CALLBACK"])) { $callback = $handler["CALLBACK"]; } elseif (!empty($handler["TO_CLASS"]) && !empty($handler["TO_METHOD"]) && class_exists($handler["TO_CLASS"])) { $callback = array($handler["TO_CLASS"], $handler["TO_METHOD"]); } if ($callback != null) { $result = call_user_func_array($callback, $args); } if ($result != null && !$result instanceof EventResult) { $result = new EventResult(EventResult::UNDEFINED, $result, $handler["TO_MODULE_ID"]); } $event->addDebugInfo($result); if ($result != null) { $event->addResult($result); } } catch (\Exception $ex) { if ($event->isDebugOn()) { $event->addException($ex); } else { throw $ex; } } }
protected function createTopic() { $topic = array('TITLE' => $this->entity->getXmlId(), 'TAGS' => '', 'MESSAGE' => $this->entity->getXmlId(), 'AUTHOR_ID' => 0); /** @var $request \Bitrix\Main\HttpRequest */ $request = \Bitrix\Main\Context::getCurrent()->getRequest(); $post = array_merge($request->getQueryList()->toArray(), $request->getPostList()->toArray()); $event = new Event("forum", "OnCommentTopicAdd", array($this->entity->getType(), $this->entity->getId(), $post, &$topic)); $event->send(); if (strlen($topic["AUTHOR_NAME"]) <= 0) { $topic["AUTHOR_NAME"] = $topic["AUTHOR_ID"] <= 0 ? Loc::getMessage("FORUM_USER_SYSTEM") : self::getUserName($topic["AUTHOR_ID"]); } $topic = array_merge($topic, array("FORUM_ID" => $this->forum["ID"], 'TITLE' => $topic["TITLE"], 'TAGS' => $topic["TAGS"], 'MESSAGE' => $topic["MESSAGE"], "USER_START_ID" => $topic["AUTHOR_ID"], "USER_START_NAME" => $topic["AUTHOR_NAME"], "LAST_POSTER_NAME" => $topic["AUTHOR_NAME"], "XML_ID" => $this->entity->getXmlId(), "APPROVED" => "Y")); if (($tid = \CForumTopic::add($topic)) > 0) { if ($this->forum["ALLOW_HTML"] != "Y") { $topic['MESSAGE'] = strip_tags($topic['MESSAGE']); } $fields = array("POST_MESSAGE" => $topic['MESSAGE'], "AUTHOR_ID" => $topic["AUTHOR_ID"], "AUTHOR_NAME" => $topic["AUTHOR_NAME"], "FORUM_ID" => $topic["FORUM_ID"], "TOPIC_ID" => $tid, "APPROVED" => $topic["APPROVED"], "NEW_TOPIC" => "Y", "PARAM1" => $this->entity->getType(), "PARAM2" => $this->entity->getId()); if (\CForumMessage::Add($fields, false, array("SKIP_INDEXING" => "Y", "SKIP_STATISTIC" => "N")) > 0) { $event = new Event("forum", "OnAfterCommentTopicAdd", array($this->entity->getType(), $this->entity->getId(), $tid)); $event->send(); self::$topics[$this->entity->getXmlId()] = $topic + array("ID" => $tid); return self::$topics[$this->entity->getXmlId()]; } \CForumTopic::Delete($tid); } $this->errorCollection->add(array(new Error(Loc::getMessage("FORUM_CM_TOPIC_IS_NOT_CREATED"), self::ERROR_PARAMS_TOPIC_ID))); return null; }