Extension:MpDisqus

From MediaWiki.org
Jump to: navigation, search
MediaWiki extensions manual - list
Crystal Clear action run.png
MpDisqus

Release status: beta

MpDisqus.png
Implementation Skin
Description Integrates Disqus commenting service at bottom of each page
Last version 0.1.1 (2010-09-13)
MediaWiki 1.16 or newer
License GPL
Download Extension:MpDisqus#Code
Example http://hääwiki.fi/wiki/Sandbox
Parameters

$wgMpDisqusWebsiteName $wgMpDisqusExclude

Hooks used
SkinAfterContent

SkinAfterBottomScripts

Check usage (experimental)

Contents

[edit] What can this extension do?

This extension automatically integrates the Disqus commenting service on each MediaWiki-page, right after the content area.

[edit] Download instructions

Please cut and paste the code found below and place it in $IP/extensions/MpDisqus/MpDisqus.php and $IP/extensions/MpDisqus/MpDisqus.i18n.php. Note: $IP stands for the root directory of your MediaWiki installation, the same directory that holds LocalSettings.php. Note: This extension will not work on Windows servers due to the use of the fnmatch() function.

[edit] Installation

To install this extension, add the following to LocalSettings.php:

$wgMpDisqusWebsiteName = "insert_disqus_site_id_here";
$wgMpDisqusExclude = array("Main Page", "*:*");
require_once("$IP/extensions/MpDisqus/MpDisqus.php");

[edit] Configuration parameters

$wgMpDisqusWebsiteName: This is the site alias assigned by the disqus service.

$wgMpDisqusExclude: This parameter let's you specify a list of pages where no disqus-comments should be displayed.

[edit] Code

[edit] MpDisqus.php

<?php
/**
 * Disqus Integration extension
 *
 * @file
 * @ingroup Extensions
 *
 * This file contains the main include file for the mpDisqus extension of
 * MediaWiki.
 *
 * Usage: Add the following line in LocalSettings.php:
 * require_once( "$IP/extensions/MpDisqus/MpDisqus.php" );
 *
 * @author Michael Platzer <michael.platzer@gmail.com>
 * Revised by Angel Guzmán Maeso <shakaran at gmail dot com>
 * @license GPL
 * @version 0.1.1
 */
 
// Check environment
if(!defined('MEDIAWIKI')) 
{
    echo("This is an extension to the MediaWiki package and cannot be run standalone.\n");
    die(-1);
}
 
// Credits
$wgExtensionCredits['specialpage'][] = array
(
    'name'              => 'MpDisqus',
    'version'           => '0.1.1',
    'author'            => 'Michael Platzer',
    'description'       => 'Integrates Disqus commenting service',
    'descriptionmsg'    => 'mpdisqus-desc',
    'url'               => 'http://www.mediawiki.org/wiki/Extension:MpDisqus'
);
 
// Disqus settings.
// "Website Name" field in Disqus basic settings for your site.
$wgMpDisqusWebsiteName = strtolower($wgMpDisqusWebsiteName);
 
// Add hooks
$wgHooks['SkinAfterContent'][] = 'onSkinAfterContent_AddMpDisqus1';
$wgHooks['SkinAfterBottomScripts'][] = 'onSkinAfterBottomScripts_AddMpDisqus2';
 
// Add messages
$dir = dirname( __FILE__ ) . '/';
$wgExtensionMessagesFiles['MpDisqus'] = $dir . 'MpDisqus.i18n.php';
 
