Exemplo n.º 1
0
 function InstallDB($arParams = array())
 {
     global $DB, $DBType, $APPLICATION;
     $this->errors = false;
     // Database tables creation
     if (!$DB->Query("SELECT 'x' FROM b_list_rubric WHERE 1=0", true)) {
         $this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/subscribe/install/db/" . $DBType . "/install.sql");
     }
     if ($this->errors !== false) {
         $APPLICATION->ThrowException(implode("<br>", $this->errors));
         return false;
     } else {
         RegisterModule("subscribe");
         CModule::IncludeModule("subscribe");
         RegisterModuleDependences("main", "OnBeforeLangDelete", "subscribe", "CRubric", "OnBeforeLangDelete");
         RegisterModuleDependences("main", "OnUserDelete", "subscribe", "CSubscription", "OnUserDelete");
         RegisterModuleDependences("main", "OnUserLogout", "subscribe", "CSubscription", "OnUserLogout");
         RegisterModuleDependences("main", "OnGroupDelete", "subscribe", "CPosting", "OnGroupDelete");
         //agents
         CAgent::RemoveAgent("CSubscription::CleanUp();", "subscribe");
         CTimeZone::Disable();
         CAgent::Add(array("NAME" => "CSubscription::CleanUp();", "MODULE_ID" => "subscribe", "ACTIVE" => "Y", "NEXT_EXEC" => date("d.m.Y H:i:s", mktime(3, 0, 0, date("m"), date("j") + 1, date("Y"))), "AGENT_INTERVAL" => 86400, "IS_PERIOD" => "Y"));
         CTimeZone::Enable();
         return true;
     }
 }
Exemplo n.º 2
0
 function sendOnAfterResultStatusChange($WEB_FORM_ID, $RESULT_ID, $NEW_STATUS_ID = false, $CHECK_RIGHTS = 'Y')
 {
     $NEW_STATUS_ID = intval($NEW_STATUS_ID);
     $dbRes = CForm::GetByID($WEB_FORM_ID);
     if (!($arForm = $dbRes->Fetch())) {
         return;
     }
     CTimeZone::Disable();
     $dbRes = CFormResult::GetByID($RESULT_ID);
     CTimeZone::Enable();
     if (!($arResult = $dbRes->Fetch()) || !$arResult['USER_ID']) {
         return;
     }
     $dbRes = CUser::GetByID($arResult['USER_ID']);
     if (!($arUser = $dbRes->Fetch())) {
         return;
     }
     if (!$NEW_STATUS_ID) {
         $NEW_STATUS_ID = CFormStatus::GetDefault($WEB_FORM_ID);
     }
     $dbRes = CFormStatus::GetByID($NEW_STATUS_ID);
     if (!($arStatus = $dbRes->Fetch()) || strlen($arStatus['MAIL_EVENT_TYPE']) <= 0) {
         return;
     }
     $arTemplates = CFormStatus::GetMailTemplateArray($NEW_STATUS_ID);
     if (!is_array($arTemplates) || count($arTemplates) <= 0) {
         return;
     }
     $arEventFields = array("EMAIL_TO" => $arUser['EMAIL'], "RS_FORM_ID" => $arForm["ID"], "RS_FORM_NAME" => $arForm["NAME"], "RS_FORM_VARNAME" => $arForm["SID"], "RS_FORM_SID" => $arForm["SID"], "RS_RESULT_ID" => $arResult["ID"], "RS_DATE_CREATE" => $arResult["DATE_CREATE"], "RS_USER_ID" => $arResult['USER_ID'], "RS_USER_EMAIL" => $arUser['EMAIL'], "RS_USER_NAME" => $arUser["NAME"] . " " . $arUser["LAST_NAME"], "RS_STATUS_ID" => $arStatus["ID"], "RS_STATUS_NAME" => $arStatus["TITLE"]);
     $dbRes = CEventMessage::GetList($by = "id", $order = "asc", array('ID' => implode('|', $arTemplates), "ACTIVE" => "Y", "EVENT_NAME" => $arStatus["MAIL_EVENT_TYPE"]));
     while ($arTemplate = $dbRes->Fetch()) {
         CEvent::Send($arTemplate["EVENT_NAME"], $arTemplate["SITE_ID"], $arEventFields, "Y", $arTemplate["ID"]);
     }
 }
Exemplo n.º 3
0
 public static function Add($userId, $tag)
 {
     global $DB, $CACHE_MANAGER;
     $userId = intval($userId);
     if ($userId == 0 || strlen($tag) <= 0) {
         return false;
     }
     $arResult = $CACHE_MANAGER->Read(3600, $cache_id = "b_pw_" . $userId, "b_pull_watch");
     if ($arResult) {
         $arResult = $CACHE_MANAGER->Get($cache_id);
     }
     if (!$arResult) {
         CTimeZone::Disable();
         $strSql = "\n\t\t\t\t\tSELECT ID, USER_ID, TAG, " . $DB->DatetimeToTimestampFunction("DATE_CREATE") . " DATE_CREATE\n\t\t\t\t\tFROM b_pull_watch\n\t\t\t\t\tWHERE USER_ID = " . intval($userId) . "\n\t\t\t";
         CTimeZone::Enable();
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         while ($arRes = $dbRes->Fetch()) {
             $arResult[$arRes["TAG"]] = $arRes;
         }
         $CACHE_MANAGER->Set($cache_id, $arResult);
     }
     if ($arResult && $arResult[$tag]) {
         if ($arResult[$tag]['DATE_CREATE'] + 1800 > time()) {
             self::$arUpdate[intval($arResult[$tag]['ID'])] = intval($arResult[$tag]['ID']);
             return true;
         } else {
             self::Delete($userId, $tag);
             return self::Add($userId, $tag);
         }
     }
     $CACHE_MANAGER->Clean("b_pw_" . $userId, "b_pull_watch");
     self::$arInsert[trim($tag)] = trim($tag);
     return true;
 }
 public function SubscribeOnTime($workflowId, $eventName, $expiresAt)
 {
     CTimeZone::Disable();
     $result = CAgent::AddAgent("CBPSchedulerService::OnAgent('" . $workflowId . "', '" . $eventName . "', array('SchedulerService' => 'OnAgent'));", "bizproc", "N", 10, "", "Y", date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $expiresAt));
     CTimeZone::Enable();
     return $result;
 }
Exemplo n.º 5
0
 function InstallDB($arParams = array())
 {
     global $DB, $DBType, $APPLICATION;
     $this->errors = false;
     // Database tables creation
     if (!$DB->Query("SELECT 'x' FROM b_sender_contact WHERE 1=0", true)) {
         $this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sender/install/db/" . $DBType . "/install.sql");
     }
     if ($this->errors !== false) {
         $APPLICATION->ThrowException(implode("<br>", $this->errors));
         return false;
     } else {
         RegisterModule("sender");
         CModule::IncludeModule("sender");
         // read and click notifications
         RegisterModuleDependences("main", "OnMailEventMailRead", "sender", "bitrix\\sender\\postingmanager", "onMailEventMailRead");
         RegisterModuleDependences("main", "OnMailEventMailClick", "sender", "bitrix\\sender\\postingmanager", "onMailEventMailClick");
         // unsubscription notifications
         RegisterModuleDependences("main", "OnMailEventSubscriptionDisable", "sender", "Bitrix\\Sender\\Subscription", "onMailEventSubscriptionDisable");
         RegisterModuleDependences("main", "OnMailEventSubscriptionEnable", "sender", "Bitrix\\Sender\\Subscription", "onMailEventSubscriptionEnable");
         RegisterModuleDependences("main", "OnMailEventSubscriptionList", "sender", "Bitrix\\Sender\\Subscription", "onMailEventSubscriptionList");
         // connectors of module sender
         RegisterModuleDependences("sender", "OnConnectorList", "sender", "bitrix\\sender\\connectormanager", "onConnectorListContact");
         RegisterModuleDependences("sender", "OnConnectorList", "sender", "bitrix\\sender\\connectormanager", "onConnectorListRecipient");
         // mail templates and blocks
         RegisterModuleDependences("sender", "OnPresetTemplateList", "sender", "Bitrix\\Sender\\Preset\\TemplateBase", "onPresetTemplateList");
         RegisterModuleDependences("sender", "OnPresetTemplateList", "sender", "Bitrix\\Sender\\TemplateTable", "onPresetTemplateList");
         RegisterModuleDependences("sender", "OnPresetMailBlockList", "sender", "Bitrix\\Sender\\Preset\\MailBlockBase", "OnPresetMailBlockList");
         CTimeZone::Disable();
         \Bitrix\Sender\MailingManager::actualizeAgent();
         CAgent::AddAgent(\Bitrix\Sender\MailingManager::getAgentNamePeriod(), "sender", "N", COption::GetOptionString("sender", "reiterate_interval"));
         CTimeZone::Enable();
         return true;
     }
 }
Exemplo n.º 6
0
	public static function Get($userId, $reOpen = false)
	{
		global $DB;
		$nginxStatus = CPullOptions::GetNginxStatus();
		$webSocketStatus = CPullOptions::GetWebSocketStatus();

		CTimeZone::Disable();
		$strSql = "
				SELECT CHANNEL_ID, LAST_ID, ".$DB->DateToCharFunction('DATE_CREATE')." DATE_CREATE
				FROM b_pull_channel
				WHERE USER_ID = ".intval($userId);
		CTimeZone::Enable();

		$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
		if ($arRes = $dbRes->Fetch())
		{
			if (MakeTimeStamp($arRes['DATE_CREATE'])+43200 > time())
			{
				if ($nginxStatus && $reOpen)
				{
					$arData = Array(
						'module_id' => 'pull',
						'command' => 'reopen',
						'params' => Array(),
					);
					$channelId = $arRes['CHANNEL_ID'];
					$CHTTP = new CHTTP();
					$CHTTP->http_timeout = 10;
					$CHTTP->HTTPQuery('POST', CPullOptions::GetPublishUrl($channelId), CUtil::PhpToJsObject(Array('MESSAGE' => Array($arData), 'ERROR' => '')));
				}

				return Array(
					'CHANNEL_ID' => $arRes['CHANNEL_ID'],
					'CHANNEL_DT' => MakeTimeStamp($arRes['DATE_CREATE']),
					'LAST_ID' => intval($arRes['LAST_ID']),
					'PATH' => ($nginxStatus? CPullOptions::GetListenUrl($arRes['CHANNEL_ID']): '/bitrix/components/bitrix/pull.request/ajax.php'),
					'PATH_WS' => ($nginxStatus && $webSocketStatus? CPullOptions::GetWebSocketUrl($arRes['CHANNEL_ID']): ''),
					'METHOD' => ($nginxStatus? 'LONG': 'PULL'),
				);
			}
			else
			{
				self::Delete($arRes['CHANNEL_ID']);
			}
		}

		$channelId = self::Add($userId);
		return $channelId? Array(
			'CHANNEL_ID' => $channelId,
			'CHANNEL_DT' => time(),
			'LAST_ID' => 0,
			'PATH' => ($nginxStatus? CPullOptions::GetListenUrl($channelId): '/bitrix/components/bitrix/pull.request/ajax.php'),
			'PATH_WS' => ($nginxStatus && $webSocketStatus? CPullOptions::GetWebSocketUrl($channelId): ''),
			'METHOD' => ($nginxStatus? 'LONG': 'PULL')
		): false;
	}
Exemplo n.º 7
0
 function _AttemptExists($testID, $attemptID = false)
 {
     $arFields = array("STUDENT_ID" => intval($GLOBALS["USER"]->GetID()), "TEST_ID" => $testID, "STATUS" => array("B", "N"));
     if ($attemptID !== false) {
         $arFields["ID"] = $attemptID;
     }
     CTimeZone::Disable();
     $rsAttempt = CTestAttempt::GetList(array(), $arFields);
     CTimeZone::Enable();
     return $rsAttempt->GetNext();
 }
Exemplo n.º 8
0
 public function SubscribeOnTime($workflowId, $eventName, $expiresAt)
 {
     CTimeZone::Disable();
     $workflowId = preg_replace('#[^a-z0-9.]#i', '', $workflowId);
     $eventName = preg_replace('#[^a-z0-9._-]#i', '', $eventName);
     $minExpiresAt = time() + static::getDelayMinLimit(false);
     if ($minExpiresAt > $expiresAt) {
         $expiresAt = $minExpiresAt;
     }
     $result = CAgent::AddAgent("CBPSchedulerService::OnAgent('" . $workflowId . "', '" . $eventName . "', array('SchedulerService' => 'OnAgent'));", "bizproc", "N", 10, "", "Y", date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME), $expiresAt));
     CTimeZone::Enable();
     return $result;
 }
Exemplo n.º 9
0
 public static function IsHistoryUpdate($documentID)
 {
     static $arHistoryFields = array("ID", "DOCUMENT_ID", "MODIFIED", "DOCUMENT");
     $historyService = self::GetHistoryService();
     $result = false;
     if (self::IsGlueEnabled()) {
         $arFilter = array("DOCUMENT_ID" => $documentID, "USER_ID" => CUser::GetID());
         $dbDoc = $historyService->GetHistoryList(array("ID" => "DESC"), $arFilter, false, false, $arHistoryFields);
         CTimeZone::Disable();
         if ($dbDoc && ($arDoc = $dbDoc->Fetch())) {
             CTimeZone::Enable();
             if (CWebdavDocumentHistory::GetHistoryState($documentID, $arDoc['ID'], $arDoc) == 'Y') {
                 $result = $arDoc;
             }
         } else {
             CTimeZone::Enable();
         }
     }
     return $result;
 }
Exemplo n.º 10
0
 public function checkDatabaseServerTime($secondsDrift = 600)
 {
     global $DB;
     CTimeZone::Disable();
     $sql = "select " . $DB->DateFormatToDB("YYYY-MM-DD HH:MI:SS", $DB->GetNowFunction()) . " DB_TIME from b_user";
     $query = $DB->Query($DB->TopSql($sql, 1));
     $record = $query->Fetch();
     CTimeZone::Enable();
     $dbTime = $record ? MakeTimeStamp($record["DB_TIME"], "YYYY-MM-DD HH:MI:SS") : 0;
     $webTime = time();
     if ($dbTime) {
         if ($dbTime > $webTime + $secondsDrift) {
             return false;
         } elseif ($dbTime < $webTime - $secondsDrift) {
             return false;
         } else {
             return true;
         }
     }
     return true;
 }
Exemplo n.º 11
0
 public static function Update($ID, $arFields)
 {
     global $DB;
     $e = GetModuleEvents('timeman', 'OnBeforeTMReportDailyUpdate');
     while ($a = $e->Fetch()) {
         if (false === ExecuteModuleEventEx($a, array(&$arFields))) {
             return false;
         }
     }
     if (!self::CheckFields('UPDATE', $arFields)) {
         return false;
     }
     CTimeZone::Disable();
     $strUpdate = $DB->PrepareUpdate('b_timeman_report_daily', $arFields);
     CTimeZone::Enable();
     $query = 'UPDATE b_timeman_report_daily SET ' . $strUpdate . ' WHERE ID=\'' . intval($ID) . '\'';
     if (($dbRes = $DB->Query($query)) && $dbRes->AffectedRowsCount() > 0) {
         $arBinds = array();
         if (isset($arFields['REPORT'])) {
             $arBinds['REPORT'] = $arFields['REPORT'];
         }
         if (isset($arFields['TASKS'])) {
             $arBinds['TASKS'] = $arFields['TASKS'];
         }
         if (isset($arFields['EVENTS'])) {
             $arBinds['EVENTS'] = $arFields['EVENTS'];
         }
         if (count($arBinds) > 0) {
             $DB->QueryBind($query, $arBinds);
         }
         $e = GetModuleEvents('timeman', 'OnAfterTMReportDailyUpdate');
         while ($a = $e->Fetch()) {
             ExecuteModuleEventEx($a, array($ID, $arFields));
         }
         return $ID;
     }
     return false;
 }
Exemplo n.º 12
0
 public function GetUnreadMessage($arParams = array())
 {
     global $DB;
     $bSpeedCheck = isset($arParams['SPEED_CHECK']) && $arParams['SPEED_CHECK'] == 'N' ? false : true;
     $lastId = !isset($arParams['LAST_ID']) || $arParams['LAST_ID'] == null ? null : IntVal($arParams['LAST_ID']);
     $order = isset($arParams['ORDER']) && $arParams['ORDER'] == 'ASC' ? 'ASC' : 'DESC';
     $loadDepartment = isset($arParams['LOAD_DEPARTMENT']) && $arParams['LOAD_DEPARTMENT'] == 'N' ? false : true;
     $bTimeZone = isset($arParams['USE_TIME_ZONE']) && $arParams['USE_TIME_ZONE'] == 'N' ? false : true;
     $bGroupByChat = isset($arParams['GROUP_BY_CHAT']) && $arParams['GROUP_BY_CHAT'] == 'Y' ? true : false;
     $bUserLoad = isset($arParams['USER_LOAD']) && $arParams['USER_LOAD'] == 'N' ? false : true;
     $bFileLoad = isset($arParams['FILE_LOAD']) && $arParams['FILE_LOAD'] == 'N' ? false : true;
     $arExistUserData = isset($arParams['EXIST_USER_DATA']) && is_array($arParams['EXIST_USER_DATA']) ? $arParams['EXIST_USER_DATA'] : array();
     $messageType = isset($arParams['MESSAGE_TYPE']) && in_array($arParams['MESSAGE_TYPE'], array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT)) ? $arParams['MESSAGE_TYPE'] : 'ALL';
     $arMessages = array();
     $arUnreadMessage = array();
     $arUsersMessage = array();
     $arResult = array('message' => array(), 'unreadMessage' => array(), 'usersMessage' => array(), 'users' => array(), 'userInGroup' => array(), 'woUserInGroup' => array(), 'files' => array(), 'countMessage' => 0, 'chat' => array(), 'userChatBlockStatus' => array(), 'userInChat' => array(), 'result' => false);
     $bLoadMessage = $bSpeedCheck ? CIMMessenger::SpeedFileExists($this->user_id, IM_SPEED_GROUP) : false;
     $count = CIMMessenger::SpeedFileGet($this->user_id, IM_SPEED_GROUP);
     if (!$bLoadMessage || $bLoadMessage && intval($count) > 0) {
         $ssqlLastId = "R1.LAST_ID";
         $ssqlStatus = " AND R1.STATUS < " . IM_STATUS_READ;
         if (!is_null($lastId) && intval($lastId) > 0 && !CIMMessenger::CheckXmppStatusOnline()) {
             $ssqlLastId = intval($lastId);
             $ssqlStatus = "";
         }
         $arRelations = array();
         if (strlen($ssqlStatus) > 0) {
             $strSql = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tR1.USER_ID,\n\t\t\t\t\t\tR1.CHAT_ID,\n\t\t\t\t\t\tR1.LAST_ID\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_im_relation R1\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tR1.USER_ID = " . $this->user_id . "\n\t\t\t\t\t\t" . ($messageType == 'ALL' ? "AND R1.MESSAGE_TYPE IN ('" . IM_MESSAGE_OPEN . "','" . IM_MESSAGE_CHAT . "')" : "AND R1.MESSAGE_TYPE = '" . $messageType . "'") . "\n\t\t\t\t\t\t" . $ssqlStatus . "\n\t\t\t\t";
             $dbSubRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             while ($arRes = $dbSubRes->Fetch()) {
                 $arRelations[] = $arRes;
             }
         }
         $arMessageId = array();
         $arMessageChatId = array();
         $arLastMessage = array();
         $arMark = array();
         $arChat = array();
         $arPrepareResult = array();
         $arFilteredResult = array();
         if (!empty($arRelations)) {
             if (!$bTimeZone) {
                 CTimeZone::Disable();
             }
             $strSql = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tM.ID,\n\t\t\t\t\t\tM.CHAT_ID,\n\t\t\t\t\t\tM.MESSAGE,\n\t\t\t\t\t\t" . $DB->DatetimeToTimestampFunction('M.DATE_CREATE') . " DATE_CREATE,\n\t\t\t\t\t\tM.AUTHOR_ID,\n\t\t\t\t\t\tR1.STATUS R1_STATUS,\n\t\t\t\t\t\tR1.MESSAGE_TYPE MESSAGE_TYPE\n\t\t\t\t\tFROM b_im_message M\n\t\t\t\t\tINNER JOIN b_im_relation R1 ON M.ID > " . $ssqlLastId . " AND M.CHAT_ID = R1.CHAT_ID AND R1.USER_ID != M.AUTHOR_ID\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tR1.USER_ID = " . $this->user_id . "\n\t\t\t\t\t\t" . ($messageType == 'ALL' ? "AND R1.MESSAGE_TYPE IN ('" . IM_MESSAGE_OPEN . "','" . IM_MESSAGE_CHAT . "')" : "AND R1.MESSAGE_TYPE = '" . $messageType . "'") . "\n\t\t\t\t\t\t" . $ssqlStatus . "\n\t\t\t\t";
             if (!$bTimeZone) {
                 CTimeZone::Enable();
             }
             $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             $CCTP = new CTextParser();
             $CCTP->MaxStringLen = 200;
             $CCTP->allow = array("HTML" => "N", "ANCHOR" => $this->bHideLink ? "N" : "Y", "BIU" => "Y", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => $this->bHideLink ? "N" : "Y", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N");
             while ($arRes = $dbRes->Fetch()) {
                 $arPrepareResult[$arRes['CHAT_ID']][$arRes['ID']] = $arRes;
             }
             foreach ($arPrepareResult as $chatId => $arRes) {
                 if (count($arPrepareResult[$chatId]) > 100) {
                     $arPrepareResult[$chatId] = array_slice($arRes, -100, 100);
                 }
                 $arFilteredResult = array_merge($arFilteredResult, $arPrepareResult[$chatId]);
             }
             unset($arPrepareResult);
         }
         foreach ($arFilteredResult as $arRes) {
             $arUsers[] = $arRes['AUTHOR_ID'];
             $arMessages[$arRes['ID']] = array('id' => $arRes['ID'], 'chatId' => $arRes['CHAT_ID'], 'senderId' => $arRes['AUTHOR_ID'], 'recipientId' => $arRes['CHAT_ID'], 'date' => $arRes['DATE_CREATE'], 'text' => $arRes['MESSAGE'], 'messageType' => $arRes['MESSAGE_TYPE']);
             if ($bGroupByChat) {
                 $arMessages[$arRes['ID']]['conversation'] = $arRes['CHAT_ID'];
                 $arMessages[$arRes['ID']]['unread'] = $this->user_id != $arRes['AUTHOR_ID'] ? 'Y' : 'N';
             } else {
                 $arUsersMessage[$arRes['CHAT_ID']][] = $arRes['ID'];
                 if ($this->user_id != $arRes['AUTHOR_ID']) {
                     $arUnreadMessage[$arRes['CHAT_ID']][] = $arRes['ID'];
                 }
             }
             if ($arRes['R1_STATUS'] == IM_STATUS_UNREAD && (!isset($arMark[$arRes["CHAT_ID"]]) || $arMark[$arRes["CHAT_ID"]] < $arRes["ID"])) {
                 $arMark[$arRes["CHAT_ID"]] = $arRes["ID"];
             }
             if (!isset($arLastMessage[$arRes["CHAT_ID"]]) || $arLastMessage[$arRes["CHAT_ID"]] < $arRes["ID"]) {
                 $arLastMessage[$arRes["CHAT_ID"]] = $arRes["ID"];
             }
             $arChat[$arRes["CHAT_ID"]] = $arRes["CHAT_ID"];
             $arMessageId[] = $arRes['ID'];
             $arMessageChatId[$arRes['CHAT_ID']][$arRes["ID"]] = $arRes["ID"];
         }
         $params = CIMMessageParam::Get($arMessageId);
         if ($bFileLoad) {
             foreach ($arMessageChatId as $chatId => $messages) {
                 $files = array();
                 foreach ($messages as $messageId) {
                     $arMessages[$messageId]['params'] = $params[$messageId];
                     if (isset($params[$messageId]['FILE_ID'])) {
                         foreach ($params[$messageId]['FILE_ID'] as $fileId) {
                             $files[$fileId] = $fileId;
                         }
                     }
                 }
                 $arMessageFiles = CIMDisk::GetFiles($chatId, $files);
                 foreach ($arMessageFiles as $key => $value) {
                     $arResult['files'][$chatId][$key] = $value;
                 }
             }
         } else {
             foreach ($params as $messageId => $param) {
                 $arMessages[$messageId]['params'] = $param;
             }
         }
         if (!empty($arMessages)) {
             foreach ($arMark as $chatId => $lastSendId) {
                 CIMMessage::SetLastSendId($chatId, $this->user_id, $lastSendId);
             }
         } else {
             foreach ($arRelations as $relation) {
                 CIMMessage::SetLastId($relation['CHAT_ID'], $relation['USER_ID']);
             }
         }
         if ($bGroupByChat) {
             foreach ($arMessages as $key => $value) {
                 $arMessages[$arLastMessage[$value['conversation']]]['counter']++;
                 if ($arLastMessage[$value['conversation']] != $value['id']) {
                     unset($arMessages[$key]);
                 } else {
                     $arMessages[$key]['text'] = $CCTP->convertText(htmlspecialcharsbx($value['text']));
                     $arMessages[$key]['text_mobile'] = strip_tags(preg_replace("/<img.*?data-code=\"([^\"]*)\".*?>/i", "\$1", $CCTP->convertText(htmlspecialcharsbx(preg_replace("/\\[s\\].*?\\[\\/s\\]/i", "", $value['text'])))), '<br>');
                     $arUsersMessage[$value['conversation']][] = $value['id'];
                     if ($value['unread'] == 'Y') {
                         $arUnreadMessage[$value['conversation']][] = $value['id'];
                     }
                     unset($arMessages[$key]['conversation']);
                     unset($arMessages[$key]['unread']);
                 }
             }
         } else {
             foreach ($arMessages as $key => $value) {
                 $arMessages[$key]['text'] = $CCTP->convertText(htmlspecialcharsbx($value['text']));
                 $arMessages[$key]['text_mobile'] = strip_tags(preg_replace("/<img.*?data-code=\"([^\"]*)\".*?>/i", "\$1", $CCTP->convertText(htmlspecialcharsbx(preg_replace("/\\[s\\].*?\\[\\/s\\]/i", "", $value['text'])))), '<br>');
             }
         }
         $arResult['message'] = $arMessages;
         $arResult['unreadMessage'] = $arUnreadMessage;
         $arResult['usersMessage'] = $arUsersMessage;
         $arChat = self::GetChatData(array('ID' => $arChat, 'USE_CACHE' => 'N'));
         if (!empty($arChat)) {
             $arResult['chat'] = $arChat['chat'];
             $arResult['userChatBlockStatus'] = $arChat['userChatBlockStatus'];
             $arResult['userInChat'] = $arChat['userInChat'];
             foreach ($arChat['userInChat'] as $value) {
                 $arUsers[] = $value;
             }
         }
         if ($bUserLoad && !empty($arUsers)) {
             $arUserData = CIMContactList::GetUserData(array('ID' => array_diff(array_unique($arUsers), $arExistUserData), 'DEPARTMENT' => $loadDepartment ? 'Y' : 'N'));
             $arResult['users'] = $arUserData['users'];
             $arResult['userInGroup'] = $arUserData['userInGroup'];
             $arResult['woUserInGroup'] = $arUserData['woUserInGroup'];
         } else {
             $arResult['users'] = array();
             $arResult['userInGroup'] = array();
             $arResult['userInGroup'] = array();
         }
         $arResult['countMessage'] = CIMMessenger::GetMessageCounter($this->user_id, $arResult);
         if (!$bGroupByChat) {
             CIMMessenger::SpeedFileCreate($this->user_id, $arResult['countMessage'], IM_SPEED_GROUP);
         }
         $arResult['result'] = true;
     } else {
         $arResult['countMessage'] = CIMMessenger::GetMessageCounter($this->user_id, $arResult);
     }
     return $arResult;
 }
