Code

some session changes again
[gosa.git] / gosa-core / include / class_msg_dialog.inc
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;
20         
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         }
111         
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         }
120         
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         }
168 ?>