/** * @param string $email * @param array $mailingList * @param string $siteId * @return void * //send email with url to confirmation of subscription */ public static function sendEventConfirm($email, array $mailingIdList, $siteId) { $mailingNameList = array(); $mailingDb = MailingTable::getList(array('select' => array('NAME'), 'filter' => array('ID' => $mailingIdList))); while ($mailing = $mailingDb->fetch()) { $mailingNameList[] = $mailing['NAME']; } $subscription = array('EMAIL' => $email, 'SITE_ID' => $siteId, 'MAILING_LIST' => $mailingIdList); $confirmUrl = static::getLinkSub($subscription); $date = new \Bitrix\Main\Type\DateTime(); $eventSendFields = array("EVENT_NAME" => "SENDER_SUBSCRIBE_CONFIRM", "C_FIELDS" => array("EMAIL" => $email, "DATE" => $date->toString(), "CONFIRM_URL" => $confirmUrl, "MAILING_LIST" => implode("\r\n", $mailingNameList)), "LID" => is_array($siteId) ? implode(",", $siteId) : $siteId); \Bitrix\Main\Mail\Event::send($eventSendFields); }
public function filter() { $daysDontAuth = $this->getFieldValue('DAYS_DONT_AUTH'); if (!is_numeric($daysDontAuth)) { $daysDontAuth = 90; } $dateFrom = new \Bitrix\Main\Type\DateTime(); $dateTo = new \Bitrix\Main\Type\DateTime(); $dateFrom->setTime(0, 0, 0)->add('-' . $daysDontAuth . ' days'); $dateTo->setTime(0, 0, 0)->add('1 days')->add('-' . $daysDontAuth . ' days'); if ($this->isRunForOldData()) { $filter = array('!LAST_LOGIN' => null, '<LAST_LOGIN' => $dateTo); } else { $filter = array('>LAST_LOGIN' => $dateFrom, '<LAST_LOGIN' => $dateTo); } $filter['=ACTIVE'] = true; $userListDb = \Bitrix\Main\UserTable::getList(array('select' => array('EMAIL', 'ID', 'NAME'), 'filter' => $filter, 'order' => array('ID' => 'ASC'))); if ($userListDb->getSelectedRowsCount() > 0) { $userListDb->addFetchDataModifier(array($this, 'getFetchDataModifier')); $this->recipient = $userListDb; return true; } else { return false; } }
public function GetStatus() { $ViHttp = new CVoxImplantHttp(); $result = $ViHttp->GetDocumentStatus(); if (!$result) { $this->error = new CVoxImplantError(__METHOD__, $ViHttp->GetError()->code, $ViHttp->GetError()->msg); return false; } $verifications = array(); foreach ($result as $key => $verification) { $regionName = GetMessage('VI_DOCS_COUNTRY_' . $verification->REGION); $regionName = strlen($regionName) > 0 ? $regionName : $verification->REGION; $verifications[$key]['REGION'] = $verification->REGION; $verifications[$key]['REGION_NAME'] = $regionName; $verifications[$key]['STATUS'] = $verification->STATUS; $verifications[$key]['STATUS_NAME'] = GetMessage('VI_DOCS_STATUS_' . $verification->STATUS); if ($verification->STATUS != 'VERIFIED' && $verification->UNVERIFIED_HOLD_UNTIL) { $data = new Bitrix\Main\Type\DateTime($verification->UNVERIFIED_HOLD_UNTIL, 'Y-m-d H:i:s'); $verifications[$key]['UNVERIFIED_HOLD_UNTIL'] = $data->format(Bitrix\Main\Type\Date::getFormat()); } else { $verifications[$key]['UNVERIFIED_HOLD_UNTIL'] = ''; } if (isset($verification->DOCUMENTS)) { foreach ($verification->DOCUMENTS as $document) { $data = new Bitrix\Main\Type\DateTime($document->UPLOADED, 'Y-m-d H:i:s'); $verifications[$key]['DOCUMENTS'][] = array('UPLOADED' => $data->format(Bitrix\Main\Type\DateTime::getFormat()), 'DOCUMENT_ID' => $document->DOCUMENT_ID, 'DOCUMENT_STATUS' => $document->DOCUMENT_STATUS, 'DOCUMENT_STATUS_NAME' => GetMessage('VI_DOCS_DOCUMENT_STATUS_' . $document->DOCUMENT_STATUS), 'IS_INDIVIDUAL' => $document->IS_INDIVIDUAL, 'IS_INDIVIDUAL_NAME' => GetMessage('VI_DOCS_IS_INDIVIDUAL_' . $document->IS_INDIVIDUAL), 'REVIEWER_COMMENT' => $document->REVIEWER_COMMENT); } } } return $verifications; }
public function filter() { \Bitrix\Main\Loader::includeModule('sale'); $daysBasketForgotten = $this->getFieldValue('DAYS_BASKET_FORGOTTEN'); if (!is_numeric($daysBasketForgotten)) { $daysBasketForgotten = 90; } $dateFrom = new \Bitrix\Main\Type\DateTime(); $dateTo = new \Bitrix\Main\Type\DateTime(); $dateFrom->setTime(0, 0, 0)->add('-' . $daysBasketForgotten . ' days'); $dateTo->setTime(0, 0, 0)->add('1 days')->add('-' . $daysBasketForgotten . ' days'); if ($this->isRunForOldData()) { $filter = array('<MIN_DATE_INSERT' => $dateTo->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT)); } else { $filter = array('>MIN_DATE_INSERT' => $dateFrom->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT), '<MIN_DATE_INSERT' => $dateTo->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT)); } $filter = $filter + array('!FUSER.USER_ID' => null, '=ORDER_ID' => null, '=LID' => $this->getSiteId()); $userListDb = \Bitrix\Sale\BasketTable::getList(array('select' => array('USER_ID' => 'FUSER.USER_ID', 'EMAIL' => 'FUSER.USER.EMAIL', 'FUSER_USER_NAME' => 'FUSER.USER.NAME'), 'filter' => $filter, 'runtime' => array(new \Bitrix\Main\Entity\ExpressionField('MIN_DATE_INSERT', 'MIN(%s)', 'DATE_INSERT')), 'order' => array('USER_ID' => 'ASC'))); if ($userListDb->getSelectedRowsCount() > 0) { $userListDb->addFetchDataModifier(array($this, 'getFetchDataModifier')); $this->recipient = $userListDb; return true; } else { return false; } }
public static function SetIdle($userId, $result) { $date = null; if ($result) { $date = new Bitrix\Main\Type\DateTime(); $date->add('-10 MINUTE'); } CIMStatus::Set($userId, array('IDLE' => $date)); }
public static function SetIdle($userId, $result = true, $min = 10) { $date = null; $min = intval($min); if ($result && $min > 0) { $date = new Bitrix\Main\Type\DateTime(); $date->add('-' . $min . ' MINUTE'); } CIMStatus::Set($userId, array('IDLE' => $date)); }
public function getDateTimeToDbFunction(\Bitrix\Main\Type\DateTime $value, $type = \Bitrix\Main\Type\DateTime::DATE_WITH_TIME) { $customOffset = $value->getOffset(); $serverTime = new \Bitrix\Main\Type\DateTime(); $serverOffset = $serverTime->getOffset(); $diff = $customOffset - $serverOffset; $valueTmp = clone $value; $valueTmp->sub(new \DateInterval(sprintf("PT%sS", $diff))); $format = $type == \Bitrix\Main\Type\DateTime::DATE_WITHOUT_TIME ? "Y-m-d" : "Y-m-d H:i:s"; $date = "CONVERT(datetime, '" . $valueTmp->format($format) . "', 120)"; return $date; }
$testCapacity = Bitrix\ABTest\AdminHelper::getTestCapacity($abtest['ID']); if ($siteCapacity['daily'] > 0) { $rem = $abtest['MIN_AMOUNT'] - min($testCapacity); $est = $rem > 0 ? $rem / ($siteCapacity['daily'] / 2) : 0; $estDays = ceil(100 * $est / $abtest['PORTION']); } } $end_date = null; if ($abtest['ACTIVE'] == 'Y' && $abtest['DURATION'] != 0) { if ($abtest['DURATION'] > 0) { $end = clone $abtest['START_DATE']; $end->add(intval($abtest['DURATION']) . ' days'); $end_date = $end->format(Bitrix\Main\Type\Date::convertFormatToPhp($arLang['FORMAT_DATE'])); } else { if (isset($estDays)) { $end = new Bitrix\Main\Type\DateTime(); $end->add($estDays . ' days'); $end_date = $end->format(Bitrix\Main\Type\Date::convertFormatToPhp($arLang['FORMAT_DATE'])); } else { $end_date = getMessage('ABTEST_DURATION_NA'); } } } function pvalue($p1, $p2, $n1, $n2) { $dx = array(1.0, 0.049867347, 0.0211410061, 0.0032776263, 3.80036E-5, 4.88906E-5, 5.383E-6); $stdError = sqrt($p1 * (1 - $p1) / $n1 + $p2 * (1 - $p2) / $n2); $zval = abs($p2 - $p1) / $stdError; for ($pval = 0, $i = 6; $i >= 0; $i--) { $pval = $pval * $zval + $dx[$i]; }
public static function CheckNumberForBlackList($number) { $blackListTime = Bitrix\Main\Config\Option::get("voximplant", "blacklist_time", 5); $blackListCount = Bitrix\Main\Config\Option::get("voximplant", "blacklist_count", 5); $minTime = new Bitrix\Main\Type\DateTime(); $minTime->add('-' . $blackListTime . ' minutes'); $dbData = VI\StatisticTable::getList(array('filter' => array("PHONE_NUMBER" => $number, '>CALL_START_DATE' => $minTime), 'select' => array('ID'))); $callsCount = 0; while ($dbData->fetch()) { $callsCount++; if ($callsCount >= $blackListCount) { $number = substr($number, 0, 20); VI\BlacklistTable::add(array("PHONE_NUMBER" => $number)); $messageUserId = Bitrix\Main\Config\Option::get("voximplant", "blacklist_user_id", ""); CVoxImplantHistory::SendMessageToChat($messageUserId, $number, CVoxImplantMain::CALL_INCOMING, GetMessage("BLACKLIST_NUMBER")); return true; } } return false; }
public static function ConvertFromDB($arProperty, $value, $format = '') { if (strlen($value["VALUE"]) > 0) { try { $time = new Bitrix\Main\Type\DateTime($value['VALUE'], "Y-m-d H:i:s", new \DateTimeZone('UTC')); $time->setDefaultTimeZone(); $phpFormat = $format? $time->convertFormatToPhp($format): $time->getFormat(); $value["VALUE"] = $time->format($phpFormat); $value["VALUE"] = str_replace(" 00:00:00", "", $value["VALUE"]); } catch(Main\ObjectException $e) { } } return $value; }
public static function RebuildStatistics(array $IDs) { $dbResult = self::GetListEx(array(), array('@ID' => $IDs, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'DATE_CREATE', 'DATE_MODIFY', 'STAGE_ID', 'ASSIGNED_BY_ID', 'BEGINDATE', 'CLOSEDATE', 'CURRENCY_ID', 'OPPORTUNITY', 'UF_*')); if (!is_object($dbResult)) { return; } while ($fields = $dbResult->Fetch()) { $ID = (int) $fields['ID']; //--> History if (!Bitrix\Crm\History\DealStageHistoryEntry::isRegistered($ID)) { $created = isset($fields['DATE_CREATE']) ? $fields['DATE_CREATE'] : ''; $createdTime = null; try { $createdTime = new Bitrix\Main\Type\DateTime($created, Bitrix\Main\Type\DateTime::convertFormatToPhp(FORMAT_DATETIME)); } catch (Bitrix\Main\ObjectException $e) { } $modified = isset($fields['DATE_MODIFY']) ? $fields['DATE_MODIFY'] : ''; $modifiedTime = null; if ($modified !== '') { try { $modifiedTime = new Bitrix\Main\Type\DateTime($modified, Bitrix\Main\Type\DateTime::convertFormatToPhp(FORMAT_DATETIME)); } catch (Bitrix\Main\ObjectException $e) { } } if ($createdTime && $modifiedTime && $createdTime->getTimestamp() !== $modifiedTime->getTimestamp()) { Bitrix\Crm\History\DealStageHistoryEntry::register($ID, $fields, array('IS_NEW' => false, 'TIME' => $modifiedTime)); } elseif ($createdTime) { Bitrix\Crm\History\DealStageHistoryEntry::register($ID, $fields, array('IS_NEW' => true, 'TIME' => $createdTime)); } } //<-- History //--> Statistics if (!Bitrix\Crm\Statistics\DealSumStatisticEntry::isRegistered($ID)) { Bitrix\Crm\Statistics\DealSumStatisticEntry::register($ID, $fields); } if (!Bitrix\Crm\Statistics\DealInvoiceStatisticEntry::isRegistered($ID)) { Bitrix\Crm\Statistics\DealInvoiceStatisticEntry::register($ID, $fields); } $timeline = Bitrix\Crm\Statistics\DealActivityStatisticEntry::prepareTimeline($ID); foreach ($timeline as $date) { Bitrix\Crm\Statistics\DealActivityStatisticEntry::register($ID, $fields, array('DATE' => $date)); } //<-- Statistics } }
if (in_array($abtest['ENABLED'], array('T', 'Y'))) { if ($abtest['ACTIVE'] == 'Y') { $start_date = $abtest['START_DATE']->format(Bitrix\Main\Type\Date::convertFormatToPhp($arLang['FORMAT_DATE'])); $end_date = null; if ($abtest['DURATION'] != 0) { if ($abtest['DURATION'] > 0) { $end = clone $abtest['START_DATE']; $end->add(intval($abtest['DURATION']) . ' days'); $end_date = $end->format(Bitrix\Main\Type\Date::convertFormatToPhp($arLang['FORMAT_DATE'])); } else { $siteCapacity = Bitrix\ABTest\AdminHelper::getSiteCapacity($abtest['SITE_ID']); $testCapacity = Bitrix\ABTest\AdminHelper::getTestCapacity($abtest['ID']); if ($abtest['MIN_AMOUNT'] > 0 && $abtest['PORTION'] > 0 && $siteCapacity['daily'] > 0) { $rem = $abtest['MIN_AMOUNT'] - min($testCapacity); $est = $rem > 0 ? $rem / ($siteCapacity['daily'] / 2) : 0; $end = new Bitrix\Main\Type\DateTime(); $end->add(ceil(100 * $est / $abtest['PORTION']) . ' days'); $end_date = $end->format(Bitrix\Main\Type\Date::convertFormatToPhp($arLang['FORMAT_DATE'])); } else { $end_date = getMessage('ABTEST_DURATION_NA'); } } } $user_name = CUser::formatName(CSite::getNameFormat(), array('TITLE' => $abtest['USER_TITLE'], 'NAME' => $abtest['USER_NAME'], 'SECOND_NAME' => $abtest['USER_SECOND_NAME'], 'LAST_NAME' => $abtest['USER_LAST_NAME'], 'LOGIN' => $abtest['USER_LOGIN']), true, true); $status = '<table style="width: 100%; border-spacing: 0px; "><tr>'; $status .= '<td style="width: 1px; padding: 0px; vertical-align: top; "><img src="/bitrix/images/abtest/ab-test-on.gif"></td>'; $status .= '<td style="padding: 0px 10px; vertical-align: top; ">'; $status .= '<span style="white-space: nowrap; color: #729e00; font-weight: bold; ">' . getMessage('ABTEST_STATE_STARTED') . '</span><br>'; $status .= '<span style="white-space: nowrap; ">' . getMessage('ABTEST_START_DATE') . ': ' . $start_date . '</span><br>'; if ($end_date) { $status .= '<span style="white-space: nowrap; ">' . getMessage('ABTEST_STOP_DATE2') . ': ' . $end_date . '</span><br>';
public static function getDateTimeToDbFunction(\Bitrix\Main\Type\DateTime $value, $type = \Bitrix\Main\Type\DateTime::DATE_WITH_TIME) { $customOffset = $value->getValue()->getOffset(); $serverTime = new \Bitrix\Main\Type\DateTime(); $serverOffset = $serverTime->getValue()->getOffset(); $diff = $customOffset - $serverOffset; $valueTmp = clone $value; $valueTmp->getValue()->sub(new \DateInterval(sprintf("PT%sS", $diff))); $format = $type == \Bitrix\Main\Type\DateTime::DATE_WITHOUT_TIME ? "Y-m-d" : "Y-m-d H:i:s"; $formatDb = $type == \Bitrix\Main\Type\DateTime::DATE_WITHOUT_TIME ? "YYYY-MM-DD" : "YYYY-MM-DD HH24:MI:SS"; $date = "TO_DATE('" . $valueTmp->format($format) . "', '" . $formatDb . "')"; return $date; }
function Update($entity_id, $ID, $arFields, $user_id = false) { global $DB; $result = false; $entity_id = preg_replace("/[^0-9A-Z_]+/", "", $entity_id); $arUpdate = array(); $arBinds = array(); $arInsert = array(); $arInsertType = array(); $arDelete = array(); $arUserFields = $this->GetUserFields($entity_id, $ID, false, $user_id); foreach($arUserFields as $FIELD_NAME=>$arUserField) { if(array_key_exists($FIELD_NAME, $arFields)) { $arUserField['VALUE_ID'] = $ID; if($arUserField["MULTIPLE"] == "N") { if(is_callable(array($arUserField["USER_TYPE"]["CLASS_NAME"], "onbeforesave"))) $arFields[$FIELD_NAME] = call_user_func_array(array($arUserField["USER_TYPE"]["CLASS_NAME"], "onbeforesave"), array($arUserField, $arFields[$FIELD_NAME], $user_id)); if(strlen($arFields[$FIELD_NAME])>0) $arUpdate[$FIELD_NAME] = $arFields[$FIELD_NAME]; else $arUpdate[$FIELD_NAME] = false; } elseif(is_array($arFields[$FIELD_NAME])) { $arInsert[$arUserField["ID"]] = array(); $arInsertType[$arUserField["ID"]] = $arUserField["USER_TYPE"]; if(is_callable(array($arUserField["USER_TYPE"]["CLASS_NAME"], "onbeforesaveall"))) $arInsert[$arUserField["ID"]] = call_user_func_array(array($arUserField["USER_TYPE"]["CLASS_NAME"], "onbeforesaveall"), array($arUserField, $arFields[$FIELD_NAME], $user_id)); else { foreach($arFields[$FIELD_NAME] as $value) { if(is_callable(array($arUserField["USER_TYPE"]["CLASS_NAME"], "onbeforesave"))) $value = call_user_func_array(array($arUserField["USER_TYPE"]["CLASS_NAME"], "onbeforesave"), array($arUserField, $value, $user_id)); if(strlen($value)>0) { switch($arInsertType[$arUserField["ID"]]["BASE_TYPE"]) { case "int": case "file": case "enum": $value = intval($value); break; case "double": $value = doubleval($value); break; case "datetime": //TODO: convert to valid site date/time //$value = $DB->CharToDateFunction($value); break; default: // For SQL will follow $value = substr($value, 0, 2000); } $arInsert[$arUserField["ID"]][] = $value; } } } if ($arUserField['USER_TYPE_ID'] == 'datetime') { $serialized = \Bitrix\Main\UserFieldTable::serializeMultipleDatetime($arInsert[$arUserField["ID"]]); } elseif ($arUserField['USER_TYPE_ID'] == 'date') { $serialized = \Bitrix\Main\UserFieldTable::serializeMultipleDate($arInsert[$arUserField["ID"]]); } else { $serialized = serialize($arInsert[$arUserField["ID"]]); } $arBinds[$FIELD_NAME] = $arUpdate[$FIELD_NAME] = $serialized; $arDelete[$arUserField["ID"]] = true; } } } $lower_entity_id = strtolower($entity_id); if(!empty($arUpdate)) $strUpdate = $DB->PrepareUpdate("b_uts_".$lower_entity_id, $arUpdate); else return $result; if(strlen($strUpdate) > 0) { $result = true; $rs = $DB->QueryBind("UPDATE b_uts_".$lower_entity_id." SET ".$strUpdate." WHERE VALUE_ID = ".intval($ID), $arBinds); $rows = $rs->AffectedRowsCount(); } else { $rows = 0; } if(intval($rows)<=0) { $rs = $DB->Query("SELECT 'x' FROM b_uts_".$lower_entity_id." WHERE VALUE_ID = ".intval($ID), false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); if($rs->Fetch()) $rows = 1; } if($rows <= 0) { $arUpdate["ID"] = $arUpdate["VALUE_ID"] = $ID; $DB->Add("b_uts_".$lower_entity_id, $arUpdate, array_keys($arBinds)); } else { foreach($arDelete as $key=>$value) { $DB->Query("DELETE from b_utm_".$lower_entity_id." WHERE FIELD_ID = ".intval($key)." AND VALUE_ID = ".intval($ID), false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); } } foreach($arInsert as $FieldId=>$arField) { switch($arInsertType[$FieldId]["BASE_TYPE"]) { case "int": case "file": case "enum": $COLUMN = "VALUE_INT"; break; case "double": $COLUMN = "VALUE_DOUBLE"; break; case "datetime": $COLUMN = "VALUE_DATE"; break; default: $COLUMN = "VALUE"; } foreach($arField as $value) { if ($value instanceof \Bitrix\Main\Type\Date) { // little hack to avoid timezone vs 00:00:00 ambiguity. for utm only $value = new \Bitrix\Main\Type\DateTime($value->format('Y-m-d H:i:s'), 'Y-m-d H:i:s'); } switch($arInsertType[$FieldId]["BASE_TYPE"]) { case "int": case "file": case "enum": break; case "double": break; case "datetime": $value = $DB->CharToDateFunction($value); break; default: $value = "'".$DB->ForSql($value)."'"; } $DB->Query("INSERT INTO b_utm_".$lower_entity_id." (VALUE_ID, FIELD_ID, ".$COLUMN.") VALUES (".intval($ID).", '".$FieldId."', ".$value.")", false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); } } return $result; }
public static function RemoveTmpFileAgent() { $storageModel = self::GetStorage(); if (!$storageModel) { return "CIMDisk::RemoveTmpFileAgent();"; } $date = new \Bitrix\Main\Type\DateTime(); $date->add('YESTERDAY'); $fileModels = \Bitrix\Disk\File::getModelList(array('filter' => array('GLOBAL_CONTENT_VERSION' => 1, 'STORAGE_ID' => $storageModel->getId(), '<CREATE_TIME' => $date), 'limit' => 200)); foreach ($fileModels as $fileModel) { $fileModel->delete(\Bitrix\Disk\SystemUser::SYSTEM_USER_ID); } return "CIMDisk::RemoveTmpFileAgent();"; }
public static function ConvertFromDB($arProperty, $value, $format = '') { if (strlen($value["VALUE"]) > 0) { try { $time = new Bitrix\Main\Type\DateTime($value['VALUE'], "Y-m-d H:i:s"); $time->toUserTime(); if ($format === 'SHORT') { $phpFormat = $time->convertFormatToPhp(FORMAT_DATE); } elseif ($format === 'FULL') { $phpFormat = $time->convertFormatToPhp(FORMAT_DATETIME); } elseif ($format) { $phpFormat = $time->convertFormatToPhp($format); } else { $phpFormat = $time->getFormat(); } $value["VALUE"] = $time->format($phpFormat); $value["VALUE"] = str_replace(" 00:00:00", "", $value["VALUE"]); } catch (Bitrix\Main\ObjectException $e) { } } return $value; }
if (!CModule::IncludeModule('voximplant')) { return; } $arResult['NUMBERS'] = CVoxImplantPhone::GetRentNumbers(); $arResult['PAID_BEFORE'] = array('TS' => 0, 'DATE' => '', 'PRICE' => 0, 'NOTICE' => false); foreach ($arResult['NUMBERS'] as $value) { if ($arResult['PAID_BEFORE']['TS'] > $value['PAID_BEFORE_TS'] || $arResult['PAID_BEFORE']['TS'] == 0) { $arResult['PAID_BEFORE']['TS'] = $value['PAID_BEFORE_TS']; $arResult['PAID_BEFORE']['DATE'] = $value['PAID_BEFORE']; $arResult['PAID_BEFORE']['PRICE'] = $value['PRICE']; } else { if ($arResult['PAID_BEFORE']['TS'] == $value['PAID_BEFORE_TS']) { $arResult['PAID_BEFORE']['PRICE'] += $value['PRICE']; } } } $ViAccount = new CVoxImplantAccount(); $arResult['BALANCE_CURRENCY'] = $ViAccount->GetAccountCurrency(); if ($arResult['PAID_BEFORE']['TS'] > 0) { $data = new Bitrix\Main\Type\DateTime(); if ($arResult['PAID_BEFORE']['TS'] <= $data->getTimestamp() + 604800) { $arResult['BALANCE'] = $ViAccount->GetAccountBalance(true); if ($arResult['BALANCE'] < $arResult['PAID_BEFORE']['PRICE']) { $arResult['PAID_BEFORE']['NOTICE'] = 'Y'; } } } if (count($arResult['NUMBERS']) > 0 && !(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) { $this->IncludeComponentTemplate(); } return $arResult;
public static function AddLead($params) { if (!CModule::IncludeModule('crm')) { return false; } if (strlen($params['PHONE_NUMBER']) <= 0 || intval($params['USER_ID']) <= 0) { return false; } $dateNow = new Bitrix\Main\Type\DateTime(); $title = GetMessage($params['INCOMING'] ? 'VI_CRM_CALL_INCOMING' : 'VI_CRM_CALL_OUTGOING'); $arFields = array('TITLE' => $title . ' ' . $dateNow->format('H:i d.m.Y'), 'OPENED' => 'Y', 'PHONE_WORK' => $params['PHONE_NUMBER']); $statuses = CCrmStatus::GetStatusList("SOURCE"); if (isset($statuses['CALL'])) { $arFields['SOURCE_ID'] = 'CALL'; } $portalNumbers = CVoxImplantConfig::GetPortalNumbers(); $portalNumber = isset($portalNumbers[$params['SEARCH_ID']]) ? $portalNumbers[$params['SEARCH_ID']] : ''; if ($portalNumber) { $arFields['SOURCE_DESCRIPTION'] = GetMessage('VI_CRM_CALL_TO_PORTAL_NUMBER', array('#PORTAL_NUMBER#' => $portalNumber)); } $arFields['FM'] = CCrmFieldMulti::PrepareFields($arFields); $CCrmLead = new CCrmLead(false); $ID = $CCrmLead->Add($arFields, true, array('CURRENT_USER' => $params['USER_ID'], 'DISABLE_USER_FIELD_CHECK' => true)); $arErrors = array(); CCrmBizProcHelper::AutoStartWorkflows(CCrmOwnerType::Lead, $ID, CCrmBizProcEventType::Create, $arErrors); CVoxImplantHistory::WriteToLog($arFields, 'LEAD CREATED'); return $ID; }
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)); } }
public static function getFormatDate($value) { if (!is_set($value)) { return null; } $setValue = $value; if ($value instanceof DateTime || $value instanceof Date) { $setValue = $value->toString(); } /** @var \Bitrix\Main\Type\DateTime $time */ $time = new Bitrix\Main\Type\DateTime($setValue); if (self::getVersionSchema() >= self::PARTIAL_VERSION) { $format = 'Y-m-d\\TH:i:s'; } else { $format = 'd.m.Y H:i:s'; } return $time->format($format); }
public static function Delete($ID, $checkPerms = true, $regEvent = true, $options = array()) { $ID = intval($ID); if (!is_array($options)) { $options = array(); } $events = GetModuleEvents('crm', 'OnBeforeActivityDelete'); while ($event = $events->Fetch()) { if (ExecuteModuleEventEx($event, array($ID)) === false) { return false; } } $ary = isset($options['ACTUAL_ITEM']) && is_array($options['ACTUAL_ITEM']) ? $options['ACTUAL_ITEM'] : self::GetByID($ID, $checkPerms); if (!is_array($ary)) { return false; //is not found } $arBindings = isset($options['ACTUAL_BINDINGS']) && is_array($options['ACTUAL_BINDINGS']) ? $options['ACTUAL_BINDINGS'] : self::GetBindings($ID); if (!self::InnerDelete($ID, $options)) { return false; } self::UnregisterLiveFeedEvent($ID); CCrmSonetSubscription::UnRegisterSubscriptionByEntity(CCrmOwnerType::Activity, $ID); // Synchronize user activity --> $skipUserActivitySync = isset($options['SKIP_USER_ACTIVITY_SYNC']) ? $options['SKIP_USER_ACTIVITY_SYNC'] : false; if (!$skipUserActivitySync) { $responsibleID = isset($ary['RESPONSIBLE_ID']) ? intval($ary['RESPONSIBLE_ID']) : 0; if ($responsibleID > 0 && is_array($arBindings)) { foreach ($arBindings as &$arBinding) { self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], $responsibleID); self::SynchronizeUserActivity($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], 0); } unset($arBinding); } } // <-- Synchronize user activity if (is_array($arBindings)) { if ($regEvent) { foreach ($arBindings as &$arBinding) { self::RegisterRemoveEvent($arBinding['OWNER_TYPE_ID'], $arBinding['OWNER_ID'], $ary, $checkPerms); } unset($arBinding); } $skipStatistics = isset($options['SKIP_STATISTICS']) ? $options['SKIP_STATISTICS'] : false; if (!$skipStatistics) { $completed = isset($ary['COMPLETED']) && $ary['COMPLETED'] === 'Y'; $deadline = isset($ary['DEADLINE']) ? $ary['DEADLINE'] : ''; if ($completed && $deadline) { $deadline = new \Bitrix\Main\Type\DateTime($deadline); $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); } } } $skipAssocEntity = isset($options['SKIP_ASSOCIATED_ENTITY']) ? (bool) $options['SKIP_ASSOCIATED_ENTITY'] : false; if (!$skipAssocEntity && isset($ary['TYPE_ID']) && isset($ary['ASSOCIATED_ENTITY_ID'])) { switch (intval($ary['TYPE_ID'])) { case CCrmActivityType::Call: case CCrmActivityType::Meeting: self::DeleteCalendarEvent($ary); break; case CCrmActivityType::Task: self::DeleteTask($ary); break; case CCrmActivityType::Email: //do nothing break; } } $rsEvents = GetModuleEvents('crm', 'OnActivityDelete'); while ($arEvent = $rsEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID)); } if (defined("BX_COMP_MANAGED_CACHE")) { $GLOBALS["CACHE_MANAGER"]->ClearByTag("CRM_ACTIVITY_" . $ID); } return true; }
public static function fdmMultipleTrimmedDateTime($value, $query, $dataRow, $columnAlias) { $result = array(); if (is_array($value)) { foreach ($value as $v) { if (!empty($v)) { try { //try new independent datetime format $v = new Bitrix\Main\Type\DateTime($v, \Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT); } catch (Main\ObjectException $e) { //try site format try { $v = new Bitrix\Main\Type\DateTime($v); } catch (Main\ObjectException $e) { //try short format $v = Bitrix\Main\Type\DateTime::createFromUserTime($v); } } $result[] = $v; } } } return $result; }
/** * The agent function. Moves reserved quantity back to the quantity field for each product * for orders which were placed earlier than specific date * * @return agent name string */ public static function ClearProductReservedQuantity() { global $DB, $USER; if (!is_object($USER)) { $USER = new CUser(); } $days_ago = (int) COption::GetOptionString("sale", "product_reserve_clear_period"); if ($days_ago > 0) { $shipmentList = array(); $date = new \Bitrix\Main\Type\DateTime(); $filter = array('filter' => array("<=DATE_INSERT" => $date->add('-' . $days_ago . ' day'), "=SHIPMENT.RESERVED" => "Y", "=SHIPMENT.DEDUCTED" => "N", "=SHIPMENT.MARKED" => "N", "=SHIPMENT.ALLOW_DELIVERY" => "N", "=PAYED" => "N", "=CANCELED" => "N"), 'select' => array("ID", "SHIPMENT_ID" => "SHIPMENT.ID", "SHIPMENT_RESERVED" => "SHIPMENT.RESERVED", "SHIPMENT_DEDUCTED" => "SHIPMENT.DEDUCTED", "DATE_INSERT", "PAYED", "CANCELED", "MARKED")); $res = \Bitrix\Sale\Internals\OrderTable::getList($filter); while ($data = $res->fetch()) { if (!array_key_exists($data['ID'], $shipmentList)) { $shipmentList[$data['ID']] = array(); } if (in_array($data['SHIPMENT_ID'], $shipmentList[$data['ID']])) { continue; } $shipmentList[$data['ID']][] = $data['SHIPMENT_ID']; } if (!empty($shipmentList)) { foreach ($shipmentList as $orderId => $shipmentData) { /** @var Sale\Order $order */ $order = Sale\Order::load($orderId); $orderSaved = false; $errors = array(); try { /** @var Sale\ShipmentCollection $shipmentCollection */ if ($shipmentCollection = $order->getShipmentCollection()) { foreach ($shipmentData as $shipmentId) { /** @var Sale\Shipment $shipment */ if ($shipment = $shipmentCollection->getItemById($shipmentId)) { $r = $shipment->tryUnreserve(); if (!$r->isSuccess()) { if (!$shipment->isMarked()) { $shipment->setField('MARKED', 'Y'); if (is_array($r->getErrorMessages())) { $oldErrorText = $shipment->getField('REASON_MARKED'); foreach ($r->getErrorMessages() as $error) { $oldErrorText .= (strval($oldErrorText) != '' ? "\n" : "") . $error; } $shipment->setField('REASON_MARKED', $oldErrorText); } } } } } } $r = $order->save(); if ($r->isSuccess()) { $orderSaved = true; } else { $errors = $r->getErrorMessages(); } } catch (Exception $e) { $errors[] = $e->getMessage(); } if (!$orderSaved) { if (!empty($errors)) { $oldErrorText = $order->getField('REASON_MARKED'); foreach ($errors as $error) { $oldErrorText .= (strval($oldErrorText) != '' ? "\n" : "") . $error; } Sale\Internals\OrderTable::update($order->getId(), array("MARKED" => "Y", "REASON_MARKED" => $oldErrorText)); } } } } } return "CSaleOrder::ClearProductReservedQuantity();"; }
protected function changeResponsibleUserAction() { if (!isset($this->request['user_id']) || intval($this->request['user_id']) <= 0) { throw new ArgumentNullException("user_id"); } global $USER; $dateResponsible = new \Bitrix\Main\Type\DateTime(); $userInformation = $USER->GetByID($this->request['user_id'])->Fetch(); $this->addResultData("RESPONSIBLE", array(htmlspecialcharsbx($userInformation['NAME']), htmlspecialcharsbx($userInformation['LAST_NAME']))); $this->addResultData("EMP_RESPONSIBLE", array(htmlspecialcharsbx($USER->GetFirstName()), htmlspecialcharsbx($USER->GetLastName()))); $this->addResultData("DATE_RESPONSIBLE", $dateResponsible->toString()); }
public static function GetConfigBySearchId($searchId) { if (strlen($searchId) <= 0) { return array('ERROR' => 'Config is`t found for undefined number'); } $orm = VI\ConfigTable::getList(array('filter' => array('=SEARCH_ID' => (string) $searchId))); $config = $orm->fetch(); if (!$config) { $result = array('ERROR' => 'Config is`t found for number: ' . $searchId); } else { $result = $config; $result['PHONE_TITLE'] = $result['PHONE_NAME']; if ($result['PORTAL_MODE'] == self::MODE_SIP) { $viSip = new CVoxImplantSip(); $sipResult = $viSip->Get($config["ID"]); $result['PHONE_NAME'] = preg_replace("/[^0-9\\#\\*]/i", "", $result['PHONE_NAME']); $result['PHONE_NAME'] = strlen($result['PHONE_NAME']) >= 4 ? $result['PHONE_NAME'] : ''; $result['SIP_SERVER'] = $sipResult ? $sipResult['SERVER'] : ''; $result['SIP_LOGIN'] = $sipResult ? $sipResult['LOGIN'] : ''; $result['SIP_PASSWORD'] = $sipResult ? $sipResult['PASSWORD'] : ''; } if (strlen($result['FORWARD_NUMBER']) > 0) { $result["FORWARD_NUMBER"] = NormalizePhone($result['FORWARD_NUMBER'], 1); } if (strlen($result['WORKTIME_DAYOFF_NUMBER']) > 0) { $result["WORKTIME_DAYOFF_NUMBER"] = NormalizePhone($result['WORKTIME_DAYOFF_NUMBER'], 1); } // check work time $result['WORKTIME_SKIP_CALL'] = 'N'; if ($config['WORKTIME_ENABLE'] == 'Y') { $timezone = !empty($config["WORKTIME_TIMEZONE"]) ? new DateTimeZone($config["WORKTIME_TIMEZONE"]) : null; $numberDate = new Bitrix\Main\Type\DateTime(null, null, $timezone); if (!empty($config['WORKTIME_DAYOFF'])) { $daysOff = explode(",", $config['WORKTIME_DAYOFF']); $allWeekDays = array('MO' => 1, 'TU' => 2, 'WE' => 3, 'TH' => 4, 'FR' => 5, 'SA' => 6, 'SU' => 7); $currentWeekDay = $numberDate->format('N'); foreach ($daysOff as $day) { if ($currentWeekDay == $allWeekDays[$day]) { $result['WORKTIME_SKIP_CALL'] = "Y"; } } } if ($result['WORKTIME_SKIP_CALL'] !== "Y" && !empty($config['WORKTIME_HOLIDAYS'])) { $holidays = explode(",", $config['WORKTIME_HOLIDAYS']); $currentDay = $numberDate->format('d.m'); foreach ($holidays as $holiday) { if ($currentDay == $holiday) { $result['WORKTIME_SKIP_CALL'] = "Y"; } } } if ($result['WORKTIME_SKIP_CALL'] !== "Y" && !empty($config['WORKTIME_FROM']) && !empty($config['WORKTIME_TO'])) { $currentTime = $numberDate->format('G.i'); if (!($currentTime >= $config['WORKTIME_FROM'] && $currentTime <= $config['WORKTIME_TO'])) { $result['WORKTIME_SKIP_CALL'] = "Y"; } } if ($result['WORKTIME_SKIP_CALL'] === "Y") { $result['WORKTIME_DAYOFF_MELODY'] = CVoxImplantConfig::GetMelody('WORKTIME_DAYOFF_MELODY', $config['MELODY_LANG'], $config['WORKTIME_DAYOFF_MELODY']); } } if (CVoxImplantHttp::GetPortalType() == CVoxImplantHttp::TYPE_BITRIX24) { $result['PORTAL_URL'] = CVoxImplantHttp::GetServerAddress() . '/settings/info_receiver.php?b24_action=phone&b24_direct=y'; } else { $result['PORTAL_URL'] = CVoxImplantHttp::GetServerAddress() . '/services/telephony/info_receiver.php?b24_direct=y'; } $result['PORTAL_SIGN'] = CVoxImplantHttp::GetPortalSign(); $result['MELODY_WELCOME'] = CVoxImplantConfig::GetMelody('MELODY_WELCOME', $config['MELODY_LANG'], $config['MELODY_WELCOME']); $result['MELODY_VOICEMAIL'] = CVoxImplantConfig::GetMelody('MELODY_VOICEMAIL', $config['MELODY_LANG'], $config['MELODY_VOICEMAIL']); $result['MELODY_HOLD'] = CVoxImplantConfig::GetMelody('MELODY_HOLD', $config['MELODY_LANG'], $config['MELODY_HOLD']); $result['MELODY_WAIT'] = CVoxImplantConfig::GetMelody('MELODY_WAIT', $config['MELODY_LANG'], $config['MELODY_WAIT']); } return $result; }
public static function EnqueueDeactivatePhoneNumber($number) { $result = VI\ConfigTable::getList(array('select' => array('ID'), 'filter' => array('=SEARCH_ID' => (string) $number))); $config = $result->fetch(); if (!$config) { return false; } $viHttp = new CVoxImplantHttp(); $result = $viHttp->DeactivatePhoneNumber($number); if (!$result) { return false; } $date = new Bitrix\Main\Type\DateTime(); $date->add('23 HOUR'); VI\ConfigTable::update($config['ID'], array('TO_DELETE' => 'Y', 'DATE_DELETE' => $date)); CAgent::AddAgent("CVoxImplantPhone::CheckDeleteAgent(" . $config['ID'] . ");", "voximplant", "N", 82810, "", "Y", $date); return $result; }