#!/usr/bin/perl -w
#------------------------------------------------------------------------------
# $Id$
#------------------------------------------------------------------------------
# TeamFile SideMemu page CGI
#
# Copyright (c) BAYBITS LLC. All rights reserved.
#------------------------------------------------------------------------------

use strict;
use utf8;
use Encode;
use TF::CommonUtils;
use HTML::Template;

binmode(STDOUT, ":utf8");

# global
my $LOCATION      = $ENV{'TF_LOCATION'};
my $BRAND         = $ENV{'TF_BRANDNAME'};
my $TF_VERSION    = $ENV{'TF_VERSION'}  || '';
my $EXTEND_MENU_N = $ENV{'TF_EXTENDED_SPEC_NUM'} || 0;
my $USERTYPE      = $ENV{'TF_USERTYPE'} || 'normal';
my $LANGPARAM     = TF::CommonUtils::getLangPriority();
my $TEMPLATE_BASE = './tmpl';
my $TEMPLATE_FILE = './tmpl/sidemenu.tmpl.' . $LANGPARAM;
my $EDITMAIL_NAME = $ENV{'TF_FOLDER_EDITMAIL'} || undef;
my $TF_MLEDIT     = $ENV{'TF_MLEDIT'} || 'off';
my $TF_LOGACCESS  = $ENV{'TF_LOGACCESS'} || 'off';
my $LOGACCESS     = $ENV{'TF_FOLDER_LOGACCESS'} || undef;
my $TF_AUTODELETE = $ENV{'TF_AUTODELETE'} || 'off';
my $AUTODELETE    = $ENV{'TF_FOLDER_AUTODELETE'} || undef;
my $TF_LOGOPERATION = $ENV{'TF_LOGOPERATION'} || 'off';
my $LOGOPERATION    = $ENV{'TF_FOLDER_LOGOPERATION'} || undef;
my $SHOW_USERF    = $ENV{'TF_USERSHOWUSER'} || 'on';
my $SHOW_GROUPF   = $ENV{'TF_USERSHOWGROUP'} || 'on';
my $TF_LICENSEUPLOADER = $ENV{'TF_LICENSEUPLOADER'} || 'off';
my $LICENSEUPLOADER    = $ENV{'TF_FOLDER_LICENSEUPLOADER'} || undef;
my $REPORTSETTINGS = $ENV{'TF_FOLDER_REPORTSETTINGS'} || undef;
my $IS_EXTENDSYSMSG = ($ENV{'TF_EXTENDSYSMSG'} eq 'on') ? 1 : 0;
my $IS_SSL = ($ENV{'HTTPS'} && $ENV{'HTTPS'} eq 'on') ? 1 : 0;
my $SSLCERT_SEAL = 'sslcertseal.' . $LANGPARAM;
my $ENABLE_CHANGE_PASSWORD = ($ENV{'TF_DISABLE_CHANGE_PASSWORD'} eq 'on') ? 0 : 1;
my $ENABLE_SESSION = ($ENV{'TF_USESESSION'} eq 'on') ? 1 : 0;
if (!$LOCATION) {
	TF::CommonUtils::showAccessDeny();
	die '';
}

my $LOCATION_NAME = $LOCATION;
$LOCATION_NAME =~ s/\///g;

main();

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

