CustomFieldsConfig.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\Packages\WhmcsService\Traits;
  3. use ModulesGarden\Servers\ProxmoxCloudVps\Core\App\Packages\PackageManager;
  4. use ModulesGarden\Servers\ProxmoxCloudVps\Packages\WhmcsService\Config\Enum;
  5. use ModulesGarden\Servers\ProxmoxCloudVps\Packages\WhmcsService\Config\PackageConfiguration;
  6. use WHMCS\Database\Capsule;
  7. trait CustomFieldsConfig
  8. {
  9. protected $customFieldsList = [];
  10. public function loadCustomFieldsList()
  11. {
  12. if (!$this->configOptionsList)
  13. {
  14. $packageManager = new PackageManager();
  15. $config = $packageManager->getPackageConfiguration(PackageConfiguration::getPackageName());
  16. $this->customFieldsList = $config->{Enum::CUSTOM_FIELDS};
  17. }
  18. }
  19. public function trimCustomFieldNameName($name = null)
  20. {
  21. if (is_string($name) && trim($name) !== '' && stripos($name, '|') > 0)
  22. {
  23. $parts = explode('|', $name);
  24. return $parts[0];
  25. }
  26. return $name;
  27. }
  28. public function getCustomFieldConfigParams($fieldName = null)
  29. {
  30. $this->loadConfigurableOptionsList();
  31. foreach ($this->customFieldsList as $fieldConfig)
  32. {
  33. if (!$fieldConfig|| !is_array($fieldConfig))
  34. {
  35. continue;
  36. }
  37. if ($fieldConfig[Enum::OPTION_NAME] === $fieldName || $this->trimConfigOptionName($fieldConfig[Enum::OPTION_NAME]) === $fieldName)
  38. {
  39. return $fieldConfig;
  40. }
  41. }
  42. return false;
  43. }
  44. public function createCustomFieldsFromConfig()
  45. {
  46. $this->loadCustomFieldsList();
  47. foreach ($this->customFieldsList as $fieldData)
  48. {
  49. $this->addCustomField($fieldData);
  50. }
  51. }
  52. public function addCustomField($fieldParams = [])
  53. {
  54. if (!$fieldParams || !$this->isValidString($fieldParams[Enum::FIELD_NAME]))
  55. {
  56. return false;
  57. }
  58. $relationType = $this->isValidString($fieldParams[Enum::FIELD_RELATION_TYPE])
  59. ? $fieldParams[Enum::FIELD_RELATION_TYPE] : Enum::FIELD_RELATION_TYPE_DEFAULT;
  60. $relationId = ($fieldParams[Enum::FIELD_RELATION_TYPE] === Enum::FIELD_RELATION_TYPE_CLIENT)
  61. ? '0' : $this->productId;
  62. if ($this->customFieldExists($fieldParams[Enum::FIELD_NAME], $relationType, $relationId))
  63. {
  64. return false;
  65. }
  66. $cfId = Capsule::table('tblcustomfields')->insertGetId([
  67. //name
  68. Enum::FIELD_NAME => $fieldParams[Enum::FIELD_NAME],
  69. //relation type
  70. Enum::FIELD_RELATION_TYPE => $relationType,
  71. //relation id
  72. Enum::CUSTOM_FIELDS_REL_ID => $relationId,
  73. //field type
  74. Enum::FIELD_TYPE => $this->isValidString($fieldParams[Enum::FIELD_TYPE])
  75. ? $fieldParams[Enum::FIELD_TYPE] : Enum::FIELD_TYPE_DEFAULT,
  76. //description
  77. Enum::FIELD_DESCRIPTION => $this->isValidString($fieldParams[Enum::FIELD_DESCRIPTION])
  78. ? $fieldParams[Enum::FIELD_DESCRIPTION] : Enum::FIELD_DESCRIPTION_DEFAULT,
  79. //field options
  80. Enum::FIELD_OPTIONS => $this->isValidString($fieldParams[Enum::FIELD_OPTIONS])
  81. ? $fieldParams[Enum::FIELD_OPTIONS] : Enum::FIELD_OPTIONS_DEFAULT,
  82. //regular expresion
  83. Enum::FIELD_REG_EXPR => $this->isValidString($fieldParams[Enum::FIELD_REG_EXPR])
  84. ? $fieldParams[Enum::FIELD_REG_EXPR] : Enum::FIELD_REG_EXPR_DEFAULT,
  85. //admin only
  86. Enum::FIELD_ADMIN_ONLY => $this->isValidString($fieldParams[Enum::FIELD_ADMIN_ONLY])
  87. ? $fieldParams[Enum::FIELD_ADMIN_ONLY] : Enum::FIELD_ADMIN_ONLY_DEFAULT,
  88. //required
  89. Enum::FIELD_REQUIRED => $this->isValidString($fieldParams[Enum::FIELD_REQUIRED])
  90. ? $fieldParams[Enum::FIELD_REQUIRED] : Enum::FIELD_REQUIRED_DEFAULT,
  91. //show on order form
  92. Enum::FIELD_SHOW_ORDER => $this->isValidString($fieldParams[Enum::FIELD_SHOW_ORDER])
  93. ? $fieldParams[Enum::FIELD_SHOW_ORDER] : Enum::FIELD_SHOW_ORDER_DEFAULT,
  94. //show on invoice
  95. Enum::FIELD_SHOW_INVOICE => $this->isValidString($fieldParams[Enum::FIELD_SHOW_INVOICE])
  96. ? $fieldParams[Enum::FIELD_SHOW_INVOICE] : Enum::FIELD_SHOW_INVOICE_DEFAULT,
  97. //sort order
  98. Enum::FIELD_SORT_ORDER => $this->isValidString($fieldParams[Enum::FIELD_SORT_ORDER])
  99. ? $fieldParams[Enum::FIELD_SORT_ORDER] : Enum::FIELD_SORT_ORDER_DEFAULT,
  100. //created at
  101. Enum::FIELD_CREATED_AT => $this->isValidString($fieldParams[Enum::FIELD_CREATED_AT])
  102. ? $fieldParams[Enum::FIELD_CREATED_AT] : Enum::FIELD_CREATED_AT_DEFAULT,
  103. //updated at
  104. Enum::FIELD_UPDATED_AT => $this->isValidString($fieldParams[Enum::FIELD_UPDATED_AT])
  105. ? $fieldParams[Enum::FIELD_UPDATED_AT] : Enum::FIELD_UPDATED_AT_DEFAULT,
  106. ]);
  107. }
  108. public function isValidString($string = null)
  109. {
  110. return (is_string($string) && trim($string) !== '');
  111. }
  112. public function customFieldExists($fieldName = null, $relationType = null, $relationId = null)
  113. {
  114. if (!$fieldName || !$relationType || (!$relationId && $relationId !== 0 & $relationId !== '0'))
  115. {
  116. return false;
  117. }
  118. $count = Capsule::table('tblcustomfields')
  119. ->where(function($query) use($fieldName){
  120. $query->where(Enum::FIELD_NAME, 'LIKE', $this->trimConfigOptionName($fieldName) . '|%');
  121. $query->orWhere(Enum::FIELD_NAME, '=', $this->trimConfigOptionName($fieldName));
  122. })
  123. ->where(Enum::FIELD_RELATION_TYPE, $relationType)
  124. ->where(Enum::CUSTOM_FIELDS_REL_ID, $relationId)
  125. ->count();
  126. return ($count > 0);
  127. }
  128. }