ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilErrorHandling.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 
15 include_once 'PEAR.php';
16 
17 class ilErrorHandling extends PEAR
18 {
25 
31  var $FATAL;
32 
38  var $WARNING;
39 
45  var $MESSAGE;
46 
51  function ilErrorHandling()
52  {
53  $this->PEAR();
54 
55  // init vars
56  $this->DEBUG_ENV = true;
57  $this->FATAL = 1;
58  $this->WARNING = 2;
59  $this->MESSAGE = 3;
60 
61  $this->error_obj = false;
62  }
63 
64  function getLastError()
65  {
66  return $this->error_obj;
67  }
68 
74  function errorHandler($a_error_obj)
75  {
76  global $log;
77 
78  $this->error_obj =& $a_error_obj;
79 //echo "-".$_SESSION["referer"]."-";
80  if ($_SESSION["failure"] && substr($a_error_obj->getMessage(), 0, 22) != "Cannot find this block")
81  {
82  $m = "Fatal Error: Called raise error two times.<br>".
83  "First error: ".$_SESSION["failure"].'<br>'.
84  "Last Error:". $a_error_obj->getMessage();
85  //return;
86  $log->logError($a_error_obj->getCode(), $m);
87  unset($_SESSION["failure"]);
88  die ($m);
89  }
90 
91  if (substr($a_error_obj->getMessage(), 0, 22) == "Cannot find this block")
92  {
93  if (DEVMODE == 1)
94  {
95  echo "<b>DEVMODE</b><br><br>";
96  echo "<b>Template Block not found.</b><br>";
97  echo "You used a template block in your code that is not available.<br>";
98  echo "Native Messge: <b>".$a_error_obj->getMessage()."</b><br>";
99  if (is_array($a_error_obj->backtrace))
100  {
101  echo "Backtrace:<br>";
102  foreach ($a_error_obj->backtrace as $b)
103  {
104  if ($b["function"] == "setCurrentBlock" &&
105  basename($b["file"]) != "class.ilTemplate.php")
106  {
107  echo "<b>";
108  }
109  echo "File: ".$b["file"].", ";
110  echo "Line: ".$b["line"].", ";
111  echo $b["function"]."()<br>";
112  if ($b["function"] == "setCurrentBlock" &&
113  basename($b["file"]) != "class.ilTemplate.php")
114  {
115  echo "</b>";
116  }
117  }
118  }
119  exit;
120  }
121  return;
122  }
123 
124  if (is_object($log) and $log->enabled == true)
125  {
126  $log->logError($a_error_obj->getCode(),$a_error_obj->getMessage());
127  }
128 
129 //echo $a_error_obj->getCode().":"; exit;
130  if ($a_error_obj->getCode() == $this->FATAL)
131  {
132  trigger_error(stripslashes($a_error_obj->getMessage()), E_USER_ERROR);
133  exit();
134  }
135 
136  if ($a_error_obj->getCode() == $this->WARNING)
137  {
138  if ($this->DEBUG_ENV)
139  {
140  $message = $a_error_obj->getMessage();
141  }
142  else
143  {
144  $message = "Under Construction";
145  }
146 
147  $_SESSION["failure"] = $message;
148 
149  if (!defined("ILIAS_MODULE"))
150  {
151  ilUtil::redirect("error.php");
152  }
153  else
154  {
155  ilUtil::redirect("../error.php");
156  }
157  }
158 
159  if ($a_error_obj->getCode() == $this->MESSAGE)
160  {
161  $_SESSION["failure"] = $a_error_obj->getMessage();
162  // save post vars to session in case of error
163  $_SESSION["error_post_vars"] = $_POST;
164 
165  if (empty($_SESSION["referer"]))
166  {
167  $dirname = dirname($_SERVER["PHP_SELF"]);
168  $ilurl = parse_url(ILIAS_HTTP_PATH);
169  $subdir = substr(strstr($dirname,$ilurl["path"]),strlen($ilurl["path"]));
170  $updir = "";
171 
172  if ($subdir)
173  {
174  $num_subdirs = substr_count($subdir,"/");
175 
176  for ($i=1;$i<=$num_subdirs;$i++)
177  {
178  $updir .= "../";
179  }
180  }
181  ilUtil::redirect($updir."index.php");
182  }
183 
184  // check if already GET-Parameters exists in Referer-URI
185  if (substr($_SESSION["referer"],-4) == ".php")
186  {
187  $glue = "?";
188  }
189  else
190  {
191  $glue = "&";
192  }
193  ilUtil::redirect($_SESSION["referer"].$glue);
194  }
195  }
196 
197  function getMessage()
198  {
199  return $this->message;
200  }
201  function setMessage($a_message)
202  {
203  $this->message = $a_message;
204  }
205  function appendMessage($a_message)
206  {
207  if($this->getMessage())
208  {
209  $this->message .= "<br /> ";
210  }
211  $this->message .= $a_message;
212  }
213 
223  public static function _ilErrorWriter($errno, $errstr, $errfile, $errline)
224  {
225  global $ilLog;
226 
227  switch($errno)
228  {
229  case E_USER_ERROR:
230  $ilLog->write('PHP errror: '.$errstr.'. FATAL error on line '.$errline.' in file '.$errfile);
231  unset($ilLog);
232  exit(1);
233 
234  case E_USER_WARNING:
235  $ilLog->write('PHP warning: ['.$errno.'] '.$errstr.' on line '.$errline.' in file '.$errfile);
236  break;
237 
238  }
239  return true;
240  }
241 
242 } // END class.ilErrorHandling
243 ?>