<?php
namespace UVDesk\CommunityPackages\ArtisanCommerce\CustomTheme\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="UVDesk\CommunityPackages\ArtisanCommerce\CustomTheme\Repository\LoginLogRepository")
* @ORM\Table(name="uv_login_log")
*/
class LoginLog
{
const STATUS_SUCCESS = 'SUCCESS';
const STATUS_FAILED = 'FAILED';
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private int $id;
/** @ORM\Column(type="string", length=255) */
private string $username;
/** @ORM\Column(type="string", length=20) */
private string $status;
/** @ORM\Column(type="string", length=45) */
private string $ipAddress;
/** @ORM\Column(type="datetime") */
private \DateTime $loggedInAt;
/** @ORM\Column(type="datetime", nullable=true) */
private ?\DateTime $loggedOutAt = null;
public function __construct(string $username, string $status, string $ip)
{
$this->username = $username;
$this->status = $status;
$this->ipAddress = $ip;
$this->loggedInAt = new \DateTime();
}
public function getId(): int { return $this->id; }
public function getUsername(): string { return $this->username; }
public function getStatus(): string { return $this->status; }
public function getIpAddress(): string { return $this->ipAddress; }
public function getLoggedInAt(): \DateTime { return $this->loggedInAt; }
public function getLoggedOutAt(): ?\DateTime { return $this->loggedOutAt; }
public function setLoggedOutAt(\DateTime $dt): void
{
$this->loggedOutAt = $dt;
}
public function isSessionOpen(): bool
{
return $this->status === self::STATUS_SUCCESS
&& $this->loggedOutAt === null;
}
public function getDurationSeconds(): ?int
{
if (!$this->loggedOutAt) {
return null; // noch aktiv
}
return $this->loggedOutAt->getTimestamp()
- $this->loggedInAt->getTimestamp();
}
}