Code

Updated gosaDaemon class.
[gosa.git] / gosa-core / include / functions.inc
index 07ce7ded7eb41ea0baad61a2101382f4bb3df1e5..e0561c2bbfc0056c56635bd57d1a249c78b25750 100644 (file)
@@ -55,7 +55,6 @@ $svn_revision = '$Revision$';
 /* Include required files */
 require_once("class_location.inc");
 require_once ("functions_debug.inc");
-require_once ("functions_dns.inc");
 require_once ("accept-to-gettext.inc");
 
 /* Define constants for debugging */
@@ -94,14 +93,46 @@ $REWRITE= array( "รค" => "ae",
 /* Class autoloader */
 function __autoload($class_name) {
     global $class_mapping, $BASE_DIR;
+
+    if ($class_mapping === NULL){
+           echo sprintf(_("Fatal error: no class locations defined - please run '%s' to fix this"), "<b>update-gosa</b>");
+           exit;
+    }
+
     if (isset($class_mapping[$class_name])){
       require_once($BASE_DIR."/".$class_mapping[$class_name]);
     } else {
-      echo _("Fatal: cannot load class \"$class_name\" - execution aborted");
+      echo sprintf(_("Fatal error: cannot instantiate class '%s' - try running '%s' to fix this"), $class_name, "<b>update-gosa</b>");
+      print_a(debug_backtrace());
+      exit;
     }
 }
 
 
+/*! \brief Checks if a class is available. 
+ *  @param  name String  The class name.
+ *  @return boolean      True if class is available, else false.
+ */
+function class_available($name)
+{
+  global $class_mapping;
+  return(isset($class_mapping[$name]));
+}
+
+
+/* Check if plugin is avaliable */
+function plugin_available($plugin)
+{
+       global $class_mapping, $BASE_DIR;
+
+       if (!isset($class_mapping[$plugin])){
+               return false;
+       } else {
+               return is_readable($BASE_DIR."/".$class_mapping[$plugin]);
+       }
+}
+
+
 /* Create seed with microseconds */
 function make_seed() {
   list($usec, $sec) = explode(' ', microtime());
@@ -726,7 +757,6 @@ function get_multiple_locks($objects)
  */
 function get_sub_list($filter, $category,$sub_base, $base= "", $attributes= array(), $flags= GL_SUBSEARCH)
 {
-
   global $config, $ui;
 
   /* Get LDAP link */
@@ -742,8 +772,12 @@ function get_sub_list($filter, $category,$sub_base, $base= "", $attributes= arra
   /* Remove , ("ou=1,ou=2.." => "ou=1") */
   $sub_base = preg_replace("/,.*$/","",$sub_base);
 
-  /* Check if there is a sub department specified */
-  if($sub_base == ""){
+  /* Check if we have enabled the sub_dir search support AND 
+   *  if there is a sub department specified.
+   * If not, fall back to old method, get_list().
+   */
+  $sub_enabled = isset($config->current['SUB_LIST_SUPPORT']) && preg_match("/true/i",$config->current['SUB_LIST_SUPPORT']);
+  if($sub_base == "" || !$sub_enabled){
     return(get_list($filter, $category,$base,$attributes,$flags));
   }
 
@@ -1017,7 +1051,9 @@ function get_ou($name)
 {
   global $config;
 
-  $map = array( "applicationou" => "ou=apps,",
+  $map = array( 
+                "ogroupou"      => "ou=groups,",
+                "applicationou" => "ou=apps,",
                 "systemsou"     => "ou=systems,",
                 "serverou"      => "ou=servers,ou=systems,",
                 "terminalou"    => "ou=terminals,ou=systems,",
@@ -1273,7 +1309,7 @@ function show_ldap_error($message, $addon= "")
       msg_dialog::display(_("LDAP error:"), $message, ERROR_DIALOG);
     } else {
       if(!preg_match("/No such object/i",$message)){
-        msg_dialog::display(sprintf(_("LDAP error in plugin '%s':"),"<i>".$addon."</i>"),$message,ERROR_DIALOG);
+        msg_dialog::display(_("LDAP error"), sprintf(_("Plugin '%s':%s"),"<i>".$addon."</i>", "<br><br>$message"),ERROR_DIALOG);
       }
     }
     return TRUE;
@@ -2554,11 +2590,66 @@ function getEntryCSN($dn)
 }
 
 
-function display_error_page()
+/* Add a given objectClass to an attrs entry */
+function add_objectClass($classes, &$attrs)
 {
-  $smarty= get_smarty();
-  $smarty->display(get_template_path('headers.tpl'));
-  echo "<body>".msg_dialog::get_dialogs()."</body></html>";
+  if (is_array($classes)){
+    $list= $classes;
+  } else {
+    $list= array($classes);
+  }
+
+  foreach ($list as $class){
+    $attrs['objectClass'][]= $class;
+  }
+}
+
+
+/* Removes a given objectClass from the attrs entry */
+function remove_objectClass($classes, &$attrs)
+{
+  if (isset($attrs['objectClass'])){
+    /* Array? */
+    if (is_array($classes)){
+      $list= $classes;
+    } else {
+      $list= array($classes);
+    }
+
+    $tmp= array();
+    foreach ($attrs['objectClass'] as $oc) {
+      foreach ($list as $class){
+        if ($oc != $class){
+          $tmp[]= $oc;
+        }
+      }
+    }
+    $attrs['objectClass']= $tmp;
+  }
+}
+
+/*! \brief  Initialize a file download with given content, name and data type. 
+ *  @param  data  String The content to send.
+ *  @param  name  String The name of the file.
+ *  @param  type  String The content identifier, default value is "application/octet-stream";
+ */
+function send_binary_content($data,$name,$type = "application/octet-stream")
+{
+  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+  header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+  header("Cache-Control: no-cache");
+  header("Pragma: no-cache");
+  header("Cache-Control: post-check=0, pre-check=0");
+  header("Content-type: ".$type."");
+
+  /* force download dialog */
+  if (preg_match('/MSIE 5.5/', $HTTP_USER_AGENT) || preg_match('/MSIE 6.0/', $HTTP_USER_AGENT)) {
+    header('Content-Disposition: filename="'.$name.'"');
+  } else {
+    header('Content-Disposition: attachment; filename="'.$name.'"');
+  }
+
+  echo $data;
   exit();
 }