X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_configRegistry.inc;h=f895a3dac561ef9a0c1a8c04d3c426c7beb37f3c;hb=9566dc068208034acf0da2630a7efbb5a370f191;hp=2bec73ce6137ef5c7998852be9bba2f856322ba3;hpb=ff71b7aac0d48ccdad5f0191cfd3315505ffacf2;p=gosa.git
diff --git a/gosa-core/include/class_configRegistry.inc b/gosa-core/include/class_configRegistry.inc
index 2bec73ce6..f895a3dac 100644
--- a/gosa-core/include/class_configRegistry.inc
+++ b/gosa-core/include/class_configRegistry.inc
@@ -25,6 +25,14 @@ class configRegistry{
public $schemaCheckFinished = FALSE;
public $pluginsDeactivated = array();
+ // Name of enabled plugins found in gosa.conf.
+ private $activePlugins = array();
+
+
+ /*! \brief Constructs the config registry
+ * @param config The configuration object
+ * @return
+ */
function __construct($config)
{
$this->config = &$config;
@@ -50,16 +58,73 @@ class configRegistry{
}
+ /*! \brief Returns a list of plugins used by GOsa.
+ @return Array An array containing all plugins with theis plInfo data.
+ */
+ function getListOfPlugins()
+ {
+ return($this->classesWithInfo);
+ }
+
+
+ /*! \brief Checks whether the schema check was called in the current session or not.
+ * @return Boolean True if check was already called
+ */
function schemaCheckFinished()
{
return($this->schemaCheckFinished);
}
- function validateSchemata($force = FALSE, $disableIncompatiblePlugins = FALSE)
+ /*! \brief Starts the schema validation
+ * @param Boolean 'force' Force a re-check.
+ * @param Boolean 'disableIncompatiblePlugins' Disables of incompatible GOsa-plugins.
+ * @return Boolean True on success else FALSE
+ */
+ function validateSchemata($force = FALSE, $disableIncompatiblePlugins = FALSE, $objectClassesToUse = array())
+ {
+ // Read objectClasses from ldap
+ if(count($objectClassesToUse)){
+ $this->setObjectClasses($objectClassesToUse);
+ }elseif(!count($this->objectClasses)){
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $this->setObjectClasses($ldap->get_objectclasses());
+ }
+
+ return($this->_validateSchemata($force, $disableIncompatiblePlugins));
+ }
+
+
+ /*! \brief Sets the list object classes to use while validation the schema. (See 'validateSchemata')
+ * This is called from the GOsa-Setup
+ * @param Array The list of object classes (usually LDAP::get_objectlclasses()).
+ * @return void
+ */
+ function setObjectClasses($ocs)
+ {
+ $this->objectClasses = $ocs;
+ }
+
+
+ /*! \brief Returns an array which contains all unresolved schemata requirements.
+ * @return Array An array containing all errors/issues
+ */
+ function getSchemaResults()
+ {
+ return($this->detectedSchemaIssues);
+ }
+
+
+ /*! \brief This method checks if the installed ldap-schemata matches the plugin requirements.
+ * @param Boolean 'force' Force a re-check.
+ * @param Boolean 'disableIncompatiblePlugins' Disables of incompatible GOsa-plugins.
+ * @return String
+ */
+ private function _validateSchemata($force = FALSE, $disableIncompatiblePlugins = FALSE)
{
- // We can check the schemata only with a valid LDAP connection
- if(empty($this->config->current['CONFIG'])){
+ // We cannot check without readable schema info
+ if(!count($this->objectClasses)){
return(TRUE);
}
@@ -74,19 +139,35 @@ class configRegistry{
// Clear last results
$this->pluginsDeactivated = array();
- // Read objectClasses from ldap
- if(!count($this->objectClasses)){
- $ldap = $this->config->get_ldap_link();
- $ldap->cd($this->config->current['BASE']);
- $this->objectClasses = $ldap->get_objectclasses();
- }
-
// Collect required schema infos
$this->pluginRequirements = array('ldapSchema' => array());
$this->categoryToClass = array();
+
+ // Walk through plugins with requirements, but only check for active plugins.
foreach($this->classesWithInfo as $cname => $defs){
if(isset($defs['plRequirements'])){
- $this->pluginRequirements[$cname] = $defs['plRequirements'];
+
+ // Check only if required plugin is enabled in gosa.conf
+ // Normally this is the class name itself, but may be overridden
+ // in plInfo using the plRequirements::activePlugin statement.
+ $requiresActivePlugin = $cname;
+ if(isset($defs['plRequirements']['activePlugin'])){
+ $requiresActivePlugin = $defs['plRequirements']['activePlugin'];
+ }
+
+ // Only queue checks for active plugins.
+ if(isset($this->activePlugins[strtolower($requiresActivePlugin)])){
+ $this->pluginRequirements[$cname] = $defs['plRequirements'];
+ }else{
+ if($cname == $requiresActivePlugin){
+ new log("debug","","Skipped schema check for '{$cname}' plugin is inactive!",
+ array(),'');
+ }else{
+ new log("debug","","Skipped schema check for class '{$cname}' skipped,".
+ " required plugin '{$requiresActivePlugin}' is inactive!",
+ array(),'');
+ }
+ }
}
}
@@ -98,19 +179,28 @@ class configRegistry{
if(isset($requirements['ldapSchema'])){
foreach($requirements['ldapSchema'] as $oc => $version){
if(!$this->ocAvailable($oc)){
- $this->detectedSchemaIssues['missing'][] = $oc;
+ $this->detectedSchemaIssues['missing'][$oc] = $oc;
+
$this->schemaCheckFailed = TRUE;
$failure = TRUE;
+
+ new log("debug","","LDAP objectClass missing '{$oc}'!",
+ array(),'');
+
}elseif(!empty($version)){
$currentVersion = $this->getObjectClassVersion($oc);
if(!empty($currentVersion) && !$this->ocVersionMatch($version, $currentVersion)){
if($currentVersion == -1){
$currentVersion = _("unknown");
}
- $this->detectedSchemaIssues['versionMismatch'][] =
- sprintf(_("%s has version %s but %s required!"), bold($oc),bold($currentVersion),bold($version));
+ $this->detectedSchemaIssues['versionMismatch'][$oc] =
+ sprintf(_("%s has version %s but %s is required!"), bold($oc),bold($currentVersion),bold($version));
$this->schemaCheckFailed = TRUE;
$failure = TRUE;
+
+ new log("debug","","LDAP objectClass version mismatch '{$oc}' ".
+ "has '{$currentVersion}' but {$version} required!",
+ array(),'');
}
}
}
@@ -129,40 +219,49 @@ class configRegistry{
}
+ /*! \brief The function 'validateSchemata' may has disabled some GOsa-Plugins,
+ * the list of disabled plugins will be returned here.
+ * @return Array The list of plugins disabled by 'validateSchemata'
+ */
function getDisabledPlugins()
{
return($this->pluginsDeactivated);
}
- function displayErrors()
+ /*! \brief Displays an error message with all issues detect during the schema validation.
+ */
+ function displayRequirementErrors()
{
-
$message = "";
if(count($this->detectedSchemaIssues['missing'])){
$message.= "
".
- _("The following objectClasses are missing:").
+ _("The following object classes are missing:").
"