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; } }
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"]); } }
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; }
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; } }
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; }
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(); }
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; }
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; }
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; }
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; }
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; }
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; }
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."&"; 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("&", "<", ">", """), $title); */ //$text1 = HTMLToTxt($text, "", Array("\ "), 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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
/** * @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); }
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; }
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; }
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; } }
$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]; } } $uniqCheck = md5($uniqStr); if (isset($uniqTest[$uniqCheck])) { continue; } $uniqTest[$uniqCheck] = true; $this->ArrayMultiply($arResult["COMBO"], $propertyValues); } CTimeZone::Enable(); $arSelect = array("ID", "IBLOCK_ID"); foreach ($arResult["PRICES"] as &$value) { if (!$value['CAN_VIEW'] && !$value['CAN_BUY']) { continue; } $arSelect[] = $value["SELECT"]; $arFilter["CATALOG_SHOP_QUANTITY_" . $value["ID"]] = 1; } $rsElements = CIBlockElement::GetList(array(), $arElementFilter, false, false, $arSelect); while ($arElement = $rsElements->Fetch()) { foreach ($arResult["PRICES"] as $NAME => $arPrice) { if (isset($arResult["ITEMS"][$NAME])) { $this->fillItemPrices($arResult["ITEMS"][$NAME], $arElement); } }
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); } } } }
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; } }
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; }