1 | XMXADDR ;ISC-SF/GMB-Address checker ;04/29/2003 08:51
|
---|
2 | ;;8.0;MailMan;**18**;Jun 28, 2002
|
---|
3 | ; Replaces ^XMA21,^XMA210,^XMA24 (ISC-WASH/CAP/AML/LL)
|
---|
4 | ; XMIA 1=Interactive; 0=not
|
---|
5 | CHKADDR(XMDUZ,XMTO,XMINSTR,XMRESTR,XMFULL) ; Check addressee(s) NON-INTERACTIVE
|
---|
6 | ; This entry point is meant for calls in which the addressees are
|
---|
7 | ; already in an array:
|
---|
8 | ; XMTO("addressee 1")=""
|
---|
9 | ; XMTO("addressee 2")=""
|
---|
10 | ; or for just a single addressee: "addressee 1"
|
---|
11 | N XMADDR,XMIA
|
---|
12 | ;K XMERR,^TMP("XMERR",$J) DO NOT PUT THIS LINE IN HERE!
|
---|
13 | S XMIA=0
|
---|
14 | I $G(XMTO)]"",$O(XMTO(""))="" D Q
|
---|
15 | . N XMERROR K XMFULL
|
---|
16 | . D ADDRESS(XMDUZ,XMTO,.XMFULL,.XMERROR) Q:'$D(XMERROR)
|
---|
17 | . S XMERROR("PARAM","ID")="XMTO",XMERROR("PARAM","VALUE")=XMTO
|
---|
18 | . D ERRSET^XMXUTIL(XMERROR,.XMERROR)
|
---|
19 | . S:'$D(XMFULL) ^TMP("XMERR",$J,XMERR,"PARM")=XMTO
|
---|
20 | I $O(XMTO(""))="" D Q
|
---|
21 | . ;S XMERR=$G(XMERR)+1,^TMP("XMERR",$J,XMERR,"TEXT",1)="Null addressee"
|
---|
22 | S XMADDR=""
|
---|
23 | F S XMADDR=$O(XMTO(XMADDR)) Q:XMADDR="" D
|
---|
24 | . N XMERROR,XMFULL,XMFWDADD
|
---|
25 | . D ADDRESS(XMDUZ,XMADDR,.XMFULL,.XMERROR) Q:'$D(XMERROR)
|
---|
26 | . S XMERROR("PARAM","ID")="XMTO",XMERROR("PARAM","VALUE")=XMADDR
|
---|
27 | . D ERRSET^XMXUTIL(XMERROR,.XMERROR)
|
---|
28 | . S:'$D(XMFULL) ^TMP("XMERR",$J,XMERR,"PARM")=XMADDR
|
---|
29 | Q
|
---|
30 | INIT ;
|
---|
31 | K ^TMP("XMY",$J),^TMP("XMY0",$J),^TMP("XMYL",$J)
|
---|
32 | INITLATR ;
|
---|
33 | N XMNOW
|
---|
34 | S XMNOW=$$NOW^XLFDT
|
---|
35 | S XMINLATR=$E($$FMADD^XLFDT(XMNOW,"","",5),1,12) ; Staggered delivery must be at least 5 minutes from now
|
---|
36 | S XMAXLATR=$$SCH^XLFDT("1M",XMNOW) ; Staggered delivery must be at most 1 month from now
|
---|
37 | S XMBIGGRP=$P(^XMB(1,1,0),U,7) ; Big group size
|
---|
38 | Q
|
---|
39 | CLEANUP ;
|
---|
40 | K ^TMP("XMY",$J),^TMP("XMY0",$J),^TMP("XMYL",$J),XMINLATR,XMAXLATR,XMBIGGRP
|
---|
41 | Q
|
---|
42 | ADDR(XMDUZ,XMADDR,XMINSTR,XMRESTR,XMFULL) ; Check one addressee (INTERACTIVE)
|
---|
43 | N XMIA,XMFWDADD
|
---|
44 | S XMIA=1
|
---|
45 | D ADDRESS(XMDUZ,XMADDR,.XMFULL)
|
---|
46 | Q
|
---|
47 | ADDRESS(XMDUZ,XMADDR,XMFULL,XMERROR) ; Check one addressee
|
---|
48 | ; XMADDR (in) Addressee (if number, assumed to be a person's DUZ)
|
---|
49 | ; XMFULL (out) The full address of the addressee
|
---|
50 | N XMSTRIKE,XMPREFIX,XMLATER,XMGCIRCL,XMGMBRS,XMG
|
---|
51 | D CHKPARM(.XMADDR,.XMSTRIKE,.XMPREFIX,.XMLATER) Q:$D(XMERROR)
|
---|
52 | I $G(XMINSTR("ADDR FLAGS"))["X",$G(XMINSTR("ADDR FLAGS"))'["Y" S XMSTRIKE=0,XMLATER="",XMPREFIX=""
|
---|
53 | I XMADDR["@"!(XMADDR["!") D
|
---|
54 | . I $D(XMRESTR("NONET")) D Q
|
---|
55 | . . ;Messages longer than |1| lines may not be sent across the network.
|
---|
56 | . . D SETERR^XMXADDR4($G(XMIA),"!",39001,XMRESTR("NONET"))
|
---|
57 | . D REMOTE^XMXADDR3(XMDUZ,XMADDR,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL)
|
---|
58 | E D LOCAL(XMDUZ,XMADDR,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL,.XMG)
|
---|
59 | D:'$D(XMERROR) SET(XMFULL,$G(XMG),XMSTRIKE,XMPREFIX,XMLATER)
|
---|
60 | Q
|
---|
61 | LOCAL(XMDUZ,XMADDR,XMSTRIKE,XMPREFIX,XMLATER,XMFULL,XMG) ;
|
---|
62 | I $E(XMADDR,1)="*" D Q
|
---|
63 | . D BRODCAST^XMXADDR2(XMDUZ,XMADDR,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL)
|
---|
64 | I $L(XMADDR)>2,".G.g.D.d.H.h.S.s."[("."_$E(XMADDR,1,2)) D Q
|
---|
65 | . N XMADDR1
|
---|
66 | . S XMADDR1=$E(XMADDR,1)
|
---|
67 | . I "Gg"[XMADDR1 D EXPAND^XMXADDRG(XMDUZ,XMADDR,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL,.XMG) Q
|
---|
68 | . I "Ss"[XMADDR1 D SERVER^XMXADDR3(XMADDR,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL) Q
|
---|
69 | . I "DdHh"[XMADDR1 D DEVICE^XMXADDR3(XMADDR,XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL) Q
|
---|
70 | I XMADDR?1N.N,$L(XMADDR)>25 D Q
|
---|
71 | . D SETERR^XMXADDR4($G(XMIA),"!,$C(7)",39002) ;Not found.
|
---|
72 | I $G(XMIA) D
|
---|
73 | . D IPERSON^XMXADDR1(XMDUZ,.XMADDR,XMSTRIKE,XMPREFIX,.XMLATER,.XMG,.XMFULL) Q:$D(XMERROR)
|
---|
74 | . I XMLATER="?",XMG'=.6 D QLATER(XMFULL,.XMLATER)
|
---|
75 | E D
|
---|
76 | . D PERSON^XMXADDR1(XMDUZ,.XMADDR,XMSTRIKE,XMPREFIX,XMLATER,.XMG,.XMFULL)
|
---|
77 | Q:$D(XMERROR)
|
---|
78 | D:XMFULL'["@" INDIV(XMDUZ,XMG,XMSTRIKE,XMPREFIX,XMLATER)
|
---|
79 | Q
|
---|
80 | INDIV(XMDUZ,XMG,XMSTRIKE,XMPREFIX,XMLATER) ;
|
---|
81 | N XMGREC,XMIASAVE
|
---|
82 | I $D(XMFWDADD) D Q
|
---|
83 | . ;You can't have a message forwarded to a local user.
|
---|
84 | . D SETERR^XMXADDR4(0,"",38001)
|
---|
85 | S XMGREC=^XMB(3.7,XMG,0)
|
---|
86 | I $P(XMGREC,U,2)=""!(XMG=DUZ) D SETEXP(XMG,"",XMSTRIKE,XMPREFIX,XMLATER) Q
|
---|
87 | ; Addressee has a forwarding address.
|
---|
88 | ; Ignore it if message is from remote postmaster (OR envelope from is empty) and forwarding address is to a remote site (to avoid looping error messages to bad fwding address).
|
---|
89 | I $D(XMRESTR("NET RECEIVE")),($$UP^XLFSTR(XMRESTR("NET RECEIVE"))["POSTMASTER"!("<>"[XMRESTR("NET RECEIVE"))),$$FIND1^DIC(4.2,"","QX",$P($P(XMGREC,U,2),"@",2),"B^C")'=^XMB("NUM") D SETEXP(XMG,"",XMSTRIKE,XMPREFIX,XMLATER) Q
|
---|
90 | N XMFULL,XMERROR
|
---|
91 | S XMFWDADD=XMG
|
---|
92 | I $G(XMIA) S XMIA=0,XMIASAVE=1
|
---|
93 | D REMOTE^XMXADDR3(XMDUZ,$P(XMGREC,U,2),XMSTRIKE,XMPREFIX,.XMLATER,.XMFULL)
|
---|
94 | K XMFWDADD
|
---|
95 | I $G(XMIASAVE) S XMIA=1
|
---|
96 | I '$D(XMERROR) D Q:'$P(XMGREC,U,8) ; quit if no local delivery
|
---|
97 | . Q:XMSTRIKE
|
---|
98 | . ; Note that recipient fwded
|
---|
99 | . I $D(XMINSTR("NET FWD BY")),$D(XMRESTR("NET RECEIVE")) S ^TMP("XMY",$J,XMFULL,"F")=XMG_U_XMINSTR("NET FWD BY") Q
|
---|
100 | . S ^TMP("XMY",$J,XMFULL,"F")=XMG
|
---|
101 | D SETEXP(XMG,"",XMSTRIKE,XMPREFIX,XMLATER)
|
---|
102 | Q:'$D(XMERROR)
|
---|
103 | D DELFWD^XMVVITA(XMG,$P(XMGREC,U,2),.XMERROR)
|
---|
104 | I $G(XMIA),'$D(XMGCIRCL) W !,$C(7)," ",$$EZBLD^DIALOG(38130.3) ; Forwarding Address ignored.
|
---|
105 | Q
|
---|
106 | SET(XMTO,XMG,XMSTRIKE,XMPREFIX,XMLATER) ;
|
---|
107 | I $G(XMINSTR("ADDR FLAGS"))["X",$G(XMINSTR("ADDR FLAGS"))'["Y" Q
|
---|
108 | I XMSTRIKE D Q
|
---|
109 | . I $G(XMIA) D
|
---|
110 | . . I $E(XMTO,1,2)="G."!($E(XMTO,1,2)="*;") D
|
---|
111 | . . . I $D(^TMP("XMY0",$J,XMTO,"L")) D Q
|
---|
112 | . . . . W $$EZBLD^DIALOG(39003) ;Later'd Group Deleted.
|
---|
113 | . . . . K ^TMP("XMYL",$J,XMTO)
|
---|
114 | . . . W !,$$EZBLD^DIALOG(39004) ;Members Deleted.
|
---|
115 | . . E W:$X>70 ! W $$EZBLD^DIALOG(39005) ;Deleted.
|
---|
116 | . . ; 39006 - * (Broadcast to all local users)
|
---|
117 | . . I XMTO'=$$EZBLD^DIALOG(39006),$D(^TMP("XMY0",$J,$$EZBLD^DIALOG(39006))) W !,$$EZBLD^DIALOG(39007) ;But Broadcast will still go to all local users
|
---|
118 | . . Q:'$D(^TMP("XMYL",$J))
|
---|
119 | . . N XMGRP,XMTEXT ;But message will still go to all members of the following later'd group(s):
|
---|
120 | . . D BLD^DIALOG(39008,"","","XMTEXT","F")
|
---|
121 | . . D MSG^DIALOG("WM","","","","XMTEXT")
|
---|
122 | . . S XMGRP="" F S XMGRP=$O(^TMP("XMYL",$J,XMGRP)) Q:XMGRP="" W !,XMGRP
|
---|
123 | . K ^TMP("XMY0",$J,XMTO)
|
---|
124 | . K:$D(^TMP("XMYL",$J,XMTO)) ^TMP("XMYL",$J,XMTO)
|
---|
125 | S ^TMP("XMY0",$J,XMTO)=XMG ; =XMIEN
|
---|
126 | I XMPREFIX'="" S ^TMP("XMY0",$J,XMTO,1)=$$UP^XLFSTR(XMPREFIX)
|
---|
127 | I XMLATER S ^TMP("XMY0",$J,XMTO,"L")=XMLATER I $E(XMTO,1,2)="G."!($E(XMTO,1,2)="*;") S ^TMP("XMYL",$J,XMTO)=""
|
---|
128 | I XMLATER="?",$G(XMIA) W !,$C(7),$$EZBLD^DIALOG(39009) ;'Later' not appropriate for this addressee
|
---|
129 | Q
|
---|
130 | SETEXP(XMTO,XMIEN,XMSTRIKE,XMPREFIX,XMLATER) ;
|
---|
131 | Q:$G(XMINSTR("ADDR FLAGS"))["X"
|
---|
132 | I XMSTRIKE K ^TMP("XMY",$J,XMTO) Q
|
---|
133 | I XMLATER,XMTO'=XMDUZ Q
|
---|
134 | S ^TMP("XMY",$J,XMTO)=XMIEN
|
---|
135 | I XMPREFIX'="" S ^TMP("XMY",$J,XMTO,1)=$$UP^XLFSTR(XMPREFIX)
|
---|
136 | I $D(XMINSTR("NET FWD BY")),$D(XMRESTR("NET RECEIVE")) S ^TMP("XMY",$J,XMTO,"F")=XMINSTR("NET FWD BY")
|
---|
137 | Q
|
---|
138 | GOTADDR() ; Function returns 1 if addressees exist; 0 if not.
|
---|
139 | Q:$D(^TMP("XMY",$J)) 1
|
---|
140 | Q:$D(^TMP("XMYL",$J)) 1
|
---|
141 | Q:'$D(^TMP("XMY0",$J)) 0
|
---|
142 | N XMTO
|
---|
143 | S XMTO=$O(^TMP("XMY0",$J,""))
|
---|
144 | Q:$D(^TMP("XMY0",$J,XMTO,"L")) 1
|
---|
145 | Q 0
|
---|
146 | CHKPARM(XMADDR,XMSTRIKE,XMPREFIX,XMLATER) ;
|
---|
147 | I $E(XMADDR,1)="-" D
|
---|
148 | . S XMSTRIKE=1
|
---|
149 | . S XMADDR=$E(XMADDR,2,999)
|
---|
150 | E S XMSTRIKE=0
|
---|
151 | I $E(XMADDR,1)=" "!($E(XMADDR,$L(XMADDR))=" ") S XMADDR=$$STRIP^XMXUTIL1(XMADDR)
|
---|
152 | I $P(XMADDR,"@",1)="" D Q
|
---|
153 | . D SETERR^XMXADDR4($G(XMIA),"!",39010) ;Null addressee
|
---|
154 | I $E(XMADDR,1)'="""",XMADDR[":" D Q
|
---|
155 | . D PREFIX(.XMADDR,.XMPREFIX,.XMLATER)
|
---|
156 | . I XMSTRIKE,XMLATER="?" S XMLATER=""
|
---|
157 | S XMPREFIX=""
|
---|
158 | S XMLATER=""
|
---|
159 | Q
|
---|
160 | PREFIX(XMADDR,XMPREFIX,XMLATER) ;
|
---|
161 | N XMPRE
|
---|
162 | S XMPRE=$P(XMADDR,":",1)
|
---|
163 | I XMPRE="" D Q
|
---|
164 | . D SETERR^XMXADDR4($G(XMIA),"!",39011) ;Null recipient type
|
---|
165 | S (XMLATER,XMPREFIX)=""
|
---|
166 | S XMPRE=$$UP^XLFSTR(XMPRE)
|
---|
167 | I $P(XMPRE,"@",1)["L",'$D(XMRESTR("NET RECEIVE")) D
|
---|
168 | . D LATER($P(XMPRE,"@",2,99),.XMLATER)
|
---|
169 | . S XMPRE=$TR($P(XMPRE,"@",1),"L")
|
---|
170 | D:XMPRE'="" RTYPE(XMPRE,.XMPREFIX)
|
---|
171 | I $D(XMERROR),$D(XMRESTR("NET RECEIVE")),$$FIND1^DIC(4.2,"","QX",$P(XMADDR,"@",2),"B^C")'=^XMB("NUM") K XMERROR Q
|
---|
172 | S XMADDR=$P(XMADDR,":",2)
|
---|
173 | Q
|
---|
174 | LATER(XMWHEN,XMLATER) ; (XMWHEN=user-supplied date/time)
|
---|
175 | I $G(XMIA),XMWHEN="" S XMLATER="?" Q
|
---|
176 | I '$D(XMINLATR) D INITLATR
|
---|
177 | D DT^DILF("FTX",XMWHEN,.XMLATER,XMINLATR)
|
---|
178 | Q:XMLATER>0
|
---|
179 | S XMLATER=$S($G(XMIA):"?",1:"")
|
---|
180 | Q
|
---|
181 | RTYPE(XMPRE,XMPREFIX) ;
|
---|
182 | N XMINTRNL
|
---|
183 | D CHK^DIE(3.91,6.5,"",XMPRE,.XMINTRNL)
|
---|
184 | I XMINTRNL="^" D Q ;Invalid recipient type '|1|'
|
---|
185 | . D SETERR^XMXADDR4($G(XMIA),"!",39012,XMPRE)
|
---|
186 | S XMPREFIX=XMINTRNL
|
---|
187 | Q
|
---|
188 | QLATER(XMFULL,XMLATER) ;
|
---|
189 | N DIR,Y
|
---|
190 | I '$D(XMINLATR) D INITLATR
|
---|
191 | W !
|
---|
192 | S DIR(0)="DO^"_XMINLATR_":"_XMAXLATR_":EXT"
|
---|
193 | ;Later Delivery must be at least 5 minutes from now.
|
---|
194 | D BLD^DIALOG(39013,"","","DIR(""A"")") ;When Later
|
---|
195 | S DIR("B")=$$MMDT^XMXUTIL1($$FMADD^XLFDT($$NOW^XLFDT,"","",5)) ; (in 5 minutes)
|
---|
196 | S DIR("B")=$P(DIR("B")," ",1,3)_"@"_$P(DIR("B")," ",4)
|
---|
197 | D ^DIR I $D(DIRUT) D Q
|
---|
198 | . S XMLATER=""
|
---|
199 | . D SETERR^XMXADDR4(0,"",37002) ;up-arrow or time out.
|
---|
200 | . W !,XMFULL,$$EZBLD^DIALOG(39015) ;removed from recipient list.
|
---|
201 | S XMLATER=Y
|
---|
202 | ;>> Remember, you won't be able to 'minus' anyone from the ...
|
---|
203 | I $E(XMFULL,1,2)="G." W !!,$$EZBLD^DIALOG(39016) ; group <<
|
---|
204 | I $E(XMFULL,1,2)="*;" W !!,$$EZBLD^DIALOG(39017) ; limited broadcast <<
|
---|
205 | Q
|
---|