BxBaseModGeneralMenuSnippetMeta.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  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 BaseGeneral Base classes for modules
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. class BxBaseModGeneralMenuSnippetMeta extends BxTemplMenuUnitMeta
  12. {
  13. protected $_bShowZeros;
  14. protected $_sModule;
  15. protected $_oModule;
  16. protected $_iContentId;
  17. protected $_aContentInfo;
  18. public function __construct($aObject, $oTemplate = false)
  19. {
  20. $this->_oModule = BxDolModule::getInstance($this->_sModule);
  21. if(empty($oTemplate))
  22. $oTemplate = $this->_oModule->_oTemplate;
  23. parent::__construct($aObject, $oTemplate);
  24. $this->_sStylePrefix = 'bx-base-general-unit-meta';
  25. $this->_bShowZeros = false;
  26. }
  27. public function getCode()
  28. {
  29. if(empty($this->_aContentInfo) || !is_array($this->_aContentInfo))
  30. return '';
  31. return parent::getCode();
  32. }
  33. public function setContentId($iContentId)
  34. {
  35. $this->_iButtons = 0;
  36. $this->_iContentId = (int)$iContentId;
  37. $this->_aContentInfo = $this->_oModule->_oDb->getContentInfoById($this->_iContentId);
  38. if($this->_aContentInfo)
  39. $this->addMarkers(array('content_id' => (int)$this->_iContentId));
  40. }
  41. protected function _getMenuItemAuthor($aItem)
  42. {
  43. $CNF = &$this->_oModule->_oConfig->CNF;
  44. if($this->_bIsApi)
  45. return $this->_getMenuItemAPI($aItem, 'profile', [
  46. 'data' => BxDolProfile::getData($this->_aContentInfo[$CNF['FIELD_AUTHOR']])
  47. ]);
  48. $oProfile = BxDolProfile::getInstanceMagic($this->_aContentInfo[$CNF['FIELD_AUTHOR']]);
  49. return $this->getUnitMetaItemLink($oProfile->getDisplayName(), array(
  50. 'href' => $oProfile->getUrl(),
  51. 'class' => 'bx-base-text-unit-author'
  52. ));
  53. }
  54. protected function _getMenuItemDate($aItem)
  55. {
  56. $CNF = &$this->_oModule->_oConfig->CNF;
  57. if($this->_bIsApi)
  58. return $this->_getMenuItemAPI($aItem, 'time', [
  59. 'title' => $this->_aContentInfo[$CNF['FIELD_ADDED']]
  60. ]);
  61. if ($aItem['icon'] == '')
  62. return $this->getUnitMetaItemText(bx_time_js($this->_aContentInfo[$CNF['FIELD_ADDED']], BX_FORMAT_DATE));
  63. else
  64. return $this->getUnitMetaItemExtended(bx_time_js($this->_aContentInfo[$CNF['FIELD_ADDED']], BX_FORMAT_DATE), $aItem['icon'], '');
  65. }
  66. protected function _getMenuItemCategory($aItem)
  67. {
  68. $CNF = &$this->_oModule->_oConfig->CNF;
  69. if(empty($CNF['OBJECT_CATEGORY']) || empty($CNF['FIELD_CATEGORY']) || empty($this->_aContentInfo[$CNF['FIELD_CATEGORY']]))
  70. return false;
  71. $oCategory = BxDolCategory::getObjectInstance($CNF['OBJECT_CATEGORY']);
  72. if(!$oCategory)
  73. return false;
  74. $sTitle = $oCategory->getCategoryTitle($this->_aContentInfo[$CNF['FIELD_CATEGORY']]);
  75. $sLink = $oCategory->getCategoryUrl($this->_aContentInfo[$CNF['FIELD_CATEGORY']]);
  76. if($this->_bIsApi)
  77. return $this->_getMenuItemAPI($aItem, 'text', [
  78. 'title' => $sTitle,
  79. 'link' => $sLink
  80. ]);
  81. return $this->getUnitMetaItemLink($sTitle, [
  82. 'href' => $sLink
  83. ]);
  84. }
  85. protected function _getMenuItemTags($aItem)
  86. {
  87. if($this->_bIsApi) //--- API: Isn't supported
  88. return false;
  89. $CNF = &$this->_oModule->_oConfig->CNF;
  90. if(empty($CNF['OBJECT_METATAGS']))
  91. return false;
  92. $oMetatags = BxDolMetatags::getObjectInstance($CNF['OBJECT_METATAGS']);
  93. if(!$oMetatags || !$oMetatags->keywordsIsEnabled())
  94. return false;
  95. return $this->getUnitMetaItemCustom($oMetatags->getKeywordsList($this->_aContentInfo[$CNF['FIELD_ID']], 3));
  96. }
  97. protected function _getMenuItemViews($aItem, $aParams = [])
  98. {
  99. $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
  100. if($bShowAsObject && !$this->_bIsApi) //--- API: Object based views aren't supported
  101. return $this->_getMenuItemViewsObject($aItem, $aParams);
  102. $CNF = &$this->_oModule->_oConfig->CNF;
  103. if(empty($CNF['FIELD_VIEWS']) || (empty($this->_aContentInfo[$CNF['FIELD_VIEWS']]) && !$this->_bShowZeros))
  104. return false;
  105. $sTitle = _t('_view_n_views', $this->_aContentInfo[$CNF['FIELD_VIEWS']]);
  106. if($this->_bIsApi)
  107. return $this->_getMenuItemAPI($aItem, 'text', [
  108. 'title' => $sTitle
  109. ]);
  110. return $this->getUnitMetaItemText($sTitle);
  111. }
  112. protected function _getMenuItemViewsObject($aItem, $aParams = [])
  113. {
  114. $CNF = &$this->_oModule->_oConfig->CNF;
  115. if(empty($CNF['OBJECT_VIEWS']))
  116. return false;
  117. $oObject = BxDolView::getObjectInstance($CNF['OBJECT_VIEWS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
  118. if(!$oObject || !$oObject->isEnabled())
  119. return false;
  120. $aObjectOptions = [
  121. 'show_counter' => true
  122. ];
  123. if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
  124. $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
  125. if($this->_bIsApi)
  126. return false;
  127. return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
  128. }
  129. protected function _getMenuItemVotes($aItem, $aParams = [])
  130. {
  131. $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
  132. if($bShowAsObject || $this->_bIsApi) //--- API: Object base votes are used by default
  133. return $this->_getMenuItemVotesObject($aItem, $aParams);
  134. $CNF = &$this->_oModule->_oConfig->CNF;
  135. if(empty($CNF['FIELD_VOTES']) || (empty($this->_aContentInfo[$CNF['FIELD_VOTES']]) && !$this->_bShowZeros))
  136. return false;
  137. $sTitle = _t('_vote_n_votes', $this->_aContentInfo[$CNF['FIELD_VOTES']]);
  138. if($this->_bIsApi)
  139. return $this->_getMenuItemAPI($aItem, 'text', [
  140. 'title' => $sTitle
  141. ]);
  142. return $this->getUnitMetaItemText($sTitle);
  143. }
  144. protected function _getMenuItemVotesObject($aItem, $aParams = [])
  145. {
  146. $CNF = &$this->_oModule->_oConfig->CNF;
  147. if(empty($CNF['OBJECT_VOTES']))
  148. return false;
  149. $oObject = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $this->_aContentInfo[$CNF['FIELD_ID']]);
  150. if(!$oObject || !$oObject->isEnabled())
  151. return false;
  152. $aObjectOptions = [
  153. 'show_counter' => true
  154. ];
  155. if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
  156. $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
  157. if($this->_bIsApi)
  158. return $this->_getMenuItemElementAPI($aItem, $oObject->getElementApi($aObjectOptions));
  159. return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
  160. }
  161. protected function _getMenuItemRating($aItem, $aParams = [])
  162. {
  163. $CNF = &$this->_oModule->_oConfig->CNF;
  164. if(empty($CNF['OBJECT_VOTES_STARS']))
  165. return false;
  166. $oObject = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES_STARS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
  167. if(!$oObject || !$oObject->isEnabled())
  168. return false;
  169. $aObjectOptions = [
  170. 'show_counter' => true
  171. ];
  172. if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
  173. $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
  174. if($this->_bIsApi)
  175. return $this->_getMenuItemElementAPI($aItem, $oObject->getElementApi($aObjectOptions));
  176. return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
  177. }
  178. protected function _getMenuItemReactions($aItem)
  179. {
  180. $CNF = &$this->_oModule->_oConfig->CNF;
  181. $sKo = 'OBJECT_REACTIONS';
  182. if(empty($CNF[$sKo]))
  183. return false;
  184. $oObject = BxDolVote::getObjectInstance($CNF[$sKo], $this->_aContentInfo[$CNF['FIELD_ID']]);
  185. if(!$oObject || !$oObject->isEnabled())
  186. return false;
  187. //--- API: the reaction button with its counter, as the timeline sends it.
  188. if($this->_bIsApi)
  189. return $this->_getMenuItemElementAPI($aItem, $oObject->getElementApi([
  190. 'show_counter' => true,
  191. 'show_counter_style' => 'compound'
  192. ]));
  193. return $this->getUnitMetaItemCustom($oObject->getCounter([
  194. 'show_counter_style' => 'compound',
  195. 'show_counter_empty' => false,
  196. 'dynamic_mode' => true
  197. ]));
  198. }
  199. /**
  200. * Note. Saved for backward compatibility.
  201. */
  202. protected function _getMenuItemScore($aItem, $aParams = [])
  203. {
  204. return $this->_getMenuItemScores($aItem, $aParams);
  205. }
  206. protected function _getMenuItemScores($aItem, $aParams = [])
  207. {
  208. $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
  209. if($bShowAsObject || $this->_bIsApi) //--- API: Object base scores are used by default
  210. return $this->_getMenuItemScoreObject($aItem, $aParams);
  211. $CNF = &$this->_oModule->_oConfig->CNF;
  212. $sKf = 'FIELD_SCORE';
  213. if(empty($CNF[$sKf]) || (empty($this->_aContentInfo[$CNF[$sKf]]) && !$this->_bShowZeros))
  214. return false;
  215. $sTitle = _t('_sys_score_n_score', $this->_aContentInfo[$CNF[$sKf]]);
  216. if($this->_bIsApi)
  217. return $this->_getMenuItemAPI($aItem, 'text', [
  218. 'title' => $sTitle
  219. ]);
  220. return $this->getUnitMetaItemText($sTitle);
  221. }
  222. protected function _getMenuItemScoreObject($aItem, $aParams = [])
  223. {
  224. $CNF = &$this->_oModule->_oConfig->CNF;
  225. if(empty($CNF['OBJECT_SCORES']))
  226. return false;
  227. $oObject = BxDolScore::getObjectInstance($CNF['OBJECT_SCORES'], $this->_aContentInfo[$CNF['FIELD_ID']], true, $this->_oModule->_oTemplate);
  228. if(!$oObject || !$oObject->isEnabled())
  229. return false;
  230. $aObjectOptions = [
  231. 'show_counter' => true
  232. ];
  233. if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
  234. $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
  235. if($this->_bIsApi)
  236. return $this->_getMenuItemElementAPI([
  237. 'id' => $aItem['id'],
  238. 'name' => 'scores',
  239. ], $oObject->getElementApi($aObjectOptions));
  240. return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
  241. }
  242. protected function _getMenuItemComments($aItem, $aParams = [])
  243. {
  244. $bShowAsObject = isset($aParams['show_as_object']) && (bool)$aParams['show_as_object'] === true;
  245. if($bShowAsObject || $this->_bIsApi) //--- API: Object base comments are used by default
  246. return $this->_getMenuItemCommentsObject($aItem, $aParams);
  247. $CNF = &$this->_oModule->_oConfig->CNF;
  248. if(empty($CNF['OBJECT_COMMENTS']) || empty($CNF['FIELD_COMMENTS']) || (empty($this->_aContentInfo[$CNF['FIELD_COMMENTS']]) && !$this->_bShowZeros))
  249. return false;
  250. $oComments = BxDolCmts::getObjectInstance($CNF['OBJECT_COMMENTS'], $this->_aContentInfo[$CNF['FIELD_ID']]);
  251. if(!$oComments || !$oComments->isEnabled())
  252. return false;
  253. $sTitle = _t('_cmt_txt_n_comments', $oComments->getCommentsCountAll(0, true));
  254. $sLink = $oComments->getListUrl();
  255. if($this->_bIsApi)
  256. return $this->_getMenuItemAPI($aItem, 'text', [
  257. 'title' => $sTitle,
  258. 'link' => $sLink
  259. ]);
  260. return $this->getUnitMetaItemLink($sTitle, [
  261. 'href' => $sLink
  262. ]);
  263. }
  264. protected function _getMenuItemCommentsObject($aItem, $aParams = [])
  265. {
  266. $CNF = &$this->_oModule->_oConfig->CNF;
  267. if(empty($CNF['OBJECT_COMMENTS']))
  268. return false;
  269. $oObject = BxDolCmts::getObjectInstance($CNF['OBJECT_COMMENTS'], $this->_aContentInfo[$CNF['FIELD_ID']], true, $this->_oModule->_oTemplate);
  270. if(!$oObject || !$oObject->isEnabled())
  271. return false;
  272. $aObjectOptions = [
  273. 'show_counter' => true
  274. ];
  275. if(!empty($aParams['object_options']) && is_array($aParams['object_options']))
  276. $aObjectOptions = array_merge($aObjectOptions, $aParams['object_options']);
  277. if($this->_bIsApi)
  278. return $this->_getMenuItemElementAPI($aItem, $oObject->getElementApi($aObjectOptions));
  279. return $this->getUnitMetaItemCustom($oObject->getElementInline($aObjectOptions));
  280. }
  281. protected function _getMenuItemDefault($aItem)
  282. {
  283. if(($mixedResult = $this->_rewriteMenuItem($aItem)) !== false)
  284. return $mixedResult;
  285. return parent::_getMenuItemDefault($aItem);
  286. }
  287. protected function _getMenuItemDefaultApi($aItem)
  288. {
  289. if(($mixedResult = $this->_rewriteMenuItem($aItem)) !== false)
  290. return $mixedResult;
  291. return parent::_getMenuItemDefaultApi($aItem);
  292. }
  293. protected function _rewriteMenuItem($aItem, $aExtrasAddon = [])
  294. {
  295. return parent::_rewriteMenuItem($aItem, [
  296. 'module' => $this->_sModule,
  297. 'content_id' => $this->_iContentId,
  298. 'content_data' => $this->_aContentInfo,
  299. ]);
  300. }
  301. }
  302. /** @} */