HEX
Server: LiteSpeed
System: Linux d8 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User: wbwebdes (3015)
PHP: 8.1.31
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/wbwebdes/domains/uren-registratie.blankevoort.net/public_html/src/Model/QuickEntryWeek.php
<?php

/*
 * This file is part of the Kimai time-tracking app.
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace App\Model;

use App\Entity\Activity;
use App\Entity\Project;
use App\Entity\User;

/**
 * @internal
 */
class QuickEntryWeek
{
    /**
     * @var array<QuickEntryModel>
     */
    private array $rows = [];

    public function __construct(private \DateTime $startDate)
    {
    }

    public function addRow(User $user, ?Project $project = null, ?Activity $activity = null): QuickEntryModel
    {
        $model = $this->createRow($user, $project, $activity);

        $this->rows[] = $model;

        return $model;
    }

    public function createRow(User $user, ?Project $project = null, ?Activity $activity = null): QuickEntryModel
    {
        return new QuickEntryModel($user, $project, $activity);
    }

    public function getDate(): \DateTime
    {
        return $this->startDate;
    }

    public function countRows(): int
    {
        return \count($this->rows);
    }

    /**
     * @return QuickEntryModel[]
     */
    public function getRows(): array
    {
        $rows = $this->rows;

        // sort rows by projects - make it configurable in the future
        uasort($rows, [$this, 'sortByProjectName']);

        return $rows;
    }

    private function sortByProjectName(QuickEntryModel $a, QuickEntryModel $b): int
    {
        $aName = $a->getProject()?->getName();
        $bName = $b->getProject()?->getName();

        if ($aName === null && $bName === null) {
            $result = 0;
        } elseif ($aName === null && $bName !== null) {
            $result = 1;
        } elseif ($aName !== null && $bName === null) {
            $result = -1;
        } else {
            $result = strcmp((string) $aName, (string) $bName);
        }

        return  $result < 0 ? -1 : 1;
    }

    /**
     * @param QuickEntryModel[] $rows
     */
    public function setRows(array $rows): void
    {
        $this->rows = $rows;
    }
}