From: Ivan Kohler Date: Wed, 9 Oct 2013 06:00:26 +0000 (-0700) Subject: Merge branch 'master' of git.freeside.biz:/home/git/freeside X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=fe4515eb37d76849dd08c62782d86bc7ba311dcd Merge branch 'master' of git.freeside.biz:/home/git/freeside Conflicts: FS/FS/cust_main.pm --- fe4515eb37d76849dd08c62782d86bc7ba311dcd diff --cc FS/FS/Mason.pm index 780e3ffaf,f1fc5cba4..1215ca414 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@@ -353,6 -353,8 +353,9 @@@ if ( -e $addl_handler_use_file ) use FS::sales_pkg_class; use FS::svc_alarm; use FS::cable_model; + use FS::invoice_mode; + use FS::invoice_conf; ++ use FS::cable_provider; # Sammath Naur if ( $FS::Mason::addl_handler_use ) { diff --cc FS/FS/Record.pm index fd035249b,fd035249b..71eddc1eb --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@@ -3038,13 -3038,13 +3038,8 @@@ Checks to see if the string is encrypte sub is_encrypted { my ($self, $value) = @_; -- # Possible Bug - Some work may be required here.... -- -- if ($value =~ /^M/ && length($value) > 80) { -- return 1; -- } else { -- return 0; -- } ++ # could be more precise about it, but this will do for now ++ $value =~ /^M/ && length($value) > 80; } =item decrypt($value) diff --cc FS/FS/Schema.pm index ed3790452,5ea24e43a..e44b74edc --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@@ -4272,6 -4272,6 +4272,8 @@@ sub tables_hashref 'svc_cable' => { 'columns' => [ 'svcnum', 'int', '', '', '', '', ++ 'providernum', 'int', 'NULL', '', '', '', ++ # XXX "Circuit ID/Order number" 'modelnum', 'int', 'NULL', '', '', '', 'serialnum', 'varchar', 'NULL', $char_d, '', '', 'mac_addr', 'varchar', 'NULL', 12, '', '', @@@ -4292,6 -4292,6 +4294,17 @@@ 'index' => [], }, ++ 'cable_provider' => { ++ 'columns' => [ ++ 'providernum', 'serial', '', '', '', '', ++ 'provider', 'varchar', '', $char_d, '', '', ++ 'disabled', 'char', 'NULL', 1, '', '', ++ ], ++ 'primary_key' => 'providernum', ++ 'unique' => [ [ 'provider' ], ], ++ 'index' => [], ++ }, ++ 'vend_main' => { 'columns' => [ 'vendnum', 'serial', '', '', '', '', diff --cc FS/FS/cable_provider.pm index 000000000,000000000..e988192f4 new file mode 100644 --- /dev/null +++ b/FS/FS/cable_provider.pm @@@ -1,0 -1,0 +1,112 @@@ ++package FS::cable_provider; ++ ++use strict; ++use base qw( FS::Record ); ++use FS::Record qw( qsearch qsearchs ); ++ ++=head1 NAME ++ ++FS::cable_provider - Object methods for cable_provider records ++ ++=head1 SYNOPSIS ++ ++ use FS::cable_provider; ++ ++ $record = new FS::cable_provider \%hash; ++ $record = new FS::cable_provider { 'column' => 'value' }; ++ ++ $error = $record->insert; ++ ++ $error = $new_record->replace($old_record); ++ ++ $error = $record->delete; ++ ++ $error = $record->check; ++ ++=head1 DESCRIPTION ++ ++An FS::cable_provider object represents a cable service provider. ++FS::cable_provider inherits from FS::Record. The following fields are ++currently supported: ++ ++=over 4 ++ ++=item providernum ++ ++primary key ++ ++=item provider ++ ++provider ++ ++=item disabled ++ ++disabled ++ ++ ++=back ++ ++=head1 METHODS ++ ++=over 4 ++ ++=item new HASHREF ++ ++Creates a new provider. To add the provider to the database, see L<"insert">. ++ ++Note that this stores the hash reference, not a distinct copy of the hash it ++points to. You can ask the object for a copy with the I method. ++ ++=cut ++ ++# the new method can be inherited from FS::Record, if a table method is defined ++ ++sub table { 'cable_provider'; } ++ ++=item insert ++ ++Adds this record to the database. If there is an error, returns the error, ++otherwise returns false. ++ ++=item delete ++ ++Delete this record from the database. ++ ++=item replace OLD_RECORD ++ ++Replaces the OLD_RECORD with this one in the database. If there is an error, ++returns the error, otherwise returns false. ++ ++=item check ++ ++Checks all fields to make sure this is a valid provider. If there is ++an error, returns the error, otherwise returns false. Called by the insert ++and replace methods. ++ ++=cut ++ ++sub check { ++ my $self = shift; ++ ++ my $error = ++ $self->ut_numbern('providernum') ++ || $self->ut_text('provider') ++ || $self->ut_enum('disabled', [ '', 'Y' ] ) ++ ; ++ return $error if $error; ++ ++ $self->SUPER::check; ++} ++ ++=back ++ ++=head1 BUGS ++ ++=head1 SEE ALSO ++ ++L, schema.html from the base documentation. ++ ++=cut ++ ++1; ++ diff --cc FS/FS/cust_pkg.pm index 19ef1f326,19ef1f326..0cb1b50a2 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@@ -2613,14 -2613,14 +2613,30 @@@ sub part_pkg_currency_option =item cust_svc [ OPTION => VALUE ... ] (current usage) ++=item cust_svc_unsorted [ OPTION => VALUE ... ] ++ Returns the services for this package, as FS::cust_svc objects (see L). Available options are svcpart and svcdb. If either is spcififed, returns only the matching services. ++As an optimization, use the cust_svc_unsorted version if you are not displaying ++the results. ++ =cut sub cust_svc { my $self = shift; ++ cluck "cust_pkg->cust_svc called" if $DEBUG > 2; ++ $self->_sort_cust_svc( $self->cust_svc_unsorted_arrayref ); ++} ++ ++sub cust_svc_unsorted { ++ my $self = shift; ++ @{ $self->cust_svc_unsorted_arrayref }; ++} ++ ++sub cust_svc_unsorted_arrayref { ++ my $self = shift; return () unless $self->num_cust_svc(@_); @@@ -2645,13 -2645,13 +2661,7 @@@ $search{extra_sql} = ' AND svcdb = '. dbh->quote( $opt{'svcdb'} ); } -- cluck "cust_pkg->cust_svc called" if $DEBUG > 2; -- -- #if ( $self->{'_svcnum'} ) { -- # values %{ $self->{'_svcnum'}->cache }; -- #} else { -- $self->_sort_cust_svc( [ qsearch(\%search) ] ); -- #} ++ [ qsearch(\%search) ]; } diff --cc FS/FS/part_event/Condition/pkg_age_Common.pm index 726b01d70,726b01d70..33e49b8a6 --- a/FS/FS/part_event/Condition/pkg_age_Common.pm +++ b/FS/FS/part_event/Condition/pkg_age_Common.pm @@@ -49,7 -49,7 +49,7 @@@ sub condition } sub pkg_age_age { -- my( $self, $cust_pkg, %opt ); ++ my( $self, $cust_pkg, %opt ) = @_; $self->option_age_from('age', $opt{'time'} ); } diff --cc FS/FS/part_export/domain_shellcommands.pm index 582e29217,582e29217..8e85d71e1 --- a/FS/FS/part_export/domain_shellcommands.pm +++ b/FS/FS/part_export/domain_shellcommands.pm @@@ -49,8 -49,8 +49,7 @@@ The following variables are available f
  • $uid - of catchall account
  • $gid - of catchall account
  • $dir - home directory of catchall account --
  • All other fields in -- svc_domain are also available. ++
  • All other fields in svc_domain are also available. END ); diff --cc FS/FS/part_export/shellcommands_withdomain.pm index 1b59589bf,1b59589bf..29715b75b --- a/FS/FS/part_export/shellcommands_withdomain.pm +++ b/FS/FS/part_export/shellcommands_withdomain.pm @@@ -141,7 -141,7 +141,32 @@@ The following variables are available f
  • $shell
  • $quota
  • @radius_groups --
  • All other fields in svc_acct are also available. ++
  • $reasonnum (when suspending) ++
  • $reasontext (when suspending) ++
  • $reasontypenum (when suspending) ++
  • $reasontypetext (when suspending) ++
  • $pkgnum ++
  • $custnum ++
  • All other fields in svc_acct are also available. ++
  • The following fields from cust_main are also available (except during replace): company, address1, address2, city, state, zip, county, daytime, night, fax, otaker, agent_custid, locale. When used on the command line (rather than STDIN), they will be quoted for the shell already (do not add additional quotes). ++ ++For the package changed command only, the following fields are also available: ++
      ++
    • $old_pkgnum and $new_pkgnum ++
    • $old_pkgpart and $new_pkgpart ++
    • $old_agent_pkgid and $new_agent_pkgid ++
    • $old_order_date and $new_order_date ++
    • $old_start_date and $new_start_date ++
    • $old_setup and $new_setup ++
    • $old_bill and $new_bill ++
    • $old_last_bill and $new_last_bill ++
    • $old_susp and $new_susp ++
    • $old_adjourn and $new_adjourn ++
    • $old_resume and $new_resume ++
    • $old_cancel and $new_cancel ++
    • $old_unancel and $new_unancel ++
    • $old_expire and $new_expire ++
    • $old_contract_end and $new_contract_end
    END ); diff --cc FS/FS/svc_cable.pm index 1980c0ee9,1980c0ee9..596f69995 --- a/FS/FS/svc_cable.pm +++ b/FS/FS/svc_cable.pm @@@ -4,6 -4,6 +4,7 @@@ use base qw( FS::svc_Common ); #qw( FS: use strict; use Tie::IxHash; use FS::Record qw( qsearchs ); # qw( qsearch qsearchs ); ++use FS::cable_provider; use FS::cable_model; =head1 NAME @@@ -72,24 -72,24 +73,35 @@@ sub search_sql sub table_info { tie my %fields, 'Tie::IxHash', -- 'svcnum' => 'Service', -- 'modelnum' => { label => 'Model', -- type => 'select-cable_model', -- disable_inventory => 1, -- disable_select => 1, -- value_callback => sub { -- my $svc = shift; -- $svc->cable_model->model_name; -- }, -- }, -- 'serialnum' => 'Serial number', -- 'mac_addr' => { label => 'MAC address', -- type => 'input-mac_addr', -- value_callback => sub { -- my $svc = shift; -- join(':', $svc->mac_addr =~ /../g); -- }, -- }, ++ 'svcnum' => 'Service', ++ 'providernum' => { label => 'Provider', ++ type => 'select-cable_provider', ++ disable_inventory => 1, ++ disable_select => 1, ++ value_callback => sub { ++ my $svc = shift; ++ my $p = $svc->cable_provider; ++ $p ? $p->provider : ''; ++ }, ++ }, ++ #XXX "Circuit ID/Order number" ++ 'modelnum' => { label => 'Model', ++ type => 'select-cable_model', ++ disable_inventory => 1, ++ disable_select => 1, ++ value_callback => sub { ++ my $svc = shift; ++ $svc->cable_model->model_name; ++ }, ++ }, ++ 'serialnum' => 'Serial number', ++ 'mac_addr' => { label => 'MAC address', ++ type => 'input-mac_addr', ++ value_callback => sub { ++ my $svc = shift; ++ join(':', $svc->mac_addr =~ /../g); ++ }, ++ }, ; { @@@ -130,6 -130,6 +142,7 @@@ sub check my $error = $self->ut_numbern('svcnum') ++ || $self->ut_foreign_key('providernum', 'cable_provider', 'providernum') || $self->ut_foreign_key('modelnum', 'cable_model', 'modelnum') || $self->ut_alpha('serialnum') || $self->ut_mac_addr('mac_addr') @@@ -139,6 -139,6 +152,17 @@@ $self->SUPER::check; } ++=item cable_provider ++ ++Returns the cable_provider object for this record. ++ ++=cut ++ ++sub cable_provider { ++ my $self = shift; ++ qsearchs('cable_provider', { 'providernum'=>$self->providernum } ); ++} ++ =item cable_model Returns the cable_model object for this record. diff --cc FS/MANIFEST index a3b11f717,339965ef3..5dbe754c1 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@@ -720,3 -720,7 +720,9 @@@ FS/svc_alarm.p t/svc_alarm.t FS/cable_model.pm t/cable_model.t + FS/invoice_mode.pm + t/invoice_mode.t + FS/invoice_conf.pm + t/invoice_conf.t ++FS/cable_provider.pm ++t/cable_provider.t diff --cc FS/t/cable_provider.t index 000000000,000000000..c794379a9 new file mode 100644 --- /dev/null +++ b/FS/t/cable_provider.t @@@ -1,0 -1,0 +1,5 @@@ ++BEGIN { $| = 1; print "1..1\n" } ++END {print "not ok 1\n" unless $loaded;} ++use FS::cable_provider; ++$loaded=1; ++print "ok 1\n"; diff --cc bin/test-event index d3a9f110d,d3a9f110d..73c9d31ec mode 100644,100644..100755 --- a/bin/test-event +++ b/bin/test-event @@@ -34,7 -34,7 +34,10 @@@ print "\n" my @conditions = $part_event->part_event_condition; foreach my $condition ( @conditions ) { -- my $sat = $condition->condition( $object, 'cust_event' => $cust_event ); ++ my $sat = $condition->condition( $object, ++ 'cust_event' => $cust_event, ++ 'time' => time, ++ ); my $sql = $condition->condition_sql(); diff --cc httemplate/browse/cable_provider.html index 000000000,000000000..0d344984b new file mode 100644 --- /dev/null +++ b/httemplate/browse/cable_provider.html @@@ -1,0 -1,0 +1,32 @@@ ++<& elements/browse.html, ++ 'title' => 'Cable providers', ++ 'html_init' => $html_init, ++ 'name' => 'providers', ++ 'disableable' => 1, ++ 'disabled_statuspos' => 1, ++ 'query' => { 'table' => 'cable_provider', ++ 'hashref' => {}, ++ 'order_by' => 'ORDER BY provider', ++ }, ++ 'count_query' => $count_query, ++ 'header' => $header, ++ 'fields' => $fields, ++ 'links' => $links, ++&> ++<%init> ++ ++die "access denied" ++ unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); ++ ++my $html_init = ++ qq!Add a provider

    !; ++ ++my $count_query = 'SELECT COUNT(*) FROM cable_provider'; ++ ++my $link = [ $p.'edit/cable_provider.html?', 'providernum' ]; ++ ++my $header = [ 'Provider' ]; ++my $fields = [ 'provider' ]; ++my $links = [ $link ]; ++ ++ diff --cc httemplate/docs/about.html index c2ba4e4a0,c2ba4e4a0..80d9488b6 --- a/httemplate/docs/about.html +++ b/httemplate/docs/about.html @@@ -56,7 -56,7 +56,7 @@@ GNU Affero General Public Licens % unless ( $agentnum ) {
    -- "I can't figure out ... if it's an end or the beginning" - R. Hunter ++ "" - R. Hunter
    % } diff --cc httemplate/edit/cable_provider.html index 000000000,000000000..9a911ccfa new file mode 100644 --- /dev/null +++ b/httemplate/edit/cable_provider.html @@@ -1,0 -1,0 +1,20 @@@ ++<& elements/edit.html, ++ 'name_singular' => 'Provider', ++ 'table' => 'cable_provider', ++ 'fields' => [ ++ 'provider', ++ { field=>'disabled', type=>'checkbox', value=>'Y', }, ++ ], ++ 'labels' => { ++ 'providernum' => 'Provider', ++ 'provider' => 'Provider', ++ 'disabled' => 'Disabled', ++ }, ++ 'viewall_dir' => 'browse', ++&> ++<%init> ++ ++die "access denied" ++ unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); ++ ++ diff --cc httemplate/edit/process/cable_provider.html index 000000000,000000000..ecffaf692 new file mode 100644 --- /dev/null +++ b/httemplate/edit/process/cable_provider.html @@@ -1,0 -1,0 +1,10 @@@ ++<& elements/process.html, ++ 'table' => 'cable_provider', ++ 'viewall_dir' => 'browse', ++&> ++<%init> ++ ++die "access denied" ++ unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); ++ ++ diff --cc httemplate/elements/menu.html index 8cbbd1742,c8fe5f2e8..8cb967518 --- a/httemplate/elements/menu.html +++ b/httemplate/elements/menu.html @@@ -517,6 -521,6 +521,7 @@@ tie my %config_radius, 'Tie::IxHash' ; tie my %config_cable, 'Tie::IxHash', ++ 'Cable providers' => [ $fsurl.'browse/cable_provider.html', '' ], 'Cable modem models' => [ $fsurl.'browse/cable_model.html', '' ], ; diff --cc httemplate/elements/select-cable_provider.html index 000000000,000000000..9530b78c0 new file mode 100644 --- /dev/null +++ b/httemplate/elements/select-cable_provider.html @@@ -1,0 -1,0 +1,7 @@@ ++<% include( '/elements/select-table.html', ++ 'table' => 'cable_provider', ++ 'name_col' => 'provider', ++ 'empty_label' => 'Select provider', ++ @_, ++ ) ++%> diff --cc httemplate/elements/tr-select-cable_provider.html index 000000000,000000000..abb8564dc new file mode 100644 --- /dev/null +++ b/httemplate/elements/tr-select-cable_provider.html @@@ -1,0 -1,0 +1,12 @@@ ++% #if ( scalar(@domains) < 2 ) { ++% #} else { ++ ++ <% $opt{'label'} || 'Provider' %> ++ ++ <% include( '/elements/select-cable_provider.html', %opt) %> ++ ++ ++% #} ++<%init> ++ my %opt = @_; ++ diff --cc httemplate/view/cust_main.cgi index 430c50c5f,430c50c5f..391988190 --- a/httemplate/view/cust_main.cgi +++ b/httemplate/view/cust_main.cgi @@@ -147,7 -147,7 +147,6 @@@ function areyousure(href, message) % if ( $br ) {

    % } -- %my $signupurl = $conf->config('signupurl'); %if ( $signupurl ) { diff --cc ng_selfservice/.freeside.class.php.swp index 5c3952439,5c3952439..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.index.php.swp index 50c9cfbc5,50c9cfbc5..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.logout.php.swp index ec27faaed,ec27faaed..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.main.php.swp index cc5562690,cc5562690..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.password.php.swp index e1e968f1f,e1e968f1f..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.payment.php.swp index 2b705a31f,2b705a31f..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.payment_ach.php.swp index 1a87a2d34,1a87a2d34..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.payment_cc.php.swp index 369d104d1,369d104d1..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.payment_paypal.php.swp index 3abff2f4d,3abff2f4d..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.payment_webpay.php.swp index 6ef3df9d9,6ef3df9d9..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.personal.php.swp index f5e8c23c1,f5e8c23c1..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.process_login.php.swp index c530f11d6,c530f11d6..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.process_ticket_create.php.swp index c286792cd,c286792cd..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.services.php.swp index e063e406b,e063e406b..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.services_new.php.swp index 8d0c657af,8d0c657af..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.ticket.php.swp index e9b25032b,e9b25032b..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.ticket_create.php.swp index 65b00fe06,65b00fe06..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.tickets.php.swp index 7b4d67b48,7b4d67b48..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.tickets_resolved.php.swp index 1b3c634f0,1b3c634f0..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.usage.php.swp index 61fd4fa4d,61fd4fa4d..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.usage_cdr.php.swp index 83c270a83,83c270a83..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/.usage_data.php.swp index e5a9272b0,e5a9272b0..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.card.php.swp index 15d30cefd,15d30cefd..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.check.php.swp index fe08303ff,fe08303ff..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.error.php.swp index 1a6eb2833,1a6eb2833..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.header.php.swp index 237177069,237177069..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.menu.php.swp index 0c29ff942,0c29ff942..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.menu_footer.php.swp index 4bd2b30a8,4bd2b30a8..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.session.php.swp index ddd013701,ddd013701..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/elements/.ticketlist.php.swp index db3d0fe4a,db3d0fe4a..000000000 deleted file mode 100644,100644 Binary files differ diff --cc ng_selfservice/js/.menu.js.swp index 8df94a9c4,8df94a9c4..000000000 deleted file mode 100644,100644 Binary files differ diff --cc rt/lib/RT/Interface/Web.pm index 4a6bfda88,4a6bfda88..2dc16e3f3 --- a/rt/lib/RT/Interface/Web.pm +++ b/rt/lib/RT/Interface/Web.pm @@@ -2070,7 -2070,7 +2070,6 @@@ sub _ProcessUpdateMessageRecipients if (grep $_ eq 'Requestor' || $_ eq 'Requestors', @{ $args{ARGSRef}->{'SkipNotification'} || [] }) { push @txn_squelch, map $_->address, Email::Address->parse( $message_args->{Requestor} ); push @txn_squelch, $args{TicketObj}->Requestors->MemberEmailAddresses; -- } push @txn_squelch, @{$args{ARGSRef}{SquelchMailTo}} if $args{ARGSRef}{SquelchMailTo}; @@@ -2092,6 -2092,6 +2091,39 @@@ } } ++sub ProcessAttachments { ++ my %args = ( ++ ARGSRef => {}, ++ @_ ++ ); ++ ++ my $ARGSRef = $args{ARGSRef} || {}; ++ # deal with deleting uploaded attachments ++ foreach my $key ( keys %$ARGSRef ) { ++ if ( $key =~ m/^DeleteAttach-(.+)$/ ) { ++ delete $session{'Attachments'}{$1}; ++ } ++ $session{'Attachments'} = { %{ $session{'Attachments'} || {} } }; ++ } ++ ++ # store the uploaded attachment in session ++ if ( defined $ARGSRef->{'Attach'} && length $ARGSRef->{'Attach'} ) ++ { # attachment? ++ my $attachment = MakeMIMEEntity( AttachmentFieldName => 'Attach' ); ++ ++ my $file_path = Encode::decode_utf8("$ARGSRef->{'Attach'}"); ++ $session{'Attachments'} = ++ { %{ $session{'Attachments'} || {} }, $file_path => $attachment, }; ++ } ++ ++ # delete temporary storage entry to make WebUI clean ++ unless ( keys %{ $session{'Attachments'} } and $ARGSRef->{'UpdateAttach'} ) ++ { ++ delete $session{'Attachments'}; ++ } ++} ++ ++ =head2 MakeMIMEEntity PARAMHASH Takes a paramhash Subject, Body and AttachmentFieldName. @@@ -2174,37 -2174,37 +2206,6 @@@ sub MakeMIMEEntity } --sub ProcessAttachments { -- my %args = ( -- ARGSRef => {}, -- @_ -- ); -- -- my $ARGSRef = $args{ARGSRef} || {}; -- # deal with deleting uploaded attachments -- foreach my $key ( keys %$ARGSRef ) { -- if ( $key =~ m/^DeleteAttach-(.+)$/ ) { -- delete $session{'Attachments'}{$1}; -- } -- $session{'Attachments'} = { %{ $session{'Attachments'} || {} } }; -- } -- -- # store the uploaded attachment in session -- if ( defined $ARGSRef->{'Attach'} && length $ARGSRef->{'Attach'} ) -- { # attachment? -- my $attachment = MakeMIMEEntity( AttachmentFieldName => 'Attach' ); -- -- my $file_path = Encode::decode_utf8("$ARGSRef->{'Attach'}"); -- $session{'Attachments'} = -- { %{ $session{'Attachments'} || {} }, $file_path => $attachment, }; -- } -- -- # delete temporary storage entry to make WebUI clean -- unless ( keys %{ $session{'Attachments'} } and $ARGSRef->{'UpdateAttach'} ) -- { -- delete $session{'Attachments'}; -- } --} =head2 ParseDateToISO diff --cc rt/share/html/Ticket/Update.html index 26a37e80a,26a37e80a..8a3d8e30d --- a/rt/share/html/Ticket/Update.html +++ b/rt/share/html/Ticket/Update.html @@@ -290,6 -290,6 +290,7 @@@ if ( $ARGS{'SubmitTicket'} ) my %squelched = ProcessTransactionSquelching( \%ARGS ); $ARGS{'SquelchMailTo'} = [keys %squelched] if keys %squelched; ++warn @{ $ARGS{'SquelchMailTo'} } if $ARGS{'SquelchMailTo'}; my $CFs = $TicketObj->TransactionCustomFields; my $ValidCFs = $m->comp( @@@ -311,6 -311,6 +312,7 @@@ ); $checks_failure = 1 unless $status; } ++warn @{ $ARGS{'SquelchMailTo'} } if $ARGS{'SquelchMailTo'}; # check email addresses for RT's {