Переглянути джерело

Merge branch 'fix_combined' of andre/whmcsProxmoxCloud into thurdata

andre 4 роки тому
батько
коміт
c54f59167a
34 змінених файлів з 527 додано та 309 видалено
  1. 5 0
      app/UI/Admin/Product/Providers/ProductProvider.php
  2. 10 0
      app/UI/Admin/Product/Sections/Lxc/ClientAreaSection.php
  3. 10 0
      app/UI/Admin/Product/Sections/Qemu/ClientAreaSection.php
  4. 1 2
      app/UI/Backup/Forms/CreateForm.php
  5. 1 1
      app/UI/BackupJob/Forms/CreateForm.php
  6. 5 0
      app/UI/BackupJob/Forms/UpdateForm.php
  7. 1 1
      app/UI/BackupJob/Pages/BackupJobDataTable.php
  8. 4 0
      app/UI/Client/Templates/assets/js/vm/index.js
  9. 2 0
      app/UI/Disk/Forms/CreateForm.php
  10. 5 0
      app/UI/Disk/Forms/UpdateForm.php
  11. 18 2
      app/UI/Disk/Pages/DiskDataTable.php
  12. 0 18
      app/UI/Disk/Providers/DiskProvider.php
  13. 5 0
      app/UI/Home/Providers/StatusProvider.php
  14. 16 1
      app/UI/Network/Pages/NetworkQemuDataTable.php
  15. 2 0
      app/UI/Snapshot/Forms/CreateForm.php
  16. 2 0
      app/UI/Snapshot/Forms/JobForm.php
  17. 4 3
      app/UI/Snapshot/Pages/JobRawDataTable.php
  18. 3 0
      app/UI/Snapshot/Pages/SnapshotTab.php
  19. 1 1
      app/UI/Snapshot/Pages/SnapshotTrait.php
  20. 3 0
      app/UI/Snapshot/Providers/JobProvider.php
  21. 19 1
      app/UI/VirtualInterface/Pages/VirtualInterfaceDataTable.php
  22. 24 0
      app/UI/Vm/Pages/SnapshotTab.php
  23. 24 18
      app/UI/Vm/Pages/VmTabs.php
  24. 3 0
      app/UI/VmCreate/Providers/VmCreateProvider.php
  25. 2 0
      app/UI/VmCreate/Sections/AdditionalDiskSection.php
  26. 4 0
      app/UI/VmCreate/Sections/Qemu/GeneralSection.php
  27. 11 8
      app/UI/VmUpdate/Forms/VmUpdateForm.php
  28. 7 178
      app/UI/VmUpdate/Providers/VmUpdateProvider.php
  29. 28 26
      app/UI/VmUpdate/Sections/Qemu/GeneralSection.php
  30. 3 3
      app/UI/Vms/Pages/VmsDataTable.php
  31. 1 1
      core/UI/Widget/Forms/Fields/Range.php
  32. 132 18
      langs/english.php
  33. 165 27
      langs/german.php
  34. 6 0
      templates/client/default/assets/css/layers-ui.css

+ 5 - 0
app/UI/Admin/Product/Providers/ProductProvider.php

@@ -211,6 +211,11 @@ class ProductProvider extends BaseDataProvider implements AdminArea
         foreach ($this->api()->get('/pools') as $pool) {
             $this->availableValues["customconfigoption[pool]"][$pool['poolid']] = $lang->tr($pool['poolid']);
         }
+        //permissionSnapshotJobPeriod
+        $this->availableValues["customconfigoption[permissionSnapshotJobPeriod][]"] = [
+            JobPeriod::HOURLY => $lang->tr(JobPeriod::HOURLY),
+            JobPeriod::DAILY => $lang->tr(JobPeriod::DAILY)
+        ];
         //permissionFirewalOptions
         $this->availableValues["customconfigoption[permissionFirewalOptions][]"] = [
             "enable" => $lang->abtr("Enable/Disable Firewall"),

+ 10 - 0
app/UI/Admin/Product/Sections/Lxc/ClientAreaSection.php

@@ -91,6 +91,16 @@ class ClientAreaSection extends TwiceColumnSection implements AdminArea
         $field->setDefaultValue("on");
         $field->setDescription('tip');
         $this->addField($field);
+        //Snapshot Jobs
+        $field = new Switcher('customconfigoption[permissionSnapshotJob]');
+        $field->setDescription('tip');
+        $field->setDefaultValue("on");
+        $this->leftSection->addField($field);
+        //How Often
+        $field = new Select('customconfigoption[permissionSnapshotJobPeriod][]');
+        $field->setDescription('tip');
+        $field->enableMultiple();
+        $this->rightSection->addField($field);
         //Firewall
         $field = new Switcher('customconfigoption[permissionFirewall]');
         $field->setDefaultValue("on");

+ 10 - 0
app/UI/Admin/Product/Sections/Qemu/ClientAreaSection.php

@@ -108,6 +108,16 @@ class ClientAreaSection extends TwiceColumnSection implements AdminArea
         $field->setDescription('tip');
         $field->setDefaultValue("on");
         $this->addField($field);
+        //Snapshot Jobs
+        $field = new Switcher('customconfigoption[permissionSnapshotJob]');
+        $field->setDescription('tip');
+        $field->setDefaultValue("on");
+        $this->leftSection->addField($field);
+        //How Often
+        $field = new Select('customconfigoption[permissionSnapshotJobPeriod][]');
+        $field->setDescription('tip');
+        $field->enableMultiple();
+        $this->rightSection->addField($field);
         //Firewall
         $field = new Switcher('customconfigoption[permissionFirewall]');
         $field->setDescription('tip');

+ 1 - 2
app/UI/Backup/Forms/CreateForm.php

@@ -77,8 +77,7 @@ class CreateForm extends BaseForm implements ClientArea
         $field = new Select('mode');
         $field->setAvailableValues([
             "snapshot" => sl("lang")->tr("Snapshot"),
-            "suspend"  => sl("lang")->tr("Suspend"),
-            "stop"     => sl("lang")->tr("Stop")
+            "suspend"  => sl("lang")->tr("Suspend")
         ]);
         $this->addField($field);
     }

+ 1 - 1
app/UI/BackupJob/Forms/CreateForm.php

@@ -108,7 +108,7 @@ class CreateForm extends BaseForm implements ClientArea
         $field = new Select('mode');
         $field->setAvailableValues([
             "snapshot" => sl("lang")->tr("snapshot"),
-            "suspend"  => sl("lang")->tr("suspend"),
+//            "suspend"  => sl("lang")->tr("suspend"),
             "stop"     => sl("lang")->tr("stop")
         ]);
         $field->notEmpty();

+ 5 - 0
app/UI/BackupJob/Forms/UpdateForm.php

@@ -50,6 +50,10 @@ class UpdateForm extends BaseForm implements ClientArea
         }else if($this->getWhmcsConfigOption(ConfigurableOption::BACKUPS_FILES) == "-1"){
             $backupFilesLimit = null;
         }
+        if ($backupFilesLimit == "-1")
+        {
+            $backupFilesLimit = null;
+        }
         if ($this->configuration()->isBackupRouting() && $backupFilesLimit)
         {
             sl("lang")->addReplacementConstant("backupFilesLimit" , $backupFilesLimit);
@@ -105,6 +109,7 @@ class UpdateForm extends BaseForm implements ClientArea
             "zstd" => sl("lang")->tr("zstd")
         ]);
         $field->setDefaultValue('zstd');
+        $field->addClass('hidden');
         $field->notEmpty();
         $this->addField($field);
         //mode

+ 1 - 1
app/UI/BackupJob/Pages/BackupJobDataTable.php

@@ -63,7 +63,7 @@ class BackupJobDataTable extends DataTable implements ClientArea
         $this->addColumn((new Column('displayId'))->setSearchable(true, "int")->setOrderable('DESC'))
             ->addColumn((new Column('starttime'))->setSearchable(true, "date")->setOrderable())
             ->addColumn((new Column('dow'))->setSearchable(true)->setOrderable())
-            ->addColumn((new Column('compress'))->setSearchable(true)->setOrderable())
+//            ->addColumn((new Column('compress'))->setSearchable(true)->setOrderable())
             ->addColumn((new Column('mode'))->setSearchable(true)->setOrderable())
             ->addColumn((new Column('mailto')));
     }

+ 4 - 0
app/UI/Client/Templates/assets/js/vm/index.js

@@ -91,6 +91,10 @@ function mgLocationReload(data) {
     window.location.reload();
 }
 
+function mgLocationReloadDelay(data) {
+    setTimeout(function(){ window.location.reload(); }, 3000);
+}
+
 /* VM delete done*/
 function pcVmDeltedAjaxDone(data) {
     if(data.htmlData.redirectUrl)

+ 2 - 0
app/UI/Disk/Forms/CreateForm.php

@@ -96,6 +96,8 @@ class CreateForm extends BaseForm implements ClientArea
         if ($this->configuration()->isPermissionAdditionalDiskBackup())
         {
             $field = new Switcher('backup');
+            $field->setDefaultValue('on');
+            $field->addClass('hidden');
             $this->addField($field);
         }
 

+ 5 - 0
app/UI/Disk/Forms/UpdateForm.php

@@ -53,6 +53,11 @@ class UpdateForm extends BaseForm implements ClientArea
         } else {
             $rangeField->setMaxValue($this->configuration()->serverDiskSize->max);
         }
+        $backupSwitcher = $this->getField('backup');
+//        if ( parent::getFormData()['id'] == 'scsi0') {
+            $backupSwitcher->addClass('hidden');
+//        }
+
     }
 
     public function getAllowedActions()

+ 18 - 2
app/UI/Disk/Pages/DiskDataTable.php

@@ -72,7 +72,7 @@ class DiskDataTable extends DataTable implements ClientArea
         $this->addColumn((new Column('name'))->setSearchable(true, "string")->setOrderable('ASC'))
 //            ->addColumn((new Column('bus'))->setSearchable(true, "string")->setOrderable())
 //            ->addColumn((new Column('format'))->setSearchable(true)->setOrderable())
-            ->addColumn((new Column('backup'))->setSearchable(true)->setOrderable())
+//            ->addColumn((new Column('backup'))->setSearchable(true)->setOrderable())
             ->addColumn((new Column('bytes'))->setSearchable(true)->setOrderable());
     }
 
@@ -118,6 +118,22 @@ class DiskDataTable extends DataTable implements ClientArea
         return $row['backup'] == "0" ? "off" : "on";
     }
 
