CSocNetLogRights::DeleteByLogID($arRes["ID"]); CSocNetLogRights::Add($arRes["ID"], $socnetPerms, true); if (count(array_diff($arLogSitesNew, $arLogSites)) > 0) { CSocNetLog::Update($arRes["ID"], array("ENTITY_TYPE" => $arRes["ENTITY_TYPE"], "SITE_ID" => $arLogSitesNew, "=LOG_UPDATE" => $DB->CurrentTimeFunction())); } else { CSocNetLog::Update($arRes["ID"], array("=LOG_UPDATE" => $DB->CurrentTimeFunction())); } /* subscribe share author */ CSocNetLogFollow::Set($user_id, "L" . $arRes["ID"], "Y", ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL")); } /* update socnet groupd activity*/ foreach ($arNewRights as $v) { if (substr($v, 0, 2) == "SG") { $group_id_tmp = substr($v, 2); if (IntVal($group_id_tmp) > 0) { CSocNetGroup::SetLastActivity(IntVal($group_id_tmp)); } } } \Bitrix\Main\FinderDestTable::merge(array("CONTEXT" => "blog_post", "CODE" => \Bitrix\Main\FinderDestTable::convertRights($arNewRights))); } } die; } /* end share */ if (!$arResult["bFromList"]) { $strTitle = $arPost["MICRO"] != "Y" ? $arPost["TITLE"] : TruncateText(blogTextParser::killAllTags($arPost["DETAIL_TEXT"]), 100); if (IsModuleInstalled("intranet")) { $APPLICATION->SetPageProperty("title", $strTitle); } else { $APPLICATION->SetTitle($strTitle);
$CWiki->deleteImage($_imgID, $arResult['ELEMENT']['ID'], $arParams['IBLOCK_ID']); $arFields['DETAIL_TEXT'] = preg_replace('/\\[?\\[(:)?(File|' . GetMessage('FILE_NAME') . '):(' . $_imgID . '|' . preg_quote($arFile['ORIGINAL_NAME'], '/') . ')\\]\\]?/iU' . BX_UTF_PCRE_MODIFIER, '', $arFields['DETAIL_TEXT']); } } } $CWikiParser = new CWikiParser(); $CWiki->Update($arParams['ELEMENT_ID'], $arFields); //we should not post content of wiki page to feed if it redirects to another page if (preg_match("/^\\#(REDIRECT|" . GetMessage('WIKI_REDIRECT') . ")\\s*\\[\\[(.*)\\]\\]/iU" . BX_UTF_PCRE_MODIFIER, $arFields['DETAIL_TEXT'])) { $bPageRedirect = true; } else { $bPageRedirect = false; } if (CWikiSocnet::IsSocNet() && $arResult['POST_TO_FEED'] == "Y" && !$bPageRedirect) { if (strlen($arParams['SOCNET_GROUP_ID']) > 0) { CSocNetGroup::SetLastActivity(intval($arParams['SOCNET_GROUP_ID'])); } $postUrl = str_replace(array('#group_id#', '#wiki_name#'), array(intval($arParams['SOCNET_GROUP_ID']), urlencode($arFields['NAME'])), $arParams['~PATH_TO_POST']); $arCurImages = array(); $rsProperties = CIBlockElement::GetProperty($arParams['IBLOCK_ID'], $arParams['ELEMENT_ID'], 'value_id', 'asc', array('ACTIVE' => 'Y', 'CODE' => 'IMAGES')); while ($arProperty = $rsProperties->Fetch()) { if ($arProperty['CODE'] == 'IMAGES') { $arCurImages[] = $arProperty['VALUE']; } } $text4message = $CWikiParser->Parse($arFields['DETAIL_TEXT'], $arFields['DETAIL_TEXT_TYPE'], $arCurImages); $text4message = CWikiSocnet::PrepareTextForFeed($text4message); $text4message = $CWikiParser->Clear($text4message); //while CSocNetTextParser::closetags closes <br> by </br> must be corrected soon. Then remove this. $text4message = preg_replace("/<\\s*br\\s*>/ismU", "<br />", $text4message); $bNew = true;
public static function PostIntoBuzzAsBlog($userTwit, $arSiteId = array(), $userLogin = '') { global $DB; if (!CModule::IncludeModule("blog")) { return; } $arParams = array(); if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME') && $userLogin != '') { if ($arUserTwit = unserialize(base64_decode($userTwit))) { $userTwit = $arUserTwit; } if ($arSiteIdCheck = unserialize(base64_decode($arSiteId))) { $arSiteId = $arSiteIdCheck; } $dbUser = CUser::GetByLogin($userLogin); if ($arUser = $dbUser->Fetch()) { $arParams["USER_ID"] = $arUser["ID"]; } } else { $arParams["USER_ID"] = $userTwit['kp_user_id']; } if (isset($arSiteId[$userTwit['kp_user_id']])) { $siteId = $arSiteId[$userTwit['kp_user_id']]; } if (strlen($siteId) <= 0) { $siteId = SITE_ID; } if (isset($userTwit['text'])) { $arParams["GROUP_ID"] = COption::GetOptionString("socialnetwork", "userbloggroup_id", false, $siteId); $arParams["PATH_TO_BLOG"] = COption::GetOptionString("socialnetwork", "userblogpost_page", false, $siteId); $arParams["PATH_TO_SMILE"] = COption::GetOptionString("socialnetwork", "smile_page", false, $siteId); $arParams["NAME_TEMPLATE"] = COption::GetOptionString("main", "TOOLTIP_NAME_TEMPLATE", false, $siteId); $arParams["SHOW_LOGIN"] = '******'; $arParams["PATH_TO_POST"] = $arParams["PATH_TO_BLOG"]; $arFilterblg = array("ACTIVE" => "Y", "USE_SOCNET" => "Y", "GROUP_ID" => $arParams["GROUP_ID"], "GROUP_SITE_ID" => $siteId, "OWNER_ID" => $arParams["USER_ID"]); $groupId = is_array($arParams["GROUP_ID"]) ? IntVal($arParams["GROUP_ID"][0]) : IntVal($arParams["GROUP_ID"]); if (isset($GLOBALS["BLOG_POST"]["BLOG_P_" . $groupId . "_" . $arParams["USER_ID"]]) && !empty($GLOBALS["BLOG_POST"]["BLOG_P_" . $groupId . "_" . $arParams["USER_ID"]])) { $arBlog = $GLOBALS["BLOG_POST"]["BLOG_P_" . $groupId . "_" . $arParams["USER_ID"]]; } else { $dbBl = CBlog::GetList(array(), $arFilterblg); $arBlog = $dbBl->Fetch(); if (!$arBlog && IsModuleInstalled("intranet")) { $arBlog = CBlog::GetByOwnerID($arParams["USER_ID"]); } $GLOBALS["BLOG_POST"]["BLOG_P_" . $groupId . "_" . $arParams["USER_ID"]] = $arBlog; } $arResult["Blog"] = $arBlog; if (empty($arBlog)) { if (!empty($arParams["GROUP_ID"])) { $arFields = array("=DATE_UPDATE" => $DB->CurrentTimeFunction(), "GROUP_ID" => is_array($arParams["GROUP_ID"]) ? IntVal($arParams["GROUP_ID"][0]) : IntVal($arParams["GROUP_ID"]), "ACTIVE" => "Y", "ENABLE_COMMENTS" => "Y", "ENABLE_IMG_VERIF" => "Y", "EMAIL_NOTIFY" => "Y", "ENABLE_RSS" => "Y", "ALLOW_HTML" => "N", "ENABLE_TRACKBACK" => "N", "SEARCH_INDEX" => "Y", "USE_SOCNET" => "Y", "=DATE_CREATE" => $DB->CurrentTimeFunction(), "PERMS_POST" => array(1 => "I", 2 => "I"), "PERMS_COMMENT" => array(1 => "P", 2 => "P")); $bRights = false; $rsUser = CUser::GetByID($arParams["USER_ID"]); $arUser = $rsUser->Fetch(); if (strlen($arUser["NAME"] . "" . $arUser["LAST_NAME"]) <= 0) { $arFields["NAME"] = GetMessage("BLG_NAME") . " " . $arUser["LOGIN"]; } else { $arFields["NAME"] = GetMessage("BLG_NAME") . " " . $arUser["NAME"] . " " . $arUser["LAST_NAME"]; } $arFields["URL"] = str_replace(" ", "_", $arUser["LOGIN"]) . "-blog-" . SITE_ID; $arFields["OWNER_ID"] = $arParams["USER_ID"]; $urlCheck = preg_replace("/[^a-zA-Z0-9_-]/is", "", $arFields["URL"]); if ($urlCheck != $arFields["URL"]) { $arFields["URL"] = "u" . $arParams["USER_ID"] . "-blog-" . SITE_ID; } if (CBlog::GetByUrl($arFields["URL"])) { $uind = 0; do { $uind++; $arFields["URL"] = $arFields["URL"] . $uind; } while (CBlog::GetByUrl($arFields["URL"])); } $featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_USER, $arFields["OWNER_ID"], "blog", "view_post"); if ($featureOperationPerms == SONET_RELATIONS_TYPE_ALL) { $bRights = true; } $arFields["PATH"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BLOG"], array("blog" => $arFields["URL"], "user_id" => $arFields["OWNER_ID"], "group_id" => $arFields["SOCNET_GROUP_ID"])); $blogID = CBlog::Add($arFields); if ($bRights) { CBlog::AddSocnetRead($blogID); } $arBlog = CBlog::GetByID($blogID, $arParams["GROUP_ID"]); } } // $DATE_PUBLISH = ""; // if(strlen($_POST["DATE_PUBLISH_DEF"]) > 0) // $DATE_PUBLISH = $_POST["DATE_PUBLISH_DEF"]; // elseif (strlen($_POST["DATE_PUBLISH"])<=0) $DATE_PUBLISH = ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL"); // else // $DATE_PUBLISH = $_POST["DATE_PUBLISH"]; $arFields = array("DETAIL_TEXT" => $userTwit['text'], "DETAIL_TEXT_TYPE" => "text", "DATE_PUBLISH" => $DATE_PUBLISH, "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH, "PATH" => CComponentEngine::MakePathFromTemplate(htmlspecialcharsBack($arParams["PATH_TO_POST"]), array("post_id" => "#post_id#", "user_id" => $arBlog["OWNER_ID"])), "URL" => $arBlog["URL"], "SOURCE_TYPE" => "twitter"); $arFields["PERMS_POST"] = array(); $arFields["PERMS_COMMENT"] = array(); $arFields["MICRO"] = "N"; if (strlen($arFields["TITLE"]) <= 0) { $arFields["MICRO"] = "Y"; $arFields["TITLE"] = trim(blogTextParser::killAllTags($arFields["DETAIL_TEXT"])); if (strlen($arFields["TITLE"]) <= 0) { $arFields["TITLE"] = GetMessage("BLOG_EMPTY_TITLE_PLACEHOLDER"); } } $arFields["SOCNET_RIGHTS"] = array(); if (!empty($userTwit['user_perms'])) { $bOne = true; foreach ($userTwit['user_perms'] as $v => $k) { if (strlen($v) > 0 && is_array($k) && !empty($k)) { foreach ($k as $vv) { if (strlen($vv) > 0) { $arFields["SOCNET_RIGHTS"][] = $vv; if ($v != "SG") { $bOne = false; } } } } } if ($bOne && !empty($userTwit['user_perms']["SG"])) { $bOnesg = false; $bFirst = true; $oGrId = 0; foreach ($userTwit['user_perms']["SG"] as $v) { if (strlen($v) > 0) { if ($bFirst) { $bOnesg = true; $bFirst = false; $v = str_replace("SG", "", $v); $oGrId = IntVal($v); } else { $bOnesg = false; } } } if ($bOnesg) { if (!CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "write_post") && !CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "moderate_post") && !CSocNetFeaturesPerms::CanPerformOperation($arParams["USER_ID"], SONET_ENTITY_GROUP, $oGrId, "blog", "full_post")) { $arFields["PUBLISH_STATUS"] = BLOG_PUBLISH_STATUS_READY; } } } } $bError = false; /* if (CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()) { if(empty($arFields["SOCNET_RIGHTS"]) || in_array("UA", $arFields["SOCNET_RIGHTS"])) { $bError = true; $arResult["ERROR_MESSAGE"] = GetMessage("BLOG_BPE_EXTRANET_ERROR"); } }*/ if (!$bError) { preg_match_all("/\\[user\\s*=\\s*([^\\]]*)\\](.+?)\\[\\/user\\]/ies" . BX_UTF_PCRE_MODIFIER, $userTwit['text'], $arMention); $arFields["=DATE_CREATE"] = $DB->GetNowFunction(); $arFields["AUTHOR_ID"] = $arParams["USER_ID"]; $arFields["BLOG_ID"] = $arBlog["ID"]; $newID = CBlogPost::Add($arFields); $socnetRightsOld = array("U" => array()); $bAdd = true; $bNeedMail = false; if ($newID) { $arFields["ID"] = $newID; $arParamsNotify = array("bSoNet" => true, "UserID" => $arParams["USER_ID"], "allowVideo" => $arResult["allowVideo"], "PATH_TO_SMILE" => $arParams["PATH_TO_SMILE"], "PATH_TO_POST" => $arParams["PATH_TO_POST"], "SOCNET_GROUP_ID" => $arParams["GROUP_ID"], "user_id" => $arParams["USER_ID"], "NAME_TEMPLATE" => $arParams["NAME_TEMPLATE"], "SHOW_LOGIN" => $arParams["SHOW_LOGIN"]); CBlogPost::Notify($arFields, $arBlog, $arParamsNotify); } } if ($newID > 0 && strlen($arResult["ERROR_MESSAGE"]) <= 0 && $arFields["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH) { BXClearCache(true, "/" . SITE_ID . "/blog/last_messages_list/"); $arFieldsIM = array("TYPE" => "POST", "TITLE" => $arFields["TITLE"], "URL" => CComponentEngine::MakePathFromTemplate(htmlspecialcharsBack($arParams["PATH_TO_POST"]), array("post_id" => $newID, "user_id" => $arBlog["OWNER_ID"])), "ID" => $newID, "FROM_USER_ID" => $arParams["USER_ID"], "TO_USER_ID" => array(), "TO_SOCNET_RIGHTS" => $arFields["SOCNET_RIGHTS"], "TO_SOCNET_RIGHTS_OLD" => $socnetRightsOld["U"]); if (!empty($arMentionOld)) { $arFieldsIM["MENTION_ID_OLD"] = $arMentionOld[1]; } if (!empty($arMention)) { $arFieldsIM["MENTION_ID"] = $arMention[1]; } CBlogPost::NotifyIm($arFieldsIM); $arParams["ID"] = $newID; if (!empty($_POST["SPERM"]["SG"])) { foreach ($_POST["SPERM"]["SG"] as $v) { $group_id_tmp = substr($v, 2); if (IntVal($group_id_tmp) > 0) { CSocNetGroup::SetLastActivity(IntVal($group_id_tmp)); } } } } } }
if ($arParams['AUTOSAVE']) { $arParams['AUTOSAVE']->Reset(); } /************** Socialnetwork notification *************************/ $workgroups_path = ""; if ($arParams["MODE"] == "GROUP" && IsModuleInstalled("extranet")) { $workgroups_path = COption::GetOptionString("socialnetwork", "workgroups_page", false, SITE_ID); $workgroups_path = "#GROUPS_PATH#" . substr($arParams["~URL_TEMPLATES_MESSAGE"], strlen($workgroups_path), strlen($arParams["~URL_TEMPLATES_MESSAGE"]) - strlen($workgroups_path)); } $arSonetFields = array("ENTITY_TYPE" => $arParams["MODE"] == "GROUP" ? SONET_ENTITY_GROUP : SONET_ENTITY_USER, "ENTITY_ID" => $arParams["MODE"] == "GROUP" ? $arParams["SOCNET_GROUP_ID"] : $arParams["USER_ID"], "EVENT_ID" => "forum", "=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $arResult["MESSAGE"]["AUTHOR_NAME"], GetMessage("SONET_FORUM_LOG_TEMPLATE")), "TITLE" => $arFieldsG["TITLE"], "MESSAGE" => $sText, "TEXT_MESSAGE" => $parser->convert4mail($sText), "URL" => $sURL, "PARAMS" => serialize(array("PATH_TO_MESSAGE" => CComponentEngine::MakePathFromTemplate(!empty($workgroups_path) ? $workgroups_path : $arParams["~URL_TEMPLATES_MESSAGE"], array("TID" => $arParams["TID"])), "PARSED" => "N")), "MODULE_ID" => false, "CALLBACK_FUNC" => false, "SOURCE_ID" => $MID1, "RATING_TYPE_ID" => "FORUM_TOPIC", "RATING_ENTITY_ID" => intval($arParams["TID"])); if (intVal($arResult["MESSAGE"]["AUTHOR_ID"]) > 0) { $arSonetFields["USER_ID"] = $arResult["MESSAGE"]["AUTHOR_ID"]; } if ($arParams["MESSAGE_TYPE"] == "NEW") { if ($arParams["MODE"] == "GROUP") { CSocNetGroup::SetLastActivity($arParams["SOCNET_GROUP_ID"]); } $logID = CSocNetLog::Add($arSonetFields, false); if (intval($logID) > 0) { CSocNetLog::Update($logID, array("TMP_ID" => $logID)); CSocNetLogRights::SetForSonet($logID, $arSonetFields["ENTITY_TYPE"], $arSonetFields["ENTITY_ID"], "forum", "view", true); CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $logID); } } elseif ($arParams["MESSAGE_TYPE"] == "EDIT") { $dbRes = CSocNetLog::GetList(array(), array("EVENT_ID" => "forum", "SOURCE_ID" => $MID1), false, false, array("ID")); if ($arRes = $dbRes->Fetch()) { // topic $arSonetFields = array_intersect_key($arSonetFields, array_flip(array("TITLE_TEMPLATE", "TITLE", "MESSAGE", "TEXT_MESSAGE", "PARAMS"))); CSocNetLog::Update($arRes["ID"], $arSonetFields); CSocNetLogRights::SetForSonet($arRes["ID"], $arParams["MODE"] == "GROUP" ? SONET_ENTITY_GROUP : SONET_ENTITY_USER, $arParams["MODE"] == "GROUP" ? $arParams["SOCNET_GROUP_ID"] : $arParams["USER_ID"], "forum", "view"); } else {
function Request($action) { global $APPLICATION; $sectionId = $_REQUEST['section_id'] == 'none' ? 'none' : intVal($_REQUEST['section_id']); CUtil::JSPostUnEscape(); // Export calendar if ($action == 'export') { // We don't need to check access couse we will check security SIGN from the URL $bCheck = $_GET['check'] == 'Y'; $calendarId = $_GET['calendar_id']; if ($bCheck) { $GLOBALS['APPLICATION']->RestartBuffer(); if ($this->CheckSign($_GET['sign'], intVal($_GET['user_id']), $calendarId > 0 ? $calendarId : 'superposed_calendars')) { echo 'BEGIN:VCALENDAR'; } die; } if (!isset($calendarId) || intVal($calendarId) <= 0) { $this->ReturnICal_SP(array('userId' => intVal($_GET['user_id']), 'sign' => $_GET['sign'])); } else { $this->ReturnICal(array('calendarId' => intVal($calendarId), 'userId' => intVal($_GET['user_id']), 'sign' => $_GET['sign'], 'ownerType' => $_GET['owner_type'], 'ownerId' => $_GET['owner_id'], 'iblockId' => $_GET['ibl'])); } } else { // First of all - CHECK ACCESS $this->GetPermissions(array('userId' => $curUserId)); if (!$this->bAccess) { return $APPLICATION->ThrowException(GetMessage("EC_ACCESS_DENIED")); } $APPLICATION->RestartBuffer(); if (!check_bitrix_sessid()) { echo '<!--BX_EC_DUBLICATE_ACTION_REQUEST' . bitrix_sessid() . '-->'; return; } switch ($action) { // * * * * * Add and Edit event * * * * * case 'add': case 'edit': if ($this->bReadOnly) { return $this->ThrowError(GetMessage('EC_ACCESS_DENIED')); } $id = intVal($_POST['id']); // If other calendar was selected for event if ($_POST['b_recreate'] == 'Y' && intVal($_POST['old_calendar'])) { $old_id = $id; $id = 0; $action = 'add'; } $from_ts = MakeTimeStamp($_POST['from'], getTSFormat()); $to_ts = MakeTimeStamp($_POST['to'], getTSFormat()); $arGuests = isset($_POST['guest']) ? $_POST['guest'] : false; $bPeriodic = isset($_POST['per_type']) && $_POST['per_type'] != 'none'; if ($bPeriodic) { $per_type = trim($_POST['per_type']); $per_count = intVal($_POST['per_count']); $per_from_ts = MakeTimeStamp($_POST['per_from'], getTSFormat()); if ($per_from_ts < $from_ts) { $per_from_ts = mktime(date("H", $from_ts), date("i", $from_ts), date("s", $from_ts), date("m", $per_from_ts), date("d", $per_from_ts), date("Y", $per_from_ts)); } else { $per_from_ts = $from_ts; } $per_from = date(getDateFormat(), $per_from_ts); $per_ts = $_POST['per_to'] == 'no_limit' ? 2145938400 : MakeTimeStamp($_POST['per_to'], getTSFormat()); $per_to = date(getDateFormat(), $per_ts); $per_week_days = $per_type == 'weekly' ? trim($_POST['per_week_days']) : ''; $per_len = intVal($to_ts - $from_ts); $from = $per_from; $to = $per_to; $PROP = array('PERIOD_TYPE' => strtoupper($per_type), 'PERIOD_COUNT' => $per_count, 'EVENT_LENGTH' => $per_len, 'PERIOD_ADDITIONAL' => $per_week_days); } else { $from = date(getDateFormat(), $from_ts); $to = date(getDateFormat(), $to_ts); $PROP = array('PERIOD_TYPE' => 'NONE'); } if ($_POST['rem'] == 'Y' && floatval($_POST['rem_count']) > 0 && in_array($_POST['rem_type'], array('min', 'hour', 'day'))) { $arRem = array('count' => floatval($_POST['rem_count']), 'type' => $_POST['rem_type']); } else { $arRem = false; } $PROP['ACCESSIBILITY'] = $_POST['accessibility'] && in_array($_POST['accessibility'], array('quest', 'free', 'absent')) ? $_POST['accessibility'] : 'busy'; $PROP['IMPORTANCE'] = $_POST['importance'] && in_array($_POST['importance'], array('high', 'low')) ? $_POST['importance'] : 'normal'; $PROP['PRIVATE'] = $_POST['private_event'] == true ? $_POST['private_event'] : false; if (isset($_POST['host']) && intVal($_POST['host']) > 0) { $PROP['PARENT'] = intVal($_POST['host']); } $isMeeting = !!$_POST['is_meeting']; $arParams = array('iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'sectionId' => $sectionId, 'calendarId' => $_POST['calendar'], 'bNew' => $action == 'add', 'id' => $id, 'name' => trim($_POST['name']), 'desc' => trim($_POST['desc']), 'dateFrom' => cutZeroTime($from), 'dateTo' => cutZeroTime($to), 'isMeeting' => $isMeeting, 'prop' => $PROP, 'remind' => $arRem, 'fullUrl' => $this->fullUrl, 'userId' => $this->userId, 'pathToUserCalendar' => $this->pathToUserCalendar, 'pathToGroupCalendar' => $this->pathToGroupCalendar, 'userIblockId' => $this->userIblockId, 'location' => array('old' => trim($_POST['location_old']), 'new' => trim($_POST['location_new']), 'change' => $_POST['location_change'] == 'Y'), 'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0, 'allowResMeeting' => $this->allowResMeeting, 'RMPath' => $this->RMPath, 'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0, 'allowVideoMeeting' => $this->allowVideoMeeting, 'VMPath' => $this->VMPath, 'VMPathDetail' => $this->VMPathDetail); if ($isMeeting) { $arParams['guests'] = $arGuests; $arParams['meetingText'] = trim($_POST['meeting_text']); $arParams['setSpecialNotes'] = !!$_POST['setSpecialNotes']; if (isset($_POST['status'])) { $arParams['status'] = $_POST['status']; } $arParams['reinviteParamsList'] = $this->reinviteParamsList; } $eventId = $this->SaveEvent($arParams); // We successfully create new event and have to delete old if (is_int($eventId) && $eventId > 0 && $_POST['b_recreate'] == 'Y' && intVal($_POST['old_calendar'])) { // delete original event $res = CECEvent::Delete(array('id' => $old_id, 'iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'userId' => $this->userId, 'pathToUserCalendar' => $this->pathToUserCalendar, 'pathToGroupCalendar' => $this->pathToGroupCalendar, 'userIblockId' => $this->userIblockId, 'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0, 'allowResMeeting' => $this->allowResMeeting, 'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0, 'allowVideoMeeting' => $this->allowVideoMeeting)); if ($res !== true) { return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_EVENT_DEL_ERROR')); } } break; // * * * * * Delete event * * * * * // * * * * * Delete event * * * * * case 'delete': if ($this->bReadOnly) { return $this->ThrowError(GetMessage('EC_ACCESS_DENIED')); } $res = CECEvent::Delete(array('id' => intVal($_POST['id']), 'iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId, 'userId' => $this->userId, 'pathToUserCalendar' => $this->pathToUserCalendar, 'pathToGroupCalendar' => $this->pathToGroupCalendar, 'userIblockId' => $this->userIblockId, 'RMiblockId' => $this->allowResMeeting ? $this->RMiblockId : 0, 'allowResMeeting' => $this->allowResMeeting, 'VMiblockId' => $this->allowVideoMeeting ? $this->VMiblockId : 0, 'allowVideoMeeting' => $this->allowVideoMeeting)); if ($res !== true) { return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_EVENT_DEL_ERROR')); } ?> <script>window._bx_result = true;</script><?php $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/'); break; // * * * * * Load events for some time limits * * * * * // * * * * * Load events for some time limits * * * * * case 'load_events': $this->SetLoadLimits(intVal($_POST['month']), intVal($_POST['year'])); $cl = $_POST['usecl'] == 'Y' && !isset($_POST['cl']) ? array() : $_POST['cl']; $this->arCalendarIds = $cl; $this->arHiddenCals_ = is_array($_POST['hcl']) ? $_POST['hcl'] : array(); $ev = $this->GetEventsEx(array("bJS" => true, 'bCheckSPEvents' => true)); if ($this->allowSuperpose && !$this->bListMode) { $this->HandleSuperpose($this->arSPIblIds); $spev = $this->GetSuperposedEvents(array('bJS' => true)); if ($spev != '[]') { if ($ev == '[]') { $ev = $spev; } else { $ev = substr($ev, 0, -1) . ',' . substr($spev, 1); } } } ?> <script>window._bx_ar_events = <?php echo $ev; ?> ;</script><?php break; // * * * * * Edit calendar * * * * * // * * * * * Edit calendar * * * * * case 'calendar_edit': if ($this->bReadOnly) { return $this->ThrowError(GetMessage('EC_ACCESS_DENIED')); } $id = intVal($_POST['id']); $bNew = !isset($id) || $id == 0; $arFields = array('ID' => $id, 'NAME' => trim($_POST['name']), 'DESCRIPTION' => trim($_POST['desc']), 'COLOR' => colorReplace($_POST['color']), 'EXPORT' => isset($_POST['export']) && $_POST['export'] == 'Y', 'EXPORT_SET' => isset($_POST['exp_set']) && in_array($_POST['exp_set'], array('all', '3_9', '6_12')) ? $_POST['exp_set'] : 'all', 'PRIVATE_STATUS' => isset($_POST['private_status']) && in_array($_POST['private_status'], array('private', 'time', 'title')) ? $_POST['private_status'] : 'full'); if ($bNew) { $arFields['IS_EXCHANGE'] = $_POST['is_exchange'] == 'Y'; } $id = $this->SaveCalendar(array('sectionId' => $sectionId, 'arFields' => $arFields)); if (intVal($id) <= 0) { return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_CALENDAR_SAVE_ERROR')); } $export_link = $arFields['EXPORT'] ? $this->GetExportLink($id, $this->ownerType, $this->ownerId, $this->iblockId) : ''; $outlookJs = CECCalendar::GetOutlookLink(array('ID' => $id, 'PREFIX' => $this->GetOwnerName(array('iblockId' => $this->iblockId, 'ownerType' => $this->ownerType, 'ownerId' => $this->ownerId)))); if ($this->ownerType == 'USER' && $_POST['is_def_meet_calendar'] == 'Y') { $SET = $this->GetUserSettings(); $SET['MeetCalId'] = $id; $this->SetUserSettings($SET); } ?> <script>window._bx_calendar = {ID: <?php echo intVal($id); ?> , EXPORT_LINK: '<?php echo $export_link; ?> ', EXPORT: '<?php echo $arFields['EXPORT']; ?> ', EXPORT_SET: '<?php echo $arFields['EXPORT_SET']; ?> ', OUTLOOK_JS: '<?php echo CUtil::JSEscape($outlookJs); ?> '};</script><?php // Clear cache $this->ClearCache($this->cachePath . $this->iblockId . "/calendars/" . ($this->bOwner ? $this->ownerId : 0) . "/"); $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/'); if ($this->ownerType == 'GROUP') { $this->ClearCache($this->cachePath . 'sp_groups/'); } elseif ($this->ownerType == 'USER') { $this->ClearCache($this->cachePath . 'sp_user/'); } else { $this->ClearCache($this->cachePath . 'sp_common/'); } break; // * * * * * Delete calendar * * * * * // * * * * * Delete calendar * * * * * case 'calendar_delete': if ($this->bReadOnly) { return $this->ThrowError(GetMessage('EC_ACCESS_DENIED')); } $id = intVal($_POST['id']); if (!$this->CheckCalendar(array('calendarId' => $id, 'sectionId' => $sectionId))) { return $this->ThrowError(GetMessage('EC_CALENDAR_DEL_ERROR') . ' ' . GetMessage('EC_CAL_INCORRECT_ERROR')); } $res = $this->DeleteCalendar($id); if ($res !== true) { return $this->ThrowError(strlen($res) > 0 ? $res : GetMessage('EC_CALENDAR_DEL_ERROR')); } // Clear cache $this->ClearCache($this->cachePath . $this->iblockId . "/calendars/" . ($this->bOwner ? $this->ownerId : 0) . "/"); if ($this->ownerType == 'GROUP') { $this->ClearCache($this->cachePath . 'sp_groups/'); } elseif ($this->ownerType == 'USER') { $this->ClearCache($this->cachePath . 'sp_user/'); } else { $this->ClearCache($this->cachePath . 'sp_common/'); } ?> <script>window._bx_result = true;</script><?php break; // * * * * * Append superposed calendar * * * * * // * * * * * Append superposed calendar * * * * * case 'spcal_disp_save': $spcl = is_array($_POST['spcl']) ? $_POST['spcl'] : array(); if (!$this->SaveDisplayedSPCalendars($spcl)) { return $this->ThrowError('Error! Cant save displayed superposed calendars'); } ?> <script>window._bx_result = true;</script><?php break; // * * * * * Hide superposed calendar * * * * * // * * * * * Hide superposed calendar * * * * * case 'spcal_hide': $this->HideSPCalendar(intVal($_POST['id'])); ?> <script>window._bx_result = true;</script><?php break; // * * * * * Return info about user, and user calendars * * * * * // * * * * * Return info about user, and user calendars * * * * * case 'spcal_user_cals': $name = trim($_POST['name']); if ($res = $this->HandleSPUserCals($name)) { ?> <script>window._bx_result = <?php echo CUtil::PhpToJSObject($res); ?> ;</script><?php } else { ?> <script>window._bx_result = [];</script><?php } break; // * * * * * Return info about user, and user calendars * * * * * // * * * * * Return info about user, and user calendars * * * * * case 'spcal_del_user': if (!$this->DeleteTrackingUser(intVal($_POST['id']))) { return $this->ThrowError('Error! Cant delete tracking user!'); } ?> <script>window._bx_result = true;</script><?php break; // * * * * * Delete all tracking users * * * * * // * * * * * Delete all tracking users * * * * * case 'spcal_del_all_user': $this->DeleteTrackingUser(); ?> <script>window._bx_result = true;</script><?php break; // * * * * * Add calendar to Superposed * * * * * // * * * * * Add calendar to Superposed * * * * * case 'add_cal2sp': if (!$this->AddCalendar2SP()) { return $this->ThrowError('Error! Cant add calendar'); } $this->ClearCache($this->cachePath . 'sp_handle/' . $this->curUserId % 1000 . "/"); ?> <script>window._bx_result = true;</script><?php break; // * * * * * Save user settings * * * * * // * * * * * Save user settings * * * * * case 'set_settings': if (isset($_POST['clear_all']) && $_POST['clear_all'] == true) { // Del user options $res = $this->SetUserSettings(false); ?> <script>window._bx_result = <?php echo CUtil::PhpToJSObject($res); ?> ;</script><?php } else { $Set = array('tab_id' => $_POST['tab_id'], 'cal_sec' => $_POST['cal_sec'], 'sp_cal_sec' => $_POST['sp_cal_sec'], 'planner_scale' => isset($_POST['planner_scale']) ? intVal($_POST['planner_scale']) : false, 'planner_width' => isset($_POST['planner_width']) ? intVal($_POST['planner_width']) : false, 'planner_height' => isset($_POST['planner_height']) ? intVal($_POST['planner_height']) : false); if (isset($_POST['meet_cal_id'])) { $Set['MeetCalId'] = intVal($_POST['meet_cal_id']); } $Set['blink'] = $_POST['blink'] !== 'false'; if (isset($_POST['show_ban'])) { $Set['ShowBanner'] = (bool) $_POST['show_ban']; } $this->SetUserSettings($Set); } break; // * * * * * Find guests for event by name * * * * * // * * * * * Find guests for event by name * * * * * case 'get_guests': if (isset($_POST['from'])) { $from = date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat())); $to = isset($_POST['to']) ? date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())) : $from; } else { $from = false; $to = false; } $bAddCurUser = false; $res = $this->HandleUserSearch(trim($_POST['name']), $from, $to, false, $_POST['event_id'], $bAddCurUser); ?> <script>window._bx_result = <?php echo CUtil::PhpToJSObject($res); ?> ;<?php if ($bAddCurUser) { ?> window._bx_add_cur_user = true;<?php } ?> </script><?php break; // * * * * * Confirm user part in event * * * * * // * * * * * Confirm user part in event * * * * * case 'confirm_event': $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/'); $this->ConfirmEvent(array('id' => intVal($_POST['id']))); ?> <script>window._bx_result = true;</script><?php break; // * * * * * Check users accessibility * * * * * // * * * * * Check users accessibility * * * * * case 'check_guests': $res = $this->CheckGuestsAccessibility(array('arGuests' => $_POST['guests'], 'from' => $_POST['from'], 'to' => $_POST['to'], 'eventId' => $_POST['event_id'])); ?> <script>window._bx_result = <?php echo CUtil::PhpToJSObject($res); ?> ;</script><?php break; // * * * * * Get list of group members * * * * * // * * * * * Get list of group members * * * * * case 'get_group_members': if ($this->ownerType == 'GROUP') { if (isset($_POST['from'])) { $from = date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat())); $to = isset($_POST['to']) ? date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())) : $from; } else { $from = false; $to = false; } $bAddCurUser = false; $res = $this->GetGroupMembers(array('groupId' => $this->ownerId, 'from' => $from, 'to' => $to), $bAddCurUser); ?> <script>window._bx_result = <?php echo CUtil::PhpToJSObject($res); ?> ;<?php if ($bAddCurUser) { ?> window._bx_add_cur_user = true;<?php } ?> </script><?php } break; // * * * * * Get intranet company structure * * * * * // * * * * * Get intranet company structure * * * * * case 'get_company_structure': CEventCalendar::GetIntranetStructure(); break; // * * * * * Get Guests Accessability * * * * * // * * * * * Get Guests Accessability * * * * * case 'get_guests_accessability': $this->GetGuestsAccessability(array('users' => $_POST['users'], 'from' => date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat())), 'to' => date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())), 'curEventId' => intVal($_POST['cur_event_id']))); break; // * * * * * Get meeting room accessibility * * * * * // * * * * * Get meeting room accessibility * * * * * case 'get_mr_accessability': $this->GetMRAccessability(array('id' => intVal($_POST['id']), 'from' => date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat())), 'to' => date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())), 'curEventId' => intVal($_POST['cur_event_id']))); break; // * * * * * Get meeting room accessibility * * * * * // * * * * * Get meeting room accessibility * * * * * case 'check_mr_vr_accessability': $check = false; $from = date(getDateFormat(), MakeTimeStamp($_POST['from'], getTSFormat())); $to = date(getDateFormat(), MakeTimeStamp($_POST['to'], getTSFormat())); $loc_old = $_POST['location_old'] ? CEventCalendar::ParseLocation(trim($_POST['location_old'])) : false; $loc_new = CEventCalendar::ParseLocation(trim($_POST['location_new'])); $Params = array('dateFrom' => cutZeroTime($from), 'dateTo' => cutZeroTime($to), 'regularity' => isset($_POST['per_type']) && strlen($_POST['per_type']) > 0 ? strtoupper($_POST['per_type']) : 'NONE', 'members' => isset($_POST['guest']) ? $_POST['guest'] : false); $tst = MakeTimeStamp($Params['dateTo']); if (date("H:i", $tst) == '00:00') { $Params['dateTo'] = CIBlockFormatProperties::DateFormat(getDateFormat(true), $tst + (23 * 60 + 59) * 60); } if (intVal($_POST['id']) > 0) { $Params['ID'] = intVal($_POST['id']); } if ($loc_new['mrid'] == $this->VMiblockId) { $Params['allowVideoMeeting'] = $this->allowVideoMeeting; $Params['VMiblockId'] = $this->VMiblockId; $check = CEventCalendar::CheckVR($Params); } else { $Params['allowResMeeting'] = $this->allowResMeeting; $Params['RMiblockId'] = $this->RMiblockId; $Params['mrid'] = $loc_new['mrid']; $Params['mrevid_old'] = $loc_old ? $loc_old['mrevid'] : 0; $check = CEventCalendar::CheckMR($Params); } ?> <script>window._bx_result = <?php echo $check === true ? 'true' : '"' . $check . '"'; ?> </script><?php break; case 'connections_edit': if ($this->bReadOnly || $this->ownerType != 'USER') { return $this->ThrowError(GetMessage('EC_ACCESS_DENIED')); } if (CEventCalendar::IsCalDAVEnabled()) { $i = 0; $l = count($_POST['connections']); for ($i = 0; $i < $l; $i++) { $con = $_POST['connections'][$i]; if ($con['id'] <= 0) { if ($con['del'] == 'Y') { continue; } if (!CEventCalendar::CheckCalDavUrl($con['link'], $con['user_name'], $con['pass'])) { return CEventCalendar::ThrowError(GetMessage("EC_CALDAV_URL_ERROR")); } $id = CDavConnection::Add(array("ENTITY_TYPE" => 'user', "ENTITY_ID" => $this->ownerId, "ACCOUNT_TYPE" => 'caldav', "NAME" => $con['name'], "SERVER" => $con['link'], "SERVER_USERNAME" => $con['user_name'], "SERVER_PASSWORD" => $con['pass'])); } elseif ($con['del'] != 'Y') { $arFields = array("NAME" => $con['name'], "SERVER" => $con['link'], "SERVER_USERNAME" => $con['user_name']); // TODO //if (!CEventCalendar::CheckCalDavUrl($con['link'], $con['user_name'], $con['pass'])) // return CEventCalendar::ThrowError(GetMessage("EC_CALDAV_URL_ERROR", Array('#CALDAV_URL#' => $con['link']))); if ($con['pass'] !== 'bxec_not_modify_pass') { $arFields["SERVER_PASSWORD"] = $con['pass']; } CDavConnection::Update(intVal($con['id']), $arFields); } else { CDavConnection::Delete(intVal($con['id'])); $db_res = CUserTypeEntity::GetList(array('ID' => 'ASC'), array("ENTITY_ID" => "IBLOCK_" . $this->iblockId . "_SECTION", "FIELD_NAME" => "UF_BXDAVEX_CDAV_COL")); if ($db_res && ($r = $db_res->GetNext())) { $arSelectFields = array("IBLOCK_ID", "ID", "IBLOCK_SECTION_ID", "UF_BXDAVEX_CDAV_COL"); $rsData = CIBlockSection::GetList(array('ID' => 'ASC'), array("IBLOCK_ID" => $this->iblockId, "CHECK_PERMISSIONS" => 'N', "UF_BXDAVEX_CDAV_COL" => intVal($con['id']), "CREATED_BY" => $this->ownerId, "SECTION_ID" => $this->GetSectionIDByOwnerId($this->ownerId, 'USER', $this->iblockId)), false, $arSelectFields); while ($arRes = $rsData->Fetch()) { if ($con['del_calendars'] == 'Y') { CIBlockSection::Delete($arRes['ID']); } else { $GLOBALS["USER_FIELD_MANAGER"]->Update("IBLOCK_" . $this->iblockId . "_SECTION", $arRes['ID'], array("UF_BXDAVEX_CDAV_COL" => "")); } } } } } if ($err = $APPLICATION->GetException()) { CEventCalendar::ThrowError($err->GetString()); } else { // Manually synchronize calendars CDavGroupdavClientCalendar::DataSync("user", $this->ownerId); // Clear cache $this->ClearCache($this->cachePath . $this->iblockId . "/calendars/" . ($this->bOwner ? $this->ownerId : 0) . "/"); $this->ClearCache($this->cachePath . 'events/' . $this->iblockId . '/'); if ($this->ownerType == 'GROUP') { $this->ClearCache($this->cachePath . 'sp_groups/'); } elseif ($this->ownerType == 'USER') { $this->ClearCache($this->cachePath . 'sp_user/'); } else { $this->ClearCache($this->cachePath . 'sp_common/'); } } } break; case 'exchange_sync': if ($this->ownerType == 'USER' && CEventCalendar::IsExchangeEnabled()) { $error = ""; $res = CDavExchangeCalendar::DoDataSync($this->ownerId, $error); if ($res === true) { ?> <script>window._bx_result_sync = true;</script> <?php } elseif ($res === false) { ?> <script>window._bx_result_sync = false;</script> <?php } else { CEventCalendar::ThrowError($error); } } break; } if ($this->ownerType == 'GROUP' && $action != 'load_events' && class_exists('CSocNetGroup')) { CSocNetGroup::SetLastActivity($this->ownerId); } } return true; }
if ($arIBlock) { $res = $ob->Update($arIBlock["ID"], $arFields); if ($res) { $res = $arIBlock["ID"]; } } else { $res = $ob->Add($arFields); if ($res) { $obList = new CList($res); $obList->AddField(array("SORT" => 10, "NAME" => GetMessage("CC_BLLE_NAME_FIELD"), "IS_REQUIRED" => "Y", "MULTIPLE" => "N", "TYPE" => "NAME", "DEFAULT_VALUE" => "")); $obList->Save(); } } if ($res) { if (strlen($arFields["SOCNET_GROUP_ID"]) > 0 && CModule::IncludeModule('socialnetwork')) { CSocNetGroup::SetLastActivity($arFields["SOCNET_GROUP_ID"]); } //Clear components cache $CACHE_MANAGER->ClearByTag("lists_list_" . $res); $CACHE_MANAGER->ClearByTag("lists_list_any"); $CACHE_MANAGER->CleanDir("menu"); $tab_name = $arResult["FORM_ID"] . "_active_tab"; //And go to proper page if (isset($_POST["save"])) { LocalRedirect($arResult["LISTS_URL"]); } elseif ($arIBlock) { LocalRedirect(CHTTP::urlAddParams($arResult["LIST_EDIT_URL"], array($tab_name => $_POST[$tab_name]), array("skip_empty" => true, "encode" => true))); } else { LocalRedirect(CHTTP::urlAddParams(str_replace(array("#list_id#", "#group_id#"), array($res, $arParams["SOCNET_GROUP_ID"]), $arParams["LIST_EDIT_URL"]), array($tab_name => $_POST[$tab_name]), array("skip_empty" => true, "encode" => true))); } } else {
/** * This method is deprecated. Use CTaskItem::add() instead. * @deprecated */ public function Add($arFields, $arParams = array()) { global $DB, $USER, $USER_FIELD_MANAGER, $CACHE_MANAGER, $APPLICATION; if (isset($arFields['META::EVENT_GUID'])) { $eventGUID = $arFields['META::EVENT_GUID']; unset($arFields['META::EVENT_GUID']); } else { $eventGUID = sha1(uniqid('AUTOGUID', true)); } if (!array_key_exists('GUID', $arFields)) { $arFields['GUID'] = CTasksTools::genUuid(); } if (!isset($arFields['SITE_ID'])) { $arFields['SITE_ID'] = SITE_ID; } $bWasFatalError = false; $spawnedByAgent = false; $effectiveUserId = null; $bCheckRightsOnFiles = false; // for backward compatibility if (is_array($arParams)) { if (isset($arParams['SPAWNED_BY_AGENT']) && ($arParams['SPAWNED_BY_AGENT'] === 'Y' || $arParams['SPAWNED_BY_AGENT'] === true)) { $spawnedByAgent = true; } if (isset($arParams['USER_ID']) && $arParams['USER_ID'] > 0) { $effectiveUserId = (int) $arParams['USER_ID']; } if (isset($arParams['CHECK_RIGHTS_ON_FILES'])) { if ($arParams['CHECK_RIGHTS_ON_FILES'] === 'Y' || $arParams['CHECK_RIGHTS_ON_FILES'] === true) { $bCheckRightsOnFiles = true; } else { $bCheckRightsOnFiles = false; } } } if ($effectiveUserId === null) { $effectiveUserId = is_object($USER) ? intval($USER->GetID()) : 1; } if (!isset($arFields['CREATED_BY']) || !$arFields['CREATED_BY']) { $arFields['CREATED_BY'] = $effectiveUserId; } if ($this->CheckFields($arFields, false, $effectiveUserId)) { if ($USER_FIELD_MANAGER->CheckFields("TASKS_TASK", 0, $arFields, $effectiveUserId)) { $nowDateTimeString = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time() + CTasksTools::getTimeZoneOffset()); if (!isset($arFields["CHANGED_BY"])) { $arFields["STATUS_CHANGED_BY"] = $arFields["CHANGED_BY"] = $arFields["CREATED_BY"]; $arFields["STATUS_CHANGED_DATE"] = $arFields["CHANGED_DATE"] = $arFields["CREATED_DATE"] = $nowDateTimeString; } $arFields["OUTLOOK_VERSION"] = 1; foreach (GetModuleEvents('tasks', 'OnBeforeTaskAdd', true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false) { $e = $APPLICATION->GetException(); if ($e) { if ($e instanceof CAdminException) { if (is_array($e->messages)) { foreach ($e->messages as $msg) { $this->_errors[] = $msg; } } } else { $this->_errors[] = array('text' => $e->getString(), 'id' => 'unknown'); } } if (empty($this->_errors)) { $this->_errors[] = array("text" => GetMessage("TASKS_UNKNOWN_ADD_ERROR"), "id" => "ERROR_UNKNOWN_ADD_TASK_ERROR"); } return false; } } $oTaskList = CTaskCountersProcessor::getInstance(); $oTaskList->onBeforeTaskAdd($arFields, $effectiveUserId); $ID = $DB->Add("b_tasks", $arFields, array("DESCRIPTION"), "tasks"); $arFields["ACCOMPLICES"] = (array) $arFields["ACCOMPLICES"]; $arFields["AUDITORS"] = (array) $arFields["AUDITORS"]; if ($ID) { $rsTask = CTasks::GetByID($ID, false); if ($arTask = $rsTask->Fetch()) { CTasks::AddAccomplices($ID, $arFields["ACCOMPLICES"]); CTasks::AddAuditors($ID, $arFields["AUDITORS"]); CTasks::AddFiles($ID, $arFields["FILES"], array('USER_ID' => $effectiveUserId, 'CHECK_RIGHTS_ON_FILES' => $bCheckRightsOnFiles)); CTasks::AddTags($ID, $arTask["CREATED_BY"], $arFields["TAGS"], $effectiveUserId); CTasks::AddPrevious($ID, $arFields["DEPENDS_ON"]); $USER_FIELD_MANAGER->Update("TASKS_TASK", $ID, $arFields, $effectiveUserId); $arFields["ID"] = $ID; CTasks::__updateViewed($ID, $effectiveUserId, $onTaskAdd = true); CTaskCountersProcessor::onAfterTaskAdd($arFields, $effectiveUserId); CTaskComments::onAfterTaskAdd($ID, $arFields); $occurAsUserId = CTasksTools::getOccurAsUserId(); if (!$occurAsUserId) { $occurAsUserId = $effectiveUserId ? $effectiveUserId : 1; } CTaskNotifications::SendAddMessage(array_merge($arFields, array('CHANGED_BY' => $occurAsUserId)), array('SPAWNED_BY_AGENT' => $spawnedByAgent)); CTaskSync::AddItem($arFields); // MS Exchange // changes log $arLogFields = array("TASK_ID" => $ID, "USER_ID" => $occurAsUserId, "CREATED_DATE" => $nowDateTimeString, "FIELD" => "NEW"); $log = new CTaskLog(); $log->Add($arLogFields); try { $lastEventName = ''; foreach (GetModuleEvents('tasks', 'OnTaskAdd', true) as $arEvent) { $lastEventName = $arEvent['TO_CLASS'] . '::' . $arEvent['TO_METHOD'] . '()'; ExecuteModuleEventEx($arEvent, array($ID, &$arFields)); } } catch (Exception $e) { CTaskAssert::logWarning('[0x37eb64ae] exception in module event: ' . $lastEventName); } CTasks::Index($arTask, $arFields["TAGS"]); // search index // clear cache if ($arFields["GROUP_ID"]) { $CACHE_MANAGER->ClearByTag("tasks_group_" . $arFields["GROUP_ID"]); } $arParticipants = array_unique(array_merge(array($arFields["CREATED_BY"], $arFields["RESPONSIBLE_ID"]), $arFields["ACCOMPLICES"], $arFields["AUDITORS"])); foreach ($arParticipants as $userId) { $CACHE_MANAGER->ClearByTag("tasks_user_" . $userId); } // Emit pull event try { $arPullRecipients = array(); foreach ($arParticipants as $userId) { $arPullRecipients[] = (int) $userId; } $taskGroupId = 0; // no group if (isset($arFields['GROUP_ID']) && $arFields['GROUP_ID'] > 0) { $taskGroupId = (int) $arFields['GROUP_ID']; } $arPullData = array('TASK_ID' => (int) $ID, 'AFTER' => array('GROUP_ID' => $taskGroupId), 'TS' => time(), 'event_GUID' => $eventGUID); self::EmitPullWithTagPrefix($arPullRecipients, 'TASKS_GENERAL_', 'task_add', $arPullData); self::EmitPullWithTag($arPullRecipients, 'TASKS_TASK_' . (int) $ID, 'task_add', $arPullData); } catch (Exception $e) { $bWasFatalError = true; $this->_errors[] = 'at line ' . $e->GetLine() . ', ' . $e->GetMessage(); } if ($arFields['GROUP_ID'] && CModule::IncludeModule("socialnetwork")) { CSocNetGroup::SetLastActivity($arFields['GROUP_ID']); } } } if ($bWasFatalError) { soundex('push&pull: bWasFatalError === true'); } return $ID; } else { $e = $APPLICATION->GetException(); foreach ($e->messages as $msg) { $this->_errors[] = $msg; } } } if (empty($this->_errors)) { $this->_errors[] = array("text" => GetMessage("TASKS_UNKNOWN_ADD_ERROR"), "id" => "ERROR_UNKNOWN_ADD_TASK_ERROR"); } return false; }