231 lines
7.8 KiB
PHP
231 lines
7.8 KiB
PHP
<?php
|
|
/*
|
|
* @package AJAX_Chat
|
|
* @author Sebastian Tschan
|
|
* @copyright (c) Sebastian Tschan
|
|
* @license GNU Affero General Public License
|
|
* @link https://blueimp.net/ajax/
|
|
*/
|
|
|
|
class CustomAJAXChat extends AJAXChat {
|
|
|
|
// Returns an associative array containing userName, userID and userRole
|
|
// Returns null if login is invalid
|
|
function getValidLoginUserData() {
|
|
if(empty($_COOKIE['msz_auth'])) {
|
|
header('Location: ' . $this->getConfig('flashiiAuth', 'login'));
|
|
exit;
|
|
}
|
|
|
|
$userInfo = SockChatAuth::attempt(
|
|
$this->getConfig('flashiiAuth', 'verify'),
|
|
$this->getConfig('flashiiSecret'),
|
|
(string)filter_input(INPUT_COOKIE, 'msz_auth')
|
|
);
|
|
|
|
if($userInfo->success) {
|
|
// Check if we have a valid registered user:
|
|
|
|
$chatUser = [
|
|
'userID' => $userInfo->user_id,
|
|
'userName' => $userInfo->username,
|
|
'userRole' => AJAX_CHAT_GUEST,
|
|
];
|
|
|
|
// sock chat auth doesn't actually return role ids lol
|
|
if($userInfo->colour_raw === 0xEE9400)
|
|
$chatUser['userRole'] = DONATOR;
|
|
elseif($userInfo->colour_raw === 0x0099FF)
|
|
$chatUser['userRole'] = CMOD;
|
|
elseif($userInfo->colour_raw === 0x7353C4)
|
|
$chatUser['userRole'] = PURPLE;
|
|
elseif($userInfo->colour_raw === 0x9E8DA7)
|
|
$chatUser['userRole'] = BOTS;
|
|
elseif($userInfo->rank >= 10)
|
|
$chatUser['userRole'] = AJAX_CHAT_ADMIN;
|
|
elseif($userInfo->rank >= 5)
|
|
$chatUser['userRole'] = AJAX_CHAT_MODERATOR;
|
|
elseif($userInfo->rank >= 1)
|
|
$chatUser['userRole'] = AJAX_CHAT_USER;
|
|
|
|
return $chatUser;
|
|
} else {
|
|
// Guest users:
|
|
return $this->getGuestUser();
|
|
}
|
|
}
|
|
|
|
// Store the channels the current user has access to
|
|
// Make sure channel names don't contain any whitespace
|
|
function &getChannels() {
|
|
if($this->_channels === null) {
|
|
$this->_channels = array();
|
|
|
|
/*$customUsers = $this->getCustomUsers();
|
|
|
|
// Get the channels, the user has access to:
|
|
if($this->getUserRole() == AJAX_CHAT_GUEST) {
|
|
$validChannels = $customUsers[0]['channels'];
|
|
} else {
|
|
$validChannels = $customUsers[$this->getUserID()]['channels'];
|
|
}*/
|
|
|
|
// Add the valid channels to the channel list (the defaultChannelID is always valid):
|
|
foreach($this->getAllChannels() as $key=>$value) {
|
|
// Check if we have to limit the available channels:
|
|
if($this->getConfig('limitChannelList') && !in_array($value, $this->getConfig('limitChannelList'))) {
|
|
continue;
|
|
}
|
|
|
|
//if(in_array($value, $validChannels) || $value == $this->getConfig('defaultChannelID')) {
|
|
$this->_channels[$key] = $value;
|
|
//}
|
|
}
|
|
}
|
|
return $this->_channels;
|
|
}
|
|
|
|
// Store all existing channels
|
|
// Make sure channel names don't contain any whitespace
|
|
function &getAllChannels() {
|
|
if($this->_allChannels === null) {
|
|
// Get all existing channels:
|
|
$customChannels = $this->getCustomChannels();
|
|
|
|
$defaultChannelFound = false;
|
|
|
|
foreach($customChannels as $key=>$value) {
|
|
$forumName = $this->trimChannelName($value);
|
|
|
|
$this->_allChannels[$forumName] = $key;
|
|
|
|
if($key == $this->getConfig('defaultChannelID')) {
|
|
$defaultChannelFound = true;
|
|
}
|
|
}
|
|
|
|
if(!$defaultChannelFound) {
|
|
// Add the default channel as first array element to the channel list:
|
|
$this->_allChannels = array_merge(
|
|
array(
|
|
$this->trimChannelName($this->getConfig('defaultChannelName'))=>$this->getConfig('defaultChannelID')
|
|
),
|
|
$this->_allChannels
|
|
);
|
|
}
|
|
}
|
|
return $this->_allChannels;
|
|
}
|
|
|
|
/*function &getCustomUsers() {
|
|
global $database;
|
|
|
|
$userlist = $database->query("SELECT * FROM `accounts`.`flashii_users` WHERE `userrole` != '0'")->fetch_all(MYSQLI_ASSOC);
|
|
|
|
$users = array();
|
|
|
|
$users[0] = array();
|
|
$users[0]['userRole'] = AJAX_CHAT_GUEST;
|
|
$users[0]['userName'] = null;
|
|
$users[0]['password'] = null;
|
|
$users[0]['channels'] = array(0,1);
|
|
|
|
foreach($userlist as $user) {
|
|
$users[$user['id']] = array();
|
|
$users[$user['id']]['userName'] = $user['username'];
|
|
$users[$user['id']]['password'] = $user['password'];
|
|
|
|
switch($user['userrole']) {
|
|
// Tenshi
|
|
case 7:
|
|
$users[$user['id']]['userRole'] = DONATOR;
|
|
$users[$user['id']]['channels'] = array(0, 1);
|
|
break;
|
|
|
|
// Chat Moderators
|
|
case 6:
|
|
$users[$user['id']]['userRole'] = CMOD;
|
|
$users[$user['id']]['channels'] = array(0, 1, 2);
|
|
break;
|
|
|
|
// Bots
|
|
case 5:
|
|
$users[$user['id']]['userRole'] = BOTS;
|
|
$users[$user['id']]['channels'] = array(0, 1, 2);
|
|
break;
|
|
|
|
// Developers
|
|
case 4:
|
|
$users[$user['id']]['userRole'] = PURPLE;
|
|
$users[$user['id']]['channels'] = array(0, 1, 2);
|
|
break;
|
|
|
|
// Administrator
|
|
case 3:
|
|
$users[$user['id']]['userRole'] = AJAX_CHAT_ADMIN;
|
|
$users[$user['id']]['channels'] = array(0, 1, 2);
|
|
break;
|
|
|
|
// Site Moderators
|
|
case 2:
|
|
$users[$user['id']]['userRole'] = AJAX_CHAT_MODERATOR;
|
|
$users[$user['id']]['channels'] = array(0, 1, 2);
|
|
break;
|
|
|
|
// Regular Users
|
|
case 1:
|
|
$users[$user['id']]['userRole'] = AJAX_CHAT_USER;
|
|
$users[$user['id']]['channels'] = array(0, 1);
|
|
break;
|
|
|
|
// Unknown and Deactivated Users
|
|
case 0:
|
|
default:
|
|
$users[$user['id']]['userRole'] = AJAX_CHAT_GUEST;
|
|
$users[$user['id']]['channels'] = array(0);
|
|
}
|
|
}
|
|
|
|
return $users;
|
|
}*/
|
|
|
|
function &getCustomChannels() {
|
|
$channels = [
|
|
0 => 'Public',
|
|
];
|
|
/*$result = $this->db->sqlQuery("SELECT * FROM ajax_chat_channels")->_result->fetch_all(MYSQLI_ASSOC);
|
|
|
|
foreach($result as $channel) {
|
|
$channels[$channel['id']] = $channel['name'];
|
|
}*/
|
|
|
|
if($this->isLoggedIn())
|
|
$channels[9001] = 'Secret';
|
|
|
|
return $channels;
|
|
}
|
|
|
|
function parseCustomCommands($text, $textParts) {
|
|
switch($textParts[0]) {
|
|
case '/afk':
|
|
$this->setUserName('<AFK>_' . $this->getUserName());
|
|
$this->updateOnlineList();
|
|
$this->addInfoMessage($this->getUserName(), 'userName');
|
|
$this->setSessionVar('AwayFromKeyboard', true);
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function onNewMessage($text) {
|
|
if($this->getSessionVar('AwayFromKeyboard')) {
|
|
$this->setUserName(substr($this->getUserName(), 6));
|
|
$this->updateOnlineList();
|
|
$this->addInfoMessage($this->getUserName(), 'userName');
|
|
$this->setSessionVar('AwayFromKeyboard', false);
|
|
}
|
|
return true;
|
|
}
|
|
}
|