+    public function loadDataToForm() {
+        $this->setShowTitle();
+    }
+    
+    public function validateFields() {
+
+    }
+    
+    public function validateSections() {
+
+    }
+    
+    public function getValidationErrors() {
+
+    }
+    
     protected function loadData()
     {
         $data = [];
@@ -136,7 +152,7 @@ class DiskDataTable extends DataTable implements ClientArea
 //                "bus"    => $entity->getId(),
                 "name"   => $entity->getName(),
 //                "format" => $entity->getFormat(),
-                "backup" => $entity->getBackup(),
+//                "backup" => $entity->getBackup(),
                 "size"   => $entity->getSize(),
                 "bytes"  => $entity->getBytes(),
                 "master" => $rootDisk,

+ 0 - 18
app/UI/Disk/Providers/DiskProvider.php

@@ -79,15 +79,6 @@ class DiskProvider extends BaseDataProvider implements ClientArea
         $hdd->setCache($this->configuration()->getAdditionalDiskCache());
         //ssd
         $hdd->setSsd($this->configuration()->isAdditionalDiskSsd() ? 1 : null);
-
-        logModuleCall(
-            'proxmoxCloud',
-            __FUNCTION__,
-            $hdd,
-            'Debug',
-            $hdd->getSsd()
-        );
-
         //replicate
         if ($this->configuration()->isAdditionalDiskReplicate())
         {
@@ -174,15 +165,6 @@ class DiskProvider extends BaseDataProvider implements ClientArea
         $hdd->delete();
         unset($this->vm);
         foreach($vm->getUnusedHardDisks() as $hd){
-
-            logModuleCall(
-                'proxmoxCloud',
-                __FUNCTION__,
-                $hd->getName(),
-                'Debug',
-                $hd
-            );
-            
             if($hd->isMaster()){
                 continue;
             }

+ 5 - 0
app/UI/Home/Providers/StatusProvider.php

@@ -45,6 +45,7 @@ class StatusProvider extends BaseDataProvider implements ClientArea
             ->setStatusSuccess()
             ->setMessageAndTranslate('The Virtual Machine has been booted successfully')
             ->addData('refreshState', 'serverinformationTable')
+            ->setCallBackFunction('mgLocationReloadDelay')
             ->addRefreshTargetId('serviceInformationDataTable');
     }
 
@@ -63,6 +64,7 @@ class StatusProvider extends BaseDataProvider implements ClientArea
                 ->setStatusSuccess()
                 ->setMessageAndTranslate('Rebooting container in progress')
                 ->addData('refreshState', 'serverinformationTable')
+                ->setCallBackFunction('mgLocationReloadDelay')
                 ->addRefreshTargetId('serviceInformationDataTable');
         }
         else
@@ -72,6 +74,7 @@ class StatusProvider extends BaseDataProvider implements ClientArea
                 ->setStatusSuccess()
                 ->setMessageAndTranslate('The Virtual Machine has been rebooted successfully')
                 ->addData('refreshState', 'serverinformationTable')
+                ->setCallBackFunction('mgLocationReloadDelay')
                 ->addRefreshTargetId('serviceInformationDataTable');
         }
 
@@ -85,6 +88,7 @@ class StatusProvider extends BaseDataProvider implements ClientArea
             ->setStatusSuccess()
             ->setMessageAndTranslate('The Virtual Machine has been stopped successfully')
             ->addData('refreshState', 'serverinformationTable')
+            ->setCallBackFunction('mgLocationReloadDelay')
             ->addRefreshTargetId('serviceInformationDataTable');
     }
 
@@ -96,6 +100,7 @@ class StatusProvider extends BaseDataProvider implements ClientArea
             ->setStatusSuccess()
             ->setMessageAndTranslate('The Virtual Machine has been shut down successfully')
             ->addData('refreshState', 'serverinformationTable')
+            ->setCallBackFunction('mgLocationReloadDelay')
             ->addRefreshTargetId('serviceInformationDataTable');
     }
 

+ 16 - 1
app/UI/Network/Pages/NetworkQemuDataTable.php

@@ -36,7 +36,8 @@ class NetworkQemuDataTable extends DataTable implements ClientArea
     use ProductService;
     use ApiService;
     protected $id = 'networkDataTable';
-    protected $title = 'networkQemuDataTable';
+    protected $name = 'networkQemuDataTable';
+    protected $title = 'networkQemuDataTableTitle';
 
     public function initContent()
     {
@@ -154,5 +155,19 @@ class NetworkQemuDataTable extends DataTable implements ClientArea
         $this->setDataProvider($dataProv);
     }
 
+    public function loadDataToForm() {
+        $this->setShowTitle();
+    }
+
+    public function validateFields() {
+
+    }
+    
+    public function validateSections() {
 
+    }
+    
+    public function getValidationErrors() {
+
+    }
 }

+ 2 - 0
app/UI/Snapshot/Forms/CreateForm.php

@@ -65,6 +65,8 @@ class CreateForm extends BaseForm implements ClientArea
         {
             //vmstate
             $field = new Switcher("vmstate");
+            $field->setDefaultValue("off");
+            $field->addClass('hidden');
             $this->addField($field);
         }
         //description

+ 2 - 0
app/UI/Snapshot/Forms/JobForm.php

@@ -93,6 +93,8 @@ trait JobForm
         if ($vm instanceof Kvm)
         {
             $field = new Switcher("vmstate");
+            $field->setDefaultValue("off");
+            $field->addClass('hidden');
             $this->addField($field);
         }
         //description

+ 4 - 3
app/UI/Snapshot/Pages/JobRawDataTable.php

@@ -40,7 +40,8 @@ class JobRawDataTable extends RawDataTable implements ClientArea, AdminArea
     use ProductService;
 
     protected $id = 'jobDataTable';
