| [613] | 1 | XMJMS ;ISC-SF/GMB-Interactive Send ;08/24/2001  12:02
 | 
|---|
 | 2 |  ;;8.0;MailMan;;Jun 28, 2002
 | 
|---|
 | 3 |  ; Replaces ^XMA2,^XMA20 (ISC-WASH/CAP/THM)
 | 
|---|
 | 4 |  ; Entry points used by MailMan options (not covered by DBIA):
 | 
|---|
 | 5 |  ; PAKMAN  XMPACK - Load PackMan message
 | 
|---|
 | 6 |  ; SEND    XMSEND - Send a message
 | 
|---|
 | 7 |  ; *** BLOB^XMA2B (Imaging package) calls entry BLOB
 | 
|---|
 | 8 | SEND ;
 | 
|---|
 | 9 |  N XMSUBJ,XMZ,XMABORT
 | 
|---|
 | 10 |  S XMABORT=0
 | 
|---|
 | 11 |  D INIT(XMDUZ,.XMABORT) Q:XMABORT
 | 
|---|
 | 12 |  D SUBJ(.XMSUBJ,.XMABORT) Q:XMABORT
 | 
|---|
 | 13 |  D CRE8XMZ^XMXSEND(XMSUBJ,.XMZ,1) I XMZ<1 S XMABORT=1 Q
 | 
|---|
 | 14 |  D:'$G(XMPAKMAN) EDITON(XMDUZ,XMZ,"",.XMBLOB)
 | 
|---|
 | 15 |  D PROCESS(XMDUZ,XMZ,XMSUBJ,.XMABORT)
 | 
|---|
 | 16 |  D:XMABORT=DTIME HALT($$EZBLD^DIALOG(34260)) ; sending
 | 
|---|
 | 17 |  D:'$G(XMPAKMAN) EDITOFF(XMDUZ)
 | 
|---|
 | 18 |  D:XMABORT KILLMSG^XMXUTIL(XMZ)
 | 
|---|
 | 19 |  Q
 | 
|---|
 | 20 | PAKMAN ;
 | 
|---|
 | 21 |  N XMPAKMAN,XMLOAD,X,XMR
 | 
|---|
 | 22 |  S (XMPAKMAN,XMLOAD)=1
 | 
|---|
 | 23 |  D SEND
 | 
|---|
 | 24 |  Q
 | 
|---|
 | 25 | BLOB ;
 | 
|---|
 | 26 |  N XMBLOB,XMOUT
 | 
|---|
 | 27 |  S XMBLOB=1
 | 
|---|
 | 28 |  D SEND
 | 
|---|
 | 29 |  Q
 | 
|---|
 | 30 | INIT(XMDUZ,XMABORT) ; Clean up and initialize for Sending a message
 | 
|---|
 | 31 |  D CHECK^XMVVITAE
 | 
|---|
 | 32 |  I XMDUZ'=DUZ,'$$WPRIV^XMXSEC D  Q  ; Replaces SUR^XMA22
 | 
|---|
 | 33 |  . S XMABORT=1
 | 
|---|
 | 34 |  . D SHOW^XMJERR
 | 
|---|
 | 35 |  D CHKLOCK(XMDUZ,.XMABORT)
 | 
|---|
 | 36 |  Q
 | 
|---|
 | 37 | CHKLOCK(XMDUZ,XMABORT) ;
 | 
|---|
 | 38 |  ; FYI, The menu system releases all locks upon exit from an option.
 | 
