Commits

Christian Fischer  committed 91d2447

Verzeichnisstruktur überarbeitet

  • Participants
  • Parent commits fe77d04

Comments (0)

Files changed (112)

File acptemplates/shoutboxMessageList.tpl

-{include file='header'}
-
-<div class="mainHeadline">
-	<img src="../icon/shoutboxIcon48x48.png" alt="" />
-	<div class="headlineContainer">
-		<h1>{lang}wcf.acp.shoutbox.title{/lang}</h1>
-	</div>
-</div>
-
-{if $users|count > 0}
-	<form action="index.php?page=ShoutboxMessageList" method="POST">
-		<div class="border tabMenuContent">
-			<input type="hidden" name="packageID" value="{@PACKAGE_ID}"/>
-			<input type="hidden" name="s" value="{@SID}"/>
-			<input type="submit" value="{lang}wcf.acp.shoutbox.delete{/lang}"/>
-			{lang}wcf.acp.shoutbox.deleteMessagesFromUser{/lang}
-			<select name="selectedUser">
-				{foreach from=$users item=user}
-					<option value="{@$user['userID']}">{$user['username']}</option>
-				{/foreach}
-			</select>
-		</div>
-	</form>
-	<br/>
-	<br/>
-{/if}
-
-{if $messages|count > 0}
-	<form action="index.php?page=ShoutboxMessageList" method="POST">
-		<div class="border tabMenuContent">
-			<input type="hidden" name="packageID" value="{@PACKAGE_ID}"/>
-			<input type="hidden" name="s" value="{@SID}"/>
-			
-			<table class="tableList" width="100%">
-			<thead class="cat">
-				<tr class="tableHead">
-					<th>&nbsp;</th>
-					<th>{lang}wcf.acp.shoutbox.listheader.id{/lang}</th>
-					<th>{lang}wcf.acp.shoutbox.listheader.time{/lang}</th>
-					<th>{lang}wcf.acp.shoutbox.listheader.from{/lang}</th>
-					<th>{lang}wcf.acp.shoutbox.listheader.message{/lang}</th>
-				</tr>
-			</thead>
-			
-			{foreach from=$messages item=message}
-				<tr class="container-{cycle values='1,2'}" style="text-align:left;">
-				  <td><input type="checkbox" name="selectedMessages[]" value="{@$message['message_id']}"/></td>
-				  <td>{@$message['message_id']}</td>
-				  <td>{@$message['message_time']|shorttime}</td>
-				  <td>{$message['username']}</td>
-				  <td>{$message['message_text']}</td>
-				</tr>
-			{/foreach}
-			</table>
-		</div>
-		<input type="submit" value="{lang}wcf.acp.shoutbox.deleteSelectedMessages{/lang}"/>
-	</form>
-{else}
-	<div class="border tabMenuContent">
-		<br/>{lang}wcf.acp.shoutbox.nomessages{/lang}<br/><br/>
-	</div>
-{/if}
-
-{include file='footer'}

File dist/net.northshirebund.wbb.shoutbox-0.1.tar

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.1.zip

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.2.1.tar

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.2.1.zip

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.2.tar

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.2.zip

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.4.tar

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.4.zip

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.5.1.tar

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.5.1.tar.gz

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.5.1.zip

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.5.tar

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.5.tar.gz

Binary file removed.

File dist/net.northshirebund.wbb.shoutbox-0.5.zip

Binary file removed.

File doc/shoutbox.odt

Binary file removed.

File files/icon/shoutboxIcon16x16.png

Removed
Old image

File files/icon/shoutboxIcon16x24.png

Removed
Old image

File files/icon/shoutboxIcon24x24.png

Removed
Old image

File files/icon/shoutboxIcon48x48.png

Removed
Old image

File files/lib/acp/page/ShoutboxMessageListPage.class.php

-<?php
-// wcf imports
-require_once(WCF_DIR.'lib/page/AbstractPage.class.php');
-
-/**
- * Displays a list of all messages in the shoutbox-table for deletion.
- *
- * @author	Christian Fischer
- * @package	net.northshirebund.wbb.shoutbox
- */
-class ShoutboxMessageListPage extends AbstractPage {
-	public $templateName	= 'shoutboxMessageList';
-
-	/**
-	 * @see Page::assignVariables()
-	 */
-	public function assignVariables() {
-		parent::assignVariables();
-		$messages = array();
-		$users    = array();
-		
-		// delete selected messages
-		if(isset($_POST['selectedMessages'])) {
-			$selectedMessages = '';
-			
-			if (is_array($_POST['selectedMessages'])) {
-				$selectedMessages = join(',', ArrayUtil::toIntegerArray($_POST['selectedMessages']));
-			}
-			else {
-				$selectedMessages = intval($_POST['selectedMessages']);
-			}
-			
-			if($selectedMessages != '') {
-				WCFACP::getDB()->sendQuery('DELETE FROM wcf'.WCF_N.'_shoutbox WHERE message_id IN('.$selectedMessages.')');
-			}
-		}
-		
-		// delete messages from user
-		if(isset($_POST['selectedUser'])) {
-			$selectedUser = intval($_POST['selectedUser']);
-			
-			if($selectedUser != 0) {
-				WCFACP::getDB()->sendQuery('DELETE FROM wcf'.WCF_N.'_shoutbox WHERE userID='.$selectedUser);
-			}
-		}
-		
-		// get messages in the shoutbox
-		$sql = 'SELECT * FROM wcf'.WCF_N.'_shoutbox sb LEFT JOIN wcf'.WCF_N.'_user u USING(userid) WHERE to_user=0 ORDER BY message_time ASC';
-		$result = WCFACP::getDB()->sendQuery($sql);
-		
-		while($row = WCFACP::getDB()->fetchArray($result)) {
-			array_push($messages, $row);
-		}
-		
-		// get all users who had posted
-		$sql = 'SELECT u.userID, u.username FROM wcf'.WCF_N.'_shoutbox sb LEFT JOIN wcf'.WCF_N.'_user u USING(userid) WHERE u.userID>0 GROUP BY userID ORDER BY username ASC';
-		$result = WCFACP::getDB()->sendQuery($sql);
-		
-		while($row = WCFACP::getDB()->fetchArray($result)) {
-			array_push($users, $row);
-		}
-		
-		WCFACP::getTPL()->assign(array(
-			'messages' => $messages,
-			'users'    => $users
-		));
-	}
-
-	/**
-	 * @see Page::show()
-	 */
-	public function show() {
-
-		// activate menu item
-		WCFACP::getMenu()->setActiveMenuItem('wcf.acp.menu.link.content.shoutbox');
-
-		parent::show();
-	}
-}
-?>

File files/lib/page/ShoutboxContentPage.class.php

