Re: Automatic linking to a mhonarc archive

2002-08-10 14:09:13
On August 10, 2002 at 19:23, Alan Burlison wrote:

I'm trying to munge the subject and body of a message using the
CBMessageBodyRead callback, to convert bugids into hrefs.  The callback
looks like this:

sub msg_body_read
        my ($fields, $html, $files) = @_;

        # Convert any bugids in the subject to links.
        $fields->{'x-mha-subject'} =~ s/\b([134]\d{6})\b/bugid($1)/ge;

        # Convert any bugids in thebody to links.
        $$html =~ s/\b([134]\d{6})\b/bugid($1)/ge;

This works fine for the body of the message - bugids are nicely converted
into URLs, but in the case of the subject, although x-mha-subject is
modified OK, it doesn't appear to be the subject that is _actually_ printed
out in the mail header, as the resulting html is missing the link.  How do I
munge the *real* subject line?

The "x-mha-..." fields are only copies of what MHonArc stores.
So changing the value has no permanent effect (should it?).

To get what you want you will need to use the
$mhonarc::CBMessageHeadRead callback since the message header is
"htmlized" right afterwords.

What you will need to do is the following:

* In CBMessageHeadRead:

  Change $fields->{'subject'} directly.  Remember, that the values
  of the $fields hash are array references (excluding the special
  x-mha-... values).  Something like the following should do:

    $fields->{'subject'}[0] =~ s/\b([134]\d{6})\b/bugid($1)/ge;

  To be cleaner, you may want to check that $fields->{'subject'} is
  defined in case a message comes in without a Subject.

  The x-mha- fields are not used when converting the message
  header to HTML, so you have to modify $fields directly.
  The x-mha- fields represent what MHonArc will store and use
  for other things.

* In CBMessageBodyRead:

  Now this part is ugly, which gives a good reason that modifying
  $fields->{'x-mha-subject'} in CBMessageHeadRead should changes the
  Subject used by MHonArc.  You will need to modifying an "internal"
  hash so your modified subject will be used for index page listing:

    $mhonarc::Subject{$fields->{'x-mha-index'}} =~

I wonder if having a CBRawMessageHeadRead may be worth adding.
The callback would be called after a message header is parsed, but
before MHonArc extracts in data from it.  Of course, you would not
have the x-mha-... fields defined at this stage since it would
be before MHonArc processes the header.


To sign-off this list, send email to majordomo(_at_)mhonarc(_dot_)org with the