git subrepo commit (merge) mailcow/src/mailcow-dockerized

subrepo: subdir:   "mailcow/src/mailcow-dockerized"
  merged:   "02ae5285"
upstream: origin:   "https://github.com/mailcow/mailcow-dockerized.git"
  branch:   "master"
  commit:   "649a5c01"
git-subrepo: version:  "0.4.3"
  origin:   "???"
  commit:   "???"
Change-Id: I870ad468fba026cc5abf3c5699ed1e12ff28b32b
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Entry.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Entry.php
new file mode 100644
index 0000000..7fdda9c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Entry.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace LdapRecord\Models\FreeIPA;
+
+use LdapRecord\Connection;
+use LdapRecord\Models\Entry as BaseEntry;
+use LdapRecord\Models\FreeIPA\Scopes\AddEntryUuidToSelects;
+use LdapRecord\Models\Types\FreeIPA;
+use LdapRecord\Query\Model\FreeIpaBuilder;
+
+/** @mixin FreeIpaBuilder */
+class Entry extends BaseEntry implements FreeIPA
+{
+    /**
+     * The attribute key that contains the models object GUID.
+     *
+     * @var string
+     */
+    protected $guidKey = 'ipauniqueid';
+
+    /**
+     * The default attributes that should be mutated to dates.
+     *
+     * @var array
+     */
+    protected $defaultDates = [
+        'krblastpwdchange' => 'ldap',
+        'krbpasswordexpiration' => 'ldap',
+    ];
+
+    /**
+     * @inheritdoc
+     */
+    protected static function boot()
+    {
+        parent::boot();
+
+        // Here we'll add a global scope to all FreeIPA models to ensure the
+        // Entry UUID is always selected on each query. This attribute is
+        // virtual, so it must be manually selected to be included.
+        static::addGlobalScope(new AddEntryUuidToSelects());
+    }
+
+    /**
+     * Create a new query builder.
+     *
+     * @param Connection $connection
+     *
+     * @return FreeIpaBuilder
+     */
+    public function newQueryBuilder(Connection $connection)
+    {
+        return new FreeIpaBuilder($connection);
+    }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Group.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Group.php
new file mode 100644
index 0000000..10fd934
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Group.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace LdapRecord\Models\FreeIPA;
+
+class Group extends Entry
+{
+    /**
+     * The object classes of the LDAP model.
+     *
+     * @var array
+     */
+    public static $objectClasses = [
+        'top',
+        'groupofnames',
+        'nestedgroup',
+        'ipausergroup',
+        'posixgroup',
+    ];
+
+    /**
+     * The groups relationship.
+     *
+     * Retrieves groups that the current group is apart of.
+     *
+     * @return \LdapRecord\Models\Relations\HasMany
+     */
+    public function groups()
+    {
+        return $this->hasMany(self::class, 'member');
+    }
+
+    /**
+     * Retrieve the members of the group.
+     *
+     * @return \LdapRecord\Models\Relations\HasMany
+     */
+    public function members()
+    {
+        return $this->hasMany(User::class, 'memberof')->using($this, 'member');
+    }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Scopes/AddEntryUuidToSelects.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Scopes/AddEntryUuidToSelects.php
new file mode 100644
index 0000000..039c05e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/Scopes/AddEntryUuidToSelects.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace LdapRecord\Models\FreeIPA\Scopes;
+
+use LdapRecord\Models\Model;
+use LdapRecord\Models\Scope;
+use LdapRecord\Query\Model\Builder;
+
+class AddEntryUuidToSelects implements Scope
+{
+    /**
+     * Add the entry UUID to the selected attributes.
+     *
+     * @param Builder $query
+     * @param Model   $model
+     *
+     * @return void
+     */
+    public function apply(Builder $query, Model $model)
+    {
+        empty($query->columns)
+            ? $query->addSelect(['*', $model->getGuidKey()])
+            : $query->addSelect($model->getGuidKey());
+    }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/User.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/User.php
new file mode 100644
index 0000000..24c7f3b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/directorytree/ldaprecord/src/Models/FreeIPA/User.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace LdapRecord\Models\FreeIPA;
+
+class User extends Entry
+{
+    /**
+     * The object classes of the LDAP model.
+     *
+     * @var array
+     */
+    public static $objectClasses = [
+        'top',
+        'person',
+        'inetorgperson',
+        'organizationalperson',
+    ];
+
+    /**
+     * Retrieve groups that the current user is apart of.
+     *
+     * @return \LdapRecord\Models\Relations\HasMany
+     */
+    public function groups()
+    {
+        return $this->hasMany(Group::class, 'member');
+    }
+}