// Event 'SkinAfterContent': Allows extensions to add text after the page content and article metadata.
// &$data: (string) Text to be printed out directly (without parsing)
// This hook should work in all skins. Just set the &$data variable to the text you're going to add.
// Documentation: \mediawiki-1.16.0\docs\hooks.txt
function onSkinAfterContent_AddMpDisqus1(&$data, $skin) 
{
    global $wgMpDisqusWebsiteName, $wgMpDisqusExclude, $wgTitle, $wgRequest;
 
    if($wgRequest->getVal('action', 'view') != "view") return true;
    if($wgMpDisqusExclude != NULL && in_array($wgTitle->getFullText(), $wgMpDisqusExclude)) return true;
 
    if(empty($wgMpDisqusWebsiteName))
    {
        echo('Please, set $wgMpDisqusWebsiteName in LocalSettings.php');
        die(1);
    }
 
    $before = wfMsgForContent('mpdisqus-before');
    $after = wfMsgForContent('mpdisqus-after');
    $data = $before . "<script type=\"text/javascript\">
//<![CDATA[
    var disqus_developer = 0;
    var disqus_url = \"" . $wgRequest->getFullRequestURL() . "\";
    var disqus_title = \"" . $wgTitle->getText() . "\";
//]]>
    </script>
    <br /><div id=\"disqus_thread\"></div><script type=\"text/javascript\" src=\"http://disqus.com/forums/" . $wgMpDisqusWebsiteName . "/embed.js\"></script><noscript><a href=\"http://disqus.com/forums/" . $wgMpDisqusWebsiteName . "/?url=ref\">View the discussion thread.</a></noscript><a href=\"http://disqus.com\" class=\"dsq-brlink\">blog comments powered by <span class=\"logo-disqus\">Disqus</span></a>" . $after;
    return true;
}
 
// Event 'SkinAfterBottomScripts': At the end of Skin::bottomScripts()
// $skin: Skin object
// &$text: bottomScripts Text
// Append to $text to add additional text/scripts after the stock bottom scripts.
// Documentation: \mediawiki-1.16.0\docs\hooks.txt
function onSkinAfterBottomScripts_AddMpDisqus2($skin, &$text) {
    global $wgMpDisqusWebsiteName, $wgMpDisqusExclude, $wgTitle, $wgRequest;
 
    if($wgRequest->getVal('action', 'view') != "view") return true;
 
    if($wgMpDisqusExclude != NULL && in_array($wgTitle->getFullText(), $wgMpDisqusExclude)) return true;
 
    if(empty($wgMpDisqusWebsiteName))
    {
        echo('Please, set $wgMpDisqusWebsiteName in LocalSettings.php');
        die(1);
    }
 
    $disqus_bottom_script = "<script type=\"text/javascript\">
//<![CDATA[
(function() 
{
    var links = document.getElementsByTagName('a');
    var query = '?';
    for(var i = 0; i < links.length; i++) 
        if(links[i].href.indexOf('#disqus_thread') >= 0)
            query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
 
    document.write('<script charset=\"utf-8\" type=\"text/javascript\" src=\"http://disqus.com/forums/" . $wgMpDisqusWebsiteName . "/get_num_replies.js' + query + '\"></' + 'script>');
})();
//]]>
</script>";
    $text .= $disqus_bottom_script;
    return true;
}

[edit] MpDisqus.i18n.php

<?php
/**
 * Internationalisation file for MpDisqus extension.
 *
 * @addtogroup Extensions
 */
 
$messages = array();
 
$messages['en'] = array(
        'mpdisqus-desc'             => 'Integrates Disqus commenting service',
        'mpdisqus-before'                     => '<h2>Share your opinion</h2>',
        'mpdisqus-after'                      => ''
);
 
$messages['fi'] = array(
        'mpdisqus-before'                     => '<h2>Jaa mielipiteesi</h2>',
        'mpdisqus-after'                      => ''
);
 
$messages['de'] = array(
        'mpdisqus-before'                     => '<h2>Teile deine Meinung mit</h2>',
        'mpdisqus-after'                      => ''
);
 
$messages['es'] = array(
        'mpdisqus-desc'             => 'Integra el servicio de comentarios Disqus',
        'mpdisqus-before'                     => '<h2>Comparte tu opinión</h2>',
        'mpdisqus-after'                      => ''
);

[edit] See also

Personal tools
Namespaces
Variants
Actions
Site
Support
Download
Development
Communication
Print/export
Toolbox