arrSettings = $arrSession['SETS'];
}
if (isset($arrSession['domain'])) {
$this->intDomainId = $arrSession['domain'];
}
$this->arrSession = $arrSession;
}
/**
* Data list view - form initialization
* @param \HTML_Template_IT $objTemplate Form template object
*/
public function listViewInit($objTemplate)
{
// Language text replacements from fieldvars.php file
foreach ($this->arrDescription as $elem) {
$objTemplate->setVariable($elem['name'], $elem['string']);
}
// Some single replacements
$objTemplate->setVariable('LIMIT', $this->intLimit);
$objTemplate->setVariable('ACTION_MODIFY', filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_STRING));
$objTemplate->setVariable('TABLE_NAME', $this->strTableName);
if (isset($this->arrSession['search'][$this->strSearchSession])) {
$objTemplate->setVariable('DAT_SEARCH', $this->arrSession['search'][$this->strSearchSession]);
}
$objTemplate->setVariable('MAX_ID', '0');
$objTemplate->setVariable('MIN_ID', '0');
}
/**
* Data list view - value insertions
* @param \HTML_Template_IT $objTemplate Form template object
* @param array $arrData Database values
* @param int $intDLCount1 Total count of data lines for one page
* @param int $intDLCount2 Total count of data lines (all data)
* @param string $strField1 Field name for data field 1
* @param string $strField2 Field name for data field 2
* @param int $intLimit Actual data char limit for field 2
*/
public function listData(
$objTemplate,
$arrData,
$intDLCount1,
$intDLCount2,
$strField1,
$strField2,
$intLimit = 0
) {
// Template block names
$strTplPart = 'datatable';
$strTplRow = 'datarow';
if ($this->strTableName == 'tbl_host') {
$strTplPart = 'datatablehost';
$strTplRow = 'datarowhost';
}
if ($this->strTableName == 'tbl_service') {
$strTplPart = 'datatableservice';
$strTplRow = 'datarowservice';
}
if (($this->strTableName == 'tbl_user') || ($this->strTableName == 'tbl_group') ||
($this->strTableName == 'tbl_datadomain') || ($this->strTableName == 'tbl_configtarget')) {
$strTplPart = 'datatablecommon';
$strTplRow = 'datarowcommon';
}
// Some single replacements
$objTemplate->setVariable('IMAGE_PATH_HEAD', $this->arrSettings['path']['base_url']. 'images/');
$objTemplate->setVariable('CELLCLASS_L', 'tdlb');
$objTemplate->setVariable('CELLCLASS_M', 'tdmb');
$objTemplate->setVariable('DISABLED', 'disabled');
$objTemplate->setVariable('DATA_FIELD_1', translate('No data'));
$objTemplate->setVariable('DATA_FIELD_2', ' ');
$objTemplate->setVariable('DATA_REGISTERED', ' ');
$objTemplate->setVariable('DATA_ACTIVE', ' ');
$objTemplate->setVariable('DATA_FILE', ' ');
$objTemplate->setVariable('PICTURE_CLASS', 'elementHide');
$objTemplate->setVariable('DOMAIN_SPECIAL', ' ');
$objTemplate->setVariable('SORT_BY', $this->intSortBy);
// Inserting data values
if ($intDLCount1 != 0) {
$intMinID = 0;
$intMaxID = 0;
for ($i=0; $i<$intDLCount1; $i++) {
// Get biggest and smalest value
if ($i == 0) {
$intMinID = $arrData[$i]['id'];
$intMaxID = $arrData[$i]['id'];
}
if ($arrData[$i]['id'] < $intMinID) {
$intMinID = $arrData[$i]['id'];
}
if ($arrData[$i]['id'] > $intMaxID) {
$intMaxID = $arrData[$i]['id'];
}
$objTemplate->setVariable('MAX_ID', $intMaxID);
$objTemplate->setVariable('MIN_ID', $intMinID);
// Line colours
$strClassL = 'tdld';
$strClassM = 'tdmd';
if ($i%2 == 1) {
$strClassL = 'tdlb';
$strClassM = 'tdmb';
}
if (isset($arrData[$i]['register']) && ($arrData[$i]['register'] == 0)) {
$strRegister = translate('No');
} else {
$strRegister = translate('Yes');
}
if ($arrData[$i]['active'] == 0) {
$strActive = translate('No');
} else {
$strActive = translate('Yes');
}
// Get file date for hosts and services
$intTimeInfo = 0;
$arrTimeData = array();
if ($this->strTableName == 'tbl_host') {
$intReturn = $this->myConfigClass->lastModifiedDir(
$this->strTableName,
$arrData[$i]['host_name'],
$arrData[$i]['id'],
$arrTimeData,
$intTimeInfo
);
if ($intReturn == 1) {
$this->strErrorMessage = $this->myConfigClass->strErrorMessage;
}
}
if ($this->strTableName == 'tbl_service') {
$intReturn = $this->myConfigClass->lastModifiedDir(
$this->strTableName,
$arrData[$i]['config_name'],
$arrData[$i]['id'],
$arrTimeData,
$intTimeInfo
);
if ($intReturn == 1) {
$this->strErrorMessage = $this->myConfigClass->strErrorMessage;
}
}
// Set datafields
foreach ($this->arrDescription as $elem) {
$objTemplate->setVariable($elem['name'], $elem['string']);
}
if ($arrData[$i][$strField1] == '') {
$arrData[$i][$strField1] = 'NOT DEFINED - ' .$arrData[$i]['id'];
}
$objTemplate->setVariable('DATA_FIELD_1', htmlentities($arrData[$i][$strField1], ENT_COMPAT, 'UTF-8'));
$objTemplate->setVariable('DATA_FIELD_1S', addslashes(htmlentities(
$arrData[$i][$strField1],
ENT_COMPAT,
'UTF-8'
)));
if ($strField2 == 'process_field') {
$arrData[$i]['process_field'] = $this->processField($arrData[$i], $this->strTableName);
} else {
$objTemplate->setVariable('DATA_FIELD_2S', addslashes(htmlentities(
$arrData[$i][$strField2],
ENT_COMPAT,
'UTF-8'
)));
}
if ($intLimit != 0) {
if (\strlen($arrData[$i][$strField2]) > $intLimit) {
$strAdd = ' ...';
} else {
$strAdd = '';
}
$objTemplate->setVariable('DATA_FIELD_2', htmlentities(substr(
$arrData[$i][$strField2],
0,
$intLimit
), ENT_COMPAT, 'UTF-8').$strAdd);
} else {
$objTemplate->setVariable('DATA_FIELD_2', htmlentities(
$arrData[$i][$strField2],
ENT_COMPAT,
'UTF-8'
));
}
$objTemplate->setVariable('DATA_REGISTERED', $strRegister);
if (substr_count($this->strTableName, 'template') != 0) {
$objTemplate->setVariable('DATA_REGISTERED', '-');
}
$objTemplate->setVariable('DATA_ACTIVE', $strActive);
$objTemplate->setVariable('DATA_FILE', ''.translate('out-of-date').'');
if ($intTimeInfo == 4) {
$objTemplate->setVariable('DATA_FILE', translate('no target'));
}
if ($intTimeInfo == 3) {
$objTemplate->setVariable('DATA_FILE', ''.translate('missed').'');
}
if ($intTimeInfo == 2) {
$objTemplate->setVariable('DATA_FILE', ''.translate('missed').'');
}
if ($intTimeInfo == 0) {
$objTemplate->setVariable('DATA_FILE', translate('up-to-date'));
}
$objTemplate->setVariable('LINE_ID', $arrData[$i]['id']);
$objTemplate->setVariable('CELLCLASS_L', $strClassL);
$objTemplate->setVariable('CELLCLASS_M', $strClassM);
$objTemplate->setVariable('IMAGE_PATH', $this->arrSettings['path']['base_url']. 'images/');
$objTemplate->setVariable('PICTURE_CLASS', 'elementShow');
$objTemplate->setVariable('DOMAIN_SPECIAL', '');
$objTemplate->setVariable('DISABLED', '');
// Disable common domain objects
if (isset($arrData[$i]['config_id'])) {
if ($arrData[$i]['config_id'] != $this->intDomainId) {
$objTemplate->setVariable('PICTURE_CLASS', 'elementHide');
$objTemplate->setVariable('DOMAIN_SPECIAL', ' [common]');
$objTemplate->setVariable('DISABLED', 'disabled');
} else {
// Inactive items should not be written/downloaded
if ($arrData[$i]['active'] == 0) {
$objTemplate->setVariable('ACTIVE_CONTROL', 'elementHide');
}
}
}
// Check access rights for list objects
if (isset($arrData[$i]['access_group'])) {
if ($this->myVisClass->checkAccountGroup($arrData[$i]['access_group'], 'write') != 0) {
$objTemplate->setVariable('LINE_CONTROL', 'elementHide');
}
} else {
if ($this->intGlobalWriteAccess != 0) {
$objTemplate->setVariable('LINE_CONTROL', 'elementHide');
}
}
// Check global access rights for list objects
if ($this->intGlobalWriteAccess != 0) {
$objTemplate->setVariable('LINE_CONTROL', 'elementHide');
}
$objTemplate->parse($strTplRow);
}
} else {
$objTemplate->setVariable('IMAGE_PATH', $this->arrSettings['path']['base_url']. 'images/');
$objTemplate->parse($strTplRow);
}
$objTemplate->setVariable('BUTTON_CLASS', 'elementShow');
if ($this->intDomainId == 0) {
$objTemplate->setVariable('BUTTON_CLASS', 'elementHide');
}
// Check access rights for adding new objects
if ($this->intGlobalWriteAccess != 0) {
$objTemplate->setVariable('ADD_CONTROL', 'disabled="disabled"');
}
// Show page numbers
$objTemplate->setVariable('PAGES', $this->myVisClass->buildPageLinks(filter_input(
INPUT_SERVER,
'PHP_SELF',
FILTER_SANITIZE_STRING
), $intDLCount2, $this->intLimit, $this->intSortBy, $this->strSortDir));
$objTemplate->parse($strTplPart);
$objTemplate->show($strTplPart);
}
/**
* Display information messages
* @param \HTML_Template_IT $objTemplate Form template object
* @param string $strErrorMessage Error messages
* @param string $strInfoMessage Information messages
* @param string $strConsistMessage Consistency messages
* @param array $arrTimeData Time data array
* @param string $strTimeInfoString Time information message
* @param int $intNoTime Status value for showing time information (0 = show time)
*/
public function showMessages(
$objTemplate,
$strErrorMessage,
$strInfoMessage,
$strConsistMessage,
$arrTimeData,
$strTimeInfoString,
$intNoTime = 0
) {
// Display info messages
if ($strInfoMessage != '') {
$objTemplate->setVariable('INFOMESSAGE', $strInfoMessage);
$objTemplate->parse('infomessage');
}
// Display error messages
if ($strErrorMessage != '') {
$objTemplate->setVariable('ERRORMESSAGE', $strErrorMessage);
$objTemplate->parse('errormessage');
}
// Display time informations
if (($this->intDomainId != 0) && ($intNoTime == 0)) {
foreach ($arrTimeData as $key => $elem) {
if ($key == 'table') {
$objTemplate->setVariable('LAST_MODIFIED_TABLE', translate('Last database update:'). ' ' .
$elem. '');
$objTemplate->parse('table_time');
} else {
$objTemplate->setVariable('LAST_MODIFIED_FILE', translate('Last file change of the configuration '.
'target '). ' ' .$key. ': ' .$elem. '');
$objTemplate->parse('file_time');
}
}
if ($strTimeInfoString != '') {
$objTemplate->setVariable('MODIFICATION_STATUS', $strTimeInfoString);
$objTemplate->parse('modification_status');
}
}
// Display consistency messages
if ($strConsistMessage != '') {
$objTemplate->setVariable('CONSIST_USAGE', $strConsistMessage);
$objTemplate->parse('consistency');
}
$objTemplate->parse('msgfooter');
$objTemplate->show('msgfooter');
}
/**
* Display page footer
* @param \HTML_Template_IT $objTemplate Form template object
* @param string $setFileVersion NagiosQL version
*/
public function showFooter($objTemplate, $setFileVersion)
{
$objTemplate->setVariable('VERSION_INFO', "NagiosQL $setFileVersion");
$objTemplate->parse('footer');
$objTemplate->show('footer');
}
/**
* Single data form initialization
* @param \HTML_Template_IT $objTemplate Form template object
* @param string $strChbFields Comma separated string of checkbox value names
*/
public function addFormInit($objTemplate, $strChbFields = '')
{
// Language text replacements from fieldvars.php file
foreach ($this->arrDescription as $elem) {
$objTemplate->setVariable($elem['name'], $elem['string']);
}
// Some single replacements
$objTemplate->setVariable('ACTION_INSERT', filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_STRING));
$objTemplate->setVariable('IMAGE_PATH', $this->arrSettings['path']['base_url']. 'images/');
$objTemplate->setVariable('DOCUMENT_ROOT', $this->arrSettings['path']['base_url']);
$objTemplate->setVariable('ACT_CHECKED', 'checked');
$objTemplate->setVariable('REG_CHECKED', 'checked');
$objTemplate->setVariable('MODUS', 'insert');
$objTemplate->setVariable('VERSION', $this->intVersion);
$objTemplate->setVariable('LIMIT', $this->intLimit);
$objTemplate->setVariable('RELATION_CLASS', 'elementHide');
$objTemplate->setVariable('IFRAME_SRC', $this->arrSettings['path']['base_url']. 'admin/commandline.php');
// Some conditional replacements
if ($this->strBrowser != 'msie') {
$objTemplate->setVariable('MSIE_DISABLED', 'disabled="disabled"');
}
if ($this->intGroupAdm == 0) {
$objTemplate->setVariable('RESTRICT_GROUP_ADMIN', 'class="elementHide"');
}
if ($this->arrSettings['common']['seldisable'] == 0) {
$objTemplate->setVariable('MSIE_DISABLED', '');
}
if ($this->arrSettings['common']['tplcheck'] == 0) {
$objTemplate->setVariable('CHECK_BYPASS', 'return true;');
$objTemplate->setVariable('CHECK_BYPASS_NEW', '1');
} else {
$objTemplate->setVariable('CHECK_BYPASS_NEW', '0');
}
// Some replacements based on nagios version
if ($this->intVersion < 3) {
$objTemplate->setVariable('VERSION_20_VISIBLE', 'elementShow');
$objTemplate->setVariable('VERSION_30_VISIBLE', 'elementHide');
$objTemplate->setVariable('VERSION_40_VISIBLE', 'elementHide');
$objTemplate->setVariable('VERSION_20_MUST', 'inpmust');
$objTemplate->setVariable('VERSION_30_MUST', '');
$objTemplate->setVariable('VERSION_40_MUST', '');
$objTemplate->setVariable('VERSION_20_STAR', '*');
$objTemplate->setVariable('NAGIOS_VERSION', '2');
}
if ($this->intVersion >= 3) {
$objTemplate->setVariable('VERSION_20_VISIBLE', 'elementHide');
$objTemplate->setVariable('VERSION_30_VISIBLE', 'elementShow');
$objTemplate->setVariable('VERSION_40_VISIBLE', 'elementHide');
$objTemplate->setVariable('VERSION_20_MUST', '');
$objTemplate->setVariable('VERSION_30_MUST', 'inpmust');
$objTemplate->setVariable('VERSION_40_MUST', '');
$objTemplate->setVariable('VERSION_20_STAR', '');
$objTemplate->setVariable('NAGIOS_VERSION', '3');
}
if ($this->intVersion >= 4) {
$objTemplate->setVariable('VERSION_40_VISIBLE', 'elementShow');
$objTemplate->setVariable('VERSION_40_MUST', 'inpmust');
$objTemplate->setVariable('NAGIOS_VERSION', '4');
}
// Checkbox and radio field value replacements
if ($strChbFields != '') {
foreach (explode(',', $strChbFields) as $elem) {
$objTemplate->setVariable('DAT_' .$elem. '0_CHECKED', '');
$objTemplate->setVariable('DAT_' .$elem. '1_CHECKED', '');
$objTemplate->setVariable('DAT_' .$elem. '2_CHECKED', 'checked');
}
}
}
/**
* Single data form - value insertion
* @param \HTML_Template_IT $objTemplate Form template object
* @param array $arrModifyData Database values
* @param int $intLocked Data is locked (0 = no / 1 = yes)
* @param string $strInfo Information string
* @param string $strChbFields Comma separated string of checkbox value names
*/
public function addInsertData($objTemplate, $arrModifyData, $intLocked, $strInfo, $strChbFields = '')
{
// Insert text data values
foreach ($arrModifyData as $key => $value) {
if (($key == 'active') || ($key == 'register') || ($key == 'last_modified') || ($key == 'access_rights')) {
continue;
}
$objTemplate->setVariable('DAT_' .strtoupper($key), htmlentities($value, ENT_QUOTES, 'UTF-8'));
}
// Insert checkbox data values
if (isset($arrModifyData['active']) && ($arrModifyData['active'] != 1)) {
$objTemplate->setVariable('ACT_CHECKED', '');
}
if (isset($arrModifyData['register']) && ($arrModifyData['register'] != 1)) {
$objTemplate->setVariable('REG_CHECKED', '');
}
// Deselect any checkboxes
if ($strChbFields != '') {
foreach (explode(',', $strChbFields) as $elem) {
$objTemplate->setVariable('DAT_' .$elem. '0_CHECKED', '');
$objTemplate->setVariable('DAT_' .$elem. '1_CHECKED', '');
$objTemplate->setVariable('DAT_' .$elem. '2_CHECKED', '');
}
}
// Change some status values in locked data sets
if ($intLocked != 0) {
$objTemplate->setVariable('ACT_DISABLED', 'disabled');
$objTemplate->setVariable('ACT_CHECKED', 'checked');
$objTemplate->setVariable('ACTIVE', '1');
$objTemplate->setVariable('CHECK_MUST_DATA', $strInfo);
$objTemplate->setVariable('RELATION_CLASS', 'elementShow');
}
// Change mode to modify
$objTemplate->setVariable('MODUS', 'modify');
// Check write permission
if ($this->intWriteAccessId == 1) {
$objTemplate->setVariable('DISABLE_SAVE', 'disabled="disabled"');
}
if ($this->intGlobalWriteAccess == 1) {
$objTemplate->setVariable('DISABLE_SAVE', 'disabled="disabled"');
}
}
/**
* Process field view
* @param array $arrData Data array
* @param string $strTableName Table name
* @return string String includung field data
*/
public function processField($arrData, $strTableName)
{
$strField = '';
$arrDataHosts = array();
$arrDataHostgroups = array();
$arrDataService = array();
$arrDataServices = array();
// Hostdependency table
if ($strTableName == 'tbl_hostdependency') {
if ($arrData['dependent_host_name'] != 0) {
$strSQLHost = 'SELECT `host_name`, `exclude` FROM `tbl_host` ' .
'LEFT JOIN `tbl_lnkHostdependencyToHost_DH` ON `id`=`idSlave` ' .
'WHERE `idMaster`=' .$arrData['id']. ' ORDER BY `host_name`';
$this->myDBClass->hasDataArray($strSQLHost, $arrDataHosts, $intDCHost);
if ($intDCHost != 0) {
foreach ($arrDataHosts as $elem) {
if ($elem['exclude'] == 1) {
$strField .= 'H:!' .$elem['host_name']. ',';
} else {
$strField .= 'H:' .$elem['host_name']. ',';
}
}
}
}
if ($arrData['dependent_hostgroup_name'] != 0) {
$strSQLHost = 'SELECT `hostgroup_name`, `exclude` FROM `tbl_hostgroup` ' .
'LEFT JOIN `tbl_lnkHostdependencyToHostgroup_DH` ON `id`=`idSlave` ' .
'WHERE `idMaster`=' .$arrData['id']. ' ORDER BY `hostgroup_name`';
$this->myDBClass->hasDataArray($strSQLHost, $arrDataHostgroups, $intDCHostgroup);
if ($intDCHostgroup != 0) {
foreach ($arrDataHostgroups as $elem) {
if ($elem['exclude'] == 1) {
$strField .= 'HG:!' .$elem['hostgroup_name']. ',';
} else {
$strField .= 'HG:' .$elem['hostgroup_name']. ',';
}
}
}
}
}
// Hostescalation table
if ($strTableName == 'tbl_hostescalation') {
if ($arrData['host_name'] != 0) {
$strSQLHost = 'SELECT `host_name` FROM `tbl_host` ' .
'LEFT JOIN `tbl_lnkHostescalationToHost` ON `id`=`idSlave` ' .
'WHERE `idMaster`=' .$arrData['id']. ' ORDER BY `host_name`';
$this->myDBClass->hasDataArray($strSQLHost, $arrDataHosts, $intDCHost);
if ($intDCHost != 0) {
foreach ($arrDataHosts as $elem) {
$strField .= 'H:' .$elem['host_name']. ',';
}
}
}
if ($arrData['hostgroup_name'] != 0) {
$strSQLHost = 'SELECT `hostgroup_name` FROM `tbl_hostgroup` ' .
'LEFT JOIN `tbl_lnkHostescalationToHostgroup` ON `id`=`idSlave` ' .
'WHERE `idMaster`=' .$arrData['id']. ' ORDER BY `hostgroup_name`';
$this->myDBClass->hasDataArray($strSQLHost, $arrDataHostgroups, $intDCHostgroup);
if ($intDCHostgroup != 0) {
foreach ($arrDataHostgroups as $elem) {
$strField .= 'HG:' .$elem['hostgroup_name']. ',';
}
}
}
}
// Servicedependency table
if ($strTableName == 'tbl_servicedependency') {
if ($arrData['dependent_service_description'] == 2) {
$strField .= '*';
} elseif ($arrData['dependent_service_description'] != 0) {
$strSQLService = 'SELECT `strSlave` FROM `tbl_lnkServicedependencyToService_DS` ' .
'WHERE `idMaster`=' .$arrData['id']. ' ORDER BY `strSlave`';
$this->myDBClass->hasDataArray($strSQLService, $arrDataService, $intDCService);
if ($intDCService != 0) {
foreach ($arrDataService as $elem) {
$strField .= $elem['strSlave']. ',';
}
}
}
if ($strField == '') {
$strSQLService = 'SELECT `servicegroup_name` FROM `tbl_servicegroup` ' .
'LEFT JOIN `tbl_lnkServicedependencyToServicegroup_DS` ON `idSlave`=`id` ' .
'WHERE `idMaster`=' .$arrData['id']. ' ORDER BY `servicegroup_name`';
$this->myDBClass->hasDataArray($strSQLService, $arrDataService, $intDCService);
if ($intDCService != 0) {
foreach ($arrDataService as $elem) {
$strField .= $elem['servicegroup_name']. ',';
}
}
}
}
// Serviceescalation table
if ($strTableName == 'tbl_serviceescalation') {
if ($arrData['service_description'] == 2) {
$strField .= '*';
} elseif ($arrData['service_description'] != 0) {
$strSQLService = 'SELECT `strSlave` FROM `tbl_lnkServiceescalationToService` ' .
'WHERE `idMaster`=' .$arrData['id'];
$this->myDBClass->hasDataArray($strSQLService, $arrDataServices, $intDCServices);
if ($intDCServices != 0) {
foreach ($arrDataServices as $elem) {
$strField .= $elem['strSlave']. ',';
}
}
}
if ($strField == '') {
$strSQLService = 'SELECT `servicegroup_name` FROM `tbl_servicegroup` ' .
'LEFT JOIN `tbl_lnkServiceescalationToServicegroup` ON `idSlave`=`id` ' .
'WHERE `idMaster`=' .$arrData['id']. ' ORDER BY `servicegroup_name`';
$this->myDBClass->hasDataArray($strSQLService, $arrDataService, $intDCService);
if ($intDCService != 0) {
foreach ($arrDataService as $elem) {
$strField .= $elem['servicegroup_name']. ',';
}
}
}
}
// Some string manipulations - remove comma on line end
if (substr($strField, -1) == ',') {
$strField = substr($strField, 0, -1);
}
return $strField;
}
}