#!/usr/bin/perl
# Create, update or delete an autoreply filter

require './filter-lib.pl';
&foreign_require("mailbox", "mailbox-lib.pl");
&ReadParse();
&error_setup($text{'auto_err'});

# Find existing autoreply filter object
&lock_file($procmail::procmailrc);
@filters = &list_filters();
($old) = grep { $_->{'actionreply'} && $_->{'nocond'} } @filters;
$filter = $old;

if ($filter && !$in{'enabled'}) {
	# Just delete
	&delete_filter($filter);
	}
elsif ($in{'enabled'}) {
	# Create or update
	if (!$filter) {
		$filter = { 'actionreply' => 1,
			    'body' => 0,
			    'continue' => 1 };
		}
	$in{'reply'} =~ /\S/ || &error($text{'save_ereply'});
	$in{'reply'} =~ s/\r//g;
	$filter->{'reply'}->{'autotext'} = $in{'reply'};

	# From address (automatic)
	$filter->{'reply'}->{'from'} = &mailbox::get_preferred_from_address();

	# File
	$idx = defined($filter->{'index'}) ? $filter->{'index'}
					   : scalar(@filters);
	$filter->{'reply'}->{'autoreply'} ||=
		"$remote_user_info[7]/autoreply.$idx.txt";

	# Reply period
	if ($config{'reply_force'}) {
		# Forced to minimum
		$min = $config{'reply_min'} || 60;
		$filter->{'reply'}->{'period'} = $min*60;
		$filter->{'reply'}->{'replies'} ||=
			"$user_module_config_directory/replies";
		}
	elsif ($in{'period_def'}) {
		# No autoreply period
		delete($filter->{'reply'}->{'replies'});
		delete($filter->{'reply'}->{'period'});
		}
	else {
		# Set reply period and tracking file
		$in{'period'} =~ /^\d+$/ ||
			&error($text{'save_eperiod'});
		if ($config{'reply_min'} &&
		    $in{'period'} < $config{'reply_min'}) {
			&error(&text('save_eperiodmin', $config{'reply_min'}));
			}
		$filter->{'reply'}->{'period'} = $in{'period'}*60;
		$filter->{'reply'}->{'replies'} ||=
			"$user_module_config_directory/replies";
		}

	# Save character set
	if ($in{'charset_def'} == 1) {
		delete($filter->{'reply'}->{'charset'});
		}
	elsif ($in{'charset_def'} == 2) {
		$filter->{'reply'}->{'charset'} = &get_charset();
		}
	else {
		$in{'charset'} =~ /^[a-z0-9\.\-\_]+$/i ||
			error($text{'save_echarset'});
		$filter->{'reply'}->{'charset'} = $in{'charset'};
		}

	# Save subject
	if ($in{'subject_def'}) {
		delete($filter->{'reply'}->{'subject'});
		}
	else {
		$filter->{'reply'}->{'subject'} = $in{'subject'};
		}

	if ($old) {
		&modify_filter($filter);
		}
	else {
		&insert_filter($filter);
		}
	}

&unlock_file($procmail::procmailrc);
&redirect("");

