Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.discuss.getMessageFromClient
on getMessageFromClient (client, port) {
<<Changes
<<Sat, 06 Mar 1999 17:21:35 GMT by AR
<<Deactivated adrmsg^.htmlCache code.
<<11/6/99; 7:59:01 PM by PBS
<<Pass incoming text through mainResponder.neuterText, to make extra sure that unwanted macros and tags are neutered.
<<11/16/99; 11:31:59 AM by PBS
<<Use mainResponder's memberCanEdit callback to allow managing editors of Manila sites to edit pages using the Edit in Frontier button.
<<05/01/00; 7:48:38 PM by JES
<<Changed getString calls to use a replacement table address instead of a lists
if client == "127.0.0.1" {
client = "localhost"};
local (xmltext = base64.decode (betty.rpc.client (client, port, "editorial.returnMessage")));
local (xtable);
xml.compile (xmltext, @xtable);
on cookieError (explanation) {
local (replacementTable); new (tableType, @replacementTable); // 05/01/00 JES: use replacement table instead of a list
replacementTable.explanation = explanation;
scriptError (mainResponder.getString ("discuss.cantReceiveMsgBadAuthentication", @replacementTable))};
on formatError (fieldname) {
local (replacementTable); new (tableType, @replacementTable); // 05/01/00 JES: use replacement table instead of a list
replacementTable.fieldname = fieldname;
scriptError (mainResponder.getString ("discuss.cantReceiveMsgMissingField", @replacementTable))};
local (adrcookie, adrmsgnum);
if not xml.getpathaddress (@xtable, "ticket/cookie", @adrcookie) {
cookieError (mainResponder.getString ("discuss.theCookieIsMissing"))};
if not xml.getpathaddress (@xtable, "ticket/header/msgNum", @adrmsgnum) {
cookieError (mainResponder.getString ("discuss.theMsgnumIsMissing"))};
local (adrsubject, adrposttime, adrmember, adrctreads, adrinresponseto, adrresponses, adrbody);
if not xml.getpathaddress (@xtable, "ticket/header/subject", @adrsubject) {
formatError ("subject")};
if not xml.getpathaddress (@xtable, "ticket/header/member", @adrmember) {
formatError ("member")};
if not xml.getpathaddress (@xtable, "ticket/body", @adrbody) {
formatError ("body")};
local (alsoListedList, flalsolist = false);
bundle { //get alsoListedIn
local (adrlist);
if xml.getpathaddress (@xtable, "ticket/header/alsoListedIn", @adrlist) {
local (i);
alsoListedList = xml.getAddressList (adrlist, "category");
for i = 1 to sizeof (alsoListedList) { //turn addresses into values
alsoListedList [i] = alsoListedList [i]^;
flalsolist = true}}};
local (flenclosure = false, enclosureAddress, enclosureBits, enclosureType);
bundle { //check for an enclosure
local (adrenclosure);
if xml.getpathaddress (@xtable, "ticket/header/enclosure", @adrenclosure) {
enclosureAddress = xml.getvalue (adrenclosure, "enclosureAddress");
enclosureType = xml.getvalue (adrenclosure, "enclosureType");
enclosureBits = xml.getvalue (adrenclosure, "enclosureBits");
local (prefix = "application/x-frontier-");
if enclosureType beginswith prefix {
local (type = string.delete (enclosureType, 1, sizeof (prefix)));
local (bits = binary (base64.decode (enclosureBits)));
setBinaryType (@bits, type);
unpack (@bits, @enclosureBits)};
flenclosure = true}};
local (adrmemberinfo = html.getpagetableaddress ()^.adrmemberinfo);
bundle { //check the cookie
if adrcookie^ != mainresponder.discuss.getCheckSum (adrmsgnum^, adrmemberinfo) {
cookieError (mainResponder.getString ("discuss.theChecksumIsIncorrect"))};
delete (adrcookie)};
local (adrmsg = mainresponder.discuss.getmessagetable (adrmsgnum^));
if adrmsg^.member != nameof (adrmemberinfo^) { //not the author of the message
<<PBS 11/16/99: use the memberCanEdit callback to allow managing editors of Manila sites to use the Edit in Frontier button for all stories and messages.
if defined (config.mainResponder.callbacks.memberCanEdit) {
local (pta = html.getPageTableAddress ());
pta^.adrMsgToEdit = adrMsg;
pta^.flMemberCanEdit = false;
mainResponder.callbackLoop (@config.mainResponder.callbacks.memberCanEdit, pta);
if not pta^.flMemberCanEdit {
cookieError (mainResponder.getString ("discuss.theMemberIsNotAuthorOfMsg"))}}};
try {delete (@adrmsg^.body)};
adrBody^ = mainResponder.neuterText (string (adrbody^), true, true); //PBS 11/6/99: neuter text
op.newoutlineobject (string (adrbody^), @adrmsg^.body);
mainResponder.neuterOutline (@adrmsg^.body); //eliminate #directives in the outline
adrmsg^.subject = adrsubject^;
if flenclosure {
adrmsg^.enclosureAddress = enclosureAddress;
adrmsg^.enclosureBits = enclosureBits;
adrmsg^.enclosureType = enclosureType};
if flalsolist {
adrmsg^.alsoListedIn = alsoListedList};
<<try {delete (@adrmsg^.htmlcache)} // Deactivated.
try {delete (@adrmsg^.toptopicscache)};
filemenu.savemyroot (adrmsg);
return (true)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.