From a0363ebb71e5da5311392c8ce43661c012f3f94e Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll <info@mcnd.ca> Date: Mon, 29 Mar 2021 20:02:17 +0000 Subject: [PATCH] - Added a new ObjectType annotation. - Computer entity added - Fixed some problem related to filter and repository of LDAP specific methods. --- src/Annotation/Classes/ObjectType.php | 15 +++++++++ src/Entity/Computer.php | 45 ++++++++++++++++++++++++++- src/EntityTrait.php | 2 +- src/Query/Filter.php | 2 +- src/Repository.php | 8 +++-- 5 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 src/Annotation/Classes/ObjectType.php diff --git a/src/Annotation/Classes/ObjectType.php b/src/Annotation/Classes/ObjectType.php new file mode 100644 index 0000000..44f8646 --- /dev/null +++ b/src/Annotation/Classes/ObjectType.php @@ -0,0 +1,15 @@ +<?php + +namespace Ulmus\Ldap\Annotation\Classes; + +class ObjectType implements \Ulmus\Annotation\Annotation { + + public string $type; + + public function __construct($type = null) + { + if ( $type !== null ) { + $this->type = $type; + } + } +} diff --git a/src/Entity/Computer.php b/src/Entity/Computer.php index 9a7d14c..bd9e54a 100644 --- a/src/Entity/Computer.php +++ b/src/Entity/Computer.php @@ -1,10 +1,53 @@ <?php - namespace Ulmus\Ldap\Entity; +use Ulmus\Ldap\Entity\Field\{ Datetime }; +/** + * @ObjectClass('computer') + */ class Computer { + use \Ulmus\Ldap\EntityTrait; + /** + * @Field + */ + public string $samaccountname; + + /** + * @Field + */ + public string $name; + + /** + * @Field + */ + public string $description; + + /** + * @Field('DNSHostName') + */ + public string $hostname; + + /** + * @Field + */ + public string $location; + + /** + * @Field + */ + public string $operatingSystem; + + /** + * @Field + */ + public string $operatingSystemServicePack; + + /** + * @Field + */ + public string $operatingSystemVersion; } \ No newline at end of file diff --git a/src/EntityTrait.php b/src/EntityTrait.php index 5e339d8..5bb57c7 100644 --- a/src/EntityTrait.php +++ b/src/EntityTrait.php @@ -4,7 +4,7 @@ namespace Ulmus\Ldap; use Ulmus\{ Ulmus, EventTrait, Query, Common\EntityResolver, Common\EntityField }; -use Ulmus\Ldap\Annotation\Classes\{ ObjectClass, }; +use Ulmus\Ldap\Annotation\Classes\{ ObjectClass, ObjectType, }; trait EntityTrait { use \Ulmus\EntityTrait; diff --git a/src/Query/Filter.php b/src/Query/Filter.php index d0470e6..b1730c5 100644 --- a/src/Query/Filter.php +++ b/src/Query/Filter.php @@ -96,7 +96,7 @@ class Filter extends Fragment { $return = $this->content ?: $this->content = implode("", array_filter([ $this->field, $this->operator(), - $this->operator === Filter::OPERATOR_LIKE ? "*{$this->value}*" : $value, + $this->operator === Filter::OPERATOR_LIKE ? str_replace('%', '*', $this->value) : $value, ])); return $this->applyOperator($return, ""); diff --git a/src/Repository.php b/src/Repository.php index 3738f20..43078dd 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -2,7 +2,7 @@ namespace Ulmus\Ldap; -use Ulmus\Ldap\Annotation\Classes\ObjectClass; +use Ulmus\Ldap\Annotation\Classes\{ ObjectClass, ObjectType }; use Ulmus\{EntityCollection, Ulmus, SearchRequest, Query}; use Ulmus\Annotation\Property\{ Where, Having, Relation, Join, WithJoin, Relation\Ignore as RelationIgnore }; use Ulmus\Common\EntityResolver; @@ -27,10 +27,14 @@ class Repository extends \Ulmus\Repository $this->select(array_keys($this->entityResolver->fieldList(EntityResolver::KEY_COLUMN_NAME))); } - if ( null !== $objectClass = $this->entityResolver->getAnnotationFromClassname( ObjectClass::class ) ) { + if ( null !== $objectClass = $this->entityResolver->getAnnotationFromClassname( ObjectClass::class, false ) ) { $this->where('objectclass', $objectClass->type); } + if ( null !== $objectClass = $this->entityResolver->getAnnotationFromClassname( ObjectType::class, false ) ) { + $this->where('objecttype', $objectClass->type); + } + return $this; }