blob: 92ad91e5a6c779f956890fbcbcd2caec4e856fad [file] [log] [blame]
<?php
namespace Adldap\Models;
use Adldap\Query\Builder;
use Adldap\Schemas\ActiveDirectory;
use Adldap\Schemas\SchemaInterface;
/**
* Class Factory.
*
* Creates new LDAP models.
*/
class Factory
{
/**
* The LDAP query builder.
*
* @var Builder
*/
protected $query;
/**
* The LDAP schema.
*
* @var SchemaInterface
*/
protected $schema;
/**
* Constructor.
*
* @param Builder $builder
*/
public function __construct(Builder $builder)
{
$this->setQuery($builder)
->setSchema($builder->getSchema());
}
/**
* Sets the current query builder.
*
* @param Builder $builder
*
* @return $this
*/
public function setQuery(Builder $builder)
{
$this->query = $builder;
return $this;
}
/**
* Sets the current schema.
*
* If null is given, a default ActiveDirectory schema is set.
*
* @param SchemaInterface|null $schema
*
* @return $this
*/
public function setSchema(SchemaInterface $schema = null)
{
$this->schema = $schema ?: new ActiveDirectory();
return $this;
}
/**
* Creates a new generic LDAP entry instance.
*
* @param array $attributes
*
* @return Entry
*/
public function entry(array $attributes = [])
{
$model = $this->schema->entryModel();
return new $model($attributes, $this->query);
}
/**
* Creates a new user instance.
*
* @param array $attributes
*
* @return User
*/
public function user(array $attributes = [])
{
$model = $this->schema->userModel();
return (new $model($attributes, $this->query))
->setAttribute($this->schema->objectClass(), $this->schema->userObjectClasses());
}
/**
* Creates a new organizational unit instance.
*
* @param array $attributes
*
* @return OrganizationalUnit
*/
public function ou(array $attributes = [])
{
$model = $this->schema->organizationalUnitModel();
return (new $model($attributes, $this->query))
->setAttribute($this->schema->objectClass(), [
$this->schema->top(),
$this->schema->organizationalUnit(),
]);
}
/**
* Creates a new organizational unit instance.
*
* @param array $attributes
*
* @return Organization
*/
public function organization(array $attributes = [])
{
$model = $this->schema->organizationModel();
return (new $model($attributes, $this->query))
->setAttribute($this->schema->objectClass(), [
$this->schema->top(),
$this->schema->organization(),
]);
}
/**
* Creates a new group instance.
*
* @param array $attributes
*
* @return Group
*/
public function group(array $attributes = [])
{
$model = $this->schema->groupModel();
return (new $model($attributes, $this->query))
->setAttribute($this->schema->objectClass(), [
$this->schema->top(),
$this->schema->objectCategoryGroup(),
]);
}
/**
* Creates a new organizational unit instance.
*
* @param array $attributes
*
* @return Container
*/
public function container(array $attributes = [])
{
$model = $this->schema->containerModel();
return (new $model($attributes, $this->query))
->setAttribute($this->schema->objectClass(), $this->schema->objectClassContainer());
}
/**
* Creates a new user instance as a contact.
*
* @param array $attributes
*
* @return User
*/
public function contact(array $attributes = [])
{
$model = $this->schema->contactModel();
return (new $model($attributes, $this->query))
->setAttribute($this->schema->objectClass(), [
$this->schema->top(),
$this->schema->person(),
$this->schema->organizationalPerson(),
$this->schema->contact(),
]);
}
/**
* Creates a new computer instance.
*
* @param array $attributes
*
* @return Computer
*/
public function computer(array $attributes = [])
{
$model = $this->schema->computerModel();
return (new $model($attributes, $this->query))
->setAttribute($this->schema->objectClass(), [
$this->schema->top(),
$this->schema->person(),
$this->schema->organizationalPerson(),
$this->schema->user(),
$this->schema->computer(),
]);
}
}