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)];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc