AxKit-App-TABOO
view release on metacpan or search on metacpan
lib/AxKit/App/TABOO/Provider/NewsList.pm view on Meta::CPAN
use Apache::Log;
use Apache::AxKit::Exception;
use Apache::AxKit::Provider;
use AxKit;
use AxKit::App::TABOO;
use AxKit::App::TABOO::Data::Plurals::Stories;
use AxKit::App::TABOO::Data::Category;
sub init {
my $self = shift;
my $r = $self->apache_request();
AxKit::Debug(10, "[NewsList] Request object: " . $r->as_string);
AxKit::Debug(8, "[NewsList] Provider using URI " . $r->uri);
$self->{number} = $r->dir_config('TABOOListDefaultRecords');
$self->{maxrecords} = $r->dir_config('TABOOListMaxRecords');
$self->{uri} = $r->uri;
$self->{session} = AxKit::App::TABOO::session($r);
my @uri = split('/', $r->uri);
foreach my $part (@uri) {
if ($part =~ m/^[0-9]+$/) {
$self->{number} = $part;
next;
}
if ($part eq 'list') {
$self->{list} = 1;
next;
}
if ($part eq 'editor') {
$self->{editor} = 1;
next;
}
if ($part eq 'unpriv') {
$self->{unpriv} = 1;
next;
}
if ($part ne 'news') {
$self->{sectionid} = $part;
}
}
AxKit::Debug(9, "[NewsList] Data parsed in init: " . Dumper($self));
return $self;
}
sub process {
my $self = shift;
if ($self->{uri} =~ m|/news/.*/$|) {
# URIs should never end with / unless it is just /news/
throw Apache::AxKit::Exception::Retval(
return_code => 404,
-text => "URIs should not end with /");
}
if ((AxKit::App::TABOO::authlevel($self->{session}) < 4) && ($self->{editor})) {
throw Apache::AxKit::Exception::Retval(
return_code => 401,
-text => "You're not allowed to see editor-only stories without being authenticated as one.");
}
if (($self->{unpriv}) && ($self->{editor})) {
throw Apache::AxKit::Exception::Retval(
return_code => 404,
-text => "Editor and Unpriviliged are mutually exclusive.");
}
if ($self->{number} > $self->{maxrecords}) {
throw Apache::AxKit::Exception::Retval(
return_code => 403,
-text => "The server limit for number of records is " . $self->{maxrecords});
}
if ($self->{sectionid}) {
# Iff a resource doesn't exist, it means that the section doesn't
# exist, so we just check the list of sections
$self->{section} = AxKit::App::TABOO::Data::Category->new();
unless ($self->{section}->load(what => '*',
limit => {type => 'stsec',
catname => $self->{sectionid}})) {
throw Apache::AxKit::Exception::Retval(
return_code => 404,
-text => "Not found by NewsList Provider.");
}
}
# No exceptions thrown means that we go ahead here:
$self->{exists} = 1;
return 1;
}
sub exists {
my $self = shift;
if (defined($self->{exists})) {
return 1;
} else {
return 0;
}
# Thanks, Kip! :-)
}
sub key {
my $self = shift;
return $self->{uri} . "/" . AxKit::App::TABOO::loggedin($self->{session});
}
sub mtime {
my $self=shift;
return time();
}
sub get_fh {
throw Apache::AxKit::Exception::IO(
-text => "No fh for NewsList Provider");
}
sub get_strref {
my $self = shift;
my $what = 'storyname,sectionid,primcat,editorok,title,submitterid,timestamp';
unless ($self->{list}) {
$what .= ',minicontent,seccat,freesubject,image,username,linktext,lasttimestamp';
}
my %limit;
my $authlevel = AxKit::App::TABOO::authlevel($self->{session});
if (($authlevel < 4) || ($self->{unpriv})) {
$limit{'editorok'} = 1;
} elsif ($self->{editor}) {
$limit{'editorok'} = 0;
}
if ($self->{sectionid}) {
$limit{'sectionid'} = $self->{sectionid};
}
AxKit::Debug(9, "[NewsList] Limit records to: " . Dumper(%limit));
$self->{stories} = AxKit::App::TABOO::Data::Plurals::Stories->new();
$self->{stories}->load(what => $what,
limit => \%limit,
orderby => 'timestamp DESC',
entries => $self->{number});
$self->{stories}->addcatinfo;
( run in 1.117 second using v1.01-cache-2.11-cpan-39bf76dae61 )