2011-06-26 10:44:28 +00:00
< ? php
/**
* This page will allow the adding of additional ObjectClasses to an item .
* + If the ObjectClass to be added requires additional MUST attributes to be
* defined , then they will be prompted for .
* + If the ObjectClass doesnt need any additional MUST attributes , then it
* will be silently added to the object .
*
* @ package phpLDAPadmin
* @ subpackage Page
*/
/**
*/
require './common.php' ;
# The DN and OBJECTCLASS we are working with.
$request = array ();
$request [ 'dn' ] = get_request ( 'dn' , 'REQUEST' , true );
# Check if the entry exists.
if ( ! $request [ 'dn' ] || ! $app [ 'server' ] -> dnExists ( $request [ 'dn' ]))
error ( sprintf ( _ ( 'The entry (%s) does not exist.' ), $request [ 'dn' ]), 'error' , 'index.php' );
$request [ 'page' ] = new TemplateRender ( $app [ 'server' ] -> getIndex (), get_request ( 'template' , 'REQUEST' , false , null ));
$request [ 'page' ] -> setDN ( $request [ 'dn' ]);
$request [ 'page' ] -> accept ( true );
$request [ 'template' ] = $request [ 'page' ] -> getTemplate ();
$attribute_factory = new AttributeFactory ();
# Grab the required attributes for the new objectClass
$ldap = array ();
$ldap [ 'attrs' ][ 'must' ] = array ();
foreach ( $request [ 'template' ] -> getAttribute ( 'objectclass' ) -> getValues () as $oclass_name ) {
# Exclude "top" if its there.
if ( ! strcasecmp ( 'top' , $oclass_name ))
continue ;
if ( $soc = $app [ 'server' ] -> getSchemaObjectClass ( $oclass_name ))
$ldap [ 'attrs' ][ 'must' ] = array_merge ( $ldap [ 'attrs' ][ 'must' ], $soc -> getMustAttrNames ( true ));
}
$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 )
if ( is_null ( $request [ 'template' ] -> getAttribute ( $attr )))
array_push ( $ldap [ 'attrs' ][ 'need' ], $attribute_factory -> newAttribute ( $attr , array ( 'values' => array ()), $app [ 'server' ] -> getIndex ()));
# Mark all the need attributes as shown
foreach ( $ldap [ 'attrs' ][ 'need' ] as $index => $values )
$ldap [ 'attrs' ][ 'need' ][ $index ] -> show ();
if ( count ( $ldap [ 'attrs' ][ 'need' ]) > 0 ) {
2011-07-12 19:23:27 +00:00
$request [ 'page' ] -> drawTitle ( sprintf ( _ ( 'Add new object class to <b>%s</b>' ), get_rdn ( $request [ 'dn' ])));
2011-06-26 10:44:28 +00:00
$request [ 'page' ] -> drawSubTitle ();
echo '<div style="text-align: center">' ;
2011-07-14 18:29:11 +00:00
printf ( '<small>' . _ ( 'In order to add these objectClass(es) to this entry, you must specify <b>%s</b> new attributes that this object class requires.' ) . '</small>' ,
count ( $ldap [ 'attrs' ][ 'need' ]));
2011-06-26 10:44:28 +00:00
echo '<br /><br />' ;
echo '<form action="cmd.php" method="post" id="entry_form">' ;
echo '<div>' ;
if ( $_SESSION [ APPCONFIG ] -> getValue ( 'confirm' , 'update' ))
echo '<input type="hidden" name="cmd" value="update_confirm" />' ;
else
echo '<input type="hidden" name="cmd" value="update" />' ;
printf ( '<input type="hidden" name="server_id" value="%s" />' , $app [ 'server' ] -> getIndex ());
printf ( '<input type="hidden" name="dn" value="%s" />' , htmlspecialchars ( $request [ 'dn' ]));
echo '</div>' ;
echo '<table class="entry" cellspacing="0" border="0" style="margin-left: auto; margin-right: auto;">' ;
2011-07-13 18:30:14 +00:00
printf ( '<tr><th colspan="2">%s</th></tr>' , _ ( 'New required attributes' ));
2011-06-26 10:44:28 +00:00
$counter = 0 ;
echo '<tr><td colspan="2">' ;
foreach ( $request [ 'template' ] -> getAttribute ( 'objectclass' ) -> getValues () as $value )
$request [ 'page' ] -> draw ( 'HiddenValue' , $request [ 'template' ] -> getAttribute ( 'objectclass' ), $counter ++ );
echo '</td></tr>' ;
foreach ( $ldap [ 'attrs' ][ 'need' ] as $count => $attr )
$request [ 'page' ] -> draw ( 'Template' , $attr );
echo '</table>' ;
2011-07-12 19:23:27 +00:00
printf ( '<div style="text-align: center;"><br /><input type="submit" value="%s" /></div>' , _ ( 'Add object class and attributes' ));
2011-06-26 10:44:28 +00:00
echo '</form>' ;
echo '</div>' ;
# There are no other required attributes, so we just need to add the objectclass to the DN.
} else {
$result = $app [ 'server' ] -> modify ( $request [ 'dn' ], $request [ 'template' ] -> getLDAPmodify ());
if ( $result ) {
$href = sprintf ( 'cmd.php?cmd=template_engine&server_id=%s&dn=%s&modified_attrs[]=objectclass' ,
$app [ 'server' ] -> getIndex (), rawurlencode ( $request [ 'dn' ]));
if ( get_request ( 'meth' , 'REQUEST' ) == 'ajax' )
$href .= '&meth=ajax' ;
header ( sprintf ( 'Location: %s' , $href ));
die ();
}
}
?>