# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # This Source Code Form is "Incompatible With Secondary Licenses", as # defined by the Mozilla Public License, v. 2.0. package Bugzilla::Report; use 5.10.1; use strict; use warnings; use parent qw(Bugzilla::Object); use Bugzilla::CGI; use Bugzilla::Constants; use Bugzilla::Error; use Bugzilla::Util; use constant DB_TABLE => 'reports'; # Do not track reports saved by users. use constant AUDIT_CREATES => 0; use constant AUDIT_UPDATES => 0; use constant AUDIT_REMOVES => 0; use constant DB_COLUMNS => qw( id user_id name query ); use constant UPDATE_COLUMNS => qw( name query ); use constant VALIDATORS => { name => \&_check_name, query => \&_check_query, }; ############## # Validators # ############## sub _check_name { my ($invocant, $name) = @_; $name = clean_text($name); $name || ThrowUserError("report_name_missing"); $name !~ /[<>&]/ || ThrowUserError("illegal_query_name"); if (length($name) > MAX_LEN_QUERY_NAME) { ThrowUserError("query_name_too_long"); } return $name; } sub _check_query { my ($invocant, $query) = @_; $query || ThrowUserError("buglist_parameters_required"); my $cgi = new Bugzilla::CGI($query); $cgi->clean_search_url; return $cgi->query_string; } ############# # Accessors # ############# sub query { return $_[0]->{'query'}; } sub set_name { $_[0]->set('name', $_[1]); } sub set_query { $_[0]->set('query', $_[1]); } ########### # Methods # ########### sub create { my $class = shift; my $param = shift; Bugzilla->login(LOGIN_REQUIRED); $param->{'user_id'} = Bugzilla->user->id; unshift @_, $param; my $self = $class->SUPER::create(@_); } sub check { my $class = shift; my $report = $class->SUPER::check(@_); my $user = Bugzilla->user; if ( grep($_->id eq $report->id, @{$user->reports})) { return $report; } else { ThrowUserError('report_access_denied'); } } 1; __END__ =head1 NAME Bugzilla::Report - Bugzilla report class. =head1 SYNOPSIS use Bugzilla::Report; my $report = new Bugzilla::Report(1); my $report = Bugzilla::Report->check({id => $id}); my $name = $report->name; my $query = $report->query; my $report = Bugzilla::Report->create({ name => $name, query => $query }); $report->set_name($new_name); $report->set_query($new_query); $report->update(); $report->remove_from_db; =head1 DESCRIPTION Report.pm represents a Report object. It is an implementation of L, and thus provides all methods that L provides. =cut =head1 B =over =item create =item query =item set_query =item set_name =back