97 lines
3.5 KiB
Perl
97 lines
3.5 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: Rate.pm,v 1.20 2007/12/19 06:59:12 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::Rate;
|
|
# ==================================================================
|
|
use strict;
|
|
use Links qw/:objects/;
|
|
use Links::Build;
|
|
use Links::SiteHTML;
|
|
|
|
sub handle {
|
|
# ---------------------------------------------------
|
|
# Determine what to do.
|
|
#
|
|
my $id = $IN->param('ID');
|
|
|
|
# Make sure we are allowed to rate it.
|
|
if ($CFG->{user_rate_required} and not $USER) {
|
|
print $IN->redirect(Links::redirect_login_url('rate'));
|
|
return;
|
|
}
|
|
|
|
# Now figure out what to do.
|
|
my $mtl = Links::Build::build('title', Links::language('LINKS_RATE'), "$CFG->{db_cgi_url}/rate.cgi");
|
|
if ($IN->param('rate')) {
|
|
my $results = $PLG->dispatch('rate_link', \&rate_it, {});
|
|
$results->{main_title_loop} = $mtl;
|
|
if (defined $results->{error}) {
|
|
print $IN->header();
|
|
print Links::SiteHTML::display('rate', $results);
|
|
}
|
|
else {
|
|
print $IN->header();
|
|
print Links::SiteHTML::display('rate_success', $results);
|
|
}
|
|
}
|
|
elsif (defined $id and ($id =~ /^\d+$/)) {
|
|
print $IN->header();
|
|
my $rec = $DB->table('Links')->get($id);
|
|
unless ($rec) {
|
|
print Links::SiteHTML::display('error', { error => Links::language('RATE_INVALIDID', $id), main_title_loop => $mtl });
|
|
return;
|
|
}
|
|
$rec->{detailed_url} = $CFG->{build_detail_url} . '/' . $DB->table('Links')->detailed_url($rec->{ID}) if $CFG->{build_detailed};
|
|
print Links::SiteHTML::display('rate', { %$rec, main_title_loop => $mtl });
|
|
}
|
|
else {
|
|
print $IN->redirect($IN->param('d') ? "$CFG->{db_cgi_url}/page.cgi?d=1" : $CFG->{build_root_url} . "/" . ($CFG->{build_home} || ($CFG->{build_index_include} ? $CFG->{build_index} : '')));
|
|
}
|
|
}
|
|
|
|
sub rate_it {
|
|
# --------------------------------------------------------
|
|
# Give this link a rating.
|
|
#
|
|
my $id = $IN->param('ID');
|
|
my $rating = $IN->param('rate');
|
|
|
|
# Let's get the link information.
|
|
my $links = $DB->table('Links');
|
|
my $rec = $links->get($id);
|
|
$rec or return { error => Links::language('RATE_INVALIDID', $id) };
|
|
|
|
# Make sure we have a valid rating.
|
|
unless ($rating =~ /^\d\d?$/ and $rating >= 1 and $rating <= 10) {
|
|
return { error => Links::language('RATE_INVALIDRATE', $rating), %$rec };
|
|
}
|
|
|
|
# Update the rating unless they have already voted.
|
|
my $clicktrack = $DB->table('ClickTrack');
|
|
my $rows = $clicktrack->count({ LinkID => $id, IP => $ENV{REMOTE_ADDR}, ClickType => 'Rate' });
|
|
if ($rows) {
|
|
return { error => Links::language('RATE_VOTED', $id), %$rec };
|
|
}
|
|
else {
|
|
eval {
|
|
$clicktrack->insert({ LinkID => $id, IP => $ENV{REMOTE_ADDR}, ClickType => 'Rate', Created => \'NOW()' });
|
|
|
|
$rec->{Rating} = ($rec->{Rating} * $rec->{Votes} + $rating) / ++$rec->{Votes};
|
|
$links->update({ Rating => $rec->{Rating}, Votes => $rec->{Votes} }, { ID => $rec->{ID} });
|
|
};
|
|
return $rec;
|
|
}
|
|
}
|
|
|
|
1;
|