home *** CD-ROM | disk | FTP | other *** search
Wrap
<[ // SDCHAT.AP Main Chat Active Page // (c) 1998 by SmartDesk, Inc., All Rights Reserved FUNCTION chatUserCount( session, channel ) local data, cnt, filename, basedir, i, line, id, j, k basedir = webServerHome( session.websrvr ) + "\\chat" filename = basedir + "\\chan" + channel + ".dat" data = sessionDataGet( session.websrvr, -1, "CHATBUF." + filename ) cnt = chrcount( chr( 2 ), data ) j=0 users[1] = "" for ( i=1; i<=cnt; i++ ) line = strextract( data, chr( 2 ), i ) id = strextract( line, chr( 1 ), 5 ) for ( k=1; k<=j; k++ ) if ( users[k] == id ) break end end if ( k > j ) j++ users[j] = id end end return( j ) 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 = "<HTML><HEAD><META HTTP-EQUIV=\"REFRESH\" CONTENT=\"" + user.refreshRate + "\" ></HEAD>\r\n" str += "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\" LINK=\"#0000FF\" VLINK=\"#0000FF\" ALINK=\"#0000AA\">\r\n" str += "<P><FONT SIZE=2><B> " + cdow( jdate( ) ) + ", " + date( "MMMM DDDD, YYYY" ) + " at " + timetostr( time( ), 0 ) + "m, " + cnt + " total records ( " + len + "k), " + numusers + " active user(s)</B></FONT></P>\r\n" str += "<TABLE BORDER=0 WIDTH=600>\r\n" j=0 for ( i=cnt; i>0 && j<user.pglen; i--, j++ ) line = strextract( data, chr( 2 ), i ) from = strextract( line, chr( 1 ), 3 ) msg = strextract( line, chr( 1 ), 4 ) _id = strextract( line, chr( 1 ), 5 ) if ( _id == user.id ) str += "<TR><TD WIDTH=100 ALIGN=\"center\" BGCOLOR=\"#FF0000\">" str += "<FONT SIZE=2 COLOR=\"#FFFFFF\"><B>" + from + "</B></FONT></TD>" str += "<TD WIDTH=500 VALIGN=\"top\">" str += "<FONT COLOR=\"#FF0000\">" + msg + "</FONT><BR></TD></TR>\r\n" elseif ( from == "ADMIN" ) str += "<TR><TD WIDTH=100 ALIGN=\"center\" BGCOLOR=\"#00FF00\">" str += "<FONT SIZE=2 COLOR=\"#000000\"><B>" + from + "</B></FONT></TD>" str += "<TD WIDTH=500 VALIGN=\"top\">" str += "<FONT COLOR=\"#000000\"><I>" + msg + "</I></FONT><BR></TD></TR>\r\n" else str += "<TR><TD WIDTH=100 ALIGN=\"center\" BGCOLOR=\"#000000\">" str += "<FONT SIZE=2 COLOR=\"#FFFFFF\"><B>" + from + "</B></FONT></TD>" str += "<TD WIDTH=500 VALIGN=\"top\">" str += "<FONT COLOR=\"#000000\">" + msg + "</FONT><BR></TD></TR>\r\n" end str += "\r\n" end str += "</TABLE></BODY></HTML>\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 = "<p><br></p>\r\n" str += "<center><font size=5>U S E R L O G O N</font><br> <br>\r\n" str += "<form action=sdchat.htm method=get>\r\n" str += " <input type=hidden name=cmd value=LogonAttempt>\r\n" str += " <input type=hidden name=channel value=\"" + channel + "\">\r\n" str += " <INPUT TYPE=hidden NAME=alias VALUE=\"" + alias + "\">\r\n" str += " <table border=0 width=450 colspacing=0 cellspacing=0>\r\n" str += " <tr><td>\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 += " </td></tr>\r\n" str += " <tr><td> </td></tr>\r\n" str += " <tr><td align=center>\r\n" str += " <table border=0 colspacing=0 cellspacing=0><tr>\r\n" str += " <td><font size=2><br>User-Id:<br></font><input type=text name=\"userid\"></td>\r\n" str += " <td><font size=2><br>Password:<br></font><input type=password name=\"pass\"></td>\r\n" str += " <td><font size=2><br> <br></font><input type=submit value=\"Enter\"></td>\r\n" str += " </tr></table>\r\n" str += " </td></tr></table>\r\n" str += "</form></center>\r\n" str += "<p><br></p>\r\n" str += "<p><br></p>\r\n" str += "<p><br></p>\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 = "<font size=5>U S E R P R E F E R E N C E S</font><br>\r\n" str += "<form action=sdchat.htm method=get>\r\n" str += " <table border=0 width=450 colspacing=0 cellspacing=0>\r\n" str += " <tr><td width=40% align=right>User-Id: </td><td width=60%><input type=text name=userid value=" + ::userid + "></td></tr>\r\n" str += " <tr><td></td></tr>\r\n" str += " <tr><td align=right>Password: </td><td><input type=text name=pass value=" + ::password + "></td></tr>\r\n" str += " <tr><td> </td></tr>\r\n" str += " <tr><td align=right>Full Name: </td><td><input type=text name=name value=" + ::name + "></td></tr>\r\n" str += " <tr><td align=right>Chat Alias: </td><td><input type=text name=alias value=" + ::alias + "></td></tr>\r\n" str += " <tr><td align=right>Email Address: </td><td><input type=text name=email value=" + ::email + "></td></tr>\r\n" // str += " <tr><td align=right>Picture: </td><td><input type=text name=picture value=" + ::picture + "></td></tr>" str += " <tr><td> </td></tr>\r\n" str += " <tr><td align=right>Display Page Length: </td><td><input type=text name=pglen size=10 value=" + ::pgLen + "></td></tr>\r\n" str += " <tr><td align=right>Refresh Rate: </td><td><input type=text name=refreshrate size=10 value=" + ::refreshRate + "></td></tr>\r\n" // str += " <tr><td> </td></tr>" // str += " <tr><td align=right>Last Used: </td><td>" + ::lastused + "</td></tr>" str += " </table>\r\n" str += " <br><input type=submit name=action value=\"Update User Information\">\r\n" str += " <input type=submit name=action value=\"Do Not Update\">\r\n" str += " <input type=hidden name=cmd value=\"UpdateUser\">\r\n" str += " <input type=hidden name=id value=\"" + ::id + "\">\r\n" str += " <input type=hidden name=channel value=\"" + channel + "\">\r\n" str += " <INPUT TYPE=hidden NAME=alias VALUE=\"" + alias + "\">\r\n" str += "</form>\r\n" str += "<font size=2>This information will automatically be maintained<br>for up to thirty days of inactivity.<br></font>\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<br>" end if ( strempty( ::password ) ) str += "Must specify a Password<br>" end if ( strempty( ::name ) ) str += "Must specify a Name<br>" end if ( strempty( ::alias ) ) str += "Must specify an Alias<br>" end if ( strempty( ::email ) ) str += "Must specify an Email Address<br>" end if ( ! strempty( str ) ) return( "<h2>" + str + "</h2>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 ]> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <!-- SmartDesk Active Page, www.smartdesk.com --> <HTML> <HEAD> <TITLE>SmartDesk Web Chat</TITLE> </HEAD> <BODY alink=000000 vlink=000000 link=000000 text=000000 bgcolor=ffffff> <!-- HEADER INSERTION --> <center> <img src=chatnav.jpg width=620 height=70><br> <table border=0 width=600> <tr><td align=center> <p><br></p> <!-- --> <[ switch( upper( cmd ) ) case "LOGON" ! chat.LogonScreen( channel, alias ) break case "LOGONATTEMPT" if ( ! chat.LogonValidate( ) ) session._redir( "<H1>Invalid Logon Attempt</H1>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( "<h2>Welcome back, " + user.name + "</h2>One moment please...", "chat.htm" + qstr, 2 ) return( 1 ) else ! "<p><br></p><p><br></p><p><br></p><p><br></p><p><br></p>" ! "<p><br></p><center><p><H3>Do you want to create a new user profile?</p>" ! "<a href=\"sdchat.htm?cmd=NewUser&userid=" + webEncodeUrl( session.var( "userid" ) ) + "&pass=" + session.var( "pass" ) + "\">Yes</a> | " ! "<a href=\"sdchat.htm\">No</a></H3></center><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p>" 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 ]> <!-- FOOTER INSERTION --> <p><br></p> <hr width=500> <font size=2>(c) 1997-98 <a href="http://www.smartdesk.com">SmartDesk, Inc.</a>, All Rights reserved.</font> <tr><td> </table> </center> <!-- --> </BODY> </HTML>