From 0092abe9645693eb9d826dfe5051d29484194e7a Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Tue, 12 Apr 2016 20:12:34 +0200 Subject: [PATCH] Add option to let guests register themselves --- CHANGELOG | 1 + chat.php | 72 +++++++++++++++++++++++++++++++++++++++-------------- lang_de.php | 6 ++++- lang_en.php | 6 ++++- 4 files changed, 64 insertions(+), 21 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9e7a4b3..94c6a58 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ Add CSS to limit list of chatters hight Attempt to create database when there is no connection Add fallback option for moderator approval Fix guestaccess selection in setup +Add option to let guests register themselves Version 1.15.3 - Mar. 6, 2016 Allow using html tags in linkfilter without breaking dereferrer or image embed diff --git a/chat.php b/chat.php index ebe6280..065b1d8 100644 --- a/chat.php +++ b/chat.php @@ -167,9 +167,9 @@ if(!isSet($_REQUEST['action'])){ } send_sessions(); }elseif($_REQUEST['do']==='register'){ - register_guest(3); + send_admin(register_guest(3, $_REQUEST['name'])); }elseif($_REQUEST['do']==='superguest'){ - register_guest(2); + send_admin(register_guest(2, $_REQUEST['name'])); }elseif($_REQUEST['do']==='status'){ change_status(); }elseif($_REQUEST['do']==='regnew'){ @@ -209,7 +209,7 @@ if(!isSet($_REQUEST['action'])){ $C['number_settings']=array('memberexpire', 'guestexpire', 'kickpenalty', 'entrywait', 'captchatime', 'messageexpire', 'messagelimit', 'keeplimit', 'maxmessage', 'maxname', 'minpass', 'defaultrefresh', 'numnotes'); $C['textarea_settings']=array('rulestxt', 'css'); $C['text_settings']=array('dateformat', 'captchachars', 'redirect', 'chatname', 'mailsender', 'mailreceiver'); - $C['settings']=array_merge(array('guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic'), $C['bool_settings'], $C['colour_settings'], $C['msg_settings'], $C['number_settings'], $C['textarea_settings'], $C['text_settings']); // All settings in the database + $C['settings']=array_merge(array('guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic', 'guestreg'), $C['bool_settings'], $C['colour_settings'], $C['msg_settings'], $C['number_settings'], $C['textarea_settings'], $C['text_settings']); // All settings in the database if(empty($_REQUEST['do'])){ }elseif($_REQUEST['do']==='save'){ foreach($C['msg_settings'] as $setting){ @@ -464,7 +464,6 @@ function send_captcha(){ function send_setup(){ global $C, $H, $I, $U; - $ga=(int) get_setting('guestaccess'); print_start('setup'); echo "

$I[setup]

<$H[form]>$H[commonform]".hidden('action', 'setup').hidden('do', 'save'); if(!isSet($_REQUEST['session'])){ @@ -472,6 +471,7 @@ function send_setup(){ } echo ''; thr(); + $ga=(int) get_setting('guestaccess'); echo "
'; echo '
$I[guestacc]"; echo '
'; thr(); + $ga=(int) get_setting('guestreg'); + echo "
$I[guestreg]"; + echo '
'; + thr(); echo "
$I[sysmessages]"; echo ''; foreach($C['msg_settings'] as $setting){ @@ -1798,6 +1818,9 @@ function send_login(){ echo ""; send_captcha(); if($ga!==0){ + if(get_setting('guestreg')!=0){ + echo ""; + } if($englobal===2){ echo ""; } @@ -1927,7 +1950,7 @@ function create_session($setup){ } function write_new_session(){ - global $I, $U, $db; + global $I, $P, $U, $db; $lines=parse_sessions(); $sids; $reentry=false; foreach($lines as $temp){ @@ -1968,6 +1991,7 @@ function write_new_session(){ if($U['status']>=3 && !$U['incognito']){ add_system_message(sprintf(get_setting('msgenter'), style_this($U['nickname'], $U['style']))); } + $P[$U['nickname']]=[$U['nickname'], $U['style'], $U['status']]; } } @@ -2023,7 +2047,20 @@ function check_login(){ }elseif(!isSet($_REQUEST['nick']) || !isSet($_REQUEST['pass'])){ send_login(); }else{ + if(!empty($_REQUEST['regpass']) && $_REQUEST['regpass']!==$_REQUEST['pass']){ + send_error($I['noconfirm']); + } create_session(false); + if(!empty($_REQUEST['regpass'])){ + $guestreg=(int) get_setting('guestreg'); + if($guestreg===1){ + register_guest(2, $_REQUEST['nick']); + $U['status']=2; + }elseif($guestreg===2){ + register_guest(3, $_REQUEST['nick']); + $U['status']=3; + } + } } if($U['status']==1){ if($ga===2 || $ga===3){ @@ -2221,27 +2258,24 @@ function read_members(){ } } -function register_guest($status){ +function register_guest($status, $nick){ global $A, $I, $P, $U, $db; - if(empty($_REQUEST['name'])){ - send_admin(); - } - if(!isSet($P[$_REQUEST['name']])){ - send_admin(sprintf($I['cantreg'], $_REQUEST['name'])); + if(!isSet($P[$nick])){ + return sprintf($I['cantreg'], $nick); } read_members(); - if(isSet($A[$_REQUEST['name']])){ - send_admin(sprintf($I['alreadyreged'], $_REQUEST['name'])); + if(isSet($A[$nick])){ + return sprintf($I['alreadyreged'], $nick); } $stmt=$db->prepare('SELECT * FROM ' . PREFIX . 'sessions WHERE nickname=? AND status=1;'); - $stmt->execute(array($_REQUEST['name'])); + $stmt->execute(array($nick)); if($reg=$stmt->fetch(PDO::FETCH_ASSOC)){ $reg['status']=$status; - $P[$_REQUEST['name']][2]=$status; + $P[$nick][2]=$status; $stmt=$db->prepare('UPDATE ' . PREFIX . 'sessions SET status=? WHERE session=?;'); $stmt->execute(array($reg['status'], $reg['session'])); }else{ - send_admin(sprintf($I['cantreg'], $_REQUEST['name'])); + return sprintf($I['cantreg'], $nick); } $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'members (nickname, passhash, status, refresh, bgcolour, boxwidth, boxheight, regedby, timestamps, embed, style) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'); $stmt->execute(array($reg['nickname'], $reg['passhash'], $reg['status'], $reg['refresh'], $reg['bgcolour'], $reg['boxwidth'], $reg['boxheight'], $U['nickname'], $reg['timestamps'], $reg['embed'], $reg['style'])); @@ -2250,7 +2284,7 @@ function register_guest($status){ }else{ add_system_message(sprintf(get_setting('msgsureg'), style_this($reg['nickname'], $reg['style']))); } - send_admin(sprintf($I['successreg'], $reg['nickname'])); + return sprintf($I['successreg'], $reg['nickname']); } function register_new(){ @@ -3118,7 +3152,7 @@ function init_chat(){ $db->exec('CREATE INDEX IF NOT EXISTS lastpost ON ' . PREFIX . 'sessions (lastpost);'); $db->exec('CREATE TABLE IF NOT EXISTS ' . PREFIX . "settings (setting TEXT NOT NULL PRIMARY KEY, value TEXT NOT NULL);"); } - $settings=array(array('guestaccess', '0'), array('globalpass', ''), array('englobalpass', '0'), array('captcha', '0'), array('dateformat', 'm-d H:i:s'), array('rulestxt', ''), array('msgencrypted', '0'), array('dbversion', DBVERSION), array('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;}'), array('memberexpire', '60'), array('guestexpire', '15'), array('kickpenalty', '10'), array('entrywait', '120'), array('messageexpire', '14400'), array('messagelimit', '150'), array('maxmessage', 2000), array('captchatime', '600'), array('colbg', '000000'), array('coltxt', 'FFFFFF'), array('maxname', '20'), array('minpass', '5'), array('defaultrefresh', '20'), array('dismemcaptcha', '0'), array('suguests', '0'), array('imgembed', '1'), array('timestamps', '1'), array('trackip', '0'), array('captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), array('memkick', '1'), array('forceredirect', '0'), array('redirect', ''), array('incognito', '1'), array('enablejs', '0'), array('chatname', 'My Chat'), array('topic', ''), array('msgsendall', $I['sendallmsg']), array('msgsendmem', $I['sendmemmsg']), array('msgsendmod', $I['sendmodmsg']), array('msgsendadm', $I['sendadmmsg']), array('msgsendprv', $I['sendprvmsg']), array('msgenter', $I['entermsg']), array('msgexit', $I['exitmsg']), array('msgmemreg', $I['memregmsg']), array('msgsureg', $I['suregmsg']), array('msgkick', $I['kickmsg']), array('msgmultikick', $I['multikickmsg']), array('msgallkick', $I['allkickmsg']), array('msgclean', $I['cleanmsg']), array('numnotes', '3'), array('keeplimit', '3'), array('mailsender', 'www-data '), array('mailreceiver', 'Webmaster '), array('sendmail', '0'), array('modfallback', '1')); + $settings=array(array('guestaccess', '0'), array('globalpass', ''), array('englobalpass', '0'), array('captcha', '0'), array('dateformat', 'm-d H:i:s'), array('rulestxt', ''), array('msgencrypted', '0'), array('dbversion', DBVERSION), array('css', 'a:visited{color:#B33CB4;} a:active{color:#FF0033;} a:link{color:#0000FF;} input,select,textarea{color:#FFFFFF;background-color:#000000;} a img{width:15%} a:hover img{width:35%} .error{color:#FF0033;} .delbutton{background-color:#660000;} .backbutton{background-color:#004400;} #exitbutton{background-color:#AA0000;}'), array('memberexpire', '60'), array('guestexpire', '15'), array('kickpenalty', '10'), array('entrywait', '120'), array('messageexpire', '14400'), array('messagelimit', '150'), array('maxmessage', 2000), array('captchatime', '600'), array('colbg', '000000'), array('coltxt', 'FFFFFF'), array('maxname', '20'), array('minpass', '5'), array('defaultrefresh', '20'), array('dismemcaptcha', '0'), array('suguests', '0'), array('imgembed', '1'), array('timestamps', '1'), array('trackip', '0'), array('captchachars', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), array('memkick', '1'), array('forceredirect', '0'), array('redirect', ''), array('incognito', '1'), array('enablejs', '0'), array('chatname', 'My Chat'), array('topic', ''), array('msgsendall', $I['sendallmsg']), array('msgsendmem', $I['sendmemmsg']), array('msgsendmod', $I['sendmodmsg']), array('msgsendadm', $I['sendadmmsg']), array('msgsendprv', $I['sendprvmsg']), array('msgenter', $I['entermsg']), array('msgexit', $I['exitmsg']), array('msgmemreg', $I['memregmsg']), array('msgsureg', $I['suregmsg']), array('msgkick', $I['kickmsg']), array('msgmultikick', $I['multikickmsg']), array('msgallkick', $I['allkickmsg']), array('msgclean', $I['cleanmsg']), array('numnotes', '3'), array('keeplimit', '3'), array('mailsender', 'www-data '), array('mailreceiver', 'Webmaster '), array('sendmail', '0'), array('modfallback', '1'), array('guestreg', '0')); $stmt=$db->prepare('INSERT INTO ' . PREFIX . 'settings (setting, value) VALUES (?, ?);'); foreach($settings as $pair){ $stmt->execute($pair); @@ -3246,7 +3280,7 @@ function update_db(){ } } if($dbversion<15){ - $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('keeplimit', '3'), ('mailsender', 'www-data '), ('mailreceiver', 'Webmaster '), ('sendmail', '0'), ('modfallback', '1');"); + $db->exec('INSERT INTO ' . PREFIX . "settings (setting, value) VALUES ('keeplimit', '3'), ('mailsender', 'www-data '), ('mailreceiver', 'Webmaster '), ('sendmail', '0'), ('modfallback', '1'), ('guestreg', '0');"); } update_setting('dbversion', DBVERSION); if(get_setting('msgencrypted')!=MSGENCRYPTED){ diff --git a/lang_de.php b/lang_de.php index 20a8d8c..61d882f 100644 --- a/lang_de.php +++ b/lang_de.php @@ -323,6 +323,10 @@ $T=array( 'sendmail' => 'E-Mail bei neuer Nachricht senden', 'mailsender' => 'E-Mail mit dieser Adresse versenden', 'mailreceiver' => 'E-Mail and diese Adresse senden', - 'modfallback' => 'Auf Warteraum rückgreifen, falls kein Moderator anwesend ist, um Gäste hereinzulassen' + 'modfallback' => 'Auf Warteraum rückgreifen, falls kein Moderator anwesend ist, um Gäste hereinzulassen', + 'regpass' => 'Zum registrieren
Passwort wiederholen
(optional)', + 'guestreg' => 'Gäste sich selbst registrieren lassen', + 'asmember' => 'Als Mitglied', + 'assuguest' => 'Als Anwerber' ); ?> diff --git a/lang_en.php b/lang_en.php index 9c6e1d6..754977b 100644 --- a/lang_en.php +++ b/lang_en.php @@ -323,6 +323,10 @@ $I=array( 'sendmail' => 'Send mail on new public message', 'mailsender' => 'Send mail using this address', 'mailreceiver' => 'Send mail to this address', - 'modfallback' => 'Fallback to waiting room, if no moderator is present to approve guests' + 'modfallback' => 'Fallback to waiting room, if no moderator is present to approve guests', + 'regpass' => 'Repeat password
to register
(optional)', + 'guestreg' => 'Let guests register themselves', + 'asmember' => 'As member', + 'assuguest' => 'As applicant' ); ?>
$I[pass]
$I[regpass]
$I[globalloginpass]