Version 4.1.19
This commit is contained in:
1 parent
28bd025b35
commit
2bd5025018
2674 files changed
+233518
-77766
No files matched your search
@@ -3,7 +3,7 @@
|
||||
* @brief Chat Application Class
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2014 Invision Power Services, Inc.
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 03 Jan 2014
|
||||
* @version
|
||||
@@ -56,7 +56,7 @@ class _Application extends \IPS\Application
|
||||
if( count( $times ) AND $times[0] )
|
||||
{
|
||||
/* Do we need to adjust the time zone? */
|
||||
if( isset( $times[2] ) AND $times[2] != \IPS\Member::loggedIn()->timezone )
|
||||
if( isset( $times[2] ) AND $times[2] AND \IPS\Member::loggedIn()->timezone AND $times[2] != \IPS\Member::loggedIn()->timezone )
|
||||
{
|
||||
$start = new \IPS\DateTime( '2015-01-01 ' . $times[0], new \DateTimeZone( $times[2] ) );
|
||||
$start->setTimezone( new \DateTimeZone( \IPS\Member::loggedIn()->timezone ) );
|
||||
@@ -67,8 +67,20 @@ class _Application extends \IPS\Application
|
||||
$times[1] = $end->format( 'H:i' );
|
||||
}
|
||||
|
||||
$currentTime = new \IPS\DateTime( NULL, new \DateTimeZone( ( isset( $times[2] ) ) ? $times[2] : \IPS\Member::loggedIn()->timezone ) );
|
||||
$currentTime->setTimezone( new \DateTimeZone( \IPS\Member::loggedIn()->timezone ) );
|
||||
if( ( isset( $times[2] ) AND $times[2] ) OR \IPS\Member::loggedIn()->timezone )
|
||||
{
|
||||
$currentTime = new \IPS\DateTime( NULL, new \DateTimeZone( ( isset( $times[2] ) AND $times[2] ) ? $times[2] : \IPS\Member::loggedIn()->timezone ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
$currentTime = new \IPS\DateTime;
|
||||
}
|
||||
|
||||
if( \IPS\Member::loggedIn()->timezone )
|
||||
{
|
||||
$currentTime->setTimezone( new \DateTimeZone( \IPS\Member::loggedIn()->timezone ) );
|
||||
}
|
||||
|
||||
$currentTime = $currentTime->format( 'H:i' );
|
||||
|
||||
/* Convert times to floats, as that is simple to compare */
|
||||
@@ -93,4 +105,37 @@ class _Application extends \IPS\Application
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default front navigation
|
||||
*
|
||||
* @code
|
||||
|
||||
// Each item...
|
||||
array(
|
||||
'key' => 'Example', // The extension key
|
||||
'app' => 'core', // [Optional] The extension application. If ommitted, uses this application
|
||||
'config' => array(...), // [Optional] The configuration for the menu item
|
||||
'title' => 'SomeLangKey', // [Optional] If provided, the value of this language key will be copied to menu_item_X
|
||||
'children' => array(...), // [Optional] Array of child menu items for this item. Each has the same format.
|
||||
)
|
||||
|
||||
return array(
|
||||
'rootTabs' => array(), // These go in the top row
|
||||
'browseTabs' => array(), // These go under the Browse tab on a new install or when restoring the default configuraiton; or in the top row if installing the app later (when the Browse tab may not exist)
|
||||
'browseTabsEnd' => array(), // These go under the Browse tab after all other items on a new install or when restoring the default configuraiton; or in the top row if installing the app later (when the Browse tab may not exist)
|
||||
'activityTabs' => array(), // These go under the Activity tab on a new install or when restoring the default configuraiton; or in the top row if installing the app later (when the Activity tab may not exist)
|
||||
)
|
||||
* @endcode
|
||||
* @return array
|
||||
*/
|
||||
public function defaultFrontNavigation()
|
||||
{
|
||||
return array(
|
||||
'rootTabs' => array(),
|
||||
'browseTabs' => array( array( 'key' => 'Chat' ) ),
|
||||
'browseTabsEnd' => array(),
|
||||
'activityTabs' => array()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1 +1,127 @@
|
||||
[]
|
||||
{
|
||||
"app=chat&module=chat&controller=logs": {
|
||||
"lang_key": "menu__chat_chat_logs",
|
||||
"restriction": "logs_manage",
|
||||
"keywords": [
|
||||
"chat logs",
|
||||
"жерналы чата",
|
||||
"логи чата"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings": {
|
||||
"lang_key": "menu__chat_chat_settings",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"Chat",
|
||||
"Chat Settings",
|
||||
"Chatroom",
|
||||
"чат",
|
||||
"комната",
|
||||
"настройки чата",
|
||||
"комната чата"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings&searchResult=form_ipchat_24hour": {
|
||||
"lang_key": "ipchat_24hour",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"Time Format",
|
||||
"формат времени"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings&searchResult=form_ipchat_hide_usermessage": {
|
||||
"lang_key": "ipchat_hide_usermessage",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"chat messages",
|
||||
"Show room join messages",
|
||||
"сообщения чата",
|
||||
"сообщение чата"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings&searchResult=form_ipchat_inactive_minutes": {
|
||||
"lang_key": "ipchat_inactive_minutes",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"inactivity",
|
||||
"inactivity period",
|
||||
"бездействие",
|
||||
"время бездействия",
|
||||
"период бездействия"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings&searchResult=form_ipchat_new_window": {
|
||||
"lang_key": "ipchat_new_window",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"chat new window",
|
||||
"Open in a new window",
|
||||
"новое окно",
|
||||
"открыть в новом окне",
|
||||
"чат в новом окне"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings&searchResult=form_ipchat_no_buffer": {
|
||||
"lang_key": "ipchat_no_buffer",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"chat history",
|
||||
"история чата",
|
||||
"история"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings&searchResult=form_ipschat_enable_rules": {
|
||||
"lang_key": "ipschat_enable_rules",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"chat rules",
|
||||
"правила чата"
|
||||
]
|
||||
},
|
||||
"app=chat&module=chat&controller=settings&searchResult=ipschat_online": {
|
||||
"lang_key": "ipschat_online",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"chat online",
|
||||
"online times",
|
||||
"чат онлайн",
|
||||
"включить чат",
|
||||
"чат включён"
|
||||
]
|
||||
},
|
||||
"app=core&module=members&controller=groups&searchResult=4_chat_access": {
|
||||
"lang_key": "chat_access",
|
||||
"restriction": "groups_manage",
|
||||
"keywords": [
|
||||
"access chat",
|
||||
"chat",
|
||||
"чат",
|
||||
"доступ к чату"
|
||||
]
|
||||
},
|
||||
"app=core&module=members&controller=groups&searchResult=4_chat_moderate": {
|
||||
"lang_key": "chat_moderate",
|
||||
"restriction": "groups_manage",
|
||||
"keywords": [
|
||||
"chat",
|
||||
"chat moderation",
|
||||
"moderate",
|
||||
"moderate chat",
|
||||
"чат",
|
||||
"модерация чата",
|
||||
"модерация",
|
||||
"модерирование чата",
|
||||
"модератор чата"
|
||||
]
|
||||
},
|
||||
"app=core&module=members&controller=members&searchResult=form_chat_banned": {
|
||||
"lang_key": "chat_banned",
|
||||
"restriction": null,
|
||||
"keywords": [
|
||||
"Access",
|
||||
"Chat",
|
||||
"чат",
|
||||
"доступ"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<javascript app="chat">
|
||||
<file javascript_app="chat" javascript_location="front" javascript_path="controllers/chat" javascript_name="ips.chat.main.js" javascript_type="controller" javascript_version="101012" javascript_position="1000050"><![CDATA[/**
|
||||
* IPS Social Suite 4
|
||||
<file javascript_app="chat" javascript_location="front" javascript_path="controllers/chat" javascript_name="ips.chat.main.js" javascript_type="controller" javascript_version="101093" javascript_position="1000050"><![CDATA[/**
|
||||
* IPS Community Suite 4
|
||||
* (c) 2013 Invision Power Services - http://www.invisionpower.com
|
||||
*
|
||||
* ips.chat.main.js - Main chat controller
|
||||
@@ -33,7 +33,7 @@
|
||||
_iframe: null,
|
||||
_iframeWindow: null,
|
||||
_secure: true,
|
||||
_urlRegex: /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;\(\)]*[-A-Z0-9+&@#\/%=~_|])/ig,
|
||||
_urlRegex: /\b(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:localhost)|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?\b/ig,
|
||||
_imgRegex: /^(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;\(\)]*[-A-Z0-9+&@#\/%=~_|])(\.jpg|\.png|\.gif)$/ig,
|
||||
|
||||
initialize: function () {
|
||||
@@ -48,7 +48,7 @@
|
||||
this.on( window, 'focus', this.windowFocus );
|
||||
this.on( window, 'blur', this.windowBlur );
|
||||
this.on( document, 'insertEmoticon', this.insertEmoticon );
|
||||
this.setup();
|
||||
this.setup();
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -921,6 +921,7 @@
|
||||
}
|
||||
|
||||
var sound = new buzz.sound( ips.getSetting('baseURL') + 'applications/chat/interface/sounds/' + ips.getSetting('sounds')[ soundName ], {
|
||||
webAudioApi: true,
|
||||
formats: [ "mp3" ]
|
||||
});
|
||||
|
||||
@@ -1013,7 +1014,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
if( !state.previousLastMsgID && this._noBuffer ){
|
||||
if( !state.previousLastMsgID && ips.getSetting('noBuffer') ){
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1059,6 +1060,8 @@
|
||||
|
||||
thisRoomID = 'private_' + user;
|
||||
}
|
||||
|
||||
msgDetails[4] = msgDetails[4].replace( '~~#~~', "," );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1069,8 +1072,7 @@
|
||||
var itemDate = this._getChatTime( msgDetails[0] );
|
||||
|
||||
msgDetails[2] = msgDetails[2].replace( '~~#~~', "," );
|
||||
msgDetails[2] = this._unCleanMessage( msgDetails[2] );
|
||||
msgDetails[4] = msgDetails[4].replace( '~~#~~', "," );
|
||||
msgDetails[2] = this._unCleanMessage( msgDetails[2] );
|
||||
msgDetails[3] = msgDetails[3].replace( '~~#~~', "," );
|
||||
msgDetails[3] = this._unCleanMessage( msgDetails[3] );
|
||||
msgDetails[3] = this._parseEmoticonsAndBbcode( msgDetails[3], msgDetails[5] );
|
||||
@@ -1366,7 +1368,8 @@
|
||||
.replace( /=/g, "__E__" )
|
||||
.replace( /\+/g, "__PS__" )
|
||||
.replace( /&/g, "__A__" )
|
||||
.replace( /%/g, "__P__" );
|
||||
.replace( /%/g, "__P__" )
|
||||
.replace( /~~\|\|~~/, "~~###~~" );
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -1382,7 +1385,8 @@
|
||||
.replace( /__P__/g, "%" )
|
||||
.replace( /__A__/g, "&" )
|
||||
.replace( /__C__/g, "," )
|
||||
.replace( /__N__/g, "<br />" );
|
||||
.replace( /__N__/g, "<br />" )
|
||||
.replace( /~~###~~/, "~~||~~" );
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -1395,44 +1399,37 @@
|
||||
_parseEmoticonsAndBbcode: function (message, chatUserID) {
|
||||
var self = this;
|
||||
|
||||
// Basics
|
||||
message = message.replace( /\[b\](.+?)\[\/b\]/gi, "<strong class='ipsStyle'>$1</strong>" );
|
||||
message = message.replace( /\[i\](.+?)\[\/i\]/gi, "<em class='ipsStyle'>$1</em>" );
|
||||
message = message.replace( /\[u\](.+?)\[\/u\]/gi, "<u class='ipsStyle'>$1</u>" );
|
||||
|
||||
// Emoticons
|
||||
// @todo this line still needed?
|
||||
message = message.replace( '!', '!' );
|
||||
|
||||
_.each( ips.getSetting('chatEmoticons'), function (url, emoticon) {
|
||||
_.each( ips.getSetting('chatEmoticons'), function (url, emoticon) {
|
||||
var img = $('<img/>').attr({ 'src': url['image'], 'data-emoticon': 'true' });
|
||||
if ( url['width'] ) {
|
||||
img.attr( 'width', url['width'] );
|
||||
}
|
||||
if ( url['height'] ) {
|
||||
img.attr( 'height', url['width'] );
|
||||
img.attr( 'height', url['height'] );
|
||||
}
|
||||
if ( url['image_2x'] ) {
|
||||
img.attr( 'srcset', url['image_2x'] );
|
||||
}
|
||||
img = "$1" + $('<div/>').append( img ).html() + "$2";
|
||||
|
||||
var regexp = new RegExp( "(^|\\s)" + self._escapeRegex( emoticon ) + "(\\s|$)", "gi" );
|
||||
|
||||
var regexp = new RegExp( "(^|\\s)" + self._escapeRegex( emoticon.replace( /</g, "<" ).replace( />/g, ">" ) ) + "(\\s|$)", "gi" );
|
||||
|
||||
while( message.match( regexp ) ){
|
||||
message = message.replace( regexp, img );
|
||||
}
|
||||
});
|
||||
|
||||
// Bad words
|
||||
var groupID = 0;
|
||||
var canBypassBadwords = false;
|
||||
var canBypassBadwords = false;
|
||||
|
||||
if( chatUserID ){
|
||||
var forumUser = ips.getSetting('forumIDMap')[ chatUserID ];
|
||||
|
||||
if( !_.isUndefined( forumUser ) ){
|
||||
groupID = forumUser.groupID
|
||||
canBypassBadwords = forumUser.canBypassBadwords;
|
||||
}
|
||||
}
|
||||
@@ -1451,56 +1448,26 @@
|
||||
info.swop = '#####';
|
||||
}
|
||||
|
||||
// Apparently we have to treat 'ass' differently because of the HTML class attribute
|
||||
if( badword == 'ass' ){
|
||||
var reversed = esrever.reverse( message );
|
||||
|
||||
if( info.m_exact ){
|
||||
// Loose
|
||||
regex = new RegExp( '(\\b|!|\\?|\\.|,|$)' + self._escapeRegex( reversed ) + '(?!lc)(^|\\b|\\s)', "gi" );
|
||||
} else {
|
||||
// Exact
|
||||
regex = new RegExp( self._escapeRegex( reversed ) + '(?!lc)', "gi" );
|
||||
}
|
||||
|
||||
while( matches = regex.exec( message ) ){
|
||||
if( matches !== null ){
|
||||
if( info.m_exact ){
|
||||
replaceMap[ "__BW" + iteration + "__" ] = esrever.reverse( matches[2] ) + info.swop + esrever.reverse( matches[1] );
|
||||
} else {
|
||||
replaceMap[ "__BW" + iteration + "__" ] = info.swop;
|
||||
}
|
||||
|
||||
reversed = reversed.replace( matches[0], "__" + iteration + "WB__" );
|
||||
iteration++;
|
||||
}
|
||||
}
|
||||
|
||||
message = esrever.reverse( reversed );
|
||||
return;
|
||||
// Is this a loose replacement or exact match?
|
||||
if( info.m_exact ){
|
||||
// Loose
|
||||
regex = new RegExp( '(^|\\b|\\s)' + self._escapeRegex( badword ) + '(\\b|!|\\?|\\.|,|$)', "gi" );
|
||||
} else {
|
||||
// Exact
|
||||
regex = new RegExp( self._escapeRegex( badword ), "gi" );
|
||||
}
|
||||
|
||||
// Is this a loose replacement or exact match?
|
||||
if( info.m_exact ){
|
||||
// Loose
|
||||
regex = new RegExp( '(^|\\b|\\s)' + self._escapeRegex( badword ) + '(\\b|!|\\?|\\.|,|$)', "gi" );
|
||||
} else {
|
||||
// Exact
|
||||
regex = new RegExp( self._escapeRegex( badword ), "gi" );
|
||||
}
|
||||
|
||||
// Iterate through the matches
|
||||
while( matches = regex.exec( message ) ){
|
||||
if( matches !== null ){
|
||||
if( info.m_exact ){
|
||||
replaceMap[ "__BW" + iteration + "__" ] = matches[1] + info.swop + matches[2];
|
||||
} else {
|
||||
replaceMap[ "__BW" + iteration + "__" ] = info.swop;
|
||||
}
|
||||
|
||||
message = message.replace( matches[0], "__BW" + iteration + "__" );
|
||||
iteration++;
|
||||
// Iterate through the matches
|
||||
while( matches = regex.exec( message ) ){
|
||||
if( matches !== null ){
|
||||
if( info.m_exact ){
|
||||
replaceMap[ "__BW" + iteration + "__" ] = matches[1] + info.swop + matches[2];
|
||||
} else {
|
||||
replaceMap[ "__BW" + iteration + "__" ] = info.swop;
|
||||
}
|
||||
|
||||
message = message.replace( matches[0], "__BW" + iteration + "__" );
|
||||
iteration++;
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1511,6 +1478,11 @@
|
||||
});
|
||||
}
|
||||
|
||||
// Basics
|
||||
message = message.replace( /\[b\](.+?)\[\/b\]/gi, "<strong class='ipsStyle'>$1</strong>" );
|
||||
message = message.replace( /\[i\](.+?)\[\/i\]/gi, "<em class='ipsStyle'>$1</em>" );
|
||||
message = message.replace( /\[u\](.+?)\[\/u\]/gi, "<u class='ipsStyle'>$1</u>" );
|
||||
|
||||
return message;
|
||||
},
|
||||
|
||||
@@ -1521,6 +1493,9 @@
|
||||
* @returns {string}
|
||||
*/
|
||||
_parseMessage: function (message) {
|
||||
// Because we insert as text, we need to make sure & is converted to &, otherwise entities will display incorrectly
|
||||
message = message.replace( /&/gi, '&' );
|
||||
|
||||
message = message.replace( /%20/gi, ' ' );
|
||||
message = message.replace( /%23/gi, '#' );
|
||||
message = message.replace( /%22/gi, '"' );
|
||||
@@ -1698,7 +1673,7 @@
|
||||
var returnURL = url;
|
||||
|
||||
if( text.substring( indexOfURL, indexOfURL - 5) !== 'src="' && text.substring( indexOfURL, indexOfURL - 8) !== 'srcset="' ){
|
||||
returnURL = '<a href="' + url + '" target="_blank">' + url + '</a>';
|
||||
returnURL = '<a href="' + url + '" target="_blank" rel="noopener noreferrer">' + url + '</a>';
|
||||
}
|
||||
|
||||
lastPos = indexOfURL + url.length;
|
||||
@@ -1879,7 +1854,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="chat" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.chat.js" javascript_type="template" javascript_version="101012" javascript_position="1000100"><![CDATA[ips.templates.set('chat.tabs.tab', " \
|
||||
<file javascript_app="chat" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.chat.js" javascript_type="template" javascript_version="101093" javascript_position="1000100"><![CDATA[ips.templates.set('chat.tabs.tab', " \
|
||||
<li role='presentation' data-roomID='{{roomID}}'>\
|
||||
<a href='#' role='tab' id='{{roomID}}' class='ipsFaded_withHover ipsTabs_item ipsType_blendLinks {{#active}}ipsTabs_activeItem{{/active}}' aria-selected='false'>\
|
||||
{{roomTitle}} {{#close}} <span class='ipsFaded ipsFaded_more' data-action='closeTab' data-ipsTooltip title='{{#lang}}closeThisTab{{/lang}}'><i class='fa fa-times'></i></span>{{/close}}\
|
||||
@@ -1996,9 +1971,10 @@ ips.templates.set('chat.chatDate', " \
|
||||
");
|
||||
|
||||
ips.templates.set('chat.parsedImage', " \
|
||||
<div class='cChatParsedImage ipsFaded_withHover'><a href='{{url}}' target='_blank' data-ipsLightbox><img src='{{url}}'></a> <span class='ipsType_light ipsHide' data-role='imageHidden'>{{#lang}}imageHidden{{/lang}}</span> <a href='#' class='ipsFaded ipsFaded_more ipsButton ipsButton_narrow ipsButton_verySmall ipsButton_primary' title='{{#lang}}hideImage{{/lang}}' data-ipsTooltip data-action='toggleImage'><i class='fa fa-caret-up'></i></a></div>\
|
||||
<div class='cChatParsedImage ipsFaded_withHover'><a href='{{url}}' target='_blank' rel='noopener noreferrer' data-ipsLightbox><img src='{{url}}'></a> <span class='ipsType_light ipsHide' data-role='imageHidden'>{{#lang}}imageHidden{{/lang}}</span> <a href='#' class='ipsFaded ipsFaded_more ipsButton ipsButton_narrow ipsButton_verySmall ipsButton_primary' title='{{#lang}}hideImage{{/lang}}' data-ipsTooltip data-action='toggleImage'><i class='fa fa-caret-up'></i></a></div>\
|
||||
");]]></file>
|
||||
<order app="global" path="/dev/js//framework/">templates
|
||||
common/ips.loader.js
|
||||
common/ui
|
||||
common/utils
|
||||
common
|
||||
@@ -2012,6 +1988,4 @@ app.js</order>
|
||||
<order app="global" path="/dev/js//library//jquery">jquery.js
|
||||
jquery.history.js
|
||||
jquery.transform.js</order>
|
||||
<order app="global" path="/dev/js//library//xregexp">xregexp-all.js
|
||||
xregexp-lookbehind.js</order>
|
||||
</javascript>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="chat" version="101012">
|
||||
<app key="chat" version="101093">
|
||||
<word key="__app_chat" js="0">Chat</word>
|
||||
<word key="frontnavigation_chat" js="0">Chat</word>
|
||||
<word key="chat_title" js="0">Chat</word>
|
||||
@@ -37,6 +37,10 @@
|
||||
<word key="acplogs__chat_settings" js="0">Updated chat settings</word>
|
||||
<word key="ipschat_online" js="0">Online times</word>
|
||||
<word key="ipschat_online_desc" js="0">Optionally specify a time period that chat will be available</word>
|
||||
<word key="ipschat_service_closed" js="0">The chat room is not presently available</word>
|
||||
<word key="ipschat_service_closed_admin" js="0"><![CDATA[IPS Chat Service is no longer available. <a href='{external.chat_closure}' target='_blank'>More Information</a>]]></word>
|
||||
<word key="ipschat_closure_warning" js="0"><![CDATA[On %s IPS will be retiring the Chat service. <a href='{external.chat_closure}' target='_blank'>Read More →</a>]]></word>
|
||||
<word key="ipschat_closure_warning_2" js="0">This message only shows to staff.</word>
|
||||
<word key="ipschat_no_license" js="0">The chat room is not presently available</word>
|
||||
<word key="ipschat_no_license_admin" js="0">You must supply a license key in order to enable the chat room</word>
|
||||
<word key="ipschat_no_license_access" js="0">Your license does not include access to the chat room</word>
|
||||
@@ -72,6 +76,7 @@
|
||||
<word key="connect_error_3" js="0">No room number was supplied to connect to the chat room. Please contact technical support for assistance.</word>
|
||||
<word key="connect_error_5" js="0">The room id supplied is invalid. Please contact technical support for assistance.</word>
|
||||
<word key="connect_error_6" js="0">The license key used was invalid, or is not correctly associated with a chat account. Please contact technical support for assistance.</word>
|
||||
<word key="connect_error_7" js="0">The server the chat room was hosted on is no longer online. Please wait a few moments and try again or contact technical support for assistance.</word>
|
||||
<word key="connect_error_8" js="0">The server the chat room was hosted on is no longer online. Please wait a few moments and try again or contact technical support for assistance.</word>
|
||||
<word key="connect_error_10" js="0">The chat server is offline. Please contact technical support for assistance.</word>
|
||||
<word key="chat_room_full" js="0">The chat room limit has been reached. You will not be able to join the chat room until some users first leave.</word>
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="chat" version="101093">
|
||||
<word key_rus="Чат" key="__app_chat" js="0">Chat</word>
|
||||
<word key_rus="Чат" key="frontnavigation_chat" js="0">Chat</word>
|
||||
<word key_rus="Чат" key="chat_title" js="0">Chat</word>
|
||||
<word key_rus="Чат" key="module__chat_chat" js="0">Chat</word>
|
||||
<word key_rus="Чат" key="menu__chat_chat" js="0">Chat</word>
|
||||
<word key_rus="PM" key="time_pm" js="0">PM</word>
|
||||
<word key_rus="AM" key="time_am" js="0">AM</word>
|
||||
<word key_rus="Вставить смайлик" key="chat_insert_emoticon" js="0">Insert Emoticon</word>
|
||||
<word key_rus="0 пользователей в чате" key="no_users_chatting" js="0">0 users chatting</word>
|
||||
<word key_rus="Настройки" key="menu__chat_chat_settings" js="0">Settings</word>
|
||||
<word key_rus="Журналы" key="menu__chat_chat_logs" js="0">Logs</word>
|
||||
<word key_rus="Журналы" key="r__logs" js="0">Logs</word>
|
||||
<word key_rus="Можно просматривать журналы чата?" key="r__logs_manage" js="0">Can view chat logs?</word>
|
||||
<word key_rus="Есть доступ к чату?" key="chat_banned" js="0">Can access chat?</word>
|
||||
<word key_rus="Есть доступ к чату?" key="chat_access" js="0">Can access chat?</word>
|
||||
<word key_rus="Можно модерировать чат?" key="chat_moderate" js="0">Can moderate chats?</word>
|
||||
<word key_rus="Можно создавать приватные чаты?" key="chat_private" js="0">Can send private chats?</word>
|
||||
<word key_rus="Чат" key="group__chat_ChatAccess" js="0">Chat</word>
|
||||
<word key_rus="Чат" key="member__chat_ChatBanned" js="0">Chat</word>
|
||||
<word key_rus="Формат времени" key="ipchat_24hour" js="0">Time format</word>
|
||||
<word key_rus="Время в 12-часовом формате" key="chat_12hour" js="0">Show times with AM/PM</word>
|
||||
<word key_rus="Время в 24-часовом формате" key="chat_24hour" js="0">Show times with 24 hour format</word>
|
||||
<word key_rus="Отображать сообщения входа/выхода" key="ipchat_hide_usermessage" js="0">Show room join messages</word>
|
||||
<word key_rus="Отображение сообщения в чате при входе или выходе пользователя из чата" key="ipchat_hide_usermessage_desc" js="0">Shows a message in the chat window when users enter and leave the room</word>
|
||||
<word key_rus="Период бездействия" key="ipchat_inactive_minutes" js="0">Inactivity period</word>
|
||||
<word key_rus="Если пользователь был неактивен указанный период времени, он автоматически покинет комнату чата" key="ipchat_inactive_minutes_desc" js="0">When the user has been inactive for this amount of time, they will be automatically kicked from the room</word>
|
||||
<word key_rus="Максимальное количество отображаемых сообщений в чате" key="ipchat_max_messages" js="0">Maximum number of displayed chats</word>
|
||||
<word key_rus="Открыть в новом окне" key="ipchat_new_window" js="0">Open in a new window</word>
|
||||
<word key_rus="Показать историю чата после входа в комнату" key="ipchat_no_buffer" js="0">Show chat history upon joining a room</word>
|
||||
<word key_rus="Показать правила чата" key="ipschat_enable_rules" js="0">Show chat rules</word>
|
||||
<word key_rus="Пользователю будет предложено согласиться с правилами, перед входом в чат" key="ipschat_enable_rules_desc" js="0">The user will be prompted to agree to the rules before being allowed to join the room</word>
|
||||
<word key_rus="Правила чата" key="ipschat_rules_text" js="0">Chat rules</word>
|
||||
<word key_rus="ЧЧ:ММ" key="chat_timeplaceholder" js="0">HH:MM</word>
|
||||
<word key_rus="Обновлены настройки чата" key="acplogs__chat_settings" js="0">Updated chat settings</word>
|
||||
<word key_rus="Время онлайн" key="ipschat_online" js="0">Online times</word>
|
||||
<word key_rus="При необходимости укажите период времени, когда чат будет доступен" key="ipschat_online_desc" js="0">Optionally specify a time period that chat will be available</word>
|
||||
<word key_rus="Комната чата в настоящее время недоступна" key="ipschat_service_closed" js="0">The chat room is not presently available</word>
|
||||
<word key_rus="Чат IPS больше недоступен. <a href='{external.chat_closure}' target='_blank'>дополнительная информация</a>" key="ipschat_service_closed_admin" js="0"><![CDATA[IPS Chat Service is no longer available. <a href='{external.chat_closure}' target='_blank'>More Information</a>]]></word>
|
||||
<word key_rus="В %s IPS Чат станет недоступен. <a href='{external.chat_closure}' target='_blank'>Подробнее →</a>" key="ipschat_closure_warning" js="0"><![CDATA[On %s IPS will be retiring the Chat service. <a href='{external.chat_closure}' target='_blank'>Read More →</a>]]></word>
|
||||
<word key_rus="Сообщение отображается только для модераторов." key="ipschat_closure_warning_2" js="0">This message only shows to staff.</word>
|
||||
<word key_rus="Чат в настоящее время недоступен" key="ipschat_no_license" js="0">The chat room is not presently available</word>
|
||||
<word key_rus="Вы должны ввести ключ лицензии для возможности пользоваться чатом" key="ipschat_no_license_admin" js="0">You must supply a license key in order to enable the chat room</word>
|
||||
<word key_rus="Ваша лицензия не включает в себя возможность доступа к чату" key="ipschat_no_license_access" js="0">Your license does not include access to the chat room</word>
|
||||
<word key_rus="Ваша группа имеет доступа к чату" key="ipschat_no_group_access" js="0">Your group does not have permission to access the chat room</word>
|
||||
<word key_rus="Вы не имеете доступа к чату" key="ipschat_no_access" js="0">You do not have permission to access the chat room</word>
|
||||
<word key_rus="Этот пользователь не может быть проигнорирован" key="ipschat_no_ignore" js="0">This user cannot be ignored</word>
|
||||
<word key_rus="У вас нет прав для блокировки пользователей в чате" key="ipschat_no_ban" js="0">You do not have permission to ban users in chat</word>
|
||||
<word key_rus="Журналы чата" key="ipschat_log_archive" js="0">Chat Logs</word>
|
||||
<word key_rus="Изменены настройки очищения журнала чата" key="acplog__chatlog_settings" js="0">Edited chat log prune settings</word>
|
||||
<word key_rus="Очистить журналы чата" key="ipchat_log_prune" js="0">Prune chat logs</word>
|
||||
<word key_rus="Дата" key="chatlog_log_time" js="0">Date</word>
|
||||
<word key_rus="Пользователь" key="chatlog_log_user" js="0">User</word>
|
||||
<word key_rus="Сообщение" key="chatlog_log_message" js="0">Message</word>
|
||||
<word key_rus="%s вошёл в комнату" key="chatlog__hasentered" js="0">%s entered the room</word>
|
||||
<word key_rus="%s вышел из комнаты" key="chatlog__hasleft" js="0">%s left the room</word>
|
||||
<word key_rus="Выгнан: %s" key="chatlog__kicked" js="0">Kicked: %s</word>
|
||||
<word key_rus="Приватный чат с %s: %s" key="chatlog__private" js="0">Private chat with %s: %s</word>
|
||||
<word key_rus="Переключить звуковые уведомления" key="chat_toggle_sound" js="0">Toggle sound notifications</word>
|
||||
<word key_rus="Выйти из чата" key="chat_leave_room" js="0">Leave Chatroom</word>
|
||||
<word key_rus="Я согласен с условиями" key="ipschat_confirm" js="0">I agree to the terms</word>
|
||||
<word key_rus="Возникла ошибка входа в комнату чата. Пожалуйста, попробуйте ещё раз или свяжитесь с нами." key="generic_chatconnect_error" js="0">There was an error joining the chat room. Please try again or contact us.</word>
|
||||
<word key_rus="В настоящее время чат не работает, но будет доступен в %s." key="chat_currently_offline" js="0">The chat room is currently offline but will be back at %s.</word>
|
||||
<word key_rus="В настоящее время чат не работает согласно настройкам Сообщество -> Чат -> Настройки" key="chat_offline_admin" js="0"><![CDATA[The chat room is currently offline based upon the ACP configuration available at Community -> Chat -> Settings]]></word>
|
||||
<word key_rus="Вы вышли из чата" key="leave_chat_room" js="0">You have left the chat room</word>
|
||||
<word key_rus="Начать приватный чат" key="ipchat_private_chat" js="0">Start private chat</word>
|
||||
<word key_rus="Игнорировать приватные чаты" key="ipchat_ignore_chats" js="0">Ignore private chats</word>
|
||||
<word key_rus="Перестать игнорировать приватные чаты" key="ipchat_unignore_chats" js="0">Stop ignoring private chats</word>
|
||||
<word key_rus="Выгнать пользователя из комнаты" key="ipchat_kick" js="0">Kick user from room</word>
|
||||
<word key_rus="Забанить пользователя в комнате" key="ipchat_ban" js="0">Ban user from room</word>
|
||||
<word key_rus="Просмотр профиля" key="ipchat_profile" js="0">View user profile</word>
|
||||
<word key_rus="Используемый лицензионный ключ недействителен, или неверно связан с аккаунтом чата." key="connect_error_1" js="0">The license key used was invalid, or is not correctly associated with a chat account.</word>
|
||||
<word key_rus="Не предоставлено имя пользователя для соединения с комнатой чата. Пожалуйста, свяжитесь со службой технической поддержки для получения помощи." key="connect_error_2" js="0">No username was supplied to connect to the chat room. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Не указан номер комнаты чата для соединения. Пожалуйста, свяжитесь со службой технической поддержки для получения помощи." key="connect_error_3" js="0">No room number was supplied to connect to the chat room. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Указанный id комнаты чата недействителен. Пожалуйста, свяжитесь со службой технической поддержки для получения помощи." key="connect_error_5" js="0">The room id supplied is invalid. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Используемый лицензионный ключ недействителен, или неверно связан с аккаунтом чата. Пожалуйста, свяжитесь со службой технической поддержки для получения помощи." key="connect_error_6" js="0">The license key used was invalid, or is not correctly associated with a chat account. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Сервер чата больше не доступен. Пожалуйста, подождите несколько минут и попробуйте снова или обратитесь в службу технической поддержки за помощью." key="connect_error_7" js="0">The server the chat room was hosted on is no longer online. Please wait a few moments and try again or contact technical support for assistance.</word>
|
||||
<word key_rus="Сервер чата больше не доступен. Пожалуйста, подождите несколько минут и попробуйте снова или обратитесь в службу технической поддержки за помощью." key="connect_error_8" js="0">The server the chat room was hosted on is no longer online. Please wait a few moments and try again or contact technical support for assistance.</word>
|
||||
<word key_rus="Сервер чата больше не доступен. Пожалуйста, свяжитесь со службой технической поддержки для получения помощи." key="connect_error_10" js="0">The chat server is offline. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Был достигнут лимит чата. Вы не сможете войти в чат до тех пор, пока кто-то из пользователей из него не выйдет." key="chat_room_full" js="0">The chat room limit has been reached. You will not be able to join the chat room until some users first leave.</word>
|
||||
<word key_rus="Ваша лицензия не включает Чат, либо её срок действия истёк. Пожалуйста, свяжитесь со службой обслуживания клиентов за помощью." key="license_no_chat" js="0">Your license does not include Chat or has expired. Please contact customer services for assistance.</word>
|
||||
<word key_rus="Ваш сервер не может соединиться с нашими серверами чата. Пожалуйста, обратитесь в службу технической поддержки компании." key="connect_gw_error_0" js="0">Your server was unable to communicate with our chat servers. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Используемый лицензионный ключ недействителен, или неверно связан с аккаунтом чата. Пожалуйста, свяжитесь со службой технической поддержки для получения помощи." key="connect_gw_error_1" js="0">The license key used was invalid, or is not correctly associated with a chat account. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Не предоставлено имя пользователя для соединения с комнатой чата. Пожалуйста, свяжитесь со службой технической поддержки для получения помощи." key="connect_gw_error_2" js="0">No username was supplied to connect to the chat room. Please contact technical support for assistance.</word>
|
||||
<word key_rus="Указанный ID комнаты был признан недействительным. Пожалуйста, подождите несколько минут и попробуйте снова или обратитесь в службу технической поддержки за помощью." key="connect_gw_error_4" js="0">The room ID supplied was invalid. Please wait a few moments and try again or contact technical support for assistance.</word>
|
||||
<word key_rus="Срок использования ключа для комнаты чата истёк. Пожалуйста, подождите несколько минут и попробуйте снова или обратитесь в службу технической поддержки за помощью." key="connect_gw_error_5" js="0">The chat room key has expired. Please wait a few moments and try again or contact technical support for assistance.</word>
|
||||
<word key_rus="Лицензионный ключ не соответствует ключу чата. Пожалуйста, подождите несколько минут и попробуйте снова или обратитесь в службу технической поддержки за помощью." key="connect_gw_error_6" js="0">The license key did not match the key for the chat room. Please wait a few moments and try again or contact technical support for assistance.</word>
|
||||
<word key_rus="Кто в чате" key="block_chatwhoschatting" js="0">Who's Chatting</word>
|
||||
<word key_rus="Отображение пользователей, находящихся в чате" key="block_chatwhoschatting_desc" js="0">Show the users currently in the chat room</word>
|
||||
<word key_rus="В настоящее время пользователей в чате нет" key="chatters_list_empty" js="0">There are no users currently in the chat room</word>
|
||||
<word key_rus="Принять и войти в чат" key="accept_rules" js="0">Accept and enter chatroom</word>
|
||||
<word key_rus="Правила чата" key="chatroom_rules" js="0">Chatroom Rules</word>
|
||||
<word key_rus="Заблокированные в чате" key="modcp_members_chatBanned" js="0">Chat Banned</word>
|
||||
<word key_rus="{{username}} вышел из комнаты" key="leftRoom" js="1">{{username}} left the room</word>
|
||||
<word key_rus="{{username}} вошёл в комнату" key="enteredRoom" js="1">{{username}} entered the room</word>
|
||||
<word key_rus="Приватный чат с {{user}}" key="privateChatWith" js="1">Private chat with {{user}}</word>
|
||||
<word key_rus="Приватный чат" key="privateChat" js="1">Private Chat</word>
|
||||
<word key_rus="Звуковое уведомление включено" key="soundEnabled" js="1">Notification sounds have been enabled</word>
|
||||
<word key_rus="Звуковое уведомление отключено" key="soundDisabled" js="1">Notification sounds have been disabled</word>
|
||||
<word key_rus="В чате {# [*1:пользователь][*2:пользователя][*3:пользователя][*4:пользователя][11:пользователей][12:пользователей][13:пользователей][14:пользователей][?:пользователей]}" key="usersChatting" js="1">{# [1:user][?:users]} chatting</word>
|
||||
<word key_rus="Вы не можете начать приватный чат с самим собой!" key="cantChatWithSelf" js="1">You can't start a private chat with yourself!</word>
|
||||
<word key_rus="{{user}} не может быть проигнорирован" key="cantIgnoreUser" js="1">{{user}} can't be ignored</word>
|
||||
<word key_rus="Закрыть чат" key="closeThisTab" js="1">Close this chat</word>
|
||||
<word key_rus="Вставить смайлик" key="insertEmoticon" js="1">Insert Emoticon</word>
|
||||
<word key_rus="Отправить" key="sendChat" js="1">Send</word>
|
||||
<word key_rus="Пользователей в чате нет" key="noUsersChatting" js="1">No users chatting</word>
|
||||
<word key_rus="Чат" key="chatroom" js="1">Chat</word>
|
||||
<word key_rus="Публичный чат" key="chatroomTooltip" js="1">Public Chat</word>
|
||||
<word key_rus="Система" key="system" js="1">System</word>
|
||||
<word key_rus="Вас выгнали из чата." key="kickedFromServer" js="1">You have been kicked from the chatroom.</word>
|
||||
<word key_rus="AM" key="time_am" js="1">AM</word>
|
||||
<word key_rus="PM" key="time_pm" js="1">PM</word>
|
||||
<word key_rus="Переключить изображение" key="hideImage" js="1">Toggle image</word>
|
||||
<word key_rus="Изображение скрыто" key="imageHidden" js="1">Image hidden</word>
|
||||
</app>
|
||||
</language>
|
||||
@@ -123,7 +123,6 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"collation": "latin1_swedish_ci",
|
||||
"engine": "MyISAM"
|
||||
"collation": "utf8mb4_unicode_ci"
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,14 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>]]></template>
|
||||
</div>
|
||||
|
||||
{{if member.isAdmin() or !empty( member.modPermissions() )}}
|
||||
<p class="ipsMessage ipsMessage_information">
|
||||
{lang="ipschat_closure_warning" sprintf="\IPS\DateTime::ts( 1493596800 )->format( 'j M Y' )"}<br>
|
||||
<span class="ipsType_small">{lang="ipschat_closure_warning_2"}</span>
|
||||
</p>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="view" template_name="chatvars" template_data="$options, $forumIdMap, $groups, $badwords, $ignored, $emoticons" template_location="front" template_app="chat"><![CDATA[
|
||||
<script type='text/javascript'>
|
||||
// System vars
|
||||
@@ -124,7 +131,7 @@
|
||||
ips.setSetting( 'moderator', {{if \IPS\Member::loggedIn()->group['chat_moderate']}}true{{else}}false{{endif}} );
|
||||
ips.setSetting( 'private', {{if \IPS\Member::loggedIn()->group['chat_private']}}true{{else}}false{{endif}} );
|
||||
ips.setSetting( 'hideEnterExit', '{expression="(bool) \IPS\Settings::i()->ipchat_hide_usermessage"}' );
|
||||
ips.setSetting( 'noBuffer', '{expression="(bool) \IPS\Settings::i()->ipchat_no_buffer"}' );
|
||||
ips.setSetting( 'noBuffer', {{if \IPS\Settings::i()->ipchat_no_buffer}}false{{else}}true{{endif}} );
|
||||
ips.setSetting( 'inactiveKick', parseInt( {expression="\IPS\Settings::i()->ipchat_inactive_minutes"} * 60 ) );
|
||||
ips.setSetting( 'user24hour', {{if \IPS\Settings::i()->ipchat_24hour == '24'}}true{{else}}false{{endif}} );
|
||||
ips.setSetting( 'soundEnabled', ips.utils.db.get( 'chat', 'sounds' ) );
|
||||
@@ -191,7 +198,7 @@
|
||||
<template template_group="widgets" template_name="chatwhoschatting" template_data="$chatters, $orientation='vertical'" template_location="front" template_app="chat"><![CDATA[<h3 class='ipsType_reset ipsWidget_title'>
|
||||
{lang="block_chatwhoschatting"}
|
||||
</h3>
|
||||
<div class='ipsWidget_inner {{if $orientation == 'vertical'}}ipsPad{{endif}}'>
|
||||
<div class='ipsWidget_inner {{if $orientation == 'vertical'}}ipsPad{{else}}ipsPad_half{{endif}}'>
|
||||
{{if count( $chatters )}}
|
||||
<ul class='ipsList_inline ipsList_csv ipsList_noSpacing'>
|
||||
{{foreach $chatters as $row}}
|
||||
|
||||
@@ -98,5 +98,79 @@
|
||||
"101009": "4.1.0 Beta 10",
|
||||
"101010": "4.1.0",
|
||||
"101011": "4.1.1",
|
||||
"101012": "4.1.2"
|
||||
"101012": "4.1.2",
|
||||
"101013": "4.1.3",
|
||||
"101014": "4.1.3.1",
|
||||
"101015": "4.1.3.2",
|
||||
"101016": "4.1.4",
|
||||
"101017": "4.1.4.1",
|
||||
"101018": "4.1.5",
|
||||
"101019": "4.1.5.1",
|
||||
"101020": "4.1.5.2",
|
||||
"101021": "4.1.6",
|
||||
"101022": "4.1.6.1",
|
||||
"101023": "4.1.7",
|
||||
"101024": "4.1.8",
|
||||
"101025": "4.1.8.1",
|
||||
"101026": "4.1.9",
|
||||
"101027": "4.1.10",
|
||||
"101028": "4.1.11",
|
||||
"101029": "4.1.11.1",
|
||||
"101030": "4.1.12",
|
||||
"101031": "4.1.12.1",
|
||||
"101032": "4.1.12.2",
|
||||
"101033": "4.1.12.3",
|
||||
"101034": "4.1.13 Beta 1",
|
||||
"101035": "4.1.13 Beta 2",
|
||||
"101036": "4.1.13",
|
||||
"101037": "4.1.13",
|
||||
"101038": "4.1.13.1",
|
||||
"101040": "4.1.13.2",
|
||||
"101041": "4.1.13.2",
|
||||
"101042": "4.1.14 Beta 1",
|
||||
"101043": "4.1.14 Beta 2",
|
||||
"101044": "4.1.14 Beta 3",
|
||||
"101045": "4.1.14 Beta 4",
|
||||
"101046": "4.1.14 Beta 5",
|
||||
"101049": "4.1.14 Beta 6",
|
||||
"101050": "4.1.14 Beta 7",
|
||||
"101051": "4.1.14 RC",
|
||||
"101052": "4.1.14",
|
||||
"101053": "4.1.14.1",
|
||||
"101054": "4.1.14.2",
|
||||
"101055": "4.1.14.3",
|
||||
"101056": "4.1.15",
|
||||
"101057": "4.1.15 Beta 1",
|
||||
"101058": "4.1.15 Beta 2",
|
||||
"101059": "4.1.15 Beta 2a",
|
||||
"101060": "4.1.15 Beta 3",
|
||||
"101061": "4.1.15",
|
||||
"101062": "4.1.15",
|
||||
"101063": "4.1.15",
|
||||
"101064": "4.1.16 Beta 1",
|
||||
"101065": "4.1.16 Beta 2",
|
||||
"101066": "4.1.16 Beta 3",
|
||||
"101067": "4.1.16 Beta 4",
|
||||
"101068": "4.1.16 Beta 5",
|
||||
"101069": "4.1.16",
|
||||
"101070": "4.1.16.1",
|
||||
"101071": "4.1.17 Beta 1",
|
||||
"101072": "4.1.17 Beta 1a",
|
||||
"101073": "4.1.17 Beta 1b",
|
||||
"101074": "4.1.17 Beta 2",
|
||||
"101075": "4.1.17 Beta 3",
|
||||
"101076": "4.1.17 Beta 3",
|
||||
"101077": "4.1.17",
|
||||
"101078": "4.1.17.1",
|
||||
"101079": "4.1.18 Beta 1",
|
||||
"101082": "4.1.18 Beta 1b",
|
||||
"101083": "4.1.18 Beta 2",
|
||||
"101084": "4.1.18 Beta 3",
|
||||
"101085": "4.1.18",
|
||||
"101088": "4.1.18.1",
|
||||
"101089": "4.1.18.2",
|
||||
"101090": "4.1.19 Beta 1",
|
||||
"101091": "4.1.19 Beta 2",
|
||||
"101092": "4.1.19 Beta 3",
|
||||
"101093": "4.1.19"
|
||||
}
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Front Navigation Extension: Chat
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 8 Jan 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -35,13 +35,13 @@ class _Chat extends \IPS\core\FrontNavigation\FrontNavigationAbstract
|
||||
}
|
||||
|
||||
/**
|
||||
* Can access?
|
||||
* Can the currently logged in user access the content this item links to?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canView()
|
||||
public function canAccessContent()
|
||||
{
|
||||
return parent::canView() and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'chat', 'chat' ) );
|
||||
return \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'chat', 'chat' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Admin CP Group Form
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Admin CP Member Form
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Moderator Control Panel Member Management Extension: ChatBanned
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -27,7 +27,7 @@ class _ChatBanned
|
||||
/**
|
||||
* Returns the tab key for the navigation bar
|
||||
*
|
||||
* @return string
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTab()
|
||||
{
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
//<?php
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
class chat_hook_tabCount extends _HOOK_CLASS_
|
||||
{
|
||||
/**
|
||||
@@ -49,7 +55,7 @@ class chat_hook_tabCount extends _HOOK_CLASS_
|
||||
|
||||
\IPS\Output::i()->endBodyCode .= <<<HTML
|
||||
<script type='text/javascript'>
|
||||
$('[data-role="navBarItem"][data-navApp="chat"][data-navExt="Chat"]').append( $('<span/>').addClass('ipsNotificationCount').text('{$count}') );
|
||||
$('[data-role="navBarItem"][data-navApp="chat"][data-navExt="Chat"] > a').append( $('<span/>').addClass('ipsNotificationCount').text('{$count}') );
|
||||
</script>
|
||||
HTML;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
//<?php
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
class chat_hook_tabCountLoad extends _HOOK_CLASS_
|
||||
{
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
//<?php
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
class chat_hook_tabNewWindow extends _HOOK_CLASS_
|
||||
{
|
||||
/**
|
||||
@@ -18,7 +24,7 @@ class chat_hook_tabNewWindow extends _HOOK_CLASS_
|
||||
|
||||
\IPS\Output::i()->endBodyCode .= <<<HTML
|
||||
<script type='text/javascript'>
|
||||
$('.elNavigation_app_chat_Chat').click( function( e ){
|
||||
$('[data-role="navBarItem"][data-navapp="chat"][data-navext="Chat"] a').click( function( e ){
|
||||
e.preventDefault();
|
||||
|
||||
var joinWith = '?';
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/*! https://mths.be/esrever v0.2.0 by @mathias */
|
||||
;(function(root) {
|
||||
|
||||
// Detect free variables `exports`
|
||||
var freeExports = typeof exports == 'object' && exports;
|
||||
|
||||
// Detect free variable `module`
|
||||
var freeModule = typeof module == 'object' && module &&
|
||||
module.exports == freeExports && module;
|
||||
|
||||
// Detect free variable `global`, from Node.js or Browserified code,
|
||||
// and use it as `root`
|
||||
var freeGlobal = typeof global == 'object' && global;
|
||||
if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
|
||||
root = freeGlobal;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
var regexSymbolWithCombiningMarks = /([\0-\u02FF\u0370-\u1AAF\u1B00-\u1DBF\u1E00-\u20CF\u2100-\uD7FF\uE000-\uFE1F\uFE30-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])([\u0300-\u036F\u1AB0-\u1AFF\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]+)/g;
|
||||
var regexSurrogatePair = /([\uD800-\uDBFF])([\uDC00-\uDFFF])/g;
|
||||
|
||||
var reverse = function(string) {
|
||||
// Step 1: deal with combining marks and astral symbols (surrogate pairs)
|
||||
string = string
|
||||
// Swap symbols with their combining marks so the combining marks go first
|
||||
.replace(regexSymbolWithCombiningMarks, function($0, $1, $2) {
|
||||
// Reverse the combining marks so they will end up in the same order
|
||||
// later on (after another round of reversing)
|
||||
return reverse($2) + $1;
|
||||
})
|
||||
// Swap high and low surrogates so the low surrogates go first
|
||||
.replace(regexSurrogatePair, '$2$1');
|
||||
// Step 2: reverse the code units in the string
|
||||
var result = '';
|
||||
var index = string.length;
|
||||
while (index--) {
|
||||
result += string.charAt(index);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
var esrever = {
|
||||
'version': '0.2.0',
|
||||
'reverse': reverse
|
||||
};
|
||||
|
||||
// Some AMD build optimizers, like r.js, check for specific condition patterns
|
||||
// like the following:
|
||||
if (
|
||||
typeof define == 'function' &&
|
||||
typeof define.amd == 'object' &&
|
||||
define.amd
|
||||
) {
|
||||
define(function() {
|
||||
return esrever;
|
||||
});
|
||||
} else if (freeExports && !freeExports.nodeType) {
|
||||
if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
|
||||
freeModule.exports = esrever;
|
||||
} else { // in Narwhal or RingoJS v0.7.0-
|
||||
for (var key in esrever) {
|
||||
esrever.hasOwnProperty(key) && (freeExports[key] = esrever[key]);
|
||||
}
|
||||
}
|
||||
} else { // in Rhino or a web browser
|
||||
root.esrever = esrever;
|
||||
}
|
||||
|
||||
}(this));
|
||||
Whitespace-only changes.
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief logs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief settings
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -59,7 +59,7 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
$times = explode( ',', \IPS\Settings::i()->ipschat_online );
|
||||
|
||||
/* Do we need to adjust the time zone? */
|
||||
if( isset( $times[2] ) AND $times[2] != \IPS\Member::loggedIn()->timezone )
|
||||
if( isset( $times[2] ) AND $times[2] AND $times[2] != \IPS\Member::loggedIn()->timezone )
|
||||
{
|
||||
$start = new \IPS\DateTime( '2015-01-01 ' . $times[0], new \DateTimeZone( $times[2] ) );
|
||||
$start->setTimezone( new \DateTimeZone( \IPS\Member::loggedIn()->timezone ) );
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Action Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 23 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -42,6 +42,8 @@ class _action extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function addUser()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$member = \IPS\Member::load( intval( \IPS\Request::i()->id ) );
|
||||
|
||||
$map = array(
|
||||
@@ -52,7 +54,7 @@ class _action extends \IPS\Content\Controller
|
||||
'photo' => $member->photo,
|
||||
'username' => $member->member_id ? $member->name : $member->loggedIn()->language()->get('guest'),
|
||||
'formattedUsername' => \IPS\Member\Group::load( $member->member_group_id )->formatName( $member->name ),
|
||||
'canBeIgnored' => $member->member_id ? !$member->group['gbw_cannot_be_ignored'] : 1,
|
||||
'canBeIgnored' => !$member->canBeIgnored(),
|
||||
'canBypassBadwords' => $member->group['g_bypass_badwords'],
|
||||
'groupID' => $member->member_group_id,
|
||||
'profileUrl' => $member->url(),
|
||||
@@ -93,6 +95,8 @@ class _action extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function blockUser()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
/* Make sure there is an ID */
|
||||
if( !\IPS\Request::i()->id )
|
||||
{
|
||||
@@ -102,7 +106,7 @@ class _action extends \IPS\Content\Controller
|
||||
/* Make sure we can ignore this user */
|
||||
$user = \IPS\Member::load( \IPS\Request::i()->id );
|
||||
|
||||
if( $user->group['gbw_cannot_be_ignored'] )
|
||||
if( !$user->canBeIgnored() )
|
||||
{
|
||||
\IPS\Output::i()->error( 'ipschat_no_ignore', '3H269/K', 403, '' );
|
||||
}
|
||||
@@ -134,6 +138,8 @@ class _action extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function banUser()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
/* Make sure there is an ID */
|
||||
if( !\IPS\Request::i()->id )
|
||||
{
|
||||
@@ -218,7 +224,7 @@ class _action extends \IPS\Content\Controller
|
||||
'user_id' => $_thisRecord[0],
|
||||
'username' => htmlspecialchars( $username, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'forumUserID' => $member->member_id,
|
||||
'canBeIgnored' => $member->member_id ? !$member->group['gbw_cannot_be_ignored'] : 1,
|
||||
'canBeIgnored' => !$member->canBeIgnored(),
|
||||
'canBypassBadwords' => $member->group['g_bypass_badwords'],
|
||||
'groupID' => $member->member_group_id,
|
||||
'prefix' => str_replace( '"', '__DBQ__', $member->group['prefix'] ),
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief View File Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 10 Oct 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -36,6 +36,11 @@ class _view extends \IPS\Content\Controller
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
if ( time() > 1493596800 )
|
||||
{
|
||||
\IPS\Output::i()->error( 'ipschat_service_closed', '1H000/0', 503, 'ipschat_service_closed_admin' );
|
||||
}
|
||||
|
||||
/* Check that the license allows access, etc. */
|
||||
$licenseData = \IPS\IPS::licenseKey();
|
||||
|
||||
@@ -92,7 +97,6 @@ class _view extends \IPS\Content\Controller
|
||||
/* Initiate output */
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'jquery/jquery.rangyinputs.js', 'core', 'interface' ) );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'buzz/buzz.min.js', 'core', 'interface' ) );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'esrever/esrever.js', 'chat', 'interface' ) );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_chat.js', 'chat', 'front' ) );
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'chat.css', 'chat', 'front' ) );
|
||||
|
||||
@@ -181,12 +185,12 @@ class _view extends \IPS\Content\Controller
|
||||
\IPS\Output::i()->error( 'chat_room_full', ( $key['chat_limit'] ? '1' : '4' ) . 'H269/B', 403, $key['chat_limit'] ? 'license_no_chat' : NULL );
|
||||
break;
|
||||
|
||||
// Chat room full
|
||||
// The chat room is on a server which is no longer online
|
||||
case 7:
|
||||
\IPS\Output::i()->error( 'generic_chatconnect_error', '5H269/A', 500, 'connect_gw_error_5' );
|
||||
\IPS\Output::i()->error( 'generic_chatconnect_error', '5H269/M', 500, 'connect_gw_error_7' );
|
||||
break;
|
||||
|
||||
// The chat room is on a server which is no longer online
|
||||
// The chat room has no hostname associated with the server it is on; this would be a misconfiguration issue on the chat master server
|
||||
case 8:
|
||||
\IPS\Output::i()->error( 'generic_chatconnect_error', '5H268/4', 500, 'connect_gw_error_8' );
|
||||
break;
|
||||
@@ -218,7 +222,7 @@ class _view extends \IPS\Content\Controller
|
||||
}
|
||||
catch ( \IPS\Http\Request\Exception $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'generic_chatconnect_error', '4H268/2', 500, 'connect_gw_error_0' );
|
||||
\IPS\Output::i()->error( 'generic_chatconnect_error', '4H269/N', 500, 'connect_gw_error_0' );
|
||||
}
|
||||
$results = explode( ',', $result );
|
||||
|
||||
@@ -309,7 +313,7 @@ class _view extends \IPS\Content\Controller
|
||||
'username' => htmlspecialchars( $this->uncleanUsername( $username ), ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE ),
|
||||
'formattedUsername' => \IPS\Member\Group::load( $member->member_group_id )->formatName( $member->name ),
|
||||
'forumUserID' => $member->member_id,
|
||||
'canBeIgnored' => $member->member_id ? !$member->group['gbw_cannot_be_ignored'] : 1,
|
||||
'canBeIgnored' => !$member->canBeIgnored(),
|
||||
'canBypassBadwords' => $member->group['g_bypass_badwords'],
|
||||
'groupID' => $member->member_group_id,
|
||||
'prefix' => str_replace( '"', '__DBQ__', $member->group['prefix'] ),
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -63,7 +64,7 @@ class _Upgrade
|
||||
) );
|
||||
|
||||
/* Remove old settings */
|
||||
\IPS\Db::i()->delete( 'core_sys_conf_settings', "conf_key IN ('ipschat_group_access', 'ipschat_mods', 'ipschat_private', 'ipschat_online',
|
||||
\IPS\Db::i()->delete( 'core_sys_conf_settings', "conf_key IN ('ipschat_group_access', 'ipschat_mods', 'ipschat_private',
|
||||
'ipschat_account_key', 'ipchat_htc_zero', 'ipchat_max_messages', 'ipschat_offline_msg', 'ipschat_offline_groups', 'ipschat_hide_chatting',
|
||||
'ipschat_whos_chatting', 'ipchat_htc_view', 'ipschat_format_names', 'ipschat_online_start', 'ipschat_online_end', 'ipschat_rules')" );
|
||||
return TRUE;
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "createTable",
|
||||
"params": [
|
||||
{
|
||||
"name": "chat_log_archive",
|
||||
"columns": {
|
||||
"log_id": {
|
||||
"allow_null": false,
|
||||
"auto_increment": true,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 10,
|
||||
"name": "log_id",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"log_room_id": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 10,
|
||||
"name": "log_room_id",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"log_time": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 10,
|
||||
"name": "log_time",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"log_code": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 6,
|
||||
"name": "log_code",
|
||||
"type": "SMALLINT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"log_user": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 255,
|
||||
"name": "log_user",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"log_message": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": null,
|
||||
"name": "log_message",
|
||||
"type": "TEXT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"log_extra": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 255,
|
||||
"name": "log_extra",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"PRIMARY": {
|
||||
"type": "primary",
|
||||
"name": "PRIMARY",
|
||||
"columns": [
|
||||
"log_id"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
$SQL = array();
|
||||
|
||||
$SQL[] = "CREATE TABLE chat_log_archive (
|
||||
log_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
log_room_id INT NOT NULL DEFAULT '0',
|
||||
log_time INT NOT NULL DEFAULT '0',
|
||||
log_code SMALLINT NOT NULL DEFAULT '0',
|
||||
log_user VARCHAR( 255 ) NULL DEFAULT NULL ,
|
||||
log_message TEXT NULL DEFAULT NULL ,
|
||||
log_extra VARCHAR( 255 ) NULL DEFAULT NULL
|
||||
) ENGINE = MYISAM;";
|
||||
@@ -1,38 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\chat\setup\upg_11005;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4.0.0 Upgrade Code
|
||||
*/
|
||||
class _Upgrade
|
||||
{
|
||||
/**
|
||||
* Conversion from 3.0
|
||||
*
|
||||
* @return array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
|
||||
*/
|
||||
public function step1()
|
||||
{
|
||||
\IPS\core\Setup\Upgrade::runLegacySql( 'chat', 11005 );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
Whitespace-only changes.
@@ -1,38 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\chat\setup\upg_13000;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4.0.0 Upgrade Code
|
||||
*/
|
||||
class _Upgrade
|
||||
{
|
||||
/**
|
||||
* Conversion from 3.0
|
||||
*
|
||||
* @return array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
|
||||
*/
|
||||
public function step1()
|
||||
{
|
||||
// Ignored users conversion
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.0.0 Upgrade Code
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 16 June 2016
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\chat\setup\upg_40000;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4.0.0 RC 5 Upgrade Code
|
||||
*/
|
||||
class _Upgrade
|
||||
{
|
||||
/**
|
||||
* Step 1
|
||||
* Fix anything missing
|
||||
*
|
||||
* @note We had an old chat services application with directory 'chat', then we released IP.Chat with directory 'ipchat'.
|
||||
* Sometimes clients are upgrading from the old old 'chat' application but that means they're missing all tables/columns from ipchat.
|
||||
* Here, we'll just automatically recover.
|
||||
* @return array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
|
||||
*/
|
||||
public function step1()
|
||||
{
|
||||
if( !\IPS\Db::i()->checkForTable( 'chat_log_archive' ) )
|
||||
{
|
||||
\IPS\Application::load('chat')->installDatabaseSchema();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom title for this step
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function step1CustomTitle()
|
||||
{
|
||||
return "Checking and fixing Chat database structure";
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief chatlogprune Task
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage chat
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -39,7 +39,7 @@ class _chatlogprune extends \IPS\Task
|
||||
{
|
||||
if( \IPS\Settings::i()->ipchat_log_prune )
|
||||
{
|
||||
\IPS\DB::i()->delete( 'chat_log_archive', array( 'log_time < ?', \IPS\DateTime::create()->sub( new \DateInterval( 'P' . \IPS\Settings::i()->ipchat_log_prune . 'D' ) )->getTimestamp() ) );
|
||||
\IPS\Db::i()->delete( 'chat_log_archive', array( 'log_time < ?', \IPS\DateTime::create()->sub( new \DateInterval( 'P' . \IPS\Settings::i()->ipchat_log_prune . 'D' ) )->getTimestamp() ) );
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief chatlogrefresh Task
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage chat
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -37,6 +37,11 @@ class _chatlogrefresh extends \IPS\Task
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
if ( !\IPS\Application::appIsEnabled( 'chat' ) )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ( !\IPS\Settings::i()->ipb_reg_number )
|
||||
{
|
||||
throw new \IPS\Task\Exception( $this, 'ipschat_no_license_admin' );
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief chatwhoschatting Widget
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage chat
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Chat
|
||||
* @since 15 Mar 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user