BxMarketTemplate.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  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 Market Market
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. /*
  12. * Module representation.
  13. */
  14. class BxMarketTemplate extends BxBaseModTextTemplate
  15. {
  16. protected $_aCurrency;
  17. /**
  18. * Constructor
  19. */
  20. function __construct(&$oConfig, &$oDb)
  21. {
  22. $this->MODULE = 'bx_market';
  23. parent::__construct($oConfig, $oDb);
  24. $this->_aCurrency = $this->_oConfig->getCurrency();
  25. }
  26. public function entryRating($aData)
  27. {
  28. $CNF = &$this->getModule()->_oConfig->CNF;
  29. $sVotes = '';
  30. $oVotes = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $aData['id']);
  31. if($oVotes) {
  32. $sVotes = $oVotes->getElementBlock(array('show_counter' => true, 'show_legend' => true));
  33. if(!empty($sVotes))
  34. $sVotes = $this->parseHtmlByName('entry-rating.html', array(
  35. 'content' => $sVotes,
  36. ));
  37. }
  38. return $sVotes;
  39. }
  40. public function entryText ($aData, $sTemplateName = 'entry-text.html')
  41. {
  42. $sScreenshots = $this->getScreenshots($aData);
  43. $this->addCss(BX_DIRECTORY_PATH_PLUGINS_PUBLIC . 'flickity/|flickity.css');
  44. $this->addJs('flickity/flickity.pkgd.min.js');
  45. return $this->parseHtmlByContent(parent::entryText($aData), array(
  46. 'bx_if:show_screenshots' => array(
  47. 'condition' => !empty($sScreenshots),
  48. 'content' => array(
  49. 'screenshots' => $sScreenshots
  50. )
  51. )
  52. ));
  53. }
  54. public function setCover($aData)
  55. {
  56. $CNF = &$this->getModule()->_oConfig->CNF;
  57. if(empty($aData[$CNF['FIELD_COVER']]))
  58. return;
  59. $mixedOptions = BxDolPage::getObjectInstanceByURI()->getPageCoverParams();
  60. if(empty($mixedOptions) || !is_array($mixedOptions))
  61. return;
  62. //--- Get Cover image URL
  63. $oTranscoderCover = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_COVER']);
  64. if(empty($oTranscoderCover))
  65. return;
  66. $sCoverUrl = $oTranscoderCover->getFileUrl($aData[$CNF['FIELD_COVER']]);
  67. if(empty($sCoverUrl))
  68. return;
  69. //--- Get Thumbnail image URL
  70. $sThumbnailUrl = '';
  71. $bThumbnailUrl = false;
  72. if(!empty($aData[$CNF['FIELD_THUMB']])) {
  73. $oTranscoderThumbnail = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_THUMB']);
  74. if($oTranscoderThumbnail)
  75. $sThumbnailUrl = $oTranscoderThumbnail->getFileUrl($aData[$CNF['FIELD_THUMB']]);
  76. $bThumbnailUrl = !empty($sThumbnailUrl);
  77. }
  78. $oCover = BxDolCover::getInstance($this);
  79. $oCover->setCoverImageUrl($sCoverUrl);
  80. $oCover->set(array_merge($mixedOptions, array(
  81. 'bx_if:image' => array (
  82. 'condition' => $bThumbnailUrl,
  83. 'content' => array(
  84. 'icon_url' => $sThumbnailUrl
  85. ),
  86. ),
  87. 'bx_if:icon' => array (
  88. 'condition' => !$bThumbnailUrl,
  89. 'content' => array(
  90. 'icon' => $CNF['ICON']
  91. ),
  92. ),
  93. 'bx_if:bg' => array (
  94. 'condition' => true,
  95. 'content' => array('image_url' => $sCoverUrl),
  96. ),
  97. )));
  98. }
  99. public function getScreenshots($aData)
  100. {
  101. $oModule = $this->getModule();
  102. $CNF = &$oModule->_oConfig->CNF;
  103. $aPhotos = $oModule->serviceGetScreenshots($aData[$CNF['FIELD_ID']]);
  104. if(empty($aPhotos) || !is_array($aPhotos))
  105. return '';
  106. return $this->parseHtmlByName('entry-screenshots.html', array(
  107. 'bx_repeat:items' => $aPhotos
  108. ));
  109. }
  110. public function getAuthorAddon ($aData, $oProfile)
  111. {
  112. $aAccount = $oProfile->getAccountObject()->getInfo();
  113. $sContent = $this->parseHtmlByName('entry-author.html', array(
  114. 'joined' => bx_time_js($aAccount['added']),
  115. 'last_active' => bx_time_js($aAccount['logged']),
  116. 'installs' => '?',
  117. ));
  118. return $sContent . parent::getAuthorAddon ($aData, $oProfile);
  119. }
  120. public function getGhostTemplateFileOptions($sField, $aFile, $aVersions)
  121. {
  122. $bField = !empty($aFile) && is_array($aFile) && isset($aFile[$sField]);
  123. $aTmplVarsVersions = array();
  124. foreach ($aVersions as $aVersion) {
  125. if($aVersion['type'] != 'version' || empty($aVersion['version']))
  126. continue;
  127. $aTmplVarsVersions[] = array(
  128. 'value' => $aVersion['version'],
  129. 'title' => $aVersion['version'],
  130. 'bx_if:selected' => array(
  131. 'condition' => $bField && $aFile[$sField] == $aVersion['version'],
  132. 'content' => array()
  133. )
  134. );
  135. }
  136. return $this->parseHtmlByName('form_ghost_template_file_options.html', array(
  137. 'bx_repeat:versions' => $aTmplVarsVersions
  138. ));
  139. }
  140. public function getGhostTemplateFile($oForm, $aContentInfo)
  141. {
  142. $CNF = &$this->getModule()->_oConfig->CNF;
  143. return $this->parseHtmlByName('form_ghost_template_file.html', array (
  144. 'name' => $oForm->aInputs[$CNF['FIELD_FILE']]['name'],
  145. 'content_id' => $oForm->aInputs[$CNF['FIELD_FILE']]['content_id'],
  146. 'editor_id' => $CNF['FIELD_TEXT_ID'],
  147. 'thumb_id' => isset($aContentInfo[$CNF['FIELD_PACKAGE']]) ? $aContentInfo[$CNF['FIELD_PACKAGE']] : 0,
  148. 'bx_if:set_thumb' => array (
  149. 'condition' => true,
  150. 'content' => array(
  151. 'name_thumb' => $CNF['FIELD_PACKAGE'],
  152. ),
  153. ),
  154. ));
  155. }
  156. protected function getUnit ($aData, $aParams = array())
  157. {
  158. $oModule = $this->getModule();
  159. $CNF = &$oModule->_oConfig->CNF;
  160. $aUnit = parent::getUnit($aData, $aParams);
  161. $oPayment = BxDolPayments::getInstance();
  162. $oPermalinks = BxDolPermalinks::getInstance();
  163. //--- Author Info
  164. list($sAuthorName, $sAuthorUrl, $sAuthorIcon) = $oModule->getUserInfo($aData[$CNF['FIELD_AUTHOR']]);
  165. $bAuthorIcon = !empty($sAuthorIcon);
  166. $sAuthorName = $this->parseHtmlByName('author_link.html', array(
  167. 'href' => $sAuthorUrl,
  168. 'title' => bx_html_attribute($sAuthorName),
  169. 'content' => $sAuthorName,
  170. 'bx_if:show_account' => array(
  171. 'condition' => false,
  172. 'content' => array()
  173. )
  174. ));
  175. //--- Main Info
  176. $sUrl = BX_DOL_URL_ROOT . $oPermalinks->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aData[$CNF['FIELD_ID']]);
  177. $sLinkMore = ' <a title="' . bx_html_attribute(_t('_sys_read_more', $aData[$CNF['FIELD_TITLE']])) . '" href="' . $sUrl . '"><i class="sys-icon ellipsis-h"></i></a>';
  178. $sSummary = strmaxtextlen($aData[$CNF['FIELD_TEXT']], (int)getParam($CNF['PARAM_CHARS_SUMMARY']), $sLinkMore);
  179. $sSummaryPlain = BxTemplFunctions::getInstance()->getStringWithLimitedLength(strip_tags($sSummary), (int)getParam($CNF['PARAM_CHARS_SUMMARY_PLAIN']));
  180. $sDate = $this->parseHtmlByName('snippet-date.html', array(
  181. 'date' => bx_time_js($aData[$CNF['FIELD_ADDED']])
  182. ));
  183. //--- Icon Info
  184. $sIconUrl = '';
  185. if(!empty($CNF['FIELD_THUMB']) && $aData[$CNF['FIELD_THUMB']]) {
  186. $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_ICON']);
  187. if($oImagesTranscoder)
  188. $sIconUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_THUMB']]);
  189. if(empty($sIconUrl)) {
  190. $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_THUMB']);
  191. if($oImagesTranscoder)
  192. $sIconUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_THUMB']]);
  193. }
  194. }
  195. //--- Cover Info
  196. $sCoverUrl = '';
  197. if(!empty($CNF['FIELD_COVER']) && $aData[$CNF['FIELD_COVER']]) {
  198. $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_COVER']);
  199. if($oImagesTranscoder)
  200. $sCoverUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_COVER']]);
  201. if(empty($sCoverUrl)) {
  202. $oImagesTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_IMAGES_TRANSCODER_GALLERY']);
  203. if($oImagesTranscoder)
  204. $sCoverUrl = $oImagesTranscoder->getFileUrl($aData[$CNF['FIELD_COVER']]);
  205. }
  206. }
  207. //--- Price Single
  208. $bTmplVarsSingle = (float)$aData[$CNF['FIELD_PRICE_SINGLE']] != 0;
  209. $aTmplVarsSingle = array();
  210. if($bTmplVarsSingle) {
  211. $aJsSingle = $oPayment->getAddToCartJs($aData[$CNF['FIELD_AUTHOR']], $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1);
  212. if(!empty($aJsSingle) && is_array($aJsSingle)) {
  213. list($sJsCode, $sSingleOnclick) = $aJsSingle;
  214. $aTmplVarsSingle = array(
  215. 'price_single_onclick' => $sSingleOnclick,
  216. 'price_single' => _t('_bx_market_txt_price_single', $this->_aCurrency['sign'], $aData[$CNF['FIELD_PRICE_SINGLE']])
  217. );
  218. }
  219. else
  220. $bTmplVarsSingle = false;
  221. }
  222. //--- Price Recurring
  223. $bTmplVarsRecurring = (float)$aData[$CNF['FIELD_PRICE_RECURRING']] != 0;
  224. $aTmplVarsRecurring = array();
  225. if($bTmplVarsRecurring) {
  226. $aJsRecurring = $oPayment->getSubscribeJs($aData[$CNF['FIELD_AUTHOR']], '', $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1);
  227. if(!empty($aJsRecurring) && is_array($aJsRecurring)) {
  228. list($sJsCode, $sRecurringOnclick) = $aJsRecurring;
  229. $aTmplVarsRecurring = array(
  230. 'price_recurring_onclick' => $sRecurringOnclick,
  231. 'price_recurring' => _t('_bx_market_txt_price_recurring', $this->_aCurrency['sign'], $aData[$CNF['FIELD_PRICE_RECURRING']], _t($CNF['T']['txt_per_' . $aData[$CNF['FIELD_DURATION_RECURRING']] . '_short']))
  232. );
  233. }
  234. else
  235. $bTmplVarsRecurring = false;
  236. }
  237. $sActions = '';
  238. $oActions = BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_ACTIONS_SNIPPET']);
  239. if($oActions) {
  240. $oActions->setContentId($aData[$CNF['FIELD_ID']]);
  241. $sActions = $oActions->getCode();
  242. }
  243. $sVotes = '';
  244. $oVotes = BxDolVote::getObjectInstance($CNF['OBJECT_VOTES'], $aData[$CNF['FIELD_ID']]);
  245. if($oVotes)
  246. $sVotes = $oVotes->getElementBlock(array('show_counter' => false));
  247. $aUnit = array_merge($aUnit, array(
  248. 'actions' => $sActions,
  249. 'bx_if:show_author_icon' => array(
  250. 'condition' => $bAuthorIcon,
  251. 'content' => array(
  252. 'author_icon' => $sAuthorIcon
  253. )
  254. ),
  255. 'bx_if:show_author_icon_empty' => array(
  256. 'condition' => !$bAuthorIcon,
  257. 'content' => array()
  258. ),
  259. 'author_width_date' => _t('_bx_market_txt_author_added_product', $sAuthorName, $sDate),
  260. 'bx_if:show_icon' => array (
  261. 'condition' => $sIconUrl,
  262. 'content' => array(
  263. 'icon_url' => $sIconUrl,
  264. ),
  265. ),
  266. 'bx_if:show_icon_empty' => array (
  267. 'condition' => !$sIconUrl,
  268. 'content' => array(
  269. 'icon' => $CNF['ICON']
  270. ),
  271. ),
  272. 'bx_if:show_cover' => array (
  273. 'condition' => $sCoverUrl,
  274. 'content' => array (
  275. 'summary_attr' => bx_html_attribute($sSummaryPlain),
  276. 'content_url' => $sUrl,
  277. 'cover_url' => $sCoverUrl,
  278. 'strecher' => str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ', 40),
  279. ),
  280. ),
  281. 'bx_if:show_cover_empty' => array (
  282. 'condition' => !$sCoverUrl,
  283. 'content' => array (
  284. 'summary_plain' => $sSummaryPlain,
  285. 'strecher' => mb_strlen($sSummaryPlain) > 240 ? '' : str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ', round((240 - mb_strlen($sSummaryPlain)) / 6)),
  286. ),
  287. ),
  288. 'content_url' => $sUrl,
  289. 'votes' => $sVotes,
  290. 'bx_if:show_single' => array(
  291. 'condition' => $bTmplVarsSingle,
  292. 'content' => $aTmplVarsSingle
  293. ),
  294. 'bx_if:show_recurring' => array(
  295. 'condition' => $bTmplVarsRecurring,
  296. 'content' => $aTmplVarsRecurring
  297. ),
  298. 'bx_if:show_free' => array(
  299. 'condition' => !$bTmplVarsSingle && !$bTmplVarsRecurring,
  300. 'content' => array(
  301. 'price_free_href' => $oPermalinks->permalink('page.php?i=' . $CNF['URI_DOWNLOAD_ENTRY'] . '&id=' . $aData[$CNF['FIELD_ID']])
  302. )
  303. ),
  304. ));
  305. return $aUnit;
  306. }
  307. protected function getAttachments($sStorage, $aData)
  308. {
  309. $aFiles = $this->_oDb->getFile(array('type' => 'content_id_key_file_id', 'content_id' => $aData['id']));
  310. $aAttachments = parent::getAttachments($sStorage, $aData);
  311. if(empty($aAttachments) || !is_array($aAttachments))
  312. return $aAttachments;
  313. foreach($aAttachments as $iIndex => $aAttachment) {
  314. $iAttachmentId = (int)$aAttachment['id'];
  315. $aAttachments[$iIndex]['bx_if:main'] = array(
  316. 'condition' => (int)$aData['package'] == $iAttachmentId,
  317. 'content' => array()
  318. );
  319. $bAttachment = !empty($aFiles[$iAttachmentId]);
  320. $aAttachments[$iIndex]['bx_if:not_image']['content'] = array_merge($aAttachments[$iIndex]['bx_if:not_image']['content'], array(
  321. 'file_type' => $bAttachment ? _t('_bx_market_form_entry_input_files_type_' . $aFiles[$iAttachmentId]['type']) : '',
  322. 'bx_if:show_version' => array(
  323. 'condition' => $bAttachment && $aFiles[$iAttachmentId]['type'] == BX_MARKET_FILE_TYPE_VERSION,
  324. 'content' => array(
  325. 'file_version' => $bAttachment ? $aFiles[$iAttachmentId]['version'] : ''
  326. )
  327. ),
  328. 'bx_if:show_update' => array(
  329. 'condition' => $bAttachment && $aFiles[$iAttachmentId]['type'] == BX_MARKET_FILE_TYPE_UPDATE,
  330. 'content' => array(
  331. 'file_version_from_to' => $bAttachment ? _t('_bx_market_form_entry_input_files_version_from_x_to_y', $aFiles[$iAttachmentId]['version'], $aFiles[$iAttachmentId]['version_to']) : ''
  332. )
  333. )
  334. ));
  335. }
  336. return $aAttachments;
  337. }
  338. }
  339. /** @} */