1#!/usr/local/bin/perl 2# Create, update or delete an autoreply filter 3 4require './filter-lib.pl'; 5&ReadParse(); 6&error_setup($text{'auto_err'}); 7use Time::Local; 8 9# Find existing autoreply filter object 10&lock_file($procmail::procmailrc); 11@filters = &list_filters(); 12($old) = grep { $_->{'actionreply'} && $_->{'nocond'} } @filters; 13$filter = $old; 14 15if ($filter && !$in{'enabled'}) { 16 # Just delete 17 &delete_filter($filter); 18 } 19elsif ($in{'enabled'}) { 20 # Create or update 21 if (!$filter) { 22 $filter = { 'actionreply' => 1, 23 'body' => 0, 24 'continue' => 1 }; 25 } 26 $in{'reply'} =~ /\S/ || &error($text{'save_ereply'}); 27 $in{'reply'} =~ s/\r//g; 28 $filter->{'reply'}->{'autotext'} = $in{'reply'}; 29 30 # From address (automatic) 31 $filter->{'reply'}->{'from'} = &mailbox::get_preferred_from_address(); 32 33 # File 34 $idx = defined($filter->{'index'}) ? $filter->{'index'} 35 : scalar(@filters); 36 $filter->{'reply'}->{'autoreply'} ||= 37 "$remote_user_info[7]/autoreply.$idx.txt"; 38 39 # Reply period 40 if ($config{'reply_force'}) { 41 # Forced to minimum 42 $min = $config{'reply_min'} || 60; 43 $filter->{'reply'}->{'period'} = $min*60; 44 $filter->{'reply'}->{'replies'} ||= 45 "$user_module_config_directory/replies"; 46 } 47 elsif ($in{'period_def'}) { 48 # No autoreply period 49 delete($filter->{'reply'}->{'replies'}); 50 delete($filter->{'reply'}->{'period'}); 51 } 52 else { 53 # Set reply period and tracking file 54 $in{'period'} =~ /^\d+$/ || 55 &error($text{'save_eperiod'}); 56 if ($config{'reply_min'} && 57 $in{'period'} < $config{'reply_min'}) { 58 &error(&text('save_eperiodmin', $config{'reply_min'})); 59 } 60 $filter->{'reply'}->{'period'} = $in{'period'}*60; 61 $filter->{'reply'}->{'replies'} ||= 62 "$user_module_config_directory/replies"; 63 } 64 65 # Save character set 66 if ($in{'charset_def'} == 1) { 67 delete($filter->{'reply'}->{'charset'}); 68 } 69 elsif ($in{'charset_def'} == 2) { 70 $filter->{'reply'}->{'charset'} = &get_charset(); 71 } 72 else { 73 $in{'charset'} =~ /^[a-z0-9\.\-\_]+$/i || 74 error($text{'save_echarset'}); 75 $filter->{'reply'}->{'charset'} = $in{'charset'}; 76 } 77 78 # Save subject 79 if ($in{'subject_def'}) { 80 delete($filter->{'reply'}->{'subject'}); 81 } 82 else { 83 $filter->{'reply'}->{'subject'} = $in{'subject'}; 84 } 85 86 # Save autoreply start and end 87 foreach $p ('start', 'end') { 88 local ($s, $m, $h) = $p eq 'start' ? (0, 0, 0) : 89 (59, 59, 23); 90 if (!$in{$p.'_def'}) { 91 eval { 92 $tm = timelocal($s, $m, $h, $in{'d'.$p}, 93 $in{'m'.$p}-1, $in{'y'.$p}-1900); 94 }; 95 $tm || &error($text{'save_e'.$p}); 96 $filter->{'reply'}->{'autoreply_'.$p} = $tm; 97 } 98 else { 99 delete($filter->{'reply'}->{'autoreply_'.$p}); 100 } 101 } 102 103 if ($old) { 104 &modify_filter($filter); 105 } 106 else { 107 &insert_filter($filter); 108 } 109 } 110 111&unlock_file($procmail::procmailrc); 112&redirect(""); 113 114