BxDolRssFactory.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. class BxDolRssFactory extends BxDol
  10. {
  11. /**
  12. * @param array $aRssData, fields:
  13. * UnitID
  14. * OwnerID
  15. * UnitTitle
  16. * UnitLink
  17. * UnitDesc
  18. * UnitDateTimeUTS
  19. * UnitIcon
  20. */
  21. function GenRssByData($aRssData, $sUnitTitleC, $sMainLink)
  22. {
  23. return $this->GenRssByCustomData($aRssData, $sUnitTitleC, $sMainLink, array(
  24. 'Guid' => 'UnitID',
  25. 'Link' => 'UnitLink',
  26. 'Title' => 'UnitTitle',
  27. 'DateTimeUTS' => 'UnitDateTimeUTS',
  28. 'Desc' => 'UnitDesc',
  29. ));
  30. }
  31. /**
  32. * Generate rss feed using any custom data fields
  33. * but you need to describe fields in $aFields array.
  34. *
  35. * Required fileds:
  36. * Link
  37. * Title
  38. * DateTimeUTS
  39. * Desc
  40. *
  41. * Optional fields:
  42. * Photo
  43. */
  44. function GenRssByCustomData($aRssData, $sUnitTitleC, $sMainLink, $aFields, $sImage = '', $iPID = 0)
  45. {
  46. $sRSSLast = '';
  47. if (isset($aRssData[0]))
  48. $sRSSLast = bx_time_utc($aRssData[0][$aFields['DateTimeUTS']]);
  49. if ($iPID > 0)
  50. $aPIDOwnerInfo = getProfileInfo($iPID);
  51. $iUnitLimitChars = 2000;//(int)getParam('max_blog_preview');
  52. $sUnitRSSFeed = '';
  53. if ($aRssData) {
  54. $sTxtReadMore = _t('_Read more');
  55. foreach ($aRssData as $aUnitInfo) {
  56. $sUnitUrl = $aUnitInfo[$aFields['Link']];
  57. $sUnitGuid = $aUnitInfo[$aFields['Guid']];
  58. $sUnitTitle = strip_tags($aUnitInfo[$aFields['Title']]);
  59. $sUnitDate = bx_time_utc($aUnitInfo[$aFields['DateTimeUTS']]);
  60. $sUnitDesc = '';
  61. if(isset($aFields['Desc']) && !empty($aUnitInfo[$aFields['Desc']])) {
  62. $sLinkMore = '';
  63. if(strlen($aUnitInfo[$aFields['Desc']]) > $iUnitLimitChars)
  64. $sLinkMore = "... <a href=\"" . $sUnitUrl . "\">" . $sTxtReadMore . "</a>";
  65. $sUnitDesc = "<p>" . mb_substr(strip_tags($aUnitInfo[$aFields['Desc']]), 0, $iUnitLimitChars) . $sLinkMore . "</p>";
  66. }
  67. if(isset($aFields['Image']) && !empty($aUnitInfo[$aFields['Image']]))
  68. $sUnitDesc .= "<img src=\"" . $aUnitInfo[$aFields['Image']] . "\" />";
  69. $sUnitRSSFeed .= "<item><title><![CDATA[{$sUnitTitle}]]></title><link><![CDATA[{$sUnitUrl}]]></link><guid><![CDATA[{$sUnitGuid}]]></guid><description><![CDATA[{$sUnitDesc}]]></description><pubDate>{$sUnitDate}</pubDate></item>";
  70. }
  71. }
  72. $sRSSTitle = _t('_RSS_Feed_Title_Common', $sUnitTitleC);
  73. if ($iPID > 0) {
  74. $sRSSTitle = _t('_RSS_Feed_Title_Profile', $aPIDOwnerInfo['NickName'], $sUnitTitleC);
  75. }
  76. if(substr($sMainLink, 0, 7) != 'http://' && substr($sMainLink, 0, 8) != 'https://')
  77. $sMainLink = BX_DOL_URL_ROOT . $sMainLink;
  78. $sRSSImage = '';
  79. if ($sImage) {
  80. $sRSSImage = "<image><url>{$sImage}</url><title>{$sRSSTitle}</title><link>{$sMainLink}</link></image>";
  81. }
  82. return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rss version=\"2.0\"><channel><title>{$sRSSTitle}</title><link><![CDATA[{$sMainLink}]]></link><description>{$sRSSTitle}</description><lastBuildDate>{$sRSSLast}</lastBuildDate>{$sRSSImage}{$sUnitRSSFeed}</channel></rss>";
  83. }
  84. }
  85. /** @} */