ILIAS  eassessment Revision 61809
 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  session_unregister("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  die (stripslashes($a_error_obj->getMessage()));
133  }
134 
135  if ($a_error_obj->getCode() == $this->WARNING)
136  {
137  if ($this->DEBUG_ENV)
138  {
139  $message = $a_error_obj->getMessage();
140  }
141  else
142  {
143  $message = "Under Construction";
144  }
145 
146  $_SESSION["failure"] = $message;
147 
148  if (!defined("ILIAS_MODULE"))
149  {
150  ilUtil::redirect("error.php");
151  }
152  else
153  {
154  ilUtil::redirect("../error.php");
155  }
156  }
157 
158  if ($a_error_obj->getCode() == $this->MESSAGE)
159  {
160  $_SESSION["failure"] = $a_error_obj->getMessage();
161  // save post vars to session in case of error
162  $_SESSION["error_post_vars"] = $_POST;
163 
164  if (empty($_SESSION["referer"]))
165  {
166  $dirname = dirname($_SERVER["PHP_SELF"]);
167  $ilurl = parse_url(ILIAS_HTTP_PATH);
168  $subdir = substr(strstr($dirname,$ilurl["path"]),strlen($ilurl["path"]));
169  $updir = "";
170 
171  if ($subdir)
172  {
173  $num_subdirs = substr_count($subdir,"/");
174 
175  for ($i=1;$i<=$num_subdirs;$i++)
176  {
177  $updir .= "../";
178  }
179  }
180  ilUtil::redirect($updir."index.php");
181  }
182 
183  // check if already GET-Parameters exists in Referer-URI
184  if (substr($_SESSION["referer"],-4) == ".php")
185  {
186  $glue = "?";
187  }
188  else
189  {
190  $glue = "&";
191  }
192  /*
193  if(!$GLOBALS['ilAccess']->checkAccess('read','',$_SESSION['referer_ref_id']))
194  {
195  ilUtil::redirect('repository.php?ref_id='.ROOT_FOLDER_ID);
196  }
197  */
198  #$GLOBALS['ilLog']->logStack();
199  ilUtil::redirect($_SESSION["referer"].$glue);
200  }
201  }
202 
203  function getMessage()
204  {
205  return $this->message;
206  }
207  function setMessage($a_message)
208  {
209  $this->message = $a_message;
210  }
211  function appendMessage($a_message)
212  {
213  if($this->getMessage())
214  {
215  $this->message .= "<br /> ";
216  }
217  $this->message .= $a_message;
218  }
219 
229  public static function _ilErrorWriter($errno, $errstr, $errfile, $errline)
230  {
231  global $ilLog;
232 
233  switch($errno)
234  {
235  case E_USER_ERROR:
236  $ilLog->write('PHP errror: '.$errstr.'. FATAL error on line '.$errline.' in file '.$errfile);
237  unset($ilLog);
238  exit(1);
239 
240  case E_USER_WARNING:
241  $ilLog->write('PHP warning: ['.$errno.'] '.$errstr.' on line '.$errline.' in file '.$errfile);
242  break;
243 
244  }
245  return true;
246  }
247 
248 } // END class.ilErrorHandling
249 ?>