#!/usr/bin/perl -w
#
# CGI commenting system.  Inspired by DotComments and Phil Ulrich
#
# Version 1.0 - Initial release to the public.
# Version 2.0 - Cookies to remember people, 
# select the order which comments are displayed, comment counts.
# 
# Copyright 2001 Aaron Chan.  All Rights Reserved.

use strict;
use CGI;
use Template;

#------------------------------------------
# EDIT HERE
# $comment_directory - Directory where you want the comments stored.
# The directory must be created.
#
# @class - Array containing alternate classes for comments.
# If you want all posts to look the same, just use one class.
# ex. my(@class) = ('class1');
# If you want more than 2 looks, just add more.
# ex. my(@class) = ('class1', 'class2', 'class3');
# $order = 0 - oldest to newest
# $order = 1 - newest to oldest
#------------------------------------------
my($order) = 1;
my($comment_directory) = '../commenti/';
my(@class) = ('class1', 'class2');
my($mailprog) = "/usr/sbin/sendmail -t";
my($recipient) = "info\@webmatter.it";
my($subject) = "::: WebMatter :::"; 

#------------------------------------------

my($cgiquery) = new CGI;

my($blog_id) = $cgiquery->param('blog_id');
if ($blog_id !~ /^\d+$/)
{
    print $cgiquery->header;
    print "Invalid Blog ID<br>\n";
    exit;
}
if ($cgiquery->param('showcount'))
{
    print $cgiquery->header;
    if (-e "$comment_directory$blog_id")
    {
	open (COMMENTFILE, "<$comment_directory$blog_id");
	my(@all_lines) = <COMMENTFILE>;
	close(COMMENTFILE);
	my($count) = scalar(@all_lines);
	print "document.write($count);";
    }
    else
    {
	print "document.write(0);";
    }	
    exit;
}

if ($cgiquery->param('add') && $cgiquery->param('name') && $cgiquery->param('comments') && (($cgiquery->param('captcha') eq 'italo') || ($cgiquery->param('captcha') eq 'Italo') || ($cgiquery->param('captcha') eq 'ITALO')))
{
    if ($cgiquery->param('remember_me'))
    {
	my($cookie_value) = $cgiquery->param('name') . "[+]" . $cgiquery->param('email') . "[+]" . $cgiquery->param('url');
	my($set_cookie) = $cgiquery->cookie(-name    => "cgicomments",
					     -value   => $cookie_value,
					     -expires => "+6M",
					     -secure  => 0);
	print $cgiquery->header(-cookie => $set_cookie);
    }
    my($comments) = $cgiquery->param('comments');
    $comments =~ s/\n/<BR>/g; # \r represents a newline
    my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    my($recorded) = sprintf("%.2d-%.2d-%.4d | Ora %d:%.2d", $mday, $mon+1, $year+1900, $hour, $min);
    open (COMMENTS, ">>$comment_directory$blog_id") or die ("Can't write to file $blog_id");
    seek (COMMENTS, 0, 0);
    print COMMENTS $cgiquery->param('name') . "[$blog_id]";
    print COMMENTS $cgiquery->param('email') . "[$blog_id]";
    print COMMENTS $cgiquery->param('url') . "[$blog_id]";
    #print COMMENTS $cgiquery->param('captcha') . "[$blog_id]"; 
    print COMMENTS $comments . "[$blog_id]";
    print COMMENTS $recorded . "\n";
    close(COMMENTS);



# Added to email comments to me
    mailme($cgiquery->param('comments')."\n\n".$cgiquery->param('name')."\n".$cgiquery->param('email')."\n".$cgiquery->param('url')."\n".$blog_id);


}
if (!$cgiquery->param('remember_me'))
{
	print $cgiquery->header;
}
my($headertemplate) = new Template("cgicommentsheader.html");
my($headerhtml) = $headertemplate->cast();
my($outputtemplate) = new Template("cgicommentsoutput.html");
open (COMMENTS, "<$comment_directory$blog_id");
my($count) = 0;
my(@outputhtml);
my($outputcount) = 0;
while (<COMMENTS>)
{
    my(@variable) = split(/\[$blog_id\]/);
    my($email, $url, $captcha);
    if ($variable[1])
    {
	$variable[1] =~ s/\./_DOT_/g;
	$variable[1] =~ s/\@/_AT_/g;
	$email = "[<a href='mailto:$variable[1]?Body=***NO SPAM*** Per inviare un messaggio a qs. indirizzo sostituire _AT_ con il simbolo di chiocciola e _DOT_ con un punto.' title='$variable[1]'>e-mail</a>]";
    }
    if (($variable[2] !~ /^http:\/\/$/) && ($variable[2]))
    {
	if ($variable[2] !~ /^http:\/\//)
	{
	    $url = "[<a href='http://$variable[2]' target='new' title='$variable[2]'>sito web</a>]";
	}
	else
	{
	    $url = "[<a href='$variable[2]' target='new' title='$variable[2]'>sito web</a>]";
	}
    }
    my(%data) = (name     => $variable[0],
		 email    => $email,
		 url      => $url,
		 comments => $variable[3],
		 recorded => $variable[4],
		 class    => $class[$count],
		 captcha  => $captcha);
    $outputhtml[$outputcount] .= $outputtemplate->cast(\%data);
    $outputcount++;
    if ($count == $#class)
    {
	$count = 0;
    }
    else
    {
	$count++;
    }
}
close(COMMENTS);
my($get_cookie) = $cgiquery->cookie("cgicomments");
my($name_value, $email_value, $url_value);
if ($get_cookie)
{
    my(@cookie_array) = split(/\[\+\]/,$get_cookie);
    $name_value = $cookie_array[0];
    $email_value = $cookie_array[1];
    $url_value = $cookie_array[2];
}
my($footertemplate) = new Template("cgicommentsfooter.html");
my(%data) = (blog_id     => $blog_id,
	     name_value  => $name_value,
	     email_value => $email_value,
	     url_value   => $url_value);
my($footerhtml) = $footertemplate->cast(\%data);

print $headerhtml;
if ($order)
{
    @outputhtml = reverse(@outputhtml);
}
for my $i (0 ..$#outputhtml)
{
    print $outputhtml[$i];
}
print $footerhtml;

####### Added this function to email comments to me ########
sub mailme
{
	my($content) = $_[0];
	my($sender) = $cgiquery->param('name');
	open(MAIL, "|$mailprog $recipient");
	print MAIL "Subject: Commento a $blog_id da $sender $subject\n\n", "$content";
}


