BxDolRssFactory.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. foreach ($aRssData as $aUnitInfo) {
  55. $sUnitUrl = $aUnitInfo[$aFields['Link']];
  56. $sUnitGuid = $aUnitInfo[$aFields['Guid']];
  57. $sUnitTitle = strip_tags($aUnitInfo[$aFields['Title']]);
  58. $sUnitDate = bx_time_utc($aUnitInfo[$aFields['DateTimeUTS']]);
  59. $sLinkMore = '';
  60. if ( strlen( $aUnitInfo[$aFields['Desc']]) > $iUnitLimitChars ) {
  61. $sLinkMore = "... <a href=\"".$sUnitUrl."\">"._t('_Read more')."</a>";
  62. }
  63. $sUnitDescVal = mb_substr(strip_tags($aUnitInfo[$aFields['Desc']]), 0, $iUnitLimitChars) . $sLinkMore;
  64. $sUnitDesc = $sUnitDescVal;
  65. $sUnitRSSFeed .= "<item><title><![CDATA[{$sUnitTitle}]]></title><link><![CDATA[{$sUnitUrl}]]></link><guid><![CDATA[{$sUnitGuid}]]></guid><description><![CDATA[{$sUnitDesc}]]></description><pubDate>{$sUnitDate}</pubDate></item>";
  66. }
  67. }
  68. $sRSSTitle = _t('_RSS_Feed_Title_Common', $sUnitTitleC);
  69. if ($iPID > 0) {
  70. $sRSSTitle = _t('_RSS_Feed_Title_Profile', $aPIDOwnerInfo['NickName'], $sUnitTitleC);
  71. }
  72. if(substr($sMainLink, 0, 7) != 'http://' && substr($sMainLink, 0, 8) != 'https://')
  73. $sMainLink = BX_DOL_URL_ROOT . $sMainLink;
  74. $sRSSImage = '';
  75. if ($sImage) {
  76. $sRSSImage = "<image><url>{$sImage}</url><title>{$sRSSTitle}</title><link>{$sMainLink}</link></image>";
  77. }
  78. 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>";
  79. }
  80. }
  81. /** @} */