| 1 | XMA30 ;ISC-SF/GMB-XMCLEAN, XMAUTOPURGE (cont.) ;01/08/2003  10:04
 | 
|---|
| 2 |  ;;8.0;MailMan;**10,13**;Jun 28, 2002
 | 
|---|
| 3 |  ; Was (WASH ISC)/CAP
 | 
|---|
| 4 | AUDIT ; Lists data from previous purges
 | 
|---|
| 5 |  N XMLIEN,XMREC,XMSTART,XMEND,XMLEFT,XMPURGE,XMTYPE,XMABORT
 | 
|---|
| 6 |  S XMABORT=0
 | 
|---|
| 7 |  W @IOF
 | 
|---|
| 8 |  D BLD^DIALOG(36432,"","","XMTEXT","F")
 | 
|---|
| 9 |  D MSG^DIALOG("WM","","","","XMTEXT")
 | 
|---|
| 10 |  ;It's a good idea to look these over.
 | 
|---|
| 11 |  ;Look for multiple purges running concurrently and missing purge dates.
 | 
|---|
| 12 |  ;Check the times the purge ended - do they conflict with user activity?
 | 
|---|
| 13 |  W !
 | 
|---|
| 14 |  D AHDR
 | 
|---|
| 15 |  S XMLIEN=0
 | 
|---|
| 16 |  F  S XMLIEN=$O(^XMB(1,1,.1,XMLIEN)) Q:XMLIEN'>0  D  Q:XMABORT
 | 
|---|
| 17 |  . I $Y+3>IOSL D  Q:XMABORT
 | 
|---|
| 18 |  . . I $E(IOST,1,2)="C-" D PAGE^XMXUTIL(.XMABORT) Q:XMABORT
 | 
|---|
| 19 |  . . W @IOF D AHDR
 | 
|---|
| 20 |  . S XMREC=^XMB(1,1,.1,XMLIEN,0)
 | 
|---|
| 21 |  . S XMSTART=$E($P(XMREC,U),1,12)
 | 
|---|
| 22 |  . S XMLEFT=$P(XMREC,U,2)
 | 
|---|
| 23 |  . S XMPURGE=$P(XMREC,U,3)
 | 
|---|
| 24 |  . S XMTYPE=$P(XMREC,U,6)
 | 
|---|
| 25 |  . S XMEND=$E($P(XMREC,U,8),1,12)
 | 
|---|
| 26 |  . I XMTYPE="",'XMEND D  ; To handle old data before XM*7.1*37
 | 
|---|
| 27 |  . . S XMEND=XMSTART
 | 
|---|
| 28 |  . . K XMSTART
 | 
|---|
| 29 |  . W !,$$EZBLD^DIALOG($S(+XMTYPE=0:36433,XMTYPE=1:36434,1:36435)) ; "Unref Msg" / "Date" / "Test Date"
 | 
|---|
| 30 |  . W ?12,$S($D(XMSTART):$J($$FMTE^XLFDT(XMSTART,5),16),1:""),$J($$FMTE^XLFDT(XMEND,5),18)
 | 
|---|
| 31 |  . I $D(XMSTART),XMEND>XMSTART W $J($$FMDIFF^XLFDT(XMEND,XMSTART,3),10)
 | 
|---|
| 32 |  . W ?58,$J(XMPURGE,9),$J(XMLEFT,12)
 | 
|---|
| 33 |  Q
 | 
|---|
| 34 | AHDR ;
 | 
|---|
| 35 |  N XMTEXT
 | 
|---|
| 36 |  D BLD^DIALOG(36436,"","","XMTEXT","F")
 | 
|---|
| 37 |  D MSG^DIALOG("WM","",IOM,"","XMTEXT")
 | 
|---|
| 38 |  W !
 | 
|---|
| 39 |  ;MailMan Purge History
 | 
|---|
| 40 |  ;Type             Start             End         Duration      Purged         Kept
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 | USERSTAT ; Display statistics
 | 
|---|
| 43 |  N DIR,Y,XMTYPE,ZTSAVE,XMVAR,XMTEXT,XMDIALOG,XMI
 | 
|---|
| 44 |  W !
 | 
|---|
| 45 |  S XMVAR(2)=$O(^XMB(3.9,":"),-1) ; highest
 | 
|---|
| 46 |  S XMVAR(1)=$J($O(^XMB(3.9,0)),$L(XMVAR(2))) ; lowest
 | 
|---|
| 47 |  S XMVAR(3)=$J($P($G(^XMB(3.9,0)),U,4),$L(XMVAR(2))) ; how many
 | 
