180 lines
3.5 KiB
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);
|
|
}
|
|
} |