Context.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Builder;
  3. use ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\BuildUrl;
  4. use ModulesGarden\Servers\ProxmoxCloudVps\Core\ServiceLocator;
  5. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\MainContainer;
  6. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\sl;
  7. /**
  8. * Description of Context
  9. *
  10. * @author inbs
  11. */
  12. class Context
  13. {
  14. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\Title;
  15. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\HtmlElements;
  16. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\Template;
  17. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\Searchable;
  18. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\Buttons;
  19. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\Icon;
  20. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\VueComponent;
  21. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\HtmlAttributes;
  22. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\ACL;
  23. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\CallBackFunction;
  24. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\Alerts;
  25. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\RefreshAction;
  26. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\WidgetView;
  27. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\RequestObjectHandler;
  28. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\AjaxComponent;
  29. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\ContainerElements;
  30. use \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\WhmcsParams;
  31. protected $html = '';
  32. protected $customTplVars = [];
  33. protected $mainContainer = null;
  34. protected $namespace = '';
  35. protected $errorMessage = false;
  36. public static $findItemContext = false;
  37. protected $initialized = true;
  38. public function __construct($baseId = null)
  39. {
  40. $this->addNewElementsContainer('buttons');
  41. $this->namespace = str_replace('\\', '_', get_class($this));
  42. $this->initIds($baseId);
  43. $this->prepareDefaultHtmlElements();
  44. $this->loadTemplateVars();
  45. }
  46. public function getErrorMessage()
  47. {
  48. return $this->errorMessage;
  49. }
  50. /**
  51. * @return string
  52. */
  53. public function getHtml()
  54. {
  55. if ($this->html === '')
  56. {
  57. $this->buildHtml();
  58. }
  59. return $this->html;
  60. }
  61. /**
  62. * @return string
  63. */
  64. public function __toString()
  65. {
  66. return $this->getHtml();
  67. }
  68. protected function buildHtml()
  69. {
  70. $this->html = self::generate($this);
  71. }
  72. public function getCustomTplVars()
  73. {
  74. return $this->customTplVars;
  75. }
  76. public function getCustomTplVarsValue($varName)
  77. {
  78. return $this->customTplVars[$varName];
  79. }
  80. /**
  81. * @param \ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Builder\Context $object
  82. * @return string
  83. */
  84. public static function generate(Context $object)
  85. {
  86. $tpl = $object->getTemplateName();
  87. $vars = [
  88. 'title' => $object->getTitle(),
  89. 'class' => $object->getClasses(),
  90. 'name' => $object->getName(),
  91. 'elementId' => $object->getId(),
  92. 'htmlAttributes' => $object->getHtmlAttributes(),
  93. 'elements' => $object->getElements(),
  94. 'scriptHtml' => $object->getScriptHtml(),
  95. 'customTplVars' => $object->getCustomTplVars(),
  96. 'rawObject' => $object,
  97. 'namespace' => $object->getNamespace(),
  98. 'isDebug' => (bool)(int)sl('configurationAddon')->getConfigValue('debug', '0'),
  99. 'isError' => (bool)$object->getErrorMessage(),
  100. 'errorMessage' => $object->getErrorMessage(),
  101. 'assetsUrl' => BuildUrl::getAssetsURL(),
  102. 'appAssetsUrl' => BuildUrl::getAppAssetsURL()
  103. ];
  104. $lang = ServiceLocator::call('lang');
  105. $lang->stagCurrentContext('builder' . $object->getName());
  106. $lang->addToContext(lcfirst($object->getName()));
  107. $return = ServiceLocator::call('smarty')->setLang($lang)->view($tpl, $vars, $object->getTemplateDir());
  108. if (!$object->isVueRegistrationAllowed())
  109. {
  110. return $return;
  111. }
  112. if ($object->isVueComponent() && file_exists($object->getTemplateDir() . str_replace('.tpl', '', $tpl) . '_components.tpl'))
  113. {
  114. $vueComponents = ServiceLocator::call('smarty')->setLang($lang)->view(str_replace('.tpl', '', $tpl) . '_components', $vars, $object->getTemplateDir());
  115. $object->addVueComponentTemplate($vueComponents, $object->getId());
  116. }
  117. if ($object->isVueComponent() && file_exists($object->getTemplateDir() . str_replace('.tpl', '', $tpl) . '_components.js'))
  118. {
  119. $vueComponentsJs = file_get_contents($object->getTemplateDir() . str_replace('.tpl', '', $tpl) . '_components.js');
  120. $object->addVueComponentJs($vueComponentsJs, $object->getDefaultVueComponentName());
  121. }
  122. if ($object->isVueComponent() && $object->getDefaultVueComponentName())
  123. {
  124. $object->registerVueComponent($object->getId(), $object->getDefaultVueComponentName());
  125. }
  126. $lang->unstagContext('builder' . $object->getName());
  127. return $return;
  128. }
  129. public function setMainContainer(MainContainer &$mainContainer)
  130. {
  131. if ($this->mainContainer !== null)
  132. {
  133. return $this;
  134. }
  135. $this->mainContainer = &$mainContainer;
  136. $this->registerMainContainerAdditions($this);
  137. $this->propagateMainContainer($mainContainer);
  138. if (self::$findItemContext === false)
  139. {
  140. $this->runInitContentProcess();
  141. }
  142. return $this;
  143. }
  144. protected function propagateMainContainer(&$mainContainer)
  145. {
  146. foreach ($this->getElementsContainers() as $containerName)
  147. {
  148. foreach ($this->{$containerName} as &$container)
  149. {
  150. $container->setMainContainer($mainContainer);
  151. }
  152. }
  153. }
  154. public function initContent()
  155. {
  156. }
  157. public function runInitContentProcess()
  158. {
  159. $this->preInitContent();
  160. $this->initContent();
  161. $this->afterInitContent();
  162. $this->initialized = true;
  163. }
  164. protected function preInitContent()
  165. {
  166. //Do not use or override this method
  167. }
  168. protected function afterInitContent()
  169. {
  170. //Do not use or override this method
  171. }
  172. public function getNamespace()
  173. {
  174. return $this->namespace;
  175. }
  176. public function wasInitialized()
  177. {
  178. return $this->initialized;
  179. }
  180. }