File:  [LON-CAPA] / capa / capa51 / GUITools / webpage.tcl
Revision 1.2: download - view: text, annotated - select for diffs
Tue Dec 7 19:10:47 1999 UTC (24 years, 6 months ago) by albertel
Branches: MAIN
CVS tags: HEAD
- Fixed bug in parsing, undefined variable errors are now passed up,
  rather than trying to mask them.
- Started keyword additions

    1: #!/usr/local/bin/tclsh8.0
    2: 
    3: proc outputHeader { } {
    4:     puts "Content-type: text/html\n\n<HTML><TITLE></TITLE><BODY bgcolor=\"#ffffff\"> "
    5: }
    6: 
    7: proc outputFooter {} {
    8:     puts "</BODY></HTML>"
    9: }
   10: 
   11: proc getid.outputButton { capaid argumentsVar } {
   12:     global machine
   13:     upvar $argumentsVar arguments
   14:     puts "<FORM METHOD=\"POST\"  ACTION=\"http://$machine/capa-bin/capahtml\">"
   15:     puts "<input type=\"HIDDEN\" name=\"M\" value=1>"
   16:     puts "<input type=\"HIDDEN\" name=\"CAPAID\" value=$capaid>"
   17:     puts "<input type=\"HIDDEN\" name=\"SNUM\" value=$arguments(SNUM)>"
   18:     puts "<input type=\"HIDDEN\" name=\"CLASS\" value=$arguments(CLASS)>"
   19:     puts "Click <input type=\"submit\" value=\"  here  \"> to work on <i>CAPA</i>."
   20:     puts "</form>"
   21: }
   22: 
   23: proc getid.main {argumentsVar} {
   24:     global config classList
   25:     upvar $argumentsVar arguments
   26:     outputHeader
   27:     if { [array names classList $arguments(CLASS).path] != "" } {
   28: 	set pwd [pwd]
   29: 	catch {cd $classList($arguments(CLASS).path)} error
   30: 	 #   puts "hey :$error:"
   31: 	catch {set result [exec $config(webpage) -getid $arguments(SNUM) \
   32: 			       $arguments(SETID) $arguments(CAPAID) ]} error
   33: 	 #   puts "hey :$error:"
   34: 	 #   puts "hey :$error:$result:"
   35: 	switch $result {
   36: 	    InvalidSetId { puts "The set requested, $arguments(SETID), is not a valid set number." }
   37: 	    InvalidOldCapaID -
   38: 	    NotFound { puts "The provided old <i>CAPA</i>ID ($arguments(CAPAID)) is not a valid <i>CAPA</i>ID for any set previous to the requested set $arguments(SETID)." }
   39: 	    NotOpen { puts "The set requested, $arguments(SETID), is not open." }
   40: 	    default { puts "Your <i>CAPA</i>ID is <font size=+2>$result</font> for Set $arguments(SETID) in class $arguments(CLASS)."; getid.outputButton $result arguments}
   41: 	}
   42: 	cd $pwd
   43:     } else {
   44: 	puts "Invalid request. Class $arguments(CLASS) not found."
   45:     }
   46:     outputFooter
   47: }
   48: 
   49: proc capaid.outputButton { capaid argumentsVar } {
   50:     global machine
   51:     upvar $argumentsVar arguments
   52:     puts "<FORM METHOD=\"POST\"  ACTION=\"http://$machine/capa-bin/capahtml\">"
   53:     puts "<input type=\"HIDDEN\" name=\"M\" value=1>"
   54:     puts "<input type=\"HIDDEN\" name=\"CAPAID\" value=$capaid>"
   55:     puts "<input type=\"HIDDEN\" name=\"SNUM\" value=$arguments(SNUM)>"
   56:     puts "<input type=\"HIDDEN\" name=\"CLASS\" value=$arguments(CLASS)>"
   57:     puts "Click <input type=\"submit\" value=\"  here  \"> to work on <i>CAPA</i>."
   58:     puts "</form>"
   59: }
   60: 
   61: proc capaid.main {argumentsVar} {
   62:     global config classList
   63:     upvar $argumentsVar arguments
   64:     outputHeader
   65:     if { [array names classList $arguments(CLASS).path] != "" } {
   66: 	set pwd [pwd]
   67: 	catch {cd $classList($arguments(CLASS).path)} error
   68: 	#    puts "hey :$error:"
   69: 	catch {set result [exec $config(webpage) -getid $arguments(SNUM) \
   70: 			       $arguments(SETID)]} error
   71: 	#    puts "hey :$error:"
   72: 	#    puts "hey :$error:$result:"
   73: 	switch $result {
   74: 	    InvalidSetId { puts "The set requested, $arguments(SETID), is not a valid set number." }
   75: 	    InvalidOldCapaID -
   76: 	    NotFound { puts "The provided Student Number $arguments(SNUM) is not a valid for $arguments(CLASS)." }
   77: 	    NotOpen { puts "The set requested, $arguments(SETID), is not open." }
   78: 	    default { puts "Your <i>CAPA</i>ID is <font size=+2>$result</font> for Set $arguments(SETID) in class $arguments(CLASS)."; capaid.outputButton $result arguments}
   79: 	}
   80: 	cd $pwd
   81:     } else {
   82: 	puts "Invalid request. Class $arguments(CLASS) not found."
   83:     }
   84:     outputFooter
   85: }
   86: 
   87: proc emailid.sendmail { what who argumentsVar } {
   88:     global config 
   89:     upvar $argumentsVar arguments
   90:     if { $who == "" } {
   91: 	puts "There is no e-mail address available for this student. Please contact you r instructor to obtain your <i>CAPA</i>ID."
   92:     } else {
   93: 	set mailID [open "|$config(mail) -s \"Requested CAPAID\" $who" w]
   94: 	puts $mailID "The CAPAID you requested for class $arguments(CLASS), set number $arguments(SETID) is $what."
   95: 	close $mailID
   96: 	puts "Your <i>CAPA</i>ID has been mailed to your university e-mail account."
   97:     }    
   98: }
   99: 
  100: proc emailid.main {argumentsVar} {
  101:     global classList config
  102:     upvar $argumentsVar arguments
  103:     outputHeader
  104:     if { [array names classList $arguments(CLASS).path] != "" } {
  105: 	set pwd [pwd]
  106: 	if {[catch {cd $classList($arguments(CLASS).path)} error ]} {
  107: 	    puts $error; return
  108: 	}
  109: 	if {[catch {set result [exec $config(webpage) -emailcapaid $arguments(SNUM) \
  110: 				    $arguments(SETID) ]} error ]} {
  111: 	    puts $error; return
  112: 	}
  113: 	cd $pwd
  114: 	switch $result {
  115: 	    InvalidSetId { puts "The set requested, $arguments(SETID), is not a valid set number." }
  116: 	    NotOpen { puts "The set requested, $arguments(SETID), is not yet open for access." }
  117: 	    NotFound { puts "Unable to find student number $arguments(SNUM) in classlist."}
  118: 	    default {
  119: 		if { [catch { eval "emailid.sendmail $result arguments" } error ] } {
  120: 		    puts "$error:There is no e-mail address available for this student. Please contact your instructor to obtain your <i>CAPA</i>ID."
  121: 		}
  122: 	    }
  123: 	}
  124:     } else {
  125: 	puts "Invalid request. Class $arguments(CLASS) not found."
  126:     }
  127:     
  128:     outputFooter
  129: }
  130: 
  131: proc getSettings { } {
  132:     global classList
  133:     set confID [open "class.conf"]
  134:     set aline [gets $confID]
  135:     while {![eof $confID]} {
  136: 	set class [lindex $aline 0]
  137: 	set path [lindex $aline 1]
  138: 	set classList($class.path) [file join $path $class]
  139: 	set aline [gets $confID]
  140:     }
  141: }
  142: 
  143: proc ids.main {} {
  144:     global env
  145:     getSettings
  146:     set request [string trim [read file0]]
  147:     foreach {var value} [split $request "&="] {set arguments($var) [string trim $value]}
  148:     catch {set arguments(SETID) [string trimleft $arguments(SETID) 0]}
  149:     catch {set logFileId [open ids.log "a"]} error
  150: 
  151:     set b [split $request "&="]
  152:     if { [catch {lappend b $env(REMOTE_HOST)}]} {
  153: 	if { [catch {lappend b $env(REMOTE_ADDR)}] } {
  154: 	    lappend b UNKNOWN
  155: 	}
  156:     }
  157:     puts $logFileId "[clock format [clock seconds]] $b"
  158:     close $logFileId
  159:     
  160:     $arguments(TYPE).main arguments
  161: }
  162: 
  163: proc optionlist { match } {
  164:     global env
  165:     set request ""
  166:     catch {puts $env(QUERY_STRING)}
  167:     catch {set request [string trim $env(QUERY_STRING)]}
  168:     if { $request == "" } {
  169: 	set arguments(CLASS) ""
  170:     } else {
  171:      foreach {var value} [split $request "&="] {set arguments($var) [string trim $value]}
  172:     }
  173:     set confID [open "class.conf"]
  174:     set aline [gets $confID]
  175:     while {!([eof $confID] && ($aline == ""))} {
  176: 	set type [lindex $aline 3]
  177: 	if { [lsearch $type $match] != -1 } {
  178: 	    set classname [lindex $aline 0]
  179: 	    if { [string toupper $classname] == [string toupper $arguments(CLASS)] } {
  180: 		puts "<option selected> [lindex $aline 0]"
  181: 	    } else {
  182: 		puts "<option> [lindex $aline 0]"
  183: 	    }
  184: 	}
  185: 	set aline [gets $confID]
  186:     }
  187: }
  188: 
  189: proc main {} {
  190:     global argv0 machine class.head class.tail emailid.head emailid.tail \
  191: 	getid.head getid.tail capaid.head capaid.tail config 
  192:     eval "global [info globals]"
  193:     source web.settings
  194:     switch -glob -- [file tail $argv0] {
  195: 	class.* -
  196: 	index.* {
  197: 	    puts "Content-type: text/html\n\n"
  198: 	    puts [subst -nocommands ${class.head}]
  199: 	    optionlist class
  200: 	    puts [subst -nocommands ${class.tail}]
  201: 	}
  202: 	emailid.* {
  203: 	    puts "Content-type: text/html\n\n"
  204: 	    puts [subst -nocommands ${emailid.head}]
  205: 	    optionlist emailid
  206: 	    puts [subst -nocommands ${emailid.tail}]
  207: 	}
  208: 	getid.* {
  209: 	    puts "Content-type: text/html\n\n"
  210: 	    puts [subst -nocommands ${getid.head}]
  211: 	    optionlist getid
  212: 	    puts [subst -nocommands ${getid.tail}]
  213: 	}
  214: 	capaid.* {
  215: 	    puts "Content-type: text/html\n\n"
  216: 	    puts [subst -nocommands ${capaid.head}]
  217: 	    optionlist capaid
  218: 	    puts [subst -nocommands ${capaid.tail}]
  219: 	}
  220: 	default { ids.main }
  221:     }
  222: }
  223: 
  224: main

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>