Exemplo n.º 13
0
	public static function GetRecentList($arParams = Array())
	{
		global $DB, $USER;

		$bLoadUnreadMessage = isset($arParams['LOAD_UNREAD_MESSAGE']) && $arParams['LOAD_UNREAD_MESSAGE'] == 'Y'? true: false;
		$bTimeZone = isset($arParams['USE_TIME_ZONE']) && $arParams['USE_TIME_ZONE'] == 'N'? false: true;
		$bSmiles = isset($arParams['USE_SMILES']) && $arParams['USE_SMILES'] == 'N'? false: true;

		$nameTemplate = COption::GetOptionString("im", "user_name_template", "#LAST_NAME# #NAME#", SITE_ID);
		$nameTemplateSite = CSite::GetNameFormat(false);
		$nameOfSite = CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()? "ex": false;
		$bIntranetEnable = IsModuleInstalled('intranet') && CModule::IncludeModule('intranet')? true: false;

		$arRecent = Array();
		$arUsers = Array();

		$cache_ttl = 2592000;
		$cache_id = $GLOBALS['USER']->GetID();
		$cache_dir = '/bx/imc/rec'.CIMMessenger::GetCachePath($cache_id);
		$obCache = new CPHPCache();
		if($obCache->InitCache($cache_ttl, $cache_id, $cache_dir))
		{
			$ar = $obCache->GetVars();
			$arRecent = $ar['recent'];
			$arUsers = $ar['users'];
		}
		else
		{
			if (!$bTimeZone)
				CTimeZone::Disable();
			$strSql = "
				SELECT
					R.ITEM_TYPE, R.ITEM_ID,
					R.ITEM_MID M_ID, M.AUTHOR_ID M_AUTHOR_ID, M.MESSAGE M_MESSAGE, ".$DB->DatetimeToTimestampFunction('M.DATE_CREATE')." M_DATE_CREATE,
					C.TITLE C_TITLE, C.AUTHOR_ID C_OWNER_ID,
					U.LOGIN, U.NAME, U.LAST_NAME, U.PERSONAL_PHOTO, U.SECOND_NAME, U.PERSONAL_BIRTHDAY, U.PERSONAL_GENDER
				FROM
				b_im_recent R
				LEFT JOIN b_user U ON R.ITEM_TYPE = '".IM_MESSAGE_PRIVATE."' AND R.ITEM_ID = U.ID
				LEFT JOIN b_im_chat C ON R.ITEM_TYPE = '".IM_MESSAGE_GROUP."' AND R.ITEM_ID = C.ID
				LEFT JOIN b_im_message M ON R.ITEM_MID = M.ID
				WHERE R.USER_ID = ".$USER->GetId();
			if (!$bTimeZone)
				CTimeZone::Enable();

			$toDelete = Array();
			$CCTP = new CTextParser();
			$CCTP->MaxStringLen = 255;
			$CCTP->allow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => ($bSmiles? "Y": "N"), "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N");
			$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
			while ($arRes = $dbRes->GetNext(true, false))
			{
				$arRes['ITEM_TYPE'] = trim($arRes['ITEM_TYPE']);
				if ($arRes['M_DATE_CREATE']+2592000 < time())
				{
					$toDelete[$arRes['ITEM_TYPE']][] = $arRes['ITEM_ID'];
					continue;
				}

				$itemId = $arRes['ITEM_ID'];
				$item = Array(
					'TYPE' => $arRes['ITEM_TYPE'],
					'MESSAGE' => Array(
						'id' => $arRes['M_ID'],
						'senderId' => $arRes['M_AUTHOR_ID'],
						'date' => $arRes['M_DATE_CREATE'],
						'text' => $CCTP->convertText(preg_replace("/\[s\].*?\[\/s\]/i", "", $arRes['M_MESSAGE']))
					)
				);
				$item['MESSAGE']['text'] = preg_replace("/------------------------------------------------------(.*)------------------------------------------------------/mi", " [".GetMessage('IM_QUOTE')."] ", strip_tags(str_replace(array("<br>","<br/>","<br />", "#BR#"), Array(" "," ", " ", " "), $item['MESSAGE']['text']), "<img>"));
				if ($arRes['ITEM_TYPE'] == IM_MESSAGE_PRIVATE)
				{
					$arUsers[] = $arRes['ITEM_ID'];
					$arFileTmp = CFile::ResizeImageGet(
						$arRes["PERSONAL_PHOTO"],
						array('width' => 58, 'height' => 58),
						BX_RESIZE_IMAGE_EXACT,
						false
					);

					$item['USER'] = Array(
						'id' => $arRes['ITEM_ID'],
						'name' => CUser::FormatName($nameTemplateSite, $arRes, true, false),
						'nameList' => CUser::FormatName($nameTemplate, $arRes, true, false),
						'avatar' => empty($arFileTmp['src'])? '/bitrix/js/im/images/blank.gif': $arFileTmp['src'],
						'gender' => $arRes['PERSONAL_GENDER'] == 'F'? 'F': 'M',
						'status' => 'offline',
						'birthday' => $arRes['PERSONAL_BIRTHDAY'],
						'profile' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('im', 'path_to_user_profile', "", $nameOfSite), array("user_id" => $arRes["ITEM_ID"]))
					);
				}
				else
				{
					$itemId = 'chat'.$itemId;
					$item['CHAT'] = Array(
						'id' => $arRes['ITEM_ID'],
						'name' => $arRes["C_TITLE"],
						'owner' => $arRes["C_OWNER_ID"],
					);
				}
				$arRecent[$itemId] = $item;
			}
			// remove old entity
			if (!empty($toDelete))
			{
				if (isset($toDelete[IM_MESSAGE_PRIVATE]))
					self::DeleteRecent($toDelete[IM_MESSAGE_PRIVATE]);
				if (isset($toDelete[IM_MESSAGE_GROUP]))
					self::DeleteRecent($toDelete[IM_MESSAGE_GROUP], true);
			}
			if($obCache->StartDataCache())
				$obCache->EndDataCache(Array('recent' => $arRecent, 'users' => $arUsers));
		}

		$arOnline = self::GetStatus(Array('ID' => array_values($arUsers)));
		foreach ($arRecent as $key => $value)
		{
			if ($value['TYPE'] != IM_MESSAGE_PRIVATE)
				continue;

			$arRecent[$key]['USER']['birthday'] = $bIntranetEnable? CIntranetUtils::IsToday($value['USER']['birthday']): false;
			$arRecent[$key]['USER']['status'] = isset($arOnline['users'][$value['USER']['id']])? 'online': 'offline';
		}

		if ($bLoadUnreadMessage)
		{
			$CIMMessage = new CIMMessage(false, Array(
				'hide_link' => true
			));

			$ar = $CIMMessage->GetUnreadMessage(Array(
				'LOAD_DEPARTMENT' => 'N',
				'ORDER' => 'ASC',
				'GROUP_BY_CHAT' => 'Y',
				'USE_TIME_ZONE' => $bTimeZone? 'Y': 'N',
				'USE_SMILES' => $bSmiles? 'Y': 'N'
			));
			foreach ($ar['message'] as $data)
			{
				if (!isset($arRecent[$data['senderId']]))
				{
					$arRecent[$data['senderId']] = Array(
						'TYPE' => IM_MESSAGE_PRIVATE,
						'USER' => $ar['users'][$data['senderId']]
					);
				}
				$arRecent[$data['senderId']]['MESSAGE'] = Array(
					'id' => $data['id'],
					'senderId' => $data['senderId'],
					'date' => $data['date'],
					'text' => preg_replace("/------------------------------------------------------(.*)------------------------------------------------------/mi", " [".GetMessage('IM_QUOTE')."] ", strip_tags(str_replace(array("<br>","<br/>","<br />", "#BR#"), Array(" ", " ", " ", " "), $data['text']), "<img>"))
				);

				$arRecent[$data['senderId']]['COUNTER'] = $data['counter'];
			}

			$CIMChat = new CIMChat(false, Array(
				'hide_link' => true
			));

			$ar = $CIMChat->GetUnreadMessage(Array(
				'ORDER' => 'ASC',
				'GROUP_BY_CHAT' => 'Y',
				'USER_LOAD' => 'N',
				'USE_SMILES' => $bSmiles? 'Y': 'N',
				'USE_TIME_ZONE' => $bTimeZone? 'Y': 'N'
			));
			foreach ($ar['message'] as $data)
			{
				if (!isset($arRecent['chat'.$data['recipientId']]))
				{
					$arRecent['chat'.$data['recipientId']] = Array(
						'TYPE' => IM_MESSAGE_GROUP,
						'CHAT' => $ar['chat']
					);
				}
				$arRecent['chat'.$data['recipientId']]['MESSAGE'] = Array(
					'id' => $data['id'],
					'senderId' => $data['senderId'],
					'date' => $data['date'],
					'text' => $data['text']
				);
				$arRecent['chat'.$data['recipientId']]['COUNTER'] = $data['counter'];
			}
		}

		if (!empty($arRecent))
		{
			sortByColumn(
				$arRecent,
				array(
					'COUNTER' => array(SORT_NUMERIC, SORT_DESC),
					'MESSAGE' => array(SORT_NUMERIC, SORT_DESC)
				),
				array(
					'COUNTER' => function($counter){ return !is_null($counter); },
					'MESSAGE' => function($recent){ return $recent['date']; }
				),
				null, true
			);
		}

		return $arRecent;
	}
Exemplo n.º 14
0
	public static function BuildRSS($postID, $blogID, $type = "RSS2.0", $numPosts = 10, $arPathTemplate = Array())
	{
		$blogID = IntVal($blogID);
		$postID = IntVal($postID);
		if($blogID <= 0)
			return false;
		if($postID <= 0)
			return false;
		$numPosts = IntVal($numPosts);
		$type = strtolower(preg_replace("/[^a-zA-Z0-9.]/is", "", $type));
		if ($type != "rss.92" && $type != "atom.03")
			$type = "rss2.0";

		$rssText = False;

		$arBlog = CBlog::GetByID($blogID);
		if ($arBlog && $arBlog["ACTIVE"] == "Y" && $arBlog["ENABLE_RSS"] == "Y")
		{
			$arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]);
			if($arGroup["SITE_ID"] == SITE_ID)
			{
				$arPost = CBlogPost::GetByID($postID);
				if(!empty($arPost) && $arPost["BLOG_ID"] == $arBlog["ID"] && $arPost["ENABLE_COMMENTS"] == "Y")
				{
					$now = date("r");
					$nowISO = date("Y-m-d\TH:i:s").substr(date("O"), 0, 3).":".substr(date("O"), -2, 2);

					$serverName = "";
					$charset = "";
					$language = "";
					$dbSite = CSite::GetList(($b = "sort"), ($o = "asc"), array("LID" => SITE_ID));
					if ($arSite = $dbSite->Fetch())
					{
						$serverName = $arSite["SERVER_NAME"];
						$charset = $arSite["CHARSET"];
						$language = $arSite["LANGUAGE_ID"];
					}

					if (strlen($serverName) <= 0)
					{
						if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0)
							$serverName = SITE_SERVER_NAME;
						else
							$serverName = COption::GetOptionString("main", "server_name", "");
					}

					if (strlen($charset) <= 0)
					{
						if (defined("SITE_CHARSET") && strlen(SITE_CHARSET) > 0)
							$charset = SITE_CHARSET;
						else
							$charset = "windows-1251";
					}

					if(strlen($arPathTemplate["PATH_TO_BLOG"])>0)
						$blogURL = htmlspecialcharsbx("http://".$serverName.CComponentEngine::MakePathFromTemplate($arPathTemplate["PATH_TO_BLOG"], array("blog" => $arBlog["URL"], "user_id" => $arBlog["OWNER_ID"], "group_id" => $arBlog["SOCNET_GROUP_ID"])));
					else
						$blogURL = htmlspecialcharsbx("http://".$serverName.CBlog::PreparePath($arBlog["URL"], $arGroup["SITE_ID"]));

					if(strlen($arPathTemplate["PATH_TO_POST"])>0)
						$url = htmlspecialcharsbx("http://".$serverName.CComponentEngine::MakePathFromTemplate($arPathTemplate["PATH_TO_POST"], array("blog" => $arBlog["URL"], "post_id" => CBlogPost::GetPostID($arPost["ID"], $arPost["CODE"], $arPathTemplate["ALLOW_POST_CODE"]), "user_id" => $arBlog["OWNER_ID"], "group_id" => $arBlog["SOCNET_GROUP_ID"])));
					else
						$url = htmlspecialcharsbx("http://".$serverName.CBlogPost::PreparePath($arBlog["URL"], $arPost["ID"], $arGroup["SITE_ID"]));

					$dbUser = CUser::GetByID($arPost["AUTHOR_ID"]);
					$arUser = $dbUser->Fetch();

					if($arPathTemplate["USE_SOCNET"] == "Y")
					{
						$blogName = GetMessage("BLG_GCM_RSS_TITLE_SOCNET", Array("#AUTHOR_NAME#" => htmlspecialcharsEx($arUser["NAME"]." ".$arUser["LAST_NAME"]), "#POST_TITLE#" => htmlspecialcharsEx($arPost["TITLE"])));
					}
					else
					{
						$blogName = GetMessage("BLG_GCM_RSS_TITLE", Array("#BLOG_NAME#" => htmlspecialcharsEx($arBlog["NAME"]), "#POST_TITLE#" => htmlspecialcharsEx($arPost["TITLE"])));
					}

					$rssText = "";
					if ($type == "rss.92")
					{
						$rssText .= "<"."?xml version=\"1.0\" encoding=\"".$charset."\"?".">\n\n";
						$rssText .= "<rss version=\".92\">\n";
						$rssText .= " <channel>\n";
						$rssText .= "	<title>".$blogName."</title>\n";
						$rssText .= "	<description>".$blogName."</description>\n";
						$rssText .= "	<link>".$url."</link>\n";
						$rssText .= "	<language>".$language."</language>\n";
						$rssText .= "	<docs>http://backend.userland.com/rss092</docs>\n";
						$rssText .= "\n";
					}
					elseif ($type == "rss2.0")
					{
						$rssText .= "<"."?xml version=\"1.0\" encoding=\"".$charset."\"?".">\n\n";
						$rssText .= "<rss version=\"2.0\">\n";
						$rssText .= " <channel>\n";
						$rssText .= "	<title>".$blogName."</title>\n";
						$rssText .= "	<description>".$blogName."</description>\n";
						//$rssText .= "	<guid>".$url."</guid>\n";
						$rssText .= "	<link>".$url."</link>\n";
						$rssText .= "	<language>".$language."</language>\n";
						$rssText .= "	<docs>http://backend.userland.com/rss2</docs>\n";
						$rssText .= "	<pubDate>".$now."</pubDate>\n";
						$rssText .= "\n";
					}
					elseif ($type == "atom.03")
					{
						$atomID = "tag:".htmlspecialcharsbx($serverName).",".date("Y-m-d").":".$postID;

						$rssText .= "<"."?xml version=\"1.0\" encoding=\"".$charset."\"?".">\n\n";
						$rssText .= "<feed version=\"0.3\" xmlns=\"http://purl.org/atom/ns#\" xml:lang=\"".$language."\">\n";
						$rssText .= "  <title>".$blogName."</title>\n";
						$rssText .= "  <tagline>".$url."</tagline>\n";
						$rssText .= "  <id>".$atomID."</id>\n";
						$rssText .= "  <link rel=\"alternate\" type=\"text/html\" href=\"".$url."\" />\n";
						$rssText .= "  <modified>".$nowISO."</modified>\n";

						$BlogUser = CBlogUser::GetByID($arPost["AUTHOR_ID"], BLOG_BY_USER_ID);
						$authorP = htmlspecialcharsex(CBlogUser::GetUserName($BlogUser["ALIAS"], $arUser["NAME"], $arUser["LAST_NAME"], $arUser["LOGIN"], $arUser["SECOND_NAME"]));
						if(strLen($arPathTemplate["PATH_TO_USER"])>0)
							$authorURLP = htmlspecialcharsbx("http://".$serverName.CComponentEngine::MakePathFromTemplate($arPathTemplate["PATH_TO_USER"], array("user_id"=>$arPost["AUTHOR_ID"])));
						else
							$authorURLP = "http://".$serverName.CBlogUser::PreparePath($arPost["AUTHOR_ID"], $arGroup["SITE_ID"]);

						$rssText .= "  <author>\n";
						$rssText .= "  		<name>".$authorP."</name>\n";
						$rssText .= "  		<uri>".$authorURLP."</uri>\n";
						$rssText .= "  </author>\n";

						$rssText .= "\n";
					}

					$user_id = $GLOBALS["USER"]->GetID();
					if($arPathTemplate["USE_SOCNET"] == "Y")
					{
						$postPerm = CBlogPost::GetSocNetPostPerms($postID);
						if($postPerm > BLOG_PERMS_DENY)
							$postPerm = CBlogComment::GetSocNetUserPerms($postID, $arPost["AUTHOR_ID"]);
					}
					else
						$postPerm = CBlogPost::GetBlogUserCommentPerms($postID, IntVal($user_id));

					if($postPerm >= BLOG_PERMS_READ)
					{
						$parser = new blogTextParser();
						$arParserParams = Array(
							"imageWidth" => $arPathTemplate["IMAGE_MAX_WIDTH"],
							"imageHeight" => $arPathTemplate["IMAGE_MAX_HEIGHT"],
						);

						CTimeZone::Disable();
						$dbComments = CBlogComment::GetList(
							array("DATE_CREATE" => "DESC"),
							array(
								//"BLOG_ID" => $blogID,
								"POST_ID" => $postID,
								"PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH,
							),
							false,
							array("nTopCount" => $numPosts),
							array("ID", "TITLE", "DATE_CREATE", "POST_TEXT", "AUTHOR_EMAIL", "AUTHOR_ID", "AUTHOR_NAME", "USER_LOGIN", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_NAME", "BLOG_USER_ALIAS")
						);
						CTimeZone::Enable();
						$arImages = Array();
						$dbImages = CBlogImage::GetList(Array(), Array("BLOG_ID" => $blogID, "POST_ID" => $postID, "IS_COMMENT" => "Y", "!COMMENT_ID" => false));
						while($arI = $dbImages->Fetch())
							$arImages[$arI["ID"]] = $arI["FILE_ID"];

						while ($arComments = $dbComments->Fetch())
						{
							$arDate = ParseDateTime($arComments["DATE_CREATE"], CSite::GetDateFormat("FULL", $arGroup["SITE_ID"]));
							$date = date("r", mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));

							if(strpos($url, "?") !== false)
								$url1 = $url."&amp;";
							else
								$url1 = $url."?";
							$url1 .= "commentId=".$arComments["ID"]."#".$arComments["ID"];

							$authorURL = "";
							if(IntVal($arComments["AUTHOR_ID"]) > 0)
							{
								$author = CBlogUser::GetUserName($arComments["BLOG_USER_ALIAS"], $arComments["USER_NAME"], $arComments["USER_LAST_NAME"], $arComments["USER_LOGIN"], $arComments["USER_SECOND_NAME"]);
								if(strLen($arPathTemplate["PATH_TO_USER"])>0)
									$authorURL = htmlspecialcharsbx("http://".$serverName.CComponentEngine::MakePathFromTemplate($arPathTemplate["PATH_TO_USER"], array("user_id"=>$arComments["AUTHOR_ID"])));
								else
									$authorURL = htmlspecialcharsbx("http://".$serverName.CBlogUser::PreparePath($arComments["AUTHOR_ID"], $arGroup["SITE_ID"]));
							}
							else
								$author = $arComments["AUTHOR_NAME"];
							$arAllow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "Y", "QUOTE" => "Y", "CODE" => "Y", "FONT" => "Y", "LIST" => "Y", "SMILES" => "Y", "NL2BR" => "N", "VIDEO" => "Y", "TABLE" => "Y", "CUT_ANCHOR" => "N");
							if($arPathTemplate["NO_URL_IN_COMMENTS"] == "L" || (IntVal($arComments["AUTHOR_ID"]) <= 0  && $arPathTemplate["NO_URL_IN_COMMENTS"] == "A"))
								$arAllow["CUT_ANCHOR"] = "Y";

							if($arPathTemplate["NO_URL_IN_COMMENTS_AUTHORITY_CHECK"] == "Y" && $arAllow["CUT_ANCHOR"] != "Y" && IntVal($arComments["AUTHOR_ID"]) > 0)
							{
								$authorityRatingId = CRatings::GetAuthorityRating();
								$arRatingResult = CRatings::GetRatingResult($authorityRatingId, $arComments["AUTHOR_ID"]);
								if($arRatingResult["CURRENT_VALUE"] < $arPathTemplate["NO_URL_IN_COMMENTS_AUTHORITY"])
									$arAllow["CUT_ANCHOR"] = "Y";
							}

							$text = $parser->convert_to_rss($arComments["POST_TEXT"], $arImages, $arAllow, false, $arParserParams);

							$title = GetMessage("BLG_GCM_COMMENT_TITLE", Array("#POST_TITLE#" => htmlspecialcharsEx($arPost["TITLE"]), "#COMMENT_AUTHOR#" => htmlspecialcharsEx($author)));
							/*$title = str_replace(
								array("&", "<", ">", "\""),
								array("&amp;", "&lt;", "&gt;", "&quot;"),
								$title);
							*/
							//$text1 = HTMLToTxt($text, "", Array("\&nbsp;"), 60);
							$text = "<![CDATA[".$text."]]>";


							if ($type == "rss.92")
							{
								$rssText .= "    <item>\n";
								$rssText .= "      <title>".$title."</title>\n";
								$rssText .= "      <description>".$text."</description>\n";
								$rssText .= "      <link>".$url1."</link>\n";
								$rssText .= "    </item>\n";
								$rssText .= "\n";
							}
							elseif ($type == "rss2.0")
							{
								$rssText .= "    <item>\n";
								$rssText .= "      <title>".$title."</title>\n";
								$rssText .= "      <description>".$text."</description>\n";
								$rssText .= "      <link>".$url1."</link>\n";
								$rssText .= "      <guid>".$url1."</guid>\n";
								$rssText .= "      <pubDate>".$date."</pubDate>\n";
								$rssText .= "    </item>\n";
								$rssText .= "\n";
							}
							elseif ($type == "atom.03")
							{
								$atomID = "tag:".htmlspecialcharsbx($serverName).":".$arBlog["URL"]."/".$arPost["ID"];

								$timeISO = mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]);
								$dateISO = date("Y-m-d\TH:i:s", $timeISO).substr(date("O", $timeISO), 0, 3).":".substr(date("O", $timeISO), -2, 2);

								$rssText .= "<entry>\n";
								$rssText .= "  <title type=\"text/html\">".$title."</title>\n";
								$rssText .= "  <link rel=\"alternate\" type=\"text/html\" href=\"".$url1."\"/>\n";
								$rssText .= "  <issued>".$dateISO."</issued>\n";
								$rssText .= "  <modified>".$nowISO."</modified>\n";
								$rssText .= "  <id>".$atomID."</id>\n";
								$rssText .= "  <content type=\"text/html\" mode=\"escaped\" xml:lang=\"".$language."\" xml:base=\"".$blogURL."\">\n";
								$rssText .= $text."\n";
								$rssText .= "  </content>\n";
								$rssText .= "  <author>\n";
								$rssText .= "    <name>".htmlspecialcharsex($author)."</name>\n";
								if(strlen($authorURL) > 0)
									$rssText .= "    <uri>".$authorURL."</uri>\n";
								$rssText .= "  </author>\n";
								$rssText .= "</entry>\n";
								$rssText .= "\n";
							}
						}
					}

					if ($type == "rss.92")
						$rssText .= "  </channel>\n</rss>";
					elseif ($type == "rss2.0")
						$rssText .= "  </channel>\n</rss>";
					elseif ($type == "atom.03")
						$rssText .= "\n\n</feed>";
				}
			}
		}

		return $rssText;
	}
