MainContainerAjax.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. namespace ModulesGarden\Servers\ZimbraEmail\Core\UI;
  3. use \ModulesGarden\Servers\ZimbraEmail\Core\Http\Request;
  4. use \ModulesGarden\Servers\ZimbraEmail\Core\DependencyInjection;
  5. use \ModulesGarden\Servers\ZimbraEmail\Core\UI\Builder\Config;
  6. use \ModulesGarden\Servers\ZimbraEmail\Core\Helper;
  7. use \ModulesGarden\Servers\ZimbraEmail\Core\UI\Builder\Context;
  8. /**
  9. * Description of Conteiner
  10. *
  11. * @author inbs
  12. */
  13. class MainContainerAjax extends MainContainer
  14. {
  15. protected $namespaceAjax;
  16. public function __construct($baseId = null)
  17. {
  18. $this->namespace = str_replace('\\', '_', get_class($this));
  19. $this->initIds($baseId);
  20. $index = \ModulesGarden\Servers\ZimbraEmail\Core\Helper\sl('request')->get('index');
  21. if ($index && $index != '')
  22. {
  23. $this->index = $index;
  24. }
  25. }
  26. public function setNamespaceAjax($namespaceAjax)
  27. {
  28. $this->namespaceAjax = $namespaceAjax;
  29. return $this;
  30. }
  31. public function addElement($element)
  32. {
  33. if (is_string($element))
  34. {
  35. $element = DependencyInjection::create($element);
  36. }
  37. $element->setIndex($this->index);
  38. $id = $element->getId();
  39. if (!isset($this->ajaxElements[$id]))
  40. {
  41. $element->setMainContainer($this);
  42. if ($element instanceof \ModulesGarden\Servers\ZimbraEmail\Core\UI\Interfaces\AjaxElementInterface)
  43. {
  44. $this->ajaxElements[$id] = &$element;
  45. }
  46. if ($element->isVueComponent())
  47. {
  48. $this->vueComponents[$element->getTemplateName()] = &$element;
  49. }
  50. }
  51. return $this;
  52. }
  53. public function addAjaxElement(\ModulesGarden\Servers\ZimbraEmail\Core\UI\Interfaces\AjaxElementInterface &$element)
  54. {
  55. /**
  56. * @var Context $element
  57. */
  58. $this->ajaxElements[$element->getId()] = &$element;
  59. }
  60. public function addVueComponent(&$element)
  61. {
  62. /**
  63. * @var Context $element
  64. */
  65. if ($element->isVueComponent())
  66. {
  67. $this->vueComponents[$element->getTemplateName()] = &$element;
  68. }
  69. }
  70. public function valicateACL($isAdmin)
  71. {
  72. foreach ($this->elements as $id => &$element)
  73. {
  74. /**
  75. * @var Context $element
  76. */
  77. if($element->setIsAdminAcl($isAdmin)->validateElement($element) === false)
  78. {
  79. unset($this->elements[$id]);
  80. Helper\sl('errorManager')->addError(__CLASS__, 'There is no implemented interface for the widget "' . get_class($element) . '".');
  81. }
  82. }
  83. foreach ($this->ajaxElements as $id => &$element)
  84. {
  85. /**
  86. * @var Context $element
  87. */
  88. if($element->setIsAdminAcl($isAdmin)->validateElement($element) === false)
  89. {
  90. unset($this->ajaxElements[$id]);
  91. Helper\sl('errorManager')->addError(__CLASS__, 'There is no implemented interface for the widget "' . get_class($element) . '".');
  92. }
  93. }
  94. return $this;
  95. }
  96. /**
  97. * @param array $data
  98. * @return $this
  99. */
  100. public function setData(array $data = [])
  101. {
  102. $this->data = $data;
  103. $this->updateData();
  104. return $this;
  105. }
  106. protected function updateData()
  107. {
  108. foreach ($this->data as $key => $value)
  109. {
  110. if (property_exists($this, $key))
  111. {
  112. $this->$key = $value;
  113. }
  114. }
  115. $this->data = [];
  116. return $this;
  117. }
  118. public function getHtml()
  119. {
  120. if ($this->html === '')
  121. {
  122. $this->buildHtml();
  123. }
  124. return $this->html;
  125. }
  126. /**
  127. * @return string
  128. */
  129. public function __toString()
  130. {
  131. return $this->getHtml();
  132. }
  133. public function getAjaxResponse()
  134. {
  135. $request = Request::build();
  136. foreach ($this->ajaxElements as $aElem)
  137. {
  138. /**
  139. * @var Context $aElem
  140. */
  141. if ($this->namespaceAjax === $aElem->getNamespace())
  142. {
  143. $response = $aElem->returnAjaxData();
  144. if ($response instanceof \ModulesGarden\Servers\ZimbraEmail\Core\UI\Interfaces\ResponseInterface)
  145. {
  146. return $response->getFormatedResponse();
  147. }
  148. return $response;
  149. }
  150. }
  151. }
  152. public function getVueComponents()
  153. {
  154. $vBody = '';
  155. foreach ($this->vueComponents as $vElem)
  156. {
  157. /**
  158. * @var Context $vElem
  159. */
  160. $vBody .= $vElem->getVueComponents();
  161. }
  162. return $vBody;
  163. }
  164. public function getAjaxElems()
  165. {
  166. return $this->ajaxElements;
  167. }
  168. public function getVueComponentsJs()
  169. {
  170. $vJsBody = '';
  171. foreach ($this->vueComponents as $vElem)
  172. {
  173. $vJsBody .= $vElem->getVueComponentsJs();
  174. }
  175. return $vJsBody;
  176. }
  177. }