home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1999 September
/
CHIPCD_9_99.iso
/
software
/
serwery_www
/
websuite
/
websuite.exe
/
SDCHAT.AP_
/
SDCHAT.AP
Wrap
Text File
|
1999-01-12
|
13KB
|
430 lines
<[
// 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 = "<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>