-    protected $title = 'jobDataTable';
+    protected $title = 'jobDataTableTitle';
+    protected $name = 'jobDataTable';
 
     public function initContent()
     {
@@ -64,10 +65,10 @@ class JobRawDataTable extends RawDataTable implements ClientArea, AdminArea
     {
         $vm = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm();
         $this->addColumn((new Column('name'))->setSearchable(true, "string")->setOrderable());
-        if ($vm instanceof Kvm)
+/*        if ($vm instanceof Kvm)
         {
             $this->addColumn((new Column('vmstate'))->setSearchable(true)->setOrderable());
-        }
+        } */
         $this->addColumn((new Column('description'))->setSearchable(true)->setOrderable());
         $this->addColumn((new Column('days'))->setSearchable(true))
              ->addColumn((new Column('created_at'))->setSearchable(true, "date")->setOrderable('DESC'));

+ 3 - 0
app/UI/Snapshot/Pages/SnapshotTab.php

@@ -23,6 +23,9 @@ namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\AdminArea;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\TabsWidget\TabsWidget;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages\SnapshotRawDataTable;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages\JobRawDataTable;
+
 
 class SnapshotTab extends TabsWidget implements ClientArea, AdminArea
 {

+ 1 - 1
app/UI/Snapshot/Pages/SnapshotTrait.php

@@ -57,7 +57,7 @@ trait SnapshotTrait
             ->addColumn((new Column('status'))->setSearchable(true, "string")->setOrderable());
         if ($vm instanceof Kvm)
         {
-            $this->addColumn((new Column('vmstate'))->setSearchable(true)->setOrderable());
+//            $this->addColumn((new Column('vmstate'))->setSearchable(true)->setOrderable());
         }
         $this->addColumn((new Column('snaptime'))->setSearchable(true, "date")->setOrderable('DESC'))
             ->addColumn((new Column('description'))->setSearchable(true)->setOrderable());

+ 3 - 0
app/UI/Snapshot/Providers/JobProvider.php

@@ -78,6 +78,9 @@ class JobProvider  extends BaseModelDataProvider implements ClientArea
         }
         //hosting_id
         $this->formData['hosting_id']= $this->getWhmcsParamByKey('serviceid');
+        //vm_id
+        $this->model->vm_id = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()->id;
+        $this->formData['vmid'] = $this->model->vm_id;
         //fill from data
         $this->model->fill($this->formData)->save();
         sl('lang')->addReplacementConstant('name', $this->formData['name']);

+ 19 - 1
app/UI/VirtualInterface/Pages/VirtualInterfaceDataTable.php

@@ -42,7 +42,8 @@ class VirtualInterfaceDataTable extends DataTable implements ClientArea
     use ApiService;
 
     protected $id = 'virtualInterfaceDataTable';
-    protected $title = 'virtualInterfaceDataTable';
+    protected $name = 'virtualInterfaceDataTable';
+    protected $title = 'virtualInterfaceDataTableTitle';
 
     public function initContent()
     {
@@ -79,6 +80,23 @@ class VirtualInterfaceDataTable extends DataTable implements ClientArea
         return $row->name;
 
     }
+
+    public function loadDataToForm() {
+        $this->setShowTitle();
+    }
+
+    public function validateFields() {
+
+    }
+    
+    public function validateSections() {
+
+    }
+    
+    public function getValidationErrors() {
+
+    }
+    
     protected function loadData()
     {
         $vmId = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()->id;

+ 24 - 0
app/UI/Vm/Pages/SnapshotTab.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Vm\Pages;
+
+use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
+use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\TabsWidget\TabsWidget;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages\SnapshotDataTable;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages\JobRawDataTable;
+
+class SnapshotTab extends TabsWidget implements ClientArea
+{
+    protected $id   = 'snapshotTab';
+    protected $name = 'snapshotTabName';
+    protected $title = 'snapshotTabTitle';
+
+
+    public function initContent()
+    {
+        $this->unsetShowTitle();
+        $this->addElement(new SnapshotDataTable());
+        $this->addElement(new JobRawDataTable());
+
+    }
+}

+ 24 - 18
app/UI/Vm/Pages/VmTabs.php

@@ -12,12 +12,12 @@ use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Reinstall\Pages\GraphsTab;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Reinstall\Pages\IsoDataTable;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Reinstall\Pages\ReinstallTab;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Reinstall\Pages\TemplateDataTable;
-use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages\SnapshotDataTable;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\TaskHistory\Pages\TaskHistoryDataTable;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VirtualInterface\Pages\VirtualInterfaceDataTable;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\TabsWidget\TabsWidget;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Network\Pages\NetworkTab;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages\SnapshotDataTable;
 
 class VmTabs extends TabsWidget implements ClientArea
 {
@@ -44,7 +44,11 @@ class VmTabs extends TabsWidget implements ClientArea
             }
         }
         //snapshot
-        if ($this->configuration()->isPermissionSnapshot())
+        if ($this->configuration()->isPermissionSnapshotJob())
+        {
+            $this->addElement(new SnapshotTab());
+        }
+        elseif ($this->configuration()->isPermissionSnapshot())
         {
             $this->addElement(new SnapshotDataTable());
         }
@@ -75,22 +79,24 @@ class VmTabs extends TabsWidget implements ClientArea
         /**
          * Reinstall
          */
-        if ($this->configuration()->isQemu() && $this->configuration()->isPermissionOsTemplate() && $this->configuration()->isPermissionIsoImage())
-        {
-            $this->addElement(ReinstallTab::class);
-        }
-        elseif ($this->configuration()->isQemu() && $this->configuration()->isPermissionOsTemplate())
-        {
-            $this->addElement(TemplateDataTable::class);
-        }
-        elseif ($this->configuration()->isQemu() && $this->configuration()->isPermissionIsoImage())
-        {
-            $this->addElement(IsoDataTable::class);
-            //lxc
-        }
-        elseif ($this->configuration()->isLxc())
-        {
-            $this->addElement(TemplateDataTable::class);
+        if ($this->configuration()->isPermissionReinstall()) {
+            if ($this->configuration()->isQemu() && $this->configuration()->isPermissionOsTemplate() && $this->configuration()->isPermissionIsoImage())
+            {
+                $this->addElement(ReinstallTab::class);
+            }
+            elseif ($this->configuration()->isQemu() && $this->configuration()->isPermissionOsTemplate())
+            {
+                $this->addElement(TemplateDataTable::class);
+            }
+            elseif ($this->configuration()->isQemu() && $this->configuration()->isPermissionIsoImage())
+            {
+                $this->addElement(IsoDataTable::class);
+                //lxc
+            }
+            elseif ($this->configuration()->isLxc())
+            {
+                $this->addElement(TemplateDataTable::class);
+            }
         }
     }
 }

+ 3 - 0
app/UI/VmCreate/Providers/VmCreateProvider.php

@@ -106,6 +106,9 @@ class VmCreateProvider extends BaseModelDataProvider implements ClientArea
         $diskResource =   $resurceManager ->disk();
         $diskResource->setTotal($diskResource ->getTotal() - $this->formData['disk']);
         $additonalDiskSize = $this->getAdditionalDiskTotalSize();
+        if($this->vmTemplate->getSlaveHddsSize()) {
+            $additonalDiskSize += $this->vmTemplate->getSlaveHddsSize();
+        }
         if($additonalDiskSize && $additonalDiskSize > $diskResource->freeTotal() ){
             sl("lang")->addReplacementConstant("additional_disks_size",  $additonalDiskSize);
             sl("lang")->addReplacementConstant("size", $diskResource->freeTotal());

+ 2 - 0
app/UI/VmCreate/Sections/AdditionalDiskSection.php

@@ -42,6 +42,8 @@ class AdditionalDiskSection extends BaseSection implements ClientArea
         {
             $field = new Switcher('additionalDiskBackup');
             $field->replaceClasses(['lu-form-check lu-m-b-2x']);
+            $field->setDefaultValue('on');
+            $field->addClass('hidden');
             $this->addField($field);
         }
         //bus

+ 4 - 0
app/UI/VmCreate/Sections/Qemu/GeneralSection.php

@@ -5,6 +5,7 @@ namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Sections\Qemu;
 use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
 use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ResourceManager;
 use ModulesGarden\ProxmoxAddon\Core\Helper\AdvancedUserHelper;
+use ModulesGarden\Servers\ProxmoxCloudVps\Core\Models\Whmcs\Server;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\CpulimitValidator;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\HostnameValidator;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\IpAddressValidator;
@@ -170,14 +171,17 @@ class GeneralSection extends HalfPageSection
              $this->addField($field);
         }
         if($this->configuration()->isPermissionNameservers()){
+            $server = Server::select('id', 'nameserver1ip', 'nameserver2ip')->findOrFail($this->getWhmcsParamByKey('serverid'));
             //ns1
             $field = new Text('nameserver[0]');
             $field->addValidator(new NameserverValidator());
+            $field->setDefaultValue(trim($server->nameserver1ip));
             $field->setDescription('description');
             $this->addField($field);
             //ns2
             $field = new Text('nameserver[1]');
             $field->addValidator(new NameserverValidator());
+            $field->setDefaultValue(trim($server->nameserver2ip));
             $field->setDescription('description');
             $this->addField($field);
         }

+ 11 - 8
app/UI/VmUpdate/Forms/VmUpdateForm.php

@@ -11,6 +11,12 @@ use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmUpdate\Sections\VirtualNetwor
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\BaseStandaloneFormExtSections;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Sections\HalfPageSection;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Disk\Pages\DiskDataTable;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VirtualInterface\Pages\VirtualInterfaceDataTable;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Network\Pages\NetworkQemuDataTable;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Network\Pages\NetworkLxcDataTable;
+
+
 
 class VmUpdateForm extends  BaseStandaloneFormExtSections implements ClientArea
 {
@@ -36,13 +42,11 @@ class VmUpdateForm extends  BaseStandaloneFormExtSections implements ClientArea
             //rightSection
             $rightSection = new HalfPageSection('rightSection');
             $rightSection->setMainContainer($this->mainContainer);
-            //network
-            $rightSection->addSection((new VirtualNetworkSection())->setMainContainer($this->mainContainer));
             //kvm
             if($this->configuration()->isQemu()){
                 $this->addSection((new Qemu\GeneralCombinedSection())->setMainContainer($this->mainContainer));
                 //disk
-                $rightSection->addSection((new Qemu\AdditionalDiskSection())->setMainContainer($this->mainContainer));
+                $rightSection->addSection((new DiskDataTable())->setMainContainer($this->mainContainer));
             }
             //lxc
             if($this->configuration()->isLxc()){
@@ -50,13 +54,12 @@ class VmUpdateForm extends  BaseStandaloneFormExtSections implements ClientArea
                 //disk
                 $rightSection->addSection((new Lxc\AdditionalDiskSection())->setMainContainer($this->mainContainer));
             }
+            //network
+            $rightSection->addSection((new VirtualInterfaceDataTable())->setMainContainer($this->mainContainer));
+            //interfaces
+//            $rightSection->addSection((new NetworkQemuDataTable())->setMainContainer($this->mainContainer));
             $this->addSection($rightSection);
-
-
-
         }
         $this->loadDataToForm();
     }
-
-
 }

+ 7 - 178
app/UI/VmUpdate/Providers/VmUpdateProvider.php

@@ -52,7 +52,8 @@ class VmUpdateProvider extends VmCreateProvider
         $this->data =  $this->vmModel->toArray();
         $vm = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm();
         $config = $vm->config();
-        $this->data['password'] = $this->vmModel->getPassword();
+        $this->data['ciuser'] = $config['ciuser'];
+        $this->data['cipassword'] = $config['cipassword'];
         $this->data['description'] = html_entity_decode($config['description']);
         $this->data['searchdomain'] = $config['searchdomain'];
         $ns = explode(" ",$config['nameserver']);
@@ -63,37 +64,6 @@ class VmUpdateProvider extends VmCreateProvider
         $this->data['ipv4'] = $this->vmModel->ipv4Addresses->count();
         $this->data['ipv6'] = $this->vmModel->ipv6Addresses->count();
          */
-        //Boot order
-        if($vm instanceof Kvm){
-            $bootOrder                           = $vm->getBootOrder();
-            $this->data['bootOrder0']            = $bootOrder[0];
-            $this->data['bootOrder1']            = $bootOrder[1];
-            $this->data['bootOrder2']            = $bootOrder[2];
-            $options                             = [
-                0   => sl("lang")->tr("None"),
-                "c" => sl("lang")->tr("Disk"),
-                "d" => sl("lang")->tr("CD-ROM"),
-                "n" => sl("lang")->tr("Network"),
-            ];
-            if(version_compare($this->api()->getVersion(), "6.3", '>=')
-            && !in_array("c", (array) $bootOrder )){
-                $cdrom = $vm->cdrom();
-                $nd = $vm->getNetworkDevices();
-                $options                             = [
-                    0   => sl("lang")->tr("None"),
-                    $vm->getMasterHardDisk()->getId() => sl("lang")->tr("Disk"),
-                ];
-                if($cdrom['bus']){
-                    $options[$cdrom['bus']] = sl("lang")->tr("CD-ROM");
-                }
-                if($nd[0] instanceof  NetworkDeviceKvm){
-                    $options[$nd[0]->getId()] = sl("lang")->tr("Network");
-                }
-            }
-            $this->availableValues['bootOrder0'] = $options;
-            $this->availableValues['bootOrder1'] = $options;
-            $this->availableValues['bootOrder2'] = $options;
-        }
         //sshkeys
         $this->data['sshkeys'] = rawurldecode($vm->config()['sshkeys']);
         //cpu Priority
@@ -159,25 +129,6 @@ class VmUpdateProvider extends VmCreateProvider
             {
                 $vm->updateCdrom($this->formData['iso']);
             }
