/** * This function displays the LDAP tree for all the servers that you have * in config.php. We read the session variable 'tree' to know which * dns are expanded or collapsed. No query string parameters are expected, * however, you can use a '#' offset to scroll to a given dn. The syntax is * tree.php#<server_id>_<rawurlencoded dn>, so if I wanted to scroll to * dc=example,dc=com for server 3, the URL would be: * tree.php#3_dc%3Dexample%2Cdc%3Dcom */ function draw_server_tree() { if (DEBUG_ENABLED) { debug_log('draw_server_tree(): Entered with ()', 33); } global $ldapserver; global $recently_timed_out_servers; global $config; static $tm = null; $server_id = $ldapserver->server_id; $tree = get_cached_item($ldapserver->server_id, 'tree'); # Does this server want mass deletion available? if ($ldapserver->isMassDeleteEnabled()) { echo '<form name="mass_delete" action="mass_delete.php" method="post" target="right_frame">'; printf('<input type="hidden" name="server_id" value="%s" />', $ldapserver->server_id); echo "\n\n"; } echo '<table class="tree" cellspacing="0">'; echo '<tr class="server">'; printf('<td class="icon"><img src="images/server.png" alt="%s" /></td>', _('Server')); printf('<td colspan="99"><a name="%s"></a>', $ldapserver->server_id); printf('<nobr>%s ', htmlspecialchars($ldapserver->name)); if ($ldapserver->haveAuthInfo() && $ldapserver->auth_type != 'config') { printf('<acronym title="%s"><img width=14 height=14 src="images/timeout.png" alt="timeout" /></acronym>', sprintf(_('Inactivity will log you off at %s'), strftime('%H:%M', time() + $ldapserver->session_timeout * 60))); } echo '</nobr></td></tr>'; /* do we have what it takes to authenticate here, or do we need to present the user with a login link (for 'cookie' and 'session' auth_types)? */ if ($ldapserver->haveAuthInfo()) { if ($ldapserver->connect(false)) { $schema_href = sprintf('schema.php?server_id=%s" target="right_frame', $ldapserver->server_id); $search_href = sprintf('search.php?server_id=%s" target="right_frame', $ldapserver->server_id); $refresh_href = sprintf('refresh.php?server_id=%s', $ldapserver->server_id); $logout_href = get_custom_file($ldapserver->server_id, 'logout.php', '') . '?server_id=' . $ldapserver->server_id; $info_href = sprintf('server_info.php?server_id=%s', $ldapserver->server_id); $import_href = sprintf('ldif_import_form.php?server_id=%s', $ldapserver->server_id); $export_href = sprintf('export_form.php?server_id=%s', $ldapserver->server_id); # Draw the quick-links below the server name: echo '<tr><td colspan="100" class="links">'; echo '<nobr>'; echo '( '; printf('<a title="%s %s" href="%s">%s</a> | ', _('View schema for'), $ldapserver->name, $schema_href, _('schema')); printf('<a title="%s %s" href="%s">%s</a> | ', _('search'), $ldapserver->name, $search_href, _('search')); printf('<a title="%s %s" href="%s">%s</a> | ', _('Refresh all expanded containers for'), $ldapserver->name, $refresh_href, _('refresh')); printf('<a title="%s" target="right_frame" href="%s">%s</a> | ', _('View server-supplied information'), $info_href, _('info')); printf('<a title="%s" target="right_frame" href="%s">%s</a> | ', _('Import entries from an LDIF file'), $import_href, _('import')); printf('<a href="%s" target="right_frame">%s</a>', $export_href, _('export')); if ($ldapserver->auth_type != 'config') { printf(' | <a title="%s" href="%s" target="right_frame">%s</a>', _('Logout of this server'), $logout_href, _('logout')); } echo ' )</nobr></td></tr>'; if ($ldapserver->auth_type != 'config') { $logged_in_dn = $ldapserver->getLoggedInDN(); echo '<tr><td class="links" colspan="100"><nobr>' . _('Logged in as: '); if ($ldapserver->getDNBase($logged_in_dn) == $logged_in_dn) { $logged_in_branch = ''; $logged_in_dn_array = array(); } else { $logged_in_branch = preg_replace('/,' . $ldapserver->getDNBase($logged_in_dn) . '$/', '', $logged_in_dn); $logged_in_dn_array = explode(',', $logged_in_branch); } $logged_in_dn_array[] = $ldapserver->getDNBase($logged_in_dn); $rdn = $logged_in_dn; if (strcasecmp('anonymous', $logged_in_dn)) { foreach ($logged_in_dn_array as $rdn_piece) { printf('<a class="logged_in_dn" href="template_engine.php?server_id=%s&dn=%s" target="right_frame">%s</a>', $server_id, rawurlencode($rdn), pretty_print_dn($rdn_piece)); if ($rdn_piece != end($logged_in_dn_array)) { echo ','; } $rdn = substr($rdn, 1 + strpos($rdn, ',')); } } else { echo 'Anonymous'; } echo '</nobr></td></tr>'; } if ($ldapserver->isReadOnly()) { printf('<tr><td class="links" colspan="100"><nobr>(%s)</nobr></td></tr>', _('read only')); } $javascript_forms = ''; $javascript_id = 0; $tree_plm = ''; if ($config->GetValue('appearance', 'tree_plm') && !isset($tm)) { $tm = new TreeMenu(); $tm->setDirroot(JSDIR . 'phplayersmenu/'); $tm->setIcondir(HTDOCDIR . '/images/'); $tm->setIconwww('images/'); $tm->setImgwww(JSDIR . 'phplayersmenu/menuimages/'); } foreach ($ldapserver->getBaseDN() as $base_dn) { # Did we get a base_dn for this server somehow? if ($base_dn) { # is the root of the tree expanded already? if (isset($tree['browser'][$base_dn]['open']) && $tree['browser'][$base_dn]['open']) { $expand_href = sprintf('collapse.php?server_id=%s&dn=%s', $ldapserver->server_id, rawurlencode($base_dn)); $expand_img = 'images/minus.png'; $expand_alt = '-'; $child_count = number_format(count($tree['browser'][$base_dn]['children'])); } else { /* Check if the LDAP server is not yet initialized (ie, the base DN configured in config.php does not exist) */ if (!$ldapserver->dnExists($base_dn)) { $javascript_id++; printf('<tr><td class="spacer"></td><td><img src="images/unknown.png" /></td><td colspan="98">%s</td></tr>', pretty_print_dn($base_dn)); /* Move this form and add it to the end of the html - otherwise the javascript doesnt work when isMassDeleteEnabled returning true. */ $javascript_forms .= sprintf('<form name="create_base_form_%s" method="post" action="template_engine.php" target="right_frame">', $javascript_id); $javascript_forms .= sprintf('<input type="hidden" name="template" value="custom" />'); $javascript_forms .= sprintf('<input type="hidden" name="server_id" value="%s" />', $ldapserver->server_id); $javascript_forms .= sprintf('<input type="hidden" name="container" value="%s" />', htmlspecialchars($rdn)); $javascript_forms .= sprintf('<input type="hidden" name="rdn" value="%s" />', get_rdn($base_dn)); $javascript_forms .= sprintf('</form>'); printf('<tr><td class="spacer"></td><td colspan="98"><small>%s<a href="javascript:document.create_base_form_%s.submit()">%s</a></small></td></tr>', _('This base entry does not exist.'), $javascript_id, _('Create it?')); continue; } else { $expand_href = sprintf('expand.php?server_id=%s&dn=%s', $ldapserver->server_id, rawurlencode($base_dn)); $expand_img = 'images/plus.png'; $expand_alt = '+'; # $size_limit = $config->GetValue('search','size_limit'); $size_limit = -1; if ($ldapserver->isLowBandwidth()) { $child_count = null; } else { $children = $ldapserver->getContainerContents($base_dn, $size_limit + 1, '(objectClass=*)', $config->GetValue('deref', 'tree')); $child_count = count($children); # if ($child_count > $size_limit) # $child_count = $size_limit.'+'; } } } $create_href = sprintf('create_form.php?server_id=%s&container=%s', $ldapserver->server_id, rawurlencode($base_dn)); $edit_href = sprintf('template_engine.php?server_id=%s&dn=%s', $ldapserver->server_id, rawurlencode($base_dn)); $icon = isset($tree['browser'][$base_dn]['icon']) ? $tree['browser'][$base_dn]['icon'] : get_icon($ldapserver, $base_dn); # Shall we draw the "mass-delete" checkbox? if ($ldapserver->isMassDeleteEnabled()) { printf('<td><input type="checkbox" name="mass_delete[%s]" /></td>', htmlspecialchars($base_dn)); } if ($config->GetValue('appearance', 'tree_plm')) { $tree_plm .= sprintf(".|%s|%s|%s|%s|%s|%s\n", pretty_print_dn($base_dn) . ($child_count ? ' (' . $child_count . ')' : ''), $edit_href, $base_dn, $icon, 'right_frame', 0); } else { echo '<tr>'; printf('<td class="expander"><a href="%s"><img src="%s" alt="%s" /></a></td>', $expand_href, $expand_img, $expand_alt); printf('<td class="icon"><a href="%s" target="right_frame"><img src="images/%s" alt="img" /></a></td>', $edit_href, $icon); printf('<td class="rdn" colspan="98"><nobr><a href="%s" target="right_frame">%s</a>', $edit_href, pretty_print_dn($base_dn)); if ($child_count) { printf(' <span class="count">(%s)</span>', $child_count); } echo '</nobr></td>'; echo '</tr>'; } } else { // end if( $base_dn ) # The server refuses to give out the base dn printf('<tr><td class="spacer"></td><td colspan="98"><small>%s<br />%s<br /><b>%s</b></small></td></tr>', _('Could not determine the root of your LDAP tree.'), _('It appears that the LDAP server has been configured to not reveal its root.'), _('Please specify it in config.php')); # Proceed to the next server. We cannot draw anything else for this server. continue; } flush(); if ($config->GetValue('appearance', 'tree_plm')) { foreach ($children as $child_dn) { $tree_plm .= draw_tree_plm($child_dn, $ldapserver); } } else { # Is the root of the tree expanded already? if (isset($tree['browser'][$base_dn]['open']) && $tree['browser'][$base_dn]['open']) { if ($ldapserver->isShowCreateEnabled() && count($tree['browser'][$base_dn]['children']) > 10) { draw_create_link($ldapserver->server_id, $base_dn, -1, urlencode($base_dn)); } foreach ($tree['browser'][$base_dn]['children'] as $child_dn) { draw_tree_html($child_dn, $ldapserver, 0); } if (!$ldapserver->isReadOnly()) { echo '<tr><td class="spacer"></td></tr>'; if ($ldapserver->isShowCreateEnabled()) { draw_create_link($ldapserver->server_id, $base_dn, -1, urlencode($base_dn)); } } } } } // foreeach if ($config->GetValue('appearance', 'tree_plm')) { $tm->setMenuStructureString($tree_plm); $tm->parseStructureForMenu('pla_tree_' . $ldapserver->server_id); $tm->setTreeMenuTheme(''); $tm->newTreeMenu('pla_tree_' . $ldapserver->server_id); echo '<tr><td colspan=99>' . $tm->getTreeMenu('pla_tree_' . $ldapserver->server_id) . '</td></tr>'; } } else { // end if( $ldapserver->connect(false) ) # could not connect to LDAP server printf('<tr><td class="spacer"></td><td><img src="images/warning_small.png" alt="%s" /></td><td colspan="99"><small><span style="color:red">%s</span></small></td></tr>', _('warning'), _('Could not connect to LDAP server.')); if ($ldapserver->auth_type != 'config') { $logout_href = sprintf('%s?server_id=%s', get_custom_file($ldapserver->server_id, 'logout.php', ''), $ldapserver->server_id); printf('<tr><td class="spacer"></td><td class="spacer"></td><td colspan="99"><small><a target="right_frame" href="%s">%s</a></small></td></tr>', $logout_href, _('logout')); } # Proceed to the next server in the list. We cannot do anything mroe here. return; } } else { // end if $ldapserver->haveAuthInfo() /* We don't have enough information to login to this server Draw the "login..." link */ $login_href = sprintf('%s?server_id=%s', get_custom_file($ldapserver->server_id, 'login_form.php', ''), $ldapserver->server_id); printf('<tr class="login"><td class="spacer"></td><td><a href="%s" target="right_frame"><img src="images/uid.png" align="top" alt="%s" /></a></td><td colspan="99"><a href="%s" target="right_frame">%s</a></td></tr>', $login_href, _('login'), $login_href, _('Login...')); # If the server recently timed out display the message if (in_array($ldapserver->server_id, $recently_timed_out_servers)) { printf('<tr><td class="spacer"></td><td colspan="100" class="links">%s</td></tr>', _('(Session timed out. Automatically logged out.)')); } } if ($ldapserver->isMassDeleteEnabled() && !$config->GetValue('appearance', 'tree_plm')) { printf('<tr><td colspan="99"><input type="submit" value="%s" /></td></tr>', _('Delete Checked Entries')); echo '<!-- The end of the mass deletion form -->'; echo '</table>'; echo '</form>'; } else { echo '</table>'; } echo "\n\n"; if (isset($javascript_forms) && $javascript_forms) { echo "<!-- Forms for javascript submit to call to create base_dns -->\n"; echo $javascript_forms; echo "<!-- The end of the forms for javascript submit to call to create base_dns -->\n"; } }
while ($arearow = $arearesult->Fetchrow()) { $menustring = $menustring . "..|" . htmlspecialchars(inet_ntoa($arearow["areaaddr"]) . " (" . $arearow["descrip"] . ")") . "|displaybase.php?cust=" . $custrow["customer"] . "&areaindex=" . $arearow["areaindex"] . "||||\n"; $rangeresult = $ds->GetRangeInArea($custrow["customer"], $arearow["areaindex"]); //range while ($rangerow = $rangeresult->Fetchrow()) { $menustring = $menustring . "...|" . htmlspecialchars(inet_ntoa($rangerow["rangeaddr"]) . " (" . $rangerow["descrip"] . ")") . "|displaybase.php?cust=" . $custrow["customer"] . "&areaindex=" . $arearow["areaindex"] . "&rangeindex=" . $rangerow["rangeindex"] . "&descrip=&sortby=Base+Address" . "||||\n"; $baseresult = $ds->GetBase($rangerow["rangeaddr"], $rangerow["rangeaddr"] + $rangerow["rangesize"] - 1, "", $custrow["customer"]); //subnet (base) while ($baserow = $baseresult->Fetchrow()) { $menustring = $menustring . "....|" . htmlspecialchars(inet_ntoa($baserow["baseaddr"]) . " /" . inet_bits($baserow["subnetsize"]) . " (" . $baserow["descrip"] . ")") . "|displaysubnet.php?baseindex=" . $baserow["baseindex"] . "||||\n"; } } } } $mid = new TreeMenu(); $mid->setDirroot('../menus'); $mid->setLibjsdir('../menus/libjs/'); $mid->setImgdir('../menus/menuimages/'); $mid->setImgwww('../menus/menuimages/'); $mid->setIcondir('../menus/menuicons/'); $mid->setIconwww('../menus/menuicons/'); if (!$menustring) { myError($w, $p, my_("No customers")); } $mid->setMenuStructureString($menustring); $mid->setIconsize(16, 16); $mid->parseStructureForMenu('treemenu1'); $mid->newTreeMenu('treemenu1'); insert($leftmenu, block('<br><br>')); insert($leftmenu, block($mid->getTreeMenu('treemenu1'))); insert($leftmenu, block('<br><br>'));