X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_msg.pm;h=72f64b9c5fa8518612347038fae5fb2bb5238952;hb=9fae251fc1e3069694ebaf4fae62bde844f45cff;hp=c9cf686635af781736663996585736f175f6856e;hpb=fb4ab1073f0d15d660c6cdc4e07afebf68ef3924;p=freeside.git diff --git a/FS/FS/cust_msg.pm b/FS/FS/cust_msg.pm index c9cf68663..72f64b9c5 100644 --- a/FS/FS/cust_msg.pm +++ b/FS/FS/cust_msg.pm @@ -3,6 +3,7 @@ package FS::cust_msg; use strict; use base qw( FS::cust_main_Mixin FS::Record ); use FS::Record qw( qsearch qsearchs ); +use MIME::Parser; use vars qw( @statuses ); =head1 NAME @@ -22,9 +23,9 @@ FS::cust_msg - Object methods for cust_msg records =head1 DESCRIPTION -An FS::cust_msg object represents a template-generated message sent to -a customer (see L). FS::cust_msg inherits from -FS::Record. The following fields are currently supported: +An FS::cust_msg object represents an email message generated by Freeside +and sent to a customer (see L). FS::cust_msg inherits +from FS::Record. The following fields are currently supported: =over 4 @@ -34,6 +35,8 @@ FS::Record. The following fields are currently supported: =item msgnum - template number +=item msgtype - the message type + =item _date - the time the message was sent =item env_from - envelope From address @@ -125,8 +128,8 @@ sub check { my $error = $self->ut_numbern('custmsgnum') - || $self->ut_number('custnum') - || $self->ut_foreign_key('custnum', 'cust_main', 'custnum') + || $self->ut_numbern('custnum') + || $self->ut_foreign_keyn('custnum', 'cust_main', 'custnum') || $self->ut_numbern('msgnum') || $self->ut_foreign_keyn('msgnum', 'msg_template', 'msgnum') || $self->ut_numbern('_date') @@ -136,12 +139,47 @@ sub check { || $self->ut_anything('body') || $self->ut_enum('status', \@statuses) || $self->ut_textn('error') + || $self->ut_enum('msgtype', [ '', + 'invoice', + 'receipt', + 'admin', + ]) ; return $error if $error; $self->SUPER::check; } +=item entity + +Returns the complete message as a L. + +=item parts + +Returns a list of the MIME parts contained in the message, as L +objects. + +=cut + +sub entity { + my $self = shift; + if ( !exists($self->{entity}) ) { + my $parser = MIME::Parser->new; + my $output_dir = "$FS::UID::cache_dir/cache.$FS::UID::datasrc/mimeparts"; + mkdir($output_dir) unless -d $output_dir; + $parser->output_under($output_dir); + $self->{entity} = + $parser->parse_data( $self->header . "\n" . $self->body ); + } + $self->{entity}; +} + +sub parts { + my $self = shift; + # return only the parts with bodies, not the multipart containers + grep { $_->bodyhandle } $self->entity->parts_DFS; +} + =back =head1 SEE ALSO