X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FAnonymousFave%2FAnonymousFavePlugin.php;h=c00e0ecb509b17aa3bc5ff239f1b2fb7dd719eb4;hb=4160a3fb730113f3d712bd777884c4b0482f6df1;hp=47eebef9bae187b3dbb064296bb1c088ca173b4a;hpb=54f19da3ab534f5f416fc4902841439ddbe0f10e;p=quix0rs-gnu-social.git diff --git a/plugins/AnonymousFave/AnonymousFavePlugin.php b/plugins/AnonymousFave/AnonymousFavePlugin.php index 47eebef9ba..c00e0ecb50 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,9 +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() { + function onArgsInitialize(array &$args) { // We always want a session because we're tracking anon users common_ensure_session(); } @@ -68,27 +80,12 @@ class AnonymousFavePlugin extends Plugin { $schema = Schema::get(); // For storing total number of times a notice has been faved - - $schema->ensureTable('fave_tally', - array( - new ColumnDef('notice_id', 'integer', null, false, 'PRI'), - new ColumnDef('count', 'integer', null, false), - new ColumnDef( - 'modified', - 'timestamp', - null, - false, - null, - 'CURRENT_TIMESTAMP', - 'on update CURRENT_TIMESTAMP' - ) - ) - ); + $schema->ensureTable('fave_tally', Fave_tally::schemaDef()); return true; } - function onEndShowHTML($action) + function onEndShowHTML(Action $action) { if (!common_logged_in()) { // Set a place to return to when submitting forms @@ -96,48 +93,23 @@ class AnonymousFavePlugin extends Plugin { } } - function onEndShowScripts($action) + function onEndShowScripts(Action $action) { // Setup ajax calls for favoriting. Usually this is only done when // a user is logged in. $action->inlineScript('SN.U.NoticeFavor();'); } - function onAutoload($cls) + function onStartInitializeRouter($m) { - $dir = dirname(__FILE__); - - switch ($cls) { - case 'Fave_tally': - include_once $dir . '/' . $cls . '.php'; - return false; - case 'AnonFavorAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; - case 'AnonDisFavorAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; - case 'AnonFavorForm': - include_once $dir . '/anonfavorform.php'; - return false; - case 'AnonDisFavorForm': - include_once $dir . '/anondisfavorform.php'; - return false; - default: - return true; - } - } - - 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,13 +119,13 @@ 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)) { - if ($profile->hasFave($item->notice)) { + if ($profile instanceof Profile) { + if (Fave::existsForProfile($item->notice, $profile)) { $disfavor = new AnonDisFavorForm($item->out, $item->notice); $disfavor->show(); } else { @@ -188,7 +160,13 @@ class AnonymousFavePlugin extends Plugin { 'class' => 'notice-tally' ) ); - $out->raw(sprintf(_m("favored %d times"), $tally->count)); + $out->elementStart('span', array('class' => 'fave-tally-title')); + // TRANS: Label for tally for number of times a notice was favored. + $out->raw(sprintf(_m("Favored"))); + $out->elementEnd('span'); + $out->elementStart('span', array('class' => 'fave-tally')); + $out->raw($tally->count); + $out->elementEnd('span'); $out->elementEnd('div'); } } @@ -203,20 +181,21 @@ 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(); // IP + time + random number should help to avoid collisions - $baseNickname = $ip . '-' . time() . '-' . common_good_rand(5); + $baseNickname = $ip . '-' . time() . '-' . common_random_hexstr(5); $profile = new Profile(); $profile->nickname = $baseNickname; $id = $profile->insert(); if (!$id) { - throw new ServerException(_m("Couldn't create anonymous user session")); + // TRANS: Server exception. + throw new ServerException(_m("Could not create anonymous user session.")); } // Stick the Profile ID into the nickname @@ -226,7 +205,8 @@ class AnonymousFavePlugin extends Plugin { $result = $profile->update($orig); if (!$result) { - throw new ServerException(_m("Couldn't create anonymous user session")); + // TRANS: Server exception. + throw new ServerException(_m("Could not create anonymous user session.")); } common_log( @@ -240,7 +220,8 @@ class AnonymousFavePlugin extends Plugin { return $profile; } - static function getAnonProfile() { + static function getAnonProfile() + { $token = $_SESSION['anon_token']; $anon = base64_decode($token); @@ -251,7 +232,7 @@ class AnonymousFavePlugin extends Plugin { $parts = explode('-', $anon); $id = $parts[1]; // Do Profile lookup by ID instead of nickname for safety/performance - $profile = Profile::staticGet('id', $id); + $profile = Profile::getKV('id', $id); } else { $profile = AnonymousFavePlugin::createAnonProfile(); // Obfuscate so it's hard to figure out the Profile ID @@ -261,6 +242,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::getKV('id', $item->notice->profile_id); + if (in_array($profile->nickname, $this->restricted)) { + return false; + } + + return true; + } + /** * Provide plugin version information. * @@ -270,7 +271,7 @@ class AnonymousFavePlugin extends Plugin { * * @return boolean hook value */ - function onPluginVersion(&$versions) + function onPluginVersion(array &$versions) { $url = 'http://status.net/wiki/Plugin:AnonymousFave'; @@ -279,9 +280,9 @@ class AnonymousFavePlugin extends Plugin { 'author' => 'Zach Copley', 'homepage' => $url, 'rawdescription' => + // TRANS: Plugin description. _m('Allow anonymous users to favorite notices.')); return true; } - }