BxDolRssFactory.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * @package Dolphin Core
  4. * @copyright Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  5. * @license CC-BY - http://creativecommons.org/licenses/by/3.0/
  6. */
  7. defined('BX_DOL') or die('hack attempt');
  8. class BxDolRssFactory extends BxDol {
  9. /**
  10. * default constructor of factory pattern
  11. */
  12. function BxDolRssFactory() {
  13. parent::BxDol();
  14. }
  15. /**
  16. * @param array $aRssData, fields:
  17. * UnitID
  18. * OwnerID
  19. * UnitTitle
  20. * UnitLink
  21. * UnitDesc
  22. * UnitDateTimeUTS
  23. * UnitIcon
  24. */
  25. function GenRssByData($aRssData, $sUnitTitleC, $sMainLink) {
  26. return $this->GenRssByCustomData($aRssData, $sUnitTitleC, $sMainLink, array(
  27. 'Guid' => 'UnitID',
  28. 'Link' => 'UnitLink',
  29. 'Title' => 'UnitTitle',
  30. 'DateTimeUTS' => 'UnitDateTimeUTS',
  31. 'Desc' => 'UnitDesc',
  32. ));
  33. }
  34. /**
  35. * Generate rss feed using any custom data fields
  36. * but you need to describe fields in $aFields array.
  37. *
  38. * Required fileds:
  39. * Link
  40. * Title
  41. * DateTimeUTS
  42. * Desc
  43. *
  44. * Optional fields:
  45. * Photo
  46. */
  47. function GenRssByCustomData($aRssData, $sUnitTitleC, $sMainLink, $aFields, $sImage = '', $iPID = 0) {
  48. $sUnits = '';
  49. $sRSSLast = '';
  50. if (isset($aRssData[0]))
  51. $sRSSLast = bx_time_utc($aRssData[0][$aFields['DateTimeUTS']]);
  52. if ($iPID > 0)
  53. $aPIDOwnerInfo = getProfileInfo($iPID);
  54. $iUnitLimitChars = 2000;//(int)getParam('max_blog_preview');
  55. $sUnitRSSFeed = '';
  56. if ($aRssData) {
  57. foreach ($aRssData as $iUnitID => $aUnitInfo) {
  58. $sUnitUrl = $aUnitInfo[$aFields['Link']];
  59. $sUnitGuid = $aUnitInfo[$aFields['Guid']];
  60. $sUnitTitle = strmaxwordlen(strip_tags($aUnitInfo[$aFields['Title']]), 100);
  61. $sUnitDate = bx_time_utc($aUnitInfo[$aFields['DateTimeUTS']]);
  62. $sLinkMore = '';
  63. if ( strlen( $aUnitInfo[$aFields['Desc']]) > $iUnitLimitChars ) {
  64. $sLinkMore = "... <a href=\"".$sUnitUrl."\">"._t('_Read more')."</a>";
  65. }
  66. $sUnitDescVal = mb_substr(strip_tags($aUnitInfo[$aFields['Desc']]), 0, $iUnitLimitChars) . $sLinkMore;
  67. $sUnitDesc = $sUnitDescVal;
  68. $sUnitRSSFeed .= "<item><title><![CDATA[{$sUnitTitle}]]></title><link><![CDATA[{$sUnitUrl}]]></link><guid><![CDATA[{$sUnitGuid}]]></guid><description><![CDATA[{$sUnitDesc}]]></description><pubDate>{$sUnitDate}</pubDate></item>";
  69. }
  70. }
  71. $sRSSTitle = _t('_RSS_Feed_Title_Common', $sUnitTitleC);
  72. if ($iPID > 0) {
  73. $sRSSTitle = _t('_RSS_Feed_Title_Profile', $aPIDOwnerInfo['NickName'], $sUnitTitleC);
  74. }
  75. if(substr($sMainLink, 0, 7) != 'http://' && substr($sMainLink, 0, 8) != 'https://')
  76. $sMainLink = BX_DOL_URL_ROOT . $sMainLink;
  77. $sRSSImage = '';
  78. if ($sImage) {
  79. $sRSSImage = "<image><url>{$sImage}</url><title>{$sRSSTitle}</title><link>{$sMainLink}</link></image>";
  80. }
  81. 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>";
  82. }
  83. }