Code

Addressbook clean
[gosa.git] / include / functions.inc
index badb7d9a5b1a46e07b04f61229fb035564c6aaad..ed1364b9816bc06e46aef2bc4d3153925d42c1ed 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  * This code is part of GOsa (https://gosa.gonicus.de)
- * Copyright (C) 2003-2005 Cajus Pollmeier
+ * Copyright (C) 2003 Cajus Pollmeier
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 /* Configuration file location */
 define ("CONFIG_DIR", "/etc/gosa");
 define ("CONFIG_TEMPLATE_DIR", "../contrib/");
+define ("HELP_BASEDIR", "/home/cajus/");
+
+/* Define globals for revision comparing */
+$svn_path = '$HeadURL$';
+$svn_revision = '$Revision$';
 
 /* Include required files */
 require_once ("class_ldap.inc");
@@ -31,7 +36,7 @@ require_once ("class_pluglist.inc");
 require_once ("class_tabs.inc");
 require_once ("class_mail-methods.inc");
 require_once("class_password-methods.inc");
-require_once ("debuglib.inc");
+require_once ("functions_debug.inc");
 
 /* Define constants for debugging */
 define ("DEBUG_TRACE",   1);
@@ -251,7 +256,7 @@ function gosa_log ($message)
     }
   }
 
-  syslog(LOG_WARNING,"GOsa$username: $message");
+  syslog(LOG_INFO,"GOsa$username: $message");
 }
 
 
@@ -889,13 +894,13 @@ function print_red()
   /* If DEBUGLEVEL is set, we're in web mode, use textual output in
      the other case... */
   if (isset($_SESSION['DEBUGLEVEL'])){
-    $_SESSION['errors'].= "<div align=center style=\"border-width:5px;".
+    $_SESSION['errors'].= "<div align=\"left\" style=\"border-width:5px;".
       "border-style:solid;border-color:red; background-color:black;".
-      "margin-bottom:10px; padding:8px;\"><table><tr><td><img src=\"".
+      "margin-bottom:10px; padding:8px;\"><table summary=''><tr><td><img alt=\"\" src=\"".
       get_template_path('images/warning.png')."\"></td>".
-      "<td width=100% align=center><font color=#FFFFFF>".
+      "<td width=\"100%\" align=\"center\"><font color=\"#FFFFFF\">".
       "<b style='font-size:16px;'>$string</b></font></td><td>".
-      "<img src=\"".get_template_path('images/warning.png').
+      "<img alt=\"\"src=\"".get_template_path('images/warning.png').
       "\"></td></tr></table></div>\n";
   } else {
     echo "Error: $string\n";
@@ -916,7 +921,7 @@ function gen_locked_message($user, $dn)
   /* Prepare and show template */
   $smarty= get_smarty();
   $smarty->assign ("dn", $dn);
-  $smarty->assign ("message", sprintf(_("You're going to edit the LDAP entry '%s' which appears to be used by '%s'. Please contact the person in order to clarify proceedings."), $dn, "<a href=main.php?plug=0&viewid=$uid>$uid</a>"));
+  $smarty->assign ("message", sprintf(_("You're going to edit the LDAP entry '%s' which appears to be used by '%s'. Please contact the person in order to clarify proceedings."), $dn, "<a href=\"main.php?plug=0&amp;viewid=$uid\">$uid</a>"));
 
   return ($smarty->fetch (get_template_path('islocked.tpl')));
 }
@@ -1153,28 +1158,28 @@ function range_selector($dcnt,$start,$range=25)
 
   /* Draw decrement */
   if ($start > 0 ) {
-    $output.="  <a href= \"main.php?plug=".validate($_GET['plug'])."&start=".
+    $output.="  <a href= \"main.php?plug=".validate($_GET['plug'])."&amp;start=".
       (($start-$range))."\">".
-      "<img src=\"images/back.png\" border=0 align=\"center\"></a>";
+      "<img alt=\"\" src=\"images/back.png\" border=0 align=\"middle\"></a>";
   }
 
   /* Draw pages */
   for ($i= $begin; $i < $end; $i++) {
     if ($ppage == $i){
       $output.= "<a style=\"background-color:#D0D0D0;\" href=\"main.php?plug=".
-        validate($_GET['plug'])."&start=".
+        validate($_GET['plug'])."&amp;start=".
         ($i*$range)."\">&nbsp;".($i+1)."&nbsp;</a>";
     } else {
       $output.= "<a href=\"main.php?plug=".validate($_GET['plug']).
-        "&start=".($i*$range)."\">&nbsp;".($i+1)."&nbsp;</a>";
+        "&amp;start=".($i*$range)."\">&nbsp;".($i+1)."&nbsp;</a>";
     }
   }
 
   /* Draw increment */
   if($start < ($dcnt-$range)) {
-    $output.="  <a href= \"main.php?plug=".validate($_GET['plug'])."&start=".
+    $output.="  <a href= \"main.php?plug=".validate($_GET['plug'])."&amp;start=".
       (($start+($range)))."\">".
-      "<img src=\"images/forward.png\" border=0 align=\"center\"></a>";
+      "<img alt=\"\" src=\"images/forward.png\" border=0 align=\"middle\"></a>";
   }
 
   return($output);
