X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FDisqus%2FDisqusPlugin.php;h=add089e77f5a9aeef2aba1be8ac38f693614e5ce;hb=b7d07466943a73e1c009467c8daa6e499810080f;hp=96bfb4e09f8f2c0ee307baca3bf80a350dfcbc8a;hpb=62f7d6c74dcfca5f073c04aa3ba68b9d6a4ac77d;p=quix0rs-gnu-social.git diff --git a/plugins/Disqus/DisqusPlugin.php b/plugins/Disqus/DisqusPlugin.php index 96bfb4e09f..add089e77f 100644 --- a/plugins/Disqus/DisqusPlugin.php +++ b/plugins/Disqus/DisqusPlugin.php @@ -45,13 +45,28 @@ if (!defined('STATUSNET')) { * To enable the plugin, put the following in you config.php: * * addPlugin( - * 'Disqus', array( - * 'shortname' => 'YOURSHORTNAME', - * 'div_style' => 'width:675px; padding-top:10px; position:relative; float:left;' - * ) + * 'Disqus', array( + * 'shortname' => 'YOURSHORTNAME', + * 'divStyle' => 'width:675px; padding-top:10px; position:relative; float:left;' + * ) * ); * - * NOTE: the 'div_style' in an optional parameter that passes in some + * If you only want to allow commenting on a specific user's notices or + * 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;', + * '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 * the widget look OK with the default StatusNet theme. If you leave * it out you'll have to edit your theme CSS files to make the widget @@ -60,6 +75,7 @@ if (!defined('STATUSNET')) { * * See: http://help.disqus.com/entries/100878-css-customization * + * * @category Plugin * @package StatusNet * @author Zach Copley @@ -70,58 +86,82 @@ if (!defined('STATUSNET')) { */ class DisqusPlugin extends Plugin { - public $shortname; // Required 'shortname' for actually triggering Disqus. - public $div_style; // Optional CSS chunk for the main
- + public $shortname; // Required 'shortname' for actually triggering Disqus + public $divStyle; // Optional CSS chunk for the main
+ + // 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 + * notice page's content block + * + * @param Action $action The current action + */ function onEndShowContentBlock($action) { if (get_class($action) == 'ShownoticeAction') { - $attrs = array(); - $attrs['id'] = 'disqus_thread'; + $profile = Profile::staticGet('id', $action->notice->profile_id); - if ($this->div_style) { - $attrs['style'] = $this->div_style; - } + if ($this->isAllowedRichEdit($profile)) { + + $attrs = array(); + $attrs['id'] = 'disqus_thread'; + + if ($this->divStyle) { + $attrs['style'] = $this->divStyle; + } - $action->element('div', $attrs, null); + $action->element('div', $attrs, null); - $script = <<inlineScript(sprintf($script, $action->notice->id, $this->shortname)); + $action->inlineScript(sprintf($script, $action->notice->id, $this->shortname)); - $attrs = array(); + $attrs = array(); - $attrs['id'] = 'disqus_thread_footer'; + $attrs['id'] = 'disqus_thread_footer'; - if ($this->div_style) { - $attrs['style'] = $this->div_style; - } + if ($this->divStyle) { + $attrs['style'] = $this->divStyle; + } - $action->elementStart('div', $attrs); - $action->elementStart('noscript'); + $action->elementStart('div', $attrs); + $action->elementStart('noscript'); - $noScriptMsg = sprintf(_m("Please enable JavaScript to view the [comments powered by Disqus](http://disqus.com/?ref_noscript=%s)."), $this->shortname); - $output = common_markup_to_html($noScriptMsg); - $action->raw($output); + // TRANS: User notification that JavaScript is required for Disqus comment display. + $noScriptMsg = sprintf(_m("Please enable JavaScript to view the [comments powered by Disqus](http://disqus.com/?ref_noscript=%s)."), $this->shortname); + $output = common_markup_to_html($noScriptMsg); + $action->raw($output); - $action->elementEnd('noscript'); + $action->elementEnd('noscript'); - $action->elementStart('a', array('href' => 'http://disqus.com', 'class' => 'dsq-brlink')); - $action->raw(_m('Comments powered by ')); - $action->element('span', array('class' => 'logo-disqus'), 'Disqus'); - $action->elementEnd('a'); - $action->elementEnd('div'); + $action->elementStart('a', array('href' => 'http://disqus.com', 'class' => 'dsq-brlink')); + // TRANS: This message is followed by a Disqus logo. Alt text is "Disqus". + $action->raw(_m('Comments powered by ')); + $action->element('span', array('class' => 'logo-disqus'), 'Disqus'); + $action->elementEnd('a'); + $action->elementEnd('div'); + } } } + /** + * Add Disqus comment count script to the end of the scripts section + * + * @param Action $action the current action + * + */ function onEndShowScripts($action) { // fugly @@ -135,31 +175,65 @@ var disqus_shortname = '%s'; ENDOFSCRIPT; $action->inlineScript(sprintf($script, $this->shortname, $this->shortname)); - return true; } - function onStartShowNoticeItem($noticeListItem) + /** + * Tack on a Disqus comments link to the notice options stanza + * (the link displays the total number of comments for each notice) + * + * @param NoticeListItem $noticeListItem + * + */ + function onEndShowNoticeInfo($noticeListItem) { + // Don't enable commenting for remote notices if (empty($noticeListItem->notice->is_local)) { - return true; + return; } - $noticeListItem->showNotice(); - $noticeListItem->showNoticeInfo(); - - $noticeUrl = $noticeListItem->notice->bestUrl(); - $noticeUrl .= '#disqus_thread'; + $profile = Profile::staticGet('id', $noticeListItem->notice->profile_id); - $noticeListItem->out->element( - 'a', array('href' => $noticeUrl, 'class' => 'disqus_count'), 'Comments' - ); + if ($this->isAllowedRichEdit($profile)) { + $noticeUrl = $noticeListItem->notice->bestUrl(); + $noticeUrl .= '#disqus_thread'; - $noticeListItem->showNoticeOptions(); - Event::handle('EndShowNoticeItem', array($noticeListItem)); + $noticeListItem->out->element( + 'a', + array('href' => $noticeUrl, 'class' => 'disqus_count'), + // TRANS: Plugin supplied feature for Disqus comments to notices. + _m('Comments') + ); + } + } - return false; + /** + * 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. + * + * @fixme make that more sanely configurable :) + * + * @param Profile $profile the profile to check + * + * @return boolean + */ + private function isAllowedRichEdit($profile) + { + if ($this->restricted) { + $user = User::staticGet($profile->id); + return !empty($user) && $user->hasRole('richedit'); + } else { + return true; + } } + /** + * Plugin details + * + * @param &$versions Array of current plugins + * + * @return boolean true + */ function onPluginVersion(&$versions) { $versions[] = array('name' => 'Disqus', @@ -167,6 +241,7 @@ ENDOFSCRIPT; 'author' => 'Zach Copley', 'homepage' => 'http://status.net/wiki/Plugin:Disqus', 'rawdescription' => + // TRANS: Plugin description. _m('Use Disqus'. ' to add commenting to notice pages.')); return true;