[
// 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 += ""
str += "" + msg + "
| \r\n"
elseif ( from == "ADMIN" )
str += ""
str += "" + from + " | "
str += ""
str += "" + msg + "
|
\r\n"
else
str += ""
str += "" + from + " | "
str += ""
str += "" + msg + "
|
\r\n"
end
str += "\r\n"
end
str += "
\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"
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 += "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 AttemptOne 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.
|
|