| 1 | XMBGRP ;ISC-SF/GMB-Mail Group APIs ;04/17/2002  07:44 | 
|---|
| 2 | ;;8.0;MailMan;;Jun 28, 2002 | 
|---|
| 3 | ; Was (WASH ISC)/JL,CAP | 
|---|
| 4 | ; | 
|---|
| 5 | ; Entry points (DBIA 1146): | 
|---|
| 6 | ; $$DM  Delete local members from a mail group. | 
|---|
| 7 | ; $$MG  Create a mail group or add members to an existing mail group. | 
|---|
| 8 | MG(XMGROUP,XMTYPE,XMORG,XMSELF,XMY,XMDESC,XMQUIET) ; Create group or add members to existing group | 
|---|
| 9 | ;Example: | 
|---|
| 10 | ;S X=$$MG^XMBGRP(XMGROUP,XMTYPE,XMORG,XMSELF,.XMY,.XMDESC,XMQUIET) | 
|---|
| 11 | ; | 
|---|
| 12 | ;XMGROUP  =group name if creating a new group; | 
|---|
| 13 | ;         =group name or pointer to ^XMB(3.8, | 
|---|
| 14 | ;         if adding members to an existing group. | 
|---|
| 15 | ;XMTYPE   type of group - used only for creation | 
|---|
| 16 | ;         0=public (default) | 
|---|
| 17 | ;         1=private | 
|---|
| 18 | ;XMORG    group organizer - used only for creation | 
|---|
| 19 | ;         pointer to ^VA(200, (default=DUZ) | 
|---|
| 20 | ;XMSELF   allow self enrollment - used only for creation | 
|---|
| 21 | ;         0=no | 
|---|
| 22 | ;         1=yes (default) | 
|---|
| 23 | ;XMY      local group members (Array - Pass by reference) | 
|---|
| 24 | ;         XMY(member DUZ)="" | 
|---|
| 25 | ;XMDESC   description (Array - Pass by reference) | 
|---|
| 26 | ;         - used only for creation | 
|---|
| 27 | ;         Must be appropriate for FM word processing field. | 
|---|
| 28 | ;XMQUIET  silent flag | 
|---|
| 29 | ;         0=interactive | 
|---|
| 30 | ;         1=silent (default) | 
|---|
| 31 | N XMABORT,XMGIEN,XMGNAME | 
|---|
| 32 | S XMABORT=0 | 
|---|
| 33 | D MGINIT(XMGROUP,.XMGIEN,.XMGNAME,.XMTYPE,.XMORG,.XMSELF,.XMY,.XMDESC,.XMQUIET,.XMABORT) | 
|---|
| 34 | I XMABORT K XMY Q 0 | 
|---|
| 35 | I '$D(XMGIEN) D | 
|---|
| 36 | . D CREATE(XMGNAME,.XMGIEN,XMTYPE,XMORG,XMSELF,.XMDESC,XMQUIET,.XMABORT)  Q:XMABORT | 
|---|
| 37 | . Q:'$O(XMY("")) | 
|---|
| 38 | . D ADD(XMGIEN,.XMY,.XMABORT) Q:XMABORT | 
|---|
| 39 | . D NOTIFY("Members have been added to the "_XMGNAME_" Mail Group.",XMQUIET) | 
|---|
| 40 | E  D | 
|---|
| 41 | . D ADD(XMGIEN,.XMY,.XMABORT) | 
|---|
| 42 | K XMY | 
|---|
| 43 | Q $S(XMABORT:0,1:XMGIEN) | 
|---|
| 44 | MGINIT(XMGROUP,XMGIEN,XMGNAME,XMTYPE,XMORG,XMSELF,XMY,XMDESC,XMQUIET,XMABORT) ; | 
|---|
| 45 | D CHKGROUP(XMGROUP,.XMGIEN,.XMGNAME,.XMABORT) Q:XMABORT | 
|---|
| 46 | I $D(XMGIEN),'$O(XMY("")) D  Q | 
|---|
| 47 | . D NOTIFY("E907 No members specified to add to Mail Group "_XMGNAME,XMQUIET) | 
|---|
| 48 | . S XMABORT=1 | 
|---|
| 49 | D CHKVAL(.XMTYPE,"XMTYPE",2,0,.XMABORT) Q:XMABORT | 
|---|
| 50 | S:$G(XMORG)="" XMORG=DUZ | 
|---|
| 51 | S:XMORG<1 XMORG=.5 | 
|---|
| 52 | I '$D(^VA(200,XMORG,0)) D  Q | 
|---|
| 53 | . D NOTIFY("E904 "_XMORG_" is not a user to use as an organizer of a mail group.",XMQUIET) | 
|---|
| 54 | . S XMABORT=1 | 
|---|
| 55 | D CHKVAL(.XMSELF,"XMSELF",4,1,.XMABORT) Q:XMABORT | 
|---|
| 56 | D CHKVAL(.XMQUIET,"XMQUIET",7,1,.XMABORT) Q:XMABORT | 
|---|
| 57 | S:$D(ZTQUEUED) XMQUIET=1 | 
|---|
| 58 | Q | 
|---|
| 59 | CHKGROUP(XMGROUP,XMGIEN,XMGNAME,XMABORT) ; | 
|---|
| 60 | I +XMGROUP=XMGROUP D  Q | 
|---|
| 61 | . S XMGIEN=XMGROUP | 
|---|
| 62 | . S XMGNAME=$P($G(^XMB(3.8,XMGIEN,0)),U,1) | 
|---|
| 63 | . I XMGNAME="" D | 
|---|
| 64 | . . D NOTIFY("E910 Mail Group "_XMGROUP_" could not be found !",XMQUIET) | 
|---|
| 65 | . . S XMABORT=1 | 
|---|
| 66 | S XMGNAME=XMGROUP | 
|---|
| 67 | I $L(XMGNAME)<3 D  Q | 
|---|
| 68 | . D NOTIFY("E901 "_XMGNAME_" is not valid -- it is shorter than 3 characters",XMQUIET) | 
|---|
| 69 | . S XMABORT=1 | 
|---|
| 70 | I $L(XMGNAME)>30 D  Q | 
|---|
| 71 | . D NOTIFY("E902 "_XMGNAME_" is not valid -- it is longer than 30 characters",XMQUIET) | 
|---|
| 72 | . S XMABORT=1 | 
|---|
| 73 | I $D(^XMB(3.8,"B",XMGNAME)) S XMGIEN=$O(^(XMGNAME,0)) | 
|---|
| 74 | Q | 
|---|
| 75 | CHKVAL(XMVAL,XMVNAME,XMPOSN,XMDEFALT,XMABORT) ; | 
|---|
| 76 | S:$G(XMVAL)="" XMVAL=XMDEFALT | 
|---|
| 77 | I XMVAL=0!(XMVAL=1) Q | 
|---|
| 78 | D NOTIFY("E903 Parameter "_XMPOSN_"="_XMVAL_" (not valid, must be 0 or 1).",XMQUIET) | 
|---|
| 79 | S XMABORT=1 | 
|---|
| 80 | Q | 
|---|
| 81 | CREATE(XMGNAME,XMGIEN,XMTYPE,XMORG,XMSELF,XMDESC,XMQUIET,XMABORT) ; | 
|---|
| 82 | N DIC,Y,DA,DO,DD,X | 
|---|
| 83 | S X=XMGNAME | 
|---|
| 84 | S DIC="^XMB(3.8,",DIC(0)="FZMN"_$S(XMQUIET:"",1:"E") | 
|---|
| 85 | S DIC("DR")="4///"_$S(XMTYPE=0:"PU",1:"PR")_";5///"_XMORG_";10///0;7///"_$S(XMSELF:"y",1:"n") | 
|---|
| 86 | D FILE^DICN | 
|---|
| 87 | I Y<0 D  Q | 
|---|
| 88 | . D NOTIFY("Mail Group ("_XMGNAME_") creation failed!",XMQUIET) | 
|---|
| 89 | . S XMABORT=1 | 
|---|
| 90 | S XMGIEN=+Y | 
|---|
| 91 | ;Add descriptive text | 
|---|
| 92 | I $O(XMDESC(""))'="" D | 
|---|
| 93 | . D WP^DIE(3.8,XMGIEN_",",3,"","XMDESC") | 
|---|
| 94 | . K XMDESC | 
|---|
| 95 | D NOTIFY("Mail Group "_XMGROUP_" created.",XMQUIET) | 
|---|
| 96 | Q | 
|---|
| 97 | ADD(XMGIEN,XMY,XMABORT) ; Add local members | 
|---|
| 98 | L +^XMB(3.8,XMGIEN):9 E  D  Q | 
|---|
| 99 | . D NOTIFY("E906 "_XMGROUP_" File could not be locked - Did not add members.",XMQUIET) | 
|---|
| 100 | . S XMABORT=1 | 
|---|
| 101 | N XMUSER,XMFDA,XMADDCNT | 
|---|
| 102 | S XMUSER="",XMADDCNT=0 | 
|---|
| 103 | F  S XMUSER=$O(XMY(XMUSER)) Q:XMUSER=""  D | 
|---|
| 104 | . I '$D(^VA(200,XMUSER,0))!'$D(^XMB(3.7,XMUSER,0)) D  Q | 
|---|
| 105 | . . D NOTIFY("E908 Invalid member ("_XMUSER_") - NOT pointer to ^VA(200",XMQUIET) | 
|---|
| 106 | . Q:$D(^XMB(3.8,XMGIEN,1,"B",XMUSER))  ; already a member | 
|---|
| 107 | . S XMFDA(3.81,"+1,"_XMGIEN_",",.01)=XMUSER | 
|---|
| 108 | . D UPDATE^DIE("","XMFDA") | 
|---|
| 109 | . S XMADDCNT=XMADDCNT+1 | 
|---|
| 110 | L -^XMB(3.8,XMGIEN) | 
|---|
| 111 | K XMY | 
|---|
| 112 | S:'XMADDCNT XMABORT=1  ; No members added | 
|---|
| 113 | Q | 
|---|
| 114 | DM(XMGROUP,XMY,XMQUIET) ; Delete members | 
|---|
| 115 | ;XMGROUP  Mail Group Name or entry number | 
|---|
| 116 | ;XMY      Array of members to remove | 
|---|
| 117 | ;         XMY(local member DUZ)="" | 
|---|
| 118 | ;XMQUIET  Silent Flag | 
|---|
| 119 | N XMGIEN,XMUSER,DIK,DA,XMABORT | 
|---|
| 120 | S XMABORT=0 | 
|---|
| 121 | D DMINIT(XMGROUP,.XMGIEN,.XMY,.XMQUIET,.XMABORT) | 
|---|
| 122 | I XMABORT K XMY Q 0 | 
|---|
| 123 | L +^XMB(3.8,XMGIEN):9 E  D  Q 0 | 
|---|
| 124 | . D NOTIFY("E906 "_XMGROUP_" File could not be locked - Did not delete members.",XMQUIET) | 
|---|
| 125 | . S XMABORT=1 | 
|---|
| 126 | S DA(1)=XMGIEN,DIK="^XMB(3.8,"_XMGIEN_",1," | 
|---|
| 127 | S XMUSER="" | 
|---|
| 128 | F  S XMUSER=$O(XMY(XMUSER)) Q:XMUSER=""  D | 
|---|
| 129 | . S DA=$O(^XMB(3.8,XMGIEN,1,"B",XMUSER,0)) Q:'DA | 
|---|
| 130 | . D ^DIK | 
|---|
| 131 | K XMY | 
|---|
| 132 | L -^XMB(3.8,XMGIEN) | 
|---|
| 133 | Q 1 | 
|---|
| 134 | DMINIT(XMGROUP,XMGIEN,XMY,XMQUIET,XMABORT) ; | 
|---|
| 135 | N XMGNAME | 
|---|
| 136 | D CHKGROUP(XMGROUP,.XMGIEN,.XMGNAME,.XMABORT) Q:XMABORT | 
|---|
| 137 | I '$D(XMGIEN) D  Q | 
|---|
| 138 | . D NOTIFY("E910 Mail Group "_XMGROUP_" could not be found !",XMQUIET) | 
|---|
| 139 | . S XMABORT=1 | 
|---|
| 140 | D CHKVAL(.XMQUIET,"XMQUIET",3,1,.XMABORT) Q:XMABORT | 
|---|
| 141 | S:$D(ZTQUEUED) XMQUIET=1 | 
|---|
| 142 | I '$O(XMY("")) D  Q | 
|---|
| 143 | . D NOTIFY("E909 Member delete attempted with no members specified.",XMQUIET) | 
|---|
| 144 | . S XMABORT=1 | 
|---|
| 145 | Q | 
|---|
| 146 | NOTIFY(XMMSG,XMQUIET) ; Notification | 
|---|
| 147 | N I,XMTEXT | 
|---|
| 148 | S XMTEXT(1)="There was a call to the Mail Group Applications Programmer" | 
|---|
| 149 | S XMTEXT(2)="Interface (API) that required notification to the user:" | 
|---|
| 150 | S XMTEXT(3)="" | 
|---|
| 151 | S XMTEXT(4)=XMMSG | 
|---|
| 152 | I XMQUIET D SENDMSG(.XMTEXT) Q | 
|---|
| 153 | F I=1:1:4 W !,XMTEXT(I) | 
|---|
| 154 | W !,$C(7) | 
|---|
| 155 | Q | 
|---|
| 156 | SENDMSG(XMTEXT) ; | 
|---|
| 157 | N XMY,XMDUZ,XMSUB | 
|---|
| 158 | S XMY(.5)="",XMY(DUZ)="",XMTEXT="XMTEXT(" | 
|---|
| 159 | S XMDUZ=.5,XMSUB="MAIL GROUP API" | 
|---|
| 160 | D ^XMD | 
|---|
| 161 | Q | 
|---|