Example #1
0
 public static function Update($ID, $arFields, $checkPerms = true, $regEvent = true, $options = array())
 {
     global $DB;
     if (!is_array($options)) {
         $options = array();
     }
     $arPrevEntity = self::GetByID($ID, $checkPerms);
     if (!$arPrevEntity) {
         return false;
         // is not exists
     }
     if (!self::CheckFields('UPDATE', $arFields, $ID, array('PREVIOUS_FIELDS' => $arPrevEntity))) {
         return false;
     }
     $arPrevBindings = self::GetBindings($ID);
     $arRecordBindings = array();
     $storageElementIDs = isset($arFields['STORAGE_ELEMENT_IDS']) ? $arFields['STORAGE_ELEMENT_IDS'] : null;
     $storageElementsSerialized = false;
     if (is_array($storageElementIDs)) {
         $storageElementIDs = self::NormalizeStorageElementIDs($storageElementIDs);
         $arFields['STORAGE_ELEMENT_IDS'] = serialize($storageElementIDs);
         $storageElementsSerialized = true;
     } elseif ($storageElementIDs !== null) {
         //Skip Storage Elements Processing - Treat As Not Changed
         $storageElementIDs = null;
     }
     if (isset($arFields['STORAGE_ELEMENT_IDS'])) {
         $arRecordBindings['STORAGE_ELEMENT_IDS'] = $arFields['STORAGE_ELEMENT_IDS'];
     }
     if (isset($arFields['SETTINGS'])) {
         if (is_array($arFields['SETTINGS'])) {
             $arFields['SETTINGS'] = serialize($arFields['SETTINGS']);
         }
         $arRecordBindings['SETTINGS'] = $arFields['SETTINGS'];
     }
     if (isset($arFields['DESCRIPTION'])) {
         $arRecordBindings['DESCRIPTION'] = $arFields['DESCRIPTION'];
     }
     $arBindings = isset($arFields['BINDINGS']) && is_array($arFields['BINDINGS']) ? $arFields['BINDINGS'] : null;
     if (is_array($arBindings)) {
         $bindingQty = count($arBindings);
         if ($bindingQty === 1) {
             // Change activity ownership if only one binding defined
             $arBinding = $arBindings[0];
             $arFields['OWNER_ID'] = $arBinding['OWNER_ID'];
             $arFields['OWNER_TYPE_ID'] = $arBinding['OWNER_TYPE_ID'];
         } elseif ($bindingQty === 0) {
             // Clear activity ownership if only no bindings are defined
             $arFields['OWNER_ID'] = 0;
             $arFields['OWNER_TYPE_ID'] = CCrmOwnerType::Undefined;
         }
     }
     self::NormalizeDateTimeFields($arFields);
     if (isset($arFields['ID'])) {
         unset($arFields['ID']);
     }
     $sql = 'UPDATE ' . CCrmActivity::TABLE_NAME . ' SET ' . $DB->PrepareUpdate(CCrmActivity::TABLE_NAME, $arFields) . ' WHERE ID = ' . $ID;
     if (!empty($arRecordBindings)) {
         $DB->QueryBind($sql, $arRecordBindings, false);
     } else {
         $DB->Query($sql, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
     }
     $arFields['SETTINGS'] = isset($arFields['SETTINGS']) ? unserialize($arFields['SETTINGS']) : array();
     CCrmEntityHelper::RemoveCached(self::CACHE_NAME, $ID);
     $storageTypeID = isset($arFields['STORAGE_TYPE_ID']) ? intval($arFields['STORAGE_TYPE_ID']) : StorageType::Undefined;
     if ($storageTypeID === StorageType::Undefined) {
         $storageTypeID = isset($arPrevEntity['STORAGE_TYPE_ID']) ? intval($arPrevEntity['STORAGE_TYPE_ID']) : self::GetDefaultStorageTypeID();
     }
     if (is_array($storageElementIDs)) {
         CCrmActivity::DoSaveElementIDs($ID, $storageTypeID, $storageElementIDs);
     }
     $arCurEntity = self::GetByID($ID, false);
     if (is_array($arBindings)) {
         $bindingsChanged = !self::IsBindingsEquals($arBindings, $arPrevBindings);
         if ($bindingsChanged) {
             self::SaveBindings($ID, $arBindings, false, false);
         }
     } else {
         $arBindings = $arPrevBindings;
         $bindingsChanged = false;
     }
     $prevCompleted = isset($arPrevEntity['COMPLETED']) && $arPrevEntity['COMPLETED'] === 'Y';
     $curCompleted = isset($arCurEntity['COMPLETED']) && $arCurEntity['COMPLETED'] === 'Y';
     $prevDeadline = isset($arPrevEntity['DEADLINE']) ? $arPrevEntity['DEADLINE'] : '';
     $curDeadline = isset($arCurEntity['DEADLINE']) ? $arCurEntity['DEADLINE'] : '';
     if ($prevCompleted && $prevDeadline && ($bindingsChanged || $prevCompleted != $curCompleted || $prevDeadline !== $curDeadline)) {
         $deadline = new \Bitrix\Main\Type\DateTime($prevDeadline);
         $deadline->setTime(0, 0, 0);
         foreach ($arPrevBindings as &$arBinding) {
             $curOwnerTypeID = isset($arBinding['OWNER_TYPE_ID']) ? intval($arBinding['OWNER_TYPE_ID']) : 0;
             $curOwnerID = isset($arBinding['OWNER_ID']) ? intval($arBinding['OWNER_ID']) : 0;
             if ($curOwnerTypeID === CCrmOwnerType::Deal && $curOwnerID > 0) {
                 Bitrix\Crm\Statistics\DealActivityStatisticEntry::register($curOwnerID, null, array('DATE' => $deadline));
             }
         }
         unset($arBinding);
     }
     if ($curCompleted && $curDeadline !== '') {
         $deadline = new \Bitrix\Main\Type\DateTime($curDeadline);
         $deadline->setTime(0, 0, 0);
         foreach ($arBindings as &$arBinding) {
             $curOwnerTypeID = isset($arBinding['OWNER_TYPE_ID']) ? intval($arBinding['OWNER_TYPE_ID']) : 0;
             $curOwnerID = isset($arBinding['OWNER_ID']) ? intval($arBinding['OWNER_ID']) : 0;
             if ($curOwnerTypeID === CCrmOwnerType::Deal && $curOwnerID > 0) {
                 Bitrix\Crm\Statistics\DealActivityStatisticEntry::register($curOwnerID, null, array('DATE' => $deadline));
             }
         }
         unset($arBinding);
     }
     // Synchronize user activity -->
     $arSyncKeys = array();
     $responsibleID = isset($arFields['RESPONSIBLE_ID']) ? intval($arFields['RESPONSIBLE_ID']) : (isset($arPrevEntity['RESPONSIBLE_ID']) ? intval($arPrevEntity['RESPONSIBLE_ID']) : 0);
     foreach ($arBindings as &$arBinding) {
         if ($responsibleID > 0) {
             self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], $responsibleID);
             $arSyncKeys[] = "{$arBinding['OWNER_TYPE_ID']}_{$arBinding['OWNER_ID']}_{$responsibleID}";
         }
         self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], 0);
         $arSyncKeys[] = "{$arBinding['OWNER_TYPE_ID']}_{$arBinding['OWNER_ID']}";
     }
     unset($arBinding);
     $prevResponsibleID = isset($arPrevEntity['RESPONSIBLE_ID']) ? intval($arPrevEntity['RESPONSIBLE_ID']) : 0;
     if (!empty($arPrevBindings)) {
         foreach ($arPrevBindings as &$arBinding) {
             if ($prevResponsibleID > 0 && !in_array("{$arBinding['OWNER_TYPE_ID']}_{$arBinding['OWNER_ID']}_{$prevResponsibleID}", $arSyncKeys, true)) {
                 self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], $prevResponsibleID);
             }
             if (!in_array("{$arBinding['OWNER_TYPE_ID']}_{$arBinding['OWNER_ID']}", $arSyncKeys, true)) {
                 self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], 0);
             }
         }
         unset($arBinding);
     }
     // <-- Synchronize user activity
     if ($regEvent) {
         foreach ($arBindings as &$arBinding) {
             self::RegisterUpdateEvent($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], $arCurEntity, $arPrevEntity, false);
         }
         unset($arBinding);
     }
     $typeID = isset($arCurEntity['TYPE_ID']) ? intval($arCurEntity['TYPE_ID']) : CCrmActivityType::Undefined;
     $skipAssocEntity = isset($options['SKIP_ASSOCIATED_ENTITY']) ? (bool) $options['SKIP_ASSOCIATED_ENTITY'] : false;
     if (!$skipAssocEntity && $typeID > 0) {
         switch ($typeID) {
             case CCrmActivityType::Call:
             case CCrmActivityType::Meeting:
                 $completed = isset($arCurEntity['COMPLETED']) ? $arCurEntity['COMPLETED'] === 'Y' : false;
                 // Check for settings
                 $displayCompleted = $typeID === CCrmActivityType::Call ? CCrmActivityCalendarSettings::GetValue(CCrmActivityCalendarSettings::DisplayCompletedCalls, true) : CCrmActivityCalendarSettings::GetValue(CCrmActivityCalendarSettings::DisplayCompletedMeetings, true);
                 if (!$completed || $displayCompleted) {
                     $arCurEntity['BINDINGS'] = $arBindings;
                     $eventID = self::SaveCalendarEvent($arCurEntity);
                     if (is_int($eventID) && $eventID > 0) {
                         $DB->Query('UPDATE ' . CCrmActivity::TABLE_NAME . ' SET ' . $DB->PrepareUpdate(CCrmActivity::TABLE_NAME, array('ASSOCIATED_ENTITY_ID' => $eventID)) . ' WHERE ID = ' . $ID, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
                     }
                 } else {
                     if (self::DeleteCalendarEvent($arCurEntity)) {
                         $DB->Query('UPDATE ' . CCrmActivity::TABLE_NAME . ' SET ' . $DB->PrepareUpdate(CCrmActivity::TABLE_NAME, array('ASSOCIATED_ENTITY_ID' => 0)) . ' WHERE ID = ' . $ID, false, 'File: ' . __FILE__ . '<br>Line: ' . __LINE__);
                     }
                 }
                 break;
             case CCrmActivityType::Task:
                 self::SaveTask($arCurEntity);
                 break;
             case CCrmActivityType::Email:
                 //do nothing
                 break;
         }
     }
     $registerSonetEvent = isset($options['REGISTER_SONET_EVENT']) && $options['REGISTER_SONET_EVENT'] === true;
     $isSonetEventRegistred = false;
     if ($registerSonetEvent) {
         $isSonetEventSynchronized = self::SynchronizeLiveFeedEvent($ID, array('PROCESS_BINDINGS' => $bindingsChanged, 'BINDINGS' => $bindingsChanged ? $arBindings : null, 'REFRESH_DATE' => isset($arFields['COMPLETED']) && $arFields['COMPLETED'] !== $arPrevEntity['COMPLETED'], 'START_RESPONSIBLE_ID' => $arPrevEntity['RESPONSIBLE_ID'], 'FINAL_RESPONSIBLE_ID' => $responsibleID, 'EDITOR_ID' => intval($arFields["EDITOR_ID"]) > 0 ? $arFields["EDITOR_ID"] : CCrmSecurityHelper::GetCurrentUserID(), 'TYPE_ID' => $typeID, 'SUBJECT' => isset($arFields['SUBJECT']) ? $arFields['SUBJECT'] : $arPrevEntity['SUBJECT']));
         if (!$isSonetEventSynchronized) {
             $itemFields = self::GetByID($ID);
             if (is_array($itemFields)) {
                 $itemFields['BINDINGS'] = $arBindings;
                 $sonetEventID = self::RegisterLiveFeedEvent($itemFields);
                 $isSonetEventRegistred = is_int($sonetEventID) && $sonetEventID > 0;
                 if ($responsibleID > 0) {
                     CCrmSonetSubscription::RegisterSubscription(CCrmOwnerType::Activity, $ID, CCrmSonetSubscriptionType::Responsibility, $responsibleID);
                 }
             }
         }
     }
     if (!$isSonetEventRegistred && $responsibleID !== $prevResponsibleID) {
         CCrmSonetSubscription::ReplaceSubscriptionByEntity(CCrmOwnerType::Activity, $ID, CCrmSonetSubscriptionType::Responsibility, $responsibleID, $prevResponsibleID, $registerSonetEvent);
     }
     if ($storageElementsSerialized) {
         $arFields['STORAGE_ELEMENT_IDS'] = $storageElementIDs;
     }
     $rsEvents = GetModuleEvents('crm', 'OnActivityUpdate');
     while ($arEvent = $rsEvents->Fetch()) {
         ExecuteModuleEventEx($arEvent, array($ID, &$arFields));
     }
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $GLOBALS["CACHE_MANAGER"]->ClearByTag("CRM_ACTIVITY_" . $ID);
     }
     return true;
 }