Exemplo n.º 15
0
 public static function Sync($ldap_server_id)
 {
     global $DB, $USER, $APPLICATION;
     if (!is_object($USER)) {
         $USER = new CUser();
         $bUSERGen = true;
     }
     $dbLdapServers = CLdapServer::GetById($ldap_server_id);
     if (!($oLdapServer = $dbLdapServers->GetNextServer())) {
         return false;
     }
     if (!$oLdapServer->Connect()) {
         return false;
     }
     if (!$oLdapServer->BindAdmin()) {
         $oLdapServer->Disconnect();
         return false;
     }
     $APPLICATION->ResetException();
     $db_events = GetModuleEvents("ldap", "OnLdapBeforeSync");
     while ($arEvent = $db_events->Fetch()) {
         $arParams['oLdapServer'] = $oLdapServer;
         if (ExecuteModuleEventEx($arEvent, array(&$arParams)) === false) {
             if (!($err = $APPLICATION->GetException())) {
                 $APPLICATION->ThrowException("Unknown error");
             }
             return false;
         }
     }
     // select all users from LDAP
     $arLdapUsers = array();
     $ldapLoginAttr = strtolower($oLdapServer->arFields["~USER_ID_ATTR"]);
     $APPLICATION->ResetException();
     $dbLdapUsers = $oLdapServer->GetUserList();
     $ldpEx = $APPLICATION->GetException();
     while ($arLdapUser = $dbLdapUsers->Fetch()) {
         $arLdapUsers[strtolower($arLdapUser[$ldapLoginAttr])] = $arLdapUser;
     }
     unset($dbLdapUsers);
     // select all Bitrix CMS users for this LDAP
     $arUsers = array();
     CTimeZone::Disable();
     $dbUsers = CUser::GetList($o, $b, array("EXTERNAL_AUTH_ID" => "LDAP#" . $ldap_server_id));
     CTimeZone::Enable();
     while ($arUser = $dbUsers->Fetch()) {
         $arUsers[strtolower($arUser["LOGIN"])] = $arUser;
     }
     unset($dbUsers);
     if (!$ldpEx || $ldpEx->msg != 'LDAP_SEARCH_ERROR') {
         $arDelLdapUsers = array_diff(array_keys($arUsers), array_keys($arLdapUsers));
     }
     if (strlen($oLdapServer->arFields["SYNC_LAST"]) > 0) {
         $syncTime = MakeTimeStamp($oLdapServer->arFields["SYNC_LAST"]);
     } else {
         $syncTime = 0;
     }
     $arCache = array();
     // selecting a list of groups, from which users will not be imported
     $noImportGroups = array();
     $dbGroups = CLdapServer::GetGroupBan($ldap_server_id);
     while ($arGroup = $dbGroups->Fetch()) {
         $noImportGroups[md5($arGroup['LDAP_GROUP_ID'])] = $arGroup['LDAP_GROUP_ID'];
     }
     $cnt = 0;
     // have to update $oLdapServer->arFields["FIELD_MAP"] for user fields
     // for each one of them looking for similar in user list
     foreach ($arLdapUsers as $userLogin => $arLdapUserFields) {
         if (!is_array($arUsers[$userLogin])) {
             if ($oLdapServer->arFields["SYNC_USER_ADD"] != "Y") {
                 continue;
             }
             // if user is not found among already existing ones, then import him
             // в $arLdapUserFields - user fields from ldap
             $userActive = $oLdapServer->getLdapValueByBitrixFieldName("ACTIVE", $arLdapUserFields);
             if ($userActive != "Y") {
                 continue;
             }
             $arUserFields = $oLdapServer->GetUserFields($arLdapUserFields, $departmentCache);
             // $arUserFields here contains LDAP user fields for a LDAP user
             // make a check, whether this user belongs to those groups only, from which import will not be made...
             $allUserGroups = $arUserFields['LDAP_GROUPS'];
             $userImportIsBanned = true;
             foreach ($allUserGroups as $groupId) {
                 $groupId = trim($groupId);
                 if (!empty($groupId) && !array_key_exists(md5($groupId), $noImportGroups)) {
                     $userImportIsBanned = false;
                     break;
                 }
             }
             // ...if he does not, then import him
             if (!$userImportIsBanned || empty($allUserGroups)) {
                 $oLdapServer->SetUser($arUserFields);
             }
         } else {
             // if date of update is set, then compare it
             $ldapTime = time();
             if ($syncTime > 0 && strlen($oLdapServer->arFields["SYNC_ATTR"]) > 0 && preg_match("'([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})\\.0Z'", $arLdapUserFields[strtolower($oLdapServer->arFields["SYNC_ATTR"])], $arTimeMatch)) {
                 $ldapTime = gmmktime($arTimeMatch[4], $arTimeMatch[5], $arTimeMatch[6], $arTimeMatch[2], $arTimeMatch[3], $arTimeMatch[1]);
                 $userTime = MakeTimeStamp($arUsers[$userLogin]["TIMESTAMP_X"]);
             }
             if ($syncTime < $ldapTime || $syncTime < $userTime) {
                 // make an update
                 $arUserFields = $oLdapServer->GetUserFields($arLdapUserFields, $arCache);
                 $arUserFields["ID"] = $arUsers[$userLogin]["ID"];
                 //echo $arUserFields["LOGIN"]." - updated<br>";
                 $oLdapServer->SetUser($arUserFields);
                 $cnt++;
             }
         }
     }
     foreach ($arDelLdapUsers as $userLogin) {
         $USER = new CUser();
         if (isset($arUsers[$userLogin]) && $arUsers[$userLogin]['ACTIVE'] == 'Y') {
             $ID = intval($arUsers[$userLogin]["ID"]);
             $USER->Update($ID, array('ACTIVE' => 'N'));
         }
     }
     $oLdapServer->Disconnect();
     CLdapServer::Update($ldap_server_id, array("~SYNC_LAST" => $DB->CurrentTimeFunction()));
     if ($bUSERGen) {
         unset($USER);
     }
     return $cnt;
 }
Exemplo n.º 16
0
 public function GetDiscount($arParams = array(), $getAll = false)
 {
     global $DB, $USER;
     $adminSection = defined('ADMIN_SECTION') && ADMIN_SECTION === true;
     $arResult = array();
     if (!CCatalog::IsUserExists() || !$USER->IsAuthorized() || !self::IsEnabled()) {
         return $arResult;
     }
     foreach (GetModuleEvents("catalog", "OnGetDiscountSave", true) as $arEvent) {
         $mxResult = ExecuteModuleEventEx($arEvent, $arParams);
         if ($mxResult !== true) {
             return $mxResult;
         }
     }
     if (empty($arParams) || !is_array($arParams)) {
         return $arResult;
     }
     $intUserID = 0;
     $arUserGroups = array();
     $strSiteID = false;
     if (isset($arParams['USER_ID'])) {
         $intUserID = (int) $arParams['USER_ID'];
     }
     if (isset($arParams['USER_GROUPS'])) {
         $arUserGroups = $arParams['USER_GROUPS'];
     }
     if (isset($arParams['SITE_ID'])) {
         $strSiteID = $arParams['SITE_ID'];
     }
     if (self::GetDiscountUserID() > 0) {
         $intUserID = (int) self::GetDiscountUserID();
         $arUserGroups = array();
     }
     if ($intUserID <= 0 && !$adminSection) {
         $intUserID = (int) $USER->GetID();
         $arUserGroups = array();
     }
     if (empty($arUserGroups)) {
         if (!isset(self::$userGroups[$intUserID])) {
             self::$userGroups[$intUserID] = $USER->GetUserGroup($intUserID);
         }
         $arUserGroups = self::$userGroups[$intUserID];
     }
     if (empty($arUserGroups) || !is_array($arUserGroups) || $intUserID <= 0) {
         return $arResult;
     }
     $key = array_search(2, $arUserGroups);
     if ($key !== false) {
         unset($arUserGroups[$key]);
     }
     if (empty($arUserGroups)) {
         return $arResult;
     }
     Main\Type\Collection::normalizeArrayValuesByInt($arUserGroups, true);
     if (empty($arUserGroups)) {
         return $arResult;
     }
     if ($strSiteID === false) {
         $strSiteID = SITE_ID;
     }
     $cacheKey = md5('U' . implode('_', $arUserGroups));
     if (!isset(self::$discountFilterCache[$cacheKey])) {
         self::$discountFilterCache[$cacheKey] = CCatalogDiscountSave::__GetDiscountIDByGroup($arUserGroups);
     }
     if (empty(self::$discountFilterCache[$cacheKey])) {
         return $arResult;
     }
     $arCurrentDiscountID = self::$discountFilterCache[$cacheKey];
     if (isset($arParams['ID'])) {
         Main\Type\Collection::normalizeArrayValuesByInt($arUserGroups, true);
         if (!empty($arParams['ID'])) {
             $arCurrentDiscountID = array_intersect($arCurrentDiscountID, $arParams['ID']);
         }
     }
     if (!empty($arCurrentDiscountID)) {
         $getAll = $getAll === true;
         $intCurrentTime = getmicrotime();
         $strDate = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), $intCurrentTime);
         $arFilter = array('ID' => $arCurrentDiscountID, 'SITE_ID' => $strSiteID, 'TYPE' => self::ENTITY_ID, 'ACTIVE' => 'Y', '+<=ACTIVE_FROM' => $strDate, '+>=ACTIVE_TO' => $strDate);
         CTimeZone::Disable();
         $rsDiscSaves = CCatalogDiscountSave::GetList(array(), $arFilter);
         CTimeZone::Enable();
         while ($arDiscSave = $rsDiscSaves->Fetch()) {
             $arDiscSave['ACTION_SIZE'] = (int) $arDiscSave['ACTION_SIZE'];
             $arDiscSave['COUNT_SIZE'] = (int) $arDiscSave['COUNT_SIZE'];
             $arDiscSave['ACTIVE_FROM_UT'] = false;
             $arDiscSave['ACTIVE_TO_UT'] = false;
             $arDiscSave['COUNT_FROM_UT'] = false;
             $arDiscSave['COUNT_TO_UT'] = false;
             $arDiscSave['TYPE'] = (int) $arDiscSave['TYPE'];
             $arDiscSave['MODULE_ID'] = 'catalog';
             $strCountPeriod = self::COUNT_TIME_ALL;
             $strActionPeriod = self::ACTION_TIME_ALL;
             $arCountPeriodBack = array();
             $arActionPeriodBack = array();
             $arActionPeriod = array();
             $arStartDate = false;
             $arOldOrderSumm = false;
             $arOrderSumm = false;
             $boolPeriodInsert = true;
             $intCountTime = $intCurrentTime;
             $arOrderFilter = array('USER_ID' => $intUserID, 'LID' => $arDiscSave['SITE_ID'], 'PAYED' => 'Y', 'CANCELED' => 'N');
             $arOldOrderFilter = $arOrderFilter;
             if (!empty($arDiscSave['ACTIVE_FROM']) || !empty($arDiscSave['ACTIVE_TO'])) {
                 $strActionPeriod = self::ACTION_TIME_INTERVAL;
                 if (!empty($arDiscSave['ACTIVE_FROM'])) {
                     $arDiscSave['ACTIVE_FROM_UT'] = MakeTimeStamp($arDiscSave['ACTIVE_FROM']);
                 }
                 if (!empty($arDiscSave['ACTIVE_TO'])) {
                     $arDiscSave['ACTIVE_TO_UT'] = MakeTimeStamp($arDiscSave['ACTIVE_TO']);
                 }
             } elseif ($arDiscSave['ACTION_SIZE'] > 0 && in_array($arDiscSave['ACTION_TYPE'], array('D', 'M', 'Y'))) {
                 $strActionPeriod = self::ACTION_TIME_PERIOD;
                 $arActionPeriodBack = CCatalogDiscountSave::__GetTimeStampArray($arDiscSave['ACTION_SIZE'], $arDiscSave['ACTION_TYPE']);
                 $arActionPeriod = CCatalogDiscountSave::__GetTimeStampArray($arDiscSave['ACTION_SIZE'], $arDiscSave['ACTION_TYPE'], true);
             }
             if (!empty($arDiscSave['COUNT_FROM']) || !empty($arDiscSave['COUNT_TO'])) {
                 $strCountPeriod = self::COUNT_TIME_INTERVAL;
                 if (!empty($arDiscSave['COUNT_FROM'])) {
                     $arDiscSave['COUNT_FROM_UT'] = MakeTimeStamp($arDiscSave['COUNT_FROM']);
                 }
                 if (!empty($arDiscSave['COUNT_TO'])) {
                     $arDiscSave['COUNT_TO_UT'] = MakeTimeStamp($arDiscSave['COUNT_TO']);
                     if ($arDiscSave['COUNT_TO_UT'] > $intCountTime) {
                         $arDiscSave['COUNT_TO_UT'] = $intCountTime;
                         $arDiscSave['COUNT_TO'] = ConvertTimeStamp($intCountTime, 'FULL');
                     }
                 }
             } elseif ($arDiscSave['COUNT_SIZE'] > 0 && in_array($arDiscSave['COUNT_TYPE'], array('D', 'M', 'Y'))) {
                 $strCountPeriod = self::COUNT_TIME_PERIOD;
                 $arCountPeriodBack = CCatalogDiscountSave::__GetTimeStampArray($arDiscSave['COUNT_SIZE'], $arDiscSave['COUNT_TYPE']);
             }
             if ($strCountPeriod == self::COUNT_TIME_INTERVAL) {
                 if (false !== $arDiscSave['COUNT_FROM_UT']) {
                     if ($arDiscSave['COUNT_FROM_UT'] > $intCountTime) {
                         continue;
                     }
                     if (false !== $arDiscSave['COUNT_TO_UT'] && $arDiscSave['COUNT_TO_UT'] <= $arDiscSave['COUNT_FROM_UT']) {
                         continue;
                     }
                     if (false !== $arDiscSave['ACTIVE_TO_UT'] && $arDiscSave['COUNT_FROM_UT'] >= $arDiscSave['ACTIVE_TO_UT']) {
                         continue;
                     }
                 }
                 if (false !== $arDiscSave['COUNT_TO_UT']) {
                     if ($strActionPeriod == self::ACTION_TIME_PERIOD && $arDiscSave['COUNT_TO_UT'] < AddToTimeStamp($arActionPeriodBack, $intCountTime)) {
                         continue;
                     }
                 }
             }
             if ($strActionPeriod == self::ACTION_TIME_PERIOD) {
                 if ($strCountPeriod == self::COUNT_TIME_PERIOD) {
                     $arStartDate = CCatalogDiscountSave::__GetUserInfoByDiscount(array('DISCOUNT_ID' => $arDiscSave['ID'], 'USER_ID' => $intUserID, 'ACTIVE_FROM' => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), AddToTimeStamp($arActionPeriodBack, $intCountTime))));
                     if (is_array($arStartDate) && !empty($arStartDate)) {
                         $arOldOrderFilter['<DATE_INSERT'] = $arStartDate['ACTIVE_FROM_FORMAT'];
                         $arOldOrderFilter['>=DATE_INSERT'] = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), AddToTimeStamp($arCountPeriodBack, MakeTimeStamp($arStartDate['ACTIVE_FROM_FORMAT'])));
                         $arOldOrderSumm = CCatalogDiscountSave::__SaleOrderSumm($arOldOrderFilter, $arDiscSave['CURRENCY']);
                     }
                 } else {
                     $arStartDate = CCatalogDiscountSave::__GetUserInfoByDiscount(array('DISCOUNT_ID' => $arDiscSave['ID'], 'USER_ID' => $intUserID), array('ACTIVE_FROM' => false, 'DELETE' => false));
                     if (is_array($arStartDate) && !empty($arStartDate)) {
                         $intTimeStart = MakeTimeStamp($arStartDate['ACTIVE_FROM_FORMAT']);
                         $intTimeFinish = MakeTimeStamp($arStartDate['ACTIVE_TO_FORMAT']);
                         if (!($intTimeStart <= $intCountTime && $intTimeFinish >= $intCountTime)) {
                             continue;
                         } else {
                             $boolPeriodInsert = false;
                         }
                     }
                 }
             }
             $intTimeStart = false;
             $intTimeFinish = false;
             if ($strCountPeriod == self::COUNT_TIME_INTERVAL) {
                 $intTimeStart = !empty($arDiscSave['COUNT_FROM']) ? $arDiscSave['COUNT_FROM'] : false;
                 $intTimeFinish = !empty($arDiscSave['COUNT_TO']) ? $arDiscSave['COUNT_TO'] : false;
             } elseif ($strCountPeriod == self::COUNT_TIME_PERIOD) {
                 $intTimeStart = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), AddToTimeStamp($arCountPeriodBack, $intCountTime));
             }
             if ($intTimeStart) {
                 $arOrderFilter['>=DATE_INSERT'] = $intTimeStart;
             }
             if ($intTimeFinish) {
                 $arOrderFilter['<DATE_INSERT'] = $intTimeFinish;
             }
             $arOrderSumm = CCatalogDiscountSave::__SaleOrderSumm($arOrderFilter, $arDiscSave['CURRENCY']);
             if (is_array($arOldOrderSumm) && 0 < $arOldOrderSumm['RANGE_SUMM']) {
                 if ($arOrderSumm['RANGE_SUMM'] <= $arOldOrderSumm['RANGE_SUMM']) {
                     $arOrderSumm = $arOldOrderSumm;
                 } else {
                     $arOldOrderSumm = false;
                 }
             }
             $rsRanges = CCatalogDiscountSave::GetRangeByDiscount(array('RANGE_FROM' => 'DESC'), array('DISCOUNT_ID' => $arDiscSave['ID'], '<=RANGE_FROM' => $arOrderSumm['RANGE_SUMM']), false, array('nTopCount' => 1));
             $arRange = $rsRanges->Fetch();
             if (!empty($arRange) || $getAll) {
                 if (!empty($arRange)) {
                     if ($strActionPeriod == self::ACTION_TIME_PERIOD) {
                         if ($strCountPeriod == self::COUNT_TIME_PERIOD) {
                             if (!is_array($arOldOrderSumm)) {
                                 CCatalogDiscountSave::__UpdateUserInfoByDiscount(array('DISCOUNT_ID' => $arDiscSave['ID'], 'USER_ID' => $intUserID, 'ACTIVE_FROM' => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), $intCountTime), 'ACTIVE_TO' => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), AddToTimeStamp($arActionPeriod, $intCountTime)), 'RANGE_FROM' => -1));
                             }
                         } else {
                             if ($boolPeriodInsert) {
                                 CCatalogDiscountSave::__UpdateUserInfoByDiscount(array('DISCOUNT_ID' => $arDiscSave['ID'], 'USER_ID' => $intUserID, 'ACTIVE_FROM' => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), $intCountTime), 'ACTIVE_TO' => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), AddToTimeStamp($arActionPeriod, $intCountTime)), 'RANGE_FROM' => -1), array('SEARCH' => true, 'DELETE' => false));
                             }
                         }
                     }
                 }
                 unset($arDiscSave['ACTIVE_FROM_UT'], $arDiscSave['ACTIVE_TO_UT'], $arDiscSave['COUNT_FROM_UT'], $arDiscSave['COUNT_TO_UT']);
                 $arOneResult = $arDiscSave;
                 if (!empty($arRange)) {
                     $arOneResult['VALUE'] = $arRange['VALUE'];
                     $arOneResult['VALUE_TYPE'] = $arRange['TYPE'];
                     $arOneResult['RANGE_FROM'] = $arRange['RANGE_FROM'];
                     $arOneResult['MAX_DISCOUNT'] = 0;
                 } else {
                     $arOneResult['VALUE'] = 0;
                     $arOneResult['VALUE_TYPE'] = self::TYPE_PERCENT;
                     $arOneResult['MAX_DISCOUNT'] = 0;
                     $rsRanges = CCatalogDiscountSave::GetRangeByDiscount(array('RANGE_FROM' => 'ASC'), array('DISCOUNT_ID' => $arDiscSave['ID']), false, array('nTopCount' => 1));
                     $arRange = $rsRanges->Fetch();
                     $arOneResult['NEXT_RANGE_FROM'] = $arRange['RANGE_FROM'];
                     $arOneResult['NEXT_VALUE'] = $arRange['VALUE'];
                     $arOneResult['NEXT_VALUE_TYPE'] = $arRange['TYPE'];
                 }
                 $arOneResult['SUMM'] = $arOrderSumm['SUMM'];
                 $arOneResult['SUMM_CURRENCY'] = $arOrderSumm['CURRENCY'];
                 $arOneResult['RANGE_SUMM'] = $arOrderSumm['RANGE_SUMM'];
                 $arOneResult['LAST_ORDER_DATE'] = $arOrderSumm['LAST_ORDER_DATE'];
                 $arResult[] = $arOneResult;
             }
         }
     }
     return $arResult;
 }
