- my $class = shift;
- map {
- utf8::encode($_->{description});
- $class->new($_);
- } @{C4::Context->dbh->selectall_arrayref(
- "SELECT * FROM categories ORDER BY description", { Slice => {} }
- )};
+ my ( $class ) = @_;
+ my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
+ my $dbh = C4::Context->dbh;
+ # The categories table is small enough for
+ # `SELECT *` to be harmless.
+ my $query = "SELECT categories.* FROM categories";
+ $query .= qq{
+ LEFT JOIN categories_branches ON categories_branches.categorycode = categories.categorycode
+ WHERE categories_branches.branchcode = ? OR categories_branches.branchcode IS NULL
+ } if $branch_limit;
+ $query .= " ORDER BY description";
+ return map { $class->new($_) } @{
+ $dbh->selectall_arrayref(
+ $query,
+ { Slice => {} },
+ $branch_limit ? $branch_limit : ()
+ )
+ };