GeneralSection.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Sections\Qemu;
  3. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  4. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ResourceManager;
  5. use ModulesGarden\ProxmoxAddon\Core\Helper\AdvancedUserHelper;
  6. use ModulesGarden\Servers\ProxmoxCloudVps\Core\Models\Whmcs\Server;
  7. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\CpulimitValidator;
  8. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\HostnameValidator;
  9. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\IpAddressValidator;
  10. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\NumberValidator;
  11. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Validators\SshPublicKeyValidator;
  12. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Fields\ArchiveSelect;
  13. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Fields\IsoImageSelect;
  14. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Fields\OsTemplateSelect;
  15. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Fields\SecondaryIsoImageSelect;
  16. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\ArchiveValidator;
  17. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\DiskSizeValidator;
  18. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\IsoImageValidator;
  19. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\NameserverValidator;
  20. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\PasswordValidator;
  21. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\SearchdomainValidator;
  22. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Validators\UserValidator;
  23. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Fields\Range;
  24. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Fields\Select;
  25. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Fields\Text;
  26. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Fields\Textarea;
  27. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Sections\BaseSection;
  28. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\Sections\HalfPageSection;
  29. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\sl;
  30. class GeneralSection extends HalfPageSection
  31. {
  32. use ProductService;
  33. /**
  34. * @var ResourceManager
  35. */
  36. protected $resourceManager;
  37. public function initContent()
  38. {
  39. $this->initIds('generalSection');
  40. $this->resourceManager = new ResourceManager();
  41. $this->initFields();
  42. }
  43. public function initFields()
  44. {
  45. $advancedUser = new AdvancedUserHelper($this->getWhmcsParamByKey('userid'));
  46. //cpuPrioryty
  47. logModuleCall(
  48. 'proxmoxCloud',
  49. __FUNCTION__,
  50. $this->configuration()->hasCpuPriority(),
  51. 'Debug Configuration',
  52. $this->configuration()
  53. );
  54. // $cpuPrioryty = $this->configuration()->hasCpuPriority();
  55. $cpuPrioryty = false;
  56. //location
  57. if($this->configuration()->getLocations()){
  58. $field = new Select('location');
  59. $field->notEmpty();
  60. $field->setDescription('description');
  61. $this->addField($field);
  62. }
  63. //sockets
  64. if($this->configuration()->isPermissionSockets() && !$this->configuration()->isCalculateSocketsAndCores()){
  65. $field = new Text('sockets');
  66. $field->addValidator(new NumberValidator($this->resourceManager->sockets()->getMin(), $this->resourceManager->sockets()->free(),true));
  67. $field->setDefaultValue($this->configuration()->serverSockets->min);
  68. $field->setDescription('description');
  69. $this->addField($field);
  70. }
  71. //cores
  72. if($this->configuration()->isPermissionCores() && !$this->configuration()->isCalculateSocketsAndCores()){
  73. $field = new Text('cores');
  74. $field->addValidator(new NumberValidator($this->resourceManager->cores()->getMin(), $this->resourceManager->cores()->free(),true));
  75. $field->setDefaultValue($this->configuration()->serverCores->min);
  76. $field->setDescription('description');
  77. $this->addField($field);
  78. }
  79. //vcpus
  80. if($this->configuration()->isPermissionVcpus() || $this->configuration()->isCalculateSocketsAndCores()){
  81. $field = new Range('vcpus', $this->resourceManager->vcpus()->getMin(), $this->resourceManager->vcpus()->free());
  82. $field->addValidator(new NumberValidator($this->resourceManager->vcpus()->getMin(), $this->resourceManager->vcpus()->free(),true));
  83. $field->setDefaultValue($this->configuration()->serverVcpus->min);
  84. $field->setDescription('description');
  85. $this->addField($field);
  86. }
  87. //cpu priority
  88. if($cpuPrioryty){
  89. $field = new Range('cpuPriority', $this->resourceManager->cpuPriority()->getMin(), $this->resourceManager->cpuPriority()->free());
  90. $field->addValidator(new NumberValidator($this->resourceManager->cpuPriority()->getMin(), $this->resourceManager->cpuPriority()->free(),true));
  91. $field->setDefaultValue($this->resourceManager->cpuPriority()->free() >= 3 ? 3 : 1);
  92. $field->addHtmlAttribute('data-label1', sl('lang')->abtr("Very Low"));
  93. $field->addHtmlAttribute('data-label2', sl('lang')->abtr("Low"));
  94. $field->addHtmlAttribute('data-label3', sl('lang')->abtr("Normal"));
  95. $field->addHtmlAttribute('data-label4', sl('lang')->abtr("High"));
  96. $field->addHtmlAttribute('data-label5', sl('lang')->abtr("Medium"));
  97. $field->setDescription('description');
  98. $this->addField($field);
  99. }
  100. //cpulimit
  101. if($this->configuration()->isPermissionCpuLimit() && !$cpuPrioryty){
  102. $field = new Text('cpulimit');
  103. $field->addValidator(new CpulimitValidator($this->resourceManager->cpulimit()->getMin(), $this->resourceManager->cpulimit()->free(),true));
  104. $field->setDefaultValue($this->configuration()->serverCpulimit->min);
  105. $field->setDescription('description');
  106. $this->addField($field);
  107. }
  108. //cpuunits
  109. if($this->configuration()->isPermissionCpuunits() && !$cpuPrioryty){
  110. $field = new Text('cpuunits');
  111. $field->addValidator(new NumberValidator($this->resourceManager->cpuunits()->getMin(), $this->resourceManager->cpuunits()->free(),true));
  112. $field->setDefaultValue($this->configuration()->serverCpuunit->min);
  113. $field->setDescription('description');
  114. $this->addField($field);
  115. }
  116. //memory
  117. $field = new Range('memory', $this->resourceManager->memory()->getMin(), $this->resourceManager->memory()->free());
  118. $field->addValidator(new NumberValidator($this->resourceManager->memory()->getMin(), $this->resourceManager->memory()->free(),true));
  119. $field->setDefaultValue($this->configuration()->serverMemory->min);
  120. $field->setDescription('description');
  121. $this->addField($field);
  122. //disk
  123. if ($this->configuration()->serverDiskSize->max > ($this->resourceManager->disk()->free())) {
  124. $maxRange = $this->resourceManager->disk()->free();
  125. } else {
  126. $maxRange = $this->configuration()->serverDiskSize->max;
  127. }
  128. $field = new Range('disk', $this->configuration()->serverDiskSize->min, $maxRange);
  129. $field->addValidator(new DiskSizeValidator('additionalDiskSize',true));
  130. $field->setDefaultValue($this->configuration()->serverDiskSize->min);
  131. $field->setDescription('description');
  132. $this->addField($field);
  133. //username
  134. if($this->configuration()->isPermissionUsername()){
  135. $field = new Text('ciuser');
  136. $field->addValidator(new UserValidator());
  137. $field->setDefaultValue($this->configuration()->getCiuser());
  138. $field->setDescription('description');
  139. $this->addField($field);
  140. }
  141. //password
  142. if($this->configuration()->isPermissionPassword()){
  143. $field = new Text('password');
  144. $field->addValidator( new PasswordValidator());
  145. $field->setDescription('description');
  146. $this->addField($field);
  147. }
  148. //sshkey
  149. if($this->configuration()->isPermissionSshkeys()){
  150. $field = new Textarea('sshkeys');
  151. $field->addValidator(new SshPublicKeyValidator(false));
  152. $field->setDescription('description');
  153. $this->addField($field);
  154. }
  155. //dnsdomain
  156. if($this->configuration()->isPermissionSearchdomain()){
  157. $field = new Text('searchdomain');
  158. $field->addValidator(new SearchdomainValidator(false));
  159. $field->setDescription('description');
  160. $this->addField($field);
  161. }
  162. if($this->configuration()->isPermissionNameservers()){
  163. $server = Server::select('id', 'nameserver1ip', 'nameserver2ip')->findOrFail($this->getWhmcsParamByKey('serverid'));
  164. //ns1
  165. $field = new Text('nameserver[0]');
  166. $field->addValidator(new NameserverValidator());
  167. $field->setDefaultValue(trim($server->nameserver1ip));
  168. $field->setDescription('description');
  169. $this->addField($field);
  170. //ns2
  171. $field = new Text('nameserver[1]');
  172. $field->addValidator(new NameserverValidator());
  173. $field->setDefaultValue(trim($server->nameserver2ip));
  174. $field->setDescription('description');
  175. $this->addField($field);
  176. }
  177. //ostype
  178. if(($advancedUser->isAdvanced() || $this->configuration()->isPermissionIsoImage()) && $this->configuration()->getPermissionOstype()){
  179. $field = new Select('ostype');
  180. $this->addField($field);
  181. }
  182. //isoImage
  183. if($this->configuration()->isPermissionIsoImage() && ($advancedUser->isAdvanced() || $this->configuration()->isPermissionIsoImage())){
  184. $field = new IsoImageSelect('isoImage');
  185. $field->addValidator(new IsoImageValidator());
  186. $this->addField($field);
  187. }
  188. //secondaryIsoImage
  189. if($this->configuration()->isPermissionSecondaryIsoImages() && $advancedUser->isAdvanced()){
  190. $this->addField(new SecondaryIsoImageSelect('secondaryIsoImage'));
  191. }
  192. //cloudInitScript
  193. if($this->configuration()->getCloudInitScript()){
  194. $field = new Select('cloudInitScript');
  195. $field->setDescription('description');
  196. $this->addField($field);
  197. }
  198. if($this->configuration()->isPermissionArchive() ){
  199. $field = new ArchiveSelect('archive');
  200. $field->setDescription('description');
  201. $field->addValidator(new ArchiveValidator());
  202. $this->addField($field);
  203. }
  204. //ipv4
  205. if($this->configuration()->isPermissionIpv4() && !$this->configuration()->isOrderPublicIp()){
  206. $field = new Text('ipv4');
  207. $field->addValidator(new NumberValidator($this->resourceManager->ipv4()->getMin(), $this->resourceManager->ipv4()->free(),$this->resourceManager->ipv4()->getMin() > 0));
  208. $field->setDefaultValue($this->configuration()->serverIpv4->min);
  209. $field->setDescription('description');
  210. $this->addField($field);
  211. }
  212. //ipv6
  213. if($this->configuration()->isPermissionIpv6() && !$this->configuration()->isOrderPublicIp()){
  214. $field = new Text('ipv6');
  215. $field->addValidator(new NumberValidator($this->resourceManager->ipv6()->getMin(), $this->resourceManager->ipv6()->free(),$this->resourceManager->ipv6()->getMin() > 0));
  216. $field->setDefaultValue($this->configuration()->serverIpv6->min);
  217. $field->setDescription('description');
  218. $this->addField($field);
  219. }
  220. }
  221. }