|---|
 | 39 |  I $G(XMV("PRIV"),"W")["W" S XMV("NOSEND")=0
 | 
|---|
 | 40 |  I 'XMV("NOSEND") D
 | 
|---|
 | 41 |  . L +^XMB(3.7,"AD",XMDUZ):0 E  S XMV("NOSEND")=1
 | 
|---|
 | 42 |  I XMV("NOSEND") D  Q  ; Replaces TWO^XMA1E
 | 
|---|
 | 43 |  . W !,$$EZBLD^DIALOG(37453) ; This session is concurrent with another.  You may not do this.
 | 
|---|
 | 44 |  . S XMABORT=1
 | 
|---|
 | 45 |  Q
 | 
|---|
 | 46 | PROCESS(XMDUZ,XMZ,XMSUBJ,XMABORT) ;
 | 
|---|
 | 47 |  N XMINSTR,XMRESTR
 | 
|---|
 | 48 |  I '$G(XMPAKMAN) D BODY(XMDUZ,XMZ,XMSUBJ,.XMRESTR,.XMABORT) Q:XMABORT
 | 
|---|
 | 49 |  I $G(XMBLOB) D ADD^XMA2B K XMBLOB I $D(XMOUT) S XMABORT=1 Q
 | 
|---|
 | 50 |  I $G(XMPAKMAN) D PACKIT(XMDUZ,XMZ,XMSUBJ,.XMABORT) Q:XMABORT
 | 
|---|
 | 51 |  D INIT^XMXADDR
 | 
|---|
 | 52 |  D TOWHOM^XMJMT(XMDUZ,$$EZBLD^DIALOG(34110),.XMINSTR,.XMRESTR,.XMABORT) ; Send
 | 
|---|
 | 53 |  I $G(XMPAKMAN),'XMABORT D PSECURE^XMPSEC(XMZ,.XMABORT)
 | 
|---|
 | 54 |  D:'XMABORT SENDMSG^XMJMSO(XMDUZ,XMZ,XMSUBJ,.XMINSTR,.XMRESTR,.XMABORT)
 | 
|---|
 | 55 |  D CLEANUP^XMXADDR
 | 
|---|
 | 56 |  Q
 | 
|---|
 | 57 | SUBJ(XMSUBJ,XMABORT) ; ask subject
 | 
|---|
 | 58 |  N DIR,X,Y,XMY
 | 
|---|
 | 59 |  S DIR("A")=$$EZBLD^DIALOG(34002) ; Subject:
 | 
|---|
 | 60 |  S DIR(0)="FOU^3:65"
 | 
|---|
 | 61 |  S:$D(XMSUBJ) DIR("B")=XMSUBJ
 | 
|---|
 | 62 |  S DIR("?")=$$EZBLD^DIALOG(39403) ; Subject must be from 3 to 65 characters long.
 | 
|---|
 | 63 |  S DIR("??")="^D QSUBJ^XMJMS"
 | 
|---|
 | 64 |  F  D  Q:XMY'=""!XMABORT
 | 
|---|
 | 65 |  . W !
 | 
|---|
 | 66 |  . D ^DIR S XMY=Y
 | 
|---|
 | 67 |  . I $D(DTOUT)!$D(DUOUT) S XMABORT=1 Q
 | 
|---|
 | 68 |  . D VSUBJ^XMXPARM(.XMY)
 | 
|---|
 | 69 |  . I $D(XMERR) D SHOW^XMJERR S XMY=""
 | 
|---|
 | 70 |  Q:XMABORT
 | 
|---|
 | 71 |  S XMSUBJ=$S(XMY[U:$$ENCODEUP^XMXUTIL1(XMY),1:XMY)
 | 
|---|
 | 72 |  Q
 | 
|---|
 | 73 | QSUBJ ;
 | 
|---|
 | 74 |  ;This is the subject of the message, shown whenever the message is displayed.
 | 
|---|
 | 75 |  ;Leading and trailing blanks are deleted.
 | 
|---|
 | 76 |  ;Any sequence of 3 or more blanks is reduced to 2 blanks.
 | 
|---|
 | 77 |  N XMTEXT
 | 
|---|
 | 78 |  D BLD^DIALOG(34261,"","","XMTEXT","F")
 | 
|---|
 | 79 |  D MSG^DIALOG("WH","",79,"","XMTEXT")
 | 
|---|
 | 80 |  Q:$D(XMSUBJ)
 | 
|---|
 | 81 |  W !!,$$EZBLD^DIALOG(34262) ; If you want to send a message with no subject, just press ENTER.
 | 
|---|
 | 82 |  Q
 | 
|---|
 | 83 | BODY(XMDUZ,XMZ,DIWESUB,XMRESTR,XMABORT) ; Replaces ENT1^XMA2
 | 
|---|
 | 84 |  N DIC
 | 
|---|
 | 85 |  ;W !,"You may ",$S($D(^XMB(3.9,XMZ,2,0)):"edit",1:"enter")," the ",$S($G(XMPAKMAN):"description of the PackMan",1:"text of the")," message..."
 | 
|---|
 | 86 |  W !,$$EZBLD^DIALOG($S($D(^XMB(3.9,XMZ,2,0)):34263.1,1:34263)) ; You may edit/enter the text of the message...
 | 
|---|
 | 87 |  S DWPK=1,DWLW=75,DIC="^XMB(3.9,"_XMZ_",2,"
 | 
|---|
 | 88 |  D EN^DIWE
 | 
|---|
 | 89 |  ; The following $D check is to recover from situations in which a user
 | 
|---|
 | 90 |  ; is in the middle of replying to a message, then opens a 2nd session,
 | 
|---|
 | 91 |  ; and somehow the reply message stub gets deleted in the 2nd session,
 | 
|---|
 | 92 |  ; and when the user returns to the 1st session and sends the reply, it
 | 
|---|
 | 93 |  ; says the reply is from * No Name *.  A lock on ^XMB(3.7,"AD",XMDUZ)
 | 
|---|
 | 94 |  ; is supposed to prevent the second session from doing this, but for
 | 
|---|
 | 95 |  ; some reason, at some sites, the second session does not see the lock.
 | 
|---|
 | 96 |  ; So we recreate the message stub here, in the 1st session, if it was
 | 
|---|
 | 97 |  ; deleted in the 2nd session.
 | 
|---|
 | 98 |  I '$D(^XMB(3.9,XMZ,0)) D
 | 
|---|
 | 99 |  . N XMSUBJ
 | 
|---|
 | 100 |  . S XMSUBJ=$S($D(XMRESTR("REPLYTO")):"R"_XMRESTR("REPLYTO"),1:DIWESUB)
 | 
|---|
 | 101 |  . S ^XMB(3.9,XMZ,0)=XMSUBJ
 | 
|---|
 | 102 |  . S ^XMB(3.9,"B",$E(XMSUBJ,1,30),XMZ)=""
 | 
|---|
 | 103 |  . I '$D(^XMB(3.9,XMZ,.6)) S ^XMB(3.9,XMZ,.6)=DT,^XMB(3.9,"C",DT,XMZ)=""
 | 
|---|
 | 104 |  I '$O(^XMB(3.9,XMZ,2,0)) S XMABORT=1 Q
 | 
|---|
 | 105 |  D CHKLINES^XMXSEC1(XMDUZ,XMZ,.XMRESTR)
 | 
|---|
 | 106 |  Q
 | 
|---|
 | 107 | PACKIT(XMDUZ,XMZ,XMSUBJ,XMABORT) ;
 | 
|---|
 | 108 |  N XCF,XCN,XMA,XMB0,XMP2,X,Y
 | 
|---|
 | 109 |  D ^XMP
 | 
|---|
 | 110 |  I X=U,Y=-1 S XMABORT=1
 | 
|---|
 | 111 |  Q
 | 
|---|
 | 112 | EDITON(XMDUZ,XMZ,XMZR,XMBLOB) ; Note that msg is being edited.  Replaces D^XMA0A
 | 
|---|
 | 113 |  N XMFDA,XMIENS
 | 
|---|
 | 114 |  S XMIENS=XMDUZ_","
 | 
|---|
 | 115 |  S XMFDA(3.7,XMIENS,5)=XMZ          ; current message/response
 | 
|---|
 | 116 |  S XMFDA(3.7,XMIENS,7)=$G(XMZR)     ; original message for response
 | 
|---|
 | 117 |  S XMFDA(3.7,XMIENS,7.5)=$G(XMBLOB) ; 0/1=BLOB yes/no
 | 
|---|
 | 118 |  D FILE^DIE("","XMFDA")
 | 
|---|
 | 119 |  Q
 | 
|---|
 | 120 | EDITOFF(XMDUZ) ; Note that msg is no longer being edited.
 | 
|---|
 | 121 |  N XMFDA,XMIENS
 | 
|---|
 | 122 |  S XMIENS=XMDUZ_","
 | 
|---|
 | 123 |  S XMFDA(3.7,XMIENS,5)="@"
 | 
|---|
 | 124 |  S XMFDA(3.7,XMIENS,7)="@"
 | 
|---|
 | 125 |  S XMFDA(3.7,XMIENS,7.5)="@"
 | 
|---|
 | 126 |  D FILE^DIE("","XMFDA")
 | 
|---|
 | 127 |  Q
 | 
|---|
 | 128 | HALT(XMACTION) ;
 | 
|---|
 | 129 |  W $C(7),!
 | 
|---|
 | 130 |  ;You have timed out while _XMACTION_ a message.
 | 
|---|
 | 131 |  ;You can resume when you log back on and re-enter MailMan.
 | 
|---|
 | 132 |  ;Do it today, or your text may be purged this evening.
 | 
|---|
 | 133 |  N XMTEXT
 | 
|---|
 | 134 |  D BLD^DIALOG(34264,XMACTION,"","XMTEXT","F")
 | 
|---|
 | 135 |  D MSG^DIALOG("WM","",79,"","XMTEXT")
 | 
|---|
 | 136 |  G H^XUS
 | 
|---|
 | 137 | RECOVER(XMDUZ,XMZ,XMBLOB) ;
 | 
|---|
 | 138 |  N XMTEXT,XMSUBJ,XMABORT
 | 
|---|
 | 139 |  S XMABORT=0
 | 
|---|
 | 140 |  W $C(7),!
 | 
|---|
 | 141 |  ;You have / |1| has an unsent message in your buffer.
 | 
|---|
 | 142 |  D BLD^DIALOG($S(XMDUZ=DUZ:34265,1:34265.1),XMV("NAME"),"","XMTEXT","F")
 | 
|---|
 | 143 |  I $G(XMV("PRIV"),"W")'["W" D  Q
 | 
|---|
 | 144 |  . ;Since you don't have 'send' privilege, you may not complete this
 | 
|---|
 | 145 |  . ;message.  If we delete this message, you'll be able to read and
 | 
|---|
 | 146 |  . ;reply to messages in this mailbox.  If we leave it alone, you'll
 | 
|---|
 | 147 |  . ;be able to read messages, but you won't be able to reply to them.
 | 
|---|
 | 148 |  . D BLD^DIALOG(34267,"","","XMTEXT","F")
 | 
|---|
 | 149 |  . D MSG^DIALOG("WM","",79,"","XMTEXT")
 | 
|---|
 | 150 |  . W !
 | 
|---|
 | 151 |  . N DIR,X,Y
 | 
|---|
 | 152 |  . S DIR(0)="Y"
 | 
|---|
 | 153 |  . S DIR("A")=$$EZBLD^DIALOG(34267.1) ; Shall we delete the message?
 | 
|---|
 | 154 |  . S DIR("B")=$$EZBLD^DIALOG(39054) ; YES
 | 
|---|
 | 155 |  . D ^DIR
 | 
|---|
 | 156 |  . I $D(DTOUT) D HALT($$EZBLD^DIALOG(34221)) ; recovering
 | 
|---|
 | 157 |  . I Y D  Q
 | 
|---|
 | 158 |  . . D EDITOFF(XMDUZ)
 | 
|---|
 | 159 |  . . D KILLMSG^XMXUTIL(XMZ)
 | 
|---|
 | 160 |  . S XMV("NOSEND")=1
 | 
|---|
 | 161 |  . W !
 | 
|---|
 | 162 |  . ;OK, you'll be able to read messages,
 | 
|---|
 | 163 |  . ;but you won't be able to reply to them.
 | 
|---|
 | 164 |  . D BLD^DIALOG(34267.2,"","","XMTEXT","F")
 | 
|---|
 | 165 |  . D MSG^DIALOG("WM","",79,"","XMTEXT")
 | 
|---|
 | 166 |  S XMSUBJ=$P(^XMB(3.9,XMZ,0),U,1)
 | 
|---|
 | 167 |  S:XMSUBJ["~U~" XMSUBJ=$$DECODEUP^XMXUTIL1(XMSUBJ)
 | 
|---|
 | 168 |  ;Subj: _XMSUBJ
 | 
|---|
 | 169 |  D BLD^DIALOG(34536,XMSUBJ,"","XMTEXT","FS")
 | 
|---|
 | 170 |  ;Some of the text may have been lost.
 | 
|---|
 | 171 |  ;You must re-enter recipients and any special handling instructions.
 | 
|---|
 | 172 |  D BLD^DIALOG(34266,"","","XMTEXT","FS")
 | 
|---|
 | 173 |  D MSG^DIALOG("WM","",79,"","XMTEXT")
 | 
|---|
 | 174 |  W !
 | 
|---|
 | 175 |  D INIT(XMDUZ,.XMABORT) Q:XMV("NOSEND")
 | 
|---|
 | 176 |  D WAIT^XMXUTIL
 | 
|---|
 | 177 |  I XMABORT D HALT($$EZBLD^DIALOG(34221)) ; recovering
 | 
|---|
 | 178 |  D PROCESS(XMDUZ,XMZ,XMSUBJ,.XMABORT)
 | 
|---|
 | 179 |  I XMABORT=DTIME D HALT($$EZBLD^DIALOG(34260)) ; sending
 | 
|---|
 | 180 |  D EDITOFF(XMDUZ)
 | 
|---|
 | 181 |  D:XMABORT KILLMSG^XMXUTIL(XMZ)
 | 
|---|
 | 182 |  Q
 | 
|---|