home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Compu…g and running Windows 98 / win98pb.iso / netkit / smartdes / websuite.exe / SDCHAT.AP_ / SDCHAT.AP
Encoding:
Text File  |  1998-04-01  |  13.2 KB  |  438 lines

  1. <[
  2. // SDCHAT.AP Main Chat Active Page
  3. // (c) 1998 by SmartDesk, Inc., All Rights Reserved
  4.  
  5. FUNCTION chatUserCount( session, channel )
  6.     local data, cnt, filename, basedir, i, line, id, j, k
  7.     
  8.     basedir = webServerHome( session.websrvr ) + "\\chat"
  9.     filename = basedir + "\\chan" + channel + ".dat"
  10.     data = sessionDataGet( session.websrvr, -1, "CHATBUF." + filename )
  11.     cnt = chrcount( chr( 2 ), data )
  12.     j=0
  13.     users[1] = ""
  14.     for ( i=1; i<=cnt; i++ )
  15.         line = strextract( data, chr( 2 ), i )
  16.         id  = strextract( line, chr( 1 ), 5 )
  17.  
  18.         for ( k=1; k<=j; k++ )
  19.             if ( users[k] == id )
  20.                 break
  21.             end
  22.         end
  23.         if ( k > j )
  24.             j++
  25.             users[j] = id
  26.         end
  27.     end
  28.     
  29.     return( j )    
  30. END
  31.  
  32.  
  33. CLASS Chat
  34.   PUBLIC:
  35.     local session, basedir, id, channel, desc, status, maxUsers
  36.     
  37.     METHOD new( session, basedir )
  38.         ::session = session
  39.         ::basedir = basedir
  40.         ::id = ""
  41.         ::channel = 1
  42.         return( 1 )
  43.     END
  44.  
  45.  
  46.     METHOD displayChannel( channel, user )
  47.         local str, data, cnt, len, numusers, j, i, line, from, msg, filename, _id
  48.  
  49.         ::channel = channel < 1 ? 1 : channel
  50.         filename = ::basedir + "\\chan" + channel + ".dat"
  51.         data = sessionDataGet( ::session.websrvr, -1, "CHATBUF." + filename )
  52.         cnt = chrcount( chr( 2 ), data )
  53.         len = int( len( data ) / 1024 ) + 1
  54.         numusers = chatUserCount( ::session, channel )
  55.         
  56.         str =  "<HTML><HEAD><META HTTP-EQUIV=\"REFRESH\" CONTENT=\"" + user.refreshRate + "\" ></HEAD>\r\n"
  57.         str += "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\" LINK=\"#0000FF\" VLINK=\"#0000FF\" ALINK=\"#0000AA\">\r\n"
  58.         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"
  59.         str += "<TABLE BORDER=0 WIDTH=600>\r\n"
  60.         j=0
  61.  
  62.         for ( i=cnt; i>0 && j<user.pglen; i--, j++ )
  63.             line = strextract( data, chr( 2 ), i )
  64.             from = strextract( line, chr( 1 ), 3 )
  65.             msg  = strextract( line, chr( 1 ), 4 )
  66.             _id  = strextract( line, chr( 1 ), 5 )
  67.  
  68.             if ( _id == user.id )
  69.                 str += "<TR><TD WIDTH=100 ALIGN=\"center\" BGCOLOR=\"#FF0000\">"
  70.                 str += "<FONT SIZE=2 COLOR=\"#FFFFFF\"><B>" + from + "</B></FONT></TD>"
  71.                 str += "<TD WIDTH=500 VALIGN=\"top\">"
  72.                 str += "<FONT COLOR=\"#FF0000\">" + msg + "</FONT><BR></TD></TR>\r\n"
  73.             elseif ( from == "ADMIN" )
  74.                 str += "<TR><TD WIDTH=100 ALIGN=\"center\" BGCOLOR=\"#00FF00\">"
  75.                 str += "<FONT SIZE=2 COLOR=\"#000000\"><B>" + from + "</B></FONT></TD>"
  76.                 str += "<TD WIDTH=500 VALIGN=\"top\">"
  77.                 str += "<FONT COLOR=\"#000000\"><I>" + msg + "</I></FONT><BR></TD></TR>\r\n"
  78.             else
  79.                 str += "<TR><TD WIDTH=100 ALIGN=\"center\" BGCOLOR=\"#000000\">"
  80.                 str += "<FONT SIZE=2 COLOR=\"#FFFFFF\"><B>" + from + "</B></FONT></TD>"
  81.                 str += "<TD WIDTH=500 VALIGN=\"top\">"
  82.                 str += "<FONT COLOR=\"#000000\">" + msg + "</FONT><BR></TD></TR>\r\n"
  83.             end
  84.             str += "\r\n"
  85.         end
  86.  
  87.         str += "</TABLE></BODY></HTML>\r\n"
  88.  
  89.         return( str )
  90.     END
  91.     
  92.     
  93.     METHOD calcId( userid, pass )
  94.         local str, x, i, y
  95.  
  96.         str = upper( userid + pass )
  97.         i=1
  98.         x=1
  99.         for ( i=2; i<=len(str); i++ )
  100.             y = asc( str[i] )
  101.             if ( y > 0 )
  102.                 x *= y
  103.             end
  104.         end
  105.         str = dec2hex( x )
  106.         if ( len( str ) > 8 )
  107.             str = right( str, 8 )
  108.         end
  109.         return( str )
  110.     END
  111.  
  112.  
  113.     METHOD LogonValidate( )
  114.         local id, password
  115.         id = ::session.var( "userid" )
  116.         password = ::session.var( "pass" )
  117.         if ( strempty( id ) || strempty( password ) )
  118.             return( 0 )
  119.         end
  120.         ::id = ::calcId( id, password )
  121.         return( 1 )
  122.     END
  123.     
  124.  
  125.     METHOD LogonScreen( channel, alias )
  126.         local str
  127.         str =  "<p><br></p>\r\n"
  128.           str += "<center><font size=5>U S E R     L O G O N</font><br> <br>\r\n"
  129.            str += "<form action=sdchat.htm method=get>\r\n"
  130.            str += " <input type=hidden name=cmd value=LogonAttempt>\r\n"
  131.            str += " <input type=hidden name=channel value=\"" + channel + "\">\r\n"
  132.         str += " <INPUT TYPE=hidden NAME=alias VALUE=\"" + alias + "\">\r\n"
  133.  
  134.         str += " <table border=0 width=450 colspacing=0 cellspacing=0>\r\n"
  135.         str += "  <tr><td>\r\n"
  136.            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"
  137.           str += "  </td></tr>\r\n"
  138.           str += "  <tr><td> </td></tr>\r\n"
  139.          str += "  <tr><td align=center>\r\n"
  140.            str += "   <table border=0 colspacing=0 cellspacing=0><tr>\r\n"
  141.         str += "    <td><font size=2><br>User-Id:<br></font><input type=text name=\"userid\"></td>\r\n"
  142.         str += "    <td><font size=2><br>Password:<br></font><input type=password name=\"pass\"></td>\r\n"
  143.         str += "    <td><font size=2><br> <br></font><input type=submit value=\"Enter\"></td>\r\n"
  144.            str += "   </tr></table>\r\n"
  145.         str += "  </td></tr></table>\r\n"
  146.         str += "</form></center>\r\n"
  147.         str += "<p><br></p>\r\n"
  148.         str += "<p><br></p>\r\n"
  149.         str += "<p><br></p>\r\n"
  150.         return( str )    
  151.     END
  152.  
  153. END
  154.  
  155.  
  156. CLASS ChatUser
  157.   PUBLIC:
  158.     local session, basedir, id, userid, password, name, alias, email, pglen, refreshRate
  159.     local picture, utype, lastused
  160.     
  161.     METHOD new( session, basedir )
  162.         ::session = session
  163.         ::basedir = basedir
  164.         ::utype = ""
  165.         ::picture = ""
  166.         return( 1 )
  167.     end
  168.         
  169.     
  170.        METHOD load( id, newflag )
  171.            local data
  172.            ::id = id
  173.            if ( type( newflag ) != "N" )
  174.                newflag = 0
  175.            end
  176.            if ( ! fileExists( ::file ) )
  177.                if ( ! newflag ) 
  178.                    return( 0 )
  179.                end
  180.                data = ::session.var( "userid" ) + "|" + ::session.var( "pass" ) + "||||25|20|||" + date( "YYYY-MM-DD " ) + time( ) + "|"
  181.            else
  182.                data = fileReadASCII( ::file )
  183.            end
  184.         ::userid = strextract( data, "|", 1 )
  185.         ::password = strextract( data, "|", 2 )
  186.         ::name = strextract( data, "|", 3 )
  187.         ::alias = strextract( data, "|", 4 )
  188.         ::email = strextract( data, "|", 5 )
  189.            ::pglen = 0 + strextract( data, "|", 6 )
  190.            ::refreshRate = 0 + strextract( data, "|", 7 )
  191.            ::picture = strextract( data, "|", 8 )
  192.            ::utype = 0 + strextract( data, "|", 9 )
  193.            ::lastused = strextract( data, "|", 10 )
  194.            return( 1 )           
  195.        END
  196.  
  197.  
  198.     METHOD save( )
  199.         local hfile, str
  200.  
  201.         hfile = fcreate( ::file, 0 )
  202.         if ( hfile < 1 )
  203.             return( 0 )
  204.         end
  205.         ::lastused = date( "YYYY-MM-DD " ) + time( )
  206.  
  207.         str =  ::userid + "|" + ::password + "|" + ::name + "|" + ::alias + "|" + ::email + "|" + ::pglen + "|" + ::refreshRate + "|"
  208.         str += ::picture + "|" + ::utype + "|" + ::lastused
  209.         fwriteline( hfile, str )
  210.         fclose( hfile )
  211.         
  212.         return( 1 )
  213.     END
  214.  
  215.     
  216.     ACCESS file
  217.         return( ::basedir + "\\users\\" + ::id + ".dat" )
  218.     END
  219.  
  220.  
  221.     METHOD profile( channel, alias )
  222.         local str
  223.  
  224.           str =  "<font size=5>U S E R     P R E F E R E N C E S</font><br>\r\n"
  225.            str += "<form action=sdchat.htm method=get>\r\n"
  226.         str += " <table border=0 width=450 colspacing=0 cellspacing=0>\r\n"
  227.         str += "  <tr><td width=40% align=right>User-Id: </td><td width=60%><input type=text name=userid value=" + ::userid + "></td></tr>\r\n"
  228.         str += "  <tr><td></td></tr>\r\n"
  229.         str += "  <tr><td align=right>Password: </td><td><input type=text name=pass value=" + ::password + "></td></tr>\r\n"
  230.         str += "  <tr><td> </td></tr>\r\n"
  231.         str += "  <tr><td align=right>Full Name: </td><td><input type=text name=name value=" + ::name + "></td></tr>\r\n"
  232.         str += "  <tr><td align=right>Chat Alias: </td><td><input type=text name=alias value=" + ::alias + "></td></tr>\r\n"
  233.         str += "  <tr><td align=right>Email Address: </td><td><input type=text name=email value=" + ::email + "></td></tr>\r\n"
  234. //        str += "  <tr><td align=right>Picture: </td><td><input type=text name=picture value=" + ::picture + "></td></tr>"
  235.         str += "  <tr><td> </td></tr>\r\n"
  236.         str += "  <tr><td align=right>Display Page Length: </td><td><input type=text name=pglen size=10 value=" + ::pgLen + "></td></tr>\r\n"
  237.         str += "  <tr><td align=right>Refresh Rate: </td><td><input type=text name=refreshrate size=10 value=" + ::refreshRate + "></td></tr>\r\n"
  238. //        str += "  <tr><td> </td></tr>"        
  239. //        str += "  <tr><td align=right>Last Used: </td><td>" + ::lastused + "</td></tr>"
  240.         str += " </table>\r\n"
  241.         str += " <br><input type=submit name=action value=\"Update User Information\">\r\n"
  242.         str += " <input type=submit name=action value=\"Do Not Update\">\r\n"
  243.         str += " <input type=hidden name=cmd value=\"UpdateUser\">\r\n"
  244.         str += " <input type=hidden name=id value=\"" + ::id + "\">\r\n"
  245.  
  246.            str += " <input type=hidden name=channel value=\"" + channel + "\">\r\n"
  247.         str += " <INPUT TYPE=hidden NAME=alias VALUE=\"" + alias + "\">\r\n"
  248.  
  249.         str += "</form>\r\n"
  250.         str += "<font size=2>This information will automatically be maintained<br>for up to thirty days of inactivity.<br></font>\r\n"
  251.  
  252.         return( str )
  253.     END
  254.  
  255.     
  256.     METHOD doupdate( var, defval )
  257.         local v
  258.         v = ::session.var( var )
  259.         return( strempty( v ) ? defval : v )
  260.     END
  261.  
  262.  
  263.     METHOD UpdateId( )
  264.         local str, x, i, y
  265.  
  266.         str = upper( ::userid + ::password )
  267.         i=1
  268.         x=1
  269.         for ( i=2; i<=len(str); i++ )
  270.             y = asc( str[i] )
  271.             if ( y > 0 )
  272.                 x *= y
  273.             end
  274.         end
  275.         str = dec2hex( x )
  276.         if ( len( str ) > 8 )
  277.             str = right( str, 8 )
  278.         end
  279.         ::id = str
  280.         return( ::id )
  281.     END
  282.  
  283.     
  284.     METHOD SessionUpdate( )
  285.         local str
  286.  
  287.         ::userid = ::doupdate( "userid", ::userid )
  288.         ::password = ::doupdate( "pass", ::password )
  289.         ::name = ::doupdate( "name", ::name )
  290.         ::alias = ::doupdate( "alias", ::alias )
  291.         ::email = ::doupdate( "email", ::email )
  292.         ::picture = ::doupdate( "picture", ::picture )
  293.         ::pglen = 0 + ::doupdate( "pglen", ::pglen )
  294.         ::refreshRate = 0 + ::doupdate( "refreshRate", ::refreshRate )
  295.  
  296.         ::id = ::updateId( )
  297.  
  298.         str = ::validate( )
  299.         if ( ! strempty( str ) )
  300.             return( str )
  301.         end
  302.            ::pglen = ::pglen < 5 ? 5 : ::pglen
  303.            ::refreshRate = ::refreshRate < 5 ? 5 : ::refreshRate
  304.          ::save( )
  305.     
  306.         return( "" )
  307.     END
  308.  
  309.  
  310.     METHOD validate( )
  311.         local str
  312.         
  313.         str = ""
  314.         if ( strempty( ::userid ) )
  315.             str += "Must specify a User-id<br>"
  316.         end
  317.         if ( strempty( ::password ) )
  318.             str += "Must specify a Password<br>"
  319.         end
  320.         if ( strempty( ::name ) )
  321.             str += "Must specify a Name<br>"
  322.         end
  323.         if ( strempty( ::alias ) )
  324.             str += "Must specify an Alias<br>"
  325.         end
  326.         if ( strempty( ::email ) )
  327.             str += "Must specify an Email Address<br>"
  328.         end
  329.         if ( ! strempty( str ) )
  330.             return( "<h2>" + str + "</h2>Press the BACK button to return to the form..." )
  331.         end
  332.         return( "" )
  333.     END
  334.        
  335. END
  336.  
  337. _apGenerate( )
  338.  
  339. session = new( "session", param( 1 ), param( 2 ) )
  340. chat     = new( "Chat", session, webServerHome( session.websrvr ) + "\\chat" )
  341. user    = new( "ChatUser", session, chat.basedir )
  342.  
  343. cmd = session.var( "cmd" )
  344. if ( strempty( cmd ) )
  345.     cmd = "LOGON"
  346. end
  347.  
  348. id = session.var( "id" )
  349. channel = 0 + session.var( "channel" )
  350. if ( channel < 1 )
  351.     channel = 1
  352. end
  353. alias = session.var( "alias" )
  354.  
  355. if ( upper( cmd ) == "CHATTEXT" )
  356.     user.load( id )
  357.     ! chat.displayChannel( channel, user )
  358.     return( 1 )
  359. end
  360.  
  361. ]>
  362.  
  363. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
  364. <!-- SmartDesk Active Page, www.smartdesk.com -->
  365. <HTML>
  366. <HEAD>
  367. <TITLE>SmartDesk Web Chat</TITLE>
  368. </HEAD>
  369. <BODY alink=000000 vlink=000000 link=000000 text=000000 bgcolor=ffffff>
  370.  
  371. <!-- HEADER INSERTION -->
  372. <center>
  373. <img src=chatnav.jpg width=620 height=70><br>
  374. <table border=0 width=600>
  375.  <tr><td align=center>
  376.   <p><br></p>
  377. <!-- -->
  378.  
  379. <[
  380.     switch( upper( cmd ) )
  381.       case "LOGON"
  382.           ! chat.LogonScreen( channel, alias )
  383.           break
  384.       case "LOGONATTEMPT"
  385.         if ( ! chat.LogonValidate( ) )
  386.             session._redir( "<H1>Invalid Logon Attempt</H1>One moment please...", "sdchat.html", 2 )
  387.             return( 0 )
  388.         end
  389.         id = chat.id
  390.         if ( user.load( id ) )
  391.             qstr = "?id=" + webEncodeUrl( user.id ) + "&channel=" + channel + "&alias=" + webEncodeUrl( user.alias )
  392.               session._redir( "<h2>Welcome back, " + user.name + "</h2>One moment please...", "chat.htm" + qstr, 2 )
  393.               return( 1 )
  394.         else
  395.               ! "<p><br></p><p><br></p><p><br></p><p><br></p><p><br></p>"
  396.             ! "<p><br></p><center><p><H3>Do you want to create a new user profile?</p>"
  397.             ! "<a href=\"sdchat.htm?cmd=NewUser&userid=" + webEncodeUrl( session.var( "userid" ) ) + "&pass=" + session.var( "pass" ) + "\">Yes</a> | "
  398.             ! "<a href=\"sdchat.htm\">No</a></H3></center><p><br></p><p><br></p><p><br></p><p><br></p><p><br></p>"
  399.         end
  400.         break
  401.       case "NEWUSER"
  402.         chat.LogonValidate( )
  403.         user.load( chat.id, 1 )
  404.         ! user.profile( channel, alias )
  405.         break
  406.       case "UPDATEUSER"
  407.         qstr = "?cmd=ChatText&channel=" + channel + "&alias=" + webEncodeUrl( alias ) + "&id="
  408.         if ( session.var( "action" ) == "Do Not Update" )
  409.               session.redir( "chat.htm" + qstr + id )
  410.               break
  411.         end
  412.         str = user.sessionUpdate( )
  413.         if ( strempty( str ) )
  414.               session.redir( "chat.htm" + qstr + user.id )
  415.         end
  416.           ! str
  417.           break
  418.       case "PREFERENCES"
  419.         user.load( id, 1 )
  420.         ! user.profile( channel, alias )
  421.         break
  422.     end
  423. ]>
  424.  
  425. <!-- FOOTER INSERTION -->
  426.  
  427.       <p><br></p>
  428.       <hr width=500>
  429.       <font size=2>(c) 1997-98 <a href="http://www.smartdesk.com">SmartDesk, Inc.</a>, All Rights reserved.</font>
  430.      <tr><td>
  431.     </table>
  432.     </center>
  433.  
  434. <!-- -->
  435.  
  436. </BODY>
  437. </HTML>
  438.