|---|
| 48 |  D BLD^DIALOG(36437,.XMVAR,"","XMTEXT","F")
 | 
|---|
| 49 |  D MSG^DIALOG("WM","","","","XMTEXT")
 | 
|---|
| 50 |  ;Lowest numbered message:  |1|
 | 
|---|
| 51 |  ;Highest numbered message: |2|
 | 
|---|
| 52 |  ;Number of messages:       |3|
 | 
|---|
| 53 |  D BLD^DIALOG(36438,"","","DIR(""A"")") ; Scan Option
 | 
|---|
| 54 |  ;A:Active Mailboxes;I:Inactive Mailboxes;M:All Mailboxes"
 | 
|---|
| 55 |  S DIR(0)="S^"
 | 
|---|
| 56 |  F XMI=36439.1,36439.2,36439.3 D
 | 
|---|
| 57 |  . S XMDIALOG(XMI)=$$EZBLD^DIALOG(XMI)
 | 
|---|
| 58 |  . S DIR(0)=DIR(0)_XMDIALOG(XMI)_";"
 | 
|---|
| 59 |  S DIR(0)=$E(DIR(0),1,$L(DIR(0))-1)
 | 
|---|
| 60 |  S DIR("B")=$P(XMDIALOG(36439.1),":",2) ; Active Mailboxes
 | 
|---|
| 61 |  D ^DIR Q:$D(DIRUT)
 | 
|---|
| 62 |  S XMI=0 F  S XMI=$O(XMDIALOG(XMI)) Q:$P(XMDIALOG(XMI),":",1)=Y
 | 
|---|
| 63 |  S XMTYPE=$S(XMI=36439.1:"A",XMI=36439.2:"I",1:"M")
 | 
|---|
| 64 |  S XMTYPE("DESC")=$P(XMDIALOG(XMI),":",2)
 | 
|---|
| 65 |  S ZTSAVE("XMTYPE")="",ZTSAVE("XMTYPE(")=""
 | 
|---|
| 66 |  D EN^XUTMDEVQ("DOSTATS^XMA30",$$EZBLD^DIALOG(36440),.ZTSAVE) ; MailMan: User Mailbox Statistics
 | 
|---|
| 67 |  Q
 | 
|---|
| 68 | DOSTATS ;
 | 
|---|
| 69 |  N XMTODAY,XMPAGE,XMABORT,XMDUZ,XMK,XMINCNT,XMZCNT,XMKCNT,XMBOXCNT,XMLMAIL,XMNAME,XMREC,XMSTAT,XMLSIGN,XMINACT
 | 
|---|
| 70 |  S XMTODAY=$$FMTE^XLFDT(DT,5),(XMPAGE,XMABORT,XMBOXCNT)=0
 | 
|---|
| 71 |  S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 72 |  W:$E(IOST,1,2)="C-" @IOF D SHDR(XMTODAY,.XMPAGE)
 | 
|---|
| 73 |  S XMNAME="",XMINACT=$$EZBLD^DIALOG(36441) ; "Inactive"
 | 
|---|
| 74 |  F  S XMNAME=$O(^VA(200,"B",XMNAME)) Q:XMNAME=""  D  Q:XMABORT
 | 
|---|
| 75 |  . S XMDUZ=0
 | 
|---|
| 76 |  . F  S XMDUZ=$O(^VA(200,"B",XMNAME,XMDUZ)) Q:XMDUZ=""  D  Q:XMABORT
 | 
|---|
| 77 |  . . Q:'$D(^XMB(3.7,XMDUZ))
 | 
|---|
| 78 |  . . S XMREC=$G(^VA(200,XMDUZ,0))
 | 
|---|
| 79 |  . . I $P(XMREC,U,3)="" Q:XMTYPE="A"  S XMSTAT=XMINACT
 | 
|---|
| 80 |  . . E  I XMTYPE="I" Q
 | 
|---|
| 81 |  . . E  S XMSTAT=""
 | 
|---|
| 82 |  . . I $Y+3>IOSL D  Q:XMABORT
 | 
|---|
| 83 |  . . . I $E(IOST,1,2)="C-" D PAGE^XMXUTIL(.XMABORT) Q:XMABORT
 | 
|---|
| 84 |  . . . W @IOF D SHDR(XMTODAY,.XMPAGE)
 | 
|---|
| 85 |  . . S XMBOXCNT=XMBOXCNT+1
 | 
