]> git.imager.perl.org - bse.git/blame - site/cgi-bin/modules/BSE/TB/SiteUserGroups.pm
modernize edit_prodopts.tmpl
[bse.git] / site / cgi-bin / modules / BSE / TB / SiteUserGroups.pm
CommitLineData
efcc5a30
TC
1package BSE::TB::SiteUserGroups;
2use strict;
3use base 'Squirrel::Table';
4use BSE::TB::SiteUserGroup;
5
b7cadc84 6our $VERSION = "1.002";
cb7fd78d 7
c2096d67
TC
8use constant SECT_QUERY_GROUPS => "Query Groups";
9use constant SECT_QUERY_GROUP_PREFIX => 'Query group ';
10
efcc5a30
TC
11sub rowClass { 'BSE::TB::SiteUserGroup' }
12
32696f84 13sub query_groups {
c2096d67
TC
14 my ($class, $cfg) = @_;
15
32696f84 16 my @groups;
c2096d67
TC
17 my $id = 1;
18 my $name;
19 while ($name = $cfg->entry(SECT_QUERY_GROUPS, $id)) {
20 my $group = $class->getQueryGroup($cfg, -$id);
21 $group and push @groups, $group;
3f187817 22
c2096d67
TC
23 ++$id;
24 }
25
32696f84
TC
26 return @groups;
27}
28
29sub admin_and_query_groups {
30 my ($class, $cfg) = @_;
31
32 return
33 (
34 $class->all,
35 $class->query_groups($cfg),
36 );
c2096d67
TC
37}
38
39sub getQueryGroup {
40 my ($class, $cfg, $id) = @_;
41
42 my $name = $cfg->entry(SECT_QUERY_GROUPS, -$id)
43 or return;
3f187817
TC
44 my $section = SECT_QUERY_GROUP_PREFIX . $name;
45 my $sql = $cfg->entry($section, 'sql')
c2096d67 46 or return;
3f187817
TC
47 my $sql_all = $cfg->entry($section, 'sql_all');
48
49 return bless
50 {
51 id => $id,
52 name => "*$name",
53 sql=>$sql,
54 sql_all => $sql_all,
55 }, "BSE::TB::SiteUserQueryGroup";
c5286ebe
TC
56}
57
58sub getByName {
59 my ($class, $cfg, $name) = @_;
60
61 if ($name =~ /^\*/) {
62 $name = substr($name, 1);
63
64 my %q_groups = map lc, reverse $cfg->entries(SECT_QUERY_GROUPS);
65 if ($q_groups{lc $name}) {
66 return $class->getQueryGroup($cfg, -$q_groups{lc $name})
67 or return;
68 }
69 else {
70 return;
71 }
72 }
73 else {
74 return $class->getBy(name => $name);
75 }
76}
77
dfd483db
TC
78sub getById {
79 my ($self, $id) = @_;
80
81 return $id > 0 ? $self->getByPkey($id) : $self->getQueryGroup(BSE::Cfg->single, $id);
82}
83
c5286ebe 84package BSE::TB::SiteUserQueryGroup;
32696f84 85use constant OWNER_TYPE => "G";
3f187817 86use Carp qw(confess);
32696f84
TC
87
88sub id { $_[0]{id} }
89
90sub name { $_[0]{name} }
c5286ebe
TC
91
92sub contains_user {
93 my ($self, $user) = @_;
94
95 my $id = ref $user ? $user->{id} : $user;
96
97 my $rows = BSE::DB->single->dbh->selectall_arrayref($self->{sql}, { MaxRows=>1 }, $id);
98 $rows && @$rows
99 and return 1;
100
101 return 0;
c2096d67
TC
102}
103
3f187817
TC
104sub member_ids {
105 my ($self) = @_;
106
107 if ($self->{sql_all}) {
108 my $dbh = BSE::DB->single->dbh;
109 my $values = $dbh->selectcol_arrayref($self->{sql_all});
110 $values
111 or confess "Cannot execute $self->{sql_all}: ", $dbh->errstr, "\n";
112
113 return @$values;
114 }
115 else {
b7cadc84 116 return grep $self->contains_user($_), BSE::TB::SiteUsers->all_ids;
3f187817
TC
117 }
118}
119
32696f84
TC
120sub file_owner_type {
121 return OWNER_TYPE;
122}
123
124sub files {
125 my ($self) = @_;
126
127 require BSE::TB::OwnedFiles;
128 return BSE::TB::OwnedFiles->getBy(owner_type => OWNER_TYPE,
129 owner_id => $self->id);
130}
131
132sub data_only {
133 return +{ %{$_[0]} };
134}
135
efcc5a30 1361;