home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / scoadmin / root.3 / etc / mail / admin / vacation / vacation~
Text File  |  1998-08-19  |  21KB  |  689 lines

  1. #!/bin/osavtcl
  2. #******************************************************************************
  3. #
  4. #    Copyright (C) 1993-1997 The Santa Cruz Operation, Inc.
  5. #        All Rights Reserved.
  6. #
  7. #    The information in this file is provided for the exclusive use of
  8. #    the licensees of The Santa Cruz Operation, Inc.  Such users have the
  9. #    right to use, modify, and incorporate this code into other products
  10. #    for purposes authorized by the license agreement provided they include
  11. #    this notice and the associated copyright notice with any such product.
  12. #    The information in this file is provided "AS IS" without warranty.
  13. #
  14. #===============================================================================
  15. loadlibindex /usr/lib/sysadm.tlib
  16. proc SCO_MAIL_ADMIN_VACATION_MSGS {} {}
  17. global SCO_MAIL_ADMIN_VACATION_MSGS
  18. set SCO_MAIL_ADMIN_VACATION_MSGS(@catalog@) {vacation.cat@mail 1}
  19. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELPBOOK) {1 vacation}
  20. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_UNK_ARG) {2 {vacation: unknown argument \"%1$s\"}}
  21. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_TITLE) {3 {Vacation Notification}}
  22. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_SET) {4 {Set Vacation Notices}}
  23. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_NOTICE_ON) {5 On}
  24. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_NOTICE_OFF) {6 Off}
  25. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_DEFAULT) {7 Default}
  26. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_AKA_TITLE) {8 {Other mail addresses for <%1$s>}}
  27. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_AKA_ADD) {9 Add...}
  28. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_AKA_REMOVE) {10 Remove}
  29. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_NOTICE_TITLE) {11 {Notices Were Sent To:}}
  30. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_NOTICE_CLEAR) {12 {  Clear  }}
  31. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_SUBJECT) {13 {Notification Subject}}
  32. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_MESSAGE) {14 {Notification Message}}
  33. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_WANT_CLR_TITLE) {15 {Clear Notices?}}
  34. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_WANT_CLEARED) {16 {Do you wish to clear the Notices Sent list?}}
  35. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_YES) {17 Yes}
  36. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_NO) {18 No}
  37. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_AKA_ADD_TITLE) {19 {Add Other Address}}
  38. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_AKA_ADD_ADDRESS) {20 {Enter another mail address to be recognised as \"%1$s\":}}
  39. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_AKA_ADD_ADD) {21 Add}
  40. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_TRIPNOTE) {22 {\tThis is an automatic reply to email you recently sent\nto %1$s.  Additional mail to %1$s will not result in\nfurther replies.  This mail indicates that the user is not\nresponding to your message for the following reason:\n\n\tNo pre-recorded message file was left by the user.\nHowever, this feature of the mail system is normally used\nduring vacations and other extended absences.\n\n\tThe Mail System\n}}
  41. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_TRIPSUBJECT) {23 {Absence (Automatic reply)}}
  42. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_SUBJECT) {24 {You must enter a Notification Subject}}
  43. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_MESSAGE) {25 {You must enter a Notification Message}}
  44. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_SPACE) {26 {An address may not contain a space}}
  45. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_CANT_READ) {27 {Can't read file \"%1$s\".}}
  46. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_CANT_WRITE) {28 {Can't write file \"%1$s\".}}
  47. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_CANT_REMOVE) {29 {Can't remove file \"%1$s\".}}
  48. set SCO_MAIL_ADMIN_VACATION_MSGS(ERR_CANT_LOCK) {30 {Vacation preferences are already being edited.}}
  49. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_AKA_ADD) {31 {Press to add mail address(es)}}
  50. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_AKA_REMOVE) {32 {Press to remove the selected mail address}}
  51. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_AKA_LIST) {33 {The list of addresses which will be considered \"you\"}}
  52. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_NOTICE_CLEAR) {34 {Press this to erase the names from this list}}
  53. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_NOTICE_LIST) {35 {The list of addresses which were sent a notice}}
  54. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_MESSAGE) {36 {A message to send with each notification}}
  55. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_MESSAGE_DEFAULT) {37 {Press this to use the default notification message}}
  56. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_SUBJECT) {38 {The subject for each notification}}
  57. set SCO_MAIL_ADMIN_VACATION_MSGS(MSG_HELP_SUBJECT_DEFAULT) {39 {Press this to use the default notification subject}}
  58. set HOME $env(HOME)
  59. set rcvtrip_is_on 0
  60. set new_alteregos 0
  61. set asked 0
  62. set want_cleared 0
  63. set rcvtripPattern {^\*[     ]+-[     ]+(pipe|\|)[     ]+R[     ]+(/usr/bin/|)vacation[     ]*$}
  64. umask 077
  65. proc _quit { cbs } {
  66.     VtClose
  67.     exit
  68. }
  69. proc quit { cbs } {
  70.     global outerMainForm
  71.     VtDestroyDialog $outerMainForm
  72.     _quit $cbs
  73. }
  74. if {[catch {open $HOME/.maildelivery "a+"} fh] == 0} {
  75.     seek $fh 0 start
  76.     set scxt [scancontext create]
  77.         #{^\*[     ]+-[     ]+(pipe|\|)[     ]+R[     ]+vacation[     ]*$} {}
  78.     scanmatch $scxt\
  79.         "$rcvtripPattern" {
  80.             global rcvtrip_is_on
  81.             set rcvtrip_is_on 1
  82.         }
  83.     scanfile $scxt $fh
  84.     #close $fh            ;# We want to use this to lock the file...
  85.     scancontext delete $scxt
  86. }
  87. if {![flock -write -nowait $fh]} {
  88.     set app [VtOpen vacation [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_HELPBOOK]]
  89.     VtShow\
  90.         [VtErrorDialog $app.eb -ok -help\
  91.             -okCallback _quit\
  92.             -autoLock _quit\
  93.             -message [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_CANT_LOCK]]
  94.     VtMainLoop
  95.     exit 1
  96. }
  97. set argc [llength $argv]
  98. while {$argc > 0} {
  99.     set arg [lvarpop argv]
  100.     incr argc -1
  101.     if {$arg == "-query"} {
  102.         echo $rcvtrip_is_on
  103.         if {$rcvtrip_is_on} {
  104.             exit 0
  105.         } else {
  106.             exit 1
  107.         }
  108.     } else {
  109.         puts stderr [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_UNK_ARG $arg]
  110.         exit 1
  111.     }
  112. }
  113. proc read_file_as_list { fileName } {
  114.     set rlist {}
  115.     if {[catch {open $fileName "r"} fh] == 0} {
  116.         while {[gets $fh line] != -1} {
  117.             lappend rlist $line
  118.         }
  119.         close $fh
  120.     }
  121.     return $rlist
  122. }
  123. proc texterr { errmsg } {
  124.     global mainForm
  125.     VtUnLock
  126.     set errd\
  127.         [VtErrorDialog $mainForm.err\
  128.             -ok\
  129.             -message $errmsg]
  130.     VtShow $errd
  131. }
  132. proc cantread { name quit } {
  133.     global mainForm
  134.     VtUnLock
  135.     set errd\
  136.         [VtErrorDialog $mainForm.err\
  137.             -ok -help\
  138.             -message\
  139.                 [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_CANT_READ $name]]
  140.     if {$quit} {
  141.         VtSetValues $errd -okCallback quit -autoLock quit
  142.     }
  143.     VtShow $errd
  144. }
  145. proc cantwrite { name } {
  146.     global mainForm
  147.     VtUnLock
  148.     VtShow\
  149.         [VtErrorDialog $mainForm.err\
  150.             -ok -help\
  151.             -message\
  152.                 [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_CANT_WRITE $name]]
  153. }
  154. proc cantremove { name } {
  155.     global mainForm
  156.     VtUnLock
  157.     VtShow\
  158.         [VtErrorDialog $mainForm.err\
  159.             -ok -help\
  160.             -message\
  161.                 [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_CANT_REMOVE $name]]
  162. }
  163. proc ask_want_cleared_CB { what cbs } {
  164.     global    HOME asked
  165.     set parent [keylget cbs "dialog"]
  166.     VtDestroyDialog $parent
  167.     if {$what == "yes"} {
  168.         if {[catch {unlink $HOME/triplog} err] != 0} {
  169.             cantremove $HOME/triplog
  170.             VtUnLock
  171.             return
  172.         }
  173.     }
  174.     if {$what != "cancel"} {
  175.         set asked 1
  176.         vacDoneCB "OK" {} 0
  177.     }
  178.     VtUnLock
  179. }
  180. proc ask_want_cleared {} {
  181.     global mainForm
  182.     set form\
  183.         [VtFormDialog $mainForm.wantCleared\
  184.             -title [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_WANT_CLR_TITLE]\
  185.             -help\
  186.             -okLabel [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_YES]\
  187.             -okCallback {ask_want_cleared_CB yes}\
  188.             -autoLock ask_want_cleared_CB\
  189.             -applyLabel [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_NO]\
  190.             -applyCallback {ask_want_cleared_CB no}\
  191.             -cancelCallback {ask_want_cleared_CB cancel}]
  192.     VtLabel $form.message\
  193.             -rightSide FORM\
  194.             -bottomSide FORM\
  195.             -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_WANT_CLEARED]
  196.     VtShow $form
  197.     VtUnLock
  198. }
  199. proc clearCB { cbs } {
  200.     global noticesList clearPB want_cleared
  201.     set want_cleared 1
  202.     VtListDeleteItem $noticesList -all
  203.     VtSetSensitive $clearPB 0
  204.     VtUnLock
  205. }
  206. proc subjectDefaultCB { cbs } {
  207.     global noticeSubject
  208.     VtSetValues $noticeSubject -value [IntlLocalizeMsg \
  209.         SCO_MAIL_ADMIN_VACATION_MSG_TRIPSUBJECT]
  210.     VtUnLock
  211. }
  212. proc messageDefaultCB { cbs } {
  213.     global noticeMessage
  214.     VtSetValues $noticeMessage -value [IntlLocalizeMsg \
  215.         SCO_MAIL_ADMIN_VACATION_MSG_TRIPNOTE [id user]]
  216.     VtUnLock
  217. }
  218. proc vacDoneCB { what cbs {doUnlock 1} } {
  219.     global HOME orig_msgtext orig_subjtext rcvtripPattern
  220.     global mainForm noticeSubject noticeMessage noticesOn clearPB akaList 
  221.     global rcvtrip_is_on new_alteregos want_cleared asked
  222.     if {$what == "OK"} {
  223.         set onOff [VtGetValues $noticesOn -set]
  224.       ## First, check that tripsubject and tripnote aren't empty
  225.         set subjtext [VtGetValues $noticeSubject -value]
  226.         if {$subjtext == "" || [ctype space $subjtext]} {
  227.             texterr [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_SUBJECT]
  228.             VtSetFocus $noticeSubject
  229.             if {$doUnlock} {
  230.                 VtUnLock
  231.             }
  232.             return
  233.         }
  234.         set msgtext [VtGetValues $noticeMessage -value]
  235.         if {$msgtext == "" || [ctype space $msgtext]} {
  236.             texterr [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_MESSAGE]
  237.             VtSetFocus $noticeMessage
  238.             if {$doUnlock} {
  239.                 VtUnLock
  240.             }
  241.             return
  242.         }
  243.       ## Next, if requested, nuke the triplog file
  244.         if {$want_cleared && [file exists $HOME/triplog]} {
  245.             if {[catch {unlink $HOME/triplog} err] != 0} {
  246.                 cantremove $HOME/triplog
  247.                 if {$doUnlock} {
  248.                     VtUnLock
  249.                 }
  250.                 return
  251.             }
  252.         }
  253.         if {!$asked && \
  254.             $onOff != $rcvtrip_is_on && \
  255.             [file exists $HOME/triplog] && \
  256.             [file size $HOME/triplog] > 0} {
  257.             ask_want_cleared
  258.             if {$doUnlock} {
  259.                 VtUnLock
  260.             }
  261.             return
  262.         }
  263.       ## Next, save the tripsubject text (if it's changed)
  264.         if {$subjtext != $orig_subjtext} {
  265.             if {[catch {write_file $HOME/tripsubject $subjtext} err] != 0} {
  266.                 cantwrite $HOME/tripsubject
  267.                 if {$doUnlock} {
  268.                     VtUnLock
  269.                 }
  270.                 return
  271.             }
  272.         }
  273.       ## Next, save the tripnote text (if it's changed)
  274.         if {$msgtext != $orig_msgtext} {
  275.             if {[catch {write_file $HOME/tripnote $msgtext} err] != 0} {
  276.                 cantwrite $HOME/tripnote
  277.                 if {$doUnlock} {
  278.                     VtUnLock
  279.                 }
  280.                 return
  281.             }
  282.         }
  283.       ## Next, save the new alter-egos list (if there is one)
  284.         if {$new_alteregos} {
  285.             if {[catch {open $HOME/.alter_egos "w"} fh] != 0} {
  286.                 cantwrite $HOME/.alter_egos
  287.                 if {$doUnlock} {
  288.                     VtUnLock
  289.                 }
  290.                 return
  291.             }
  292.             set user [id user]
  293.             set egoList [VtListGetItem $akaList -all]
  294.             if {[lsearch $egoList $user] == -1} {
  295.                 lappend egoList $user
  296.             }
  297.             foreach ego [lsort $egoList] {
  298.                 puts $fh $ego
  299.             }
  300.             close $fh
  301.         }
  302.       ## Finally, turn rcvtrip ON or OFF by editing $HOME/.maildelivery
  303.         if {$onOff && !$rcvtrip_is_on} {
  304.           ## Create an empty triplog file if needed
  305.             if {$onOff && ![file exists $HOME/triplog]} {
  306.                 # If we're turning notices ON,
  307.                 # the triplog file must exist
  308.                 if {[catch {open $HOME/triplog "w"} fh] != 0} {
  309.                     cantwrite $HOME/triplog
  310.                     if {$doUnlock} {
  311.                         VtUnLock
  312.                     }
  313.                     return
  314.                 }
  315.                 close $fh
  316.             }
  317.             if {[catch {open $HOME/.maildelivery "a"} fh] != 0} {
  318.                 cantwrite $HOME/.maildelivery
  319.                 if {$doUnlock} {
  320.                     VtUnLock
  321.                 }
  322.                 return
  323.             }
  324.             puts $fh {*    -    pipe    R    vacation}
  325.             close $fh
  326.         } elseif {!$onOff && $rcvtrip_is_on} {
  327.             if {[catch {open $HOME/.maildelivery "r"} fh] != 0} {
  328.                 cantread $HOME/.maildelivery 0
  329.                 if {$doUnlock} {
  330.                     VtUnLock
  331.                 }
  332.                 return
  333.             }
  334.             close $fh
  335.             set mailDelLines [read_file_as_list $HOME/.maildelivery]
  336.             if {[catch {open $HOME/.maildelivery "w"} fh] != 0} {
  337.                 cantwrite $HOME/.maildelivery
  338.                 if {$doUnlock} {
  339.                     VtUnLock
  340.                 }
  341.                 return
  342.             }
  343.             foreach line $mailDelLines {
  344.                 if {![regexp "$rcvtripPattern" $line]} {
  345.                     puts $fh $line
  346.                 }
  347.             }
  348.             close $fh
  349.         }
  350.     }
  351.     quit {}
  352. }
  353. proc akaAddDone { isOK doClose cbs } {
  354.     global    akaList akaRemove new_alteregos
  355.     set parent [keylget cbs "dialog"]
  356.     set address [VxGetVar $parent "address"]
  357.     set mailAddress [string trim [VtGetValues $address -value]]
  358.     if {$isOK && $mailAddress != ""} {
  359.         if {[regexp {[     ]} $mailAddress]} {
  360.             texterr [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_ERR_SPACE]
  361.             VtSetFocus $address
  362.             VtUnLock
  363.             return
  364.         }
  365.         set currentList [VtListGetItem $akaList -all]
  366.         if {[lsearch -exact $currentList $mailAddress] == -1} {
  367.             VtListAddItem $akaList -item $mailAddress
  368.             if {[lempty $currentList]} {
  369.                 VtSetSensitive $akaRemove 1
  370.             }
  371.         }
  372.         VtListSelectItem $akaList -item $mailAddress
  373.         SaListShowSelectedItem $akaList
  374.         set new_alteregos 1
  375.     }
  376.     if {$doClose} {
  377.         VtDestroyDialog $parent
  378.     } else {
  379.         VtSetValues $address -value ""
  380.     }
  381.     VtUnLock
  382. }
  383. proc akaAddCB { cbs } {
  384.     set parent [keylget cbs "dialog"]
  385.     set akaAddForm\
  386.         [VtFormDialog $parent.AddForm\
  387.             -help\
  388.             -autoLock akaAddDone\
  389.             -okCallback {akaAddDone 1 1}\
  390.             -cancelCallback {akaAddDone 0 1}\
  391.             -wmCloseCallback {akaAddDone 0 1}\
  392.             -title [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_AKA_ADD_TITLE]]
  393.     set address\
  394.         [VxText $akaAddForm.address\
  395.             -rightSide FORM\
  396.             -bottomSide FORM\
  397.             -title [IntlLocalizeMsg\
  398.                         SCO_MAIL_ADMIN_VACATION_MSG_AKA_ADD_ADDRESS [id user]]\
  399.             -callback {SaSetFocus next}]
  400.     VxSetVar $akaAddForm "address" $address
  401.     set okButton [VtGetValues $akaAddForm -ok]
  402.     SaSetFocusList $akaAddForm [list\
  403.         $address\
  404.         $okButton]
  405.     VtShow $akaAddForm
  406.     VtSetFocus $address
  407.     VtUnLock
  408. }
  409. proc akaRemoveCB { cbs } {
  410.     global    akaList akaRemove new_alteregos
  411.     set parent [keylget cbs "dialog"]
  412.     set posList [VtListGetSelectedItem $akaList -byPositionList]
  413.     if {$posList != 0} {
  414.         set prevTotal [llength [VtListGetItem $akaList -all]]
  415.         VtListDeleteItem $akaList -positionList $posList
  416.         set new_alteregos 1
  417.         set numLeft [llength [VtListGetItem $akaList -all]]
  418.         if {$numLeft > 0} {
  419.             # the list has selection BROWSE, so only one was deleted
  420.             set deleted [lindex $posList end]
  421.             if {$deleted == $prevTotal} {
  422.                 VtListSelectItem $akaList -position 0
  423.             } else {
  424.                 VtListSelectItem $akaList -position $deleted
  425.             }
  426.         } else {
  427.             VtSetSensitive $akaRemove 0
  428.         }
  429.     }
  430.     VtUnLock
  431. }
  432. proc mainErrorCB { cbs } {
  433.     VtClose
  434.     exit 255
  435. }
  436. ErrorTopLevelCatch {
  437. set app [VtOpen vacation [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_HELPBOOK]]
  438. VtSetAppValues $app -errorCallback {SaUnexpectedErrorCB mainErrorCB}
  439. set outerMainForm\
  440.     [VtFormDialog $app.main\
  441.         -marginWidth 0\
  442.         -marginHeight 0\
  443.         -help\
  444.         -okCallback { vacDoneCB OK }\
  445.         -autoLock vacDoneCB\
  446.         -cancelCallback { vacDoneCB Cancel }\
  447.         -wmCloseCallback { vacDoneCB Cancel }\
  448.         -title [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_TITLE]]
  449. set mainForm [VtForm $outerMainForm.mainForm -rightSide FORM]
  450. if {$rcvtrip_is_on} {
  451.     set on 1
  452.     set off 0
  453. } else {
  454.     set on 0
  455.     set off 1
  456. }
  457. set onOffForm\
  458.     [VtForm $mainForm.onOffForm\
  459.         -topSide FORM\
  460.         -MOTIF_topOffset 10\
  461.         -leftSide FORM\
  462.         -borderWidth 1]
  463. set onOffLabel\
  464.     [VtLabel $onOffForm.onOffLabel\
  465.         -topSide FORM\
  466.         -rightSide FORM\
  467.         -MOTIF_rightOffset 10\
  468.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_SET]\
  469.         -labelLeft]
  470. set onOff\
  471.     [VtRadioBox $onOffForm.onOff\
  472.         -topSide $onOffLabel\
  473.         -leftSide FORM\
  474.         -rightSide FORM\
  475.         -bottomSide FORM\
  476.         -MOTIF_bottomOffset 7\
  477.         -horizontal]
  478. set noticesOn\
  479.     [VtToggleButton $onOff.On\
  480.         -set $on\
  481.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_NOTICE_ON]]
  482. set noticesOff\
  483.     [VtToggleButton $onOff.Off\
  484.         -set $off\
  485.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_NOTICE_OFF]]
  486. set akaLabel\
  487.     [VtLabel $mainForm.akaLabel\
  488.         -leftSide $onOffForm\
  489.         -MOTIF_leftOffset 20 -CHARM_leftOffset 1\
  490.         -topSide FORM\
  491.         -label [IntlLocalizeMsg\
  492.                     SCO_MAIL_ADMIN_VACATION_MSG_AKA_TITLE [id user]]]
  493. set akaForm [VtForm $mainForm.aka\
  494.         -alignLeft $akaLabel\
  495.         -topSide $akaLabel\
  496.         -topOffset 0\
  497.         -rightSide FORM\
  498.         -marginWidth 0 -marginHeight 0]
  499. set akaRC\
  500.     [VtRowColumn $akaForm.rc\
  501.         -leftSide NONE\
  502.         -rightSide FORM\
  503.         -topSide FORM\
  504.         -CHARM_topOffset 0\
  505.         -bottomSide FORM\
  506.         -vertical]
  507. set akaAdd\
  508.     [VtPushButton $akaRC.Add\
  509.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_AKA_ADD]\
  510.         -shortHelpCallback SaShortHelpCB\
  511.         -shortHelpString\
  512.             [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_HELP_AKA_ADD]\
  513.         -callback akaAddCB\
  514.         -autoLock akaAddCB]
  515. set akaRemove\
  516.     [VtPushButton $akaRC.Remove\
  517.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_AKA_REMOVE]\
  518.         -shortHelpCallback SaShortHelpCB\
  519.         -shortHelpString\
  520.             [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_HELP_AKA_REMOVE]\
  521.         -callback akaRemoveCB\
  522.         -autoLock akaRemoveCB]
  523. set list [read_file_as_list $HOME/.alter_egos]
  524. set akaList\
  525.     [VtList $akaForm.List\
  526.         -leftSide FORM\
  527.         -rightSide $akaRC\
  528.         -topSide FORM -MOTIF_topOffset 0 -CHARM_topOffset 0\
  529.         -bottomSide FORM\
  530.         -shortHelpCallback SaShortHelpCB\
  531.         -shortHelpString\
  532.             [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_HELP_AKA_LIST]\
  533.         -MOTIF_rows 3\
  534.         -CHARM_rows 1\
  535.         -itemList $list]
  536. if {[lempty $list]} {
  537.     VtSetSensitive $akaRemove 0
  538. }
  539. VtSeparator $mainForm._ -MOTIF_topOffset 7 -leftSide FORM -rightSide FORM
  540. set noticesLabel\
  541.     [VtLabel $mainForm.noticesL\
  542.         -MOTIF_topOffset 7 -CHARM_topOffset 0\
  543.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_NOTICE_TITLE]]
  544. set noticesForm\
  545.     [VtForm $mainForm.noticesF\
  546.         -topOffset 0\
  547.         -rightSide FORM\
  548.         -marginWidth 0 -marginHeight 0]
  549. set clearPB\
  550.     [VtPushButton $noticesForm.clearPB\
  551.         -leftSide NONE\
  552.         -rightSide FORM\
  553.         -CHARM_topOffset 2\
  554.         -MOTIF_bottomSide FORM\
  555.         -shortHelpCallback SaShortHelpCB\
  556.         -shortHelpString\
  557.             [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_HELP_NOTICE_CLEAR]\
  558.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_NOTICE_CLEAR]\
  559.         -callback clearCB\
  560.         -autoLock clearCB]
  561. set list {}
  562. foreach line [read_file_as_list $HOME/triplog] {
  563.     lappend list [format "%.65s" $line]
  564. }
  565. set noticesList\
  566.     [VtList $noticesForm.List\
  567.         -leftSide FORM\
  568.         -rightSide $clearPB\
  569.         -topSide FORM\
  570.         -bottomSide FORM\
  571.         -shortHelpCallback SaShortHelpCB\
  572.         -shortHelpString\
  573.             [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_HELP_NOTICE_LIST]\
  574.         -MOTIF_rows 3\
  575.         -CHARM_rows 2\
  576.         -itemList $list]
  577. VtAddTabGroup $clearPB
  578. if {[lempty $list]} {
  579.     VtSetSensitive $clearPB 0
  580. }
  581. set subjtext [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_TRIPSUBJECT]
  582. if {[file exists $HOME/tripsubject]} {
  583.     if {[catch {read_file -nonewline $HOME/tripsubject} subjtext] != 0} {
  584.         cantread $HOME/tripsubject 1
  585.         VtMainLoop
  586.         exit 1
  587.     }
  588.     set orig_subjtext "$subjtext"
  589. } else {
  590.     set orig_subjtext ""
  591. }
  592. set noticeSubjectLabel\
  593.     [VtLabel $mainForm.subjectLabel\
  594.         -MOTIF_topOffset 7\
  595.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_SUBJECT]]
  596. set noticeSubjectForm\
  597.     [VtForm $mainForm.subjectForm\
  598.         -topSide $noticeSubjectLabel\
  599.         -topOffset 0\
  600.         -marginHeight 0 -marginWidth 0\
  601.         -leftSide FORM\
  602.         -rightSide FORM]
  603. set noticeSubjectDefault\
  604.     [VtPushButton $noticeSubjectForm.subjectDefault\
  605.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_DEFAULT]\
  606.         -topSide NONE\
  607.         -bottomSide FORM\
  608.         -leftSide NONE\
  609.         -rightSide FORM\
  610.         -shortHelpCallback SaShortHelpCB\
  611.         -shortHelpString [IntlLocalizeMsg \
  612.             SCO_MAIL_ADMIN_VACATION_MSG_HELP_SUBJECT_DEFAULT]\
  613.         -callback subjectDefaultCB\
  614.         -autoLock subjectDefaultCB]
  615. VtAddTabGroup $noticeSubjectDefault
  616. set noticeSubject\
  617.     [VxText $noticeSubjectForm.subjectText\
  618.         -topSide FORM\
  619.         -topOffset 0\
  620.         -bottomSide NONE\
  621.         -rightSide $noticeSubjectDefault\
  622.         -shortHelpCallback SaShortHelpCB\
  623.         -shortHelpString [IntlLocalizeMsg\
  624.             SCO_MAIL_ADMIN_VACATION_MSG_HELP_SUBJECT]\
  625.         -rows 1\
  626.         -MOTIF_columns 70\
  627.         -CHARM_columns 61\
  628.         -value $subjtext]
  629. set msgtext [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_TRIPNOTE [id user]]
  630. if {[file exists $HOME/tripnote]} {
  631.     if {[catch {read_file -nonewline $HOME/tripnote} msgtext] != 0} {
  632.         cantread $HOME/tripnote 1
  633.         VtMainLoop
  634.         exit 1
  635.     }
  636.     set orig_msgtext "$msgtext"
  637. } else {
  638.     set orig_msgtext ""
  639. }
  640. set noticeMessageLabel\
  641.     [VtLabel $mainForm.messageLabel\
  642.         -topSide $noticeSubjectForm\
  643.         -MOTIF_topOffset 7 -CHARM_topOffset 1\
  644.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_MESSAGE]]
  645. set noticeMessageForm\
  646.     [VtForm $mainForm.messageForm\
  647.         -topSide $noticeMessageLabel\
  648.         -topOffset 0\
  649.         -marginHeight 0 -marginWidth 0\
  650.         -leftSide FORM\
  651.         -rightSide FORM\
  652.         -bottomSide FORM]
  653. set noticeMessageDefault\
  654.     [VtPushButton $noticeMessageForm.messageDefault\
  655.         -label [IntlLocalizeMsg SCO_MAIL_ADMIN_VACATION_MSG_DEFAULT]\
  656.         -topSide NONE\
  657.         -bottomSide FORM\
  658.         -leftSide NONE\
  659.         -rightSide FORM\
  660.         -shortHelpCallback SaShortHelpCB\
  661.         -shortHelpString [IntlLocalizeMsg \
  662.             SCO_MAIL_ADMIN_VACATION_MSG_HELP_MESSAGE_DEFAULT]\
  663.         -callback messageDefaultCB\
  664.         -autoLock messageDefaultCB]
  665. VtAddTabGroup $noticeMessageDefault
  666. set noticeMessage\
  667.     [VxText $noticeMessageForm.message\
  668.         -topSide FORM\
  669.         -bottomSide FORM\
  670.         -rightSide $noticeMessageDefault\
  671.         -shortHelpCallback SaShortHelpCB\
  672.         -shortHelpString [IntlLocalizeMsg\
  673.              SCO_MAIL_ADMIN_VACATION_MSG_HELP_MESSAGE]\
  674.         -MOTIF_rows 3\
  675.         -CHARM_rows 2\
  676.         -verticalScrollBar 1\
  677.         -MOTIF_columns 70\
  678.         -CHARM_columns 61\
  679.         -value $msgtext]
  680. set statusBar [SaStatusBar $outerMainForm.StatusBar 0]
  681. set sep [VtSeparator $outerMainForm._\
  682.             -leftSide FORM -rightSide FORM\
  683.             -topSide NONE -bottomSide $statusBar]
  684. VtSetValues $mainForm -bottomSide $sep
  685. VtShow $outerMainForm
  686. VtSetFocus $onOff
  687. VtMainLoop
  688. } "Extended Absense Client"
  689.