isReadOnly()) pla_error(_('You cannot perform updates while server is in read-only mode')); if (! $entry['oclass']['new']) pla_error(_('You did not select any ObjectClasses for this object. Please go back and do so.')); /* Ensure that the object has defined all MUST attrs for this objectClass. * If it hasn't, present a form to have the user enter values for all the * newly required attrs. */ $entry['dn']['attrs'] = $ldapserver->getDNAttrs($entry['dn']['string'],true); $entry['attrs']['current'] = array(); foreach ($entry['dn']['attrs'] as $attr => $junk) $entry['attrs']['current'][] = strtolower($attr); # Grab the required attributes for the new objectClass $ldap['oclasses'] = $ldapserver->SchemaObjectClasses(); $ldap['attrs']['must'] = array(); foreach ($entry['oclass']['new'] as $oclass_name) { $ldap['oclass'] = $ldapserver->getSchemaObjectClass($oclass_name); if ($ldap['oclass']) $ldap['attrs']['must'] = array_merge($ldap['attrs']['must'],$ldap['oclass']->getMustAttrNames($ldap['oclasses'])); } $ldap['attrs']['must'] = array_unique($ldap['attrs']['must']); /* Build a list of the attributes that this new objectClass requires, * but that the object does not currently contain */ $ldap['attrs']['need'] = array(); foreach ($ldap['attrs']['must'] as $attr) { $attr = $ldapserver->getSchemaAttribute($attr); # First, check if one of this attr's aliases is already an attribute of this entry foreach ($attr->getAliases() as $alias_attr_name) if (in_array(strtolower($alias_attr_name),$entry['attrs']['current'])) continue; if (in_array(strtolower($attr->getName()),$entry['attrs']['current'])) continue; /* We made it this far, so the attribute needs to be added to this entry in order * to add this objectClass */ $ldap['attrs']['need'][] = $attr; } if (count($ldap['attrs']['need']) > 0) { printf('