| 1 | XMXUTIL2 ;ISC-SF/GMB-Message info ;04/19/2002  13:34 | 
|---|
| 2 | ;;8.0;MailMan;;Jun 28, 2002 | 
|---|
| 3 | ; All entry points covered by DBIA 2736. | 
|---|
| 4 | QRESP(XMZ,XMZREC,XMWHICH) ; Function returns 0 if message XMZ is a message. | 
|---|
| 5 | ; If message XMZ is a response, returns XMZ of original message | 
|---|
| 6 | ; and, optionally, the response number as the second piece. | 
|---|
| 7 | ; in: | 
|---|
| 8 | ; XMZ     XMZ of the message to be checked | 
|---|
| 9 | ; XMZREC  (optional) 0-node of the message | 
|---|
| 10 | ; XMWHICH (optional) If the message is a response, should MailMan also | 
|---|
| 11 | ;         return the response number as the second piece? | 
|---|
| 12 | ;         (0=no (default); 1=yes) | 
|---|
| 13 | N XMZO | 
|---|
| 14 | I $G(XMZREC)="" S XMZREC=$G(^XMB(3.9,XMZ,0)) | 
|---|
| 15 | S XMZO=$S($P(XMZREC,U,8):$P(XMZREC,U,8),$P(XMZREC,U)?1"R"1.N:+$E(XMZREC,2,99),1:"") | 
|---|
| 16 | ; The following test (XMZO'=XMZ) is necessary, | 
|---|
| 17 | ; because some old messages point to themselves as responses. | 
|---|
| 18 | I XMZO,XMZO'=XMZ Q:'$G(XMWHICH) XMZO  D  Q XMZO_U_XMWHICH | 
|---|
| 19 | . S XMWHICH=0 ; This is a response to message XMZO. | 
|---|
| 20 | . F  S XMWHICH=$O(^XMB(3.9,XMZO,3,XMWHICH)) Q:'XMWHICH  Q:^(XMWHICH,0)=XMZ | 
|---|
| 21 | Q 0  ; This is a message. | 
|---|
| 22 | INMSG(XMDUZ,XMK,XMZ,XMZREC,XMFLAGS,XMIM,XMINSTR,XMIU) ; | 
|---|
| 23 | ; Should NOT be called for responses! | 
|---|
| 24 | ; XMFLAGS        If XMFLAGS["I" return internal only | 
|---|
| 25 | ;                          ["F" return FM date | 
|---|
| 26 | ; XMIU("KVAPOR") If applicable, user-specified vaporize date for message in basket | 
|---|
| 27 | ; XMIU("NEW")    Is message new? (0=no; 1=yes; 2=yes, and priority, too) | 
|---|
| 28 | D INMSG1(XMDUZ,XMZ,.XMZREC,.XMFLAGS,.XMIM,.XMIU) | 
|---|
| 29 | D INMSG2(XMDUZ,XMZ,XMZREC,.XMIM,.XMINSTR,.XMIU) | 
|---|
| 30 | Q:'XMK | 
|---|
| 31 | N XMKREC | 
|---|
| 32 | S XMKREC=$G(^XMB(3.7,XMDUZ,2,XMK,1,XMZ,0)) | 
|---|
| 33 | I $P(XMKREC,U,5) S XMIU("KVAPOR")=$P(XMKREC,U,5) | 
|---|
| 34 | S XMIU("NEW")=$$NEW(XMDUZ,XMK,XMZ) | 
|---|
| 35 | Q | 
|---|
| 36 | INMSG1(XMDUZ,XMZ,XMZREC,XMFLAGS,XMIM,XMIU) ; (Should NOT be called for responses!) | 
|---|
| 37 | ; XMIM("RESPS") | 
|---|
| 38 | ; XMIU("IEN") | 
|---|
| 39 | ; XMIU("RESP") | 
|---|
| 40 | I $G(XMZREC)="" S XMZREC=$G(^XMB(3.9,XMZ,0)) | 
|---|
| 41 | S XMFLAGS=$G(XMFLAGS) | 
|---|
| 42 | D INM(XMZ,XMZREC,XMFLAGS,.XMIM) | 
|---|
| 43 | I $D(XMIU) K XMIU | 
|---|
| 44 | S XMIU("IEN")=+$O(^XMB(3.9,XMZ,1,"C",XMDUZ,0)) | 
|---|
| 45 | D INRESPS(XMZ,.XMIM,.XMIU) | 
|---|
| 46 | Q | 
|---|
| 47 | INM(XMZ,XMZREC,XMFLAGS,XMIM) ; For internal MailMan use only. | 
|---|
| 48 | ; XMIM and XMIU are killed first | 
|---|
| 49 | ; out: | 
|---|
| 50 | ; Always returned: | 
|---|
| 51 | ; XMIM("XMZ") | 
|---|
| 52 | ; XMIM("SUBJ") | 
|---|
| 53 | ; XMIM("FROM") | 
|---|
| 54 | ; XMIM("DATE") | 
|---|
| 55 | ; XMIM("CRE8") | 
|---|
| 56 | ; XMIM("SENDR") | 
|---|
| 57 | ; XMIM("LINES") | 
|---|
| 58 | ; XMIM("ENV FROM") 'Envelope From' returned only if it exists | 
|---|
| 59 | ; Returned if XMFLAGS'["I": | 
|---|
| 60 | ; XMIM("FROM DUZ") | 
|---|
| 61 | ; XMIM("FROM NAME") | 
|---|
| 62 | ; XMIM("DATE FM")     Returned if XMFLAGS["F" | 
|---|
| 63 | ; XMIM("DATE MM")     Returned if XMFLAGS'["F" | 
|---|
| 64 | ; XMIM("CRE8 MM")     Returned if XMFLAGS'["F" | 
|---|
| 65 | ; XMIM("SENDR DUZ") | 
|---|
| 66 | ; XMIM("SENDR NAME") | 
|---|
| 67 | I $D(XMIM) K XMIM | 
|---|
| 68 | S XMIM("XMZ")=XMZ | 
|---|
| 69 | I $G(XMZREC)="" S XMZREC=$G(^XMB(3.9,XMZ,0)) | 
|---|
| 70 | S XMIM("SUBJ")=$$SUBJ^XMXUTIL2(XMZREC) | 
|---|
| 71 | S XMIM("FROM")=$P(XMZREC,U,2) | 
|---|
| 72 | S XMIM("DATE")=$P(XMZREC,U,3) | 
|---|
| 73 | S XMIM("SENDR")=$P(XMZREC,U,4) | 
|---|
| 74 | S XMIM("CRE8")=$P($G(^XMB(3.9,XMZ,.6)),U) | 
|---|
| 75 | S XMIM("LINES")=+$P($G(^XMB(3.9,XMZ,2,0)),U,4) | 
|---|
| 76 | I $D(^XMB(3.9,XMZ,.7)) D | 
|---|
| 77 | . N XMNVFROM | 
|---|
| 78 | . S XMNVFROM=$P($G(^XMB(3.9,XMZ,.7)),U,1) | 
|---|
| 79 | . I XMNVFROM'="" S XMIM("ENV FROM")=XMNVFROM | 
|---|
| 80 | Q:XMFLAGS["I" | 
|---|
| 81 | I +XMIM("FROM")'=XMIM("FROM") S XMIM("FROM NAME")=XMIM("FROM") | 
|---|
| 82 | E  S XMIM("FROM DUZ")=XMIM("FROM"),XMIM("FROM NAME")=$$NAME^XMXUTIL(XMIM("FROM")) | 
|---|
| 83 | I XMIM("SENDR")'="" D | 
|---|
| 84 | . I +XMIM("SENDR")'=XMIM("SENDR") S XMIM("SENDR NAME")=XMIM("SENDR") | 
|---|
| 85 | . E  S XMIM("SENDR DUZ")=XMIM("SENDR"),XMIM("SENDR NAME")=$$NAME^XMXUTIL(XMIM("SENDR")) | 
|---|
| 86 | I XMFLAGS["F" D  Q | 
|---|
| 87 | . I XMIM("DATE")?7N.E S XMIM("DATE FM")=XMIM("DATE") Q | 
|---|
| 88 | . S XMIM("DATE FM")=$$CONVERT^XMXUTIL1(XMIM("DATE"),1) | 
|---|
| 89 | S XMIM("DATE MM")=$$DATE(XMZREC,1) ; MailMan date | 
|---|
| 90 | S XMIM("CRE8 MM")=$$MMDT^XMXUTIL1(XMIM("CRE8")) ; MailMan date | 
|---|
| 91 | Q | 
|---|
| 92 | INRESPS(XMZ,XMIM,XMIU) ; How many responses?  What's the user read? | 
|---|
| 93 | ; In: | 
|---|
| 94 | ; XMZ | 
|---|
| 95 | ; XMIU("IEN")   ien of user's record in recipient multiple | 
|---|
| 96 | ; Out: | 
|---|
| 97 | ; XMIM("RESPS") message has this many responses | 
|---|
| 98 | ; XMIU("RESP")  last response read by the user | 
|---|
| 99 | ;               (null=not read at all; 0=original msg only; number=resp) | 
|---|
| 100 | S XMIM("RESPS")=+$P($G(^XMB(3.9,XMZ,3,0)),U,4) | 
|---|
| 101 | S XMIU("RESP")=$P($G(^XMB(3.9,XMZ,1,XMIU("IEN"),0)),U,2) | 
|---|
| 102 | Q | 
|---|
| 103 | INRESP(XMZ,XMIEN,XMFLAGS,XMIR) ; Get info on a response to a message. | 
|---|
| 104 | ; In: | 
|---|
| 105 | ; XMZ     XMZ of original message | 
|---|
| 106 | ; XMIEN   Which response (1 thru # of responses) | 
|---|
| 107 | ; XMFLAGS If XMFLAGS["I" return internal only | 
|---|
| 108 | ;                   ["F" return FM date | 
|---|
| 109 | ; Out: | 
|---|
| 110 | ; XMIR | 
|---|
| 111 | N XMZREC,XMZR | 
|---|
| 112 | K XMIR | 
|---|
| 113 | I '$D(^XMB(3.9,XMZ,3,XMIEN)) Q | 
|---|
| 114 | S XMZR=$G(^XMB(3.9,XMZ,3,XMIEN,0)) Q:'XMZR | 
|---|
| 115 | S XMZREC=$G(^XMB(3.9,XMZR,0)) | 
|---|
| 116 | D INM(XMZR,XMZREC,XMFLAGS,.XMIR) | 
|---|
| 117 | ;Q:XMIR("SUBJ")'?1"R".N | 
|---|
| 118 | ;Q:XMFLAGS["I" | 
|---|
| 119 | ;S XMZREC=$G(^XMB(3.9,XMZ,0)) Q:XMZREC="" | 
|---|
| 120 | ;S XMIR("SUBJ X")="Re: "_$P(XMZREC,U,1) | 
|---|
| 121 | ;I XMIR("SUBJ X")["~U~" S XMIR("SUBJ")=$$DECODEUP^XMXUTIL1(XMIR("SUBJ X")) | 
|---|
| 122 | Q | 
|---|
| 123 | INMSG2(XMDUZ,XMZ,XMZREC,XMIM,XMINSTR,XMIU) ; | 
|---|
| 124 | ; Should NOT be called for responses! | 
|---|
| 125 | ; Does not kill XMIM, XMINSTR, or XMIU first | 
|---|
| 126 | ; XMIM("RECIPS")   number of recipients of the message | 
|---|
| 127 | ; XMIU("ORIGN8")   user sent message (0=no; 1=yes) | 
|---|
| 128 | ; The following are set only if applicable: | 
|---|
| 129 | ; XMINSTR("FLAGS") | 
|---|
| 130 | ; XMINSTR("RCPT BSKT") | 
|---|
| 131 | ; XMINSTR("TYPE") | 
|---|
| 132 | ; XMINSTR("VAPOR") | 
|---|
| 133 | ; XMINSTR("SCR HINT") | 
|---|
| 134 | S XMIM("RECIPS")=$P($G(^XMB(3.9,XMZ,1,0)),U,4) | 
|---|
| 135 | I $G(XMZREC)="" S XMZREC=$G(^XMB(3.9,XMZ,0)) | 
|---|
| 136 | S XMIU("ORIGN8")=$$ORIGIN8R^XMXSEC(XMDUZ,XMZREC) | 
|---|
| 137 | S:$P(XMZREC,U,6)'="" XMINSTR("VAPOR")=$P(XMZREC,U,6) | 
|---|
| 138 | S XMINSTR("TYPE")=$P(XMZREC,U,7)  ; Msg type (regular, KIDS, etc.) | 
|---|
| 139 | I $$PAKMAN^XMXSEC1(XMZ,XMZREC) D | 
|---|
| 140 | . Q:XMINSTR("TYPE")["K"  ; KIDS | 
|---|
| 141 | . S:XMINSTR("TYPE")'["X" XMINSTR("TYPE")=XMINSTR("TYPE")_"X" ; PackMan | 
|---|
| 142 | S XMINSTR("FLAGS")="" | 
|---|
| 143 | S:"^Y^y^"[(U_$P(XMZREC,U,5)_U) XMINSTR("FLAGS")=XMINSTR("FLAGS")_"R" ; confirmation requested | 
|---|
| 144 | S:"^Y^y^"[(U_$P(XMZREC,U,9)_U) XMINSTR("FLAGS")=XMINSTR("FLAGS")_"X" ; closed | 
|---|
| 145 | S:"^Y^y^"[(U_$P(XMZREC,U,11)_U) XMINSTR("FLAGS")=XMINSTR("FLAGS")_"C" ; confidential | 
|---|
| 146 | S:"^Y^y^"[(U_$P(XMZREC,U,12)_U) XMINSTR("FLAGS")=XMINSTR("FLAGS")_"I" ; information only | 
|---|
| 147 | I $P(XMZREC,U,10)'="" S XMINSTR("SCR HINT")=$P(XMZREC,U,10) | 
|---|
| 148 | I $D(^XMB(3.9,XMZ,.5)) D | 
|---|
| 149 | . N XMZBSKT | 
|---|
| 150 | . S XMZBSKT=$P(^XMB(3.9,XMZ,.5),U,1) | 
|---|
| 151 | . S:XMZBSKT'="" XMINSTR("RCPT BSKT")=XMZBSKT | 
|---|
| 152 | Q:XMINSTR("TYPE")'["P" | 
|---|
| 153 | S XMINSTR("FLAGS")=XMINSTR("FLAGS")_"P" ; priority | 
|---|
| 154 | S XMINSTR("TYPE")=$TR(XMINSTR("TYPE"),"P") | 
|---|
| 155 | S:'$P($G(^XMB(3.9,XMZ,1,XMIU("IEN"),0)),U,9) XMINSTR("FLAGS")=XMINSTR("FLAGS")_"K" ; priority responses | 
|---|
| 156 | Q | 
|---|
| 157 | ZNODE(XMZ) ; Returns the zero node of the message. | 
|---|
| 158 | Q $G(^XMB(3.9,XMZ,0)) | 
|---|
| 159 | ZDATE(XMZ,XMTIME) ; What is the message date? (Formatted by $$MMDT^XMXUTIL1) | 
|---|
| 160 | ; XMTIME =0 Date only | 
|---|
| 161 | ;        =1 Date and time (default) | 
|---|
| 162 | Q $$DATE($G(^XMB(3.9,XMZ,0)),.XMTIME) | 
|---|
| 163 | DATE(XMZREC,XMTIME) ; What is the message date? (Formatted by $$MMDT^XMXUTIL1) | 
|---|
| 164 | ; XMTIME =0 Date only | 
|---|
| 165 | ;        =1 Date and time (default) | 
|---|
| 166 | N XMDATE | 
|---|
| 167 | S XMDATE=$P(XMZREC,U,3) | 
|---|
| 168 | S XMTIME=+$G(XMTIME,1) | 
|---|
| 169 | I XMDATE?7N.E Q $$MMDT^XMXUTIL1($S(XMTIME:XMDATE,1:$E(XMDATE,1,7))) | 
|---|
| 170 | N XMFM | 
|---|
| 171 | S XMFM=$$CONVERT^XMXUTIL1(XMDATE,XMTIME) | 
|---|
| 172 | I XMFM=-1 Q XMDATE | 
|---|
| 173 | Q $$MMDT^XMXUTIL1(XMFM) | 
|---|
| 174 | ZSUBJ(XMZ) ; What is the message subject? | 
|---|
| 175 | Q $$SUBJ($G(^XMB(3.9,XMZ,0))) | 
|---|
| 176 | SUBJ(XMZREC) ; What is the message subject? | 
|---|
| 177 | N XMSUBJ | 
|---|
| 178 | S XMSUBJ=$P(XMZREC,U,1) | 
|---|
| 179 | I XMSUBJ="" Q $$EZBLD^DIALOG(34012) ;* No Subject * | 
|---|
| 180 | I XMSUBJ["~U~" Q $$DECODEUP^XMXUTIL1(XMSUBJ) | 
|---|
| 181 | Q XMSUBJ | 
|---|
| 182 | ZFROM(XMZ) ; Who sent the message? | 
|---|
| 183 | Q $$FROM($G(^XMB(3.9,XMZ,0))) | 
|---|
| 184 | FROM(XMZREC) ; Who sent the message? | 
|---|
| 185 | Q $$NAME^XMXUTIL($P(XMZREC,U,2)) | 
|---|
| 186 | ZPRI(XMZ) ; Is the message priority? | 
|---|
| 187 | Q $$PRI($G(^XMB(3.9,XMZ,0))) | 
|---|
| 188 | PRI(XMZREC) ; Is the message priority? | 
|---|
| 189 | Q $P(XMZREC,U,7)["P" | 
|---|
| 190 | LINE(XMZ) ; How many lines does the message have? | 
|---|
| 191 | Q +$P($G(^XMB(3.9,XMZ,2,0)),U,4) | 
|---|
| 192 | RESP(XMZ) ; How many responses does this message have? | 
|---|
| 193 | Q +$P($G(^XMB(3.9,XMZ,3,0)),U,4) | 
|---|
| 194 | ZREAD(XMDUZ,XMZ) ; How many responses has the user read? | 
|---|
| 195 | ; null   = the user has not read the message | 
|---|
| 196 | ; 0      = the user has read the original message only | 
|---|
| 197 | ; number = the user has read through this response | 
|---|
| 198 | N XMUPTR | 
|---|
| 199 | ;S XMUPTR=$O(^XMB(3.9,XMZ,1,"C",$S(XMDUZ=.6:DUZ,1:XMDUZ),0)) | 
|---|
| 200 | S XMUPTR=+$O(^XMB(3.9,XMZ,1,"C",XMDUZ,0)) | 
|---|
| 201 | ;Q:'XMUPTR "" | 
|---|
| 202 | Q $$READ($G(^XMB(3.9,XMZ,1,XMUPTR,0))) | 
|---|
| 203 | READ(XMZUREC) ; How many responses has the user read? | 
|---|
| 204 | ; null   = the user has not read the message | 
|---|
| 205 | ; 0      = the user has read the original message only | 
|---|
| 206 | ; number = the user has read through this response | 
|---|
| 207 | Q $P(XMZUREC,U,2) | 
|---|
| 208 | BSKT(XMDUZ,XMZ,XMNAME) ; Which basket is the message in for this user? | 
|---|
| 209 | ; in: | 
|---|
| 210 | ; XMDUZ,XMZ | 
|---|
| 211 | ; XMNAME Return basket name as second piece? 0=no (default); 1=yes | 
|---|
| 212 | ; returns: | 
|---|
| 213 | ; 0           = it's not in any basket | 
|---|
| 214 | ; number      = it's in this basket ien      ($G(XMNAME)=0) | 
|---|
| 215 | ; number^name = it's in this basket ien^name (XMNAME=1) | 
|---|
| 216 | N XMK | 
|---|
| 217 | S XMK=+$O(^XMB(3.7,"M",XMZ,XMDUZ,"")) | 
|---|
| 218 | I 'XMK Q XMK | 
|---|
| 219 | I '$G(XMNAME) Q XMK | 
|---|
| 220 | Q XMK_U_$P($G(^XMB(3.7,XMDUZ,2,XMK,0)),U,1) | 
|---|
| 221 | NEW(XMDUZ,XMK,XMZ) ; Is the message new for this user? | 
|---|
| 222 | ; 0 = no; 1 = yes; 2 = yes, and it's priority, too. | 
|---|
| 223 | Q:$D(^XMB(3.7,XMDUZ,"N",XMK,XMZ)) 2 | 
|---|
| 224 | Q:$D(^XMB(3.7,XMDUZ,"N0",XMK,XMZ)) 1 | 
|---|
| 225 | Q 0 | 
|---|
| 226 | KSEQN(XMDUZ,XMK,XMZ) ; What's the seqence number for this message in this user's basket? | 
|---|
| 227 | Q $$SEQN($G(^XMB(3.7,XMDUZ,2,XMK,1,XMZ,0))) | 
|---|
| 228 | SEQN(XMKZREC) ; What's the seqence number for this message in this user's basket? | 
|---|
| 229 | Q $P(XMKZREC,U,2) | 
|---|