use List::Util qw( max min );
use Data::Dumper;
use Date::Format;
- use Date::Parse;
use Time::Local;
use Time::HiRes;
use Time::Duration;
use DateTime;
use DateTime::Format::Strptime;
+ use FS::Misc::DateTime qw( parse_datetime );
use Lingua::EN::Inflect qw(PL);
+ Lingua::EN::Inflect::classical names=>0; #Categorys
use Tie::IxHash;
use URI;
use URI::Escape;
use HTML::Entities;
use HTML::TreeBuilder;
use HTML::FormatText;
+ use HTML::Defang;
use JSON;
+# use XMLRPC::Transport::HTTP;
+# use XMLRPC::Lite; # for XMLRPC::Serializer
use MIME::Base64;
use IO::Handle;
use IO::File;
use String::Approx qw(amatch);
use Chart::LinesPoints;
use Chart::Mountain;
+ use Chart::Bars;
use Color::Scheme;
use HTML::Widgets::SelectLayers 0.07; #should go away in favor of
#selectlayers.html
states_hash counties cities state_label
);
use FS::Misc::eps2png qw( eps2png );
+ use FS::Report::FCC_477;
use FS::Report::Table::Monthly;
use FS::TicketSystem;
use FS::Tron qw( tron_lint );
use FS::part_export;
use FS::part_export_option;
use FS::export_svc;
+ use FS::export_device;
use FS::msgcat;
use FS::rate;
use FS::rate_region;
use FS::part_pkg_report_option;
use FS::cust_attachment;
use FS::h_cust_pkg;
+ use FS::h_inventory_item;
use FS::h_svc_acct;
use FS::h_svc_broadband;
use FS::h_svc_domain;
use FS::prospect_main;
use FS::contact;
use FS::svc_pbx;
+ use FS::discount;
+ use FS::cust_pkg_discount;
+ use FS::cust_bill_pkg_discount;
+ use FS::svc_mailinglist;
+ use FS::cgp_rule;
+ use FS::cgp_rule_condition;
+ use FS::cgp_rule_action;
+ use FS::bill_batch;
+ use FS::cust_bill_batch;
+ use FS::rate_time;
+ use FS::rate_time_interval;
+ use FS::msg_template;
+ use FS::part_tag;
# Sammath Naur
if ( $FS::Mason::addl_handler_use ) {
use lib ( "/opt/rt3/local/lib", "/opt/rt3/lib" );
use vars qw($Nobody $SystemUser);
use RT;
+ use RT::Util;
use RT::Tickets;
use RT::Transactions;
use RT::Users;
use RT::Interface::Web::Request;
+ #nother undeclared web UI dep (for ticket links graph)
+ use IPC::Run::SafeHandles;
+
#slow, unreliable, segfaults and is optional
#see rt/html/Ticket/Elements/ShowTransactionAttachments
#use Text::Quoted;
$m->comp('/elements/errorpage.html', @_);
}
+ sub errorpage_popup {
+ use vars qw($m);
+ $m->comp('/elements/errorpage-popup.html', @_);
+ }
+
sub redirect {
my( $location ) = @_;
use vars qw($m);
=cut
+my %defang_opts = ( attribs_to_callback => ['src'], attribs_callback => sub { 1 });
+
sub mason_interps {
my $mode = shift || 'apache';
my %opt = @_;
$interp{out_method} = $opt{outbuf} if $mode eq 'standalone' && $opt{outbuf};
+ my $html_defang = new HTML::Defang (%defang_opts);
+
+ my $js_string_sub = sub {
+ #${$_[0]} =~ s/(['\\\n])/'\\'.($1 eq "\n" ? 'n' : $1)/ge;
+ ${$_[0]} =~ s/(['\\])/\\$1/g;
+ ${$_[0]} =~ s/\r/\\r/g;
+ ${$_[0]} =~ s/\n/\\n/g;
+ ${$_[0]} = "'". ${$_[0]}. "'";
+ };
+
my $fs_interp = new HTML::Mason::Interp (
%interp,
- escape_flags => { 'js_string' => sub {
- #${$_[0]} =~ s/(['\\\n])/'\\'.($1 eq "\n" ? 'n' : $1)/ge;
- ${$_[0]} =~ s/(['\\])/\\$1/g;
- ${$_[0]} =~ s/\n/\\n/g;
- ${$_[0]} = "'". ${$_[0]}. "'";
- }
+ escape_flags => { 'js_string' => $js_string_sub,
+ 'defang' => sub {
+ ${$_[0]} = $html_defang->defang(${$_[0]});
+ },
},
compiler => HTML::Mason::Compiler::ToObject->new(
allow_globals => [qw(%session)],
my $rt_interp = new HTML::Mason::Interp (
%interp,
- escape_flags => { 'h' => \&RT::Interface::Web::EscapeUTF8 },
+ escape_flags => { 'h' => \&RT::Interface::Web::EscapeUTF8,
+ 'js_string' => $js_string_sub,
+ },
compiler => HTML::Mason::Compiler::ToObject->new(
default_escape_flags => 'h',
allow_globals => [qw(%session)],