/** * Check files accessibility by user. * * @param array $arFilesIds * @param integer $userId * * @return array $arAccessMap, such as $arAccessMap = array('f' . $fileId => true/false, ...) */ public static function checkFilesAccessibilityByUser($arFilesIds, $userId) { $arAccessMap = array(); $arFilesIds = array_unique($arFilesIds); $arMustBeCheckedFilesIds = $arFilesIds; // for preventing check again already checked file id // Admin and B24-admin can view any file if (CTasksTools::IsAdmin($userId) || CTasksTools::IsPortalB24Admin($userId)) { foreach ($arFilesIds as $fileId) { $arAccessMap['f' . $fileId] = true; } return $arAccessMap; } // init access map to FALSE (access denied) by default foreach ($arFilesIds as $fileId) { $arAccessMap['f' . $fileId] = false; } // files that are temporary saved by user $arAccessibleFilesIds = self::getRegisteredTemporaryFilesList($userId); $arTmp = $arMustBeCheckedFilesIds; foreach ($arTmp as $key => $fileId) { if (in_array((int) $fileId, $arAccessibleFilesIds, true)) { $arAccessMap['f' . $fileId] = true; unset($arMustBeCheckedFilesIds[$key]); } } // user can access files, that are already attached to tasks, accessibly by user $arAccessibleFilesIds = self::getFilesAttachedInAccessibleTasks($userId, $arMustBeCheckedFilesIds); $arTmp = $arMustBeCheckedFilesIds; foreach ($arTmp as $key => $fileId) { if (in_array((int) $fileId, $arAccessibleFilesIds, true)) { $arAccessMap['f' . $fileId] = true; unset($arMustBeCheckedFilesIds[$key]); } } // check if file is in tasks' templates, that are accessible for this user if (!empty($arMustBeCheckedFilesIds)) { $arAccessibleFilesIds = self::getFilesAttachedInAccessibleTemplates($userId); foreach ($arMustBeCheckedFilesIds as $fileId) { if (in_array((int) $fileId, $arAccessibleFilesIds, true)) { $arAccessMap['f' . $fileId] = true; } } } return $arAccessMap; }
/** * @return bool */ public function canEdit() { $userId = $this->getUser()->getId(); // admin is always able to edit\remove comments if (Loader::includeModule("tasks") && (\CTasksTools::isAdmin($userId) || \CTasksTools::IsPortalB24Admin($userId))) { return true; } // if you are not an admin, you must obey "tasks" module settings if (!static::checkEditOptionIsOn()) { return false; } // you are not allowed to view the task, so you can not edit messages either (even own) if (!$this->checkHasAccess()) { return false; } // in all other ways - depends on "forum" module settings return parent::canEdit(); }
public static function tasks_extended_meta_occurInLogsAs($args) { $arMessages = array(); $parsedReturnValue = null; $withoutExceptions = false; try { if (!(CTasksTools::IsAdmin() || CTasksTools::IsPortalB24Admin())) { throw new TasksException('Only root can do this', TasksException::TE_ACCESS_DENIED); } CTaskAssert::assert(is_array($args) && count($args) == 1); $userId = array_pop($args); CTasksTools::setOccurAsUserId($userId); $parsedReturnValue = CTasksTools::getOccurAsUserId(); $withoutExceptions = true; } catch (CTaskAssertException $e) { $arMessages[] = array('id' => 'TASKS_ERROR_ASSERT_EXCEPTION', 'text' => 'TASKS_ERROR_ASSERT_EXCEPTION'); } catch (TasksException $e) { $errCode = $e->getCode(); $errMsg = $e->getMessage(); if ($e->GetCode() & TasksException::TE_FLAG_SERIALIZED_ERRORS_IN_MESSAGE) { $arMessages = unserialize($errMsg); } else { $arMessages[] = array('id' => 'TASKS_ERROR_EXCEPTION_#' . $errCode, 'text' => 'TASKS_ERROR_EXCEPTION_#' . $errCode . '; ' . $errMsg . '; ' . TasksException::renderErrorCode($e)); } } catch (Exception $e) { $errMsg = $e->getMessage(); if ($errMsg !== '') { $arMessages[] = array('text' => $errMsg, 'id' => 'TASKS_ERROR'); } } if ($withoutExceptions) { return $parsedReturnValue; } else { self::_emitError($arMessages); throw new Exception(); } }
function CanCurrentUserAdd($task) { global $USER; if (!($userID = $USER->GetID())) { return false; } elseif ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin() || $userID == $task["RESPONSIBLE_ID"] || is_array($task["ACCOMPLICES"]) && in_array($USER->GetID(), $task["ACCOMPLICES"])) { return true; } return false; }
$arParams["PATH_TO_USER_TEMPLATES_TEMPLATE"] = trim($arParams["PATH_TO_USER_TEMPLATES_TEMPLATE"]); if (strlen($arParams["PATH_TO_USER_TEMPLATES_TEMPLATE"]) <= 0) { $arParams["PATH_TO_USER_TEMPLATES_TEMPLATE"] = htmlspecialcharsbx($APPLICATION->GetCurPage() . "?" . $arParams["PAGE_VAR"] . "=user_templates_template&" . $arParams["USER_VAR"] . "=#user_id#&" . $arParams["TEMPLATE_VAR"] . "=#template_id#&" . $arParams["ACTION_VAR"] . "=#action#"); } $arParams["PATH_TO_TASKS"] = str_replace("#user_id#", $arParams["USER_ID"], $arParams["PATH_TO_USER_TASKS"]); $arParams["PATH_TO_TASKS_TASK"] = str_replace("#user_id#", $arParams["USER_ID"], $arParams["PATH_TO_USER_TASKS_TASK"]); $arParams["PATH_TO_TASKS_TEMPLATES"] = str_replace("#user_id#", $arParams["USER_ID"], $arParams["PATH_TO_USER_TASKS_TEMPLATES"]); $arParams["PATH_TO_TEMPLATES_TEMPLATE"] = str_replace("#user_id#", $arParams["USER_ID"], $arParams["PATH_TO_USER_TEMPLATES_TEMPLATE"]); $arParams['NAME_TEMPLATE'] = empty($arParams['NAME_TEMPLATE']) ? CSite::GetNameFormat(false) : str_replace(array("#NOBR#", "#/NOBR#"), array("", ""), $arParams["NAME_TEMPLATE"]); $rsUser = CUser::GetByID($arParams["USER_ID"]); if ($user = $rsUser->GetNext()) { $arResult["USER"] = $user; } else { return; } $arResult['USER_IS_ADMIN'] = CTasksTools::IsAdmin() || CTasksTools::IsPortalB24Admin(); if (array_key_exists("back_url", $_REQUEST) && strlen($_REQUEST["back_url"]) > 0) { $arResult["RETURN_URL"] = htmlspecialcharsbx(trim($_REQUEST["back_url"])); } else { $arResult["RETURN_URL"] = $arParams["PATH_TO_TASKS_TEMPLATES"]; } ################## ### dispatchAction $arData = array(); if (($arResult["ACTION"] == "edit" || $arResult["ACTION"] == "delete") && intval($arParams["TEMPLATE_ID"])) { $rsTemplate = CTaskTemplates::GetList(array(), array("ID" => $arParams["TEMPLATE_ID"]), array(), array('USER_ID' => $USER->getId()), array('*', 'UF_*', 'BASE_TEMPLATE_ID', 'TEMPLATE_CHILDREN_COUNT')); if (!($arData = $rsTemplate->GetNext())) { ShowError(GetMessage("TASKS_TEMPLATE_NOT_FOUND")); return; } else { $arData["ACCOMPLICES"] = $arData["~ACCOMPLICES"] ? unserialize($arData["~ACCOMPLICES"]) : array();
} $APPLICATION->IncludeComponent("bitrix:tasks.task.detail.parts", ".default", array('INNER_HTML' => $_POST['INNER_HTML'], 'MODE' => $_POST['MODE'], 'BLOCKS' => array($_POST['BLOCK']), 'IS_IFRAME' => $isIframe, 'PATH_TO_TEMPLATES_TEMPLATE' => $_POST['PATH_TO_TEMPLATES_TEMPLATE'], 'PATH_TO_USER_PROFILE' => $_POST['PATH_TO_USER_PROFILE'], 'PATH_TO_TASKS_TASK' => $_POST['PATH_TO_TASKS_TASK'], 'FIRE_ON_CHANGED_EVENT' => $_POST['FIRE_ON_CHANGED_EVENT'], 'NAME_TEMPLATE' => $nameTemplate, 'LOAD_TASK_DATA' => 'Y', 'TASK_ID' => (int) $_POST['TASK_ID']), null, array('HIDE_ICONS' => 'Y')); break; default: CTaskAssert::logError('[0x4fae6498] Unexpected $_POST[\'BLOCK\'] value: ' . $_POST['BLOCK']); break; } } else { CTaskAssert::logError('[0x0907bb31] $_POST[\'BLOCK\'] expected, but not given'); } } elseif ($action === 'render_comments') { CModule::IncludeModule('tasks'); CModule::IncludeModule('forum'); $permission = 'A'; $oTask = CTaskItem::getInstanceFromPool($_POST['taskId'], $loggedInUserId); $arTask = $oTask->getData($bEscape = false); $arTaskUsers = CTasks::__GetSearchPermissions($arTask); if ($USER->CanAccess($arTaskUsers) === true || $USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) { $permission = 'M'; } $APPLICATION->RestartBuffer(); header('Content-Type: text/html; charset=' . LANG_CHARSET); $APPLICATION->IncludeComponent("bitrix:forum.comments", "bitrix24", array("FORUM_ID" => $_POST['forumId'], "ENTITY_TYPE" => "TK", "ENTITY_ID" => $_POST['taskId'], "ENTITY_XML_ID" => "TASK_" . $_POST['taskId'], "URL_TEMPLATES_PROFILE_VIEW" => $_POST['PATH_TO_USER_PROFILE'], "MESSAGES_PER_PAGE" => $_POST['ITEM_DETAIL_COUNT'], "PAGE_NAVIGATION_TEMPLATE" => "arrows", "DATE_TIME_FORMAT" => CDatabase::DateFormatToPHP(FORMAT_DATETIME), "PATH_TO_SMILE" => $_POST['PATH_TO_FORUM_SMILE'], "EDITOR_CODE_DEFAULT" => "N", "SHOW_MODERATION" => "Y", "SHOW_AVATAR" => "Y", "SHOW_RATING" => $_POST['SHOW_RATING'], "RATING_TYPE" => $_POST['RATING_TYPE'], "SHOW_MINIMIZED" => "N", "USE_CAPTCHA" => "N", 'PREORDER' => 'N', "SHOW_LINK_TO_FORUM" => "N", "SHOW_SUBSCRIBE" => "N", "FILES_COUNT" => 10, "SHOW_WYSIWYG_EDITOR" => "Y", "AUTOSAVE" => true, "PERMISSION" => $permission, "NAME_TEMPLATE" => $_POST["NAME_TEMPLATE"], "MESSAGE_COUNT" => 3), null, array('HIDE_ICONS' => 'Y')); require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php'; exit; } else { CTaskAssert::logError('[0x447f7b28] Unknown action: ' . $action); } } CMain::FinalActions(); // to make events work on bitrix24
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $request = \Bitrix\Main\HttpApplication::getInstance()->getContext()->getRequest(); $arDefaultValues = array('GROUP_ID' => 0, 'SHOW_TASK_LIST_MODES' => 'Y', 'SHOW_HELP_ICON' => 'Y', 'SHOW_SEARCH_FIELD' => 'Y', 'SHOW_TEMPLATES_TOOLBAR' => 'Y', 'SHOW_QUICK_TASK_ADD' => 'Y', 'SHOW_ADD_TASK_BUTTON' => 'Y', 'SHOW_SECTIONS_BAR' => 'N', 'SHOW_FILTER_BAR' => 'N', 'SHOW_COUNTERS_BAR' => 'N', 'SHOW_SECTION_MANAGE' => 'A', 'MARK_ACTIVE_ROLE' => 'N', 'MARK_SECTION_MANAGE' => 'N', 'MARK_SECTION_PROJECTS' => 'N', 'MARK_SECTION_REPORTS' => 'N', 'SECTION_URL_PREFIX' => '', 'PATH_TO_DEPARTMENTS' => null, 'PATH_TO_REPORTS' => null); if (!isset($arParams['NAME_TEMPLATE'])) { $arParams['NAME_TEMPLATE'] = CSite::GetNameFormat(false); } $loggedInUserId = (int) $USER->getId(); $isAccessToCounters = $arParams['USER_ID'] == $loggedInUserId || $USER->isAdmin() || CTasksTools::IsPortalB24Admin() || CTasks::IsSubordinate($arParams['USER_ID'], $loggedInUserId); if ($arParams["GROUP_ID"] > 0) { $arParams['SHOW_SECTION_COUNTERS'] = 'N'; } if (!$isAccessToCounters) { $arParams['SHOW_SECTION_COUNTERS'] = 'N'; } // Set default values for omitted parameters foreach ($arDefaultValues as $paramName => $paramDefaultValue) { if (!array_key_exists($paramName, $arParams)) { $arParams[$paramName] = $paramDefaultValue; } } if (!$arParams['PATH_TO_REPORTS']) { $arParams['PATH_TO_REPORTS'] = $arParams['SECTION_URL_PREFIX'] . 'report/'; } if (!$arParams['PATH_TO_DEPARTMENTS']) { $arParams['PATH_TO_DEPARTMENTS'] = $arParams['SECTION_URL_PREFIX'] . 'departments/'; } if (isset($arParams['SHOW_SECTION_PROJECTS']) && $arParams['SHOW_SECTION_PROJECTS'] === 'Y' && isset($arParams['PATH_TO_PROJECTS']) && !empty($arParams['PATH_TO_PROJECTS']) && $arParams['USER_ID'] == $loggedInUserId) {
} $oTask = new CTasks(); if (!$bCreateMode) { // Only priveleged users can change or set any ORIGINATOR $arNewTaskFields['CREATED_BY'] = (int) $GLOBALS['USER']->GetID(); if ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) { $arNewTaskFields['CREATED_BY'] = (int) $_POST['CREATED_BY']; } $rc = $oTask->Update($arNewTaskFields['ID'], $arNewTaskFields); } else { $arNewTaskFields['MULTITASK'] = 'N'; $arNewTaskFields['CREATED_BY'] = (int) $GLOBALS['USER']->GetID(); $arNewTaskFields['DESCRIPTION_IN_BBCODE'] = 'Y'; // Only creator or priveleged user can set responsible person. $arNewTaskFields['RESPONSIBLE_ID'] = (int) $GLOBALS['USER']->GetID(); if ($arNewTaskFields['CREATED_BY'] === $arParams['USER_ID'] || $USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) { $arNewTaskFields['RESPONSIBLE_ID'] = (int) $_POST['RESPONSIBLE_ID']; } $arNewTaskFields['SITE_ID'] = SITE_ID; $rc = $oTask->Add($arNewTaskFields); if ($rc > 0) { $arNewTaskFields['ID'] = $rc; } else { $bErrorOccuredOnTaskCreation = true; } } unset($oTask); // Redirect to view details of this task if ($arNewTaskFields['ID'] > 0) { LocalRedirect(str_replace(array('#task_id#', '#TASK_ID#'), $arNewTaskFields['ID'], $arParams['PATH_TO_TASKS_TASK'])); }
public function isActionAllowed($actionId) { $isActionAllowed = false; CTaskAssert::assertLaxIntegers($actionId); $actionId = (int) $actionId; $isAdmin = CTasksTools::IsAdmin($this->executiveUserId) || CTasksTools::IsPortalB24Admin($this->executiveUserId); if ($actionId === self::ACTION_ADD) { $isActionAllowed = $this->oTaskItem->isActionAllowed(CTaskItem::ACTION_CHECKLIST_ADD_ITEMS); } elseif (in_array((int) $actionId, array(self::ACTION_MODIFY, self::ACTION_REMOVE, self::ACTION_TOGGLE), true)) { $arItemData = $this->getData($bEscape = false); if ($isAdmin || $arItemData['CREATED_BY'] == $this->executiveUserId) { $isActionAllowed = true; } elseif ($actionId == self::ACTION_TOGGLE) { // This can do director, responsible and accomplices if ($this->oTaskItem->isUserRole(CTaskItem::ROLE_DIRECTOR | CTaskItem::ROLE_RESPONSIBLE | CTaskItem::ROLE_ACCOMPLICE)) { $isActionAllowed = true; } } elseif ($actionId == self::ACTION_MODIFY || $actionId == self::ACTION_REMOVE) { // This can do director or user who can edit task if ($this->oTaskItem->isUserRole(CTaskItem::ROLE_DIRECTOR) || $this->oTaskItem->isActionAllowed(CTaskItem::ACTION_EDIT)) { $isActionAllowed = true; } } } return $isActionAllowed; }
var previousUserName = currentUserName = "******"NAME" => $USER->GetFirstName(), "LAST_NAME" => $USER->GetLastName(), "LOGIN" => $USER->GetLogin(), "SECOND_NAME" => $USER->GetSecondName()), true, false)); ?> "; var templateId = <?php echo intval($arParams['TEMPLATE_ID']); ?> ; var isAdmin = <?php echo $USER->isAdmin() ? "true" : "false"; ?> ; var isPortalB24Admin = <?php if (CTasksTools::IsPortalB24Admin()) { echo 'true'; } else { echo 'false'; } ?> ; BX.ready(function() { taskManagerForm.init({editorId: '<?php echo $taskDescriptionEditorId; ?> '}); }); </script> <form action="<?php
$arFilter["ACTIVE"]["START"] = $fActiveFrom; $arResult["ADV_FILTER"]["F_ACTIVE_FROM"] = $fActiveFrom; } if (strlen($fActiveTo = tasksGetFilter("F_ACTIVE_TO")) > 0) { $arFilter["ACTIVE"]["END"] = $fActiveTo; $arResult["ADV_FILTER"]["F_ACTIVE_TO"] = $fActiveTo; } if (($fStatus = tasksGetFilter("F_STATUS")) && array_key_exists($fStatus, $arResult["ADVANCED_STATUSES"]) > 0) { $arFilter = array_merge($arFilter, $arResult["ADVANCED_STATUSES"][$fStatus]["FILTER"]); $arResult["ADV_FILTER"]["F_STATUS"] = $fStatus; } if ($_GET["F_SUBORDINATE"] == "Y") { $arResult["ADV_FILTER"]["F_SUBORDINATE"] = "Y"; $arResult["ADV_FILTER"]["F_ANY_TASK"] = "N"; // Don't set SUBORDINATE_TASKS for admin, it will cause all tasks to be showed if (!($USER->IsAdmin() || CTasksTools::IsPortalB24Admin())) { $arFilter["SUBORDINATE_TASKS"] = "Y"; } } elseif ($_GET["F_ANY_TASK"] == "Y") { $arResult["ADV_FILTER"]["F_SUBORDINATE"] = "N"; $arResult["ADV_FILTER"]["F_ANY_TASK"] = "Y"; } else { $arFilter["MEMBER"] = $arParams["USER_ID"]; } if ($_GET["F_MARKED"] == "Y") { $arResult["ADV_FILTER"]["F_MARKED"] = "Y"; $arFilter["!MARK"] = false; } if ($_GET["F_OVERDUED"] == "Y") { $arResult["ADV_FILTER"]["F_OVERDUED"] = "Y"; $arFilter["OVERDUED"] = "Y";
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; }
protected static function getRuntimeFieldMixinsCheckRights($parameters) { $result = false; $parameters['USER_ID'] = Assert::expectIntegerPositive($parameters['USER_ID'], '$parameters[USER_ID]'); $rf = $parameters['REF_FIELD']; if (!\CTasksTools::IsAdmin($userId) && !\CTasksTools::IsPortalB24Admin($userId)) { list($conditions, $expression) = \CTasks::getPermissionFilterConditions($parameters, array('USE_PLACEHOLDERS' => true)); $conditions = "(case when (" . implode(' OR ', $conditions) . ") then '1' else '0' end)"; array_unshift($expression, $conditions); $query = new \Bitrix\Main\Entity\Query('Bitrix\\Tasks\\Task'); $query->registerRuntimeField('F', array('data_type' => 'string', 'expression' => $expression)); $query->setFilter(array('=F' => '1')); $query->setSelect(array('TASK_ID' => 'ID')); $result = new Entity\ReferenceField($parameters['NAME'], \Bitrix\Main\Entity\Base::getInstanceByQuery($query), array('=this.' . ((string) $rf != '' ? $rf : 'ID') => 'ref.TASK_ID'), array('join_type' => 'inner')); } return $result; }
?> </a></div> <input type="hidden" name="RESPONSIBLES_IDS" value="<?php echo is_array($arData["RESPONSIBLES"]) ? implode(",", $arData["RESPONSIBLES"]) : ""; ?> " /> </div> <?php $name = $APPLICATION->IncludeComponent("bitrix:intranet.user.selector.new", ".default", array("MULTIPLE" => "Y", "NAME" => "RESPONSIBLES", "VALUE" => $arData["RESPONSIBLES"], "POPUP" => "Y", "ON_CHANGE" => "onResponsiblesChange", "PATH_TO_USER_PROFILE" => $arParams["PATH_TO_USER_PROFILE"], "SITE_ID" => SITE_ID, "GROUP_ID_FOR_SITE" => isset($_GET["GROUP_ID"]) && intval($_GET["GROUP_ID"]) > 0 ? $_GET["GROUP_ID"] : (isset($arParams["GROUP_ID"]) && intval($arParams["GROUP_ID"]) > 0 ? $arParams["GROUP_ID"] : false), 'SHOW_EXTRANET_USERS' => 'FROM_MY_GROUPS', 'DISPLAY_TAB_GROUP' => 'Y', 'NAME_TEMPLATE' => $arParams["NAME_TEMPLATE"], 'SHOW_LOGIN' => 'Y'), null, array("HIDE_ICONS" => "Y")); ?> <?php } ?> <?php if ($arResult["ACTION"] === 'create' || $USER->isAdmin() || CTasksTools::IsPortalB24Admin() || $USER->GetID() == $arData['CREATED_BY'] || isset($arResult['ALLOWED_ACTIONS']) && $arResult['ALLOWED_ACTIONS']['ACTION_CHANGE_DIRECTOR']) { ?> <div class="webform-field task-director" id="task-director-employees-block"<?php if ($arData["MULTITASK"] == "Y") { ?> style="display:none;"<?php } ?> > <div class="task-director-item"> <a href="" class="webform-field-action-link" id="task-author-employee"><?php echo GetMessage("TASKS_DIRECTOR"); ?> :</a> <span><?php
global $APPLICATION; if ($bCommentsCanBeEdited && ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin() || $i == $editableCommentIndex && $USER->GetID() == $res["AUTHOR_ID"])) { ?> <a href="javascript: void(0);" onclick="Edit('<?php echo $res["FOR_JS"]["POST_MESSAGE"]; ?> ', '<?php echo $res["ID"]; ?> ');return false;"><?php echo GetMessage("F_EDIT"); ?> </a> | <?php } if ($bCommentsCanBeRemoved && ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin() || $i == $editableCommentIndex && $USER->GetID() == $res["AUTHOR_ID"])) { ?> <a href="javascript: void(0);" onclick="Remove('<?php echo $res["ID"]; ?> ');return false;"><?php echo GetMessage('F_REMOVE'); ?> </a> | <?php } ?> <a href="javascript: void(0);" onclick="Reply('<?php echo $res["FOR_JS"]["AUTHOR_NAME"]; ?>
$arResult['ERRORS'][] = array('text' => 'UNKNOWN ERROR OCCURED', 'id' => 'ERROR_TASKS_UNKNOWN'); } } $taskID = $arParams['TASK_ID']; } else { $arSectionIDs = CTasks::GetSubordinateDeps(); if ($_POST["MULTITASK"] == "Y" && sizeof($_POST["RESPONSIBLES"]) > 0) { $arFields["MULTITASK"] = "Y"; $arFields["RESPONSIBLE_ID"] = $loggedInUserId; if ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) { $arFields["CREATED_BY"] = $_POST["CREATED_BY"]; } } else { $arFields["MULTITASK"] = "N"; $arFields["CREATED_BY"] = $_POST["CREATED_BY"]; if ($arFields["CREATED_BY"] != $loggedInUserId && !$USER->IsAdmin() && !CTasksTools::IsPortalB24Admin()) { $arFields["RESPONSIBLE_ID"] = $loggedInUserId; } else { $arFields["RESPONSIBLE_ID"] = $_POST["RESPONSIBLE_ID"]; } } $arFields["SITE_ID"] = SITE_ID; $arFieldsToSave = $arFields; // transform UF files if (is_array($arFieldsToSave['UF_TASK_WEBDAV_FILES']) && !empty($arFieldsToSave['UF_TASK_WEBDAV_FILES']) && \Bitrix\Main\Loader::includeModule('disk')) { // find which files are new and which are old $old = array(); $new = array(); foreach ($arFieldsToSave['UF_TASK_WEBDAV_FILES'] as $fileId) { if ((string) $fileId) { if (strpos($fileId, 'n') === 0) {
/** * @deprecated */ private static function CheckUpdateRemoveCandidate($taskId, $commentId, $userId, $arParams) { $filter = array('TOPIC_ID' => $arParams['FORUM_TOPIC_ID']); // have no idea in which case the following parameters will be used: if (isset($arParams['FORUM_ID'])) { $filter['FORUM_ID'] = $arParams['FORUM_ID']; } if (isset($arParams['APPROVED'])) { $filter['APPROVED'] = $arParams['APPROVED']; } $res = CForumMessage::GetListEx(array('ID' => 'ASC'), $filter, false, 0, array('bShowAll' => true)); // Take last message $comment = false; $lastComment = false; $cnt = 0; while ($ar = $res->fetch()) { if ($ar['ID'] == $commentId) { $comment = $ar; } $lastComment = $ar; $cnt++; } if ($cnt == 0) { // no comments in the topic return false; } if (empty($comment)) { // comment not found return false; } if (CTasksTools::isAdmin($userId) || CTasksTools::IsPortalB24Admin($userId)) { return true; } elseif ($userId == $lastComment['AUTHOR_ID']) { if ($commentId != $lastComment['ID']) { // it's not the last comment return false; } else { return true; } } else { return false; } }
/** * @param $arOrder * @param $arFilter * @param array $arNavParams * @param array $arParams * @param array $arSelect * @return bool|CDBResult * * @global $DB CDatabase * @global $DBType string */ public static function GetList($arOrder, $arFilter, $arNavParams = array(), $arParams = array(), $arSelect = array()) { global $DB, $DBType, $USER_FIELD_MANAGER; $arSqlSearch = CTaskTemplates::GetFilter($arFilter, $arParams); // check permissions if (isset($arParams['USER_ID'])) { $executiveUserId = (int) $arParams['USER_ID']; $isAdmin = CTasksTools::IsAdmin($executiveUserId) || CTasksTools::IsPortalB24Admin($executiveUserId); if (!$isAdmin) { $sql = 'TT.CREATED_BY = ' . (int) $executiveUserId; if ($executiveUserId && ($arDepsIDs = CTasks::GetSubordinateDeps($executiveUserId))) { if (!is_array($arDepsIDs)) { $arDepsIDs = array(intval($arDepsIDs)); } /** @noinspection PhpDynamicAsStaticMethodCallInspection */ $rsDepartmentField = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => "USER", "FIELD_NAME" => "UF_DEPARTMENT")); $cntOfDepartments = count($arDepsIDs); if ($cntOfDepartments && ($arDepartmentField = $rsDepartmentField->Fetch())) { if (strtolower($DBType) === 'oracle' && ($valuesLimit = 1000) && $cntOfDepartments > $valuesLimit) { $arConstraints = array(); $sliceIndex = 0; while ($sliceIndex < $cntOfDepartments) { $arConstraints[] = 'BUF1.VALUE_INT IN (' . implode(',', array_slice($arDepsIDs, $sliceIndex, $valuesLimit)) . ')'; $sliceIndex += $valuesLimit; } $strConstraint = '(' . implode(' OR ', $arConstraints) . ')'; } else { $strConstraint = "BUF1.VALUE_INT IN (" . implode(",", $arDepsIDs) . ")"; } $sql .= "\n\t\t\t\t\t\t\tOR EXISTS (\n\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\t'x'\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\tb_utm_user BUF1\n\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\tBUF1.FIELD_ID = " . $arDepartmentField["ID"] . "\n\t\t\t\t\t\t\t\tAND BUF1.VALUE_ID = TT.CREATED_BY\n\t\t\t\t\t\t\t\tAND " . $strConstraint . "\n\t\t\t\t\t\t\t) "; } } $arSqlSearch[] = ' (' . $sql . ') '; } } $obUserFieldsSql = new CUserTypeSQL(); $obUserFieldsSql->SetEntity("TASKS_TASK_TEMPLATE", "TT.ID"); $obUserFieldsSql->SetSelect($arSelect); $obUserFieldsSql->SetFilter($arFilter); $obUserFieldsSql->SetOrder($arOrder); $r = $obUserFieldsSql->GetFilter(); if (strlen($r) > 0) { $arSqlSearch[] = "(" . $r . ")"; } $arFields = array('ID' => array('FIELD' => 'TT.ID', 'DEFAULT' => true), 'TITLE' => array('FIELD' => 'TT.TITLE', 'DEFAULT' => true), 'DESCRIPTION' => array('FIELD' => 'TT.DESCRIPTION', 'DEFAULT' => true), 'DESCRIPTION_IN_BBCODE' => array('FIELD' => 'TT.DESCRIPTION_IN_BBCODE', 'DEFAULT' => true), 'PRIORITY' => array('FIELD' => 'TT.PRIORITY', 'DEFAULT' => true), 'STATUS' => array('FIELD' => 'TT.STATUS', 'DEFAULT' => true), 'RESPONSIBLE_ID' => array('FIELD' => 'TT.RESPONSIBLE_ID', 'DEFAULT' => true), 'DEADLINE_AFTER' => array('FIELD' => 'TT.DEADLINE_AFTER', 'DEFAULT' => true), 'REPLICATE' => array('FIELD' => 'TT.REPLICATE', 'DEFAULT' => true), 'REPLICATE_PARAMS' => array('FIELD' => 'TT.REPLICATE_PARAMS', 'DEFAULT' => true), 'CREATED_BY' => array('FIELD' => 'TT.CREATED_BY', 'DEFAULT' => true), 'XML_ID' => array('FIELD' => 'TT.XML_ID', 'DEFAULT' => true), 'ALLOW_CHANGE_DEADLINE' => array('FIELD' => 'TT.ALLOW_CHANGE_DEADLINE', 'DEFAULT' => true), 'ALLOW_TIME_TRACKING' => array('FIELD' => 'TT.ALLOW_TIME_TRACKING', 'DEFAULT' => true), 'TASK_CONTROL' => array('FIELD' => 'TT.TASK_CONTROL', 'DEFAULT' => true), 'ADD_IN_REPORT' => array('FIELD' => 'TT.ADD_IN_REPORT', 'DEFAULT' => true), 'GROUP_ID' => array('FIELD' => 'TT.GROUP_ID', 'DEFAULT' => true), 'PARENT_ID' => array('FIELD' => 'TT.PARENT_ID', 'DEFAULT' => true), 'MULTITASK' => array('FIELD' => 'TT.MULTITASK', 'DEFAULT' => true), 'SITE_ID' => array('FIELD' => 'TT.SITE_ID', 'DEFAULT' => true), 'ACCOMPLICES' => array('FIELD' => 'TT.ACCOMPLICES', 'DEFAULT' => true), 'AUDITORS' => array('FIELD' => 'TT.AUDITORS', 'DEFAULT' => true), 'RESPONSIBLES' => array('FIELD' => 'TT.RESPONSIBLES', 'DEFAULT' => true), 'FILES' => array('FIELD' => 'TT.FILES', 'DEFAULT' => true), 'TAGS' => array('FIELD' => 'TT.TAGS', 'DEFAULT' => true), 'DEPENDS_ON' => array('FIELD' => 'TT.DEPENDS_ON', 'DEFAULT' => true), 'TASK_ID' => array('FIELD' => 'TT.TASK_ID', 'DEFAULT' => true), 'TPARAM_TYPE' => array('FIELD' => 'TT.TPARAM_TYPE', 'DEFAULT' => true), 'BASE_TEMPLATE_ID' => array('FIELD' => 'CASE WHEN TDD.' . Template\DependencyTable::getPARENTIDColumnName() . ' IS NULL THEN 0 ELSE TDD.' . Template\DependencyTable::getPARENTIDColumnName() . ' END', 'DEFAULT' => false), 'TEMPLATE_CHILDREN_COUNT' => array('FIELD' => 'CASE WHEN TEMPLATE_CHILDREN_COUNT IS NULL THEN 0 ELSE TEMPLATE_CHILDREN_COUNT END', 'DEFAULT' => false), 'CREATED_BY_NAME' => array('FIELD' => 'CU.NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_LAST_NAME' => array('FIELD' => 'CU.LAST_NAME ', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_SECOND_NAME' => array('FIELD' => 'CU.SECOND_NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_LOGIN' => array('FIELD' => 'CU.LOGIN', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_WORK_POSITION' => array('FIELD' => 'CU.WORK_POSITION', 'DEFAULT' => true, 'ALWAYS' => true), 'CREATED_BY_PHOTO' => array('FIELD' => 'CU.PERSONAL_PHOTO', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_NAME' => array('FIELD' => 'RU.NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_LAST_NAME' => array('FIELD' => 'RU.LAST_NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_SECOND_NAME' => array('FIELD' => 'RU.SECOND_NAME', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_LOGIN' => array('FIELD' => 'RU.LOGIN', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_WORK_POSITION' => array('FIELD' => 'RU.WORK_POSITION', 'DEFAULT' => true, 'ALWAYS' => true), 'RESPONSIBLE_PHOTO' => array('FIELD' => 'RU.PERSONAL_PHOTO', 'DEFAULT' => true, 'ALWAYS' => true)); $filterByBaseTemplate = false; $selectBaseTemplateId = false; $useChildrenCount = false; if (!is_array($arSelect)) { $arSelect = array(); } $defaultSelect = array(); $alwaysSelect = array(); foreach ($arFields as $field => $rule) { if ($rule['DEFAULT']) { $defaultSelect[] = $field; } if ($rule['ALWAYS']) { $alwaysSelect[] = $field; } } if (count($arSelect) <= 0) { $arSelect = $defaultSelect; } elseif (in_array("*", $arSelect)) { $arSelect = array_diff(array_merge($defaultSelect, $arSelect), array("*")); } $arSelect = array_merge($arSelect, $alwaysSelect); $selectBaseTemplateId = in_array('BASE_TEMPLATE_ID', $arSelect); $useChildrenCount = in_array('TEMPLATE_CHILDREN_COUNT', $arSelect); if (!is_array($arOrder)) { $arOrder = array(); } foreach ($arOrder as $field => $direction) { if ($field == 'BASE_TEMPLATE_ID') { $selectBaseTemplateId = true; } if ($field == 'TEMPLATE_CHILDREN_COUNT') { $useChildrenCount = true; } } if (!is_array($arFilter)) { $arFilter = array(); } if (!is_array($arParams)) { $arParams = array(); } foreach ($arFilter as $key => $value) { $keyParsed = CTasks::MkOperationFilter($key); if ($keyParsed['FIELD'] == 'BASE_TEMPLATE_ID') { $filterByBaseTemplate = true; } if ($keyParsed['FIELD'] == 'TEMPLATE_CHILDREN_COUNT') { $useChildrenCount = true; } } $includeSubtree = $arParams['INCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['INCLUDE_TEMPLATE_SUBTREE'] === 'Y'; $excludeSubtree = $arParams['EXCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['EXCLUDE_TEMPLATE_SUBTREE'] === 'Y'; $treeJoin = ''; if ($excludeSubtree) { $treeJoin = ""; } else { $treeJoin = "LEFT JOIN " . Template\DependencyTable::getTableName() . " TD on TT.ID = TD.TEMPLATE_ID" . ($includeSubtree ? "" : " AND TD.DIRECT = '1'"); } $temporalTableName = \Bitrix\Tasks\DB\Helper::getTemporaryTableNameSql(); $strFrom = "FROM\n\t\t\t\tb_tasks_template TT\n\n\t\t\t" . $treeJoin . "\n\n\t\t\t" . ($selectBaseTemplateId ? "\n\t\t\tLEFT JOIN\n\t\t\t\t" . Template\DependencyTable::getTableName() . " TDD ON TT.ID = TDD.TEMPLATE_ID AND TDD.DIRECT = '1'\n\t\t\t" : "\n\t\t\t") . "\n\n\t\t\t" . ($useChildrenCount ? "\n\t\t\t\tLEFT JOIN (\n\t\t\t\t\tSELECT TTI.ID, COUNT(TDDC.TEMPLATE_ID) AS TEMPLATE_CHILDREN_COUNT\n\t\t\t\t\tfrom\n\t\t\t\t\t\tb_tasks_template TTI\n\t\t\t\t\t\tINNER JOIN " . Template\DependencyTable::getTableName() . " TDDC ON TTI.ID = TDDC.PARENT_TEMPLATE_ID AND TDDC.DIRECT = '1'\n\t\t\t\t\tGROUP BY TTI.ID\n\t\t\t\t) " . $temporalTableName . " on " . $temporalTableName . ".ID = TT.ID\n\t\t\t" : "\n\t\t\t") . "\n\n\t\t\tLEFT JOIN\n\t\t\t\tb_user CU ON CU.ID = TT.CREATED_BY\n\t\t\tLEFT JOIN\n\t\t\t\tb_user RU ON RU.ID = TT.RESPONSIBLE_ID\n\t\t\t\n\t\t\t" . $obUserFieldsSql->GetJoin("TT.ID") . "\n\n\t\t\t" . (sizeof($arSqlSearch) ? "WHERE " . implode(" AND ", $arSqlSearch) : "") . " "; foreach ($arOrder as $by => $order) { $by = strtolower($by); $order = strtolower($order); if ($order != "asc") { $order = "desc"; } if ($by == "task") { $arSqlOrder[] = " TT " . $order . " "; } elseif ($by == "title") { $arSqlOrder[] = " TT.TITLE " . $order . " "; } elseif ($by == "depends_on") { $arSqlOrder[] = " TT.DEPENDS_ON " . $order . " "; } elseif ($by == "rand") { $arSqlOrder[] = CTasksTools::getRandFunction(); } elseif ($by === 'responsible_last_name') { $arSqlOrder[] = " RU.LAST_NAME " . $order . " "; } elseif ($by === 'tparam_type') { $arSqlOrder[] = " TT.TPARAM_TYPE " . $order . " "; } elseif ($by === 'template_children_count') { $arSqlOrder[] = " TEMPLATE_CHILDREN_COUNT " . $order . " "; } elseif ($by === 'base_template_id') { $arSqlOrder[] = " BASE_TEMPLATE_ID " . $order . " "; } elseif (substr($by, 0, 3) === 'uf_') { if ($s = $obUserFieldsSql->GetOrder($by)) { $arSqlOrder[$by] = " " . $s . " " . $order . " "; } } else { $arSqlOrder[] = " TT.ID " . $order . " "; $by = "id"; } if ($by !== 'rand' && !in_array(strtoupper($by), $arSelect)) { $arSelect[] = strtoupper($by); } } $strSqlOrder = ""; DelDuplicateSort($arSqlOrder); $arSqlOrderCnt = count($arSqlOrder); for ($i = 0; $i < $arSqlOrderCnt; $i++) { if ($i == 0) { $strSqlOrder = " ORDER BY "; } else { $strSqlOrder .= ","; } $strSqlOrder .= $arSqlOrder[$i]; } if (!in_array("ID", $arSelect)) { $arSelect[] = "ID"; } $arSqlSelect = array(); foreach ($arSelect as $field) { $field = strtoupper($field); if (array_key_exists($field, $arFields)) { $arSqlSelect[$field] = \Bitrix\Tasks\DB\Helper::wrapColumnWithFunction($arFields[$field]['FIELD'], $arFields[$field]['WRAP']) . " AS " . $field; } } if (!sizeof($arSqlSelect)) { $arSqlSelect = "TT.ID AS ID"; } else { $arSqlSelect = implode(",\n", $arSqlSelect); } $ufSelect = $obUserFieldsSql->GetSelect(); if (strlen($ufSelect)) { $arSqlSelect .= $ufSelect; } $strSql = "\n\t\t\tSELECT \n\t\t\t\t" . $arSqlSelect . "\n\t\t\t\t" . $strFrom . "\n\t\t\t\t" . $strSqlOrder; if (isset($arNavParams["NAV_PARAMS"]) && is_array($arNavParams["NAV_PARAMS"])) { $nTopCount = (int) $arNavParams['NAV_PARAMS']['nTopCount']; if ($nTopCount > 0) { $strSql = $DB->TopSql($strSql, $nTopCount); $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("TASKS_TASK_TEMPLATE")); } else { $res_cnt = $DB->Query("SELECT COUNT(TT.ID) as C " . $strFrom); $res_cnt = $res_cnt->Fetch(); $res = new CDBResult(); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("TASKS_TASK_TEMPLATE")); $res->NavQuery($strSql, $res_cnt["C"], $arNavParams["NAV_PARAMS"]); } } else { $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("TASKS_TASK_TEMPLATE")); } return $res; }
public static function SaveTask($tasksData) { $rc = false; if (!$GLOBALS['USER']->IsAuthorized()) { return false; } $delegateToUser = false; if (isset($tasksData['META::DELEGATE_TO_USER'])) { $delegateToUser = (int) $tasksData['META::DELEGATE_TO_USER']; } $bDelegate = false; if ($delegateToUser > 0) { $bDelegate = true; } $curUserId = (int) $GLOBALS['USER']->GetID(); if (!CModule::IncludeModule('socialnetwork')) { return false; } $arNewTaskFields = false; $bErrorOccuredOnTaskCreation = false; if (isset($tasksData['TASK_ID']) && check_bitrix_sessid()) { $bCreateMode = true; if ($tasksData['TASK_ID'] > 0) { $bCreateMode = false; } // We are in edit mode if ($bCreateMode && $bDelegate) { throw new Exception('$bCreateMode && $bDelegate'); } if (!$bCreateMode && $bDelegate) { $arNewTaskFields = array(); if (intval($delegateToUser) !== $curUserId) { $arNewTaskFields['RESPONSIBLE_ID'] = $delegateToUser; $arNewTaskFields['STATUS'] = CTasks::STATE_PENDING; $rsTask = CTasks::GetByID($tasksData['TASK_ID']); $arTask = $rsTask->Fetch(); if (!$arTask || !isset($arTask['ID'])) { return false; } if (sizeof($arTask['AUDITORS'] > 0)) { if (!in_array($curUserId, $arTask['AUDITORS'])) { $arNewTaskFields['AUDITORS'] = $arTask['AUDITORS']; $arNewTaskFields['AUDITORS'][] = $curUserId; } } else { $arNewTaskFields['AUDITORS'] = array($curUserId); } } else { return false; } } else { $arNewTaskFields = array('TITLE' => $tasksData['TITLE'], 'DESCRIPTION' => $tasksData['DESCRIPTION'], 'RESPONSIBLE_ID' => $tasksData['RESPONSIBLE_ID'], 'PRIORITY' => $tasksData['PRIORITY'], 'DEADLINE' => CAllDatabase::FormatDate(str_replace('T', ' ', $tasksData['DEADLINE']), 'YYYY-MM-DD HH:MI:SS', FORMAT_DATETIME)); if (isset($tasksData['ACCOMPLICES'])) { if ($tasksData['ACCOMPLICES'] == -1) { $arNewTaskFields['ACCOMPLICES'] = array(); } else { $arNewTaskFields['ACCOMPLICES'] = $tasksData['ACCOMPLICES']; } } if (isset($tasksData['AUDITORS'])) { if ($tasksData['AUDITORS'] == -1) { $arNewTaskFields['AUDITORS'] = array(); } else { $arNewTaskFields['AUDITORS'] = $tasksData['AUDITORS']; } } $arNewTaskFields['GROUP_ID'] = 0; if (isset($tasksData['GROUP_ID']) && intval($tasksData['GROUP_ID']) > 0) { if (CSocNetFeaturesPerms::CurrentUserCanPerformOperation(SONET_ENTITY_GROUP, (int) $tasksData['GROUP_ID'], 'tasks', 'create_tasks')) { $arNewTaskFields['GROUP_ID'] = (int) $tasksData['GROUP_ID']; } else { unset($arNewTaskFields['GROUP_ID']); } } if ($bCreateMode) { $arNewTaskFields['CREATED_BY'] = $curUserId; } } if (isset($tasksData['META::EVENT_GUID'])) { $arNewTaskFields['META::EVENT_GUID'] = $tasksData['META::EVENT_GUID']; } if ($bCreateMode) { $arNewTaskFields['ID'] = 0; } else { $arNewTaskFields['ID'] = (int) $tasksData['TASK_ID']; } $oTask = new CTasks(); if (!$bCreateMode) { $rc = $oTask->Update($arNewTaskFields['ID'], $arNewTaskFields); } else { $arNewTaskFields['MULTITASK'] = 'N'; $arNewTaskFields['DESCRIPTION_IN_BBCODE'] = 'Y'; // Only creator or priveleged user can set responsible person. $arNewTaskFields['RESPONSIBLE_ID'] = $curUserId; if ($arNewTaskFields['CREATED_BY'] === $curUserId || $GLOBALS['USER']->IsAdmin() || CTasksTools::IsPortalB24Admin()) { $arNewTaskFields['RESPONSIBLE_ID'] = (int) $tasksData['RESPONSIBLE_ID']; } $arNewTaskFields['SITE_ID'] = SITE_ID; $rc = $oTask->Add($arNewTaskFields); if ($rc > 0) { $arNewTaskFields['ID'] = $rc; } else { $bErrorOccuredOnTaskCreation = true; } } $rc = $arNewTaskFields['ID']; } if ($bErrorOccuredOnTaskCreation) { return false; } return $rc; }
public function isActionAllowed($actionId) { $isActionAllowed = false; CTaskAssert::assertLaxIntegers($actionId); $actionId = (int) $actionId; $isAdmin = CTasksTools::IsAdmin($this->executiveUserId) || CTasksTools::IsPortalB24Admin($this->executiveUserId); if ($actionId === self::ACTION_ELAPSED_TIME_ADD) { $isActionAllowed = $this->oTaskItem->isActionAllowed(CTaskItem::ACTION_ELAPSED_TIME_ADD); } elseif ($actionId === self::ACTION_ELAPSED_TIME_MODIFY || $actionId === self::ACTION_ELAPSED_TIME_REMOVE) { $arItemData = $this->getData($bEscape = false); if ($isAdmin || $arItemData['USER_ID'] == $this->executiveUserId) { $isActionAllowed = true; } } return $isActionAllowed; }
private static function getAllowedActionsArrayInternal($executiveUserId, array $arTaskData, $bmUserRoles) { $arBaseAllowedActions = self::getBaseAllowedActions(); $arActualBaseAllowedActions = $arBaseAllowedActions[$arTaskData['REAL_STATUS']]; // actions allowed on read-access $arAllowedActions = array(self::ACTION_TOGGLE_FAVORITE); if ($arTaskData['FAVORITE'] == 'Y') { $arAllowedActions[] = self::ACTION_DELETE_FAVORITE; } else { $arAllowedActions[] = self::ACTION_ADD_FAVORITE; } $mergesCount = 0; if (is_array($arActualBaseAllowedActions)) { foreach ($arActualBaseAllowedActions as $userRole => $arActions) { if ($userRole & $bmUserRoles) { $arAllowedActions = array_merge($arAllowedActions, $arActions); ++$mergesCount; } } } if ($mergesCount > 1) { $arAllowedActions = array_unique($arAllowedActions); } $isAdmin = CTasksTools::IsAdmin($executiveUserId) || CTasksTools::IsPortalB24Admin($executiveUserId); if (self::$bSocialNetworkModuleIncluded === null) { self::$bSocialNetworkModuleIncluded = CModule::IncludeModule('socialnetwork'); } // Admin always can edit and remove, also implement rights from task group if (!in_array(self::ACTION_REMOVE, $arAllowedActions, true)) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ if ($isAdmin || $arTaskData['GROUP_ID'] > 0 && self::$bSocialNetworkModuleIncluded && CSocNetFeaturesPerms::CanPerformOperation($executiveUserId, SONET_ENTITY_GROUP, $arTaskData['GROUP_ID'], 'tasks', 'delete_tasks')) { $arAllowedActions[] = self::ACTION_REMOVE; } } if (!in_array(self::ACTION_EDIT, $arAllowedActions, true)) { /** @noinspection PhpDynamicAsStaticMethodCallInspection */ if ($isAdmin || $arTaskData['GROUP_ID'] > 0 && self::$bSocialNetworkModuleIncluded && CSocNetFeaturesPerms::CanPerformOperation($executiveUserId, SONET_ENTITY_GROUP, $arTaskData['GROUP_ID'], 'tasks', 'edit_tasks')) { $arAllowedActions[] = self::ACTION_EDIT; } } // Precache result of slow 'in_array' function $bCanEdit = in_array(self::ACTION_EDIT, $arAllowedActions, true); // User can change deadline, if ... if ($isAdmin || $bCanEdit || $arTaskData['ALLOW_CHANGE_DEADLINE'] === 'Y' && self::ROLE_RESPONSIBLE & $bmUserRoles) { $arAllowedActions[] = self::ACTION_CHANGE_DEADLINE; } // If user can edit task, he can also add elapsed time and checklist items if ($isAdmin || $bCanEdit) { $arAllowedActions[] = self::ACTION_ELAPSED_TIME_ADD; $arAllowedActions[] = self::ACTION_CHECKLIST_ADD_ITEMS; } // Director can change director, and user who can edit can if ($isAdmin || $bCanEdit || self::ROLE_DIRECTOR & $bmUserRoles) { $arAllowedActions[] = self::ACTION_CHANGE_DIRECTOR; } if ($arTaskData['ALLOW_TIME_TRACKING'] === 'Y') { // User can do time tracking, if he is participant in the task if ($executiveUserId == $arTaskData['RESPONSIBLE_ID'] || !empty($arTaskData['ACCOMPLICES']) && in_array($executiveUserId, $arTaskData['ACCOMPLICES'])) { $arAllowedActions[] = self::ACTION_START_TIME_TRACKING; } } return array_values(array_unique($arAllowedActions)); }
private function getInitDepartmentsIds() { global $USER; // Start from given department or from user-managed if (isset($_GET['DEP_ID'])) { $startFromDepartmentsDraft = array((int) $_GET['DEP_ID']); } else { // Departments where given user is head $startFromDepartmentsDraft = array_unique(array_filter(array_map('intval', CIntranetUtils::GetSubordinateDepartments($this->arParams['USER_ID'], $bRecursive = false)))); } if ($USER->isAdmin() || CTasksTools::IsPortalB24Admin()) { // access to any departments $startFromDepartments = $startFromDepartmentsDraft; } else { $arAllAccessibleDepartments = array_unique(array_filter(array_map('intval', CIntranetUtils::GetSubordinateDepartments($this->arResult['LOGGED_IN_USER'], $bRecursive = true)))); $startFromDepartments = array(); foreach ($startFromDepartmentsDraft as $departmentId) { if (in_array($departmentId, $arAllAccessibleDepartments, true)) { $startFromDepartments[] = $departmentId; } } } return $startFromDepartments; }