Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: XMBGRP

XMBGRP.m

Go to the documentation of this file.
XMBGRP ;ISC-SF/GMB - Mail Group APIs ;04/17/2002  07:44
 ;;8.0;MailMan;**47**;Jun 28, 2002;Build 6
 ; Was (WASH ISC)/JL,CAP
 ;
 ; Entry points (DBIA 1146):
 ; $$DM  Delete local members from a mail group.
 ; $$MG  Create a mail group or add members to an existing mail group.
MG(XMGROUP,XMTYPE,XMORG,XMSELF,XMY,XMDESC,XMQUIET) ; Create group or add members to existing group
 ;Example:
 ;S X=$$MG^XMBGRP(XMGROUP,XMTYPE,XMORG,XMSELF,.XMY,.XMDESC,XMQUIET)
 ;
 ;XMGROUP  =group name if creating a new group;
 ;         =group name or pointer to ^XMB(3.8,
 ;         if adding members to an existing group.
 ;XMTYPE   type of group - used only for creation
 ;         0=public (default)
 ;         1=private
 ;XMORG    group organizer - used only for creation
 ;         pointer to ^VA(200, (default=DUZ)
 ;XMSELF   allow self enrollment - used only for creation
 ;         0=no
 ;         1=yes (default)
 ;XMY      local group members (Array - Pass by reference)
 ;         XMY(member DUZ)=""
 ;XMDESC   description (Array - Pass by reference)
 ;         - used only for creation
 ;         Must be appropriate for FM word processing field.
 ;XMQUIET  silent flag
 ;         0=interactive
 ;         1=silent (default)
 N XMABORT,XMGIEN,XMGNAME
 S XMABORT=0
 D MGINIT(XMGROUP,.XMGIEN,.XMGNAME,.XMTYPE,.XMORG,.XMSELF,.XMY,.XMDESC,.XMQUIET,.XMABORT)
 I XMABORT K XMY Q 0
 I '$D(XMGIEN) D
 . D CREATE(XMGNAME,.XMGIEN,XMTYPE,XMORG,XMSELF,.XMDESC,XMQUIET,.XMABORT)  Q:XMABORT
 . Q:'$O(XMY(""))
 . D ADD(XMGIEN,.XMY,.XMABORT) Q:XMABORT
 . D NOTIFY("Members have been added to the "_XMGNAME_" Mail Group.",XMQUIET)
 E  D
 . D ADD(XMGIEN,.XMY,.XMABORT)
 K XMY
 Q $S(XMABORT:0,1:XMGIEN)
MGINIT(XMGROUP,XMGIEN,XMGNAME,XMTYPE,XMORG,XMSELF,XMY,XMDESC,XMQUIET,XMABORT) ;
 D CHKGROUP(XMGROUP,.XMGIEN,.XMGNAME,.XMABORT) Q:XMABORT
 I $D(XMGIEN),'$O(XMY("")) D  Q
 . D NOTIFY("E907 No members specified to add to Mail Group "_XMGNAME,XMQUIET)
 . S XMABORT=1
 D CHKVAL(.XMTYPE,"XMTYPE",2,0,.XMABORT) Q:XMABORT
 S:$G(XMORG)="" XMORG=DUZ
 S:XMORG<1 XMORG=.5
 I '$D(^VA(200,XMORG,0)) D  Q
 . D NOTIFY("E904 "_XMORG_" is not a user to use as an organizer of a mail group.",XMQUIET)
 . S XMABORT=1
 D CHKVAL(.XMSELF,"XMSELF",4,1,.XMABORT) Q:XMABORT
 D CHKVAL(.XMQUIET,"XMQUIET",7,1,.XMABORT) Q:XMABORT
 S:$D(ZTQUEUED) XMQUIET=1
 Q
CHKGROUP(XMGROUP,XMGIEN,XMGNAME,XMABORT) ;
 I +XMGROUP=XMGROUP D  Q
 . S XMGIEN=XMGROUP
 . S XMGNAME=$P($G(^XMB(3.8,XMGIEN,0)),U,1)
 . I XMGNAME="" D
 . . D NOTIFY("E910 Mail Group "_XMGROUP_" could not be found !",XMQUIET)
 . . S XMABORT=1
 S XMGNAME=XMGROUP
 I $L(XMGNAME)<3 D  Q
 . D NOTIFY("E901 "_XMGNAME_" is not valid -- it is shorter than 3 characters",XMQUIET)
 . S XMABORT=1
 I $L(XMGNAME)>30 D  Q
 . D NOTIFY("E902 "_XMGNAME_" is not valid -- it is longer than 30 characters",XMQUIET)
 . S XMABORT=1
 I $D(^XMB(3.8,"B",XMGNAME)) S XMGIEN=$O(^(XMGNAME,0))
 Q
CHKVAL(XMVAL,XMVNAME,XMPOSN,XMDEFALT,XMABORT) ;
 S:$G(XMVAL)="" XMVAL=XMDEFALT
 I XMVAL=0!(XMVAL=1) Q
 D NOTIFY("E903 Parameter "_XMPOSN_"="_XMVAL_" (not valid, must be 0 or 1).",XMQUIET)
 S XMABORT=1
 Q
CREATE(XMGNAME,XMGIEN,XMTYPE,XMORG,XMSELF,XMDESC,XMQUIET,XMABORT) ;
 N DIC,Y,DA,DO,DD,X
 S X=XMGNAME
 S DIC="^XMB(3.8,",DIC(0)="FZMN"_$S(XMQUIET:"",1:"E")
 ;** XM*8.0*47 Modified the DIR("DR") array to use a four slash stuff for the organizer field to prevent Fileman from reading four digit DUZ's as last four of SSN **
 S DIC("DR")="4///"_$S(XMTYPE=0:"PU",1:"PR")_";5////"_XMORG_";10///0;7///"_$S(XMSELF:"y",1:"n")
 D FILE^DICN
 I Y<0 D  Q
 . D NOTIFY("Mail Group ("_XMGNAME_") creation failed!",XMQUIET)
 . S XMABORT=1
 S XMGIEN=+Y
 ;Add descriptive text
 I $O(XMDESC(""))'="" D
 . D WP^DIE(3.8,XMGIEN_",",3,"","XMDESC")
 . K XMDESC
 D NOTIFY("Mail Group "_XMGROUP_" created.",XMQUIET)
 Q
ADD(XMGIEN,XMY,XMABORT) ; Add local members
 L +^XMB(3.8,XMGIEN):9 E  D  Q
 . D NOTIFY("E906 "_XMGROUP_" File could not be locked - Did not add members.",XMQUIET)
 . S XMABORT=1
 N XMUSER,XMFDA,XMADDCNT
 S XMUSER="",XMADDCNT=0
 F  S XMUSER=$O(XMY(XMUSER)) Q:XMUSER=""  D
 . I '$D(^VA(200,XMUSER,0))!'$D(^XMB(3.7,XMUSER,0)) D  Q
 . . D NOTIFY("E908 Invalid member ("_XMUSER_") - NOT pointer to ^VA(200",XMQUIET)
 . Q:$D(^XMB(3.8,XMGIEN,1,"B",XMUSER))  ; already a member
 . S XMFDA(3.81,"+1,"_XMGIEN_",",.01)=XMUSER
 . D UPDATE^DIE("","XMFDA")
 . S XMADDCNT=XMADDCNT+1
 L -^XMB(3.8,XMGIEN)
 K XMY
 S:'XMADDCNT XMABORT=1  ; No members added
 Q
DM(XMGROUP,XMY,XMQUIET) ; Delete members
 ;XMGROUP  Mail Group Name or entry number
 ;XMY      Array of members to remove
 ;         XMY(local member DUZ)=""
 ;XMQUIET  Silent Flag
 N XMGIEN,XMUSER,DIK,DA,XMABORT
 S XMABORT=0
 D DMINIT(XMGROUP,.XMGIEN,.XMY,.XMQUIET,.XMABORT)
 I XMABORT K XMY Q 0
 L +^XMB(3.8,XMGIEN):9 E  D  Q 0
 . D NOTIFY("E906 "_XMGROUP_" File could not be locked - Did not delete members.",XMQUIET)
 . S XMABORT=1
 S DA(1)=XMGIEN,DIK="^XMB(3.8,"_XMGIEN_",1,"
 S XMUSER=""
 F  S XMUSER=$O(XMY(XMUSER)) Q:XMUSER=""  D
 . S DA=$O(^XMB(3.8,XMGIEN,1,"B",XMUSER,0)) Q:'DA
 . D ^DIK
 K XMY
 L -^XMB(3.8,XMGIEN)
 Q 1
DMINIT(XMGROUP,XMGIEN,XMY,XMQUIET,XMABORT) ;
 N XMGNAME
 D CHKGROUP(XMGROUP,.XMGIEN,.XMGNAME,.XMABORT) Q:XMABORT
 I '$D(XMGIEN) D  Q
 . D NOTIFY("E910 Mail Group "_XMGROUP_" could not be found !",XMQUIET)
 . S XMABORT=1
 D CHKVAL(.XMQUIET,"XMQUIET",3,1,.XMABORT) Q:XMABORT
 S:$D(ZTQUEUED) XMQUIET=1
 I '$O(XMY("")) D  Q
 . D NOTIFY("E909 Member delete attempted with no members specified.",XMQUIET)
 . S XMABORT=1
 Q
NOTIFY(XMMSG,XMQUIET) ; Notification
 N I,XMTEXT
 S XMTEXT(1)="There was a call to the Mail Group Applications Programmer"
 S XMTEXT(2)="Interface (API) that required notification to the user:"
 S XMTEXT(3)=""
 S XMTEXT(4)=XMMSG
 I XMQUIET D SENDMSG(.XMTEXT) Q
 F I=1:1:4 W !,XMTEXT(I)
 W !,$C(7)
 Q
SENDMSG(XMTEXT) ;
 N XMY,XMDUZ,XMSUB
 S XMY(.5)="",XMY(DUZ)="",XMTEXT="XMTEXT("
 S XMDUZ=.5,XMSUB="MAIL GROUP API"
 D ^XMD
 Q