c90dc06af2
As PHP 8 introduces a built-in Attribute class, a name clash occurs without this commit. Class names are used by the Visitor class to dynamically build method names. To avoid having to also rename the target methods, a class name mapping is introduced for this purpose. This map may be augmented whenever another similar case occurs.
189 lines
6.9 KiB
PHP
189 lines
6.9 KiB
PHP
<?php
|
|
/**
|
|
* Allows to create new attributes
|
|
*
|
|
* @author The phpLDAPadmin development team
|
|
* @package phpLDAPadmin
|
|
*/
|
|
|
|
/**
|
|
* AttributeFactory Class
|
|
*
|
|
* @package phpLDAPadmin
|
|
* @subpackage Templates
|
|
*/
|
|
class AttributeFactory {
|
|
public function newAttribute($name,$values,$server_id,$source=null) {
|
|
global $app;
|
|
|
|
# Check to see if the value is auto generated, our attribute type is dependant on the function called.
|
|
if (isset($values['post']) && ! is_array($values['post'])) {
|
|
if (preg_match('/^=php\.(\w+)\((.*)\)$/',$values['post'],$matches)) {
|
|
switch ($matches[1]) {
|
|
case 'Join':
|
|
case 'PasswordEncrypt':
|
|
break;
|
|
|
|
default:
|
|
if (! $_SESSION[APPCONFIG]->getValue('appearance','hide_template_warning'))
|
|
system_message(array(
|
|
'title'=>sprintf('%s [<i>%s</i>]',_('Unknown template [post] function'),$matches[1]),
|
|
'body'=>sprintf('%s <small>[%s]</small>',_('The template function is not known and will be ignored.'),$values['post']),
|
|
'type'=>'warn'));
|
|
|
|
unset($values['post']);
|
|
}
|
|
}
|
|
}
|
|
|
|
# Check our helper functions exists
|
|
if (isset($values['helper']['value']) && ! is_array($values['helper']['value']))
|
|
if (preg_match('/^=php\.(\w+)\((.*)\)$/',$values['helper']['value'],$matches))
|
|
if (! in_array($matches[1],array('GetNextNumber','PasswordEncryptionTypes'))) {
|
|
if (! $_SESSION[APPCONFIG]->getValue('appearance','hide_template_warning'))
|
|
system_message(array(
|
|
'title'=>sprintf('%s [<i>%s</i>]',_('Unknown template helper function'),$matches[1]),
|
|
'body'=>sprintf('%s <small>[%s]</small>',_('The template helper function is not known and will be ignored.'),$values['helper']['value']),
|
|
'type'=>'warn'));
|
|
|
|
unset($values['helper']['value']);
|
|
}
|
|
|
|
# Check to see if the value is auto generated, our attribute type is dependant on the function called.
|
|
if (isset($values['value']) && ! is_array($values['value'])) {
|
|
if (preg_match('/^=php\.(\w+)\((.*)\)$/',$values['value'],$matches)) {
|
|
switch ($matches[1]) {
|
|
case 'MultiList':
|
|
if (! isset($values['type']))
|
|
$values['type'] = 'multiselect';
|
|
|
|
case 'PickList':
|
|
return $this->newSelectionAttribute($name,$values,$server_id,$source);
|
|
|
|
case 'RandomPassword':
|
|
return $this->newRandomPasswordAttribute($name,$values,$server_id,$source);
|
|
|
|
# Fall through and determine the attribute using other methods.
|
|
case 'GetNextNumber':
|
|
case 'Function' :
|
|
break;
|
|
|
|
default:
|
|
if (! $_SESSION[APPCONFIG]->getValue('appearance','hide_template_warning'))
|
|
system_message(array(
|
|
'title'=>sprintf('%s [<i>%s</i>]',_('Unknown template function'),$matches[1]),
|
|
'body'=>sprintf('%s <small>[%s]</small>',_('The template function is not known and will be ignored.'),$values['value']),
|
|
'type'=>'warn'));
|
|
|
|
unset($values['value']);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isset($values['type']))
|
|
switch ($values['type']) {
|
|
case 'password':
|
|
if (! strcasecmp($name,'sambaLMPassword') || ! strcasecmp($name,'sambaNTPassword'))
|
|
return $this->newSambaPasswordAttribute($name,$values,$server_id,$source);
|
|
else
|
|
return $this->newPasswordAttribute($name,$values,$server_id,$source);
|
|
|
|
case 'multiselect':
|
|
case 'select':
|
|
return $this->newSelectionAttribute($name,$values,$server_id,$source);
|
|
|
|
case 'textarea':
|
|
return $this->newMultiLineAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
if (! strcasecmp($name,'objectClass')) {
|
|
return $this->newObjectClassAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif ($app['server']->isJpegPhoto($name) || in_array($name,$app['server']->getValue('server','jpeg_attributes'))) {
|
|
return $this->newJpegAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif ($app['server']->isAttrBinary($name)) {
|
|
return $this->newBinaryAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif (! strcasecmp($name,'userPassword')) {
|
|
return $this->newPasswordAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif (! strcasecmp($name,'sambaLMPassword') || ! strcasecmp($name,'sambaNTPassword')) {
|
|
return $this->newSambaPasswordAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif (in_array(strtolower($name),array_keys(array_change_key_case($_SESSION[APPCONFIG]->getValue('appearance','date_attrs'))))) {
|
|
return $this->newDateAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif (in_array(strtolower($name),array('shadowlastchange','shadowmin','shadowmax','shadowexpire','shadowwarning','shadowinactive'))) {
|
|
return $this->newShadowAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif ($app['server']->isAttrBoolean($name)) {
|
|
$attribute = $this->newSelectionAttribute($name,$values,$server_id,$source);
|
|
$attribute->addOption('TRUE',_('true'));
|
|
$attribute->addOption('FALSE',_('false'));
|
|
return $attribute;
|
|
|
|
} elseif ($app['server']->isDNAttr($name)) {
|
|
return $this->newDnAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif ($app['server']->isMultiLineAttr($name)) {
|
|
return $this->newMultiLineAttribute($name,$values,$server_id,$source);
|
|
|
|
} elseif (! strcasecmp($name,'gidNumber')) {
|
|
return $this->newGidAttribute($name,$values,$server_id,$source);
|
|
|
|
} else {
|
|
return new PLAAttribute($name,$values,$server_id,$source);
|
|
}
|
|
}
|
|
|
|
private function newJpegAttribute($name,$values,$server_id,$source) {
|
|
return new JpegAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newBinaryAttribute($name,$values,$server_id,$source) {
|
|
return new BinaryAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newPasswordAttribute($name,$values,$server_id,$source) {
|
|
return new PasswordAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newSambaPasswordAttribute($name,$values,$server_id,$source) {
|
|
return new SambaPasswordAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newRandomPasswordAttribute($name,$values,$server_id,$source) {
|
|
return new RandomPasswordAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newShadowAttribute($name,$values,$server_id,$source) {
|
|
return new ShadowAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newSelectionAttribute($name,$values,$server_id,$source) {
|
|
return new SelectionAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newMultiLineAttribute($name,$values,$server_id,$source) {
|
|
return new MultiLineAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newDateAttribute($name,$values,$server_id,$source) {
|
|
return new DateAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newObjectClassAttribute($name,$values,$server_id,$source) {
|
|
return new ObjectClassAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newDnAttribute($name,$values,$server_id,$source) {
|
|
return new DnAttribute($name,$values,$server_id,$source);
|
|
}
|
|
|
|
private function newGidAttribute($name,$values,$server_id,$source) {
|
|
return new GidAttribute($name,$values,$server_id,$source);
|
|
}
|
|
}
|
|
?>
|