- Модуль: timeman
- Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman.php
- Класс: CTimeMan
- Вызов: CTimeMan::getRuntimeInfo
static function getRuntimeInfo($bFull = false)
{
global $USER;
$TMUSER = CTimeManUser::instance();
$STATE = $TMUSER->State();
$info = ['ID' => '', 'STATE' => $STATE, 'CAN_EDIT' => 'N'];
$actionsBuilder = DependencyManager::getInstance()->getWorktimeActionList()->buildPossibleActionsListForUser($TMUSER->GetID());
if ($STATE == 'CLOSED')
{
$info['CAN_OPEN'] = $TMUSER->OpenAction();
}
elseif ($STATE == 'EXPIRED')
{
$info['EXPIRED_DATE'] = $TMUSER->GetExpiredRecommendedDate();
}
$arSettings = $TMUSER->GetSettings(['UF_TM_REPORT_REQ']);
$info['REPORT_REQ'] = $arSettings['UF_TM_REPORT_REQ'] ?? null;
$info['TM_FREE'] = false;
if ($arInfo = $TMUSER->GetCurrentInfo())
{
$record = WorktimeRecord::wakeUpRecord($arInfo);
foreach ($actionsBuilder->getAllActions() as $worktimeAction)
{
$info['TM_FREE'] = $worktimeAction->getSchedule() && $worktimeAction->getSchedule()->isFlextime();
}
foreach ($actionsBuilder->getStartActions() as $startAction)
{
// for cases, when user had fixed schedule and now user has flextime
$info['TM_FREE'] = $startAction->getSchedule() && $startAction->getSchedule()->isFlextime();
}
$info['ID'] = $arInfo['ID'];
$info['CAN_EDIT'] = !empty($actionsBuilder->getEditActions()) ? 'Y' : 'N';
$timeFinish = $arInfo['TIME_FINISH'];
if ((int)$arInfo['TIME_FINISH'] === 0)
{
if (!WorktimeRecord::isRecordPaused($arInfo) && !WorktimeRecord::isRecordClosed($arInfo))
{
$timeFinish = null;
}
}
$info['INFO'] = [
'DATE_START' => MakeTimeStamp($arInfo['DATE_START']) - CTimeZone::GetOffset(),
'DATE_FINISH' => $arInfo['DATE_FINISH']
? (MakeTimeStamp($arInfo['DATE_FINISH']) - CTimeZone::GetOffset())
: '',
'TIME_START' => $arInfo['TIME_START'],
'TIME_FINISH' => $timeFinish,
'DURATION' => $arInfo['RECORDED_DURATION'],
'TIME_LEAKS' => $arInfo['TIME_LEAKS'],
'ACTIVE' => ($arInfo['ACTIVE'] == 'Y'),
'PAUSED' => ($arInfo['PAUSED'] == 'Y'),
'CURRENT_STATUS' => $arInfo['CURRENT_STATUS'],
];
if (!empty($actionsBuilder->getStopActions()))
{
foreach ($actionsBuilder->getStopActions() as $stopAction)
{
if ($stopAction->getRecord() && $stopAction->getRecord()->getId() === $record->getId()
&& $stopAction->getRecordManager())
{
$info['INFO']['RECOMMENDED_CLOSE_TIMESTAMP'] = $stopAction->getRecordManager()->getRecommendedStopTimestamp();
}
}
}
if (isset($arInfo['LAST_PAUSE']) && $arInfo['LAST_PAUSE'])
{
$info['LAST_PAUSE'] = $arInfo['LAST_PAUSE'];
}
elseif (isset($arInfo['PAUSED']) && $arInfo['PAUSED'] === 'Y')
{
$info['LAST_PAUSE'] = [
'DATE_START' => $info['INFO']['DATE_FINISH'],
];
}
$info['SOCSERV_ENABLED'] = IsModuleInstalled('socialservices')
&& (COption::GetOptionString("socialservices", "allow_send_user_activity", "Y") == 'Y');
if ($bFull && $info['SOCSERV_ENABLED'])
{
$info['SOCSERV_ENABLED_USER'] = $TMUSER->isSocservEnabledByUser();
}
}
else
{
foreach ($actionsBuilder->getStartActions() as $worktimeAction)
{
$info['TM_FREE'] = $worktimeAction->getSchedule() && $worktimeAction->getSchedule()->isFlextime();
}
}
$planner = CIntranetPlanner::getData(SITE_ID, $bFull);
$plannerData = $planner['DATA'];
$eventsLimit = 50;
if (is_array($plannerData['EVENTS']) && count($plannerData['EVENTS']) > $eventsLimit)
{
$plannerData['EVENTS'] = self::limitEvents($eventsLimit, $plannerData['EVENTS']);
$planner['DATA'] = $plannerData;
}
$info['PLANNER'] = $planner;
$info["FULL"] = $bFull;
if (!empty($actionsBuilder->getStartActions()) && !empty($actionsBuilder->getReopenActions()))
{
$info["CAN_OPEN_AND_RELAUNCH"] = true;
}
return $info;
}