<[ // SDCHAT.AP Main Chat Active Page // (c) 1998 by SmartDesk, Inc., All Rights Reserved FUNCTION chatUserCount( session, channel ) local chanstr, s, cnt chanstr = "__chat_" + channel session.data( chanstr, time( ) ) s = sessionFindFirst( session.websrvr ) cnt = 0 while ( s ) if ( ! sessionDataExpired( session.websrvr, sessionId( s ), chanstr, 5 ) ) cnt++ end s = sessionFindNext( s ) end return( cnt ) END CLASS Chat PUBLIC: local session, basedir, id, channel, desc, status, maxUsers METHOD new( session, basedir ) ::session = session ::basedir = basedir ::id = "" ::channel = 1 return( 1 ) END METHOD displayChannel( channel, user ) local str, data, cnt, len, numusers, j, i, line, from, msg, filename, _id ::channel = channel < 1 ? 1 : channel filename = ::basedir + "\\chan" + channel + ".dat" data = sessionDataGet( ::session.websrvr, -1, "CHATBUF." + filename ) cnt = chrcount( chr( 2 ), data ) len = int( len( data ) / 1024 ) + 1 numusers = chatUserCount( ::session, channel ) str = "\r\n" str += "\r\n" str += "

" + cdow( jdate( ) ) + ", " + date( "MMMM DDDD, YYYY" ) + " at " + timetostr( time( ), 0 ) + "m, " + cnt + " total records ( " + len + "k), " + numusers + " active user(s)

\r\n" str += "\r\n" j=0 for ( i=cnt; i>0 && j" str += "" + from + "" str += "\r\n" elseif ( from == "ADMIN" ) str += "" str += "\r\n" else str += "" str += "\r\n" end str += "\r\n" end str += "
" str += "" + msg + "
" str += "" + from + "" str += "" + msg + "
" str += "" + from + "" str += "" + msg + "
\r\n" return( str ) END METHOD calcId( userid, pass ) local str, x, i, y str = upper( userid + pass ) i=1 x=1 for ( i=2; i<=len(str); i++ ) y = asc( str[i] ) if ( y > 0 ) x *= y end end str = dec2hex( x ) if ( len( str ) > 8 ) str = right( str, 8 ) end return( str ) END METHOD LogonValidate( ) local id, password id = ::session.var( "userid" ) password = ::session.var( "pass" ) if ( strempty( id ) || strempty( password ) ) return( 0 ) end ::id = ::calcId( id, password ) return( 1 ) END METHOD LogonScreen( channel, alias ) local str str = "


\r\n" str += "
U S E R     L O G O N
 
\r\n" str += "
\r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += "
\r\n" str += " Welcome to the web-based chat area. Please enter your user-id and password to access the chat rooms. If you are a new user, please select a unique user-id and password of at least 6 characters each.\r\n" str += "
 
\r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += "

User-Id:

Password:

 
\r\n" str += "
\r\n" str += "
\r\n" str += "


\r\n" str += "


\r\n" str += "


\r\n" return( str ) END END CLASS ChatUser PUBLIC: local session, basedir, id, userid, password, name, alias, email, pglen, refreshRate local picture, utype, lastused METHOD new( session, basedir ) ::session = session ::basedir = basedir ::utype = "" ::picture = "" return( 1 ) end METHOD load( id, newflag ) local data ::id = id if ( type( newflag ) != "N" ) newflag = 0 end if ( ! fileExists( ::file ) ) if ( ! newflag ) return( 0 ) end data = ::session.var( "userid" ) + "|" + ::session.var( "pass" ) + "||||25|20|||" + date( "YYYY-MM-DD " ) + time( ) + "|" else data = fileReadASCII( ::file ) end ::userid = strextract( data, "|", 1 ) ::password = strextract( data, "|", 2 ) ::name = strextract( data, "|", 3 ) ::alias = strextract( data, "|", 4 ) ::email = strextract( data, "|", 5 ) ::pglen = 0 + strextract( data, "|", 6 ) ::refreshRate = 0 + strextract( data, "|", 7 ) ::picture = strextract( data, "|", 8 ) ::utype = 0 + strextract( data, "|", 9 ) ::lastused = strextract( data, "|", 10 ) return( 1 ) END METHOD save( ) local hfile, str hfile = fcreate( ::file, 0 ) if ( hfile < 1 ) return( 0 ) end ::lastused = date( "YYYY-MM-DD " ) + time( ) str = ::userid + "|" + ::password + "|" + ::name + "|" + ::alias + "|" + ::email + "|" + ::pglen + "|" + ::refreshRate + "|" str += ::picture + "|" + ::utype + "|" + ::lastused fwriteline( hfile, str ) fclose( hfile ) return( 1 ) END ACCESS file return( ::basedir + "\\users\\" + ::id + ".dat" ) END METHOD profile( channel, alias ) local str str = "U S E R     P R E F E R E N C E S
\r\n" str += "
\r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" // str += " " str += " \r\n" str += " \r\n" str += " \r\n" // str += " " // str += " " str += "
User-Id:
Password:
 
Full Name:
Chat Alias:
Email Address:
Picture:
 
Display Page Length:
Refresh Rate:
 
Last Used: " + ::lastused + "
\r\n" str += "
\r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += " \r\n" str += "
\r\n" str += "This information will automatically be maintained
for up to thirty days of inactivity.
\r\n" return( str ) END METHOD doupdate( var, defval ) local v v = ::session.var( var ) return( strempty( v ) ? defval : v ) END METHOD UpdateId( ) local str, x, i, y str = upper( ::userid + ::password ) i=1 x=1 for ( i=2; i<=len(str); i++ ) y = asc( str[i] ) if ( y > 0 ) x *= y end end str = dec2hex( x ) if ( len( str ) > 8 ) str = right( str, 8 ) end ::id = str return( ::id ) END METHOD SessionUpdate( ) local str ::userid = ::doupdate( "userid", ::userid ) ::password = ::doupdate( "pass", ::password ) ::name = ::doupdate( "name", ::name ) ::alias = ::doupdate( "alias", ::alias ) ::email = ::doupdate( "email", ::email ) ::picture = ::doupdate( "picture", ::picture ) ::pglen = 0 + ::doupdate( "pglen", ::pglen ) ::refreshRate = 0 + ::doupdate( "refreshRate", ::refreshRate ) ::id = ::updateId( ) str = ::validate( ) if ( ! strempty( str ) ) return( str ) end ::pglen = ::pglen < 5 ? 5 : ::pglen ::refreshRate = ::refreshRate < 5 ? 5 : ::refreshRate ::save( ) return( "" ) END METHOD validate( ) local str str = "" if ( strempty( ::userid ) ) str += "Must specify a User-id
" end if ( strempty( ::password ) ) str += "Must specify a Password
" end if ( strempty( ::name ) ) str += "Must specify a Name
" end if ( strempty( ::alias ) ) str += "Must specify an Alias
" end if ( strempty( ::email ) ) str += "Must specify an Email Address
" end if ( ! strempty( str ) ) return( "

" + str + "

Press the BACK button to return to the form..." ) end return( "" ) END END _apGenerate( ) session = new( "session", param( 1 ), param( 2 ) ) chat = new( "Chat", session, webServerHome( session.websrvr ) + "\\chat" ) user = new( "ChatUser", session, chat.basedir ) cmd = session.var( "cmd" ) if ( strempty( cmd ) ) cmd = "LOGON" end id = session.var( "id" ) channel = 0 + session.var( "channel" ) if ( channel < 1 ) channel = 1 end alias = session.var( "alias" ) if ( upper( cmd ) == "CHATTEXT" ) user.load( id ) ! chat.displayChannel( channel, user ) return( 1 ) end ]> SmartDesk Web Chat


<[ switch( upper( cmd ) ) case "LOGON" ! chat.LogonScreen( channel, alias ) break case "LOGONATTEMPT" if ( ! chat.LogonValidate( ) ) session._redir( "

Invalid Logon Attempt

One moment please...", "sdchat.html", 2 ) return( 0 ) end id = chat.id if ( user.load( id ) ) qstr = "?id=" + webEncodeUrl( user.id ) + "&channel=" + channel + "&alias=" + webEncodeUrl( user.alias ) session._redir( "

Welcome back, " + user.name + "

One moment please...", "chat.htm" + qstr, 2 ) return( 1 ) else ! "






" ! "


Do you want to create a new user profile?

" ! "Yes | " ! "No






" end break case "NEWUSER" chat.LogonValidate( ) user.load( chat.id, 1 ) ! user.profile( channel, alias ) break case "UPDATEUSER" qstr = "?cmd=ChatText&channel=" + channel + "&alias=" + webEncodeUrl( alias ) + "&id=" if ( session.var( "action" ) == "Do Not Update" ) session.redir( "chat.htm" + qstr + id ) break end str = user.sessionUpdate( ) if ( strempty( str ) ) session.redir( "chat.htm" + qstr + user.id ) end ! str break case "PREFERENCES" user.load( id, 1 ) ! user.profile( channel, alias ) break end ]>



(c) 1997-98 SmartDesk, Inc., All Rights reserved.