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