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