mirror of
https://github.com/wbbaddons/Tims-Chat.git
synced 2024-12-22 21:40:08 +00:00
Merge branch 'master' into commands
Conflicts: file/lib/system/chat/commands/ChatCommandHandler.class.php
This commit is contained in:
commit
4a901569bd
@ -3,30 +3,30 @@
|
||||
<import>
|
||||
<categories>
|
||||
<category name="user">
|
||||
<objecttype>timwolla.wcf.chat.room</objecttype>
|
||||
<objecttype>be.bastelstu.wcf.chat.room</objecttype>
|
||||
</category>
|
||||
<category name="mod">
|
||||
<objecttype>timwolla.wcf.chat.room</objecttype>
|
||||
<objecttype>be.bastelstu.wcf.chat.room</objecttype>
|
||||
</category>
|
||||
</categories>
|
||||
|
||||
<options>
|
||||
<option name="user.canEnter">
|
||||
<objecttype>timwolla.wcf.chat.room</objecttype>
|
||||
<objecttype>be.bastelstu.wcf.chat.room</objecttype>
|
||||
<categoryname>user</categoryname>
|
||||
</option>
|
||||
<option name="user.canWrite">
|
||||
<objecttype>timwolla.wcf.chat.room</objecttype>
|
||||
<objecttype>be.bastelstu.wcf.chat.room</objecttype>
|
||||
<categoryname>user</categoryname>
|
||||
</option>
|
||||
|
||||
|
||||
<option name="mod.canAlwaysEnter">
|
||||
<objecttype>timwolla.wcf.chat.room</objecttype>
|
||||
<objecttype>be.bastelstu.wcf.chat.room</objecttype>
|
||||
<categoryname>mod</categoryname>
|
||||
</option>
|
||||
<option name="mod.canAlwaysWrite">
|
||||
<objecttype>timwolla.wcf.chat.room</objecttype>
|
||||
<objecttype>be.bastelstu.wcf.chat.room</objecttype>
|
||||
<categoryname>mod</categoryname>
|
||||
</option>
|
||||
</options>
|
||||
|
@ -43,7 +43,7 @@
|
||||
</div>
|
||||
|
||||
<form method="post" action="{if $action == 'add'}{link controller='ChatRoomAdd'}{/link}{else}{link controller='ChatRoomEdit'}{/link}{/if}">
|
||||
<div class="wcf-border wcf-content">
|
||||
<div class="wcf-box wcf-marginTop wcf-boxPadding wcf-shadow1">
|
||||
<fieldset>
|
||||
<legend>{lang}wcf.acp.chat.room.data{/lang}</legend>
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
//<![CDATA[
|
||||
$(function() {
|
||||
new WCF.Action.Delete('\\wcf\\data\\chat\\room\\ChatRoomAction', $('.chatRoomRow'));
|
||||
new WCF.Sortable.List('chatRoomList', '\\wcf\\data\\chat\\room\\ChatRoomAction');
|
||||
new WCF.Sortable.List('chatRoomList', '\\wcf\\data\\chat\\room\\ChatRoomAction', {@$startIndex-1});
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
@ -28,31 +28,41 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<section id="chatRoomList" class="wcf-border wcf-sortableListContainer">
|
||||
<section id="chatRoomList" class="wcf-box wcf-marginTop wcf-boxPadding wcf-shadow1 wcf-sortableListContainer">
|
||||
{hascontent}
|
||||
<ol class="wcf-sortableList" data-object-id="0">
|
||||
<ol class="wcf-sortableList" data-object-id="0" start="{$startIndex}">
|
||||
{content}
|
||||
{foreach from=$objects item=chatRoom}
|
||||
<li class="wcf-sortableNode chatRoomRow" data-object-id="{@$chatRoom->roomID}">
|
||||
<li class="wcf-sortableNode wcf-sortableNoNesting chatRoomRow" data-object-id="{@$chatRoom->roomID}">
|
||||
<span class="wcf-sortableNodeLabel">
|
||||
{if $__wcf->session->getPermission('admin.content.chat.canEditRoom')}
|
||||
<a href="{link controller='ChatRoomEdit' id=$chatRoom->roomID}{/link}">{$chatRoom->title|language}</a>
|
||||
{else}
|
||||
{$chatRoom->title|language}
|
||||
{/if}
|
||||
|
||||
<span class="wcf-sortableButtonContainer">
|
||||
<span class="wcf-statusDisplay wcf-sortableButtonContainer">
|
||||
{if $__wcf->session->getPermission('admin.content.chat.canEditRoom')}
|
||||
<a href="{link controller='ChatRoomEdit' id=$chatRoom->roomID}{/link}"><img src="{@$__wcf->getPath('wcf')}icon/edit1.svg" alt="" title="{lang}wcf.global.button.edit{/lang}" class="balloonTooltip" /></a>
|
||||
{/if}
|
||||
{if $__wcf->session->getPermission('admin.content.chat.canDeleteRoom')}
|
||||
<img src="{@$__wcf->getPath('wcf')}icon/delete1.svg" alt="" title="{lang}wcf.global.button.delete{/lang}" class="jsDeleteButton jsTooltip" data-object-id="{@$chatRoom->roomID}" data-confirm-message="{lang}wcf.acp.bbcode.delete.sure{/lang}" />
|
||||
<img src="{@$__wcf->getPath('wcf')}icon/delete1.svg" alt="" title="{lang}wcf.global.button.delete{/lang}" class="jsDeleteButton jsTooltip" data-object-id="{@$chatRoom->roomID}" data-confirm-message="{lang}wcf.acp.chat.delete.sure{/lang}" />
|
||||
{/if}
|
||||
</span>
|
||||
</span>
|
||||
<ol class="wcf-sortableList" data-object-id="{@$chatRoom->roomID}"></ol></li>
|
||||
</li>
|
||||
{/foreach}
|
||||
{/content}
|
||||
</ol>
|
||||
<div class="wcf-formSubmit">
|
||||
<button class="wcf-button" data-type="reset">{lang}wcf.global.button.reset{/lang}</button>
|
||||
<button class="wcf-button default" data-type="submit">{lang}wcf.global.button.submit{/lang}</button>
|
||||
</div>
|
||||
{hascontentelse}
|
||||
<p class="wcf-warning">{lang}wcf.acp.chat.room.noneAvailable{/lang}</p>
|
||||
{/hascontent}
|
||||
</section>
|
||||
|
||||
|
||||
{include file='footer'}
|
36
build.php
36
build.php
@ -6,7 +6,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
*/
|
||||
echo <<<EOT
|
||||
Cleaning up
|
||||
@ -18,7 +18,7 @@
|
||||
if (file_exists('acptemplate.tar')) unlink('acptemplate.tar');
|
||||
foreach (glob('file/js/*.js') as $jsFile) unlink($jsFile);
|
||||
foreach (glob('file/style/*.css') as $cssFile) unlink($cssFile);
|
||||
if (file_exists('timwolla.wcf.chat.tar')) unlink('timwolla.wcf.chat.tar');
|
||||
if (file_exists('be.bastelstu.wcf.chat.tar')) unlink('be.bastelstu.wcf.chat.tar');
|
||||
echo <<<EOT
|
||||
|
||||
Building JavaScript
|
||||
@ -43,12 +43,34 @@
|
||||
}
|
||||
echo <<<EOT
|
||||
|
||||
Checking PHP for Syntax Errors
|
||||
------------------------------
|
||||
|
||||
EOT;
|
||||
chdir('file');
|
||||
$check = null;
|
||||
$check = function ($folder) use (&$check) {
|
||||
if (is_file($folder)) {
|
||||
if (substr($folder, -4) === '.php') {
|
||||
passthru('php -l '.escapeshellarg($folder), $code);
|
||||
if ($code != 0) exit($code);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
$files = glob($folder.'/*');
|
||||
foreach ($files as $file) {
|
||||
$check($file);
|
||||
}
|
||||
};
|
||||
$check('.');
|
||||
echo <<<EOT
|
||||
|
||||
Building file.tar
|
||||
-----------------
|
||||
|
||||
EOT;
|
||||
chdir('file');
|
||||
passthru('tar cvf ../file.tar * --exclude=*.coffee --exclude=*.scss', $code);
|
||||
passthru('tar cvf ../file.tar * --exclude=*.coffee --exclude=*.scss --exclude=.sass-cache', $code);
|
||||
if ($code != 0) exit($code);
|
||||
echo <<<EOT
|
||||
|
||||
@ -70,12 +92,12 @@
|
||||
if ($code != 0) exit($code);
|
||||
echo <<<EOT
|
||||
|
||||
Building timwolla.wcf.chat.tar
|
||||
------------------------------
|
||||
Building be.bastelstu.wcf.chat.tar
|
||||
----------------------------------
|
||||
|
||||
EOT;
|
||||
chdir('..');
|
||||
passthru('tar cvf timwolla.wcf.chat.tar * --exclude=file --exclude=template --exclude=acptemplate --exclude=build.php', $code);
|
||||
passthru('tar cvf be.bastelstu.wcf.chat.tar * --exclude=file --exclude=template --exclude=acptemplate --exclude=build.php', $code);
|
||||
if ($code != 0) exit($code);
|
||||
|
||||
if (file_exists('file.tar')) unlink('file.tar');
|
||||
|
@ -2,11 +2,11 @@
|
||||
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/maelstrom/eventListener.xsd">
|
||||
<import>
|
||||
<eventlistener>
|
||||
<eventclassname>wcf\system\request\RouteHandler</eventclassname>
|
||||
<eventclassname>\wcf\system\request\RouteHandler</eventclassname>
|
||||
<eventname>didInit</eventname>
|
||||
<environment>user</environment>
|
||||
<inherit>0</inherit>
|
||||
<listenerclassname>wcf\system\event\listener\ChatRouteListener</listenerclassname>
|
||||
<listenerclassname>\wcf\system\event\listener\ChatRouteListener</listenerclassname>
|
||||
</eventlistener>
|
||||
</import>
|
||||
</data>
|
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
namespace timwolla\wcf\chat;
|
||||
namespace be\bastelstu\wcf\chat;
|
||||
|
||||
/**
|
||||
* Handles updates.
|
||||
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
*/
|
||||
final class Update {
|
||||
private $rooms = null;
|
@ -4,6 +4,7 @@
|
||||
@author Maximilian Mader
|
||||
@copyright 2011 Tim Düsterhus
|
||||
@license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
@package be.bastelstu.wcf.chat
|
||||
-->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" xml:space="preserve">
|
||||
<title>Chat</title>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
@ -4,6 +4,7 @@
|
||||
@author Maximilian Mader
|
||||
@copyright 2011 Tim Düsterhus
|
||||
@license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
@package be.bastelstu.wcf.chat
|
||||
-->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" xml:space="preserve">
|
||||
<title>Chat</title>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
@ -1,14 +1,16 @@
|
||||
###
|
||||
# TimWolla.WCF.Chat
|
||||
# be.bastelstu.WCF.Chat
|
||||
#
|
||||
# @author Tim Düsterhus
|
||||
# @copyright 2010-2012 Tim Düsterhus
|
||||
# @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
# @package timwolla.wcf.chat
|
||||
# @package be.bastelstu.wcf.chat
|
||||
###
|
||||
|
||||
TimWolla ?= {}
|
||||
TimWolla.WCF ?= {}
|
||||
be ?= {}
|
||||
be.bastelstu ?= {}
|
||||
be.bastelstu.WCF ?= {}
|
||||
|
||||
consoleMock = console
|
||||
consoleMock ?=
|
||||
log: () ->,
|
||||
@ -16,7 +18,7 @@ consoleMock ?=
|
||||
error: () ->
|
||||
|
||||
(($, window, console) ->
|
||||
TimWolla.WCF.Chat =
|
||||
be.bastelstu.WCF.Chat =
|
||||
# Tims Chat stops loading when this reaches zero
|
||||
# TODO: We need an explosion animation
|
||||
shields: 3
|
||||
@ -45,7 +47,7 @@ consoleMock ?=
|
||||
refreshRoomList: null
|
||||
fish: null
|
||||
init: () ->
|
||||
console.log '[TimWolla.WCF.Chat] Initializing'
|
||||
console.log '[be.bastelstu.WCF.Chat Initializing'
|
||||
@bindEvents()
|
||||
@events.newMessage.add $.proxy @notify, @
|
||||
|
||||
@ -54,7 +56,7 @@ consoleMock ?=
|
||||
@refreshRoomList()
|
||||
@getMessages()
|
||||
|
||||
console.log '[TimWolla.WCF.Chat] Finished initializing - Shields at 104 percent'
|
||||
console.log '[be.bastelstu.WCF.Chat Finished initializing - Shields at 104 percent'
|
||||
###
|
||||
# Autocompletes a username
|
||||
###
|
||||
@ -63,7 +65,7 @@ consoleMock ?=
|
||||
|
||||
# Search all matching users
|
||||
for user in $ '.timsChatUser'
|
||||
username = $(user).data('username');
|
||||
username = $(user).data 'username'
|
||||
if username.indexOf(firstChars) is 0
|
||||
users.push username
|
||||
|
||||
@ -120,7 +122,7 @@ consoleMock ?=
|
||||
|
||||
firstChars = @autocompleteValue.substring(@autocompleteValue.lastIndexOf(' ')+1)
|
||||
|
||||
console.log '[TimWolla.WCF.Chat] Autocompleting "' + firstChars + '"'
|
||||
console.log '[be.bastelstu.WCF.Chat Autocompleting "' + firstChars + '"'
|
||||
return if firstChars.length is 0
|
||||
|
||||
# Insert name and increment offset
|
||||
@ -198,7 +200,7 @@ consoleMock ?=
|
||||
$('#timsChatTopic').text data.topic
|
||||
$('#timsChatTopic').wcfBlindIn() if $('#timsChatTopic').text().trim() isnt '' and $('#timsChatTopic').is(':hidden')
|
||||
|
||||
$('.timsChatMessage').addClass('unloaded', 800);
|
||||
$('.timsChatMessage').addClass 'unloaded', 800
|
||||
@handleMessages data.messages
|
||||
document.title = @titleTemplate.fetch data
|
||||
, @)
|
||||
@ -217,7 +219,7 @@ consoleMock ?=
|
||||
###
|
||||
freeTheFish: () ->
|
||||
return if $.wcfIsset 'fish'
|
||||
console.warn '[TimWolla.WCF.Chat] Freeing the fish'
|
||||
console.warn '[be.bastelstu.WCF.Chat Freeing the fish'
|
||||
fish = $ '<div id="fish">' + WCF.String.escapeHTML('><((((\u00B0>') + '</div>'
|
||||
fish.css
|
||||
position: 'absolute'
|
||||
@ -243,7 +245,7 @@ consoleMock ?=
|
||||
top: '+=' + top
|
||||
left: '+=' + left
|
||||
, 1e3
|
||||
, 1.5e3);
|
||||
, 1.5e3)
|
||||
###
|
||||
# Loads new messages.
|
||||
###
|
||||
@ -256,12 +258,12 @@ consoleMock ?=
|
||||
@handleUsers(data.users)
|
||||
, @)
|
||||
error: $.proxy((jqXHR, textStatus, errorThrown) ->
|
||||
console.error '[TimWolla.WCF.Chat] Battle Station hit - shields at ' + (--@shields / 3 * 104) + ' percent'
|
||||
console.error '[be.bastelstu.WCF.Chat Battle Station hit - shields at ' + (--@shields / 3 * 104) + ' percent'
|
||||
if @shields is 0
|
||||
@pe.refreshRoomList.stop()
|
||||
@pe.getMessages.stop()
|
||||
@freeTheFish()
|
||||
console.error '[TimWolla.WCF.Chat] We got destroyed, but could free our friend the fish before he was killed as well. Have a nice life in freedom!'
|
||||
console.error '[be.bastelstu.WCF.Chat We got destroyed, but could free our friend the fish before he was killed as well. Have a nice life in freedom!'
|
||||
alert 'herp i cannot load messages'
|
||||
, @)
|
||||
###
|
||||
@ -304,16 +306,16 @@ consoleMock ?=
|
||||
foundUsers = { }
|
||||
for user in users
|
||||
id = 'timsChatUser-'+user.userID
|
||||
element = $('#'+id)
|
||||
element = $ '#'+id
|
||||
|
||||
# Move the user to the correct position
|
||||
if element[0]
|
||||
console.log '[TimWolla.WCF.Chat] Moving User: "' + user.username + '"'
|
||||
console.log '[be.bastelstu.WCF.Chat Moving User: "' + user.username + '"'
|
||||
element = element.detach()
|
||||
$('#timsChatUserList').append element
|
||||
# Insert the user
|
||||
else
|
||||
console.log '[TimWolla.WCF.Chat] Inserting User: "' + user.username + '"'
|
||||
console.log '[be.bastelstu.WCF.Chat Inserting User: "' + user.username + '"'
|
||||
li = $ '<li></li>'
|
||||
li.attr 'id', id
|
||||
li.addClass 'timsChatUser'
|
||||
@ -339,7 +341,7 @@ consoleMock ?=
|
||||
# Remove users that were not found
|
||||
$('.timsChatUser').each () ->
|
||||
if typeof foundUsers[$(@).attr('id')] is 'undefined'
|
||||
console.log '[TimWolla.WCF.Chat] Removing User: "' + $(@).data('username') + '"'
|
||||
console.log '[be.bastelstu.WCF.Chat Removing User: "' + $(@).data('username') + '"'
|
||||
$(@).remove();
|
||||
|
||||
|
||||
@ -370,7 +372,7 @@ consoleMock ?=
|
||||
# @param object message
|
||||
###
|
||||
notify: (message) ->
|
||||
return if @isActive or $('#timsChatNotify').data('status') is 0
|
||||
return if @isActive or $('#timsChatNotify').data 'status' is 0
|
||||
@newMessageCount++
|
||||
|
||||
document.title = '(' + @newMessageCount + ') ' + @titleTemplate.fetch
|
||||
@ -379,8 +381,8 @@ consoleMock ?=
|
||||
# Desktop Notifications
|
||||
if typeof window.webkitNotifications isnt 'undefined'
|
||||
if window.webkitNotifications.checkPermission() is 0
|
||||
title = WCF.Language.get('wcf.chat.newMessages')
|
||||
icon = WCF.Icon.get('timwolla.wcf.chat.chat')
|
||||
title = WCF.Language.get 'wcf.chat.newMessages'
|
||||
icon = WCF.Icon.get 'be.bastelstu.wcf.chat.chat'
|
||||
content = message.username + message.separator + ' ' + message.message
|
||||
notification = window.webkitNotifications.createNotification icon, title, content
|
||||
notification.show()
|
||||
@ -391,7 +393,7 @@ consoleMock ?=
|
||||
# Refreshes the room-list.
|
||||
###
|
||||
refreshRoomList: () ->
|
||||
console.log '[TimWolla.WCF.Chat] Refreshing the roomlist'
|
||||
console.log '[be.bastelstu.WCF.Chat Refreshing the roomlist'
|
||||
$('#toggleRooms a').addClass 'ajaxLoad'
|
||||
|
||||
$.ajax $('#toggleRooms a').data('refreshUrl'),
|
||||
@ -400,7 +402,7 @@ consoleMock ?=
|
||||
success: $.proxy((data, textStatus, jqXHR) ->
|
||||
$('#timsChatRoomList li').remove()
|
||||
$('#toggleRooms a').removeClass 'ajaxLoad'
|
||||
$('#toggleRooms .wcf-badge').text(data.length);
|
||||
$('#toggleRooms .wcf-badge').text data.length
|
||||
|
||||
for room in data
|
||||
li = $ '<li></li>'
|
||||
@ -414,7 +416,7 @@ consoleMock ?=
|
||||
@changeRoom $ event.target
|
||||
, @
|
||||
|
||||
console.log '[TimWolla.WCF.Chat] Found ' + data.length + ' rooms'
|
||||
console.log '[be.bastelstu.WCF.Chat Found ' + data.length + ' rooms'
|
||||
, @)
|
||||
###
|
||||
# Handles submitting of messages.
|
||||
@ -428,17 +430,17 @@ consoleMock ?=
|
||||
# Finally free the fish
|
||||
@freeTheFish() if $('#timsChatInput').val().trim().toLowerCase() is '/free the fish'
|
||||
|
||||
text = $('#timsChatInput').val()
|
||||
$('#timsChatInput').val('').focus().keyup()
|
||||
$.ajax $('#timsChatForm').attr('action'),
|
||||
data:
|
||||
text: $('#timsChatInput').val(),
|
||||
smilies: $('#timsChatSmilies').data('status')
|
||||
text: text
|
||||
smilies: $('#timsChatSmilies').data 'status'
|
||||
type: 'POST',
|
||||
beforeSend: (jqXHR) ->
|
||||
$('#timsChatInput').addClass 'ajaxLoad'
|
||||
success: $.proxy((data, textStatus, jqXHR) ->
|
||||
@getMessages()
|
||||
$('#timsChatInput').val('').focus()
|
||||
$('#timsChatInput').keyup()
|
||||
, @)
|
||||
complete: () ->
|
||||
$('#timsChatInput').removeClass 'ajaxLoad'
|
@ -10,16 +10,23 @@
|
||||
$.fn.jCounter = (container, options) ->
|
||||
options = $.extend
|
||||
max: 0
|
||||
counterClass: 'jsCounter'
|
||||
counterClass: 'jCounter'
|
||||
countUp: false
|
||||
cssFile: 'wcf/style/jCounter.css'
|
||||
width: '100%'
|
||||
, options
|
||||
|
||||
if this.attr('maxlength')
|
||||
max = this.attr('maxlength')
|
||||
else max = options.max
|
||||
|
||||
if $('#jCounterCSS').length == 0
|
||||
$('head').append('<link id="jCounterCSS" rel="stylesheet" type="text/css" href="' + options.cssFile + '" >')
|
||||
|
||||
if !container
|
||||
this.wrap('<div class="jsCounterContainer"><div></div></div>').parent().append('<div class="' + options.counterClass + ' color-1">' + max + '</div>');
|
||||
if !this.hasClass('jCounterInput')
|
||||
this.addClass('jCounterInput')
|
||||
this.wrap('<div class="jCounterContainer" style="width: ' + options.width + '"><div></div></div>').parent().append('<div class="' + options.counterClass + ' color-1">' + max + '</div>');
|
||||
jCounterContainer = $(this).parent().children('.' + options.counterClass)
|
||||
else
|
||||
if typeof container is 'object'
|
||||
@ -33,7 +40,14 @@
|
||||
else
|
||||
length = max - this.val().length
|
||||
|
||||
if options.countUp
|
||||
if options.countUp && max > 0
|
||||
if length < max / 2
|
||||
color = 1
|
||||
else if length >= max / 2 and length <= max / 1.2
|
||||
color = 2
|
||||
else
|
||||
color = 3
|
||||
else if options.countUp
|
||||
color = 1
|
||||
else
|
||||
if length > max / 2
|
||||
|
@ -2,7 +2,6 @@
|
||||
namespace wcf\acp\form;
|
||||
use \wcf\system\exception\UserInputException;
|
||||
use \wcf\system\language\I18nHandler;
|
||||
use \wcf\system\package\PackageDependencyHandler;
|
||||
use \wcf\system\WCF;
|
||||
|
||||
/**
|
||||
@ -11,7 +10,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage acp.form
|
||||
*/
|
||||
class ChatRoomAddForm extends ACPForm {
|
||||
@ -43,7 +42,7 @@ class ChatRoomAddForm extends ACPForm {
|
||||
* @see \wcf\page\AbstractPage::__construct()
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->objectTypeID = \wcf\system\acl\ACLHandler::getInstance()->getObjectTypeID('timwolla.wcf.chat.room');
|
||||
$this->objectTypeID = \wcf\system\acl\ACLHandler::getInstance()->getObjectTypeID('be.bastelstu.wcf.chat.room');
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
@ -99,7 +98,7 @@ public function save() {
|
||||
$roomID = $returnValues['returnValues']->roomID;
|
||||
|
||||
if (!I18nHandler::getInstance()->isPlainValue('title')) {
|
||||
I18nHandler::getInstance()->save('title', 'wcf.chat.room.title'.$roomID, 'wcf.chat.room', PackageDependencyHandler::getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('title', 'wcf.chat.room.title'.$roomID, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
|
||||
// update title
|
||||
$chatRoomEditor->update(array(
|
||||
@ -108,7 +107,7 @@ public function save() {
|
||||
}
|
||||
|
||||
if (!I18nHandler::getInstance()->isPlainValue('topic')) {
|
||||
I18nHandler::getInstance()->save('topic', 'wcf.chat.room.topic'.$roomID, 'wcf.chat.room', PackageDependencyHandler::getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('topic', 'wcf.chat.room.topic'.$roomID, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
|
||||
// update topic
|
||||
$chatRoomEditor->update(array(
|
||||
|
@ -1,8 +1,7 @@
|
||||
<?php
|
||||
namespace wcf\acp\form;
|
||||
use wcf\system\language\I18nHandler;
|
||||
use wcf\system\package\PackageDependencyHandler;
|
||||
use wcf\system\WCF;
|
||||
use \wcf\system\language\I18nHandler;
|
||||
use \wcf\system\WCF;
|
||||
|
||||
/**
|
||||
* Shows the chatroom edit form.
|
||||
@ -10,7 +9,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage acp.form
|
||||
*/
|
||||
class ChatRoomEditForm extends ChatRoomAddForm {
|
||||
@ -64,20 +63,20 @@ public function save() {
|
||||
|
||||
$this->title = 'wcf.chat.room.title'.$this->roomObj->roomID;
|
||||
if (I18nHandler::getInstance()->isPlainValue('title')) {
|
||||
I18nHandler::getInstance()->remove($this->title, PackageDependencyHandler::getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->remove($this->title, \wcf\util\ChatUtil::getPackageID());
|
||||
$this->title = I18nHandler::getInstance()->getValue('title');
|
||||
}
|
||||
else {
|
||||
I18nHandler::getInstance()->save('title', $this->title, 'wcf.chat.room', PackageDependencyHandler::getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('title', $this->title, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
}
|
||||
|
||||
$this->topic = 'wcf.chat.room.topic'.$this->roomObj->roomID;
|
||||
if (I18nHandler::getInstance()->isPlainValue('topic')) {
|
||||
I18nHandler::getInstance()->remove($this->topic, PackageDependencyHandler::getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->remove($this->topic, \wcf\util\ChatUtil::getPackageID());
|
||||
$this->topic = I18nHandler::getInstance()->getValue('topic');
|
||||
}
|
||||
else {
|
||||
I18nHandler::getInstance()->save('topic', $this->topic, 'wcf.chat.room', PackageDependencyHandler::getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('topic', $this->topic, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
}
|
||||
|
||||
\wcf\system\acl\ACLHandler::getInstance()->save($this->roomID, $this->objectTypeID);
|
||||
@ -105,8 +104,8 @@ public function readData() {
|
||||
parent::readData();
|
||||
|
||||
if (!count($_POST)) {
|
||||
I18nHandler::getInstance()->setOptions('title', PackageDependencyHandler::getPackageID('timwolla.wcf.chat'), $this->roomObj->title, 'wcf.chat.room.title\d+');
|
||||
I18nHandler::getInstance()->setOptions('topic', PackageDependencyHandler::getPackageID('timwolla.wcf.chat'), $this->roomObj->topic, 'wcf.chat.room.topic\d+');
|
||||
I18nHandler::getInstance()->setOptions('title', \wcf\util\ChatUtil::getPackageID(), $this->roomObj->title, 'wcf.chat.room.title\d+');
|
||||
I18nHandler::getInstance()->setOptions('topic', \wcf\util\ChatUtil::getPackageID(), $this->roomObj->topic, 'wcf.chat.room.topic\d+');
|
||||
|
||||
$this->title = $this->roomObj->title;
|
||||
$this->topic = $this->roomObj->topic;
|
||||
|
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage acp.page
|
||||
*/
|
||||
class ChatRoomListPage extends \wcf\page\MultipleLinkPage {
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage action
|
||||
*/
|
||||
class ChatLeaveAction extends AbstractAction {
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.message
|
||||
*/
|
||||
class ChatMessage extends \wcf\data\DatabaseObject {
|
||||
|
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.message
|
||||
*/
|
||||
class ChatMessageAction extends \wcf\data\AbstractDatabaseObjectAction {
|
||||
|
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.message
|
||||
*/
|
||||
class ChatMessageEditor extends \wcf\data\DatabaseObjectEditor {
|
||||
@ -23,17 +23,19 @@ class ChatMessageEditor extends \wcf\data\DatabaseObjectEditor {
|
||||
* @param integer $lifetime Delete messages older that this time.
|
||||
* @return integer Number of deleted messages.
|
||||
*/
|
||||
public static function cleanup($lifetime = CHAT_ARCHIVETIME) {
|
||||
public static function prune($lifetime = CHAT_ARCHIVETIME) {
|
||||
$baseClass = self::$baseClass;
|
||||
$sql = "SELECT
|
||||
".static::getDatabaseIndexName()."
|
||||
".$baseClass::getDatabaseTableIndexName()."
|
||||
FROM
|
||||
".static::getDatabaseTableName()."
|
||||
".$baseClass::getDatabaseTableName()."
|
||||
WHERE
|
||||
time < ?";
|
||||
$statement = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$statement->execute(TIME_NOW - $lifetime);
|
||||
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array(TIME_NOW - $lifetime));
|
||||
$objectIDs = array();
|
||||
while ($objectIDs[] = $statement->fetchColumn());
|
||||
return static::deleteAll($objectIDs);
|
||||
while ($objectIDs[] = $stmt->fetchColumn());
|
||||
|
||||
return self::deleteAll($objectIDs);
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.room
|
||||
*/
|
||||
class ChatMessageList extends \wcf\data\DatabaseObjectList {
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.room
|
||||
*/
|
||||
class ChatRoom extends \wcf\data\DatabaseObject implements \wcf\system\request\IRouteController {
|
||||
@ -43,7 +43,7 @@ public function __toString() {
|
||||
* @return integer
|
||||
*/
|
||||
public function countUsers() {
|
||||
$packageID = \wcf\system\package\PackageDependencyHandler::getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
|
||||
$sql = "SELECT
|
||||
count(*) as count
|
||||
@ -100,7 +100,7 @@ public function getTitle() {
|
||||
* @return array<\wcf\data\user\User>
|
||||
*/
|
||||
public function getUsers() {
|
||||
$packageID = \wcf\system\package\PackageDependencyHandler::getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
|
||||
$sql = "SELECT
|
||||
userID
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.room
|
||||
*/
|
||||
class ChatRoomAction extends \wcf\data\AbstractDatabaseObjectAction {
|
||||
@ -28,21 +28,20 @@ class ChatRoomAction extends \wcf\data\AbstractDatabaseObjectAction {
|
||||
protected $permissionsUpdate = array('admin.content.chat.canEditRoom');
|
||||
|
||||
/**
|
||||
* Fixes create to append new boards.
|
||||
* Fixes create to append new rooms.
|
||||
*/
|
||||
public function create() {
|
||||
$room = parent::create();
|
||||
|
||||
WCF::getDB()->beginTransaction();
|
||||
$sql = "SELECT max(position) as max
|
||||
$sql = "SELECT MAX(position)
|
||||
FROM wcf".WCF_N."_chat_room
|
||||
FOR UPDATE";
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute();
|
||||
$row = $stmt->fetchArray();
|
||||
|
||||
$sql = "UPDATE wcf".WCF_N."_chat_room
|
||||
SET position = ".($row['max'] + 1)."
|
||||
SET position = ".($stmt->fetchColumn() + 1)."
|
||||
WHERE roomID = ?";
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array($room->roomID));
|
||||
@ -71,6 +70,8 @@ public function validateUpdatePosition() {
|
||||
if (!isset($this->parameters['data']['structure'])) {
|
||||
throw new ValidateActionException('Missing parameter structure');
|
||||
}
|
||||
|
||||
if (!isset($this->parameters['data']['offset'])) $this->parameters['data']['offset'] = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -82,7 +83,7 @@ public function updatePosition() {
|
||||
$roomList->sqlLimit = 0;
|
||||
$roomList->readObjects();
|
||||
|
||||
$i = 0;
|
||||
$i = $this->parameters['data']['offset'];
|
||||
WCF::getDB()->beginTransaction();
|
||||
foreach ($this->parameters['data']['structure'][0] as $roomID) {
|
||||
$room = $roomList->search($roomID);
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.room
|
||||
*/
|
||||
class ChatRoomEditor extends \wcf\data\DatabaseObjectEditor implements \wcf\data\IEditableCachedObject {
|
||||
@ -17,27 +17,57 @@ class ChatRoomEditor extends \wcf\data\DatabaseObjectEditor implements \wcf\data
|
||||
*/
|
||||
protected static $baseClass = '\wcf\data\chat\room\ChatRoom';
|
||||
|
||||
/**
|
||||
* Clears the room cache.
|
||||
*/
|
||||
public static function resetCache() {
|
||||
\wcf\system\cache\CacheHandler::getInstance()->clear(WCF_DIR.'cache', 'cache.chatrooms.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \wcf\data\DatabaseObjectEditor::deleteAll()
|
||||
*/
|
||||
public static function deleteAll(array $objectIDs = array()) {
|
||||
parent::deleteAll($objectIDs);
|
||||
$packageID = \wcf\system\package\PackageDependencyHandler::getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
|
||||
WCF::getDB()->beginTransaction();
|
||||
foreach ($objectIDs as $objectID) {
|
||||
\wcf\system\language\I18nHandler::getInstance()->remove('wcf.chat.room.title'.$objectID, $packageID);
|
||||
\wcf\system\language\I18nHandler::getInstance()->remove('wcf.chat.room.topic'.$objectID, $packageID);
|
||||
}
|
||||
WCF::getDB()->commitTransaction();
|
||||
|
||||
return count($objectIDs);
|
||||
// The transaction is being committed in parent::deleteAll()
|
||||
// The beginTransaction() call in there is simply ignored.
|
||||
return parent::deleteAll($objectIDs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes temporary rooms that are unused.
|
||||
*
|
||||
* @return integer Number of deleted rooms
|
||||
*/
|
||||
public static function prune() {
|
||||
$baseClass = self::$baseClass;
|
||||
$sql = "SELECT
|
||||
".$baseClass::getDatabaseTableIndexName()."
|
||||
FROM
|
||||
".$baseClass::getDatabaseTableName()."
|
||||
WHERE
|
||||
permanent = ?
|
||||
AND roomID NOT IN(
|
||||
SELECT
|
||||
fieldValue AS roomID
|
||||
FROM
|
||||
wcf".WCF_N."_user_storage
|
||||
WHERE
|
||||
packageID = ?
|
||||
AND field = ?)";
|
||||
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array(0, \wcf\util\ChatUtil::getPackageID(), 'roomID'));
|
||||
$objectIDs = array();
|
||||
|
||||
while ($objectIDs[] = $stmt->fetchColumn());
|
||||
return self::deleteAll($objectIDs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the room cache.
|
||||
*/
|
||||
public static function resetCache() {
|
||||
\wcf\system\cache\CacheHandler::getInstance()->clear(WCF_DIR.'cache', 'cache.chatrooms.php');
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage data.chat.room
|
||||
*/
|
||||
class ChatRoomList extends \wcf\data\DatabaseObjectList {
|
||||
|
@ -11,7 +11,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage form
|
||||
*/
|
||||
class ChatForm extends AbstractForm {
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage page
|
||||
*/
|
||||
class ChatCopyrightPage extends AbstractPage {
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage page
|
||||
*/
|
||||
class ChatMessagePage extends AbstractPage {
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage page
|
||||
*/
|
||||
class ChatPage extends AbstractPage {
|
||||
@ -51,7 +51,7 @@ public function readChatVersion() {
|
||||
);
|
||||
$packages = CacheHandler::getInstance()->get('packages');
|
||||
foreach ($packages as $package) {
|
||||
if ($package->package != 'timwolla.wcf.chat') continue;
|
||||
if ($package->package != \wcf\util\ChatUtil::PACKAGE_IDENTIFIER) continue;
|
||||
$this->chatVersion = $package->packageVersion;
|
||||
return;
|
||||
}
|
||||
@ -85,18 +85,15 @@ public function readData() {
|
||||
}
|
||||
|
||||
$this->newestMessages = chat\message\ChatMessageList::getNewestMessages($this->room, CHAT_LASTMESSAGES);
|
||||
try {
|
||||
\wcf\util\ChatUtil::writeUserData(array('lastSeen' => end($this->newestMessages)->messageID));
|
||||
|
||||
$this->readDefaultSmileys();
|
||||
$this->readChatVersion();
|
||||
}
|
||||
catch (\wcf\system\exception\SystemException $e) {
|
||||
\wcf\util\ChatUtil::writeUserData(array('lastSeen' => 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the smilies in the default category.
|
||||
*/
|
||||
public function readDefaultSmileys() {
|
||||
$smilies = \wcf\data\smiley\SmileyCache::getInstance()->getSmilies();
|
||||
$this->smilies = $smilies[null];
|
||||
$this->smilies = \wcf\data\smiley\SmileyCache::getInstance()->getCategorySmilies();
|
||||
$this->readChatVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -164,12 +161,15 @@ public function show() {
|
||||
if (!WCF::getUser()->userID) {
|
||||
throw new \wcf\system\exception\PermissionDeniedException();
|
||||
}
|
||||
|
||||
\wcf\system\menu\page\PageMenu::getInstance()->setActiveMenuItem('wcf.header.menu.chat');
|
||||
|
||||
// remove index breadcrumb
|
||||
WCF::getBreadcrumbs()->remove(0);
|
||||
|
||||
parent::show();
|
||||
// break if not ajax
|
||||
|
||||
// break if not using ajax
|
||||
if ($this->useTemplate) exit;
|
||||
@header('Content-type: application/json');
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage page
|
||||
*/
|
||||
class ChatRefreshRoomListPage extends AbstractPage {
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @author Tim Düsterhus, Marcel Werk
|
||||
* @copyright 2010-2012 WoltLab GmbH
|
||||
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage system.cache.builder
|
||||
*/
|
||||
class ChatPermissionCacheBuilder implements ICacheBuilder {
|
||||
@ -22,8 +22,8 @@ public function getData(array $cacheResource) {
|
||||
|
||||
if (count($groupIDs)) {
|
||||
$conditionBuilder = new \wcf\system\database\util\PreparedStatementConditionBuilder();
|
||||
$conditionBuilder->add('acl_option.packageID IN (?)', array(\wcf\system\package\PackageDependencyHandler::getDependencies()));
|
||||
$conditionBuilder->add('acl_option.objectTypeID = ?', array(\wcf\system\acl\ACLHandler::getInstance()->getObjectTypeID('timwolla.wcf.chat.room')));
|
||||
$conditionBuilder->add('acl_option.packageID IN (?)', array(\wcf\system\package\PackageDependencyHandler::getInstance()->getDependencies()));
|
||||
$conditionBuilder->add('acl_option.objectTypeID = ?', array(\wcf\system\acl\ACLHandler::getInstance()->getObjectTypeID('be.bastelstu.wcf.chat.room')));
|
||||
$conditionBuilder->add('option_to_group.optionID = acl_option.optionID');
|
||||
$conditionBuilder->add('option_to_group.groupID IN (?)', array($groupIDs));
|
||||
$sql = "SELECT option_to_group.groupID, option_to_group.objectID AS roomID, option_to_group.optionValue,
|
||||
@ -31,9 +31,9 @@ public function getData(array $cacheResource) {
|
||||
FROM wcf".WCF_N."_acl_option acl_option,
|
||||
wcf".WCF_N."_acl_option_to_group option_to_group
|
||||
".$conditionBuilder;
|
||||
$statement = WCF::getDB()->prepareStatement($sql);
|
||||
$statement->execute($conditionBuilder->getParameters());
|
||||
while ($row = $statement->fetchArray()) {
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute($conditionBuilder->getParameters());
|
||||
while ($row = $stmt->fetchArray()) {
|
||||
if (!isset($data[$row['roomID']][$row['permission']])) $data[$row['roomID']][$row['permission']] = $row['optionValue'];
|
||||
else $data[$row['roomID']][$row['permission']] = $row['optionValue'] || $data[$row['roomID']][$row['permission']];
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage system.cache.builder
|
||||
*/
|
||||
class ChatRoomCacheBuilder implements ICacheBuilder {
|
||||
|
@ -11,7 +11,7 @@
|
||||
* @author Tim Düsterhus, Marcel Werk
|
||||
* @copyright 2010-2012 WoltLab GmbH
|
||||
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage system.chat.permissions
|
||||
*/
|
||||
class ChatPermissionHandler extends \wcf\system\SingletonFactory {
|
||||
@ -27,13 +27,13 @@ class ChatPermissionHandler extends \wcf\system\SingletonFactory {
|
||||
* @see \wcf\system\SingletonFactory::init()
|
||||
*/
|
||||
protected function init() {
|
||||
$packageID = PackageDependencyHandler::getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
||||
|
||||
// get groups permissions
|
||||
$groups = implode(',', WCF::getUser()->getGroupIDs());
|
||||
$groupsFileName = \wcf\util\StringUtil::getHash(implode('-', WCF::getUser()->getGroupIDs()));
|
||||
CacheHandler::getInstance()->addResource('chatPermission-'.$groups, WCF_DIR.'cache/cache.chatPermission-'.$groupsFileName.'.php', 'wcf\system\cache\builder\ChatPermissionCacheBuilder');
|
||||
CacheHandler::getInstance()->addResource('chatPermission-'.$groups, WCF_DIR.'cache/cache.chatPermission-'.$groupsFileName.'.php', '\wcf\system\cache\builder\ChatPermissionCacheBuilder');
|
||||
$this->chatPermissions = CacheHandler::getInstance()->get('chatPermission-'.$groups);
|
||||
|
||||
// get user permissions
|
||||
@ -49,8 +49,8 @@ protected function init() {
|
||||
$userPermissions = array();
|
||||
|
||||
$conditionBuilder = new \wcf\system\database\util\PreparedStatementConditionBuilder();
|
||||
$conditionBuilder->add('acl_option.packageID IN (?)', array(PackageDependencyHandler::getDependencies()));
|
||||
$conditionBuilder->add('acl_option.objectTypeID = ?', array(ACLHandler::getInstance()->getObjectTypeID('timwolla.wcf.chat.room')));
|
||||
$conditionBuilder->add('acl_option.packageID IN (?)', array(PackageDependencyHandler::getInstance()->getDependencies()));
|
||||
$conditionBuilder->add('acl_option.objectTypeID = ?', array(ACLHandler::getInstance()->getObjectTypeID('be.bastelstu.wcf.chat.room')));
|
||||
$conditionBuilder->add('option_to_user.optionID = acl_option.optionID');
|
||||
$conditionBuilder->add('option_to_user.userID = ?', array(WCF::getUser()->userID));
|
||||
$sql = "SELECT option_to_user.objectID AS roomID, option_to_user.optionValue,
|
||||
@ -58,9 +58,9 @@ protected function init() {
|
||||
FROM wcf".WCF_N."_acl_option acl_option,
|
||||
wcf".WCF_N."_acl_option_to_user option_to_user
|
||||
".$conditionBuilder;
|
||||
$statement = WCF::getDB()->prepareStatement($sql);
|
||||
$statement->execute($conditionBuilder->getParameters());
|
||||
while ($row = $statement->fetchArray()) {
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute($conditionBuilder->getParameters());
|
||||
while ($row = $stmt->fetchArray()) {
|
||||
$userPermissions[$row['roomID']][$row['permission']] = $row['optionValue'];
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ public function getPermission(\wcf\data\chat\room\ChatRoom $room, $permission) {
|
||||
* Clears the cache.
|
||||
*/
|
||||
public static function clearCache() {
|
||||
$packageID = PackageDependencyHandler::getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
||||
|
||||
$ush->resetAll('chatUserPermissions', $packageID);
|
||||
|
21
file/lib/system/cronjob/ChatCleanupCronjob.class.php
Normal file
21
file/lib/system/cronjob/ChatCleanupCronjob.class.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
namespace wcf\system\cronjob;
|
||||
|
||||
/**
|
||||
* Vaporizes unneeded data.
|
||||
*
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage system.cronjob
|
||||
*/
|
||||
class ChatCleanupCronjob implements ICronjob {
|
||||
/**
|
||||
* @see wcf\system\ICronjob::execute()
|
||||
*/
|
||||
public function execute(\wcf\data\cronjob\Cronjob $cronjob) {
|
||||
\wcf\data\chat\message\ChatMessageEditor::prune();
|
||||
\wcf\data\chat\room\ChatRoomEditor::prune();
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@
|
||||
* @author Maximilian Mader
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage system.event.listener
|
||||
*/
|
||||
class ChatRouteListener implements \wcf\system\event\IEventListener {
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage system.menu.page
|
||||
*/
|
||||
class ChatPageMenuItemProvider extends DefaultPageMenuItemProvider {
|
||||
|
@ -7,7 +7,7 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage system.option
|
||||
*/
|
||||
class TimeIntervalOptionType extends TextOptionType {
|
||||
|
@ -10,10 +10,10 @@
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
* @subpackage util
|
||||
*/
|
||||
class ChatUtil {
|
||||
final class ChatUtil {
|
||||
/**
|
||||
* Matches a time-interval with modifiers.
|
||||
* Each part may be optionally separated by a comma
|
||||
@ -22,8 +22,43 @@ class ChatUtil {
|
||||
*/
|
||||
const TIME_MODIFIER_REGEX = '((?:[0-9]+[s|h|d|w|m|y|S|H|D|W|M|Y]?,?)+)';
|
||||
|
||||
/**
|
||||
* Package identifier of Tims Chat.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const PACKAGE_IDENTIFIER = 'be.bastelstu.wcf.chat';
|
||||
|
||||
public static $serialize = array('color' => true);
|
||||
|
||||
/**
|
||||
* Cached packageID of Tims Chat.
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
private static $packageID = null;
|
||||
|
||||
/**
|
||||
* Returns the packageID of Tims Chat.
|
||||
*/
|
||||
public static function getPackageID() {
|
||||
if (self::$packageID === null) {
|
||||
self::$packageID = PackageDependencyHandler::getInstance()->getPackageID(self::PACKAGE_IDENTIFIER);
|
||||
}
|
||||
|
||||
return self::$packageID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a random number.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public static function /* int */ getRandomNumber() {
|
||||
return 4; // chosen by a fair dice roll
|
||||
// guaranteed to be random
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a gradient out of two colors represented by an integer.
|
||||
* The first byte is red, the second byte is green, the third one is blue.
|
||||
@ -58,7 +93,7 @@ public static function gradient($string, $start, $end) {
|
||||
*/
|
||||
public static function readUserData($field) {
|
||||
$ush = UserStorageHandler::getInstance();
|
||||
$packageID = PackageDependencyHandler::getPackageID('timwolla.wcf.chat');
|
||||
$packageID = self::getPackageID();
|
||||
|
||||
// load storage
|
||||
$ush->loadStorage(array(WCF::getUser()->userID), $packageID);
|
||||
@ -79,30 +114,6 @@ public static function readUserData($field) {
|
||||
else return $data[WCF::getUser()->userID];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a random number.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public static function /* int */ getRandomNumber() {
|
||||
return 4; // chosen by a fair dice roll
|
||||
// guaranteed to be random
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes user data
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public static function writeUserData(array $data) {
|
||||
$ush = UserStorageHandler::getInstance();
|
||||
$packageID = PackageDependencyHandler::getPackageID('timwolla.wcf.chat');
|
||||
|
||||
foreach($data as $key => $value) {
|
||||
$ush->update(WCF::getUser()->userID, $key, (isset(static::$serialize[$key])) ? serialize($value) : $value, $packageID);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits a string into smaller chunks.
|
||||
* UTF-8 safe version of str_split().
|
||||
@ -175,4 +186,20 @@ public static function timeModifier($time) {
|
||||
|
||||
return (int) round($result, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes user data
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public static function writeUserData(array $data) {
|
||||
$ush = UserStorageHandler::getInstance();
|
||||
$packageID = self::getPackageID();
|
||||
|
||||
foreach($data as $key => $value) {
|
||||
$ush->update(WCF::getUser()->userID, $key, (isset(static::$serialize[$key])) ? serialize($value) : $value, $packageID);
|
||||
}
|
||||
}
|
||||
|
||||
private function __construct() { }
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
/**
|
||||
* Chat-Styles
|
||||
* Styles for Tims Chat
|
||||
*
|
||||
* @author Tim Düsterhus, Maximilian Mader
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @package be.bastelstu.wcf.chat
|
||||
*/
|
||||
|
||||
#timsChatRoomContent {
|
42
file/style/jCounter.scss
Normal file
42
file/style/jCounter.scss
Normal file
@ -0,0 +1,42 @@
|
||||
.jCounterContainer {
|
||||
display: table;
|
||||
|
||||
> div {
|
||||
display: table-row;
|
||||
}
|
||||
}
|
||||
|
||||
.jCounterInput {
|
||||
height: 16px;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
z-index: 9999;
|
||||
box-sizing: content-box !important;
|
||||
}
|
||||
|
||||
.jCounterInput, .jCounter {
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
.jCounter {
|
||||
text-align: center;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
padding: 0 5px 0 10px;
|
||||
position: relative;
|
||||
z-index: 0 !important;
|
||||
border-radius: 0px 5px 5px 0px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
width: 30px;
|
||||
|
||||
&.color-1 {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
&.color-2 {
|
||||
color: rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
&.color-3 {
|
||||
color: #D40D12;
|
||||
}
|
||||
}
|
@ -1,3 +1,12 @@
|
||||
----
|
||||
-- Database Structure for Tims Chat
|
||||
--
|
||||
-- @author Tim Düsterhus
|
||||
-- @copyright 2010-2012 Tim Düsterhus
|
||||
-- @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
-- @package be.bastelstu.wcf.chat
|
||||
----
|
||||
|
||||
DROP TABLE IF EXISTS wcf1_chat_message;
|
||||
CREATE TABLE wcf1_chat_message (
|
||||
messageID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
|
@ -4,6 +4,8 @@
|
||||
<item name="wcf.acp.chat.room.list"><![CDATA[Chaträume]]></item>
|
||||
<item name="wcf.acp.chat.room.add"><![CDATA[Chatraum hinzufügen]]></item>
|
||||
<item name="wcf.acp.chat.room.edit"><![CDATA[Chatraum bearbeiten]]></item>
|
||||
|
||||
<item name="wcf.acp.chat.delete.sure"><![CDATA[Möchten Sie den Raum „{$chatRoom->title|language}“ wirklich löschen?]]></item>
|
||||
</category>
|
||||
|
||||
<category name="wcf.acp.menu">
|
||||
@ -42,7 +44,7 @@
|
||||
<item name="wcf.chat.protocol"><![CDATA[Protokoll]]></item>
|
||||
<item name="wcf.chat.rooms"><![CDATA[Räume]]></item>
|
||||
<item name="wcf.chat.users"><![CDATA[Nutzer]]></item>
|
||||
<item name="wcf.chat.copyright"><![CDATA[<a href="http://timwolla.wbbaddons.de">Chat: <strong>Tims Chat</strong>{if CHAT_SHOW_VERSION} {$chatVersion}{/if}, entwickelt von <strong>TimWolla</strong></a>]]></item>
|
||||
<item name="wcf.chat.copyright"><![CDATA[<a href="http://tims.bastelstu.be">Chat: <strong>Tims Chat</strong>{if CHAT_SHOW_VERSION} {$chatVersion}{/if}, entwickelt von <strong>TimWolla</strong></a>]]></item>
|
||||
|
||||
<item name="wcf.chat.submit.default"><![CDATA[Zum Senden Enter drücken]]></item>
|
||||
<item name="wcf.chat.scroll"><![CDATA[Scrollen]]></item>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/maelstrom/object-type.xsd">
|
||||
<import>
|
||||
<type>
|
||||
<name>timwolla.wcf.chat.room</name>
|
||||
<name>be.bastelstu.wcf.chat.room</name>
|
||||
<definitionname>com.woltlab.wcf.acl</definitionname>
|
||||
</type>
|
||||
</import>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package name="timwolla.wcf.chat" xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/maelstrom/package.xsd">
|
||||
<package name="be.bastelstu.wcf.chat" xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/maelstrom/package.xsd">
|
||||
<packageinformation>
|
||||
<packagename><![CDATA[Tims Chat]]></packagename>
|
||||
<packagedescription><![CDATA[Chat for WoltLab Community Framework™]]></packagedescription>
|
||||
@ -7,7 +7,7 @@
|
||||
<isunique>1</isunique>
|
||||
<version>3.0.0 Alpha 8</version>
|
||||
<date>2011-11-26</date>
|
||||
<plugin>com.woltlab.wcf.bbcode</plugin> <!-- TODO: Correct me -->
|
||||
<plugin>com.woltlab.wcf.message</plugin> <!-- TODO: Correct me -->
|
||||
</packageinformation>
|
||||
|
||||
<authorinformation>
|
||||
@ -49,6 +49,6 @@
|
||||
<instruction type="aclOption">acloptions.xml</instruction>
|
||||
<instruction type="acpMenu">acpMenu.xml</instruction>
|
||||
<instruction type="userGroupOption">userGroupOption.xml</instruction>
|
||||
<instruction type="script">acp/timwolla.wcf.chat.update.php</instruction>
|
||||
<instruction type="script">acp/be.bastelstu.wcf.chat.update.php</instruction>
|
||||
</instructions>
|
||||
</package>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<pagemenuitem name="wcf.header.menu.chat">
|
||||
<link>index.php/Chat</link>
|
||||
<position>header</position>
|
||||
<classname>wcf\system\menu\page\ChatPageMenuItemProvider</classname>
|
||||
<classname>\wcf\system\menu\page\ChatPageMenuItemProvider</classname>
|
||||
</pagemenuitem>
|
||||
</import>
|
||||
</data>
|
@ -5,7 +5,7 @@
|
||||
|
||||
{include file='headInclude' sandbox=false}
|
||||
<style type="text/css">
|
||||
@import url("{@$__wcf->getPath('wcf')}style/timwolla.wcf.chat.css");
|
||||
@import url("{@$__wcf->getPath('wcf')}style/be.bastelstu.chat.css");
|
||||
#timsChatCopyrightDialog {
|
||||
background-image: url("{link controller='Chat' action='Copyright' sheep=1}{/link}");
|
||||
background-position: right 45px;
|
||||
@ -40,52 +40,6 @@
|
||||
.ajaxLoad {
|
||||
background-image: url({icon size='S'}spinner1{/icon});
|
||||
}
|
||||
|
||||
/*
|
||||
* jCounter CSS
|
||||
*
|
||||
* TODO: Seperate jCounter completely from Tims-Chat
|
||||
*/
|
||||
.jsCounterContainer {
|
||||
display: table;
|
||||
}
|
||||
|
||||
.jsCounterContainer > div {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.jsCounterInput {
|
||||
height: 16px;
|
||||
box-sizing: content-box !important;
|
||||
}
|
||||
|
||||
.jsCounterInput, .jsCounter {
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
.jsCounterInput, .jsCounterContainer {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.jsCounter {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
padding: 0 5px 0 10px;
|
||||
position: relative;
|
||||
z-index: 0 !important;
|
||||
border-radius: 0px 5px 5px 0px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
.jsCounter.color-1 {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
.jsCounter.color-2 {
|
||||
color: rgba(255,255,255,0.5);
|
||||
}
|
||||
.jsCounter.color-3 {
|
||||
color: #D40D12;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
@ -95,18 +49,18 @@
|
||||
{include file='header' sandbox=false sidebarOrientation='right'}
|
||||
|
||||
<div id="timsChatRoomContent">
|
||||
<div id="timsChatTopic" class="wcf-border"{if $room->topic|language === ''} style="display: none;"{/if}>{$room->topic|language}</div>
|
||||
<div class="timsChatMessageContainer wcf-border wcf-content">
|
||||
<div id="timsChatTopic" class="wcf-box wcf-marginBottom"{if $room->topic|language === ''} style="display: none;"{/if}>{$room->topic|language}</div>
|
||||
<div class="timsChatMessageContainer wcf-box wcf-shadow1 wcf-boxPadding">
|
||||
<ul>
|
||||
<noscript><li class="wcf-error">{lang}wcf.chat.noJs{/lang}</li></noscript>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<form id="timsChatForm" action="{link controller="Chat" action="Send"}{/link}" method="post">
|
||||
<input type="text" id="timsChatInput" class="inputText long jsCounterInput" name="text" autocomplete="off" maxlength="{@CHAT_MAX_LENGTH}" disabled="disabled" required="required" placeholder="{lang}wcf.chat.submit.default{/lang}" />
|
||||
<input type="text" id="timsChatInput" class="inputText long" name="text" autocomplete="off" maxlength="{@CHAT_MAX_LENGTH}" disabled="disabled" required="required" placeholder="{lang}wcf.chat.submit.default{/lang}" />
|
||||
</form>
|
||||
|
||||
<div id="timsChatControls" class="wcf-border">
|
||||
<div id="timsChatControls" class="wcf-box wcf-marginTop">
|
||||
{if MODULE_SMILEY}
|
||||
<div id="smileyList">
|
||||
<ul class="smilies">
|
||||
@ -155,12 +109,12 @@
|
||||
//<![CDATA[
|
||||
(function ($, window) {
|
||||
// populate templates
|
||||
TimWolla.WCF.Chat.titleTemplate = (new WCF.Template('{ldelim}$title} - {'wcf.chat.title'|language|encodeJS} - {PAGE_TITLE|language|encodeJS}')).compile();
|
||||
be.bastelstu.WCF.Chat.titleTemplate = (new WCF.Template('{ldelim}$title} - {'wcf.chat.title'|language|encodeJS} - {PAGE_TITLE|language|encodeJS}')).compile();
|
||||
{capture assign='chatMessageTemplate'}{include file='chatMessage'}{/capture}
|
||||
TimWolla.WCF.Chat.messageTemplate = (new WCF.Template('{@$chatMessageTemplate|encodeJS}')).compile();
|
||||
be.bastelstu.WCF.Chat.messageTemplate = (new WCF.Template('{@$chatMessageTemplate|encodeJS}')).compile();
|
||||
|
||||
// populate config
|
||||
TimWolla.WCF.Chat.config = {
|
||||
be.bastelstu.WCF.Chat.config = {
|
||||
reloadTime: {@CHAT_RELOADTIME},
|
||||
unloadURL: '{link controller='Chat' action='Leave'}{/link}'
|
||||
}
|
||||
@ -172,15 +126,15 @@
|
||||
'wcf.chat.newMessages': '{lang}wcf.chat.newMessages{/lang}'
|
||||
});
|
||||
WCF.Icon.addObject({
|
||||
'timwolla.wcf.chat.chat': '{icon size='L'}chat1{/icon}'
|
||||
'be.bastelstu.wcf.chat.chat': '{icon size='L'}chat1{/icon}'
|
||||
});
|
||||
{event name='shouldInit'}
|
||||
// Boot the chat
|
||||
TimWolla.WCF.Chat.init();
|
||||
be.bastelstu.WCF.Chat.init();
|
||||
{event name='didInit'}
|
||||
|
||||
// show the last X messages
|
||||
TimWolla.WCF.Chat.handleMessages([
|
||||
be.bastelstu.WCF.Chat.handleMessages([
|
||||
{implode from=$newestMessages item='message'}
|
||||
{@$message->jsonify()}
|
||||
{/implode}
|
||||
|
@ -1,7 +1,7 @@
|
||||
{if $templateName == 'chat'}<address id="timsChatCopyright" class="copyright">{lang}wcf.chat.copyright{/lang}</address>
|
||||
{elseif $templateName == 'chatCopyright'}
|
||||
<dl><dt>Project-Leader</dt><dd><ul><li><a href="http://timwolla.wbbaddons.de/">Tim Düsterhus</a></li></ul></dd></dl>
|
||||
<dl><dt>Developer</dt><dd><ul><li><a href="http://timwolla.wbbaddons.de/">Tim Düsterhus</a></li><li><a href="https://github.com/max-m">Maximilian Mader</a></li></ul></dd></dl>
|
||||
<dl><dt>Project-Leader</dt><dd><ul><li><a href="http://tims.bastelstu.be/">Tim Düsterhus</a></li></ul></dd></dl>
|
||||
<dl><dt>Developer</dt><dd><ul><li><a href="http://tims.bastelstu.be/">Tim Düsterhus</a></li><li><a href="https://github.com/max-m">Maximilian Mader</a></li></ul></dd></dl>
|
||||
<dl><dt>Graphics</dt><dd><ul><li><a href="http://www.cls-design.com/">Tom</a></li></ul></dd></dl>
|
||||
<dl><dt>Translation</dt><dd><ul><li>Riccardo Vianello (it)</li></ul></dd></dl>
|
||||
<dl><dt>Thanks</dt><dd><ul><li><a href="http://www.wbbaddons.de/user/2020-noone/">-noone-</a></li><li><a href="https://github.com/dtdesign">Alexander Ebert</a></li><li>Gabi</li><li><a href="https://github.com/Leon-">Stefan Hahn</a></li><li><a href="http://packageforge.de">Oliver Kliebisch</a></li><li>Christian Kubandt</li><li><a href="http://www.wbbaddons.de">Martin Schwendowius</a></li></ul></dd></dl>
|
||||
|
@ -1,2 +1,2 @@
|
||||
<script type="text/javascript" src="{@$__wcf->getPath('wcf')}js/TimWolla.WCF.Chat.js{if $chatVersion|isset}?version={$chatVersion|urlencode}{/if}"></script>
|
||||
<script type="text/javascript" src="{@$__wcf->getPath('wcf')}js/be.bastelstu.WCF.Chat.js{if $chatVersion|isset}?version={$chatVersion|urlencode}{/if}"></script>
|
||||
<script type="text/javascript" src="{@$__wcf->getPath('wcf')}js/jCounter.jQuery.js"></script>
|
Loading…
Reference in New Issue
Block a user