Exemplo n.º 17
0
 public static function GetAbsent($users = false, $Params = array())
 {
     global $DB;
     // Can be called from agent... So we have to create $USER if it is not exists
     $tempUser = CCalendar::TempUser(false, true);
     $curUserId = isset($Params['userId']) ? intVal($Params['userId']) : CCalendar::GetCurUserId();
     $arUsers = array();
     if ($users !== false && is_array($users)) {
         foreach ($users as $id) {
             if ($id > 0) {
                 $arUsers[] = intVal($id);
             }
         }
     }
     if (!count($arUsers)) {
         $users = false;
     }
     // Part 1: select ordinary events
     $arFilter = array('CAL_TYPE' => 'user', 'DELETED' => 'N', 'ACCESSIBILITY' => 'absent');
     if (isset($Params['fromLimit'])) {
         $arFilter['FROM_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['fromLimit'], false), true, false);
     }
     if (isset($Params['toLimit'])) {
         $arFilter['TO_LIMIT'] = CCalendar::Date(CCalendar::Timestamp($Params['toLimit'], false), true, false);
     }
     $arEvents = CCalendarEvent::GetList(array('arFilter' => $arFilter, 'getUserfields' => false, 'parseRecursion' => true, 'fetchAttendees' => false, 'fetchMeetings' => true, 'userId' => $curUserId, 'checkPermissions' => false, 'preciseLimits' => true));
     // Part 2: select attendees
     CTimeZone::Disable();
     if (count($arUsers) > 0) {
         $userQ = ' AND CA.USER_ID in (' . implode(',', $arUsers) . ')';
     } else {
         $userQ = '';
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tCA.EVENT_ID as ID, CA.USER_ID, CA.STATUS, CA.ACCESSIBILITY,\n\t\t\t\tCE.CAL_TYPE,CE.OWNER_ID,CE.NAME," . $DB->DateToCharFunction("CE.DT_FROM") . " as DT_FROM," . $DB->DateToCharFunction("CE.DT_TO") . " as DT_TO, CE.DT_LENGTH, CE.PRIVATE_EVENT, CE.ACCESSIBILITY, CE.IMPORTANCE, CE.IS_MEETING, CE.MEETING_HOST, CE.MEETING, CE.LOCATION, CE.RRULE, CE.EXRULE, CE.RDATE, CE.EXDATE,\n\t\t\t\tCES.SECT_ID\n\t\t\tFROM b_calendar_attendees CA\n\t\t\tLEFT JOIN\n\t\t\t\tb_calendar_event CE ON(CA.EVENT_ID=CE.ID)\n\t\t\tLEFT JOIN\n\t\t\t\tb_calendar_event_sect CES ON (CA.EVENT_ID=CES.EVENT_ID)\n\t\t\tWHERE\n\t\t\t\t\tCE.ID IS NOT NULL\n\t\t\t\tAND\n\t\t\t\t\tCE.DELETED='N'\n\t\t\t\tAND\n\t\t\t\t\tSTATUS='Y'\n\t\t\t\tAND\n\t\t\t\t\tCA.ACCESSIBILITY='absent'\n\t\t\t\t{$userQ}\n\t\t\t";
     if (isset($arFilter['FROM_LIMIT'])) {
         $strSql .= "AND ";
         if (strtoupper($DB->type) == "MYSQL") {
             $strSql .= "CE.DT_TO>=FROM_UNIXTIME('" . MkDateTime(FmtDate($arFilter['FROM_LIMIT'], "D.M.Y"), "d.m.Y") . "')";
         } elseif (strtoupper($DB->type) == "MSSQL") {
             $strSql .= "CE.DT_TO>=" . $DB->CharToDateFunction($arFilter['FROM_LIMIT'], "SHORT");
         } elseif (strtoupper($DB->type) == "ORACLE") {
             $strSql .= "CE.DT_TO>=TO_DATE('" . FmtDate($arFilter['FROM_LIMIT'], "D.M.Y") . " 00:00:00','dd.mm.yyyy hh24:mi:ss')";
         }
     }
     if ($arFilter['TO_LIMIT']) {
         $strSql .= "AND ";
         if (strtoupper($DB->type) == "MYSQL") {
             $strSql .= "CE.DT_FROM<=FROM_UNIXTIME('" . MkDateTime(FmtDate($arFilter['TO_LIMIT'], "D.M.Y") . " 23:59:59", "d.m.Y H:i:s") . "')";
         } elseif (strtoupper($DB->type) == "MSSQL") {
             $strSql .= "CE.DT_FROM<=dateadd(day, 1, " . $DB->CharToDateFunction($arFilter['TO_LIMIT'], "SHORT") . ")";
         } elseif (strtoupper($DB->type) == "ORACLE") {
             $strSql .= "CE.DT_FROM<=TO_DATE('" . FmtDate($arFilter['TO_LIMIT'], "D.M.Y") . " 23:59:59','dd.mm.yyyy hh24:mi:ss')";
         }
     }
     $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $arEvents2 = array();
     while ($event = $res->Fetch()) {
         $event = self::PreHandleEvent($event);
         if ($event['CAL_TYPE'] == 'user' && $event['IS_MEETING'] && $event['OWNER_ID'] == $event['USER_ID']) {
             continue;
         }
         if (self::CheckRecurcion($event)) {
             self::ParseRecursion($arEvents2, $event, array('fromLimit' => $arFilter["FROM_LIMIT"], 'toLimit' => $arFilter["TO_LIMIT"]));
         } else {
             self::HandleEvent($arEvents2, $event);
         }
     }
     CTimeZone::Enable();
     $arEvents = array_merge($arEvents, $arEvents2);
     $bSocNet = CModule::IncludeModule("socialnetwork");
     $result = array();
     $settings = CCalendar::GetSettings(array('request' => false));
     foreach ($arEvents as $event) {
         $userId = isset($event['USER_ID']) ? $event['USER_ID'] : $event['OWNER_ID'];
         if ($users !== false && !in_array($userId, $arUsers)) {
             continue;
         }
         if ($bSocNet && !CSocNetFeatures::IsActiveFeature(SONET_ENTITY_USER, $userId, "calendar")) {
             continue;
         }
         if ((!$event['CAL_TYPE'] != 'user' || $curUserId != $event['OWNER_ID']) && $curUserId != $event['CREATED_BY'] && !isset($arUserMeeting[$event['ID']])) {
             $sectId = $event['SECT_ID'];
             if (!$event['ACCESSIBILITY']) {
                 $event['ACCESSIBILITY'] = 'busy';
             }
             $private = $event['PRIVATE_EVENT'] && $event['CAL_TYPE'] == 'user';
             $bManager = false;
             if (!$private && CCalendar::IsIntranetEnabled() && CModule::IncludeModule('intranet') && $event['CAL_TYPE'] == 'user' && $settings['dep_manager_sub']) {
                 $bManager = in_array($curUserId, CCalendar::GetUserManagers($event['OWNER_ID'], true));
             }
             if ($private || !CCalendarSect::CanDo('calendar_view_full', $sectId) && !$bManager) {
                 if ($private) {
                     $event['NAME'] = '[' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                 } else {
                     if (!CCalendarSect::CanDo('calendar_view_title', $sectId)) {
                         $event['NAME'] = '[' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                     } else {
                         $event['NAME'] = $event['NAME'] . ' [' . GetMessage('EC_ACCESSIBILITY_' . strtoupper($event['ACCESSIBILITY'])) . ']';
                     }
                 }
             }
         }
         $result[] = array('ID' => $event['ID'], 'NAME' => $event['NAME'], 'DATE_FROM' => $event['DT_FROM'], 'DATE_TO' => $event['DT_TO'], 'DT_FROM_TS' => $event['DT_FROM_TS'], 'DT_TO_TS' => $event['DT_TO_TS'], 'CREATED_BY' => $userId, 'DETAIL_TEXT' => '', 'USER_ID' => $userId);
     }
     // Sort by DT_FROM_TS
     usort($result, array('CCalendar', '_NearestSort'));
     CCalendar::TempUser($tempUser, false);
     return $result;
 }
Exemplo n.º 18
0
 function GetRSSText($arIBLOCK, $LIMIT_NUM = false, $LIMIT_DAY = false, $yandex = false)
 {
     global $DB;
     $strRes = "";
     $serverName = "";
     if (isset($arIBLOCK["SERVER_NAME"]) && strlen($arIBLOCK["SERVER_NAME"]) > 0) {
         $serverName = $arIBLOCK["SERVER_NAME"];
     }
     if (strlen($serverName) <= 0 && !isset($arIBLOCK["SERVER_NAME"])) {
         $dbSite = CSite::GetList($b = "sort", $o = "asc", array("LID" => $arIBLOCK["LID"]));
         if ($arSite = $dbSite->Fetch()) {
             $serverName = $arSite["SERVER_NAME"];
         }
     }
     if (strlen($serverName) <= 0) {
         if (defined("SITE_SERVER_NAME") && strlen(SITE_SERVER_NAME) > 0) {
             $serverName = SITE_SERVER_NAME;
         } else {
             $serverName = COption::GetOptionString("main", "server_name", "www.bitrixsoft.com");
         }
     }
     $strRes .= "<channel>\n";
     $strRes .= "<title>" . htmlspecialcharsbx($arIBLOCK["NAME"]) . "</title>\n";
     $strRes .= "<link>http://" . $serverName . "</link>\n";
     $strRes .= "<description>" . htmlspecialcharsbx($arIBLOCK["DESCRIPTION"]) . "</description>\n";
     $strRes .= "<lastBuildDate>" . date("r") . "</lastBuildDate>\n";
     $strRes .= "<ttl>" . $arIBLOCK["RSS_TTL"] . "</ttl>\n";
     $db_img_arr = CFile::GetFileArray($arIBLOCK["PICTURE"]);
     if ($db_img_arr) {
         if (substr($db_img_arr["SRC"], 0, 1) == "/") {
             $strImage = "http://" . $serverName . $db_img_arr["SRC"];
         } else {
             $strImage = $db_img_arr["SRC"];
         }
         $strRes .= "<image>\n";
         $strRes .= "<title>" . htmlspecialcharsbx($arIBLOCK["NAME"]) . "</title>\n";
         $strRes .= "<url>" . $strImage . "</url>\n";
         $strRes .= "<link>http://" . $serverName . "</link>\n";
         $strRes .= "<width>" . $db_img_arr["WIDTH"] . "</width>\n";
         $strRes .= "<height>" . $db_img_arr["HEIGHT"] . "</height>\n";
         $strRes .= "</image>\n";
     }
     $arNodes = array();
     $db_res = $DB->Query("SELECT NODE, NODE_VALUE FROM b_iblock_rss WHERE IBLOCK_ID = " . IntVal($arIBLOCK["ID"]));
     while ($db_res_arr = $db_res->Fetch()) {
         $arNodes[$db_res_arr["NODE"]] = $db_res_arr["NODE_VALUE"];
     }
     CTimeZone::Disable();
     $strSql = "SELECT DISTINCT BE.*, " . "\t" . $DB->DateToCharFunction("BE.TIMESTAMP_X") . " as TIMESTAMP_X, " . "\t" . $DB->DateToCharFunction("BE.ACTIVE_FROM", "FULL") . " as ACTIVE_FROM, " . "\t" . $DB->DateToCharFunction("BE.ACTIVE_TO", "FULL") . " as ACTIVE_TO, " . "\tL.DIR as LANG_DIR, B.DETAIL_PAGE_URL, B.LIST_PAGE_URL, B.LID, L.SERVER_NAME " . "FROM b_iblock_element BE, b_lang L, b_iblock B " . "\tLEFT JOIN b_iblock_group IBG ON IBG.IBLOCK_ID=B.ID " . "WHERE BE.IBLOCK_ID = B.ID " . "\tAND B.LID = L.LID " . "\tAND IBG.GROUP_ID IN (2) " . "\tAND BE.WF_STATUS_ID = 1 AND BE.WF_PARENT_ELEMENT_ID is null " . "\tAND IBG.PERMISSION>='R' " . "\tAND (IBG.PERMISSION='X' OR B.ACTIVE='Y') " . "\tAND (BE.IBLOCK_ID = " . IntVal($arIBLOCK["ID"]) . ") " . "\tAND ((BE.ACTIVE_TO >= " . $DB->GetNowFunction() . " OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= " . $DB->GetNowFunction() . " OR BE.ACTIVE_FROM IS NULL)) " . "\tAND (BE.ACTIVE = 'Y') ";
     if ($LIMIT_DAY !== false) {
         $strSql .= " AND (BE.ACTIVE_FROM>=" . $DB->CharToDateFunction($DB->ForSql(date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), mktime(date("H"), date("i"), date("s"), date("m"), date("d") - IntVal($LIMIT_DAY), date("Y")))), "FULL") . " OR BE.ACTIVE_FROM IS NULL) ";
     }
     $strSql .= "ORDER BY BE.ACTIVE_FROM DESC, BE.SORT ASC ";
     $res = $DB->Query($strSql);
     CTimeZone::Enable();
     $items = new CIBlockResult($res->result);
     if ($LIMIT_NUM !== False && IntVal($LIMIT_NUM) > 0) {
         $items->NavStart($LIMIT_NUM);
     }
     while ($arItem = $items->GetNext()) {
         $props = CIBlockElement::GetProperty($arIBLOCK["ID"], $arItem["ID"], "sort", "asc", array("ACTIVE" => "Y", "NON_EMPTY" => "Y"));
         $arProps = array();
         while ($arProp = $props->Fetch()) {
             if (strlen($arProp["CODE"]) > 0) {
                 $arProps[$arProp["CODE"]] = array("NAME" => htmlspecialcharsbx($arProp["NAME"]), "VALUE" => htmlspecialcharsex($arProp["VALUE"]));
             } else {
                 $arProps[$arProp["ID"]] = array("NAME" => htmlspecialcharsbx($arProp["NAME"]), "VALUE" => htmlspecialcharsex($arProp["VALUE"]));
             }
         }
         $arLinkProp = $arProps["DOC_LINK"];
         $strRes .= "<item>\n";
         if (strlen($arNodes["title"]) > 0) {
             $strRes .= "<title>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["title"], $arProps, $arItem)) . "</title>\n";
         } else {
             $strRes .= "<title>" . htmlspecialcharsbx($arItem["~NAME"]) . "</title>\n";
         }
         if (strlen($arNodes["link"]) > 0) {
             $strRes .= "<link>" . CIBlockRSS::ExtractProperties($arNodes["link"], $arProps, $arItem) . "</link>\n";
         } else {
             $strRes .= "<link>http://" . $serverName . ($arLinkProp["VALUE"] ? $arLinkProp["VALUE"] : $arItem["DETAIL_PAGE_URL"]) . "</link>\n";
         }
         if (strlen($arNodes["description"]) > 0) {
             $strRes .= "<description>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["description"], $arProps, $arItem)) . "</description>\n";
         } else {
             $strRes .= "<description>" . ($arItem["PREVIEW_TEXT"] || $yandex ? htmlspecialcharsbx($arItem["PREVIEW_TEXT"]) : htmlspecialcharsbx($arItem["DETAIL_TEXT"])) . "</description>\n";
         }
         if (strlen($arNodes["enclosure"]) > 0) {
             $strRes .= "<enclosure url=\"" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["enclosure"], $arProps, $arItem)) . "\" length=\"" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["enclosure_length"], $arProps, $arItem)) . "\" type=\"" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["enclosure_type"], $arProps, $arItem)) . "\"/>\n";
         } else {
             $db_img_arr = CFile::GetFileArray($arItem["PREVIEW_PICTURE"]);
             if ($db_img_arr) {
                 if (substr($db_img_arr["SRC"], 0, 1) == "/") {
                     $strImage = "http://" . $serverName . $db_img_arr["SRC"];
                 } else {
                     $strImage = $db_img_arr["SRC"];
                 }
                 $strRes .= "<enclosure url=\"" . $strImage . "\" length=\"" . $db_img_arr["FILE_SIZE"] . "\" type=\"" . $db_img_arr["CONTENT_TYPE"] . "\" width=\"" . $db_img_arr["WIDTH"] . "\" height=\"" . $db_img_arr["HEIGHT"] . "\"/>\n";
             }
         }
         if (strlen($arNodes["category"]) > 0) {
             $strRes .= "<category>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["category"], $arProps, $arItem)) . "</category>\n";
         } else {
             $strPath = "";
             $nav = CIBlockSection::GetNavChain($arIBLOCK["ID"], $arItem["IBLOCK_SECTION_ID"]);
             while ($ar_nav = $nav->GetNext()) {
                 $strPath .= $ar_nav["NAME"] . "/";
             }
             if (strlen($strPath) > 0) {
                 $strRes .= "<category>" . htmlspecialcharsbx($strPath) . "</category>\n";
             }
         }
         if ($yandex) {
             $strRes .= "<yandex:full-text>" . htmlspecialcharsbx($arItem["DETAIL_TEXT"]) . "</yandex:full-text>\n";
         }
         if (strlen($arNodes["pubDate"]) > 0) {
             $strRes .= "<pubDate>" . htmlspecialcharsbx(CIBlockRSS::ExtractProperties($arNodes["pubDate"], $arProps, $arItem)) . "</pubDate>\n";
         } else {
             if (strlen($arItem["ACTIVE_FROM"]) > 0) {
                 $strRes .= "<pubDate>" . date("r", MkDateTime($DB->FormatDate($arItem["ACTIVE_FROM"], Clang::GetDateFormat("FULL"), "DD.MM.YYYY H:I:S"), "d.m.Y H:i:s")) . "</pubDate>\n";
             } else {
                 $strRes .= "<pubDate>" . date("r") . "</pubDate>\n";
             }
         }
         $strRes .= "</item>\n";
     }
     $strRes .= "</channel>\n";
     return $strRes;
 }
Exemplo n.º 19
0
 function ConfirmEvent($ID, $SITE_ID = SITE_ID)
 {
     static $SITE_DIR_CACHE = array();
     CTimeZone::Disable();
     $subscr = CSubscription::GetByID($ID);
     CTimeZone::Enable();
     if ($subscr_arr = $subscr->Fetch()) {
         if (!array_key_exists($SITE_ID, $SITE_DIR_CACHE)) {
             $db_lang = CLang::GetByID($SITE_ID);
             if ($ar_lang = $db_lang->Fetch()) {
                 $SITE_DIR_CACHE[$SITE_ID] = $ar_lang["DIR"];
             } else {
                 $SITE_DIR_CACHE[$SITE_ID] = LANG_DIR;
             }
         }
         $subscr_arr["USER_NAME"] = "";
         $subscr_arr["USER_LAST_NAME"] = "";
         if (intval($subscr_arr["USER_ID"]) > 0) {
             $rsUser = CUser::GetByID($subscr_arr["USER_ID"]);
             if ($arUser = $rsUser->Fetch()) {
                 $subscr_arr["USER_NAME"] = $arUser["NAME"];
                 $subscr_arr["USER_LAST_NAME"] = $arUser["LAST_NAME"];
             }
         }
         $arFields = array("ID" => $subscr_arr["ID"], "EMAIL" => $subscr_arr["EMAIL"], "CONFIRM_CODE" => $subscr_arr["CONFIRM_CODE"], "USER_NAME" => $subscr_arr["USER_NAME"] . " " . $subscr_arr["USER_LAST_NAME"], "DATE_SUBSCR" => $subscr_arr["DATE_UPDATE"] != "" ? $subscr_arr["DATE_UPDATE"] : $subscr_arr["DATE_INSERT"], "SUBSCR_SECTION" => str_replace(array("#SITE_DIR#", "#LANG_DIR#"), array($SITE_DIR_CACHE[$SITE_ID], $SITE_DIR_CACHE[$SITE_ID]), COption::GetOptionString("subscribe", "subscribe_section")));
         CEvent::Send("SUBSCRIBE_CONFIRM", $SITE_ID, $arFields);
         return true;
     }
     return false;
 }
