예제 #1
0
 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;
 }
예제 #3
0
 /**
  * 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"];
     }
 }
예제 #4
0
                ?>
 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"];
예제 #5
0
 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("&#10;", "&#13;", '&nbsp;'), "", $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);
 }
예제 #6
0
     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"]);
예제 #7
0
 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;
 }
예제 #8
0
 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;
 }
예제 #9
0
파일: search.php 프로젝트: ASDAFF/bitrix-5
	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;
	}
예제 #10
0
 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");
     }
 }
예제 #11
0
// 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>
예제 #12
0
     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;
예제 #13
0
 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;
 }
예제 #14
0
 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;
 }
예제 #15
0
$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();
예제 #16
0
 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", ' &nbsp; &nbsp;', $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);
 }
예제 #17
0
            }
        }
        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
}
예제 #18
0
 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
예제 #19
0
        }
    }
    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'])) {
예제 #20
0
 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;
 }
예제 #21
0
 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());
     }
 }
예제 #22
0
 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", ' &nbsp; &nbsp;', $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();
     }
 }
예제 #23
0
 } 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'])) {
예제 #24
0
$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";
예제 #25
0
 $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;
             }
         }
예제 #26
0
    $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;
}
예제 #27
0
 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']);
 }
예제 #28
0
    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'];
예제 #29
0
 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;
 }
예제 #30
0
         } 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 {