#
#C-BOARD Moyuku R}h
#  last modified 2011/02/11
#
#L폜֌W̊֐܂܂Ă܂B
#
#

package DELETE;
#use strict;


#
#   L폜ieҁj
#
sub delete {

	# sȂ̂͂炩߂͂˂
	$CNF::delete{'mode'}
		or &::error(\'e҂ɂ폜͋֎~Ă܂B');
	length($::FORM{'key'}) or &::error(\'폜pX[hႢ܂B');

	# 폜
	my %no; $no{$::FORM{'tree'}} = [$::FORM{'no'}];
	my $mode;
	my $master;
	if (&COMMON::check_pass($::FORM{'key'}, $CNF::pass)) {
		$mode = 1; $master = 1; delete $::FORM{'key'};
	}
	elsif (length($CNF::delete{'key'})
		&& ($::FORM{'key'} eq $CNF::delete{'key'})) {
		$mode = 1; $master = 2; delete $::FORM{'key'};
	}
	else { $mode = $CNF::delete{'parent'}{'mode'};}
	&::lock('msg') or &::error(\'GĂč폜ł܂łB');
	&message(\%no, $mode, $::FORM{'key'}, $master); 
	&::unlock('msg');

	# Wv
	&BASE::location("$CNF::place{'this'}{'url'}?id=$::FORM{'id'}");
}


#
#   L폜
#
sub message {
	my $r_no = shift; my $mode = shift; my $key = shift; my $master = shift;

	require './app/lib/file/fle.pl'; require './app/lib/file/msg.pl';
	require './app/lib/file/tre.pl'; require './app/lib/file/ttl.pl';

	my %MSG_delete;

	# 폜l̃`FbN
	my $name;
	if ($master == 1 ) {
		$name = 'Ǘl';
	}
	elsif ($master == 2 ) {
		$name = 'ǗliL폜Cj';
	}
	else {
		$name = 'e';
	}
	$::FORM{'operator'} = $master;
	$MSG_delete{'subject'} = "[$name폜]";
	$MSG_delete{'body'} = "݂̏$nameɂč폜܂B"
			. "i" . &COMMON::date('yy/m/d(dddd) hhh:nn') . "j";
	
	#Zbg
	$::FORM{'agent'} = $ENV{'HTTP_USER_AGENT'} || 'unknown';
	$::FORM{'host'} = &CGI::get_host(0);
	$::FORM{'ext_host'} = &CGI::get_host(1);
	$::FORM{'addr'} = $ENV{'REMOTE_ADDR'};

	# 
	my $o_tree = new FILE::TREE($CNF::place{'data'}{'path'});
	my($result, $tree, $r_delete)
		= $o_tree->delete_message($r_no, $mode, \%MSG_delete);
	if ($result == 0) { &::error(\'폜o܂łB');}
	elsif ($result == 1) { &::error(\"X̂ō폜ł܂B");}
	my $o_message = new FILE::MESSAGE($CNF::place{'data'}{'path'});
	($result, my $message) = $o_message->delete($r_delete, $key, '',\%MSG_delete);
	if ($result == 0) { &::error(\'폜o܂łB');}
	elsif ($result == 1) { &::error(\'폜pX[hႢ܂B');}

	my $o_file = new FILE::FILE($CNF::place{'data'}{'path'});

	(my $r_file = $o_file->delete_all([keys %{$r_delete}]))
		or &::error(\'폜o܂łB');
	my $o_total = new FILE::TOTAL($CNF::place{'data'}{'path'});
	$o_total->delete($tree, $message)
		or &::error(\'폜o܂łB');

	#
	$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'IGNORE';
	$o_tree->complete(); $o_message->complete(); $o_file->complete();
	$o_total->complete();

	# [M
	if ($CNF::mail{'mode'} != 2 && $CNF::mail{'master'}{'mode_d'} ) {
		require './app/lib/mailer.pl';
		&MAILER::master_mail(\%::FORM);
	}

	unlink(map("$CNF::place{'file'}{'path'}/$_", @{$r_file})); 
	return(1);
}


#r[Ȑ`FbNLǗʂ̃̕c[EL̓폜
#T|[ĝߌ\iȂHjႮBvPB

