From 35407614bb6287e96f5c08194eb0fa7ea1b71339 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 20 Nov 2008 13:37:22 -0500 Subject: [PATCH] hide certain users from the public stream On identi.ca, certain users (http://identi.ca/derricklo) publish 5-10 automated notices every half hour or hour. This can flood the public stream, making it unreadable for casual readers. We don't want to prevent anyone from using the site for personal use. However, if their personal use clouds up the public space, we can gently remove them from that public space without interfering with their personal activity. So: this change prevents selected people's notices from appearing in the public stream. It's hand-configured by an administrator, and probably doesn't scale beyond 10-20 blacklisted users. It's a stopgap measure. darcs-hash:20081120183722-84dde-8a8401fbcbb6abb60a8b36de249323586ea0b22c.gz --- classes/Notice.php | 17 +++++++++++------ config.php.sample | 4 ++++ lib/common.php | 3 ++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 92d4b88329..c392c39c9f 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -357,17 +357,22 @@ class Notice extends Memcached_DataObject function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0) { - $needAnd = FALSE; - $needWhere = TRUE; - + $parts = array(); + $qry = 'SELECT * FROM notice '; if (common_config('public', 'localonly')) { - $qry .= ' WHERE is_local = 1 '; - $needWhere = FALSE; - $needAnd = TRUE; + $parts[] = 'is_local = 1'; } + if (common_config('public', 'blacklist')) { + $parts[] = 'profile_id not in (' . implode(',', common_config('public', 'blacklist')) . ')'; + } + + if ($parts) { + $qry .= ' WHERE ' . implode(' AND ', $parts); + } + return Notice::getStream($qry, 'public', $offset, $limit, $since_id, $before_id); diff --git a/config.php.sample b/config.php.sample index d976b523b5..17a7763af7 100644 --- a/config.php.sample +++ b/config.php.sample @@ -92,6 +92,10 @@ $config['db']['database'] = 'mysql://laconica:microblog@localhost/laconica'; #optionally show non-local messages in public timeline #$config['public']['localonly'] = false; +#hide certain users from public pages, by ID +#$config['public']['blacklist'][] = 123; +#$config['public']['blacklist'][] = 2307; + #Do notice broadcasts offline #If you use this, you must run the six offline daemons in the #background. See the README for details. diff --git a/lib/common.php b/lib/common.php index 72965a3581..2ab9c616c4 100644 --- a/lib/common.php +++ b/lib/common.php @@ -86,7 +86,8 @@ $config = 'avatar' => array('server' => NULL), 'public' => - array('localonly' => true), + array('localonly' => true, + 'blacklist' => array()), 'theme' => array('server' => NULL), 'xmpp' =>