From 8439774cf7cc2c352cbdfa0020f9345bc9741302 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 1 Oct 2010 11:12:53 -0700 Subject: [PATCH] Allow turning off Anonymous Favoring for specific users' notices --- plugins/AnonymousFave/AnonymousFavePlugin.php | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/plugins/AnonymousFave/AnonymousFavePlugin.php b/plugins/AnonymousFave/AnonymousFavePlugin.php index 72093e7f7e..a0aa126268 100644 --- a/plugins/AnonymousFave/AnonymousFavePlugin.php +++ b/plugins/AnonymousFave/AnonymousFavePlugin.php @@ -1,11 +1,19 @@ array('spock', 'kirk', 'bones')) + * ); + * + * * PHP version 5 * * This program is free software: you can redistribute it and/or modify @@ -48,7 +56,13 @@ define('ANONYMOUS_FAVE_PLUGIN_VERSION', '0.1'); * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ -class AnonymousFavePlugin extends Plugin { + +class AnonymousFavePlugin extends Plugin +{ + + // Array of users who should not have anon faving. The default is + // that anonymous faving is allowed for all users. + public $restricted = array(); function onArgsInitialize() { // We always want a session because we're tracking anon users @@ -128,16 +142,16 @@ class AnonymousFavePlugin extends Plugin { } } - function onStartInitializeRouter($m) { - + function onStartInitializeRouter($m) + { $m->connect('main/anonfavor', array('action' => 'AnonFavor')); $m->connect('main/anondisfavor', array('action' => 'AnonDisFavor')); return true; } - function onStartShowNoticeOptions($item) { - + function onStartShowNoticeOptions($item) + { if (!common_logged_in()) { $item->out->elementStart('div', 'notice-options'); $item->showFaveForm(); @@ -147,9 +161,9 @@ class AnonymousFavePlugin extends Plugin { return true; } - function onStartShowFaveForm($item) { - - if (!common_logged_in()) { + function onStartShowFaveForm($item) + { + if (!common_logged_in() && $this->hasAnonFaving($item)) { $profile = AnonymousFavePlugin::getAnonProfile(); if (!empty($profile)) { @@ -203,8 +217,8 @@ class AnonymousFavePlugin extends Plugin { $tally = Fave_tally::decrement($notice->id); } - static function createAnonProfile() { - + static function createAnonProfile() + { // Get the anon user's IP, and turn it into a nickname list($proxy, $ip) = common_client_ip(); @@ -240,7 +254,8 @@ class AnonymousFavePlugin extends Plugin { return $profile; } - static function getAnonProfile() { + static function getAnonProfile() + { $token = $_SESSION['anon_token']; $anon = base64_decode($token); @@ -261,6 +276,26 @@ class AnonymousFavePlugin extends Plugin { return $profile; } + /** + * Determine whether a given NoticeListItem should have the + * anonymous fave/disfave form + * + * @param NoticeListItem $item + * + * @return boolean false if the profile associated with the notice is + * in the list of restricted profiles, otherwise + * return true + */ + function hasAnonFaving($item) + { + $profile = Profile::staticGet('id', $item->notice->profile_id); + if (in_array($profile->nickname, $this->restricted)) { + return false; + } + + return true; + } + /** * Provide plugin version information. *