phpldapadmin/lib/schema_functions.php

1429 lines
40 KiB
PHP
Raw Normal View History

2009-06-30 08:07:14 +00:00
<?php
2009-06-30 10:46:00 +00:00
// $Header: /cvsroot/phpldapadmin/phpldapadmin/lib/schema_functions.php,v 1.92 2007/12/15 07:50:32 wurley Exp $
2009-06-30 08:07:14 +00:00
2009-06-30 09:29:51 +00:00
/**
2009-06-30 09:22:30 +00:00
* Classes and functions for fetching and parsing schema from an LDAP server.
2009-06-30 09:29:51 +00:00
*
2009-06-30 09:22:30 +00:00
* @package phpLDAPadmin
* @author The phpLDAPadmin development team
2009-06-30 09:29:51 +00:00
*/
2009-06-30 09:22:30 +00:00
/**
* Generic parent class for all schema items. A schema item is
* an ObjectClass, an AttributeBype, a MatchingRule, or a Syntax.
2009-06-30 09:29:51 +00:00
* All schema items have at least two things in common: An OID
* and a description. This class provides an implementation for
2009-06-30 09:22:30 +00:00
* these two data.
2009-06-30 09:29:51 +00:00
* @package phpLDAPadmin
2009-06-30 09:22:30 +00:00
*/
2009-06-30 09:29:51 +00:00
class SchemaItem {
2009-06-30 10:46:00 +00:00
# The OID of this schema item.
2009-06-30 09:29:51 +00:00
var $oid;
2009-06-30 10:46:00 +00:00
# The description of this schema item.
2009-06-30 09:29:51 +00:00
var $description;
2009-06-30 10:46:00 +00:00
# Initialize class members to default values.
2009-06-30 09:29:51 +00:00
function initVars() {
$this->oid = null;
$this->description = null;
}
2009-06-30 10:46:00 +00:00
function setOID($new_oid) {
2009-06-30 09:22:30 +00:00
$this->oid = $new_oid;
2009-06-30 08:09:20 +00:00
}
2009-06-30 10:46:00 +00:00
function setDescription($new_desc) {
2009-06-30 09:22:30 +00:00
$this->description = $new_desc;
2009-06-30 08:09:20 +00:00
}
2009-06-30 09:29:51 +00:00
function getOID() {
return $this->oid;
}
2009-06-30 09:22:30 +00:00
2009-06-30 09:29:51 +00:00
function getDescription() {
return $this->description;
}
}
2009-06-30 08:09:20 +00:00
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:07:14 +00:00
* Represents an LDAP objectClass
2009-06-30 09:29:51 +00:00
* @package phpLDAPadmin
2009-06-30 08:07:14 +00:00
*/
2009-06-30 09:29:51 +00:00
class ObjectClass extends SchemaItem {
2009-06-30 10:46:00 +00:00
# This objectClass' name, ie "inetOrgPerson"
2009-06-30 08:07:14 +00:00
var $name;
2009-06-30 10:46:00 +00:00
# Array of objectClass names from which this objectClass inherits
2009-06-30 08:07:14 +00:00
var $sup_classes;
2009-06-30 10:46:00 +00:00
# One of STRUCTURAL, ABSTRACT, or AUXILIARY
2009-06-30 08:07:14 +00:00
var $type;
2009-06-30 10:46:00 +00:00
# Arrays of attribute names that this objectClass requires
2009-06-30 08:07:14 +00:00
var $must_attrs;
2009-06-30 10:46:00 +00:00
# Arrays of attribute names that this objectClass allows, but does not require
2009-06-30 08:07:14 +00:00
var $may_attrs;
2009-06-30 10:46:00 +00:00
# Boolean value indicating whether this objectClass is obsolete
2009-06-30 08:07:14 +00:00
var $is_obsolete;
2009-06-30 10:46:00 +00:00
# Array of objectClasses which inherit from this one (must be set at runtime explicitly by the caller)
2009-06-30 09:29:51 +00:00
var $children_objectclasses;
2009-06-30 08:07:14 +00:00
2009-06-30 10:46:00 +00:00
# Initialize the class' member variables
2009-06-30 10:26:08 +00:00
function initVars($ldapserver) {
2009-06-30 09:29:51 +00:00
parent::initVars();
2009-06-30 08:07:14 +00:00
$this->oid = null;
$this->name = null;
$this->description = null;
$this->sup_classes = array();
2009-06-30 10:26:08 +00:00
$this->type = $ldapserver->schema_oclass_default;
2009-06-30 08:07:14 +00:00
$this->must_attrs = array();
$this->may_attrs = array();
$this->is_obsolete = false;
2009-06-30 09:29:51 +00:00
$this->children_objectclasses = array();
2009-06-30 08:07:14 +00:00
}
2009-06-30 10:46:00 +00:00
function _parse_list($i,$strings,&$attrs) {
/*
* A list starts with a ( followed by a list of attributes separated by $ terminated by )
* The first token can therefore be a ( or a (NAME or a (NAME)
* The last token can therefore be a ) or NAME)
* The last token may be terminate by more than one bracket
2009-06-30 09:40:37 +00:00
*/
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%d,%s,%s)',9,__FILE__,__LINE__,__METHOD__,$i,$strings,$attrs);
2009-06-30 09:40:37 +00:00
$string = $strings[$i];
2009-06-30 10:46:00 +00:00
if (! preg_match('/^\(/',$string)) {
# A bareword only - can be terminated by a ) if the last item
2009-06-30 09:40:37 +00:00
if (preg_match('/\)+$/',$string))
2009-06-30 10:46:00 +00:00
$string = preg_replace('/\)+$/','',$string);
2009-06-30 10:26:08 +00:00
2009-06-30 10:46:00 +00:00
array_push($attrs,$string);
2009-06-30 10:26:08 +00:00
2009-06-30 09:40:37 +00:00
} elseif (preg_match('/^\(.*\)$/',$string)) {
2009-06-30 10:46:00 +00:00
$string = preg_replace('/^\(/','',$string);
2009-06-30 10:26:08 +00:00
$string = preg_replace('/\)+$/','',$string);
2009-06-30 10:46:00 +00:00
array_push($attrs,$string);
2009-06-30 10:26:08 +00:00
2009-06-30 09:40:37 +00:00
} else {
2009-06-30 10:46:00 +00:00
# Handle the opening cases first
if ($string == '(') {
$i++;
2009-06-30 10:26:08 +00:00
} elseif (preg_match('/^\(./',$string)) {
2009-06-30 10:46:00 +00:00
$string = preg_replace('/^\(/','',$string);
array_push ($attrs,$string);
2009-06-30 09:40:37 +00:00
$i++;
}
2009-06-30 10:26:08 +00:00
2009-06-30 09:40:37 +00:00
// Token is either a name, a $ or a ')'
// NAME can be terminated by one or more ')'
while (! preg_match('/\)+$/',$strings[$i])) {
2009-06-30 10:46:00 +00:00
$string = $strings[$i];
2009-06-30 10:26:08 +00:00
if ($string == '$') {
2009-06-30 10:46:00 +00:00
$i++;
2009-06-30 09:40:37 +00:00
continue;
}
2009-06-30 10:26:08 +00:00
2009-06-30 09:40:37 +00:00
if (preg_match('/\)$/',$string)) {
2009-06-30 10:46:00 +00:00
$string = preg_replace('/\)+$/','',$string);
2009-06-30 09:40:37 +00:00
} else {
2009-06-30 10:46:00 +00:00
$i++;
2009-06-30 09:40:37 +00:00
}
2009-06-30 10:26:08 +00:00
2009-06-30 10:46:00 +00:00
array_push ($attrs,$string);
2009-06-30 09:40:37 +00:00
}
}
sort($attrs);
2009-06-30 10:26:08 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Returning (%d,[%s],[%s])',9,__FILE__,__LINE__,__METHOD__,$i,$strings,$attrs);
2009-06-30 09:40:37 +00:00
return $i;
}
2009-06-30 09:22:30 +00:00
/**
* Creates a new ObjectClass object given a raw LDAP objectClass string.
2009-06-30 10:40:33 +00:00
* @todo: Unfortunately, some schemas are not well defined - eg: dNSDomain. Where the schema definition is not case consistent with the attribute definitions. This causes us some problems, which we need to resolve.
2009-06-30 08:07:14 +00:00
*/
2009-06-30 10:26:08 +00:00
function ObjectClass($raw_ldap_schema_string,$ldapserver) {
2009-06-30 10:46:00 +00:00
if (DEBUG_ENABLED)
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_schema_string);
2009-06-30 09:29:51 +00:00
2009-06-30 10:26:08 +00:00
$this->initVars($ldapserver);
2009-06-30 08:07:14 +00:00
$class = $raw_ldap_schema_string;
2009-06-30 10:26:08 +00:00
$strings = preg_split('/[\s,]+/',$class,-1,PREG_SPLIT_DELIM_CAPTURE);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
$str_count = count($strings);
for ($i=0; $i < $str_count; $i++) {
2009-06-30 09:29:51 +00:00
switch ($strings[$i]) {
2009-06-30 08:07:14 +00:00
case '(':
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'NAME':
2009-06-30 10:26:08 +00:00
if ($strings[$i+1]!='(') {
2009-06-30 08:07:14 +00:00
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->name) == 0)
2009-06-30 08:07:14 +00:00
$this->name = $strings[$i];
else
2009-06-30 10:46:00 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
} while (! preg_match('/\'$/s',$strings[$i]));
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
} else {
$i++;
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->name) == 0)
2009-06-30 09:29:51 +00:00
$this->name = $strings[$i];
2009-06-30 08:07:14 +00:00
else
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
} while (! preg_match('/\'$/s',$strings[$i]));
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
do {
$i++;
2009-06-30 09:29:51 +00:00
} while (! preg_match('/\)+\)?/',$strings[$i]));
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
$this->name = preg_replace('/^\'/','',$this->name);
$this->name = preg_replace('/\'$/','',$this->name);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case NAME returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->name);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'DESC':
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->description) == 0)
2009-06-30 08:07:14 +00:00
$this->description=$this->description . $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->description=$this->description . ' ' . $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
} while (! preg_match('/\'$/s',$strings[$i]));
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case DESC returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->description);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'OBSOLETE':
$this->is_obsolete = TRUE;
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case OBSOLETE returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->is_obsolete);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'SUP':
2009-06-30 10:46:00 +00:00
if ($strings[$i+1] != '(') {
2009-06-30 08:07:14 +00:00
$i++;
2009-06-30 10:26:08 +00:00
array_push($this->sup_classes,preg_replace("/'/",'',$strings[$i]));
2009-06-30 09:29:51 +00:00
} else {
2009-06-30 08:07:14 +00:00
$i++;
do {
$i++;
2009-06-30 10:46:00 +00:00
if ($strings[$i] != '$')
2009-06-30 10:26:08 +00:00
array_push($this->sup_classes,preg_replace("/'/",'',$strings[$i]));
2009-06-30 09:29:51 +00:00
} while (! preg_match('/\)+\)?/',$strings[$i+1]));
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case SUP returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->sup_classes);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'ABSTRACT':
2009-06-30 10:46:00 +00:00
$this->type = 'abstract';
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case ABSTRACT returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->type);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'STRUCTURAL':
2009-06-30 10:46:00 +00:00
$this->type = 'structural';
2009-06-30 10:26:08 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case STRUCTURAL returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->type);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'AUXILIARY':
2009-06-30 10:46:00 +00:00
$this->type = 'auxiliary';
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case AUXILIARY returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->type);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'MUST':
2009-06-30 10:46:00 +00:00
$attrs = array();
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
$i = $this->_parse_list(++$i,$strings,$attrs);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('_parse_list returned %d (%s)',8,__FILE__,__LINE__,__METHOD__,$i,$attrs);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
foreach ($attrs as $string) {
2009-06-30 10:46:00 +00:00
$attr = new ObjectClass_ObjectClassAttribute($string,$this->name);
array_push($this->must_attrs,$attr);
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case MUST returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->must_attrs);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'MAY':
2009-06-30 10:46:00 +00:00
$attrs = array();
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
$i = $this->_parse_list(++$i,$strings,$attrs);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('_parse_list returned %d (%s)',8,__FILE__,__LINE__,__METHOD__,$i,$attrs);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
foreach ($attrs as $string) {
2009-06-30 10:46:00 +00:00
$attr = new ObjectClass_ObjectClassAttribute($string,$this->name);
array_push ($this->may_attrs,$attr);
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case MAY returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->may_attrs);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
default:
2009-06-30 10:46:00 +00:00
if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1) {
2009-06-30 08:07:14 +00:00
$this->oid = $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case default returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->oid);
2009-06-30 09:40:37 +00:00
}
break;
2009-06-30 08:07:14 +00:00
}
}
2009-06-30 10:46:00 +00:00
$this->description = preg_replace("/^\'/",'',$this->description);
$this->description = preg_replace("/\'$/",'',$this->description);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Returning () - NAME (%s), DESCRIPTION (%s), MUST (%s), MAY (%s)',9,__FILE__,__LINE__,__METHOD__,
$this->name,$this->description,$this->must_attrs,$this->may_attrs);
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
/**
* Gets an array of AttributeType objects that entries of this ObjectClass must define.
* This differs from getMustAttrNames in that it returns an array of AttributeType objects
*
* @param array $oclasses An array of ObjectClass objects to use when traversing
* the inheritance tree. This presents some what of a bootstrapping problem
* as we must fetch all objectClasses to determine through inheritance which
* attributes this objectClass requires.
* @return array The array of required AttributeType objects.
*
* @see getMustAttrNames
* @see getMayAttrs
* @see getMayAttrNames
*/
2009-06-30 10:46:00 +00:00
function getMustAttrs($oclasses=null) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses);
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
$all_must_attrs = array();
$all_must_attrs = $this->must_attrs;
2009-06-30 10:26:08 +00:00
foreach ($this->sup_classes as $sup_class) {
if (! is_null($oclasses) && $sup_class != 'top'
&& isset($oclasses[strtolower($sup_class)])) {
$sup_class = $oclasses[ strtolower($sup_class)];
$sup_class_must_attrs = $sup_class->getMustAttrs($oclasses);
$all_must_attrs = array_merge($sup_class_must_attrs,$all_must_attrs);
2009-06-30 08:09:20 +00:00
}
}
2009-06-30 10:26:08 +00:00
masort($all_must_attrs,'name,source',1);
# Remove any duplicates
foreach ($all_must_attrs as $index => $attr)
if (isset($allattr[$attr->name]))
unset($all_must_attrs[$index]);
else
$allattr[$attr->name] = 1;
2009-06-30 08:09:20 +00:00
return $all_must_attrs;
}
2009-06-30 09:29:51 +00:00
/**
* Gets an array of AttributeType objects that entries of this ObjectClass may define.
* This differs from getMayAttrNames in that it returns an array of AttributeType objects
*
* @param array $oclasses An array of ObjectClass objects to use when traversing
* the inheritance tree. This presents some what of a bootstrapping problem
* as we must fetch all objectClasses to determine through inheritance which
* attributes this objectClass provides.
* @return array The array of allowed AttributeType objects.
*
* @see getMustAttrNames
* @see getMustAttrs
* @see getMayAttrNames
* @see AttributeType
*/
2009-06-30 10:26:08 +00:00
function getMayAttrs($oclasses=null) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses);
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
$all_may_attrs = array();
$all_may_attrs = $this->may_attrs;
2009-06-30 10:26:08 +00:00
foreach ($this->sup_classes as $sup_class_name) {
if (! is_null($oclasses) && $sup_class_name != 'top'
&& isset($oclasses[strtolower($sup_class_name)])) {
$sup_class = $oclasses[strtolower($sup_class_name)];
$sup_class_may_attrs = $sup_class->getMayAttrs($oclasses);
$all_may_attrs = array_merge($sup_class_may_attrs,$all_may_attrs);
2009-06-30 09:29:51 +00:00
}
2009-06-30 08:09:20 +00:00
}
2009-06-30 10:26:08 +00:00
masort($all_may_attrs,'name,source',1);
# Remove any duplicates
foreach ($all_may_attrs as $index => $attr)
if (isset($allattr[$attr->name]))
unset($all_may_attrs[$index]);
else
$allattr[$attr->name] = 1;
2009-06-30 08:09:20 +00:00
return $all_may_attrs;
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
/**
* Gets an array of attribute names (strings) that entries of this ObjectClass must define.
* This differs from getMustAttrs in that it returns an array of strings rather than
* array of AttributeType objects
*
* @param array $oclasses An array of ObjectClass objects to use when traversing
* the inheritance tree. This presents some what of a bootstrapping problem
* as we must fetch all objectClasses to determine through inheritance which
* attributes this objectClass provides.
* @return array The array of allowed attribute names (strings).
*
* @see getMustAttrs
* @see getMayAttrs
* @see getMayAttrNames
*/
2009-06-30 10:46:00 +00:00
function getMustAttrNames($oclasses=null) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
$attrs = $this->getMustAttrs($oclasses);
2009-06-30 08:09:20 +00:00
$attr_names = array();
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
foreach ($attrs as $attr)
2009-06-30 08:09:20 +00:00
$attr_names[] = $attr->getName();
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
return $attr_names;
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
/**
* Gets an array of attribute names (strings) that entries of this ObjectClass must define.
* This differs from getMayAttrs in that it returns an array of strings rather than
* array of AttributeType objects
*
* @param array $oclasses An array of ObjectClass objects to use when traversing
* the inheritance tree. This presents some what of a bootstrapping problem
* as we must fetch all objectClasses to determine through inheritance which
* attributes this objectClass provides.
* @return array The array of allowed attribute names (strings).
*
* @see getMustAttrs
* @see getMayAttrs
* @see getMustAttrNames
*/
2009-06-30 10:46:00 +00:00
function getMayAttrNames($oclasses=null) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
$attrs = $this->getMayAttrs($oclasses);
2009-06-30 08:09:20 +00:00
$attr_names = array();
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
foreach ($attrs as $attr)
2009-06-30 08:09:20 +00:00
$attr_names[] = $attr->getName();
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
return $attr_names;
}
2009-06-30 09:29:51 +00:00
/**
* Adds an objectClass to the list of objectClasses that inherit
* from this objectClass.
* @param String $object_class_name The name of the objectClass to add
* @return bool Returns true on success or false on failure (objectclass already existed for example)
*/
2009-06-30 10:46:00 +00:00
function addChildObjectClass($object_class_name) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$object_class_name);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
$object_class_name = trim($object_class_name);
if (! is_array($this->children_objectclasses))
2009-06-30 09:29:51 +00:00
$this->children_objectclasses = array();
2009-06-30 10:46:00 +00:00
foreach ($this->children_objectclasses as $existing_objectclass)
if (strcasecmp($object_class_name,$existing_objectclass) == 0)
2009-06-30 09:29:51 +00:00
return false;
$this->children_objectclasses[] = $object_class_name;
return true;
}
/**
* Returns the array of objectClass names which inherit from this objectClass.
* @return Array Names of objectClasses which inherit from this objectClass.
*/
function getChildObjectClasses() {
return $this->children_objectclasses;
}
/**
* Gets the name of this objectClass (ie, "inetOrgPerson")
* @return string The name of the objectClass
*/
function getName() {
2009-06-30 08:07:14 +00:00
return $this->name;
}
2009-06-30 09:29:51 +00:00
/**
* Gets the objectClass names from which this objectClass inherits.
*
* @return array An array of objectClass names (strings)
*/
function getSupClasses() {
2009-06-30 08:07:14 +00:00
return $this->sup_classes;
}
2009-06-30 09:29:51 +00:00
/**
* Gets the type of this objectClass: STRUCTURAL, ABSTRACT, or AUXILIARY.
*/
function getType() {
2009-06-30 08:07:14 +00:00
return $this->type;
}
2009-06-30 09:29:51 +00:00
/**
* Gets whether this objectClass is flagged as obsolete by the LDAP server.
*/
function getIsObsolete() {
2009-06-30 08:07:14 +00:00
return $this->is_obsolete;
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 09:29:51 +00:00
* Adds the specified array of attributes to this objectClass' list of
2009-06-30 08:07:14 +00:00
* MUST attributes. The resulting array of must attributes will contain
* unique members.
2009-06-30 09:29:51 +00:00
*
* @param array $new_must_attrs An array of attribute names (strings) to add.
2009-06-30 08:07:14 +00:00
*/
2009-06-30 10:46:00 +00:00
function addMustAttrs($new_must_attrs) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$new_must_attrs);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
if (! is_array($new_must_attrs))
2009-06-30 08:07:14 +00:00
return;
2009-06-30 10:46:00 +00:00
if (count($new_must_attrs) == 0)
2009-06-30 08:07:14 +00:00
return;
2009-06-30 10:46:00 +00:00
$this->must_attrs = array_values(array_unique(array_merge($this->must_attrs,$new_must_attrs)));
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:07:14 +00:00
* Behaves identically to addMustAttrs, but it operates on the MAY
* attributes of this objectClass.
2009-06-30 09:29:51 +00:00
*
* @param array $new_may_attrs An array of attribute names (strings) to add.
2009-06-30 08:07:14 +00:00
*/
2009-06-30 10:46:00 +00:00
function addMayAttrs($new_may_attrs) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$new_may_attrs);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
if (! is_array($new_may_attrs))
2009-06-30 08:07:14 +00:00
return;
2009-06-30 10:46:00 +00:00
if (count($new_may_attrs) == 0)
2009-06-30 08:07:14 +00:00
return;
2009-06-30 10:46:00 +00:00
$this->may_attrs = array_values(array_unique(array_merge($this->may_attrs,$new_may_attrs)));
2009-06-30 08:07:14 +00:00
}
}
2009-06-30 09:29:51 +00:00
/**
* A simple class for representing AttributeTypes used only by the ObjectClass class.
* Users should never instantiate this class. It represents an attribute internal to
* an ObjectClass. If PHP supported inner-classes and variable permissions, this would
* be interior to class ObjectClass and flagged private. The reason this class is used
* and not the "real" class AttributeType is because this class supports the notion of
* a "source" objectClass, meaning that it keeps track of which objectClass originally
* specified it. This class is therefore used by the class ObjectClass to determine
* inheritance.
* @package phpLDAPadmin
*/
2009-06-30 10:46:00 +00:00
class ObjectClass_ObjectClassAttribute {
# This Attribute's name
2009-06-30 09:22:30 +00:00
var $name;
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
# This Attribute's root
2009-06-30 09:22:30 +00:00
var $source;
2009-06-30 09:29:51 +00:00
/**
2009-06-30 10:46:00 +00:00
* Creates a new ObjectClass_ObjectClassAttribute with specified name and source objectClass.
2009-06-30 09:29:51 +00:00
* @param string $name the name of the new attribute.
* @param string $source the name of the ObjectClass which
* specifies this attribute.
*/
2009-06-30 10:46:00 +00:00
function ObjectClass_ObjectClassAttribute($name,$source) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with name (%s), source (%s)',9,__FILE__,__LINE__,__METHOD__,$name,$source);
2009-06-30 10:26:08 +00:00
$this->name = $name;
$this->source = $source;
2009-06-30 09:22:30 +00:00
}
2009-06-30 10:46:00 +00:00
# Gets this attribute's name
2009-06-30 09:29:51 +00:00
function getName () {
return $this->name;
2009-06-30 09:22:30 +00:00
}
2009-06-30 10:46:00 +00:00
# Gets the name of the ObjectClass which originally specified this attribute.
2009-06-30 09:29:51 +00:00
function getSource () {
return $this->source;
2009-06-30 09:22:30 +00:00
}
2009-06-30 09:29:51 +00:00
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 09:29:51 +00:00
* Represents an LDAP AttributeType
* @package phpLDAPadmin
2009-06-30 08:07:14 +00:00
*/
2009-06-30 09:29:51 +00:00
class AttributeType extends SchemaItem {
2009-06-30 10:46:00 +00:00
# The name of this attributeType
2009-06-30 08:07:14 +00:00
var $name;
2009-06-30 10:46:00 +00:00
# string: the description
2009-06-30 08:07:14 +00:00
var $is_obsolete;
2009-06-30 10:46:00 +00:00
# The attribute from which this attribute inherits (if any)
2009-06-30 08:07:14 +00:00
var $sup_attribute;
2009-06-30 10:46:00 +00:00
# The equality rule used
2009-06-30 08:07:14 +00:00
var $equality;
2009-06-30 10:46:00 +00:00
# The ordering of the attributeType
2009-06-30 08:07:14 +00:00
var $ordering;
2009-06-30 10:46:00 +00:00
# Boolean: supports substring matching?
2009-06-30 08:07:14 +00:00
var $sub_str;
2009-06-30 10:46:00 +00:00
# The full syntax string, ie 1.2.3.4{16}
2009-06-30 08:07:14 +00:00
var $syntax;
2009-06-30 10:46:00 +00:00
# boolean: is single valued only?
2009-06-30 08:07:14 +00:00
var $is_single_value;
2009-06-30 10:46:00 +00:00
# boolean: is collective?
2009-06-30 08:07:14 +00:00
var $is_collective;
2009-06-30 10:46:00 +00:00
# boolean: can use modify?
2009-06-30 08:07:14 +00:00
var $is_no_user_modification;
2009-06-30 10:46:00 +00:00
# The usage string set by the LDAP schema
2009-06-30 08:07:14 +00:00
var $usage;
2009-06-30 10:46:00 +00:00
# An array of alias attribute names, strings
2009-06-30 08:07:14 +00:00
var $aliases;
2009-06-30 10:46:00 +00:00
# The max number of characters this attribute can be
2009-06-30 08:07:14 +00:00
var $max_length;
2009-06-30 10:46:00 +00:00
# A string description of the syntax type (taken from the LDAPSyntaxes)
2009-06-30 08:07:14 +00:00
var $type;
2009-06-30 10:46:00 +00:00
# An array of objectClasses which use this attributeType (must be set by caller)
2009-06-30 08:07:14 +00:00
var $used_in_object_classes;
2009-06-30 10:46:00 +00:00
# A list of object class names that require this attribute type.
2009-06-30 09:40:37 +00:00
var $required_by_object_classes;
2009-06-30 08:07:14 +00:00
2009-06-30 09:29:51 +00:00
/**
* Initialize the class' member variables
2009-06-30 08:07:14 +00:00
*/
2009-06-30 09:29:51 +00:00
function initVars() {
parent::initVars();
2009-06-30 08:07:14 +00:00
$this->oid = null;
$this->name = null;
$this->description = null;
$this->is_obsolete = false;
$this->sup_attribute = null;
$this->equality = null;
$this->ordering = null;
$this->sub_str = null;
$this->syntax_oid = null;
$this->syntax = null;
$this->max_length = null;
2009-06-30 08:09:20 +00:00
$this->is_single_value= null;
2009-06-30 08:07:14 +00:00
$this->is_collective = false;
$this->is_no_user_modification = false;
$this->usage = null;
$this->aliases = array();
$this->type = null;
$this->used_in_object_classes = array();
2009-06-30 09:22:30 +00:00
$this->required_by_object_classes = array();
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:22:30 +00:00
/**
* Creates a new AttributeType objcet from a raw LDAP AttributeType string.
2009-06-30 08:07:14 +00:00
*/
2009-06-30 10:46:00 +00:00
function AttributeType($raw_ldap_attr_string) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_attr_string);
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
$this->initVars();
$attr = $raw_ldap_attr_string;
2009-06-30 10:26:08 +00:00
$strings = preg_split('/[\s,]+/',$attr,-1,PREG_SPLIT_DELIM_CAPTURE);
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
for($i=0; $i<count($strings); $i++) {
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
switch($strings[$i]) {
case '(':
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'NAME':
2009-06-30 10:46:00 +00:00
if ($strings[$i+1] != '(') {
2009-06-30 08:07:14 +00:00
do {
$i++;
2009-06-30 09:29:51 +00:00
if (strlen($this->name)==0)
2009-06-30 08:07:14 +00:00
$this->name = $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:07:14 +00:00
// this attribute has no aliases
$this->aliases = array();
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
} else {
$i++;
do {
$i++;
2009-06-30 09:29:51 +00:00
if (strlen($this->name) == 0)
2009-06-30 08:07:14 +00:00
$this->name = $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:07:14 +00:00
// add alias names for this attribute
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
while ($strings[++$i] != ')') {
2009-06-30 08:07:14 +00:00
$alias = $strings[$i];
2009-06-30 10:46:00 +00:00
$alias = preg_replace("/^\'/",'',$alias);
$alias = preg_replace("/\'$/",'',$alias);
2009-06-30 08:07:14 +00:00
$this->aliases[] = $alias;
}
}
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case NAME returned (%s) (%s)',8,__FILE__,__LINE__,__METHOD__,$this->name,$this->aliases);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'DESC':
do {
$i++;
2009-06-30 09:29:51 +00:00
if (strlen($this->description)==0)
2009-06-30 08:07:14 +00:00
$this->description=$this->description . $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->description=$this->description . ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case DESC returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->description);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'OBSOLETE':
$this->is_obsolete = TRUE;
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case OBSOLETE returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->is_obsolete);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'SUP':
$i++;
$this->sup_attribute = $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case SUP returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->sup_attribute);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'EQUALITY':
$i++;
$this->equality = $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case EQUALITY returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->equality);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'ORDERING':
$i++;
$this->ordering = $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case ORDERING returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->ordering);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'SUBSTR':
$i++;
$this->sub_str = $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case SUBSTR returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->sub_str);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'SYNTAX':
$i++;
$this->syntax = $strings[$i];
2009-06-30 10:46:00 +00:00
$this->syntax_oid = preg_replace('/{\d+}$/','',$this->syntax);
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
// does this SYNTAX string specify a max length (ie, 1.2.3.4{16})
2009-06-30 10:46:00 +00:00
if (preg_match('/{(\d+)}$/',$this->syntax,$this->max_length))
2009-06-30 08:07:14 +00:00
$this->max_length = $this->max_length[1];
2009-06-30 09:29:51 +00:00
else
2009-06-30 08:07:14 +00:00
$this->max_length = null;
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
if ($i < count($strings) - 1 && $strings[$i+1] == '{') {
2009-06-30 08:07:14 +00:00
do {
$i++;
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while ($strings[$i] != '}');
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case SYNTAX returned (%s) (%s) (%s)',8,__FILE__,__LINE__,__METHOD__,
$this->syntax,$this->syntax_oid,$this->max_length);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'SINGLE-VALUE':
$this->is_single_value = TRUE;
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case SINGLE-VALUE returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->is_single_value);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'COLLECTIVE':
$this->is_collective = TRUE;
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case COLLECTIVE returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->is_collective);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'NO-USER-MODIFICATION':
$this->is_no_user_modification = TRUE;
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case NO-USER-MODIFICATION returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->is_no_user_modification);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
case 'USAGE':
$i++;
$this->usage = $strings[$i];
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case USAGE returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->usage);
2009-06-30 08:07:14 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:07:14 +00:00
default:
2009-06-30 10:46:00 +00:00
if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1) {
2009-06-30 08:07:14 +00:00
$this->oid = $strings[$i];
2009-06-30 10:46:00 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Case default returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->oid);
2009-06-30 09:40:37 +00:00
}
2009-06-30 08:07:14 +00:00
}
}
2009-06-30 10:46:00 +00:00
$this->name = preg_replace("/^\'/",'',$this->name);
$this->name = preg_replace("/\'$/",'',$this->name);
$this->description = preg_replace("/^\'/",'',$this->description);
$this->description = preg_replace("/\'$/",'',$this->description);
$this->syntax = preg_replace("/^\'/",'',$this->syntax);
$this->syntax = preg_replace("/\'$/",'',$this->syntax);
$this->syntax_oid = preg_replace("/^\'/",'',$this->syntax_oid);
$this->syntax_oid = preg_replace("/\'$/",'',$this->syntax_oid);
$this->sup_attribute = preg_replace("/^\'/",'',$this->sup_attribute);
$this->sup_attribute = preg_replace("/\'$/",'',$this->sup_attribute);
2009-06-30 09:29:51 +00:00
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Returning ()',9,__FILE__,__LINE__,__METHOD__);
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
/**
* Gets this attribute's name
* @return string
*/
function getName() {
2009-06-30 08:07:14 +00:00
return $this->name;
}
2009-06-30 09:29:51 +00:00
/**
* Gets whether this attribute has been flagged as obsolete by the LDAP server
* @return bool
*/
function getIsObsolete() {
2009-06-30 08:07:14 +00:00
return $this->is_obsolete;
}
2009-06-30 09:29:51 +00:00
/**
* Gets this attribute's usage string as defined by the LDAP server
* @return string
*/
function getUsage() {
2009-06-30 08:07:14 +00:00
return $this->usage;
}
2009-06-30 09:29:51 +00:00
/**
* Gets this attribute's parent attribute (if any). If this attribute does not
* inherit from another attribute, null is returned.
* @return string
*/
function getSupAttribute() {
2009-06-30 10:46:00 +00:00
if ($this->sup_attribute)
return $this->sup_attribute;
else
return null;
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
/**
* Gets this attribute's equality string
* @return string
*/
function getEquality() {
2009-06-30 08:07:14 +00:00
return $this->equality;
}
2009-06-30 09:29:51 +00:00
/**
* Gets this attribute's ordering specification.
* @return string
*/
function getOrdering() {
2009-06-30 08:07:14 +00:00
return $this->ordering;
}
2009-06-30 09:29:51 +00:00
/**
* Gets this attribute's substring matching specification
* @return string
*/
function getSubstr() {
2009-06-30 08:07:14 +00:00
return $this->sub_str;
}
2009-06-30 09:29:51 +00:00
/**
* Gets the names of attributes that are an alias for this attribute (if any).
* @return array An array of names of attributes which alias this attribute or
* an empty array if no attribute aliases this object.
*/
function getAliases() {
2009-06-30 08:07:14 +00:00
return $this->aliases;
}
2009-06-30 09:29:51 +00:00
/**
* Returns whether the specified attribute is an alias for this one (based on this attribute's alias list).
* @param string $attr_name The name of the attribute to check.
* @return bool True if the specified attribute is an alias for this one, or false otherwise.
*/
2009-06-30 10:46:00 +00:00
function isAliasFor($attr_name) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$attr_name);
2009-06-30 09:22:30 +00:00
2009-06-30 10:46:00 +00:00
foreach ($this->aliases as $alias_attr_name)
if (strcasecmp($alias_attr_name,$attr_name) == 0)
2009-06-30 09:29:51 +00:00
return true;
2009-06-30 10:46:00 +00:00
2009-06-30 09:29:51 +00:00
return false;
}
2009-06-30 09:22:30 +00:00
/**
* Gets this attribute's raw syntax string (ie: "1.2.3.4{16}").
2009-06-30 09:29:51 +00:00
* @return string The raw syntax string
2009-06-30 08:07:14 +00:00
*/
2009-06-30 09:29:51 +00:00
function getSyntaxString() {
2009-06-30 08:07:14 +00:00
return $this->syntax;
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 09:29:51 +00:00
* Gets this attribute's syntax OID. Differs from getSyntaxString() in that this
* function only returns the actual OID with any length specification removed.
* Ie, if the syntax string is "1.2.3.4{16}", this function only retruns
* "1.2.3.4".
* @return string The syntax OID string.
2009-06-30 08:07:14 +00:00
*/
2009-06-30 09:29:51 +00:00
function getSyntaxOID() {
2009-06-30 08:07:14 +00:00
return $this->syntax_oid;
}
2009-06-30 09:22:30 +00:00
/**
* Gets this attribute's the maximum length. If no maximum is defined by the LDAP server, null is returned.
2009-06-30 09:29:51 +00:00
* @return int The maximum length (in characters) of this attribute or null if no maximum is specified.
2009-06-30 08:07:14 +00:00
*/
2009-06-30 09:29:51 +00:00
function getMaxLength() {
2009-06-30 08:07:14 +00:00
return $this->max_length;
}
2009-06-30 09:22:30 +00:00
/**
* Gets whether this attribute is single-valued. If this attribute only supports single values, true
2009-06-30 09:29:51 +00:00
* is returned. If this attribute supports multiple values, false is returned.
* @return bool Returns true if this attribute is single-valued or false otherwise.
2009-06-30 09:22:30 +00:00
*/
2009-06-30 09:29:51 +00:00
function getIsSingleValue() {
2009-06-30 08:07:14 +00:00
return $this->is_single_value;
}
2009-06-30 09:29:51 +00:00
/**
* Sets whether this attribute is single-valued.
* @param bool $is_single_value
*/
2009-06-30 10:46:00 +00:00
function setIsSingleValue($is_single_value) {
2009-06-30 08:09:20 +00:00
$this->is_single_value = $is_single_value;
}
2009-06-30 09:29:51 +00:00
/**
* Gets whether this attribute is collective.
* @return bool Returns true if this attribute is collective and false otherwise.
*/
function getIsCollective() {
2009-06-30 08:07:14 +00:00
return $this->is_collective;
}
2009-06-30 09:29:51 +00:00
/**
* Gets whether this attribute is not modifiable by users.
* @return bool Returns true if this attribute is not modifiable by users.
*/
function getIsNoUserModification() {
2009-06-30 08:07:14 +00:00
return $this->is_no_user_modification;
}
2009-06-30 09:29:51 +00:00
/**
* Gets this attribute's type
* @return string The attribute's type.
*/
function getType() {
2009-06-30 08:07:14 +00:00
return $this->type;
}
2009-06-30 09:22:30 +00:00
/**
* Removes an attribute name from this attribute's alias array.
2009-06-30 09:29:51 +00:00
* @param string $remove_alias_name The name of the attribute to remove.
* @return bool true on success or false on failure (ie, if the specified
* attribute name is not found in this attribute's list of aliases)
2009-06-30 08:07:14 +00:00
*/
2009-06-30 10:46:00 +00:00
function removeAlias($remove_alias_name) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$remove_alias_name);
foreach ($this->aliases as $i => $alias_name) {
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
if (strcasecmp($alias_name,$remove_alias_name) == 0) {
unset($this->aliases[$i]);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
$this->aliases = array_values($this->aliases);
2009-06-30 08:07:14 +00:00
return true;
}
}
return false;
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:07:14 +00:00
* Adds an attribute name to the alias array.
2009-06-30 09:29:51 +00:00
* @param string $new_alias_name The name of a new attribute to add to this attribute's list of aliases.
2009-06-30 08:07:14 +00:00
*/
2009-06-30 10:46:00 +00:00
function addAlias($new_alias_name) {
2009-06-30 08:07:14 +00:00
$this->aliases[] = $new_alias_name;
}
2009-06-30 09:29:51 +00:00
/**
* Sets this attriute's name.
* @param string $new_name The new name to give this attribute.
*/
2009-06-30 10:46:00 +00:00
function setName($new_name) {
2009-06-30 08:07:14 +00:00
$this->name = $new_name;
}
2009-06-30 09:29:51 +00:00
/**
* Sets this attriute's SUP attribute (ie, the attribute from which this attribute inherits).
* @param string $new_sup_attr The name of the new parent (SUP) attribute
*/
2009-06-30 10:46:00 +00:00
function setSupAttribute($new_sup_attr) {
2009-06-30 08:07:14 +00:00
$this->sup_attribute = $new_sup_attr;
}
2009-06-30 09:29:51 +00:00
/**
* Sets this attribute's list of aliases.
* @param array $new_aliases The array of alias names (strings)
*/
2009-06-30 10:46:00 +00:00
function setAliases($new_aliases) {
2009-06-30 08:07:14 +00:00
$this->aliases = $new_aliases;
}
2009-06-30 09:29:51 +00:00
/**
* Sets this attribute's type.
* @param string $new_type The new type.
*/
2009-06-30 10:46:00 +00:00
function setType($new_type) {
2009-06-30 08:07:14 +00:00
$this->type = $new_type;
}
2009-06-30 09:29:51 +00:00
/**
* Adds an objectClass name to this attribute's list of "used in" objectClasses,
* that is the list of objectClasses which provide this attribute.
* @param string $object_class_name The name of the objectClass to add.
*/
2009-06-30 10:46:00 +00:00
function addUsedInObjectClass($object_class_name) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$object_class_name);
foreach ($this->used_in_object_classes as $used_in_object_class) {
if (DEBUG_ENABLED)
debug_log('Checking (%s) with (%s)',8,__FILE__,__LINE__,__METHOD__,$used_in_object_class,$object_class_name);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
if (strcasecmp($used_in_object_class,$object_class_name) == 0)
2009-06-30 08:09:20 +00:00
return false;
2009-06-30 10:46:00 +00:00
}
2009-06-30 08:09:20 +00:00
$this->used_in_object_classes[] = $object_class_name;
return true;
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:29:51 +00:00
/**
* Gets the list of "used in" objectClasses, that is the list of objectClasses
* which provide this attribute.
* @return array An array of names of objectclasses (strings) which provide this attribute
*/
function getUsedInObjectClasses() {
2009-06-30 08:07:14 +00:00
return $this->used_in_object_classes;
}
2009-06-30 09:22:30 +00:00
2009-06-30 09:29:51 +00:00
/**
* Adds an objectClass name to this attribute's list of "required by" objectClasses,
* that is the list of objectClasses which must have this attribute.
* @param string $object_class_name The name of the objectClass to add.
*/
2009-06-30 10:46:00 +00:00
function addRequiredByObjectClass($object_class_name) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$object_class_name);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
foreach ($this->required_by_object_classes as $required_by_object_class)
if (strcasecmp($required_by_object_class,$object_class_name) == 0)
2009-06-30 09:22:30 +00:00
return false;
2009-06-30 10:46:00 +00:00
2009-06-30 09:22:30 +00:00
$this->required_by_object_classes[] = $object_class_name;
return true;
}
2009-06-30 09:29:51 +00:00
/**
* Gets the list of "required by" objectClasses, that is the list of objectClasses
* which provide must have attribute.
* @return array An array of names of objectclasses (strings) which provide this attribute
*/
function getRequiredByObjectClasses() {
2009-06-30 09:22:30 +00:00
return $this->required_by_object_classes;
}
2009-06-30 08:07:14 +00:00
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:09:20 +00:00
* Represents an LDAP Syntax
2009-06-30 09:29:51 +00:00
* @package phpLDAPadmin
2009-06-30 08:09:20 +00:00
*/
2009-06-30 09:29:51 +00:00
class Syntax extends SchemaItem {
2009-06-30 09:22:30 +00:00
/** Initializes the class' member variables */
2009-06-30 10:46:00 +00:00
function initVars() {
2009-06-30 09:29:51 +00:00
parent::initVars();
2009-06-30 08:09:20 +00:00
$this->oid = null;
$this->description = null;
}
2009-06-30 09:22:30 +00:00
/**
* Creates a new Syntax object from a raw LDAP syntax string.
2009-06-30 08:09:20 +00:00
*/
2009-06-30 10:46:00 +00:00
function Syntax($raw_ldap_syntax_string) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_syntax_string);
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
$this->initVars();
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
$class = $raw_ldap_syntax_string;
2009-06-30 10:46:00 +00:00
$strings = preg_split('/[\s,]+/',$class,-1,PREG_SPLIT_DELIM_CAPTURE);
2009-06-30 08:09:20 +00:00
for($i=0; $i<count($strings); $i++) {
switch($strings[$i]) {
case '(':
break;
2009-06-30 10:46:00 +00:00
2009-06-30 08:09:20 +00:00
case 'DESC':
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->description) == 0)
2009-06-30 08:09:20 +00:00
$this->description=$this->description . $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->description=$this->description . ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:09:20 +00:00
break;
2009-06-30 10:46:00 +00:00
2009-06-30 08:09:20 +00:00
default:
2009-06-30 10:46:00 +00:00
if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1)
2009-06-30 08:09:20 +00:00
$this->oid = $strings[$i];
}
}
2009-06-30 10:46:00 +00:00
$this->description = preg_replace("/^\'/",'',$this->description);
$this->description = preg_replace("/\'$/",'',$this->description);
2009-06-30 08:09:20 +00:00
}
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:09:20 +00:00
* Represents an LDAP MatchingRule
2009-06-30 09:29:51 +00:00
* @package phpLDAPadmin
2009-06-30 08:09:20 +00:00
*/
2009-06-30 09:29:51 +00:00
class MatchingRule extends SchemaItem {
2009-06-30 09:22:30 +00:00
/** This rule's name */
2009-06-30 08:09:20 +00:00
var $name;
2009-06-30 09:22:30 +00:00
/** This rule's syntax OID */
2009-06-30 08:09:20 +00:00
var $syntax;
2009-06-30 09:22:30 +00:00
/** Boolean value indicating whether this MatchingRule is obsolete */
2009-06-30 08:09:20 +00:00
var $is_obsolete;
2009-06-30 09:22:30 +00:00
/** An array of attribute names who use this MatchingRule */
2009-06-30 08:09:20 +00:00
var $used_by_attrs;
2009-06-30 09:22:30 +00:00
/** Initialize the class' member variables */
2009-06-30 09:29:51 +00:00
function initVars() {
parent::initVars();
2009-06-30 08:09:20 +00:00
$this->oid = null;
$this->name = null;
$this->description = null;
$this->is_obsolete = false;
$this->syntax = null;
$this->used_by_attrs = array();
}
2009-06-30 09:22:30 +00:00
/**
* Creates a new MatchingRule object from a raw LDAP MatchingRule string.
2009-06-30 08:09:20 +00:00
*/
2009-06-30 10:46:00 +00:00
function MatchingRule($raw_ldap_matching_rule_string) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_matching_rule_string);
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
$this->initVars();
2009-06-30 10:46:00 +00:00
$strings = preg_split('/[\s,]+/',$raw_ldap_matching_rule_string,-1,PREG_SPLIT_DELIM_CAPTURE);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
for ($i=0; $i<count($strings); $i++) {
switch($strings[$i]) {
2009-06-30 08:09:20 +00:00
case '(':
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
case 'NAME':
2009-06-30 10:46:00 +00:00
if ($strings[$i+1] != '(') {
2009-06-30 08:09:20 +00:00
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->name) == 0)
2009-06-30 08:09:20 +00:00
$this->name = $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:09:20 +00:00
} else {
$i++;
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->name) == 0)
2009-06-30 08:09:20 +00:00
$this->name = $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:09:20 +00:00
do {
$i++;
2009-06-30 09:29:51 +00:00
} while (! preg_match('/\)+\)?/',$strings[$i]));
2009-06-30 08:09:20 +00:00
}
2009-06-30 10:46:00 +00:00
$this->name = preg_replace("/^\'/",'',$this->name);
$this->name = preg_replace("/\'$/",'',$this->name);
2009-06-30 08:09:20 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
case 'DESC':
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->description)==0)
2009-06-30 08:09:20 +00:00
$this->description=$this->description . $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->description=$this->description . ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:09:20 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
case 'OBSOLETE':
$this->is_obsolete = TRUE;
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
case 'SYNTAX':
$this->syntax = $strings[++$i];
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
default:
2009-06-30 10:46:00 +00:00
if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1)
2009-06-30 08:09:20 +00:00
$this->oid = $strings[$i];
}
}
2009-06-30 10:46:00 +00:00
$this->description = preg_replace("/^\'/",'',$this->description);
$this->description = preg_replace("/\'$/",'',$this->description);
2009-06-30 08:09:20 +00:00
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:09:20 +00:00
* Sets the list of used_by_attrs to the array specified by $attrs;
2009-06-30 09:29:51 +00:00
* @param array $attrs The array of attribute names (strings) which use this MatchingRule
2009-06-30 08:09:20 +00:00
*/
2009-06-30 10:46:00 +00:00
function setUsedByAttrs($attrs) {
2009-06-30 08:09:20 +00:00
$this->used_by_attrs = $attrs;
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:09:20 +00:00
* Adds an attribute name to the list of attributes who use this MatchingRule
* @return true if the attribute was added and false otherwise (already in the list)
*/
2009-06-30 10:46:00 +00:00
function addUsedByAttr($new_attr_name) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$new_attr_name);
2009-06-30 09:29:51 +00:00
2009-06-30 10:46:00 +00:00
foreach ($this->used_by_attrs as $attr_name)
if (strcasecmp($attr_name,$new_attr_name) == 0)
2009-06-30 08:09:20 +00:00
return false;
2009-06-30 10:46:00 +00:00
2009-06-30 08:09:20 +00:00
$this->used_by_attrs[] = $new_attr_name;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
return true;
}
2009-06-30 09:29:51 +00:00
/**
* Gets this MatchingRule's name.
* @return string The name.
*/
function getName() {
2009-06-30 08:09:20 +00:00
return $this->name;
}
2009-06-30 09:29:51 +00:00
/**
* Gets whether this MatchingRule is flagged as obsolete by the LDAP server.
* @return bool True if this MatchingRule is obsolete and false otherwise.
*/
function getIsObsolete() {
2009-06-30 08:09:20 +00:00
return $this->is_obsolete;
}
2009-06-30 09:29:51 +00:00
/**
* Gets this MatchingRule's syntax string (an OID).
*/
function getSyntax() {
2009-06-30 08:09:20 +00:00
return $this->description;
}
2009-06-30 09:29:51 +00:00
/**
* Gets an array of attribute names (strings) which use this MatchingRule
* @return array The array of attribute names (strings).
*/
function getUsedByAttrs() {
2009-06-30 08:09:20 +00:00
return $this->used_by_attrs;
}
}
2009-06-30 09:22:30 +00:00
/**
2009-06-30 08:09:20 +00:00
* Represents an LDAP schema matchingRuleUse entry
2009-06-30 09:29:51 +00:00
* @package phpLDAPadmin
*/
class MatchingRuleUse extends SchemaItem {
2009-06-30 09:22:30 +00:00
/** The name of the MathingRule this applies to */
2009-06-30 08:09:20 +00:00
var $name;
2009-06-30 09:29:51 +00:00
/** An array of attributeType names who make use of the mathingRule
2009-06-30 08:09:20 +00:00
* identified by $this->oid and $this->name */
var $used_by_attrs;
2009-06-30 09:22:30 +00:00
/** Initialize the class' member variables */
2009-06-30 09:29:51 +00:00
function initVars() {
parent::initVars();
2009-06-30 08:09:20 +00:00
$this->oid = null;
$this->name = null;
$this->used_by_attrs = array();
}
2009-06-30 10:46:00 +00:00
function MatchingRuleUse($raw_matching_rule_use_string) {
2009-06-30 09:40:37 +00:00
if (DEBUG_ENABLED)
2009-06-30 10:46:00 +00:00
debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_matching_rule_use_string);
2009-06-30 09:29:51 +00:00
$this->initVars();
2009-06-30 10:46:00 +00:00
$strings = preg_split('/[\s,]+/',$raw_matching_rule_use_string,-1,PREG_SPLIT_DELIM_CAPTURE);
2009-06-30 08:09:20 +00:00
for($i=0; $i<count($strings); $i++) {
switch($strings[$i]) {
case '(':
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
case 'NAME':
2009-06-30 10:46:00 +00:00
if ($strings[$i+1] != '(') {
2009-06-30 08:09:20 +00:00
do {
$i++;
2009-06-30 10:46:00 +00:00
if (! isset($this->name) || strlen($this->name) == 0)
2009-06-30 08:09:20 +00:00
$this->name = $strings[$i];
2009-06-30 10:46:00 +00:00
else
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:09:20 +00:00
} else {
$i++;
do {
$i++;
2009-06-30 10:46:00 +00:00
if (strlen($this->name) == 0)
2009-06-30 08:09:20 +00:00
$this->name = $strings[$i];
else
2009-06-30 10:26:08 +00:00
$this->name .= ' ' . $strings[$i];
2009-06-30 10:46:00 +00:00
} while (! preg_match("/\'$/s",$strings[$i]));
2009-06-30 08:09:20 +00:00
do {
$i++;
2009-06-30 09:29:51 +00:00
} while (! preg_match('/\)+\)?/',$strings[$i]));
2009-06-30 08:09:20 +00:00
}
2009-06-30 10:46:00 +00:00
$this->name = preg_replace("/^\'/",'',$this->name);
$this->name = preg_replace("/\'$/",'',$this->name);
2009-06-30 08:09:20 +00:00
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
case 'APPLIES':
2009-06-30 10:46:00 +00:00
# @TODO
if ($strings[$i+1] != '(') {
# Has a single attribute name
2009-06-30 08:09:20 +00:00
$i++;
2009-06-30 10:46:00 +00:00
$this->used_by_attrs = array($strings[$i]);
2009-06-30 08:09:20 +00:00
//echo "Adding single: " . $strings[$i] . "<br />";
2009-06-30 10:46:00 +00:00
2009-06-30 08:09:20 +00:00
} else {
2009-06-30 10:46:00 +00:00
# Has multiple attribute names
2009-06-30 08:09:20 +00:00
$i++;
2009-06-30 10:46:00 +00:00
while ($strings[$i] != ')') {
2009-06-30 08:09:20 +00:00
$i++;
$new_attr = $strings[$i];
2009-06-30 10:46:00 +00:00
$new_attr = preg_replace("/^\'/",'',$new_attr);
$new_attr = preg_replace("/\'$/",'',$new_attr);
2009-06-30 08:09:20 +00:00
$this->used_by_attrs[] = $new_attr;
//echo "Adding $new_attr<br />";
$i++;
}
}
break;
2009-06-30 09:29:51 +00:00
2009-06-30 08:09:20 +00:00
default:
2009-06-30 10:46:00 +00:00
if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1)
2009-06-30 08:09:20 +00:00
$this->oid = $strings[$i];
}
}
2009-06-30 10:46:00 +00:00
sort($this->used_by_attrs);
2009-06-30 08:09:20 +00:00
}
2009-06-30 09:29:51 +00:00
/**
* Gets this MatchingRuleUse's name
* @return string The name
*/
function getName() {
2009-06-30 08:09:20 +00:00
return $this->name;
}
2009-06-30 09:29:51 +00:00
/**
* Gets an array of attribute names (strings) which use this MatchingRuleUse object.
* @return array The array of attribute names (strings).
*/
function getUsedByAttrs() {
2009-06-30 08:09:20 +00:00
return $this->used_by_attrs;
}
}
2009-06-30 08:07:14 +00:00
?>