Beispiel #1
0
 /**
  * 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;
 }
Beispiel #2
0
 /**
  * @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();
 }
Beispiel #3
0
 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();
     }
 }
Beispiel #4
0
 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;
 }
Beispiel #5
0
$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();
Beispiel #6
0
                    }
                    $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
Beispiel #7
0
<?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) {
Beispiel #8
0
 }
 $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']));
 }
Beispiel #9
0
 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;
 }
Beispiel #10
0
	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 
Beispiel #11
0
     $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";
Beispiel #12
0
 function CanCurrentUserViewTopic($topicID)
 {
     global $USER;
     $isSocNetModuleIncluded = CModule::IncludeModule("socialnetwork");
     if (($topicID = intval($topicID)) && is_object($USER)) {
         if ($USER->IsAdmin() || CTasksTools::IsPortalB24Admin()) {
             return true;
         }
         $rsTask = $res = CTasks::GetList(array(), array("FORUM_TOPIC_ID" => $topicID));
         if ($arTask = $rsTask->Fetch()) {
             if ((int) $arTask['GROUP_ID'] > 0) {
                 if (in_array(CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $arTask["GROUP_ID"], "tasks", "view_all"), array("G2", "AU"))) {
                     return true;
                 } elseif ($isSocNetModuleIncluded && false !== CSocNetFeaturesPerms::CurrentUserCanPerformOperation(SONET_ENTITY_GROUP, $arTask['GROUP_ID'], 'tasks', 'view_all')) {
                     return true;
                 }
             }
             $arTask["ACCOMPLICES"] = $arTask["AUDITORS"] = array();
             $rsMembers = CTaskMembers::GetList(array(), array("TASK_ID" => $arTask["ID"]));
             while ($arMember = $rsMembers->Fetch()) {
                 if ($arMember["TYPE"] == "A") {
                     $arTask["ACCOMPLICES"][] = $arMember["USER_ID"];
                 } elseif ($arMember["TYPE"] == "U") {
                     $arTask["AUDITORS"][] = $arMember["USER_ID"];
                 }
             }
             if (in_array($USER->GetID(), array_unique(array_merge(array($arTask["CREATED_BY"], $arTask["RESPONSIBLE_ID"]), $arTask["ACCOMPLICES"], $arTask["AUDITORS"])))) {
                 return true;
             }
             $dbRes = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => $arTask["RESPONSIBLE_ID"]), array('SELECT' => array('UF_DEPARTMENT')));
             if (($arRes = $dbRes->Fetch()) && is_array($arRes['UF_DEPARTMENT']) && count($arRes['UF_DEPARTMENT']) > 0) {
                 if (in_array($USER->GetID(), array_keys(CTasks::GetDepartmentManagers($arRes['UF_DEPARTMENT'], $arTask["RESPONSIBLE_ID"])))) {
                     return true;
                 }
             }
         }
     }
     return false;
 }
Beispiel #13
0
 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;
 }
Beispiel #14
0
    ?>
</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 
Beispiel #15
0
        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>&nbsp; | &nbsp;<?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>&nbsp; | &nbsp;<?php 
        }
        ?>
<a href="javascript: void(0);" 
							onclick="Reply('<?php 
        echo $res["FOR_JS"]["AUTHOR_NAME"];
        ?>
Beispiel #16
0
             $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) {
Beispiel #17
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;
     }
 }
Beispiel #18
0
 /**
  * @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;
 }
Beispiel #19
0
 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;
 }
Beispiel #20
0
 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;
 }
Beispiel #21
0
 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));
 }
Beispiel #22
0
 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;
 }