Current Path : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/intranet/classes/general/ |
Current File : /var/www/axolotl/data/www/yar.axolotls.ru/bitrix/modules/intranet/classes/general/tasks.php |
<? IncludeModuleLangFile(__FILE__); if (!CModule::IncludeModule("bizproc")) return; if (!CModule::IncludeModule("iblock")) return; if (!CModule::IncludeModule("socialnetwork")) return; class CIntranetTasks { function SendRemindEventAgent($iblockId, $taskId, $pathTemplate) { if (!CModule::IncludeModule("socialnetwork") && !CModule::IncludeModule("iblock")) return; $iblockId = intval($iblockId); $taskId = intval($taskId); if (!isset($GLOBALS["USER"]) || !is_object($GLOBALS["USER"])) { $bTmpUser = True; $GLOBALS["USER"] = new CUser; } $arTasksCustomProps = array(); $dbTasksCustomProps = CIBlockProperty::GetList( array("sort" => "asc", "name" => "asc"), array("ACTIVE" => "Y", "IBLOCK_ID" => $iblockId, "CHECK_PERMISSIONS" => "N") ); while ($arTasksCustomProp = $dbTasksCustomProps->Fetch()) { $ind = (($arTasksCustomProp["CODE"] <> '') ? $arTasksCustomProp["CODE"] : $arTasksCustomProp["ID"]); $arTasksCustomProps[mb_strtoupper($ind)] = $arTasksCustomProp; } $dbTasksList = CIBlockElement::GetList( array(), array( "IBLOCK_ID" => $iblockId, "ACTIVE" => "Y", "ID" => $taskId, "CHECK_PERMISSIONS" => "N", ), false, false, array("ID", "NAME", "IBLOCK_ID", "CREATED_BY", "PROPERTY_".$arTasksCustomProps["TASKASSIGNEDTO"]["ID"]) ); while ($arTask = $dbTasksList->GetNext()) { $ar = array(); $dbElementSections = CIBlockElement::GetElementGroups($arTask["ID"]); while ($arElementSection = $dbElementSections->Fetch()) { if ($arElementSection["IBLOCK_ID"] == $iblockId) $ar[] = $arElementSection["ID"]; } if (Count($ar) <= 0) continue; $taskType = ""; $taskOwnerId = 0; $dbSectionsChain = CIBlockSection::GetNavChain($iblockId, $ar[0]); if ($arSect = $dbSectionsChain->Fetch()) { $taskType = (($arSect["XML_ID"] == "users_tasks") ? "user" : "group"); $taskOwnerId = intval(($taskType == "user") ? $arTask["PROPERTY_".$arTasksCustomProps["TASKASSIGNEDTO"]["ID"]."_VALUE"] : $arSect["XML_ID"]); } if (!In_Array($taskType, array("user", "group")) || $taskOwnerId <= 0) continue; $path2view = ($GLOBALS["APPLICATION"]->IsHTTPS() ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].CComponentEngine::MakePathFromTemplate($pathTemplate, array("owner_id" => $taskOwnerId, "task_id" => $arTask["ID"], "action" => "view")); $arMessageFields = array( "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM, "FROM_USER_ID" => $arTask["CREATED_BY"], "TO_USER_ID" => $arTask["PROPERTY_".$arTasksCustomProps["TASKASSIGNEDTO"]["ID"]."_VALUE"], "MESSAGE" => str_replace( array("#URL_VIEW#", "#NAME#"), array($path2view, $arTask["NAME"]), GetMessage("INTE_REMIND_TASK_MESSAGE") ), ); CSocNetMessages::Add($arMessageFields); //CIBlockElement::SetPropertyValueCode($arTask["ID"], $arTasksCustomProps["TASKREMIND"]["ID"], false); } if ($bTmpUser) unset($GLOBALS["USER"]); //return "CIntranetTasks::SendRemindEventAgent($iblockId, $taskId, \"$pathTemplate\");"; } function SendRemindEventAgentNew($taskId) { if (!CModule::IncludeModule("socialnetwork") && !CModule::IncludeModule("iblock")) return; $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return; $taskId = intval($taskId); if (!isset($GLOBALS["USER"]) || !is_object($GLOBALS["USER"])) { $bTmpUser = True; $GLOBALS["USER"] = new CUser; } $arTask = CIntranetTasks::GetById($taskId); if (!$arTask) return; if ($arTask["TaskType"] == "user") { $path2view = str_replace( array("#USER_ID#", "#TASK_ID#"), array($arTask["OwnerId"], $taskId), COption::GetOptionString("intranet", "path_task_user_entry", "/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/") ); } else { $path2view = str_replace( array("#GROUP_ID#", "#TASK_ID#"), array($arTask["OwnerId"], $taskId), COption::GetOptionString("intranet", "path_task_group_entry", "/workgroups/group/#GROUP_ID#/tasks/task/view/#TASK_ID#/") ); } $path2view = ($GLOBALS["APPLICATION"]->IsHTTPS() ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].$path2view; $arMessageFields = array( "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM, "FROM_USER_ID" => $arTask["CREATED_BY"], "TO_USER_ID" => $arTask["PROPERTY_TaskAssignedTo"], "MESSAGE" => str_replace( array("#URL_VIEW#", "#NAME#"), array($path2view, $arTask["NAME"]), GetMessage("INTE_REMIND_TASK_MESSAGE") ), ); CSocNetMessages::Add($arMessageFields); if ($bTmpUser) unset($GLOBALS["USER"]); //return "CIntranetTasks::SendRemindEventAgent($iblockId, $taskId, \"$pathTemplate\");"; } function AddForumLog($taskId, $taskName, $arFields, &$arError) { $arError = array(); $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return; $taskId = intval($taskId); if ($taskId <= 0) return; $db = CIBlockElement::GetProperty($iblockId, $taskId, "", "", array("CODE" => "FORUM_TOPIC_ID")); $ar = $db->Fetch(); $forumTopicId = intval($ar["VALUE"]); if ($forumTopicId <= 0) { $arFields = array( "TITLE" => $taskName, "FORUM_ID" => $arFields["FORUM_ID"], "USER_START_ID" => $arFields["USER_ID"], "USER_START_NAME" => $arFields["USER_NAME"], "LAST_POSTER_NAME" => $arFields["USER_NAME"], "APPROVED" => "Y" ); $forumTopicId = CForumTopic::Add($arFields); CIBlockElement::SetPropertyValues($taskId, $iblockId, $forumTopicId, "FORUM_TOPIC_ID"); } $arFields = array( "POST_MESSAGE" => $arFields["POST_MESSAGE"], "AUTHOR_ID" => $arFields["USER_ID"], "AUTHOR_NAME" => $arFields["USER_NAME"], "FORUM_ID" => $arFields["FORUM_ID"], "TOPIC_ID" => $forumTopicId, "APPROVED" => "Y", "NEW_TOPIC" => "Y", "PARAM1" => "IB", "PARAM2" => $taskId ); CForumMessage::Add($arFields, false, array("SKIP_INDEXING" => "Y", "SKIP_STATISTIC" => "N")); } function Add($arFields, &$arError) { $arError = array(); try { return CIntranetTasksDocument::CreateDocument($arFields); } catch (Exception $e) { $arError[] = array( "code" => $e->getCode(), "message" => $e->getMessage(), "file" => $e->getFile()." [".$e->getLine()."]" ); } return 0; } function Update($id, $arFields, &$arError) { $arError = array(); try { CIntranetTasksDocument::UpdateDocument($id, $arFields); } catch (Exception $e) { $arError[] = array( "code" => $e->getCode(), "message" => $e->getMessage(), "file" => $e->getFile()." [".$e->getLine()."]" ); } return (count($arError) <= 0); } function Delete($id, &$arError) { $arError = array(); try { CIntranetTasksDocument::DeleteDocument($id); } catch (Exception $e) { $arError[] = array( "code" => $e->getCode(), "message" => $e->getMessage(), "file" => $e->getFile()." [".$e->getLine()."]" ); } if (count($arError) <= 0) CAgent::RemoveAgent("CIntranetTasks::SendRemindEventAgentNew(".$id.");", "intranet"); return (count($arError) <= 0); } function GetList($arOrder = array("SORT" => "ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields=array()) { global $USER; $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return false; $arFilter["IBLOCK_ID"] = $iblockId; $arFilter["SHOW_NEW"] = "Y"; if (count($arSelectFields) > 0) { if (!in_array("IBLOCK_SECTION_ID", $arSelectFields)) $arSelectFields[] = "IBLOCK_SECTION_ID"; if (!in_array("ID", $arSelectFields)) $arSelectFields[] = "ID"; if (!in_array("IBLOCK_ID", $arSelectFields)) $arSelectFields[] = "IBLOCK_ID"; if (!in_array("CREATED_BY", $arSelectFields)) $arSelectFields[] = "CREATED_BY"; } $arResultList = array(); $arCache = array(); $isInSecurity = CModule::IncludeModule("security"); //$hFileTmp = fopen($_SERVER["DOCUMENT_ROOT"]."/+++++++.+++", "a"); // DUMPING //fwrite($hFileTmp, "GetList:\n".print_r(array($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields), true)."\n"); //fclose($hFileTmp); $dbTasksList = CIBlockElement::GetList( $arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields ); while ($obTask = $dbTasksList->GetNextElement()) { $arResult = array(); $arFields = $obTask->GetFields(); foreach ($arFields as $fieldKey => $fieldValue) { if (mb_substr($fieldKey, 0, 1) == "~") continue; $arResult[$fieldKey] = $fieldValue; if (in_array($fieldKey, array("MODIFIED_BY", "CREATED_BY"))) { $arResult[$fieldKey."_PRINTABLE"] = CIntranetTasks::PrepareUserForPrint($fieldValue); } elseif ($fieldKey == "DETAIL_TEXT") { if ($isInSecurity) { $filter = new CSecurityFilter; $arResult["DETAIL_TEXT_PRINTABLE"] = $filter->TestXSS($arFields["~DETAIL_TEXT"]); $arResult["DETAIL_TEXT"] = $arResult["DETAIL_TEXT_PRINTABLE"]; } else { $arResult["DETAIL_TEXT_PRINTABLE"] = nl2br($arFields["DETAIL_TEXT"]); $arResult["DETAIL_TEXT"] = $arFields["DETAIL_TEXT"]; } } else { $arResult[$fieldKey."_PRINTABLE"] = $fieldValue; } } $arProperties = $obTask->GetProperties(); foreach ($arProperties as $propertyKey => $propertyValue) { $arResult["PROPERTY_".$propertyKey] = $propertyValue["VALUE"]; if (mb_strtoupper($propertyKey) == "TASKCOMPLETE") { $ps = intval($propertyValue["VALUE"]); if ($ps > 100) $ps = 100; elseif ($ps < 0) $ps = 0; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = '<div class="task-complete-bar-out" title="'.GetMessage("INTASK_L_TASKCOMPLETE", array("#PRC#" => intval($propertyValue["VALUE"]))).'">'; if ($ps > 0) $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] .= '<div class="task-complete-bar-in" style="width:'.$ps.'%;"><div class="empty"></div></div>'; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] .= '</div>'; } elseif ($propertyValue["USER_TYPE"] <> '') { if ($propertyValue["USER_TYPE"] == "UserID") $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = CIntranetTasks::PrepareUserForPrint($propertyValue["VALUE"]); else $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $propertyValue["VALUE"]; } elseif ($propertyValue["PROPERTY_TYPE"] == "G") { $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = array(); $vx = CIntranetTasks::PrepareSectionForPrint($propertyValue["VALUE"], $propertyValue["LINK_IBLOCK_ID"]); foreach ($vx as $vx1 => $vx2) $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$vx1] = $vx2["NAME"]; } elseif ($propertyValue["PROPERTY_TYPE"] == "L") { $arResult["PROPERTY_".$propertyKey] = array(); $arPropertyValue = $propertyValue["VALUE"]; $arPropertyKey = $propertyValue["VALUE_ENUM_ID"]; if (!is_array($arPropertyValue)) { $arPropertyValue = array($arPropertyValue); $arPropertyKey = array($arPropertyKey); } for ($i = 0, $cnt = count($arPropertyValue); $i < $cnt; $i++) $arResult["PROPERTY_".$propertyKey][$arPropertyKey[$i]] = $arPropertyValue[$i]; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $arResult["PROPERTY_".$propertyKey]; } elseif ($propertyValue["PROPERTY_TYPE"] == "S" && $propertyValue["ROW_COUNT"] > 1) { if (is_array($propertyValue["VALUE"])) { $arResult["PROPERTY_".$propertyKey] = array(); $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = array(); if ($isInSecurity) { foreach ($propertyValue["~VALUE"] as $k => $v) { $filter = new CSecurityFilter; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$k] = $filter->TestXSS($v); $arResult["PROPERTY_".$propertyKey][$k] = $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$k]; } } else { foreach ($propertyValue["VALUE"] as $k => $v) { $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$k] = nl2br($v); $arResult["PROPERTY_".$propertyKey][$k] = $v; } } } else { if ($isInSecurity) { $filter = new CSecurityFilter; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $filter->TestXSS($propertyValue["~VALUE"]); $arResult["PROPERTY_".$propertyKey] = $arResult["PROPERTY_".$propertyKey."_PRINTABLE"]; } else { $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = nl2br($propertyValue["VALUE"]); $arResult["PROPERTY_".$propertyKey] = $propertyValue["VALUE"]; } } } } $arResult["ROOT_SECTION_ID"] = 0; $arResult["IBLOCK_SECTION_ID_PRINTABLE"] = array(); $v = CIntranetTasks::PrepareSectionForPrint($arResult["IBLOCK_SECTION_ID"]); foreach ($v as $k1 => $v1) { if ($arResult["ROOT_SECTION_ID"] == 0) { $arResult["ROOT_SECTION_ID"] = $k1; $taskType = ($v1["XML_ID"] == "users_tasks" ? "user" : "group"); $ownerId = ($taskType == "user" ? $arResult["PROPERTY_TaskAssignedTo"] : $v1["XML_ID"]); } else { $arResult["IBLOCK_SECTION_ID_PRINTABLE"][$k1] = $v1["NAME"]; } } if (!array_key_exists($taskType."_".$ownerId, $arCache)) { $arCurrentUserGroups = array(); if ($taskType == "group") { $arCurrentUserGroups[] = SONET_ROLES_ALL; if ($GLOBALS["USER"]->IsAuthorized()) $arCurrentUserGroups[] = SONET_ROLES_AUTHORIZED; $r = CSocNetUserToGroup::GetUserRole($USER->GetID(), $ownerId); if ($r <> '') $arCurrentUserGroups[] = $r; } else { $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_ALL; if ($GLOBALS["USER"]->IsAuthorized()) $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_AUTHORIZED; if (CSocNetUserRelations::IsFriends($USER->GetID(), $ownerId)) $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_FRIENDS; elseif (CSocNetUserRelations::IsFriends2($USER->GetID(), $ownerId)) $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_FRIENDS2; } $arCache[$taskType."_".$ownerId] = $arCurrentUserGroups; } $arCurrentUserGroups = $arCache[$taskType."_".$ownerId]; if ($USER->GetID() == $arResult["CREATED_BY"]) $arCurrentUserGroups[] = "author"; if ($USER->GetID() == $arResult["PROPERTY_TaskAssignedTo"]) $arCurrentUserGroups[] = "responsible"; if (is_array($arResult["PROPERTY_TaskTrackers"]) && in_array($USER->GetID(), $arResult["PROPERTY_TaskTrackers"])) $arCurrentUserGroups[] = "trackers"; $arResult["DocumentState"] = array(); $arDocumentStates = CBPDocument::GetDocumentStates( array("intranet", "CIntranetTasksDocument", "x".$iblockId), array("intranet", "CIntranetTasksDocument", $arResult["ID"]) ); $kk = array_keys($arDocumentStates); foreach ($kk as $k) { $arResult["DocumentState"] = $arDocumentStates[$k]; $arResult["DocumentState"]["AllowableEvents"] = CBPDocument::GetAllowableEvents($GLOBALS["USER"]->GetID(), $arCurrentUserGroups, $arDocumentStates[$k]); } $arResult["TaskType"] = $taskType; $arResult["OwnerId"] = $ownerId; $arResult["CurrentUserCanViewTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_READ_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); $arResult["CurrentUserCanCommentTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_COMMENT_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); $arResult["CurrentUserCanDeleteTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_DELETE_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); $arResult["CurrentUserCanWriteTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_WRITE_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); //$hFileTmp = fopen($_SERVER["DOCUMENT_ROOT"]."/+++++++.+++", "a"); // DUMPING //fwrite($hFileTmp, "arResult:\n".print_r($arResult, true)."\n"); //fclose($hFileTmp); $arResultList[] = $arResult; } $dbTasksList = new CDBResult(); $dbTasksList->InitFromArray($arResultList); return $dbTasksList; } function GetListEx($arOrder = array("SORT" => "ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields=array(), $nameTemplate = false, $bShowLogin = true, $bShowTooltip = false, $arTooltipParams = false) { global $USER; $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return false; $arFilter["IBLOCK_ID"] = $iblockId; $arFilter["SHOW_NEW"] = "Y"; if (count($arSelectFields) > 0) { if (!in_array("IBLOCK_SECTION_ID", $arSelectFields)) $arSelectFields[] = "IBLOCK_SECTION_ID"; if (!in_array("ID", $arSelectFields)) $arSelectFields[] = "ID"; if (!in_array("IBLOCK_ID", $arSelectFields)) $arSelectFields[] = "IBLOCK_ID"; if (!in_array("CREATED_BY", $arSelectFields)) $arSelectFields[] = "CREATED_BY"; } $arResultList = array(); $arCache = array(); $isInSecurity = CModule::IncludeModule("security"); //$hFileTmp = fopen($_SERVER["DOCUMENT_ROOT"]."/+++++++.+++", "a"); // DUMPING //fwrite($hFileTmp, "GetList:\n".print_r(array($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields), true)."\n"); //fclose($hFileTmp); $dbTasksList = CIBlockElement::GetList( $arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields ); while ($obTask = $dbTasksList->GetNextElement()) { $arResult = array(); $arFields = $obTask->GetFields(); foreach ($arFields as $fieldKey => $fieldValue) { if (mb_substr($fieldKey, 0, 1) == "~") continue; $arResult[$fieldKey] = $fieldValue; if (in_array($fieldKey, array("MODIFIED_BY", "CREATED_BY"))) { $arResult[$fieldKey."_PRINTABLE"] = CIntranetTasks::PrepareUserForPrint($fieldValue, $nameTemplate, $bShowLogin, $bShowTooltip, $arTooltipParams); } elseif ($fieldKey == "DETAIL_TEXT") { if ($isInSecurity) { $filter = new CSecurityFilter; $arResult["DETAIL_TEXT_PRINTABLE"] = $filter->TestXSS($arFields["~DETAIL_TEXT"]); $arResult["DETAIL_TEXT"] = $arResult["DETAIL_TEXT_PRINTABLE"]; } else { $arResult["DETAIL_TEXT_PRINTABLE"] = nl2br($arFields["DETAIL_TEXT"]); $arResult["DETAIL_TEXT"] = $arFields["DETAIL_TEXT"]; } } else { $arResult[$fieldKey."_PRINTABLE"] = $fieldValue; } } $arProperties = $obTask->GetProperties(); foreach ($arProperties as $propertyKey => $propertyValue) { $arResult["PROPERTY_".$propertyKey] = $propertyValue["VALUE"]; if (mb_strtoupper($propertyKey) == "TASKCOMPLETE") { $ps = intval($propertyValue["VALUE"]); if ($ps > 100) $ps = 100; elseif ($ps < 0) $ps = 0; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = '<div class="task-complete-bar-out" title="'.GetMessage("INTASK_L_TASKCOMPLETE", array("#PRC#" => intval($propertyValue["VALUE"]))).'">'; if ($ps > 0) $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] .= '<div class="task-complete-bar-in" style="width:'.$ps.'%;"><div class="empty"></div></div>'; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] .= '</div>'; } elseif ($propertyValue["USER_TYPE"] <> '') { if ($propertyValue["USER_TYPE"] == "UserID") $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = CIntranetTasks::PrepareUserForPrint($propertyValue["VALUE"], $nameTemplate, $bShowLogin, $bShowTooltip, $arTooltipParams); else $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $propertyValue["VALUE"]; } elseif ($arField["PROPERTY_TYPE"] == "G") { $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = array(); $vx = CIntranetTasks::PrepareSectionForPrint($propertyValue["VALUE"], $propertyValue["LINK_IBLOCK_ID"]); foreach ($vx as $vx1 => $vx2) $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$vx1] = $vx2["NAME"]; } elseif ($propertyValue["PROPERTY_TYPE"] == "L") { $arResult["PROPERTY_".$propertyKey] = array(); $arPropertyValue = $propertyValue["VALUE"]; $arPropertyKey = $propertyValue["VALUE_ENUM_ID"]; if (!is_array($arPropertyValue)) { $arPropertyValue = array($arPropertyValue); $arPropertyKey = array($arPropertyKey); } for ($i = 0, $cnt = count($arPropertyValue); $i < $cnt; $i++) $arResult["PROPERTY_".$propertyKey][$arPropertyKey[$i]] = $arPropertyValue[$i]; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $arResult["PROPERTY_".$propertyKey]; } elseif ($propertyValue["PROPERTY_TYPE"] == "S" && $propertyValue["ROW_COUNT"] > 1) { if (is_array($propertyValue["VALUE"])) { $arResult["PROPERTY_".$propertyKey] = array(); $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = array(); if ($isInSecurity) { foreach ($propertyValue["~VALUE"] as $k => $v) { $filter = new CSecurityFilter; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$k] = $filter->TestXSS($v); $arResult["PROPERTY_".$propertyKey][$k] = $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$k]; } } else { foreach ($propertyValue["VALUE"] as $k => $v) { $arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$k] = nl2br($v); $arResult["PROPERTY_".$propertyKey][$k] = $v; } } } else { if ($isInSecurity) { $filter = new CSecurityFilter; $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $filter->TestXSS($propertyValue["~VALUE"]); $arResult["PROPERTY_".$propertyKey] = $arResult["PROPERTY_".$propertyKey."_PRINTABLE"]; } else { $arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = nl2br($propertyValue["VALUE"]); $arResult["PROPERTY_".$propertyKey] = $propertyValue["VALUE"]; } } } } $arResult["ROOT_SECTION_ID"] = 0; $arResult["IBLOCK_SECTION_ID_PRINTABLE"] = array(); $v = CIntranetTasks::PrepareSectionForPrint($arResult["IBLOCK_SECTION_ID"]); foreach ($v as $k1 => $v1) { if ($arResult["ROOT_SECTION_ID"] == 0) { $arResult["ROOT_SECTION_ID"] = $k1; $taskType = ($v1["XML_ID"] == "users_tasks" ? "user" : "group"); $ownerId = ($taskType == "user" ? $arResult["PROPERTY_TaskAssignedTo"] : $v1["XML_ID"]); } else { $arResult["IBLOCK_SECTION_ID_PRINTABLE"][$k1] = $v1["NAME"]; } } if (!array_key_exists($taskType."_".$ownerId, $arCache)) { $arCurrentUserGroups = array(); if ($taskType == "group") { $arCurrentUserGroups[] = SONET_ROLES_ALL; if ($GLOBALS["USER"]->IsAuthorized()) $arCurrentUserGroups[] = SONET_ROLES_AUTHORIZED; $r = CSocNetUserToGroup::GetUserRole($USER->GetID(), $ownerId); if ($r <> '') $arCurrentUserGroups[] = $r; } else { $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_ALL; if ($GLOBALS["USER"]->IsAuthorized()) $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_AUTHORIZED; if (CSocNetUserRelations::IsFriends($USER->GetID(), $ownerId)) $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_FRIENDS; elseif (CSocNetUserRelations::IsFriends2($USER->GetID(), $ownerId)) $arCurrentUserGroups[] = SONET_RELATIONS_TYPE_FRIENDS2; } $arCache[$taskType."_".$ownerId] = $arCurrentUserGroups; } $arCurrentUserGroups = $arCache[$taskType."_".$ownerId]; if ($USER->GetID() == $arResult["CREATED_BY"]) $arCurrentUserGroups[] = "author"; if ($USER->GetID() == $arResult["PROPERTY_TaskAssignedTo"]) $arCurrentUserGroups[] = "responsible"; if (is_array($arResult["PROPERTY_TaskTrackers"]) && in_array($USER->GetID(), $arResult["PROPERTY_TaskTrackers"])) $arCurrentUserGroups[] = "trackers"; $arResult["DocumentState"] = array(); $arDocumentStates = CBPDocument::GetDocumentStates( array("intranet", "CIntranetTasksDocument", "x".$iblockId), array("intranet", "CIntranetTasksDocument", $arResult["ID"]) ); $kk = array_keys($arDocumentStates); foreach ($kk as $k) { $arResult["DocumentState"] = $arDocumentStates[$k]; $arResult["DocumentState"]["AllowableEvents"] = CBPDocument::GetAllowableEvents($GLOBALS["USER"]->GetID(), $arCurrentUserGroups, $arDocumentStates[$k]); } $arResult["TaskType"] = $taskType; $arResult["OwnerId"] = $ownerId; $arResult["CurrentUserCanViewTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_READ_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); $arResult["CurrentUserCanCommentTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_COMMENT_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); $arResult["CurrentUserCanDeleteTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_DELETE_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); $arResult["CurrentUserCanWriteTask"] = CIntranetTasksDocument::CanUserOperateDocument( INTASK_DOCUMENT_OPERATION_WRITE_DOCUMENT, $GLOBALS["USER"]->GetID(), $arResult["ID"], array("TaskType" => $taskType, "OwnerId" => $ownerId, "AllUserGroups" => $arCurrentUserGroups, "DocumentStates" => $arDocumentStates) ); //$hFileTmp = fopen($_SERVER["DOCUMENT_ROOT"]."/+++++++.+++", "a"); // DUMPING //fwrite($hFileTmp, "arResult:\n".print_r($arResult, true)."\n"); //fclose($hFileTmp); $arResultList[] = $arResult; } $dbTasksList1 = new CDBResult(); $dbTasksList1->InitFromArray($arResultList); return array($dbTasksList1, $dbTasksList); } function PrepareUserForPrint($value, $nameTemplate = false, $bShowLogin = true, $bShowTooltip = false, $arTooltipParams = false) { static $cnt = 0; if ($nameTemplate === false) $nameTemplate = CSite::GetNameFormat(); if ($bShowTooltip && ($arTooltipParams === false || !is_array($arTooltipParams))) { $arTooltipParams = array( "SHOW_FIELDS_TOOLTIP" => array("EMAIL", "PERSONAL_MOBILE", "WORK_PHONE", "PERSONAL_ICQ", "PERSONAL_PHOTO", "PERSONAL_CITY", "WORK_COMPANY", "WORK_POSITION"), "USER_PROPERTY_TOOLTIP" => array("UF_DEPARTMENT", "UF_PHONE_INNER"), "DATE_TIME_FORMAT" => $GLOBALS["DB"]->DateFormatToPHP(CSite::GetDateFormat("FULL")), "THUMBNAIL_LIST_SIZE" => 30, "SHOW_YEAR" => "M", "CACHE_TYPE" => "A", "CACHE_TIME" => "3600", ); } elseif($bShowTooltip) { if (!array_key_exists("SHOW_FIELDS_TOOLTIP", $arTooltipParams)) $arTooltipParams["SHOW_FIELDS_TOOLTIP"] = array("EMAIL", "PERSONAL_MOBILE", "WORK_PHONE", "PERSONAL_ICQ", "PERSONAL_PHOTO", "PERSONAL_CITY", "WORK_COMPANY", "WORK_POSITION"); if (!array_key_exists("USER_PROPERTY_TOOLTIP", $arTooltipParams)) $arTooltipParams["USER_PROPERTY_TOOLTIP"] = array("UF_DEPARTMENT", "UF_PHONE_INNER"); if (!array_key_exists("DATE_TIME_FORMAT", $arTooltipParams)) $arTooltipParams["DATE_TIME_FORMAT"] = $GLOBALS["DB"]->DateFormatToPHP(CSite::GetDateFormat("FULL")); if (!array_key_exists("THUMBNAIL_LIST_SIZE", $arTooltipParams)) $arTooltipParams["THUMBNAIL_LIST_SIZE"] = 30; if (!array_key_exists("SHOW_YEAR", $arTooltipParams)) $arTooltipParams["SHOW_YEAR"] = "M"; if (!array_key_exists("CACHE_TYPE", $arTooltipParams)) $arTooltipParams["CACHE_TYPE"] = "A"; if (!array_key_exists("CACHE_TIME", $arTooltipParams)) $arTooltipParams["CACHE_TIME"] = "3600"; if (!array_key_exists("PATH_TO_SONET_MESSAGES_CHAT", $arTooltipParams)) $arTooltipParams["PATH_TO_SONET_MESSAGES_CHAT"] = "/company/personal/messages/chat/#user_id#/"; if (!array_key_exists("PATH_TO_SONET_USER_PROFILE", $arTooltipParams)) $arTooltipParams["PATH_TO_SONET_USER_PROFILE"] = "/company/personal/user/#user_id#/"; if (!array_key_exists("PATH_TO_CONPANY_DEPARTMENT", $arTooltipParams)) $arTooltipParams["PATH_TO_CONPANY_DEPARTMENT"] = "/company/structure.php?set_filter_structure=Y&structure_UF_DEPARTMENT=#ID#"; if (!array_key_exists("INLINE", $arTooltipParams)) $arTooltipParams["INLINE"] = "N"; } $arReturn = array(); $valueTmp = $value; if (!is_array($valueTmp)) $valueTmp = array($valueTmp); foreach ($valueTmp as $val) { $dbUser = CUser::GetByID($val); if ($arUser = $dbUser->GetNext()) { $name = trim($arUser["~NAME"]); $lastName = trim($arUser["~LAST_NAME"]); $secondName = trim($arUser["~SECOND_NAME"]); $login = trim($arUser["~LOGIN"]); $arTmpUser = array( "NAME" => $name, "LAST_NAME" => $lastName, "SECOND_NAME" => $secondName, "LOGIN" => $login, ); $nameFormatted = CUser::FormatName($nameTemplate, $arTmpUser, $bUseLogin); if ($bShowTooltip) { $arReturn[] = $GLOBALS["APPLICATION"]->IncludeComponent("bitrix:main.user.link", '', array( "ID" => $val, "HTML_ID" => "tasks_".$cnt, "NAME" => $name, "LAST_NAME" => $lastName, "SECOND_NAME" => $secondName, "LOGIN" => $login, "PATH_TO_SONET_MESSAGES_CHAT" => $arTooltipParams["PATH_TO_SONET_MESSAGES_CHAT"], "PATH_TO_SONET_USER_PROFILE" => $arTooltipParams["PATH_TO_SONET_USER_PROFILE"], "PATH_TO_CONPANY_DEPARTMENT" => $arTooltipParams["PATH_TO_CONPANY_DEPARTMENT"], "PATH_TO_VIDEO_CALL" => $arTooltipParams["PATH_TO_VIDEO_CALL"], "USE_THUMBNAIL_LIST" => $arTooltipParams["USE_THUMBNAIL_LIST"], "THUMBNAIL_LIST_SIZE" => $arTooltipParams["THUMBNAIL_LIST_SIZE"], "DATE_TIME_FORMAT" => $arTooltipParams["DATE_TIME_FORMAT"], "SHOW_YEAR" => $arTooltipParams["SHOW_YEAR"], "CACHE_TYPE" => $arTooltipParams["CACHE_TYPE"], "CACHE_TIME" => $arTooltipParams["CACHE_TIME"], "INLINE" => $arTooltipParams["INLINE"], "NAME_TEMPLATE" => $nameTemplate, "SHOW_LOGIN" => $bShowLogin, "DO_RETURN" => "Y", "DUPLICATE_STYLES" => "Y", ), false , array("HIDE_ICONS" => "Y") ); $cnt++; } else $arReturn[] = $nameFormatted; } } return (is_array($value) ? $arReturn : ((count($arReturn) > 0) ? $arReturn[0] : "")); } function PrepareSectionForPrint($value, $iblockId = 0) { if ($iblockId <= 0) $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return false; $arReturn = array(); $valueTmp = $value; if (!is_array($valueTmp)) $valueTmp = array($valueTmp); foreach ($valueTmp as $val) { $ar = array(); $dbSectionsList = CIBlockSection::GetNavChain($iblockId, $val); while ($arSection = $dbSectionsList->GetNext()) $ar[$arSection["ID"]] = array("NAME" => $arSection["NAME"], "XML_ID" => $arSection["XML_ID"]); $arReturn[] = $ar; } return (is_array($value) ? $arReturn : ((count($arReturn) > 0) ? $arReturn[0] : array())); } function GetById($id, $nameTemplate = false, $bShowLogin = true, $bShowTooltip = false, $arTooltipParams = false) { return CIntranetTasksDocument::GetDocument($id, $nameTemplate, $bShowLogin, $bShowTooltip, $arTooltipParams); } function GetTaskFields($taskType, $ownerId) { $arFields = CIntranetTasksDocument::GetDocumentFields($taskType."_".$ownerId); $arSort = array("ID" => 10, "NAME" => 20, "TIMESTAMP_X" => 1000, "MODIFIED_BY" => 100, "DATE_CREATE" => 100, "CREATED_BY" => 100, "ACTIVE_FROM" => 30, "ACTIVE_TO" => 40, "IBLOCK_SECTION_ID" => 45, "DETAIL_TEXT" => 50, "PROPERTY_TASKPRIORITY" => 60, "PROPERTY_TASKCOMPLETE" => 130, "PROPERTY_TASKASSIGNEDTO" => 10, "PROPERTY_TASKTRACKERS" => 70, "PROPERTY_TASKSIZE" => 140, "PROPERTY_TASKSIZEREAL" => 150, "PROPERTY_TASKFINISH" => 130, "PROPERTY_TASKREPORT" => 500, "PROPERTY_TASKREMIND" => 170, "PROPERTY_TASKFILES" => 80, ); $arFieldsKeys = array_keys($arFields); foreach ($arFieldsKeys as $key) { $arFields[$key]["NAME"] = $arFields[$key]["Name"]; $arFields[$key]["FULL_NAME"] = $arFields[$key]["Name"]; $arFields[$key]["EDITABLE"] = $arFields[$key]["Editable"]; $arFields[$key]["EDITABLE_AUTHOR"] = $arFields[$key]["Editable"]; $arFields[$key]["EDITABLE_RESPONSIBLE"] = $arFields[$key]["Editable"]; $arFields[$key]["IS_REQUIRED"] = $arFields[$key]["Required"]; $arFields[$key]["FILTERABLE"] = $arFields[$key]["Filterable"]; $arFields[$key]["PSORT"] = array_key_exists(mb_strtoupper($key), $arSort) ? $arSort[mb_strtoupper($key)] : 1000; } return $arFields; } function GetTaskFieldsMap($arTaskFields) { $arTaskFieldsKeys = array_keys($arTaskFields); foreach ($arTaskFieldsKeys as $key) { $arFields[$key] = $key; $key1 = mb_strtoupper($key); $arFields[$key1] = $key; if (mb_substr($key1, 0, mb_strlen("PROPERTY_")) == "PROPERTY_") $arFields[mb_substr($key1, mb_strlen("PROPERTY_"))] = $key; if ($key1 == "IBLOCK_SECTION_ID") $arFields["IBLOCK_SECTION"] = $key; } return $arFields; } function IsTasksFeatureActive($taskType, $ownerId) { $taskType = mb_strtolower($taskType); if (!in_array($taskType, array("group", "user"))) $taskType = "user"; $ownerId = intval($ownerId); if ($ownerId <= 0) { $taskType = "user"; $ownerId = $GLOBALS["USER"]->GetID(); } $ownerId = intval($ownerId); if ($ownerId <= 0) return false; return CSocNetFeatures::IsActiveFeature((($taskType == 'user') ? SONET_ENTITY_USER : SONET_ENTITY_GROUP), $ownerId, "tasks"); } /** * @param $taskType * @param $ownerId * @param $operation * @return bool * * @Deprecated */ function CanCurrentUserPerformOperation($taskType, $ownerId, $operation) { if ( CModule::IncludeModule("tasks") && class_exists('\Bitrix\Tasks\Access\ActionDictionary') ) { return false; } global $USER; $taskType = mb_strtolower($taskType); if (!in_array($taskType, array("group", "user"))) $taskType = "user"; $ownerId = intval($ownerId); if ($ownerId <= 0) { $taskType = "user"; $ownerId = $USER->GetID(); } $ownerId = intval($ownerId); if ($ownerId <= 0) return false; if ($USER->IsAuthorized() && CSocNetUser::IsCurrentUserModuleAdmin()) return true; return CSocNetFeaturesPerms::CanPerformOperation( $GLOBALS["USER"]->GetID(), (($taskType == 'user') ? SONET_ENTITY_USER : SONET_ENTITY_GROUP), $ownerId, "tasks", $operation ); } function InitializeIBlock($taskType, $ownerId, $forumId) { $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return 0; $forumId = intval($forumId); $arTasksConverted2BP = array(); $keyTasksConverted2BP = $iblockId."_".$taskType.($taskType == "group" ? "_".$ownerId : ""); global $CACHE_MANAGER; if ($CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP")) { $arTasksConverted2BP = $CACHE_MANAGER->Get("IntranetTasksConverted2BP"); if (array_key_exists($keyTasksConverted2BP, $arTasksConverted2BP)) return $arTasksConverted2BP[$keyTasksConverted2BP]; } $globalParentSectionId = 0; $dbIBlock = CIBlock::GetList(array(), array("ID" => $iblockId, "ACTIVE" => "Y")); if ($arIBlock = $dbIBlock->Fetch()) { $arIBlockProperties = array(); $dbIBlockProps = CIBlock::GetProperties($iblockId); while ($arIBlockProps = $dbIBlockProps->Fetch()) { $ind = (($arIBlockProps["CODE"] <> '') ? $arIBlockProps["CODE"] : $arIBlockProps["ID"]); $arIBlockProperties[mb_strtoupper($ind)] = $arIBlockProps; } $arTasksProps = array( "TASKPRIORITY" => array( "NAME" => GetMessage("INTI_TASKPRIORITY"), "ACTIVE" => "Y", "SORT" => 100, "CODE" => "TaskPriority", "PROPERTY_TYPE" => "L", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, "VALUES" => array( array( "VALUE" => " ".GetMessage("INTI_TASKPRIORITY_1"), "DEF" => "N", "SORT" => 100, "XML_ID" => "1" ), array( "VALUE" => " ".GetMessage("INTI_TASKPRIORITY_2"), "DEF" => "Y", "SORT" => 200, "XML_ID" => "2" ), array( "VALUE" => " ".GetMessage("INTI_TASKPRIORITY_3"), "DEF" => "N", "SORT" => 300, "XML_ID" => "3" ), ), ), "TASKCOMPLETE" => array( "NAME" => GetMessage("INTI_TASKCOMPLETE"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskComplete", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKASSIGNEDTO" => array( "NAME" => GetMessage("INTI_TASKASSIGNEDTO"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskAssignedTo", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKTRACKERS" => array( "NAME" => GetMessage("INTI_TASKTRACKERS"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskTrackers", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKALERT" => array( "NAME" => GetMessage("INTI_TASKALERT"), "ACTIVE" => "Y", "SORT" => 500, "CODE" => "TaskAlert", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "DEFAULT_VALUE" => "Y", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKSIZE" => array( "NAME" => GetMessage("INTI_TASKSIZE"), "ACTIVE" => "Y", "SORT" => 600, "CODE" => "TaskSize", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKSIZEREAL" => array( "NAME" => GetMessage("INTI_TASKSIZEREAL"), "ACTIVE" => "Y", "SORT" => 700, "CODE" => "TaskSizeReal", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKFINISH" => array( "NAME" => GetMessage("INTI_TASKFINISH"), "ACTIVE" => "Y", "SORT" => 800, "CODE" => "TaskFinish", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKFILES" => array( "NAME" => GetMessage("INTI_TASKFILES"), "ACTIVE" => "Y", "SORT" => 900, "CODE" => "TaskFiles", "PROPERTY_TYPE" => "F", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKREPORT" => array( "NAME" => GetMessage("INTI_TASKREPORT"), "ACTIVE" => "Y", "SORT" => 1000, "CODE" => "TaskReport", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKREMIND" => array( "NAME" => GetMessage("INTI_TASKREMIND"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskRemind", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "VERSION" => array( "NAME" => GetMessage("INTI_VERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "VERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), "TASKVERSION" => array( "NAME" => GetMessage("INTI_TASKVERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "TASKVERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, ), ); foreach ($arTasksProps as $propKey => $arProp) { if (!array_key_exists($propKey, $arIBlockProperties)) { $ibp = new CIBlockProperty; $ibp->Add($arProp); } } $dbSectionsList = CIBlockSection::GetList( array(), array( "GLOBAL_ACTIVE" => "Y", "XML_ID" => (($taskType == "group") ? $ownerId : "users_tasks"), "IBLOCK_ID" => $iblockId, "SECTION_ID" => 0 ), false ); if ($arSection = $dbSectionsList->GetNext()) $globalParentSectionId = $arSection["ID"]; if ($globalParentSectionId <= 0) { if ($taskType == "group") { $folderName = "-"; $folderXmlId = $ownerId; if ($arGroup = CSocNetGroup::GetByID($ownerId)) { $folderName = $arGroup["NAME"]." [".$ownerId."]"; $folderXmlId = $ownerId; } } else { $folderName = "User Tasks"; $folderXmlId = "users_tasks"; } $arFields = array( "IBLOCK_ID" => $iblockId, "IBLOCK_SECTION_ID" => 0, "ACTIVE" => "Y", "NAME" => $folderName, "XML_ID" => $folderXmlId, ); $iblockSection = new CIBlockSection; $globalParentSectionId = $iblockSection->Add($arFields, true); CIntranetTasks::InstallDefaultViews($taskType, $ownerId); } $db = CBPWorkflowTemplateLoader::GetList( array(), array("DOCUMENT_TYPE" => array("intranet", "CIntranetTasksDocument", "x".$iblockId)), false, false, array("ID") ); // while ($ar = $db->Fetch()) // { // try // { // CBPWorkflowTemplateLoader::Delete($ar["ID"]); // } // catch(Exception $e) // { // CBPWorkflowTemplateLoader::Update($ar["ID"], array("AUTO_EXECUTE" => 0)); // } // } $workflowTemplateId = 0; if ($ar = $db->Fetch()) { $workflowTemplateId = $ar["ID"]; } else { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/intranet/classes/general/tasks_wf_template.php"); $workflowTemplateId = CBPWorkflowTemplateLoader::Add($arFields); } $arTaskStatusTmp = array(); $arTaskStatusTmpAlt = array(); $dbRes = CIBlockProperty::GetPropertyEnum("TaskStatus", Array("SORT" => "ASC"), Array("IBLOCK_ID" => $iblockId)); while ($arRes = $dbRes->Fetch()) { $arTaskStatusTmp[mb_strtoupper($arRes["XML_ID"])] = $arRes["ID"]; $arTaskStatusTmpAlt[$arRes["ID"]] = $arRes["XML_ID"]; } $dbResult = CIBlockElement::GetList( array(), array("IBLOCK_ID" => $iblockId, "INCLUDE_SUBSECTIONS" => "Y", "!PROPERTY_TASKVERSION" => 2), false, false, array("ID", "PROPERTY_TASKSTATUS", "PROPERTY_TASKASSIGNEDTO", "IBLOCK_SECTION_ID") ); if ($arResult = $dbResult->Fetch()) { $arOldTasksWFs = array(); $arOldTasksSTs = array(); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/intranet/classes/general/tasks_wf_template1.php"); $arOldTasksWFsTmp = array(); foreach ($arOldTasksWFs as $t1 => $t2) { if (array_key_exists($t1, $arTaskStatusTmp)) $arOldTasksWFsTmp[$arTaskStatusTmp[$t1]] = $t2; } $arOldTasksSTsTmp = array(); foreach ($arOldTasksSTs as $t1 => $t2) { if (array_key_exists($t1, $arTaskStatusTmp)) $arOldTasksSTsTmp[$arTaskStatusTmp[$t1]] = $t2; } do { $taskTypeTmp = ""; $ownerIdTmp = ""; $v = CIntranetTasks::PrepareSectionForPrint($arResult["IBLOCK_SECTION_ID"]); foreach ($v as $k1 => $v1) { $taskTypeTmp = ($v1["XML_ID"] == "users_tasks" ? "user" : "group"); $ownerIdTmp = ($taskTypeTmp == "user" ? $arResult["PROPERTY_TASKASSIGNEDTO_VALUE"] : $v1["XML_ID"]); break; } if ($taskTypeTmp == "group") { $pathTemplate = str_replace( array("#GROUP_ID#", "#TASK_ID#"), array($ownerIdTmp, "{=Document:ID}"), COption::GetOptionString("intranet", "path_task_group_entry", "/workgroups/group/#GROUP_ID#/tasks/task/view/#TASK_ID#/") ); } else { $pathTemplate = str_replace( array("#USER_ID#", "#TASK_ID#"), array($ownerIdTmp, "{=Document:ID}"), COption::GetOptionString("intranet", "path_task_user_entry", "/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/") ); } $pathTemplate = str_replace('#HTTP_HOST#', $_SERVER['HTTP_HOST'], "http://#HTTP_HOST#".$pathTemplate); $workflowId = uniqid("", true); if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksWFsTmp)) { $v = $arOldTasksWFsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]; $v = str_replace( array("#TPT_TASK_ID_LEN#", "#TPT_TASK_ID#", "#TPT_WORKFLOW_ID_LEN#", "#TPT_WORKFLOW_ID#", "#TPT_DOCUMENT_LEN1#", "#TPT_DOCUMENT_LEN2#", "#TPT_DOCUMENT_LEN3#", "#TPT_DOCUMENT_ROOT#", "#TPT_OWNER_ID#", "#TPT_TASK_TYPE_LEN#", "#TPT_TASK_TYPE#", "#TPT_PATH_TEMPLATE_LEN#", "#TPT_PATH_TEMPLATE#", "#TPT_FORUM_ID#", "#TPT_IBLOCKID_ID#"), array(mb_strlen($arResult["ID"]), $arResult["ID"], mb_strlen($workflowId), $workflowId, 25 + mb_strlen($_SERVER["DOCUMENT_ROOT"]), 25 + mb_strlen($_SERVER["DOCUMENT_ROOT"]), 34 + mb_strlen($_SERVER["DOCUMENT_ROOT"]), $_SERVER["DOCUMENT_ROOT"], $ownerIdTmp, mb_strlen($taskTypeTmp), $taskTypeTmp, mb_strlen($pathTemplate), $pathTemplate, $forumId, $iblockId), $v ); CBPWorkflowPersister::__InsertWorkflowHack($workflowId, $v); } if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksSTsTmp)) CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE_TITLE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PARAMS"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PERMS"]); else CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTs["COMPLETED"]["STATE"], $arOldTasksSTs["COMPLETED"]["STATE_TITLE"], $arOldTasksSTs["COMPLETED"]["PARAMS"], $arOldTasksSTs["COMPLETED"]["PERMS"]); CIBlockElement::SetPropertyValues($arResult["ID"], $iblockId, 2, "TASKVERSION"); } while ($arResult = $dbResult->Fetch()); } $arTasksConverted2BP[$keyTasksConverted2BP] = $globalParentSectionId; $CACHE_MANAGER->Clean("IntranetTasksConverted2BP"); $CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP"); $CACHE_MANAGER->Set("IntranetTasksConverted2BP", $arTasksConverted2BP); } return $globalParentSectionId; } function ChangeStatus($taskId, $newStatus, $userId = 0) { CModule::IncludeModule("socialnetwork"); $taskId = intval($taskId); $userId = intval($userId); if ($userId == 0) $userId = $GLOBALS["USER"]->GetID(); $arTask = CIntranetTasks::GetById($taskId); if (!$arTask) return; $arDocumentStates = CBPDocument::GetDocumentStates( array("intranet", "CIntranetTasksDocument", "x".$arTask["IBLOCK_ID"]), array("intranet", "CIntranetTasksDocument", $taskId) ); $arCurrentUserGroups = array(); if ($arTask["TaskType"] == "group") { $arCurrentUserGroups[] = SONET_ROLES_ALL; if ($GLOBALS["USER"]->IsAuthorized()) $arCurrentUserGroups[] = SONET_ROLES_AUTHORIZED; $r = CSocNetUserToGroup::GetUserRole($userId, $arTask["OwnerId"]); if ($r <> '') $arCurrentUserGroups[] = $r; } if ($userId == $arTask["CREATED_BY"]) $arCurrentUserGroups[] = "author"; if ($userId == $arTask["PROPERTY_TaskAssignedTo"]) $arCurrentUserGroups[] = "responsible"; if (is_array($arTask["PROPERTY_TaskTrackers"]) && in_array($userId, $arTask["PROPERTY_TaskTrackers"])) $arCurrentUserGroups[] = "trackers"; $arStateCommand = array( "NotAccepted" => array( "NotStarted" => array("HEEA_NotAccepted_ApproveEvent"), "InProgress" => array("HEEA_NotAccepted_InProgressEvent"), "Completed" => array("HEEA_NotAccepted_CompleteEvent"), "Closed" => array("HEEA_NotAccepted_CloseEvent"), "Waiting" => array("HEEA_NotAccepted_ApproveEvent", "HEEA_NotStarted_WaitingEvent"), "Deferred" => array("HEEA_NotAccepted_ApproveEvent", "HEEA_NotStarted_DeferredEvent"), ), "NotStarted" => array( "InProgress" => array("HEEA_NotStarted_InProgressEvent"), "Completed" => array("HEEA_NotStarted_CompleteEvent"), "Closed" => array("HEEA_NotStarted_CloseEvent"), "Waiting" => array("HEEA_NotStarted_WaitingEvent"), "Deferred" => array("HEEA_NotStarted_DeferredEvent"), ), "InProgress" => array( "Completed" => array("HEEA_InProgress_CompleteEvent"), "Closed" => array("HEEA_InProgress_CloseEvent"), "Waiting" => array("HEEA_InProgress_WaitingEvent"), "Deferred" => array("HEEA_InProgress_DeferredEvent"), ), "Completed" => array( "InProgress" => array("HEEA_Completed_InProgressEvent"), "Closed" => array("HEEA_Completed_CloseEvent"), ), "Waiting" => array( "NotStarted" => array("HEEA_Waiting_NotStartedEvent"), "InProgress" => array("HEEA_Waiting_InProgressEvent"), "Completed" => array("HEEA_Waiting_CompleteEvent"), "Closed" => array("HEEA_Waiting_CloseEvent"), "Deferred" => array("HEEA_Waiting_DeferredEvent"), ), "Deferred" => array( "NotStarted" => array("HEEA_Deferred_NotStartedEvent"), "InProgress" => array("HEEA_Deferred_InProgressEvent"), "Completed" => array("HEEA_Deferred_CompleteEvent"), "Closed" => array("HEEA_Deferred_CloseEvent"), "Waiting" => array("HEEA_Deferred_WaitingEvent"), ), ); foreach ($arDocumentStates as $documentState) { $oldState = $documentState["STATE_NAME"]; if (!array_key_exists($oldState, $arStateCommand) || count($arStateCommand[$oldState]) <= 0) continue; if (!array_key_exists($newStatus, $arStateCommand[$oldState]) || count($arStateCommand[$oldState][$newStatus]) <= 0) continue; foreach ($arStateCommand[$oldState][$newStatus] as $sc) { CBPDocument::SendExternalEvent( $documentState["ID"], $sc, array("Groups" => $arCurrentUserGroups, "User" => $userId), $arErrorTmp ); } } } function GetRootSectionId($taskType, $ownerId) { $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return 0; $globalParentSectionId = 0; $dbSectionsList = CIBlockSection::GetList( array(), array( "GLOBAL_ACTIVE" => "Y", "XML_ID" => (($taskType == "group") ? $ownerId : "users_tasks"), "IBLOCK_ID" => $iblockId, "SECTION_ID" => 0 ), false ); if ($arSection = $dbSectionsList->GetNext()) $globalParentSectionId = $arSection["ID"]; if ($globalParentSectionId <= 0) { if ($taskType == "group") { $folderName = "-"; $folderXmlId = $ownerId; if ($arGroup = CSocNetGroup::GetByID($ownerId)) { $folderName = $arGroup["NAME"]." [".$ownerId."]"; $folderXmlId = $ownerId; } } else { $folderName = "User Tasks"; $folderXmlId = "users_tasks"; } $arFields = array( "IBLOCK_ID" => $iblockId, "IBLOCK_SECTION_ID" => 0, "ACTIVE" => "Y", "NAME" => $folderName, "XML_ID" => $folderXmlId, ); $iblockSection = new CIBlockSection; $globalParentSectionId = $iblockSection->Add($arFields, true); CIntranetTasks::InstallDefaultViews($taskType, $ownerId); } return $globalParentSectionId; } function InstallDefaultViews($taskType, $ownerId) { $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0); if ($iblockId <= 0) return; $ownerId = intval($ownerId); if (!In_Array($taskType, array("user", "group"))) $taskType = "user"; $newID = 0; $dbUserOptionsList = CUserOptions::GetList( array("ID" => "DESC"), array() ); if ($arUserOptionTmp = $dbUserOptionsList->Fetch()) $newID = intval($arUserOptionTmp["ID"]); $arTaskStatus = array(); $dbRes = CIBlockProperty::GetPropertyEnum("TASKSTATUS", Array("SORT" => "ASC"), Array("IBLOCK_ID" => $iblockId)); while ($arRes = $dbRes->Fetch()) $arTaskStatus[mb_strtoupper($arRes["XML_ID"])] = $arRes; if ($taskType == "group") { $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_ASSIGNED2ME_ACT"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TIMESTAMP_X", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "TASKASSIGNEDTO" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "Y", ), true ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_BY_PRIORITY"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TASKPRIORITY", "ORDER_DIR_0" => "ASC", "ORDER_BY_1" => "DATE_ACTIVE_TO", "ORDER_DIR_1" => "ASC", "FILTER" => Array( "TASKASSIGNEDTO" => "current", "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], ), "THROUGH_SAMPLING" => "Y", "COMMON" => "Y", ), true ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_ASSIGNED2ME_FIN"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "CREATED_BY" => 2, "TASKSIZE" => 3, "TASKSIZEREAL" => 4, "TASKFINISH" => 5, ), "ORDER_BY_0" => "TASKFINISH", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "DATE_ACTIVE_TO", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "TASKASSIGNEDTO" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "Y", ), true ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_CREATED_BY_ACT"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "TASKASSIGNEDTO" => 3, "DATE_ACTIVE_FROM" => 4, "DATE_ACTIVE_TO" => 5, "TASKSTATUS" => 6, "TASKCOMPLETE" => 7, ), "ORDER_BY_0" => "TIMESTAMP_X", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "CREATED_BY" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "Y", ), true ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_CREATED_BY_FIN"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TASKASSIGNEDTO" => 2, "TASKSIZE" => 3, "TASKSIZEREAL" => 4, "TASKFINISH" => 5, ), "ORDER_BY_0" => "TASKFINISH", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DATE_ACTIVE_TO", "FILTER" => Array( "TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "CREATED_BY" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "Y", ), true ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_TODAY"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TASKPRIORITY", "ORDER_DIR_0" => "ASC", "ORDER_BY_1" => "DATE_ACTIVE_TO", "ORDER_DIR_1" => "ASC", "FILTER" => Array( "TASKASSIGNEDTO" => "current", "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "<DATE_ACTIVE_FROM" => "current", ), "THROUGH_SAMPLING" => "Y", "COMMON" => "Y", ), true ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => "gant", "TITLE" => GetMessage("INTASK_I_GANT"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKASSIGNEDTO" => 4, "TASKPRIORITY" => 5, "DATE_ACTIVE_FROM" => 6, "DATE_ACTIVE_TO" => 7, "TASKSTATUS" => 8, "TASKCOMPLETE" => 9, ), "ORDER_BY_0" => "DATE_ACTIVE_TO", "ORDER_DIR_0" => "ASC", "ORDER_BY_1" => "TASKPRIORITY", "ORDER_DIR_1" => "ASC", "ORDER_BY_3" => "DATE_ACTIVE_FROM", "ORDER_DIR_3" => "ASC", "FILTER" => Array( "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], ), "THROUGH_SAMPLING" => "Y", "COMMON" => "Y", ), true ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_FIN"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TASKASSIGNEDTO" => 2, "TASKSIZE" => 3, "TASKSIZEREAL" => 4, "TASKFINISH" => 5, ), "ORDER_BY_0" => "TASKFINISH", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DATE_ACTIVE_TO", "FILTER" => Array( "TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "Y", ), true ); } elseif ($taskType == "user" && $ownerId == $GLOBALS["USER"]->GetID()) { $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_ASSIGNED2ME_ACT"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TIMESTAMP_X", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "TASKASSIGNEDTO" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "N", ), false ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_BY_PRIORITY"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TASKPRIORITY", "ORDER_DIR_0" => "ASC", "ORDER_BY_1" => "DATE_ACTIVE_TO", "ORDER_DIR_1" => "ASC", "FILTER" => Array( "TASKASSIGNEDTO" => "current", "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], ), "THROUGH_SAMPLING" => "Y", "COMMON" => "N", ), false ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_ASSIGNED2ME_FIN"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "CREATED_BY" => 2, "TASKSIZE" => 3, "TASKSIZEREAL" => 4, "TASKFINISH" => 5, ), "ORDER_BY_0" => "TASKFINISH", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "DATE_ACTIVE_TO", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "TASKASSIGNEDTO" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "N", ), false ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_CREATED_BY_ACT"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "TASKASSIGNEDTO" => 3, "DATE_ACTIVE_FROM" => 4, "DATE_ACTIVE_TO" => 5, "TASKSTATUS" => 6, "TASKCOMPLETE" => 7, ), "ORDER_BY_0" => "TIMESTAMP_X", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "CREATED_BY" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "N", ), false ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_CREATED_BY_FIN"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TASKASSIGNEDTO" => 2, "TASKSIZE" => 3, "TASKSIZEREAL" => 4, "TASKFINISH" => 5, ), "ORDER_BY_0" => "TASKFINISH", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DATE_ACTIVE_TO", "FILTER" => Array( "TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "CREATED_BY" => "current", ), "THROUGH_SAMPLING" => ($taskType == "user" ? "Y" : "N"), "COMMON" => "N", ), false ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_TODAY"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TASKPRIORITY", "ORDER_DIR_0" => "ASC", "ORDER_BY_1" => "DATE_ACTIVE_TO", "ORDER_DIR_1" => "ASC", "FILTER" => Array( "TASKASSIGNEDTO" => "current", "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], "<DATE_ACTIVE_FROM" => "current", ), "THROUGH_SAMPLING" => "Y", "COMMON" => "N", ), false ); $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => "gant", "TITLE" => GetMessage("INTASK_I_GANT"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKASSIGNEDTO" => 4, "TASKPRIORITY" => 5, "DATE_ACTIVE_FROM" => 6, "DATE_ACTIVE_TO" => 7, "TASKSTATUS" => 8, "TASKCOMPLETE" => 9, ), "ORDER_BY_0" => "DATE_ACTIVE_TO", "ORDER_DIR_0" => "ASC", "ORDER_BY_1" => "TASKPRIORITY", "ORDER_DIR_1" => "ASC", "ORDER_BY_3" => "DATE_ACTIVE_FROM", "ORDER_DIR_3" => "ASC", "FILTER" => Array( "TASKASSIGNEDTO" => "current", "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], ), "THROUGH_SAMPLING" => "Y", "COMMON" => "N", ), false ); $userIBlockSectionId = 0; $dbSectionsList = CIBlockSection::GetList( array(), array( "GLOBAL_ACTIVE" => "Y", "EXTERNAL_ID" => "users_tasks", "IBLOCK_ID" => $iblockId, "SECTION_ID" => 0 ), false ); if ($arSection = $dbSectionsList->GetNext()) $userIBlockSectionId = $arSection["ID"]; $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_PERSONAL"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TIMESTAMP_X", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "TASKASSIGNEDTO" => $ownerId, "IBLOCK_SECTION" => $userIBlockSectionId, ), "THROUGH_SAMPLING" => "Y", "COMMON" => "N", ), false ); } elseif ($taskType == "user") { $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => "gant", "TITLE" => GetMessage("INTASK_I_GANT"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKASSIGNEDTO" => 4, "TASKPRIORITY" => 5, "DATE_ACTIVE_FROM" => 6, "DATE_ACTIVE_TO" => 7, "TASKSTATUS" => 8, "TASKCOMPLETE" => 9, ), "ORDER_BY_0" => "DATE_ACTIVE_TO", "ORDER_DIR_0" => "ASC", "ORDER_BY_1" => "TASKPRIORITY", "ORDER_DIR_1" => "ASC", "ORDER_BY_3" => "DATE_ACTIVE_FROM", "ORDER_DIR_3" => "ASC", "FILTER" => Array( "!TASKSTATUS" => $arTaskStatus["COMPLETED"]["ID"], ), "THROUGH_SAMPLING" => "Y", "COMMON" => "N", ), false ); $userIBlockSectionId = 0; $dbSectionsList = CIBlockSection::GetList( array(), array( "GLOBAL_ACTIVE" => "Y", "EXTERNAL_ID" => "users_tasks", "IBLOCK_ID" => $iblockId, "SECTION_ID" => 0 ), false ); if ($arSection = $dbSectionsList->GetNext()) $userIBlockSectionId = $arSection["ID"]; $newID++; CUserOptions::SetOption( "IntranetTasks", "Settings_".$newID, Array( "TEMPLATE" => ".default", "TITLE" => GetMessage("INTASK_I_PERSONAL"), "IBLOCK_ID" => $iblockId, "TASK_TYPE" => $taskType, "OWNER_ID" => $ownerId, "COLUMNS" => Array( "NAME" => 1, "TIMESTAMP_X" => 2, "CREATED_BY" => 3, "TASKPRIORITY" => 4, "DATE_ACTIVE_FROM" => 5, "DATE_ACTIVE_TO" => 6, "TASKSTATUS" => 7, "TASKCOMPLETE" => 8, ), "ORDER_BY_0" => "TIMESTAMP_X", "ORDER_DIR_0" => "DESC", "ORDER_BY_1" => "ID", "ORDER_DIR_1" => "DESC", "FILTER" => Array( "TASKASSIGNEDTO" => $ownerId, "IBLOCK_SECTION" => $userIBlockSectionId, ), "THROUGH_SAMPLING" => "Y", "COMMON" => "N", ), false ); } } function __InTaskDeleteView($delViewId, $iblockId, $taskType, $ownerId) { $delViewId = intval($delViewId); $iblockId = intval($iblockId); $ownerId = intval($ownerId); if ($delViewId <= 0 || $iblockId <= 0 || $ownerId <= 0) return ""; $errorMessage = ""; $userSettingsCategory = "IntranetTasks"; $userSettingsNamePart = "Settings_"; $arUserSettings = CUserOptions::GetOption($userSettingsCategory, $userSettingsNamePart.$delViewId, false, $GLOBALS["USER"]->GetID()); if (!$arUserSettings) $errorMessage .= GetMessage("INTL_VIEW_NOT_FOUND")."."; if ($errorMessage == '') { if ($arUserSettings["IBLOCK_ID"] != $iblockId || $arUserSettings["TASK_TYPE"] != $taskType || $arUserSettings["OWNER_ID"] != $ownerId) $errorMessage .= GetMessage("INTL_WRONG_VIEW")."."; } if ($errorMessage == '') { if ($arUserSettings["COMMON"] != "N") { if ( !CModule::IncludeModule('tasks') || !class_exists('\Bitrix\Tasks\Access\ActionDictionary') ) { $canModifyCommon = ( $taskType == 'user' && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_USER, $ownerId, "tasks", 'modify_common_views') || $taskType == 'group' && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_GROUP, $ownerId, "tasks", 'modify_common_views') ); } else { $canModifyCommon = ( $taskType == 'group' && CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), SONET_ENTITY_GROUP, $ownerId, "tasks", 'modify_common_views') ); } if (!$canModifyCommon) $errorMessage .= GetMessage("INTL_NO_VIEW_PERMS")."."; } } if ($errorMessage == '') { CUserOptions::DeleteOption($userSettingsCategory, $userSettingsNamePart.$delViewId, $arUserSettings["COMMON"] == "Y" ? true : false, $GLOBALS["USER"]->GetID()); } return $errorMessage; } } ?>