server(), '', 'objectclass=*', array('+', '*', 'subschemasubentry'), 0, 0, 0, LDAP_DEREF_NEVER);
if ($result) {
	$info = ldap_get_entries($_SESSION['ldap']->server(), $result);
	if ($info) {
		$info = $info[0];
		foreach ($info as $key => $value) {
			if (is_array($info[$key]) && isset($info[$key]['count'])) {
				unset($info[$key]['count']);
			}
		}
		if (isset($info['namingcontexts'])) {
			$namingContexts = implode(', ', $info['namingcontexts']);
		}
		if (isset($info['configcontext'])) {
			$configcontext = $info['configcontext'][0];
		}
		if (isset($info['supportedldapversion'])) {
			$supportedldapversion = implode(', ', $info['supportedldapversion']);
		}
		if (isset($info['supportedsaslmechanisms'])) {
			$supportedsaslmechanisms = implode(', ', $info['supportedsaslmechanisms']);
		}
		if (isset($info['subschemasubentry'])) {
			$subschemasubentry = $info['subschemasubentry'][0];
		}
		if (isset($info['vendorname'])) {
			$vendorname = $info['vendorname'][0];
		}
		if (isset($info['vendorversion'])) {
			$vendorversion = $info['vendorversion'][0];
		}
		if (isset($info['dynamicsubtrees'])) {
			$dynamicSubtrees = implode(', ', $info['dynamicsubtrees']);
		}
	}
}
// get additional information if monitoring is enabled
$monitorResults = searchLDAP('cn=monitor', 'objectClass=*', array('*', '+'));
$monitorEntries = array();
foreach ($monitorResults as $monitorResult) {
	$monitorEntries[$monitorResult['dn']] = array_change_key_case($monitorResult, CASE_LOWER);
}
$monitorEntries = array_change_key_case($monitorEntries, CASE_LOWER);
include '../../lib/adminHeader.inc';
echo '
';
$tabindex = 1;
$container = new htmlResponsiveRow();
$container->add(new htmlTitle(_("Server information")), 12);
if (!empty($namingContexts)) {
	$container->addLabel(new htmlOutputText('' . _("Managed suffixes") . '', false));
	$container->addField(new htmlOutputText($namingContexts));
}
if (!empty($supportedldapversion)) {
	$container->addLabel(new htmlOutputText('' . _("LDAP version") . '', false));
	$container->addField(new htmlOutputText($supportedldapversion));
}
if ($configcontext != '') {
	$container->addLabel(new htmlOutputText('' . _("Config suffix") . '', false));
	$container->addField(new htmlOutputText($configcontext));
}
$container->addLabel(new htmlOutputText('' . _("Schema suffix") . '', false));
$container->addField(new htmlOutputText($subschemasubentry));
if ($dynamicSubtrees != '') {
	$container->addLabel(new htmlOutputText('' . _("Dynamic subtrees") . '', false));
	$container->addField(new htmlOutputText($dynamicSubtrees));
}
if (!empty($supportedsaslmechanisms)) {
	$container->addLabel(new htmlOutputText('' . _("SASL mechanisms") . '', false));
	$container->addField(new htmlOutputText($supportedsaslmechanisms));
}
if ($vendorname != '') {
	$container->addLabel(new htmlOutputText('' . _("Vendor name") . '', false));
	$container->addField(new htmlOutputText($vendorname));
}
if ($vendorversion != '') {
	$container->addLabel(new htmlOutputText('' . _("Vendor version") . '', false));
	$container->addField(new htmlOutputText($vendorversion));
}
// monitoring information
if (isset($monitorEntries['cn=monitor']['monitoredinfo'])) {
	$container->addLabel(new htmlOutputText('' . _("Name") . '', false));
	$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=monitor']['monitoredinfo'])));
}
if (isset($monitorEntries['cn=listeners,cn=monitor'])) {
	$container->addLabel(new htmlOutputText('' . _("Listeners") . '', false));
	$listeners = array();
	$l = 0;
	while (isset($monitorEntries['cn=listener ' . $l . ',cn=listeners,cn=monitor'])) {
		$listeners[] = $monitorEntries['cn=listener ' . $l . ',cn=listeners,cn=monitor']['monitorconnectionlocaladdress'][0];
		$l++;
	}
	$container->addField(new htmlOutputText(implode(', ', $listeners)));
}
if (isset($monitorEntries['cn=backends,cn=monitor'])) {
	$container->addLabel(new htmlOutputText('' . _("Backends") . '', false));
	$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=backends,cn=monitor']['monitoredinfo'])));
}
if (isset($monitorEntries['cn=overlays,cn=monitor'])) {
	$container->addLabel(new htmlOutputText('' . _("Overlays") . '', false));
	$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=overlays,cn=monitor']['monitoredinfo'])));
}
if (isset($monitorEntries['cn=max file descriptors,cn=connections,cn=monitor'])) {
	$container->addLabel(new htmlOutputText('' . _("Max. file descriptors") . '', false));
	$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=max file descriptors,cn=connections,cn=monitor']['monitorcounter'])));
}
// server statistics
if (isset($monitorEntries['cn=time,cn=monitor']) || isset($monitorEntries['cn=statistics,cn=monitor']) || isset($monitorEntries['cn=monitor']['currenttime'])) {
	$container->add(new htmlSubTitle(_('Server statistics')), 12);
	if (isset($monitorEntries['cn=entries,cn=statistics,cn=monitor'])) {
		$container->addLabel(new htmlOutputText('' . _("LDAP entries") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=entries,cn=statistics,cn=monitor']['monitorcounter'])));
	}
	if (isset($monitorEntries['cn=referrals,cn=statistics,cn=monitor'])) {
		$container->addLabel(new htmlOutputText('' . _("Referrals") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=referrals,cn=statistics,cn=monitor']['monitorcounter'])));
	}
	if (isset($monitorEntries['cn=start,cn=time,cn=monitor'])) {
		$time = formatLDAPTimestamp($monitorEntries['cn=start,cn=time,cn=monitor']['monitortimestamp'][0]);
		$container->addLabel(new htmlOutputText('' . _("Start time") . '', false));
		$container->addField(new htmlOutputText($time), 12);
	}
	elseif (isset($monitorEntries['cn=monitor']['starttime'])) { // Fedora 389
		$time = formatLDAPTimestamp($monitorEntries['cn=monitor']['starttime'][0]);
		$container->addLabel(new htmlOutputText('' . _("Start time") . '', false));
		$container->addField(new htmlOutputText($time));
	}
	if (isset($monitorEntries['cn=current,cn=time,cn=monitor'])) {
		$time = formatLDAPTimestamp($monitorEntries['cn=current,cn=time,cn=monitor']['monitortimestamp'][0]);
		$container->addLabel(new htmlOutputText('' . _("Server time") . '', false));
		$container->addField(new htmlOutputText($time));
	}
	elseif (isset($monitorEntries['cn=monitor']['currenttime'])) { // Fedora 389
		$time = formatLDAPTimestamp($monitorEntries['cn=monitor']['currenttime'][0]);
		$container->addLabel(new htmlOutputText('' . _("Server time") . '', false));
		$container->addField(new htmlOutputText($time));
	}
	if (isset($monitorEntries['cn=uptime,cn=time,cn=monitor'])) {
		$uptime = $monitorEntries['cn=uptime,cn=time,cn=monitor']['monitoredinfo'][0];
		$days = floor($uptime / (3600 * 24));
		$daysRest = $uptime - ($days * 3600 * 24);
		$hours = floor($daysRest / 3600);
		$hoursRest = $daysRest - ($hours * 3600);
		$minutes = floor($hoursRest / 60);
		$container->addLabel(new htmlOutputText('' . _("Uptime") . '', false));
		$container->addField(new htmlOutputText($days . ':' . $hours . ':' . $minutes));
	}
}
// connection statistics
if (isset($monitorEntries['cn=connections,cn=monitor']) || isset($monitorEntries['cn=statistics,cn=monitor']) || isset($monitorEntries['cn=monitor']['currentconnections'])) {
	$container->add(new htmlSubTitle(_('Connection statistics')), 12);
	if (isset($monitorEntries['cn=current,cn=connections,cn=monitor'])) {
		$container->addLabel(new htmlOutputText('' . _("Current connections") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=current,cn=connections,cn=monitor']['monitorcounter'])));
	}
	elseif (isset($monitorEntries['cn=monitor']['currentconnections'])) { // Fedora 389
		$container->addLabel(new htmlOutputText('' . _("Current connections") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=monitor']['currentconnections'])));
	}
	if (isset($monitorEntries['cn=total,cn=connections,cn=monitor'])) {
		$container->addLabel(new htmlOutputText('' . _("Total connections") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=total,cn=connections,cn=monitor']['monitorcounter'])));
	}
	elseif (isset($monitorEntries['cn=monitor']['totalconnections'])) { // Fedora 389
		$container->addLabel(new htmlOutputText('' . _("Total connections") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=monitor']['totalconnections'])));
	}
	if (isset($monitorEntries['cn=bytes,cn=statistics,cn=monitor'])) {
		$bytes = round($monitorEntries['cn=bytes,cn=statistics,cn=monitor']['monitorcounter'][0] / 1000000, 2) . 'MB';
		$container->addLabel(new htmlOutputText('' . _("Bytes sent") . '', false));
		$container->addField(new htmlOutputText($bytes));
	}
	elseif (isset($monitorEntries['cn=monitor']['bytessent'])) { // Fedora 389
		$bytes = round($monitorEntries['cn=monitor']['bytessent'][0] / 1000000, 2) . 'MB';
		$container->addLabel(new htmlOutputText('' . _("Bytes sent") . '', false));
		$container->addField(new htmlOutputText($bytes));
	}
	if (isset($monitorEntries['cn=pdu,cn=statistics,cn=monitor'])) {
		$container->addLabel(new htmlOutputText('' . _("PDUs sent") . '', false));
		$container->addField(new htmlOutputText($monitorEntries['cn=pdu,cn=statistics,cn=monitor']['monitorcounter'][0]));
	}
	if (isset($monitorEntries['cn=monitor']['entriessent'])) { // Fedora 389
		$container->addLabel(new htmlOutputText('' . _("Entries sent") . '', false));
		$container->addField(new htmlOutputText($monitorEntries['cn=monitor']['entriessent'][0]));
	}
}
// operation statistics (OpenLDAP)
if (isset($monitorEntries['cn=operations,cn=monitor'])) {
	$container->add(new htmlSubTitle(_('Operation statistics')), 12);
	$data = array();
	if (isset($monitorEntries['cn=bind,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Bind") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=bind,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=bind,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=unbind,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Unbind") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=unbind,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=unbind,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=search,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Search") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=search,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=search,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=add,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Add") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=add,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=add,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=modify,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Modify") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=modify,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=modify,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=delete,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Delete") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=delete,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=delete,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=modrdn,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Modify RDN") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=modrdn,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=modrdn,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=compare,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Compare") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=compare,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=compare,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=abandon,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Abandon") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=abandon,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=abandon,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=extended,cn=operations,cn=monitor'])) {
		$data[] = array(
			new htmlOutputText('' . _("Extended") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=extended,cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=extended,cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	if (isset($monitorEntries['cn=operations,cn=monitor']['monitoropinitiated'])) {
		$data[] = array(
			new htmlOutputText('' . _("Total") . '', false),
			new htmlOutputText(implode(', ', $monitorEntries['cn=operations,cn=monitor']['monitoropinitiated'])),
			new htmlOutputText(implode(', ', $monitorEntries['cn=operations,cn=monitor']['monitoropcompleted'])),
		);
	}
	$opStats = new htmlResponsiveTable(array('', _("Initiated"), _("Completed")), $data);
	$container->add($opStats, 12);
}
// operation statistics (389 server)
elseif (isset($monitorEntries['cn=monitor']['opsinitiated'])) {
	$container->add(new htmlSubTitle(_('Operation statistics')), 12);
	$container->addLabel(new htmlOutputText('' . _("Initiated") . '', false));
	$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=monitor']['opsinitiated'])));
	$container->addLabel(new htmlOutputText('' . _("Completed") . '', false));
	$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=monitor']['opscompleted'])));
	if (isset($monitorEntries['cn=snmp,cn=monitor']['addentryops'])) {
		$container->addLabel(new htmlOutputText('' . _("Bind") . '', false));
		$binds = $monitorEntries['cn=snmp,cn=monitor']['anonymousbinds'][0] + $monitorEntries['cn=snmp,cn=monitor']['unauthbinds'][0]
					+ $monitorEntries['cn=snmp,cn=monitor']['simpleauthbinds'][0] + $monitorEntries['cn=snmp,cn=monitor']['strongauthbinds'][0];
		$container->addField(new htmlOutputText($binds));
		$container->addLabel(new htmlOutputText('' . _("Search") . '', false));
		$searches = $monitorEntries['cn=snmp,cn=monitor']['searchops'][0];
		$container->addField(new htmlOutputText($searches));
		$container->addLabel(new htmlOutputText('' . _("Add") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=snmp,cn=monitor']['addentryops'])));
		$container->addLabel(new htmlOutputText('' . _("Modify") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=snmp,cn=monitor']['modifyentryops'])));
		$container->addLabel(new htmlOutputText('' . _("Delete") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=snmp,cn=monitor']['removeentryops'])));
		$container->addLabel(new htmlOutputText('' . _("Modify RDN") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=snmp,cn=monitor']['modifyrdnops'])));
		$container->addLabel(new htmlOutputText('' . _("Compare") . '', false));
		$container->addField(new htmlOutputText(implode(', ', $monitorEntries['cn=snmp,cn=monitor']['compareops'])));
	}
}
parseHtml(null, $container, array(), true, $tabindex, 'user');
echo '
';
include '../../lib/adminFooter.inc';
?>