239 lines
6.5 KiB
Perl
Executable File
239 lines
6.5 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
###################################################
|
|
# -*- kwotes.pl -*- #
|
|
###################################################
|
|
# This code is distributed under GPL licensing #
|
|
# terms, here's a link to the license and stuff: #
|
|
# #
|
|
# http://www.gnu.org/licenses/gpl.txt #
|
|
# #
|
|
# have fun with it, i'm not a major perl monger #
|
|
# or anything, so be easy on me :) #
|
|
###################################################
|
|
|
|
# bring in the required libs
|
|
require "kwotes-lib.pl";
|
|
|
|
# bring in the config
|
|
require "kwotes.conf.pl";
|
|
|
|
# is this getting called by the "delete" cronjob?
|
|
if ($ARGV[0] eq "cleanup") {
|
|
exit cleanup();
|
|
}
|
|
|
|
# parse the form data
|
|
my %FORM = parse_form();
|
|
|
|
# some vars
|
|
my $action = $FORM{"action"};
|
|
my $main_content;
|
|
my %vars;
|
|
my $template = ($FORM{"template"}) ? $FORM{"template"} : $DEFAULT_TEMPLATE;
|
|
|
|
# populate %vars with ENV
|
|
foreach my $key (keys %ENV) {
|
|
$vars{$key} = $ENV{$key};
|
|
}
|
|
|
|
# add information that can be displayed on every page
|
|
$vars{KWOTE_COUNT} = get_kwote_count();
|
|
$vars{KWOTE_BACKUP_COUNT} = get_kwote_backup_count();
|
|
$vars{SITE_NAME} = $SITE_NAME;
|
|
$vars{TAG_LINE} = get_tagline();
|
|
$vars{TEMPLATE_DIR} = "templates/$template";
|
|
|
|
# send header
|
|
send_html_header();
|
|
|
|
############
|
|
# action: add (show add form)
|
|
if ($action eq "add") {
|
|
$vars{TITLE} = "Add Kwote";
|
|
$main_content = wrap_template($template, "content-addform.html", %vars);
|
|
|
|
############
|
|
# action: doadd (add the kwote to the db)
|
|
} elsif ($action eq "doadd") {
|
|
|
|
if ($FORM{"content"} eq "") {
|
|
$vars{TITLE} = "An Error Occured";
|
|
$vars{ERROR_MESSAGE} = "No text entered";
|
|
$main_content = wrap_template($template, "content-error.html",%vars);
|
|
|
|
} else {
|
|
|
|
# add the kwote
|
|
my $dbh = get_db_connection();
|
|
my $kid = add_kwote($dbh, $FORM{"content"}, $ENV{"REMOTE_ADDR"});
|
|
|
|
# wtf? errors? in my code? noooo.
|
|
if (!defined($kid)) {
|
|
$vars{TITLE} = "An Error Occured";
|
|
$vars{ERROR_MESSAGE} = "Couldn't add kwote";
|
|
$main_content = wrap_template($template, "content-error.html",%vars);
|
|
|
|
# all was good
|
|
} else {
|
|
$vars{TITLE} = "Kwote Added";
|
|
$vars{KWOTE_ID} = $kid;
|
|
$main_content = wrap_template($template, "content-addform-thanks.html", %vars);
|
|
|
|
}
|
|
}
|
|
|
|
##########
|
|
# action: show
|
|
} elsif ($action eq "show") {
|
|
|
|
# get the kwote
|
|
my $dbh = get_db_connection();
|
|
my $kwote = get_kwote($dbh, $FORM{"id"});
|
|
|
|
# wtf? errors? in my code? noooo.
|
|
if (!defined($kwote)) {
|
|
$vars{TITLE} = "Kwote Does Not Exist";
|
|
$vars{ERROR_MESSAGE} = "That kwote does not exist";
|
|
$main_content = wrap_template($template, "content-error.html",%vars);
|
|
|
|
# all was good
|
|
} else {
|
|
$vars{TITLE} = "Kwote \#$kwote->{'id'}";
|
|
$vars{KWOTE_ID} = $kwote->{'id'};
|
|
$vars{KWOTE_TEXT_HTML} = html_escape($kwote->{'content'});
|
|
$vars{KWOTE_TEXT_XML} = xml_escape($kwote->{'content'});
|
|
$vars{KWOTE_TEXT_PLAIN} = $kwote->{'content'};
|
|
$vars{KWOTE_RATING} = $kwote->{'rating'};
|
|
$main_content = wrap_template($template, "content-show-kwote.html", %vars);
|
|
|
|
}
|
|
|
|
##########
|
|
# action: latest
|
|
} elsif ($action eq "list") {
|
|
|
|
# what are we sorting on
|
|
my $sort = undef;
|
|
if ($FORM{"o"} eq "date") {
|
|
$sort = "submit_dt";
|
|
} elsif ($FORM{"o"} eq "rating") {
|
|
$sort = "rating";
|
|
} elsif ($FORM{"o"} eq "random") {
|
|
$sort = "RAND()";
|
|
}
|
|
|
|
# get start index
|
|
my $start_index = (defined($FORM{"s"})) ? $FORM{"s"} : 0;
|
|
|
|
# get max amount
|
|
my $max_returned = (defined($FORM{"m"})) ? $FORM{"m"} : 20;
|
|
|
|
# what is the "max records" we'll consider?
|
|
my $max_records = (defined($FORM{"mr"})) ? $FORM{"mr"} : 9999999999;
|
|
|
|
# what is the "sort order"
|
|
my $sort_order = ($FORM{"so"} eq "reverse") ? "ASC" : "DESC";
|
|
|
|
# search string?
|
|
my $search_string = $FORM{"ss"};
|
|
|
|
# rating requirements?
|
|
my $max_rating = $FORM{"maxr"};
|
|
my $min_rating = $FORM{"minr"};
|
|
|
|
# get the kwote
|
|
my $dbh = get_db_connection();
|
|
my @rows = list_kwotes(
|
|
$dbh,
|
|
$sort,
|
|
$sort_order,
|
|
$max_returned,
|
|
$start_index,
|
|
$search_string,
|
|
$min_rating,
|
|
$max_rating
|
|
);
|
|
|
|
# setup these vars
|
|
$vars{TITLE} = "Kwotes";
|
|
$vars{ORDER} = $FORM{"o"};
|
|
$vars{NEXT_INDEX} = $start_index+$max_returned;
|
|
$vars{MAX_RETURN} = $max_returned;
|
|
$vars{LAST_INDEX} = $start_index-$max_returned;
|
|
$vars{MAX_RECORDS} = $max_records;
|
|
$vars{SEARCH_STRING} = $search_string;
|
|
$vars{MAX_RATING} = $max_rating;
|
|
$vars{MIN_RATING} = $min_rating;
|
|
|
|
# get the navigation template
|
|
my $navigation_template = undef;
|
|
|
|
# forward, no back
|
|
if ($FORM{"o"} ne "random" && $start_index<=0 && @rows>=$max_returned
|
|
&& ($start_index+$max_returned)<$max_records) {
|
|
$navigation_template = "content-list-navigate-no-back.html";
|
|
|
|
# forward and back
|
|
} elsif ($FORM{"o"} ne "random" && $start_index>0 && @rows>=$max_returned
|
|
&& ($start_index+$max_returned)<$max_records ) {
|
|
$navigation_template = "content-list-navigate.html";
|
|
|
|
# back only
|
|
} elsif ($FORM{"o"} ne "random" && $start_index>0 && @rows<$max_returned) {
|
|
$navigation_template = "content-list-navigate-no-forward.html";
|
|
}
|
|
|
|
# wrap the navigation template
|
|
$main_content .= wrap_template($template, $navigation_template, %vars);
|
|
|
|
# loop through the results
|
|
if (defined(@rows)) {
|
|
for (my $i=0; $i<@rows && ($i+$start_index)<$max_records; $i++) {
|
|
my $row = $rows[$i];
|
|
$vars{KWOTE_ID} = $row->{'id'};
|
|
$vars{KWOTE_TEXT_HTML} = html_escape($row->{'content'});
|
|
$vars{KWOTE_TEXT_XML} = xml_escape($row->{'content'});
|
|
$vars{KWOTE_TEXT_PLAIN} = $row->{'content'};
|
|
$vars{KWOTE_RATING} = $row->{'rating'};
|
|
$main_content .= wrap_template($template, "content-show-kwote.html", %vars);
|
|
}
|
|
|
|
}
|
|
|
|
# wrap the navigation template
|
|
$main_content .= wrap_template($template, $navigation_template, %vars);
|
|
|
|
##########
|
|
# action: search (show the search page)
|
|
} elsif ($action eq "search") {
|
|
$vars{TITLE} = "Search";
|
|
$main_content = wrap_template($template, "content-search.html", %vars);
|
|
|
|
##########
|
|
# action: love
|
|
} elsif ($action eq "love") {
|
|
vote($ENV{"REMOTE_ADDR"}, $FORM{"kid"}, "1");
|
|
$vars{TITLE} = "Love";
|
|
$main_content = "Vote Counted";
|
|
|
|
##########
|
|
# action: hate
|
|
} elsif ($action eq "hate") {
|
|
vote($ENV{"REMOTE_ADDR"}, $FORM{"kid"}, "-1");
|
|
$vars{TITLE} = "Hate";
|
|
$main_content = "Vote Counted";
|
|
|
|
##########
|
|
# show the homepage
|
|
} else {
|
|
$vars{TITLE} = "The Better kwote Database";
|
|
$main_content = wrap_template($template, "content-default.html", %vars);
|
|
|
|
}
|
|
|
|
# finish the HTML
|
|
render_template($template, "header.html", %vars);
|
|
print STDOUT $main_content;
|
|
render_template($template, "footer.html", %vars);
|