BxDolPreloader.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaCore UNA Core
  7. * @{
  8. */
  9. bx_import('BxDolLanguages');
  10. define('BX_PRELOADER_TYPE_CSS', 'css_system');
  11. define('BX_PRELOADER_TYPE_STUDIO_CSS', 'studio_css_system');
  12. define('BX_PRELOADER_TYPE_JS', 'js_system');
  13. define('BX_PRELOADER_TYPE_STUDIO_JS', 'studio_js_system');
  14. define('BX_PRELOADER_TYPE_JS_OPTION', 'js_option');
  15. define('BX_PRELOADER_TYPE_JS_TRANSLATION', 'js_translation');
  16. define('BX_PRELOADER_TYPE_JS_IMAGE', 'js_image');
  17. class BxDolPreloader extends BxDolFactory implements iBxDolSingleton
  18. {
  19. protected $_oDb;
  20. protected $_aEntries;
  21. protected $_aTypes;
  22. protected $_aMarkers;
  23. protected function __construct()
  24. {
  25. parent::__construct();
  26. $this->_oDb = new BxDolPreloaderQuery();
  27. $this->_aEntries = $this->_oDb->getEntries();
  28. $this->_aTypes = array(
  29. BX_PRELOADER_TYPE_CSS => '',
  30. BX_PRELOADER_TYPE_STUDIO_CSS => '',
  31. BX_PRELOADER_TYPE_JS => '',
  32. BX_PRELOADER_TYPE_STUDIO_JS => '',
  33. BX_PRELOADER_TYPE_JS_OPTION => '',
  34. BX_PRELOADER_TYPE_JS_TRANSLATION => '',
  35. BX_PRELOADER_TYPE_JS_IMAGE => ''
  36. );
  37. foreach($this->_aTypes as $sType => $sValue)
  38. $this->_aTypes[$sType] = bx_gen_method_name('add_' . $sType);
  39. $this->_aMarkers = array(
  40. 'dir_plugins_public' => BX_DIRECTORY_PATH_PLUGINS_PUBLIC
  41. );
  42. }
  43. public function __clone()
  44. {
  45. if (isset($GLOBALS['bxDolClasses'][get_class($this)]))
  46. trigger_error('Clone is not allowed for the class: ' . get_class($this), E_USER_ERROR);
  47. }
  48. public static function getInstance()
  49. {
  50. if(!isset($GLOBALS['bxDolClasses'][__CLASS__]))
  51. $GLOBALS['bxDolClasses'][__CLASS__] = new BxDolPreloader();
  52. return $GLOBALS['bxDolClasses'][__CLASS__];
  53. }
  54. public function perform($oTemplateSystem)
  55. {
  56. $bStudio = $oTemplateSystem instanceof BxDolStudioTemplate;
  57. $aTypesAvail = array_keys($this->_aTypes);
  58. $aLoader = array();
  59. foreach($this->_aEntries as $aEntry) {
  60. $sType = $aEntry['type'];
  61. if(!in_array($sType, $aTypesAvail))
  62. continue;
  63. $sModule = $aEntry['module'];
  64. $aLoader[$sModule][$sType][] = bx_replace_markers($aEntry['content'], $this->_aMarkers);
  65. }
  66. foreach($aLoader as $sModule => $aTypes) {
  67. $sLocKey = '';
  68. $bLocRemove = false;
  69. $bLocRemoveJs = false;
  70. $bModule = $sModule != 'system';
  71. $oModule = $bModule ? BxDolModule::getInstance($sModule) : null;
  72. if($bModule && !$oModule)
  73. continue;
  74. $oTemplate = null;
  75. if($bModule)
  76. $oTemplate = &$oModule->_oTemplate;
  77. else
  78. $oTemplate = &$oTemplateSystem;
  79. foreach($aTypes as $sType => $aEntries)
  80. $oTemplate->{$this->_aTypes[($bStudio && $bModule ? 'studio_' : '') . $sType]}($aEntries);
  81. }
  82. }
  83. }
  84. /** @} */