1 <?php
2 /*
3 * This code is part of GOsa (http://www.gosa-project.org)
4 * Copyright (C) 2003-2008 GONICUS GmbH
5 *
6 * ID: $$Id$$
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
23 /* Snap shot dialog class */
24 class SnapShotDialog extends plugin
25 {
26 var $config;
27 var $attributes= array("CurrentDescription");
28 var $CurrentDescription= "";
29 var $parent= NULL;
30 var $display_restore_dialog= false; /* Defines the restore mode */
31 var $display_all_removed_objects= false; /* Specifies which objects will be listed, all
32 snapshots for a single entry or all snapshots
33 of already deleted objects */
34 var $dialog= true;
35 var $del_dn= "";
36 var $ui;
37 var $acl;
38 var $dns = array();
39 var $snap_shot_bases = array();
40 var $last_list = array();
43 function SnapShotDialog(&$config, $dn, &$parent)
44 {
45 plugin::plugin($config,$dn);
46 $this->parent = &$parent;
47 $this->ui = get_userinfo();
48 }
51 /* Show deleted snapshots from these bases */
52 function set_snapshot_bases($bases)
53 {
54 $this->snap_shot_bases = $bases;
55 }
58 /* Display snapshot dialog */
59 function execute()
60 {
61 plugin::execute();
62 $smarty = get_smarty();
64 if(!isset($this->parent->acl_module) || !count($this->parent->acl_module)){
65 trigger_error("Could not detect acl_module in parent object (".get_class($this->parent).").");
66 return("");
67 }
69 $ui = get_userinfo();
71 $once = true;
72 foreach($_POST as $name => $value){
73 if((preg_match("/^RemoveSnapShot_/",$name)) && ($once)){
74 $once = false;
76 $entry = preg_replace("/^RemoveSnapShot_/","",$name);
77 $entry = base64_decode(preg_replace("/_[xy]$/","",$entry));
79 /* Check if we are allowed to handle snapshots
80 */
81 if($ui->allow_snapshot_restore($entry,$this->parent->acl_module)){
83 $found = false;
84 foreach($this->last_list as $t_stamp => $obj){
85 if($obj['dn'] == $entry){
86 $found = true;
87 break;
88 }
89 }
91 if($found){
92 $this->del_dn = $entry;
93 $smarty= get_smarty();
94 $smarty->assign("intro", sprintf(_("You're about to delete the snapshot '%s'."), @LDAP::fix($this->del_dn)));
95 return($smarty->fetch (get_template_path('remove.tpl')));
96 }
97 }
98 }
99 }
101 /* Remove snapshot */
102 if(isset($_POST['delete_confirm']) && !empty($this->del_dn)){
103 if($ui->allow_snapshot_restore($this->del_dn,$this->parent->acl_module)){
104 $this->remove_snapshot($this->del_dn);
105 }
106 $this->del_dn = "";
107 }
109 /* We must restore a snapshot */
111 if($this->display_restore_dialog){
113 /* Should we only display all snapshots of already deleted objects
114 or the snapshots for the given object dn */
115 $res = array();
116 $tmp = array();
117 if($this->display_all_removed_objects){
118 if(count($this->snap_shot_bases)){
119 foreach($this->snap_shot_bases as $dn){
120 $tmp = array_merge($tmp,$this->getAllDeletedSnapshots($dn,true));
121 }
122 }else{
123 $tmp = $this->getAllDeletedSnapshots($this->snap_shot_bases,true);
124 }
125 }else{
126 $tmp = $this->Available_SnapsShots($this->dn,true);
127 }
129 $DivListSnapShots = new divSelectBox("SnapShotRestore");
130 $DivListSnapShots->SetHeight(180);
132 $list_of_elements = array();
134 /* Walk through all entries and setup the display text */
135 foreach($tmp as $key => $entry){
137 /* Check permissions */
138 if($ui->allow_snapshot_restore($entry['dn'],$this->parent->acl_module)){
139 $TimeStamp = $entry['gosaSnapshotTimestamp'][0];
140 $list_of_elements[$TimeStamp] = $entry;
141 }
142 }
144 /* Sort generated list */
145 krsort($list_of_elements);
147 /* Add Elements to divlist */
148 $this->last_list = $list_of_elements;
149 foreach($list_of_elements as $entry){
151 $actions= "<input type='image' src='images/lists/restore.png' name='RestoreSnapShot_%KEY'
152 class='center' title='"._("Restore snapshot")."'> ";
153 $actions.= "<input type='image' src='images/lists/trash.png' name='RemoveSnapShot_%KEY'
154 class='center' title='"._("Remove snapshot")."'> ";
156 $time_stamp = date(_("Y-m-d, H:i:s"),preg_replace("/\-.*$/","",$entry['gosaSnapshotTimestamp'][0]));
157 $display_data = $entry['description'][0];
159 if($this->display_all_removed_objects){
160 $display_data.= " - ".$entry['gosaSnapshotDN'][0];
161 }
163 $field0 = array("string"=> $time_stamp , "attach"=> "style='vertical-align:top;width:120px;'");
164 $field1 = array("string"=> htmlentities (utf8_decode($display_data)), "attach"=> "");
165 $field2 = array("string"=> preg_replace("/%KEY/",base64_encode($entry['dn']),$actions) ,
166 "attach"=> "style='border-right:0px;vertical-align:top;width:40px;text-align:right;'");
167 $DivListSnapShots->AddEntry(array($field0,$field1,$field2));
168 }
170 $smarty->assign("SnapShotDivlist",$DivListSnapShots->DrawList());
171 $smarty->assign("CountSnapShots",count($list_of_elements));
172 }
174 $smarty->assign("restore_deleted",$this->display_all_removed_objects);
175 $smarty->assign("RestoreMode",$this->display_restore_dialog);
176 $smarty->assign("CurrentDate",date(_("Y-m-d, H:i:s")));
177 $smarty->assign("CurrentDN",$this->dn);
178 $smarty->assign("CurrentDescription",$this->CurrentDescription);
179 return($smarty->fetch(get_template_path("snapshotdialog.tpl")));
180 }
183 function check()
184 {
185 $message = plugin::check();
186 if(!$this->display_restore_dialog){
187 if(empty($this->CurrentDescription)){
188 $message[]= msgPool::invalid(_("Description"));
189 }
190 }
191 return($message);
192 }
195 function save_object()
196 {
197 plugin::save_object();
198 foreach($this->attributes as $name){
199 if(isset($_POST[$name])){
200 $this->$name = stripslashes($_POST[$name]);
201 }
202 }
203 }
204 }
206 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
207 ?>