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