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)
|
---|