Пример #1
0
 function IsUserAbsent($USER_ID, $CALENDAR_IBLOCK_ID = null)
 {
     global $CACHE_ABSENCE, $CACHE_MANAGER;
     if (null === $CACHE_ABSENCE) {
         $cache_ttl = (24 - date('G')) * 3600;
         $cache_uid = 'intranet_absence';
         $cache_dir = '/' . SITE_ID . '/intranet/absence';
         $obCache = new CPHPCache();
         if ($obCache->InitCache($cache_ttl, 'intranet_absence', $cache_dir)) {
             $arAbsence = $obCache->GetVars();
         } else {
             if (null == $CALENDAR_IBLOCK_ID) {
                 $CALENDAR_IBLOCK_ID = COption::GetOptionInt('intranet', 'iblock_calendar', null);
             }
             $dt = ConvertTimeStamp(false, 'SHORT');
             $arAbsence = CIntranetUtils::GetAbsenceData(array('CALENDAR_IBLOCK_ID' => $CALENDAR_IBLOCK_ID, 'DATE_START' => $dt, 'DATE_FINISH' => $dt, 'PER_USER' => true, 'SELECT' => array('DATE_ACTIVE_FROM', 'DATE_ACTIVE_TO')));
             $obCache->StartDataCache();
             $CACHE_MANAGER->StartTagCache($cache_dir);
             $CACHE_MANAGER->RegisterTag('iblock_id_' . COption::GetOptionInt('intranet', 'iblock_absence'));
             if ($CALENDAR_IBLOCK_ID > 0) {
                 $CACHE_MANAGER->RegisterTag('iblock_id_' . $CALENDAR_IBLOCK_ID);
             }
             $CACHE_MANAGER->EndTagCache();
             $obCache->EndDataCache($arAbsence);
         }
         $CACHE_ABSENCE = is_array($arAbsence) ? $arAbsence : array();
     } else {
         $arAbsence = $CACHE_ABSENCE;
     }
     if (is_array($arAbsence[$USER_ID])) {
         $ts = time();
         foreach ($arAbsence[$USER_ID] as $arEntry) {
             $ts_start = MakeTimeStamp($arEntry['DATE_FROM'], FORMAT_DATETIME);
             if ($ts_start < $ts) {
                 $ts_finish = MakeTimeStamp($arEntry['DATE_TO'], FORMAT_DATETIME);
                 if ($ts_finish > $ts) {
                     return true;
                 }
                 if (($ts_start + date('Z')) % 86400 == 0 && $ts_start == $ts_finish) {
                     return true;
                 }
             }
         }
     }
     return false;
 }
Пример #2
0
 public static function GetAccessibilityForUsers($Params)
 {
     $res = CCalendarEvent::GetAccessibilityForUsers(array('users' => $Params['users'], 'from' => $Params['from'], 'to' => $Params['to'], 'curEventId' => $Params['curEventId']));
     // Fetch absence from intranet
     if ($Params['getFromHR'] && CCalendar::IsIntranetEnabled()) {
         $resHR = CIntranetUtils::GetAbsenceData(array('DATE_START' => $Params['from'], 'DATE_FINISH' => $Params['to'], 'USERS' => $Params['users'], 'PER_USER' => true, 'SELECT' => array('ID', 'DATE_ACTIVE_FROM', 'DATE_ACTIVE_TO')), BX_INTRANET_ABSENCE_HR);
         foreach ($resHR as $userId => $forUser) {
             if (!isset($res[$userId]) || !is_array($res[$userId])) {
                 $res[$userId] = array();
             }
             foreach ($forUser as $event) {
                 $res[$userId][] = array('FROM_HR' => true, 'ID' => $event['ID'], 'DT_FROM' => $event['DATE_ACTIVE_FROM'], 'DT_TO' => $event['DATE_ACTIVE_TO'], 'ACCESSIBILITY' => 'absent', 'IMPORTANCE' => 'normal', "FROM" => CCalendar::Timestamp($event['DATE_ACTIVE_FROM']), "TO" => CCalendar::Timestamp($event['DATE_ACTIVE_TO']));
             }
         }
     }
     return $res;
 }