-            //Boot order
-            $bootOrder = null;
-            $order = [];
-            for ($i = 0; $i <= 2; $i++)
-            {
-                if ($this->formData['bootOrder' . $i])
-                {
-                    $bootOrder .= $this->formData['bootOrder' . $i];
-                    if(!in_array($this->formData['bootOrder' . $i],["c","d","n"])){
-                        $order[] = $this->formData['bootOrder' . $i];
-                    }
-                }
-            }
-            if(version_compare($this->api()->getVersion(), "6.3", '>=') && !empty($order)){
-                //order=scsi0;ide0;ide1;net0
-                $vm->updateConfig(['boot' => "order=".implode(";", $order)]);
-            }else{
-                $vm->changeBootOrder($bootOrder);
-            }
             //sshkeys
             if($this->configuration()->isPermissionSshkeys()){
                 if ($this->formData['sshkeys'])
@@ -193,8 +144,11 @@ class VmUpdateProvider extends VmCreateProvider
             Api::beginTransaction();
             DB::beginTransaction();
             $this->fillVmModel();
-            if($this->getFormDataValues()['password']){
-                $this->vmModel->setPassword($this->getFormDataValues()['password']);
+            if($this->getFormDataValues()['ciuser']){
+                $vm->updateConfig(["ciuser" => $this->formData['ciuser']]);
+            }
+            if($this->getFormDataValues()['cipassword']){
+                $vm->updateConfig(["cipassword" => $this->formData['cipassword']]);
             }
             if($this->configuration()->isCalculateSocketsAndCores()){
                 $this->calculateSocketsAndCores();
@@ -206,18 +160,6 @@ class VmUpdateProvider extends VmCreateProvider
             if($this->configuration()->isLxc()){
                 fire(new LxcUpdateEvent($this->vmModel, $this->formData));
             }
-            if ($this->configuration()->isDetailsCombinedView()) {
-                //virtual interfaces
-                $this->virtualNetworkUpdate();
-                //IP Set
-                if ($this->configuration()->isIpsetIpFilter()){
-                    $ipSetFilterService =  new IpSetIpFilterService();
-                    $ipSetFilterService->create();
-                }
-                //disks
-                $this->disksUpdate();
-
-            }
             $agentEnabled = (new AgentService())->isEnabled();
             if($agentEnabled && $this->configuration()->isAgentConfigureNetwork()){
                 queue(ConfigureNetworkJob::class,
@@ -252,117 +194,4 @@ class VmUpdateProvider extends VmCreateProvider
         }
 
     }
-
-    private function virtualNetworkUpdate()
-    {
-        try {
-
-            $viIds = [];
-            //delete
-            for ($i = 0; $i <= 20; $i++) {
-                if ($this->formData['virtualInterface' . $i]) {
-                    $viIds[] = $this->formData['virtualInterface' . $i]['id'];
-                }
-            }
-            $virtualInterfaces = VirtualInterface::ofHostingId($this->getWhmcsParamByKey('serviceid'))
-                ->ofVmId($this->vmModel->id);
-            if ($viIds) {
-                $virtualInterfaces->notId($viIds);
-            }
-            $this->networkService->deleteByIpAddresses($virtualInterfaces->get());
-            DB::commit();
-            DB::beginTransaction();
-            //create
-            $newVi = [];
-            for ($i = 1; $i <= 20; $i++) {
-                if (!$this->formData['virtualNetwork' . $i]) {
-                    continue;
-                }
-                $ip = $this->formData['virtualNetwork' . $i]['ip'];
-                $virtualNetworkId = $this->formData['virtualNetwork' . $i]['id'];
-                //lock public ip
-                if ($virtualNetworkId == 'public') {
-                    VmIpAddress::ofHostingId($this->getWhmcsParamByKey('serviceid'))
-                        ->ofIp($ip)
-                        ->update(['vm_id' => $this->vmModel->id]);
-                }
-                $vi = new VirtualInterface();
-                $vi->ip = $ip;
-                $vi->ip_long = ip2long($ip);
-                $vi->vm_id = $this->vmModel->id;
-                $vi->vn_id = $virtualNetworkId == "public" ? 0 : $virtualNetworkId;
-                $vi->hosting_id = $this->getWhmcsParamByKey('serviceid');
-                $vi->save();
-                $newVi[] = $vi;
-                $viIds[] = $vi->id;
-            }
-            if ($newVi) {
-                $config = (new VirtualInterfaceConverter($newVi, \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm()))->asConfig();
-                \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm()->updateConfig($config);
-            }
-            DB::commit();
-        } catch (\Exception $ex) {
-            DB::rollBack();
-            Api::commit();
-            throw $ex;
-        }
-    }
-
-    private function disksUpdate()
-    {
-        $vm = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm();
-        $vmModel  = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel();
-        $additonalDiskService = $this->configuration()->isQemu() ? new AdditionalDiskService() : new AdditionalMountPointService();
-        //Update
-        $diskIds=[];
-        $resizeTask = null;
-        for ($i = 0; $i <= 20; $i++) {
-            if ($this->formData['disks' . $i]) {
-                $id = $this->formData['disks' . $i]['id'];
-                $size = $this->formData['disks' . $i]['size'];
-                $backup = $this->formData['disks' . $i]['backup'] == "on" ? null : 0;
-                $mp =  $this->formData['disks' . $i]['mp'];
-                $hdd = $vm->getHardDiskRepostiory()->findById($id);
-                if($resizeTask && $this->configuration()->isLxc()){
-                    for($i=0;  $i<=15; $i++){
-                        if($vm->node()->task($resizeTask)->isDone()){
-                            $resizeTask = null;
-                            break;
-                        }
-                        sleep(1);
-                    }
-                }
-                //Backup
-                $hdd->setBackup($backup);
-                //mp
-                if($hdd instanceof MountPoint){
-                    $hdd->setBackup($this->formData['disks' . $i]['backup'] == "on" ? 1 : null);
-                    $hdd->setMp($mp);
-                }
-                $hdd->update();
-                //resize
-                if ((int)$hdd->getGb() < (int)$size)
-                {
-                    $size = "+" . abs((int)$size - (int)$hdd->getGb()) . "G";
-                    $resizeTask = $hdd->resize($size);
-                }
-                $diskIds[] = $id;
-            }
-        }
-        //delete
-        foreach ($vm->getHardDiskRepostiory()->fetch() as $disk){
-            if(!$disk->isMaster() && !in_array($disk->getId() ,$diskIds)){
-                $disk->delete();
-            }
-        }
-        $vm->getHardDiskRepostiory()->deleteUnused();
-        //Create
-        $additonalDiskService->create($this->formData);
-        //Update disk size
-        $vmModel->disks = $vm->getHardDiskRepostiory()->reset()->additionalSize();
-        $vmModel->save();
-
-    }
-
-
 }

+ 28 - 26
app/UI/VmUpdate/Sections/Qemu/GeneralSection.php

@@ -9,6 +9,7 @@ use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\HostnameValidator;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\IpAddressValidator;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\NumberValidator;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\SshPublicKeyValidator;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\UserValidator;
 use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\PasswordValidator;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Fields\Range;
 use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Fields\Select;
@@ -56,9 +57,16 @@ class GeneralSection extends BaseSection
             $field->notEmpty();
             $this->addField($field);
         }
+        //user
+        if($this->configuration()->isPermissionUsername()){
+            $field = new Text('ciuser');
+            $field->addValidator(new UserValidator());
+            $field->setDescription('description');
+            $this->addField($field);
+        }
         //password
         if($this->configuration()->isPermissionPassword()){
-            $field = new Text('password');
+            $field = new Text('cipassword');
             $field->addValidator( new PasswordValidator());
             $field->setDescription('description');
             $this->addField($field);
@@ -85,9 +93,16 @@ class GeneralSection extends BaseSection
         }
         //vcpus
         if($this->configuration()->isPermissionVcpus() || $this->configuration()->isCalculateSocketsAndCores()){
-            $field = new Range('vcpus',$this->resourceManager->vcpus()->getMin(), $this->resourceManager->vcpus()->free());
-            $field->addValidator(new NumberValidator($this->resourceManager->vcpus()->getMin(), $this->resourceManager->vcpus()->free(),true));
-            $field->setDescription('description');
+            if(!$vm->isRunning()) {
+                $field = new Range('vcpus',$this->resourceManager->vcpus()->getMin(), $this->resourceManager->vcpus()->free());
+                $field->addValidator(new NumberValidator($this->resourceManager->vcpus()->getMin(), $this->resourceManager->vcpus()->free(),true));
+                $field->setDescription('description');
+            } else {
+                $field = new Range('vcpus',$vm->config()['vcpus'], $this->resourceManager->vcpus()->free());
+                $field->addValidator(new NumberValidator($vm->config()['vcpus'], $this->resourceManager->vcpus()->free(),true));
+                $field->setDescription('Zur Reduzierung der CPUs muß die VM heruntergefahren sein!');
+            }
+            $field->setDefaultValue($vm->config()['vcpus']);
             $this->addField($field);
         }
         //cpu priority
@@ -117,18 +132,17 @@ class GeneralSection extends BaseSection
             $this->addField($field);
         }
         //memory