#
# sub
#
sub printHTML {
	my $show_filemenu = 0;
	my @filemenu = ();
	my @sslseal = ();
	if ($SHOW_USERF eq 'on') {
		push(@filemenu,
				{	uri => TF::CommonUtils::decodeUTF8($ENV{'TF_PRIVATEFOLDER_URI'} . '?WEBDAV_METHOD=PROPFIND'),
					img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_USER_IMG'}),
					dispname => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_USER'}),
				});
		$show_filemenu = 1;
	}
	
	if ($SHOW_GROUPF eq 'on') {
		push(@filemenu,
				{	uri => TF::CommonUtils::decodeUTF8($ENV{'TF_GROUPFOLDER_URI'} . '?WEBDAV_METHOD=PROPFIND'),
					img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_GROUP_IMG'}),
					dispname => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_GROUP'}),
				});
		$show_filemenu = 1;
	}
	&getExtenedMenu('FILE', \@filemenu);

	my @personalmenu = ();
	&getExtenedMenu('PERSONAL', \@personalmenu);

	my @utilitymenu = (
					{	uri => TF::CommonUtils::decodeUTF8($ENV{'TF_UTILUPDATEDCLIENT_URI'} . '?WEBDAV_METHOD=PROPFIND'),
						img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_M_UPDATE_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_M_UPDATE'}),
					});

	if ($IS_EXTENDSYSMSG eq "0") {
		push(@utilitymenu,
					{	uri => TF::CommonUtils::decodeUTF8($ENV{'TF_UTILSYSMSG_URI'}),
						img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_M_SYSMSG_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_M_SYSMSG'}),
					});
	}

	if ($EDITMAIL_NAME && $TF_MLEDIT eq 'on' && $USERTYPE eq 'admin') {
		push(@utilitymenu,
					{	uri => $LOCATION . '/.cgi-bin/mailsetting',
						img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_EDITMAIL_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($EDITMAIL_NAME),
					});
	}
	if (($TF_LOGACCESS eq 'on' || $TF_LOGACCESS eq 'on-all') && $USERTYPE eq 'admin') {
		push(@utilitymenu,
					{	uri => $LOCATION . '/.cgi-bin/loglist',
						img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_LOGACCESS_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($LOGACCESS),
					});
	}
	if ($TF_AUTODELETE eq 'on' && ($USERTYPE eq 'admin' || $USERTYPE eq 'groupleader')) {
		push(@utilitymenu,
					{	uri => $LOCATION . '/.cgi-bin/autodelsetting',
						img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_AUTODELETE_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($AUTODELETE),
					});
	}
	if ($TF_LOGOPERATION eq 'on' && ($USERTYPE eq 'admin' || $USERTYPE eq 'normal' || $USERTYPE eq 'groupleader')) {
		push(@utilitymenu,
					{	uri => $LOCATION . '/.cgi-bin/oploglist',
						img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_LOGOPERATION_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($LOGOPERATION),
					});
	}
	if ($USERTYPE eq 'admin') {
		push(@utilitymenu,
					{   uri => $LOCATION . '/.cgi-bin/reportsettings',
					    img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_REPORTSETTINGS_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($REPORTSETTINGS),
					});
	}
	if ($TF_LICENSEUPLOADER eq 'on' && $USERTYPE eq 'admin') {
		push(@utilitymenu,
					{	uri => $LOCATION . '/.cgi-bin/lcuploader',
						img => TF::CommonUtils::decodeUTF8($ENV{'TF_FOLDER_LICENSEUPLOADER_IMG'}),
						dispname => TF::CommonUtils::decodeUTF8($LICENSEUPLOADER),
					});
	}
	&getExtenedMenu('UTILITY', \@utilitymenu);

	if ($IS_SSL) {
		my $fname = getPage($SSLCERT_SEAL);
		my $line;
		if (open(HTML, "<$fname")) {
			binmode(HTML, ":utf8");
			while ($line = <HTML>) {
				push (@sslseal, { line => $line } );
			}
			close(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,
								location => $LOCATION,
								logoimg => $ENV{'TF_FOLDER_TOPPAGE_IMG'},
								showfilemenu => $show_filemenu,
								filemenu => \@filemenu,
								personalmenu => \@personalmenu,
								loginname => TF::CommonUtils::decodeUTF8($ENV{'TF_USERNAME'}),
								chpassimg => $ENV{'TF_FOLDER_M_USERFOLDER_IMG'},
								utilitymenu => \@utilitymenu,
								sslseal => \@sslseal,
								enablechpass => $ENABLE_CHANGE_PASSWORD,
								enablesession => $ENABLE_SESSION,
								);
			print "Content-type: text/html; charset=UTF-8\n\n";
			print $htmltmpl->output;
		}
		close(TEMPLATE);
	}
	else {
		TF::CommonUtils::showTemplateOpenErr($LANGPARAM);
	}
}

#
sub getExtenedMenu {
	my $menutype   = shift || 'unknown';
	my $paramarray_ref = shift || undef;

	if ($EXTEND_MENU_N == 0 || $menutype eq 'unknown' || !$paramarray_ref) {
		return;
	}

	for my $i(0 .. $EXTEND_MENU_N) {
		my $line = $ENV{"TF_EXTENDED_SPEC$i"};
		if ($line) {
			my ($mtype, $uri, $iconuri, $displayname, $usertype) = split(/,/, $line);
			if ($uri && $iconuri && $displayname) {
				if (!$mtype) {
					$mtype = 'UTILITY';
				}
				if (!$usertype) {
					$usertype = 'admin';
				}

				if ($menutype eq $mtype && $usertype =~ /$USERTYPE/) {
					push(@{$paramarray_ref},
										{	uri => TF::CommonUtils::decodeUTF8($uri),
											img => TF::CommonUtils::decodeUTF8($iconuri),
											dispname => TF::CommonUtils::decodeUTF8($displayname),
										});
				}
			}
		}
	}
}

sub getPage {
	my $name = shift || '';
	my $fname;

	# (1) (location).$name
	$fname = $TEMPLATE_BASE . "/". $LOCATION_NAME . "." . $name;
	if (-f $fname) {
		return $fname;
	}

	# (2) $name
	$fname = $TEMPLATE_BASE . "/" . $name;

	return $fname;
}