Пример #3
0
         $date_start = $date_finish = date($format);
         break;
     case 'tomorrow':
         $date_start = $date_finish = date($format, strtotime('+1 day'));
         break;
     case 'after_tomorrow':
         $date_start = $date_finish = date($format, strtotime('+2 day'));
         break;
     case 'now':
     default:
         $date_start = $date_finish = date($format);
         break;
 }
 $arFilter = array('CALENDAR_IBLOCK_ID' => $arParams['CALENDAR_IBLOCK_ID'], 'ABSENCE_IBLOCK_ID' => $arParams['IBLOCK_ID'], 'DATE_START' => $date_start, 'DATE_FINISH' => $date_finish, 'USERS' => $USERS, 'PER_USER' => false);
 //echo '<pre>'; print_r($arFilter); echo '</pre>';
 $arResult['ENTRIES'] = CIntranetUtils::GetAbsenceData($arFilter, BX_INTRANET_ABSENCE_ALL);
 $arUserIDs = array();
 foreach ($arResult['ENTRIES'] as $key => $arEntry) {
     $arUserIDs[] = $arEntry['USER_ID'];
     $arResult['ENTRIES'][$key]['DATE_ACTIVE_FROM_TS'] = MakeTimeStamp($arEntry['DATE_FROM'], CSite::GetDateFormat('FULL'));
     $arResult['ENTRIES'][$key]['DATE_ACTIVE_TO_TS'] = MakeTimeStamp($arEntry['DATE_TO'], CSite::GetDateFormat('FULL'));
     $arResult['ENTRIES'][$key]['DATE_FROM'] = FormatDate($arParams['DATE' . (CIntranetUtils::IsDateTime($arResult['ENTRIES'][$key]['DATE_ACTIVE_FROM_TS']) ? '_TIME' : '') . '_FORMAT'], $arResult['ENTRIES'][$key]['DATE_ACTIVE_FROM_TS']);
     $arResult['ENTRIES'][$key]['DATE_TO'] = FormatDate($arParams['DATE' . (CIntranetUtils::IsDateTime($arResult['ENTRIES'][$key]['DATE_ACTIVE_TO_TS']) ? '_TIME' : '') . '_FORMAT'], $arResult['ENTRIES'][$key]['DATE_ACTIVE_TO_TS']);
     if ($arParams['mode'] == 'now') {
         $test1 = $arResult['ENTRIES'][$key]['DATE_ACTIVE_FROM_TS'];
         $test2 = $arResult['ENTRIES'][$key]['DATE_ACTIVE_TO_TS'];
         if (0 == ($test2 + date('Z')) % 86400) {
             $test2 += 86399;
         }
         if ($test1 > time() || $test2 < time()) {
             unset($arResult['ENTRIES'][$key]);
Пример #4
0
function tasksTaskEditAjaxHandler()
{
    global $DB;
    if (isset($_POST['NAME_TEMPLATE'])) {
        $nameTemplate = $_POST['NAME_TEMPLATE'];
    } else {
        $nameTemplate = CSite::getNameFormat(false);
    }
    if (!check_bitrix_sessid()) {
        die;
    }
    switch ($_POST['action']) {
        case 'tasks_isUserMemberOfGroup':
            if (!CModule::IncludeModule('socialnetwork')) {
                throw new Exception($_POST['action'] . ': socialnetwork module failed to load.');
            }
            if (!isset($_POST['groupId']) || !isset($_POST['userId']) || $_POST['groupId'] < 0 || $_POST['userId'] < 0) {
                throw new Exception($_POST['action'] . ': invalid userId or groupId');
            }
            $rc = CSocNetUserToGroup::GetUserRole((int) $_POST['userId'], (int) $_POST['groupId']);
            if ($rc === false || $rc == SONET_ROLES_REQUEST) {
                echo 'N';
            } else {
                echo 'Y';
            }
            break;
        case 'getWarnings':
            if (isset($_POST['TASK']['RESPONSIBLE_ID'])) {
                $responsibleId = (int) $_POST['TASK']['RESPONSIBLE_ID'];
                $responsibleName = '#unknown user#';
                $rsUser = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => $responsibleId), array('FIELDS' => array('NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN')));
                if ($arUser = $rsUser->fetch()) {
                    $responsibleName = CUser::FormatName($nameTemplate, array("NAME" => $arUser["NAME"], "LAST_NAME" => $arUser["LAST_NAME"], "SECOND_NAME" => $arUser["SECOND_NAME"], "LOGIN" => $arUser["LOGIN"]), true, false);
                }
                if (isset($_POST['TASK']['GROUP_ID']) && $_POST['TASK']['GROUP_ID']) {
                    if (CModule::IncludeModule('socialnetwork')) {
                        $rc = CSocNetUserToGroup::GetUserRole($responsibleId, (int) $_POST['TASK']['GROUP_ID']);
                        if ($rc === false || $rc == SONET_ROLES_REQUEST) {
                            $arGroup = CSocNetGroup::GetByID($_POST['TASK']['GROUP_ID']);
                            echo '<div>' . htmlspecialcharsbx(str_replace(array('#FORMATTED_USER_NAME#', '#GROUP_NAME#'), array($responsibleName, $arGroup["NAME"]), GetMessage('TASKS_WARNING_RESPONSIBLE_NOT_IN_TASK_GROUP'))) . "</div>\n";
                        }
                    }
                }
                if (CModule::IncludeModule('intranet')) {
                    $dt = ConvertTimeStamp(false, 'SHORT');
                    $arAbsenceData = CIntranetUtils::GetAbsenceData(array('USERS' => array($responsibleId), 'DATE_START' => $dt, 'DATE_FINISH' => $dt, 'PER_USER' => false), $MODE = BX_INTRANET_ABSENCE_ALL);
                    $curTs = MakeTimeStamp(ConvertTimeStamp(false, 'FULL'));
                    if (isset($arAbsenceData[0])) {
                        if (array_key_exists('DATE_ACTIVE_FROM', $arAbsenceData[0]) && array_key_exists('DATE_ACTIVE_TO', $arAbsenceData[0])) {
                            $fromTs = MakeTimeStamp($arAbsenceData[0]['DATE_ACTIVE_FROM']);
                            $toTs = MakeTimeStamp($arAbsenceData[0]['DATE_ACTIVE_TO']);
                        } else {
                            $fromTs = MakeTimeStamp($arAbsenceData[0]['DATE_FROM']);
                            $toTs = MakeTimeStamp($arAbsenceData[0]['DATE_TO']);
                        }
                        if ($toTs > $curTs) {
                            $from = FormatDate($DB->DateFormatToPhp(CSite::GetDateFormat(CIntranetUtils::IsDateTime($fromTs) ? 'FULL' : 'SHORT')), $fromTs);
                            $to = FormatDate($DB->DateFormatToPhp(CSite::GetDateFormat(CIntranetUtils::IsDateTime($toTs) ? 'FULL' : 'SHORT')), $toTs);
                            echo '<div>' . htmlspecialcharsbx(str_replace(array('#FORMATTED_USER_NAME#', '#DATE_FROM#', '#DATE_TO#', '#ABSCENCE_REASON#'), array($responsibleName, $from, $to, $arAbsenceData[0]['NAME']), GetMessage('TASKS_WARNING_RESPONSIBLE_IS_ABSENCE'))) . '</div>';
                        }
                    }
                }
            }
            break;
        default:
            throw new Exception('Requested action is unknown!');
            break;
    }
}
Пример #5
0
 $MODE = 0;
 if (count($arParams['TYPES']) <= 0) {
     $MODE = BX_INTRANET_ABSENCE_ALL;
 } else {
     foreach ($arParams['TYPES'] as $type) {
         if ($type == 'PERSONAL') {
             $MODE |= BX_INTRANET_ABSENCE_PERSONAL;
         } else {
             $MODE |= BX_INTRANET_ABSENCE_HR;
         }
         if ($MODE == BX_INTRANET_ABSENCE_ALL) {
             break;
         }
     }
 }
 $arIBlockElements = CIntranetUtils::GetAbsenceData(array('CALENDAR_IBLOCK_ID' => $arParams['CALENDAR_IBLOCK_ID'], 'ABSENCE_IBLOCK_ID' => $arParams['IBLOCK_ID'], 'DATE_START' => ConvertTimeStamp($arParams['TS_START'], 'FULL'), 'DATE_FINISH' => ConvertTimeStamp($arParams['TS_FINISH'], 'FULL'), 'USERS' => false, 'PER_USER' => true), $MODE);
 $arUserIDs = array_keys($arIBlockElements);
 $bLoadUsers = count($arUserIDs) > 0 || $arParams['USERS_ALL'] == 'Y';
 if ($bLoadUsers) {
     $arFilter = array('ACTIVE' => 'Y');
     if ($arParams['DEPARTMENT'] > 0) {
         $arFilter['UF_DEPARTMENT'] = $arParams['FILTER_SECTION_CURONLY'] == 'N' ? CIntranetUtils::GetIBlockSectionChildren($arParams['DEPARTMENT']) : array($arParams['DEPARTMENT']);
     } elseif (!CModule::IncludeModule('extranet') || !CExtranet::IsExtranetSite($arParams['SITE_ID'])) {
         $arFilter["!UF_DEPARTMENT"] = false;
     }
     if ($arParams['USERS_ALL'] == 'N') {
         $arFilter['ID'] = implode('|', array_keys($arIBlockElements));
     }
     $bExtranetInstalled = CModule::IncludeModule('extranet');
     $bExtranetSite = false || $bExtranetInstalled && CExtranet::IsExtranetSite($arParams['SITE_ID']);
     if ($bExtranetInstalled && !$bExtranetSite && !CExtranet::IsIntranetUser($arParams['SITE_ID'])) {
Пример #6
0
<?php

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die;
}
if (!CModule::IncludeModule('intranet')) {
    return false;
}
$arParams['ID'] = intval($arParams['ID']);
if ($arParams['ID'] <= 0) {
    $arParams['ID'] = $USER->GetID();
}
if ($arParams['ID'] <= 0) {
    return false;
}
$arParams['CALENDAR_IBLOCK_ID'] = intval($arParams['CALENDAR_IBLOCK_ID']);
if ($arParams['CALENDAR_IBLOCK_ID'] <= 0) {
    $arParams['CALENDAR_IBLOCK_ID'] = COption::GetOptionInt('intranet', 'iblock_calendar');
}
$arParams['CACHE_TIME'] = 3600;
if ($this->StartResultCache(false, $arParams['ID'])) {
    $arResult['ENTRIES'] = CIntranetUtils::GetAbsenceData(array('CALENDAR_IBLOCK_ID' => $arParams['CALENDAR_IBLOCK_ID'], 'USERS' => array($arParams['ID']), 'DATE_START' => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT"))), 'DATE_FINISH' => false, 'PER_USER' => false));
    foreach ($arResult['ENTRIES'] as $key => $arRes) {
        $arResult['ENTRIES'][$key]['TITLE'] = $arRes['PROPERTY_STATE_VALUE'] ? $arRes['PROPERTY_STATE_VALUE'] : ($arRes['DETAIL_TEXT'] ? $arRes['DETAIL_TEXT'] : ($arRes['PREVIEW_TEXT'] ? $arRes['PREVIEW_TEXT'] : $arRes['NAME']));
        $arResult['ENTRIES'][$key]['DATE_ACTIVE_FROM'] = $arRes['DATE_FROM'];
        $arResult['ENTRIES'][$key]['DATE_ACTIVE_TO'] = $arRes['DATE_TO'];
    }
    $this->IncludeComponentTemplate();
}