# $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_table_data align=center valign=middle nowrap class=aggop width=30% {
cgi_puts ""
}
cgi_table_data align=center valign=middle class=aggop width=40% {
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}\]"]
}
}
}
}