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