| 1 | XMXGRP1 ;ISC-SF/GMB-Group creation/enrollment (cont.) ;04/17/2002  14:10
 | 
|---|
| 2 |  ;;8.0;MailMan;;Jun 28, 2002
 | 
|---|
| 3 | FAFMSGS(XMDUZ,XMGRP,XMTO,XMINSTR,ZTSK) ; Create task to find and forward messages
 | 
|---|
| 4 |  ; The following line can be deleted once we enable "A":
 | 
|---|
| 5 |  S XMINSTR("FLAGS")=$TR($G(XMINSTR("FLAGS")),"A") Q:$G(XMINSTR("FLAGS"))'["F"
 | 
|---|
| 6 |  N ZTSAVE,ZTDESC,ZTRTN,ZTDTH,ZTIO,I
 | 
|---|
| 7 |  S ZTDESC=$$EZBLD^DIALOG(38023.8) ; MailMan: Find & Forward mail group messages
 | 
|---|
| 8 |  S ZTIO="",ZTDTH=$H,ZTRTN="FAFTSK^XMXGRP1"
 | 
|---|
| 9 |  F I="DUZ","XMDUZ","XMGRP*","XMTO*","XMINSTR(" S ZTSAVE(I)=""
 | 
|---|
| 10 |  D ^%ZTLOAD
 | 
|---|
| 11 |  Q
 | 
|---|
| 12 | FAFTSK ; Find and add/forward messages
 | 
|---|
| 13 |  N XMFDATE,XMTDATE,XMGROUP,XMX,XMFIRST,XMABORT
 | 
|---|
| 14 |  S XMABORT=0
 | 
|---|
| 15 |  D INIT Q:XMABORT
 | 
|---|
| 16 |  D PROCESS
 | 
|---|
| 17 |  D CLEANUP^XMXADDR
 | 
|---|
| 18 |  K ^TMP("XM",$J,"SAVE")
 | 
|---|
| 19 |  Q
 | 
|---|
| 20 | PROCESS ;
 | 