Exemplo n.º 20
0
 function AddMessage($ticketID, $arFields, &$arrFILES, $checkRights = "Y")
 {
     if (strlen($arFields["MESSAGE"]) > 0 || is_array($arFields["FILES"]) && count($arFields["FILES"]) > 0) {
         $err_mess = CTicket::err_mess() . "<br>Function: AddMessage<br>Line: ";
         global $DB, $USER;
         $bAdmin = "N";
         $bSupportTeam = "N";
         $bSupportClient = "N";
         if ($checkRights == "Y") {
             $bAdmin = CTicket::IsAdmin() ? "Y" : "N";
             $bSupportTeam = CTicket::IsSupportTeam() ? "Y" : "N";
             $bSupportClient = CTicket::IsSupportClient() ? "Y" : "N";
             $uid = intval($USER->GetID());
         } else {
             $bAdmin = "Y";
             $bSupportTeam = "Y";
             $bSupportClient = "Y";
             //if (is_object($USER)) $uid = intval($USER->GetID()); else $uid = -1;
             $uid = 0;
         }
         if ($bAdmin != "Y" && $bSupportTeam != "Y" && $bSupportClient != "Y") {
             return false;
         }
         $ticketID = intval($ticketID);
         if ($ticketID <= 0) {
             return 0;
         }
         $strSql = "SELECT RESPONSIBLE_USER_ID, LAST_MESSAGE_USER_ID, REOPEN, SITE_ID, TITLE FROM b_ticket WHERE ID='{$ticketID}'";
         $rsTicket = $DB->Query($strSql, false, $err_mess . __LINE__);
         $arTicket = $rsTicket->Fetch();
         $currentResponsibleUserID = $arTicket["RESPONSIBLE_USER_ID"];
         $siteID = $arTicket["SITE_ID"];
         $tTitle = $arTicket["TITLE"];
         $strSql = "SELECT max(C_NUMBER) MAX_NUMBER FROM b_ticket_message WHERE TICKET_ID='{$ticketID}'";
         $z = $DB->Query($strSql, false, $err_mess . __LINE__);
         $zr = $z->Fetch();
         $maxNumber = intval($zr['MAX_NUMBER']);
         if ((strlen(trim($arFields["MESSAGE_AUTHOR_SID"])) > 0 || intval($arFields["MESSAGE_AUTHOR_USER_ID"]) > 0 || intval($arFields["MESSAGE_CREATED_USER_ID"]) > 0) && ($bSupportTeam == "Y" || $bAdmin == "Y")) {
             $ownerUserID = intval($arFields["MESSAGE_AUTHOR_USER_ID"]);
             $ownerSid = "'" . $DB->ForSql($arFields["MESSAGE_AUTHOR_SID"], 2000) . "'";
             $ownerGuestID = intval($arFields["MESSAGE_AUTHOR_GUEST_ID"]) > 0 ? intval($arFields["MESSAGE_AUTHOR_GUEST_ID"]) : "null";
             $createdUserID = intval($arFields["MESSAGE_CREATED_USER_ID"]) > 0 ? intval($arFields["MESSAGE_CREATED_USER_ID"]) : intval($uid);
             $createdGuestID = intval($arFields["MESSAGE_CREATED_GUEST_ID"]) > 0 ? intval($arFields["MESSAGE_CREATED_GUEST_ID"]) : intval($_SESSION["SESS_GUEST_ID"]);
         } else {
             $ownerUserID = intval($uid);
             $ownerSid = "null";
             $ownerGuestID = intval($_SESSION["SESS_GUEST_ID"]);
             $createdUserID = intval($uid);
             $createdGuestID = intval($_SESSION["SESS_GUEST_ID"]);
         }
         if (intval($ownerGuestID) <= 0) {
             $ownerGuestID = "null";
         }
         $MessageBySupportTeam = "null";
         if ($ownerUserID <= 0) {
             $ownerUserID = "null";
         } else {
             $MessageBySupportTeam = "'N'";
             if (CTicket::IsSupportTeam($ownerUserID) || CTicket::IsAdmin($ownerUserID)) {
                 $MessageBySupportTeam = "'Y'";
             }
         }
         if ($createdUserID <= 0) {
             $createdUserID = "null";
         }
         if (intval($createdGuestID) <= 0) {
             $createdGuestID = "null";
         }
         $createdModuleName = strlen($arFields["MESSAGE_CREATED_MODULE_NAME"]) > 0 ? "'" . $DB->ForSql($arFields["MESSAGE_CREATED_MODULE_NAME"], 255) . "'" : "'support'";
         $externalID = intval($arFields["EXTERNAL_ID"]) > 0 ? intval($arFields["EXTERNAL_ID"]) : "null";
         $externalField1 = $arFields["EXTERNAL_FIELD_1"];
         if (is_set($arFields, "HIDDEN")) {
             $hidden = $arFields["HIDDEN"] == "Y" ? "Y" : "N";
         } elseif (is_set($arFields, "IS_HIDDEN")) {
             $hidden = $arFields["IS_HIDDEN"] == "Y" ? "Y" : "N";
         }
         $hidden = $hidden == "Y" ? "Y" : "N";
         $notChangeStatus = is_set($arFields, "NOT_CHANGE_STATUS") && $arFields["NOT_CHANGE_STATUS"] == "Y" ? "Y" : "N";
         $changeLastMessageDate = true;
         if ($arTicket["LAST_MESSAGE_USER_ID"] == $uid && $arTicket["REOPEN"] != "Y") {
             $changeLastMessageDate = false;
         }
         $TASK_TIME = intval($arFields["TASK_TIME"]) > 0 ? intval($arFields["TASK_TIME"]) : "null";
         if (is_set($arFields, "LOG")) {
             $log = $arFields["LOG"] == "Y" ? "Y" : "N";
         } elseif (is_set($arFields, "IS_LOG")) {
             $log = $arFields["IS_LOG"] == "Y" ? "Y" : "N";
         }
         $log = $log == "Y" ? "Y" : "N";
         if (is_set($arFields, "OVERDUE")) {
             $overdue = $arFields["OVERDUE"] == "Y" ? "Y" : "N";
         } elseif (is_set($arFields, "IS_OVERDUE")) {
             $overdue = $arFields["IS_OVERDUE"] == "Y" ? "Y" : "N";
         }
         $overdue = $overdue == "Y" ? "Y" : "N";
         $arFieldsI = array("TIMESTAMP_X" => $DB->GetNowFunction(), "DAY_CREATE" => $DB->CurrentDateFunction(), "C_NUMBER" => $maxNumber + 1, "TICKET_ID" => $ticketID, "IS_HIDDEN" => "'" . $hidden . "'", "IS_LOG" => "'" . $log . "'", "IS_OVERDUE" => "'" . $overdue . "'", "MESSAGE" => "'" . $DB->ForSql($arFields["MESSAGE"]) . "'", "MESSAGE_SEARCH" => "'" . $DB->ForSql(ToUpper($arFields["MESSAGE"])) . "'", "EXTERNAL_ID" => $externalID, "EXTERNAL_FIELD_1" => strlen($externalField1) > 0 ? "'" . $DB->ForSql($externalField1) . "'" : "null", "OWNER_USER_ID" => $ownerUserID, "OWNER_GUEST_ID" => $ownerGuestID, "OWNER_SID" => $ownerSid, "SOURCE_ID" => intval($arFields["MESSAGE_SOURCE_ID"]), "CREATED_USER_ID" => $createdUserID, "CREATED_GUEST_ID" => $createdGuestID, "CREATED_MODULE_NAME" => $createdModuleName, "MODIFIED_USER_ID" => $createdUserID, "MODIFIED_GUEST_ID" => $createdGuestID, "MESSAGE_BY_SUPPORT_TEAM" => $MessageBySupportTeam, "TASK_TIME" => $TASK_TIME, "NOT_CHANGE_STATUS" => "'" . $notChangeStatus . "'");
         CTimeZone::Disable();
         $arFieldsI["DATE_CREATE"] = $DB->CharToDateFunction(GetTime(time(), "FULL"));
         CTimeZone::Enable();
         if ($hidden != "Y" && $log != "Y" && $changeLastMessageDate == false) {
             if ($MessageBySupportTeam == "'Y'" || $maxNumber <= 0 && array_key_exists('SOURCE_SID', $arFields) && $arFields['SOURCE_SID'] === 'email') {
                 $arFieldsI["NOT_CHANGE_STATUS"] = "'N'";
             } else {
                 $arFieldsI["NOT_CHANGE_STATUS"] = "'Y'";
             }
         }
         if (intval($currentResponsibleUserID) > 0) {
             $arFieldsI["CURRENT_RESPONSIBLE_USER_ID"] = $currentResponsibleUserID;
         }
         $mid = $DB->Insert("b_ticket_message", $arFieldsI, $err_mess . __LINE__);
         if (intval($mid) > 0) {
             $not_image_extension_suffix = COption::GetOptionString("support", "NOT_IMAGE_EXTENSION_SUFFIX");
             $not_image_upload_dir = COption::GetOptionString("support", "NOT_IMAGE_UPLOAD_DIR");
             $max_size = COption::GetOptionString("support", "SUPPORT_MAX_FILESIZE");
             // сохраняем приаттаченные файлы
             $arFILES = $arFields["FILES"];
             if (is_array($arFILES) && count($arFILES) > 0) {
                 while (list($key, $arFILE) = each($arFILES)) {
                     if (strlen($arFILE["name"]) > 0) {
                         if ($bSupportTeam != "Y" && $bAdmin != "Y") {
                             $max_file_size = intval($max_size) * 1024;
                         }
                         $fes = "";
                         $upload_dir = "support";
                         if (!CFile::IsImage($arFILE["name"], $arFILE["type"])) {
                             $fes = $not_image_extension_suffix;
                             $arFILE["name"] .= $fes;
                             $upload_dir = $not_image_upload_dir;
                         }
                         if (!array_key_exists("MODULE_ID", $arFILE) || strlen($arFILE["MODULE_ID"]) <= 0) {
                             $arFILE["MODULE_ID"] = "support";
                         }
                         $fid = intval(CFile::SaveFile($arFILE, $upload_dir, $max_file_size));
                         if ($fid > 0) {
                             $md5 = md5(uniqid(mt_rand(), true) . time());
                             $arFILE["HASH"] = $md5;
                             $arFILE["FILE_ID"] = $fid;
                             $arFILE["MESSAGE_ID"] = $mid;
                             $arFILE["TICKET_ID"] = $ticketID;
                             $arFILE["EXTENSION_SUFFIX"] = $fes;
                             $arFields_fi = array("HASH" => "'" . $DB->ForSql($md5, 255) . "'", "MESSAGE_ID" => $mid, "FILE_ID" => $fid, "TICKET_ID" => $ticketID, "EXTENSION_SUFFIX" => strlen($fes) > 0 ? "'" . $DB->ForSql($fes, 255) . "'" : "null");
                             $link_id = $DB->Insert("b_ticket_message_2_file", $arFields_fi, $err_mess . __LINE__);
                             if (intval($link_id) > 0) {
                                 $arFILE["LINK_ID"] = $link_id;
                                 $arrFILES[] = $arFILE;
                             }
                         }
                     }
                 }
             }
             // если это не было скрытым сообщением или сообщение лога, то
             if ($notChangeStatus != "Y" && $hidden != "Y" && $log != "Y") {
                 // обновим ряд параметров обращения
                 if (!isset($arFields["AUTO_CLOSE_DAYS"])) {
                     $RESET_AUTO_CLOSE = "Y";
                 }
                 CTicket::UpdateLastParams($ticketID, $RESET_AUTO_CLOSE, $changeLastMessageDate, true);
                 // при необходимости создадим или удалим агенты-напоминальщики
                 //CTicketReminder::Update($ticketID);
             }
             if ($log != "Y") {
                 CSupportSearch::writeWordsInTable($mid, $siteID, $tTitle . " " . $arFields["MESSAGE"]);
             }
             //если была установлена галочка "не изменять статус обращени" - пересчитаем количество собщений
             if ($notChangeStatus == "Y" || $hidden == "Y") {
                 CTicket::UpdateMessages($ticketID);
             }
         }
     }
     return $mid;
 }
Exemplo n.º 21
0
 function StatusOrder($ID, $val)
 {
     global $DB, $USER;
     $ID = IntVal($ID);
     $val = trim($val);
     foreach (GetModuleEvents("sale", "OnSaleBeforeStatusOrder", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, $val)) === false) {
             return false;
         }
     }
     $arFields = array("STATUS_ID" => $val, "=DATE_STATUS" => $DB->GetNowFunction(), "EMP_STATUS_ID" => IntVal($USER->GetID()) > 0 ? IntVal($USER->GetID()) : false);
     $res = CSaleOrder::Update($ID, $arFields);
     unset($GLOBALS["SALE_ORDER"]["SALE_ORDER_CACHE_" . $ID]);
     foreach (GetModuleEvents("sale", "OnSaleStatusOrder", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $val));
     }
     CTimeZone::Disable();
     $arOrder = CSaleOrder::GetByID($ID);
     CTimeZone::Enable();
     $userEmail = "";
     $dbOrderProp = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $ID, "PROP_IS_EMAIL" => "Y"));
     if ($arOrderProp = $dbOrderProp->Fetch()) {
         $userEmail = $arOrderProp["VALUE"];
     }
     if (strlen($userEmail) <= 0) {
         $dbUser = CUser::GetByID($arOrder["USER_ID"]);
         if ($arUser = $dbUser->Fetch()) {
             $userEmail = $arUser["EMAIL"];
         }
     }
     $dbSite = CSite::GetByID($arOrder["LID"]);
     $arSite = $dbSite->Fetch();
     $arStatus = CSaleStatus::GetByID($arOrder["STATUS_ID"], $arSite["LANGUAGE_ID"]);
     $arFields = array("ORDER_ID" => $ID, "ORDER_DATE" => $arOrder["DATE_INSERT_FORMAT"], "ORDER_STATUS" => $arStatus["NAME"], "EMAIL" => $userEmail, "ORDER_DESCRIPTION" => $arStatus["DESCRIPTION"], "TEXT" => "", "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@" . $_SERVER["SERVER_NAME"]));
     foreach (GetModuleEvents("sale", "OnSaleStatusEMail", true) as $arEvent) {
         $arFields["TEXT"] = ExecuteModuleEventEx($arEvent, array($ID, $arStatus["ID"]));
     }
     $eventName = "SALE_STATUS_CHANGED_" . $arOrder["STATUS_ID"];
     $bSend = true;
     foreach (GetModuleEvents("sale", "OnOrderStatusSendEmail", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$eventName, &$arFields, $arOrder["STATUS_ID"])) === false) {
             $bSend = false;
         }
     }
     if ($bSend) {
         $eventMessage = new CEventMessage();
         $dbEventMessage = $eventMessage->GetList($b = "", $o = "", array("EVENT_NAME" => $eventName, "SITE_ID" => $arOrder["LID"]));
         if (!($arEventMessage = $dbEventMessage->Fetch())) {
             $eventName = "SALE_STATUS_CHANGED";
         }
         $event = new CEvent();
         $event->Send($eventName, $arOrder["LID"], $arFields, "N");
     }
     return $res;
 }
Exemplo n.º 22
0
 function Set($arFields, &$MID, $id = "", $checkRights = "Y", $sendEmailToAuthor = "Y", $sendEmailToTechsupport = "Y")
 {
     global $DB, $APPLICATION, $USER;
     $err_mess = CAllTicket::err_mess() . "<br>Function: Set<br>Line: ";
     $v0 = self::Set_InitVar($arFields, $id, $checkRights, $sendEmailToAuthor, $sendEmailToTechsupport);
     if (!is_array($v0)) {
         return $v0;
     }
     $v = $v0["v"];
     /* isNew, CHECK_RIGHTS, SEND_EMAIL_TO_AUTHOR, SEND_EMAIL_TO_TECHSUPPORT, bAdmin, bSupportTeam, bSupportClient, bDemo, bOwner, uid, bActiveCoupon, IsSpam */
     /** @var CSupportTableFields $f */
     $f = $v0["f"];
     /* ID, SITE_ID, MODIFIED_GUEST_ID, OWNER_USER_ID, OWNER_SID, HOLD_ON, IS_SPAM */
     // если модифицируем обращение то
     if (!$v->isNew) {
         unset($arFields['COUPON']);
         $arFields['ID'] = $f->ID;
         $arFields = CTicket::ExecuteEvents('OnBeforeTicketUpdate', $arFields, false);
         $v->closeDate = isset($arFields["CLOSE"]) && $arFields["CLOSE"] == "Y";
         //$close
         // запоминаем предыдущие важные значения
         $v->arrOldFields = array();
         $arr = array("TITLE" => "T.TITLE", "RESPONSIBLE_USER_ID" => "T.RESPONSIBLE_USER_ID", "SLA_ID" => "T.SLA_ID", "CATEGORY_ID" => "T.CATEGORY_ID", "CRITICALITY_ID" => "T.CRITICALITY_ID", "STATUS_ID" => "T.STATUS_ID", "MARK_ID" => "T.MARK_ID", "DIFFICULTY_ID" => "T.DIFFICULTY_ID", "DATE_CLOSE" => "T.DATE_CLOSE", "HOLD_ON" => "T.HOLD_ON", "RESPONSE_TIME" => "S.RESPONSE_TIME", "RESPONSE_TIME_UNIT" => "S.RESPONSE_TIME_UNIT");
         $str = "T.ID";
         foreach ($arr as $s) {
             $str .= "," . $s;
         }
         $strSql = "SELECT " . $str . ", SITE_ID FROM b_ticket T LEFT JOIN b_ticket_sla S ON T.SLA_ID = S.ID WHERE T.ID='" . $f->ID . "'";
         $z = $DB->Query($strSql, false, $err_mess . __LINE__);
         if ($zr = $z->Fetch()) {
             $f->SITE_ID = $zr["SITE_ID"];
             if (intval($v->uid) == $zr["RESPONSIBLE_USER_ID"]) {
                 $v->bSupportTeam = "Y";
             }
             foreach ($arr as $key => $s) {
                 $v->arrOldFields[$key] = $zr[$key];
             }
         }
         $f->FromArray($arFields, "SITE_ID,MODIFIED_MODULE_NAME,SLA_ID,SOURCE_ID", array(CSupportTableFields::MORE0, CSupportTableFields::NOT_EMTY_STR));
         if (!$f->MODIFIED_MODULE_NAME) {
             $f->MODIFIED_MODULE_NAME = '';
         }
         $f->FromArray($arFields, "CATEGORY_ID,RESPONSIBLE_USER_ID,STATUS_ID,DIFFICULTY_ID,CRITICALITY_ID,SUPPORT_COMMENTS");
         if (isset($arFields['CHANGE_TITLE'])) {
             $f->set('TITLE', $arFields['CHANGE_TITLE']);
         }
         $f->set("MODIFIED_USER_ID", $v->uid, array(CSupportTableFields::MORE0));
         $f->setCurrentTime("TIMESTAMP_X");
         if ($v->closeDate) {
             $f->setCurrentTime("DATE_CLOSE");
         }
         // ?remake? {
         $v->IS_GROUP_USER = '******';
         if ($v->bAdmin) {
             $IS_GROUP_USER = '******';
         } elseif ($v->CHECK_RIGHTS == 'Y' && ($v->bSupportClient || $v->bSupportTeam)) {
             if ($v->bSupportTeam) {
                 $join_query = '(T.RESPONSIBLE_USER_ID IS NOT NULL AND T.RESPONSIBLE_USER_ID=O.USER_ID)';
             } else {
                 $join_query = '(T.OWNER_USER_ID IS NOT NULL AND T.OWNER_USER_ID=O.USER_ID)';
             }
             $strSql = "SELECT 'x'\n\t\t\t\tFROM b_ticket T\n\t\t\t\tINNER JOIN b_ticket_user_ugroup O ON {$join_query}\n\t\t\t\tINNER JOIN b_ticket_user_ugroup C ON (O.GROUP_ID=C.GROUP_ID)\n\t\t\t\tINNER JOIN b_ticket_ugroups G ON (O.GROUP_ID=G.ID)\n\t\t\t\tWHERE T.ID='" . $f->ID . "' AND C.USER_ID='" . $v->uid . "' AND C.CAN_VIEW_GROUP_MESSAGES='Y' AND G.IS_TEAM_GROUP='" . ($v->bSupportTeam ? "Y" : "N") . "'";
             $z = $DB->Query($strSql);
             if ($zr = $z->Fetch()) {
                 $v->IS_GROUP_USER = '******';
             }
         }
         // }
         if (isset($arFields["AUTO_CLOSE_DAYS"]) && intval($arFields["AUTO_CLOSE_DAYS"]) >= 0) {
             if (intval($arFields["AUTO_CLOSE_DAYS"]) == 0) {
                 // get from module settings
                 $f->AUTO_CLOSE_DAYS = COption::GetOptionString('support', "DEFAULT_AUTO_CLOSE_DAYS");
             } else {
                 $f->AUTO_CLOSE_DAYS = $arFields["AUTO_CLOSE_DAYS"];
             }
         }
         if (is_array($v->arrOldFields) && is_array($arFields) && $arFields["CLOSE"] == "N" && strlen($v->arrOldFields["DATE_CLOSE"]) > 0) {
             $f->DATE_CLOSE = null;
             $f->REOPEN = "Y";
         }
         // Если есть что и мы Аднины или из группы ТП, запишем в базу
         $v->FirstUpdateRes = false;
         if ($v->bSupportTeam || $v->bAdmin) {
             $arFields_i = $f->ToArray(CSupportTableFields::ALL, array(CSupportTableFields::ONLY_CHANGED), true);
             if ($v->CHECK_RIGHTS == "N" && isset($arFields["MARK_ID"]) && intval($arFields["MARK_ID"]) > 0) {
                 $arFields_i["MARK_ID"] = intval($arFields["MARK_ID"]);
             }
             if (count($arFields_i) > 0) {
                 $v->SupportTeamUpdateRes = $DB->Update("b_ticket", $arFields_i, "WHERE ID='" . $f->ID . "'", $err_mess . __LINE__);
                 //$rows1
                 $GLOBALS["USER_FIELD_MANAGER"]->Update("SUPPORT", $f->ID, $arFields);
                 // если указана отметка о спаме то установим отметку о спаме
                 if (strlen($f->IS_SPAM) > 0) {
                     CTicket::MarkAsSpam($f->ID, $f->IS_SPAM, $v->CHECK_RIGHTS);
                 }
                 $v->newSLA = isset($arFields_i["SLA_ID"]) && $v->arrOldFields["SLA_ID"] != $arFields_i["SLA_ID"];
             }
         } elseif ($v->bOwner || $v->bSupportClient) {
             $arFields_i = $f->ToArray("TIMESTAMP_X,DATE_CLOSE,CRITICALITY_ID,MODIFIED_USER_ID,MODIFIED_GUEST_ID,MODIFIED_MODULE_NAME,REOPEN", array(CSupportTableFields::ONLY_CHANGED), true);
             $arFields_i["MARK_ID"] = intval($arFields["MARK_ID"]);
             if (count($arFields_i) > 0) {
                 $v->SupportClientUpdateRes = $DB->Update("b_ticket", $arFields_i, "WHERE ID='" . $f->ID . "' AND (OWNER_USER_ID='" . $v->uid . "' OR CREATED_USER_ID='" . $v->uid . "' OR '" . $v->CHECK_RIGHTS . "'='N' OR '" . $v->IS_GROUP_USER . "'='Y')", $err_mess . __LINE__);
                 $GLOBALS["USER_FIELD_MANAGER"]->Update("SUPPORT", $f->ID, $arFields);
             }
         }
         // поля для записи лога
         /*$arFields_log = array(
         			"LOG"							=> "Y",
         			"MESSAGE_CREATED_USER_ID"		=> $MODIFIED_USER_ID,
         			"MESSAGE_CREATED_MODULE_NAME"	=> $MODIFIED_MODULE_NAME,
         			"MESSAGE_CREATED_GUEST_ID"		=> $MODIFIED_GUEST_ID,
         			"MESSAGE_SOURCE_ID"				=> intval($arFields["SOURCE_ID"])
         		);*/
         $v->arFields_log = array("LOG" => "Y", "MESSAGE_CREATED_USER_ID" => $f->MODIFIED_USER_ID, "MESSAGE_CREATED_MODULE_NAME" => $f->MODIFIED_MODULE_NAME, "MESSAGE_CREATED_GUEST_ID" => $f->MODIFIED_GUEST_ID, "MESSAGE_SOURCE_ID" => $f->SOURCE_ID);
         // если необходимо соблюдать права то
         if ($v->CHECK_RIGHTS == "Y") {
             // если update техподдержки не прошел то
             if (intval($v->SupportTeamUpdateRes) <= 0) {
                 // убираем из массива исходных значений то что может менять только техподдержка
                 unset($v->arrOldFields["RESPONSIBLE_USER_ID"]);
                 unset($v->arrOldFields["SLA_ID"]);
                 unset($v->arrOldFields["CATEGORY_ID"]);
                 unset($v->arrOldFields["DIFFICULTY_ID"]);
                 unset($v->arrOldFields["STATUS_ID"]);
             }
             // если update автора не прошел то
             if (intval($v->SupportClientUpdateRes) <= 0) {
                 // убираем из массива исходных значений то что может менять только автор
                 unset($v->arrOldFields["MARK_ID"]);
             }
         }
         // если состоялся один из updat'ов то
         if (intval($v->SupportTeamUpdateRes) > 0 || intval($v->SupportClientUpdateRes) > 0) {
             // добавляем сообщение
             $arFields["MESSAGE_CREATED_MODULE_NAME"] = $arFields["MODIFIED_MODULE_NAME"];
             if (is_set($arFields, "IMAGE")) {
                 $arFields["FILES"][] = $arFields["IMAGE"];
             }
             $arFiles = null;
             $MID = CTicket::AddMessage($f->ID, $arFields, $arFiles, $v->CHECK_RIGHTS);
             $v->arrFILES = $arFiles;
             $MID = intval($MID);
             $dateType = array();
             $dateType["EVENT"] = array(CTicket::UPDATE);
             if ($v->newSLA) {
                 $dateType["EVENT"][] = CTicket::NEW_SLA;
                 $dateType["OLD_SLA_RESPONSE_TIME"] = $v->arrOldFields["RESPONSE_TIME"];
                 $dateType["OLD_SLA_RESPONSE_TIME_UNIT"] = $v->arrOldFields["RESPONSE_TIME_UNIT"];
             }
             if ($f->REOPEN == "Y") {
                 $dateType["EVENT"][] = CTicket::REOPEN;
             }
             //CTicket::UpdateLastParams2($f->ID, $dateType);
             CTicket::UpdateLastParamsN($f->ID, $dateType, true, true);
             /*// если обращение закрывали то
             		if($v->closeDate)
             		{
             			// удалим агентов-напоминальщиков и обновим параметры обращения
             			CTicketReminder::Remove($f->ID);
             		}*/
             if (is_array($v->arrOldFields) && is_array($arFields)) {
                 // определяем что изменилось
                 $v->arChange = array();
                 if ($MID > 0) {
                     if ($arFields["HIDDEN"] != "Y") {
                         $v->arChange["MESSAGE"] = "Y";
                     } else {
                         $v->arChange["HIDDEN_MESSAGE"] = "Y";
                     }
                 }
                 if ($arFields["CLOSE"] == "Y" && strlen($v->arrOldFields["DATE_CLOSE"]) <= 0) {
                     $v->arChange["CLOSE"] = "Y";
                 } elseif ($arFields["CLOSE"] == "N" && strlen($v->arrOldFields["DATE_CLOSE"]) > 0) {
                     $v->arChange["OPEN"] = "Y";
                 }
                 if (array_key_exists("HOLD_ON", $arFields)) {
                     if ($v->arrOldFields["HOLD_ON"] == null) {
                         $v->arrOldFields["HOLD_ON"] = 'N';
                     }
                     if ($arFields["HOLD_ON"] == null) {
                         $arFields["HOLD_ON"] = 'N';
                     }
                     if ($v->arrOldFields["HOLD_ON"] != $arFields["HOLD_ON"]) {
                         if ($arFields["HOLD_ON"] == "Y") {
                             $v->arChange["HOLD_ON_ON"] = "Y";
                         } else {
                             $v->arChange["HOLD_ON_OFF"] = "Y";
                         }
                     }
                     unset($v->arrOldFields["HOLD_ON"]);
                 }
                 foreach ($v->arrOldFields as $key => $value) {
                     if (isset($arFields[$key])) {
                         if ($key === 'TITLE' && $value !== $arFields[$key]) {
                             $v->arChange[$key] = "Y";
                         } elseif (intval($value) != intval($arFields[$key])) {
                             $v->arChange[$key] = "Y";
                         }
                     }
                 }
                 // получим текущие значения обращения
                 CTimeZone::Disable();
                 $z = CTicket::GetByID($f->ID, $f->SITE_ID, "N");
                 CTimeZone::Enable();
                 if ($zr = $z->Fetch()) {
                     $nf = (object) $zr;
                     $rsSite = CSite::GetByID($nf->SITE_ID);
                     $v->arrSite = $rsSite->Fetch();
                     self::Set_sendMails($nf, $v, $arFields);
                     //if ($v->arChange['SLA_ID'] == 'Y' || $v->arChange['OPEN'] == 'Y') CTicketReminder::Update($nf->ID, true);
                 }
             }
             CTicket::ExecuteEvents('OnAfterTicketUpdate', $arFields, false);
         }
     } else {
         // restrict to set SLA_ID directly, allow through events or automatically
         if (isset($arFields['SLA_ID']) && !($v->bSupportTeam || $v->bAdmin || $v->bDemo || $v->bActiveCoupon)) {
             unset($arFields['SLA_ID']);
         }
         $arFields = CTicket::ExecuteEvents('OnBeforeTicketAdd', $arFields, false);
         if (!$arFields) {
             return false;
         }
         if (!((strlen(trim($arFields["OWNER_SID"])) > 0 || intval($arFields["OWNER_USER_ID"]) > 0) && ($v->bSupportTeam || $v->bAdmin))) {
             $f->OWNER_USER_ID = $v->uid > 0 ? $v->uid : null;
             $f->OWNER_SID = null;
             $f->OWNER_GUEST_ID = intval($_SESSION["SESS_GUEST_ID"]) > 0 ? intval($_SESSION["SESS_GUEST_ID"]) : null;
         }
         $f->FromArray($arFields, "CREATED_USER_ID,CREATED_MODULE_NAME,CATEGORY_ID,STATUS_ID,DIFFICULTY_ID,CRITICALITY_ID,SOURCE_ID,TITLE", array(CSupportTableFields::MORE0, CSupportTableFields::NOT_EMTY_STR));
         if (!$f->CREATED_USER_ID) {
             $f->set("CREATED_USER_ID", $v->uid, array(CSupportTableFields::MORE0));
         }
         $f->setCurrentTime("LAST_MESSAGE_DATE,DAY_CREATE,TIMESTAMP_X,DEADLINE_SOURCE_DATE");
         $f->DATE_CREATE = time() + CTimeZone::GetOffset();
         // если обращение создается сотрудником техподдержки, администратором или демо пользователем
         if ($v->bSupportTeam || $v->bAdmin || $v->Demo) {
             $f->FromArray($arFields, "SUPPORT_COMMENTS", array(CSupportTableFields::NOT_EMTY_STR));
         }
         if (!self::Set_getCOUPONandSLA($v, $f, $arFields)) {
             return false;
         }
         // $f +SLA_ID $v +V_COUPON +bActiveCoupon
         if ($v->bActiveCoupon) {
             $f->COUPON = $v->V_COUPON;
         }
         self::Set_getResponsibleUser($v, $f, $arFields);
         // $f +RESPONSIBLE_USER_ID  $v +T_EVENT1 +T_EVENT2 +T_EVENT3
         // поля для записи лога
         $v->arFields_log = array("LOG" => "Y", "MESSAGE_CREATED_USER_ID" => $f->CREATED_USER_ID, "MESSAGE_CREATED_MODULE_NAME" => $f->CREATED_MODULE_NAME, "MESSAGE_CREATED_GUEST_ID" => $f->MODIFIED_GUEST_ID, "MESSAGE_SOURCE_ID" => $f->SOURCE_ID);
         $acd0 = intval(COption::GetOptionString("support", "DEFAULT_AUTO_CLOSE_DAYS"));
         $f->AUTO_CLOSE_DAYS = $acd0 <= 0 ? 7 : $acd0;
         $arFields["AUTO_CLOSE_DAYS"] = $f->AUTO_CLOSE_DAYS;
         $arFields_i = $f->ToArray(CSupportTableFields::ALL, array(CSupportTableFields::NOT_NULL, CSupportTableFields::NOT_DEFAULT), true);
         $id = $DB->Insert("b_ticket", $arFields_i, $err_mess . __LINE__);
         if (!($id > 0)) {
             return $id;
         }
         $f->ID = $id;
         $GLOBALS["USER_FIELD_MANAGER"]->Update("SUPPORT", $f->ID, $arFields);
         $arFields["MESSAGE_AUTHOR_SID"] = $f->OWNER_SID;
         $arFields["MESSAGE_AUTHOR_USER_ID"] = $f->OWNER_USER_ID;
         $arFields["MESSAGE_CREATED_MODULE_NAME"] = $f->CREATED_MODULE_NAME;
         $arFields["MESSAGE_SOURCE_ID"] = $f->SOURCE_ID;
         $arFields["HIDDEN"] = "N";
         $arFields["LOG"] = "N";
         $arFields["IS_LOG"] = "N";
         if (is_set($arFields, "IMAGE")) {
             $arFields["FILES"][] = $arFields["IMAGE"];
         }
         $arFiles = null;
         $MID = CTicket::AddMessage($f->ID, $arFields, $arFiles, $v->CHECK_RIGHTS);
         $v->arrFILES = $arFiles;
         $MID = intval($MID);
         if (intval($MID) > 0) {
             //CTicket::UpdateLastParams2($f->ID, array("EVENT"=>array(CTicket::ADD)));
             CTicket::UpdateLastParamsN($f->ID, array("EVENT" => array(CTicket::ADD)), true, true);
             // если указана отметка о спаме то установим отметку о спаме
             if (strlen($f->IS_SPAM) > 0) {
                 CTicket::MarkAsSpam($f->ID, $f->IS_SPAM, $v->CHECK_RIGHTS);
             }
             /********************************************
             				$nf - Заново прочитанные из базы поля
             			********************************************/
             CTimeZone::Disable();
             $z = CTicket::GetByID($f->ID, $f->SITE_ID, "N", "N");
             CTimeZone::Enable();
             if ($zr = $z->Fetch()) {
                 $nf = (object) $zr;
                 $rsSite = CSite::GetByID($nf->SITE_ID);
                 $v->arrSite = $rsSite->Fetch();
                 self::Set_sendMails($nf, $v, $arFields);
                 // создаем событие в модуле статистики
                 if (CModule::IncludeModule("statistic")) {
                     if (!$v->category_set) {
                         $v->T_EVENT1 = "ticket";
                         $v->T_EVENT2 = "";
                         $v->T_EVENT3 = "";
                     }
                     if (strlen($v->T_EVENT3) <= 0) {
                         $v->T_EVENT3 = "http://" . $_SERVER["HTTP_HOST"] . "/bitrix/admin/ticket_edit.php?ID=" . $f->ID . "&lang=" . $v->arrSite["LANGUAGE_ID"];
                     }
                     CStatEvent::AddCurrent($v->T_EVENT1, $v->T_EVENT2, $v->T_EVENT3);
                 }
             }
         }
         // !!! ПРОВЕРИТЬ $arFields ТОЧНО ЛИ ВСЕ $arFields[..] = .. ТАКИЕ ЖЕ КАК В ОРИГИНАЛЕ !!!
         $arFields['ID'] = $f->ID;
         $arFields['MID'] = $MID;
         CTicket::ExecuteEvents('OnAfterTicketAdd', $arFields, true);
     }
     return $f->ID;
 }
