protected $_head;
# Settings for this application
protected $_app;
# Default values array.
protected $_default;
public function __construct($server_id=null) {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with [%s]',129,__FILE__,__LINE__,__METHOD__,$server_id);
# To be defined in a configuration file.
$this->_app['title'] = 'phpLDAPadmin';
# Default Values for configurable items.
$this->_default['stylecss'] = CSSDIR.'style.css';
$this->_default['logo'] = 'images/logo_small.jpg';
$this->_default['sysmsg']['error'] = 'images/warning.png';
$this->_default['sysmsg']['warn'] = 'images/notice.png';
$this->_default['sysmsg']['info'] = 'images/light-big.png';
# Capture any output so far (in case we send some headers below) - there shouldnt be any output anyway.
$preOutput = '';
# Try and work around if php compression is on, or the user has set compression in the config.
# type = 1 for user gzip, 0 for php.ini gzip.
$obStatus = ob_get_status();
if ($obStatus['type'] && $obStatus['status']) {
$preOutput = ob_get_contents();
ob_end_clean();
}
header('Content-type: text/html; charset="UTF-8"');
if (isset($_SESSION['plaConfig'])
&& $_SESSION['plaConfig']->GetValue('appearance','compress')
&& eregi('gzip',$_SERVER['HTTP_ACCEPT_ENCODING'])
&& ! ini_get('zlib.output_compression')) {
header('Content-Encoding: gzip');
if (DEBUG_ENABLED)
debug_log('Sent COMPRESSED header to browser and discarded (%s)',129,__FILE__,__LINE__,__METHOD__,$preOutput);
}
if (isset($_SESSION['plaConfig'])
&& $_SESSION['plaConfig']->GetValue('appearance','compress')
&& ini_get('zlib.output_compression'))
$this->setsysmsg(array(array('title'=>_('Warning'),'body'=>_('WARNING: You cannot have PHP compression and phpLDAPadmin compression enabled at the same time. Please unset zlib.output_compression or set $config->custom->appearance[\'compress\']=false'),'type'=>'warn')));
# Turn back on output buffering.
ob_start();
# Initial Values
$this->_pageheader[] .= ''."\n";
$this->_pageheader[] .= ''."\n";
$this->_pageheader[] .= "\n";
$this->_pageheader[] .= ''."\n";
$this->_pageheader[] .= "\n";
$this->_app['logo'] = $this->_default['logo'];
if (! is_null($server_id))
$this->_app['urlcss'] = sprintf('%s%s',CSSDIR,$_SESSION['plaConfig']->GetValue('appearance','stylesheet'));
else
$this->_app['urlcss'] = sprintf('%s%s',CSSDIR,'style.css');
$this->server_id = $server_id;
}
/* Add to the HTML Header */
public function head_add($html) {
$this->_head[] .= $html;
}
/* Print out the HTML header */
private function pageheader_print() {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__);
# HTML prepage requirements.
foreach ($this->_pageheader as $line)
echo $line."\n";
# Page Title
echo '
';
if (isset($_SESSION['plaConfig']))
printf('%s (%s) - %s',
$this->_app['title'],pla_version(),$_SESSION['plaConfig']->GetValue('appearance','page_title'));
else
printf('%s - %s',$this->_app['title'],pla_version());
# Style sheet.
printf('',$this->_app['urlcss']);
printf('',JSDIR);
printf('','../htdocs/'.JSDIR);
printf('','../htdocs/');
echo "\n";
printf('',JSDIR);
printf('',JSDIR);
printf('',JSDIR);
printf('','../htdocs/'.JSDIR);
printf('','../htdocs/'.JSDIR);
echo "\n";
# HTML head requirements.
if (is_array($this->_head) && count ($this->_head))
foreach ($this->_head as $line)
echo $line."\n";
echo '';
echo "\n";
}
private function head_print() {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__);
if (isset($_SESSION['plaConfig']))
$pagetitle = $_SESSION['plaConfig']->GetValue('appearance','page_title') ? ' - '.$_SESSION['plaConfig']->GetValue('appearance','page_title') : '';
else
$pagetitle = '';
echo '
';
if (is_null($this->server_id))
printf('
%s
',' ');
else
printf('
%s %s
',$this->_app['title'],$pagetitle);
echo '
';
}
private function control_print() {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__);
if (! isset($this->server_id) || is_null($this->server_id)) {
echo ' ';
return;
}
echo '
';
echo '
';
$empty = true;
if ($_SESSION['plaConfig']->isCommandAvailable('home')) {
printf('
',
_('Purge caches'),_('Purge all cached data in phpLDAPadmin, including server schemas.'),_('Purge caches'));
$empty = false;
}
if ($_SESSION['plaConfig']->isCommandAvailable('external_links', 'feature')) {
printf('
',
get_href('add_bug'),_('Report a bug'),_('bug'),_('Report a bug'));
$empty = false;
}
if ($_SESSION['plaConfig']->isCommandAvailable('external_links', 'donation')) {
printf('
';
}
public function block_add($side,$object) {
if (! is_object($object))
error('not an object');
$this->_block[$side][] = $object;
}
private function block_print($side) {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__);
if (! isset($this->_block[$side]))
return;
printf('
',$side);
foreach ($this->_block[$side] as $object)
echo $object->draw($side);
echo '
';
}
private function sysmsg() {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__);
if (isset($this->sysmsg)) {
foreach ($this->sysmsg as $index => $details) {
switch ($details['type']) {
case 'error':
$icon = $this->_default['sysmsg']['error'];
break;
case 'warn':
$icon = $this->_default['sysmsg']['warn'];
break;
case 'info':
default:
$icon = $this->_default['sysmsg']['info'];
break;
}
if (isset($details['title']))
printf('
%s
',
$icon,$details['type'],$details['title']);
if (isset($details['body']))
if (is_array($details['body'])) {
echo '
';
foreach ($details['body'] as $line)
printf('%s ',$line);
echo '
';
} else
printf('
%s
',$details['body']);
}
}
}
public function body($compress=false) {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with (%s)',129,__FILE__,__LINE__,__METHOD__,$compress);
# If the body is called via AJAX, and compression is enable, we need to compress the output
if ($compress && ob_get_level()) {
ob_end_clean();
ob_start();
}
# System Message
if (isset($_SESSION['sysmsg']) && $_SESSION['sysmsg']) {
$this->setsysmsg($_SESSION['sysmsg']);
unset($_SESSION['sysmsg']);
}
if (isset($this->sysmsg)) {
echo '
';
$this->sysmsg();
echo '
';
echo "\n";
}
if (isset($this->_block['body'])) {
foreach ($this->_block['body'] as $object)
echo $object->draw('body');
}
if ($compress && ob_get_level() && isset($_SESSION['plaConfig'])
&& $_SESSION['plaConfig']->GetValue('appearance','compress')
&& ! ini_get('zlib.output_compression')
&& eregi('gzip',$_SERVER['HTTP_ACCEPT_ENCODING'])) {
$output = ob_get_contents();
ob_end_clean();
if (DEBUG_ENABLED)
debug_log('Sending COMPRESSED output to browser[(%s),%s]',129,__FILE__,__LINE__,__METHOD__,
strlen($output),$output);
print gzencode($output);
}
}
private function footer_print() {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__);
printf('
%s
',pla_version());
}
public function display($filter=array()) {
if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
debug_log('Entered with [%s]',129,__FILE__,__LINE__,__METHOD__,$filter);
# Control what is displayed.
$display = array(
'tree'=>true
);
$display = array_merge($display,$filter);
# HTML Header
$this->pageheader_print();
echo "\n";
# Start of body
# Page Header
echo '';
echo "\n";
echo '
';
$this->head_print();
echo "\n";
# Control Line
echo '