Context.php 6.5 KB

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