Exemplo n.º 23
0
	/**
	 * @param string $ip
	 * @return bool
	 */
	protected function blockCurrentUser($ip = "")
	{
		if(self::currentUserHaveRightsForSkip())
			return false;

		if(!is_string($ip) || $ip === "")
			$ip = $_SERVER["REMOTE_ADDR"];

		$rule = new CSecurityIPRule;

		CTimeZone::Disable();
		$added = $rule->Add(array(
			"RULE_TYPE" => "A",
			"ACTIVE" => "Y",
			"ADMIN_SECTION" => "Y",
			"NAME" => getMessage("SECURITY_FILTER_IP_RULE", array("#IP#" => $ip)),
			"ACTIVE_FROM" => ConvertTimeStamp(false, "FULL"),
			"ACTIVE_TO" => ConvertTimeStamp(time()+COption::getOptionInt("security", "filter_duration")*60, "FULL"),
			"INCL_IPS" => array($ip),
			"INCL_MASKS" => array("/*"),
		));
		CTimeZone::Enable();

		return ($added > 0);
	}
Exemplo n.º 24
0
 public static function Add($arFields)
 {
     global $DB;
     $tm_user = new CUserReportFull($arFields["USER_ID"]);
     $arReportDate = $tm_user->GetReportInfo();
     if ($arReportDate["IS_REPORT_DAY"] != "Y") {
         return false;
     }
     $arFields["DATE_TO"] = ConvertTimeStamp(MakeTimeStamp($arReportDate["DATE_TO"], TM_SHORT_FORMAT), "SHORT");
     $arFields["DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp($arReportDate["DATE_FROM"], TM_SHORT_FORMAT), "SHORT");
     $arFields["REPORT_DATE"] = ConvertTimeStamp(MakeTimeStamp($arFields["REPORT_DATE"], TM_FULL_FORMAT), "FULL");
     foreach (GetModuleEvents('timeman', 'OnBeforeFullReportAdd', true) as $event) {
         if (false === ExecuteModuleEventEx($event, array(&$arFields))) {
             return false;
         }
     }
     if (!self::CheckFields('ADD', $arFields)) {
         return false;
     }
     //we try to find report with DATE_TO>DATE_FROM-of-current-report
     $dbreport = CTimeManReportFull::GetList(array("DATE_FROM" => "DESC"), array(">=DATE_TO" => $arFields["DATE_FROM"], "USER_ID" => $arFields["USER_ID"], "ACTIVE" => "Y"), array("ID", "DATE_TO"), array("nTopCount" => 1));
     if ($last_report = $dbreport->Fetch()) {
         //if we found it
         //fix date from
         $arFields["DATE_FROM"] = ConvertTimeStamp(strtotime("next day", MakeTimeStamp($last_report["DATE_TO"])), "SHORT");
     }
     if (MakeTimeStamp($arFields["DATE_FROM"]) > MakeTimeStamp($arFields["DATE_TO"])) {
         //fix date to
         $arFields["DATE_TO"] = $arFields["DATE_FROM"];
     }
     CTimeZone::Disable();
     $ID = $DB->Add('b_timeman_report_full', $arFields, array('REPORT', 'TASKS', 'EVENTS', 'FILES'));
     CTimeZone::Enable();
     if ($ID > 0) {
         $last_date = ConvertTimeStampForReport(MakeTimeStamp($arFields["DATE_TO"]), "SHORT");
         $arFields['ID'] = $ID;
         foreach (GetModuleEvents('timeman', 'OnAfterFullReportAdd', true) as $a) {
             ExecuteModuleEventEx($a, array($arFields));
         }
         if ($arFields["ACTIVE"] != "N") {
             $tm_user->SetLastDate($arFields["USER_ID"], $last_date);
         }
     }
     return $ID;
 }
Exemplo n.º 25
0
 public static function ExecuteAgents($str_crontab)
 {
     global $DB, $CACHE_MANAGER, $pPERIOD;
     if (defined("BX_FORK_AGENTS_AND_EVENTS_FUNCTION")) {
         if (CMain::ForkActions(array("CAgent", "ExecuteAgents"), array($str_crontab))) {
             return "";
         }
     }
     $saved_time = 0;
     $cache_id = "agents" . $str_crontab;
     if (CACHED_b_agent !== false && $CACHE_MANAGER->Read(CACHED_b_agent, $cache_id, "agents")) {
         $saved_time = $CACHE_MANAGER->Get($cache_id);
         if (time() < $saved_time) {
             return "";
         }
     }
     $uniq = CMain::GetServerUniqID();
     $strSql = "\n\t\t\tSELECT 'x'\n\t\t\tFROM b_agent\n\t\t\tWHERE\n\t\t\t\tACTIVE = 'Y'\n\t\t\t\tAND NEXT_EXEC <= now()\n\t\t\t\tAND (DATE_CHECK IS NULL OR DATE_CHECK <= now())\n\t\t\t\t" . $str_crontab . "\n\t\t\tLIMIT 1\n\t\t";
     $db_result_agents = $DB->Query($strSql);
     if ($db_result_agents->Fetch()) {
         $db_lock = $DB->Query("SELECT GET_LOCK('" . $uniq . "_agent', 0) as L");
         $ar_lock = $db_lock->Fetch();
         if ($ar_lock["L"] == "0") {
             return "";
         }
     } else {
         if (CACHED_b_agent !== false) {
             $rs = $DB->Query("SELECT UNIX_TIMESTAMP(MIN(NEXT_EXEC))-UNIX_TIMESTAMP(NOW()) DATE_DIFF FROM b_agent WHERE ACTIVE='Y' " . $str_crontab . "");
             $ar = $rs->Fetch();
             if (!$ar || $ar["DATE_DIFF"] < 0) {
                 $date_diff = 0;
             } elseif ($ar["DATE_DIFF"] > CACHED_b_agent) {
                 $date_diff = CACHED_b_agent;
             } else {
                 $date_diff = $ar["DATE_DIFF"];
             }
             if ($saved_time > 0) {
                 $CACHE_MANAGER->Clean($cache_id, "agents");
                 $CACHE_MANAGER->Read(CACHED_b_agent, $cache_id, "agents");
             }
             $CACHE_MANAGER->Set($cache_id, intval(time() + $date_diff));
         }
         return "";
     }
     $strSql = "SELECT ID, NAME, AGENT_INTERVAL, IS_PERIOD, MODULE_ID " . "FROM b_agent " . "WHERE ACTIVE='Y' " . "\tAND NEXT_EXEC<=now() " . "\tAND (DATE_CHECK IS NULL OR DATE_CHECK<=now()) " . $str_crontab . " ORDER BY RUNNING ASC, SORT desc";
     $db_result_agents = $DB->Query($strSql);
     $ids = '';
     $agents_array = array();
     while ($db_result_agents_array = $db_result_agents->Fetch()) {
         $agents_array[] = $db_result_agents_array;
         $ids .= ($ids != '' ? ', ' : '') . $db_result_agents_array["ID"];
     }
     if ($ids != '') {
         $strSql = "UPDATE b_agent SET DATE_CHECK=DATE_ADD(IF(DATE_CHECK IS NULL, now(), DATE_CHECK), INTERVAL 600 SECOND) WHERE ID IN (" . $ids . ")";
         $DB->Query($strSql);
     }
     $DB->Query("SELECT RELEASE_LOCK('" . $uniq . "_agent')");
     $logFunction = defined("BX_AGENTS_LOG_FUNCTION") && function_exists(BX_AGENTS_LOG_FUNCTION) ? BX_AGENTS_LOG_FUNCTION : false;
     for ($i = 0, $n = count($agents_array); $i < $n; $i++) {
         $arAgent = $agents_array[$i];
         if ($logFunction) {
             $logFunction($arAgent, "start");
         }
         @set_time_limit(0);
         ignore_user_abort(true);
         if (strlen($arAgent["MODULE_ID"]) > 0 && $arAgent["MODULE_ID"] != "main") {
             if (!CModule::IncludeModule($arAgent["MODULE_ID"])) {
                 continue;
             }
         }
         //update the agent to the running state - if it fails it'll go to the end of the list on the next try
         $DB->Query("UPDATE b_agent SET RUNNING='Y' WHERE ID=" . $arAgent["ID"]);
         //these vars can be assigned within agent code
         $pPERIOD = $arAgent["AGENT_INTERVAL"];
         CTimeZone::Disable();
         global $USER;
         unset($USER);
         $eval_result = "";
         $e = eval("\$eval_result=" . $arAgent["NAME"]);
         unset($USER);
         CTimeZone::Enable();
         if ($logFunction) {
             $logFunction($arAgent, "finish", $eval_result, $e);
         }
         if ($e === false) {
             continue;
         } elseif (strlen($eval_result) <= 0) {
             $strSql = "DELETE FROM b_agent WHERE ID=" . $arAgent["ID"];
         } else {
             $strSql = "\n\t\t\t\t\tUPDATE b_agent SET\n\t\t\t\t\t\tNAME='" . $DB->ForSQL($eval_result, 2000) . "',\n\t\t\t\t\t\tLAST_EXEC=now(),\n\t\t\t\t\t\tNEXT_EXEC=DATE_ADD(" . ($arAgent["IS_PERIOD"] == "Y" ? "NEXT_EXEC" : "now()") . ", INTERVAL " . $pPERIOD . " SECOND),\n\t\t\t\t\t\tDATE_CHECK=NULL,\n\t\t\t\t\t\tRUNNING='N'\n\t\t\t\t\tWHERE ID=" . $arAgent["ID"];
         }
         $DB->Query($strSql);
     }
     return null;
 }
Exemplo n.º 26
0
 function Create($site_id, $max_execution_time, $NS, $arOptions = array())
 {
     @set_time_limit(0);
     if (!is_array($NS)) {
         $NS = array("ID" => 0, "CNT" => 0, "FILE_SIZE" => 0, "FILE_ID" => 1, "FILE_URL_CNT" => 0, "ERROR_CNT" => 0, "PARAM2" => 0);
     } else {
         $NS = array("ID" => intval($NS["ID"]), "CNT" => intval($NS["CNT"]), "FILE_SIZE" => intval($NS["FILE_SIZE"]), "FILE_ID" => intval($NS["FILE_ID"]), "FILE_URL_CNT" => intval($NS["FILE_URL_CNT"]), "ERROR_CNT" => intval($NS["ERROR_CNT"]), "PARAM2" => intval($NS["ID"]));
     }
     if (is_array($max_execution_time)) {
         $record_limit = $max_execution_time[1];
         $max_execution_time = $max_execution_time[0];
     } else {
         $record_limit = 5000;
     }
     if ($max_execution_time > 0) {
         $end_of_execution = time() + $max_execution_time;
     } else {
         $end_of_execution = 0;
     }
     if (is_array($arOptions) && $arOptions["FORUM_TOPICS_ONLY"] == "Y") {
         $bForumTopicsOnly = CModule::IncludeModule("forum");
     } else {
         $bForumTopicsOnly = false;
     }
     if (is_array($arOptions) && $arOptions["BLOG_NO_COMMENTS"] == "Y") {
         $bBlogNoComments = CModule::IncludeModule("blog");
     } else {
         $bBlogNoComments = false;
     }
     if (is_array($arOptions) && $arOptions["USE_HTTPS"] == "Y") {
         $strProto = "https://";
     } else {
         $strProto = "http://";
     }
     $rsSite = CSite::GetByID($site_id);
     if ($arSite = $rsSite->Fetch()) {
         $SERVER_NAME = trim($arSite["SERVER_NAME"]);
         if (strlen($SERVER_NAME) <= 0) {
             $this->m_error = GetMessage("SEARCH_ERROR_SERVER_NAME", array("#SITE_ID#" => '<a href="site_edit.php?LID=' . urlencode($site_id) . '&lang=' . urlencode(LANGUAGE_ID) . '">' . htmlspecialcharsbx($site_id) . '</a>')) . "<br>";
             return false;
         }
         //Cache events
         $this->m_events = GetModuleEvents("search", "OnSearchGetURL", true);
         //Clear error file
         if ($NS["ID"] == 0 && $NS["CNT"] == 0) {
             $e = fopen($arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_errors.xml", "w");
             $strBegin = "<?xml version='1.0' encoding='UTF-8'?>\n<urlset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
             fwrite($e, $strBegin);
         } else {
             $e = fopen($arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_errors.xml", "a");
         }
         if (!$e) {
             $this->m_error = GetMessage("SEARCH_ERROR_OPEN_FILE") . " " . $arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_errors.xml" . "<br>";
             return false;
         }
         //Open current sitemap file
         if ($NS["FILE_SIZE"] == 0) {
             $f = fopen($arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_" . sprintf("%03d", $NS["FILE_ID"]) . ".xml", "w");
             $strBegin = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
             fwrite($f, $strBegin);
             $NS["FILE_SIZE"] += strlen($strBegin);
         } else {
             $f = fopen($arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_" . sprintf("%03d", $NS["FILE_ID"]) . ".xml", "a");
         }
         if (!$f) {
             $this->m_error = GetMessage("SEARCH_ERROR_OPEN_FILE") . " " . $arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_" . sprintf("%03d", $NS["FILE_ID"]) . ".xml" . "<br>";
             return false;
         }
         CTimeZone::Disable();
         $this->GetURLs($site_id, $NS["ID"], $record_limit);
         $bFileIsFull = false;
         while (!$bFileIsFull && ($ar = $this->Fetch())) {
             $record_limit--;
             $NS["ID"] = $ar["ID"];
             if (strlen($ar["URL"]) < 1) {
                 continue;
             }
             if ($bForumTopicsOnly && $ar["MODULE_ID"] == "forum") {
                 //Forum topic ID
                 $PARAM2 = intval($ar["PARAM2"]);
                 if ($NS["PARAM2"] < $PARAM2) {
                     $NS["PARAM2"] = $PARAM2;
                     $arTopic = CForumTopic::GetByIDEx($PARAM2);
                     if ($arTopic) {
                         $ar["FULL_DATE_CHANGE"] = $arTopic["LAST_POST_DATE"];
                     }
                 } else {
                     continue;
                 }
             }
             if ($bBlogNoComments && $ar["MODULE_ID"] == "blog") {
                 if (substr($ar["ITEM_ID"], 0, 1) === "C") {
                     continue;
                 }
             }
             if (preg_match("/^[a-z]+:\\/\\//", $ar["URL"])) {
                 $strURL = $ar["URL"];
             } else {
                 $strURL = $strProto . $ar["SERVER_NAME"] . $ar["URL"];
             }
             $strURL = $this->LocationEncode($this->URLEncode($strURL, "UTF-8"));
             $strTime = $this->TimeEncode(MakeTimeStamp(ConvertDateTime($ar["FULL_DATE_CHANGE"], "DD.MM.YYYY HH:MI:SS"), "DD.MM.YYYY HH:MI:SS"));
             $strToWrite = "\t<url>\n\t\t<loc>" . $strURL . "</loc>\n\t\t<lastmod>" . $strTime . "</lastmod>\n\t</url>\n";
             if (strlen($strURL) > 2048) {
                 fwrite($e, $strToWrite);
                 $NS["ERROR_CNT"]++;
             } else {
                 fwrite($f, $strToWrite);
                 $NS["CNT"]++;
                 $NS["FILE_SIZE"] += strlen($strToWrite);
                 $NS["FILE_URL_CNT"]++;
             }
             //Next File on file size or url count limit
             if ($NS["FILE_SIZE"] > 9000000 || $NS["FILE_URL_CNT"] >= 50000) {
                 $bFileIsFull = true;
             } elseif ($end_of_execution) {
                 if (time() > $end_of_execution) {
                     fclose($e);
                     fclose($f);
                     CTimeZone::Enable();
                     return $NS;
                 }
             }
         }
         CTimeZone::Enable();
         if ($bFileIsFull) {
             fwrite($e, "</urlset>\n");
             fclose($e);
             fwrite($f, "</urlset>\n");
             fclose($f);
             $NS["FILE_SIZE"] = 0;
             $NS["FILE_URL_CNT"] = 0;
             $NS["FILE_ID"]++;
             return $NS;
         } elseif ($record_limit <= 0) {
             return $NS;
         } else {
             fwrite($e, "</urlset>\n");
             fclose($e);
             fwrite($f, "</urlset>\n");
             fclose($f);
         }
         //WRITE INDEX FILE HERE
         $f = fopen($arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_index.xml", "w");
         if (!$f) {
             $this->m_error = GetMessage("SEARCH_ERROR_OPEN_FILE") . " " . $arSite["ABS_DOC_ROOT"] . $arSite["DIR"] . "sitemap_index.xml" . "<br>";
             return false;
         }
         $strBegin = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<sitemapindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
         fwrite($f, $strBegin);
         for ($i = 0; $i <= $NS["FILE_ID"]; $i++) {
             $strFile = $arSite["DIR"] . "sitemap_" . sprintf("%03d", $i) . ".xml";
             $strTime = $this->TimeEncode(filemtime($arSite["ABS_DOC_ROOT"] . $strFile));
             fwrite($f, "\t<sitemap>\n\t\t<loc>" . $this->URLEncode($strProto . $arSite["SERVER_NAME"] . $strFile, "UTF-8") . "</loc>\n\t\t<lastmod>" . $strTime . "</lastmod>\n\t</sitemap>\n");
         }
         fwrite($f, "</sitemapindex>\n");
         fclose($f);
         $this->m_errors_count = $NS["ERROR_CNT"];
         $this->m_errors_href = $strProto . $arSite["SERVER_NAME"] . $arSite["DIR"] . "sitemap_errors.xml";
         $this->m_href = $strProto . $arSite["SERVER_NAME"] . $arSite["DIR"] . "sitemap_index.xml";
         return true;
     } else {
         $this->m_error = GetMessage("SEARCH_ERROR_SITE_ID") . "<br>";
         return false;
     }
 }
Exemplo n.º 27
0
     $rsElements = CIBlockElement::GetPropertyValues($this->SKU_IBLOCK_ID, $arSkuFilter, false, array('ID' => $this->arResult["SKU_PROPERTY_ID_LIST"]));
     while ($arSku = $rsElements->Fetch()) {
         foreach ($arResult["ITEMS"] as $PID => $arItem) {
             if (isset($arSku[$PID]) && $arSku[$this->SKU_PROPERTY_ID] > 0) {
                 if (is_array($arSku[$PID])) {
                     foreach ($arSku[$PID] as $value) {
                         $arElements[$arSku[$this->SKU_PROPERTY_ID]][$PID][] = $value;
                     }
                 } else {
                     $arElements[$arSku[$this->SKU_PROPERTY_ID]][$PID][] = $arSku[$PID];
                 }
             }
         }
     }
 }
 CTimeZone::Disable();
 $uniqTest = array();
 foreach ($arElements as $arElement) {
     $propertyValues = $propertyEmptyValuesCombination;
     $uniqStr = '';
     foreach ($arResult["ITEMS"] as $PID => $arItem) {
         if (is_array($arElement[$PID])) {
             foreach ($arElement[$PID] as $value) {
                 $key = $this->fillItemValues($arResult["ITEMS"][$PID], $value);
                 $propertyValues[$PID][$key] = $arResult["ITEMS"][$PID]["VALUES"][$key]["VALUE"];
                 $uniqStr .= '|' . $key . '|' . $propertyValues[$PID][$key];
             }
         } elseif ($arElement[$PID] !== false) {
             $key = $this->fillItemValues($arResult["ITEMS"][$PID], $arElement[$PID]);
             $propertyValues[$PID][$key] = $arResult["ITEMS"][$PID]["VALUES"][$key]["VALUE"];
             $uniqStr .= '|' . $key . '|' . $propertyValues[$PID][$key];
Exemplo n.º 28
0
 function OnPageStart()
 {
     if (self::isSafetyRequest()) {
         //Check only GET and POST request
         return;
     }
     global $APPLICATION, $DB, $BX_SECURITY_AV_TIMEOUT, $BX_SECURITY_AV_ACTION;
     $BX_SECURITY_AV_TIMEOUT = COption::GetOptionInt("security", "antivirus_timeout");
     $BX_SECURITY_AV_ACTION = COption::GetOptionInt("security", "antivirus_action");
     //user white list
     global $BX_SECURITY_AV_WHITE_LIST, $CACHE_MANAGER;
     if ($CACHE_MANAGER->Read(36000, "b_sec_white_list")) {
         $BX_SECURITY_AV_WHITE_LIST = $CACHE_MANAGER->Get("b_sec_white_list");
     } else {
         $BX_SECURITY_AV_WHITE_LIST = array();
         $res = CSecurityAntiVirus::GetWhiteList();
         while ($ar = $res->Fetch()) {
             $BX_SECURITY_AV_WHITE_LIST[] = $ar["WHITE_SUBSTR"];
         }
         $CACHE_MANAGER->Set("b_sec_white_list", $BX_SECURITY_AV_WHITE_LIST);
     }
     //Init DB in order to be able to register the event in the shutdown function
     CSecurityDB::Init();
     //Check if we started output buffering in auto_prepend_file
     //so we'll have chances to detect virus before prolog
     if (defined("BX_SECURITY_AV_STARTED")) {
         $content = ob_get_contents();
         ob_end_clean();
         if (strlen($content)) {
             $Antivirus = new CSecurityAntiVirus("pre");
             $Antivirus->Analyze($content);
             echo $content;
         }
     }
     //Initiate monitoring of output that can be after working antivirus.
     register_shutdown_function(array('CSecurityAntiVirus', 'PHPShutdown'));
     //Check notification from previous hit
     $fname = $_SERVER["DOCUMENT_ROOT"] . BX_PERSONAL_ROOT . "/managed_cache/b_sec_virus";
     if (file_exists($fname)) {
         $rsInfo = $DB->Query("select * from b_sec_virus where SENT='N'");
         if ($arInfo = $rsInfo->Fetch()) {
             if ($table_lock = CSecurityDB::LockTable('b_sec_virus', $APPLICATION->GetServerUniqID() . "_virus")) {
                 $SITE_ID = false;
                 do {
                     $SITE_ID = $arInfo["SITE_ID"];
                     if (strlen($arInfo["INFO"])) {
                         $arEvent = unserialize(base64_decode($arInfo["INFO"]));
                         if (is_array($arEvent)) {
                             $DB->Add("b_event_log", $arEvent, array("DESCRIPTION"));
                         }
                     }
                     CSecurityDB::Query("update b_sec_virus set SENT='Y' where ID='" . $arInfo["ID"] . "'", '');
                 } while ($arInfo = $rsInfo->Fetch());
                 CTimeZone::Disable();
                 $arDate = localtime(time());
                 $date = mktime($arDate[2], $arDate[1] - $BX_SECURITY_AV_TIMEOUT, 0, $arDate[4] + 1, $arDate[3], 1900 + $arDate[5]);
                 CSecurityDB::Query("DELETE FROM b_sec_virus WHERE TIMESTAMP_X <= " . $DB->CharToDateFunction(ConvertTimeStamp($date, "FULL")), '');
                 CTimeZone::Enable();
                 CEvent::Send("VIRUS_DETECTED", $SITE_ID ? $SITE_ID : SITE_ID, array("EMAIL" => COption::GetOptionString("main", "email_from", "")));
                 CSecurityDB::UnlockTable($table_lock);
                 @unlink($fname);
             }
         }
     }
 }
Exemplo n.º 29
0
 public static function DoProcessOrder(&$arOrder, $arOptions, &$arErrors)
 {
     if (empty($arOrder['BASKET_ITEMS']) || !is_array($arOrder['BASKET_ITEMS'])) {
         return;
     }
     $arIDS = array();
     $groupDiscountIterator = Internals\DiscountGroupTable::getList(array('select' => array('DISCOUNT_ID'), 'filter' => array('@GROUP_ID' => CUser::GetUserGroup($arOrder['USER_ID']), '=ACTIVE' => 'Y')));
     while ($groupDiscount = $groupDiscountIterator->fetch()) {
         $groupDiscount['DISCOUNT_ID'] = (int) $groupDiscount['DISCOUNT_ID'];
         if ($groupDiscount['DISCOUNT_ID'] > 0) {
             $arIDS[$groupDiscount['DISCOUNT_ID']] = true;
         }
     }
     if (!empty($arIDS)) {
         $arIDS = array_keys($arIDS);
         $couponList = DiscountCouponsManager::getForApply(array('MODULE' => 'sale', 'DISCOUNT_ID' => $arIDS), array(), true);
         $arExtend = array('catalog' => array('fields' => true, 'props' => true));
         foreach (GetModuleEvents('sale', 'OnExtendBasketItems', true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend));
         }
         foreach ($arOrder['BASKET_ITEMS'] as &$arOneItem) {
             if (array_key_exists('PRODUCT_PROVIDER_CLASS', $arOneItem) && empty($arOneItem['PRODUCT_PROVIDER_CLASS']) && array_key_exists('CALLBACK_FUNC', $arOneItem) && empty($arOneItem['CALLBACK_FUNC']) && (!isset($arOneItem['CUSTOM_PRICE']) || $arOneItem['CUSTOM_PRICE'] != 'Y')) {
                 if (isset($arOneItem['DISCOUNT_PRICE'])) {
                     $arOneItem['PRICE'] += $arOneItem['DISCOUNT_PRICE'];
                     $arOneItem['DISCOUNT_PRICE'] = 0;
                 }
             }
         }
         if (isset($arOneItem)) {
             unset($arOneItem);
         }
         if (empty(self::$cacheDiscountHandlers)) {
             self::$cacheDiscountHandlers = CSaleDiscount::getDiscountHandlers($arIDS);
         } else {
             $needDiscountHandlers = array();
             foreach ($arIDS as &$discountID) {
                 if (!isset(self::$cacheDiscountHandlers[$discountID])) {
                     $needDiscountHandlers[] = $discountID;
                 }
             }
             unset($discountID);
             if (!empty($needDiscountHandlers)) {
                 $discountHandlersList = CSaleDiscount::getDiscountHandlers($needDiscountHandlers);
                 if (!empty($discountHandlersList)) {
                     foreach ($discountHandlersList as $discountID => $discountHandlers) {
                         self::$cacheDiscountHandlers[$discountID] = $discountHandlers;
                     }
                     unset($discountHandlers, $discountID);
                 }
                 unset($discountHandlersList);
             }
             unset($needDiscountHandlers);
         }
         CTimeZone::Disable();
         $currentDatetime = new Type\DateTime();
         $discountSelect = array('ID', 'PRIORITY', 'SORT', 'LAST_DISCOUNT', 'UNPACK', 'APPLICATION', 'USE_COUPONS');
         $discountOrder = array('PRIORITY' => 'DESC', 'SORT' => 'ASC', 'ID' => 'ASC');
         $discountFilter = array('@ID' => $arIDS, '=LID' => $arOrder['SITE_ID'], array('LOGIC' => 'OR', 'ACTIVE_FROM' => '', '<=ACTIVE_FROM' => $currentDatetime), array('LOGIC' => 'OR', 'ACTIVE_TO' => '', '>=ACTIVE_TO' => $currentDatetime));
         if (empty($couponList)) {
             $discountFilter['=USE_COUPONS'] = 'N';
         } else {
             $discountFilter[] = array('LOGIC' => 'OR', '=USE_COUPONS' => 'N', array('=USE_COUPONS' => 'Y', '=COUPON.COUPON' => array_keys($couponList)));
             $discountSelect['DISCOUNT_COUPON'] = 'COUPON.COUPON';
         }
         $discountIterator = Internals\DiscountTable::getList(array('select' => $discountSelect, 'filter' => $discountFilter, 'order' => $discountOrder));
         $discountApply = array();
         $resultDiscountList = array();
         $resultDiscountKeys = array();
         $resultDiscountIndex = 0;
         while ($discount = $discountIterator->fetch()) {
             $discount['ID'] = (int) $discount['ID'];
             if (isset($discountApply[$discount['ID']])) {
                 continue;
             }
             $discount['MODULE'] = 'sale';
             $discountApply[$discount['ID']] = true;
             $applyFlag = true;
             if (isset(self::$cacheDiscountHandlers[$discount['ID']])) {
                 $moduleList = self::$cacheDiscountHandlers[$discount['ID']]['MODULES'];
                 if (!empty($moduleList)) {
                     foreach ($moduleList as &$moduleID) {
                         if (!isset(self::$usedModules[$moduleID])) {
                             self::$usedModules[$moduleID] = Loader::includeModule($moduleID);
                         }
                         if (!self::$usedModules[$moduleID]) {
                             $applyFlag = false;
                             break;
                         }
                     }
                     unset($moduleID);
                 }
                 unset($moduleList);
             }
             if ($applyFlag && self::__Unpack($arOrder, $discount['UNPACK'])) {
                 $oldOrder = $arOrder;
                 self::__ApplyActions($arOrder, $discount['APPLICATION']);
                 $discountResult = self::getDiscountResult($oldOrder, $arOrder, false);
                 if (!empty($discountResult['DELIVERY']) || !empty($discountResult['BASKET'])) {
                     if ($discount['USE_COUPONS'] == 'Y' && !empty($discount['DISCOUNT_COUPON'])) {
                         if ($couponList[$discount['DISCOUNT_COUPON']]['TYPE'] == Internals\DiscountCouponTable::TYPE_BASKET_ROW) {
                             self::changeDiscountResult($oldOrder, $arOrder, $discountResult);
                         }
                         $couponApply = DiscountCouponsManager::setApply($discount['DISCOUNT_COUPON'], $discountResult);
                     }
                     $resultDiscountList[$resultDiscountIndex] = array('MODULE_ID' => $discount['MODULE_ID'], 'ID' => $discount['ID'], 'PRIORITY' => $discount['PRIORITY'], 'SORT' => $discount['SORT'], 'LAST_DISCOUNT' => $discount['LAST_DISCOUNT'], 'UNPACK' => $discount['UNPACK'], 'APPLICATION' => $discount['APPLICATION'], 'RESULT' => $discountResult, 'HANDLERS' => self::$cacheDiscountHandlers[$discount['ID']], 'USE_COUPONS' => $discount['USE_COUPONS'], 'COUPON' => $discount['USE_COUPONS'] == 'Y' ? $couponList[$discount['DISCOUNT_COUPON']] : false);
                     $resultDiscountKeys[$discount['ID']] = $resultDiscountIndex;
                     $resultDiscountIndex++;
                     if ($discount['LAST_DISCOUNT'] == 'Y') {
                         break;
                     }
                 }
                 unset($discountResult);
             }
         }
         unset($discount, $discountIterator);
         CTimeZone::Enable();
         if ($resultDiscountIndex > 0) {
             $discountIterator = Internals\DiscountTable::getList(array('select' => array('ID', 'NAME', 'CONDITIONS', 'ACTIONS'), 'filter' => array('@ID' => array_keys($resultDiscountKeys))));
             while ($discount = $discountIterator->fetch()) {
                 $discount['ID'] = (int) $discount['ID'];
                 if (isset($resultDiscountKeys[$discount['ID']])) {
                     $key = $resultDiscountKeys[$discount['ID']];
                     $resultDiscountList[$key]['NAME'] = $discount['NAME'];
                     $resultDiscountList[$key]['CONDITIONS'] = $discount['CONDITIONS'];
                     $resultDiscountList[$key]['ACTIONS'] = $discount['ACTIONS'];
                 }
             }
             unset($discount, $discountIterator);
         }
         $arOrder["ORDER_PRICE"] = 0;
         $arOrder["ORDER_WEIGHT"] = 0;
         $arOrder["USE_VAT"] = false;
         $arOrder["VAT_RATE"] = 0;
         $arOrder["VAT_SUM"] = 0;
         $arOrder["DISCOUNT_PRICE"] = 0.0;
         $arOrder["DISCOUNT_VALUE"] = $arOrder["DISCOUNT_PRICE"];
         $arOrder["DELIVERY_PRICE"] = $arOrder["PRICE_DELIVERY"];
         foreach ($arOrder['BASKET_ITEMS'] as &$arShoppingCartItem) {
             if (!CSaleBasketHelper::isSetItem($arShoppingCartItem)) {
                 $arOrder["ORDER_PRICE"] += doubleval($arShoppingCartItem["PRICE"]) * doubleval($arShoppingCartItem["QUANTITY"]);
                 $arOrder["ORDER_WEIGHT"] += $arShoppingCartItem["WEIGHT"] * $arShoppingCartItem["QUANTITY"];
                 $arShoppingCartItem["PRICE_FORMATED"] = CCurrencyLang::CurrencyFormat($arShoppingCartItem["PRICE"], $arShoppingCartItem["CURRENCY"], true);
                 $arShoppingCartItem["DISCOUNT_PRICE_PERCENT"] = 0;
                 if ($arShoppingCartItem["DISCOUNT_PRICE"] + $arShoppingCartItem["PRICE"] > 0) {
                     $arShoppingCartItem["DISCOUNT_PRICE_PERCENT"] = $arShoppingCartItem["DISCOUNT_PRICE"] * 100 / ($arShoppingCartItem["DISCOUNT_PRICE"] + $arShoppingCartItem["PRICE"]);
                 }
                 $arShoppingCartItem["DISCOUNT_PRICE_PERCENT_FORMATED"] = roundEx($arShoppingCartItem["DISCOUNT_PRICE_PERCENT"], SALE_VALUE_PRECISION) . "%";
                 if ($arShoppingCartItem["VAT_RATE"] > 0) {
                     $arOrder["USE_VAT"] = true;
                     if ($arShoppingCartItem["VAT_RATE"] > $arOrder["VAT_RATE"]) {
                         $arOrder["VAT_RATE"] = $arShoppingCartItem["VAT_RATE"];
                     }
                     $arOrder["VAT_SUM"] += $arShoppingCartItem["VAT_VALUE"] * $arShoppingCartItem["QUANTITY"];
                 }
             }
         }
         if (isset($arShoppingCartItem)) {
             unset($arShoppingCartItem);
         }
         $arOrder['DISCOUNT_LIST'] = $resultDiscountList;
     }
 }
Exemplo n.º 30
0
 function Set($arFields, $BANNER_ID, $CHECK_RIGHTS = "Y")
 {
     $err_mess = CAdvBanner_all::err_mess() . "<br>Function: Set<br>Line: ";
     global $DB, $USER;
     $BANNER_ID = intval($BANNER_ID);
     if (CAdvBanner::CheckFields($arFields, $BANNER_ID, $CHECK_RIGHTS)) {
         if ($CHECK_RIGHTS == "Y") {
             $USER_ID = intval($USER->GetID());
             $isAdmin = CAdvContract::IsAdmin();
             $isManager = CAdvContract::IsManager();
             $CHECK_CONTRACT_RIGHTS = "Y";
             if ($isManager) {
                 $CHECK_CONTRACT_RIGHTS = "N";
             }
         } else {
             $USER_ID = 0;
             $isAdmin = $isManager = true;
             $CHECK_CONTRACT_RIGHTS = "N";
         }
         $arFields_i = array();
         $arrKeys = array_keys($arFields);
         $arBanner = array();
         if ($BANNER_ID > 0) {
             $rsBanner = CAdvBanner::GetByID($BANNER_ID, $CHECK_RIGHTS);
             $arBanner = $rsBanner->Fetch();
             if (!in_array("CONTRACT_ID", $arrKeys)) {
                 $CONTRACT_ID = intval($arBanner["CONTRACT_ID"]);
             } else {
                 $CONTRACT_ID = intval($arFields["CONTRACT_ID"]);
             }
         } else {
             $CONTRACT_ID = intval($arFields["CONTRACT_ID"]);
         }
         $modify_status = "N";
         if ($CONTRACT_ID > 0) {
             if ($BANNER_ID <= 0 && (!$isAdmin || !$isManager || in_array("STATUS_SID", $arrKeys))) {
                 $modify_status = "Y";
             }
             $rsContract = CAdvContract::GetByID($CONTRACT_ID, $CHECK_CONTRACT_RIGHTS);
             $arContract = $rsContract->Fetch();
             if (($isAdmin || $isManager) && in_array("RESET_VISITOR_COUNT", $arrKeys) && $arFields["RESET_VISITOR_COUNT"]) {
                 $arFields_i["VISITOR_COUNT"] = 0;
                 // если баннер уже показывался то
                 if (intval($arBanner["VISITOR_COUNT"]) > 0) {
                     // уменьшим счетчик у контракта
                     $value = intval($arContract["VISITOR_COUNT"]) - intval($arBanner["VISITOR_COUNT"]);
                     $value = $value < 0 ? 0 : $value;
                     CAdvContract::Set(array("VISITOR_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
                 }
             }
             if (($isAdmin || $isManager) && in_array("RESET_SHOW_COUNT", $arrKeys) && $arFields["RESET_SHOW_COUNT"]) {
                 $arFields_i["SHOW_COUNT"] = 0;
                 // если баннер уже показывался то
                 if (intval($arBanner["SHOW_COUNT"]) > 0) {
                     // уменьшим счетчик у контракта
                     $value = intval($arContract["SHOW_COUNT"]) - intval($arBanner["SHOW_COUNT"]);
                     $value = $value < 0 ? 0 : $value;
                     CAdvContract::Set(array("SHOW_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
                 }
             }
             if (($isAdmin || $isManager) && in_array("FIX_CLICK", $arrKeys) && ($arFields["FIX_CLICK"] == "Y" || $arFields["FIX_CLICK"] == "N")) {
                 $arFields_i["FIX_CLICK"] = "'" . $arFields["FIX_CLICK"] . "'";
             }
             if (($isAdmin || $isManager) && in_array("FIX_SHOW", $arrKeys) && ($arFields["FIX_SHOW"] == "Y" || $arFields["FIX_SHOW"] == "N")) {
                 $arFields_i["FIX_SHOW"] = "'" . $arFields["FIX_SHOW"] . "'";
             }
             if (($isAdmin || $isManager) && in_array("FLYUNIFORM", $arrKeys) && ($arFields["FLYUNIFORM"] == "Y" || $arFields["FLYUNIFORM"] == "N")) {
                 $arFields_i["FLYUNIFORM"] = "'" . $arFields["FLYUNIFORM"] . "'";
             }
             if (($isAdmin || $isManager) && in_array("RESET_CLICK_COUNT", $arrKeys) && $arFields["RESET_CLICK_COUNT"]) {
                 $arFields_i["CLICK_COUNT"] = 0;
                 // если на баннер уже кликали то
                 if (intval($arBanner["CLICK_COUNT"]) > 0) {
                     // уменьшим счетчик у контракта
                     $value = intval($arContract["CLICK_COUNT"]) - intval($arBanner["CLICK_COUNT"]);
                     $value = $value < 0 ? 0 : $value;
                     CAdvContract::Set(array("CLICK_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
                 }
             }
             if (($isAdmin || $isManager) && in_array("KEYWORDS", $arrKeys)) {
                 $arFields_i["KEYWORDS"] = "'" . $DB->ForSql($arFields["KEYWORDS"], 2000) . "'";
             }
             if (in_array("CONTRACT_ID", $arrKeys) && intval($arFields["CONTRACT_ID"]) > 0) {
                 $arFields_i["CONTRACT_ID"] = intval($arFields["CONTRACT_ID"]);
             }
             if (in_array("TYPE_SID", $arrKeys) && strlen($arFields["TYPE_SID"]) > 0) {
                 $arFields_i["TYPE_SID"] = "'" . $DB->ForSql($arFields["TYPE_SID"], 255) . "'";
                 if ("'" . $DB->ForSql($arBanner["TYPE_SID"], 255) . "'" != $arFields_i["TYPE_SID"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("NAME", $arrKeys)) {
                 $arFields_i["NAME"] = "'" . $DB->ForSql($arFields["NAME"], 255) . "'";
             }
             if (in_array("GROUP_SID", $arrKeys)) {
                 $arFields_i["GROUP_SID"] = "'" . $DB->ForSql($arFields["GROUP_SID"], 255) . "'";
             }
             if (in_array("ACTIVE", $arrKeys) && ($arFields["ACTIVE"] == "Y" || $arFields["ACTIVE"] == "N")) {
                 $arFields_i["ACTIVE"] = "'" . $arFields["ACTIVE"] . "'";
             }
             if (in_array("WEIGHT", $arrKeys)) {
                 $arFields_i["WEIGHT"] = intval($arFields["WEIGHT"]);
             }
             if (in_array("MAX_VISITOR_COUNT", $arrKeys)) {
                 if (strlen($arFields["MAX_VISITOR_COUNT"]) > 0) {
                     $arFields_i["MAX_VISITOR_COUNT"] = intval($arFields["MAX_VISITOR_COUNT"]);
                 } else {
                     $arFields_i["MAX_VISITOR_COUNT"] = "null";
                 }
             }
             if (in_array("SHOWS_FOR_VISITOR", $arrKeys)) {
                 if (strlen($arFields["SHOWS_FOR_VISITOR"]) > 0) {
                     $arFields_i["SHOWS_FOR_VISITOR"] = intval($arFields["SHOWS_FOR_VISITOR"]);
                 } else {
                     $arFields_i["SHOWS_FOR_VISITOR"] = "null";
                 }
             }
             if (in_array("MAX_SHOW_COUNT", $arrKeys)) {
                 if (strlen($arFields["MAX_SHOW_COUNT"]) > 0) {
                     $arFields_i["MAX_SHOW_COUNT"] = intval($arFields["MAX_SHOW_COUNT"]);
                 } else {
                     $arFields_i["MAX_SHOW_COUNT"] = "null";
                 }
             }
             if (in_array("MAX_CLICK_COUNT", $arrKeys)) {
                 if (strlen($arFields["MAX_CLICK_COUNT"]) > 0) {
                     $arFields_i["MAX_CLICK_COUNT"] = intval($arFields["MAX_CLICK_COUNT"]);
                 } else {
                     $arFields_i["MAX_CLICK_COUNT"] = "null";
                 }
             }
             if (in_array("DATE_SHOW_FROM", $arrKeys)) {
                 if (strlen($arFields["DATE_SHOW_FROM"]) > 0) {
                     $arFields_i["DATE_SHOW_FROM"] = $DB->CharToDateFunction($arFields["DATE_SHOW_FROM"]);
                 } else {
                     $arFields_i["DATE_SHOW_FROM"] = "null";
                 }
             }
             if (in_array("DATE_SHOW_TO", $arrKeys)) {
                 if (strlen($arFields["DATE_SHOW_TO"]) > 0) {
                     $time = "";
                     if (defined("FORMAT_DATE") && strlen($arFields["DATE_SHOW_TO"]) <= strlen(FORMAT_DATE)) {
                         $time = " 23:59:59";
                     }
                     $arFields_i["DATE_SHOW_TO"] = $DB->CharToDateFunction($arFields["DATE_SHOW_TO"] . $time);
                 } else {
                     $arFields_i["DATE_SHOW_TO"] = "null";
                 }
             }
             if (in_array("DATE_SHOW_FIRST", $arrKeys)) {
                 $arFields_i["DATE_SHOW_FIRST"] = "null";
             }
             if (in_array("arrIMAGE_ID", $arrKeys) && is_array($arFields["arrIMAGE_ID"])) {
                 $arIMAGE = $arFields["arrIMAGE_ID"];
                 $arIMAGE["MODULE_ID"] = "advertising";
                 if ($BANNER_ID > 0) {
                     $z = $DB->Query("SELECT IMAGE_ID FROM b_adv_banner WHERE ID='{$BANNER_ID}'", false, $err_mess . __LINE__);
                     $zr = $z->Fetch();
                     $arIMAGE["old_file"] = $zr["IMAGE_ID"];
                 }
                 if (strlen($arIMAGE["name"]) > 0 || strlen($arIMAGE["del"]) > 0) {
                     $subdir = COption::GetOptionString("advertising", "UPLOAD_SUBDIR");
                     $fid = CFile::SaveFile($arIMAGE, $subdir);
                     if (intval($fid) > 0) {
                         $arFields_i["IMAGE_ID"] = intval($fid);
                     } else {
                         $arFields_i["IMAGE_ID"] = "null";
                     }
                     if (intval($arBanner["IMAGE_ID"]) != intval($arFields_i["IMAGE_ID"])) {
                         $modify_status = "Y";
                     }
                 }
             }
             if (in_array("IMAGE_ALT", $arrKeys)) {
                 $arFields_i["IMAGE_ALT"] = "'" . $DB->ForSql($arFields["IMAGE_ALT"], 255) . "'";
                 if ("'" . $DB->ForSql($arBanner["IMAGE_ALT"], 255) . "'" != $arFields_i["IMAGE_ALT"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("URL", $arrKeys)) {
                 $arFields_i["URL"] = "'" . $DB->ForSql($arFields["URL"], 2000) . "'";
                 if ("'" . $DB->ForSql($arBanner["URL"], 2000) . "'" != $arFields_i["URL"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("URL_TARGET", $arrKeys)) {
                 $arFields_i["URL_TARGET"] = "'" . $DB->ForSql($arFields["URL_TARGET"], 255) . "'";
                 if ("'" . $DB->ForSql($arBanner["URL_TARGET"], 255) . "'" != $arFields_i["URL_TARGET"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("NO_URL_IN_FLASH", $arrKeys) && ($arFields["NO_URL_IN_FLASH"] == "Y" || $arFields["NO_URL_IN_FLASH"] == "N")) {
                 $arFields_i["NO_URL_IN_FLASH"] = "'" . $arFields["NO_URL_IN_FLASH"] . "'";
                 if ($arBanner["NO_URL_IN_FLASH"] != $arFields_i["NO_URL_IN_FLASH"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("CODE", $arrKeys)) {
                 $arFields_i["CODE"] = $arFields["CODE"];
                 if ($arBanner["CODE"] != $arFields_i["CODE"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("FLASH_JS", $arrKeys) && ($arFields["FLASH_JS"] == "Y" || $arFields["FLASH_JS"] == "N")) {
                 $arFields_i["FLASH_JS"] = "'" . $arFields["FLASH_JS"] . "'";
                 if ("'" . $arBanner["FLASH_JS"] . "'" != $arFields_i["FLASH_JS"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("FLASH_VER", $arrKeys)) {
                 $arFields_i["FLASH_VER"] = "'" . $DB->ForSQL($arFields["FLASH_VER"], 20) . "'";
                 if ("'" . $DB->ForSQL($arBanner["FLASH_VER"], 20) . "'" != $arFields_i["FLASH_VER"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("arrFlashIMAGE_ID", $arrKeys) && is_array($arFields["arrFlashIMAGE_ID"])) {
                 $arrFlashIMAGE = $arFields["arrFlashIMAGE_ID"];
                 $arrFlashIMAGE["MODULE_ID"] = "advertising";
                 if ($BANNER_ID > 0) {
                     $z = $DB->Query("SELECT FLASH_IMAGE FROM b_adv_banner WHERE ID='{$BANNER_ID}'", false, $err_mess . __LINE__);
                     if ($zr = $z->Fetch()) {
                         $arrFlashIMAGE["old_file"] = $zr["FLASH_IMAGE"];
                     }
                 }
                 if (strlen($arrFlashIMAGE["name"]) > 0 || strlen($arrFlashIMAGE["del"]) > 0) {
                     $subdir = COption::GetOptionString("advertising", "UPLOAD_SUBDIR");
                     $fid = CFile::SaveFile($arrFlashIMAGE, $subdir);
                     if (intval($fid) > 0) {
                         $arFields_i["FLASH_IMAGE"] = intval($fid);
                     } else {
                         $arFields_i["FLASH_IMAGE"] = "null";
                     }
                     if (intval($arBanner["FLASH_IMAGE"]) != intval($arFields_i["FLASH_IMAGE"])) {
                         $modify_status = "Y";
                     }
                 }
             }
             if (in_array("AD_TYPE", $arrKeys)) {
                 $arFields_i["AD_TYPE"] = "'" . $DB->ForSql($arFields["AD_TYPE"], 20) . "'";
                 if ("'" . $DB->ForSql($arBanner["AD_TYPE"], 20) . "'" != $arFields_i["AD_TYPE"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("FLASH_TRANSPARENT", $arrKeys)) {
                 $arFields_i["FLASH_TRANSPARENT"] = "'" . $DB->ForSql($arFields["FLASH_TRANSPARENT"], 11) . "'";
                 if ("'" . $DB->ForSql($arBanner["FLASH_TRANSPARENT"], 11) . "'" != $arFields_i["FLASH_TRANSPARENT"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("CODE_TYPE", $arrKeys)) {
                 $arFields_i["CODE_TYPE"] = $arFields["CODE_TYPE"] == "text" ? "'text'" : "'html'";
                 $value = $arBanner["CODE_TYPE"] == "text" ? "'text'" : "'html'";
                 if ($value != $arFields_i["CODE_TYPE"]) {
                     $modify_status = "Y";
                 }
             }
             if (in_array("STAT_EVENT_1", $arrKeys)) {
                 $arFields_i["STAT_EVENT_1"] = "'" . $DB->ForSql($arFields["STAT_EVENT_1"], 255) . "'";
             }
             if (in_array("STAT_EVENT_2", $arrKeys)) {
                 $arFields_i["STAT_EVENT_2"] = "'" . $DB->ForSql($arFields["STAT_EVENT_2"], 255) . "'";
             }
             if (in_array("STAT_EVENT_3", $arrKeys)) {
                 $arFields_i["STAT_EVENT_3"] = "'" . $DB->ForSql($arFields["STAT_EVENT_3"], 255) . "'";
             }
             if (in_array("FOR_NEW_GUEST", $arrKeys)) {
                 if ($arFields["FOR_NEW_GUEST"] == "Y" || $arFields["FOR_NEW_GUEST"] == "N") {
                     $arFields_i["FOR_NEW_GUEST"] = "'" . $arFields["FOR_NEW_GUEST"] . "'";
                 } elseif ($arFields["FOR_NEW_GUEST"] == "NOT_REF" || $arFields["FOR_NEW_GUEST"] == "ALL" || strlen($arFields["FOR_NEW_GUEST"]) <= 0) {
                     $arFields_i["FOR_NEW_GUEST"] = "null";
                 }
             }
             if (in_array("COMMENTS", $arrKeys)) {
                 $arFields_i["COMMENTS"] = "'" . $DB->ForSql($arFields["COMMENTS"], 2000) . "'";
             }
             if (($isAdmin || $isManager) && in_array("STATUS_COMMENTS", $arrKeys)) {
                 $arFields_i["STATUS_COMMENTS"] = "'" . $DB->ForSql($arFields["STATUS_COMMENTS"], 2000) . "'";
             }
             $email_notify = "N";
             if ($modify_status == "Y" || in_array("STATUS_SID", $arrKeys) && ($isAdmin || $isManager)) {
                 $new_status = $isAdmin || $isManager ? $arFields["STATUS_SID"] : $arContract["DEFAULT_STATUS_SID"];
                 $arFields_i["STATUS_SID"] = "'" . $DB->ForSql($new_status, 255) . "'";
                 // если статус изменился то
                 if ("'" . $DB->ForSql($arBanner["STATUS_SID"], 255) . "'" != $arFields_i["STATUS_SID"]) {
                     $email_notify = "Y";
                 }
             }
             if (in_array("arrSITE", $arrKeys)) {
                 $arFields_i["FIRST_SITE_ID"] = "''";
                 if (is_array($arFields["arrSITE"])) {
                     $arrSITE = array_unique($arFields["arrSITE"]);
                     reset($arrSITE);
                     list(, $site_id) = each($arrSITE);
                     $arFields_i["FIRST_SITE_ID"] = "'" . $DB->ForSql($site_id, 2) . "'";
                 }
             }
             if (in_array("SHOW_USER_GROUP", $arrKeys)) {
                 if ($arFields["SHOW_USER_GROUP"] == "Y" && (in_array("arrUSERGROUP", $arrKeys) && count($arFields["arrUSERGROUP"]) > 0)) {
                     $SHOW_USER_GROUP = "Y";
                 } else {
                     $SHOW_USER_GROUP = "N";
                 }
                 $arFields_i["SHOW_USER_GROUP"] = "'" . $DB->ForSql($SHOW_USER_GROUP, 1) . "'";
             }
             if (in_array("STAT_TYPE", $arrKeys)) {
                 if ($arFields["STAT_TYPE"] === "CITY") {
                     $arFields_i["STAT_TYPE"] = "'CITY'";
                 } elseif ($arFields["STAT_TYPE"] === "REGION") {
                     $arFields_i["STAT_TYPE"] = "'REGION'";
                 } else {
                     $arFields_i["STAT_TYPE"] = "'COUNTRY'";
                 }
             }
             if (intval($BANNER_ID) > 0) {
                 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"])) {
                     $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
                 } else {
                     $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
                 }
                 if (in_array("MODIFIED_BY", $arrKeys)) {
                     $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
                 } else {
                     $arFields_i["MODIFIED_BY"] = $USER_ID;
                 }
                 CAdvBanner::Update($arFields_i, $BANNER_ID);
             } else {
                 if (in_array("DATE_CREATE", $arrKeys) && CheckDateTime($arFields["DATE_CREATE"])) {
                     $arFields_i["DATE_CREATE"] = $DB->CharToDateFunction($arFields["DATE_CREATE"]);
                 } else {
                     $arFields_i["DATE_CREATE"] = $DB->GetNowFunction();
                 }
                 if (in_array("CREATED_BY", $arrKeys)) {
                     $arFields_i["CREATED_BY"] = intval($arFields["CREATED_BY"]);
                 } else {
                     $arFields_i["CREATED_BY"] = $USER_ID;
                 }
                 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"])) {
                     $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
                 } else {
                     $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
                 }
                 if (in_array("MODIFIED_BY", $arrKeys)) {
                     $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
                 } else {
                     $arFields_i["MODIFIED_BY"] = $USER_ID;
                 }
                 $BANNER_ID = CAdvBanner::Add($arFields_i);
             }
             $BANNER_ID = intval($BANNER_ID);
             if ($BANNER_ID > 0) {
                 if (in_array("arrSITE", $arrKeys)) {
                     CAdvBanner::DeleteSiteLink($BANNER_ID);
                     if (is_array($arFields["arrSITE"])) {
                         $arrSITE = array_unique($arFields["arrSITE"]);
                         reset($arrSITE);
                         foreach ($arrSITE as $sid) {
                             if (strlen(trim($sid)) > 0) {
                                 $strSql = "INSERT INTO b_adv_banner_2_site (BANNER_ID, SITE_ID) VALUES ({$BANNER_ID}, '" . $DB->ForSql($sid, 2) . "')";
                                 $DB->Query($strSql, false, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrSHOW_PAGE", $arrKeys)) {
                     CAdvBanner::DeletePageLink($BANNER_ID, " and SHOW_ON_PAGE='Y'");
                     if (is_array($arFields["arrSHOW_PAGE"])) {
                         $arrPage = array_unique($arFields["arrSHOW_PAGE"]);
                         foreach ($arrPage as $page) {
                             $page = trim($page);
                             if (strlen($page) > 0) {
                                 $arFields_i = array("BANNER_ID" => $BANNER_ID, "PAGE" => "'" . $DB->ForSql($page, 255) . "'", "SHOW_ON_PAGE" => "'Y'");
                                 $DB->Insert("b_adv_banner_2_page", $arFields_i, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrNOT_SHOW_PAGE", $arrKeys)) {
                     CAdvBanner::DeletePageLink($BANNER_ID, " and SHOW_ON_PAGE='N'");
                     if (is_array($arFields["arrNOT_SHOW_PAGE"])) {
                         $arrPage = array_unique($arFields["arrNOT_SHOW_PAGE"]);
                         foreach ($arrPage as $page) {
                             $page = trim($page);
                             if (strlen($page) > 0) {
                                 $arFields_i = array("BANNER_ID" => $BANNER_ID, "PAGE" => "'" . $DB->ForSql($page, 255) . "'", "SHOW_ON_PAGE" => "'N'");
                                 $DB->Insert("b_adv_banner_2_page", $arFields_i, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrCOUNTRY", $arrKeys)) {
                     $iCounter = 0;
                     CAdvBanner::DeleteCountryLink($BANNER_ID);
                     if (is_array($arFields["arrCOUNTRY"])) {
                         $arrCOUNTRY = array();
                         foreach ($arFields["arrCOUNTRY"] as $COUNTRY) {
                             if (is_array($COUNTRY)) {
                                 $COUNTRY["COUNTRY_ID"] = trim($COUNTRY["COUNTRY_ID"]);
                                 if (strlen($COUNTRY["COUNTRY_ID"]) <= 0) {
                                     continue;
                                 }
                                 $key = $COUNTRY["COUNTRY_ID"] . "|" . $COUNTRY["REGION"] . "|" . $COUNTRY["CITY_ID"];
                                 $strInsert = "'" . $DB->ForSQL($COUNTRY["COUNTRY_ID"], 2) . "', " . (strlen($COUNTRY["REGION"]) <= 0 ? "null" : "'" . $DB->ForSQL($COUNTRY["REGION"], 200) . "'") . ", " . (intval($COUNTRY["CITY_ID"]) <= 0 ? "null" : intval($COUNTRY["CITY_ID"])) . "";
                             } else {
                                 $COUNTRY = trim($COUNTRY);
                                 if (strlen($COUNTRY) <= 0) {
                                     continue;
                                 }
                                 $key = $COUNTRY . "||";
                                 $strInsert = "'" . $DB->ForSQL($COUNTRY, 2) . "', null, null";
                             }
                             $arrCOUNTRY[$key] = $strInsert;
                         }
                         foreach ($arrCOUNTRY as $strInsert) {
                             $strSql = "INSERT INTO b_adv_banner_2_country (BANNER_ID, COUNTRY_ID, REGION, CITY_ID) VALUES ({$BANNER_ID}, " . $strInsert . ")";
                             $DB->Query($strSql, false, $err_mess . __LINE__);
                             $iCounter++;
                         }
                     }
                     $DB->Query("UPDATE b_adv_banner SET STAT_COUNT = " . $iCounter . " WHERE ID = " . $BANNER_ID);
                 }
                 if (in_array("arrSTAT_ADV", $arrKeys)) {
                     CAdvBanner::DeleteStatAdvLink($BANNER_ID);
                     if (is_array($arFields["arrSTAT_ADV"])) {
                         $arrSTAT_ADV = array_unique($arFields["arrSTAT_ADV"]);
                         foreach ($arrSTAT_ADV as $aid) {
                             if (intval($aid) > 0) {
                                 $strSql = "INSERT INTO b_adv_banner_2_stat_adv (BANNER_ID, STAT_ADV_ID) VALUES ({$BANNER_ID}, '" . intval($aid) . "')";
                                 $DB->Query($strSql, false, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 if (in_array("arrWEEKDAY", $arrKeys)) {
                     CAdvBanner::DeleteWeekdayLink($BANNER_ID);
                     if (is_array($arFields["arrWEEKDAY"])) {
                         $arrWeekday = array_keys($arFields["arrWEEKDAY"]);
                         $arrWeekday = array_unique($arrWeekday);
                         if (is_array($arrWeekday) && count($arrWeekday) > 0) {
                             foreach ($arrWeekday as $weekday) {
                                 if (is_array($arFields["arrWEEKDAY"][$weekday]) && count($arFields["arrWEEKDAY"][$weekday]) > 0) {
                                     $arrHour = $arFields["arrWEEKDAY"][$weekday];
                                     array_walk($arrHour, create_function("&\$item", "\$item=intval(\$item);"));
                                     $arrHour = array_unique($arrHour);
                                     foreach ($arrHour as $hour) {
                                         if ($hour >= 0 && $hour <= 23) {
                                             $strSql = "INSERT INTO b_adv_banner_2_weekday (BANNER_ID, C_WEEKDAY, C_HOUR) VALUES ({$BANNER_ID}, '" . $DB->ForSql($weekday, 10) . "', {$hour})";
                                             $DB->Query($strSql, false, $err_mess . __LINE__);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if (in_array("arrUSERGROUP", $arrKeys)) {
                     CAdvBanner::DeleteGroupLink($BANNER_ID);
                     if (is_array($arFields["arrUSERGROUP"])) {
                         $arrGROUPS = array_unique($arFields["arrUSERGROUP"]);
                         foreach ($arrGROUPS as $uid) {
                             if (intval($uid) > 0) {
                                 $strSql = "INSERT INTO b_adv_banner_2_group (BANNER_ID, GROUP_ID) VALUES ({$BANNER_ID}, " . IntVal($uid) . ")";
                                 $DB->Query($strSql, false, $err_mess . __LINE__);
                             }
                         }
                     }
                 }
                 // если необходимо оповестить
                 $SEND_EMAIL = $arFields["SEND_EMAIL"] == "N" ? "N" : "Y";
                 if ($email_notify == "Y" && (!$isAdmin || !$isManager || $SEND_EMAIL == "Y")) {
                     // получаем данные по баннеру
                     CTimeZone::Disable();
                     $rsBanner = CAdvBanner::GetByID($BANNER_ID, $CHECK_RIGHTS);
                     CTimeZone::Enable();
                     if ($arBanner = $rsBanner->Fetch()) {
                         $BCC = array();
                         $OWNER_EMAIL = array();
                         $ADD_EMAIL = array();
                         $STAT_EMAIL = array();
                         $EDIT_EMAIL = array();
                         $MANAGER_EMAIL = CAdvContract::GetManagerEmails();
                         $ADMIN_EMAIL = CAdvContract::GetAdminEmails();
                         $ADMIN_EMAIL = array_merge($MANAGER_EMAIL, $ADMIN_EMAIL);
                         $ADMIN_EMAIL = array_unique($ADMIN_EMAIL);
                         CAdvContract::GetOwnerEmails($CONTRACT_ID, $OWNER_EMAIL, $ADD_EMAIL, $STAT_EMAIL, $EDIT_EMAIL);
                         $CREATED_BY = $MODIFIED_BY = 0;
                         if (intval($arBanner["CREATED_BY"]) > 0) {
                             $rsUser = CUser::GetByID($arBanner["CREATED_BY"]);
                             if ($arUser = $rsUser->Fetch()) {
                                 $CREATED_BY = "[" . $arUser["ID"] . "] (" . $arUser["LOGIN"] . ") " . $arUser["NAME"] . " " . $arUser["LAST_NAME"];
                             }
                         }
                         if (intval($arBanner["MODIFIED_BY"]) == intval($arBanner["CREATED_BY"]) && intval($arBanner["CREATED_BY"]) > 0) {
                             $MODIFIED_BY = $CREATED_BY;
                         } elseif (intval($arBanner["MODIFIED_BY"]) > 0) {
                             $rsUser = CUser::GetByID($arBanner["MODIFIED_BY"]);
                             if ($arUser = $rsUser->Fetch()) {
                                 $MODIFIED_BY = "[" . $arUser["ID"] . "] (" . $arUser["LOGIN"] . ") " . $arUser["NAME"] . " " . $arUser["LAST_NAME"];
                             }
                         }
                         $arImage = CFile::GetFileArray($arBanner["IMAGE_ID"]);
                         if ($arImage) {
                             $IMAGE_LINK = CHTTP::URN2URI($arImage["SRC"]);
                         } else {
                             $IMAGE_LINK = "";
                         }
                         $arImage = CFile::GetFileArray($arBanner["FLASH_IMAGE"]);
                         if ($arImage) {
                             $FLASHIMAGE_LINK = CHTTP::URN2URI($arImage["SRC"]);
                         } else {
                             $FLASHIMAGE_LINK = "";
                         }
                         $EMAIL_TO = $OWNER_EMAIL;
                         if (count($EMAIL_TO) <= 0) {
                             $EMAIL_TO = $ADMIN_EMAIL;
                         } else {
                             $BCC = $ADMIN_EMAIL;
                         }
                         $arEventFields = array("ID" => $arBanner["ID"], "EMAIL_TO" => implode(",", $EMAIL_TO), "ADMIN_EMAIL" => implode(",", $ADMIN_EMAIL), "ADD_EMAIL" => implode(",", $ADD_EMAIL), "STAT_EMAIL" => implode(",", $STAT_EMAIL), "EDIT_EMAIL" => implode(",", $EDIT_EMAIL), "OWNER_EMAIL" => implode(",", $OWNER_EMAIL), "BCC" => implode(",", $BCC), "CONTRACT_ID" => $CONTRACT_ID, "CONTRACT_NAME" => $arContract["NAME"], "TYPE_SID" => $arBanner["TYPE_SID"], "TYPE_NAME" => $arBanner["TYPE_NAME"], "STATUS" => strlen($arBanner["STATUS_SID"]) > 0 ? GetMessage("AD_STATUS_" . $arBanner["STATUS_SID"]) : "", "STATUS_COMMENTS" => $arBanner["STATUS_COMMENTS"], "NAME" => $arBanner["NAME"], "GROUP_SID" => $arBanner["GROUP_SID"], "INDICATOR" => GetMessage("AD_" . strtoupper($arBanner["LAMP"]) . "_BANNER_STATUS"), "ACTIVE" => $arBanner["ACTIVE"], "MAX_SHOW_COUNT" => $arBanner["MAX_SHOW_COUNT"], "SHOW_COUNT" => $arBanner["SHOW_COUNT"], "MAX_CLICK_COUNT" => $arBanner["MAX_CLICK_COUNT"], "CLICK_COUNT" => $arBanner["CLICK_COUNT"], "DATE_LAST_SHOW" => $arBanner["DATE_LAST_SHOW"], "DATE_LAST_CLICK" => $arBanner["DATE_LAST_CLICK"], "DATE_SHOW_FROM" => $arBanner["DATE_SHOW_FROM"], "DATE_SHOW_TO" => $arBanner["DATE_SHOW_TO"], "IMAGE_LINK" => $IMAGE_LINK, "IMAGE_ALT" => $arBanner["IMAGE_ALT"], "URL" => $arBanner["URL"], "URL_TARGET" => $arBanner["URL_TARGET"], "NO_URL_IN_FLASH" => $arBanner["NO_URL_IN_FLASH"], "CODE" => $arBanner["CODE"], "CODE_TYPE" => $arBanner["CODE_TYPE"], "COMMENTS" => $arBanner["COMMENTS"], "DATE_CREATE" => $arBanner["DATE_CREATE"], "CREATED_BY" => $CREATED_BY, "DATE_MODIFY" => $arBanner["DATE_MODIFY"], "MODIFIED_BY" => $MODIFIED_BY, "AD_TYPE" => $arBanner["AD_TYPE"], "FLASH_TRANSPARENT" => $arBanner["FLASH_TRANSPARENT"], "FLASH_IMAGE_LINK" => $FLASHIMAGE_LINK, "FLASH_JS" => $arBanner["FLASH_JS"], "FLASH_VER" => $arBanner["FLASH_VER"]);
                         $arrSITE = CAdvBanner::GetSiteArray($arBanner["ID"]);
                         CEvent::Send("ADV_BANNER_STATUS_CHANGE", $arrSITE, $arEventFields);
                     }
                 }
             }
         }
     }
     return $BANNER_ID;
 }