-        $field = new Range('memory', $this->resourceManager->memory()->getMin(), $this->resourceManager->memory()->free());
-        $field->addValidator(new NumberValidator($this->resourceManager->memory()->getMin(), $this->resourceManager->memory()->free(),true));
-        $field->setDefaultValue($this->configuration()->serverMemory->min);
-        $field->setDescription('description');
-        $this->addField($field);
-        if($this->configuration()->isDetailsCombinedView()){
-            //disk
-            $field = new Text('disk');
-            $field->addValidator(new NumberValidator($this->resourceManager->disk()->getMin(), $this->resourceManager->disk()->free(),true));
+        if(!$vm->isRunning()) {
+            $field = new Range('memory', $this->resourceManager->memory()->getMin(), $this->resourceManager->memory()->free());
+            $field->addValidator(new NumberValidator($this->resourceManager->memory()->getMin(), $this->resourceManager->memory()->free(),true));
             $field->setDescription('description');
-            $this->addField($field);
+        } else {
+            $field = new Range('memory', $vm->config()['memory'], $this->resourceManager->memory()->free());
+            $field->addValidator(new NumberValidator($vm->config()['memory'], $this->resourceManager->memory()->free(),true));
+            $field->setDescription('Zur Speicherreduzierung muß die VM heruntergefahren sein!');
         }
+        $field->setDefaultValue($vm->config()['memory']);
+        $this->addField($field);
         /**
          * @deprecated
         //ipv4
@@ -166,17 +180,5 @@ class GeneralSection extends BaseSection
             $field->setDescription('description');
             $this->addField($field);
         }
-        //boot device 1
-        $field = new Select("bootOrder0");
-        $field->notEmpty();
-        $this->addField($field);
-        //boot device 2
-        $field = new Select("bootOrder1");
-        $field->notEmpty();
-        $this->addField($field);
-        //boot device 3
-        $field = new Select("bootOrder2");
-        $field->notEmpty();
-        $this->addField($field);
     }
 }

+ 3 - 3
app/UI/Vms/Pages/VmsDataTable.php

@@ -98,10 +98,10 @@ class VmsDataTable extends DataTable implements ClientArea, AdminArea
         if(isAdmin()){
             $this->addColumn((new Column('vmid')));
         }
-        $this->addColumn((new Column('name')))
+        $this->addColumn((new Column('name'))->setOrderable('ASC'))
             ->addColumn((new Column('status')))
-            ->addColumn((new Column('vcpus')))
-            ->addColumn((new Column('memory')))
+            ->addColumn((new Column('vcpus'))->setOrderable())
+            ->addColumn((new Column('memory'))->setOrderable())
             ->addColumn((new Column('disk')))
             ->addColumn((new Column('osTemplate')));
     }

+ 1 - 1
core/UI/Widget/Forms/Fields/Range.php

@@ -39,7 +39,7 @@ class Range extends BaseField
         return $this->maxValue;
     }
 
-    public function setMaxValue($minValue)
+    public function setMaxValue($maxValue)
     {
         $this->maxValue = $maxValue;
     }

+ 132 - 18
langs/english.php

@@ -1293,6 +1293,7 @@ $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['taskHistoryTitle'] = 'T
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['virtualInterfaceDataTable'] = 'Virtual Network';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabTitle'] = 'Network';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['backupTabTitle'] = 'Backups';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabTitle'] = 'Snapshots';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['graphsTabTitle'] = 'Graphs';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['reinstallTabTitle'] = 'Reinstall';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['templatDataTableTitle'] = 'Reinstall';
@@ -1336,12 +1337,38 @@ $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStanda
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cpuPriority']['cpuPriority'] ='CPU Priority';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cpuPriority']['description'] = 'Provide CPU Priority';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['iso']['iso'] = 'ISO Image';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['ciuser']['ciuser'] = 'Username';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['ciuser']['description'] = 'Login Username';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cipassword']['cipassword'] = 'Password';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cipassword']['description'] = 'Login Password';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['password']['password'] = 'Login Password';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['password']['description'] = 'Login Password';
 $_LANG['Very Low']='Very Low';
 $_LANG['Low']='Low';
 $_LANG['Normal']='Normal';
 $_LANG['High']='High';
 $_LANG['Medium']='Very High';
 
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['diskDataTableTitle'] = 'Disks' ;
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['Adding, editing or removing disk will reboot the virtual machine.'] = 'Adding, editing or removing disk will reboot the virtual machine.';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['createDiskButton']['button']['createDiskButton']  = 'Add Hard Disk';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['bus'] = 'Bus';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['format'] = 'Format';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['backup'] = 'Backup';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['bytes'] = 'Size';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['updateDiskButton']['button']['updateDiskButton'] = 'Edit';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['deleteDiskButton']['button']['deleteDiskButton'] = 'Delete';
+
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['virtualInterfaceDataTableTitle'] = 'Virtual Networks' ;
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['createVirtualInterfaceButton']['button']['createVirtualInterfaceButton'] = 'Add New Virtual Network' ;
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['virtualInterfaceDeleteButton']['button']['virtualInterfaceDeleteButton'] = 'Delete';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['mac_address'] = 'Mac Address';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['hwaddr'] = 'Mac Address';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['subnet_mask'] = 'Subnet Mask';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['gateway'] = 'Gateway';
+
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualNetworkSection']['virtualNetworkSection']        = 'Virtual Networks'   ;
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualNetworkSection']['Add New Virtual Network']='Add New Virtual Network';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualNetworkSection']['Virtual Network']='Virtual Network';
@@ -1391,7 +1418,7 @@ $_LANG['serverCA']['vm']['updateDiskModal']['baseCancelButton']['title'] = 'Canc
 //add
 $_LANG['serverCA']['vm']['createDiskModal']['createDiskForm']['backup']['backup'] = 'Backup';
 $_LANG['serverCA']['vm']['createDiskModal']['modal']['createDiskModal'] = 'Add Hard Disk';
-$_LANG['serverCA']['vm']['createDiskModal']['createDiskForm']['size']['size'] = 'Size [GB]';
+$_LANG['serverCA']['vm']['createDiskModal']['createDiskForm']['additionalDiskSize']['additionalDiskSize'] = 'Size [GB]';
 $_LANG['serverCA']['vm']['createDiskModal']['createDiskForm']['bus']['bus'] = 'Bus';
 $_LANG['serverCA']['vm']['createDiskModal']['createDiskForm']['format']['format'] = 'Format';
 $_LANG['serverCA']['vm']['createDiskModal']['baseAcceptButton']['title'] = 'Add';
@@ -1405,25 +1432,25 @@ $_LANG['serverCA']['vm']['deleteDiskModal']['baseAcceptButton']['title'] = 'Conf
 $_LANG['serverCA']['vm']['deleteDiskModal']['baseCancelButton']['title'] = 'Cancel';
 $_LANG['The hard disk has been deleted successfully'] = 'The hard disk has been deleted successfully';
 //Virtual interfaces
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['createVirtualInterfaceButton']['button']['createVirtualInterfaceButton'] = 'Add New Virtual Network';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['name'] = 'Name';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['virtualInterfaceDeleteButton']['button']['virtualInterfaceDeleteButton'] = 'Delete';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['mac_address'] = 'Mac Address';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['hwaddr'] = 'Mac Address';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['subnet_mask'] = 'Subnet Mask';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['gateway'] = 'Gateway';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable'] = 'Interfaces';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['createVirtualInterfaceButton']['button']['createVirtualInterfaceButton'] = 'Add New Virtual Network';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['virtualInterfaceDeleteButton']['button']['virtualInterfaceDeleteButton'] = 'Delete';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['mac_address'] = 'Mac Address';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['hwaddr'] = 'Mac Address';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['subnet_mask'] = 'Subnet Mask';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['gateway'] = 'Gateway';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTableTitle'] = 'Interfaces';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkLxcDataTable'] = 'Interfaces';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable'] = 'Virtual Network';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['ip'] = 'IP';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['id'] = 'ID';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['firewall'] = 'Firewall';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['macAddress'] = 'Mac Address';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['gw'] = 'Gateway';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['rate'] = 'Rate';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTableTitle'] = 'Virtual Network';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['ip'] = 'IP';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['id'] = 'ID';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['firewall'] = 'Firewall';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['macAddress'] = 'Mac Address';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['gw'] = 'Gateway';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['rate'] = 'Rate';
 $_LANG['serverCA']['vm']['Disabled'] = 'Disabled';
 $_LANG['Unlimited'] = 'Unlimited';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['infoNetworkButton']['button']['infoNetworkButton'] = 'Network Details';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['infoNetworkButton']['button']['infoNetworkButton'] = 'Network Details';
 //details
 $_LANG['serverCA']['vm']['infoNetworkModal']['modal']['infoNetworkModal'] = 'Network Details';
 $_LANG['serverCA']['vm']['infoNetworkModal']['ID'] = 'ID';
@@ -1502,6 +1529,73 @@ $_LANG['serverCA']['vm']['deleteMassModal']['deleteMassForm']['confirmDeleteMass
 $_LANG['serverCA']['vm']['deleteMassModal']['baseAcceptButton']['title'] = 'Confirm';
 $_LANG['serverCA']['vm']['deleteMassModal']['baseCancelButton']['title']  = 'Cancel';
 $_LANG['The snapshots have been deleted successfully'] = 'The selected snapshots have been deleted successfully';
+// snapshotjobs
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTableTitle'] = 'Snapshot jobs';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['createJobButton']['button']['createJobButton'] = 'New job';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['deleteJobMassButton']['button']['deleteJobMassButton'] = 'Delete';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['vmstate'] = 'RAM';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['description'] = 'Description';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['rollbackButton ']['button']['rollbackJobButton'] = 'Rollback';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['updateJobButton']['button']['updateJobButton'] = 'Update';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['deleteJobButton']['button']['deleteJobButton'] = 'Delete';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['days'] = 'Time';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['created_at'] = 'Created at';
+$_LANG['serverCA']['vm']['hourly'] = 'hourly';
+$_LANG['serverCA']['vm']['daily'] = 'daily';
+$_LANG['serverCA']['vm']['Monday'] = 'Monday';
+$_LANG['serverCA']['vm']['Tuesday'] = 'Tuesday';
+$_LANG['serverCA']['vm']['Wednesday'] = 'Wednesday';
+$_LANG['serverCA']['vm']['Thursday'] = 'Thursday';
+$_LANG['serverCA']['vm']['Friday'] = 'Friday';
+$_LANG['serverCA']['vm']['Saturday'] = 'Saturday';
+$_LANG['serverCA']['vm']['Sunday'] = 'Sunday';
+$_LANG['serverCA']['vm']['createJobModal']['modal']['createJobModal'] = 'New snapshot job';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['period']['period'] = 'Period';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['run_every']['run_every'] = 'Run every';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['name']['name'] = 'Name';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['vmstate']['vmstate'] = 'Memory included';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['description']['description'] = 'Description';
+$_LANG['serverCA']['vm']['createJobModal']['baseAcceptButton']['title'] = 'Confirm';
+$_LANG['serverCA']['vm']['createJobModal']['baseCancelButton']['title'] = 'Cancel';
+$_LANG['serverCA']['vm']['createJobModal']['hourly'] = 'hourly';
+$_LANG['serverCA']['vm']['createJobModal']['daily'] = 'daily';
+$_LANG['serverCA']['vm']['createJobModal']['Monday'] = 'Monday';
+$_LANG['serverCA']['vm']['createJobModal']['Tuesday'] = 'Tuesday';
+$_LANG['serverCA']['vm']['createJobModal']['Wednesday'] = 'Wednesday';
+$_LANG['serverCA']['vm']['createJobModal']['Thursday'] = 'Thursday';
+$_LANG['serverCA']['vm']['createJobModal']['Friday'] = 'Friday';
+$_LANG['serverCA']['vm']['createJobModal']['Saturday'] = 'Saturday';
+$_LANG['serverCA']['vm']['createJobModal']['Sunday'] = 'Sunday';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['days']['days'] = 'Days';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['start_time']['start_time'] = 'Start Time';
+$_LANG['Snapshot Job :name: has been created successfully'] = 'Snapshot job :name: has been created successfully';
+$_LANG['serverCA']['vm']['Every :run_every: hour'] ='Every :run_every: hour';
+$_LANG['serverCA']['vm']['Every :run_every: hours'] ='Every :run_every: hours';
+$_LANG['serverCA']['vm']['updateJobModal']['modal']['updateJobModal'] = 'Update snapshot job';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['period']['period'] = 'Period';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['run_every']['run_every'] = 'Run every';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['name']['name'] = 'Name';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['vmstate']['vmstate'] = 'include memory';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['description']['description'] = 'Description';
+$_LANG['serverCA']['vm']['updateJobModal']['baseAcceptButton']['title'] = 'Confirm';
+$_LANG['serverCA']['vm']['updateJobModal']['baseCancelButton']['title'] = 'Cancel';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['days']['days'] = 'Days';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['start_time']['start_time'] = 'Start Time';
+$_LANG['Snapshot Job :name: has updated successfully'] = 'Snapshot Job :name: has updated successfully';
+$_LANG['serverCA']['vm']['deleteJobModal']['modal']['deleteJobModal'] = 'delete Snapshot Job';
+$_LANG['serverCA']['vm']['deleteJobModal']['deleteJobForm']['conforimJobDelete'] = 'Do You really want to delete snapshot job :name: ?';
+$_LANG['serverCA']['vm']['deleteJobModal']['baseAcceptButton']['title'] =  'Confirm';
+$_LANG['serverCA']['vm']['deleteJobModal']['baseCancelButton']['title'] = 'Cancel';
+$_LANG['Snapshot Job :name: has been deleted successfully'] = 'Snapshot job :name: has been deleted successfully';
+$_LANG['serverCA']['vm']['The maximum number of snapshot jobs has been exceeded. Please remove the old snapshot jobs.'] = 'The maximum number of snapshot jobs has been exceeded. Please remove the old snapshot jobs.';
+$_LANG['serverCA']['vm']['Your snapshot limit is :snapshotFilesLimit:. When you exceed this limit, the last snapshot will be replaced with a new one.'] = 'Your snapshot limit is :snapshotFilesLimit:. When you exceed this limit, the last snapshot will be replaced with a new one.';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['modal']['deleteJobMassModal'] = 'delete jobs';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['deleteJobMassForm']['confirmDeleteJobMass'] = 'Do You really want to delete selected snapshot jobs?';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['baseAcceptButton']['title'] =  'Confirm';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['baseCancelButton']['title'] =  'Cancel';
+$_LANG['The selected snapshot jobs have been deleted successfully'] = 'The selected snapshot jobs have been deleted successfully';
+
 /**********************************************************************************************************************
  *                                                 VM Backups                                          *
  ********************************************************************************************************************* */
@@ -1589,6 +1683,7 @@ $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['dow']['dow'] = '
 $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['compress']['compress'] = 'Compress';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['mode']['mode'] = 'Mode';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['mailto']['mailto'] = 'Email Notification';
+$_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['confirmUpdate'] = 'Edit Backup Job';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['baseAcceptButton']['title'] = 'Save Changes';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['baseCancelButton']['title'] = 'Cancel';
 $_LANG['The backup job has been updated successfully'] = 'The backup job has been updated successfully';
@@ -1952,6 +2047,25 @@ $_LANG['serverCA']['home']['mainContainer']['customTemplateDataTable']['table'][
 $_LANG['serverCA']['home']['mainContainer']['customTemplateDataTable']['updateButton']['button']['updateButton'] = 'Edit';
 $_LANG['serverCA']['home']['mainContainer']['customTemplateDataTable']['deleteButton']['button']['deleteButton'] = 'Delete';
 //
+$_LANG['serverCA']['home']['createModal']['modal']['createModal'] = 'New Template';
+$_LANG['serverCA']['home']['createModal']['createForm']['confirmCreate'] = 'The Virtual Machine will be converted to a template';
+$_LANG['serverCA']['home']['createModal']['createForm']['vmId']['vmId'] = 'Virtual Machine';
+$_LANG['serverCA']['home']['createModal']['createForm']['description']['description'] = 'Description';
+$_LANG['serverCA']['home']['createModal']['baseAcceptButton']['title'] = 'Confirm';
+$_LANG['serverCA']['home']['createModal']['baseCancelButton']['title'] = 'Cancel';
+$_LANG['Virtual Machine :name: %s has been converted to template'] = 'Virtual Machine :name: %s has been converted to template';
+//Edit
+$_LANG['serverCA']['home']['updateModal']['modal']['updateModal'] = 'Edit Template';
+$_LANG['serverCA']['home']['updateModal']['updateForm']['description']['description'] = 'Description';
+$_LANG['serverCA']['home']['updateModal']['baseAcceptButton']['title'] = 'Save Changes';
+$_LANG['serverCA']['home']['updateModal']['baseCancelButton']['title'] = 'Cancel';
+$_LANG['The Template has been updated successfully'] = 'The template has been updated successfully' ;
+//Delete
+$_LANG['serverCA']['home']['deleteModal']['modal']['deleteModal'] = 'Delete Template';
+$_LANG['serverCA']['home']['deleteModal']['deleteForm']['confirmDelete'] = 'Are you sure you want to delete the selected template?';
+$_LANG['serverCA']['home']['deleteModal']['baseAcceptButton']['title'] = 'Confirm';
+$_LANG['serverCA']['home']['deleteModal']['baseCancelButton']['title'] = 'Cancel';
+$_LANG['The Template has been deleted successfully'] = 'The selected template has been deleted successfully';
 //New Template
 $_LANG['serverCA']['customTemplate']['createModal']['modal']['createModal'] = 'New Template';
 $_LANG['serverCA']['customTemplate']['createModal']['createForm']['confirmCreate'] = 'The Virtual Machine will be converted to a template';
@@ -1971,4 +2085,4 @@ $_LANG['serverCA']['customTemplate']['deleteModal']['modal']['deleteModal'] = 'D
 $_LANG['serverCA']['customTemplate']['deleteModal']['deleteForm']['confirmDelete'] = 'Are you sure you want to delete the selected template?';
 $_LANG['serverCA']['customTemplate']['deleteModal']['baseAcceptButton']['title'] = 'Confirm';
 $_LANG['serverCA']['customTemplate']['deleteModal']['baseCancelButton']['title'] = 'Cancel';
-$_LANG['The Template has been deleted successfully']='The selected template has been deleted successfully';
+$_LANG['The Template has been deleted successfully'] = 'The selected template has been deleted successfully';

+ 165 - 27
langs/german.php

@@ -22,11 +22,11 @@ $_LANG['Next'] = 'Next';
 $_LANG['searchPlacecholder'] = 'Search...';
 $_LANG['invalidServerType'] = 'Please set up the Proxmox Cloud VPS server first';
 
-$_LANG['noDataAvalible'] = 'No Data Available';
-$_LANG['datatableItemsSelected'] = 'Items Selected';
-$_LANG['validationErrors']['emptyField'] = 'This field cannot be empty';
-$_LANG['bootstrapswitch']['disabled'] = 'Disabled';
-$_LANG['bootstrapswitch']['enabled'] = 'Enabled';
+$_LANG['noDataAvalible'] = 'Keine Daten verfügbar';
+$_LANG['datatableItemsSelected'] = 'Elemente ausgewählt';
+$_LANG['validationErrors']['emptyField'] = 'Dieses Feld darf nicht leer sein';
+$_LANG['bootstrapswitch']['disabled'] = 'Deaktiviert';
+$_LANG['bootstrapswitch']['enabled'] = 'Aktiviert';
 
 $_LANG['addonCA']['pageNotFound']['title'] = 'Page Not Found';
 $_LANG['addonCA']['pageNotFound']['description'] = 'The provided URL does not exist on this page. If you are sure there has been an error, please contact support.';
@@ -629,6 +629,9 @@ $_LANG['serverAA']['product']['mainContainer']['mainForm']['advancedSection']['r
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['advancedSection']['rightSection']['customconfigoption[bwlimit]']['tip'] = 'Override I/O bandwidth limit (in KiB/s)';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['advancedSection']['rightSection']['customconfigoption[bios]']['customconfigoption[bios]'] = 'BIOS';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['advancedSection']['rightSection']['customconfigoption[bios]']['tip'] = 'Select BIOS implementation.';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['advancedSection']['leftSection']['customconfigoption[machine]']['customconfigoption[machine]'] = 'Qemu Machine Type';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['advancedSection']['leftSection']['customconfigoption[machine]']['tip'] = 'Specify the Qemu machine type
+(pc|pc(-i440fx)?-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|q35|pc-q35-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|virt(?:-\d+(\.\d+)+)?(\+pve\d+)?)';
 $_LANG['serverAA']['configOptions']['SeaBIOS'] = 'SeaBIOS';
 $_LANG['serverAA']['configOptions']['OVMF (UEFI)'] = 'OVMF (UEFI)';
 //High Availability Cluster
@@ -708,6 +711,10 @@ $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection'][
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionTaskHistory]']['tip'] = 'If enabled, a client will be able to access the record of all actions set to be executed on their server along with their status';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionSnapshot]']['customconfigoption[permissionSnapshot]'] = 'Snapshots';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionSnapshot]']['tip'] = 'If enabled, a client will be able to take snapshots';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionSnapshotJob]']['customconfigoption[permissionSnapshotJob]'] = 'Snapshot Aufgaben';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionSnapshotJob]']['tip'] = 'Sofern aktiviert, kann der Kunde Snapshot Aufgaben erstellen';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['rightSection']['customconfigoption[permissionSnapshotJobPeriod][]']['customconfigoption[permissionSnapshotJobPeriod][]'] = 'Snapshot Aufgabenperiode';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['rightSection']['customconfigoption[permissionSnapshotJobPeriod][]']['tip'] = 'Wähle die Snapshot Aufgabenperiode, welche für den Kunden verfügbar sein soll.';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionFirewallOption]']['customconfigoption[permissionFirewallOption]'] = 'Firewall Option';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionFirewallOption]']['tip'] = 'If enabled, a client will be able to set up firewall options';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionSshkeys]']['customconfigoption[permissionSshkeys]'] = 'SSH Keys';
@@ -774,6 +781,8 @@ $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection'][
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[permissionFirewalOptions][]']['description'] = 'Select the firewall options that should be available in client area.';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['rightSection']['customconfigoption[permissionSwap]']['customconfigoption[permissionSwap]'] = 'SWAP';
 $_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['rightSection']['customconfigoption[permissionSwap]']['tip'] = 'If enabled, a client will be able to set up SWAP';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[cloudInitScript][]']['customconfigoption[cloudInitScript][]'] = 'Cloud-Init Script';
