diff --git a/include/functions.inc b/include/functions.inc
index 44bf12927aa04ded1cffe45c0d0deaba4e1c3ce3..db9cacaf2ac81a75c54745ef6326c8b3b5fd12b2 100644 (file)
--- a/include/functions.inc
+++ b/include/functions.inc
/* 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");
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);
{
global $config, $BASE_DIR;
- if (!isset($config->data['MAIN']['THEME'])){
+ if (!@isset($config->data['MAIN']['THEME'])){
$theme= 'default';
} else {
$theme= $config->data['MAIN']['THEME'];
/* user not found */
case 0: return (NULL);
- break;
/* valid uniq user */
case 1:
if (isset($_SESSION['DEBUGLEVEL'])){
$_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 alt=\"\" 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\">".
"<b style='font-size:16px;'>$string</b></font></td><td>".
/* CUPS is not available, try lpstat as a replacement */
} else {
- unset ($ar);
+ $ar = false;
exec("lpstat -p", $ar);
foreach($ar as $val){
list($dummy, $printer, $rest)= split(' ', $val, 3);
$apply= "";
$apply= ''.
- '<table width="100%" style="border-top:1px solid #B0B0B0;"><tr><td width="100%" align="right">'.
+ '<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);
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);
}
}
-function gosaRaiseError($errno, $errstr, $errfile, $errline)
-{
- global $error_collector;
- /* Workaround for buggy imap_open error outputs */
- 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 error message flooding. The new OOM
- code want's us to use public/protected/private instead of flat
- var declarations. For now I can't workaround this - let's ignore
- the messages till the next major release which may drop support
- for PHP4. */
- if (preg_match('/var: Deprecated./', $errstr)){
- return;
- }
+function scan_directory($path,$sort_desc=false)
+{
+$ret = false;
- /* FIXME: Same as above. Compatibility does error flooding.*/
- if (preg_match('/zend.ze1_compatibility_mode/', $errstr)){
- return;
+/* 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);
- /* FIXME: Hide ldap size limit messages */
- if (preg_match('/ldap_error/', $errstr)){
- if (preg_match('/sizelimit/', $errstr)){
- return;
+ /* 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 width=\"100%\" style='background-color:#E0E0E0;border-bottom:1px solid black'><tr><td><img alt=\"\" align=\"middle\" src='".get_template_path('images/warning.png')."'> <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\", ");
- }
- $args= preg_replace("/, $/", "", $args);
- if ($args == ""){
- $args= "-";
+ print_red("Can not open revision file");
}
- $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;\">
- /* Write to syslog */
- gosa_log ("PHP error: $errstr ($errfile, line $errline)");
+ <div style=\" width:".($width)."px;
+ background-color:#$bgcolor;
+height:".($height)."px;\">
+
+ <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 dummy_error_handler()
+
+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:
?>