Example #1
1
 /**
  * @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;
     }
 }
Example #3
0
 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;
     }
 }
Example #5
0
 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));
 }
Example #6
0
 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;
 }
Example #8
0
    $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];
    }
Example #9
0
 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;
 }
Example #10
0
	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;
	}
Example #11
0
 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
     }
 }
Example #12
0
 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>';
Example #13
0
 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;
 }
Example #14
0
	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;
	}
Example #15
0
 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();";
 }
Example #16
0
 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;
 }
Example #17
0
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;
Example #18
0
 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;
 }
Example #19
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));
     }
 }
Example #20
0
 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);
 }
Example #21
0
 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;
 }
Example #22
0
 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;
 }
Example #23
0
 /**
  * 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();";
 }
Example #24
0
 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());
 }
Example #25
0
 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;
 }
Example #26
0
 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;
 }