From 131853104d995911a078f1cddf409d290ec9c043 Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Wed, 17 Sep 2025 20:28:57 +0000 Subject: [PATCH] - Work done on UserAccountControl --- src/Entity/User.php | 2 +- src/Entity/UserAccountControlEnum.php | 28 ++++++++++++++++++++++++++ src/Entity/UserAccountControlTrait.php | 16 +++++++++++++++ src/Query/Filter.php | 9 +++++++++ src/QueryBuilder.php | 4 ++-- src/Repository.php | 2 +- 6 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/Entity/UserAccountControlEnum.php create mode 100644 src/Entity/UserAccountControlTrait.php diff --git a/src/Entity/User.php b/src/Entity/User.php index 901e76f..535911e 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -12,7 +12,7 @@ use Ulmus\Ldap\Attribute\Obj\ObjectClass; #[ObjectClass("user")] class User implements EntityInterface { - use \Ulmus\Ldap\EntityTrait; + use \Ulmus\Ldap\EntityTrait, UserAccountControlTrait; #[Field] public string $samaccountname; diff --git a/src/Entity/UserAccountControlEnum.php b/src/Entity/UserAccountControlEnum.php new file mode 100644 index 0000000..9ad57f4 --- /dev/null +++ b/src/Entity/UserAccountControlEnum.php @@ -0,0 +1,28 @@ +userAccountControl & $userAccountControl->value) === $userAccountControl->value; + } + + public function isDisabled() : bool + { + return $this->matchAccountControl(UserAccountControlEnum::ACCOUNTDISABLE); + } +} \ No newline at end of file diff --git a/src/Query/Filter.php b/src/Query/Filter.php index ee3a74e..6808610 100644 --- a/src/Query/Filter.php +++ b/src/Query/Filter.php @@ -105,6 +105,10 @@ class Filter extends Fragment { $this->operator === Filter::OPERATOR_LIKE ? str_replace('%', '*', $this->value) : $value, ])); + if ($this->not) { + $return = "!($return)"; + } + return $this->applyOperator($return, ""); } @@ -129,6 +133,11 @@ class Filter extends Fragment { return "(" . implode(", ", $stack) . ")"; } + if ($this->operator === '=' && $this->value === "") { + $this->value = "*"; + $this->not = true; + } + return $this->filterValue($this->value); } diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 218c295..647dffc 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -180,9 +180,9 @@ class QueryBuilder implements Ulmus\QueryBuilder\QueryBuilderInterface return $this; } - public function notWhere($field, $value, string $operator = Ulmus\Query\Where::CONDITION_AND) : self + public function notWhere($field, $value, string $operator = Ulmus\Query\Where::OPERATOR_EQUAL, string $condition = Ulmus\Query\Where::CONDITION_AND) : self { - return $this->where($field, $value, $operator, true); + return $this->where($field, $value, $operator, $condition, true); } public function limit(int $value) : self diff --git a/src/Repository.php b/src/Repository.php index a921347..b1c6e46 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -15,7 +15,7 @@ class Repository extends \Ulmus\Repository public array $events = []; - public readonly \Ulmus\QueryBuilder\QueryBuilderInterface $queryBuilder; + # public readonly \Ulmus\QueryBuilder\QueryBuilderInterface $queryBuilder; public function __construct(string $entity, string $alias = self::DEFAULT_ALIAS, ConnectionAdapter $adapter = null) { # $this->queryBuilder = new QueryBuilder();