Template modifications now add/remove attributes as per the template definition

This commit is contained in:
Deon George 2009-07-05 22:13:17 +10:00
parent 54df56bb1a
commit aa2719f8fe
3 changed files with 79 additions and 16 deletions

View File

@ -54,6 +54,15 @@ if (count($request['template']->getLDAPmodify(true))) {
_('Attribute'),_('Old Value'),_('New Value'),_('Skip'));
echo "\n\n";
# If we skip objectclass changes, but there are new must/may attrs provided by the new objectclass, they need to be skip.
$mustattrs = array();
foreach ($request['template']->getAttribute('objectclass')->getValues() as $value) {
$soc = $app['server']->getSchemaObjectClass($value);
foreach ($soc->getMustAttrs() as $sma)
array_push($mustattrs,$sma->getName());
}
$counter = 0;
foreach ($request['template']->getLDAPmodify(true) as $attribute) {
$counter++;
@ -109,23 +118,60 @@ if (count($request['template']->getLDAPmodify(true))) {
$input_disabled = '';
$input_onclick = '';
if ($attribute->isForceDelete())
if ($attribute->isForceDelete() || in_array($attribute->getName(),$mustattrs))
$input_disabled = 'disabled="disabled"';
if ($attribute->getName() == 'objectclass' && (count($request['template']->getForceDeleteAttrs()) > 0)) {
$input_onclick = 'onclick="if (this.checked) {';
if ($attribute->getName() == 'objectclass') {
$input_onclick = '';
foreach ($request['template']->getForceDeleteAttrs() as $ad_name) {
$input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = false;",$ad_name->getName());
$input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = true;",$ad_name->getName());
if (count($request['template']->getForceDeleteAttrs()) > 0) {
$input_onclick = 'onclick="if (this.checked) {';
foreach ($request['template']->getForceDeleteAttrs() as $ad_name) {
$input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = false;",$ad_name->getName());
$input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = true;",$ad_name->getName());
$input_onclick .= "\n";
}
$input_onclick .= '} else {';
foreach ($request['template']->getForceDeleteAttrs() as $ad_name) {
$input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = false;",$ad_name->getName());
$input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = true;",$ad_name->getName());
$input_onclick .= "\n";
}
$input_onclick .= '};';
}
if ($input_onclick)
$input_onclick .= 'if (this.checked) {';
else
$input_onclick = 'onclick="if (this.checked) {';
foreach ($request['template']->getLDAPmodify(true) as $skipattr) {
if (! $skipattr->getOldValues()) {
if (! in_array($skipattr->getName(),$mustattrs))
$input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = true;",$skipattr->getName());
$input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = true;",$skipattr->getName());
$input_onclick .= "\n";
}
}
$input_onclick .= '} else {';
foreach ($request['template']->getForceDeleteAttrs() as $ad_name) {
$input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = false;",$ad_name->getName());
$input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = true;",$ad_name->getName());
foreach ($request['template']->getLDAPmodify(true) as $skipattr) {
if (! $skipattr->getOldValues()) {
if (! in_array($skipattr->getName(),$mustattrs))
$input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = false;",$skipattr->getName());
$input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = false;",$skipattr->getName());
$input_onclick .= "\n";
}
}
$input_onclick .= '}"';
$input_onclick .= '};"';
}
printf('<td><input name="skip_array[%s]" id="skip_array_%s" type="checkbox" %s %s/></td>',

View File

@ -146,6 +146,10 @@ class Attribute {
return count($this->values);
}
public function getSource() {
return $this->source;
}
/**
* Autovalue is called after the attribute is initialised, and thus the values from the ldap server will be set.
*/
@ -169,9 +173,16 @@ class Attribute {
$this->values = array();
}
public function setOldValue($val) {
$this->oldvalues = $val;
}
public function setValue($new_val) {
if ($this->values) {
if ($this->oldvalues && ($new_val != $this->values)) {
if ($this->values == $new_val)
return;
if ($this->oldvalues) {
debug_dump($this);
debug_dump_backtrace('old values are set',1);
} else
@ -595,6 +606,7 @@ class Attribute {
case 'readonly':
case 'rows':
case 'size':
case 'values':
case 'verify': $this->$index = $value;
break;
@ -607,7 +619,6 @@ class Attribute {
elseif (is_string($values) && (strlen($values) > 0))
$this->values = array($values);
}
/**

View File

@ -175,9 +175,10 @@ class Template extends xmlTemplate {
return;
} else {
$attribute = $this->addAttribute('objectClass',array('values'=>$objectclasses));
$attribute = $this->addAttribute('objectClass',array('values'=>$objectclasses),'XML');
$attribute->justModified();
$attribute->setRequired();
$attribute->hide();
}
$this->rebuildTemplateAttrs();
@ -266,9 +267,14 @@ class Template extends xmlTemplate {
if (is_null($attribute))
$attribute = $this->addAttribute($attr,array('values'=>$values));
else
if ($attribute->getValues())
$attribute->setValue(array_values($values));
else
if ($attribute->getValues()) {
# Override values to those that are defined in the XML file.
if ($attribute->getSource() != 'XML')
$attribute->setValue(array_values($values));
else
$attribute->setOldValue(array_values($values));
} else
$attribute->initValue(array_values($values));
# Work out the RDN attributes