GeneralSection.php 11 KB

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