From 7e177b7ec6ac070e5f31749e26feabc89796d46a Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 23 Sep 2010 12:48:15 -0700 Subject: [PATCH 1/4] Add Netbeans project metadata dir to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 217622c84d..d84e5e7424 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ good-config.php lac08.log php.log .DS_Store +nbproject From 62f7d6c74dcfca5f073c04aa3ba68b9d6a4ac77d Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 23 Sep 2010 15:46:01 -0700 Subject: [PATCH 2/4] Fix strings in Disqus plugin for i18n --- plugins/Disqus/DisqusPlugin.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/Disqus/DisqusPlugin.php b/plugins/Disqus/DisqusPlugin.php index 3901562f98..96bfb4e09f 100644 --- a/plugins/Disqus/DisqusPlugin.php +++ b/plugins/Disqus/DisqusPlugin.php @@ -108,14 +108,14 @@ ENDOFSCRIPT; $action->elementStart('div', $attrs); $action->elementStart('noscript'); - // @todo FIXME: No i18n yet, because of bad implementation. Should be one string. - $action->raw('Please enable JavaScript to view the '); - $noscriptUrl = 'http://disqus.com/?ref_noscript=' . $this->shortname; - $action->element('a', array('href' => $noscriptUrl), 'comments powered by Disqus.'); + $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->elementStart('a', array('href' => 'http://disqus.com', 'class' => 'dsq-brlink')); - $action->raw('blog comments powered by '); + $action->raw(_m('Comments powered by ')); $action->element('span', array('class' => 'logo-disqus'), 'Disqus'); $action->elementEnd('a'); $action->elementEnd('div'); From c75bd62a4c4f25287beb4e1ca43bb4f94b4ffcd9 Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Thu, 23 Sep 2010 16:16:32 -0700 Subject: [PATCH 3/4] Update OAuth actions in show application page so it will display the right endpoint URLs --- actions/showapplication.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/actions/showapplication.php b/actions/showapplication.php index fa44844816..10aaff538f 100644 --- a/actions/showapplication.php +++ b/actions/showapplication.php @@ -271,17 +271,17 @@ class ShowApplicationAction extends OwnerDesignAction $this->elementStart('dl', 'entity_request_token_url'); $this->element('dt', null, _('Request token URL')); - $this->element('dd', null, common_local_url('apioauthrequesttoken')); + $this->element('dd', null, common_local_url('ApiOauthRequestToken')); $this->elementEnd('dl'); $this->elementStart('dl', 'entity_access_token_url'); $this->element('dt', null, _('Access token URL')); - $this->element('dd', null, common_local_url('apioauthaccesstoken')); + $this->element('dd', null, common_local_url('ApiOauthAccessToken')); $this->elementEnd('dl'); $this->elementStart('dl', 'entity_authorize_url'); $this->element('dt', null, _('Authorize URL')); - $this->element('dd', null, common_local_url('apioauthauthorize')); + $this->element('dd', null, common_local_url('ApiOauthAuthorize')); $this->elementEnd('dl'); $this->element('p', 'note', From dc63626641b06bfd41ae3407048e0e574e68560b Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Fri, 24 Sep 2010 18:29:02 -0700 Subject: [PATCH 4/4] Optionally restrict Disqus comments to specific users' notices --- plugins/Disqus/DisqusPlugin.php | 182 +++++++++++++++++++++++--------- 1 file changed, 131 insertions(+), 51 deletions(-) diff --git a/plugins/Disqus/DisqusPlugin.php b/plugins/Disqus/DisqusPlugin.php index 96bfb4e09f..ec5857dd74 100644 --- a/plugins/Disqus/DisqusPlugin.php +++ b/plugins/Disqus/DisqusPlugin.php @@ -45,13 +45,25 @@ 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 user's notices, use the "nicknames" array, e.g.: + * + * addPlugin( + * 'Disqus', array( + * 'shortname' => 'YOURSHORTNAME', + * 'divStyle' => 'width:675px; padding-top:10px; position:relative; float:left;', + * 'nicknames' => array('spock', 'kirk', 'bones') + * ) + * ); + * + * + * 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 +72,7 @@ if (!defined('STATUSNET')) { * * See: http://help.disqus.com/entries/100878-css-customization * + * * @category Plugin * @package StatusNet * @author Zach Copley @@ -70,58 +83,76 @@ 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
+ public $nicknames; // Optional array of nicks to restrict commenting to (default on for all users) + /** + * 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->hasCommenting($profile)) { - $action->element('div', $attrs, null); + $attrs = array(); + $attrs['id'] = 'disqus_thread'; - $script = <<divStyle) { + $attrs['style'] = $this->divStyle; + } + + $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'); + + $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->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('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); - - $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'); } } + /** + * Add Disqus comment count script to the end of the scripts section + * + * @param Action $action the current action + * + */ function onEndShowScripts($action) { // fugly @@ -135,31 +166,80 @@ var disqus_shortname = '%s'; ENDOFSCRIPT; $action->inlineScript(sprintf($script, $this->shortname, $this->shortname)); - return true; } + /** + * Override the default Notice display to add Disqus comments link + * (the link displays the total number of comments for each notice) + * + * @param NoticeListItem $noticeListItem + * + * @return boolean override + */ function onStartShowNoticeItem($noticeListItem) { + // Don't enable commenting for remote notices if (empty($noticeListItem->notice->is_local)) { return true; } - $noticeListItem->showNotice(); - $noticeListItem->showNoticeInfo(); + $profile = Profile::staticGet('id', $noticeListItem->notice->profile_id); - $noticeUrl = $noticeListItem->notice->bestUrl(); - $noticeUrl .= '#disqus_thread'; + if ($this->hasCommenting($profile)) { - $noticeListItem->out->element( - 'a', array('href' => $noticeUrl, 'class' => 'disqus_count'), 'Comments' - ); + // @todo Refactor individual notice display to have it's own event hooks - $noticeListItem->showNoticeOptions(); - Event::handle('EndShowNoticeItem', array($noticeListItem)); + $noticeListItem->showNotice(); + $noticeListItem->showNoticeInfo(); - return false; + $noticeUrl = $noticeListItem->notice->bestUrl(); + $noticeUrl .= '#disqus_thread'; + + $noticeListItem->out->element( + 'a', array('href' => $noticeUrl, 'class' => 'disqus_count'), 'Comments' + ); + + $noticeListItem->showNoticeOptions(); + Event::handle('EndShowNoticeItem', array($noticeListItem)); + + return false; + } else { + return true; + } } + /** + * Helper to check whether commenting should be enabled + * for a given notice + * + * Assumes commenting should be enabled, unless the + * nicknames array is populated + * + * @param Profile $profile the profile to check + * + * @return boolean true if yes + */ + private function hasCommenting($profile) + { + if (!empty($this->nicknames)) { + foreach ($this->nicknames as $nickname) { + if ($profile->nickname == $nickname) { + return true; + } + } + return false; + } + + return true; + } + + /** + * Plugin details + * + * @param &$versions Array of current plugins + * + * @return boolean true + */ function onPluginVersion(&$versions) { $versions[] = array('name' => 'Disqus',