work_time-1.0.x-dev/modules/fingerprint/src/Controller/FingerprintController.php
modules/fingerprint/src/Controller/FingerprintController.php
<?php
namespace Drupal\fingerprint\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* Returns responses for fingerprint routes.
*/
class FingerprintController extends ControllerBase {
/**
* Builds the response.
*/
public function build() {
$build['content'] = [
'#type' => 'container',
'#title' => $this->t('Attendance'),
'#attributes' => [
'class' => ['timeline-container'],
],
'month' => \Drupal::formBuilder()->getForm('Drupal\fingerprint\Form\FingerprintSettingsForm'),
];
return $build;
}
/**
* Ajax json response.
*/
public function ajaxTimeline($date = '') {
// Current week.
$start = strtotime('this week');
$end = strtotime('this week +6 days');
if (!empty($date)) {
if (strpos($date, "-W") !== FALSE) {
[$year, $week] = explode('-W', $date);
$start = strtotime($year . 'W' . str_pad($week, 2, '0', STR_PAD_LEFT));
$end = strtotime('+6 days', $start);
}
else {
$month = date('Y-m', strtotime($date));
$start = strtotime(date('Y-m-01', strtotime($month)));
$end = strtotime(date('Y-m-t', strtotime($month)));
}
}
return new JsonResponse([
...$this->getData($start, $end),
'method' => 'GET',
'status' => 200,
]);
}
/**
* Get time data.
*
* {@inheritdoc}
*/
public function getData($start, $end) {
$groups = $result = [];
$query = \Drupal::entityQuery('fingerprint')
->condition('created', [$start, $end], 'BETWEEN');
$fingerprint_ids = $query->execute();
if ($fingerprint_ids) {
$entityManager = $this->entityTypeManager();
$fingerService = $entityManager->getStorage('fingerprint');
$userService = $entityManager->getStorage('user');
foreach ($fingerprint_ids as $id) {
$entity = $fingerService->load($id);
$uid = $entity->getOwnerId();
if (empty($groups[$uid])) {
$user = $userService->load($uid);
$groups[$uid] = [
'id' => $uid,
'content' => empty($user) ? $entity->get('label')->value : $user->getDisplayName(),
];
}
$hour = round($entity->get('time_total')->value / 3600);
$result[] = [
"id" => $entity->id(),
"content" => empty($hour) ? 'N/A' : " $hour",
"start" => date('Y-m-d\TH:i', $entity->get('created')->value),
"end" => date('Y-m-d\TH:i', $entity->get('stopped')->value),
'group' => $entity->getOwnerId(),
'title' => !empty($entity->get('break')->value) ? $this->t('Break %break', ['%break' => $entity->get('break')->value]) : '',
];
/*
if (!empty($entity->get('break')->value)) {
$break = explode(',', $entity->get('break')->value);
foreach ($break as $time) {
$dateStart = date('Y-m-d', $entity->get('created')->value);
$timeBreak = date('Y-m-d\TH:i', strtotime($dateStart . ' ' . $time));
$result[] = [
"content" => $time,
"start" => $timeBreak,
'group' => $entity->getOwnerId(),
];
}
}
*/
}
}
return ['items' => $result, 'groups' => array_values($groups)];
}
}
