diff --git a/gosa-core/setup/class_setupStep_Schema.inc b/gosa-core/setup/class_setupStep_Schema.inc
index 4f795ea3f41f2c7fda382398e15d7297ff910741..6353908c33d269ab427ac7c133b0a5d296d3e514 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->validateSchemata(TRUE,TRUE,$objectclasses);
+ $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;
- $rfc2307bis = $cfg['rfc2307bis'];
- $this->checked = check_schema($cfg,$rfc2307bis);
-
- /* Get objectclasses */
- $ldap = new LDAP($cfg['admin'],$cfg['password'],$cfg['connection'] ,FALSE,$cfg['tls']);
- $objectclasses = $ldap->get_objectclasses();
- $this->found_ocs = count($objectclasses);
-
- /* 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: