summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2010-09-30 16:39:56 -0700
committerZach Copley <zach@status.net>2010-09-30 16:39:56 -0700
commit0d5dadc81d8477dad885b52c89bf69cdd2ad0cc5 (patch)
tree813be16b7b896824102e3a1361f290c6f75f78da
parent8a28d9cc4de896c154325c8ca0e346d78fc4c510 (diff)
Change Disqus plugin to allow restricting to users with "richedit" role
-rw-r--r--plugins/Disqus/DisqusPlugin.php51
1 files changed, 28 insertions, 23 deletions
diff --git a/plugins/Disqus/DisqusPlugin.php b/plugins/Disqus/DisqusPlugin.php
index ec5857dd7..10155c338 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 <div>
- 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;
}
/**