Code

Added fix for divlist department selection
[gosa.git] / include / class_SnapShotDialog.inc
index c2e0f8f864ecd06fbc247d82f4397d8faa13029e..4dd1466360bfce1857096b691f3c71737f30a170 100755 (executable)
@@ -4,17 +4,23 @@
 class SnapShotDialog extends plugin 
 {
        var $config;
-       var $attributes                 = array("CurrentDescription");
-       var $CurrentDescription = "";
-       var $parent                             = NULL;
-       var $Restore                    = false;                /* Defines the restore mode */
-       var $DeletedOnes                = false;                /* Specifies which objects will be listed */    
-       var $dialog                             = true;
+       var $attributes= array("CurrentDescription");
+       var $CurrentDescription= "";
+       var $parent= NULL;
+       var $display_restore_dialog= false;                   /* Defines the restore mode */
+       var $display_all_removed_objects= false;                /* Specifies which objects will be listed, all
+                                                 snapshots for a single entry or all snapshots
+                                                 of already deleted objects  */        
+       var $dialog= true;
+       var $del_dn= "";
+       var $ui;
+       var $acl;
        
        function SnapShotDialog($config,$dn,$parent)
        {
                plugin::plugin($config,$dn);
-               $this->parent = $parent;
+               $this->parent   = $parent;
+               $this->ui               = get_userinfo();
        }
        
        
@@ -23,14 +29,49 @@ class SnapShotDialog extends plugin
        {
                plugin::execute();
                $smarty = get_smarty();
+       
+               $once = true;
+               foreach($_POST as $name => $value){
+                       if((preg_match("/^RemoveSnapShot_/",$name)) && ($once)){
+                               $once = false;
+       
+                               $entry = preg_replace("/^RemoveSnapShot_/","",$name);
+                               $entry = base64_decode(preg_replace("/_[xy]$/","",$entry));
+
+                               $acl                    = get_permissions ($entry, $this->ui->subtreeACL);
+                               $this->acl              = get_module_permission($acl, "snapshot", $entry );
+
+                               if (chkacl($this->acl, "delete") == ""){
+                                       $this->del_dn   = $entry;
+                                       $smarty= get_smarty();
+                                       $smarty->assign("intro", sprintf(_("You're about to delete the snapshot '%s'."), @LDAP::fix($this->del_dn)));
+                                       return($smarty->fetch (get_template_path('remove.tpl')));
+                               } else {
+
+                                       /* Obviously the user isn't allowed to delete. Show message and
+                                          clean session. */
+                                       print_red (_("You are not allowed to delete this snapshot!"));
+                               }
+                       }
+               }
+
+               /* Remove snapshot */
+               if(isset($_POST['delete_confirm']) && !empty($this->del_dn)){
+                       $acl                    = get_permissions ($this->del_dn, $this->ui->subtreeACL);
+                       $this->acl              = get_module_permission($acl, "snapshot", $this->del_dn);
+                       if (chkacl($this->acl, "delete") == ""){
+                               $this->remove_snapshot($this->del_dn);
+                               $this->del_dn = "";
+                       }       
+               }
 
-               /* We must restore a snapshot, so get snapshots  */
-               if($this->Restore){
+               /* We must restore a snapshot */
+               if($this->display_restore_dialog){
 
                        /* Should we only display all snapshots of already deleted objects 
                 or the snapshots for the given object dn */
                        $res = array();
-                       if($this->DeletedOnes){
+                       if($this->display_all_removed_objects){
                                if(is_array($this->dn)){
                                        $tmp = array();
                                        foreach($this->dn as $dn){
@@ -42,29 +83,50 @@ class SnapShotDialog extends plugin
                        }else{
                                $tmp = $this->Available_SnapsShots($this->dn,true);
                        }
-               
+
+                       $DivListSnapShots = new DivSelectBox("SnapShotRestore");
+                       $DivListSnapShots->SetHeight(180);
+
+                       $list_of_elements = array();                    
+                       
                        /* Walk through all entries and setup the display text */
                        foreach($tmp as $key => $entry){
-                       
-                               $data = $entry['description'][0];
-                               $date = date("d.m.Y H.i.s",preg_replace("/\-.*$/","",$entry['gosaSnapshotTimestamp'][0]));
-                               if($this->DeletedOnes){
-                                       $data.= " - ".$entry['gosaSnapshotDN'][0];
-                               }
+                               $TimeStamp = $entry['gosaSnapshotTimestamp'][0];
+                               $list_of_elements[$TimeStamp] = $entry;
+                       }
+
+                       /* Sort generated list */
+                       krsort($list_of_elements);
        
-                               if(strlen($data) > 83){
-                                       $data= substr($data,0,80)." ...";
+                       /* Add Elements to divlist */   
+                       foreach($list_of_elements as $entry){
+
+                               $actions= "<input type='image' src='images/restore.png' name='RestoreSnapShot_%KEY' 
+                                                               class='center' title='"._("Restore snapshot")."'>&nbsp;";
+                               $actions.= "<input type='image' src='images/edittrash.png' name='RemoveSnapShot_%KEY' 
+                                                               class='center' title='"._("Remove snapshot")."'>&nbsp;";
+
+                               $time_stamp     = date(_("Y-m-d, H:i:s"),preg_replace("/\-.*$/","",$entry['gosaSnapshotTimestamp'][0]));
+                               $display_data   = $entry['description'][0];
+
+                               if($this->display_all_removed_objects){
+                                       $display_data.= " - ".$entry['gosaSnapshotDN'][0];
                                }
-       
-                               $res[base64_encode($entry['dn'])] = $date." - ".$data;
-                       }
-                       natcasesort($res);
-                       $smarty->assign("SnapShots",array_reverse($res));
-                       $smarty->assign("CountSnapShots",count($res));
+
+                               $field0 = array("string"=> $time_stamp , "attach"=> "style='vertical-align:top;width:120px;'");
+                               $field1 = array("string"=> htmlentities (utf8_decode($display_data)), "attach"=> "");
+                               $field2 = array("string"=> preg_replace("/%KEY/",base64_encode($entry['dn']),$actions) , 
+                                                               "attach"=> "style='border-right:0px;vertical-align:top;width:40px;text-align:right;'");
+                               $DivListSnapShots->AddEntry(array($field0,$field1,$field2));
+                       }               
+
+                       $smarty->assign("SnapShotDivlist",$DivListSnapShots->DrawList());       
+                       $smarty->assign("CountSnapShots",count($list_of_elements));
                }
 
-               $smarty->assign("RestoreMode",$this->Restore);
-               $smarty->assign("CurrentDate",date("d.m.Y H:i"));
+               $smarty->assign("restore_deleted",$this->display_all_removed_objects);
+               $smarty->assign("RestoreMode",$this->display_restore_dialog);
+               $smarty->assign("CurrentDate",date(_("Y-m-d, H:i:s")));
                $smarty->assign("CurrentDN",$this->dn);
                $smarty->assign("CurrentDescription",$this->CurrentDescription);
                return($smarty->fetch(get_template_path("snapshotdialog.tpl")));
@@ -74,7 +136,7 @@ class SnapShotDialog extends plugin
        function check()
        {
                $message = plugin::check();
-               if(!$this->Restore){
+               if(!$this->display_restore_dialog){
                        if(empty($this->CurrentDescription)){
                                $message[]  = _("Please specify a valid description for this snapshot.");
                        }
@@ -94,4 +156,5 @@ class SnapShotDialog extends plugin
        }
 }
 
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>