From 0d5dadc81d8477dad885b52c89bf69cdd2ad0cc5 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 30 Sep 2010 16:39:56 -0700 Subject: [PATCH] Change Disqus plugin to allow restricting to users with "richedit" role --- plugins/Disqus/DisqusPlugin.php | 51 ++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/plugins/Disqus/DisqusPlugin.php b/plugins/Disqus/DisqusPlugin.php index ec5857dd74..10155c3381 100644 --- a/plugins/Disqus/DisqusPlugin.php +++ b/plugins/Disqus/DisqusPlugin.php @@ -52,16 +52,19 @@ if (!defined('STATUSNET')) { * ); * * If you only want to allow commenting on a specific user's notices or - * a specific set of user's notices, use the "nicknames" array, e.g.: + * a specific set of users' notices initialize the plugin with the "restricted" + * parameter and grant the "richedit" role to those users. E.g.: * * addPlugin( * 'Disqus', array( - * 'shortname' => 'YOURSHORTNAME', - * 'divStyle' => 'width:675px; padding-top:10px; position:relative; float:left;', - * 'nicknames' => array('spock', 'kirk', 'bones') + * 'shortname' => 'YOURSHORTNAME', + * 'divStyle' => 'width:675px; padding-top:10px; position:relative; float:left;', + * 'restricted' => true * ) * ); * + * $ php userrole.php -s#### -nusername -rrichedit + * * * NOTE: the 'divStyle' in an optional parameter that passes in some * inline CSS when creating the Disqus widget. It's a shortcut to make @@ -85,7 +88,11 @@ class DisqusPlugin extends Plugin { public $shortname; // Required 'shortname' for actually triggering Disqus public $divStyle; // Optional CSS chunk for the main
- public $nicknames; // Optional array of nicks to restrict commenting to (default on for all users) + + // By default, Disqus commenting will be available to all users. + // With restricted on, only users who have been granted the + // "richedit" role get it. + public $restricted = false; /** * Add a Disqus commenting section to the end of an individual @@ -185,9 +192,9 @@ ENDOFSCRIPT; $profile = Profile::staticGet('id', $noticeListItem->notice->profile_id); - if ($this->hasCommenting($profile)) { + if ($this->isAllowedRichEdit($profile)) { - // @todo Refactor individual notice display to have it's own event hooks + // @todo Refactor individual notice display to have its own event hooks $noticeListItem->showNotice(); $noticeListItem->showNoticeInfo(); @@ -196,7 +203,9 @@ ENDOFSCRIPT; $noticeUrl .= '#disqus_thread'; $noticeListItem->out->element( - 'a', array('href' => $noticeUrl, 'class' => 'disqus_count'), 'Comments' + 'a', + array('href' => $noticeUrl, 'class' => 'disqus_count'), + _m('Comments') ); $noticeListItem->showNoticeOptions(); @@ -209,28 +218,24 @@ ENDOFSCRIPT; } /** - * Helper to check whether commenting should be enabled - * for a given notice + * Does the current user have permission to use the Disqus plugin? + * Always true unless the plugin's "restricted" setting is on, in which + * case it's limited to users with the "richedit" role. * - * Assumes commenting should be enabled, unless the - * nicknames array is populated + * @fixme make that more sanely configurable :) * * @param Profile $profile the profile to check * - * @return boolean true if yes + * @return boolean */ - private function hasCommenting($profile) + private function isAllowedRichEdit($profile) { - if (!empty($this->nicknames)) { - foreach ($this->nicknames as $nickname) { - if ($profile->nickname == $nickname) { - return true; - } - } - return false; + if ($this->restricted) { + $user = User::staticGet($profile->id); + return !empty($user) && $user->hasRole('richedit'); + } else { + return true; } - - return true; } /**