]> git.imager.perl.org - bse.git/blob - site/cgi-bin/modules/BSE/Report.pm
0.15_16 commit
[bse.git] / site / cgi-bin / modules / BSE / Report.pm
1 package BSE::Report;
2 use strict;
3
4 use base 'DevHelp::Report';
5
6 sub new {
7   my ($class, $req_or_cfg) = @_;
8
9   my ($cfg, $req);
10   if ($req_or_cfg->isa('BSE::Cfg')) {
11     $cfg = $req_or_cfg;
12   }
13   else {
14     $cfg = $req_or_cfg->cfg;
15     $req = $req_or_cfg;
16   }
17   
18   my $work = $class->SUPER::new($cfg, 'reports');
19   $req and $work->{req} = $req;
20
21   return $work;
22 }
23
24 sub list_reports {
25   my ($self) = @_;
26
27   if ($self->{req}) {
28     my %entries = $self->SUPER::list_reports;
29     my @delete;
30     for my $key (keys %entries) {
31       $self->report_accessible($key) or push @delete, $key;
32     }
33     delete @entries{@delete};
34     return %entries;
35   }
36   else {
37     return;
38   }
39 }
40
41 sub report_accessible {
42   my ($self, $report) = @_;
43
44   $self->{req} or return;
45
46   my $rights = $self->report_entry($report, 'bse_rights');
47   defined $rights or $rights = '';
48   $rights =~ tr/ //d;
49   $rights eq '' and return 1; # no controls
50   for my $set (split /\|/, $rights) {
51     grep $self->{req}->user_can($_, -1), split /[,;]/, $set
52       and return 1;
53   }
54
55   return;
56 }
57
58 1;