From 86cb8b55f80ea295e154226b20a568170f104ea6 Mon Sep 17 00:00:00 2001 From: hickert Date: Tue, 13 Jun 2006 06:55:05 +0000 Subject: [PATCH] Added snapshot dialog. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@3788 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../admin/systems/class_SnapShotDialog.inc | 88 +++++++++++ plugins/admin/systems/class_divListSystem.inc | 146 ++++++++++++++---- plugins/admin/systems/snapshotdialog.tpl | 85 ++++++++++ 3 files changed, 285 insertions(+), 34 deletions(-) create mode 100755 plugins/admin/systems/class_SnapShotDialog.inc create mode 100755 plugins/admin/systems/snapshotdialog.tpl diff --git a/plugins/admin/systems/class_SnapShotDialog.inc b/plugins/admin/systems/class_SnapShotDialog.inc new file mode 100755 index 000000000..4da63c0b5 --- /dev/null +++ b/plugins/admin/systems/class_SnapShotDialog.inc @@ -0,0 +1,88 @@ +parent = $parent; + } + + + /* Display snapshot dialog */ + function execute() + { + plugin::execute(); + $smarty = get_smarty(); + + /* We must restore a snapshot, so get snapshots */ + if($this->Restore){ + + /* Should we only display all snapshots of already deleted objects + or the snapshots for the given object dn */ + $res = array(); + if($this->DeletedOnes){ + $tmp = $this->getAllDeletedSnapshots($this->dn,true); + }else{ + $tmp = $this->Available_SnapsShots($this->dn,true); + } + + /* 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]; + } + + if(strlen($data) > 83){ + $data= substr($data,0,80)." ..."; + } + + $res[base64_encode($entry['dn'])] = $date." - ".$data; + } + $smarty->assign("SnapShots",$res); + } + + $smarty->assign("RestoreMode",$this->Restore); + $smarty->assign("CurrentDate",date("d.m.Y H:i")); + $smarty->assign("CurrentDN",$this->dn); + $smarty->assign("CurrentDescription",$this->CurrentDescription); + return($smarty->fetch(get_template_path("snapshotdialog.tpl",TRUE,dirname(__FILE__)))); + } + + + function check() + { + $message = plugin::check(); + if(!$this->Restore){ + if(empty($this->CurrentDescription)){ + $message[] = _("Please specify a valid description for this snapshot."); + } + } + return($message); + } + + + function save_object() + { + plugin::save_object(); + foreach($this->attributes as $name){ + if(isset($_POST[$name])){ + $this->$name = stripslashes($_POST[$name]); + } + } + } +} + +?> diff --git a/plugins/admin/systems/class_divListSystem.inc b/plugins/admin/systems/class_divListSystem.inc index b58169262..d92ffacbe 100644 --- a/plugins/admin/systems/class_divListSystem.inc +++ b/plugins/admin/systems/class_divListSystem.inc @@ -29,7 +29,7 @@ class divListSystem extends MultiSelectWindow function divListSystem ($config,$parent) { MultiSelectWindow::MultiSelectWindow($config,"System"); - + $this->parent = $parent; $this->ui = get_userinfo(); @@ -42,7 +42,7 @@ class divListSystem extends MultiSelectWindow $this->SetInformation(_("This menu allows you to add, remove and change the properties of specific systems. You can only add systems which have already been started once.")); $this->EnableAplhabet (true); - + /* Disable buttonsm */ $this->EnableCloseButton(false); $this->EnableSaveButton (false); @@ -50,7 +50,7 @@ class divListSystem extends MultiSelectWindow /* set Page header */ $this->AddHeader(array("string"=>" ","attach"=>"style='width:20px;'")); $this->AddHeader(array("string"=>_("System / Department"))); - $this->AddHeader(array("string"=>_("Actions"),"attach"=>"style='width:60px;border-right:0px;'")); + $this->AddHeader(array("string"=>_("Actions"),"attach"=>"style='width:90px;border-right:0px;'")); /* Text ,Value ,Name ,Is selected */ $this->AddCheckBox("ShowServers", _("Select to see servers"), _("Show servers"), true); @@ -84,31 +84,34 @@ class divListSystem extends MultiSelectWindow } } $listhead = "
". - "  ". - "  ". - "  ". - "  ". - "  ". - " ". - " ". - " ". - " ". - " ". - " ". - "  "._("Base")." ". - " ". - "  ". - "
"; + "  ". + "  ". + "  ". + "  ". + "  ". + " ". + "  ". + " ". + " ". + " ". + " ". + " ". + " ". + "  "._("Base")." ". + " ". + "  ". + ""; $this->SetListHeader($listhead); } @@ -118,6 +121,22 @@ class divListSystem extends MultiSelectWindow $this->GenHeader(); } + + function GetSnapShotActions($dn) + { + $str = ""; + $str .=" "; + + if(count($this->parent->Available_SnapsShots($dn))){ + $str .=" "; + }else{ + $str.= " "; + } + return($str); + } + function setEntries($terminals) { $img1 = "C"; @@ -132,15 +151,17 @@ class divListSystem extends MultiSelectWindow $img10 = "L"; $empty =" "; - $action= ""; - $action.= ""; // User and Template Images $editlink = "%s"; // Test Every Entry and generate divlist Array foreach($terminals as $key => $val){ - + + $action = $this->GetSnapShotActions($val['dn']); + $action.= ""; + $action.= ""; + /* Generate picture list, which is currently disabled */ if(in_array("goCupsServer" ,$val['objectClass'])) $cups = $img1; else $cups =$empty; if(in_array("goLogDBServer" ,$val['objectClass'])) $logdb = $img2; else $logdb =$empty; @@ -152,7 +173,7 @@ class divListSystem extends MultiSelectWindow if(in_array("goFonServer" ,$val['objectClass'])) $fon = $img8; else $fon =$empty; if(in_array("goFaxServer" ,$val['objectClass'])) $fax = $img9; else $fax =$empty; if(in_array("goLdapServer" ,$val['objectClass'])) $ldap = $img10; else $ldap =$empty; - + $pics = $cups.$logdb.$syslog.$imap.$samba.$nfs.$krb.$fon.$fax.$ldap; $pics = ""; // Pictures currently hidden @@ -182,21 +203,78 @@ class divListSystem extends MultiSelectWindow $img = $this->parent->convert_list($val); $field1 = array("string" => sprintf($img['img'],$val['dn']), "attach" => "style='text-align:center;width:20px;'"); $field2 = array("string" => sprintf($editlink,$key,$display), "attach" => "style='' title='".preg_replace('/ /', ' ', @LDAP::fix($val['dn']))."'"); - $field3 = array("string" => preg_replace("/%KEY%/", "$key", $action2.$action), "attach" => "style='width:60px;border-right:0px;text-align:right;'"); + $field3 = array("string" => preg_replace("/%KEY%/", "$key", $action2.$action), "attach" => "style='width:90px;border-right:0px;text-align:right;'"); $this->AddElement( array($field1,$field2,$field3)); } } + function Save() { MultiSelectWindow :: Save(); } + function save_object() { /* Save automatic created POSTs like regex, checkboxes */ - MultiSelectWindow :: save_object(); + MultiSelectWindow :: save_object(); + + + /* check for posts */ + $once = true; + foreach($_POST as $name => $value){ + + /* Create a new snapshot, display a dialog */ + if(preg_match("/^CreateSnapShot_/",$name) && $once){ + $once = false; + $entry = preg_replace("/^CreateSnapShot_/","",$name); + $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); + $this->parent->systab = new SnapShotDialog($this->config,$entry,$this->parent); + } + + /* Restore a snapshot, display a dialog with all snapshots of the current object */ + if(preg_match("/^RestoreSnapShot_/",$name) && $once){ + $once = false; + $entry = preg_replace("/^RestoreSnapShot_/","",$name); + $entry = base64_decode(preg_replace("/_[xy]$/","",$entry)); + $this->parent->systab = new SnapShotDialog($this->config,$entry,$this->parent); + $this->parent->systab->Restore = true; + } + + /* Restore one of the already deleted objects */ + if(preg_match("/^RestoreDeletedSnapShot_/",$name) && $once){ + $once = false; + $entry = "ou=systems,".$this->selectedBase; + $this->parent->systab = new SnapShotDialog($this->config,$entry,$this->parent); + $this->parent->systab->Restore = true; + $this->parent->systab->DeletedOnes = true; + } + } + + /* Create a new snapshot requested, check + the given attributes and create the snapshot*/ + if(isset($_POST['CreateSnapshot'])){ + $this->parent->systab->save_object(); + $msgs = $this->parent->systab->check(); + if(count($msgs)){ + foreach($msgs as $msg){ + print_red($msg); + } + }else{ + $this->parent->dn = $this->parent->systab->dn; + $this->parent->create_snapshot("snapshot",$this->parent->systab->CurrentDescription); + $this->parent->systab = NULL; + } + } + + /* Restore is requested, restore the object with the posted dn .*/ + if((isset($_POST['RestoreSnapshot'])) && (isset($_POST['SnapShot']))){ + $entry = base64_decode($_POST['SnapShot']); + $this->parent->restore_snapshot($entry); + $this->parent->systab = NULL; + } } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: diff --git a/plugins/admin/systems/snapshotdialog.tpl b/plugins/admin/systems/snapshotdialog.tpl new file mode 100755 index 000000000..d81c53518 --- /dev/null +++ b/plugins/admin/systems/snapshotdialog.tpl @@ -0,0 +1,85 @@ +{if $RestoreMode} + +

{t}Restoring an object snapshot{/t}

+
+

+{t}This procedure will create a working snapshot of the selected object.{/t} +
+

+

+
+{t}You will be able to restore from{/t} +
+
+

+
+ + + + + + + +
{t}Choose a snapshot and click continue, to restore the snapshot.{/t} +
+ +
+ +

 

+

+

+ +   + +

+{else} + +

{t}Creating an object snapshot{/t}

+
+

+{t}This procedure will create a working snapshot of the selected object.{/t} +
+

+

+
+{t}You will be able to restore from{/t} +
+
+

+
+ + + + + + + + + + + + +
+ {t}Object{/t} + + {$CurrentDN} +
+ {t}Date{/t} + + {$CurrentDate} +
+ {t}Description{/t}
+ +
+ +

 

+

+

+ +   + +

+{/if} -- 2.30.2