#
#   I[g[_[
#
sub AUTOLOAD {
	our $AUTOLOAD;

	$::FLAG{'lock'}{'msg'}
	    or &::error(\"bNĂȂ̂ŏ𑱍sł܂");
	my $name = ($AUTOLOAD =~ /^DELETE::(.+)$/)[0];
	push(@{$::FLAG{'eval'}}, $AUTOLOAD);
	if (!defined $DELETE::SUB{$name}) {
		&::error(\"`ĂȂ֐($AUTOLOAD)Ă΂܂B"); exit;
	}
	eval $DELETE::SUB{$name}; length($@) && &::error(\"EVAL ERROR: $@ ($AUTOLOAD)");
	delete $DELETE::SUB{$name}; goto &{'DELETE::' . $name};
}

our %SUB = (

	tree => <<'__SUB__',
#
#   c[폜
#
	sub tree {
		my $r_tree = shift; my $mode = shift;
		require './app/lib/file/fle.pl'; require './app/lib/file/msg.pl';
		require './app/lib/file/tre.pl'; require './app/lib/file/ttl.pl';
		my $o_tree = new FILE::TREE($CNF::place{'data'}{'path'});
		my($tree, $r_no, $r_tree) = $o_tree->delete($r_tree, $mode);
		$tree or return(0);
		my $o_message = new FILE::MESSAGE($CNF::place{'data'}{'path'});
		my($result, $message, $r_msg)
			= $o_message->delete({map(($_, ''), @{$r_no})}, '', $mode);
		$result or return(0);
		my $o_file = new FILE::FILE($CNF::place{'data'}{'path'});
		(my $r_file = $o_file->delete_all($r_no)) or return(0);
		my $o_total = new FILE::TOTAL($CNF::place{'data'}{'path'});
		$o_total->delete($tree, $message) or return(0);
		if ($mode) {
			require './app/cmd/log.pl';
			&LOG::make($r_tree, $r_msg) or return(0);
		}
		$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'IGNORE';
		$o_tree->complete(); $o_message->complete(); $o_file->complete();
		$o_total->complete();
		
		## [M
		#if ($CNF::mail{'mode'} != 2) {
		#	require './app/lib/mailer.pl';
		#	$CNF::mail{'master'}{'mode_d'} && &master_mail_d(1);
		#}

		# [M
		if ($CNF::mail{'mode'} != 2 && $CNF::mail{'master'}{'mode_d'} ) {
			require './app/lib/mailer.pl';
			&MAILER::master_mail(\%::FORM);
		}

		unlink(map("$CNF::place{'file'}{'path'}/$_", @{$r_file})); 
		return(1);
	}
__SUB__

	last_tree => <<'__SUB__',
#
#   Âc[폜
#
	sub last_tree {
		my $number = shift;
		require './app/lib/file/tre.pl';
		my $o_tree = new FILE::TREE($CNF::place{'data'}{'path'});
		(my $r_tree = $o_tree->tail($number)) or return(0);
		return(&tree($r_tree, $CNF::log{'mode'}));
	}
__SUB__

	file => <<'__SUB__',
#
#   Ytt@C폜
#
	sub file {
		my $r_no = shift;
		require './app/lib/file/fle.pl'; require './app/lib/file/msg.pl';
		require './app/lib/file/tre.pl';
		my $o_message = new FILE::MESSAGE($CNF::place{'data'}{'path'});
		$o_message->delete_file($r_no) or return(0);
		my $o_file = new FILE::FILE($CNF::place{'data'}{'path'});
		
		
		$o_file->delete($r_no) or return(0);
		$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'IGNORE';
		$o_message->complete(); $o_file->complete(); my $no;
		
		foreach $no (keys %{$r_no}) {
			unlink(map("$CNF::place{'file'}{'path'}/$_", @{${$r_no}{$no}}));
		}
		
		return(1);
	}
__SUB__

	last_file => <<'__SUB__',
#
#   ÂYtt@C폜
#
	sub last_file {
		my $size = shift;
		require './app/lib/file/fle.pl';
		my $o_file = new FILE::FILE($CNF::place{'data'}{'path'});
		&file($o_file->tail($size)) && return(1);
	}
__SUB__


);


1;

