Ejemplo n.º 1
0
 function UnInstallDB($arParams = array())
 {
     global $DB, $DBType, $APPLICATION;
     $this->errors = false;
     CModule::IncludeModule("sender");
     \Bitrix\Sender\TriggerManager::activateAllHandlers(false);
     if (!array_key_exists("save_tables", $arParams) || $arParams["save_tables"] != "Y") {
         $this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sender/install/db/" . $DBType . "/uninstall.sql");
     }
     CAgent::RemoveModuleAgents('sender');
     UnRegisterModuleDependences("main", "OnMailEventMailRead", "sender", "bitrix\\sender\\postingmanager", "onMailEventMailRead");
     UnRegisterModuleDependences("main", "OnMailEventMailClick", "sender", "bitrix\\sender\\postingmanager", "onMailEventMailClick");
     UnRegisterModuleDependences("main", "OnMailEventSubscriptionDisable", "sender", "Bitrix\\Sender\\Subscription", "onMailEventSubscriptionDisable");
     UnRegisterModuleDependences("main", "OnMailEventSubscriptionEnable", "sender", "Bitrix\\Sender\\Subscription", "onMailEventSubscriptionEnable");
     UnRegisterModuleDependences("main", "OnMailEventSubscriptionList", "sender", "Bitrix\\Sender\\Subscription", "onMailEventSubscriptionList");
     UnRegisterModuleDependences("sender", "OnConnectorList", "sender", "bitrix\\sender\\connectormanager", "onConnectorListContact");
     UnRegisterModuleDependences("sender", "OnConnectorList", "sender", "bitrix\\sender\\connectormanager", "onConnectorListRecipient");
     UnRegisterModuleDependences("sender", "OnPresetTemplateList", "sender", "Bitrix\\Sender\\Preset\\TemplateBase", "onPresetTemplateList");
     UnRegisterModuleDependences("sender", "OnPresetTemplateList", "sender", "Bitrix\\Sender\\TemplateTable", "onPresetTemplateList");
     UnRegisterModuleDependences("sender", "OnPresetMailBlockList", "sender", "Bitrix\\Sender\\Preset\\MailBlockBase", "OnPresetMailBlockList");
     UnRegisterModuleDependences("sender", "OnPresetTemplateList", "sender", "Bitrix\\Sender\\Preset\\TemplateBase", "onPresetTemplateListSite");
     UnRegisterModuleDependences("sender", "OnTriggerList", "sender", "bitrix\\sender\\triggermanager", "onTriggerList");
     UnRegisterModuleDependences("sender", "OnAfterRecipientUnsub", "sender", "Bitrix\\Sender\\TriggerManager", "onAfterRecipientUnsub");
     UnRegisterModuleDependences("sender", "OnAfterRecipientClick", "sender", "Bitrix\\Sender\\Internals\\ConversionHandler", "onAfterRecipientClick");
     UnRegisterModuleDependences("conversion", "OnSetDayContextAttributes", "sender", "Bitrix\\Sender\\Internals\\ConversionHandler", "onSetDayContextAttributes");
     UnRegisterModuleDependences("main", "OnBeforeProlog", "sender", "Bitrix\\Sender\\Internals\\ConversionHandler", "onBeforeProlog");
     UnRegisterModuleDependences("conversion", "OnGetAttributeTypes", "sender", "Bitrix\\Sender\\Internals\\ConversionHandler", "onGetAttributeTypes");
     UnRegisterModule("sender");
     if ($this->errors !== false) {
         $APPLICATION->ThrowException(implode("<br>", $this->errors));
         return false;
     }
     return true;
 }
Ejemplo n.º 2
0
 /**
  * @param Entity\Event $event
  * @return Entity\EventResult
  */
 public static function onAfterDelete(Entity\Event $event)
 {
     TriggerManager::actualizeHandlerForChild();
 }