Example #2
0
            CCrmStatus::EnableDepricatedTypes(isset($_POST['ENABLE_DEPRECATED_STATUSES']) && strtoupper($_POST['ENABLE_DEPRECATED_STATUSES']) === 'Y');
            \Bitrix\Crm\Settings\DealSettings::enableCloseDateSync(isset($_POST['REFRESH_DEAL_CLOSEDATE']) && strtoupper($_POST['REFRESH_DEAL_CLOSEDATE']) === 'Y');
            if ($_POST['DEAL_DEFAULT_LIST_VIEW']) {
                \Bitrix\Crm\Settings\DealSettings::setDefaultListViewID($_POST['DEAL_DEFAULT_LIST_VIEW']);
            }
            LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_SM_CONFIG'], array()));
        }
    }
}
$arResult['FORM_ID'] = 'CRM_SM_CONFIG';
$arResult['BACK_URL'] = $arParams['PATH_TO_SM_CONFIG'];
$arResult['FIELDS'] = array();
$arResult['FIELDS']['tab_deal_config'][] = array('id' => 'DEAL_DEFAULT_LIST_VIEW', 'name' => GetMessage('CRM_FIELD_DEAL_DEFAULT_LIST_VIEW'), 'items' => \Bitrix\Crm\Settings\DealSettings::getViewDescriptions(), 'type' => 'list', 'value' => \Bitrix\Crm\Settings\DealSettings::getDefaultListViewID(), 'required' => false);
$arResult['FIELDS']['tab_deal_config'][] = array('id' => 'REFRESH_DEAL_CLOSEDATE', 'name' => GetMessage('CRM_FIELD_REFRESH_DEAL_CLOSEDATE'), 'type' => 'checkbox', 'value' => \Bitrix\Crm\Settings\DealSettings::isCloseDateSyncEnabled(), 'required' => false);
$arResult['FIELDS']['tab_activity_config'][] = array('id' => 'CALENDAR_DISPLAY_COMPLETED_CALLS', 'name' => GetMessage('CRM_FIELD_DISPLAY_COMPLETED_CALLS_IN_CALENDAR'), 'type' => 'checkbox', 'value' => CCrmActivityCalendarSettings::GetValue(CCrmActivityCalendarSettings::DisplayCompletedCalls, true), 'required' => false);
$arResult['FIELDS']['tab_activity_config'][] = array('id' => 'CALENDAR_DISPLAY_COMPLETED_MEETINGS', 'name' => GetMessage('CRM_FIELD_DISPLAY_COMPLETED_MEETINGS_IN_CALENDAR'), 'type' => 'checkbox', 'value' => CCrmActivityCalendarSettings::GetValue(CCrmActivityCalendarSettings::DisplayCompletedMeetings, true), 'required' => false);
$arResult['FIELDS']['tab_activity_config'][] = array('id' => 'RECKON_ACTIVITYLESS_ITEMS_IN_COUNTERS', 'name' => GetMessage('CRM_FIELD_RECKON_ACTIVITYLESS_ITEMS_IN_COUNTERS'), 'type' => 'checkbox', 'value' => CCrmUserCounterSettings::GetValue(CCrmUserCounterSettings::ReckonActivitylessItems, true), 'required' => false);
$arResult['FIELDS']['tab_outgoing_email'][] = array('id' => 'SERVICE_CODE_ALLOCATION', 'name' => GetMessage('CRM_FIELD_SERVICE_CODE_ALLOCATION'), 'items' => CCrmEMailCodeAllocation::GetAllDescriptions(), 'type' => 'list', 'value' => CCrmEMailCodeAllocation::GetCurrent(), 'required' => false);
if (Bitrix\Crm\Integration\Bitrix24Email::isEnabled()) {
    if (Bitrix\Crm\Integration\Bitrix24Email::allowDisableSignature()) {
        $arResult['FIELDS']['tab_outgoing_email'][] = array('id' => 'ENABLE_B24_EMAIL_SIGNATURE', 'name' => GetMessage('CRM_FIELD_ENABLE_B24_EMAIL_SIGNATURE'), 'type' => 'checkbox', 'value' => Bitrix\Crm\Integration\Bitrix24Email::isSignatureEnabled(), 'required' => false);
    } else {
        $arResult['FIELDS']['tab_outgoing_email'][] = array('id' => 'ENABLE_B24_EMAIL_SIGNATURE', 'name' => GetMessage('CRM_FIELD_ENABLE_B24_EMAIL_SIGNATURE'), 'type' => 'label', 'value' => Bitrix\Crm\Integration\Bitrix24Email::getSignatureExplanation(), 'required' => false);
    }
}
$arResult['FIELDS']['tab_format'][] = array('id' => 'PERSON_NAME_FORMAT_ID', 'name' => GetMessage('CRM_FIELD_PERSON_NAME_FORMAT'), 'type' => 'list', 'items' => \Bitrix\Crm\Format\PersonNameFormatter::getAllDescriptions(), 'value' => \Bitrix\Crm\Format\PersonNameFormatter::getFormatID(), 'required' => false);
$arResult['FIELDS']['tab_format'][] = array('id' => 'CALLTO_FORMAT', 'name' => GetMessage('CRM_FIELD_CALLTO_FORMAT'), 'type' => 'list', 'items' => CCrmCallToUrl::GetAllDescriptions(), 'value' => CCrmCallToUrl::GetFormat(CCrmCallToUrl::Bitrix), 'required' => false);
$calltoSettings = CCrmCallToUrl::GetCustomSettings();
$arResult['FIELDS']['tab_format'][] = array('id' => 'CALLTO_URL_TEMPLATE', 'name' => GetMessage('CRM_FIELD_CALLTO_URL_TEMPLATE'), 'type' => 'text', 'value' => isset($calltoSettings['URL_TEMPLATE']) ? $calltoSettings['URL_TEMPLATE'] : 'callto:[phone]', 'required' => false);
$arResult['FIELDS']['tab_format'][] = array('id' => 'CALLTO_CLICK_HANDLER', 'name' => GetMessage('CRM_FIELD_CALLTO_CLICK_HANDLER'), 'type' => 'textarea', 'value' => isset($calltoSettings['CLICK_HANDLER']) ? $calltoSettings['CLICK_HANDLER'] : '', 'required' => false);
$arResult['FIELDS']['tab_format'][] = array('id' => 'CALLTO_NORMALIZE_NUMBER', 'name' => GetMessage('CRM_FIELD_CALLTO_NORMALIZE_NUMBER'), 'type' => 'checkbox', 'value' => isset($calltoSettings['NORMALIZE_NUMBER']) ? $calltoSettings['NORMALIZE_NUMBER'] === 'Y' : true, 'required' => false);