Browse Source

add ressource validator

andre 4 years ago
parent
commit
49cc68ce24

+ 1 - 0
app/UI/VmCreate/Sections/TopSection.php

@@ -25,6 +25,7 @@ class TopSection extends RawSection {
         if($this->configuration()->isPermissionOsTemplate() || $this->configuration()->isLxc()){
             $field =new OsTemplateSelect('osTemplate');
             $field->notEmpty();
+            $field->addValidator(new RessourceValidator());
             $this->addField( $field);
         }
         //description

+ 103 - 0
app/UI/VmCreate/Validators/RessourceValidator.php

@@ -0,0 +1,103 @@
+<?php
+
+
+namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators;
+
+
+use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ResourceManager;
+use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Validators\BaseValidator;
+use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\WhmcsParams;
+use ModulesGarden\Servers\ProxmoxCloudVps\App\Enum\ConfigurableOption;
+
+class RessourceValidator extends BaseValidator
+{
+    use WhmcsParams;
+    protected $additionalField;
+    protected $minValue = 0;
+    protected $maxValue = 0;
+    protected $required = true;
+
+    public function __construct( $additionalField, $required = true)
+    {
+        $this->additionalField = $additionalField;
+        $this->required = $required;
+    }
+
+    protected function validate($data, $additionalData = null)
+    {
+        if (!$this->required && empty($data))
+        {
+            return true;
+        }
+        $resurceManager = new ResourceManager();
+        $additionalSize = 0;
+        $templateName = (int) $additionalData->get('formData')[$this->additionalField];
+        $diskResource = $resurceManager ->disk();
+
+        logModuleCall(
+            'proxmoxCloud',
+            __FUNCTION__,
+            $templateName,
+            'Debug',
+            $diskResource
+        );
+        return true;
+
+        $diskResource->setTotal($diskResource->getTotal()-$additionalSize);
+        if ($this->isWhmcsConfigOption(ConfigurableOption::STORAGE)) {
+            $this->maxValue = $this->getWhmcsConfigOption(ConfigurableOption::STORAGE) - $diskResource->getUsed();
+        } else {
+            $this->maxValue = $diskResource->free();
+        }
+        if ($this->maxValue > $diskResource->getMax()) {
+            $this->addValidationError('PleaseProvideANumericValueBetween', false, ['minValue' => $this->minValue, 'maxValue' => $diskResource->getMax()]);
+            return false;
+        }
+
+        $this->minValue =  $diskResource->getMin();
+        if(preg_match("/\./", $data)){
+            $this->addValidationError('PleaseProvideANumericValueBetween', false, ['minValue' => $this->minValue, 'maxValue' => $this->maxValue]);
+            return false;
+        }
+        if (is_numeric($data) && $this->minValue === 0 && $this->maxValue === 0)
+        {
+            return true;
+        }
+        //Min & Max
+        if (is_numeric($data) && $this->minValue <= ((int)$data) && ((int)$data) <= $this->maxValue)
+        {
+            return true;
+        }
+        //Min
+        else
+        {
+            if (is_numeric($data) && !is_numeric($this->maxValue) && $this->minValue <= ((int)$data))
+            {
+                return true;
+            }
+        }
+
+        if ($this->minValue === $this->maxValue)
+        {
+            $this->addValidationError('PleaseProvideANumericValue');
+
+            return false;
+        }
+
+        if (is_numeric($this->minValue) && is_numeric($this->maxValue))
+        {
+            $this->addValidationError('PleaseProvideANumericValueBetween', false, ['minValue' => $this->minValue, 'maxValue' => $this->maxValue]);
+        }
+        else
+        {
+            if (is_numeric($this->minValue) && !is_numeric($this->maxValue))
+            {
+                $this->addValidationError('PleaseProvideANumericValueFrom', false, ['minValue' => $this->minValue]);
+            }
+        }
+
+
+        return false;
+    }
+
+}