# $Id: index.tcl 1204 2009-02-02 19:54:23Z hubert@u.washington.edu $ # ======================================================================== # Copyright 2006 University of Washington # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # ======================================================================== # index.tcl # # Purpose: CGI script snippet to generate html output associated # with the WebPine message list (index) body frame # # Input: set index_vars { {sort {} date} {rev {} 0} {top {} 0} {uid {} 0} {width {} $_wp(width)} {op {} none} {bod_next {} 0} {bod_last {} 0} {bod_first {} 0} {bod_prev {} 0} {growpage {} 0} {shrinkpage {} 0} {grownum {} 0} {goto {} ""} {gonum {} ""} {select {} ""} {selectop {} ""} {doselect {} 0} {auths {} 0} {user {} ""} {pass {} ""} {create {} 0} {save {} ""} {browse {} ""} {f_name {} ""} {f_colid {} ""} {savecancel {} ""} {promptsave {} ""} {setflag {} ""} {flags {} ""} {repall {} 0} {reptext {} 0} {sortrev {} 0} {sortto {} 0} {sortfrom {} 0} {sortdate {} 0} {sortsize {} 0} {sortsubject {} 0} {sortorderedsubj {} 0} {sortthread {} 0} {queryexpunge {} 0} {expunge {} 0} {cid {} 0} {folders {} 0} {compose {} 0} {submitted {} 0} {zoom {} ""} {mark {} ""} {unmark {} ""} {search {} ""} {aggon {} ""} {aggoff {} ""} {hdron {} ""} {hdroff {} ""} {split {} 0} {spamit {} ""} {reload} } # Output: # # FOR TESTING VARIOUS LAYOUTS AND SUCH set do_status_icons 1 set selectverb Search set growmax 50 set growverb Increase set shrinkverb Decrease # various color defs set color(sortfg) "#FFFFFF" set color(sortbg) "#BFBFBF" set color(line1) "#EEEEEE" set color(line2) "#FFFFFF" set color(greyout) "#888888" set sb_width 13 set sb_dir bar set aggbar 1 set sortbar 2 set gonum "" if {[catch {WPCmd PEInfo indexlines} ppg] || $ppg <= 0} { set ppg $_wp(indexlines) } # make sure any caching doesn't screw this setting catch {WPCmd PEInfo set wp_spec_script fr_index.tcl} proc statmsg {s} { global newmail lappend newmail [list $s] } proc selectresponse {type num prevnum zoomref topref uidref} { upvar $zoomref zoomed upvar $topref top upvar $uidref uid if {$num == 0} { if {$prevnum} { set statmsg "$type search found no additional messages. Set of marked messages unchanged" } else { set statmsg "$type search found no matching messages" } } elseif {$num > 0} { if {$prevnum} { set statmsg "$type search found $num messages. [expr {$num + $prevnum}] total messages now marked." } else { set statmsg "$type search found and marked $num messages" } if {!$zoomed} { # force reframing set top "0+0" set uid 0 } } else { set statmsg "[set num [expr abs($num)]] messages Unmarked." if {$prevnum > $num} { append statmsg " [expr {$prevnum - $num}] remain Marked." } } # update zoomed count or zoom if necessary if {$zoomed} { set zoomed [WPCmd PEMailbox selected] } elseif {[WPCmd PEInfo feature auto-zoom-after-select] && [WPCmd PEMailbox selected]} { set zoomed [WPCmd PEMailbox zoom 1] #append statmsg ". Those not matching excluded from view." } statmsg $statmsg catch {WPCmd PEInfo unset wp_def_search_text} } proc sortname {name {current 0}} { global rev me switch -- $name { Number { set newname "#" } OrderedSubj { set newname "Ordered Subject" } Arrival { set newname Arv } Status { set newname " " } default { set newname $name } } if {$current} { if {$rev > 0} { set text [cgi_imglink increas] set args rev=0 } else { set text [cgi_imglink decreas] set args rev=1 } append newname [cgi_url $text "wp.tcl?page=index&sortrev=1" "title=Reverse $newname ordering" target=body] } return $newname } proc lineclass {linenum} { if {$linenum % 2} { return i0 } else { return i1 } } proc uid_framed {u mv} { foreach m $mv { if {$u == [lindex $m 1]} { return 1 } } return 0 } proc index_quote {text} { set text [cgi_quote_html $text] regsub -all { } $text {\ } text return $text } proc index_part_color {text color} { if {[llength $color] == 2} { set fg [lindex $color 0] set bg [lindex $color 1] return [cgi_span "style=color: $fg; background-color: $bg" $text] } else { return $text } } ## read vars foreach item $index_vars { if {[catch {cgi_import [lindex $item 0].x}]} { if {[catch {eval WPImport $item} errstr]} { error [list _action "Impart Variable" $errstr] } } else { set [lindex $item 0] 1 } } # check for new mail first since counts # and sort order might change... if {[catch {WPNewMail $reload ""} newmail]} { error [list _action "new mail" $newmail] } set cid [WPCmd PEInfo key] set messagecount [WPCmd PEMailbox messagecount] set delcount [WPCmd PEMailbox flagcount deleted] set flagcmd [WPCmd PEInfo feature enable-flag-cmd] set aggops [WPCmd PEInfo feature enable-aggregate-command-set] set aggtabstate [WPCmd PEInfo aggtabstate] set zoomed [WPCmd PEMailbox zoom] set indexheight [WPIndexLineHeight] if {$split != "0"} { set vtarget fr_bottom } else { set vtarget spec } # perform any requested actions if {$queryexpunge == 1 || [string compare [string tolower $queryexpunge] expunge] == 0} { if {$delcount > 0} { set fn [WPCmd PEMailbox mailboxname] set oncancel index # delcount, messagecount set above source [WPTFScript expunge] set nopage 1 } else { statmsg "No deleted messages to Expunge" } } elseif {$expunge == 1 || [string compare [string tolower $expunge] expunge] == 0 || [string compare [string range [string tolower $expunge] 0 10] "yes, remove"] == 0} { if {$delcount > 0} { if {$delcount < $messagecount || ($delcount == $messagecount && 0 == [catch {cgi_import emptyit}] && 1 == $emptyit)} { set setflags [WPCmd PEMessage $top status] if {[lsearch $setflags "Deleted"] != -1} { set curmsg [WPCmd PEMessage $top number] set nextmsg [WPCmd PEMailbox next $curmsg] set done 0 while {$nextmsg > $curmsg && $done == 0} { set nextuid [WPCmd PEMailbox uid $nextmsg] set setflags [WPCmd PEMessage $nextuid status] if {[lsearch $setflags "Deleted"] == -1} { set uid $nextuid set top $uid set done 1 } else { set curmsg $nextmsg set nextmsg [WPCmd PEMailbox next $curmsg] } } if {$done == 0} { set curmsg [WPCmd PEMessage $top number] set prevmsg [WPCmd PEMailbox next $curmsg -1] while {$prevmsg < $curmsg && $done == 0} { set prevuid [WPCmd PEMailbox uid $prevmsg] set setflags [WPCmd PEMessage $prevuid status] if {[lsearch $setflags "Deleted"] == -1} { set uid $prevuid set top $uid set done 1 } else { set curmsg $prevmsg set prevmsg [WPCmd PEMailbox next $curmsg -1] } } } } if {[catch {WPCmd PEMailbox expunge} blasted] || [string length $blasted]} { statmsg "Expunge problem: $blasted" } else { set delcount 0 set messagecount [WPCmd PEMailbox messagecount] if {$messagecount < 1} { set uid 0 set top 0 set first 1 if {$zoomed} { WPCmd PEMailbox zoom 0 } } else { if {$top > 0 && ([catch {WPCmd PEMessage $top number} n] || $n <= 0)} { # previous top message is gone, figure new one below set top 0 } if {$uid > 0 && ([catch {WPCmd PEMessage $uid number} n] || $n <= 0)} { # recently viewed message is gone set uid 0 } } } } else { statmsg "
No Messages Expunged!
To prevent unintended deletions, you must check the box on the Expunge Confirmation page to indicate that you acknowledge expunge will leave the folder [WPCmd PEMailbox mailboxname] empty.
" } } else { statmsg "No deleted messages to Expunge" } } elseif {$growpage == 1 || [string compare $growverb $growpage] == 0} { if {$grownum <= 0 || $grownum > $growmax} { set grownum 5 } incr ppg $grownum catch {WPCmd PEInfo set grownum $grownum} WPCmd PEInfo indexlines $ppg } elseif {$shrinkpage == 1 || [string compare $shrinkverb $shrinkpage] == 0} { if {$grownum <= 0 || $grownum > $growmax} { set grownum 5 } incr ppg -$grownum catch {WPCmd PEInfo set grownum $grownum} if {$ppg < 1} { set ppg 1 } WPCmd PEInfo indexlines $ppg } elseif {$bod_prev} { set top "$top-$ppg" set uid 0 } elseif {$bod_first} { set first 1 if {$messagecount > 0} { set top [WPCmd PEMailbox uid $first] } set uid 0 } elseif {$bod_next} { set top "$top $ppg" set uid 0 } elseif {$bod_last} { if {$messagecount > 0} { if {$zoomed} { if {$zoomed > $ppg} { if {[catch {WPCmd PEMailbox uid [WPCmd PEMailbox next [expr {[WPCmd PEMailbox last] - [expr {${ppg} - 1}]}]]} top]} { set first [WPCmd PEMailbox first] set top [WPCmd PEMailbox uid $first] } else { set first [WPCmd PEMessage $top number] } } } else { if {[set first [expr {$messagecount - $ppg + 1}]] < 0} { set first 1 } set top [WPCmd PEMailbox uid $first] } } set uid 0 } elseif {[string length $goto]} { if {[regexp {^([0-9]+)$} $gonum n]} { if {$n > 0 && $n <= [WPCmd PEMailbox last]} { set first $n set uid [WPCmd PEMailbox uid $first] set top $uid set gonum "" } else { statmsg "Jump value $gonum out of range" set goto "" } } else { if {[string length $gonum]} { statmsg "Unrecognized Jump value: $gonum" } else { statmsg "Enter a message number, then click 'Jump'" } } } elseif {$promptsave == 1 || [string compare [string tolower $promptsave] save] == 0} { if {[WPCmd PEMailbox selected] == 0} { statmsg "Place checkmarks in the box next to desired messages, then click 'Save'" } else { set uid 0 source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) fr_promptsave.tcl] set nopage 1 } } elseif {$savecancel == 1 || [string compare cancel [string tolower $savecancel]] == 0} { catch {WPCmd PEInfo unset wp_index_script} lappend newmail [list "Save cancelled. Folder not created."] } elseif {[string length $browse] && [string compare $browse Browse] == 0} { set uid 0 _cgi_set_uservar onselect main _cgi_set_uservar oncancel main _cgi_set_uservar controls 0 source [WPTFScript savebrowse] set nopage 1 } elseif {([string length $save] && ([string compare [string trim $save] OK] == 0 || [string compare [string trim $save] Save] == 0)) || [string compare save [string tolower $op]] == 0} { if {[WPCmd PEMailbox selected] == 0} { statmsg "Place checkmarks in the box next to desired messages, then click 'Save'" } elseif {[catch {cgi_import cancel}] == 0} { statmsg "Save cancelled" } else { set f_name [string trim $f_name] if {[string length $f_name]} { if {[regexp {^([0-9]+)$} $f_colid]} { switch -exact -- $f_name { __folder__prompt__ { set uid 0 _cgi_set_uservar onselect {index save=OK} _cgi_set_uservar oncancel index _cgi_set_uservar target body _cgi_set_uservar controls 0 source [WPTFScript savecreate] set nopage 1 } __folder__list__ { set uid 0 _cgi_set_uservar onselect {index save=OK} _cgi_set_uservar oncancel index _cgi_set_uservar target body _cgi_set_uservar controls 0 source [WPTFScript savebrowse] set nopage 1 } default { if {$auths} { catch {WPCmd PESession nocred $f_colid $f_name} if {[catch {WPCmd PESession creds $f_colid $f_name $user $pass} result]} { lappend newmail ["Cannot set credentials ($f_colid) $f_name: result"] } } if {[catch {WPCmd PEFolder exists $f_colid $f_name} reason]} { if {[string compare BADPASSWD [string range $reason 0 8]] == 0} { set oncancel "index.tcl&savecancel=1" set conftext "Create Folder '$f_name'?" lappend params [list page index] lappend params [list save Save] lappend params [list f_name $f_name] lappend params [list f_colid $f_colid] source [WPTFScript auth] set nopage 1 } else { lappend newmail [list "Existance test failed: $reason"] } } elseif {$reason == 0} { if {$create == 1 || [string compare create [string tolower $create]] == 0} { if {[catch {WPCmd PEFolder create $f_colid $f_name} reason]} { lappend newmail [list "Create failed: $reason"] } else { set dosave 1 } } else { set qstate [list $f_name] set params [list [list page index]] lappend params [list save OK] lappend params [list f_name $f_name] lappend params [list f_colid $f_colid] lappend qstate $params if {[catch {WPCmd PEInfo set querycreate_state $qstate}] == 0} { source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) fr_querycreate.tcl] set nopage 1 } else { statmsg "Error saving creation state" } } } else { set dosave 1 } if {[info exists dosave]} { if {[catch {WPCmd PEMailbox apply save $f_colid $f_name} reason]} { error [list _action "Cannot save to $f_name in $f_colid" $reason] } else { set statmsg "Saved $reason message[WPplural $reason] to $f_name" set savedef [WPTFSaveDefault $uid] if {[lindex $savedef 0] == $f_colid} { WPTFAddSaveCache $f_name } if {[WPCmd PEInfo feature auto-unselect-after-apply]} { if {[catch {WPCmd PEMailbox select none} result]} { set statmsg "Cannot clear all message marks: $result" } else { if {$result == 0} { set statmsg "No Marked messages to Unmark" } else { append statmsg " and unmarked" } } } statmsg $statmsg } } } } } else { statmsg "Unrecognized collection id" } } else { statmsg "Must provide a folder name to Save to" } } } elseif {[string compare Set $setflag] == 0 || [string compare Delete $setflag] == 0 || [string compare Undelete $setflag] == 0} { switch -- $setflag { Delete { set flagverb Delete set flags delete } Undelete { set flagverb Undelete set flags undeleted } default { set flagverb Set } } if {[WPCmd PEMailbox selected] == 0} { statmsg "Place checkmarks in the box next to desired messages, then click '$flagverb'" } else { switch -- $flags { delete { set flagverb "for deletion" if {[catch {WPCmd PEMailbox apply delete} reason]} { set statmsg "Problem deleting: $reason" } } undeleted { set flagverb Undeleted if {[catch {WPCmd PEMailbox apply undelete} reason]} { set statmsg "Problem undeleting: $reason" } } new { set flagverb New if {[catch {WPCmd PEMailbox apply flag ton new} reason]} { set statmsg "Problem setting New flag: $reason" } } read { set flagverb Read if {[catch {WPCmd PEMailbox apply flag not new} reason]} { set statmsg "Problem Unsetting New flag: $reason" } } answered { set flagverb Answered if {[catch {WPCmd PEMailbox apply flag ton ans} reason]} { set statmsg "Problem setting Answered flag: $reason" } } unanswered { set flagverb "Not Answered" if {[catch {WPCmd PEMailbox apply flag not ans} reason]} { set statmsg "Problem Unsetting Answered flag: $reason" } } important { set flagverb "Important" if {[catch {WPCmd PEMailbox apply flag ton imp} reason]} { set statmsg "Problem setting Important flag: $reason" } } unimportant { set flagverb "Not Important" if {[catch {WPCmd PEMailbox apply flag not imp} reason]} { set statmsg "Problem Unsetting Important flag: $reason" } } default { statmsg "Unknown flag set request: $flags" } } if {![info exists statmsg]} { set statmsg "$reason message[WPplural $reason] flagged $flagverb" if {[WPCmd PEInfo feature auto-unselect-after-apply]} { if {[catch {WPCmd PEMailbox select none} result]} { set statmsg "Cannot clear all message marks: $result" } else { if {$result == 0} { set statmsg "No Selected messages to Unmark" } else { append statmsg " and unmarked" } } } } statmsg $statmsg } } elseif {[string length $mark]} { if {[string compare mark [string tolower [lindex $mark 0]]] == 0} { if {[catch {WPCmd PEMailbox select all} result]} { statmsg "Cannot mark all messages: $result" } else { set zm "" if {$zoomed} { set zoomed [WPCmd PEMailbox zoom 0] set zm ". Message List now displaying all messages." } statmsg "All messages in folder '[WPCmd PEMailbox mailboxname]' marked$zm" } } elseif {[string compare $mark 1] == 0} { if {$zoomed} { statmsg "Messages on page already marked" } elseif {$messagecount > 0} { set p [split $uidpage ","] set s [WPCmd PEMessage [lindex $p 0] number] set e [WPCmd PEMessage [lindex $p end] number] if {[catch {WPCmd PEMailbox select broad num $s $e} result]} { statmsg "Cannot mark messages: $result" } else { statmsg "Marked all messages [cgi_underline "on this page"]" } } } } elseif {[string length $unmark]} { if {[string compare unmark [lindex [string tolower $unmark] 0]] == 0} { if {[catch {WPCmd PEMailbox select none} result]} { statmsg "Cannot clear all message marks: $result" } else { if {$result == 0} { statmsg "No marked messages to Unmark" } else { if {[regexp {[0-9]+} $result] && $result == $messagecount} { set result All } statmsg "Unmarked $result Messages" } } } elseif {[string compare $unmark 1] == 0} { if {[catch {WPCmd PEMailbox select clear [split $uidpage ","]} result]} { statmsg "Cannot clear message marks: $result" } else { if {$result == 0} { statmsg "No marked messages to Unmark" } else { statmsg "Unmarked all messages [cgi_underline "on this page"]" } } } } elseif {[string length $select] && [string compare $select $selectverb] == 0} { switch -- $selectop { mark { if {[catch {WPCmd PEMailbox select all} result]} { statmsg "Cannot mark all messages: $result" } elseif {0} { statmsg "All messages marked" } } clear { if {[catch {WPCmd PEMailbox select none} result]} { statmsg "Cannot clear all message marks: $result" } elseif {0} { if {$result == 0} { statmsg "No marked messages to Unmark" } else { statmsg "Unmarked $result messages" } } } text { set uid 0 source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) fr_seltext.tcl] set nopage 1 } date { set uid 0 source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) fr_seldate.tcl] set nopage 1 } stat { set uid 0 source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) fr_selstat.tcl] set nopage 1 } zoom { if {[WPCmd PEMailbox selected] == 0} { statmsg "No marked messages to Zoom on" } elseif {$zoomed == 0} { set zoomed [WPCmd PEMailbox zoom 1] } } unzoom { set zoomed [WPCmd PEMailbox zoom 0] } null { } default { set uid 0 source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) fr_select.tcl] set nopage 1 } } } elseif {$zoom != ""} { set z 0 if {[WPCmd PEMailbox selected] == 0} { if {[string compare [string tolower [string range $zoom 0 7]] "show all"]} { statmsg "No marked messages to Zoom in on!" } } elseif {$zoomed == 0} { set z 1 } set zoomed [WPCmd PEMailbox zoom $z] } elseif {$doselect == 1} { WPLoadCGIVar result if {[string compare new [string tolower $result]] == 0} { catch {WPCmd PEMailbox select none} catch {WPCmd PEMailbox zoom 0} set zoomed 0 set result broad } set selected [WPCmd PEMailbox selected] if {[catch {WPLoadCGIVar cancel}] || [string compare cancel [string tolower $cancel]] != 0} { if {[catch {WPLoadCGIVar by}]} { if {[string length $selectop]} { set by [string tolower [lindex $selectop 1]] } else { statmsg "Unknown Search Option -- Click button associated with desired search" set by unset } } switch -- $by { date { WPLoadCGIVar datecase ;# on, since or before WPLoadCGIVar datemon ;# month abbrev: jan, feb etc WPLoadCGIVar dateday ;# day num WPLoadCGIVar dateyear ;# year num if {[catch {WPCmd PEMailbox select $result date $datecase $dateyear $datemon $dateday} reason]} { statmsg "Date Search Failed: $reason" } else { selectresponse Date $reason $selected zoomed top uid } } text { WPLoadCGIVar textcase ;# ton, not WPLoadCGIVar field ;# to from cc recip partic subj any WPLoadCGIVar text ;# search string if {[catch {WPCmd PEMailbox select $result text $textcase $field $text} reason]} { statmsg "Text Search Failed: $reason" } else { switch -- $field { subj {set fieldtext "\"Subject:\""} from {set fieldtext "\"From:\""} to {set fieldtext "\"To:\""} cc {set fieldtext "\"Cc:\""} recip {set fieldtext "Recipient"} partic {set fieldtext "Participant"} default {set fieldtext "Full text"} } selectresponse $fieldtext $reason $selected zoomed top uid } } status { if {[catch {WPLoadCGIVar flag}]} { statmsg "Choose a Status value and then click [cgi_bold "Search Status"]" } else { WPLoadCGIVar statcase if {[catch {WPCmd PEMailbox select $result status $statcase $flag} reason]} { statmsg "Flag Search Failed: $reason" } else { switch -- $statcase { not { set casetext "NOT " } default { set casetext "" } } switch -- $flag { imp {set flagtext Important} new {set flagtext "New status"} ans {set flagtext Answered} del {set flagtext Deleted} } selectresponse "${casetext}${flagtext} status" $reason $selected zoomed top uid } } } unset { if {[catch {WPLoadCGIVar text}] == 0} { catch {WPCmd PEInfo set wp_def_search_text $text} } } default { WPCmd PEInfo statmsg "Unknown Search Option" } } } else { catch {WPCmd PEInfo unset wp_def_search_text} } catch {WPCmd PEInfo unset wp_index_script} } elseif {$sortrev} { if {$rev} { set rev 0 } else { set rev 1 } } elseif {$sortto} { set sort To } elseif {$sortfrom} { set sort From } elseif {$sortdate} { set sort Date } elseif {$sortsize} { set sort siZe } elseif {$sortsubject} { set sort Subject } elseif {$sortorderedsubj} { set sort OrderedSubj } elseif {$sortthread} { set sort tHread } elseif {$folders} { source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) folders.tcl] set nopage 1 } elseif {[string compare reply [string tolower $op]] == 0} { if {0} { set oncancel index set cid [WPCmd PEInfo key] #_cgi_set_uservar style Reply source [WPTFScript compose] set nopage 1 } statmsg "Aggregate Reply not implemented yet" } elseif {[string compare forward [string tolower $op]] == 0} { statmsg "Aggregate Forward not implemented yet" } elseif {[string length $aggon]} { set aggtabstate [expr {$aggtabstate | $aggbar}] WPCmd PEInfo aggtabstate $aggtabstate } elseif {[string length $aggoff]} { if {$zoomed} { set zoomed [WPCmd PEMailbox zoom 0] statmsg "Message List now displaying all (marked and unmarked) messages" } set aggtabstate [expr {$aggtabstate & ~$aggbar}] WPCmd PEInfo aggtabstate $aggtabstate } elseif {[string length $hdron]} { set aggtabstate [expr {$aggtabstate | $sortbar}] WPCmd PEInfo aggtabstate $aggtabstate } elseif {[string length $hdroff]} { set aggtabstate [expr {$aggtabstate & ~$sortbar}] WPCmd PEInfo aggtabstate $aggtabstate } elseif {[catch {WPCmd PEInfo set wp_index_script} script] == 0} { catch {WPCmd PEInfo unset wp_index_script} set uid 0 source [file join $_wp(cgipath) $_wp(appdir) $_wp(ui1dir) $script] set nopage 1 } elseif {[string length $spamit]} { if {[WPCmd PEMailbox selected] == 0} { statmsg "Place checkmarks in the box next to desired messages, then click '$spamit'" } else { # create # aggregate save if {[info exists _wp(spamsubj)] && [string length $_wp(spamsubj)]} { set spamsubj $_wp(spamsubj) } else { set spamsubj "Spam Report" } # aggregate delete if {[info exists _wp(spamfolder)] && [string length $_wp(spamfolder)] && [catch { set savedef [WPCmd PEMailbox savedefault] if {[WPCmd PEFolder exists [lindex $savedef 0] $_wp(spamfolder)] == 0} { WPCmd PEFolder create [lindex $savedef 0] $_wp(spamfolder) } WPCmd PEMailbox apply save [lindex $savedef 0] $_wp(spamfolder) } result]} { statmsg "Error Reporting Spam: $result" } elseif {[info exists _wp(spamaddr)] && [string length $_wp(spamaddr)] && [catch {WPCmd PEMailbox apply spam $_wp(spamaddr) $spamsubj} reason]} { statmsg "Error Sending Spam Notice: $reason" } elseif {[catch {WPCmd PEMailbox apply delete} reason]} { statmsg "Error marking Spam Deleted: $reason" } else { set seld [WPCmd PEMailbox selected] statmsg "$seld spam message[WPplural $seld] reported and flagged for deletion" catch {WPCmd PEMailbox select none} } } } elseif {[string compare "set flags" [string tolower $op]] == 0} { if {[catch {WPCmd PEInfo flaglist} flags]} { statmsg "Can't get flags: $flags" } else { # then go thru flag list setting and clearing as needed foreach flag $flags { if {[catch {cgi_import_as $flag val}]} { if {[catch {WPCmd PEMessage $uid flag $flag 0} result]} { statmsg "Can't set $flag: $result" break } } else { set newval [expr {[string compare $val on] == 0}] if {[catch {WPCmd PEMessage $uid flag $flag $newval} result]} { statmsg "Can't set $flag: $result" break } } } } } if {![info exists nopage]} { # set the specified sort order if {[catch {WPCmd PEMailbox sort $sort $rev} currentsort]} { error [list _action Sort $currentsort] } if {$aggops} { set selected [WPCmd PEMailbox selected] if {$selected < 1 && $zoomed} { set zoomed 0 WPCmd PEMailbox zoom 0 statmsg "Message List now displaying all (marked and unmarked) messages" } } # "top" is uid of first message in index. n after '+' is relative offset if {$messagecount <= 0} { set first 1 set top 0 set miv "" } else { if {[regexp {^([0-9]+)([\+\ -])([0-9]+)$} $top dummy u sign offset]} { if {$u == 0 || [catch {WPCmd PEMessage $u number} first]} { set first [WPCmd PEMailbox first] set top [WPCmd PEMailbox uid $first] } else { set top $u } if {$offset != 0} { if {[catch {WPCmd PEMailbox next [WPCmd PEMessage $top number] ${sign}${offset}} newfirst] == 0} { set first $newfirst set top [WPCmd PEMailbox uid $newfirst] } } } elseif {[regexp {^[0-9]*$} $top]} { if {$top == 0 || [catch {WPCmd PEMessage $top number} first]} { set first [WPCmd PEMailbox first] set top [WPCmd PEMailbox uid $first] } } else { statmsg "Invalid UID for first message" set first [WPCmd PEMailbox first] set top [WPCmd PEMailbox uid $first] } # validate first is in range if {$messagecount && $first < [set f [WPCmd PEMailbox first]]} { set first $f set top [WPCmd PEMailbox uid $f] } # check framing if {$zoomed} { if {$zoomed < $ppg || [WPCmd PEMessage $top select] == 0} { set first [WPCmd PEMailbox first] set top [WPCmd PEMailbox uid $first] } else { set first [WPCmd PEMessage $top number] } set uid $top } else { if {$messagecount < $ppg} { if {![string length $goto]} { set first [WPCmd PEMailbox first] set top [WPCmd PEMailbox uid $first] } } elseif {$first > $messagecount} { if {[set mdiff [expr {$messagecount - $ppg + 1}]] < 0} { set first [WPCmd PEMailbox first] set top [WPCmd PEMailbox uid $first] } else { set first $mdiff set top [WPCmd PEMailbox uid $mdiff] } } } # validate uid # use "size" instead of "number" to work around temporary bug in pinetcld if {$uid != 0 && ([catch {WPCmd PEMessage $uid size} n] || $n <= 0)} { set uid 0 } set nv [WPCmd PEMailbox nextvector $first $ppg [list indexparts indexcolor status statusbits]] set miv [lindex $nv 0] set charset [lindex $nv 1] # hook to keep last viewed message in current message list if {$uid > 0} { if {[catch {WPCmd PEMessage $uid number} n] == 0 && [uid_framed $uid $miv] == 0} { set first $n set top $uid set nv [WPCmd PEMailbox nextvector $first $ppg [list indexparts indexcolor status statusbits ]] set miv [lindex $nv 0] set charset [lindex $nv 1] } #set uid 0 ;# no longer "last viewed" #catch {WPCmd PEInfo unset uid} } # remember for next time catch { WPCmd PEInfo set top $top WPCmd PEInfo set sort $sort WPCmd PEInfo set rev $rev } } if {[llength $miv] == 0 || (!([info exists charset] && [string length $charset]) && ([catch {WPCmd PEConfig varget character-set} charset] || [string length [set charset [lindex $charset 0]]] == 0 || [string compare [string tolower $charset] "us-ascii"] == 0))} { set charset "UTF-8" } catch {fconfigure stdout -encoding binary} # start writing page cgi_http_head { WPStdHttpHdrs "text/html; charset=$charset" } cgi_html { cgi_head { cgi_http_equiv Content-Type "text/html; charset=$charset" set onload "onLoad=" set onunload "onUnload=" if {[info exists _wp(exitonclose)]} { WPExitOnClose append onload "wpLoad();" append onunload "wpUnLoad();" } if {[info exists _wp(timing)]} { set onsubmit "onSubmit=return submitTimestamp()" cgi_script type="text/javascript" language="JavaScript" { cgi_puts "var loadtime = new Date();" cgi_put "function submitTimestamp(){" cgi_put " var now = new Date();" cgi_put " document.index.submitted.value = now.getTime();" cgi_put " return true;" cgi_puts "}" cgi_put "function fini() {" cgi_put " var now = new Date();" cgi_put " var t_load = (now.getTime() - loadtime.getTime())/1000;" if {$submitted} { cgi_put " var t_submit = (now.getTime() - $submitted)/1000;" set rtt ", rtt = '+t_submit+', cumulative = '+(t_submit + t_load)" } else { set rtt "'" } cgi_put " window.status = 'Page loaded in '+t_load+' seconds${rtt};" cgi_puts "}" } append onload "fini();" } else { set onsubmit "" } set normalreload [cgi_buffer {WPHtmlHdrReload "$_wp(appdir)/$_wp(ui1dir)/wp.tcl?page=index"}] if {[info exists _wp(exitonclose)]} { cgi_script type="text/javascript" language="JavaScript" { cgi_put "function indexReloadTimer(t){" cgi_put " reloadtimer = window.setInterval('wpLink(); window.location.replace(\\'[cgi_root]/$_wp(appdir)/$_wp(ui1dir)/wp.tcl?page=index&reload=1\\')', t * 1000);" cgi_puts "}" } append onload "indexReloadTimer($_wp(refresh));" cgi_noscript { cgi_puts $normalreload } } else { cgi_puts $normalreload } WPStyleSheets cgi_puts "" cgi_script type="text/javascript" language="JavaScript" { cgi_put "function flip(d){" cgi_put " var f = document.index;" cgi_put " if(f && document.implementation){" cgi_put " var e = document.createElement('input');" cgi_puts " var ver = navigator.appVersion;" cgi_put " if(!((ver.indexOf('MSIE')+1) && (ver.indexOf('Macintosh')+1))) e.type = 'hidden';" cgi_put " e.name = 'bod_'+d;" cgi_put " e.value = 1;" cgi_put " f.appendChild(e);" cgi_put " f.submit();" cgi_put " return false;" cgi_put " }" cgi_put " return true;" cgi_puts "}" cgi_put "function view(u) {" cgi_put " var f = document.index;" cgi_put " f.target = '$vtarget';" cgi_put " f.page.value = 'fr_view';" cgi_put " f.uid.value = u;" cgi_puts " f.submit();" cgi_puts " return false;" cgi_puts "}" cgi_put "function toggleMarks(elobj){" cgi_put " var i, ckd = 1;" cgi_put " for(i = 0; i < document.index.uidList.length; i++)" cgi_put " if(!document.index.uidList\[i\].checked){" cgi_put " ckd = 0;" cgi_put " break;" cgi_put " }" cgi_put " for(i = 0; i < document.index.uidList.length; i++) document.index.uidList\[i\].checked = !ckd;" cgi_put " elobj.src = (ckd) ? '[WPimg markall3]' : '[WPimg marknone3]';" cgi_put " return false;" cgi_puts "}" } if {$_wp(keybindings)} { set kequiv { {{?} {top.location = 'wp.tcl?page=help'}} {{l} {top.location = 'wp.tcl?page=folders'}} {{a} {top.location = 'wp.tcl?page=addrbook'}} {{n} {if(flip('next')) location = 'wp.tcl?page=body&bod_next=1'}} {{p} {if(flip('prev')) location = 'wp.tcl?page=body&bod_prev=1'}} {{ } {if(flip('next')) location = 'wp.tcl?page=body&bod_next=1'}} {{-} {if(flip('prev')) location = 'wp.tcl?page=body&bod_prev=1'}} {{;} {if(document.index.select) document.index.select.click(); else document.index.aggon.click()}} {{z} {if(document.index.zoom) document.index.zoom.click()}} } lappend kequiv [list {c} "top.location = 'wp.tcl?page=compose&oncancel=main.tcl&cid=[WPCmd PEInfo key]'"] if {$aggops && ($aggtabstate & $aggbar)} { set exclusions document.index.f_name } else { set exclusions "" } append onload [WPTFKeyEquiv $kequiv $exclusions] } } cgi_body bgcolor=$_wp(bordercolor) background=[file join $_wp(imagepath) logo $_wp(logodir) back.gif] "style=\"background-repeat: repeat-x\"" $onload $onunload { catch {WPCmd set help_context index} # check for status msg updates foreach s [WPStatusMsgs] { lappend newmail [list $s] } if {[llength $newmail]} { WPTFStatusTable $newmail 1 "style=\"padding: 6px 0; color: white\"" if {!$reload} { WPCmd PEMailbox newmailreset } } if {$ppg > 50} { set postmethod post set enctype "multipart/form-data" } else { set postmethod get set enctype "application/x-www-form-urlencoded" } cgi_form $_wp(appdir)/$_wp(ui1dir)/wp method=$postmethod enctype=$enctype name=index $onsubmit target=body { # context line cgi_table border=0 cellspacing=0 cellpadding=0 width="100%" class="context" { if {[llength $newmail]} { cgi_table_row { cgi_table_data height=1 bgcolor="#000000" width="100%" colspan=8 { cgi_put [cgi_img [WPimg dot2] border=0 height=1] } } } cgi_table_row bgcolor="#999999" { if {$zoomed} { if {[catch {WPCmd PEMailbox messagecount after [lindex [lindex $miv end] 0]} messagesremaining]} { unset messagesremaining } set z "[cgi_span class="marked" marked] " set t $zoomed } else { set messagesremaining [expr {$messagecount - ($first + $ppg - 1)}] set t $messagecount set z "" } if {[catch {WPCmd PEMailbox messagecount before [lindex [lindex $miv 0] 0]} messagesbefore] == 0 && $messagesbefore > 0} { if {$messagesbefore > $ppg} { set b $ppg } else { set b $messagesbefore } switch $b { 1 { set c One set p "" } default { set c $b set p s } } set prevtext " [cgi_unbreakable_string "($c on [cgi_url previous wp.tcl?page=body&bod_prev=1 "onClick=return flip('prev')"] page)"]" } else { set messagesbefore 0 set prevtext "" } if {$messagesbefore <= 0 && $messagesremaining <= 0} { switch $t { 0 { set counttext "[cgi_bold No] ${z}messages in folder" } 1 { set counttext "[cgi_bold Only] ${z}message in folder" } 2 { set counttext "[cgi_bold Both] ${z}messages in folder" } default { set counttext "[cgi_bold All] $t ${z}messages in folder" } } } elseif {$zoomed} { if {$messagesbefore > 0} { if {$messagesremaining > 0} { set counttext "[expr {$messagesbefore + 1}] thru [expr {$zoomed - $messagesremaining}] of $zoomed [cgi_span class="marked" marked] messages" } else { if {[set p [llength $miv]] == 1} { set lasttext "" } else { set lasttext " $p" } set counttext "[cgi_bold Last]${lasttext} of $zoomed [cgi_span class="marked" marked] messages" } } else { set counttext "[cgi_bold First] $ppg of $zoomed [cgi_span class="marked" marked] messages" } } else { set n [WPcomma $messagecount] if {[lindex [lindex $miv 0] 0] == 1} { set counttext "[cgi_bold First] $ppg of $n messages" } else { set l [lindex [lindex $miv end] 0] if {$l == $messagecount} { if {[set p [llength $miv]] == 1} { set lasttext "" } else { set lasttext " $p" } set counttext "[cgi_bold Last]${lasttext} of $n messages" } else { set counttext "Message [WPcomma $first] - [WPcomma $l] of $n" } } } cgi_table_data align=left class="context" "style=\"padding-left: 4\"" { cgi_unbreakable { cgi_put "${counttext}[cgi_breakable]${prevtext}" } } cgi_table_data align=right { cgi_unbreakable { if {[WPCmd PEInfo feature expunge-without-confirm-everywhere] || ([WPCmd PEInfo feature expunge-without-confirm] && [string compare [string tolower [WPCmd PEMailbox mailboxname]] inbox] == 0)} { set butname expunge cgi_text "emptyit=1" type=hidden notab } else { set butname queryexpunge } if {$aggops} { cgi_submit_button "mark=Mark All in Folder" class="navbutton" cgi_submit_button "unmark=Unmark All" class="navbutton" cgi_put [cgi_breakable] cgi_submit_button "setflag=Delete" class="navbutton" cgi_submit_button "setflag=Undelete" class="navbutton" if {([info exists _wp(spamaddr)] && [string length $_wp(spamaddr)]) || ([info exists _wp(spamfolder)] && [string length $_wp(spamfolder)])} { cgi_submit_button "spamit=Report Spam" class="navbutton" "style=\" color: white; background-color: black\"" } } cgi_submit_button "${butname}=Expunge" class="navbutton" } } } } cgi_text "page=index" type=hidden notab cgi_text "cid=$cid" type=hidden notab cgi_text "first=$first" type=hidden notab cgi_text "uid=0" type=hidden notab cgi_text "top=$top" type=hidden notab cgi_text "frestore=1" type=hidden notab cgi_text "submitted=0" type=hidden notab if {$aggops} { if {[llength $miv]} { foreach v $miv { lappend uv [lindex $v 1] } set uidpage [join $uv ","] } else { set uidpage "" } cgi_text "uidpage=${uidpage}" type=hidden notab if {$aggtabstate & $aggbar} { # commands cgi_table border=0 cellspacing=0 cellpadding=0 width="100%" class=ops { cgi_table_row { cgi_table_data height=1 "bgcolor=#000000" colspan=12 align=left { cgi_put [cgi_img [WPimg dot2] height=1] } } cgi_table_row { cgi_put "" cgi_table_data align=center valign=middle nowrap class=aggop width=30% { cgi_puts "
" cgi_puts "Search and Mark" cgi_submit_button "select=${selectverb}" class=aggop "style=\"vertical-align: middle; margin-right: 4\"" if {$zoomed} { cgi_submit_button "zoom=Show All Messages" class=aggop "style=\"vertical-align: middle\"" } else { cgi_submit_button "zoom=Show Only Marked" class=aggop "style=\"vertical-align: middle\"" } cgi_puts "
" } cgi_table_data align=center valign=middle nowrap class=aggop width=30% { cgi_puts "
" cgi_puts "Message Status" cgi_submit_button setflag=Set class=aggop "style=\"vertical-align:middle\"" cgi_put "[cgi_nbspace]status to " cgi_select flags class=aggop "style=\"vertical-align:middle\"" { #cgi_option Deleted value=delete #cgi_option Undeleted value=undeleted cgi_option New value=new selected cgi_option Read value=read cgi_option Important value=important cgi_option Unimportant value=unimportant cgi_option Answered value=answered cgi_option Unanswered value=unanswered } cgi_puts "
" } cgi_table_data align=center valign=middle class=aggop width=40% { cgi_puts "
" cgi_puts "Save Messages" # * * * * Save * * * * cgi_submit_button "save=Save" class=aggop "style=\"vertical-align:middle\"" cgi_put "[cgi_nbspace]to " set savedef [WPTFSaveDefault $uid] cgi_text f_colid=[lindex $savedef 0] type=hidden notab cgi_select f_name class=aggop "style=\"vertical-align:middle\"" "onchange=document.index.save.click(); return false;" { foreach {oname oval} [WPTFGetSaveCache [lindex $savedef 1]] { cgi_option $oname value=$oval } } #cgi_put "[cgi_nbspace]" #cgi_submit_button "save=OK" class=aggop "style=\"vertical-align:middle;margin-right:2\"" cgi_puts "
" } } cgi_table_row { cgi_table_data height=1 "bgcolor=#000000" colspan=12 { cgi_put [cgi_img [WPimg dot2] height=1] } } } } elseif {$aggtabstate & $sortbar} { # aggop bar cgi_table border=0 cellspacing=0 cellpadding=0 width="100%" class=ops { cgi_table_row { cgi_table_data height=1 "bgcolor=#000000" colspan=12 align=left { cgi_put [cgi_img [WPimg dot2] height=1] } } cgi_table_row { cgi_table_data { cgi_image_button aggon=[WPimg baropen] border=0 alt=\"Show Search/Save Commands\" } } cgi_table_row { cgi_table_data height=1 "bgcolor=#000000" colspan=12 { cgi_put [cgi_img [WPimg dot2] height=1] } } } } } cgi_table cellspacing=0 cellpadding=0 width="100%" class="itable" { if {$messagecount < 1} { # special case for mailbox with no messges cgi_table_row { cgi_table_data class=body valign=middle height=[expr {($ppg + 1) * $indexheight}] { cgi_center { cgi_puts [cgi_font size=+2 "\[Folder \"[WPCmd PEMailbox mailboxname]\" contains no messages\]"] } } } } else { # get the desired index item order and spacing set iformat [WPCmd PEMailbox indexformat] set colspan [expr {[llength $iformat] + 1}] # setup per-column layout parameters foreach fmt $iformat { if {[info exists oncethru]} { if {![info exists firstcell]} { set class icell0 set firstcell 1 } else { set class icell } append layout " $class " } set oncethru 1 switch -regexp -- [lindex $fmt 0] { [Ss]tatus { # fixed with "envelope" icon if {[string length [lindex $fmt 2]]} { set width "1%" } else { set width "42px" } } default { # proportion computed by pith (may be user specified) if {[regexp {[0123456789]+[%]} [lindex $fmt 1]]} { set width [lindex $fmt 1] } else { set width "1%" } } } append layout "$width" } append layout " icell0" #set doscrollbar [expr {($zoomed && $zoomed > $ppg) || (!$zoomed && $messagecount > $ppg)}] set linenum 1 # paint the index line column headers cgi_table_row class=\"gradient\" { if {($aggtabstate & $sortbar) == 0} { if {!([info exists headertab] && [string length $headertab])} { cgi_table_data class=indexhdr align=left width=48px background=[WPimg baropen_mid] { if {$aggops && ($aggtabstate & $aggbar) == 0} { cgi_image_button aggon=[WPimg baropen] border=0 alt=\"Show Search/Save Commands\" } cgi_image_button hdron=[WPimg baropen] border=0 alt=\"Show List Headers\" } foreach fmt $iformat {width class} $layout { cgi_table_data class=indexhdr align=left width=$width background=[WPimg baropen_mid] { cgi_put [cgi_img [WPimg dot2] height=1] } } } } else { if {$aggops} { cgi_table_data height=100% align=left valign=bottom class=indexhdr width=\"40px\" { cgi_table width=\"100%\" cellpadding=0 cellspacing=0 border=0 { cgi_table_row { cgi_table_data align=left valign=bottom { cgi_image_button hdroff=[WPimg barclose] border=0 "alt=\"Hide List Headers\"" } cgi_table_data align=center valign=middle "style=\"padding-right: 14px\"" { set marked 1 foreach v $miv { set u [lindex $v 1] if {$u == 0 || ![WPCmd PEMessage $u select]} { set marked 0 break } } if {$marked} { cgi_image_button unmark=[WPimg marknone3] border=0 alt=\"Unmark Messages on Page\" "onClick=return toggleMarks(this);" } else { cgi_image_button mark=[WPimg markall3] border=0 alt=\"Mark Messages on Page\" "onClick=return toggleMarks(this);" } } } } } } else { cgi_td class=indexhdr [cgi_nbspace] } set sorts [string tolower [WPCmd PEMailbox sortstyles]] foreach fmt $iformat {width class} $layout { set title [lindex $fmt 0] catch {unset sortlist} if {[lsearch -exact $sorts [string tolower $title]] >= 0} { if {[string compare [string tolower [lindex $currentsort 0]] [string tolower $title]] == 0} { lappend sortlist [list indexsort [sortname $title 1]] } else { lappend sortlist [list indexhdr [cgi_url [sortname $title] wp.tcl?page=index&sort[string tolower $title]=1 class=indexhdr title='Sort by $title' target=body]] } # special subject sort handling switch -regexp -- $title { [Ss]ubject { lappend extrasort OrderedSubj ; lappend extrasort Thread } [Ff]rom { lappend extrasort To } x[Dd]ate { lappend extrasort Arrival } } if {[info exists extrasort]} { foreach s $extrasort { lappend sortlist [list indexhdr [cgi_bold "|"]] # append text [cgi_nbspace][cgi_bold "|"][cgi_nbspace] if {[string compare [string tolower [lindex $currentsort 0]] [string tolower $s]] == 0} { if {[string compare [string tolower $s] thread] == 0} { set threadsort 1 } lappend sortlist [list indexsort [sortname $s 1]] } else { lappend sortlist [list indexhdr [cgi_url [sortname $s] wp.tcl?page=index&sort[string tolower $s]=1 class=indexhdr title='Sort by $s' target=body]] } } # clear for next time unset extrasort } } else { lappend sortlist [list indexhdr [sortname $title]] } cgi_table_data class=indexhdr valign=middle class=$class width="$width" { cgi_table border=0 cellspacing=0 cellpadding=2 { cgi_table_row { foreach s $sortlist { cgi_table_data class=[lindex $s 0] nowrap { cgi_puts [lindex $s 1] } } } } } } if {[info exists use_plus_minus_to_grow_shrink]} { # grow/shrink controls cgi_table_data class=indexhdr { cgi_image_button growpage=[WPimg plus2] height=12 border=0 alt="Grow" cgi_image_button shrinkpage=[WPimg minus2] height=12 border=0 alt="Shrink" } } } } if {$zoomed} { cgi_table_row { cgi_table_data class=marked0 colspan=$colspan align=center { cgi_puts "Unmarked Messages are NOT Shown - Click [cgi_url "Show All Messages" wp.tcl?page=body&zoom=0] to View All" #cgi_puts "Unmarked Messages Are Excluded From View" } } } # get ready to map thread images if {[string compare [string tolower [lindex $currentsort 0]] thread] == 0} { set barblank [WPThreadImageLink barblank $indexheight] set barvert [WPThreadImageLink barvert $indexheight] if {[lindex $currentsort 1]} { set barmsg [WPThreadImageLink ibarmsg $indexheight] } else { set barmsg [WPThreadImageLink barmsg $indexheight] } if {[lindex $currentsort 1]} { set barvertmsg [WPThreadImageLink ibarvertmsg $indexheight] } else { set barvertmsg [WPThreadImageLink barvertmsg $indexheight] } } foreach v $miv { set n [lindex $v 0] set u [lindex $v 1] set msg [lindex [lindex $v 2] 0] set linecolor [lindex [lindex $v 2] 1] set stat [lindex [lindex $v 2] 2] set statbits [lindex [lindex $v 2] 3] set class [lineclass [incr linenum]] if {$n > $messagecount} { break } if {[llength $linecolor] == 2 && [string compare [lindex $linecolor 0] [lindex $linecolor 1]]} { set style "color: #[lindex $linecolor 0] ; background-color: #[lindex $linecolor 1]" } else { set style "" } cgi_table_row class=$class "style=\"$style\"" { if {$u == 0} { cgi_table_data colspan=$colspan height=$indexheight { cgi_put "Data for message $n no longer available" } } else { if {$aggops} { cgi_table_data valign=middle align=center height=$indexheight { if {[WPCmd PEMessage $u select]} { set checked checked } else { set checked "" } cgi_checkbox "uidList=$u" $checked class=$class id=cb$u "style=\"$style; margin-left: 16\"" } } else { cgi_td height=$indexheight width=2% [cgi_nbspace] } set deleted [string index $stat 0] set recent [expr {[string range $stat 0 2] == "010"}] foreach part $msg fmt $iformat {width class} $layout { set align "" set onclick "" switch -exact -- [lindex $fmt 0] { Subject { set parttext "" set leading "" foreach p $part { switch -- [lindex $p 2] { threadinfo { append leading [lindex $p 0] regsub -all {[ ][ ]} $leading $barblank leading regsub -all {[|][-]} $leading $barvertmsg leading regsub -all {[\\][-]} $leading $barmsg leading regsub -all {[|]} $leading $barvert leading } xthreadinfo { set t [lindex $p 0] append leading "$t" for {set i 0} {$i < [string length $t]} {incr i} { switch -- [string index $t $i] { " " { append leading [WPThreadImageLink barblank $indexheight] } ">" { } "-" { if {[lindex $currentsort 1]} { append leading [WPThreadImageLink ibarmsg $indexheight] } else { append leading [WPThreadImageLink barmsg $indexheight] } } "|" { append leading [WPThreadImageLink barvert $indexheight] } } } } default { append parttext [index_part_color [index_quote [lindex $p 0]] [lindex $p 1]] } } } if {[string length [set label $parttext]] == 0} { set label {[Empty Subject]} } set text [cgi_url $label "fr_view.tcl?&uid=$u&c=[string range $cid 0 5]" target=$vtarget "onClick=return view($u)"] if {![info exists do_status_icons] && $deleted} { set text [cgi_span "style=text-decoration: line-through" $text] } set text [cgi_buffer { cgi_division "style=\"height: $indexheight; overflow: hidden;\"" { cgi_put "${leading}${text}" } }] } Status { if {[string length [lindex $fmt 2]]} { set text "" foreach i $part { regsub -all { } [lindex $i 0] {\ } statstr if {[llength [lindex $i 1]]} { append text [cgi_span "style=background-color: #[lindex [lindex $i 1] 1]; color: #[lindex [lindex $i 1] 0]" $statstr] } else { append text $statstr } } set text [cgi_buffer { cgi_division "style=\"font-family: monospace\"" { cgi_put $text } }] } elseif {[info exists do_status_icons]} { set text [WPStatusImg $u] } else { set text [lindex [WPStatusIcon $u gif $statbits] 2] set align align=center } if {$flagcmd} { set text [cgi_url $text fr_flags.tcl?uid=$u target=body] } } Size { set text [index_part_color [index_quote [lindex [lindex $part 0] 0]] [lindex $part 1]] set class isize set onclick "onclick=\"flipCheck('cb$u')\"" } Number { set text [index_part_color [index_quote [WPcomma [string trim [lindex [lindex $part 0] 0]]]] [lindex $part 1]] set onclick "onclick=\"flipCheck('cb$u')\"" } From - To { set t [index_quote [lindex [lindex $part 0] 0]] if {$recent} { set t [cgi_bold $t] } set text [cgi_buffer { cgi_division "style=\"height: $indexheight; overflow: hidden;\"" { cgi_put [index_part_color $t [lindex $part 1]] } }] set onclick "onclick=\"flipCheck('cb$u')\"" } default { set text [index_part_color [index_quote [lindex [lindex $part 0] 0]] [lindex $part 1]] set onclick "onclick=\"flipCheck('cb$u')\"" } } if {![info exists text]} { set text doh } cgi_td $align class="$class" $onclick "$text" } if {[info exists use_plus_minus_to_grow_shrink]} { cgi_td [cgi_nbspace] } } } } for {} {$linenum <= $ppg} {incr linenum} { cgi_table_row class="[lineclass [expr $linenum + 1]]" { cgi_table_data colspan=$colspan height=$indexheight { cgi_puts [cgi_nbspace] } } } } if {[info exists use_bottom_text_to_grow_shrink]} { cgi_table_row height=1 { cgi_table_data bgcolor=#000000 colspan=$colspan { cgi_put [cgi_img [WPimg blackdot] height=1] } } cgi_table_row { cgi_table_data align=center valign=middle colspan=$colspan class=indexhdr { cgi_put "[WPcomma $ppg] messages are in the list above. Press either " cgi_submit_button growpage=$growverb class=indexhdr "style=\"vertical-align:middle\"" cgi_put " or " cgi_submit_button shrinkpage=$shrinkverb class=indexhdr "style=\"vertical-align:middle\"" cgi_put " to change this by " cgi_select grownum class=indexhdr "style=\"vertical-align:middle\"" { set growsizes {1 5 10 25 50} if {[catch {WPCmd PEInfo set grownum} lastsize]} { set lastsize 0 } foreach size $growsizes { if {$size == $lastsize} { set sel selected } else { set sel "" } cgi_option $size value=$size $sel } } cgi_put "." } } } } } cgi_table width=100% cellpadding=0 cellspacing=0 border=0 { cgi_table_row { cgi_table_data align=left class=context { if {[info exists messagesremaining] && $messagesremaining > 0} { if {$messagesremaining > $ppg} { set moretext ", $ppg" } else { set moretext "" } if {$zoomed} { set marked " [cgi_bold marked]" } else { set marked "" } set nexttext " ([WPcomma $messagesremaining] more${marked} message[WPplural $messagesremaining]${moretext} on [cgi_url next wp.tcl?page=body&bod_next=1 "onClick=return flip('next')"] page)" } else { set nexttext "" } cgi_puts "[cgi_nbspace]${counttext}${nexttext}" } cgi_table_data align=right class=context { cgi_put "Powered by [cgi_url Alpine "http://www.washington.edu/alpine/" target="_blank"] - [cgi_copyright] 2007 University of Washington" if {[info exists _wp(ui2dir)]} { cgi_puts " - [cgi_url "Standard Version " "$_wp(serverpath)/$_wp(appdir)/$_wp(ui2dir)/browse" target=_top]" } } } } if {[info exists _wp(cumulative)]} { set l [string length $_wp(cumulative)] if {$l < 6} { set sl "." while {$l < 6} { append sl "0" incr l } append sl $_wp(cumulative) } else { set sl "[string range $_wp(cumulative) 0 [expr $l - 7]].[string range $_wp(cumulative) [expr $l - 6] end]" } set servlettime "servlet = $sl" if {[info exists wp_global_loadtime]} { set clickdiff [expr {[clock clicks] - $wp_global_loadtime}] # 500165 clicks/second set st [expr ([string range $clickdiff 0 [expr [string length $clickdiff] - 4]] * 1000) / 500] set l [string length $st] set scripttime "tcl = [string range $st 0 [expr $l - 4]].[string range $st [expr $l - 3] end], " } else { set scripttime "" } cgi_puts [cgi_font size=-2 "style=font-family:arial;font-weight:bold" "\[time: ${scripttime}${servlettime}\]"] } } } }