|---|
| 86 |  . . W !,$E($$NAME^XMXUTIL(XMDUZ),1,30)
 | 
|---|
| 87 |  . . S XMK=.9,(XMINCNT,XMZCNT)=0
 | 
|---|
| 88 |  . . F XMKCNT=1:1 S XMK=$O(^XMB(3.7,XMDUZ,2,XMK)) Q:XMK'>0  D
 | 
|---|
| 89 |  . . . D:'$D(^XMB(3.7,XMDUZ,2,XMK,1,0)) MAKENODE
 | 
|---|
| 90 |  . . . I XMK=1 S XMINCNT=+$P($G(^XMB(3.7,XMDUZ,2,XMK,1,0)),U,4),XMZCNT=XMINCNT Q
 | 
|---|
| 91 |  . . . S XMZCNT=XMZCNT+$P($G(^XMB(3.7,XMDUZ,2,XMK,1,0)),U,4)
 | 
|---|
| 92 |  . . S XMLSIGN=$P($G(^VA(200,XMDUZ,1.1)),U)
 | 
|---|
| 93 |  . . S XMLSIGN=$S(XMSTAT'="":XMSTAT,'XMLSIGN:$$EZBLD^DIALOG(38002),1:$J($$MMDT^XMXUTIL1($P(XMLSIGN,".")),8)) ; Never
 | 
|---|
| 94 |  . . S XMLMAIL=$P($G(^XMB(3.7,XMDUZ,"L")),U)
 | 
