Code

315d1525de8e90c3bb4b8e627b4a7a33c7471c5e
[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();
43     function SnapShotDialog(&$config, $dn, &$parent)
44     {
45         plugin::plugin($config,$dn);
46         $this->parent   = &$parent;
47         $this->ui                 = get_userinfo();
49         // Prepare lists
50         $this->snapList = new sortableListing();
51         $this->snapList->setDeleteable(false);
52         $this->snapList->setEditable(false);
53         $this->snapList->setWidth("100%");
54         $this->snapList->setHeight("200px");
55         $this->snapList->setHeader(array(_("Date"), _("Name") ));
56         $this->snapList->setColspecs(array('140px','*','60px'));
57         $this->snapList->setDefaultSortColumn(0);
59     }
62     /* Show deleted snapshots from these bases */
63     function set_snapshot_bases($bases)
64     {
65         $this->snap_shot_bases = $bases;
66     }
69     /* Display snapshot dialog */
70     function execute()
71     {
72         plugin::execute();
73         $smarty = get_smarty();
75         $ui = get_userinfo();
76         $once = true;
77         foreach($_POST as $name => $value){
78             if((preg_match("/^RemoveSnapShot_/",$name)) && ($once)){
79                 $once = false;
80                 $entry = preg_replace("/^RemoveSnapShot_/","",$name);
81                 $entry = base64_decode($entry);
82                 $found = false;
83                 foreach($this->last_list as $t_stamp => $obj){
84                     if($obj['dn'] == $entry){
85                         $found = true;
86                         break;
87                     }
88                 }
90                 if($found){
91                     $this->del_dn       = $entry;
92                     $smarty= get_smarty();
93                     $smarty->assign("info", sprintf(_("You are about to delete the snapshot %s."), bold(LDAP::fix($this->del_dn))));
94                     return($smarty->fetch (get_template_path('removeSnapshots.tpl')));
95                 }
96             }
97         }
99         /* We must restore a snapshot */
101         if($this->display_restore_dialog){
103             /* Should we only display all snapshots of already deleted objects 
104                or the snapshots for the given object dn */
105             $res = array();
106             $tmp = array();
107             $handler = new SnapshotHandler($this->config);
109             if($this->display_all_removed_objects){
110                 if(count($this->snap_shot_bases)){
111                     foreach($this->snap_shot_bases as $dn){
112                         $tmp = array_merge($tmp,$handler->getAllDeletedSnapshots($dn,true));
113                     }
114                 }else{
115                     $tmp = $handler->getAllDeletedSnapshots($this->snap_shot_bases,true);
116                 }
117             }else{
118                 $tmp = $handler->Available_SnapsShots($this->dn,true);
119             }
121             $this->snapList->setAcl('rwcdm');
123             $list_of_elements = array();                        
125             /* Walk through all entries and setup the display text */
126             foreach($tmp as $key => $entry){
128                 /* Check permissions */
129                 $TimeStamp = $entry['gosaSnapshotTimestamp'][0];
130                 $list_of_elements[$TimeStamp] = $entry;
131             }
133             /* Sort generated list */
134             krsort($list_of_elements);
136             /* Add Elements to list */  
137             $this->last_list = $list_of_elements;
139             $data = $lData = array();
140             foreach($list_of_elements as $entry){
141                 $actions=  image('images/lists/restore.png','RestoreSnapShot_%KEY',_("Restore snapshot"));
142                 $actions.= image('images/lists/trash.png','RemoveSnapShot_%KEY',_("Delete snapshot"));
143                 $time_stamp     = date(_("Y-m-d, H:i:s"),preg_replace("/\-.*$/","",$entry['gosaSnapshotTimestamp'][0]));
144                 $display_data   = $entry['description'][0];
145                 $data[$entry['dn']] = $entry;
146                 $lData[$entry['dn']] = array('data'=>
147                         array(
148                             $time_stamp,
149                             htmlentities(utf8_decode(LDAP::fix($display_data))),
150                             str_replace("%KEY",base64_encode($entry['dn']), $actions)));
151             }           
153             $this->snapList->setListData($data, $lData);
154             $this->snapList->update();
155             $smarty->assign("SnapShotList",$this->snapList->render());
156             $smarty->assign("CountSnapShots",count($list_of_elements));
157         }
159         $smarty->assign("restore_deleted",$this->display_all_removed_objects);
160         $smarty->assign("RestoreMode",$this->display_restore_dialog);
161         $smarty->assign("CurrentDate",date(_("Y-m-d, H:i:s")));
162         $smarty->assign("CurrentDN",LDAP::fix($this->dn));
163         $smarty->assign("CurrentDescription",$this->CurrentDescription);
164         return($smarty->fetch(get_template_path("snapshotdialog.tpl")));
165     }
168     function check()
169     {
170         $message = plugin::check();
171         if(!$this->display_restore_dialog){
172             if(empty($this->CurrentDescription)){
173                 $message[]= msgPool::invalid(_("Description"));
174             }
175         }
176         return($message);
177     }
180     function save_object()
181     {   
182 //        plugin::save_object();
183         foreach($this->attributes as $name){
184             if(isset($_POST[$name])){
185                 $this->$name = stripslashes($_POST[$name]);
186             }
187         }
188     }
191 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
192 ?>