+$_LANG['serverAA']['product']['mainContainer']['mainForm']['clientAreaSection']['leftSection']['customconfigoption[cloudInitScript][]']['tip'] = 'Select Cloud-Init scripts that should be available in the client area';
 $_LANG['Enable/Disable Firewall'] = 'Enable/Disable Firewall';
 $_LANG['DHCP'] = 'DHCP';
 $_LANG['Allow Router Advertisement'] = 'Allow Router Advertisement';
@@ -1026,7 +1035,7 @@ $_LANG['serverCA']['home']['mainContainer']['dataTable']['table']['memory'] = 'M
 $_LANG['serverCA']['home']['mainContainer']['dataTable']['table']['disk'] = 'Disk';
 $_LANG['serverCA']['home']['mainContainer']['dataTable']['table']['osTemplate'] = 'OS Template';
 $_LANG['serverCA']['home']['mainContainer']['dataTable']['consoleButton']['button']['consoleButton'] = 'Serverkonsole';
-$_LANG['serverCA']['home']['mainContainer']['dataTable']['redirectButton']['button']['redirectButton'] = 'VMs verwalten';
+$_LANG['serverCA']['home']['mainContainer']['dataTable']['redirectButton']['button']['redirectButton'] = 'VM verwalten';
 $_LANG['serverCA']['home']['mainContainer']['dataTable']['deleteButton']['button']['deleteButton'] = 'Löschen';
 //
 $_LANG['serverAA']['vms']['mainContainer']['dataTable']['table']['vmid'] = 'VmID';
@@ -1039,7 +1048,7 @@ $_LANG['serverCA']['vms']['mainContainer']['dataTable']['table']['memory'] = 'Me
 $_LANG['serverCA']['vms']['mainContainer']['dataTable']['table']['disk'] = 'Disk';
 $_LANG['serverCA']['vms']['mainContainer']['dataTable']['table']['osTemplate'] = 'OS Template';
 $_LANG['serverCA']['vms']['mainContainer']['dataTable']['consoleButton']['button']['consoleButton'] = 'Serverkonsole';
-$_LANG['serverCA']['vms']['mainContainer']['dataTable']['redirectButton']['button']['redirectButton'] = 'VMs verwalten';
+$_LANG['serverCA']['vms']['mainContainer']['dataTable']['redirectButton']['button']['redirectButton'] = 'VM verwalten';
 $_LANG['serverCA']['vms']['mainContainer']['dataTable']['deleteButton']['button']['deleteButton'] = 'Löschen';
 //
 $_LANG['stopped'] = 'gestoppt';