Ejemplo n.º 3
0
            }
            $trigger = \Bitrix\Sender\TriggerManager::getOnce($mailing['TRIGGER_FIELDS'][$type]);
            if ($trigger) {
                $triggerListExists[$type] = $mailing['TRIGGER_FIELDS'][$type] + $triggerListForJS[$type][$trigger->getId()];
                $trigger->setFieldFormName('post_form');
                $trigger->setFieldPrefix('ENDPOINT[' . $type . '][FIELDS]');
                $trigger->setFields($triggerListExists[$type]['FIELDS']);
                $triggerListExists[$type]['FORM'] = $trigger->getForm();
            }
        }
    }
    if ($REQUEST_METHOD == "POST" && !$isPostedFormProcessed && check_bitrix_sessid()) {
        $arError = array();
        $triggerListExists = array('START' => null, 'END' => null);
        foreach ($triggerListExists as $type => $value) {
            $trigger = \Bitrix\Sender\TriggerManager::getOnce($ENDPOINT[$type]);
            if ($trigger) {
                $triggerListExists[$type] = $ENDPOINT[$type] + \Bitrix\Sender\TriggerSettings::getArrayFromTrigger($trigger);
            }
        }
        $updateDb = \Bitrix\Sender\MailingTable::update($MAILING_ID, array('TRIGGER_FIELDS' => $triggerListExists));
        if (!$updateDb->isSuccess()) {
            $arError = array_merge($arError, $updateDb->getErrorMessages());
        }
        if (empty($arError)) {
            $isPostedFormProcessed = true;
            LocalRedirect('/bitrix/admin/sender_mailing_trig_edit.php?ID=' . $MAILING_ID . "&lang=" . LANGUAGE_ID);
        }
    }
}
if (!empty($arError)) {
Ejemplo n.º 4
0
 public static function actualizeHandlers($chainId, array $fieldsNew = null, array $fieldsOld = null)
 {
     $settingsNew = null;
     $settingsOld = null;
     if ($fieldsNew) {
         $settingsNew = new TriggerSettings($fieldsNew);
     }
     if ($fieldsOld) {
         $settingsOld = new TriggerSettings($fieldsOld);
     }
     // if old item was closed trigger
     if ($settingsOld && $settingsOld->isClosedTrigger()) {
         // delete agent
         $agentName = TriggerManager::getClosedEventAgentName($settingsOld->getEventModuleId(), $settingsOld->getEventType(), $chainId);
         $agent = new \CAgent();
         $agentListDb = $agent->GetList(array(), array('MODULE_ID' => 'sender', 'NAME' => $agentName));
         while ($agentItem = $agentListDb->Fetch()) {
             $agent->Delete($agentItem['ID']);
         }
     }
     // if new item is closed trigger
     if ($settingsNew && $settingsNew->isClosedTrigger()) {
         // check active state of mailing
         $chainDb = MailingChainTable::getList(array('select' => array('ID'), 'filter' => array('=ID' => $chainId, '=MAILING.ACTIVE' => 'Y')));
         if (!$chainDb->fetch()) {
             return;
         }
         // add new agent
         $agentName = TriggerManager::getClosedEventAgentName($settingsNew->getEventModuleId(), $settingsNew->getEventType(), $chainId);
         // set date of next exec
         $agentTime = $settingsNew->getClosedTriggerTime();
         $agentInterval = $settingsNew->getClosedTriggerInterval();
         if ($agentInterval <= 0) {
             $agentInterval = 1440;
         }
         $agentTimeArray = explode(":", $agentTime);
         $agentDate = new \Bitrix\Main\Type\DateTime();
         $agentDate->setTime((int) $agentTimeArray[0], (int) $agentTimeArray[1]);
         // set next exec on next day if exec was today
         if ($agentDate->getTimestamp() < time()) {
             $agentDate->add("1 days");
         }
         // add agent
         $agent = new \CAgent();
         $agent->AddAgent($agentName, 'sender', 'N', $agentInterval * 60, '', 'Y', $agentDate->toString());
         return;
     }
     // actualize deleted/changed event
     if ($settingsOld && !$settingsOld->isClosedTrigger() && $settingsOld->getFullEventType()) {
         // if delete operation(no the NEW)
         // or change operation(the NEW is not equal to the OLD)
         if (!$settingsNew || $settingsOld->getFullEventType() != $settingsNew->getFullEventType()) {
             TriggerManager::actualizeHandler(array('MODULE_ID' => $settingsOld->getEventModuleId(), 'EVENT_TYPE' => $settingsOld->getEventType(), 'CALLED_BEFORE_CHANGE' => true));
         }
     }
     // actualize new event
     if ($settingsNew && $settingsNew->getFullEventType()) {
         $calledBeforeChange = $fieldsOld ? false : true;
         TriggerManager::actualizeHandler(array('MODULE_ID' => $settingsNew->getEventModuleId(), 'EVENT_TYPE' => $settingsNew->getEventType(), 'CALLED_BEFORE_CHANGE' => $calledBeforeChange));
     }
 }
Ejemplo n.º 5
0
 public static function getChainPersonalizeList($id)
 {
     $result = array();
     $mailingDb = \Bitrix\Sender\MailingTable::getList(array('select' => array('ID', 'TRIGGER_FIELDS'), 'filter' => array('=IS_TRIGGER' => 'Y', '=ID' => $id)));
     if (!($mailing = $mailingDb->fetch())) {
         return $result;
     }
     $triggerFields = $mailing['TRIGGER_FIELDS'];
     if (!is_array($triggerFields)) {
         $triggerFields = array();
     }
     $settingsList = array();
     foreach ($triggerFields as $key => $point) {
         if (empty($point['CODE'])) {
             continue;
         }
         $point['IS_EVENT_OCCUR'] = true;
         $point['IS_PREVENT_EMAIL'] = false;
         $point['SEND_INTERVAL_UNIT'] = 'M';
         switch ($key) {
             case 'END':
                 $point['IS_TYPE_START'] = false;
                 break;
             case 'START':
             default:
                 $point['IS_TYPE_START'] = true;
         }
         $settingsList[] = new \Bitrix\Sender\TriggerSettings($point);
     }
     foreach ($settingsList as $settings) {
         /* @var \Bitrix\Sender\TriggerSettings $settings */
         if (!$settings->isTypeStart()) {
             continue;
         }
         $trigger = \Bitrix\Sender\TriggerManager::getOnce($settings->getEndpoint());
         if ($trigger) {
             $result = array_merge($result, $trigger->getPersonalizeList());
         }
     }
     return $result;
 }
Ejemplo n.º 6
0
 public static function updateChainTrigger($id)
 {
     // get first item of chain
     $chainDb = MailingChainTable::getList(array('select' => array('ID', 'TRIGGER_FIELDS' => 'MAILING.TRIGGER_FIELDS'), 'filter' => array('=MAILING_ID' => $id, '=IS_TRIGGER' => 'Y', '=PARENT_ID' => null)));
     $chain = $chainDb->fetch();
     if (!$chain) {
         return;
     }
     $chainId = $chain['ID'];
     // get trigger settings from mailing
     $triggerFields = $chain['TRIGGER_FIELDS'];
     if (!is_array($triggerFields)) {
         $triggerFields = array();
     }
     // init TriggerSettings objects
     $settingsList = array();
     foreach ($triggerFields as $key => $point) {
         if (empty($point['CODE'])) {
             continue;
         }
         $point['IS_EVENT_OCCUR'] = true;
         $point['IS_PREVENT_EMAIL'] = false;
         $point['SEND_INTERVAL_UNIT'] = 'M';
         $point['IS_CLOSED_TRIGGER'] = $point['IS_CLOSED_TRIGGER'] == 'Y' ? true : false;
         switch ($key) {
             case 'END':
                 $point['IS_TYPE_START'] = false;
                 break;
             case 'START':
             default:
                 $point['IS_TYPE_START'] = true;
         }
         $settingsList[] = new \Bitrix\Sender\TriggerSettings($point);
     }
     // prepare fields for save
     $mailingTriggerList = array();
     foreach ($settingsList as $settings) {
         /* @var \Bitrix\Sender\TriggerSettings $settings */
         $trigger = \Bitrix\Sender\TriggerManager::getOnce($settings->getEndpoint());
         if ($trigger) {
             $triggerFindId = $trigger->getFullEventType() . "/" . (int) $settings->isTypeStart();
             $mailingTriggerList[$triggerFindId] = array('IS_TYPE_START' => $settings->isTypeStart(), 'NAME' => $trigger->getName(), 'EVENT' => $trigger->getFullEventType(), 'ENDPOINT' => $settings->getArray());
         }
     }
     // add new, update exists, delete old rows
     $triggerDb = MailingTriggerTable::getList(array('select' => array('EVENT', 'MAILING_CHAIN_ID', 'IS_TYPE_START'), 'filter' => array('=MAILING_CHAIN_ID' => $chainId)));
     while ($trigger = $triggerDb->fetch()) {
         $triggerFindId = $trigger['EVENT'] . "/" . (int) $trigger['IS_TYPE_START'];
         if (!isset($mailingTriggerList[$triggerFindId])) {
             MailingTriggerTable::delete($trigger);
         } else {
             MailingTriggerTable::update($trigger, $mailingTriggerList[$triggerFindId]);
             unset($mailingTriggerList[$triggerFindId]);
         }
     }
     foreach ($mailingTriggerList as $triggerFindId => $settings) {
         $settings['MAILING_CHAIN_ID'] = $chainId;
         MailingTriggerTable::add($settings);
     }
     TriggerManager::actualizeHandlerForChild();
 }