ulmus-ldap/src/Entity/User.php

180 lines
3.5 KiB
PHP

<?php
namespace Ulmus\Ldap\Entity;
use Ulmus\Ldap\Entity\Field\{ Datetime, LdapDatetime };
use Ulmus\Attribute\Property\{Field, Relation\Ignore, Virtual};
use Ulmus\Ldap\Attribute\Obj\ObjectClass;
#[ObjectClass("user")]
class User
{
use \Ulmus\Ldap\EntityTrait;
#[Field]
public string $samaccountname;
#[Field]
public string $mail;
#[Field]
public string $mailNickname;
#[Field(name: "givenname")]
public string $firstname;
#[Field(name: "sn")]
public string $lastname;
#[Field]
public string $displayName;
#[Field]
public string $name;
#[Field]
public string $canonicalName;
#[Field]
public string $userPrincipalName;
#[Field]
public string $description;
#[Field(name: "st")]
public string $state;
#[Field(name: "physicalDeliveryOfficeName")]
public string $officeName;
#[Field]
public string $company;
#[Field]
public string $department;
#[Field]
public string $telephoneNumber;
#[Field]
public string $title;
##[Field(readonly:true)]
# public ? array $memberOf;
##[Field(readonly:true)]
#public ? array $proxyAddresses;
#[Field]
public int $userAccountControl;
#[Field]
public string $extensionAttribute1;
#[Field]
public string $extensionAttribute2;
#[Field]
public string $extensionAttribute3;
#[Field]
public string $extensionAttribute4;
#[Field]
public string $extensionAttribute5;
#[Field]
public string $extensionAttribute6;
#[Field]
public string $extensionAttribute7;
#[Field]
public string $extensionAttribute8;
#[Field]
public string $extensionAttribute9;
#[Field]
public string $extensionAttribute10;
#[Field]
public string $extensionAttribute11;
#[Field]
public string $extensionAttribute12;
#[Field]
public string $extensionAttribute13;
#[Field]
public string $extensionAttribute14;
#[Field]
public string $extensionAttribute15;
#[Field]
public int $logonCount;
#[Field(name: "unicodePwd")]
public string $unicodePassword;
#[Field]
public string $userPassword;
#[Field]
public string $scriptPath;
#[Field]
public string $sid;
#[Field]
public string $targetAddress;
#[Field(name: "lastLogon", readonly: true)]
public LdapDatetime $lastLogon;
#[Field(name: "whenCreated", readonly: true)]
public LdapDatetime $whenCreated;
#[Field(name: "whenChanged", readonly: true)]
public LdapDatetime $whenChanged;
public function __toString() : string
{
return implode(' ', array_filter([ $this->firstname ?? "", $this->lastname ?? "" ])) ?: ( $this->displayName ?? "" );
}
public function memberOfGroup() : array
{
$arr = array_map(fn($e) => explode('=', explode(',', $e)[0])[1], $this->memberOf);
usort($arr, 'strcasecmp');
return $arr;
}
public function brokenMigration() : bool
{
if ( empty($this->targetAddress) ) {
foreach($this->proxyAddresses ?? [] as $proxy) {
if ( str_contains(strtolower($proxy), 'x500') ) {
return true;
}
}
}
return false;
}
public function migrated() : bool
{
return ! empty($this->targetAddress);
}
public function unmigrated() : bool
{
return empty($this->targetAddress) && empty($this->proxyAddresses);
}
}