public static function GetList($arOrder = array('CREATED_DATE' => 'DESC'), $arFilter = array(), $arSelect = array(), $nPageTop = false) { $ENTITY_ID = 'TASKS_TASK'; $arElement = $GLOBALS['USER_FIELD_MANAGER']->GetUserFields($ENTITY_ID, 0, LANGUAGE_ID); if ($arElement == false || !isset($arElement['UF_CRM_TASK'])) { $arFields = array(); $arFields['ENTITY_ID'] = $ENTITY_ID; $arFields['FIELD_NAME'] = 'UF_CRM_TASK'; $arFields['USER_TYPE_ID'] = 'crm'; $arFields['EDIT_FORM_LABEL'][LANGUAGE_ID] = GetMessage('CRM_UF_NAME'); $arFields['LIST_COLUMN_LABEL'][LANGUAGE_ID] = GetMessage('CRM_UF_NAME'); $arFields['LIST_FILTER_LABEL'][LANGUAGE_ID] = GetMessage('CRM_UF_NAME'); $arFields['SETTINGS']['LEAD'] = 'Y'; $arFields['SETTINGS']['CONTACT'] = 'Y'; $arFields['SETTINGS']['COMPANY'] = 'Y'; $arFields['SETTINGS']['DEAL'] = 'Y'; $arFields['MULTIPLE'] = 'Y'; $CAllUserTypeEntity = new CUserTypeEntity(); $CAllUserTypeEntity->Add($arFields); } if (isset($arFilter['ENTITY_TYPE']) && isset($arFilter['ENTITY_ID'])) { $arFilter['ENTITY_TYPE'] = CUserTypeCrm::GetShortEntityType($arFilter['ENTITY_TYPE']); $arFilter['UF_CRM_TASK'] = $arFilter['ENTITY_TYPE'] . '_' . $arFilter['ENTITY_ID']; unset($arFilter['ENTITY_TYPE'], $arFilter['ENTITY_ID']); } else { if (isset($arFilter['ENTITY_TYPE'])) { if (!empty($arFilter['ENTITY_TYPE'])) { $arFilter['ENTITY_TYPE'] = CUserTypeCrm::GetShortEntityType($arFilter['ENTITY_TYPE']); $arFilter['%UF_CRM_TASK'] = $arFilter['ENTITY_TYPE'] . '_'; } else { $arFilter['!=UF_CRM_TASK'] = ''; } unset($arFilter['ENTITY_TYPE']); } else { $arFilter['!=UF_CRM_TASK'] = ''; } } if (isset($arFilter['TITLE'])) { $arFilter['%TITLE'] = $arFilter['TITLE']; unset($arFilter['TITLE']); } if (isset($arFilter['REAL_STATUS'])) { $arFilter['STATUS'] = $arFilter['REAL_STATUS']; unset($arFilter['REAL_STATUS']); } if (isset($arOrder['ID']) || isset($arOrder['id'])) { $arSelect[] = 'ID'; } if (in_array('RESPONSIBLE_ID', $arSelect)) { $arSelect[] = 'RESPONSIBLE_NAME'; $arSelect[] = 'RESPONSIBLE_LAST_NAME'; $arSelect[] = 'RESPONSIBLE_SECOND_NAME'; $arSelect[] = 'RESPONSIBLE_LOGIN'; } $obRes = CTasks::GetList($arOrder, $arFilter, $arSelect, $nPageTop); return $obRes; }
public static function ConvertTasks($checkPerms = true, $regEvent = true) { if (!(IsModuleInstalled('tasks') && CModule::IncludeModule('tasks'))) { return 0; } $taskEntity = new CTasks(); $dbRes = $taskEntity->GetList(array(), array('!UF_CRM_TASK' => null), array('ID', 'TITLE', 'DESCRIPTION', 'RESPONSIBLE_ID', 'PRIORITY', 'STATUS', 'CREATED_DATE', 'DATE_START', 'CLOSED_DATE', 'START_DATE_PLAN', 'END_DATE_PLAN', 'DEADLINE', 'UF_CRM_TASK'), false); $total = 0; while ($arTask = $dbRes->GetNext()) { $taskID = intval($arTask['ID']); $count = CCrmActivity::GetCount(array('=TYPE_ID' => CCrmActivityType::Task, '=ASSOCIATED_ENTITY_ID' => $taskID)); if ($count === 0 && CCrmActivity::CreateFromTask($taskID, $arTask, $checkPerms, $regEvent) > 0) { $total++; } } return $total; }
/** * This is not a part of public API. * This function is for internal use only. * * @access private */ public static function onCommentTopicAdd($entityType, $entityId, $arPost, &$arTopic) { // 'TK' is our entity type if ($entityType !== 'TK') { return; } if (!(CTaskAssert::isLaxIntegers($entityId) && (int) $entityId >= 1)) { CTaskAssert::logError('[0xb6324222] Expected integer $entityId >= 1'); return; } $taskId = (int) $entityId; $task = CTasks::GetList(array(), array('ID' => $taskId), array('TITLE', 'DESCRIPTION', 'CREATED_BY'))->Fetch(); if ($task) { $arTopic["TITLE"] = $task["TITLE"]; $arTopic["MESSAGE"] = trim($task["TITLE"] . "\n" . $task["DESCRIPTION"]); $arTopic["AUTHOR_ID"] = $task["CREATED_BY"]; } }
?> onclick="taskIFramePopup.view(<?php echo $arResult["TASK"]["BASE_TEMPLATE_ID"]; ?> );return false;"<?php } ?> ><?php echo $arResult["TASK"]["BASE_TEMPLATE_DATA"]["TITLE"]; ?> </a></span> </div> <?php } if ($arResult["TASK"]["PARENT_ID"]) { $rsTask = CTasks::GetList(array(), array("ID" => $arResult["TASK"]["PARENT_ID"]), array("ID", "TITLE")); if ($parent = $rsTask->GetNext()) { ?> <div class="task-detail-supertask"> <span class="task-detail-supertask-label"><?php echo GetMessage("TASKS_PARENT_TASK"); ?> :</span> <span class="task-detail-group-name"><a href="<?php echo CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_TASKS_TASK"], array("task_id" => $parent["ID"], "action" => "view")); ?> " class="task-detail-group-link"<?php if ($arResult["IS_IFRAME"]) { ?> onclick="taskIFramePopup.view(<?php echo $parent["ID"];
function UpdateListItems($listName, $updates) { global $USER, $DB; $arPaths = array('user' => COption::GetOptionString('intranet', 'path_task_user_entry', '/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/'), 'group' => COption::GetOptionString('intranet', 'path_task_group_entry', '/workgroups/group/#GROUP_ID#/tasks/task/view/#TASK_ID#/')); if (!$this->__Init()) { return $this->error; } if (!($listName_original = CIntranetUtils::checkGUID($listName))) { return new CSoapFault('Data error', 'Wrong GUID - ' . $listName); } $listName = ToUpper(CIntranetUtils::makeGUID($listName_original)); $obResponse = new CXMLCreator('Results'); $obBatch = $updates->children[0]; $atrONERROR = $obBatch->getAttribute('OnError'); $atrDATEINUTC = $obBatch->getAttribute('DateInUtc'); $atrPROPERTIES = $obBatch->getAttribute('Properties'); $arChanges = $obBatch->children; $arResultIDs = array(); $dateStart = ConvertTimeStamp(strtotime('-1 hour'), 'FULL'); $arResponseRows = array(); $arResponseRowsError = array(); $arReplicationIDs = array(); foreach ($arChanges as $obMethod) { $arData = array('_command' => $obMethod->getAttribute('Cmd')); $ID = false; $bUpdate = true; $arElement = false; $arSection = $this->arUsersSection; foreach ($obMethod->children as $obField) { $name = $obField->getAttribute('Name'); if ($name == 'MetaInfo') { $name .= '_' . $obField->getAttribute('Property'); } $arData[$name] = $obField->content; } $obResponseRow = new CXMLCreator('Result'); $obResponseRow->setAttribute('ID', $obMethod->getAttribute('ID') . ',' . $arData['_command']); $obResponseRow->setAttribute('List', $listName); $obResponseRow->addChild($obErrorCode = new CXMLCreator('ErrorCode')); if ($arData['ID'] > 0) { $rsElement = CTasks::GetById($arData['ID']); if ($rsElement && ($arElement = $rsElement->Fetch())) { if (!is_array($arElement)) { $obErrorCode->setData('0x81020016'); $bUpdate = false; } else { if ($arElement['taskType'] == "group") { $arGroupTmp = CSocNetGroup::GetByID($arElement['ownerId']); if ($arGroupTmp["CLOSED"] == "Y") { if (COption::GetOptionString("socialnetwork", "work_with_closed_groups", "N") != "Y") { return new CSoapFault('Cannot modify archive group task', 'Cannot modify archive group task'); } } } $arElement['arParams'] = array(intval($arElement['GROUP_ID']) > 0 ? 'PATH_TO_USER_TASKS_TASK' : 'PATH_TO_GROUP_TASKS_TASK' => str_replace(array('#USER_ID#', '#GROUP_ID#', '#TASK_ID#'), array($USER->GetID(), $arSection['XML_ID'], $arElement['ID']), $arPaths[$arElement['taskType']])); } } else { $obErrorCode->setData('0x81020016'); $bUpdate = false; } } if ($bUpdate) { if ($arData['_command'] == 'Delete' && $arElement["CREATED_BY"] == $USER->GetID()) { $arError = false; if (!CTasks::Delete($arElement['ID'])) { $obErrorCode->setData('0x81020014'); } else { $obErrorCode->setData('0x00000000'); } } elseif ($arData['_command'] == 'New' || $arData['_command'] == 'Update') { $arData['Body'] = trim($arData['Body']); $arData['Body'] = str_replace(array(" ", " ", ' '), "", $arData['Body']); $arData['Body'] = preg_replace("/<![^>]*>/", '', $arData['Body']); if (($pos = strpos($arData['Body'], '<BODY>')) !== false) { $arData['Body'] = substr($arData['Body'], $pos + 6); } echo $pos . ' '; if (($pos = strpos($arData['Body'], '</BODY>')) !== false) { $arData['Body'] = substr($arData['Body'], 0, $pos); } echo $pos . ' '; $TZBias = intval(date('Z')); $arData['StartDate'] = $arData['StartDate'] ? $this->__makeTS($arData['StartDate']) + $TZBias : ''; $arData['DueDate'] = $arData['DueDate'] ? $this->__makeTS($arData['DueDate']) + $TZBias : ''; $arData['MetaInfo_DateComplete'] = $arData['MetaInfo_DateComplete'] ? $this->__makeTS($arData['EndDate']) + $TZBias : ''; $probablyHtmlInDescription = strpos($arData['Body'], '<') !== false && strpos($arData['Body'], '>'); $arFields = array('DESCRIPTION_IN_BBCODE' => $probablyHtmlInDescription ? 'N' : 'Y', 'CHANGED_BY' => $USER->GetID(), 'CHANGED_DATE' => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()), 'SITE_ID' => SITE_ID, 'TITLE' => $arData['Title'], 'START_DATE_PLAN' => $arData['StartDate'] ? ConvertTimeStamp($arData['StartDate']) : '', 'DEADLINE' => $arData['DueDate'] ? ConvertTimeStamp($arData['DueDate']) : '', 'DESCRIPTION' => $arData['Body'], 'PRIORITY' => isset($arData['Priority']) ? intval($arData['Priority']) : 1, 'DURATION_PLAN' => $arData['MetaInfo_TotalWork'] / 60, 'DURATION_FACT' => $arData['MetaInfo_ActualWork'] / 60, 'CLOSED_DATE' => $arData['MetaInfo_DateComplete'] ? ConvertTimeStamp($arData['MetaInfo_DateComplete']) : ''); if (in_array($arData['Status'], $this->arStatuses)) { $arFields["STATUS"] = $arData['Status']; } if ($assigned_to = $arData['AssignedTo']) { if ($USER_ID = $this->__getUser($assigned_to)) { $arFields['RESPONSIBLE_ID'] = $USER_ID; } else { $obErrorCode->setData('0x81020054'); $bUpdate = false; } } else { $arFields['RESPONSIBLE_ID'] = $USER->getId(); } if ($bUpdate) { CTimeZone::Disable(); $ID = 0; $obTask = new CTasks(); $arError = false; if ($arData['_command'] == 'New') { if ($arFields["RESPONSIBLE_ID"] == $USER->GetID() || CTasks::IsSubordinate($arFields["RESPONSIBLE_ID"], $USER->GetID())) { $arFields["STATUS"] = 2; } else { $arFields["STATUS"] = 1; } $arFields['OUTLOOK_VERSION'] = 1; $arFields["CREATED_BY"] = $USER->GetID(); $arFields["CREATED_DATE"] = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()); if ($ID = $obTask->Add($arFields)) { $arReplicationIDs[$ID] = $arData['MetaInfo_ReplicationID']; $obErrorCode->setData('0x00000000'); } } else { if ($arElement["CREATED_BY"] == $USER->GetID() || $arElement["RESPONSIBLE_ID"] == $USER->GetID()) { if ($arElement["CREATED_BY"] != $USER->GetID()) { unset($arFields["TITLE"], $arFields["START_DATE_PLAN"], $arFields["DESCRIPTION"], $arFields["PRIORITY"], $arFields["DURATION_PLAN"], $arFields["CLOSED_DATE"]); if ($arElement["ALLOW_CHANGE_DEADLINE"] != "Y") { unset($arFields["DEADLINE"]); } if ($arElement["TASK_CONTROL"] != "Y" && $arFields["STATUS"] == 5) { $arFields["STATUS"] = 4; } } elseif ($arElement["RESPONSIBLE_ID"] != $USER->GetID() && ($arFields["STATUS"] == 6 || $arFields["STATUS"] == 3)) { unset($arFields["STATUS"]); } $arFields['OUTLOOK_VERSION'] = $arData['owshiddenversion']; if (sizeof($arFields) > 0) { if ($obTask->Update($arData['ID'], $arFields)) { $ID = $arData['ID']; $obErrorCode->setData('0x00000000'); } } } } CTimeZone::Enable(); if (is_array($obTask->GetErrors()) && count($obTask->GetErrors()) > 0) { $ID = 0; $obErrorCode->setData('0x81020014'); $bUpdate = false; } else { $taskType = $arElement ? $arElement['taskType'] : 'user'; $ownerId = $arElement ? $arElement['ownerId'] : $USER->GetID(); $arParams = $arElement ? $arElement['arParams'] : array('PATH_TO_USER_TASKS_TASK' => str_replace(array('#USER_ID#', '#GROUP_ID#', '#TASK_ID#'), array($USER->GetID(), $arSection['XML_ID'], $ID), $arPaths['user'])); } } } } if ($ID > 0) { $arResponseRows[$ID] = $obResponseRow; } else { $arResponseRowsError[] = $obResponseRow; } } if (sizeof($arResponseRows) > 0) { $dbRes = CTasks::GetList(array('ID' => 'ASC'), array('ID' => array_keys($arResponseRows), 'MEMBER' => $USER->GetID())); while ($arRes = $dbRes->Fetch()) { if ($arResponseRows[$arRes['ID']]) { $rsFiles = CTaskFiles::GetList(array(), array("TASK_ID" => $arRes["ID"])); $arRes["FILES"] = array(); while ($arFiles = $rsFiles->Fetch()) { $arRes["FILES"][] = $arFiles["FILE_ID"]; } $obRow = $this->__getRow($arRes, $listName, $last_change = 0); if ($arReplicationIDs[$arRes['ID']]) { $obRow->setAttribute('ows_MetaInfo_ReplicationID', $arReplicationIDs[$arRes['ID']]); } $obRow->setAttribute('xmlns:z', "#RowsetSchema"); $arResponseRows[$arRes['ID']]->addChild($obRow); $obResponse->addChild($arResponseRows[$arRes['ID']]); } } } foreach ($arResponseRowsError as $obChange) { $obResponse->addChild($obChange); } return array('UpdateListItemsResult' => $obResponse); }
break; //carter //carter case 'check_report': $bReturnRes = true; $obReportUser = new CUserReportFull(); $force = false; if ($_REQUEST["force"] == "Y") { $force = true; } $res = $obReportUser->GetReportData($force); break; case 'get_task': $bReturnRes = true; $task_id = intval($_POST["task_id"]); $dbTasks = CTasks::GetList(array(), array('ID' => $task_id, 'RESPONSIBLE_ID' => $USER->GetID())); if ($arTask = $dbTasks->Fetch()) { $res = array('ID' => $arTask['ID'], 'PRIORITY' => $arTask['PRIORITY'], 'STATUS' => $arTask['STATUS'], 'TITLE' => $arTask['TITLE'], 'TASK_CONTROL' => $arTask['TASK_CONTROL'], 'TIME' => $arTask['TIME'], 'URL' => str_replace(array('#USER_ID#', '#TASK_ID#'), array($USER->GetID(), $arTask['ID']), COption::GetOptionString('intranet', 'path_task_user_entry', '/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/'))); } break; case 'save_full_report': $bReturnRes = true; $tm_user = new CUserReportFull(); $curUser = $USER->GetID(); $toUser = intval($_POST["TO_USER"]); $bSameUser = $toUser == $curUser; if ($_POST['ACTIVE']) { if ($_POST['DELAY'] == "Y") { $res = $tm_user->Delay(); } $arFields = array("DATE_TO" => ConvertTimeStamp($_POST["DATE_TO"], "SHORT"), "DATE_FROM" => ConvertTimeStamp($_POST["DATE_FROM"], "SHORT"), "MARK" => "X", "TASKS" => $_POST["TASKS"], "EVENTS" => $_POST["EVENTS"], "ACTIVE" => $_POST["ACTIVE"], "REPORT" => $_POST["REPORT"], "PLANS" => $_POST["PLANS"]);
public static function FixForumCommentURL($arData) { if ($arData['MODULE_ID'] !== 'FORUM' && $arData['MODULE_ID'] !== 'forum') { return null; } if ($arData['ENTITY_TYPE_ID'] !== 'FORUM_POST') { return null; } // $arData['PARAM1'] is FORUM_ID // Check that forum is of tasks $arTasksForums = self::ListTasksForumsAsArray(); if (!in_array((int) $arData['PARAM1'], $arTasksForums, true)) { return null; } // Get tasks data $rsTask = CTasks::GetList(array(), array('FORUM_TOPIC_ID' => $arData['PARAM2'])); $arTask = $rsTask->Fetch(); if (!$arTask) { return null; } // Prepare path /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $defSiteId = CSite::GetDefSite(); $extranetSiteId = false; if (CModule::IncludeModule('extranet') && method_exists('CExtranet', 'GetExtranetSiteID')) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $extranetSiteId = CExtranet::GetExtranetSiteID(); } $arFilter = array('UF_DEPARTMENT' => false, 'ID' => $arData['USER_ID']); $rsUser = CUser::GetList($by = 'last_name', $order = 'asc', $arFilter, array('SELECT' => array('UF_DEPARTMENT'))); $isExtranetUser = false; if ($arUser = $rsUser->Fetch()) { $isExtranetUser = true; } if ($isExtranetUser && $extranetSiteId !== false) { if ($arTask["GROUP_ID"]) { $pathTemplate = str_replace("#group_id#", $arTask["GROUP_ID"], COption::GetOptionString("tasks", "paths_task_group_entry", "/extranet/workgroups/group/#group_id#/tasks/task/view/#task_id#/", $extranetSiteId)); $pathTemplate = str_replace("#GROUP_ID#", $arTask["GROUP_ID"], $pathTemplate); } else { $pathTemplate = COption::GetOptionString("tasks", "paths_task_user_entry", "/extranet/contacts/personal/user/#user_id#/tasks/task/view/#task_id#/", $extranetSiteId); } } else { if ($arTask["GROUP_ID"]) { $pathTemplate = str_replace("#group_id#", $arTask["GROUP_ID"], COption::GetOptionString("tasks", "paths_task_group_entry", "/workgroups/group/#group_id#/tasks/task/view/#task_id#/", $defSiteId)); $pathTemplate = str_replace("#GROUP_ID#", $arTask["GROUP_ID"], $pathTemplate); } else { $pathTemplate = COption::GetOptionString("tasks", "paths_task_user_entry", "/company/personal/user/#user_id#/tasks/task/view/#task_id#/", $defSiteId); } } $messageUrl = CComponentEngine::MakePathFromTemplate($pathTemplate, array("user_id" => $arData['USER_ID'], "task_id" => $arTask["ID"], "action" => "view")); if (strlen($arData['ENTITY_ID'])) { if (strpos($messageUrl, "?") === false) { $messageUrl .= "?"; } else { $messageUrl .= "&"; } $messageUrl .= "MID=" . $arData['ENTITY_ID'] . '#message' . $arData['ENTITY_ID']; } // Replace path to correct in URL $arData['URL'] = $messageUrl; // For extranet users address taken from default site by "like/dislike" feature // I don't know why. So replace all links. foreach ($arData['LID'] as $siteId => $value) { $arData['LID'][$siteId] = $messageUrl; } return $arData; }
public static function GetTaskList($Params = array(), &$arTaskIds) { $arFilter = array("DOER" => isset($Params['userId']) ? $Params['userId'] : self::$userId); // TODO: add filter with OR logic here //if (isset($Params['fromLimit'])) // $arFilter[">=START_DATE_PLAN"] = $Params['fromLimit']; //if (isset($Params['toLimit'])) // $arFilter["<=END_DATE_PLAN"] = $Params['toLimit']; $tzEnabled = CTimeZone::Enabled(); if ($tzEnabled) { CTimeZone::Disable(); } $rsTasks = CTasks::GetList(array("START_DATE_PLAN" => "ASC"), $arFilter, array("ID", "TITLE", "DESCRIPTION", "CREATED_DATE", "DEADLINE", "START_DATE_PLAN", "END_DATE_PLAN", "CLOSED_DATE", "STATUS_CHANGED_DATE", "STATUS", "REAL_STATUS"), array()); $offset = CCalendar::GetOffset(); $res = array(); while ($task = $rsTasks->Fetch()) { $dtFrom = NULL; $dtTo = NULL; $arTaskIds[] = $task['ID']; $skipFromOffset = false; $skipToOffset = false; if (isset($task["START_DATE_PLAN"]) && $task["START_DATE_PLAN"]) { $dtFrom = CCalendar::CutZeroTime($task["START_DATE_PLAN"]); } if (isset($task["END_DATE_PLAN"]) && $task["END_DATE_PLAN"]) { $dtTo = CCalendar::CutZeroTime($task["END_DATE_PLAN"]); } if (!isset($dtTo) && isset($task["CLOSED_DATE"])) { $dtTo = CCalendar::CutZeroTime($task["CLOSED_DATE"]); } //Task statuses: 1 - New, 2 - Pending, 3 - In Progress, 4 - Supposedly completed, 5 - Completed, 6 - Deferred, 7 - Declined if (!isset($dtTo) && isset($task["STATUS_CHANGED_DATE"]) && in_array($task["REAL_STATUS"], array('4', '5', '6', '7'))) { $dtTo = CCalendar::CutZeroTime($task["STATUS_CHANGED_DATE"]); } if (isset($dtTo)) { $ts = CCalendar::Timestamp($dtTo); // Correction display logic for harmony with Tasks interfaces if (date("H:i", $ts) == '00:00') { $dtTo = CCalendar::Date($ts - 24 * 60 * 60); } } elseif (isset($task["DEADLINE"])) { $dtTo = CCalendar::CutZeroTime($task["DEADLINE"]); $ts = CCalendar::Timestamp($dtTo); // Correction display logic for harmony with Tasks interfaces if (date("H:i", $ts) == '00:00') { $dtTo = CCalendar::Date($ts - 24 * 60 * 60); } if (!isset($dtFrom)) { $skipFromOffset = true; $dtFrom = CCalendar::Date(time(), false); } } if (!isset($dtTo)) { $dtTo = CCalendar::Date(time(), false); } if (!isset($dtFrom)) { $dtFrom = $dtTo; } $dtFromTS = CCalendar::Timestamp($dtFrom); $dtToTS = CCalendar::Timestamp($dtTo); if ($dtToTS < $dtFromTS) { $dtToTS = $dtFromTS; $dtTo = CCalendar::Date($dtToTS, true); } $skipTime = date("H:i", $dtFromTS) == '00:00' && date("H:i", $dtToTS) == '00:00'; if (!$skipTime && $offset != 0) { if (!$skipFromOffset) { $dtFromTS += $offset; $dtFrom = CCalendar::Date($dtFromTS, true); } if (!$skipToOffset) { $dtToTS += $offset; $dtTo = CCalendar::Date($dtToTS, true); } } $res[] = array("ID" => $task["ID"], "~TYPE" => "tasks", "NAME" => $task["TITLE"], "DT_FROM_TS" => $dtFromTS, "DT_TO_TS" => $dtToTS, "DT_SKIP_TIME" => $skipTime ? 'Y' : 'N', "CAN_EDIT" => CTasks::CanCurrentUserEdit($task)); } if ($tzEnabled) { CTimeZone::Enable(); } return $res; }
function BeforeIndexForum($arFields, $entity_type, $entity_id, $feature, $operation, $path_template) { global $USER; $SECTION_ID = ""; $ELEMENT_ID = intval($_REQUEST["photo_element_id"]); if (empty($ELEMENT_ID)) $ELEMENT_ID = intval($_REQUEST["ELEMENT_ID"]); if($ELEMENT_ID > 0 && CModule::IncludeModule('iblock')) { $rsSections = CIBlockElement::GetElementGroups($ELEMENT_ID, true); $arSection = $rsSections->Fetch(); if($arSection) $SECTION_ID = $arSection["ID"]; } foreach($arFields["LID"] as $site_id => $url) { $arFields["URL"] = $arFields["LID"][$site_id] = str_replace( array( "#user_id#", "#group_id#", "#topic_id#", "#message_id#", "#action#", "#user_alias#", "#section_id#", "#element_id#", "#task_id#", ), array( ($this->_user_id > 0 ? $this->_user_id : $USER->GetID()), $this->_group_id, $arFields["PARAM2"], $arFields["ITEM_ID"], "view", ($entity_type=="G"? "group_": "user_").$entity_id, $SECTION_ID, $ELEMENT_ID, $ELEMENT_ID, ), $path_template ); } if ( ($feature == 'tasks') && (COption::GetOptionString("intranet", "use_tasks_2_0", "N") == 'Y') && ($arFields["PARAM1"] == COption::GetOptionString("tasks", "task_forum_id", 0)) && CModule::IncludeModule('tasks') ) { $rsTask = CTasks::GetList(array(), array("FORUM_TOPIC_ID" => $arFields['PARAM2'])); if ($arTask = $rsTask->Fetch()) $arFields['PERMISSIONS'] = CTasks::__GetSearchPermissions($arTask); } else { $arFields["PERMISSIONS"] = $this->GetSearchGroups( $entity_type, $entity_id, $feature, $operation ); $arFields["PARAMS"] = $this->GetSearchParams( $entity_type, $entity_id, $feature, $operation ); } return $arFields; }
public static function onAfterCommentAdd($entityType, $entityId, $arData) { global $USER; // 'TK' is our entity type if ($entityType !== 'TK' || intval($entityId) <= 0 || !CModule::IncludeModule('tasks') || !CModule::IncludeModule('socialnetwork')) { return; } $taskId = (int) $entityId; $messageId = $arData['MESSAGE_ID']; $parser = new CTextParser(); $messageAuthorId = null; if (array_key_exists('AUTHOR_ID', $arData['PARAMS']) && array_key_exists('EDIT_DATE', $arData['PARAMS']) && array_key_exists('POST_DATE', $arData['PARAMS'])) { $messageAuthorId = $arData['PARAMS']['AUTHOR_ID']; } else { $arMessage = CForumMessage::GetByID($messageId); $messageAuthorId = $arMessage['AUTHOR_ID']; } $occurAsUserId = CTasksTools::getOccurAsUserId(); if (!$occurAsUserId) { $occurAsUserId = $messageAuthorId ? $messageAuthorId : 1; } $rsTask = CTasks::GetList(false, array('ID' => $taskId), array('UF_CRM_TASK')); $arTask = $rsTask->GetNext(); if (!isset($arTask) || !isset($arTask['UF_CRM_TASK']) || is_array($arTask['UF_CRM_TASK']) && (!isset($arTask['UF_CRM_TASK'][0]) || strlen($arTask['UF_CRM_TASK'][0]) <= 0) || !is_array($arTask['UF_CRM_TASK']) && strlen($arTask['UF_CRM_TASK']) <= 0) { return; } $dbCrmActivity = CCrmActivity::GetList(array(), array('TYPE_ID' => CCrmActivityType::Task, 'ASSOCIATED_ENTITY_ID' => $taskId, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID')); $arCrmActivity = $dbCrmActivity->Fetch(); if (!$arCrmActivity) { return; } $crmActivityId = $arCrmActivity['ID']; // sonet log $dbLog = CSocNetLog::GetList(array(), array("EVENT_ID" => "crm_activity_add", "ENTITY_ID" => $crmActivityId), false, false, array("ID", "ENTITY_TYPE", "ENTITY_ID")); if ($arLog = $dbLog->Fetch()) { $log_id = $arLog["ID"]; $entity_type = $arLog["ENTITY_TYPE"]; $entity_id = $arLog["ENTITY_ID"]; $strURL = $GLOBALS['APPLICATION']->GetCurPageParam("", array("IFRAME", "MID", "SEF_APPLICATION_CUR_PAGE_URL", BX_AJAX_PARAM_ID, "result")); $strURL = ForumAddPageParams($strURL, array("MID" => $messageId, "result" => "reply"), false, false); $sText = COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $arMessage["POST_MESSAGE_FILTER"] : $arMessage["POST_MESSAGE"]; $arFieldsForSocnet = array("ENTITY_TYPE" => $entity_type, "ENTITY_ID" => $entity_id, "EVENT_ID" => "crm_activity_add_comment", "MESSAGE" => $sText, "TEXT_MESSAGE" => $parser->convert4mail($sText), "URL" => str_replace("?IFRAME=Y", "", str_replace("&IFRAME=Y", "", str_replace("IFRAME=Y&", "", $strURL))), "MODULE_ID" => "crm", "SOURCE_ID" => $messageId, "LOG_ID" => $log_id, "RATING_TYPE_ID" => "FORUM_POST", "RATING_ENTITY_ID" => $messageId); $arFieldsForSocnet["USER_ID"] = $occurAsUserId; $arFieldsForSocnet["=LOG_DATE"] = $GLOBALS['DB']->CurrentTimeFunction(); $ufFileID = array(); $dbAddedMessageFiles = CForumFiles::GetList(array("ID" => "ASC"), array("MESSAGE_ID" => $messageId)); while ($arAddedMessageFiles = $dbAddedMessageFiles->Fetch()) { $ufFileID[] = $arAddedMessageFiles["FILE_ID"]; } if (count($ufFileID) > 0) { $arFieldsForSocnet["UF_SONET_COM_FILE"] = $ufFileID; } $ufDocID = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFieldValue("FORUM_MESSAGE", "UF_FORUM_MESSAGE_DOC", $messageId, LANGUAGE_ID); if ($ufDocID) { $arFieldsForSocnet["UF_SONET_COM_DOC"] = $ufDocID; } $comment_id = CSocNetLogComments::Add($arFieldsForSocnet, false, false); CSocNetLog::CounterIncrement($comment_id, false, false, "LC"); } }
// parent task ?> <td class="task-supertask"> <?php $name = $APPLICATION->IncludeComponent("bitrix:tasks.task.selector", ".default", array("MULTIPLE" => "N", "NAME" => "PARENT_TASK", "VALUE" => $arData["PARENT_ID"], "POPUP" => "Y", "ON_SELECT" => "onParentTaskSelect", "PATH_TO_TASKS_TASK" => $arParams["PATH_TO_TASKS_TASK"], "SITE_ID" => SITE_ID), null, array("HIDE_ICONS" => "Y")); ?> <a href="" id="task-supertask-link" class="webform-field-action-link"><?php echo GetMessage("TASKS_TASK_PARENT_TASK"); ?> </a> <ol class="task-to-tasks-list task-to-tasks-list-single" id="task-parent-tasks-list"> <?php if ($arData["PARENT_ID"]) { ?> <?php $rsParentTask = CTasks::GetList(array("TITLE" => "ASC"), array("ID" => $arData["PARENT_ID"])); if ($task = $rsParentTask->GetNext()) { ?> <li class="task-to-tasks-item"> <a href="<?php echo CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_TASKS_TASK"], array("task_id" => $task["ID"], "action" => "view")); ?> " target="_blank" class="task-to-tasks-item-name"><?php echo $task["TITLE"]; ?> </a> <span class="task-to-tasks-item-delete" onclick="onParentTasksRemove(<?php echo $task["ID"]; ?> , this)"></span> </li>
if (count($arFilter) == 0) { CTaskAssert::logError('[0xe7b4f47e] '); return; } $arFilter['CHECK_PERMISSIONS'] = 'Y'; } else { $unfilteredTaskIds = array_filter(array_map('intval', explode(',', $_POST['elements_ids']))); if (count($unfilteredTaskIds) == 0) { CTaskAssert::logError('[0x5f5f7fc7] no items given'); break; } $arFilter = array('ID' => $unfilteredTaskIds); } // Select tasks for ensure access to them for current user $arTasksIds = array(); $rsTasks = CTasks::GetList(array(), $arFilter, array('ID')); while ($task = $rsTasks->fetch()) { $arTasksIds[] = (int) $task['ID']; } $value = null; $processedItems = $notProcessedItems = 0; switch ($_POST['subaction']) { case 'remove': foreach ($arTasksIds as $taskId) { try { $oTask = CTaskItem::getInstance($taskId, $loggedInUserId); $oTask->delete(); ++$processedItems; } catch (TasksException $e) { // some of items can't be delete (no rights, etc) ++$notProcessedItems;
private static function getFilesAttachedInAccessibleTasks($userId, $arFilesIds) { $arAccessibleFilesIds = array(); // Array of accessible files ids $arTasksWithFiles = array(); // Tasks with given files $arAccessibleTasks = array(); // Tasks that user can access $arTaskFiles = array(); // Mapped FILE_ID to array of TASK_ID, that contains this file // Usage of 'f' prefix prevents createing indexed array, // but forces associative. So, PHP wouldn't fill in the gaps in // index values. // It should improves perfomance and prevent big memory usage. // Init $arTaskFiles foreach ($arFilesIds as $fileId) { $arTaskFiles['f' . $fileId] = array(); } $rsTaskFile = self::GetList(array(), array('FILE_ID' => $arFilesIds)); while ($arTaskFile = $rsTaskFile->Fetch()) { $taskId = (int) $arTaskFile['TASK_ID']; $fileId = (int) $arTaskFile['FILE_ID']; $arTasksWithFiles[] = $taskId; $arTaskFiles['f' . $fileId][] = $taskId; } $arTasksWithFiles = array_unique($arTasksWithFiles); $rsTask = CTasks::GetList(array(), array('ID' => $arTasksWithFiles), array('ID'), array('USER_ID' => $userId)); while ($arTask = $rsTask->Fetch()) { $arAccessibleTasks[] = (int) $arTask['ID']; } // user can access files, that are already attached to tasks, accessibly by user foreach ($arFilesIds as $fileId) { $arTasksIds = array_unique($arTaskFiles['f' . $fileId]); if (count(array_intersect($arTasksIds, $arAccessibleTasks))) { $arAccessibleFilesIds[] = (int) $fileId; } } return $arAccessibleFilesIds; }
function CanCurrentUserViewTopic($topicID) { global $USER; $isSocNetModuleIncluded = CModule::IncludeModule("socialnetwork"); if (($topicID = intval($topicID)) && is_object($USER)) { if ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) { return true; } $rsTask = $res = CTasks::GetList(array(), array("FORUM_TOPIC_ID" => $topicID)); if ($arTask = $rsTask->Fetch()) { if ((int) $arTask['GROUP_ID'] > 0) { if (in_array(CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $arTask["GROUP_ID"], "tasks", "view_all"), array("G2", "AU"))) { return true; } elseif ($isSocNetModuleIncluded && false !== CSocNetFeaturesPerms::CurrentUserCanPerformOperation(SONET_ENTITY_GROUP, $arTask['GROUP_ID'], 'tasks', 'view_all')) { return true; } } $arTask["ACCOMPLICES"] = $arTask["AUDITORS"] = array(); $rsMembers = CTaskMembers::GetList(array(), array("TASK_ID" => $arTask["ID"])); while ($arMember = $rsMembers->Fetch()) { if ($arMember["TYPE"] == "A") { $arTask["ACCOMPLICES"][] = $arMember["USER_ID"]; } elseif ($arMember["TYPE"] == "U") { $arTask["AUDITORS"][] = $arMember["USER_ID"]; } } if (in_array($USER->GetID(), array_unique(array_merge(array($arTask["CREATED_BY"], $arTask["RESPONSIBLE_ID"]), $arTask["ACCOMPLICES"], $arTask["AUDITORS"])))) { return true; } $dbRes = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => $arTask["RESPONSIBLE_ID"]), array('SELECT' => array('UF_DEPARTMENT'))); if (($arRes = $dbRes->Fetch()) && is_array($arRes['UF_DEPARTMENT']) && count($arRes['UF_DEPARTMENT']) > 0) { if (in_array($USER->GetID(), array_keys(CTasks::GetDepartmentManagers($arRes['UF_DEPARTMENT'], $arTask["RESPONSIBLE_ID"])))) { return true; } } } } return false; }
$arResult["NAME"] = htmlspecialcharsbx($arParams["NAME"]); $arResult["~NAME"] = $arParams["NAME"]; $arGetListParams = array('NAV_PARAMS' => array('nTopCount' => 15)); $arSelect = array(); $arOrder = array("STATUS" => "ASC", "DEADLINE" => "DESC", "PRIORITY" => "DESC", "ID" => "DESC"); $arFilter = array('DOER' => $USER->GetID(), 'STATUS' => array(CTasks::METASTATE_VIRGIN_NEW, CTasks::METASTATE_EXPIRED, CTasks::STATE_NEW, CTasks::STATE_PENDING, CTasks::STATE_IN_PROGRESS)); if (is_array($arParams["FILTER"])) { $arFilter = array_merge($arFilter, $arParams["FILTER"]); } $dbRes = CTasks::GetList($arOrder, $arFilter, $arSelect, $arGetListParams); $arResult["LAST_TASKS"] = array(); while ($arRes = $dbRes->GetNext()) { $arResult["LAST_TASKS"][] = $arRes; } // current tasks if (!is_array($arParams['VALUE'])) { $arParams['VALUE'] = explode(',', $arParams['VALUE']); } foreach ($arParams['VALUE'] as $key => $ID) { $arParams['VALUE'][$key] = intval(trim($ID)); } $arParams['VALUE'] = array_unique($arParams['VALUE']); $arResult["CURRENT_TASKS"] = array(); if (sizeof($arParams["VALUE"])) { $dbRes = CTasks::GetList(array('TITLE' => 'ASC'), array('ID' => $arParams['VALUE'])); while ($arRes = $dbRes->GetNext()) { $arResult["CURRENT_TASKS"][] = $arRes; } } $APPLICATION->AddHeadScript($this->GetPath() . '/templates/.default/tasks.js'); $this->IncludeComponentTemplate();
public static function SendUpdateMessage($arFields, $arTask, $bSpawnedByAgent = false) { global $USER; $isBbCodeDescription = true; if (isset($arFields['DESCRIPTION_IN_BBCODE'])) { if ($arFields['DESCRIPTION_IN_BBCODE'] === 'N') { $isBbCodeDescription = false; } } elseif (isset($arTask['DESCRIPTION_IN_BBCODE'])) { if ($arTask['DESCRIPTION_IN_BBCODE'] === 'N') { $isBbCodeDescription = false; } } $taskReassignedTo = null; if (isset($arFields['RESPONSIBLE_ID']) && $arFields['RESPONSIBLE_ID'] > 0 && $arFields['RESPONSIBLE_ID'] != $arTask['RESPONSIBLE_ID']) { $taskReassignedTo = $arFields['RESPONSIBLE_ID']; } foreach (array('CREATED_BY', 'RESPONSIBLE_ID', 'ACCOMPLICES', 'AUDITORS', 'TITLE') as $field) { if (!isset($arFields[$field]) && isset($arTask[$field])) { $arFields[$field] = $arTask[$field]; } } $arChanges = CTaskLog::GetChanges($arTask, $arFields); $arMerged = array('ADDITIONAL_RECIPIENTS' => array()); if (isset($arTask['CREATED_BY'])) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $arTask['CREATED_BY']; } if (isset($arTask['RESPONSIBLE_ID'])) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $arTask['RESPONSIBLE_ID']; } if (isset($arTask['ACCOMPLICES']) && is_array($arTask['ACCOMPLICES'])) { foreach ($arTask['ACCOMPLICES'] as $userId) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $userId; } } if (isset($arTask['AUDITORS']) && is_array($arTask['AUDITORS'])) { foreach ($arTask['AUDITORS'] as $userId) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $userId; } } if (isset($arFields['ADDITIONAL_RECIPIENTS'])) { $arFields['ADDITIONAL_RECIPIENTS'] = array_merge($arFields['ADDITIONAL_RECIPIENTS'], $arMerged['ADDITIONAL_RECIPIENTS']); } else { $arFields['ADDITIONAL_RECIPIENTS'] = $arMerged['ADDITIONAL_RECIPIENTS']; } $arUsers = CTaskNotifications::__GetUsers($arFields); $arRecipientsIDs = array_unique(CTaskNotifications::GetRecipientsIDs($arFields)); if (!empty($arRecipientsIDs) && (is_object($USER) && $USER->GetID() || $arFields["CREATED_BY"])) { $curUserTzOffset = (int) CTasksTools::getTimeZoneOffset(); $arInvariantChangesStrs = array(); $arVolatileDescriptions = array(); $arRecipientsIDsByTimezone = array(); $i = 0; foreach ($arChanges as $key => $value) { ++$i; $actionMessage = GetMessage("TASKS_MESSAGE_" . $key); if (strlen($actionMessage)) { $tmpStr = $actionMessage . ": [COLOR=#000]"; switch ($key) { case 'TIME_ESTIMATE': $tmpStr .= self::formatTimeHHMM($value["FROM_VALUE"], true) . " -> " . self::formatTimeHHMM($value["TO_VALUE"], true); break; case "TITLE": $tmpStr .= $value["FROM_VALUE"] . " -> " . $value["TO_VALUE"]; break; case "RESPONSIBLE_ID": $tmpStr .= CTaskNotifications::__Users2String($value["FROM_VALUE"], $arUsers, $arFields["NAME_TEMPLATE"]) . ' -> ' . CTaskNotifications::__Users2String($value["TO_VALUE"], $arUsers, $arFields["NAME_TEMPLATE"]); break; case "ACCOMPLICES": case "AUDITORS": $tmpStr .= CTaskNotifications::__Users2String(explode(",", $value["FROM_VALUE"]), $arUsers, $arFields["NAME_TEMPLATE"]) . ' -> ' . CTaskNotifications::__Users2String(explode(",", $value["TO_VALUE"]), $arUsers, $arFields["NAME_TEMPLATE"]); break; case "DEADLINE": case "START_DATE_PLAN": case "END_DATE_PLAN": // CTasks::Log() returns bitrix timestamps for dates, so adjust them to correct unix timestamps. $utsFromValue = $value['FROM_VALUE'] - $curUserTzOffset; $utsToValue = $value['TO_VALUE'] - $curUserTzOffset; // It will be replaced below to formatted string with correct dates for different timezones $placeholder = '###PLACEHOLDER###' . $i . '###'; $tmpStr .= $placeholder; // Collect recipients' timezones foreach ($arRecipientsIDs as $userId) { $tzOffset = (int) CTasksTools::getTimeZoneOffset($userId); if (!isset($arVolatileDescriptions[$tzOffset])) { $arVolatileDescriptions[$tzOffset] = array(); } if (!isset($arVolatileDescriptions[$tzOffset][$placeholder])) { // Make bitrix timestamps for given user $bitrixTsFromValue = $utsFromValue + $tzOffset; $bitrixTsToValue = $utsToValue + $tzOffset; $description = ''; if ($utsFromValue > 360000) { $fromValueAsString = FormatDate('^' . CDatabase::DateFormatToPHP(FORMAT_DATETIME), $bitrixTsFromValue); $description .= $fromValueAsString; } $description .= ' --> '; if ($utsToValue > 360000) { $toValueAsString = FormatDate('^' . CDatabase::DateFormatToPHP(FORMAT_DATETIME), $bitrixTsToValue); $description .= $toValueAsString; } $arVolatileDescriptions[$tzOffset][$placeholder] = $description; } $arRecipientsIDsByTimezone[$tzOffset][] = $userId; } break; case "DESCRIPTION": $tmpStr .= HTMLToTxt($arFields["DESCRIPTION"]); break; case "TAGS": $tmpStr .= ($value["FROM_VALUE"] ? str_replace(",", ", ", $value["FROM_VALUE"]) . " -> " : "") . ($value["TO_VALUE"] ? str_replace(",", ", ", $value["TO_VALUE"]) : GetMessage("TASKS_MESSAGE_NO_VALUE")); break; case "PRIORITY": $tmpStr .= GetMessage("TASKS_PRIORITY_" . $value["FROM_VALUE"]) . " -> " . GetMessage("TASKS_PRIORITY_" . $value["TO_VALUE"]); break; case "GROUP_ID": if ($value["FROM_VALUE"] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $value["FROM_VALUE"])) { $arGroupFrom = CSocNetGroup::GetByID($value["FROM_VALUE"]); if ($arGroupFrom) { $tmpStr .= $arGroupFrom["NAME"] . " -> "; } } if ($value["TO_VALUE"] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $value["TO_VALUE"])) { $arGroupTo = CSocNetGroup::GetByID($value["TO_VALUE"]); if ($arGroupTo) { $tmpStr .= $arGroupTo["NAME"]; } } else { $tmpStr .= GetMessage("TASKS_MESSAGE_NO_VALUE"); } break; case "PARENT_ID": if ($value["FROM_VALUE"]) { $rsTaskFrom = CTasks::GetList(array(), array("ID" => $value["FROM_VALUE"]), array('ID', 'TITLE')); if ($arTaskFrom = $rsTaskFrom->GetNext()) { $tmpStr .= $arTaskFrom["TITLE"] . " -> "; } } if ($value["TO_VALUE"]) { $rsTaskTo = CTasks::GetList(array(), array("ID" => $value["TO_VALUE"]), array('ID', 'TITLE')); if ($arTaskTo = $rsTaskTo->GetNext()) { $tmpStr .= $arTaskTo["TITLE"]; } } else { $tmpStr .= GetMessage("TASKS_MESSAGE_NO_VALUE"); } break; case "DEPENDS_ON": $arTasksFromStr = array(); if ($value["FROM_VALUE"]) { $rsTasksFrom = CTasks::GetList(array(), array("ID" => explode(",", $value["FROM_VALUE"])), array('ID', 'TITLE')); while ($arTaskFrom = $rsTasksFrom->GetNext()) { $arTasksFromStr[] = $arTaskFrom["TITLE"]; } } $arTasksToStr = array(); if ($value["TO_VALUE"]) { $rsTasksTo = CTasks::GetList(array(), array("ID" => explode(",", $value["TO_VALUE"])), array('ID', 'TITLE')); while ($arTaskTo = $rsTasksTo->GetNext()) { $arTasksToStr[] = $arTaskTo["TITLE"]; } } $tmpStr .= ($arTasksFromStr ? implode(", ", $arTasksFromStr) . " -> " : "") . ($arTasksToStr ? implode(", ", $arTasksToStr) : GetMessage("TASKS_MESSAGE_NO_VALUE")); break; case "MARK": $tmpStr .= (!$value["FROM_VALUE"] ? GetMessage("TASKS_MARK_NONE") : GetMessage("TASKS_MARK_" . $value["FROM_VALUE"])) . " -> " . (!$value["TO_VALUE"] ? GetMessage("TASKS_MARK_NONE") : GetMessage("TASKS_MARK_" . $value["TO_VALUE"])); break; case "ADD_IN_REPORT": $tmpStr .= ($value["FROM_VALUE"] == "Y" ? GetMessage("TASKS_MESSAGE_IN_REPORT_YES") : GetMessage("TASKS_MESSAGE_IN_REPORT_NO")) . " -> " . ($value["TO_VALUE"] == "Y" ? GetMessage("TASKS_MESSAGE_IN_REPORT_YES") : GetMessage("TASKS_MESSAGE_IN_REPORT_NO")); break; case "DELETED_FILES": $tmpStr .= $value["FROM_VALUE"]; $tmpStr .= $value["TO_VALUE"]; break; case "NEW_FILES": $tmpStr .= $value["TO_VALUE"]; break; } $tmpStr .= "[/COLOR]"; $arInvariantChangesStrs[] = $tmpStr; } } $occurAsUserId = CTasksTools::getOccurAsUserId(); if (!$occurAsUserId) { $occurAsUserId = is_object($USER) && $USER->GetID() ? $USER->GetID() : $arFields["CREATED_BY"]; } $invariantDescription = null; if (!empty($arInvariantChangesStrs)) { $invariantDescription = implode("\r\n", $arInvariantChangesStrs); } if ($invariantDescription !== null && !empty($arRecipientsIDs)) { // If there is no volatile part of descriptions, send to all recipients at once if (empty($arVolatileDescriptions)) { $arVolatileDescriptions['some_timezone'] = array(); $arRecipientsIDsByTimezone['some_timezone'] = $arRecipientsIDs; } foreach ($arVolatileDescriptions as $tzOffset => $arVolatileDescriptionsData) { $strDescription = $invariantDescription; foreach ($arVolatileDescriptionsData as $placeholder => $strReplaceTo) { $strDescription = str_replace($placeholder, $strReplaceTo, $strDescription); } $message = str_replace(array("#TASK_TITLE#", "#TASK_EXTRA#"), array(self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID'], true), $strDescription), GetMessage("TASKS_TASK_CHANGED_MESSAGE")); if ($isBbCodeDescription) { $parser = new CTextParser(); $htmlDescription = str_replace("\t", ' ', $parser->convertText($strDescription)); } else { $htmlDescription = $strDescription; } $message_email = str_replace(array("#TASK_TITLE#", "#TASK_EXTRA#"), array(self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID']), $htmlDescription . "\r\n" . GetMessage('TASKS_MESSAGE_LINK') . ': #PATH_TO_TASK#'), GetMessage("TASKS_TASK_CHANGED_MESSAGE")); CTaskNotifications::SendMessage($occurAsUserId, $arRecipientsIDsByTimezone[$tzOffset], $message, $arTask["ID"], $message_email, array('ACTION' => 'TASK_UPDATE', 'arFields' => $arFields, 'arChanges' => $arChanges), $taskReassignedTo); } } } // sonet log self::SendMessageToSocNet($arFields, $bSpawnedByAgent, $arChanges, $arTask); }
} } foreach ($_POST["oldNames"] as $key => $value) { if ($_POST["oldNames"][$key] != $_POST["newNames"][$key]) { CTaskTags::Rename($_POST["oldNames"][$key], $_POST["newNames"][$key], $USER->GetID()); } } } if (sizeof($_POST["deleted"])) { $rsDeletedTags = CTaskTags::GetList(array(), array("USER_ID" => $USER->GetID(), "NAME" => $_POST["deleted"])); while ($arTag = $rsDeletedTags->Fetch()) { if (!in_array($arTag["TASK_ID"], $arAffectedTasks)) { $arAffectedTasks[] = $arTag["TASK_ID"]; } } CTaskTags::Delete(array("USER_ID" => $USER->GetID(), "NAME" => $_POST["deleted"])); } if (CModule::IncludeModule('search') && sizeof($arAffectedTasks)) { $rsTasks = CTasks::GetList(array(), array("ID" => $arAffectedTasks)); while ($arTask = $rsTasks->Fetch()) { $rsTaskTags = CTaskTags::GetList(array(), array("TASK_ID" => $arTask["ID"])); $arTags = array(); while ($tag = $rsTaskTags->Fetch()) { $arTags[] = $tag["NAME"]; } CTasks::Index($arTask, $arTags); } } CMain::FinalActions(); // to make events work on bitrix24 }
while ($arSubTask = $rsSubtasks->GetNext()) { $arResult["SUBTASKS"][] = $arSubTask; $arTasksIDs[] = $arSubTask["ID"]; if ($arSubTask["GROUP_ID"] && !in_array($arSubTask["GROUP_ID"], $arGroupsIDs)) { $arGroupsIDs[] = $arSubTask["GROUP_ID"]; } } // previous tasks $rsPrevTasksIds = CTaskDependence::getList(array(), array('TASK_ID' => $arParams["TASK_ID"])); $arPrevTasksIds = array(); while ($arPrevTask = $rsPrevTasksIds->fetch()) { $arPrevTasksIds[] = (int) $arPrevTask['DEPENDS_ON_ID']; } $arResult["PREV_TASKS"] = array(); if (!empty($arPrevTasksIds)) { $rsPrevtasks = CTasks::GetList(array('GROUP_ID' => 'ASC'), array('ID' => $arPrevTasksIds)); while ($arPrevTask = $rsPrevtasks->GetNext()) { $arResult["PREV_TASKS"][] = $arPrevTask; $arTasksIDs[] = $arPrevTask["ID"]; if ($arPrevTask["GROUP_ID"] && !in_array($arPrevTask["GROUP_ID"], $arGroupsIDs)) { $arGroupsIDs[] = $arPrevTask["GROUP_ID"]; } } } $rsChildrenCount = CTasks::GetChildrenCount(array(), $arTasksIDs); if ($rsChildrenCount) { while ($arChildrenCount = $rsChildrenCount->Fetch()) { $arResult["CHILDREN_COUNT"]["PARENT_" . $arChildrenCount["PARENT_ID"]] = $arChildrenCount["CNT"]; } } // groups
} } if (!empty($arGroupsIds)) { $arGroupsIds = array_unique(array_filter(array_values($arGroupsIds))); if (!empty($arGroupsIds)) { $rsGroups = CSocNetGroup::GetList(array('ID' => 'ASC'), array('ID' => $arGroupsIds), false, false, array('ID', 'NAME')); while ($arGroup = $rsGroups->getNext()) { $arGroup['URL'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_GROUP'], array('group_id' => $arGroup['ID'])); $arResult['GROUPS_DATA'][$arGroup['ID']] = $arGroup; } } } if (!empty($arTasksIds)) { $arTasksIds = array_unique(array_filter($arTasksIds)); if (!empty($arTasksIds)) { $rsTasks = CTasks::GetList(array('ID' => 'ASC'), array('ID' => $arTasksIds), array('ID', 'TITLE')); while ($arTask = $rsTasks->getNext()) { $arTask['URL'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TASKS_TASK'], array('task_id' => $arTask['ID'], 'action' => 'view')); $arResult['TASKS_DATA'][$arTask['ID']] = $arTask; } } } } // check out which sections we need to show $arResult['DISPLAY_BLOCKS'] = array('CONNECTED_ENTITIES' => false, 'PROPERTIES' => false); if (!empty($arResult["TASK"]["TAGS"]) || $arResult["TASK"]["GROUP_ID"] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $arResult["TASK"]["GROUP_ID"]) || intval($arResult["TASK"]["BASE_TEMPLATE_ID"]) || intval($arResult["TASK"]["PARENT_ID"])) { $arResult['DISPLAY_BLOCKS']['CONNECTED_ENTITIES'] = true; } if (is_array($arResult["USER_FIELDS"]) && !empty($arResult["USER_FIELDS"])) { foreach ($arResult["USER_FIELDS"] as $fld) { if (!empty($fld['VALUE'])) {
function CheckFields(&$arFields, $ID = false, $arParams = array()) { global $APPLICATION; if (intval($ID)) { if (!is_array($this->currentData)) { $this->currentData = self::GetById($ID)->fetch(); } } //////////////////////////////////// // deal with TYPE if (intval($this->currentData['ID']) && isset($arFields['TPARAM_TYPE']) && $this->currentData['TPARAM_TYPE'] != $arFields['TPARAM_TYPE']) { $this->_errors[] = array("text" => 'You can not change TYPE of an existing template', "id" => "ERROR_TASKS_BAD_TEMPLATE_PARAMETER_TYPE"); unset($arFields['TPARAM_TYPE']); // You may not change template type of an existing template } // check allowed value if (isset($arFields['TPARAM_TYPE'])) { if ($arFields['TPARAM_TYPE'] != static::TYPE_FOR_NEW_USER) { // white list here later $this->_errors[] = array("text" => 'Unknown template type id passed', "id" => "ERROR_TASKS_BAD_TEMPLATE_PARAMETER_TYPE"); } } // unset some data, if type is TYPE_FOR_NEW_USER if (!intval($ID) && $arFields['TPARAM_TYPE'] == CTaskTemplates::TYPE_FOR_NEW_USER || intval($ID) && $this->currentData['TPARAM_TYPE'] == CTaskTemplates::TYPE_FOR_NEW_USER) { $arFields['BASE_TEMPLATE_ID'] = ''; // such kind of template can not have parent template ... $arFields['REPLICATE_PARAMS'] = serialize(array()); // ... and replication params $arFields['RESPONSIBLE_ID'] = ''; // ... and responsible_id $arFields['RESPONSIBLES'] = serialize(array()); // ... and other responsibles $arFields['MULTITASK'] = 'N'; // ... and be a multitask } //////////////////////////////////// // deal with RESPONSIBLES if ($ID === false && $arFields['TPARAM_TYPE'] != CTaskTemplates::TYPE_FOR_NEW_USER || $ID !== false && $this->currentData['TPARAM_TYPE'] != CTaskTemplates::TYPE_FOR_NEW_USER) { if (isset($arFields["RESPONSIBLE_ID"])) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $r = CUser::GetByID($arFields["RESPONSIBLE_ID"]); if (!$r->Fetch()) { $this->_errors[] = array("text" => GetMessage("TASKS_BAD_RESPONSIBLE_ID_EX"), "id" => "ERROR_TASKS_BAD_RESPONSIBLE_ID_EX"); } } else { if ($ID === false) { $this->_errors[] = array("text" => GetMessage("TASKS_BAD_RESPONSIBLE_ID"), "id" => "ERROR_TASKS_BAD_RESPONSIBLE_ID"); } } } //////////////////////////////////// // deal with other data if ((is_set($arFields, "TITLE") || $ID === false) && strlen($arFields["TITLE"]) <= 0) { $this->_errors[] = array("text" => GetMessage("TASKS_BAD_TITLE"), "id" => "ERROR_BAD_TASKS_TITLE"); } if (isset($arFields['BASE_TEMPLATE_ID'])) { try { if (intval($arFields['BASE_TEMPLATE_ID'])) { $template = static::GetList(array(), array('ID' => $arFields['BASE_TEMPLATE_ID']), false, false, array('ID'))->fetch(); if (!is_array($template)) { $this->_errors[] = array("text" => Loc::getMessage("TASKS_TEMPLATE_BASE_TEMPLATE_ID_NOT_EXISTS"), "id" => "ERROR_TASKS_BASE_TEMPLATE_ID_NOT_EXISTS"); } // you cannot add a template with both PARENT_ID and BASE_TEMPLATE_ID set. BASE_TEMPLATE_ID has greather priority if (isset($arFields['PARENT_ID'])) { $arFields['PARENT_ID'] = ''; } // you cannot add REPLICATE parameters here in case of BASE_TEMPLATE_ID is set if (isset($arFields['REPLICATE'])) { $arFields['REPLICATE'] = serialize(array()); } $arFields['REPLICATE_PARAMS'] = serialize(array()); } } catch (\Bitrix\Main\ArgumentException $e) { $this->_errors[] = array("text" => Loc::getMessage("TASKS_TEMPLATE_BAD_BASE_TEMPLATE_ID"), "id" => "ERROR_TASKS_BAD_BASE_TEMPLATE_ID"); } } if (is_set($arFields, "PARENT_ID") && intval($arFields["PARENT_ID"]) > 0) { $r = CTasks::GetList(array(), array("ID" => $arFields["PARENT_ID"])); if (!$r->Fetch()) { $this->_errors[] = array("text" => GetMessage("TASKS_BAD_PARENT_ID"), "id" => "ERROR_TASKS_BAD_PARENT_ID"); } } if (isset($arFields['FILES']) && isset($arParams['CHECK_RIGHTS_ON_FILES']) && ($arParams['CHECK_RIGHTS_ON_FILES'] === true || $arParams['CHECK_RIGHTS_ON_FILES'] === 'Y')) { CTaskAssert::assert(isset($arParams['USER_ID']) && CTaskAssert::isLaxIntegers($arParams['USER_ID']) && $arParams['USER_ID'] > 0); // Is there files? if ($arFields['FILES'] !== false) { // There is must be serialized array $arFilesIds = unserialize($arFields['FILES']); if (is_array($arFilesIds)) { $ar = CTaskFiles::checkFilesAccessibilityByUser($arFilesIds, (int) $arParams['USER_ID']); // If we have one file, that is not accessible, than emit error foreach ($arFilesIds as $fileId) { if (!isset($ar['f' . $fileId]) || $ar['f' . $fileId] === false) { $this->_errors[] = array('text' => GetMessage('TASKS_BAD_FILE_ID_EX'), 'id' => 'ERROR_TASKS_BAD_FILE_ID_EX'); } } } else { $this->_errors[] = array('text' => GetMessage('TASKS_BAD_FILE_ID_EX'), 'id' => 'ERROR_TASKS_BAD_FILE_ID_EX'); } } } if (!empty($this->_errors)) { $e = new CAdminException($this->_errors); $APPLICATION->ThrowException($e); return false; } //Defaults if (is_set($arFields, "PRIORITY") && !in_array($arFields["PRIORITY"], array(0, 1, 2))) { $arFields["PRIORITY"] = 1; } return true; }
public static function OnAfterTMDayStart() { global $CACHE_MANAGER, $USER; $list = self::getCurrentTasksList(); if (count($list) > 0) { $arFilter = array('ID' => $list, '!STATUS' => self::$arTaskStatusOpened); $newList = array(); $dbRes = CTasks::GetList(array(), $arFilter, array('ID')); while ($arRes = $dbRes->Fetch()) { $newList[] = $arRes['ID']; } self::setCurrentTasksList($newList); $CACHE_MANAGER->ClearByTag('tasks_user_' . $USER->GetID()); } }
public static function SendUpdateMessage($arFields, $arTask, $bSpawnedByAgent = false, array $parameters = array()) { global $USER; $occurAsUserId = self::getOccurAsUserId($arFields, $arTask, $bSpawnedByAgent, $parameters); $effectiveUserId = self::getEffectiveUserId($arFields, $arTask, $bSpawnedByAgent, $parameters); // generally, $occurAsUserId === $effectiveUserId, but sometimes dont /* $bSpawnedByAgent === true means that this task was "created\updated" on angent, and in case of that, message author is defined as $arTask['CRAETED_BY'] (below) */ if (!$bSpawnedByAgent && $parameters['THROTTLE_MESSAGES']) { AgentManager::checkAgentIsAlive("notificationThrottleRelease()", 300); ThrottleTable::submitUpdateMessage($arTask['ID'], $occurAsUserId, $arTask, $arFields); return; } $isBbCodeDescription = true; if (isset($arFields['DESCRIPTION_IN_BBCODE'])) { if ($arFields['DESCRIPTION_IN_BBCODE'] === 'N') { $isBbCodeDescription = false; } } elseif (isset($arTask['DESCRIPTION_IN_BBCODE'])) { if ($arTask['DESCRIPTION_IN_BBCODE'] === 'N') { $isBbCodeDescription = false; } } $taskReassignedTo = null; if (isset($arFields['RESPONSIBLE_ID']) && $arFields['RESPONSIBLE_ID'] > 0 && $arFields['RESPONSIBLE_ID'] != $arTask['RESPONSIBLE_ID']) { $taskReassignedTo = $arFields['RESPONSIBLE_ID']; } foreach (array('CREATED_BY', 'RESPONSIBLE_ID', 'ACCOMPLICES', 'AUDITORS', 'TITLE') as $field) { if (!isset($arFields[$field]) && isset($arTask[$field])) { $arFields[$field] = $arTask[$field]; } } $cacheWasEnabled = self::enableStaticCache(); // $arChanges contains datetimes IN SERVER TIME, NOT CLIENT $arChanges = CTaskLog::GetChanges($arTask, $arFields); $arMerged = array('ADDITIONAL_RECIPIENTS' => array()); if (isset($arTask['CREATED_BY'])) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $arTask['CREATED_BY']; } if (isset($arTask['RESPONSIBLE_ID'])) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $arTask['RESPONSIBLE_ID']; } if (isset($arTask['ACCOMPLICES']) && is_array($arTask['ACCOMPLICES'])) { foreach ($arTask['ACCOMPLICES'] as $userId) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $userId; } } if (isset($arTask['AUDITORS']) && is_array($arTask['AUDITORS'])) { foreach ($arTask['AUDITORS'] as $userId) { $arMerged['ADDITIONAL_RECIPIENTS'][] = $userId; } } if (isset($arFields['ADDITIONAL_RECIPIENTS'])) { $arFields['ADDITIONAL_RECIPIENTS'] = array_merge($arFields['ADDITIONAL_RECIPIENTS'], $arMerged['ADDITIONAL_RECIPIENTS']); } else { $arFields['ADDITIONAL_RECIPIENTS'] = $arMerged['ADDITIONAL_RECIPIENTS']; } $arUsers = CTaskNotifications::__GetUsers($arFields); $ignoreAuthor = isset($parameters['IGNORE_AUTHOR']) ? !!$parameters['IGNORE_AUTHOR'] : true; $arRecipientsIDs = array_unique(CTaskNotifications::GetRecipientsIDs($arFields, $ignoreAuthor, false, $occurAsUserId)); if (!empty($arRecipientsIDs) && (is_object($USER) && $USER->GetID() || $arFields["CREATED_BY"])) { $curUserTzOffset = (int) self::getUserTimeZoneOffset(); $arInvariantChangesStrs = array(); $arVolatileDescriptions = array(); $arRecipientsIDsByTimezone = array(); $i = 0; foreach ($arChanges as $key => $value) { ++$i; $actionMessage = GetMessage("TASKS_MESSAGE_" . $key); if (strlen($actionMessage)) { $changeMessage = $actionMessage; $tmpStr = ''; switch ($key) { case 'TIME_ESTIMATE': $tmpStr .= self::formatTimeHHMM($value["FROM_VALUE"], true) . " -> " . self::formatTimeHHMM($value["TO_VALUE"], true); break; case "TITLE": $tmpStr .= $value["FROM_VALUE"] . " -> " . $value["TO_VALUE"]; break; case "RESPONSIBLE_ID": $tmpStr .= CTaskNotifications::__Users2String($value["FROM_VALUE"], $arUsers, $arFields["NAME_TEMPLATE"]) . ' -> ' . CTaskNotifications::__Users2String($value["TO_VALUE"], $arUsers, $arFields["NAME_TEMPLATE"]); break; case "ACCOMPLICES": case "AUDITORS": $tmpStr .= CTaskNotifications::__Users2String(explode(",", $value["FROM_VALUE"]), $arUsers, $arFields["NAME_TEMPLATE"]) . ' -> ' . CTaskNotifications::__Users2String(explode(",", $value["TO_VALUE"]), $arUsers, $arFields["NAME_TEMPLATE"]); break; case "DEADLINE": case "START_DATE_PLAN": case "END_DATE_PLAN": // $arChanges ALREADY contains server time, no need to substract user timezone again $utsFromValue = $value['FROM_VALUE']; // - $curUserTzOffset; $utsToValue = $value['TO_VALUE']; // - $curUserTzOffset; // It will be replaced below to formatted string with correct dates for different timezones $placeholder = '###PLACEHOLDER###' . $i . '###'; $tmpStr .= $placeholder; // Collect recipients' timezones foreach ($arRecipientsIDs as $userId) { $tzOffset = (int) self::getUserTimeZoneOffset($userId); if (!isset($arVolatileDescriptions[$tzOffset])) { $arVolatileDescriptions[$tzOffset] = array(); } if (!isset($arVolatileDescriptions[$tzOffset][$placeholder])) { // Make bitrix timestamps for given user $bitrixTsFromValue = $utsFromValue + $tzOffset; $bitrixTsToValue = $utsToValue + $tzOffset; $description = ''; if ($utsFromValue > 360000) { $fromValueAsString = FormatDate('^' . CDatabase::DateFormatToPHP(FORMAT_DATETIME), $bitrixTsFromValue); $description .= $fromValueAsString; } $description .= ' --> '; if ($utsToValue > 360000) { $toValueAsString = FormatDate('^' . CDatabase::DateFormatToPHP(FORMAT_DATETIME), $bitrixTsToValue); $description .= $toValueAsString; } $arVolatileDescriptions[$tzOffset][$placeholder] = $description; } $arRecipientsIDsByTimezone[$tzOffset][] = $userId; } break; case "DESCRIPTION": $tmpStr .= HTMLToTxt($arFields["DESCRIPTION"]); break; case "TAGS": $tmpStr .= ($value["FROM_VALUE"] ? str_replace(",", ", ", $value["FROM_VALUE"]) . " -> " : "") . ($value["TO_VALUE"] ? str_replace(",", ", ", $value["TO_VALUE"]) : GetMessage("TASKS_MESSAGE_NO_VALUE")); break; case "PRIORITY": $tmpStr .= GetMessage("TASKS_PRIORITY_" . $value["FROM_VALUE"]) . " -> " . GetMessage("TASKS_PRIORITY_" . $value["TO_VALUE"]); break; case "GROUP_ID": if ($value["FROM_VALUE"] && self::checkUserCanViewGroup($effectiveUserId, $value["FROM_VALUE"])) { $arGroupFrom = self::getSocNetGroup($value["FROM_VALUE"]); if ($arGroupFrom) { $tmpStr .= $arGroupFrom["NAME"] . " -> "; } } if ($value["TO_VALUE"] && self::checkUserCanViewGroup($effectiveUserId, $value["TO_VALUE"])) { $arGroupTo = self::getSocNetGroup($value["TO_VALUE"]); if ($arGroupTo) { $tmpStr .= $arGroupTo["NAME"]; } } else { $tmpStr .= GetMessage("TASKS_MESSAGE_NO_VALUE"); } break; case "PARENT_ID": if ($value["FROM_VALUE"]) { $rsTaskFrom = CTasks::GetList(array(), array("ID" => $value["FROM_VALUE"]), array('ID', 'TITLE')); if ($arTaskFrom = $rsTaskFrom->GetNext()) { $tmpStr .= $arTaskFrom["TITLE"] . " -> "; } } if ($value["TO_VALUE"]) { $rsTaskTo = CTasks::GetList(array(), array("ID" => $value["TO_VALUE"]), array('ID', 'TITLE')); if ($arTaskTo = $rsTaskTo->GetNext()) { $tmpStr .= $arTaskTo["TITLE"]; } } else { $tmpStr .= GetMessage("TASKS_MESSAGE_NO_VALUE"); } break; case "DEPENDS_ON": $arTasksFromStr = array(); if ($value["FROM_VALUE"]) { $rsTasksFrom = CTasks::GetList(array(), array("ID" => explode(",", $value["FROM_VALUE"])), array('ID', 'TITLE')); while ($arTaskFrom = $rsTasksFrom->GetNext()) { $arTasksFromStr[] = $arTaskFrom["TITLE"]; } } $arTasksToStr = array(); if ($value["TO_VALUE"]) { $rsTasksTo = CTasks::GetList(array(), array("ID" => explode(",", $value["TO_VALUE"])), array('ID', 'TITLE')); while ($arTaskTo = $rsTasksTo->GetNext()) { $arTasksToStr[] = $arTaskTo["TITLE"]; } } $tmpStr .= ($arTasksFromStr ? implode(", ", $arTasksFromStr) . " -> " : "") . ($arTasksToStr ? implode(", ", $arTasksToStr) : GetMessage("TASKS_MESSAGE_NO_VALUE")); break; case "MARK": $tmpStr .= (!$value["FROM_VALUE"] ? GetMessage("TASKS_MARK_NONE") : GetMessage("TASKS_MARK_" . $value["FROM_VALUE"])) . " -> " . (!$value["TO_VALUE"] ? GetMessage("TASKS_MARK_NONE") : GetMessage("TASKS_MARK_" . $value["TO_VALUE"])); break; case "ADD_IN_REPORT": $tmpStr .= ($value["FROM_VALUE"] == "Y" ? GetMessage("TASKS_MESSAGE_IN_REPORT_YES") : GetMessage("TASKS_MESSAGE_IN_REPORT_NO")) . " -> " . ($value["TO_VALUE"] == "Y" ? GetMessage("TASKS_MESSAGE_IN_REPORT_YES") : GetMessage("TASKS_MESSAGE_IN_REPORT_NO")); break; case "DELETED_FILES": $tmpStr .= $value["FROM_VALUE"]; $tmpStr .= $value["TO_VALUE"]; break; case "NEW_FILES": $tmpStr .= $value["TO_VALUE"]; break; } if ((string) $tmpStr != '') { $changeMessage .= ": [COLOR=#000]" . $tmpStr . "[/COLOR]"; } $arInvariantChangesStrs[] = $changeMessage; } } $recp2tz = array(); foreach ($arRecipientsIDsByTimezone as $tz => $rcp) { foreach ($rcp as $uid) { $recp2tz[$uid] = $tz; } } $invariantDescription = null; if (!empty($arInvariantChangesStrs)) { $invariantDescription = implode("\r\n", $arInvariantChangesStrs); } if ($invariantDescription !== null && !empty($arRecipientsIDs)) { // If there is no volatile part of descriptions, send to all recipients at once if (empty($arVolatileDescriptions)) { $arVolatileDescriptions['some_timezone'] = array(); $arRecipientsIDsByTimezone['some_timezone'] = $arRecipientsIDs; } $updateMessage = self::getGenderMessage($occurAsUserId, 'TASKS_TASK_CHANGED_MESSAGE'); $taskName = self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID'], false); $instant = str_replace(array("#TASK_TITLE#"), array($taskName), $updateMessage); $email = str_replace(array("#TASK_TITLE#"), array(strip_tags($taskName)), $updateMessage); //_dump_r('Sending UPDATE from '.$occurAsUserId.' TO '.implode(':', $arRecipientsIDs)); CTaskNotifications::sendMessageEx($arTask["ID"], $occurAsUserId, $arRecipientsIDs, array('INSTANT' => $instant, 'EMAIL' => $email, 'PUSH' => self::makePushMessage('TASKS_TASK_CHANGED_MESSAGE', $occurAsUserId, $arTask)), array('EVENT_DATA' => array('ACTION' => 'TASK_UPDATE', 'arFields' => $arFields, 'arChanges' => $arChanges), 'TASK_ASSIGNED_TO' => $taskReassignedTo, 'CALLBACK' => array('BEFORE_SEND' => function ($message) use($isBbCodeDescription, $invariantDescription, $arVolatileDescriptions, $recp2tz) { $rcp = $message['TO_USER_IDS'][0]; $volatile = $arVolatileDescriptions[$recp2tz[$rcp]]; if (is_array($volatile)) { $description = str_replace(array_keys($volatile), $volatile, $invariantDescription); } else { $description = $invariantDescription; } $message['MESSAGE']['INSTANT'] = str_replace(array("#TASK_EXTRA#"), array($description), $message['MESSAGE']['INSTANT']); if ($isBbCodeDescription) { $parser = new CTextParser(); $description = str_replace("\t", ' ', $parser->convertText($description)); } $message['MESSAGE']['EMAIL'] = str_replace(array("#TASK_EXTRA#"), array($description), $message['MESSAGE']['EMAIL']); return $message; }))); } } // sonet log self::SendMessageToSocNet($arFields, $bSpawnedByAgent, $arChanges, $arTask, $parameters); if ($cacheWasEnabled) { self::disableStaticCache(); } }
} elseif ($_POST['subject'] === 'DETAIL') { $bLoadDetailData = true; } elseif ($_POST['subject'] === 'COMMENTS') { $bLoadCommentsData = true; } $arParams = array('USER_ID' => $userId, 'TASK_ID' => $taskId, 'DATE_TIME_FORMAT' => $_POST['DATE_TIME_FORMAT'], 'SHOW_TEMPLATE' => 'N', 'PATH_TO_USER_TASKS_EDIT' => '...'); $arRes = $APPLICATION->IncludeComponent('bitrix:mobile.tasks.detail', '.default', $arParams, false); $filterCheckResult = 'not checked'; // We must check filter condition for this task? if (isset($_POST['CHECK_FILTER_ID'])) { $filterPresetId = (int) $_POST['CHECK_FILTER_ID']; $oFilter = CTaskFilterCtrl::GetInstance($userId); $arFilter = $oFilter->GetFilterPresetConditionById($filterPresetId); if ($arFilter !== false) { $arFilter['ID'] = (int) $taskId; $rsTasks = CTasks::GetList($arOrder = array(), $arFilter, $arSelect = array('ID')); if ($rsTasks->Fetch()) { $filterCheckResult = 'match filter'; } else { $filterCheckResult = 'dismatch filter'; } } } $arTaskData = array('task_id' => $task_id, 'filter_check_result' => $filterCheckResult); if ($bLoadBaseData) { $arTaskData['baseData'] = MBTasksCptDetailAjax::PrepareBaseData($task_id, $arRes); } if ($bLoadDetailData) { $arTaskData['detailsData'] = MBTasksCptDetailAjax::PrepareDetailData($task_id, $arRes); } if ($bLoadCommentsData && isset($_POST['PATH_TO_FORUM_SMILE']) && isset($_POST['PATH_TEMPLATE_TO_USER_PROFILE']) && isset($_POST['AVA_WIDTH']) && isset($_POST['AVA_HEIGHT'])) {
$GLOBALS["USER"]->Authorize($arUser["ID"]); $TASK_ID = false; if (preg_match("/task([0-9]+)/i", $arData["repository"]["name"], $r)) { $TASK_ID = $r[1]; } elseif (preg_match("/task([0-9]+)/i", $arData["repository"]["description"], $r)) { $TASK_ID = $r[1]; } elseif (preg_match("/task([0-9]+)/i", $arData["ref"], $r)) { $TASK_ID = $r[1]; } CModule::IncludeModule("tasks"); CModule::IncludeModule("forum"); $branch = $arData["ref"]; $branch = str_replace("refs/heads/", "", $branch); foreach ($arData["commits"] as $arCommit) { $message = $arCommit["message"]; $message = utf8win1251($message); if (preg_match("/task([0-9]+)/i", $message, $r)) { $TASK_ID = $r[1]; } if (!$TASK_ID) { continue; } $message = str_replace($r[0], "", $message); $rsTask = CTasks::GetList(array(), array("ID" => $TASK_ID)); $arTask = $rsTask->Fetch(); if (!$arTask) { continue; } CTaskComments::add($arTask["ID"], $arUser["ID"], "<b>Commit:</b> <a href=" . $arCommit["url"] . ">" . substr($arCommit["id"], 0, 9) . "</a>\nBranch: " . $branch . "\n" . $message); } require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php";
$columnsOrder = null; if (isset($_POST['columnsOrder'])) { $columnsOrder = array_map('intval', $_POST['columnsOrder']); } if ($_POST["mode"] == "load") { $arOrder = $_POST["order"] ? $_POST["order"] : array(); $arFilter = $_POST["filter"] ? $_POST["filter"] : array(); $arFilter["PARENT_ID"] = intval($_POST["id"]); $depth = intval($_POST["depth"]) + 1; $bGannt = false; if (isset($_POST['bGannt'])) { $bGannt = (bool) $_POST['bGannt']; } // Override CHECK_PERMISSIONS, if it was given in $_POST['filter'] $arFilter['CHECK_PERMISSIONS'] = 'Y'; $rsTasks = CTasks::GetList($arOrder, $arFilter); $arTasks = array(); $arTasksIDs = array(); $arViewed = array(); while ($task = $rsTasks->GetNext()) { $arTasks[$task["ID"]] = $task; $arTasksIDs[] = $task["ID"]; $arViewed[$task["ID"]] = $task["VIEWED_DATE"] ? $task["VIEWED_DATE"] : $task["CREATED_DATE"]; $rsTaskFiles = CTaskFiles::GetList(array(), array("TASK_ID" => $task["ID"])); $task["FILES"] = array(); while ($arTaskFile = $rsTaskFiles->Fetch()) { $rsFile = CFile::GetByID($arTaskFile["FILE_ID"]); if ($arFile = $rsFile->Fetch()) { $task["FILES"][] = $arFile; } }
$search = $_REQUEST['SEARCH_STRING']; $arFilter = array("%TITLE" => $search); if (isset($_GET["FILTER"])) { $arFilter = array_merge($arFilter, $_GET["FILTER"]); } // Override CHECK_PERMISSIONS, if it was given in $_GET['FILTER'] $arFilter['CHECK_PERMISSIONS'] = 'Y'; $totalTasksToBeSelected = 10; // Firstly, get active tasks $arFilter['STATUS'] = array(CTasks::STATE_NEW, CTasks::STATE_PENDING, CTasks::STATE_IN_PROGRESS); $dbRes = CTasks::GetList(array('TITLE' => 'ASC'), $arFilter, array('ID', 'TITLE', 'STATUS'), $totalTasksToBeSelected); $arTasks = array(); while ($arRes = $dbRes->fetch()) { $arTasks[] = array("ID" => $arRes["ID"], "TITLE" => $arRes["TITLE"], "STATUS" => $arRes["STATUS"]); } $tasksCount = count($arTasks); if (count($arTasks) < 10) { // Additionally, get not active tasks unset($arFilter['STATUS']); $arFilter['!STATUS'] = array(CTasks::STATE_NEW, CTasks::STATE_PENDING, CTasks::STATE_IN_PROGRESS); $dbRes = CTasks::GetList(array('TITLE' => 'ASC'), $arFilter, array('ID', 'TITLE', 'STATUS'), $totalTasksToBeSelected - $tasksCount); while ($arRes = $dbRes->fetch()) { $arTasks[] = array("ID" => $arRes["ID"], "TITLE" => $arRes["TITLE"], "STATUS" => $arRes["STATUS"]); } } header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); echo CUtil::PhpToJsObject($arTasks); CMain::FinalActions(); // to make events work on bitrix24 die; }
public function checkCanRead() { /** @noinspection PhpDeprecationInspection */ $arTask = CTasks::GetList(array(), array('ID' => (int) $this->taskId, 'CHECK_PERMISSIONS' => 'Y'), array("ID"), array('USER_ID' => $this->executiveUserId))->fetch(); return is_array($arTask) && isset($arTask['ID']); }
unset($rsUser, $arUser); } $arGroupsStat = array(0 => array('TASKS_IN_GROUP' => 0, 'STATUSES' => array(), 'PRIORITIES' => array())); // groups with tasks $arResult['TASKS'] = array(); $arOrder = array('STATUS' => 'ASC', 'ID' => 'DESC'); $arFilter = $arResult['FILTER']; // If requested tasks for some group only if (is_int($arParams['GROUP_ID']) && $arParams['GROUP_ID'] >= 0) { if ($arParams['GROUP_ID'] === 0) { $arFilter['META:GROUP_ID_IS_NULL_OR_ZERO'] = 'It doesn\'t matter'; } else { $arFilter['GROUP_ID'] = $arParams['GROUP_ID']; } } $rsTasks = CTasks::GetList($arOrder, $arFilter, $arSelect); $arViewedDates = array(); // dates when task was last viewed $arTasksIDs = array(); $arTaskOriginatorsAndResponsibles = array(); $parser = new CTextParser(); while ($task = $rsTasks->Fetch()) { $arTasksIDs[] = (int) $task['ID']; $arTaskOriginatorsAndResponsibles[] = (int) $task['CREATED_BY']; $arTaskOriginatorsAndResponsibles[] = (int) $task['RESPONSIBLE_ID']; if (!$bSelectOnlyIdsFromTasks) { // count tasks per group if (isset($arGroupsStat[(int) $task['GROUP_ID']])) { $arGroupsStat[(int) $task['GROUP_ID']]['TASKS_IN_GROUP']++; if (!in_array((int) $task['STATUS'], $arGroupsStat[(int) $task['GROUP_ID']]['STATUSES'])) { $arGroupsStat[(int) $task['GROUP_ID']]['STATUSES'][] = (int) $task['STATUS'];
function BeforeIndexForum($arFields, $entity_type, $entity_id, $feature, $operation, $path_template) { global $USER; static $arSiteData; $SECTION_ID = ""; $ELEMENT_ID = intval($_REQUEST["photo_element_id"]); if (empty($ELEMENT_ID)) { $ELEMENT_ID = intval($_REQUEST["ELEMENT_ID"]); } if ($ELEMENT_ID > 0 && CModule::IncludeModule('iblock')) { $rsSections = CIBlockElement::GetElementGroups($ELEMENT_ID, true); $arSection = $rsSections->Fetch(); if ($arSection) { $SECTION_ID = $arSection["ID"]; } } if (count($arFields["LID"]) > 1 && ($entity_type == SONET_ENTITY_GROUP && CModule::IncludeModule("extranet") || $entity_type == SONET_ENTITY_USER)) { if (!$arSiteData) { $arSiteData = CSocNetLogTools::GetSiteData(); } foreach ($arSiteData as $siteId => $arUrl) { if ($entity_type == SONET_ENTITY_GROUP && strpos($path_template, $arUrl["GROUPS_PATH"]) === 0) { $path_template = str_replace($arUrl["GROUPS_PATH"], "#GROUP_PATH#", $path_template); break; } elseif ($entity_type == SONET_ENTITY_USER && strpos($path_template, $arUrl["USER_PATH"]) === 0) { $path_template = str_replace($arUrl["USER_PATH"], "#USER_PATH#", $path_template); break; } } } foreach ($arFields["LID"] as $site_id => $url) { $arFields["URL"] = $arFields["LID"][$site_id] = str_replace(array("#user_id#", "#group_id#", "#topic_id#", "#message_id#", "#action#", "#user_alias#", "#section_id#", "#element_id#", "#task_id#", "#GROUP_PATH#", "#USER_PATH#"), array($this->_user_id > 0 ? $this->_user_id : $USER->GetID(), $this->_group_id, $arFields["PARAM2"], $arFields["ITEM_ID"], "view", ($entity_type == "G" ? "group_" : "user_") . $entity_id, $SECTION_ID, $ELEMENT_ID, $ELEMENT_ID, $arSiteData ? $arSiteData[$site_id]["GROUPS_PATH"] : "", $arSiteData ? $arSiteData[$site_id]["USER_PATH"] : ""), $path_template); } if ($feature == 'tasks' && COption::GetOptionString("intranet", "use_tasks_2_0", "N") == 'Y' && $arFields["PARAM1"] == COption::GetOptionString("tasks", "task_forum_id", 0) && CModule::IncludeModule('tasks')) { if (!preg_match('/^EVENT_[0-9]+/', $arFields["TITLE"], $match)) { $rsTask = CTasks::GetList(array(), array("FORUM_TOPIC_ID" => $arFields['PARAM2'])); if ($arTask = $rsTask->Fetch()) { $arFields['PERMISSIONS'] = CTasks::__GetSearchPermissions($arTask); } } } else { $arFields["PERMISSIONS"] = $this->GetSearchGroups($entity_type, $entity_id, $feature, $operation); $paramsTmp = $this->GetSearchParams($entity_type, $entity_id, $feature, $operation); $arFields["PARAMS"] = !empty($arFields["PARAMS"]) ? array_merge($paramsTmp, $arFields["PARAMS"]) : $paramsTmp; } return $arFields; }
} else { $this->IncludeComponentTemplate(); } exit; } else { unset($_SESSION['TASKS']['EDIT_COMPONENT']['STEPPER'][$_POST['FORM_GUID']]); LocalRedirect($redirectPath); } } $_POST["WEEK_DAYS"] = explode(",", $_POST["WEEK_DAYS"]); // Prevent duplicated POSTs $bDuplicatePostRequest = false; $parentTaskGUID = false; if (isset($_POST['FORM_GUID']) && $arResult['ACTION'] === 'create' && $_POST["MULTITASK"] == "Y" && (isset($_POST['RESPONSIBLES_IDS']) && strlen($_POST['RESPONSIBLES_IDS']) || isset($_POST['RESPONSIBLES']) && count($_POST["RESPONSIBLES"]) > 0)) { $parentTaskGUID = $_POST['FORM_GUID']; $rs = CTasks::GetList(array(), array('GUID' => $parentTaskGUID)); if ($ar = $rs->Fetch()) { $bDuplicatePostRequest = true; } } if (!$bDuplicatePostRequest) { $arResult['needStep'] = false; if (isset($_POST["save"]) || isset($_POST["apply"])) { $_POST["ACCOMPLICES"] = array_filter(explode(",", $_POST["ACCOMPLICES_IDS"])); $_POST["RESPONSIBLES"] = array_filter(explode(",", $_POST["RESPONSIBLES_IDS"])); $_POST["DEPENDS_ON"] = array_filter(explode(",", $_POST["PREV_TASKS_IDS"])); $_POST["REPLICATE_WEEK_DAYS"] = array_filter(explode(",", $_POST["REPLICATE_WEEK_DAYS"])); $timeEstimate = 0; if (isset($_POST['ESTIMATE'])) { $timeEstimate = (int) $_POST['ESTIMATE']; } else {