Extension:PJIRC

From MediaWiki.org

Jump to: navigation, search
Manual on MediaWiki Extensions
List of MediaWiki Extensions
PJIRC

Release status: beta

Implementation Special page
Description Adds an PJIRC Applet to your wiki
Author(s) Jamasi
Last Version 0.9.0 (July 24, 2007)
MediaWiki 1.10+ (tested) 1.7+ (supposed)
License GPL-2 (I'd prefer to use AGPL-3 if other contributors are ok with this)
Download see below

Contents

[edit] What does this extension do?

This extension allows users to engage in an IRC chat, using PJIRC through the MediaWiki interface. It's a loosly based on the IRC Chat extension by Quentin Sheets.

[edit] Installation

  1. OPTIONAL -- Download the PJIRC binary, which can be found at www.pjirc.com, and save it into the /irc directory of your website.
  2. Save the source code below into its respective files in "/extensions/PJIRC/".
  3. OPTIONAL -- Configure your applet using MediaWiki:IrcXyz pages
  4. Enjoy your new IRC client.

[edit] Changes to LocalSettings.php

require_once("$IP/extensions/PJIRC/SpecialIRC.php");

[edit] Code



extensions/PJIRC/SpecialIRC.php

<?php
# Not a valid entry point, skip unless MEDIAWIKI is defined
if (!defined('MEDIAWIKI')) {
        echo <<<EOT
To install my extension, put the following line in LocalSettings.php:
require_once( "$IP/extensions/PJIRC/SpecialIRC.php" );
EOT;
        exit( 1 );
}
/**
 * A Special Page extension to offer an PJIRC java-applet to visitors
 *
 * @addtogroup Extensions
 *
 * @author Jan M. Simons <jamasi at piratenpartei.de>
 * @copyright Copyright © 2007, Jan M. Simons
 * inspired by http://www.mediawiki.org/wiki/Extension:IRC_Chat from Quentin Sheets
 * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
 */
 
$wgExtensionCredits['specialpage'][] = array(
    'name' => 'PJIRC',
    'author' => 'Jan M. Simons',
    'version' => '0.9.0',
    'description' => 'Allows users to engage in an IRC chat, using PJIRC through the MediaWiki interface.',
    'url' => 'http://www.mediawiki.org/wiki/Extension:PJIRC',
);
 
$wgAutoloadClasses['PJIRC'] = dirname(__FILE__) . '/SpecialIRC_body.php';
$wgSpecialPages['PJIRC'] = 'PJIRC';
$wgHooks['LoadAllMessages'][] = 'PJIRC::loadMessages';

extensions/PJIRC/SpecialIRC_body.php

<?php
class PJIRC extends SpecialPage {
 
        function PJIRC() {
                SpecialPage::SpecialPage("PJIRC");
                self::loadMessages();
        }
 
        function execute( $par ) {
	        global $wgOut, $wgUser, $wfMsgHtml, $wgTitle, $wgParser;
 
 		$this->setHeaders();
 
		// Get IrcNickname of the user use MediaWiki username otherwise
		If ($wgUser->IsLoggedIn()) {
			$ircNick = $wgUser->getName();
		} else {
			$ircNick = "Guest";
		}
 
        	if ($wgUser->mId<1) {
			// sysop uses MediaWiki:IrcNick
                	if (wfMsg('ircNick')) $ircNick = wfMsg('ircNick');
        	} else {
			// get nickname from userpage
			$userpage = $wgUser->getUserPage();
			$tmpArticle = new Article(Title::newFromText($userpage->getPrefixedText().'/IrcNick'));
			$content = $tmpArticle->fetchContent(0,false,false);
			if (trim($content," ")) $ircNick = $content;
        	}
 
		//make nickname irc-safe
		$illegalChars = array(".", "_", "/", "\\", "#", "*", "+", "~", "!");
		$ircNick = str_replace($illegalChars, "", $ircNick);
 
		// if nickname is still empty use default
		if ($ircNick == "") $ircNick = "Guest???";
 
 
		// load settings (can be overridden with Mediawiki:IrcXyz pages)
		$ircCodebase = wfMsg('ircCodebase');		// http://yourdomain/IRC
		$ircArchive = wfMsg('ircArchive');		// irc.jar,pixx.jar
		$ircCabinets = wfMsg('ircCabinets');		// irc.cab,securedirc.cab,pixx.cab
		$ircLangExt = wfMsg('ircLangExt');		// txt
		$ircServer = wfMsg('ircServer');		// irc.yourfavourite.net
		$ircServerPort = wfMsg('ircServerPort');	// 6667
		$ircJoinChannel = wfMsg('ircJoinChannel');	// #yourChannel
		$ircWidth = wfMsg('ircWidth');			// 640
		$ircHeight = wfMsg('ircHeight');		// 400
		$ircAltNick = wfMsg('ircAltNick');		// Guest???
 
		// If page was called with a parameter join that channel
		if ($par) $ircJoinChannel = "#".$par;
 
        	$ircApplet = '<applet codebase="'.$ircCodebase.'" code="IRCApplet.class" archive="'.$ircArchive.'" width="'.$ircWidth.'" height="'.$ircHeight.'">'."\n";
		if ($ircCabinets) $ircApplett .= '<param name="CABINETS" value="'.$ircCabinets.'">'."\n";
 
		$ircApplet .= '<param name="nick" value="'.$ircNick.'">
			<param name="alternatenick" value="'.$ircAltNick.'">
			<param name="userid" value="wikichat">
			<param name="name" value="Wiki User">
			<param name="host" value="'.$ircServer.'">
			<param name="port" value="'.$ircServerPort.'">
			<param name="gui" value="pixx">
 
			<param name="quitmessage" value="PJIRC forever!">
			<param name="asl" value="true">
			<param name="useinfo" value="true">'."\n";
		if ($ircJoinChannel) $ircApplet .= '<param name="Command1" value="/join '.$ircJoinChannel.'">'."\n";
		if ($ircLangExt) {
			$ircApplet .= '<param name="pixx:lngextension" value="'.$ircLangExt.'">
			<param name="lngextension" value="'.$ircLangExt.'">'."\n";
		}
		$ircApplet .= '<param name="languageencoding" value="UnicodeLittle">'."\n";
		$ircApplet .= '<param name="style:bitmapsmileys" value="true">
			<param name="style:smiley1" value=":) img/sourire.gif">
			<param name="style:smiley2" value=":-) img/sourire.gif">
			<param name="style:smiley3" value=":-D img/content.gif">
			<param name="style:smiley4" value=":d img/content.gif">
			<param name="style:smiley5" value=":-O img/OH-2.gif">
			<param name="style:smiley6" value=":o img/OH-1.gif">
			<param name="style:smiley7" value=":-P img/langue.gif">
			<param name="style:smiley8" value=":p img/langue.gif">
			<param name="style:smiley9" value=";-) img/clin-oeuil.gif">
			<param name="style:smiley10" value=";) img/clin-oeuil.gif">
			<param name="style:smiley11" value=":-( img/triste.gif">
			<param name="style:smiley12" value=":( img/triste.gif">
			<param name="style:smiley13" value=":-| img/OH-3.gif">
			<param name="style:smiley14" value=":| img/OH-3.gif">
			<param name="style:smiley15" value=":\'( img/pleure.gif">
			<param name="style:smiley16" value=":$ img/rouge.gif">
			<param name="style:smiley17" value=":-$ img/rouge.gif">
			<param name="style:smiley18" value="(H) img/cool.gif">
			<param name="style:smiley19" value="(h) img/cool.gif">
			<param name="style:smiley20" value=":-@ img/enerve1.gif">
			<param name="style:smiley21" value=":@ img/enerve2.gif">
			<param name="style:smiley22" value=":-S img/roll-eyes.gif">
			<param name="style:smiley23" value=":s img/roll-eyes.gif">
			<param name="style:floatingasl" value="true">
 
			<param name="pixx:timestamp" value="true">
			<param name="pixx:highlight" value="true">
			<param name="pixx:highlightnick" value="true">
			<param name="pixx:nickfield" value="true">
			<param name="pixx:styleselector" value="true">
			<param name="pixx:setfontonstyle" value="true">
 
			<h1>No java support</h1>
			<p><font color="green">Sorry, but you need a Java 1.4.x enabled browser to use PJIRC.</font></p>
			</applet>';
 
        	//$wgOut->addHTML("<!--".$ircApplet."-->"); // for debugging
        	$wgOut->addHTML($ircApplet);
	} 
 
        function loadMessages() {
                static $messagesLoaded = false;
                global $wgMessageCache;
                if ( $messagesLoaded ) return;
                $messagesLoaded = true;
 
		// freenode settings (default)
		$defaultsettings = array (
			'ircCodebase'	=> 'http://java.freenode.net/freenode/pjirc/',
			'ircArchive'	=> 'irc.jar,pixx.jar',
			'ircCabinets'	=> '',
			'ircLangExt'	=> '',
			'ircServer'	=> 'irc.freenode.net',
			'ircServerPort'	=> '6667',
			'ircJoinChannel'=> '',
			'ircWidth' 	=> '640',
			'ircHeight'	=> '400',
			'ircAltNick'	=> 'Anon???',
			'ircNick'	=> ''
		);
		$wgMessageCache->addMessages($defaultsettings);
 
		/*
			// an alternative configuration (if you installed pjirc locally)
			// all settings can also  be overridden with Mediawiki:IrcXxxx pages
			'ircCodebase'	=> 'http://yourdomain/IRC',
			'ircArchive'	=> 'irc.jar,pixx.jar',
			'ircCabinets'	=> 'irc.cab,securedirc.cab,pixx.cab',
			'ircLangExt'	=> 'txt',
			'ircServer'	=> 'irc.yourfavourite.net',
			'ircServerPort'	=> '6667',
			'ircJoinChannel'=> '#yourChannel',
			'ircWidth' 	=> '640',
			'ircHeight'	=> '400',
			'ircAltNick'	=> 'Guest???',
			'ircNick'	=> ''
		*/
 
		// internationalisation
                require( dirname( __FILE__ ) . '/SpecialIRC.i18n.php' );
                foreach ( $allMessages as $lang => $langMessages ) {
                        $wgMessageCache->addMessages( $langMessages, $lang );
                }
                return true;
        }
}

extensions/PJIRC/SpecialIRC.i18n.php

<?php
// localisation file
 
$allMessages = array(
        'en' => array( 
                'pjirc' => 'IRC Chat'
        ),
        'de' => array( 
                'pjirc' => 'IRC-Chat'
        )
);

[edit] Usage

After you've installed the extension you should be able to spot it on Special:Version on your Wiki additionally there should be a new specialpage called "IRC Chat".

You can change any defaultvalue (have a look at the code) by creating a page called MediaWiki:IrcNameofTheSetting, eg. MediaWiki:IrcServer and puting the desired value into this page.

By default the applet will use the username of anybody logged in to the wiki as the nickname for IRC. If a user wants to specify another nickname he can create a subpage of his userpage named User:Username/IrcNick which should contain only the desired username.

If you call the specialpage with Special:PJIRC/flood then it will automatically join the channel #flood on load.

You can specify a default channel to join by editing MediaWiki:IrcJoinChannel and placing "#ChannelName" into it.

[edit] Known Issues

  • None at this current time.

[edit] Future Developments

This is a list of confirmed future holdings for this extension (besides the caveats). Please list all requests on the discussion page.

  1. Support for configuring the colors of the applet.

[edit] See also

Personal tools