本文整理汇总了PHP中Bitrix\Main\Event::send方法的典型用法代码示例。如果您正苦于以下问题:PHP Event::send方法的具体用法?PHP Event::send怎么用?PHP Event::send使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Bitrix\Main\Event
的用法示例。
在下文中一共展示了Event::send方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: getInstance
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;
}
示例2: initClassesList
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;
}
示例3: clearCollection
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();
}
}
示例4: getList
/**
* @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;
}
示例5: addExtensions
/**
* Добавляет расширения, в том числе расширение для битрикса,
* в котором добавляются нужные глобальные переменные и т.п.
*/
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);
}
}
}
}
}
示例6: testUseHandlerClassParams
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')));
}
示例7: __construct
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");
}
示例8: generateInitEvent
/**
* Создается событие для внесения в 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;
}
}
}
}
示例9: save
/**
* @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;
}
示例10: send
/**
* @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;
}
//.........这里部分代码省略.........
示例11: addUser
/**
* 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;
}
示例12: save
/**
* @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'];
//.........这里部分代码省略.........
示例13: initializeShell
/**
* Initializes application shell. Called after initializeKernel.
*
* @param System\IApplicationStrategy $initStrategy
*/
protected function initializeShell(\Bitrix\Main\System\IApplicationStrategy $initStrategy = null)
{
$this->authenticateUser();
if ($initStrategy != null) {
$initStrategy->authenticateUser();
}
define("BX_STARTED", true);
// required for iblock to define site
//magic parameters: show page creation time
if ($_GET["show_page_exec_time"] == "Y" || $_GET["show_page_exec_time"] == "N") {
$_SESSION["SESS_SHOW_TIME_EXEC"] = $_GET["show_page_exec_time"];
}
//magic parameters: show included file processing time
if ($_GET["show_include_exec_time"] == "Y" || $_GET["show_include_exec_time"] == "N") {
$_SESSION["SESS_SHOW_INCLUDE_TIME_EXEC"] = $_GET["show_include_exec_time"];
}
//magic parameters: show include areas
if (isset($_GET["bitrix_include_areas"]) && $_GET["bitrix_include_areas"] != "") {
$GLOBALS["APPLICATION"]->setShowIncludeAreas($_GET["bitrix_include_areas"] == "Y");
}
//magic sound
/** @var $context HttpContext */
$context = $this->context;
$user = $context->getUser();
/** @var $request HttpRequest */
$request = $context->getRequest();
if ($user->isAuthenticated() && $request->getCookie("SOUND_LOGIN_PLAYED") == null) {
/** @var $response HttpResponse */
$response = $context->getResponse();
$response->addCookie(new \Bitrix\Main\Web\Cookie('SOUND_LOGIN_PLAYED', 'Y', 0));
}
$event = new Event("main", "OnBeforeProlog");
$event->send();
$this->authorizeUser();
if ($initStrategy != null) {
$initStrategy->authorizeUser();
}
}
示例14: save
/**
* @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');
//.........这里部分代码省略.........
示例15: setFields
/**
*
* @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;
}