@@ -1177,6 +1186,8 @@ $_LANG['serverCA']['vm']['mainContainer']['baseStandaloneFormExtSections']['netd
 $_LANG['serverCA']['vm']['mainContainer']['baseStandaloneFormExtSections']['netdisk']['additionalDiskSection']['additional_disk_add_info'] = 'Klicken Sie auf die blaue Schaltfläche, um eine zusätzliche Festplatte hinzuzufügen';
 $_LANG['serverCA']['vm']['mainContainer']['baseStandaloneFormExtSections']['generalSection']['swap']['swap'] ='SWAP';
 $_LANG['serverCA']['vm']['mainContainer']['baseStandaloneFormExtSections']['generalSection']['swap']['description']='SWAP';
+$_LANG['serverCA']['vm']['mainContainer']['baseStandaloneFormExtSections']['generalSection']['cloudInitScript']['cloudInitScript']= 'Cloud-Init Script';
+$_LANG['serverCA']['vm']['mainContainer']['baseStandaloneFormExtSections']['generalSection']['cloudInitScript']['description'] = 'Cloud-Init Script auswählen ';
 $_LANG['serverCA']['vm']['mainContainer']['baseStandaloneFormExtSections']['netdisk']['additionalDiskSection']['additionalDiskMp']['additionalDiskMp'] ='Path';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['password']['password'] = 'Passwort';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['password']['description'] = 'VM Passwort';
@@ -1285,6 +1296,7 @@ $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['taskHistoryTitle'] = 'A
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['virtualInterfaceDataTable'] = 'Netzwerke';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabTitle'] = 'Netzwerk';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['backupTabTitle'] = 'Backups';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabTitle'] = 'Snapshots';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['graphsTabTitle'] = 'Graphen';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['reinstallTabTitle'] = 'Neu installieren';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['templatDataTableTitle'] = 'Neu installieren';
@@ -1328,12 +1340,39 @@ $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStanda
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cpuPriority']['cpuPriority'] ='CPU Priorität';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cpuPriority']['description'] = 'CPU Priorität angeben';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['iso']['iso'] = 'ISO Abbild';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['ciuser']['ciuser'] = 'Benutzername';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['ciuser']['description'] = 'Login Benutzernamen eingeben (Achtung, SSH Login mit root geht nur mit SSH-Key)';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cipassword']['cipassword'] = 'Passwort';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['cipassword']['description'] = 'Passwort eingeben';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['password']['password'] = 'Passwort';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['generalSection']['password']['description'] = 'Passwort eingeben';
 $_LANG['Very Low']='Sehr gering';
 $_LANG['Low']='Gering';
 $_LANG['Normal']='Normal';
 $_LANG['High']='Hoch';
 $_LANG['Medium']='Sehr hoch';
 
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['diskDataTableTitle'] = 'Festplatten' ;
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['createDiskButton']['button']['createDiskButton'] = 'Festplatte hinzufügen' ;
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['Adding, editing or removing disk will reboot the virtual machine.'] = 'Änderungen der Festplatte werden beim nächsten Neustart der VM übernommen.';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['bus'] = 'Bus';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['format'] = 'Format';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['backup'] = 'Backup';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['table']['bytes'] = 'Größe';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['updateDiskButton']['button']['updateDiskButton'] = 'Bearbeiten';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['diskDataTable']['deleteDiskButton']['button']['deleteDiskButton'] = 'Löschen';
+
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['virtualInterfaceDataTableTitle'] = 'Netzwerke' ;
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['createVirtualInterfaceButton']['button']['createVirtualInterfaceButton'] = 'Netzwerk hinzufügen' ;
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['virtualInterfaceDeleteButton']['button']['virtualInterfaceDeleteButton'] = 'Löschen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['mac_address'] = 'Mac Adresse';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['hwaddr'] = 'Mac Adresse';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['subnet_mask'] = 'Subnet Maske';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTable']['table']['gateway'] = 'Gateway';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualInterfaceDataTableTitle'] = 'Netzwerke';
+
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualNetworkSection']['virtualNetworkSection'] = 'Virtuelle Netzwerke' ;
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualNetworkSection']['Add New Virtual Network'] ='Virtuelles Netzwerk hinzufügen';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['detailTab']['baseStandaloneFormExtSections']['rightSection']['virtualNetworkSection']['Virtual Network'] ='Netzwerke';
@@ -1397,25 +1436,25 @@ $_LANG['serverCA']['vm']['deleteDiskModal']['baseAcceptButton']['title'] = 'Best
 $_LANG['serverCA']['vm']['deleteDiskModal']['baseCancelButton']['title'] = 'Abbruch';
 $_LANG['The hard disk has been deleted successfully'] = 'Die Festplatte wurde erfolgreich gelöscht';
 //Virtual interfaces
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['createVirtualInterfaceButton']['button']['createVirtualInterfaceButton'] = 'Neues virtuelles Netzwerk hinzufügen';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['name'] = 'Name';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['virtualInterfaceDeleteButton']['button']['virtualInterfaceDeleteButton'] = 'Löschen';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['mac_address'] = 'Mac Adresse';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['hwaddr'] = 'Mac Adresse';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['subnet_mask'] = 'Subnet Maske';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['gateway'] = 'Gateway';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable'] = 'Interfaces';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['createVirtualInterfaceButton']['button']['createVirtualInterfaceButton'] = 'Neues virtuelles Netzwerk hinzufügen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['virtualInterfaceDeleteButton']['button']['virtualInterfaceDeleteButton'] = 'Löschen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['mac_address'] = 'Mac Adresse';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['hwaddr'] = 'Mac Adresse';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['subnet_mask'] = 'Subnet Maske';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable']['table']['gateway'] = 'Gateway';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTableTitle'] = 'Interfaces';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkLxcDataTable'] = 'Interfaces';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTable'] = 'Netzwerke';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['ip'] = 'IP';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['id'] = 'ID';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['firewall'] = 'Firewall';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['macAddress'] = 'Mac Adresse';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['gw'] = 'Gateway';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['table']['rate'] = 'Rate';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['virtualInterfaceDataTableTitle'] = 'Netzwerke';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['ip'] = 'IP';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['id'] = 'ID';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['firewall'] = 'Firewall';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['macAddress'] = 'Mac Adresse';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['gw'] = 'Gateway';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['table']['rate'] = 'Rate';
 $_LANG['serverCA']['vm']['Disabled'] = 'Deaktiviert';
 $_LANG['Unlimited'] = 'Unlimitiert';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['dataTable']['infoNetworkButton']['button']['infoNetworkButton'] = 'Netzwerk Details';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['networkTabName']['networkQemuDataTable']['infoNetworkButton']['button']['infoNetworkButton'] = 'Netzwerk Details';
 //details
 $_LANG['serverCA']['vm']['infoNetworkModal']['modal']['infoNetworkModal'] = 'Netzwerk Details';
 $_LANG['serverCA']['vm']['infoNetworkModal']['ID'] = 'ID';
