1 <?php
3 class gotoLogView extends plugin
4 {
6 var $mac;
7 var $logs;
8 var $event;
9 var $parent;
10 var $config;
12 var $o_queue;
14 var $selected_date;
15 var $selected_file = 0;
17 var $attributes = array("macAddress");
18 var $macAddress = "";
20 var $sort_by = "time";
21 var $sort_dir = 1; // 1 => up, 0 => down
23 var $ignore_account = TRUE;
24 var $standalone = FALSE;
26 function __construct(&$config,$dn,$parent)
27 {
28 $this->config = $config;
29 $this->parent = $parent;
31 /* Try to fetch logs for the given event (mac)
32 */
33 $this->o_queue = new gosaSupportDaemon();
35 /* Load ldap object if given
36 and use this macAddress.
37 */
38 if(is_object($parent) && $dn != "" && $dn != "new"){
39 plugin::plugin($config,$dn,$parent);
40 }
42 /* Get correct macAddress.
43 Check if an event is given or a ldap object.
44 */
45 if(is_array($this->parent) && isset($this->parent['MACADDRESS'])){
46 $this->mac = $this->parent['MACADDRESS'];
47 $this->standalone = TRUE;
48 }elseif(isset($parent->attrs['macAddress'][0])){
49 $this->mac = $parent->attrs['macAddress'][0];
50 $this->standalone = FALSE;
51 }
53 /* Query for log files
54 */
55 $res = $this->o_queue->get_log_info_for_mac($this->mac);
56 if($this->o_queue->is_configured() && $this->o_queue->is_error()){
57 msg_dialog::display(_("Error"), $this->o_queue->get_error(), ERROR_DIALOG);
58 }
60 /* Check if there is at least one log file
61 */
62 if(!isset($res[$this->mac]) || !is_array($res[$this->mac])){
63 $this->logs = array();
64 }else{
65 $this->selected_date = key($res[$this->mac]);
66 $this->logs = $res;
67 }
69 }
72 function execute()
73 {
74 plugin::execute();
76 $smarty = get_smarty();
77 $smarty->assign("logs",$this->logs);
78 $smarty->assign("logs_available", isset($this->logs[$this->mac]));
79 $smarty->assign("mac",$this->mac);
80 $smarty->assign("selected_file",$this->selected_file);
81 $smarty->assign("selected_date",$this->selected_date);
82 $smarty->assign("log_file", $this->get_log($this->mac,$this->selected_date,$this->selected_file));
83 $smarty->assign("standalone",$this->standalone);
85 if (isset($this->logs[$this->mac])){
86 $date = date("d.m.Y H:i:s",$this->logs[$this->mac][$this->selected_date]['REAL_DATE']);
87 }
88 $file = $this->selected_file;
89 $smarty->assign("selected_log",_("none"));
90 if(!empty($file)){
91 $smarty->assign("selected_log",$file.", ".$date);
92 }
94 $divlist = new divlist("log_view");
96 /* Create sort direction images
97 */
98 if($this->sort_dir){
99 $img = "<img src='images/lists/sort-down.png' border='0' alt='\\/'>";
100 }else{
101 $img = "<img src='images/lists/sort-up.png' border='0' alt='/\\'";
102 }
103 if($this->sort_by == "file"){
104 $img1 = $img;
105 $img2 = "";
106 }else{
107 $img1 = "";
108 $img2 = $img;
109 }
112 /* Create list header
113 */
114 $divlist->SetHeader(array(
115 array("string"=>"<a href='?plug=".$_GET['plug']."&sort_by=file'>"._("File")." ".$img1."</a>",
116 "attach"=>"width='200px;'"),
117 array("string"=>"<a href='?plug=".$_GET['plug']."&sort_by=time'>"._("Date")." ".$img2."</a>",
118 "attach" => "style='border-right:none;'"),
119 ));
121 /* Create divlist list
122 */
123 $divlist->SetEntriesPerPage(0);
124 $divlist->SetHeight(150);
126 /* Create sortable array
127 */
128 $link = "<a href='?plug=".$_GET['plug']."&time=%time%&file=%file%&mac=%mac%'>%str%</a>";
129 $to_add = array();
130 $sort_by = $this->sort_by;
131 foreach($this->logs as $mac => $times){
132 foreach($times as $time => $data){
133 $rtime = $data['REAL_DATE'];
134 foreach($data['FILES'] as $file){
136 $highlight = "";
137 if($file == $this->selected_file && $time == $this->selected_date && $mac == $this->mac){
138 $highlight = "background-color:#CCCCCC";
139 }
141 $use_link = preg_replace(array("/%mac%/","/%time%/","/%file%/"),array($mac,$time,$file),$link);
142 $to_add[$$sort_by.$file.$time] = array(
143 array("string" => preg_replace("/%str%/",$file,$use_link),
144 "attach" => "style='width:200px; $highlight'"),
145 array("string" => preg_replace("/%str%/",date("d.m.Y H:i:s",$rtime),$use_link),
146 "attach" => "style='border-right:none; $highlight'"),
147 );
148 }
149 }
150 }
152 /* Sort entries
153 */
154 if(!$this->sort_dir){
155 uksort($to_add, "strnatcasecmp");
156 }else{
157 uksort($to_add, "strnatcasecmp");
158 $to_add = array_reverse($to_add);
159 }
161 /* Append entries to list
162 */
163 foreach($to_add as $entry){
164 $divlist->AddEntry($entry);
165 }
167 $smarty->assign("ACL",preg_match("/r/",$this->getacl("")));
168 $smarty->assign("divlist",$divlist->DrawList());
169 return($smarty->fetch(get_template_path('log_view.tpl', TRUE,dirname(__FILE__))));
170 }
173 function get_log($mac,$date,$file)
174 {
175 $res = $this->o_queue->get_log_file($mac,$date,$file);
176 if($this->o_queue->is_configured() && $this->o_queue->is_error()){
177 msg_dialog::display(_("Error"), $this->o_queue->get_error(), ERROR_DIALOG);
178 }
179 $res = nl2br(htmlentities($res));
180 return($res);
181 }
184 function save_object()
185 {
186 foreach(array("time"=>"selected_date","file"=>"selected_file") as $attr => $dest){
187 if(isset($_GET[$attr])){
188 $this->$dest = $_GET[$attr];
189 }
190 }
191 if(isset($_GET['sort_by']) && in_array($_GET['sort_by'],array("file","time"))){
192 if($_GET['sort_by'] == $this->sort_by){
193 $this->sort_dir = !$this->sort_dir;
194 }
195 $this->sort_by = $_GET['sort_by'];
196 }
197 }
200 /* Return plugin informations for acl handling */
201 static function plInfo()
202 {
203 return (array(
204 "plShortName" => _("Log view"),
205 "plDescription" => _("GOto log view"),
206 "plSelfModify" => FALSE,
207 "plDepends" => array(),
208 "plPriority" => 30,
209 "plSection" => array("administration"),
210 "plCategory" => array("workstation","server"),
212 "plProvidedAcls"=> array()
213 ));
214 }
215 }
216 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
217 ?>