Context.php 5.8 KB

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