#!/usr/bin/perl -w 
#------------------------------------------------------------------------------
# $Id$
#------------------------------------------------------------------------------
# Show mail-template files CGI
#
# Copyright (c) BAYBITS LLC. All rights reserved.
#------------------------------------------------------------------------------

use strict;
use Encode;
use XML::DOM;
use HTML::Template;
use TF::XMLUtils;
use TF::CommonUtils;
use utf8;

binmode(STDOUT, ":utf8");

# global
my $LOCATION      = $ENV{'TF_LOCATION'} || '';
my $TF_VERSION    = $ENV{'TF_VERSION'};
my $BRAND         = $ENV{'TF_BRANDNAME'} || '';
my $USERTYPE      = $ENV{'TF_USERTYPE'} || 'normal';
my $LANGPARAM     = TF::CommonUtils::getLangPriority();
my $MLSERVERSEND  = $ENV{'TF_MLSERVERSEND'} || 'off';
my $TF_MLEDIT     = $ENV{'TF_MLEDIT'} || 'off';
my $MLROOT        = $ENV{'TF_MLTEMPLATE_ROOT'} || '.';
my $TEMPLATE_FILE = './tmpl/mailsetting.tmpl.' . $LANGPARAM;
my $TEMPLATE_LIST = $MLROOT . '/_mlist';
my $MSGTABLE_ja   = {
					mErrNoMailList => 'メールテンプレート一覧ファイルを読むことができませんでした。',
				};
my $MSGTABLE_en   = {
					mErrNoMailList => 'Could not open mail template list.',
				};
my $MSGTABLE      = ($LANGPARAM eq 'ja') ? $MSGTABLE_ja : $MSGTABLE_en;

if (!$LOCATION || !$USERTYPE || $USERTYPE ne 'admin' || $TF_MLEDIT ne 'on') {
	TF::CommonUtils::showAccessDeny();
	die '';
}

main();

#
# main 
#
sub main {
	&printHTML();
}

#
# sub
#
sub printHTML
{
	my $mailimg   = $ENV{'TF_FOLDER_EDITMAIL_IMG'} || '/icons/teamfile/tf_mail.gif';
	my $mailtitle = $ENV{'TF_FOLDER_EDITMAIL'} || '';
	my $dec_mailtitle = TF::CommonUtils::decodeUTF8($mailtitle);
	my @paramarray = ();
	my $f = undef;
	my $xml;
	my $doc;
	my $mltemplate;

	if (!open(MLLIST, "<$TEMPLATE_LIST")) {
		TF::CommonUtils::showErrorPage($MSGTABLE->{mErrNoMailList}, $LANGPARAM);
		return;
	}

	while ($f = <MLLIST>) {
		my $name     = '';
		my $desc     = '';
		my $functype = '';
		my $mtime    = '';
		my $isLocationTemplate = 0;

		chomp($f);

		# 拡張子(ja/en) による言語判定
		#
		my ($prefix, $ext) = split(/\./, $f);
		my $isJapanese = ($ext && $ext eq 'ja') ? 1 : 0;

		# メールテンプレートファイルのパスを算出
		#
		$mltemplate = $MLROOT . $LOCATION . '.' . $f;
		if (!-f $mltemplate) {
			$mltemplate = $MLROOT . '/' . $f;
			$isLocationTemplate = 0;
		}
		else {
			$isLocationTemplate = 1;
		}

		# メールテンプレートファイルの更新日時を取得
		#
		$mtime = &getFileTimeStamp($mltemplate);

		# 中身をパースして、メール名称、機能名、内容を取得
		#
		$xml = new XML::DOM::Parser;
		$doc = $xml->parsefile($mltemplate);

		for my $elem ($doc->getElementsByTagName("TF:mailproperty")) {
			$name     = TF::XMLUtils::getText($elem, "TF:mailname", $LANGPARAM) || '---'; 
			$desc     = TF::XMLUtils::getText($elem, "TF:description", $LANGPARAM) || '---';
			$functype = TF::XMLUtils::getText($elem, "TF:functiontype", $LANGPARAM) || '---';
		}
		push(@paramarray, {	name => $name,
							mtime => $mtime,
							desc => $desc,
							fprefix => $f,
							mailimg => $mailimg,
							isJapanese => $isJapanese,
							isLocationTemplate => $isLocationTemplate,
							functype => $functype,
						  }
						);
		$doc->dispose;
	}
	close(MLLIST);

	# HTMLテンプレートを使ってHTMLを生成する
	#
	if (open(TEMPLATE, "<$TEMPLATE_FILE")) {
		binmode(TEMPLATE, ":utf8");
		my $htmltmpl = HTML::Template->new(	filehandle => *TEMPLATE,
											case_sensitive => 1,
											die_on_bad_params => 0);
		if ($htmltmpl) {
			$htmltmpl->param(	brandname => $BRAND,
								tfversion => $TF_VERSION,
								mailimg => $mailimg,
								mailtitle => $dec_mailtitle,
								maillist => \@paramarray);
			print "Content-type: text/html; charset=UTF-8\n";
			print "Pragma: no-cache\n";
			print "Cache-Control: no-cache\n\n";
			print $htmltmpl->output;
		}
		close(TEMPLATE);
	}
	else {
		TF::CommonUtils::showTemplateOpenErr($LANGPARAM);
		return;
	}
}

sub getFileTimeStamp {
	my $path = shift || undef;
	my $timestamp;

	if (!$path) {
		return '';
	}

	my @fstat = stat($path);
	my ($ss, $mi, $hh, $dd, $mm, $yy) = localtime($fstat[9]);
	$yy += 1900;
	$mm++;

	$timestamp = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $yy, $mm, $dd, $hh, $mi, $ss);

	return $timestamp;
}

