Documentation

LDAPCommittee extends LDAPObject
in package

LDAP Committee class

Each committee (group) returned from the LDAPI will be an instance of the this class.

Tags
author

ITco itco@astatine.utwente.nl

author

Robert Roos robert.roos@astatine.utwente.nl

copyright

September 2017 - 2018, S.A. Astatine

license

PHP License 3.01

Table of Contents

BIND_KEY  = 'groups'
Key to the type of bind address (actual bind address is read by LDAPI)
FIXED_FIELDS  = ['id', 'name', 'member_usernames']
List of fields that cannot be patched directly (when altered directly changes are not saved!)
LDAP_KEYS  = [ // LDAP Required 'cn' => 'name', 'gidnumber' => 'id', // LDAP Optional 'memberuid' => 'member_usernames', ]
Maps LDAP keys to properties ('ldap_key' => 'property')
SEARCH_PREFIX  = '(objectClass=posixGroup)(description=com)'
Search addition needed for ldap_search (contains object type)
$id  : int|null
Primary id of this object
$member_usernames  : array<string|int, mixed>
$members  : array<string|int, LDAPUser>|null
$name  : string
$dirty  : array<string|int, mixed>
Altered fields, queue to be saved, 'field' => 'new_value'
$DISPLAY_KEYS  : array<string|int, mixed>
Redeclare keys so they are separate from the parent class
$errors  : array<string|int, mixed>
Validation errors, ordered by field as key
$ldapi_link  : LDAPI
Link to LDAPI instance
$validators  : array<string|int, mixed>
Validators to apply: 'field' => [list of rules]
__construct()  : void
Extend parent construct, make sure member_usernames array is actually an array
__debugInfo()  : array<string|int, mixed>
Override the standard PHP debug information to skip boring stuff
__toString()  : string
Response when object is used as string (return name)
_clearDirty()  : void
Clear all dirty fields
_dirty()  : array<string|int, mixed>
Return dirty fields with their new values
_dirtyToLDAPArray()  : array<string|int, mixed>
Collect all dirty fields and return an array compatible with ldap_save
_getDisplayKey()  : string|false|array<string|int, mixed>
Find a display key (property) based on ldap_key
_getDNPrefix()  : string
Return prefix needed for LDAP binds
_getLdapKey()  : string|false|array<string|int, mixed>
Find an ldap key based on a display key (property)
_setErrors()  : void
Add validation errors
_validate()  : bool
Verify the content, errors are saved in $this->errors
addMembers()  : bool
Add new member(s) to a committee and save it to the LDAP, also works on committee aliasing, pass committee name in this case
collectMembers()  : void
Collect user object of members and save to property
getErrors()  : array<string|int, mixed>|false
Return validation errors
init()  : mixed
Initialize protected static values
patchEntity()  : bool
Alter or insert data, validate it and mark it to be saved
removeMembers()  : bool
Remove member(s) from a committee and save it to the LDAP
saveRename()  : bool
Change the name of the committee and save it to the LDAP (recursively, aliases are modified accordingly) (errors are saved under 'name')
_buildObjectFromLdapData()  : void
Fill instance according to LDAP data
validateMemberRecursion()  : bool
Checks if new uid will create circular reference, which might break the mail server

Constants

BIND_KEY

Key to the type of bind address (actual bind address is read by LDAPI)

public string BIND_KEY = 'groups'

FIXED_FIELDS

List of fields that cannot be patched directly (when altered directly changes are not saved!)

public array<string|int, string> FIXED_FIELDS = ['id', 'name', 'member_usernames']

LDAP_KEYS

Maps LDAP keys to properties ('ldap_key' => 'property')

public array<string|int, mixed> LDAP_KEYS = [ // LDAP Required 'cn' => 'name', 'gidnumber' => 'id', // LDAP Optional 'memberuid' => 'member_usernames', ]

SEARCH_PREFIX

Search addition needed for ldap_search (contains object type)

public string SEARCH_PREFIX = '(objectClass=posixGroup)(description=com)'

Properties

$id

Primary id of this object

public int|null $id = null

$member_usernames

public array<string|int, mixed> $member_usernames = null

$dirty

Altered fields, queue to be saved, 'field' => 'new_value'

protected array<string|int, mixed> $dirty = []

$errors

Validation errors, ordered by field as key

protected array<string|int, mixed> $errors = []

$validators

Validators to apply: 'field' => [list of rules]

protected static array<string|int, mixed> $validators = ['id' => ['optional' => [], 'is_number' => []], 'name' => ['is_string' => [], 'string_length' => [4, 99]], 'member_usernames' => ['optional' => [], 'is_array' => []]]

Methods

__construct()

Extend parent construct, make sure member_usernames array is actually an array

public __construct([array<string|int, mixed>|null $ldap_entry = null ][, LDAPI|null &$ldapi_link = null ]) : void
Parameters
$ldap_entry : array<string|int, mixed>|null = null

LDAP array

$ldapi_link : LDAPI|null = null

Link to LDAPI instance

Return values
void

__debugInfo()

Override the standard PHP debug information to skip boring stuff

public __debugInfo() : array<string|int, mixed>
Return values
array<string|int, mixed>

__toString()

Response when object is used as string (return name)

public __toString() : string
Return values
string

_clearDirty()

Clear all dirty fields

public _clearDirty() : void
Return values
void

_dirty()

Return dirty fields with their new values

public _dirty() : array<string|int, mixed>
Return values
array<string|int, mixed>

_dirtyToLDAPArray()

Collect all dirty fields and return an array compatible with ldap_save

public _dirtyToLDAPArray() : array<string|int, mixed>

The keys of the array will be ldap keys.

Return values
array<string|int, mixed>

_getDisplayKey()

Find a display key (property) based on ldap_key

public static _getDisplayKey([ $ldap_key = null ]) : string|false|array<string|int, mixed>

If a key could not be found, false is returned and a warning is triggered.

The LDAP_KEYS array contains display keys as values, hence it's used here.

Parameters
$ldap_key : = null

string|null Leave empty to return all

Return values
string|false|array<string|int, mixed>

_getDNPrefix()

Return prefix needed for LDAP binds

public _getDNPrefix() : string
Return values
string

_getLdapKey()

Find an ldap key based on a display key (property)

public static _getLdapKey([ $display_key = null ]) : string|false|array<string|int, mixed>

If a key could not be found, false is returned and a warning is triggered.

The DISPLAY_KEYS array contains ldap keys as values, hence it's used here.

Parameters
$display_key : = null

string|null Leave empty to return all

Return values
string|false|array<string|int, mixed>

_setErrors()

Add validation errors

public _setErrors(string $field, array<string|int, mixed>|string $errors) : void
Parameters
$field : string

For property or field

$errors : array<string|int, mixed>|string

Error message(s)

Return values
void

_validate()

Verify the content, errors are saved in $this->errors

public _validate([array<string|int, mixed>|null $fields = null ]) : bool
Parameters
$fields : array<string|int, mixed>|null = null

Verify these fields only, if null all dirty fields are processed

Return values
bool

False on errors

addMembers()

Add new member(s) to a committee and save it to the LDAP, also works on committee aliasing, pass committee name in this case

public addMembers(string|array<string|int, string>|LDAPUser|array<string|int, LDAPUser$new_members[, bool $check = true ]) : bool

The method will return true if at least one update has been made. It no new members were passed or checks failed for each entry, the method will return false.

Parameters
$new_members : string|array<string|int, string>|LDAPUser|array<string|int, LDAPUser>

Array or single, username or LDAPUser object

$check : bool = true

False to disable check, useful for external aliases

Return values
bool

collectMembers()

Collect user object of members and save to property

public collectMembers() : void
Return values
void

getErrors()

Return validation errors

public getErrors([string|null $val = null ]) : array<string|int, mixed>|false
Parameters
$val : string|null = null

Return errors for this field or return all errors

Return values
array<string|int, mixed>|false

Array of errors or false if none exist

init()

Initialize protected static values

public static init() : mixed
Return values
mixed

patchEntity()

Alter or insert data, validate it and mark it to be saved

public patchEntity(array<string|int, mixed> $data) : bool
Parameters
$data : array<string|int, mixed>
Return values
bool

False on validation errors

removeMembers()

Remove member(s) from a committee and save it to the LDAP

public removeMembers(string|array<string|int, string>|LDAPUser|array<string|int, LDAPUser$old_members) : bool
Parameters
$old_members : string|array<string|int, string>|LDAPUser|array<string|int, LDAPUser>

List or single item, username or LDAPUser

Return values
bool

saveRename()

Change the name of the committee and save it to the LDAP (recursively, aliases are modified accordingly) (errors are saved under 'name')

public saveRename(string $new_name) : bool
Parameters
$new_name : string
Return values
bool

_buildObjectFromLdapData()

Fill instance according to LDAP data

protected _buildObjectFromLdapData(array<string|int, mixed> $entry) : void
Parameters
$entry : array<string|int, mixed>

LDAP entry array (single entry!)

Return values
void

validateMemberRecursion()

Checks if new uid will create circular reference, which might break the mail server

private validateMemberRecursion(string $root_id[, null|array<string|int, string> &$committees_check_list = null ]) : bool

This method should be called from committee that is to be added, not from the modified committee. Note: this method will also return false when an existing circle has been found, even if it's outside the new alias that's being checked.

Parameters
$root_id : string

Name of committee that should not be in any of the other committees

$committees_check_list : null|array<string|int, string> = null

List of all the committees already checked, used to detect an existing circular dependency - Leave at default when calling the method for the first time

Return values
bool

Returns false when there is a recursive problem

Search results