Пример #1
0
 private static function getSubUsers($userId)
 {
     static $arSubUsersIdsCache = array();
     if (!isset($arSubUsersIdsCache[$userId])) {
         $arSubUsersIds = array();
         /** @noinspection PhpDynamicAsStaticMethodCallInspection */
         $rsSubUsers = CIntranetUtils::GetSubordinateEmployees($userId, $bRecursive = true, $bSkipSelf = false, $onlyActive = 'Y');
         while ($ar = $rsSubUsers->fetch()) {
             $arSubUsersIds[] = (int) $ar['ID'];
         }
         $arSubUsersIdsCache[$userId] = $arSubUsersIds;
     }
     return $arSubUsersIdsCache[$userId];
 }
Пример #2
0
 $arFields['DEADLINE'] = $_REQUEST['AGENDA_DEADLINE'][$key];
 if (isset($_REQUEST['AGENDA_TYPE'][$key])) {
     $arFields['INSTANCE_TYPE'] = $_REQUEST['AGENDA_TYPE'][$key] == CMeetingInstance::TYPE_TASK ? CMeetingInstance::TYPE_TASK : CMeetingInstance::TYPE_AGENDA;
 }
 if ($bNew) {
     $arFields['ORIGINAL_TYPE'] = $_REQUEST['AGENDA_ORIGINAL'][$key] == CMeetingInstance::TYPE_TASK ? CMeetingInstance::TYPE_TASK : CMeetingInstance::TYPE_AGENDA;
 }
 if (isset($_REQUEST['AGENDA_PARENT'][$key])) {
     $arFields['INSTANCE_PARENT_ID'] = intval($_REQUEST['AGENDA_PARENT'][$key]);
 }
 if ($_REQUEST['AGENDA_TASK'][$key] && !$arResult['MEETING']['AGENDA'][$key]['TASK_ID']) {
     $TASK_ID = intval($_REQUEST['AGENDA_TASK'][$key]);
     if ($TASK_ID <= 0) {
         if ($arEmplIDs === null) {
             $arEmplIDs = array();
             $dbEmpl = CIntranetUtils::GetSubordinateEmployees($arResult['MEETING']['OWNER_ID'], true);
             while ($arEmpl = $dbEmpl->Fetch()) {
                 $arEmplIDs[$arEmpl['ID']] = true;
             }
         }
         $taskDeadline = '';
         // Skip invalid deadline
         if (isset($arFields['DEADLINE']) && MakeTimeStamp($arFields['DEADLINE']) > 0) {
             $taskDeadline = $arFields['DEADLINE'];
         }
         $responsibleId = $arFields['RESPONSIBLE'][0];
         $arTaskFields = array('RESPONSIBLE_ID' => $responsibleId > 0 ? $responsibleId : $USER->GetID(), 'TITLE' => strlen($arFields['TITLE']) > 0 ? $arFields['TITLE'] : $arResult['MEETING']['AGENDA'][$key]['TITLE'], 'DEADLINE' => $taskDeadline, 'TAGS' => array(), 'STATUS' => array_key_exists($arFields['RESPONSIBLE'][0], $arEmplIDs) ? 2 : 1, 'SITE_ID' => SITE_ID);
         if ($arResult['MEETING']['OWNER_ID'] && $arResult['MEETING']['OWNER_ID'] != $USER->GetID()) {
             $arTaskFields['CREATED_BY'] = $arResult['MEETING']['OWNER_ID'];
             $arTaskFields['AUDITORS'] = array($USER->GetID());
         }
Пример #3
0
}
if (strlen($arParams["NAME_TEMPLATE"]) <= 0) {
    $arParams["NAME_TEMPLATE"] = CSite::GetNameFormat();
}
$arParams['PAGER_TITLE'] = trim($arParams['PAGER_TITLE']);
if (strlen($arParams['PAGER_TITLE']) <= 0) {
    $arParams['PAGER_TITLE'] = GetMessage('ML_PAGER_TITLE');
}
$arResult['MEETINGS'] = array();
$arResult['USERS'] = array();
$arUserIDs = array($arParams['USER_ID']);
CPageOption::SetOptionString("main", "nav_page_in_session", "N");
$arNavParams = array("nPageSize" => $arParams["MEETINGS_COUNT"], "bDescPageNumbering" => false, "bShowAll" => false);
$arSubIDs = array($USER->GetID());
$arResult['SUB_EMPLOYEES'] = array();
$dbUsers = CIntranetUtils::GetSubordinateEmployees($arParams['USER_ID'], true);
while ($arUser = $dbUsers->Fetch()) {
    $arSubIDs[] = $arUser['ID'];
    $arResult['SUB_EMPLOYEES'][$arUser['ID']] = $arUser;
}
$arResult['IS_HEAD'] = count($arSubIDs) > 0;
$arFilter = array("USER_ID" => $arParams['USER_ID']);
$arResult['FILTER'] = array('MY' => true);
if ($_REQUEST['FILTER']) {
    $arFilterValues = $_REQUEST['FILTER'];
    if ($arResult['IS_HEAD'] && !isset($arFilterValues['MY'])) {
        $arResult['FILTER'] = array();
        $arFilter['USER_ID'] = $arSubIDs;
    }
    if (isset($arFilterValues['TITLE']) && strlen(trim($arFilterValues['TITLE'])) > 0) {
        $arResult['FILTER']['TITLE'] = $arFilterValues['TITLE'];
Пример #4
0
 public static function GetAccess()
 {
     global $USER;
     // simplest caching. is it enough? maybe...
     static $access = null;
     if (!is_array($access)) {
         $access = array('READ' => array(), 'WRITE' => array());
         $arAccessSettings = null;
         if ($USER->CanDoOperation('tm_read')) {
             $access['READ'][] = '*';
         } elseif ($USER->CanDoOperation('tm_read_subordinate')) {
             $arAccessSettings = self::GetAccessSettings();
             if ($arAccessSettings['READ']['EMPLOYEE'] >= 2) {
                 $access['READ'][] = '*';
             } else {
                 // everybody can read his own entries
                 $access['READ'][] = $USER->GetID();
                 if ($arAccessSettings['READ']['EMPLOYEE'] >= 1) {
                     $dbUsers = CIntranetUtils::GetDepartmentColleagues();
                     while ($arRes = $dbUsers->Fetch()) {
                         $access['READ'][] = $arRes['ID'];
                     }
                 }
                 $dbUsers = CIntranetUtils::GetSubordinateEmployees($USER->GetID(), $arAccessSettings['READ']['HEAD'] == 1);
                 while ($arRes = $dbUsers->Fetch()) {
                     if ($arAccessSettings['READ']['HEAD'] == 2) {
                         $access['READ'] = array('*');
                         break;
                     }
                     $access['READ'][] = $arRes['ID'];
                 }
                 $access['READ'] = array_values(array_unique($access['READ']));
             }
         }
         if ($USER->CanDoOperation('tm_write')) {
             $access['WRITE'][] = '*';
         } elseif ($USER->CanDoOperation('tm_write_subordinate')) {
             if ($arAccessSettings['WRITE']['EMPLOYEE'] >= 2) {
                 $access['WRITE'][] = '*';
             } else {
                 // check if current user is The Boss.
                 $arManagers = self::GetUserManagers($USER->GetID());
                 if (count($arManagers) == 1 && $arManagers[0] == $USER->GetID()) {
                     $access['WRITE'][] = $USER->GetID();
                 }
                 if (!is_array($arAccessSettings)) {
                     $arAccessSettings = self::GetAccessSettings();
                 }
                 $dbUsers = CIntranetUtils::GetSubordinateEmployees($USER->GetID(), $arAccessSettings['WRITE']['HEAD'] == 1);
                 while ($arRes = $dbUsers->Fetch()) {
                     $access['WRITE'][] = $arRes['ID'];
                 }
                 $access['WRITE'] = array_values(array_unique($access['WRITE']));
             }
         }
     }
     return $access;
 }
Пример #5
0
 public static function GetUserRole($ID, $USER_ID = false, $bCheckHead = true)
 {
     global $DB, $USER;
     $role = false;
     $ID = intval($ID);
     $USER_ID = intval($USER_ID);
     if ($ID > 0) {
         if ($USER_ID <= 0) {
             $USER_ID = $USER->GetID();
         }
         $sqlFilter = "AND USER_ID='" . $USER_ID . "'";
         if ($bCheckHead) {
             $arSubIDs = array($USER_ID);
             $dbUsers = CIntranetUtils::GetSubordinateEmployees($USER_ID, true);
             while ($arUser = $dbUsers->Fetch()) {
                 $arSubIDs[] = $arUser['ID'];
             }
             $sqlFilter = "AND USER_ID IN ('" . implode("', '", $arSubIDs) . "')";
         }
         $dbRes = $DB->Query("SELECT USER_ID, USER_ROLE FROM b_meeting_users WHERE MEETING_ID='" . $ID . "' " . $sqlFilter);
         if ($bCheckHead) {
             while ($arRes = $dbRes->Fetch()) {
                 $role = CMeeting::ROLE_HEAD;
                 if ($arRes['USER_ID'] == $USER_ID) {
                     $role = $arRes['USER_ROLE'];
                     break;
                 }
             }
         } else {
             if ($arRes = $dbRes->Fetch()) {
                 $role = $arRes['USER_ROLE'];
             }
         }
     }
     return $role;
 }