PublicAndExternalNoticeStream.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /* · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
  3. · ·
  4. · ·
  5. · Q V I T T E R ·
  6. · ·
  7. · https://git.gnu.io/h2p/Qvitter ·
  8. · ·
  9. · ·
  10. · <o) ·
  11. · /_//// ·
  12. · (____/ ·
  13. · (o< ·
  14. · o> \\\\_\ ·
  15. · \\) \____) ·
  16. · ·
  17. · ·
  18. · ·
  19. · Qvitter is free software: you can redistribute it and / or modify it ·
  20. · under the terms of the GNU Affero General Public License as published by ·
  21. · the Free Software Foundation, either version three of the License or (at ·
  22. · your option) any later version. ·
  23. · ·
  24. · Qvitter is distributed in hope that it will be useful but WITHOUT ANY ·
  25. · WARRANTY; without even the implied warranty of MERCHANTABILTY or FITNESS ·
  26. · FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for ·
  27. · more details. ·
  28. · ·
  29. · You should have received a copy of the GNU Affero General Public License ·
  30. · along with Qvitter. If not, see <http://www.gnu.org/licenses/>. ·
  31. · ·
  32. · Contact h@nnesmannerhe.im if you have any questions. ·
  33. · ·
  34. · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */
  35. if (!defined('STATUSNET')) {
  36. exit(1);
  37. }
  38. class PublicAndExternalNoticeStream extends ScopingNoticeStream
  39. {
  40. function __construct($profile=null)
  41. {
  42. parent::__construct(new CachingNoticeStream(new RawPublicAndExternalNoticeStream(),
  43. 'publicAndExternal'),
  44. $profile);
  45. }
  46. }
  47. class RawPublicAndExternalNoticeStream extends NoticeStream
  48. {
  49. function getNoticeIds($offset, $limit, $since_id, $max_id)
  50. {
  51. $notice = new Notice();
  52. $notice->selectAdd();
  53. $notice->selectAdd('id');
  54. $notice->orderBy('id DESC');
  55. if (!is_null($offset)) {
  56. $notice->limit($offset, $limit);
  57. }
  58. $notice->whereAdd('is_local !='. Notice::LOCAL_NONPUBLIC);
  59. $notice->whereAdd('is_local !='. Notice::GATEWAY);
  60. $notice->whereAdd('repeat_of IS NULL');
  61. // don't show sandboxed users in public timelines, unless you are a mod
  62. $hide_sandboxed = true;
  63. $cur_profile = Profile::current();
  64. if($cur_profile instanceof Profile) {
  65. if($cur_profile->hasRight(Right::REVIEWSPAM)) {
  66. $hide_sandboxed = false;
  67. }
  68. }
  69. if($hide_sandboxed) {
  70. $notice->whereAdd('profile_id NOT IN (SELECT profile_id FROM profile_role WHERE role =\''.Profile_role::SANDBOXED.'\')');
  71. }
  72. if(!empty($max_id) && is_numeric($max_id)) {
  73. $notice->whereAdd('id < '.$max_id);
  74. }
  75. if(!empty($since_id) && is_numeric($since_id)) {
  76. $notice->whereAdd('id > '.$since_id);
  77. }
  78. $ids = array();
  79. if ($notice->find()) {
  80. while ($notice->fetch()) {
  81. $ids[] = $notice->id;
  82. }
  83. }
  84. $notice->free();
  85. $notice = NULL;
  86. return $ids;
  87. }
  88. }