- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/ustat/ustat.php
- Класс: BitrixIntranetUStatUStat
- Вызов: UStat::getStatusInformation
static function getStatusInformation()
{
// 1. activity score: emulate last 60 minutes
$currentActivity = static::getCurrentActivity();
// 2. involvement: last 24 hours
// SELECT COUNT(1) AS `INVOLVED_COUNT` FROM (SELECT CASE WHEN
// (CASE WHEN SUM(TASKS) > 0 THEN 1 ELSE 0 END + CASE WHEN SUM(CRM) > 0 THEN 1 ELSE 0 END + ...) >= 4
// THEN 1 ELSE 0 END) AS INVOLVED FROM ... GROUP BY USER_ID)
// WHERE INVOLVED = 1
$fromDate = TypeDateTime::createFromTimestamp(mktime(0, 0, 0));
$toDate = TypeDateTime::createFromTimestamp(mktime(24, 0, 0));
$currentInvolvement = static::getDepartmentSummaryInvolvement(
0,
$fromDate,
$toDate,
'hour'
);
/*
$names = UserHourTable::getSectionNames();
$fieldExpressions = array_fill(0, count($names), 'CASE WHEN SUM(%s) > 0 THEN 1 ELSE 0 END');
// user involved if used 4 or more services for last 24 hours
$involvedExpression = sprintf('CASE WHEN (%s) >= %d THEN 1 ELSE 0 END',
join (' + ', $fieldExpressions), static::INVOLVEMENT_SERVICE_COUNT
);
// subquery
$queryByUser = new EntityQuery(UserHourTable::getEntity());
$queryByUser->setSelect(array(
'USER_ID',
'INVOLVED' => array(
'data_type' => 'integer',
'expression' => array_merge(array($involvedExpression), $names)
)))
->setFilter(array(
'> array(
ConvertTimeStamp(mktime(date('G'), 0, 0, date('n'), date('j')-1), 'FULL'), // prev day, same hour
ConvertTimeStamp(time(), 'FULL')
)
))
->setGroup('USER_ID');
// main query
$query = new EntityQuery($queryByUser);
$query->setSelect(array(
'INVOLVED_COUNT' => array(
'data_type' => 'integer',
'expression' => array('COUNT(1)')
)))
->setFilter(array('=INVOLVED' => 1));
$data = $query->exec()->fetch();
$currentInvolvement = (int) $data['INVOLVED_COUNT'];
*/
/*
// 3. total employees
$usersDepartments = static::getUsersDepartments();
$currentTotalUsers = count($usersDepartments);
// 4. online employees
$result = MainUserTable::getList(array(
'select' => array('ONLINE_COUNT' => array(
'data_type' => 'integer',
'expression' => array('COUNT(1)')
)),
'filter' => array('=IS_ONLINE' => true)
));
$data = $result->fetch();
$currentUsersOnline = (int) $data['ONLINE_COUNT'];
// 5. absentees
$currentUsersAbsent = 0;
$allUsers = array_keys($usersDepartments);
$allAbsenceData = CIntranetUtils::getAbsenceData(array(
'DATE_START' => ConvertTimeStamp(mktime(0, 0, 0), 'FULL'), // current day start
'DATE_FINISH' => ConvertTimeStamp(mktime(23, 59, 59), 'FULL'), // current day end
'PER_USER' => true
));
foreach ($allUsers as $userId)
{
if (isset($allAbsenceData[$userId]) && static::checkTodayAbsence($allAbsenceData[$userId]))
{
++$currentUsersAbsent;
}
}
*/
// done!
return array(
'ACTIVITY' => $currentActivity,
'INVOLVEMENT' => $currentInvolvement,
//'TOTAL_USERS' => $currentTotalUsers,
//'USERS_ONLINE' => $currentUsersOnline,
//'USERS_ABSENT' => $currentUsersAbsent
);
}