2009-06-30 09:29:51 +00:00
< ? php
2009-06-30 11:51:50 +00:00
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/compare.php,v 1.16.2.3 2008/01/13 06:33:50 wurley Exp $
2009-06-30 09:29:51 +00:00
/**
* Compare two DNs - the destination DN is editable .
* @ package phpLDAPadmin
*/
2009-06-30 10:46:00 +00:00
require_once './common.php' ;
2009-06-30 09:29:51 +00:00
$dn_src = isset ( $_POST [ 'dn_src' ]) ? $_POST [ 'dn_src' ] : null ;
$dn_dst = isset ( $_POST [ 'dn_dst' ]) ? $_POST [ 'dn_dst' ] : null ;
$encoded_dn_src = rawurlencode ( $dn_src );
$encoded_dn_dst = rawurlencode ( $dn_dst );
$server_id_src = ( isset ( $_POST [ 'server_id_src' ]) ? $_POST [ 'server_id_src' ] : '' );
$server_id_dst = ( isset ( $_POST [ 'server_id_dst' ]) ? $_POST [ 'server_id_dst' ] : '' );
2009-06-30 11:46:44 +00:00
$ldapserver_src = $_SESSION [ APPCONFIG ] -> ldapservers -> Instance ( $server_id_src );
2009-06-30 10:26:08 +00:00
if ( ! $ldapserver_src -> haveAuthInfo ())
pla_error ( _ ( 'Not enough information to login to server. Please check your configuration.' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:46:44 +00:00
$ldapserver_dst = $_SESSION [ APPCONFIG ] -> ldapservers -> Instance ( $server_id_dst );
2009-06-30 10:26:08 +00:00
if ( ! $ldapserver_src -> haveAuthInfo ())
pla_error ( _ ( 'Not enough information to login to server. Please check your configuration.' ));
2009-06-30 09:29:51 +00:00
2009-06-30 10:26:08 +00:00
if ( ! $ldapserver_src -> dnExists ( $dn_src ))
pla_error ( sprintf ( _ ( 'No such entry: %s' ), pretty_print_dn ( $dn_src )));
if ( ! $ldapserver_dst -> dnExists ( $dn_dst ))
pla_error ( sprintf ( _ ( 'No such entry: %s' ), pretty_print_dn ( $dn_dst )));
2009-06-30 09:29:51 +00:00
2009-06-30 11:46:44 +00:00
$attrs_src = $ldapserver_src -> getDNAttrs ( $dn_src , false , $_SESSION [ APPCONFIG ] -> GetValue ( 'deref' , 'view' ));
$attrs_dst = $ldapserver_dst -> getDNAttrs ( $dn_dst , false , $_SESSION [ APPCONFIG ] -> GetValue ( 'deref' , 'view' ));
2009-06-30 09:29:51 +00:00
# Get a list of all attributes.
$attrs_all = array_keys ( $attrs_src );
foreach ( $attrs_dst as $key => $val )
if ( ! in_array ( $key , $attrs_all ))
$attrs_all [] = $key ;
2009-06-30 11:51:50 +00:00
printf ( '<h3 class="title">%s</h3>' , _ ( 'Comparing the following DNs' ));
echo '<table class="entry" width=100% border=0>' ;
echo '<tr>' ;
printf ( '<td colspan=2 width=20%%><h3 class="subtitle">%s<br /> </h3></td>' , _ ( 'Attribute' ));
printf ( '<td colspan=2 width=40%%><h3 class="subtitle">%s: <b>%s</b><br />%s: <b>%s</b></h3></td>' ,
_ ( 'Server' ), $ldapserver_src -> name , _ ( 'Distinguished Name' ), htmlspecialchars ( $dn_src ));
printf ( '<td colspan=2 width=40%%><h3 class="subtitle">%s: <b>%s</b><br />%s: <b>%s</b></h3></td>' ,
_ ( 'Server' ), $ldapserver_dst -> name , _ ( 'Distinguished Name' ), htmlspecialchars ( $dn_dst ));
echo '</tr>' ;
echo '<tr>' ;
echo '<td colspan=6 align=right>' ;
echo '<form action="cmd.php?cmd=compare" method="post" name="compare_form">' ;
printf ( '<input type="hidden" name="server_id" value="%s" />' , $ldapserver -> server_id );
printf ( '<input type="hidden" name="server_id_src" value="%s" />' , $ldapserver_dst -> server_id );
printf ( '<input type="hidden" name="server_id_dst" value="%s" />' , $ldapserver_src -> server_id );
printf ( '<input type="hidden" name="dn_src" value="%s" />' , htmlspecialchars ( $dn_dst ));
printf ( '<input type="hidden" name="dn_dst" value="%s" />' , htmlspecialchars ( $dn_src ));
printf ( '<input type="submit" value="%s" />' , _ ( 'Switch Entry' ));
echo '</form>' ;
echo '</td>' ;
echo '</tr>' ;
2009-06-30 09:29:51 +00:00
2009-06-30 10:26:08 +00:00
if ( ! $attrs_all || ! is_array ( $attrs_all )) {
printf ( '<tr><td colspan="2">(%s)</td></tr>' , _ ( 'This entry has no attributes' ));
2009-06-30 09:29:51 +00:00
print '</table>' ;
2009-06-30 10:46:00 +00:00
return ;
2009-06-30 09:29:51 +00:00
}
sort ( $attrs_all );
2009-06-30 11:51:50 +00:00
$formdisplayed = false ;
2009-06-30 09:29:51 +00:00
# Work through each of the attributes.
foreach ( $attrs_all as $attr ) {
# If this is the DN, get the next attribute.
if ( ! strcasecmp ( $attr , 'dn' ))
continue ;
# Has the config.php specified that this attribute is to be hidden or shown?
2009-06-30 10:26:08 +00:00
if ( $ldapserver_src -> isAttrHidden ( $attr ) || $ldapserver_dst -> isAttrHidden ( $attr ))
2009-06-30 09:29:51 +00:00
continue ;
2009-06-30 11:51:50 +00:00
$schema_attr_src = $ldapserver_src -> getSchemaAttribute ( $attr , $dn_src );
$schema_attr_dst = $ldapserver_dst -> getSchemaAttribute ( $attr , $dn_dst );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# Get the values and see if they are the same.
if ( isset ( $attrs_src [ $attr ]) && isset ( $attrs_dst [ $attr ]) && $attrs_src [ $attr ] === $attrs_dst [ $attr ])
echo '<tr>' ;
else
echo '<tr class="updated">' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
foreach ( array ( 'src' , 'dst' ) as $side ) {
2009-06-30 09:29:51 +00:00
# Setup the $attr_note, which will be displayed to the right of the attr name (if any)
2009-06-30 11:51:50 +00:00
$attr_note = ' ' ;
2009-06-30 09:29:51 +00:00
# is there a user-friendly translation available for this attribute?
2009-06-30 11:46:44 +00:00
if ( $_SESSION [ APPCONFIG ] -> haveFriendlyName ( $attr )) {
$attr_display = $_SESSION [ APPCONFIG ] -> getFriendlyName ( $attr );
$attr_note = sprintf ( '<acronym title="%s: \'%s\' %s \'%s\'">%s</acronym>' , _ ( 'Note' ), $attr_display , _ ( 'is an alias for' ), $attr , _ ( 'alias' ));
2009-06-30 09:29:51 +00:00
} else {
$attr_display = $attr ;
2009-06-30 11:51:50 +00:00
$attr_note = ' ' ;
2009-06-30 09:29:51 +00:00
}
# is this attribute required by an objectClass?
$required_by = '' ;
switch ( $side ) {
case 'src' :
$ldapserver = $ldapserver_src ;
if ( $schema_attr_src )
foreach ( $schema_attr_src -> getRequiredByObjectClasses () as $required )
if ( isset ( $attrs_src [ 'objectClass' ]) && in_array ( strtolower ( $required ), arrayLower ( $attrs_src [ 'objectClass' ])))
$required_by .= $required . ' ' ;
# It seems that some LDAP servers (Domino) returns attributes in lower case?
2009-06-30 10:26:08 +00:00
elseif ( isset ( $attrs_src [ 'objectclass' ]) && in_array ( strtolower ( $required ), arrayLower ( $attrs_src [ 'objectclass' ])))
2009-06-30 09:29:51 +00:00
$required_by .= $required . ' ' ;
break ;
case 'dst' :
$ldapserver = $ldapserver_dst ;
if ( $schema_attr_dst )
foreach ( $schema_attr_dst -> getRequiredByObjectClasses () as $required )
if ( isset ( $attrs_dst [ 'objectClass' ]) && in_array ( strtolower ( $required ), arrayLower ( $attrs_dst [ 'objectClass' ])))
$required_by .= $required . ' ' ;
# It seems that some LDAP servers (Domino) returns attributes in lower case?
elseif ( isset ( $attrs_dst [ 'objectclass' ]) && in_array ( strtolower ( $required ), arrayLower ( $attrs_dst [ 'objectclass' ])))
$required_by .= $required . ' ' ;
break ;
}
2009-06-30 11:51:50 +00:00
# If we are on the source side, show the attr
if ( $side == 'src' ) {
echo '<td class="title">' ;
$schema_href = sprintf ( 'cmd.php?cmd=schema&server_id=%s&view=attributes&viewvalue=%s' , $server_id_src , real_attr_name ( $attr ));
printf ( '<a title="%s" href="%s">%s</a>' , sprintf ( _ ( 'Click to view the schema definition for attribute type \'%s\'' ), $attr ), $schema_href , $attr_display );
echo '</td>' ;
printf ( '<td class="note"><sup><small>%s</small></sup></td>' , $attr_note );
}
echo '<td colspan=2 class="note">' ;
# Create our form if the dst is editable.
if ( $side == 'dst' && ! $ldapserver_dst -> isReadOnly () && ! $formdisplayed ) {
$formdisplayed = true ;
echo '<form action="cmd.php?cmd=update_confirm" method="post" name="edit_form">' ;
printf ( '<input type="hidden" name="server_id" value="%s" />' , $ldapserver_dst -> server_id );
printf ( '<input type="hidden" name="dn" value="%s" />' , $dn_dst );
}
if ( $required_by )
printf ( '<sup><small><acronym title="%s">%s</acronym></small></sup>' , sprintf ( _ ( 'Required attribute for objectClass(es) %s' ), $required_by ), _ ( 'required' ));
echo '</td>' ;
if ( $ldapserver -> isAttrReadOnly ( $attr ))
printf ( '<small>(<acronym title="%s">%s</acronym>)</small>' , _ ( 'This attribute has been flagged as read only by the phpLDAPadmin administrator' ), _ ( 'read only' ));
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</tr>' ;
if ( isset ( $attrs_src [ $attr ]) && isset ( $attrs_dst [ $attr ]) && $attrs_src [ $attr ] === $attrs_dst [ $attr ])
echo '<tr>' ;
else
echo '<tr class="updated">' ;
foreach ( array ( 'src' , 'dst' ) as $side ) {
$vals = null ;
2009-06-30 09:29:51 +00:00
# If this attribute isnt set, then show a blank.
$toJump = 0 ;
switch ( $side ) {
case 'src' :
2009-06-30 11:51:50 +00:00
print '<td colspan=2> </td><td class="value">' ;
2009-06-30 09:29:51 +00:00
if ( ! isset ( $attrs_src [ $attr ])) {
2009-06-30 10:26:08 +00:00
echo " <small>< " . _ ( 'No Value' ) . " ></small></td> " ;
2009-06-30 09:29:51 +00:00
$toJump = 1 ;
continue ;
} else
$vals = $attrs_src [ $attr ];
$ldapserver = $ldapserver_src ;
break ;
case 'dst' :
2009-06-30 11:51:50 +00:00
print '<td colspan=2> </td><td class="value">' ;
2009-06-30 09:29:51 +00:00
if ( ! isset ( $attrs_dst [ $attr ])) {
2009-06-30 10:26:08 +00:00
echo " <small>< " . _ ( 'No Value' ) . " ></small></td> " ;
2009-06-30 09:29:51 +00:00
$toJump = 1 ;
continue ;
} else
$vals = $attrs_dst [ $attr ];
$ldapserver = $ldapserver_dst ;
break ;
}
2009-06-30 11:51:50 +00:00
if ( $toJump )
continue ;
2009-06-30 10:26:08 +00:00
if ( ! is_array ( $vals ))
$vals = array ( $vals );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# Is this attribute a jpegPhoto?
2009-06-30 10:26:08 +00:00
if ( $ldapserver -> isJpegPhoto ( $attr )) {
2009-06-30 09:29:51 +00:00
switch ( $side ) {
case 'src' :
2009-06-30 11:51:50 +00:00
# Don't draw the delete buttons if there is more than one jpegPhoto (phpLDAPadmin can't handle this case yet)
2009-06-30 10:26:08 +00:00
draw_jpeg_photos ( $ldapserver , $dn_src , $attr , false );
2009-06-30 09:29:51 +00:00
break ;
case 'dst' :
2009-06-30 10:26:08 +00:00
if ( $ldapserver_dst -> isReadOnly () || $ldapserver_dst -> isAttrReadOnly ( $attr ))
draw_jpeg_photos ( $ldapserver , $dn_dst , $attr , false );
2009-06-30 09:29:51 +00:00
else
2009-06-30 10:26:08 +00:00
draw_jpeg_photos ( $ldapserver , $dn_dst , $attr , true );
2009-06-30 09:29:51 +00:00
break ;
}
2009-06-30 11:51:50 +00:00
# proceed to the next attribute
echo '</td>' . " \n " ;
2009-06-30 09:29:51 +00:00
continue ;
}
2009-06-30 11:51:50 +00:00
# Is this attribute binary?
2009-06-30 10:26:08 +00:00
if ( $ldapserver -> isAttrBinary ( $attr )) {
2009-06-30 09:29:51 +00:00
switch ( $side ) {
case 'src' :
$href = sprintf ( " download_binary_attr.php?server_id=%s&dn=%s&attr=%s " , $ldapserver -> server_id , $encoded_dn_src , $attr );
break ;
case 'dst' :
$href = sprintf ( " download_binary_attr.php?server_id=%s&dn=%s&attr=%s " , $ldapserver -> server_id , $encoded_dn_dst , $attr );
break ;
}
2009-06-30 11:51:50 +00:00
echo '<small>' ;
echo _ ( 'Binary value' );
echo '<br />' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( count ( $vals ) > 1 )
for ( $i = 1 ; $i <= count ( $vals ); $i ++ )
printf ( '<a href="%s&value_num=%s"><img src="images/save.png" /> %s(%s)</a><br />' , $href , $i , _ ( 'download value' ), $i );
else
printf ( '<a href="%s"><img src="images/save.png" /> %s</a><br />' , $href , _ ( 'download value' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( $side == 'dst' && ! $ldapserver_dst -> isReadOnly () && ! $ldapserver -> isAttrReadOnly ( $attr ))
printf ( '<a href="javascript:deleteAttribute(\'%s\');" style="color:red;"><img src="images/trash.png" /> %s</a>' , $attr , _ ( 'delete attribute' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</small>' ;
echo '</td>' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
continue ;
2009-06-30 09:29:51 +00:00
}
2009-06-30 11:51:50 +00:00
# Note: at this point, the attribute must be text-based (not binary or jpeg)
2009-06-30 09:29:51 +00:00
/*
* If this server is in read - only mode or this attribute is configured as read_only ,
* simply draw the attribute values and continue .
*/
2009-06-30 10:26:08 +00:00
if ( $side == 'dst' && ( $ldapserver -> isReadOnly () || $ldapserver -> isAttrReadOnly ( $attr ))) {
if ( is_array ( $vals )) {
foreach ( $vals as $i => $val ) {
2009-06-30 11:51:50 +00:00
if ( trim ( $val ) == '' )
printf ( '<span style="color:red">[%s]</span><br />' , _ ( 'empty' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
elseif ( strcasecmp ( $attr , 'userPassword' ) == 0 && $_SESSION [ APPCONFIG ] -> GetValue ( 'appearance' , 'obfuscate_password_display' ))
echo preg_replace ( '/./' , '*' , $val ) . '<br />' ;
2009-06-30 09:29:51 +00:00
else
2009-06-30 11:51:50 +00:00
echo htmlspecialchars ( $val ) . '<br />' ;
2009-06-30 09:29:51 +00:00
}
2009-06-30 11:51:50 +00:00
# @todo: redundant - $vals is always an array.
2009-06-30 09:29:51 +00:00
} else {
2009-06-30 11:51:50 +00:00
if ( strcasecmp ( $attr , 'userPassword' ) == 0 && $_SESSION [ APPCONFIG ] -> GetValue ( 'appearance' , 'obfuscate_password_display' ))
echo preg_replace ( '/./' , '*' , $vals ) . '<br />' ;
2009-06-30 09:29:51 +00:00
else
2009-06-30 11:51:50 +00:00
echo $vals . '<br />' ;
2009-06-30 09:29:51 +00:00
}
2009-06-30 11:51:50 +00:00
echo '</td>' ;
2009-06-30 09:29:51 +00:00
continue ;
}
2009-06-30 11:51:50 +00:00
# Is this a userPassword attribute?
2009-06-30 10:26:08 +00:00
if ( ! strcasecmp ( $attr , 'userpassword' )) {
2009-06-30 09:29:51 +00:00
$user_password = $vals [ 0 ];
2009-06-30 10:26:08 +00:00
$enc_type = get_enc_type ( $user_password );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# Set the default hashing type if the password is blank (must be newly created)
2009-06-30 10:26:08 +00:00
if ( $user_password == '' ) {
$enc_type = get_default_hash ( $server_id );
2009-06-30 09:29:51 +00:00
}
2009-06-30 11:51:50 +00:00
if ( $side == 'dst' ) {
printf ( '<input type="hidden" name="old_values[userpassword]" value="%s" />' , htmlspecialchars ( $user_password ));
echo '<!-- Special case of enc_type to detect changes when user changes enc_type but not the password value -->' ;
printf ( '<input size="38" type="hidden" name="old_enc_type" value="%s" />' , $enc_type == '' ? 'clear' : $enc_type );
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( obfuscate_password_display ( $enc_type ))
2009-06-30 10:26:08 +00:00
echo htmlspecialchars ( preg_replace ( '/./' , '*' , $user_password ));
2009-06-30 11:51:50 +00:00
else
2009-06-30 10:26:08 +00:00
echo htmlspecialchars ( $user_password );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '<br />' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( $side == 'dst' ) {
printf ( '<input style="width: 260px" type="password" name="new_values[userpassword]" value="%s" />' , htmlspecialchars ( $user_password ));
echo enc_type_select_list ( $enc_type );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '<br />' ;
?>
< script type = " text/javascript " language = " javascript " >
2009-06-30 09:29:51 +00:00
<!--
function passwordComparePopup ()
{
2009-06-30 10:26:08 +00:00
mywindow = open ( 'password_checker.php' , 'myname' , 'resizable=no,width=450,height=200,scrollbars=1' );
2009-06-30 09:29:51 +00:00
mywindow . location . href = 'password_checker.php?hash=<?php echo base64_encode($user_password); ?>&base64=true' ;
2009-06-30 10:26:08 +00:00
if ( mywindow . opener == null )
2009-06-30 09:29:51 +00:00
mywindow . opener = self ;
}
-->
</ script >
2009-06-30 11:51:50 +00:00
< ? php
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
printf ( '<small><a href="javascript:passwordComparePopup()">%s</a></small>' , _ ( 'Check password' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</td>' ;
continue ;
2009-06-30 09:29:51 +00:00
}
2009-06-30 11:51:50 +00:00
# Is this a boolean attribute?
2009-06-30 10:26:08 +00:00
if ( $ldapserver -> isAttrBoolean ( $attr )) {
2009-06-30 09:29:51 +00:00
$val = $vals [ 0 ];
2009-06-30 11:51:50 +00:00
if ( $side = 'dst' ) {
printf ( '<input type="hidden" name="old_values[%s]" value="%s" />' , htmlspecialchars ( $attr ), htmlspecialchars ( $val ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
printf ( '<select name="new_values[%s]">' , htmlspecialchars ( $attr ));
printf ( '<option value="TRUE"%s>%s</option>' , $val == 'TRUE' ? ' selected' : '' , _ ( 'true' ));
printf ( '<option value="FALSE"%s>%s</option>' , $val == 'FALSE' ? ' selected' : '' , _ ( 'false' ));
printf ( '<option value="">(%s)</option>' , _ ( 'none, remove value' ));
echo '</select>' ;
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</td>' ;
continue ;
2009-06-30 09:29:51 +00:00
}
2009-06-30 11:51:50 +00:00
# End of special case attributes (non plain text).
2009-06-30 10:26:08 +00:00
foreach ( $vals as $i => $val ) {
2009-06-30 09:29:51 +00:00
if ( $side == 'dst' ) {
2009-06-30 11:51:50 +00:00
$input_name = sprintf ( 'new_values[%s][%s]' , htmlspecialchars ( $attr ), $i );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
/* We smack an id = " ... " tag in here that doesn ' t have [][] in it to allow the
* draw_chooser_link () to identify it after the user clicks .*/
$input_id = sprintf ( '"new_values_%s_%s' , htmlspecialchars ( $attr ), $i );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo ' <!-- The old_values array will let update . php know if the entry contents changed
between the time the user loaded this page and saved their changes . --> ' ;
printf ( '<input type="hidden" name="old_values[%s][%s]" value="%s" />' , htmlspecialchars ( $attr ), $i , htmlspecialchars ( $val ));
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# Is this value is a structural objectClass, make it read-only
if ( 0 == strcasecmp ( $attr , 'objectClass' )) {
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
printf ( '<a title="%s" href="cmd.php?cmd=schema&server_id=%s&view=objectClasses&viewvalue=%s"><img src="images/info.png" /></a>' ,
_ ( 'View the schema description for this objectClass' ), $ldapserver -> server_id , htmlspecialchars ( $val ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
$schema_object = $ldapserver -> getSchemaObjectClass ( $val );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( $schema_object -> getType () == 'structural' ) {
printf ( '%s <small>(<acronym title="%s">%s</acronym>)</small><br />' ,
$val , _ ( 'This is a structural ObjectClass and cannot be removed.' ), _ ( 'structural' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( $side == 'dst' )
printf ( '<input type="hidden" name="%s" id="%s" value="%s" />' , $input_name , $input_id , htmlspecialchars ( $val ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
continue ;
2009-06-30 09:29:51 +00:00
}
}
2009-06-30 11:51:50 +00:00
if ( is_dn_string ( $val ) || $ldapserver -> isDNAttr ( $attr ))
printf ( '<a title="%s" href="cmd.php?cmd=template_engine&server_id=%s&dn=%s"><img style="vertical-align: top" src="images/go.png" /></a>' ,
sprintf ( _ ( 'Go to %s' ), htmlspecialchars ( $val )), $ldapserver -> server_id , rawurlencode ( $val ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
elseif ( is_mail_string ( $val ))
printf ( '<a href="mailto:%s><img style="vertical-align: center" src="images/mail.png" /></a>' , htmlspecialchars ( $val ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
elseif ( is_url_string ( $val ))
printf ( '<a href="%s" target="new"><img style="vertical-align: center" src="images/dc.png" /></a>' , htmlspecialchars ( $val ));
2009-06-30 09:29:51 +00:00
2009-06-30 10:26:08 +00:00
if ( $ldapserver -> isMultiLineAttr ( $attr , $val )) {
2009-06-30 11:51:50 +00:00
if ( $side == 'dst' )
printf ( '<textarea class="value" rows="3" cols="30" name="%s" id="%s">%s</textarea>' , $input_name , $input_id , htmlspecialchars ( $val ));
else
2009-06-30 09:29:51 +00:00
echo htmlspecialchars ( $val );
} else {
2009-06-30 11:51:50 +00:00
if ( $side == 'dst' )
printf ( '<input type="text" class="value" name="%s" id="%s" value="%s" />' , $input_name , $input_id , htmlspecialchars ( $val ));
else
2009-06-30 09:29:51 +00:00
echo htmlspecialchars ( $val );
}
2009-06-30 11:51:50 +00:00
# draw a link for popping up the entry browser if this is the type of attribute that houses DNs.
2009-06-30 10:26:08 +00:00
if ( $ldapserver -> isDNAttr ( $attr ))
2009-06-30 11:51:50 +00:00
draw_chooser_link ( " edit_form. $input_id " , false );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '<br />' ;
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</td>' ;
} /* end foreach value */
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</tr>' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# Draw the "add value" link under the list of values for this attributes
if ( ! $ldapserver_dst -> isReadOnly ()) {
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# First check if the required objectClass is in this DN
$isOK = 0 ;
$src_oclass = array ();
$attr_object = $ldapserver_dst -> getSchemaAttribute ( $attr , $dn_dst );
foreach ( $attr_object -> used_in_object_classes as $oclass ) {
if ( in_array ( strtolower ( $oclass ), arrayLower ( $attrs_dst [ 'objectClass' ]))) {
$isOK = 1 ;
break ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
} else {
# Find oclass that the source has that provides this attribute.
if ( in_array ( $oclass , $attrs_src [ 'objectClass' ]))
$src_oclass [] = $oclass ;
2009-06-30 09:29:51 +00:00
}
2009-06-30 11:51:50 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '<tr><td colspan=2></td><td colspan=2> </td><td> </td><td>' ;
if ( ! $isOK ) {
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( count ( $src_oclass ) == 1 )
$add_href = sprintf ( 'cmd.php?cmd=add_oclass_form&server_id=%s&dn=%s&new_oclass=%s' ,
$ldapserver_dst -> server_id , $encoded_dn_dst , $src_oclass [ 0 ]);
else
$add_href = sprintf ( 'cmd.php?cmd=add_value_form&server_id=%s&dn=%s&attr=objectClass' ,
$ldapserver_dst -> server_id , $encoded_dn_dst );
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( $attr == 'objectClass' )
printf ( '<div class="add_value">(<a href="%s" title="%s">%s</a>)</div>' , $add_href , _ ( 'Add ObjectClass and Attributes' ), _ ( 'add value' ));
else
printf ( '<div class="add_value">(<a href="%s" title="%s">%s</a>)</div>' ,
$add_href , sprintf ( _ ( 'You need one of the following ObjectClass(es) to add this attribute %s.' ), implode ( " " , $src_oclass )),
_ ( 'Add new ObjectClass' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
} else {
if ( ! $schema_attr_dst -> getIsSingleValue () || ( ! isset ( $vals ))) {
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
$add_href = sprintf ( 'cmd.php?cmd=add_value_form&erver_id=%s&dn=%s&attr=%s' ,
$ldapserver_dst -> server_id , $encoded_dn_dst , rawurlencode ( $attr ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
printf ( '<div class="add_value">(<a href="%s" title="%s">%s</a>)</div>' ,
$add_href , sprintf ( _ ( 'Add an additional value to attribute \'%s\'' ), $attr ), _ ( 'add value' ));
2009-06-30 09:29:51 +00:00
}
}
2009-06-30 11:51:50 +00:00
}
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</td></tr>' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# Get the values and see if they are the same.
if ( isset ( $attrs_src [ $attr ]) && isset ( $attrs_dst [ $attr ]) && $attrs_src [ $attr ] === $attrs_dst [ $attr ])
echo '<tr>' ;
else
echo '<tr class="updated"><td class="bottom" colspan="0"> </td></tr>' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
} /* End foreach ($attrs as $attr => $vals) */
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
if ( ! $ldapserver_dst -> isReadOnly ())
printf ( '<tr><td colspan=3> </td><td colspan=3><center><input type="submit" value="%s" /></center></form></td></tr>' , _ ( 'Save Changes' ));
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
echo '</table>' ;
2009-06-30 09:29:51 +00:00
2009-06-30 11:51:50 +00:00
# If this entry has a binary attribute,we need to provide a form for it to submit when deleting it. */
?>
2009-06-30 10:46:00 +00:00
2009-06-30 11:51:50 +00:00
< script type = " text/javascript " language = " javascript " >
2009-06-30 09:29:51 +00:00
//<!--
2009-06-30 10:26:08 +00:00
function deleteAttribute ( attrName )
2009-06-30 09:29:51 +00:00
{
2009-06-30 10:26:08 +00:00
if ( confirm ( " <?php echo _('Really delete attribute'); ?> ' " + attrName + " '? " )) {
2009-06-30 09:29:51 +00:00
document . delete_attribute_form . attr . value = attrName ;
document . delete_attribute_form . submit ();
}
}
//-->
</ script >
<!-- This form is submitted by JavaScript when the user clicks " Delete attribute " on a binary attribute -->
2009-06-30 10:46:00 +00:00
< form name = " delete_attribute_form " action = " cmd.php?cmd=delete_attr " method = " post " >
2009-06-30 09:29:51 +00:00
< input type = " hidden " name = " server_id " value = " <?php echo $ldapserver_dst->server_id ; ?> " />
< input type = " hidden " name = " dn " value = " <?php echo $dn_dst ; ?> " />
< input type = " hidden " name = " attr " value = " FILLED IN BY JAVASCRIPT " />
</ form >