#!/usr/bin/perl -w
#------------------------------------------------------------------------------
# $Id$
#------------------------------------------------------------------------------
# system information message RSS generator
#
# Copyright (c) BAYBITS LLC. All rights reserved.
#------------------------------------------------------------------------------

use strict;
use utf8;
binmode STDOUT, ":utf8";    # stdout is UTF8

use HTTP::Request::Common qw(POST);
use XML::DOM;
use URI::Escape;
use CGI;
use HTML::Template;
use TF::SingleLock;
use TF::CommonUtils;
use TF::XMLUtils;
use TF::SysMsgx;
use Encode;

#
# global
#
my $BRAND         = $ENV{'TF_BRANDNAME'} || '';
my $USERID        = $ENV{'REMOTE_USER'} || '';
my $PASSWD        = $ENV{'TF_USERPLAINPASSWORD'} || '';
my $LOCATION      = $ENV{'TF_LOCATION'} || '';
my $PATH_INFO     = $ENV{'PATH_INFO'} || '';
my $USERTYPE      = $ENV{'TF_USERTYPE'} || 'normal';
my $LANGPARAM     = TF::CommonUtils::getLangPriority();
my $BACKURI       = $LOCATION . "/.cgi-bin/mainmenu";
my ($SCHEMA,$SERVER_PORT,$URI_PREFIX) = TF::CommonUtils::getCgiConnectInfo();
my $URL           = $URI_PREFIX . $LOCATION;
my $LOCATION_NAME = $LOCATION;
$LOCATION_NAME    =~ s/\///g;
my $pagetitle     = $ENV{'TF_FOLDER_M_SYSMSG'};
my $PAGETITLE     = TF::CommonUtils::decodeUTF8($pagetitle);
my $IMAGE         = $ENV{'TF_FOLDER_TOPPAGE_IMG'};

my $TEMPLATE_FILE = './tmpl/rdf.tmpl.' . $LANGPARAM;
my $ACTIONURI     = "rssgen";
my $USER_AGENT    = $ENV{'HTTP_USER_AGENT'} || '';
my $IS_EXTENDSYSMSG = ($ENV{'TF_EXTENDSYSMSG'} eq 'on') ? 1 : 0;

if (!$LOCATION || !$USERTYPE || $IS_EXTENDSYSMSG ne '1') {
	TF::CommonUtils::showAccessDeny();
	die '';
}

main();

sub main {
	my $cgi = new CGI;
	my @seq = (); 
	my @items = ();

	if( ! $cgi ) {
		print STDERR "CGI Object error";
		return;
	}

	if( $cgi->cgi_error ) {
		print STDERR "CGI Error (" . $cgi->cgi->error . ")";
		return;
	}

	my $sysmsg = TF::SysMsgx->new();
	my $s = $sysmsg->querySysMsg($URL, $USERID, $PASSWD, 'currentmsg', undef, $LANGPARAM);
	if ($s == '207') {
		foreach ( $sysmsg->getIDList() ) {
			if ( $sysmsg->isExists($_) ) {
				my $subject = $sysmsg->getSubject($_);
				my $link = getClientURL() . '/.cgi-bin/editmsg?hidCmd=VIEW&hidMsgid=' . $_;

				push ( @seq , {	resource => $link,
							  }
					 );

				push ( @items, {	title    => $subject,
									link     => $link,
									date     => timetoW3CDTF($sysmsg->getUpdatedt($_)),
									about    => $link,
							  }
					 );

			}
		}
	}

	showResponse($cgi,\@seq, \@items);
}

sub showResponse {
	my $cgi = shift;
	my $seq = shift;
	my $items = shift;

	my $succeeded = 0;

    if( $cgi ) {
        if( open TEMPLATE, "<", $TEMPLATE_FILE ) {
	        binmode TEMPLATE, ":utf8";	#is utf-8

			my $htmltmpl = HTML::Template->new( filehandle => *TEMPLATE,
												case_sensitive => 1,
												die_on_bad_params => 0);
			
			if( $htmltmpl ) {
				$htmltmpl->param( 	seq	 	=> $seq,
									items	=> $items,
									lang	=> $LANGPARAM,
									title   => $BRAND,
									image   => getClientURL() . $IMAGE,
									link    => getClientURL(),
								);

				print $cgi->header( -charset => 'utf-8', -type=> 'application/rss+xml' );
				print $htmltmpl->output;
				$succeeded = 1;
			}
		}
	}
	
}

sub timetoW3CDTF {
	my $epoch = shift;

	my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoch);
	$year += 1900;
	$mon += 1;

	my $ret = sprintf("%4d-%02d-%02dT%02d:%02d:%02d+09:00", $year, $mon, $mday, $hour, $min, $sec);

	return $ret;
}

sub getClientURL {
	my $url = undef;
	my $USE_SSL = $ENV{'HTTPS'} || 'off';
	my $dynamic_schema  = ($USE_SSL eq "on") ? 'https' : 'http';
	my $dynamic_port    = $ENV{'SERVER_PORT'} || '80';

	my $schema = $ENV{'TF_CLIENT_SCHEMA'};
	my $host   = $ENV{'TF_CLIENT_HOST'};
	my $port   = $ENV{'TF_CLIENT_PORT'};

	if (!$schema) {
		$schema = $dynamic_schema;
	}

	if (!$port) {
		$port = $dynamic_port;
	}

	my $nf_host = $ENV{'TF_NOTIFYSERVER_NAME'} || undef;
	my $nf_port = $ENV{'TF_NOTIFYSERVER_PORT'} || undef;
	my $nf_schema = $ENV{'TF_NOTIFYSERVER_SCHEMA'} || undef;

	if ($nf_host) { $host = $nf_host };
	if ($nf_port   ne 'auto') { $port = $nf_port };
	if ($nf_schema ne 'auto') { $schema = $nf_schema }; 

	if (!$port or $port == 80 or $port == 443) {
		$url = $schema . "://" . $host;
	}
	else {
		$url = $schema . "://" . $host . ":" . $port;
	}

	return $url . $LOCATION;

}

