X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2FMisc.pm;h=fe8ac6082d7e89b39dbcca6a810416ffc89c0bf5;hp=19ac35c8fd6ceada44824e06c305e081e9297987;hb=74e058c8a010ef6feb539248a550d0bb169c1e94;hpb=5164aa211f893adf641a3b78293d7b0585eb0af0 diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 19ac35c8f..fe8ac6082 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -8,6 +8,7 @@ use Data::Dumper; use IPC::Run qw( run timeout ); # for _pslatex use IPC::Run3; # for do_print... should just use IPC::Run i guess use File::Temp; +use Tie::IxHash; #do NOT depend on any FS:: modules here, causes weird (sometimes unreproducable #until on client machine) dependancy loops. put them in FS::Misc::Something #instead @@ -16,8 +17,10 @@ use File::Temp; @EXPORT_OK = qw( send_email generate_email send_fax states_hash counties cities state_label card_types + pkg_freqs generate_ps generate_pdf do_print csv_from_fixed + ocr_image ); $DEBUG = 0; @@ -111,7 +114,7 @@ sub send_email { # join("\n", map { " $_: ". $options{$_} } keys %options ). "\n" } - my $to = ref($options{to}) ? join(', ', @{ $options{to} } ) : $options{to}; + my @to = ref($options{to}) ? @{ $options{to} } : ( $options{to} ); my @mimeargs = (); my @mimeparts = (); @@ -170,7 +173,7 @@ sub send_email { my $message = MIME::Entity->build( 'From' => $options{'from'}, - 'To' => $to, + 'To' => join(', ', @to), 'Sender' => $options{'from'}, 'Reply-To' => $options{'from'}, 'Date' => time2str("%a, %d %b %Y %X %z", time), @@ -230,8 +233,11 @@ sub send_email { $transport = Email::Sender::Transport::SMTP->new( %smtp_opt ); } + push @to, $options{bcc} if defined($options{bcc}); local $@; # just in case - eval { sendmail($message, { transport => $transport }) }; + eval { sendmail($message, { transport => $transport, + from => $options{from}, + to => \@to }) }; if(ref($@) and $@->isa('Email::Sender::Failure')) { return ($@->code ? $@->code.' ' : '').$@->message @@ -255,6 +261,10 @@ Sender address, required Recipient address, required +=item bcc + +Blind copy address, optional + =item subject email subject, required @@ -288,6 +298,7 @@ sub generate_email { my %return = ( 'from' => $args{'from'}, 'to' => $args{'to'}, + 'bcc' => $args{'bcc'}, 'subject' => $args{'subject'}, ); @@ -608,6 +619,39 @@ sub card_types { \%card_types; } +=item pkg_freqs + +Returns a hash reference of allowed package billing frequencies. + +=cut + +sub pkg_freqs { + tie my %freq, 'Tie::IxHash', ( + '0' => '(no recurring fee)', + '1h' => 'hourly', + '1d' => 'daily', + '2d' => 'every two days', + '3d' => 'every three days', + '1w' => 'weekly', + '2w' => 'biweekly (every 2 weeks)', + '1' => 'monthly', + '45d' => 'every 45 days', + '2' => 'bimonthly (every 2 months)', + '3' => 'quarterly (every 3 months)', + '4' => 'every 4 months', + '137d' => 'every 4 1/2 months (137 days)', + '6' => 'semiannually (every 6 months)', + '12' => 'annually', + '13' => 'every 13 months (annually +1 month)', + '24' => 'biannually (every 2 years)', + '36' => 'triannually (every 3 years)', + '48' => '(every 4 years)', + '60' => '(every 5 years)', + '120' => '(every 10 years)', + ) ; + \%freq; +} + =item generate_ps FILENAME Returns an postscript rendition of the LaTex file, as a scalar. @@ -807,6 +851,41 @@ sub csv_from_fixed { ''; } +=item ocr_image IMAGE_SCALAR + +Runs OCR on the provided image data and returns a list of text lines. + +=cut + +sub ocr_image { + my $logo_data = shift; + + #XXX use conf dir location from Makefile + my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; + my $fh = new File::Temp( + TEMPLATE => 'bizcard.XXXXXXXX', + SUFFIX => '.png', #XXX assuming, but should handle jpg, gif, etc. too + DIR => $dir, + UNLINK => 0, + ) or die "can't open temp file: $!\n"; + + my $filename = $fh->filename; + + print $fh $logo_data; + close $fh; + + run( [qw(ocroscript recognize), $filename], '>'=>"$filename.hocr" ) + or die "ocroscript recognize failed\n"; + + run( [qw(ocroscript hocr-to-text), "$filename.hocr"], '>pipe'=>\*OUT ) + or die "ocroscript hocr-to-text failed\n"; + + my @lines = split(/\n/, ); + + foreach (@lines) { s/\.c0m\s*$/.com/; } + + @lines; +} =back