|
|
|
@ -1149,4 +1149,135 @@ class Statistics |
|
|
|
|
|
|
|
|
|
return $chartCode; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param string $startDate |
|
|
|
|
* @param string $endDate |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
private static function getLoginsByDate($startDate, $endDate) |
|
|
|
|
{ |
|
|
|
|
/** @var DateTime $startDate */ |
|
|
|
|
$startDate = api_get_utc_datetime("$startDate 00:00:00"); |
|
|
|
|
/** @var DateTime $endDate */ |
|
|
|
|
$endDate = api_get_utc_datetime("$endDate 23:59:59"); |
|
|
|
|
|
|
|
|
|
if (empty($startDate) || empty($endDate)) { |
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$tblUser = Database::get_main_table(TABLE_MAIN_USER); |
|
|
|
|
$tblLogin = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); |
|
|
|
|
$urlJoin = ''; |
|
|
|
|
$urlWhere = ''; |
|
|
|
|
|
|
|
|
|
if (api_is_multiple_url_enabled()) { |
|
|
|
|
$tblUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); |
|
|
|
|
|
|
|
|
|
$urlJoin = "INNER JOIN $tblUrlUser au ON u.id = au.user_id"; |
|
|
|
|
$urlWhere = 'AND au.access_url_id = '.api_get_current_access_url_id(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sql = "SELECT u.id, |
|
|
|
|
u.firstname, |
|
|
|
|
u.lastname, |
|
|
|
|
u.username, |
|
|
|
|
SUM(TIMESTAMPDIFF(SECOND, l.login_date, l.logout_date)) AS time_count |
|
|
|
|
FROM $tblUser u |
|
|
|
|
INNER JOIN $tblLogin l ON u.id = l.login_user_id |
|
|
|
|
$urlJoin |
|
|
|
|
WHERE l.login_date BETWEEN '$startDate' AND '$endDate' |
|
|
|
|
$urlWhere |
|
|
|
|
GROUP BY u.id"; |
|
|
|
|
|
|
|
|
|
$stmt = Database::query($sql); |
|
|
|
|
$result = Database::store_result($stmt, 'ASSOC'); |
|
|
|
|
|
|
|
|
|
return $result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Display the Logins By Date report and allow export its result to XLS. |
|
|
|
|
*/ |
|
|
|
|
public static function printLoginsByDate() |
|
|
|
|
{ |
|
|
|
|
if (isset($_GET['export']) && 'xls' === $_GET['export']) { |
|
|
|
|
$result = self::getLoginsByDate($_GET['start'], $_GET['end']); |
|
|
|
|
$data = [[get_lang('Username'), get_lang('FirstName'), get_lang('LastName'), get_lang('TotalTime')]]; |
|
|
|
|
|
|
|
|
|
foreach ($result as $i => $item) { |
|
|
|
|
$data[] = [ |
|
|
|
|
$item['username'], |
|
|
|
|
$item['firstname'], |
|
|
|
|
$item['lastname'], |
|
|
|
|
api_time_to_hms($item['time_count']), |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Export::arrayToXls($data); |
|
|
|
|
|
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
echo Display::page_header(get_lang('LoginsByDate')); |
|
|
|
|
|
|
|
|
|
$actions = ''; |
|
|
|
|
$content = ''; |
|
|
|
|
|
|
|
|
|
$form = new FormValidator('frm_logins_by_date', 'get'); |
|
|
|
|
$form->addDateRangePicker( |
|
|
|
|
'daterange', |
|
|
|
|
get_lang('DateRange'), |
|
|
|
|
true, |
|
|
|
|
['format' => 'YYYY-MM-DD', 'timePicker' => 'false', 'validate_format' => 'Y-m-d'] |
|
|
|
|
); |
|
|
|
|
$form->addHidden('report', 'logins_by_date'); |
|
|
|
|
$form->addButtonFilter(get_lang('Search')); |
|
|
|
|
|
|
|
|
|
if ($form->validate()) { |
|
|
|
|
$values = $form->exportValues(); |
|
|
|
|
|
|
|
|
|
$result = self::getLoginsByDate($values['daterange_start'], $values['daterange_end']); |
|
|
|
|
|
|
|
|
|
if (!empty($result)) { |
|
|
|
|
$actions = Display::url( |
|
|
|
|
Display::return_icon('excel.png', get_lang('ExportToXls'), [], ICON_SIZE_MEDIUM), |
|
|
|
|
api_get_self().'?'.http_build_query( |
|
|
|
|
[ |
|
|
|
|
'report' => 'logins_by_date', |
|
|
|
|
'export' => 'xls', |
|
|
|
|
'start' => Security::remove_XSS($values['daterange_start']), |
|
|
|
|
'end' => Security::remove_XSS($values['daterange_end']), |
|
|
|
|
] |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$table = new HTML_Table(['class' => 'data_table']); |
|
|
|
|
$table->setHeaderContents(0, 0, get_lang('Username')); |
|
|
|
|
$table->setHeaderContents(0, 1, get_lang('FirstName')); |
|
|
|
|
$table->setHeaderContents(0, 2, get_lang('LastName')); |
|
|
|
|
$table->setHeaderContents(0, 3, get_lang('TotalTime')); |
|
|
|
|
|
|
|
|
|
foreach ($result as $i => $item) { |
|
|
|
|
$table->setCellContents($i + 1, 0, $item['username']); |
|
|
|
|
$table->setCellContents($i + 1, 1, $item['firstname']); |
|
|
|
|
$table->setCellContents($i + 1, 2, $item['lastname']); |
|
|
|
|
$table->setCellContents($i + 1, 3, api_time_to_hms($item['time_count'])); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$table->setColAttributes(0, ['class' => 'text-center']); |
|
|
|
|
$table->setColAttributes(3, ['class' => 'text-center']); |
|
|
|
|
$content = $table->toHtml(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$form->display(); |
|
|
|
|
|
|
|
|
|
if (!empty($actions)) { |
|
|
|
|
echo Display::toolbarAction('logins_by_date_toolbar', [$actions]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
echo $content; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|