# Mail delivery

my %MAIL_PRIORITY = (2 => 'High', 
                     3 => 'Normal', 
                     4 => 'Low');


require "Mdelivery.pm";
Mdelivery->import();
my $Mdelivery = Mdelivery->new($db, $admin, \%conf);

my @service_status_colors = ("$_COLORS[9]", "$_COLORS[6]", '#808080', '#0000FF', '#FF8000');
my @service_status = ( "$_ENABLE", "$_DISABLE", "$_NOT_ACTIVE", "$_HOLD_UP", "$_DISABLE: $_NON_PAYMENT" );



#*******************************************************************
# Mail delivery
# mdelivery_main()
#*******************************************************************
sub mdelivery_main {
 my $period = $FORM{period} || 0;

 if ($FORM{sent}) {
   $FORM{DATE}="$FORM{date_Y}-". ($FORM{date_M}+1) ."-$FORM{date_D}" if ($period != 0);

   $Mdelivery->add({ %FORM });
   if (! $Mdelivery->{errno}) {
     $html->message('info', $_INFO, "$_SENDED");
    }

   my @ATTACHMENTS = ();

   for(my $i=1; $i<=2; $i++) {
       if ($FORM{'FILE_UPLOAD_'. $i}) {
         $Mdelivery->attachment_add({ 
           MSG_ID       => $Mdelivery->{MDELIVERY_ID},
           CONTENT      => $FORM{'FILE_UPLOAD_'. $i}{Contents},
           FILESIZE     => $FORM{'FILE_UPLOAD_'. $i}{Size},
           FILENAME     => $FORM{'FILE_UPLOAD_'. $i}{filename},
           CONTENT_TYPE => $FORM{'FILE_UPLOAD_'. $i}{'Content-Type'},
          });

         if ($Mdelivery->{errno}) {
           $html->message('err', $_ERROR, "[$Mdelivery->{errno}] $err_strs{$Mdelivery->{errno}}");
          }

         push @ATTACHMENTS, {
          	ATTACHMENT_ID => $i,
            FILENAME      => $FORM{'FILE_UPLOAD_'. $i}{filename}, 
            CONTENT_TYPE  => $FORM{'FILE_UPLOAD_'. $i}{'Content-Type'},
            FILESIZE      => $FORM{'FILE_UPLOAD_'. $i}{Size},
            CONTENT       => $FORM{'FILE_UPLOAD_'. $i}{Contents}
          };
        }
    }
 
   if ($FORM{SEND_PREVIEW}) {
     sendmail(($FORM{FROM}) ? $FORM{FROM} : $conf{ADMIN_MAIL}, 
          "$conf{ADMIN_MAIL}", 
          "$FORM{SUBJECT}", 
          "$FORM{TEXT}", 
          "$conf{MAIL_CHARSET}", 
          "$FORM{PRIORITY} ($MAIL_PRIORITY{$FORM{PRIORITY}})",
          { ATTACHMENTS => ($#ATTACHMENTS > -1) ? \@ATTACHMENTS : undef });   	 
    }


  }
  
 $Mdelivery->{PERIOD_FORM} =form_period($period);
 $Mdelivery->{PRIORITY_SEL}=$html->form_select('PRIORITY', 
                                { SELECTED  => $FORM{PRIORITY},
 	                                SEL_HASH  => \%MAIL_PRIORITY
 	                               });

 $status_sel = $html->form_select('STATUS', 
                                          { 
 	                                          SELECTED     => $FORM{STATUS},
 	                                          SEL_HASH     => { '' => "$_ALL",
 	                                          	                0  => $service_status[0],
 	                                          	                1  => $service_status[1],
 	                                          	                },
                                            NO_ID       => 1,
                                            STYLE        => \@service_status_colors,
 	                                        });

 my @rows = ( [ "$_GROUP: ", sel_groups() ], 
              [ "$_ACCOUNT $_STATUS:", $status_sel ] ); 
 

  
 my $table = $html->table({ width      => '100%',
                            caption    => $_EXTRA,
                            rows       => \@rows
                          });
 
 

 $Mdelivery->{EXTRA2} .= "<tr><th colspan=2>". $table->show() ."</th></tr>\n";


 if (in_array('Dv', \@MODULES)) {
   use Tariffs;
   my $tariffs  = Tariffs->new($db, \%conf, $admin);

   my $tp_sel = $html->form_select('TP_ID', 
                                          { 
 	                                          SELECTED          => $Dv->{TP_ID},
 	                                          SEL_MULTI_ARRAY   => [ ['', $_ALL], @{ $tariffs->list({ MODULE => 'Dv' }) } ],
 	                                          MULTI_ARRAY_KEY   => 0,
 	                                          MULTI_ARRAY_VALUE => 1,
 	                                        });
   

   
   $status_sel = $html->form_select('DV_STATUS', 
                                          { 
 	                                          SELECTED     => $FORM{DV_STATUS},
 	                                          SEL_HASH     => { '' => "$_ALL",
 	                                          	                0  => $service_status[0],
 	                                          	                1  => $service_status[1],
 	                                          	                2  => $service_status[2],
 	                                          	                3  => $service_status[3],  
 	                                          	                4  => $service_status[4]    
 	                                          	                },
                                            NO_ID       => 1,
                                            STYLE       => \@service_status_colors,
 	                                        });

   
   my @rows = ( [ "$_TARIF_PLAN: ", $tp_sel ], 
                [ "$_STATUS:", $status_sel ] ); 
 


 	 my $table = $html->table({ width      => '100%',
                              caption    => 'Internet',
                              rows       => \@rows
                          });
 	 $Mdelivery->{EXTRA2} .= "<tr><th colspan=2>". $table->show() ."</th></tr>\n";
  }




  if ($conf{ADDRESS_REGISTER}) {
  	$Mdelivery->{EXTRA2} .= $html->tpl_show(templates('form_address_sel'), $Mdelivery, { OUTPUT2RETURN => 1 });
   }
  else {
    $Mdelivery->{EXTRA2} .= $html->tpl_show(templates('form_address'), $Mdelivery, { OUTPUT2RETURN => 1 }); 
   }
  
  $Mdelivery->{EXTRA2} .= "<tr bgcolor=$_COLORS[2]><td colspan=1>$_SEND $_PRE:</td><td><input type=checkbox name=SEND_PREVIEW value=1 checked> $conf{ADMIN_MAIL}</td></tr>\n";

  $html->tpl_show(templates('mail_form'), $Mdelivery); 
}


#*******************************************************************
# Mail delivery
# mdelivery_main()
#*******************************************************************
sub mdelivery_list {
 


if ($FORM{ATTACHMENT}) {
  	$Mdelivery->attachment_info({ ID => $FORM{ATTACHMENT} });
  	print "Content-Type: $Mdelivery->{CONTENT_TYPE}; filename=\"$Mdelivery->{FILENAME}\"\n".
  	"Content-Disposition: attachment; filename=\"$Mdelivery->{FILENAME}\"; size=$Mdelivery->{FILESIZE}".
  	"\n\n";
  	print "$Mdelivery->{CONTENT}";
  	return 0;
  }
elsif ($FORM{reset}) {
	$Mdelivery->reset({  ID => $FORM{reset} });
  if (! $Mdelivery->{errno}) {
    $html->message('info', $_INFO, "$_RESET [$FORM{reset}]");
   }
 }
elsif ($FORM{info}) {
  if ($FORM{del_user}) {
    $Mdelivery->user_list_del({ MDELIVERY_ID=>$FORM{info},  UID => $FORM{del_user} });

    if (! $Mdelivery->{errno}) {
      $html->message('info', $_INFO, "$_USER $_DELETED");
     }
   }

  $Mdelivery->info($FORM{info});
  if ($Mdelivery->{errno}) {
    $html->message('err', $_ERROR, "[$Mdelivery->{errno}] $err_strs{$Mdelivery->{errno}}");
   }



  $Mdelivery->{PRIORITY}="$Mdelivery->{PRIORITY} ($MAIL_PRIORITY{$Mdelivery->{PRIORITY}})";
  
  $Mdelivery->attachment_info({ MSG_ID => $FORM{info} });
  
  if ($Mdelivery->{TOTAL} > 0)  {
  	foreach my $line ( @{ $Mdelivery->{list} } ) {
  		$Mdelivery->{ATTACHMENT} .= $html->button($line->[1], "qindex=$index&ATTACHMENT=$line->[0]", { ex_params => 'ta
rget=_new' }). " $_SIZE: ". int2byte($line->[3]) . ' / ';
  	 }
   }
  
  
  $html->tpl_show(_include('mdelivery_form', 'Mdelivery'), $Mdelivery); 

  my $list = $Mdelivery->user_list({ %LIST_PARAMS, MDELIVERY_ID => $FORM{info} });  
  my $table = $html->table({ width      => '100%',
                            caption    => $_USERS,
                            title      => ["$_LOGIN", "$_FIO", "$_STATUS", '-' ],
                            cols_align => ['left', 'left', 'center', 'center' ],
                            qs         => "&info=$FORM{info}",
                            pages      => $Mdelivery->{TOTAL},
                            ID         => 'MDELIVERY_USERS_LIST'
                          });

  foreach my $line (@$list) {
    my $delete = $html->button($_DEL, "index=$index&info=$FORM{info}&del_user=$line->[3]", { MESSAGE =>  "$_DEL [$line->[0]]?", CLASS =>'del' });

    $table->addrow($html->button($line->[0], "index=15&UID=$line->[3]"), 
      $line->[1], 
      ($line->[2]) ? $_SENDED : '', 
      
      $delete);
   }

  print $table->show();
  
  $table = $html->table({ width      => '100%',
                          cols_align => ['right', 'right', 'right', 'right'],
                          rows       => [ [ "$_TOTAL:", "$Mdelivery->{TOTAL}" ] ]
                        });

  print $table->show(); 
 }
elsif ($FORM{del} && $FORM{is_js_confirmed}) {
  $Mdelivery->del($FORM{del});
  if ($Mdelivery->{errno}) {
    $html->message('err', $_ERROR, "[$Mdelivery->{errno}] $err_strs{$Mdelivery->{errno}}");
   }
  else {
    $html->message('info', $_DELETED, "$_DELETED [$FORM{del}]");
   }
}
  

 my $list = $Mdelivery->list({ %LIST_PARAMS });  
 my $table = $html->table({ width      => '100%',
                            caption    => $_LIST,
                            title      => ["ID", "$_DATE", "$_SUBJECT", "$_FROM", "$_ADMIN",  "$_ADDED", "$_SIZE", "$_STATUS", '-', '-', '-' ],
                            cols_align => ['right', 'right', 'right', 'left', 'left', 'right', 'center', 'center', 'center', 'center'],
                            qs         => $pages_qs,
                            pages      => $Mdelivery->{TOTAL},
                            ID         => 'MDELIVERY_LIST'
                          });

 foreach my $line (@$list) {
   my $delete = $html->button($_DEL, "index=$index&del=$line->[0]", { MESSAGE =>  "$_DEL [$line->[0]]?", CLASS=>'del' });

   $table->{rowcolor} = ($FORM{info} && $FORM{info} == $line->[0]) ? $_COLORS[0] : undef;

   $table->addrow("$line->[0]", 
     $line->[1], 
     $line->[2], 
     $line->[3],  
     $line->[4],  
     $line->[5], 
     $line->[6], 
     ($line->[7]) ? $_SENDED : '',
     $html->button($_RESET, "index=$index&reset=$line->[0]", { BUTTON=>1, MESSAGE =>  "$_RESET  [$line->[0]]?" }), 
     $html->button($_INFO, "index=$index&info=$line->[0]", { CLASS=>'show' }),
     $delete);
 }
print $table->show();

$table = $html->table({ width      => '100%',
                        cols_align => ['right', 'right', 'right', 'right'],
                        rows       => [ [ "$_TOTAL:", "$Mdelivery->{TOTAL}" ] ]
                      });
print $table->show();
}


#*******************************************************************
# Mail delivery
# mdelivery_main()
#*******************************************************************
sub mdelivery_periodic {
 my ($attr) = @_;

 my $debug        = $attr->{DEBUG} || 0;
 my $debug_output = '';
 $debug_output   .= "Mdelivery\n" if ($debug > 1);

 
use Users;
my $users = Users->new($db, $admin, \%conf); 
$ADMIN_REPORT{DATE}=$DATE if (! $ADMIN_REPORT{DATE});
$LIST_PARAMS{LOGIN}  = $attr->{LOGIN} if ($attr->{LOGIN});
$LIST_PARAMS{STATUS} = 0;
$LIST_PARAMS{DATE}   = "<=$ADMIN_REPORT{DATE}";

my $list = $Mdelivery->list({ %LIST_PARAMS });
my @ids;
foreach my $line (@$list) {
 	push @ids, $line->[0];
}



foreach my $mdelivery_id (@ids) {
	$Mdelivery->info($mdelivery_id);

#  $LIST_PARAMS{GID}=$Mdelivery->{GID} if ($Mdelivery->{GID} && $Mdelivery->{GID} > 0);
#  $LIST_PARAMS{UID}=$Mdelivery->{UID} if ($Mdelivery->{UID} && $Mdelivery->{UID} > 0);
  $LIST_PARAMS{PAGE_ROWS}    = 1000000;
  $LIST_PARAMS{MDELIVERY_ID} = $mdelivery_id;
#  my $user_list = $users->list({ %LIST_PARAMS });


  $Mdelivery->attachment_info({ MSG_ID => $mdelivery_id });

  my @ATTACHMENTS = ();
  
  if ($Mdelivery->{TOTAL} > 0)  {
  	foreach my $line ( @{ $Mdelivery->{list} } ) {
      push @ATTACHMENTS, {
      	ATTACHMENT_ID => $line->[0],
        FILENAME      => $line->[1], 
        CONTENT_TYPE  => $line->[2],
        FILESIZE      => $line->[3],
        CONTENT       => $line->[4]
      };
  	 }
   }


  my $user_list = $Mdelivery->user_list({ %LIST_PARAMS, STATUS => 0 });
  my @users_ids = ();
  
  foreach $u (@$user_list) {
  	my $email = ($u->[4] && $u->[4] ne '') ? $u->[4] : ($conf{USERS_MAIL_DOMAIN}) ? $u->[0] .'@'. $conf{USERS_MAIL_DOMAIN} : '';
    if (! $email || $email eq '')  {
       print "Login: $u->[0] Don't have mail address. Skip...\n";
       next;
     }
  	 
     $Mdelivery->{SENDER} = ($Mdelivery->{SENDER} ne '') ? $Mdelivery->{SENDER} : $conf{ADMIN_MAIL};
  	 $debug_output .= "LOGIN: $u->[0] E-mail: $email $Mdelivery->{SUBJECT}\n" if ($debug > 0);
     push @users_ids, $u->[3];

     sendmail("$Mdelivery->{SENDER}", 
          "$email", 
          "$Mdelivery->{SUBJECT}", 
          "$Mdelivery->{TEXT}", 
          "$conf{MAIL_CHARSET}", 
          "$Mdelivery->{PRIORITY} ($MAIL_PRIORITY{$Mdelivery->{PRIORITY}})",
          { ATTACHMENTS => ($#ATTACHMENTS > -1) ? \@ATTACHMENTS : undef });
   }

  if (! $LIST_PARAMS{LOGIN}) {
    $Mdelivery->user_list_change({ MDELIVERY_ID => $mdelivery_id, UID => join(';', @users_ids) });
    $Mdelivery->change({ ID => $mdelivery_id });
   }
}

  $DEBUG .= $debug_output;
  return $debug_output;
}





1

