Code

Updated schema check
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 27 May 2010 15:06:08 +0000 (15:06 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Thu, 27 May 2010 15:06:08 +0000 (15:06 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@18777 594d385d-05f5-0310-b6e9-bd551577e9d8

gosa-core/setup/class_setup.inc
gosa-core/setup/class_setupStep_Schema.inc
gosa-core/setup/setup_schema.tpl

index 66068b142b6e398e4abf8b653d17455aebc41c29..6d0061d95728d423cb0444eb174be3039da4751e 100644 (file)
@@ -39,7 +39,7 @@ class setup
         $this->o_steps[$i++] = new Step_Checks();
         $this->o_steps[$i++] = new Step_License();
         $this->o_steps[$i++] = new Step_Ldap();
-#    $this->o_steps[$i++] = new Step_Schema();
+    $this->o_steps[$i++] = new Step_Schema();
         $this->o_steps[$i++] = new Step_Migrate();
         $this->o_steps[$i++] = new Step_Feedback();
         $this->o_steps[$i++] = new Step_Finish();
index c4784593f6d927503cc4bad9b4534662807c0828..fc7fd84a990e15a66d669161ec394e6161e7db84 100644 (file)
 
 class Step_Schema extends setup_step
 {
-  var $checked = array();
-  var $not_checked = array();
-  var $schema_readable  = FALSE;
-  var $attributes       = array("enable_schema_check","samba_version");
-  var $enable_schema_check = TRUE;
-  var $samba_version       = 3;
-
-  var $found_ocs = 0; 
-  function Step_Schema()
-  {
-    $this->update_strings();
-  }
-
-  
-  function update_strings()
-  {
-    $this->s_title      = _("LDAP schema check");
-    $this->s_title_long = _("LDAP schema check");
-    $this->s_info       = _("Perform test on your current LDAP schema");
-  }
-
-  
-  function execute()
-  {
-    $this->check_schema();
-    $failed_checks = 0 ; 
-    foreach($this->checked as $val) {
-      if(!$val['STATUS']){
-        $failed_checks ++;
-      }
+    var $checked = array();
+    var $not_checked = array();
+    var $b_displayCheckbutton = true;
+
+    function Step_Schema()
+    {
+        $this->update_strings();
     }
 
-    if($failed_checks == 0){
-      $this->is_completed = TRUE;
-    }else{
-      $this->is_completed = TRUE;
+
+    function update_strings()
+    {
+        $this->s_title      = _("LDAP schema check");
+        $this->s_title_long = _("LDAP schema check");
+        $this->s_info       = _("Perform test on your current LDAP schema");
     }
+
+
+    function execute()
+    {
+        // Establish ldap connection
+        $cv = $this->parent->captured_values;
+        $ldap_l = new LDAP($cv['admin'],
+                $cv['password'],
+                $cv['connection'],
+                FALSE,
+                $cv['tls']);
+
+        // Detect Schema Info
+        $ldap = new ldapMultiplexer($ldap_l);
+        $ldap->cd($cv['base']);
+        $objectclasses = $ldap->get_objectclasses();
+   
+        // Check if we can find something
+        $ldap->set_size_limit(1);
+        $res = $ldap->search("(objectClass=*)");  
+        $ldap->set_size_limit(0);
     
-    /* Check if the database is already initialised.
-     * If the root object is missing we can't read any schema informations.
-     * In this case we should display a message.
-     */
-    $cv = $this->parent->captured_values;
-
-    /* Establish ldap connection */
-    $ldap_l = new LDAP($cv['admin'],
-        $cv['password'],
-        $cv['connection'],
-        FALSE,
-        $cv['tls']);
-
-    $ldap = new ldapMultiplexer($ldap_l);
-
-    /* Check if root object exists */
-    $ldap->cd($cv['base']);
-    $ldap->set_size_limit(1);
-    $res = $ldap->search("(objectClass=*)");
-    $ldap->set_size_limit(0);
-
-    $smarty = get_smarty();
-    $smarty->assign("bool",array(FALSE => _("No"), TRUE => _("Yes")));
-    $smarty->assign("database_initialised", ($res == TRUE));
-    $smarty->assign("found_ocs", $this->found_ocs);
-    $smarty->assign("schema_readable",$this->schema_readable);
-    $smarty->assign("enable_schema_check",$this->enable_schema_check);
-    $smarty->assign("checks",$this->checked);
-    $smarty->assign("not_checked",$this->not_checked);
-    $smarty->assign("failed_checks",$failed_checks);
-    return($smarty -> fetch (get_template_path("../setup/setup_schema.tpl")));
-  }
-
-  function save_object()
-  {
-    if(isset($_POST['step7_posted'])){
-
-      /* Get attributes */
-      foreach($this->attributes as $attr){
-        if(isset($_POST[$attr])){
-          $this->$attr = validate($_POST[$attr]);
+        // Validate schema
+        $cR = new configRegistry(NULL);;
+        $cR->setObjectClasses($objectclasses);
+        $cR->_validateSchemata(TRUE,TRUE);
+        $info = $cR->getSchemaResults();
+        $disabled = $cR->getDisabledPlugins();
+
+        // Check if the 'AT LEAST' required classes are available.  
+        $smarty = get_smarty();
+        $smarty->assign('message', "");
+        $smarty->assign('database_initialised', ($res==TRUE));
+        $smarty->assign('ocCount', count($objectclasses));
+
+        // We are fine here once we got object classes. 
+        $this->is_completed = count($objectclasses);
+
+        // Now check if the core requirements are fulfilled.
+        if(in_array('core', $disabled)){
+            $message = "";
+            $this->is_completed = FALSE;
+            $coreDefs = core::plInfo();
+            $coreRequired = $coreDefs['plRequirements']['ldapSchema'];
+            $missing = $version = array();
+            foreach($coreRequired as $oc => $requirement){
+                if(isset($info['missing'][$oc])){
+                    $missing[$oc] = $info['missing'][$oc];
+                }
+                if(isset($info['versionMismatch'][$oc])){
+                    $version[$oc] = $info['versionMismatch'][$oc];
+                }
+            }
+
+            $message .= "<hr>";
+            if(count($missing)){
+                $message.= _("The following object classes are missing:").msgPool::buildList(array_values($missing));
+            }
+            if(count($version)){
+                $message.= _("The following object classes are outdated:").msgPool::buildList(array_values($version));
+            }
+            $smarty->assign('message', $message);
         }
-      }
-    }
-  }
-
-  function check_schema()
-  {
-    $cfg = $this->parent->captured_values;
-
-    /* Get objectclasses */
-    $ldap = new LDAP($cfg['admin'],$cfg['password'],$cfg['connection'] ,FALSE,$cfg['tls']);
-    $objectclasses = $ldap->get_objectclasses(TRUE);
-    $this->found_ocs = count($objectclasses);
-    $rfc2307bis = $cfg['rfc2307bis'];
-    $this->checked = check_schema($cfg,$rfc2307bis);
-
-    /* Which samba version do we use? */
-    if(isset($objectclasses['sambaSamAccount'])){
-      $this->samba_version = 3;
-    } elseif(isset($objectclasses['sambaAccount'])) {
-      $this->samba_version = 2;
-    }else{
-      $this->samba_version = 0;
+        $smarty->assign('checkFailed', !$this->is_completed);
+        return($smarty->fetch (get_template_path("../setup/setup_schema.tpl")));
     }
-  }
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
index 8a2f6995274e6be6425cecb6766f96d44faf0498..b9fdbb7c6a915dd010c0a127d13ab799502fb0f8 100644 (file)
@@ -1,52 +1,22 @@
-<div class='default'>
-    <p>
-     <b>{t}Schema specific settings{/t}</b>
-    </p>
-    <div class='step4_container'>
-        <div class='step4_name' style='width:30%'>
-            {t}Enable schema validation when logging in{/t}
-        </div>
-        <div class='step4_value'>
-                       <select name='enable_schema_check' size=1>
-                               {html_options options=$bool selected=$enable_schema_check}
-            </select>
-        </div>
-    </div>
-    <p>
-     <b>{t}Check status{/t}</b>
-    </p>
-       <div>
-               {if $failed_checks == 0}
-                       <font style="color:green">{t}Schema check succeeded{/t}</font>
-               {else}
-                       <img src='images/small_warning.png' class='center'>
-                               <font style="color:red">{t}Schema check failed{/t}</font>
+<h3>{t}Schema specific settings{/t}</h3>
 
+{if !$checkFailed}
+ <font style="color:green">{t}Schema check succeeded{/t}</font>
+{else}
+ <img alt='' src='images/small_warning.png' class='center'>
+ <font style="color:red">{t}Schema check failed{/t}</font>
+
+ {if $ocCount == 0}
+  <p>
+   {t}Could not read any schema informations, all checks skipped. Adjust your ldap acls.{/t}
+   {if !$database_initialised}
+    {t}It seems that your ldap database wasn't initialized yet. This maybe the reason, why GOsa can't read your schema configuration!{/t}
+   {/if}
+  </p>
+ {else}
+  {$message}
+ {/if}
+{/if}
 
-               {/if}
-       </div>
-       <div style="margin-left:20px;">
 
-               {if $found_ocs == 0}
-                       <b>{t}Could not read any schema informations, all checks skipped. Adjust your ldap acls.{/t}</b>
-                       <br>
-                       {if !$database_initialised}
-                       <br>
-                               {t}It seems that your ldap database wasn't initialized yet. This maybe the reason, why GOsa can't read your schema configuration!{/t}
-                       {/if}
-               {else}
-                       {foreach from=$checks item=val key=key}
-                                       {if !$checks[$key].STATUS}
-                                       <br>
-                                               {if $checks[$key].IS_MUST_HAVE}
-                                                       <font color='red'>{$checks[$key].MSG}</font>
-                                               {else}
-                                                       {$checks[$key].MSG}
-                                               {/if}
-                                       <br>
-                                       {/if}
-                       {/foreach}
-               {/if}
-       </div>
-</div>
 <input type='hidden' value='1' name='step7_posted'>