First pass at adding key files
This commit is contained in:
@ -0,0 +1,96 @@
|
||||
# ==================================================================
|
||||
# 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;
|
Reference in New Issue
Block a user