diff --git a/QvitterPlugin.php b/QvitterPlugin.php index 2c3992e..742a1ff 100644 --- a/QvitterPlugin.php +++ b/QvitterPlugin.php @@ -153,6 +153,11 @@ class QvitterPlugin extends Plugin { // route/reroute urls public function onRouterInitialized($m) { + $m->connect(':nickname/mutes', + array('action' => 'qvitter', + 'nickname' => Nickname::INPUT_FMT)); + $m->connect('api/qvitter/mutes.json', + array('action' => 'ApiQvitterMutes')); $m->connect('api/qvitter/sandboxed.:format', array('action' => 'ApiQvitterSandboxed', 'format' => '(xml|json)')); @@ -1291,6 +1296,16 @@ class QvitterPlugin extends Plugin { $notification->whereAdd(sprintf('qvitternotification.from_profile_id IN (SELECT subscribed FROM subscription WHERE subscriber = %u)', $user_id)); } + // the user might have opted out from notifications from profiles they have muted + $hide_notifications_from_muted_users = Profile_prefs::getConfigData($profile, 'qvitter', 'hide_notifications_from_muted_users'); + if($hide_notifications_from_muted_users == '1') { + $muted_ids = QvitterMuted::getMutedIDs($profile->id,0,10000); // get all (hopefully not more than 10 000...) + if($muted_ids !== false && count($muted_ids) > 0) { + $ids_imploded = implode(',',$muted_ids); + $notification->whereAdd('qvitternotification.from_profile_id NOT IN ('.$ids_imploded.')'); + } + } + // the user might have opted out from certain notification types $current_profile = $user->getProfile(); $disable_notify_replies_and_mentions = Profile_prefs::getConfigData($current_profile, 'qvitter', 'disable_notify_replies_and_mentions'); diff --git a/actions/apiqvitterblocks.php b/actions/apiqvitterblocks.php index f6d7bb2..d970605 100644 --- a/actions/apiqvitterblocks.php +++ b/actions/apiqvitterblocks.php @@ -96,7 +96,7 @@ class ApiQvitterBlocksAction extends ApiPrivateAuthAction } /** - * Get the user's subscribers (followers) as an array of profiles + * Get the user's blocked profiles * * @return array Profiles */ diff --git a/actions/apiqvittermutes.php b/actions/apiqvittermutes.php new file mode 100644 index 0000000..ec56189 --- /dev/null +++ b/actions/apiqvittermutes.php @@ -0,0 +1,182 @@ + \\\\_\ · + · \\) \____) · + · · + · · + · · + · Qvitter is free software: you can redistribute it and / or modify it · + · under the terms of the GNU Affero General Public License as published by · + · the Free Software Foundation, either version three of the License or (at · + · your option) any later version. · + · · + · Qvitter is distributed in hope that it will be useful but WITHOUT ANY · + · WARRANTY; without even the implied warranty of MERCHANTABILTY or FITNESS · + · FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for · + · more details. · + · · + · You should have received a copy of the GNU Affero General Public License · + · along with Qvitter. If not, see . · + · · + · Contact h@nnesmannerhe.im if you have any questions. · + · · + · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · */ + +if (!defined('GNUSOCIAL')) { exit(1); } + + +class ApiQvitterMutesAction extends ApiPrivateAuthAction +{ + var $profiles = null; + + /** + * Take arguments for running + * + * @param array $args $_REQUEST args + * + * @return boolean success flag + */ + protected function prepare(array $args=array()) + { + parent::prepare($args); + + $this->format = 'json'; + + $this->count = (int)$this->arg('count', 100); + + return true; + } + + /** + * Handle the request + * + * Show the profiles + * + * @return void + */ + protected function handle() + { + parent::handle(); + + $this->target = Profile::current(); + + if(!$this->target instanceof Profile) { + $this->clientError(_('You have to be logged in to view your mutes.'), 403); + } + + $this->profiles = $this->getProfiles(); + + $this->initDocument('json'); + print json_encode($this->showProfiles()); + $this->endDocument('json'); + } + + /** + * Get the user's muted profiles + * + * @return array Profiles + */ + protected function getProfiles() + { + $offset = ($this->page - 1) * $this->count; + $limit = $this->count; + + $mutes = QvitterMuted::getMutedProfiles($this->target->id, $offset, $limit); + + if($mutes) { + return $mutes; + } else { + return false; + } + } + + /** + * Is this action read only? + * + * @param array $args other arguments + * + * @return boolean true + */ + function isReadOnly($args) + { + return true; + } + + /** + * When was this feed last modified? + * + * @return string datestamp of the latest profile in the stream + */ + function lastModified() + { + if (!empty($this->profiles) && (count($this->profiles) > 0)) { + return strtotime($this->profiles[0]->modified); + } + + return null; + } + + /** + * An entity tag for this action + * + * Returns an Etag based on the action name, language, user ID, and + * timestamps of the first and last profiles in the subscriptions list + * There's also an indicator to show whether this action is being called + * as /api/statuses/(friends|followers) or /api/(friends|followers)/ids + * + * @return string etag + */ + function etag() + { + if (!empty($this->profiles) && (count($this->profiles) > 0)) { + + $last = count($this->profiles) - 1; + + return '"' . implode( + ':', + array($this->arg('action'), + common_user_cache_hash($this->auth_user), + common_language(), + $this->target->id, + 'Profiles', + strtotime($this->profiles[0]->modified), + strtotime($this->profiles[$last]->modified)) + ) + . '"'; + } + + return null; + } + + /** + * Show the profiles as Twitter-style useres and statuses + * + * @return void + */ + function showProfiles() + { + $user_arrays = array(); + if($this->profiles !== false) { + foreach ($this->profiles as $profile) { + $user_arrays[] = $this->twitterUserArray($profile, false ); + } + } + return $user_arrays; + } +} diff --git a/actions/qvitter.php b/actions/qvitter.php index 50f8081..79f263b 100644 --- a/actions/qvitter.php +++ b/actions/qvitter.php @@ -480,11 +480,8 @@ class QvitterAction extends ApiAction -
  • +
  • -
  • -
  • -
  • @@ -492,6 +489,8 @@ class QvitterAction extends ApiAction
  • + +