|---|
| 21 |  I XMINSTR("FLAGS")["A",XMINSTR("FLAGS")["F" D  Q  ; Forward some of the messages to the users, and add the users to the rest of the messages.
 | 
|---|
| 22 |  . D SAVFWD(.XMX)
 | 
|---|
| 23 |  . I XMFIRST<XMFDATE D
 | 
|---|
| 24 |  . . D CHKADD(.XMX) Q:'$D(^TMP("XMY",$J))
 | 
|---|
| 25 |  . . D ADDFWD(XMDUZ,.XMGROUP,"A",XMFIRST,XMFDATE-1,.XMX) ; add
 | 
|---|
| 26 |  . . M ^TMP("XMY",$J)=^TMP("XM",$J,"SAVE")
 | 
|---|
| 27 |  . D ADDFWD(XMDUZ,.XMGROUP,"F",XMFDATE,XMTDATE,.XMX) ; forward
 | 
|---|
| 28 |  . I XMTDATE<DT D
 | 
|---|
| 29 |  . . I XMX("RESTORE") M ^TMP("XMY",$J)=^TMP("XM",$J,"SAVE") S XMX("RESTORE")=0
 | 
|---|
| 30 |  . . D CHKADD(.XMX) Q:'$D(^TMP("XMY",$J))
 | 
|---|
| 31 |  . . D ADDFWD(XMDUZ,.XMGROUP,"A",XMTDATE+.1,DT,.XMX) ; add
 | 
|---|
| 32 |  I XMINSTR("FLAGS")["F" D  Q  ; Just forward messages to users
 | 
|---|
| 33 |  . D SAVFWD(.XMX)
 | 
|---|
| 34 |  . D ADDFWD(XMDUZ,.XMGROUP,"F",XMFDATE,XMTDATE,.XMX) ; forward
 | 
|---|
| 35 |  I XMINSTR("FLAGS")["A" D  Q  ; Just add users to messages
 | 
|---|
| 36 |  . D CHKADD(.XMX) Q:'$D(^TMP("XMY",$J))
 | 
|---|
| 37 |  . D ADDFWD(XMDUZ,.XMGROUP,"A",XMFDATE,XMTDATE,.XMX) ; add
 | 
|---|
| 38 |  Q
 | 
|---|
| 39 | INIT ;
 | 
|---|
| 40 |  N XMPRIVAT,XMGN,XMI
 | 
|---|
| 41 |  S ZTREQ="@"
 | 
|---|
| 42 |  S XMPRIVAT=$$EZBLD^DIALOG(39135) ; " [Private Mail Group]"
 | 
|---|
| 43 |  S XMFIRST=$O(^XMB(3.9,"C",2500000)) ; earliest message date (after 1950!)
 | 
|---|
| 44 |  S XMFDATE=$G(XMINSTR("FDATE"),XMFIRST)
 | 
|---|
| 45 |  S XMTDATE=$G(XMINSTR("TDATE"),DT)
 | 
|---|
| 46 |  D INITAPI^XMVVITAE
 | 
|---|
| 47 |  D INIT^XMXADDR
 | 
|---|
| 48 |  D CHKADDR^XMXADDR(XMDUZ,.XMTO)
 | 
|---|
| 49 |  I '$$GOTADDR^XMXADDR S XMABORT=1 Q
 | 
|---|
| 50 |  I $G(XMGRP)]"" S XMGRP(XMGRP)=$O(^XMB(3.8,"B",XMGRP,0))
 | 
|---|
| 51 |  S XMGN=""
 | 
|---|
| 52 |  F  S XMGN=$O(XMGRP(XMGN)) Q:XMGN=""  D
 | 
|---|
| 53 |  . S XMI=XMGRP(XMGN)
 | 
|---|
| 54 |  . S XMGROUP("G."_XMGN_$S($P($G(^XMB(3.8,XMI,0)),U,2)="PR":XMPRIVAT,1:""))=XMI
 | 
|---|
| 55 |  K XMGRP
 | 
|---|
| 56 |  I $D(XMINSTR("SELF BSKT")) S XMX("SELF BSKT")=XMINSTR("SELF BSKT")
 | 
|---|
| 57 |  Q
 | 
|---|
| 58 | SAVFWD(XMX) ;
 | 
|---|
| 59 |  S XMX("RESTORE")=0
 | 
|---|
| 60 |  M ^TMP("XM",$J,"SAVE")=^TMP("XMY",$J)
 | 
|---|
| 61 |  S XMX("ONE")=$O(^TMP("XMY",$J,"")) ; First recipient.  Is it the only one?
 | 
|---|
| 62 |  I $O(^TMP("XMY",$J,XMX("ONE")))'="" S XMX("ONE")=0 ; There's more than one recipient
 | 
|---|
| 63 |  Q
 | 
|---|
| 64 | CHKADD(XMX) ;
 | 
|---|
| 65 |  S XMX("FWDBY")=XMV("NAME")_$S(XMDUZ=DUZ:"",1:$$EZBLD^DIALOG(38008,XMV("DUZ NAME")))_" "_$$MMDT^XMXUTIL1($$NOW^XLFDT) ; " (Surrogate: _x_)"
 | 
|---|
| 66 |  S XMI=0 ; Delete any remote addresses - responses won't be forwarded.
 | 
|---|
| 67 |  F  S XMI=$O(^TMP("XMY",$J,XMI)) Q:XMI=""  K:+XMI'=XMI ^(XMI)
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 | ADDFWD(XMDUZ,XMGROUP,XMWHAT,XMFDATE,XMTDATE,XMX) ;
 | 
|---|
| 70 |  N XMZ,XMCRE8,XMGN
 | 
|---|
| 71 |  S XMZ=0
 | 
|---|
| 72 |  S XMCRE8=XMFDATE-.1
 | 
|---|
| 73 |  F  S XMCRE8=$O(^XMB(3.9,"C",XMCRE8)) Q:'XMCRE8  Q:XMCRE8>XMTDATE  D  Q:$G(ZTSTOP)
 | 
|---|
| 74 |  . I $$S^%ZTLOAD S ZTSTOP=1 Q
 | 
|---|
| 75 |  . F  S XMZ=$O(^XMB(3.9,"C",XMCRE8,XMZ)) Q:'XMZ  D
 | 
|---|
| 76 |  . . Q:$$ZCLOSED^XMXSEC(XMZ)  ; Message is closed
 | 
|---|
| 77 |  . . S XMGN=""
 | 
|---|
| 78 |  . . F  S XMGN=$O(XMGROUP(XMGN)) Q:XMGN=""  Q:$S($L(XMGN)<31:$D(^XMB(3.9,XMZ,6,"B",XMGN)),$D(^XMB(3.9,XMZ,6,"B",$E(XMGN,1,30))):(XMGN=$P($G(^XMB(3.9,XMZ,6,+$O(^XMB(3.9,XMZ,6,"B",$E(XMGN,1,30),0)),0)),U,1)),1:0)
 | 
|---|
| 79 |  . . Q:XMGN=""  ; Message is not addressed to any of the groups
 | 
|---|
| 80 |  . . I XMWHAT="F" D FWD(XMDUZ,XMZ,.XMX) Q
 | 
|---|
| 81 |  . . D ADD(XMDUZ,XMZ,.XMX)
 | 
|---|
| 82 |  Q
 | 
|---|
| 83 | FWD(XMDUZ,XMZ,XMX) ; Forward the message to the user
 | 
|---|
| 84 |  N XMINSTR
 | 
|---|
| 85 |  I $D(XMX("SELF BSKT")) S XMINSTR("SELF BSKT")=XMX("SELF BSKT")
 | 
|---|
| 86 |  I XMX("ONE")'=0 Q:$D(^XMB(3.9,XMZ,1,"C",XMX("ONE")))  ; User already on msg.
 | 
|---|
| 87 |  I XMX("ONE")=0 D  Q:'$D(^TMP("XMY",$J))
 | 
|---|
| 88 |  . I XMX("RESTORE") M ^TMP("XMY",$J)=^TMP("XM",$J,"SAVE") S XMX("RESTORE")=0
 | 
|---|
| 89 |  . N XMI
 | 
|---|
| 90 |  . S XMI=""
 | 
|---|
| 91 |  . F  S XMI=$O(^TMP("XMY",$J,XMI)) Q:XMI=""  D
 | 
|---|
| 92 |  . . Q:'$D(^XMB(3.9,XMZ,1,"C",XMI))  ; User not yet on msg.
 | 
|---|
| 93 |  . . K ^TMP("XMY",$J,XMI)  ; User on msg - don't forward to user.
 | 
|---|
| 94 |  . . S XMX("RESTORE")=1
 | 
|---|
| 95 |  D FWD^XMKP(XMDUZ,XMZ,.XMINSTR)
 | 
|---|
| 96 |  Q
 | 
|---|
| 97 | ADD(XMDUZ,XMZ,XMX) ; Add user(s) to message.
 | 
|---|
| 98 |  ; XMX("FWDBY")
 | 
|---|
| 99 |  N XMI,XMFDA,XMIENS,XMPRI
 | 
|---|
| 100 |  S XMPRI=$$ZPRI^XMXUTIL2(XMZ) ; Is msg priority?
 | 
|---|
| 101 |  ; Put users into RECIPIENT multiple
 | 
|---|
| 102 |  S XMI=0
 | 
|---|
| 103 |  F  S XMI=$O(^TMP("XMY",$J,XMI)) Q:'XMI  D
 | 
|---|
| 104 |  . Q:$D(^XMB(3.9,XMZ,1,"C",XMI))  ; User already on msg - don't add.
 | 
|---|
| 105 |  . D NEW^XMKP(XMZ,XMPRI,XMI,$G(^TMP("XMY",$J,XMI,1)),.XMFDA,.XMIENS) ; New recipient
 | 
|---|
| 106 |  . S XMFDA(3.91,XMIENS,8)=XMX("FWDBY") ; fwd by name date time
 | 
|---|
| 107 |  . S XMFDA(3.91,XMIENS,8.01)=XMDUZ  ; fwd by duz
 | 
|---|
| 108 |  . ; Need new field that says 'parked until next reply'.
 | 
|---|
| 109 |  . D UPDATE^DIE("","XMFDA")
 | 
|---|
| 110 |  Q
 | 
|---|
| 111 | NOTIFY(XMG,XMNEWMBR) ; If the group is restricted in any way,
 | 
|---|
| 112 |  ; notify the organizer & coordinator of the new members.
 | 
|---|
| 113 |  N XMREC,XMTO,I
 | 
|---|
| 114 |  S XMREC=^XMB(3.8,XMG,0)
 | 
|---|
| 115 |  I $P(XMREC,U,2)="PU",$P(XMREC,U,3)="y" Q
 | 
|---|
| 116 |  S I=$P($G(^XMB(3.8,XMG,3)),U) S:I XMTO(I)="" ; organizer
 | 
|---|
| 117 |  S I=$P(XMREC,U,7) S:I XMTO(I)="" ; coordinator
 | 
|---|
| 118 |  Q:$D(XMTO(DUZ))
 | 
|---|
| 119 |  N XMPARM,XMTEXT,XMINSTR,XMNAME,J
 | 
|---|
| 120 |  S I=0 F  S I=$O(XMNEWMBR(I)) Q:'I  S XMNAME($$NAME^XMXUTIL(I,1))=""
 | 
|---|
| 121 |  S J="" F I=1:1 S J=$O(XMNAME(J)) Q:J=""  S XMTEXT(I)=J
 | 
|---|
| 122 |  S XMINSTR("FROM")=.5
 | 
|---|
| 123 |  S XMPARM(1)=$$NAME^XMXUTIL(DUZ),XMPARM(2)=$P(^XMB(3.8,XMG,0),U,1)
 | 
|---|
| 124 |  D TASKBULL^XMXBULL(DUZ,"XM GROUP EDIT NOTIFY",.XMPARM,"XMTEXT",.XMTO,.XMINSTR)
 | 
|---|
| 125 |  Q
 | 
|---|