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((!session::is_set('errorsAlreadyPosted')) || !is_array(session::get('errorsAlreadyPosted'))){
27 session::set('errorsAlreadyPosted',array());
28 }
30 $errorsAlreadyPosted = session::get('errorsAlreadyPosted');
31 if(!isset($errorsAlreadyPosted[$s_title.$s_message])){
32 $errorsAlreadyPosted[$s_title.$s_message] = 0;
33 }
34 $errorsAlreadyPosted[$s_title.$s_message]++;
36 if($errorsAlreadyPosted[$s_title.$s_message] <=1 ){
38 $this->i_ID = preg_replace("/[^0-9]*/","",microtime());
39 $this->s_Title = $s_title;
40 $this->s_Message = $s_message;
41 $this->i_Type = $i_type;
43 /* Append trace information, only if error messages are enabled */
44 if( isset($config) &&
45 is_object($config) &&
46 isset($config->data['MAIN']['DISPLAYERRORS']) &&
47 preg_match("/^true$/i",$config->data['MAIN']['DISPLAYERRORS'])){
48 $this->a_Trace = debug_backtrace();
49 }
50 if(!session::is_set('msg_dialogs')){
51 session::set('msg_dialogs',array());
52 }
53 if($this->i_Type == FATAL_ERROR_DIALOG){
54 restore_error_handler();
55 error_reporting(E_ALL);
56 echo $this->execute();
57 }else{
58 $msg_dialogs = session::get('msg_dialogs');
59 $msg_dialogs[] = $this;
60 session::set('msg_dialogs',$msg_dialogs);
61 }
62 }
63 session::set('errorsAlreadyPosted',$errorsAlreadyPosted);
64 }
66 public static function display($s_title,$s_message,$i_type = INFO_DIALOG)
67 {
68 new msg_dialog($s_title,$s_message,$i_type);
69 }
71 public function get_ID()
72 {
73 return($this->i_ID);
74 }
76 public function execute()
77 {
78 if($this->i_Type == FATAL_ERROR_DIALOG) {
79 $display =
80 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
81 \"http://www.w3.org/TR/html4/transitional.dtd\">
82 <html><head>
83 <title>GOsa startup failed</title>
84 </head><body>
85 <table style='width:100%; border:2px solid red;' summary=''>
86 <tr><td style='vertical-align:top;padding:10px'>
87 <img src='images/error.png' alt='{t}Error{/t}'>
88 </td><td style='width:100%'>
89 <b>Fatal Error - GOsa execution abortet - ".$this->s_Title."</b><br>
90 ".$this->s_Message."<br><br>
91 "._("Please fix the above error and reload the page.")."
92 </td></tr>
93 </table></body></html>";
94 return($display);;
95 }else{
97 $smarty = get_smarty();
98 $smarty->assign("s_Trace" ,print_a($this->a_Trace,TRUE));
99 $smarty->assign("i_TraceCnt",count($this->a_Trace));
100 $smarty->assign("i_Type",$this->i_Type);
101 $smarty->assign("s_Message",$this->s_Message);
102 $smarty->assign("s_Title",$this->s_Title);
103 $smarty->assign("i_ID",$this->i_ID);
104 $smarty->assign("frame",false);
105 $smarty->assign("JS",session::get('js'));
106 $smarty->assign("IE",preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']));
107 return($smarty->fetch(get_template_path('msg_dialog.tpl')));
108 }
109 }
112 public function is_confirmed()
113 {
114 if(isset($_POST['MSG_OK'.$this->i_ID])){
115 return(TRUE);
116 }else{
117 return(FALSE);
118 }
119 }
122 public static function get_dialogs()
123 {
124 $return ="";
125 $dialog_ids= "";
127 $seen = "";
128 if(isset($_POST['closed_msg_dialogs'])){
129 # $seen = $_POST['closed_msg_dialogs'];
130 }
132 if(session::is_set('msg_dialogs') && is_array(session::get('msg_dialogs')) && count(session::get('msg_dialogs'))){
134 /* Get frame one */
135 $smarty = get_smarty();
136 $smarty->assign("frame", true);
137 $smarty->assign("IE",preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']));
138 $return = $smarty->fetch(get_template_path('msg_dialog.tpl'));
140 if(!session::get('js')){
141 $dialog = array_pop(session::get('msg_dialogs'));
142 $return.= $dialog->execute();
143 }else{
144 $msg_dialogs = session::get('msg_dialogs');
145 foreach($msg_dialogs as $key => $dialog){
147 if(preg_match("/".$dialog->get_ID()."/",$seen)){
148 unset($msg_dialogs[$key]);
149 }else{
150 $return.= $dialog->execute();
151 $dialog_ids= $dialog->get_ID().",".$dialog_ids;
152 }
153 unset($msg_dialogs[$key]);
154 }
155 session::set('msg_dialogs',$msg_dialogs);
156 }
157 $dialog_ids = preg_replace("/,$/","",$dialog_ids);
159 $return .= "</div>";
160 $return .="<input type='hidden' style='width:400px;' name='pending_msg_dialogs' id='pending_msg_dialogs' value='".$dialog_ids."'>";
161 $return .="<input type='hidden' style='width:400px;' name='closed_msg_dialogs' id='closed_msg_dialogs' value=''>";
162 $return .="<input type='hidden' style='width:400px;' name='current_msg_dialogs' id='current_msg_dialogs' value=''>";
163 $return .="<input type='hidden' style='width:700px;' name='js_debug' id='js_debug'>";
164 }
165 return($return);
166 }
167 }
168 ?>