|---|
| 95 |  . . S XMLMAIL=$S(XMLMAIL["@":$P(XMLMAIL,"@"),1:$P(XMLMAIL," ",1,3))
 | 
|---|
| 96 |  . . W ?30,$J(XMKCNT,4),$J(XMZCNT,7),$J(XMINCNT,8),?53,XMLSIGN,?67,$S($L(XMLMAIL):XMLMAIL,1:$$EZBLD^DIALOG(38002)) ; Never
 | 
|---|
| 97 |  Q:XMABORT
 | 
|---|
| 98 |  W !!,XMTYPE("DESC"),": ",XMBOXCNT
 | 
|---|
| 99 |  I $E(IOST,1,2)="C-" D WAIT^XMXUTIL
 | 
|---|
| 100 |  Q
 | 
|---|
| 101 | MAKENODE ; Create the zero node for the message multiple
 | 
|---|
| 102 |  N XMCNT,XMZ
 | 
|---|
| 103 |  Q:'$O(^XMB(3.7,XMDUZ,2,XMK,1,0))
 | 
|---|
| 104 |  S (XMZ,XMCNT)=0
 | 
|---|
| 105 |  F  S XMZ=$O(^XMB(3.7,XMDUZ,2,XMK,1,XMZ)) Q:XMZ'>0  S XMCNT=XMCNT+1
 | 
|---|
| 106 |  S ^XMB(3.7,XMDUZ,2,XMK,1,0)="^3.702P^"_+$O(^XMB(3.7,XMDUZ,2,XMK,1,"C"),-1)_U_XMCNT
 | 
|---|
| 107 |  Q
 | 
|---|
| 108 | SHDR(XMTODAY,XMPAGE) ; Header for Mailbox Statistics Report
 | 
|---|
| 109 |  S XMPAGE=XMPAGE+1
 | 
|---|
| 110 |  W XMTYPE("DESC"),", ",XMTODAY,?65,$J($$EZBLD^DIALOG(34542,XMPAGE),15) ; Page |1|
 | 
|---|
| 111 |  D BLD^DIALOG(36443,"","","XMTEXT","F")
 | 
|---|
| 112 |  D MSG^DIALOG("WM","",IOM,"","XMTEXT")
 | 
|---|
| 113 |  W !
 | 
|---|
| 114 |  ;User     Bskts  Msgs  IN Bskt  Last Sign on  Last Mail Use"
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 | DONTPURG ; Find all messages which might not be in someone's mailbox,
 | 
|---|
| 117 |  ; but which shouldn't be purged anyway.
 | 
|---|
| 118 |  N XMDUZ,XMZ,XMZR,XMQ,XMT,XMD,XMINST,XMG
 | 
|---|
| 119 |  K ^TMP("XM",$J)
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  ; DON'T PURGE LOCAL MESSAGES AND REPLIES WHICH ARE ABOUT TO BE DELIVERED
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 |  S (XMT,XMG,XMZ)="" ; new messages, forwarded messages, and replies
 | 
|---|
| 124 |  F  S XMT=$O(^XMBPOST("BOX",XMT)) Q:XMT=""  D
 | 
|---|
| 125 |  . F  S XMG=$O(^XMBPOST("BOX",XMT,XMG)) Q:XMG=""  D
 | 
|---|
| 126 |  . . F  S XMZ=$O(^XMBPOST("BOX",XMT,XMG,XMZ)) Q:XMZ=""  S ^TMP("XM",$J,"NOP",+XMZ)="" I XMG="R" S ^TMP("XM",$J,"NOP",$P(XMZ,U,2))=""
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  ; new messages, forwarded messages
 | 
|---|
| 129 |  S (XMQ,XMT,XMZ)="" ; Queue number, Timestamp, Message IEN
 | 
|---|
| 130 |  F  S XMQ=$O(^XMBPOST("M",XMQ)) Q:XMQ=""  D
 | 
|---|
| 131 |  . F  S XMT=$O(^XMBPOST("M",XMQ,XMT)) Q:XMT=""  D
 | 
|---|
| 132 |  . . F  S XMZ=$O(^XMBPOST("M",XMQ,XMT,XMZ)) Q:XMZ=""  S ^TMP("XM",$J,"NOP",+XMZ)=""
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  ; replies
 | 
|---|
| 135 |  S (XMQ,XMZ,XMZR)="" ; Queue number, Message IEN, Reply IEN
 | 
|---|
| 136 |  F  S XMQ=$O(^XMBPOST("R",XMQ)) Q:XMQ=""  D
 | 
|---|
| 137 |  . S XMT="" ; Timestamp
 | 
|---|
| 138 |  . F  S XMT=$O(^XMBPOST("R",XMQ,XMT)) Q:XMT'>0  D
 | 
|---|
| 139 |  . . F  S XMZ=$O(^XMBPOST("R",XMQ,XMT,XMZ)) Q:XMZ=""  D
 | 
|---|
| 140 |  . . . S ^TMP("XM",$J,"NOP",XMZ)="" ; Original msg to new replies
 | 
|---|
| 141 |  . . . F  S XMZR=$O(^XMBPOST("R",XMQ,XMT,XMZ,XMZR)) Q:XMZR=""  S ^TMP("XM",$J,"NOP",XMZR)="" ; Reply
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 |  ; DON'T PURGE MESSAGES QUEUED TO BE DELIVERED REMOTELY
 | 
|---|
| 144 |  S XMINST=999 ; Institution
 | 
|---|
| 145 |  F  S XMINST=$O(^XMB(3.7,.5,2,XMINST)) Q:XMINST'>0  D
 | 
|---|
| 146 |  . S XMZ=0
 | 
|---|
| 147 |  . F  S XMZ=$O(^XMB(3.7,.5,2,XMINST,1,XMZ)) Q:XMZ'>0  S ^TMP("XM",$J,"NOP",XMZ)=""
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  ; DON'T PURGE LATER'D MESSAGES
 | 
|---|
| 150 |  S XMD=0 ; Date to be later'd
 | 
|---|
| 151 |  F  S XMD=$O(^XMB(3.73,XMD)) Q:XMD'>0  D
 | 
|---|
| 152 |  . S XMZ=$P(^XMB(3.73,XMD,0),U,3)
 | 
|---|
| 153 |  . S:XMZ ^TMP("XM",$J,"NOP",XMZ)="" ; Msg to be later'd
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  ; DON'T PURGE MESSAGES WHICH ARE BEING EDITED
 | 
|---|
| 156 |  S (XMDUZ,XMZ)=""
 | 
|---|
| 157 |  F  S XMDUZ=$O(^XMB(3.7,"AD",XMDUZ)) Q:XMDUZ=""  D
 | 
|---|
| 158 |  . F  S XMZ=$O(^XMB(3.7,"AD",XMDUZ,XMZ)) Q:XMZ=""  S ^TMP("XM",$J,"NOP",XMZ)=""
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 |  ; DON'T PURGE MESSAGES WHICH ARE TO BE DELIVERED LATER TO CERTAIN RECIPIENTS
 | 
|---|
| 161 |  S (XMD,XMZ)=""
 | 
|---|
| 162 |  F  S XMD=$O(^XMB(3.9,"AL",XMD)) Q:XMD=""  D
 | 
|---|
| 163 |  . F  S XMZ=$O(^XMB(3.9,"AL",XMD,XMZ)) Q:XMZ=""  S ^TMP("XM",$J,"NOP",XMZ)=""
 | 
|---|
| 164 |  Q
 | 
|---|