@@ -1452,10 +1491,10 @@ $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['de
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['table']['name'] = 'Name';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['table']['status'] = 'Status';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['table']['vmstate'] = 'RAM';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['table']['snaptime'] = 'Data/Status';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['table']['snaptime'] = 'Zeitstempel';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['table']['description'] = 'Beschreibung';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['rollbackButton ']['button']['rollbackButton'] = 'Wiederherstellen';
-$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['updateButton']['button']['updateButton'] = 'Aktualisieren';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['updateButton']['button']['updateButton'] = 'Bearbeiten';
 $_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotDataTable']['deleteButton']['button']['deleteButton'] = 'Löschen';
 //take
 $_LANG['serverCA']['vm']['createSnapshotModal']['modal']['createSnapshotModal'] = 'Snapshot erstellen';
@@ -1477,12 +1516,12 @@ $_LANG['serverCA']['vm']['rollbackSnapshotModal']['baseAcceptButton']['title'] =
 $_LANG['serverCA']['vm']['rollbackSnapshotModal']['baseCancelButton']['title'] = 'Abbruch';
 $_LANG['The snapshot has been rolled back successfully'] = 'Der Snapshot wurde erfolgreich wiederhergestellt';
 //Update
-$_LANG['serverCA']['vm']['updateSnapshotModal']['modal']['updateSnapshotModal'] = 'Aktualisieren';
+$_LANG['serverCA']['vm']['updateSnapshotModal']['modal']['updateSnapshotModal'] = 'Bearbeiten';
 $_LANG['serverCA']['vm']['updateSnapshotModal']['updateSnapshotForm']['description']['description'] = 'Beschreibung';
 $_LANG['serverCA']['vm']['updateSnapshotModal']['baseAcceptButton']['title'] = 'Bestätigen';
 $_LANG['serverCA']['vm']['updateSnapshotModal']['baseCancelButton']['title'] = 'Abbruch';
 $_LANG['The snapshot has been updated successfully'] = 'Der Snapshot wurde erfolgreich aktualisiert';
-$_LANG['FormValidators']['PleaseProvideASnapshotValue'] = 'Bitte geben Sie einen Namen ohne Leerzeichen oder Sonderzeichen an. Es sind nur Großbuchstaben und Zahlen zulässig';
+$_LANG['FormValidators']['PleaseProvideASnapshotValue'] = 'Bitte geben Sie einen mindestens 3 Zeichen langen Namen ohne Leerzeichen oder Sonderzeichen an. Es sind nur Buchstaben und Zahlen zulässig';
 //Delete
 $_LANG['serverCA']['vm']['deleteSnapshotModal']['modal']['deleteSnapshotModal'] = 'Snapshot löschen';
 $_LANG['serverCA']['vm']['deleteSnapshotModal']['deleteSnapshotForm']['confirmDelete'] = 'Sind Sie sicher, dass Sie diesen Snapshot löschen möchten?';
@@ -1494,6 +1533,85 @@ $_LANG['serverCA']['vm']['deleteMassModal']['deleteMassForm']['confirmDeleteMass
 $_LANG['serverCA']['vm']['deleteMassModal']['baseAcceptButton']['title'] = 'Bestätigen';
 $_LANG['serverCA']['vm']['deleteMassModal']['baseCancelButton']['title']  = 'Abbruch';
 $_LANG['The snapshots have been deleted successfully'] = 'Die ausgewählten Snapshots wurden erfolgreich gelöscht';
+
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTableTitle'] = 'Snapshots';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['createSnapshotButton']['button']['createSnapshotButton']  = 'Snapshot erstellen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['deleteMassButton']['button']['deleteMassButton'] = 'Löschen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['table']['status'] = 'Status';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['table']['vmstate'] = 'RAM';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['table']['snaptime'] = 'Zeitstempel';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['table']['description'] = 'Beschreibung';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['rollbackButton ']['button']['rollbackButton'] = 'Wiederherstellen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['updateButton']['button']['updateButton'] = 'Bearbeiten';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['snapshotDataTable']['deleteButton']['button']['deleteButton'] = 'Löschen';
+// snapshotjobs
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTableTitle'] = 'Snapshot Aufträge';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['createJobButton']['button']['createJobButton'] = 'Neuer Auftrag';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['deleteJobMassButton']['button']['deleteJobMassButton'] = 'Löschen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['name'] = 'Name';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['vmstate'] = 'RAM';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['description'] = 'Beschreibung';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['rollbackButton ']['button']['rollbackJobButton'] = 'Wiederherstellen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['updateJobButton']['button']['updateJobButton'] = 'Bearbeiten';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['deleteJobButton']['button']['deleteJobButton'] = 'Löschen';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['days'] = 'Zeit';
+$_LANG['serverCA']['vm']['mainContainer']['tabsWidget']['snapshotTabName']['jobDataTable']['table']['created_at'] = 'Erstellt am';
+$_LANG['serverCA']['vm']['hourly'] = 'Stündlich';
+$_LANG['serverCA']['vm']['daily'] = 'Täglich';
+$_LANG['serverCA']['vm']['Monday'] = 'Montag';
+$_LANG['serverCA']['vm']['Tuesday'] = 'Dienstag';
+$_LANG['serverCA']['vm']['Wednesday'] = 'Mittwoch';
+$_LANG['serverCA']['vm']['Thursday'] = 'Donnerstag';
+$_LANG['serverCA']['vm']['Friday'] = 'Freitag';
+$_LANG['serverCA']['vm']['Saturday'] = 'Samstag';
+$_LANG['serverCA']['vm']['Sunday'] = 'Sonntag';
+$_LANG['serverCA']['vm']['createJobModal']['modal']['createJobModal'] = 'Neuer Snapshot Auftrag';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['period']['period'] = 'Periode';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['run_every']['run_every'] = 'Ausführen alle';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['name']['name'] = 'Name';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['vmstate']['vmstate'] = 'RAM inkludieren';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['description']['description'] = 'Beschreibung';
+$_LANG['serverCA']['vm']['createJobModal']['baseAcceptButton']['title'] = 'Bestätigen';
+$_LANG['serverCA']['vm']['createJobModal']['baseCancelButton']['title'] = 'Abbrechen';
+$_LANG['serverCA']['vm']['createJobModal']['hourly'] = 'Stündlich';
+$_LANG['serverCA']['vm']['createJobModal']['daily'] = 'Täglich';
+$_LANG['serverCA']['vm']['createJobModal']['Monday'] = 'Montag';
+$_LANG['serverCA']['vm']['createJobModal']['Tuesday'] = 'Dienstag';
+$_LANG['serverCA']['vm']['createJobModal']['Wednesday'] = 'Mittwoch';
+$_LANG['serverCA']['vm']['createJobModal']['Thursday'] = 'Donnerstag';
+$_LANG['serverCA']['vm']['createJobModal']['Friday'] = 'Freitag';
+$_LANG['serverCA']['vm']['createJobModal']['Saturday'] = 'Samstag';
+$_LANG['serverCA']['vm']['createJobModal']['Sunday'] = 'Sonntag';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['days']['days'] = 'Tage';
+$_LANG['serverCA']['vm']['createJobModal']['createJobForm']['start_time']['start_time'] = 'Startzeit';
+$_LANG['Snapshot Job :name: has been created successfully'] ='Der Snapshot Auftrag :name: wurde erfolgreich erstellt';
+$_LANG['serverCA']['vm']['Every :run_every: hour'] ='Jede :run_every: Stunde';
+$_LANG['serverCA']['vm']['Every :run_every: hours'] ='Alle :run_every: Stunden';
+$_LANG['serverCA']['vm']['updateJobModal']['modal']['updateJobModal'] = 'Snapshot Auftrag bearbeiten';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['period']['period'] = 'Periode';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['run_every']['run_every'] = 'Ausführen alle';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['name']['name'] = 'Name';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['vmstate']['vmstate'] = 'RAM inkludieren';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['description']['description'] = 'Beschreibung';
+$_LANG['serverCA']['vm']['updateJobModal']['baseAcceptButton']['title'] = 'Bestätigen';
+$_LANG['serverCA']['vm']['updateJobModal']['baseCancelButton']['title'] = 'Abbrechen';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['days']['days'] = 'Tage';
+$_LANG['serverCA']['vm']['updateJobModal']['updateJobForm']['start_time']['start_time'] = 'Startzeit';
+$_LANG['Snapshot Job :name: has updated successfully'] = 'Der Snapshot Auftrag :name: wurde erfolgreich bearbeitet';
+$_LANG['serverCA']['vm']['deleteJobModal']['modal']['deleteJobModal'] = 'Snapshot Auftrag löschen';
+$_LANG['serverCA']['vm']['deleteJobModal']['deleteJobForm']['conforimJobDelete'] = 'Möchten Sie den Snapshot Auftrag :name: wirklich löschen?';
+$_LANG['serverCA']['vm']['deleteJobModal']['baseAcceptButton']['title'] =  'Bestätigen';
+$_LANG['serverCA']['vm']['deleteJobModal']['baseCancelButton']['title'] = 'Abbrechen';
+$_LANG['Snapshot Job :name: has been deleted successfully'] = 'Der Snapshot Auftrag :name: wurde erfolgreich gelöscht';
+$_LANG['serverCA']['vm']['The maximum number of snapshot jobs has been exceeded. Please remove the old snapshot jobs.'] = 'Das Maximum an Snapshot Aufträgen wurde erreicht. Bitte entfernen Sie alte Aufträge.';
+$_LANG['serverCA']['vm']['Your snapshot limit is :snapshotFilesLimit:. When you exceed this limit, the last snapshot will be replaced with a new one.'] = 'Ihr Snapshot Limit ist :snapshotFilesLimit:. Wenn Sie dieses Limit erreichen, wird der letzte Snapshot überschrieben.';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['modal']['deleteJobMassModal'] = 'Aufträge löschen';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['deleteJobMassForm']['confirmDeleteJobMass'] = 'Möchten Sie die ausgewählten Snapshot Aufträge wirklich löschen?';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['baseAcceptButton']['title'] =  'Bestätigen';
+$_LANG['serverCA']['vm']['deleteJobMassModal']['baseCancelButton']['title'] =  'Abbrechen';
+$_LANG['The selected snapshot jobs have been deleted successfully'] = 'Die ausgewählten Snapshot Aufträge wurden erfolgreich gelöscht';
+
 /**********************************************************************************************************************
  *                                                 VM Backups                                          *
  ********************************************************************************************************************* */
@@ -1581,6 +1699,7 @@ $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['dow']['dow'] = '
 $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['compress']['compress'] = 'Komprimieren';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['mode']['mode'] = 'Modus';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['mailto']['mailto'] = 'Email Benachrichtigung';
+$_LANG['serverCA']['vm']['updateBackupJobModal']['updateForm']['confirmUpdate'] = 'Sicherungsauftrag ändern';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['baseAcceptButton']['title'] = 'Speichern';
 $_LANG['serverCA']['vm']['updateBackupJobModal']['baseCancelButton']['title'] = 'Abbruch';
 $_LANG['The backup job has been updated successfully'] = 'Die Sicherungsaufgabe wurde erfolgreich geändert';
@@ -1942,6 +2061,25 @@ $_LANG['serverCA']['home']['mainContainer']['customTemplateDataTable']['table'][
 $_LANG['serverCA']['home']['mainContainer']['customTemplateDataTable']['updateButton']['button']['updateButton'] = 'Bearbeiten';
 $_LANG['serverCA']['home']['mainContainer']['customTemplateDataTable']['deleteButton']['button']['deleteButton'] = 'Löschen';
 //
+$_LANG['serverCA']['home']['createModal']['modal']['createModal'] = 'Neues Template';
+$_LANG['serverCA']['home']['createModal']['createForm']['confirmCreate'] = 'Die VM wird in ein Template konvertiert';
+$_LANG['serverCA']['home']['createModal']['createForm']['vmId']['vmId'] = 'VM ID';
+$_LANG['serverCA']['home']['createModal']['createForm']['description']['description'] = 'Beschreibung';
+$_LANG['serverCA']['home']['createModal']['baseAcceptButton']['title'] = 'Bestätigen';
+$_LANG['serverCA']['home']['createModal']['baseCancelButton']['title'] = 'Abbruch';
+$_LANG['Virtual Machine :name: %s has been converted to template'] = 'Die VM :name: %s wurde in ein Template konvertiert';
+//Edit
+$_LANG['serverCA']['home']['updateModal']['modal']['updateModal'] = 'Template bearbeiten';
+$_LANG['serverCA']['home']['updateModal']['updateForm']['description']['description'] = 'Beschreibung';
+$_LANG['serverCA']['home']['updateModal']['baseAcceptButton']['title'] = 'Änderungen speichern';
+$_LANG['serverCA']['home']['updateModal']['baseCancelButton']['title'] = 'Abbruch';
+$_LANG['The Template has been updated successfully'] = 'Das Template wurde erfolgreich aktualisiert' ;
+//Delete
+$_LANG['serverCA']['home']['deleteModal']['modal']['deleteModal'] = 'Template löschen';
+$_LANG['serverCA']['home']['deleteModal']['deleteForm']['confirmDelete'] = 'Möchten Sie das ausgewählte Template wirklich löschen?';
+$_LANG['serverCA']['home']['deleteModal']['baseAcceptButton']['title'] = 'Bestätigen';
+$_LANG['serverCA']['home']['deleteModal']['baseCancelButton']['title'] = 'Abbruch';
+$_LANG['The Template has been deleted successfully'] = 'Das ausgewählte Template wurde erfolgreich gelöscht';
 //New Template
 $_LANG['serverCA']['customTemplate']['createModal']['modal']['createModal'] = 'Neues Template';
 $_LANG['serverCA']['customTemplate']['createModal']['createForm']['confirmCreate'] = 'Die VM wird in ein Template konvertiert';

+ 6 - 0
templates/client/default/assets/css/layers-ui.css

@@ -17275,6 +17275,7 @@ Rail
   color: #b3b5b9;
   vertical-align: text-bottom;
   margin-left: 8px;
+  z-index: 1;
 }
 
 #layers .lu-form-check label {
@@ -18086,6 +18087,11 @@ Rail
   right: 2px;
 }
 
+#layers .lu-switch__checkbox:disabled + .lu-switch__container {
+  opacity: 0.5;
+  cursor: initial;
+}
+
 #layers .lu-switch__handle {
   position: absolute;
   top: 2px;