@@ -1185,9 +1190,9 @@ function apply_filter()
 {
   $apply= "";
 
-  $apply= '<p class="contentboxb" style="border-top:1px solid #B0B0B0">'.
-    '<table width="100%"><tr><td width="100%" align="right">'.
-    '<input type="submit" name="apply" value="'._("Apply").'"></td></tr></table></p>';
+  $apply= ''.
+    '<table summary=""  width="100%"  style="background:#EEEEEE;border-top:1px solid #B0B0B0;"><tr><td width="100%" align="right">'.
+    '<input type="submit" name="apply" value="'._("Apply").'"></td></tr></table>';
 
   return ($apply);
 }
@@ -1445,6 +1450,10 @@ function to_byte($value) {
 
 function in_array_ics($value, $items)
 {
+  if (!is_array($items)){
+    return (FALSE);
+  }
+  
   foreach ($items as $item){
     if (strtolower($item) == strtolower($value)) {
       return (TRUE);
@@ -1493,9 +1502,7 @@ function validate($string)
 
 function get_gosa_version()
 {
-  /* Variables filled in by subversion */
-  $svn_path = '$HeadURL$';
-  $svn_revision = '$Revision$';
+  global $svn_revision, $svn_path;
 
   /* Extract informations */
   $revision= preg_replace('/^[^0-9]*([0-9]+)[^0-9]*$/', '\1', $svn_revision);
@@ -1509,83 +1516,200 @@ function get_gosa_version()
   }
 }
 
-function gosaRaiseError($errno, $errstr, $errfile, $errline)
-{
-  global $error_collector;
 
-  /* FIXME: workaround for buggy imap_open */
-  if (preg_match('/imap_open/', $errstr)){
-    return;
+function rmdirRecursive($path, $followLinks=false) {
+  $dir= opendir($path);
+  while($entry= readdir($dir)) {
+    if(is_file($path."/".$entry) || ((!$followLinks) && is_link($path."/".$entry))) {
+      unlink($path."/".$entry);
+    } elseif (is_dir($path."/".$entry) && $entry!='.' && $entry!='..') {
+      rmdirRecursive($path."/".$entry);
+    }
   }
+  closedir($dir);
+  return rmdir($path);
+}
 
-  /* FIXME: workaround for PHP5 */
-  if (preg_match('/var: Deprecated./', $errstr)){
-    return;
+function scan_directory($path,$sort_desc=false)
+{
+$ret = false;
+
+/* is this a dir ? */
+if(is_dir($path)) {
+  
+  /* is this path a readable one */
+  if(is_readable($path)){
+    
+    /* Get contents and write it into an array */   
+    $ret = array();    
+  
+    $dir = opendir($path);
+    
+    /* Is this a correct result ?*/
+    if($dir){
+      while($fp = readdir($dir))
+        $ret[]= $fp;
+      }
+    }
   }
+  /* Sort array ascending , like scandir */
+  sort($ret);
+
+  /* Sort descending if parameter is sort_desc is set */
+  if($sort_desc) {
+    $ret = array_reverse($ret);
+    }
 
-  /* Create header as needed */
-  if ($error_collector == ""){
-    if ($_SESSION['js']==FALSE){
-      $error_collector= "<div>";
+  return($ret);
+}
+
+function clean_smarty_compile_dir($directory)
+{
+  global $svn_revision;
+
+  if(is_dir($directory) && is_readable($directory)) {
+    // Set revision filename to REVISION
+    $revision_file= $directory."/REVISION";
+
+    /* Is there a stamp containing the current revision? */
+    if(!file_exists($revision_file)) {
+      // create revision file
+      create_revision($revision_file, $svn_revision);
     } else {
-      $error_collector= "<table style='width:100%;background-color:#E0E0E0;border-bottom:1px solid black'><tr><td><img align=center src='".get_template_path('images/warning.png')."'>&nbsp;<font style='font-size:14px;font-weight:bold'>"._("Generating this page caused the PHP interpreter to raise some errors!")."</font></td><td align=right><button onClick='toggle(\"errorbox\")'>"._("Toggle information")."</button></td></tr></table><div id='errorbox' style='position:absolute; z-index:0; visibility: hidden'>";
+      # check for "$config->...['CONFIG']/revision" and the
+      # contents should match the revision number
+      if(!compare_revision($revision_file, $svn_revision)){
+        // If revision differs, clean compile directory
+        foreach(scan_directory($directory) as $file) {
+          if( is_file($directory."/".$file) &&
+              is_writable($directory."/".$file)) {
+              // delete file
+              if(!unlink($directory."/".$file)) {
+                print_red("File ".$directory."/".$file." could not be deleted.");
+                // This should never be reached
+              }
+          } elseif(is_dir($directory."/".$file) &&
+                    is_writable($directory."/".$file)) {
+                    // Just recursively delete it
+             rmdirRecursive($directory."/".$file);
+          }
+        }
+        // We should now create a fresh revision file
+        clean_smarty_compile_dir($directory);
+      } else {
+        // Revision matches, nothing to do
+      }
     }
+  } else {
+    // Smarty compile dir is not accessible
+    // (Smarty will warn about this)
   }
-  /* Extract traceback data */
-  $trace= debug_backtrace();
-  
-  /* Create error header */
-  $error_collector.= "<table width=100% cellspacing=0 style='background-color:#402005;color:white;border:2px solid red'><tr><td colspan=3><h1 style='color:white'>"._("PHP error")." \"$errstr\"</h1></td></tr>";
+}
+
+function create_revision($revision_file, $revision)
+{
+  $result= false;
   
-  /* Generate trace history */
-  for ($index= 1; $index<count($trace); $index++){
-    $ct= $trace[$index];
-    $loc= "";
-    if (isset($ct['class'])){
-      $loc.= _("class")." ".$ct['class'];
-      if (isset($ct['function'])){
-        $loc.= " / ";
+  if(is_dir(dirname($revision_file)) && is_writable(dirname($revision_file))) {
+    if($fh= fopen($revision_file, "w")) {
+      if(fwrite($fh, $revision)) {
+        $result= true;
       }
     }
-    if (isset($ct['function'])){
-      $loc.= _("function")." ".$ct['function'];
-    }
-    if (isset($ct['type'])){
-      switch ($ct['type']){
-        case "::":
-                $type= _("static");
-                break;
-
-        case "->":
-                $type= _("method");
-                break;
+    fclose($fh);
+  } else {
+    print_red("Can not write to revision file");
+  }
+
+  return $result;
+}
+
+function compare_revision($revision_file, $revision)
+{
+  // false means revision differs
+  $result= false;
+  
+  if(file_exists($revision_file) && is_readable($revision_file)) {
+    // Open file
+    if($fh= fopen($revision_file, "r")) {
+      // Compare File contents with current revision
+      if($revision == fread($fh, filesize($revision_file))) {
+        $result= true;
       }
     } else {
-      $type= "-";
-    }
-    $args= "";
-    foreach ($ct['args'] as $arg){
-      $args.= htmlentities("\"$arg\", ");
+      print_red("Can not open revision file");
     }
-    $args= preg_replace("/, $/", "", $args);
-    if ($args == ""){
-      $args= "-";
-    }
-    $file= $ct['file'];
-    $line= $ct['line'];
-    $color= ($index&1)?'#404040':'606060';
-    $error_collector.= "<tr style='background-color:$color'><td style='padding-left:20px' width=30%>"._("Trace")."[$index]: $loc</td>";
-    $error_collector.= "<td>"._("File").": $file ("._('Line')." $line)</td><td width=10%>"._("Type").": $type</td></tr>";
-    $error_collector.= "<tr style='background-color:$color'><td colspan=3 style='padding-left:20px;'>"._("Arguments").": $args</td></tr>";
+    // Close file
+    fclose($fh);
   }
 
-  /* Close error table */
-  $error_collector.= "</table>";
+  return $result;
+}
+
+function progressbar($percentage,$width=100,$height=15,$showvalue=false)
+{
+  $str = ""; // Our return value will be saved in this var
+
+  $color  = dechex($percentage+150);
+  $color2 = dechex(150 - $percentage);
+  $bgcolor= $showvalue?"FFFFFF":"DDDDDD";
+
+  $progress = (int)(($percentage /100)*$width);
+
+  /* Abort printing out percentage, if divs are to small */
+
+
+  /* If theres a better solution for this, use it... */
+  $str = "
+    <div style=\" width:".($width)."px; 
+    height:".($height)."px;
+  background-color:#000000;
+padding:1px;\">
+
+          <div style=\" width:".($width)."px;
+        background-color:#$bgcolor;
+height:".($height)."px;\">
 
-  /* Write to syslog */
-  gosa_log ("PHP error: $errstr ($errfile, line $errline)");
+         <div style=\" width:".$progress."px;
+height:".$height."px;
+       background-color:#".$color2.$color2.$color."; \">";
+
+
+       if(($height >10)&&($showvalue)){
+         $str.=                 "<font style=\"font-size:".($height-2)."px;color:#FF0000;align:middle;padding-left:".((int)(($width*0.4)))."px;\">
+           <b>".$percentage."%</b>
+           </font>";
+       }
+
+       $str.= "</div></div></div>";
+
+       return($str);
+}
+
+
+function search_config($arr, $name, $return)
+{
+  if (is_array($arr)){
+    foreach ($arr as $a){
+      if (isset($a['CLASS']) &&
+          strtolower($a['CLASS']) == strtolower($name)){
+
+        if (isset($a[$return])){
+          return ($a[$return]);
+        } else {
+          return ("");
+        }
+      } else {
+        $res= search_config ($a, $name, $return);
+        if ($res != ""){
+          return $res;
+        }
+      }
+    }
+  }
+  return ("");
 }
 
+
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>