parent
a1b336f26b
commit
a2b7b10df8
|
@ -277,6 +277,11 @@ class BackendConfigForm extends ConfigForm
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (isset($formData['skip_validation']) && $formData['skip_validation']) {
|
||||||
|
// In case another error occured and the checkbox was displayed before
|
||||||
|
$this->addSkipValidationCheckbox();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -292,61 +297,100 @@ class BackendConfigForm extends ConfigForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate the ido instance schema resource
|
* Return whether the given values are valid
|
||||||
*
|
*
|
||||||
* @param Form $form
|
* @param array $formData The data to validate
|
||||||
* @param ConfigObject $resourceConfig
|
|
||||||
*
|
*
|
||||||
* @return bool Whether validation succeeded or not
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function isValidIdoSchema(Form $form, ConfigObject $resourceConfig)
|
public function isValid($formData)
|
||||||
{
|
{
|
||||||
try {
|
if (! parent::isValid($formData)) {
|
||||||
$resource = ResourceFactory::createResource($resourceConfig);
|
|
||||||
$result = $resource->select()->from('icinga_dbversion', array('version'));
|
|
||||||
$result->fetchOne();
|
|
||||||
} catch (Exception $e) {
|
|
||||||
$form->addError(
|
|
||||||
$form->translate(
|
|
||||||
'IDO schema validation failed, it looks like that the IDO schema is missing in the given database.'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$resourceConfig = ResourceFactory::getResourceConfig($this->getValue('resource'));
|
||||||
|
if (! self::isValidIdoSchema($this, $resourceConfig) || !self::isValidIdoInstance($this, $resourceConfig)) {
|
||||||
|
$this->addSkipValidationCheckbox();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate the ido instance availability
|
* Add a checkbox to the form by which the user can skip the schema validation
|
||||||
|
*/
|
||||||
|
protected function addSkipValidationCheckbox()
|
||||||
|
{
|
||||||
|
$this->addElement(
|
||||||
|
'checkbox',
|
||||||
|
'skip_validation',
|
||||||
|
array(
|
||||||
|
'order' => 0,
|
||||||
|
'ignore' => true,
|
||||||
|
'required' => true,
|
||||||
|
'label' => $this->translate('Skip Validation'),
|
||||||
|
'description' => $this->translate(
|
||||||
|
'Check this to not to validate the IDO schema of the chosen resource.'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether the given resource contains a valid IDO schema
|
||||||
*
|
*
|
||||||
* @param Form $form
|
* @param Form $form
|
||||||
* @param ConfigObject $resourceConfig
|
* @param ConfigObject $resourceConfig
|
||||||
*
|
*
|
||||||
* @return bool Whether validation succeeded or not
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function isValidIdoInstance(Form $form, ConfigObject $resourceConfig)
|
public static function isValidIdoSchema(Form $form, ConfigObject $resourceConfig)
|
||||||
{
|
{
|
||||||
$resource = ResourceFactory::createResource($resourceConfig);
|
try {
|
||||||
$result = $resource->select()->from('icinga_instances', array('instance_name'));
|
$db = ResourceFactory::createResource($resourceConfig);
|
||||||
$instances = $result->fetchAll();
|
$db->select()->from('icinga_dbversion', array('version'))->fetchOne();
|
||||||
|
} catch (Exception $_) {
|
||||||
if (count($instances) === 1) {
|
$form->error($form->translate(
|
||||||
return true;
|
'Cannot find the IDO schema. Please verify that the given database '
|
||||||
} elseif (count($instances) > 1) {
|
. 'contains the schema and that the configured user has access to it.'
|
||||||
$form->warning(
|
));
|
||||||
$form->translate(
|
|
||||||
'IDO instance validation failed, because there are multiple instances available.'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$form->error(
|
return true;
|
||||||
$form->translate(
|
}
|
||||||
'IDO instance validation failed, because there is no IDO instance available.'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
return false;
|
/**
|
||||||
|
* Return whether a single icinga instance is writing to the given resource
|
||||||
|
*
|
||||||
|
* @param Form $form
|
||||||
|
* @param ConfigObject $resourceConfig
|
||||||
|
*
|
||||||
|
* @return bool True if it's a single instance, false if none
|
||||||
|
* or multiple instances are writing to it
|
||||||
|
*/
|
||||||
|
public static function isValidIdoInstance(Form $form, ConfigObject $resourceConfig)
|
||||||
|
{
|
||||||
|
$db = ResourceFactory::createResource($resourceConfig);
|
||||||
|
$rowCount = $db->select()->from('icinga_instances')->count();
|
||||||
|
|
||||||
|
if ($rowCount === 0) {
|
||||||
|
$form->error($form->translate(
|
||||||
|
'There is currently no icinga instance writing to the IDO. Make sure '
|
||||||
|
. 'that a icinga instance is configured and able to write to the IDO.'
|
||||||
|
));
|
||||||
|
return false;
|
||||||
|
} elseif ($rowCount > 1) {
|
||||||
|
$form->warning($form->translate(
|
||||||
|
'There is currently more than one icinga instance writing to the IDO. You\'ll see all objects from all'
|
||||||
|
. ' instances without any differentation. If this is not desired, consider setting up a separate IDO'
|
||||||
|
. ' for each instance.'
|
||||||
|
));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue