PHP-Code:
<?php
class BEventHandler {
function BEventHandler() {
}
function onStartSaveUserRegistration() {
}
function onBeforeUserRegistration($row, $rowExtras) {
}
function onAfterUserRegistration($row, $rowExtras, $bool) {
}
function onBeforeUserUpdate($row, $rowExtras) {
}
function onAfterUserUpdate($row, $rowExtras, $bool) {
}
function onAfterLogin($row, $bool) {
}
function onAfterLogout($row, $bool) {
}
}
?>
<?
function s_trim($txt){
$output = trim($txt);
$output = str_replace(array("\n", "\r", "\r\n", "\n\r"), "", $output);
return($output);
}
class BSpinChatAdapter {
const CHAT_HOST = "";
const CHAT_PORT = 8000;
const ADMIN_USERNAME = "";
const ADMIN_PASSWORD = "";
private function __construct() {
}
public static function getInstance() {
static $instance;
if(is_null($instance)) {
$instance = new BSpinChatAdapter();
}
return $instance;
}
private function executeCommand($cmd) {
$fp = fsockopen(self::CHAT_HOST, self::CHAT_PORT, $errno, $errstr, 30);
if (!$fp) {
echo "[BSpinChatAdapter.executeCommand] $errstr ($errno)\n<br />";
} else {
$out = $cmd . "\r\n";
fwrite($fp, $out);
$result = "";
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
}
return($result);
}
public function createUser($username, $password,
$servergroup_id=null, $user_channels=null) {
$cmd = "ASCII\r\nSU_ADMIN \"" . self::ADMIN_USERNAME . "\" " .
self::ADMIN_PASSWORD . "\r\nADMIN_ADD_USER \"" . $username . "\" " .
$password." \r\n";
//Setzt die Server- und Channeleigenschaften, wenn als Parameterübergeben worden:
if($servergroup_id != null){
$cmd .= 'ADMIN_SET_SERVERGROUP "'.s_trim($username).'" ';
$cmd .= intval($servergroup_id);
$cmd .= " \r\n";
}
if(isset($user_channels) and count($user_channels) > 0){
foreach($user_channels as $channel_no => $channel_name){
if($channel_name != '-'){ $channel_name = '"'.$channel_name.'"'; }
if($channel_name != '-' or ($channel_name == '-' and
count($user_channels) == 1)){
$cmd .= 'ADMIN_SET_CHANNELGROUP "'.s_trim($username).'" ';
$cmd .= intval($channel_no);
$cmd .= " ".s_trim($channel_name)." \r\n";
}
}
}
$cmd .= "\r\nQUIT";
$result = $this->executeCommand($cmd);
}
public function deleteUser($username, $password) {
$cmd = "ASCII\r\nSU_ADMIN \"" . self::ADMIN_USERNAME . "\" " .
self::ADMIN_PASSWORD . "\r\nADMIN_SET_PASSWORD \"" . $username . "\" "
. $password . "\r\n";
$cmd .= "USER_DELETE \"" . $username . "\" " . $password . "\r\nQUIT";
$result = $this->executeCommand($cmd);
}
public function getChannels($min_user_number=0){
$cmd = "ASCII\r\nSU_ADMIN \"" . self::ADMIN_USERNAME . "\" " .
self::ADMIN_PASSWORD . "\r\n";
$cmd .= "LIST_CHANNELS " . $min_user_number . " -\r\nQUIT";
$result = $this->executeCommand($cmd);
$arr1 = explode("\n", $result);
$gather = false;
foreach($arr1 as $arr1_part){ $arr1_part = s_trim($arr1_part);
if($arr1_part == '101 LIST_CHANNELS'){ $gather = false; }
if($gather == true){$arrChannels[] = $arr1_part;}
if($arr1_part == '100 LIST_CHANNELS '.$min_user_number.' -'){
$gather = true; }
}
return($arrChannels);
}
public function getUserChannels($username, $channels){
$cmd = "ASCII\r\nSU_ADMIN \"" . self::ADMIN_USERNAME . "\" " .
self::ADMIN_PASSWORD . "\r\n";
$cmd .= "ADMIN_GET_CHANNELGROUP \"".$username."\" -\r\n";
foreach($channels as $channel){
$cmd .= "ADMIN_GET_CHANNELGROUP \"".$username."\" \"".$channel."\"\r\n";
}
$cmd .= "QUIT";
$result = $this->executeCommand($cmd);
$arr1 = explode("\n", $result);
$arr1_i=0;
foreach($arr1 as $arr1_part){
$arr2 = explode(' ', $arr1_part);
if(isset($arr2[4]) and $arr2[4] != -1){
$user_channels[intval(s_trim($arr2[4]))] = s_trim($arr2[3]); }
$arr1_i++;
}
//Anführungszeichen entfernen:
$user_channels = str_replace('"', '', $user_channels);
return($user_channels);
}
public function getUserInfo($username){
$cmd = "ASCII\r\nSU_ADMIN \"" . self::ADMIN_USERNAME . "\" " .
self::ADMIN_PASSWORD . "\r\n";
$cmd .= "ADMIN_GET_SERVERGROUP \"" . $username . "\"\r\n";
$cmd .= "QUIT";
$result = $this->executeCommand($cmd);
//IDs extrahieren und intern speichern -
//String bei Leerzeichen oder Zeilenumbrüchen aufsplitten:
for($i_char=0;$i_char<strlen($result);$i_char++){
if($result[$i_char] == " " or $result[$i_char] == "\n"){
$arr1[] = $char_buffer;
$char_buffer = "";
}else{
$char_buffer .= $result[$i_char];
}
}
$arr1_i=0;
foreach($arr1 as $arr1_part){
if($arr1_part == "GET_SERVERGROUP"){
$servergroupid = intval($arr1[$arr1_i + 2]);
}
$arr1_i++;
}
$arrReturn['SERVERGROUP_ID'] = $servergroupid;
//Anführungszeichen entfernen:
$arrReturn = str_replace('"', '', $arrReturn);
return($arrReturn);
}
public function testServer() {
$cmd = "ASCII\r\nLIST_REG_USERS 0 100\r\nQUIT";
$this->executeCommand($cmd);
}
}
?>
<?php
class BSpinChatEventHandler extends BEventHandler {
const USERNAME_BLACKLIST = "admin bot dermimwolftanzt domi dominik
hugo netzwerk sadmin serveradmin testperson testuser2";
function BSpinChatEventHandler() {
parent::__construct();
}
function onBeforeUserRegistration($row, $rowExtras) {
$usernames = explode(" ", self::USERNAME_BLACKLIST);
if (in_array($row->username, $usernames)) {
global $_PLUGINS;
$_PLUGINS->_setErrorMSG("Dieser Benutzername ist bereits vergeben.");
$_PLUGINS->raiseError(0);
}
}
function onAfterUserRegistration($row, $rowExtras, $bool) {
$username = $row->username;
$db =& JFactory::getDBO();
$sql = "
SELECT u.password
FROM #__users AS u
WHERE u.id = " . $row->id . "
";
$db->setQuery( $sql );
$rows = $db->loadAssocList();
$passwordHash = $rows[0]['password'];
$password = substr($passwordHash, 0, 8);
BSpinChatAdapter::getInstance()->createUser($username, $password);
}
function onBeforeUserUpdate($row, $rowExtras) {
$newUsername = $row->username;
$user =& JFactory::getUser();
$oldUsername = $user->username;
$oldPassword = substr($user->password, 0, 8);
$arrUserInfo = BSpinChatAdapter::getInstance()->getUserInfo($oldUsername);
$arrChannels = BSpinChatAdapter::getInstance()->getChannels();
$arrUserChannels =
BSpinChatAdapter::getInstance()->getUserChannels($oldUsername,
$arrChannels);
$this->_last_servergroup_id = $arrUserInfo['SERVERGROUP_ID'];
$this->_last_user_channels = $arrUserChannels;
BSpinChatAdapter::getInstance()->deleteUser($oldUsername, $oldPassword);
}
function onAfterUserUpdate($row, $rowExtras, $bool) {
$username = $row->username;
$password = substr($row->password, 0, 8);
BSpinChatAdapter::getInstance()->createUser($username, $password,
$this->_last_servergroup_id, $this->_last_user_channels);
//Leeren:
$this->_last_servergroup_id = null;
$this->_last_user_channels = null;
}
}
?>
<?php
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.plugin.plugin');
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
$_PLUGINS->registerFunction('onAfterLogin', 'onAfterLogin', 'plgUserBcommunitybuilderbridge');
$_PLUGINS->registerFunction('onStartSaveUserRegistration', 'onStartSaveUserRegistration', 'plgUserBcommunitybuilderbridge');
$_PLUGINS->registerFunction('onBeforeUserRegistration', 'onBeforeUserRegistration', 'plgUserBcommunitybuilderbridge');
$_PLUGINS->registerFunction('onAfterUserRegistration', 'onAfterUserRegistration', 'plgUserBcommunitybuilderbridge');
$_PLUGINS->registerFunction('onBeforeUserUpdate', 'onBeforeUserUpdate', 'plgUserBcommunitybuilderbridge');
$_PLUGINS->registerFunction('onAfterUserUpdate', 'onAfterUserUpdate', 'plgUserBcommunitybuilderbridge');
$_PLUGINS->registerFunction('onAfterLogin', 'onAfterLogin', 'plgUserBcommunitybuilderbridge');
$_PLUGINS->registerFunction('onAfterLogout', 'onAfterLogout', 'plgUserBcommunitybuilderbridge');
class plgUserBcommunitybuilderbridge extends cbTabHandler {
private $_eventHandler = null;
function plgUserBcommunitybuilderbridge() {
$this->_eventHandler = new BSpinChatEventHandler();
}
function onStartSaveUserRegistration() {
$this->_eventHandler->onStartSaveUserRegistration($row, $rowExtras, $bool);
}
function onBeforeUserRegistration($row, $rowExtras) {
$this->_eventHandler->onBeforeUserRegistration($row, $rowExtras, $bool);
}
function onAfterUserRegistration($row, $rowExtras, $bool) {
$this->_eventHandler->onAfterUserRegistration($row, $rowExtras, $bool);
}
function onBeforeUserUpdate($row, $rowExtras) {
$this->_eventHandler->onBeforeUserUpdate($row, $rowExtras);
}
function onAfterUserUpdate($row, $rowExtras, $bool) {
$this->_eventHandler->onAfterUserUpdate($row, $rowExtras, $bool);
}
function onAfterLogin($row, $bool) {
$this->_eventHandler->onAfterLogin($row, $bool);
}
function onAfterLogout($row, $bool) {
$this->_eventHandler->onAfterLogout($row, $bool);
}
}
?>
wäre echt toll - zeige mich auch gerne erkenntlich - ist mir sehr sehr wichtig
Lesezeichen