-<?php
-require_once(WCF_DIR.'lib/page/AbstractPage.class.php');
-require_once(WCF_DIR.'lib/system/event/EventHandler.class.php');
-require_once(WCF_DIR.'lib/data/message/bbcode/MessageParser.class.php');
-require_once(WCF_DIR.'lib/data/message/bbcode/URLParser.class.php');
-require_once(WCF_DIR.'lib/data/message/bbcode/URLBBCode.class.php');
-require_once(WCF_DIR.'lib/util/StringUtil.class.php');
-
-
-/**
- * @author	Christian Fischer
- * @package	net.northshirebund.wbb.shoutbox
- */
-class ShoutboxContentPage extends AbstractPage {
-	/**
-	 * Name of the template for the called page.
-	 */
-	public $templateName	= 'shoutboxContent';
-	public $templateNameXml	= 'shoutboxContentXml';
-	public $messages		= array();
-	public $errormessage    = null;
-	public $lastmessage		= 0;
-	public $xmloutput		= false;
-	
-	
-	/**
-	 * @see Page::readParameters()
-	 */
-	public function readParameters() {
-		parent::readParameters();
-		
-		if (isset($_POST['message'])) {
-			$message = StringUtil::trim($_POST['message']);
-			$userid  = WCF::getUser()->userID;
-			
-			if(CHARSET != 'UTF-8') {
-				$message = StringUtil::convertEncoding('UTF-8', CHARSET, $message);
-			}
-			
-			if($message != '') {
-				if(WCF::getUser()->getPermission('user.shoutbox.canWrite')) {
-					if(substr($message, 0, 2) == '/w') {
-						$message = ltrim(substr($message, 2));
-						$name    = null;
-						$toUser  = -1;
-						
-						if(substr($message, 0, 1) == '"') {
-							$pos     = strpos($message, '"', 1);
-							$name    = trim(substr($message, 1, $pos - 1));
-							$message = ltrim(substr($message, $pos + 1));
-						}
-						else {
-							$pos     = strpos($message, ' ', 1);
-							$name    = trim(substr($message, 0, $pos));
-							$message = ltrim(substr($message, $pos));
-						}
-						
-						$result = WCF::getDB()->sendQuery('SELECT userID FROM wcf'.WCF_N.'_user WHERE username=\'' . $name . '\'');
-						while($row  = WCF::getDB()->fetchArray($result)) {
-							$toUser = $row['userID'];
-							break;
-						}
-						
-						if(WCF::getUser()->getPermission('user.shoutbox.canWhisper')) {
-							if($toUser == -1) {
-								$this->errormessage = eval('return "' . WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.usernotfound') . '";');
-							}
-							else {
-								WCF::getDB()->sendQuery("
-									INSERT INTO wcf".WCF_N."_shoutbox(userid,to_user,message_text,message_time,message_ip)
-									VALUES ('".$userid."','".$toUser."','".escapeString($message)."','".TIME_NOW."', '".UserUtil::getIpAddress()."')"
-								);
-									
-								$messageid = WCF::getDB()->getInsertID();
-								
-								WCF::getDB()->sendQuery("DELETE FROM wcf".WCF_N."_shoutbox WHERE message_id<'".($messageid-SHOUTBOX_STOREDMESSAGES)."'");
-							}
-						}
-						else {
-							$this->errormessage = WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.nowhisperallowed');
-						}
-					}
-					else {
-						WCF::getDB()->sendQuery("
-							INSERT INTO wcf".WCF_N."_shoutbox(userid,message_text,message_time,message_ip)
-							VALUES ('".$userid."','".escapeString($message)."','".TIME_NOW."', '".UserUtil::getIpAddress()."')"
-						);
-							
-						$messageid = WCF::getDB()->getInsertID();
-				 		
-				 		WCF::getDB()->sendQuery("DELETE FROM wcf".WCF_N."_shoutbox WHERE message_id<'".($messageid-SHOUTBOX_STOREDMESSAGES)."'");
-				 	}
-				}
-				else {
-					$this->errormessage = WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.nopostingallowed');
-				}
-			}
-		}
-		
-		if(isset($_REQUEST['since'])) {
-			$this->lastmessage = intval($_REQUEST['since']);
-		}
-		
-		if(isset($_REQUEST['output']) && $_REQUEST['output'] == 'xml') {
-			$this->xmloutput = true;
-		}
-		
-		return;
-	}
-	
-	
-	protected function readMessages() {
-		$parser = MessageParser::getInstance();
-		$parser->setOutputType('text/html');
-		
-		$canWhisper = WCF::getUser()->getPermission('user.shoutbox.canWhisper');
-		
-		$sql = '
-			SELECT		sb.*, 
-						u.userID, u.username,
-						u2.username AS to_username
-			FROM 		wcf'.WCF_N.'_shoutbox	sb
-			LEFT JOIN	wcf'.WCF_N.'_user		u
-			USING		(userid)
-			LEFT JOIN	wcf'.WCF_N.'_user		u2
-			ON			(sb.to_user = u2.userID)
-			WHERE		message_time > '.$this->lastmessage.' AND (to_user=0 OR to_user='.WCF::getUser()->userID.' OR u.userID='.WCF::getUser()->userID.')
-			ORDER BY 	message_time DESC
-			LIMIT		0,'.SHOUTBOX_MESSAGECOUNT.'
-		';		
-		
-		$result = WCF::getDB()->sendQuery($sql);
-		//WCF::getTPL()->assign('sql', $sql);
-		
-		while($row = WCF::getDB()->fetchArray($result)) {
-			$message              = $row['message_text'];
-			$row['class']         = 'shoutboxMessage';
-			$row['isEmote']       = '0';
-			$row['isWhisperIn']   = '0';
-			$row['isWhisperOut']  = '0';
-			
-			// incoming whispers
-			if($row['to_user'] != 0 && $row['to_user'] == WCF::getUser()->userID) {
-				$row['class']        = 'shoutboxWhisperIn';
-				$row['isWhisperIn']  = '1';
-			}
-			// outgoing whispers
-			else if($row['to_user'] != 0) {
-				$row['class']        = 'shoutboxWhisperOut';
-				$row['isWhisperOut'] = '1';
-			}
-			// emotes
-			else if(substr($message, 0, 4) == '/me ') {
-				$row['class']        = 'shoutboxEmote';
-				$row['isEmote']      = '1';
-				$message             = substr($message, 4);
-			}
-			
-			// parse URLs
-			$message = URLParser::parse($message);
-			
-			// parse smilies
-			$message = $parser->parse($message, /*smilies*/true, /*html*/false, SHOUTBOX_ALLOWBBCODE, /*highlighting*/false);
-			
-			// convert [url] into <a href...
-			if(!SHOUTBOX_ALLOWBBCODE) {
-				$message = preg_replace('/\[url\]([a-zA-Z]+\:\/\/.+?)\[\/url\]/', '<a href="\1" target="_blank">\1</a>', $message);
-				$message = preg_replace('/\[url\](.+?)\[\/url\]/', '<a href="http://\1" target="_blank">\1</a>', $message);
-			}
-			
-			// convert *emote* into <i>emote</i>
-			$message = preg_replace('/\*(.+?)\*/', '<i>\1</i>', $message);
-			
-			$row['message_text'] = $message;
-			
-			// set name for guests
-			if ($row['userID'] == 0) {
-				$row['username'] = WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.guest');
-			}
-			
-			// set whisperable username, if the current user is able to whisper
-			if ($row['userID'] != 0 && $row['userID'] != WCF::getUser()->userID && $canWhisper) {
-				$row['username_whisper'] = '<a href="javascript:parent.sbWhisperTo(\''.StringUtil::encodeHTML($row['username']).'\');">'.$row['username'].'</a>';
-			}
-			else {
-				$row['username_whisper'] = $row['username'];
-			}
-			
-			array_push($this->messages, $row);
-			
-			$this->lastmessage = max($this->lastmessage, $row['message_time']);
-		}
-		
-		if($this->xmloutput) {
-			$this->messages = array_reverse($this->messages);
-		}
-		
-		return;
-	}
-	
-	
-	/**
-	 * @see Page::assignVariables()
-	 */
-	public function assignVariables() {
-		parent::assignVariables();
-		
-		$this->readMessages();
-		
-		WCF::getTPL()->assign(array(
-			'messages'		=> $this->messages,
-			'lastmessage'	=> $this->lastmessage,
-			'errormessage'  => $this->errormessage
-		));
-	}
-	
-	
-	/** * @see Page::show() */
-	public function show() { // assign variables 
-		$this->assignVariables();		
-		
-		// call show event
-		EventHandler::fireAction($this, 'show');
-		
-		// update session with referrer as request URI,
-		// so the site, which embeds the shoutbox, will appear in the user online list
-		if(isset($_SERVER['HTTP_REFERER'])) {
-			$referrer = $_SERVER['HTTP_REFERER'];
-			
-			if(strpos($referrer, 'index.php') == -1) {
-				$referrer .= 'index.php';
-			}
-			
-			WCF::getSession()->requestURI = $referrer;
-		}
-		
-		// show template
-		if($this->xmloutput) {
-			if (!empty($this->templateNameXml)) {
-				header('Content-type: text/xml');
-				WCF::getTPL()->display($this->templateNameXml, false);
-			}
-		}
-		else {
-			if (!empty($this->templateName)) {
-				WCF::getTPL()->display($this->templateName);
-			}
-		}
-		
-		return;
-	}
-}
-?>

File lang/net.northshirebund.wbb.shoutbox.xml

-<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
-<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="Default" ss:Width="271.9559"/><Column ss:StyleID="Default" ss:Width="226.2897"/><Column ss:StyleID="Default" ss:Width="196.6394"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:Index="2"><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.title</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.description</Data></Cell><Cell><Data ss:Type="String">Ein Chat-Frame</Data></Cell><Cell><Data ss:Type="String">A chat frame</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.guest</Data></Cell><Cell><Data ss:Type="String">Gast</Data></Cell><Cell><Data ss:Type="String">Guest</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.usernotfound</Data></Cell><Cell><Data ss:Type="String">Benutzer $name wurde nicht gefunden.</Data></Cell><Cell><Data ss:Type="String">User $name not found.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.whisperTo</Data></Cell><Cell><Data ss:Type="String">An</Data></Cell><Cell><Data ss:Type="String">To</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.whisperFrom</Data></Cell><Cell><Data ss:Type="String">Von</Data></Cell><Cell><Data ss:Type="String">From</Data></Cell></Row><Row ss:Height="12.6425"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.nowhisperallowed</Data></Cell><Cell><Data ss:Type="String">Du darfst leider keine geflüsterten Nachrichten versenden.</Data></Cell><Cell><Data ss:Type="String">You are not allowed to send whisper messages to other users.</Data></Cell></Row><Row ss:Height="12.6425"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.nopostingallowed</Data></Cell><Cell><Data ss:Type="String">Du darfst hier leider keine Nachrichten schreiben.</Data></Cell><Cell><Data ss:Type="String">You are not allowed to post messages.</Data></Cell></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File lang/wcf.acp.group.xml

-<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
-<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="DejaVu Sans1" ss:Size="10"/></Style><Style ss:ID="ce2"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce2" ss:Width="310.2519"/><Column ss:StyleID="Default" ss:Width="176.2016"/><Column ss:StyleID="Default" ss:Width="136.8567"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.group.option.category.user.shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.category.user.shoutbox.description</Data></Cell><Cell><Data ss:Type="String"> </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canRead</Data></Cell><Cell><Data ss:Type="String">Lesen</Data></Cell><Cell><Data ss:Type="String">Read</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canRead.description</Data></Cell><Cell><Data ss:Type="String">Der Benutzer kann Nachrichten in der Shoutbox lesen.&lt;br/&gt;Ist diese Option deaktiviert, wird die Box ausgeblendet.</Data></Cell><Cell><Data ss:Type="String">The user can read messages in the shoutbox.&lt;br/&gt;If disabled, the shoutbox will be hidden for this user.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWrite</Data></Cell><Cell><Data ss:Type="String">Schreiben</Data></Cell><Cell><Data ss:Type="String">Write</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWrite.description</Data></Cell><Cell><Data ss:Type="String">Der Benutzer kann Nachrichten in die Shoutbox schreiben.</Data></Cell><Cell><Data ss:Type="String">Allows the user to post messages in the shoutbox.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWhisper</Data></Cell><Cell><Data ss:Type="String">Flüstern</Data></Cell><Cell><Data ss:Type="String">Whisper</Data></Cell></Row><Row ss:Index="9" ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWhisper.description</Data></Cell><Cell><Data ss:Type="String">Der Benutzer kann anderen Benutzern Nachrichten zuflüstern.</Data></Cell><Cell><Data ss:Type="String">Allows the user to send whispers to other users.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Index="65511" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File lang/wcf.acp.menu.xml

-<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
-<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce1" ss:Width="246.9543"/><Column ss:StyleID="Default" ss:Width="176.2016"/><Column ss:StyleID="Default" ss:Width="136.8567"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.menu.link.content.shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.menu.link.content.shoutbox.messages</Data></Cell><Cell><Data ss:Type="String">Nachrichten</Data></Cell><Cell><Data ss:Type="String">Messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65511" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65513" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File lang/wcf.acp.option.xml

-<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
-<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style><Style ss:ID="ce2"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman11" ss:Size="10"/></Style><Style ss:ID="ce3"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman11" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce2" ss:Width="301.4929"/><Column ss:StyleID="Default" ss:Width="229.011"/><Column ss:StyleID="Default" ss:Width="183.4016"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.option.category.shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.option.category.shoutbox.description </Data></Cell><Cell><Data ss:Type="String">Eine einfache Chat-Box für das WBB</Data></Cell><Cell><Data ss:Type="String">A simple chatbox for the WBB</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.category.shoutbox.options </Data></Cell><Cell><Data ss:Type="String">Shoutbox-Einstellungen</Data></Cell><Cell><Data ss:Type="String">Shoutbox-Options</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.category.shoutbox.options.description </Data></Cell><Cell><Data ss:Type="String">Shoutbox-Einstellungen</Data></Cell><Cell><Data ss:Type="String">Shoutbox-Options</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_reloadtime</Data></Cell><Cell><Data ss:Type="String">Frame neu laden nach &lt;i&gt;n&lt;/i&gt; Sek.</Data></Cell><Cell><Data ss:Type="String">Refresh frame after &lt;i&gt;n&lt;/i&gt; sec.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce3"><Data ss:Type="String">wcf.acp.option.shoutbox_reloadtime.description </Data></Cell><Cell><Data ss:Type="String">Wenn AJAX verwendet wird:&lt;br/&gt;Legt die Zeit fest, nach der neue Nachrichte vom Server abgerufen werden.&lt;br/&gt;Ohne AJAX:&lt;br/&gt;Legt die zeit fest, nach der das verwendete iframe neu geladen wird.&lt;br/&gt;Angabe in Sekunden; 0 bedeutet keine Aktualisierung.</Data></Cell><Cell><Data ss:Type="String">If using AJAX:&lt;br/&gt;Determines the time, after which will be polled for new messages.&lt;br/&gt;Without AJAX:&lt;br/&gt;Determines the time, after wich the used iframe will be reloaded.&lt;br/&gt;0 means no reloading.</Data></Cell></Row><Row ss:Index="8" ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messagecount</Data></Cell><Cell><Data ss:Type="String">Zeige die letzten &lt;i&gt;n&lt;/i&gt; Nachrichten</Data></Cell><Cell><Data ss:Type="String">Show the last &lt;i&gt;n&lt;/i&gt; messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce3"><Data ss:Type="String">wcf.acp.option.shoutbox_messagecount.description </Data></Cell><Cell><Data ss:Type="String">Legt fest, wie viele Nachrichten zu Beginn angezeigt werden sollen. </Data></Cell><Cell><Data ss:Type="String">Determines the number of messages, which will be initially loaded.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_storedmessages</Data></Cell><Cell><Data ss:Type="String">Speichere maximal &lt;i&gt;n&lt;/i&gt; Nachrichten</Data></Cell><Cell><Data ss:Type="String">Store max. &lt;i&gt;n&lt;/i&gt; messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_storedmessages.description</Data></Cell><Cell><Data ss:Type="String">Legt die Anzahl der Nachrichten fest, die maximal in der Datenbank gespeichert werden sollen.</Data></Cell><Cell><Data ss:Type="String">Determines the number of messages, which will be stored in the Database.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowguests</Data></Cell><Cell><Data ss:Type="String">Erlaube es Gästen in die Shoutbox zu schreiben</Data></Cell><Cell><Data ss:Type="String">Allow guests to post into the shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowguests.description</Data></Cell><Cell><Data ss:Type="String"> </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultwidth</Data></Cell><Cell><Data ss:Type="String">Breite der Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox width</Data></Cell></Row><Row ss:Index="15" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultwidth.description</Data></Cell><Cell><Data ss:Type="String">Standard-Breite des Shoutbox-Frames</Data></Cell><Cell><Data ss:Type="String">Default width of the shoutbox frame</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultheight</Data></Cell><Cell><Data ss:Type="String">Höhe der Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox height</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultheight.description</Data></Cell><Cell><Data ss:Type="String">Standard-Höhe des Shoutbox-Frames</Data></Cell><Cell><Data ss:Type="String">Default height of the shoutbox frame</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder_asc</Data></Cell><Cell><Data ss:Type="String">Nachrichten-Reihenfolge</Data></Cell><Cell><Data ss:Type="String">Message order</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder_asc.description </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder.asc</Data></Cell><Cell><Data ss:Type="String">Neueste Nachricht unten</Data></Cell><Cell><Data ss:Type="String">Newest message at the bottom</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder.desc</Data></Cell><Cell><Data ss:Type="String">Neueste Nachricht oben</Data></Cell><Cell><Data ss:Type="String">Newest message first</Data></Cell></Row><Row ss:Index="22" ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowbbcode</Data></Cell><Cell><Data ss:Type="String">Erlaube BBCode in der Shoutbox.</Data></Cell><Cell><Data ss:Type="String">Allow BB-Codes in the shoutbox.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowbbcode.description</Data></Cell><Cell><Data ss:Type="String">Ermöglicht die Verwendung von BB-Codes wie &lt;b&gt;[b]&lt;/b&gt;, &lt;b&gt;[img]&lt;/b&gt;, o.ä. Innrhalb der Shoutbox.</Data></Cell><Cell><Data ss:Type="String">Allows the usage of BB-Codes like &lt;b&gt;[b]&lt;/b&gt; or &lt;b&gt;[img]&lt;/b&gt; within the shoutbox.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File lang/wcf.acp.shoutbox.xml

-<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
-<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce1" ss:Width="246.9543"/><Column ss:StyleID="Default" ss:Width="176.2016"/><Column ss:StyleID="Default" ss:Width="136.8567"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.shoutbox.title</Data></Cell><Cell><Data ss:Type="String">Shoutbox Nachrichten</Data></Cell><Cell><Data ss:Type="String">Shoutbox Messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.delete</Data></Cell><Cell><Data ss:Type="String">Lösche</Data></Cell><Cell><Data ss:Type="String">Delete</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.deleteMessagesFromUser</Data></Cell><Cell><Data ss:Type="String">Alle Nachrichten von</Data></Cell><Cell><Data ss:Type="String">Messages from</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.id</Data></Cell><Cell><Data ss:Type="String">ID</Data></Cell><Cell><Data ss:Type="String">ID</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.time</Data></Cell><Cell><Data ss:Type="String">Zeit</Data></Cell><Cell><Data ss:Type="String">Time</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.from</Data></Cell><Cell><Data ss:Type="String">Von</Data></Cell><Cell><Data ss:Type="String">From</Data></Cell></Row><Row ss:Index="8" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.message</Data></Cell><Cell><Data ss:Type="String">Nachricht</Data></Cell><Cell><Data ss:Type="String">Message</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.deleteSelectedMessages</Data></Cell><Cell><Data ss:Type="String">Lösche die ausgewählten Nachrichten</Data></Cell><Cell><Data ss:Type="String">Delete the selected messages</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.nomessages</Data></Cell><Cell><Data ss:Type="String">Es sind keine Nachrichten vorhanden</Data></Cell><Cell><Data ss:Type="String">The Shoutbox is empty</Data></Cell></Row><Row ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65511" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65513" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File package.xml

-<?xml version="1.0" encoding="UTF-8"?>
-<package name="net.northshirebund.wbb.shoutbox">
-    <packageInformation>
-        <packageName>Shoutbox</packageName>
-        <packageDescription>Ein Chat-Frame</packageDescription>
-        <version>0.5.1</version>
-        <promptParent>com.woltlab.wcf</promptParent>
-        <standalone>0</standalone>
-        <isUnique>1</isUnique>
-    </packageInformation>
-    
-    <authorInformation>
-        <author>Christian Fischer</author>
-        <authorURL>www.northshirebund.net</authorURL>
-    </authorInformation>
-    
-    <requiredPackages>
-        <requiredPackage minversion="1.0.0 Beta6">com.woltlab.wcf</requiredPackage>
-        <requiredPackage minversion="1.0.0 Beta6">com.woltlab.wcf.data.message.bbcode</requiredPackage>
-    </requiredPackages>
-    
-    <optionalPackages>
-    	<optionalPackage build="shoutbox-page"/>
-    	<optionalPackage build="shoutbox-wbb3modsportalbox"/>
-    </optionalPackages>
-    
-    <addfiles>
-    	<file name="script/install/acpmenu.xml"						/>
-    	<file name="script/install/options.xml"						/>
-		<file name="script/install/pagelocation.xml"				/>
-		<file name="script/install/groupoptions.xml"				/>
-    	
-    	<file type="tar" tag="files"		src="files/"			/>
-    	<file type="tar" tag="templates"	src="templates/"		/>
-    	<file type="tar" tag="acptemplates"	src="acptemplates/"		/>
-    </addfiles>
-    
-    <!--
-    <instructions type="update"	fromversion="0.1"	/>
-    <instructions type="update"	fromversion="0.2"	/>
-    <instructions type="update"	fromversion="0.2.1"	/>
-    <instructions type="update"	fromversion="0.3"	/>
-    -->
-	<instructions type="install">
-		<addfiles>
-			<file name="script/install/install.sql"			tag="sql"	/>
-		</addfiles>
-		<script>lib/install.php</script>
- 	</instructions>
-	
-	<instructions type="update"	fromversion="0.4"	/>
-	<instructions type="update"	fromversion="0.5"	/>
-    
-</package>

File script/install/acpmenu.xml

-<?xml version="1.0"?>
-<!DOCTYPE data SYSTEM "http://www.woltlab.com/DTD/acpmenu.dtd">
-<data>
-	<import>
-		<acpmenuitem name="wcf.acp.menu.link.content.shoutbox">
-			<parent>wcf.acp.menu.link.content</parent>
-			<showorder>4</showorder>
-		</acpmenuitem>
-		
-		<acpmenuitem name="wcf.acp.menu.link.content.shoutbox.messages">
-			<parent>wcf.acp.menu.link.content.shoutbox</parent>
-			<icon>icon/shoutboxIcon24x24.png</icon>
-			<showorder>1</showorder>
-			<link>index.php?page=ShoutboxMessageList</link>
-		</acpmenuitem>
-	</import>
-</data>

File script/install/groupoptions.xml

-<?xml version="1.0"?>
-<!DOCTYPE data SYSTEM "http://www.woltlab.com/DTDs/options.dtd">
-<data>	
-	<import>
-		<categories>
-			<category name="user.shoutbox">
-				<parent>user</parent>
-			</category>
-			<category name="mod.shoutbox">
-				<parent>mod</parent>
-			</category>
-		</categories>
-		
-		<options>
-			<option name="user.shoutbox.canRead">
-				<categoryname>user.shoutbox</categoryname>
-				<optiontype>boolean</optiontype>
-				<defaultvalue>0</defaultvalue>
-				<showorder>1</showorder>
-				<enableoptions>user.shoutbox.canWrite,user.shoutbox.canWhisper</enableoptions>
-			</option>
-			<option name="user.shoutbox.canWrite">
-				<categoryname>user.shoutbox</categoryname>
-				<optiontype>boolean</optiontype>
-				<defaultvalue>0</defaultvalue>
-				<showorder>2</showorder>
-				<enableoptions>user.shoutbox.canWhisper</enableoptions>
-			</option>
-			<option name="user.shoutbox.canWhisper">
-				<categoryname>user.shoutbox</categoryname>
-				<optiontype>boolean</optiontype>
-				<defaultvalue>0</defaultvalue>
-				<showorder>3</showorder>
-			</option>
-			<!--
-			<option name="mod.shoutbox.canInlineDelete">
-				<categoryname>mod.shoutbox</categoryname>
-				<optiontype>boolean</optiontype>
-				<defaultvalue>0</defaultvalue>
-				<showorder>1</showorder>
-			</option>
-			-->
-		</options>
-	</import>
-</data>

File script/install/install.sql

-
-
-CREATE TABLE `wcf1_shoutbox` (
-  `message_id` int(11) NOT NULL auto_increment,
-  `guest_name` varchar(255) NULL default NULL,
-  `userid` int(11) unsigned NOT NULL default '0',
-  `to_user` int(11) unsigned NOT NULL default '0',
-  `message_time` int(11) NOT NULL,
-  `message_ip` varchar(15) NOT NULL,
-  `message_text` text NOT NULL,
-  PRIMARY KEY  (`message_id`)
-);

File script/install/options.xml

-<?xml version="1.0"?>
-<!DOCTYPE data SYSTEM "http://www.woltlab.com/DTD/options.dtd">
-<data>
-	<import>
-		<categories>
-			<category name="shoutbox"></category>
-			<category name="shoutbox.options">
-				<parent>shoutbox</parent>
-			</category>
-		</categories>
-		
-		<options>
-			<!-- shoutbox -->
-			<option name="shoutbox_reloadtime">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>integer</optiontype>
-				<defaultvalue>60</defaultvalue>
-			</option>
-			<option name="shoutbox_messagecount">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>integer</optiontype>
-				<defaultvalue>50</defaultvalue>
-			</option>
-			<option name="shoutbox_storedmessages">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>integer</optiontype>
-				<defaultvalue>250</defaultvalue>
-			</option>
-			<option name="shoutbox_messageorder_asc">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>select</optiontype>
-				<defaultvalue>0</defaultvalue>
-				<selectoptions><![CDATA[0:wcf.acp.option.shoutbox_messageorder.desc
-1:wcf.acp.option.shoutbox_messageorder.asc]]></selectoptions>
-			</option>
-			<option name="shoutbox_defaultwidth">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>text</optiontype>
-				<defaultvalue>100%</defaultvalue>
-			</option>
-			<option name="shoutbox_defaultheight">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>text</optiontype>
-				<defaultvalue>150px</defaultvalue>
-			</option>
-			<option name="shoutbox_allowbbcode">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>boolean</optiontype>
-				<defaultvalue><![CDATA[0]]></defaultvalue>
-			</option>
-			<!--
-			<option name="shoutbox_allowguests">
-				<categoryname>shoutbox.options</categoryname>
-				<optiontype>boolean</optiontype>
-				<defaultvalue><![CDATA[1]]></defaultvalue>
-			</option>
-			-->
-		</options>
-	</import>
-</data>

File script/install/pagelocation.xml

-<?xml version="1.0"?>
-<!DOCTYPE import SYSTEM "DTD/import.dtd">
-<data>
-	<import>
-		<pagelocation name="net.northshirebund.wbb.shoutbox.title">
-			<pattern><![CDATA[index\.php\?page=Shoutbox]]></pattern>
-		</pagelocation>
-	</import>
-</data>

File shoutbox.kdevelop

-<?xml version = '1.0'?>
-<kdevelop>
-  <general>
-    <author>Christian Fischer</author>
-    <email>christian@fi12.de</email>
-    <version>0.5</version>
-    <projectmanagement>KDevScriptProject</projectmanagement>
-    <primarylanguage>PHP</primarylanguage>
-    <keywords>
-      <keyword>PHP</keyword>
-    </keywords>
-    <ignoreparts>
-      <part>KDevDoxygen</part>
-      <part>KDevdistpart</part>
-      <part>KDevVisualBoyAdvance</part>
-    </ignoreparts>
-    <versioncontrol>kdevsubversion</versioncontrol>
-    <projectname>shoutbox</projectname>
-  </general>
-  <kdevscriptproject>
-    <general>
-      <activedir/>
-      <includepatterns>*.php,*.phps,*.php3,*.inc</includepatterns>
-    </general>
-    <run>
-      <directoryradio>executable</directoryradio>
-    </run>
-  </kdevscriptproject>
-  <kdevdoctreeview>
-    <ignoretocs>
-      <toc>ada</toc>
-      <toc>ada_bugs_gcc</toc>
-      <toc>bash</toc>
-      <toc>bash_bugs</toc>
-      <toc>c++_bugs_gcc</toc>
-      <toc>clanlib</toc>
-      <toc>fortran_bugs_gcc</toc>
-      <toc>gnome1</toc>
-      <toc>gnustep</toc>
-      <toc>gtk</toc>
-      <toc>gtk_bugs</toc>
-      <toc>haskell</toc>
-      <toc>haskell_bugs_ghc</toc>
-      <toc>java_bugs_gcc</toc>
-      <toc>java_bugs_sun</toc>
-      <toc>kde2book</toc>
-      <toc>libc</toc>
-      <toc>libstdc++</toc>
-      <toc>opengl</toc>
-      <toc>pascal_bugs_fp</toc>
-      <toc>perl</toc>
-      <toc>perl_bugs</toc>
-      <toc>python</toc>
-      <toc>python_bugs</toc>
-      <toc>qt-kdev3</toc>
-      <toc>ruby</toc>
-      <toc>ruby_bugs</toc>
-      <toc>sdl</toc>
-      <toc>stl</toc>
-      <toc>sw</toc>
-      <toc>wxwidgets_bugs</toc>
-    </ignoretocs>
-    <ignoreqt_xml>
-      <toc>Guide to the Qt Translation Tools</toc>
-      <toc>Qt Assistant Manual</toc>
-      <toc>Qt Designer Manual</toc>
-      <toc>Qt Reference Documentation</toc>
-      <toc>qmake User Guide</toc>
-    </ignoreqt_xml>
-    <ignoredoxygen>
-      <toc>KDE Libraries (Doxygen)</toc>
-    </ignoredoxygen>
-  </kdevdoctreeview>
-  <kdevphpsupport>
-    <codeHelp>
-      <codeCompletion>true</codeCompletion>
-      <codeHinting>true</codeHinting>
-      <realtimeParsing>true</realtimeParsing>
-    </codeHelp>
-  </kdevphpsupport>
-  <kdevfilecreate>
-    <useglobaltypes>
-      <type ext="php" />
-    </useglobaltypes>
-  </kdevfilecreate>
-  <kdevfileview>
-    <groups>
-      <group pattern="*.php;*.phps;*.php3" name="PHP files" />
-      <group pattern="*.inc" name="Include files" />
-      <hidenonprojectfiles>false</hidenonprojectfiles>
-      <hidenonlocation>false</hidenonlocation>
-    </groups>
-    <tree>
-      <hidepatterns>*.o,*.lo,CVS</hidepatterns>
-      <hidenonprojectfiles>false</hidenonprojectfiles>
-      <showvcsfields>false</showvcsfields>
-    </tree>
-  </kdevfileview>
-  <substmap>
-    <APPNAME>shoutbox</APPNAME>
-    <APPNAMELC>shoutbox</APPNAMELC>
-    <APPNAMESC>Shoutbox</APPNAMESC>
-    <APPNAMEUC>SHOUTBOX</APPNAMEUC>
-    <AUTHOR>Christian Fischer</AUTHOR>
-    <EMAIL>christian@fi12.de</EMAIL>
-    <LICENSE>GPL</LICENSE>
-    <LICENSEFILE>COPYING</LICENSEFILE>
-    <VERSION>0.5</VERSION>
-    <YEAR>2007</YEAR>
-    <dest>/data/src/wbb2/src/wbb3/modules/shoutbox</dest>
-  </substmap>
-</kdevelop>

File shoutbox/acptemplates/shoutboxMessageList.tpl

+{include file='header'}
+
+<div class="mainHeadline">
+	<img src="../icon/shoutboxIcon48x48.png" alt="" />
+	<div class="headlineContainer">
+		<h1>{lang}wcf.acp.shoutbox.title{/lang}</h1>
+	</div>
+</div>
+
+{if $users|count > 0}
+	<form action="index.php?page=ShoutboxMessageList" method="POST">
+		<div class="border tabMenuContent">
+			<input type="hidden" name="packageID" value="{@PACKAGE_ID}"/>
+			<input type="hidden" name="s" value="{@SID}"/>
+			<input type="submit" value="{lang}wcf.acp.shoutbox.delete{/lang}"/>
+			{lang}wcf.acp.shoutbox.deleteMessagesFromUser{/lang}
+			<select name="selectedUser">
+				{foreach from=$users item=user}
+					<option value="{@$user['userID']}">{$user['username']}</option>
+				{/foreach}
+			</select>
+		</div>
+	</form>
+	<br/>
+	<br/>
+{/if}
+
+{if $messages|count > 0}
+	<form action="index.php?page=ShoutboxMessageList" method="POST">
+		<div class="border tabMenuContent">
+			<input type="hidden" name="packageID" value="{@PACKAGE_ID}"/>
+			<input type="hidden" name="s" value="{@SID}"/>
+			
+			<table class="tableList" width="100%">
+			<thead class="cat">
+				<tr class="tableHead">
+					<th>&nbsp;</th>
+					<th>{lang}wcf.acp.shoutbox.listheader.id{/lang}</th>
+					<th>{lang}wcf.acp.shoutbox.listheader.time{/lang}</th>
+					<th>{lang}wcf.acp.shoutbox.listheader.from{/lang}</th>
+					<th>{lang}wcf.acp.shoutbox.listheader.message{/lang}</th>
+				</tr>
+			</thead>
+			
+			{foreach from=$messages item=message}
+				<tr class="container-{cycle values='1,2'}" style="text-align:left;">
+				  <td><input type="checkbox" name="selectedMessages[]" value="{@$message['message_id']}"/></td>
+				  <td>{@$message['message_id']}</td>
+				  <td>{@$message['message_time']|shorttime}</td>
+				  <td>{$message['username']}</td>
+				  <td>{$message['message_text']}</td>
+				</tr>
+			{/foreach}
+			</table>
+		</div>
+		<input type="submit" value="{lang}wcf.acp.shoutbox.deleteSelectedMessages{/lang}"/>
+	</form>
+{else}
+	<div class="border tabMenuContent">
+		<br/>{lang}wcf.acp.shoutbox.nomessages{/lang}<br/><br/>
+	</div>
+{/if}
+
+{include file='footer'}

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.1.tar

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.1.zip

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.2.1.tar

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.2.1.zip

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.2.tar

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.2.zip

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.4.tar

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.4.zip

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.5.1.tar

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.5.1.tar.gz

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.5.1.zip

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.5.tar

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.5.tar.gz

Binary file added.

File shoutbox/dist/net.northshirebund.wbb.shoutbox-0.5.zip

Binary file added.

File shoutbox/doc/shoutbox.odt

Binary file added.

File shoutbox/files/icon/shoutboxIcon16x16.png

Added
New image

File shoutbox/files/icon/shoutboxIcon16x24.png

Added
New image

File shoutbox/files/icon/shoutboxIcon24x24.png

Added
New image

File shoutbox/files/icon/shoutboxIcon48x48.png

Added
New image

File shoutbox/files/lib/acp/page/ShoutboxMessageListPage.class.php

+<?php
+// wcf imports
+require_once(WCF_DIR.'lib/page/AbstractPage.class.php');
+
+/**
+ * Displays a list of all messages in the shoutbox-table for deletion.
+ *
+ * @author	Christian Fischer
+ * @package	net.northshirebund.wbb.shoutbox
+ */
+class ShoutboxMessageListPage extends AbstractPage {
+	public $templateName	= 'shoutboxMessageList';
+
+	/**
+	 * @see Page::assignVariables()
+	 */
+	public function assignVariables() {
+		parent::assignVariables();
+		$messages = array();
+		$users    = array();
+		
+		// delete selected messages
+		if(isset($_POST['selectedMessages'])) {
+			$selectedMessages = '';
+			
+			if (is_array($_POST['selectedMessages'])) {
+				$selectedMessages = join(',', ArrayUtil::toIntegerArray($_POST['selectedMessages']));
+			}
+			else {
+				$selectedMessages = intval($_POST['selectedMessages']);
+			}
+			
+			if($selectedMessages != '') {
+				WCFACP::getDB()->sendQuery('DELETE FROM wcf'.WCF_N.'_shoutbox WHERE message_id IN('.$selectedMessages.')');
+			}
+		}
+		
+		// delete messages from user
+		if(isset($_POST['selectedUser'])) {
+			$selectedUser = intval($_POST['selectedUser']);
+			
+			if($selectedUser != 0) {
+				WCFACP::getDB()->sendQuery('DELETE FROM wcf'.WCF_N.'_shoutbox WHERE userID='.$selectedUser);
+			}
+		}
+		
+		// get messages in the shoutbox
+		$sql = 'SELECT * FROM wcf'.WCF_N.'_shoutbox sb LEFT JOIN wcf'.WCF_N.'_user u USING(userid) WHERE to_user=0 ORDER BY message_time ASC';
+		$result = WCFACP::getDB()->sendQuery($sql);
+		
+		while($row = WCFACP::getDB()->fetchArray($result)) {
+			array_push($messages, $row);
+		}
+		
+		// get all users who had posted
+		$sql = 'SELECT u.userID, u.username FROM wcf'.WCF_N.'_shoutbox sb LEFT JOIN wcf'.WCF_N.'_user u USING(userid) WHERE u.userID>0 GROUP BY userID ORDER BY username ASC';
+		$result = WCFACP::getDB()->sendQuery($sql);
+		
+		while($row = WCFACP::getDB()->fetchArray($result)) {
+			array_push($users, $row);
+		}
+		
+		WCFACP::getTPL()->assign(array(
+			'messages' => $messages,
+			'users'    => $users
+		));
+	}
+
+	/**
+	 * @see Page::show()
+	 */
+	public function show() {
+
+		// activate menu item
+		WCFACP::getMenu()->setActiveMenuItem('wcf.acp.menu.link.content.shoutbox');
+
+		parent::show();
+	}
+}
+?>

File shoutbox/files/lib/page/ShoutboxContentPage.class.php

+<?php
+require_once(WCF_DIR.'lib/page/AbstractPage.class.php');
+require_once(WCF_DIR.'lib/system/event/EventHandler.class.php');
+require_once(WCF_DIR.'lib/data/message/bbcode/MessageParser.class.php');
+require_once(WCF_DIR.'lib/data/message/bbcode/URLParser.class.php');
+require_once(WCF_DIR.'lib/data/message/bbcode/URLBBCode.class.php');
+require_once(WCF_DIR.'lib/util/StringUtil.class.php');
+
+
+/**
+ * @author	Christian Fischer
+ * @package	net.northshirebund.wbb.shoutbox
+ */
+class ShoutboxContentPage extends AbstractPage {
+	/**
+	 * Name of the template for the called page.
+	 */
+	public $templateName	= 'shoutboxContent';
+	public $templateNameXml	= 'shoutboxContentXml';
+	public $messages		= array();
+	public $errormessage    = null;
+	public $lastmessage		= 0;
+	public $xmloutput		= false;
+	
+	
+	/**
+	 * @see Page::readParameters()
+	 */
+	public function readParameters() {
+		parent::readParameters();
+		
+		if (isset($_POST['message'])) {
+			$message = StringUtil::trim($_POST['message']);
+			$userid  = WCF::getUser()->userID;
+			
+			if(CHARSET != 'UTF-8') {
+				$message = StringUtil::convertEncoding('UTF-8', CHARSET, $message);
+			}
+			
+			if($message != '') {
+				if(WCF::getUser()->getPermission('user.shoutbox.canWrite')) {
+					if(substr($message, 0, 2) == '/w') {
+						$message = ltrim(substr($message, 2));
+						$name    = null;
+						$toUser  = -1;
+						
+						if(substr($message, 0, 1) == '"') {
+							$pos     = strpos($message, '"', 1);
+							$name    = trim(substr($message, 1, $pos - 1));
+							$message = ltrim(substr($message, $pos + 1));
+						}
+						else {
+							$pos     = strpos($message, ' ', 1);
+							$name    = trim(substr($message, 0, $pos));
+							$message = ltrim(substr($message, $pos));
+						}
+						
+						$result = WCF::getDB()->sendQuery('SELECT userID FROM wcf'.WCF_N.'_user WHERE username=\'' . $name . '\'');
+						while($row  = WCF::getDB()->fetchArray($result)) {
+							$toUser = $row['userID'];
+							break;
+						}
+						
+						if(WCF::getUser()->getPermission('user.shoutbox.canWhisper')) {
+							if($toUser == -1) {
+								$this->errormessage = eval('return "' . WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.usernotfound') . '";');
+							}
+							else {
+								WCF::getDB()->sendQuery("
+									INSERT INTO wcf".WCF_N."_shoutbox(userid,to_user,message_text,message_time,message_ip)
+									VALUES ('".$userid."','".$toUser."','".escapeString($message)."','".TIME_NOW."', '".UserUtil::getIpAddress()."')"
+								);
+									
+								$messageid = WCF::getDB()->getInsertID();
+								
+								WCF::getDB()->sendQuery("DELETE FROM wcf".WCF_N."_shoutbox WHERE message_id<'".($messageid-SHOUTBOX_STOREDMESSAGES)."'");
+							}
+						}
+						else {
+							$this->errormessage = WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.nowhisperallowed');
+						}
+					}
+					else {
+						WCF::getDB()->sendQuery("
+							INSERT INTO wcf".WCF_N."_shoutbox(userid,message_text,message_time,message_ip)
+							VALUES ('".$userid."','".escapeString($message)."','".TIME_NOW."', '".UserUtil::getIpAddress()."')"
+						);
+							
+						$messageid = WCF::getDB()->getInsertID();
+				 		
+				 		WCF::getDB()->sendQuery("DELETE FROM wcf".WCF_N."_shoutbox WHERE message_id<'".($messageid-SHOUTBOX_STOREDMESSAGES)."'");
+				 	}
+				}
+				else {
+					$this->errormessage = WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.nopostingallowed');
+				}
+			}
+		}
+		
+		if(isset($_REQUEST['since'])) {
+			$this->lastmessage = intval($_REQUEST['since']);
+		}
+		
+		if(isset($_REQUEST['output']) && $_REQUEST['output'] == 'xml') {
+			$this->xmloutput = true;
+		}
+		
+		return;
+	}
+	
+	
+	protected function readMessages() {
+		$parser = MessageParser::getInstance();
+		$parser->setOutputType('text/html');
+		
+		$canWhisper = WCF::getUser()->getPermission('user.shoutbox.canWhisper');
+		
+		$sql = '
+			SELECT		sb.*, 
+						u.userID, u.username,
+						u2.username AS to_username
+			FROM 		wcf'.WCF_N.'_shoutbox	sb
+			LEFT JOIN	wcf'.WCF_N.'_user		u
+			USING		(userid)
+			LEFT JOIN	wcf'.WCF_N.'_user		u2
+			ON			(sb.to_user = u2.userID)
+			WHERE		message_time > '.$this->lastmessage.' AND (to_user=0 OR to_user='.WCF::getUser()->userID.' OR u.userID='.WCF::getUser()->userID.')
+			ORDER BY 	message_time DESC
+			LIMIT		0,'.SHOUTBOX_MESSAGECOUNT.'
+		';		
+		
+		$result = WCF::getDB()->sendQuery($sql);
+		//WCF::getTPL()->assign('sql', $sql);
+		
+		while($row = WCF::getDB()->fetchArray($result)) {
+			$message              = $row['message_text'];
+			$row['class']         = 'shoutboxMessage';
+			$row['isEmote']       = '0';
+			$row['isWhisperIn']   = '0';
+			$row['isWhisperOut']  = '0';
+			
+			// incoming whispers
+			if($row['to_user'] != 0 && $row['to_user'] == WCF::getUser()->userID) {
+				$row['class']        = 'shoutboxWhisperIn';
+				$row['isWhisperIn']  = '1';
+			}
+			// outgoing whispers
+			else if($row['to_user'] != 0) {
+				$row['class']        = 'shoutboxWhisperOut';
+				$row['isWhisperOut'] = '1';
+			}
+			// emotes
+			else if(substr($message, 0, 4) == '/me ') {
+				$row['class']        = 'shoutboxEmote';
+				$row['isEmote']      = '1';
+				$message             = substr($message, 4);
+			}
+			
+			// parse URLs
+			$message = URLParser::parse($message);
+			
+			// parse smilies
+			$message = $parser->parse($message, /*smilies*/true, /*html*/false, SHOUTBOX_ALLOWBBCODE, /*highlighting*/false);
+			
+			// convert [url] into <a href...
+			if(!SHOUTBOX_ALLOWBBCODE) {
+				$message = preg_replace('/\[url\]([a-zA-Z]+\:\/\/.+?)\[\/url\]/', '<a href="\1" target="_blank">\1</a>', $message);
+				$message = preg_replace('/\[url\](.+?)\[\/url\]/', '<a href="http://\1" target="_blank">\1</a>', $message);
+			}
+			
+			// convert *emote* into <i>emote</i>
+			$message = preg_replace('/\*(.+?)\*/', '<i>\1</i>', $message);
+			
+			$row['message_text'] = $message;
+			
+			// set name for guests
+			if ($row['userID'] == 0) {
+				$row['username'] = WCF::getLanguage()->get('net.northshirebund.wbb.shoutbox.guest');
+			}
+			
+			// set whisperable username, if the current user is able to whisper
+			if ($row['userID'] != 0 && $row['userID'] != WCF::getUser()->userID && $canWhisper) {
+				$row['username_whisper'] = '<a href="javascript:parent.sbWhisperTo(\''.StringUtil::encodeHTML($row['username']).'\');">'.$row['username'].'</a>';
+			}
+			else {
+				$row['username_whisper'] = $row['username'];
+			}
+			
+			array_push($this->messages, $row);
+			
+			$this->lastmessage = max($this->lastmessage, $row['message_time']);
+		}
+		
+		if($this->xmloutput) {
+			$this->messages = array_reverse($this->messages);
+		}
+		
+		return;
+	}
+	
+	
+	/**
+	 * @see Page::assignVariables()
+	 */
+	public function assignVariables() {
+		parent::assignVariables();
+		
+		$this->readMessages();
+		
+		WCF::getTPL()->assign(array(
+			'messages'		=> $this->messages,
+			'lastmessage'	=> $this->lastmessage,
+			'errormessage'  => $this->errormessage
+		));
+	}
+	
+	
+	/** * @see Page::show() */
+	public function show() { // assign variables 
+		$this->assignVariables();		
+		
+		// call show event
+		EventHandler::fireAction($this, 'show');
+		
+		// update session with referrer as request URI,
+		// so the site, which embeds the shoutbox, will appear in the user online list
+		if(isset($_SERVER['HTTP_REFERER'])) {
+			$referrer = $_SERVER['HTTP_REFERER'];
+			
+			if(strpos($referrer, 'index.php') == -1) {
+				$referrer .= 'index.php';
+			}
+			
+			WCF::getSession()->requestURI = $referrer;
+		}
+		
+		// show template
+		if($this->xmloutput) {
+			if (!empty($this->templateNameXml)) {
+				header('Content-type: text/xml');
+				WCF::getTPL()->display($this->templateNameXml, false);
+			}
+		}
+		else {
+			if (!empty($this->templateName)) {
+				WCF::getTPL()->display($this->templateName);
+			}
+		}
+		
+		return;
+	}
+}
+?>

File shoutbox/lang/net.northshirebund.wbb.shoutbox.xml

+<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="Default" ss:Width="271.9559"/><Column ss:StyleID="Default" ss:Width="226.2897"/><Column ss:StyleID="Default" ss:Width="196.6394"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:Index="2"><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.title</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.description</Data></Cell><Cell><Data ss:Type="String">Ein Chat-Frame</Data></Cell><Cell><Data ss:Type="String">A chat frame</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.guest</Data></Cell><Cell><Data ss:Type="String">Gast</Data></Cell><Cell><Data ss:Type="String">Guest</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.usernotfound</Data></Cell><Cell><Data ss:Type="String">Benutzer $name wurde nicht gefunden.</Data></Cell><Cell><Data ss:Type="String">User $name not found.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.whisperTo</Data></Cell><Cell><Data ss:Type="String">An</Data></Cell><Cell><Data ss:Type="String">To</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.whisperFrom</Data></Cell><Cell><Data ss:Type="String">Von</Data></Cell><Cell><Data ss:Type="String">From</Data></Cell></Row><Row ss:Height="12.6425"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.nowhisperallowed</Data></Cell><Cell><Data ss:Type="String">Du darfst leider keine geflüsterten Nachrichten versenden.</Data></Cell><Cell><Data ss:Type="String">You are not allowed to send whisper messages to other users.</Data></Cell></Row><Row ss:Height="12.6425"><Cell><Data ss:Type="String">net.northshirebund.wbb.shoutbox.nopostingallowed</Data></Cell><Cell><Data ss:Type="String">Du darfst hier leider keine Nachrichten schreiben.</Data></Cell><Cell><Data ss:Type="String">You are not allowed to post messages.</Data></Cell></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File shoutbox/lang/wcf.acp.group.xml

+<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="DejaVu Sans1" ss:Size="10"/></Style><Style ss:ID="ce2"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce2" ss:Width="310.2519"/><Column ss:StyleID="Default" ss:Width="176.2016"/><Column ss:StyleID="Default" ss:Width="136.8567"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.group.option.category.user.shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.category.user.shoutbox.description</Data></Cell><Cell><Data ss:Type="String"> </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canRead</Data></Cell><Cell><Data ss:Type="String">Lesen</Data></Cell><Cell><Data ss:Type="String">Read</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canRead.description</Data></Cell><Cell><Data ss:Type="String">Der Benutzer kann Nachrichten in der Shoutbox lesen.&lt;br/&gt;Ist diese Option deaktiviert, wird die Box ausgeblendet.</Data></Cell><Cell><Data ss:Type="String">The user can read messages in the shoutbox.&lt;br/&gt;If disabled, the shoutbox will be hidden for this user.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWrite</Data></Cell><Cell><Data ss:Type="String">Schreiben</Data></Cell><Cell><Data ss:Type="String">Write</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWrite.description</Data></Cell><Cell><Data ss:Type="String">Der Benutzer kann Nachrichten in die Shoutbox schreiben.</Data></Cell><Cell><Data ss:Type="String">Allows the user to post messages in the shoutbox.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWhisper</Data></Cell><Cell><Data ss:Type="String">Flüstern</Data></Cell><Cell><Data ss:Type="String">Whisper</Data></Cell></Row><Row ss:Index="9" ss:AutoFitHeight="0" ss:Height="12.6425"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.group.option.user.shoutbox.canWhisper.description</Data></Cell><Cell><Data ss:Type="String">Der Benutzer kann anderen Benutzern Nachrichten zuflüstern.</Data></Cell><Cell><Data ss:Type="String">Allows the user to send whispers to other users.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Index="65511" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File shoutbox/lang/wcf.acp.menu.xml

+<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce1" ss:Width="246.9543"/><Column ss:StyleID="Default" ss:Width="176.2016"/><Column ss:StyleID="Default" ss:Width="136.8567"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.menu.link.content.shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.menu.link.content.shoutbox.messages</Data></Cell><Cell><Data ss:Type="String">Nachrichten</Data></Cell><Cell><Data ss:Type="String">Messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65511" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65513" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File shoutbox/lang/wcf.acp.option.xml

+<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style><Style ss:ID="ce2"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman11" ss:Size="10"/></Style><Style ss:ID="ce3"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman11" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce2" ss:Width="301.4929"/><Column ss:StyleID="Default" ss:Width="229.011"/><Column ss:StyleID="Default" ss:Width="183.4016"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.option.category.shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce1"><Data ss:Type="String">wcf.acp.option.category.shoutbox.description </Data></Cell><Cell><Data ss:Type="String">Eine einfache Chat-Box für das WBB</Data></Cell><Cell><Data ss:Type="String">A simple chatbox for the WBB</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.category.shoutbox.options </Data></Cell><Cell><Data ss:Type="String">Shoutbox-Einstellungen</Data></Cell><Cell><Data ss:Type="String">Shoutbox-Options</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.category.shoutbox.options.description </Data></Cell><Cell><Data ss:Type="String">Shoutbox-Einstellungen</Data></Cell><Cell><Data ss:Type="String">Shoutbox-Options</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_reloadtime</Data></Cell><Cell><Data ss:Type="String">Frame neu laden nach &lt;i&gt;n&lt;/i&gt; Sek.</Data></Cell><Cell><Data ss:Type="String">Refresh frame after &lt;i&gt;n&lt;/i&gt; sec.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce3"><Data ss:Type="String">wcf.acp.option.shoutbox_reloadtime.description </Data></Cell><Cell><Data ss:Type="String">Wenn AJAX verwendet wird:&lt;br/&gt;Legt die Zeit fest, nach der neue Nachrichte vom Server abgerufen werden.&lt;br/&gt;Ohne AJAX:&lt;br/&gt;Legt die zeit fest, nach der das verwendete iframe neu geladen wird.&lt;br/&gt;Angabe in Sekunden; 0 bedeutet keine Aktualisierung.</Data></Cell><Cell><Data ss:Type="String">If using AJAX:&lt;br/&gt;Determines the time, after which will be polled for new messages.&lt;br/&gt;Without AJAX:&lt;br/&gt;Determines the time, after wich the used iframe will be reloaded.&lt;br/&gt;0 means no reloading.</Data></Cell></Row><Row ss:Index="8" ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messagecount</Data></Cell><Cell><Data ss:Type="String">Zeige die letzten &lt;i&gt;n&lt;/i&gt; Nachrichten</Data></Cell><Cell><Data ss:Type="String">Show the last &lt;i&gt;n&lt;/i&gt; messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="ce3"><Data ss:Type="String">wcf.acp.option.shoutbox_messagecount.description </Data></Cell><Cell><Data ss:Type="String">Legt fest, wie viele Nachrichten zu Beginn angezeigt werden sollen. </Data></Cell><Cell><Data ss:Type="String">Determines the number of messages, which will be initially loaded.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_storedmessages</Data></Cell><Cell><Data ss:Type="String">Speichere maximal &lt;i&gt;n&lt;/i&gt; Nachrichten</Data></Cell><Cell><Data ss:Type="String">Store max. &lt;i&gt;n&lt;/i&gt; messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_storedmessages.description</Data></Cell><Cell><Data ss:Type="String">Legt die Anzahl der Nachrichten fest, die maximal in der Datenbank gespeichert werden sollen.</Data></Cell><Cell><Data ss:Type="String">Determines the number of messages, which will be stored in the Database.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowguests</Data></Cell><Cell><Data ss:Type="String">Erlaube es Gästen in die Shoutbox zu schreiben</Data></Cell><Cell><Data ss:Type="String">Allow guests to post into the shoutbox</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowguests.description</Data></Cell><Cell><Data ss:Type="String"> </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultwidth</Data></Cell><Cell><Data ss:Type="String">Breite der Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox width</Data></Cell></Row><Row ss:Index="15" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultwidth.description</Data></Cell><Cell><Data ss:Type="String">Standard-Breite des Shoutbox-Frames</Data></Cell><Cell><Data ss:Type="String">Default width of the shoutbox frame</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultheight</Data></Cell><Cell><Data ss:Type="String">Höhe der Shoutbox</Data></Cell><Cell><Data ss:Type="String">Shoutbox height</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_defaultheight.description</Data></Cell><Cell><Data ss:Type="String">Standard-Höhe des Shoutbox-Frames</Data></Cell><Cell><Data ss:Type="String">Default height of the shoutbox frame</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder_asc</Data></Cell><Cell><Data ss:Type="String">Nachrichten-Reihenfolge</Data></Cell><Cell><Data ss:Type="String">Message order</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder_asc.description </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell><Cell><Data ss:Type="String"> </Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder.asc</Data></Cell><Cell><Data ss:Type="String">Neueste Nachricht unten</Data></Cell><Cell><Data ss:Type="String">Newest message at the bottom</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_messageorder.desc</Data></Cell><Cell><Data ss:Type="String">Neueste Nachricht oben</Data></Cell><Cell><Data ss:Type="String">Newest message first</Data></Cell></Row><Row ss:Index="22" ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowbbcode</Data></Cell><Cell><Data ss:Type="String">Erlaube BBCode in der Shoutbox.</Data></Cell><Cell><Data ss:Type="String">Allow BB-Codes in the shoutbox.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell><Data ss:Type="String">wcf.acp.option.shoutbox_allowbbcode.description</Data></Cell><Cell><Data ss:Type="String">Ermöglicht die Verwendung von BB-Codes wie &lt;b&gt;[b]&lt;/b&gt;, &lt;b&gt;[img]&lt;/b&gt;, o.ä. Innrhalb der Shoutbox.</Data></Cell><Cell><Data ss:Type="String">Allows the usage of BB-Codes like &lt;b&gt;[b]&lt;/b&gt; or &lt;b&gt;[img]&lt;/b&gt; within the shoutbox.</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:AutoFitHeight="0" ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Height="12.1039"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File shoutbox/lang/wcf.acp.shoutbox.xml

+<?xml version="1.0" encoding="UTF-8"?><?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"><OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><Colors><Color><Index>3</Index><RGB>#c0c0c0</RGB></Color><Color><Index>4</Index><RGB>#ff0000</RGB></Color></Colors></OfficeDocumentSettings><ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"><WindowHeight>9000</WindowHeight><WindowWidth>13860</WindowWidth><WindowTopX>240</WindowTopX><WindowTopY>75</WindowTopY><ProtectStructure>False</ProtectStructure><ProtectWindows>False</ProtectWindows></ExcelWorkbook><Styles><Style ss:ID="Default" ss:Name="Default"/><Style ss:ID="Result" ss:Name="Result"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/></Style><Style ss:ID="Result2" ss:Name="Result2"><Font ss:Bold="1" ss:Italic="1" ss:Size="10" ss:Underline="Single"/><NumberFormat ss:Format="General"/></Style><Style ss:ID="Heading" ss:Name="Heading"><Alignment ss:Horizontal="Center"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="Heading1" ss:Name="Heading1"><Alignment ss:Horizontal="Center" ss:Rotate="90"/><Font ss:Bold="1" ss:Italic="1" ss:Size="16"/></Style><Style ss:ID="co1"/><Style ss:ID="co2"/><Style ss:ID="co3"/><Style ss:ID="co4"/><Style ss:ID="ta1"/><Style ss:ID="ce1"><Alignment ss:WrapText="1"/><Font ss:FontName="Times New Roman1" ss:Size="10"/></Style></Styles><ss:Worksheet ss:Name="Tabelle1"><Table ss:StyleID="ta1"><Column ss:StyleID="ce1" ss:Width="246.9543"/><Column ss:StyleID="Default" ss:Width="176.2016"/><Column ss:StyleID="Default" ss:Width="136.8567"/><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"/><Cell><Data ss:Type="String">De</Data></Cell><Cell><Data ss:Type="String">En</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="13.4079"><Cell ss:StyleID="Default"><Data ss:Type="String">wcf.acp.shoutbox.title</Data></Cell><Cell><Data ss:Type="String">Shoutbox Nachrichten</Data></Cell><Cell><Data ss:Type="String">Shoutbox Messages</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.delete</Data></Cell><Cell><Data ss:Type="String">Lösche</Data></Cell><Cell><Data ss:Type="String">Delete</Data></Cell></Row><Row ss:AutoFitHeight="0" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.deleteMessagesFromUser</Data></Cell><Cell><Data ss:Type="String">Alle Nachrichten von</Data></Cell><Cell><Data ss:Type="String">Messages from</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.id</Data></Cell><Cell><Data ss:Type="String">ID</Data></Cell><Cell><Data ss:Type="String">ID</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.time</Data></Cell><Cell><Data ss:Type="String">Zeit</Data></Cell><Cell><Data ss:Type="String">Time</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.from</Data></Cell><Cell><Data ss:Type="String">Von</Data></Cell><Cell><Data ss:Type="String">From</Data></Cell></Row><Row ss:Index="8" ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.listheader.message</Data></Cell><Cell><Data ss:Type="String">Nachricht</Data></Cell><Cell><Data ss:Type="String">Message</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.deleteSelectedMessages</Data></Cell><Cell><Data ss:Type="String">Lösche die ausgewählten Nachrichten</Data></Cell><Cell><Data ss:Type="String">Delete the selected messages</Data></Cell></Row><Row ss:Height="12.8409"><Cell><Data ss:Type="String">wcf.acp.shoutbox.nomessages</Data></Cell><Cell><Data ss:Type="String">Es sind keine Nachrichten vorhanden</Data></Cell><Cell><Data ss:Type="String">The Shoutbox is empty</Data></Cell></Row><Row ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65511" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65513" ss:Height="12.8409"><Cell ss:Index="3"/></Row><Row ss:Index="65536" ss:AutoFitHeight="0" ss:Height="12.8409"><Cell ss:Index="3"/></Row></Table><x:WorksheetOptions/></ss:Worksheet></Workbook>

File shoutbox/package.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<package name="net.northshirebund.wbb.shoutbox">
+    <packageInformation>
+        <packageName>Shoutbox</packageName>
+        <packageDescription>Ein Chat-Frame</packageDescription>
+        <version>0.5.1</version>
+        <promptParent>com.woltlab.wcf</promptParent>
+        <standalone>0</standalone>
+        <isUnique>1</isUnique>
+    </packageInformation>
+    
+    <authorInformation>
+        <author>Christian Fischer</author>
+        <authorURL>www.northshirebund.net</authorURL>
+    </authorInformation>
+    
+    <requiredPackages>
+        <requiredPackage minversion="1.0.0 Beta6">com.woltlab.wcf</requiredPackage>
+        <requiredPackage minversion="1.0.0 Beta6">com.woltlab.wcf.data.message.bbcode</requiredPackage>
+    </requiredPackages>
+    
+    <optionalPackages>
+    	<optionalPackage build="shoutbox/wbb3page"/>
+    	<optionalPackage build="shoutbox/wbb3modsportalbox"/>
+    </optionalPackages>
+    
+    <addfiles>
+    	<file name="script/install/acpmenu.xml"						/>
+    	<file name="script/install/options.xml"						/>
+		<file name="script/install/pagelocation.xml"				/>
+		<file name="script/install/groupoptions.xml"				/>
+    	
+    	<file type="tar" tag="files"		src="files/"			/>
+    	<file type="tar" tag="templates"	src="templates/"		/>
+    	<file type="tar" tag="acptemplates"	src="acptemplates/"		/>
+    </addfiles>
+    
+    <!--
+    <instructions type="update"	fromversion="0.1"	/>
+    <instructions type="update"	fromversion="0.2"	/>
+    <instructions type="update"	fromversion="0.2.1"	/>
+    <instructions type="update"	fromversion="0.3"	/>
+    -->
+	<instructions type="install">
+		<addfiles>
+			<file name="script/install/install.sql"			tag="sql"	/>
+		</addfiles>
+		<script>lib/install.php</script>
+ 	</instructions>
+	
+	<instructions type="update"	fromversion="0.4"	/>
+	<instructions type="update"	fromversion="0.5"	/>
+    
+</package>

File shoutbox/script/install/acpmenu.xml

+<?xml version="1.0"?>
+<!DOCTYPE data SYSTEM "http://www.woltlab.com/DTD/acpmenu.dtd">
+<data>
+	<import>
+		<acpmenuitem name="wcf.acp.menu.link.content.shoutbox">
+			<parent>wcf.acp.menu.link.content</parent>
+			<showorder>4</showorder>
+		</acpmenuitem>
+		
+		<acpmenuitem name="wcf.acp.menu.link.content.shoutbox.messages">
+			<parent>wcf.acp.menu.link.content.shoutbox</parent>
+			<icon>icon/shoutboxIcon24x24.png</icon>
+			<showorder>1</showorder>
+			<link>index.php?page=ShoutboxMessageList</link>
+		</acpmenuitem>
+	</import>
+</data>

File shoutbox/script/install/groupoptions.xml

+<?xml version="1.0"?>
+<!DOCTYPE data SYSTEM "http://www.woltlab.com/DTDs/options.dtd">
+<data>	
+	<import>
+		<categories>
+			<category name="user.shoutbox">
+				<parent>user</parent>
+			</category>
+			<category name="mod.shoutbox">
+				<parent>mod</parent>
+			</category>
+		</categories>
+		
+		<options>
+			<option name="user.shoutbox.canRead">
+				<categoryname>user.shoutbox</categoryname>
+				<optiontype>boolean</optiontype>
+				<defaultvalue>0</defaultvalue>
+				<showorder>1</showorder>
+				<enableoptions>user.shoutbox.canWrite,user.shoutbox.canWhisper</enableoptions>
+			</option>
+			<option name="user.shoutbox.canWrite">
+				<categoryname>user.shoutbox</categoryname>
+				<optiontype>boolean</optiontype>
+				<defaultvalue>0</defaultvalue>
+				<showorder>2</showorder>
+				<enableoptions>user.shoutbox.canWhisper</enableoptions>
+			</option>
+			<option name="user.shoutbox.canWhisper">
+				<categoryname>user.shoutbox</categoryname>
+				<optiontype>boolean</optiontype>
+				<defaultvalue>0</defaultvalue>
+				<showorder>3</showorder>
+			</option>
+			<!--
+			<option name="mod.shoutbox.canInlineDelete">
+				<categoryname>mod.shoutbox</categoryname>
+				<optiontype>boolean</optiontype>
+				<defaultvalue>0</defaultvalue>
+				<showorder>1</showorder>
+			</option>
+			-->
+		</options>
+	</import>
+</data>

File shoutbox/script/install/install.sql

+
+
+CREATE TABLE `wcf1_shoutbox` (
+  `message_id` int(11) NOT NULL auto_increment,
+  `guest_name` varchar(255) NULL default NULL,
+  `userid` int(11) unsigned NOT NULL default '0',
+  `to_user` int(11) unsigned NOT NULL default '0',
+  `message_time` int(11) NOT NULL,
+  `message_ip` varchar(15) NOT NULL,
+  `message_text` text NOT NULL,
+  PRIMARY KEY  (`message_id`)
+);

File shoutbox/script/install/options.xml

+<?xml version="1.0"?>
+<!DOCTYPE data SYSTEM "http://www.woltlab.com/DTD/options.dtd">
+<data>
+	<import>
+		<categories>
+			<category name="shoutbox"></category>
+			<category name="shoutbox.options">
+				<parent>shoutbox</parent>
+			</category>
+		</categories>
+		
+		<options>
+			<!-- shoutbox -->
+			<option name="shoutbox_reloadtime">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>integer</optiontype>
+				<defaultvalue>60</defaultvalue>
+			</option>
+			<option name="shoutbox_messagecount">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>integer</optiontype>
+				<defaultvalue>50</defaultvalue>
+			</option>
+			<option name="shoutbox_storedmessages">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>integer</optiontype>
+				<defaultvalue>250</defaultvalue>
+			</option>
+			<option name="shoutbox_messageorder_asc">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>select</optiontype>
+				<defaultvalue>0</defaultvalue>
+				<selectoptions><![CDATA[0:wcf.acp.option.shoutbox_messageorder.desc
+1:wcf.acp.option.shoutbox_messageorder.asc]]></selectoptions>
+			</option>
+			<option name="shoutbox_defaultwidth">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>text</optiontype>
+				<defaultvalue>100%</defaultvalue>
+			</option>
+			<option name="shoutbox_defaultheight">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>text</optiontype>
+				<defaultvalue>150px</defaultvalue>
+			</option>
+			<option name="shoutbox_allowbbcode">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>boolean</optiontype>
+				<defaultvalue><![CDATA[0]]></defaultvalue>
+			</option>
+			<!--
+			<option name="shoutbox_allowguests">
+				<categoryname>shoutbox.options</categoryname>
+				<optiontype>boolean</optiontype>
+				<defaultvalue><![CDATA[1]]></defaultvalue>
+			</option>
+			-->
+		</options>
+	</import>
+</data>

File shoutbox/script/install/pagelocation.xml

+<?xml version="1.0"?>
+<!DOCTYPE import SYSTEM "DTD/import.dtd">
+<data>
+	<import>
+		<pagelocation name="net.northshirebund.wbb.shoutbox.title">
+			<pattern><![CDATA[index\.php\?page=Shoutbox]]></pattern>
+		</pagelocation>
+	</import>
+</data>

File shoutbox/shoutbox.kdevelop

+<?xml version = '1.0'?>
+<kdevelop>
+  <general>
+    <author>Christian Fischer</author>
+    <email>christian@fi12.de</email>
+    <version>0.5</version>
+    <projectmanagement>KDevScriptProject</projectmanagement>
+    <primarylanguage>PHP</primarylanguage>
+    <keywords>
+      <keyword>PHP</keyword>
+    </keywords>
+    <ignoreparts>
+      <part>KDevDoxygen</part>
+      <part>KDevdistpart</part>
+      <part>KDevVisualBoyAdvance</part>
+    </ignoreparts>
+    <versioncontrol>kdevsubversion</versioncontrol>
+    <projectname>shoutbox</projectname>
+  </general>
+  <kdevscriptproject>
+    <general>
+      <activedir/>
+      <includepatterns>*.php,*.phps,*.php3,*.inc</includepatterns>
+    </general>
+    <run>
+      <directoryradio>executable</directoryradio>
+    </run>
+  </kdevscriptproject>
+  <kdevdoctreeview>
+    <ignoretocs>
+      <toc>ada</toc>
+      <toc>ada_bugs_gcc</toc>
+      <toc>bash</toc>
+      <toc>bash_bugs</toc>
+      <toc>c++_bugs_gcc</toc>
+      <toc>clanlib</toc>
+      <toc>fortran_bugs_gcc</toc>
+      <toc>gnome1</toc>
+      <toc>gnustep</toc>
+      <toc>gtk</toc>
+      <toc>gtk_bugs</toc>
+      <toc>haskell</toc>
+      <toc>haskell_bugs_ghc</toc>
+      <toc>java_bugs_gcc</toc>
+      <toc>java_bugs_sun</toc>
+      <toc>kde2book</toc>
+      <toc>libc</toc>
+      <toc>libstdc++</toc>
+      <toc>opengl</toc>
+      <toc>pascal_bugs_fp</toc>
+      <toc>perl</toc>
+      <toc>perl_bugs</toc>
+      <toc>python</toc>
+      <toc>python_bugs</toc>
+      <toc>qt-kdev3</toc>
+      <toc>ruby</toc>
+      <toc>ruby_bugs</toc>
+      <toc>sdl</toc>
+      <toc>stl</toc>
+      <toc>sw</toc>
+      <toc>wxwidgets_bugs</toc>
+    </ignoretocs>
+    <ignoreqt_xml>
+      <toc>Guide to the Qt Translation Tools</toc>
+      <toc>Qt Assistant Manual</toc>
+      <toc>Qt Designer Manual</toc>
+      <toc>Qt Reference Documentation</toc>
+      <toc>qmake User Guide</toc>
+    </ignoreqt_xml>
+    <ignoredoxygen>
+      <toc>KDE Libraries (Doxygen)</toc>
+    </ignoredoxygen>
+  </kdevdoctreeview>
+  <kdevphpsupport>
+    <codeHelp>
+      <codeCompletion>true</codeCompletion>
+      <codeHinting>true</codeHinting>
+      <realtimeParsing>true</realtimeParsing>
+    </codeHelp>
+  </kdevphpsupport>
+  <kdevfilecreate>
+    <useglobaltypes>
+      <type ext="php" />
+    </useglobaltypes>
+  </kdevfilecreate>
+  <kdevfileview>
+    <groups>
+      <group pattern="*.php;*.phps;*.php3" name="PHP files" />
+      <group pattern="*.inc" name="Include files" />
+      <hidenonprojectfiles>false</hidenonprojectfiles>
+      <hidenonlocation>false</hidenonlocation>
+    </groups>
+    <tree>
+      <hidepatterns>*.o,*.lo,CVS</hidepatterns>
+      <hidenonprojectfiles>false</hidenonprojectfiles>
+      <showvcsfields>false</showvcsfields>
+    </tree>
+  </kdevfileview>
+  <substmap>
+    <APPNAME>shoutbox</APPNAME>
+    <APPNAMELC>shoutbox</APPNAMELC>
+    <APPNAMESC>Shoutbox</APPNAMESC>
+    <APPNAMEUC>SHOUTBOX</APPNAMEUC>
+    <AUTHOR>Christian Fischer</AUTHOR>
+    <EMAIL>christian@fi12.de</EMAIL>
+    <LICENSE>GPL</LICENSE>
+    <LICENSEFILE>COPYING</LICENSEFILE>
+    <VERSION>0.5</VERSION>
+    <YEAR>2007</YEAR>
+    <dest>/data/src/wbb2/src/wbb3/modules/shoutbox</dest>
+  </substmap>
+</kdevelop>

File shoutbox/templates/shoutboxBox.tpl

+<div class="border">
+    <div class="containerHead">
+		<div class="containerIcon">
+    		<a href="javascript: void(0)" onclick="return !openList('shoutboxBox', true)">
+        	<img id="shoutboxBoxImage" src="icon/minusS.png" id="lastthreadsboxImage" alt="" /></a>
<