Code

Updated snapshot stuff, check acls here too.
[gosa.git] / gosa-core / include / class_SnapShotDialog.inc
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();
42         
43         function SnapShotDialog(&$config, $dn, &$parent)
44         {
45     plugin::plugin($config,$dn);
46     $this->parent       = &$parent;
47                 $this->ui                 = get_userinfo();
48         }
50   
51   /* Show deleted snapshots from these bases */
52   function set_snapshot_bases($bases)
53   {
54     $this->snap_shot_bases = $bases;
55   }
56         
57         
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;
75         
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();                    
133                         
134                         /* Walk through all entries and setup the display text */
135                         foreach($tmp as $key => $entry){
136     
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);
146         
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")."'>&nbsp;";
153         $actions.= "<input type='image' src='images/lists/trash.png' name='RemoveSnapShot_%KEY' 
154           class='center' title='"._("Remove snapshot")."'>&nbsp;";
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         }
206 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
207 ?>