BxDolCover.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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. /**
  10. * Cover.
  11. *
  12. * It displays cover area for different pages, usually it have background image, text and some buttons on it.
  13. *
  14. * @section example Example of usage
  15. *
  16. * Setting cover:
  17. *
  18. * @code
  19. * $oCover = BxDolCover::getInstance(); // get object instance
  20. * if ($oCover) // check if Cover is available for using
  21. * $oCover->set (array( // set cover with default template
  22. * 'title' => 'Hello World!',
  23. * ));
  24. * @endcode
  25. *
  26. */
  27. class BxDolCover extends BxDolFactory implements iBxDolSingleton
  28. {
  29. protected $_aOptions = array();
  30. protected $_sTemplateName = 'cover.html';
  31. protected $_sTemplateNameEmpty = 'cover_empty.html';
  32. protected $_sCoverImageUrl = false;
  33. protected $_aOptiondDefault = array();
  34. protected function __construct()
  35. {
  36. if (isset($GLOBALS['bxDolClasses']['BxDolCover']))
  37. trigger_error ('Multiple instances are not allowed for the BxDolCover class.', E_USER_ERROR);
  38. parent::__construct();
  39. $this->_aOptiondDefault = array(
  40. 'class' => '',
  41. 'title' => '',
  42. 'actions' => '',
  43. 'bx_if:image' => array (
  44. 'condition' => false,
  45. 'content' => array(),
  46. ),
  47. 'bx_if:icon' => array (
  48. 'condition' => false,
  49. 'content' => array(),
  50. ),
  51. 'bx_if:bg' => array (
  52. 'condition' => false,
  53. 'content' => array(),
  54. ),
  55. 'bx_if:logged_in' => array(
  56. 'condition' => isLogged(),
  57. 'content' => array(),
  58. ),
  59. );
  60. }
  61. /**
  62. * Prevent cloning the instance
  63. */
  64. public function __clone()
  65. {
  66. if (isset($GLOBALS['bxDolClasses']['BxDolCover']))
  67. trigger_error('Clone is not allowed for the BxDolCover class.', E_USER_ERROR);
  68. }
  69. /**
  70. * Get Cover object instance
  71. * @return object instance or false on error
  72. */
  73. public static function getInstance($oTemplate = false)
  74. {
  75. if (isset($GLOBALS['bxDolClasses']['BxDolCover']))
  76. return $GLOBALS['bxDolClasses']['BxDolCover'];
  77. $o = new BxTemplCover($oTemplate);
  78. return ($GLOBALS['bxDolClasses']['BxDolCover'] = $o);
  79. }
  80. /**
  81. * Get cover image URL by descriptive array.
  82. * @param mixed $mixedImage - image descriptive array.
  83. * @return string with image URL or false on error.
  84. */
  85. public static function getCoverImageUrl($mixedImage)
  86. {
  87. $bObject = !empty($mixedImage['object']);
  88. $bTranscoder = !empty($mixedImage['transcoder']);
  89. if(!is_array($mixedImage) || !isset($mixedImage['id']) || (!$bObject && !$bTranscoder))
  90. return false;
  91. if($bObject)
  92. $o = BxDolStorage::getObjectInstance($mixedImage['object']);
  93. else if($bTranscoder)
  94. $o = BxDolTranscoder::getObjectInstance($mixedImage['transcoder']);
  95. if(!$o)
  96. return false;
  97. return $o->getFileUrlById($mixedImage['id']);
  98. }
  99. /**
  100. * Determine whether cover is enabled globally or not.
  101. */
  102. public function isEnabled()
  103. {
  104. return getParam('sys_site_cover_disabled') != 'on';
  105. }
  106. /**
  107. * Determine whether cover is already set for the page or not.
  108. */
  109. public function isCover()
  110. {
  111. return !empty($this->_sCoverImageUrl) || !empty($this->_aOptions);
  112. }
  113. /**
  114. * Set custom cover options
  115. * @param $aOptions - cover options, default template supports the following: title. For more info @see template/cover.html
  116. * @param $sTemplateName - optional template name
  117. */
  118. public function set ($aOptions, $sTemplateName = false)
  119. {
  120. $this->_aOptions = $aOptions;
  121. if (false !== $sTemplateName)
  122. $this->_sTemplateName = $sTemplateName;
  123. /**
  124. * @hooks
  125. * @hookdef hook-system-set_cover 'system', 'set_cover' - hook in set cover
  126. * - $unit_name - equals `account`
  127. * - $action - equals `set_cover`
  128. * - $object_id - not used
  129. * - $sender_id - not used
  130. * - $extra_params - array of additional params with the following array keys:
  131. * - `options` - [array] by ref, cover options, default template supports the following: title, can be overridden in hook processing
  132. * - `override_result` - [string] by ref, template name, can be overridden in hook processing
  133. * - `cover` - [object] object cover
  134. * @hook @ref hook-system-set_cover
  135. */
  136. bx_alert('system', 'set_cover', 0, false, array(
  137. 'options' => &$this->_aOptions,
  138. 'template_name' => &$this->_sTemplateName,
  139. 'options_ref' => &$this->_aOptions,
  140. 'template_name_ref' => &$this->_sTemplateName,
  141. 'cover' => $this
  142. ));
  143. }
  144. /**
  145. * Set cover image url for default cover template
  146. * @param $mixedCoverImageUrl - cover image url, or array with file id and storage or transcoder object:
  147. * @code
  148. * array('id' => 12, 'object' => 'sample');
  149. * // or
  150. * array('id' => 21, 'transcoder' => 'sample');
  151. * @endcode
  152. */
  153. public function setCoverImageUrl ($mixedCoverImage)
  154. {
  155. if (is_string($mixedCoverImage))
  156. $this->_sCoverImageUrl = $mixedCoverImage;
  157. else
  158. $this->_sCoverImageUrl = self::getCoverImageUrl($mixedCoverImage);
  159. if(!$this->_sCoverImageUrl)
  160. return false;
  161. /**
  162. * @hooks
  163. * @hookdef hook-system-set_cover 'system', 'set_cover_image' - hook on cover image
  164. * - $unit_name - equals `system`
  165. * - $action - equals `set_cover_image`
  166. * - $object_id - not used
  167. * - $sender_id - not used
  168. * - $extra_params - array of additional params with the following array keys:
  169. * - `cover_image` - [string] by ref, cover image url, or array with file id and storage or transcoder object, can be overridden in hook processing
  170. * - `cover` - [object] object cover
  171. * @hook @ref hook-system-set_cover_image
  172. */
  173. bx_alert('system', 'set_cover_image', 0, false, array(
  174. 'cover_image' => &$this->_sCoverImageUrl,
  175. 'cover_image_ref' => &$this->_sCoverImageUrl,
  176. 'cover' => $this
  177. ));
  178. return true;
  179. }
  180. /**
  181. * Set cover area class
  182. */
  183. public function setCoverClass ($sClass)
  184. {
  185. $this->_aOptiondDefault['class'] = $sClass;
  186. }
  187. }
  188. /** @} */