discourse-legacysite-perl/site/slowtwitch.com/cgi-bin/articles/admin/Links/User/Review.pm
2024-06-17 21:49:12 +10:00

606 lines
26 KiB
Perl

# ==================================================================
# Gossamer Links - enhanced directory management system
#
# Website : http://gossamer-threads.com/
# Support : http://gossamer-threads.com/scripts/support/
# CVS Info : 087,071,086,086,085
# Revision : $Id: Review.pm,v 1.78 2007/11/16 07:12:57 brewt Exp $
#
# Copyright (c) 2001 Gossamer Threads Inc. All Rights Reserved.
# Redistribution in part or in whole strictly prohibited. Please
# see LICENSE file for full details.
# ==================================================================
package Links::User::Review;
# ==================================================================
use strict;
use Links qw/:objects/;
use Links::Build;
use Links::SiteHTML;
sub handle {
# ------------------------------------------------------------------
# Determine what to do.
#
my $input = $IN->get_hash;
if ($input->{add_review}) { $PLG->dispatch('review_add', \&add_review) }
elsif ($input->{edit_review}) { $PLG->dispatch('review_edit', \&edit_review) }
elsif ($input->{helpful}) { $PLG->dispatch('review_helpful', \&helpful_review) }
else { $PLG->dispatch('review_search', \&review_search_results) }
return;
}
# ==================================================================
sub review_search_results {
# ------------------------------------------------------------------
# Display a list of validated reviews for a link
#
my $id = shift;
my $mtl = Links::Build::build('title', Links::language('LINKS_REVIEW'), "$CFG->{db_cgi_url}/review.cgi");
# Get our form data and prepare some default data.
my $args = $IN->get_hash;
$id ||= $args->{ID};
$args->{username} = '\*' if $args->{username} eq '*';
# Return error if no action
unless ($args->{keyword} or $args->{ReviewID} or $id) {
if ($USER) {
$args->{username} ||= $USER->{Username};
$IN->param(username => $args->{username});
}
elsif (!$args->{username} and !$args->{helpful}) {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_INVALID_ACTION'), main_title_loop => $mtl });
return;
}
}
# Reset ReviewID to null
my $from_helpful = ($args->{helpful}) ? $args->{ReviewID} : '';
$args->{ReviewID} = '';
# Review must be validated to list
$args->{Review_Validated} = 'Yes';
$args->{nh} = (defined $args->{nh} and $args->{nh} =~ /^(\d+)$/) ? $1 : 1;
$args->{mh} = (defined $args->{mh} and $args->{mh} =~ /^(\d+)$/) ? $1 : $CFG->{reviews_per_page};
$args->{so} = (defined $args->{so} and $args->{so} =~ /^(asc|desc)$/i) ? $1 : $CFG->{review_sort_order};
($args->{sb} and ($args->{sb} =~ /^[\w\s,]+$/) or ($args->{sb} = $CFG->{review_sort_by}));
delete $args->{ma};
my $rec = { noLink => 1 };
# If we are listing reviews of a link
if ($id) {
$id and $args->{ID} = $id;
# Check if ID is valid
$rec = $DB->table('Links')->get($args->{ID});
$rec or do {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_INVALIDID', $args->{ID}), main_title_loop => $mtl });
return;
};
$rec = Links::SiteHTML::tags('link', $rec);
$args->{Review_LinkID} = $args->{ID};
$args->{ww} = 1;
}
# If we have a user to list
elsif ($args->{username}) {
$args->{Review_LinkID} = '';
$args->{Review_Owner} = $args->{username};
$args->{'Review_Owner-opt'} = '=';
}
elsif ($IN->param('ReviewID')) {
$args->{ReviewID} = $IN->param('ReviewID');
$args->{'ReviewID-opt'} = '=';
}
my $reviews = $DB->table('Reviews');
my $review_sth = $reviews->query_sth($args);
my $review_hits = $reviews->hits;
# Return if no results.
unless ($review_hits) {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_NORESULTS', $args->{ID} || $args->{username}), main_title_loop => $mtl });
return;
}
my @review_results_loop;
Links::init_date();
my $today = GT::Date::date_get(time, GT::Date::FORMAT_DATETIME);
my %review_cache;
my $last_review = 0;
while (my $review = $review_sth->fetchrow_hashref) {
$review->{Review_Count} = $reviews->count({ Review_LinkID => $review->{Review_LinkID}, Review_Validated => 'Yes' });
$review->{Review_IsNew} = (GT::Date::date_diff($today, $review->{Review_Date}) < $CFG->{review_days_old});
if ($CFG->{review_allow_modify} and $USER->{Username} eq $review->{Review_Owner}) {
if ($CFG->{review_modify_timeout}) {
my $oldfmt = GT::Date::date_get_format();
GT::Date::date_set_format(GT::Date::FORMAT_DATETIME);
my $timeout = GT::Date::date_get(time - $CFG->{review_modify_timeout} * 60);
my $date = $review->{Review_ModifyDate} =~ /^0000-00-00 00:00:00/ ? $review->{Review_Date} : $review->{Review_ModifyDate};
if (GT::Date::date_is_greater($date, $timeout)) {
$review->{Review_CanModify} = 1;
}
GT::Date::date_set_format($oldfmt);
}
else {
$review->{Review_CanModify} = 1;
}
}
if ($review->{Review_ModifyDate} ne $review->{Review_Date} and $review->{Review_ModifyDate} !~ /^0000-00-00 00:00:00/) {
$review->{Review_ModifyDate} = GT::Date::date_transform($review->{Review_ModifyDate}, GT::Date::FORMAT_DATETIME, $CFG->{date_review_format});
}
else {
delete $review->{Review_ModifyDate};
}
$review->{Review_Date} = GT::Date::date_transform($review->{Review_Date}, GT::Date::FORMAT_DATETIME, $CFG->{date_review_format});
$review->{Num} = $review->{Review_WasHelpful} + $review->{Review_WasNotHelpful};
($from_helpful eq $review->{ReviewID}) and $review->{last_helpful} = 1;
$CFG->{review_convert_br_tags} and $review->{Review_Contents} = _translate_html($review->{Review_Contents});
# Add the link info to the review
if ($args->{username} or $args->{ReviewID} or $args->{keyword}) {
my $catlink = $DB->table('CatLinks', 'Category', 'Links');
unless (exists $review_cache{$review->{Review_LinkID}}) {
$review_cache{$review->{Review_LinkID}} = $catlink->get({ LinkID => $review->{Review_LinkID} });
}
if ($last_review != $review->{Review_LinkID}) {
my $names = $review_cache{$review->{Review_LinkID}};
$review->{LinkID} = $names->{ID};
$review->{cat_linked} = sub { Links::Build::build('title_linked', { name => $names->{Full_Name}, complete => 1 }) };
$review->{cat_loop} = Links::Build::build('title', $names->{Full_Name});
foreach my $key (keys %$names) {
next if ($key eq 'ID');
exists $review->{$key} or ($review->{$key} = $names->{$key});
}
}
$last_review = $review->{Review_LinkID};
}
push @review_results_loop, $review;
}
my ($toolbar, %paging);
if ($review_hits > $args->{mh}) {
my $url = $CFG->{db_cgi_url} . "/" . $IN->url;
$url =~ s/([;&?]?)nh=(\d+)/($1 and $1 eq '?') ? '?' : ''/eg;
$url =~ s/[;&]helpful=1//eg;
$toolbar = $DB->html($reviews, $args)->toolbar($args->{nh} || 1, $args->{mh} || 25, $review_hits, $url);
%paging = (
url => $url,
num_hits => $review_hits,
max_hits => $args->{mh} || 25,
current_page => $args->{nh} || 1
);
}
else {
$toolbar = '';
}
# Some statistics for review list
my ($review_stats,$review_count);
if (!defined $args->{keyword}) {
if ($args->{username}) {
%$review_stats = map { $_ => $reviews->count({ Review_Owner => $args->{username}, Review_Rating => $_, Review_Validated => 'Yes' }) } (1 .. 5);
$review_count = $reviews->count({ Review_Owner => $args->{username}, Review_Validated => 'Yes'} );
}
else {
%$review_stats = map { $_ => $reviews->count({ Review_LinkID => $args->{ID}, Review_Rating => $_, Review_Validated => 'Yes' }) } (1 .. 5);
$review_count = $reviews->count({ Review_LinkID => $args->{ID}, Review_Validated => 'Yes'});
}
if ($review_count) {
for (1 .. 5) {
$review_stats->{'p' . $_} = $review_stats->{$_} * 150 / $review_count;
}
}
}
$review_stats ||= { noStats => 1 };
print $IN->header();
print Links::SiteHTML::display('review_search_results', {
%$review_stats,
%$rec,
show_link_info => ($args->{username} or $args->{ReviewID} or $args->{keyword}),
main_title_loop => $mtl,
Review_Count => $review_hits,
Review_Loop => \@review_results_loop,
Review_SpeedBar => $toolbar,
paging => \%paging
});
return;
}
sub add_review {
# ------------------------------------------------------------------
# Add a review (only logged in users can add reviews if required)
#
my $id = $IN->param('ID') || '';
my $mtl = Links::Build::build('title', Links::language('LINKS_REVIEW_ADD'), "$CFG->{db_cgi_url}/review.cgi");
# Check if we have a valid ID
my $db = $DB->table('Links');
my $rec = $db->get($id);
unless ($id =~ /^\d+$/ and $rec) {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_INVALIDID', $id), main_title_loop => $mtl });
return;
}
$rec = Links::SiteHTML::tags('link', $rec);
$rec->{anonymous} = !$CFG->{user_review_required};
# Only logged in users can add reviews (if required) or must redirect to the login page
if ($CFG->{user_review_required} and !$USER) {
print $IN->redirect(Links::redirect_login_url('review'));
return;
}
my ($cat_id, $cat_name) = each %{$db->get_categories($id)};
my %title = (
title_loop => Links::Build::build('title', "$cat_name/$rec->{Title}"),
title => sub { Links::Build::build('title_unlinked', "$cat_name/$rec->{Title}") },
title_linked => sub { Links::Build::build('title_linked', "$cat_name/$rec->{Title}") }
);
print $IN->header();
# If we have a review to add from a form
if ($IN->param('add_this_review')) {
my $results = $PLG->dispatch('add_this_review', \&_add_this_review, $rec);
# If we have error
if (defined $results->{error}) {
print Links::SiteHTML::display('review_add', { %$results, %$rec, %title, main_title_loop => $mtl });
}
# Return to add success page
else {
print Links::SiteHTML::display('review_add_success', { %$results, %$rec, %title, main_title_loop => $mtl });
}
}
else {
if ($USER) {
my $reviews = $DB->table('Reviews');
my $rc = $reviews->count({ Review_LinkID => $id, Review_Owner => $USER->{Username} });
# Keep pre 3.2.0 behaviour of allowing the user to edit their existing review
if ($rc == 1 and $CFG->{review_max_reviews} == 1) {
my $review = $reviews->select({ Review_LinkID => $id, Review_Owner => $USER->{Username} })->fetchrow_hashref;
my $oldfmt = GT::Date::date_get_format();
GT::Date::date_set_format(GT::Date::FORMAT_DATETIME);
my $timeout = GT::Date::date_get(time - $CFG->{review_modify_timeout} * 60);
my $date = $review->{Review_ModifyDate} =~ /^0000-00-00 00:00:00/ ? $review->{Review_Date} : $review->{Review_ModifyDate};
if (not $CFG->{review_allow_modify} or $review->{Review_Validated} eq 'No' or ($CFG->{review_modify_timeout} and GT::Date::date_is_smaller($date, $timeout))) {
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_MAX_REVIEWS', $CFG->{review_max_reviews}), main_title_loop => $mtl });
}
else {
print Links::SiteHTML::display('review_edit', {
%$rec, %title, confirm => 1,
main_title_loop => Links::Build::build('title', Links::language('LINKS_REVIEW_EDIT'), "$CFG->{db_cgi_url}/review.cgi")
});
}
GT::Date::date_set_format($oldfmt);
return;
}
elsif ($CFG->{review_max_reviews} and $rc + 1 > $CFG->{review_max_reviews}) {
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_MAX_REVIEWS', $CFG->{review_max_reviews}), main_title_loop => $mtl });
return;
}
}
# We are displaying an add review form
print Links::SiteHTML::display('review_add', { %$rec, %title, main_title_loop => $mtl });
}
}
sub _add_this_review {
# ------------------------------------------------------------------
# Add this review
#
# Get our form data and some default data.
my $rec = shift;
my $reviews = $DB->table('Reviews');
my $id = $IN->param('ID');
my $input = $IN->get_hash;
$input->{Review_LinkID} = $id;
$input->{Review_Validated} = ($CFG->{review_auto_validate} == 1 and $USER or $CFG->{review_auto_validate} == 2) ? 'Yes' : 'No';
$input->{Review_WasHelpful} = 0 ;
$input->{Review_WasNotHelpful} = 0 ;
$input->{Host} = $ENV{REMOTE_HOST} ? "$ENV{REMOTE_HOST} ($ENV{REMOTE_ADDR})" : $ENV{REMOTE_ADDR} ? $ENV{REMOTE_ADDR} : 'none';
$input->{Referer} = $ENV{HTTP_REFERER} ? $ENV{HTTP_REFERER} : 'none';
# Get the review owner
$input->{Review_Owner} = $USER ? $USER->{Username} : 'admin';
if (not $CFG->{user_review_required} and not $USER) {
$input->{Review_GuestName} or return { error => Links::language('REVIEW_GUEST_NAME_REQUIRED') };
$input->{Review_GuestEmail} or return { error => Links::language('REVIEW_GUEST_EMAIL_REQUIRED') };
}
# Make sure we have a valid rating.
my $cols = $reviews->cols;
if (exists $cols->{Review_Rating} and $cols->{Review_Rating}->{not_null} and ($input->{Review_Rating} !~ /^\d$/ or $input->{Review_Rating} < 1 or $input->{Review_Rating} > 5)) {
return { error => Links::language('REVIEW_RATING', $input->{Review_Rating}) };
}
# Set date review to today's date.
Links::init_date();
$input->{Review_Date} = GT::Date::date_get(time, GT::Date::FORMAT_DATETIME);
$input->{Review_ModifyDate} = $input->{Review_Date};
# Check that the number of reviews the user owns is under the limit.
if ($USER and $CFG->{review_max_reviews} and
$CFG->{review_max_reviews} < $reviews->count({ Review_LinkID => $id, Review_Owner => $USER->{Username} }) + 1) {
return { error => Links::language('REVIEW_MAX_REVIEWS', $CFG->{review_max_reviews}) };
}
# Change the language.
local $GT::SQL::ERRORS->{ILLEGALVAL} = Links::language('ADD_ILLEGALVAL');
local $GT::SQL::ERRORS->{UNIQUE} = Links::language('ADD_UNIQUE');
local $GT::SQL::ERRORS->{NOTNULL} = Links::language('ADD_NOTNULL');
# Add the review.
# The review will be added only if Review_email_2 is blank
my $added_id = $input->{Review_email_2} ? 1 : $reviews->add($input);
$input->{ReviewID} = $added_id;
unless ($added_id) {
my $error = "<ul><li>" . join("</li><li>", $reviews->error) . "</li></ul>";
return { error => $error };
}
# Format the date for sending email
$input->{Review_Date} = GT::Date::date_transform($input->{Review_Date}, GT::Date::FORMAT_DATETIME, $CFG->{date_review_format});
# Mail the email.
if ($CFG->{admin_email_review_add}) {
Links::send_email('review_added.eml', { %{$USER || {}}, %$input, %$rec }, { admin_email => 1 }) or die "Unable to send mail: $GT::Mail::error";
}
# Review added successfully, return to review_add_success page
$CFG->{review_convert_br_tags} and $input->{Review_Contents} = _translate_html($input->{Review_Contents});
return $input;
}
sub edit_review {
# ------------------------------------------------------------------
# Edit a review (only logged in users can edit their reviews)
#
my $id = $IN->param('ID') || '';
my $rid = $IN->param('ReviewID');
my $mtl = Links::Build::build('title', Links::language('LINKS_REVIEW_EDIT'), "$CFG->{db_cgi_url}/review.cgi");
if (!$CFG->{review_allow_modify}) {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_MODIFY_DENIED'), main_title_loop => $mtl });
return;
}
# Only logged in users can update their reviews or must redirect to the login page
if (!$USER) {
print $IN->redirect(Links::redirect_login_url('review'));
return;
}
# Check if we have a valid ID
my $db = $DB->table('Links');
my $rec = $db->get($id);
unless (($id =~ /^\d+$/) and $rec) {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_INVALIDID', $id), main_title_loop => $mtl });
return;
}
$rec = Links::SiteHTML::tags('link', $rec);
# If a ReviewID isn't passed in and they have more than one review, then just edit the first review
my $review = $DB->table('Reviews')->select({ Review_LinkID => $id, Review_Owner => $USER->{Username}, $rid ? (ReviewID => $rid) : () })->fetchrow_hashref;
if (!$review) {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_NOT_EXISTS', $id), main_title_loop => $mtl });
return;
}
elsif ($review->{Review_Validated} eq 'No') {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_ADD_WAIT', $id), main_title_loop => $mtl });
return;
}
# Has the review modify period passed?
if ($CFG->{review_modify_timeout}) {
my $oldfmt = GT::Date::date_get_format();
GT::Date::date_set_format(GT::Date::FORMAT_DATETIME);
my $timeout = GT::Date::date_get(time - $CFG->{review_modify_timeout} * 60);
my $date = $review->{Review_ModifyDate} =~ /^0000-00-00 00:00:00/ ? $review->{Review_Date} : $review->{Review_ModifyDate};
my $smaller = GT::Date::date_is_smaller($date, $timeout);
GT::Date::date_set_format($oldfmt);
if ($smaller) {
print $IN->header();
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_MODIFY_TIMEOUT', $CFG->{review_modify_timeout}), main_title_loop => $mtl });
return;
}
}
my ($cat_id, $cat_name) = each %{$db->get_categories($id)};
my %title = (
title_loop => Links::Build::build('title', "$cat_name/$rec->{Title}"),
title => sub { Links::Build::build('title_unlinked', "$cat_name/$rec->{Title}") },
title_linked => sub { Links::Build::build('title_linked', "$cat_name/$rec->{Title}") }
);
# If we have a review to update from a form
if ($IN->param('update_this_review')) {
my $results = $PLG->dispatch('update_this_review', \&_update_this_review, $rec);
# If we have error
if (defined $results->{error}) {
print $IN->header();
print Links::SiteHTML::display('review_edit', { %$results, %$rec, %title, main_title_loop => $mtl });
}
# Return to edit success page
else {
print $IN->header();
print Links::SiteHTML::display('review_edit_success', { %$results, %$rec, %title, main_title_loop => $mtl });
}
}
# We are displaying an edit review form
elsif ($IN->param('confirmed')) {
print $IN->header();
print Links::SiteHTML::display('review_edit', { %$rec, %$review, %title, main_title_loop => $mtl });
}
# Else invalid action
else {
return review_search_results();
}
}
sub _update_this_review {
# ------------------------------------------------------------------
# Edit this review
#
# Get our link record.
my $rec = shift;
# Get our form data and some default data.
my $input = $IN->get_hash;
my $reviews = $DB->table('Reviews');
my $id = $IN->param('ID');
$input->{Review_LinkID} = $id;
$input->{Review_Validated} = ($CFG->{review_auto_validate} == 1 and $USER or $CFG->{review_auto_validate} == 2) ? 'Yes' : 'No';
$input->{Review_WasHelpful} = 0 ;
$input->{Review_WasNotHelpful} = 0 ;
$input->{Host} = $ENV{REMOTE_HOST} ? "$ENV{REMOTE_HOST} ($ENV{REMOTE_ADDR})" : $ENV{REMOTE_ADDR} ? $ENV{REMOTE_ADDR} : 'none';
$input->{Referer} = $ENV{HTTP_REFERER} ? $ENV{HTTP_REFERER} : 'none';
# Get the review owner
$input->{Review_Owner} = $USER->{Username};
# Check if this review is valid for this user
my $rows = $reviews->get({ Review_LinkID => $id, Review_Owner => $USER->{Username}, Review_Validated => 'Yes' });
return { error => Links::language('REVIEW_INVALID_UPDATE') } unless $rows;
# Make sure we have a valid rating.
my $cols = $reviews->cols;
if (exists $cols->{Review_Rating} and $cols->{Review_Rating}->{not_null} and ($input->{Review_Rating} !~ /^\d$/ or $input->{Review_Rating} < 1 or $input->{Review_Rating} > 5)) {
return { error => Links::language('REVIEW_RATING', $input->{Review_Rating}) };
}
# Has the review modify period passed?
if ($CFG->{review_modify_timeout}) {
my $oldfmt = GT::Date::date_get_format();
GT::Date::date_set_format(GT::Date::FORMAT_DATETIME);
my $timeout = GT::Date::date_get(time - $CFG->{review_modify_timeout} * 60);
my $date = $rows->{Review_ModifyDate} =~ /^0000-00-00 00:00:00/ ? $rows->{Review_Date} : $rows->{Review_ModifyDate};
my $smaller = GT::Date::date_is_smaller($date, $timeout);
GT::Date::date_set_format($oldfmt);
if ($smaller) {
return { error => Links::language('REVIEW_MODIFY_TIMEOUT', $CFG->{review_modify_timeout}) };
}
}
# Set date review to today's date.
Links::init_date();
delete $input->{Review_Date};
$input->{Review_ModifyDate} = GT::Date::date_get(time, GT::Date::FORMAT_DATETIME);
# Change the language.
local $GT::SQL::ERRORS->{ILLEGALVAL} = Links::language('ADD_ILLEGALVAL');
local $GT::SQL::ERRORS->{UNIQUE} = Links::language('ADD_UNIQUE');
local $GT::SQL::ERRORS->{NOTNULL} = Links::language('ADD_NOTNULL');
# Update the record.
$reviews->modify($input, { ReviewID => $input->{ReviewID} }) or return { error => $GT::SQL::error };
# Delete the review track from this ReviewID
$DB->table('ClickTrack')->delete({ ReviewID => $input->{ReviewID}, ClickType => 'Review' }) or return { error => $GT::SQL::error };
# Format the date for sending email
$input->{Review_Date} = GT::Date::date_transform($input->{Review_ModifyDate}, GT::Date::FORMAT_DATETIME, $CFG->{date_review_format});
# Mail the email.
if ($CFG->{admin_email_review_mod}) {
my %tags;
foreach my $key (keys %$rows) {
$tags{"Original_$key"} = $rows->{$key};
}
foreach my $key (keys %$input) {
$tags{"New_$key"} = $input->{$key};
}
Links::send_email('review_modified.eml', { %$USER, %tags, %$rec }, { admin_email => 1 }) or die "Unable to send mail: $GT::Mail::error";
}
# Review added successfully, return to review_add_success page
$CFG->{review_convert_br_tags} and $input->{Review_Contents} = _translate_html($input->{Review_Contents});
return $input;
}
sub helpful_review {
# ------------------------------------------------------------------
# Review was helpful or not
#
my $reviewID = $IN->param('ReviewID');
my $mtl = Links::Build::build('title', Links::language('LINKS_REVIEW'), "$CFG->{db_cgi_url}/review.cgi");
# Get our Reviews db object
my $db = $DB->table('Reviews');
my $rec = $db->get($reviewID);
if (!$rec) {
print $IN->header;
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_INVALIDID', $rec->{Review_Subject}), main_title_loop => $mtl });
return;
}
# Update the rating unless they have already voted.
my $click_db = $DB->table('ClickTrack');
my $rows = $click_db->count({ ReviewID => $rec->{ReviewID}, IP => $ENV{REMOTE_ADDR}, ClickType => 'Review' });
if ($rows) {
print $IN->header;
print Links::SiteHTML::display('error', { error => Links::language('REVIEW_VOTED', $rec->{Review_Subject}), main_title_loop => $mtl });
return;
}
else {
eval {
$click_db->insert({ LinkID => $rec->{Review_LinkID}, ReviewID => $rec->{ReviewID}, IP => $ENV{REMOTE_ADDR}, ClickType => 'Review', Created => \"NOW()" });
# Update the Timestmp for the link so that the detailed page gets rebuilt with build changed
$DB->table('Links')->update({ Timestmp => \'NOW()' }, { ID => $rec->{Review_LinkID} });
};
}
# Change the language.
local $GT::SQL::ERRORS->{ILLEGALVAL} = Links::language('ADD_ILLEGALVAL');
local $GT::SQL::ERRORS->{UNIQUE} = Links::language('ADD_UNIQUE');
local $GT::SQL::ERRORS->{NOTNULL} = Links::language('ADD_NOTNULL');
# If this review was helpful
if ($IN->param('yes')) {
if (!$db->update({ Review_WasHelpful => $rec->{Review_WasHelpful} + 1 }, { ReviewID => $reviewID })) {
print $IN->header;
print Links::SiteHTML::display('error', { error => $db->error, main_title_loop => $mtl });
return;
}
}
else {
if (!$db->update({ Review_WasNotHelpful => $rec->{Review_WasNotHelpful} + 1 }, { ReviewID => $reviewID })) {
print $IN->header;
print Links::SiteHTML::display('error', { error => $db->error, main_title_loop => $mtl });
return;
}
}
return review_search_results();
}
sub _translate_html {
# -------------------------------------------------------------------
# Translate contents to html format
#
my $html = shift;
$html = GT::CGI::html_escape($html);
$html =~ s,\r?\n,<br />,g;
return $html;
}
1;