1 <?php
3 define("INFO_DIALOG" , 10001);
4 define("WARNING_DIALOG" , 10002);
5 define("ERROR_DIALOG" , 10003);
6 define("CONFIRM_DIALOG" , 10004);
7 define("FATAL_ERROR_DIALOG" , 10005);
9 class msg_dialog
10 {
11 private $s_Title = "Undefined";
12 private $s_Message = "Undefined";
13 private $i_Type = INFO_DIALOG ;
14 private $i_ID = 0;
15 private $a_Trace = array();
17 public function __construct($s_title,$s_message,$i_type)
18 {
19 global $config;
21 if(!in_array($i_type,array(INFO_DIALOG,WARNING_DIALOG,ERROR_DIALOG,CONFIRM_DIALOG,FATAL_ERROR_DIALOG))){
22 trigger_error("Invalid msg_dialog type.");
23 $i_type = INFO_DIALOG;
24 }
26 if((!isset($_SESSION['errorsAlreadyPosted'])) || !is_array($_SESSION['errorsAlreadyPosted'])){
27 $_SESSION['errorsAlreadyPosted'] = array();
28 }
30 if(!isset($_SESSION['errorsAlreadyPosted'][$s_title.$s_message])){
31 $_SESSION['errorsAlreadyPosted'][$s_title.$s_message] = 0;
32 }
33 $_SESSION['errorsAlreadyPosted'][$s_title.$s_message]++;
35 if($_SESSION['errorsAlreadyPosted'][$s_title.$s_message] <=1 ){
37 $this->i_ID = preg_replace("/[^0-9]*/","",microtime());
38 $this->s_Title = $s_title;
39 $this->s_Message = $s_message;
40 $this->i_Type = $i_type;
42 /* Append trace information, only if error messages are enabled */
43 if( isset($config) &&
44 is_object($config) &&
45 isset($config->data['MAIN']['DISPLAYERRORS']) &&
46 preg_match("/^true$/i",$config->data['MAIN']['DISPLAYERRORS'])){
47 $this->a_Trace = debug_backtrace();
48 }
49 if(!isset($_SESSION['msg_dialogs'])){
50 $_SESSION['msg_dialogs'] = array();
51 }
52 if($this->i_Type == FATAL_ERROR_DIALOG){
53 restore_error_handler();
54 error_reporting(E_ALL);
55 echo $this->execute();
56 }else{
57 $_SESSION['msg_dialogs'][] = $this;
58 }
59 }
60 }
62 public static function display($s_title,$s_message,$i_type = INFO_DIALOG)
63 {
64 new msg_dialog($s_title,$s_message,$i_type);
65 }
67 public function get_ID()
68 {
69 return($this->i_ID);
70 }
72 public function execute()
73 {
74 if($this->i_Type == FATAL_ERROR_DIALOG) {
75 $display =
76 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
77 \"http://www.w3.org/TR/html4/transitional.dtd\">
78 <html><head>
79 <title>GOsa startup failed</title>
80 </head><body>
81 <table style='width:100%; border:2px solid red;' summary=''>
82 <tr><td style='vertical-align:top;padding:10px'>
83 <img src='images/error.png' alt='{t}Error{/t}'>
84 </td><td style='width:100%'>
85 <b>Fatal Error - GOsa execution abortet - ".$this->s_Title."</b><br>
86 ".$this->s_Message."<br><br>
87 "._("Please fix the above error and reload the page.")."
88 </td></tr>
89 </table></body></html>";
90 return($display);;
91 }else{
93 $smarty = get_smarty();
94 $smarty->assign("s_Trace" ,print_a($this->a_Trace,TRUE));
95 $smarty->assign("i_TraceCnt",count($this->a_Trace));
96 $smarty->assign("i_Type",$this->i_Type);
97 $smarty->assign("s_Message",$this->s_Message);
98 $smarty->assign("s_Title",$this->s_Title);
99 $smarty->assign("i_ID",$this->i_ID);
100 $smarty->assign("frame",false);
101 $smarty->assign("JS",$_SESSION['js']);
102 $smarty->assign("IE",preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']));
103 return($smarty->fetch(get_template_path('msg_dialog.tpl')));
104 }
105 }
108 public function is_confirmed()
109 {
110 if(isset($_POST['MSG_OK'.$this->i_ID])){
111 return(TRUE);
112 }else{
113 return(FALSE);
114 }
115 }
118 public static function get_dialogs()
119 {
120 $return ="";
121 $dialog_ids= "";
123 $seen = "";
124 if(isset($_POST['closed_msg_dialogs'])){
125 # $seen = $_POST['closed_msg_dialogs'];
126 }
128 if(isset($_SESSION['msg_dialogs']) && is_array($_SESSION['msg_dialogs']) && count($_SESSION['msg_dialogs'])){
130 /* Get frame one */
131 $smarty = get_smarty();
132 $smarty->assign("frame", true);
133 $smarty->assign("IE",preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']));
134 $return = $smarty->fetch(get_template_path('msg_dialog.tpl'));
136 if(!$_SESSION['js']){
137 $dialog = array_pop($_SESSION['msg_dialogs']);
138 $return.= $dialog->execute();
139 }else{
140 foreach($_SESSION['msg_dialogs'] as $key => $dialog){
142 if(preg_match("/".$dialog->get_ID()."/",$seen)){
143 unset($_SESSION['msg_dialogs'][$key]);
144 }else{
145 $return.= $dialog->execute();
146 $dialog_ids= $dialog->get_ID().",".$dialog_ids;
147 }
148 unset($_SESSION['msg_dialogs'][$key]);
149 }
150 }
151 $dialog_ids = preg_replace("/,$/","",$dialog_ids);
153 $return .= "</div>";
154 $return .="<input type='hidden' style='width:400px;' name='pending_msg_dialogs' id='pending_msg_dialogs' value='".$dialog_ids."'>";
155 $return .="<input type='hidden' style='width:400px;' name='closed_msg_dialogs' id='closed_msg_dialogs' value=''>";
156 $return .="<input type='hidden' style='width:400px;' name='current_msg_dialogs' id='current_msg_dialogs' value=''>";
157 $return .="<input type='hidden' style='width:700px;' name='js_debug' id='js_debug'>";
158 }
159 return($return);
160 }
161 }
162 ?>