X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_config.inc;h=17b860c58386189fc00acba33f58227ca1acbe9d;hb=652bb3908381dd238ce5bc023203ec8d67ae7bff;hp=8a87aa3f97313889b5cb5f8b6d43938fc9807431;hpb=d1f634b654ad6c8f7904f44c4a0d61c34598ac43;p=gosa.git diff --git a/gosa-core/include/class_config.inc b/gosa-core/include/class_config.inc index 8a87aa3f9..17b860c58 100644 --- a/gosa-core/include/class_config.inc +++ b/gosa-core/include/class_config.inc @@ -64,6 +64,10 @@ class config { var $filename = ""; var $last_modified = 0; + private $jsonRPChandle = NULL; + + public $configRegistry = NULL; + /*! \brief Class constructor of the config class * * \param string 'filename' path to the configuration file @@ -82,6 +86,9 @@ class config { if ($filename != ""){ $this->parse($filename); } + + // Load configuration registry + $this->configRegistry = new configRegistry($this); } @@ -150,16 +157,11 @@ class config { fclose($fh); if(!xml_parse($this->parser, chop($xmldata))){ $msg = sprintf(_("XML error in gosa.conf: %s at line %d"), - xml_error_string(xml_get_error_code($this->parser)), - xml_get_current_line_number($this->parser)); + bold(xml_error_string(xml_get_error_code($this->parser))), + bold(xml_get_current_line_number($this->parser))); msg_dialog::display(_("Configuration error"), $msg, FATAL_ERROR_DIALOG); exit; } - - // Default schemacheck to "true" - if(!isset($this->data['MAIN']['SCHEMACHECK'])){ - $this->data['MAIN']['SCHEMACHECK'] = "true"; - } } function tag_open($parser, $tag, $attrs) @@ -247,6 +249,14 @@ class config { } break; + case 'PATHMENU': + $this->data['PATHMENU']= array(); ; + break; + + case 'SHORTCUTMENU': + $this->data['SHORTCUTMENU']= array(); ; + break; + /* Inser plugins */ case 'PLUGIN': if ($this->tags[$this->level-3] == 'MENU' && @@ -254,6 +264,12 @@ class config { $this->data['MENU'][$this->section][$this->gpc++]= $attrs; } + if ($this->tags[$this->level-2] == 'PATHMENU'){ + $this->data['PATHMENU'][$this->gpc++]= $attrs; + } + if ($this->tags[$this->level-2] == 'SHORTCUTMENU'){ + $this->data['SHORTCUTMENU'][$this->gpc++]= $attrs; + } if ($this->tags[$this->level-2] == 'SERVICEMENU'){ $this->data['SERVICE'][$attrs['CLASS']]= $attrs; } @@ -288,6 +304,16 @@ class config { } + function getRpcHandle() + { + // Create jsonRPC handle on demand. + if(!$this->jsonRPChandle){ + $this->jsonRPChandle = new jsonRPC($this); + } + return($this->jsonRPChandle); + } + + /*! \brief Get a LDAP link object * * This function can be used to get an ldap object, which in turn can @@ -315,7 +341,7 @@ class config { /* Check for connection */ if (is_null($this->ldap) || (is_int($this->ldap) && $this->ldap == 0)){ $smarty= get_smarty(); - msg_dialog::display(_("LDAP error"), _("Cannot bind to LDAP. Please contact the system administrator."), FATAL_ERROR_DIALOG); + msg_dialog::display(_("LDAP error"), _("Cannot bind to LDAP!"), FATAL_ERROR_DIALOG); exit(); } @@ -327,8 +353,8 @@ class config { } if (!session::global_is_set('size_limit')){ - session::global_set('size_limit',$this->current['LDAPSIZELIMIT']); - session::global_set('size_ignore',$this->current['LDAPSIZEIGNORE']); + session::global_set('size_limit', $this->get_cfg_value('core', 'ldapSizelimit')); + session::global_set('size_ignore', $this->boolValueIsTrue('core', 'ldapSizeIgnore')); } } @@ -349,50 +375,17 @@ class config { { $this->current= $this->data['LOCATIONS'][$name]; - if (!isset($this->current['USERRDN'])){ - $this->current['USERRDN']= "ou=people"; - } - if (!isset($this->current['GROUPRDN'])){ - $this->current['GROUPS']= "ou=groups"; - } - if (isset($this->current['INITIAL_BASE'])){ session::global_set('CurrentMainBase',$this->current['INITIAL_BASE']); } - /* Remove possibly added ',' from end of group and people ou */ - $this->current['GROUPS'] = preg_replace("/,*$/","",$this->current['GROUPRDN']); - $this->current['USERRDN'] = preg_replace("/,*$/","",$this->current['USERRDN']); - - if (!isset($this->current['SAMBAMACHINEACCOUNTRDN'])){ - $this->current['SAMBAMACHINEACCOUNTRDN']= "ou=winstations,ou=systems"; - } - if (!isset($this->current['ACCOUNTPRIMARYATTRIBUTE'])){ - $this->current['ACCOUNTPRIMARYATTRIBUTE']= "cn"; - } - if (!isset($this->current['MINID'])){ - $this->current['MINID']= 100; - } - if (!isset($this->current['LDAPSIZELIMIT'])){ - $this->current['LDAPSIZELIMIT']= 200; - } - if (!isset($this->current['SIZEINGORE'])){ - $this->current['LDAPSIZEIGNORE']= TRUE; - } else { - if (preg_match("/true/i", $this->current['LDAPSIZEIGNORE'])){ - $this->current['LDAPSIZEIGNORE']= TRUE; - } else { - $this->current['LDAPSIZEIGNORE']= FALSE; - } - } - /* Sort referrals, if present */ if (isset ($this->current['REFERRAL'])){ $bases= array(); $servers= array(); foreach ($this->current['REFERRAL'] as $ref){ - $server= preg_replace('%^(.*)/[^/]+$%', '\\1', $ref['URI']); - $base= preg_replace('%^.*/([^/]+)$%', '\\1', $ref['URI']); + $server= preg_replace('%^(.*://[^/]+)/.*$%', '\\1', $ref['URI']); + $base= preg_replace('%^.*://[^/]+/(.*)$%', '\\1', $ref['URI']); $bases[$base]= strlen($base); $servers[$base]= $server; } @@ -445,11 +438,8 @@ class config { /* Search mailMethod konfiguration in main section too */ - $this->current['MAILMETHOD'] = $this->get_cfg_value("mailMethod",""); - if (!isset($this->current['MAILMETHOD'])){ - $this->current['MAILMETHOD']= ""; - } - if ($this->current['MAILMETHOD'] == ""){ + $tmp = $this->get_cfg_value("core","mailMethod"); + if ($tmp){ $ldap->search ("(objectClass=goMailServer)", array('cn')); $this->data['SERVERS']['IMAP']= array(); while ($attrs= $ldap->fetch()){ @@ -895,7 +885,7 @@ class config { */ function getShareList($listboxEntry = false) { - $tmp = get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))","server",get_ou("serverRDN"), + $tmp = get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))","server",get_ou("servgeneric", "serverRDN"), $this->current['BASE'],array("goExportEntry","cn"), GL_NONE); $return =array(); foreach($tmp as $entry){ @@ -937,7 +927,7 @@ class config { $ui = get_userinfo(); $base = $config->current['BASE']; $res= get_sub_list("(&(objectClass=goShareServer)(goExportEntry=*))", "server", - get_ou("serverRDN"), $base,array("goExportEntry","cn"),GL_NONE | GL_NO_ACL_CHECK); + get_ou("servgeneric", "serverRDN"), $base,array("goExportEntry","cn"),GL_NONE | GL_NO_ACL_CHECK); foreach($res as $entry){ @@ -961,38 +951,26 @@ class config { } - /*! \brief Check if there's the specified bool value set in the configuration + /*! \brief Checks if there's a bool property set in the configuration. * * The function checks, weither the specified bool value is set to a true - * value in the configuration file. Considered true are either true or yes, - * case-insensitive. + * value in the configuration file. * * Example usage: * \code - * if ($this->config->boolValueIsTrue("main", "copyPaste")) { + * if ($this->config->boolValueIsTrue("core", "copyPaste")) { * echo "Copy Paste Handling is enabled"; * } * \endcode * - * \param string 'section' Section in the configuration file. + * \param string 'class' The properties class. e.g. 'core','user','sudo',... * \param string 'value' Key in the given section, which is subject to check * * * */ - function boolValueIsTrue($section, $value) + function boolValueIsTrue($class, $name) { - $section= strtoupper($section); - $value= strtoupper($value); - if (isset($this->data[$section][$value])){ - - $data= $this->data[$section][$value]; - if (preg_match("/^true$/i", $data) || preg_match("/yes/i", $data)){ - return TRUE; - } - - } - - return FALSE; + return(preg_match("/true/i", $this->get_cfg_value($class,$name))); } @@ -1015,7 +993,9 @@ class config { } - /*! Search for a configuration setting in different categories + /*! Outdated - try to use pluginEnabled, boolValueIsTrue or get_cfg_value instead. + * + * (Search for a configuration setting in different categories * * Searches for the value of a given key in the configuration data. * Optionally the list of categories to search (tabs, main, locations) can @@ -1025,6 +1005,7 @@ class config { * \code * $postcmd = $this->config->search(get_class($this), "POSTCOMMAND", array("menu", "tabs")); * \endcode + * ) * * */ function search($class, $value, $categories= "") @@ -1047,6 +1028,14 @@ class config { return (""); } + + /*! \brief Check whether a plugin is activated or not + */ + function pluginEnabled($class){ + $tmp = $this->search($class, "CLASS",array('menu','tabs')); + return(!empty($tmp)); + } + /*! \brief Get a configuration value from the config * @@ -1063,20 +1052,30 @@ class config { * * */ - function get_cfg_value($name, $default= "") { - $name= strtoupper($name); + function get_cfg_value($class,$name, $default= NULL) + { + // The default parameter is deprecated + if($default != NULL){ +# trigger_error("Third parameter 'default' is deprecated for function 'get_cfg_value'!"); + } - /* Check if we have a current value for $name */ - if (isset($this->current[$name])){ - return ($this->current[$name]); + // Return the matching property value if it exists. + if($this->configRegistry->propertyExists($class,$name)){ + return($this->configRegistry->getPropertyValue($class,$name)); } - /* Check if we have a global value for $name */ - if (isset($this->data["MAIN"][$name])){ - return ($this->data["MAIN"][$name]); + // Show a warning in the syslog if there is an undefined property requested. + if($this->configRegistry->propertyInitializationComplete() && + "{$class}::{$name}" != 'core::config' && // <--- This on is never set, only in gosa.conf. + "{$class}::{$name}" != 'core::logging'){ // <--- This one may cause endless recursions in class_log.inc + new log("debug","","Unconfigured property: '{$class}::{$name}'",array(),''); } - return ($default); + // Try to find the property in the config file directly. + $name= strtoupper($name); + if (isset($this->current[$name])) return ($this->current[$name]); + if (isset($this->data["MAIN"][$name])) return ($this->data["MAIN"][$name]); + return (""); } @@ -1102,7 +1101,7 @@ class config { /* Check contributed config version and current config version. */ if(($this->config_version == "NOT SET") || ($this->config_version != $current && !empty($this->config_version))){ - msg_dialog::display(_("Configuration"),_("The configuration file you are using seems to be outdated. Please move the GOsa configuration file away to run the GOsa setup again.")); + msg_dialog::display(_("Configuration"),_("The configuration file you are using is outdated. Please move the GOsa configuration file away to run the GOsa setup again.")); } } @@ -1135,17 +1134,17 @@ class config { There will also be some errors psoted, if the configuration failed */ function snapshotEnabled() { - if($this->get_cfg_value("enableSnapshots") == "true"){ + if($this->get_cfg_value("core","enableSnapshots") == "true"){ /* Check if the snapshot_base is defined */ - if ($this->get_cfg_value("snapshotBase") == ""){ + if ($this->get_cfg_value("core","snapshotBase") == ""){ /* Send message if not done already */ if(!session::is_set("snapshotFailMessageSend")){ session::set("snapshotFailMessageSend",TRUE); msg_dialog::display(_("Configuration error"), - sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), - "snapshotBase"), ERROR_DIALOG); + sprintf(_("The snapshot functionality is enabled, but the required variable %s is not set."), + bold("snapshotBase")), ERROR_DIALOG); } return(FALSE); } @@ -1157,26 +1156,26 @@ class config { if(!session::is_set("snapshotFailMessageSend")){ session::set("snapshotFailMessageSend",TRUE); msg_dialog::display(_("Configuration error"), - sprintf(_("The snapshot functionality is enabled, but the required compression module is missing. Please install '%s'."),"php5-zip / php5-gzip"), ERROR_DIALOG); + sprintf(_("The snapshot functionality is enabled, but the required compression module is missing. Please install %s."), bold("php5-zip / php5-gzip")), ERROR_DIALOG); } return(FALSE); } /* check if there are special server configurations for snapshots */ - if ($this->get_cfg_value("snapshotURI") != ""){ + if ($this->get_cfg_value("core","snapshotURI") != ""){ /* check if all required vars are available to create a new ldap connection */ $missing = ""; foreach(array("snapshotURI","snapshotAdminDn","snapshotAdminPassword","snapshotBase") as $var){ - if($this->get_cfg_value($var) == ""){ + if($this->get_cfg_value("core",$var) == ""){ $missing .= $var." "; /* Send message if not done already */ if(!session::is_set("snapshotFailMessageSend")){ session::set("snapshotFailMessageSend",TRUE); msg_dialog::display(_("Configuration error"), - sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), - $missing), ERROR_DIALOG); + sprintf(_("The snapshot functionality is enabled, but the required variable %s is not set."), + bold($missing)), ERROR_DIALOG); } return(FALSE); }