зеркало из https://github.com/mozilla/pjs.git
528 строки
18 KiB
Perl
Executable File
528 строки
18 KiB
Perl
Executable File
# -*- mode: cperl; c-basic-offset: 8; indent-tabs-mode: nil; -*-
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
# ***** BEGIN LICENSE BLOCK *****
|
|
# Version: MPL 1.1
|
|
#
|
|
# The contents of this file are subject to the Mozilla Public License
|
|
# Version 1.1 (the "License"); you may not use this file except in
|
|
# compliance with the License. You may obtain a copy of the License
|
|
# at http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS IS"
|
|
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
# the License for the specific language governing rights and
|
|
# limitations under the License.
|
|
#
|
|
# The Original Code is Litmus.
|
|
#
|
|
# The Initial Developer of the Original Code is
|
|
# the Mozilla Corporation.
|
|
# Portions created by the Initial Developer are Copyright (C) 2006
|
|
# the Initial Developer. All Rights Reserved.
|
|
#
|
|
# Contributor(s):
|
|
# Zach Lipton <zach@zachlipton.com>
|
|
#
|
|
# ***** END LICENSE BLOCK *****
|
|
|
|
=cut
|
|
|
|
package Litmus::TestEvent;
|
|
$VERSION = 1.00;
|
|
use strict;
|
|
|
|
use Litmus::DBI;
|
|
use Litmus::DB::TestDay;
|
|
|
|
use Date::Manip;
|
|
|
|
sub new {
|
|
my ($class, %args) = @_;
|
|
my $self = bless {}, ref($class)||$class;
|
|
$self->_init(%args);
|
|
return $self;
|
|
}
|
|
|
|
sub _init {
|
|
my ($self, %args) = @_;
|
|
|
|
if (!$args{testday_id} and
|
|
!$args{testdate} and
|
|
!($args{start_timestamp} and $args{finish_timestamp})) {
|
|
warn "Error initializing TestEvent - please supply either a testday_id, testdate or a start_timestamp/finish_timestamp pair.";
|
|
return 1;
|
|
}
|
|
|
|
$self->{_dbh} = Litmus::DBI->db_ReadOnly;
|
|
|
|
if ($args{testday_id}) {
|
|
my $testday = Litmus::DB::TestDay->retrieve($args{testday_id});
|
|
|
|
|
|
if ($testday) {
|
|
my @subgroups = Litmus::DB::Subgroup->search_ByTestDay($testday->testday_id);
|
|
$testday->{'subgroups'} = \@subgroups;
|
|
|
|
$self->{_planned_testday} = 1;
|
|
|
|
$self->{_start_timestamp} = &Date::Manip::UnixDate($testday->start_timestamp,"%q");
|
|
$self->{_finish_timestamp} = &Date::Manip::UnixDate($testday->finish_timestamp,"%q");
|
|
$self->{_description} = $testday->description;
|
|
$self->{_product_id} = $testday->product_id;
|
|
$self->{_testgroup_id} = $testday->testgroup_id;
|
|
$self->{_subgroups} = $testday->subgroups;
|
|
$self->{_build_id} = $testday->build_id;
|
|
$self->{_branch_id} = $testday->branch_id;
|
|
$self->{_locale} = $testday->locale_abbrev;
|
|
} else {
|
|
warn "Unable to lookup testday for testday_id: " . $args{testday_id};
|
|
return 1;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if ($args{testdate}) {
|
|
$self->{_start_timestamp} = &Date::Manip::UnixDate($args{testdate} . " 07:00:00", "%q");
|
|
$self->{_finish_timestamp} = &Date::Manip::UnixDate($args{testdate} . " 17:00:00", "%q");
|
|
} elsif ($args{start_timestamp} and $args{finish_timestamp}) {
|
|
$self->{_start_timestamp} = &Date::Manip::UnixDate($args{start_timestamp}, "%q");
|
|
$self->{_finish_timestamp} = &Date::Manip::UnixDate($args{finish_timestamp}, "%q");
|
|
}
|
|
|
|
$self->{_description} = "User-defined";
|
|
$self->{_product_id} = $args{product_id};
|
|
$self->{_testgroup_id} = $args{testgroup_id};
|
|
$self->{_subgroups} = $args{subgroups};
|
|
$self->{_build_id} = $args{build_id};
|
|
$self->{_branch_id} = $args{branch_id};
|
|
$self->{_locale} = $args{locale};
|
|
|
|
}
|
|
|
|
#########################################################################
|
|
sub getBreakdownByLocale {
|
|
my ($self,$include_admin) = @_;
|
|
my $locale_sql_select = "SELECT tr.locale_abbrev,count(tr.testresult_id) as num_results";
|
|
my $locale_sql_from = "FROM test_results tr";
|
|
my $locale_sql_where = "WHERE tr.submission_time>=" . $self->{_start_timestamp} . " and tr.submission_time<" . $self->{_finish_timestamp};
|
|
my $locale_sql_group_by = "GROUP BY tr.locale_abbrev";
|
|
my $locale_sql_order_by = "ORDER BY num_results DESC";
|
|
|
|
if (!$include_admin) {
|
|
$locale_sql_from .= ", users u left join user_group_map ugm on (u.user_id=ugm.user_id)";
|
|
$locale_sql_where .= " AND tr.user_id=u.user_id AND ugm.user_id is NULL";
|
|
}
|
|
|
|
if ($self->{_product_id}) {
|
|
$locale_sql_from .= ", testcases t";
|
|
$locale_sql_where .= " AND tr.testcase_id=t.testcase_id AND t.product_id=" . $self->{_product_id};
|
|
}
|
|
|
|
if ($self->{_branch_id}) {
|
|
$locale_sql_where .= " AND tr.branch_id=" . $self->{_branch_id};
|
|
}
|
|
|
|
if ($self->{_testgroup_id}) {
|
|
$locale_sql_from .= ", testcase_subgroups tsg, subgroup_testgroups sgtg";
|
|
$locale_sql_where .= " AND tr.testcase_id=tsg.testcase_id AND tsg.subgroup_id=sgtg.subgroup_id AND sgtg.testgroup_id=".$self->{_testgroup_id};
|
|
if ($self->{_subgroups} and scalar @{$self->{_subgroups}}) {
|
|
$locale_sql_where .= " AND tsg.subgroup_id IN (";
|
|
for (my $i=0; $i<=$#{$self->{_subgroups}}; $i++) {
|
|
if ($i>0) {
|
|
$locale_sql_where .= ",";
|
|
}
|
|
$locale_sql_where .= $self->{_subgroups}[$i]->{subgroup_id};
|
|
}
|
|
$locale_sql_where .= ")";
|
|
}
|
|
}
|
|
|
|
if ($self->{_build_id}) {
|
|
$locale_sql_where .= " AND tr.build_id LIKE '" . $self->{_build_id} . "%'";
|
|
}
|
|
|
|
if ($self->{_locale}) {
|
|
$locale_sql_where .= " AND tr.locale_abbrev='" . $self->{_locale} . "'";
|
|
}
|
|
|
|
my $locale_sql = "$locale_sql_select $locale_sql_from $locale_sql_where $locale_sql_group_by $locale_sql_order_by";
|
|
|
|
my $sth = $self->{_dbh}->prepare($locale_sql);
|
|
$sth->execute();
|
|
|
|
my @locales;
|
|
while (my $result = $sth->fetchrow_hashref) {
|
|
push @locales, $result;
|
|
}
|
|
$sth->finish;
|
|
|
|
return \@locales;
|
|
}
|
|
|
|
#########################################################################
|
|
sub getBreakdownByPlatform {
|
|
my ($self,$include_admin) = @_;
|
|
|
|
my $platform_sql_select = "SELECT pl.name,count(tr.testresult_id) AS num_results";
|
|
my $platform_sql_from = "FROM test_results tr, testcases t, platforms pl, opsyses o";
|
|
my $platform_sql_where = "WHERE tr.testcase_id=t.testcase_id AND tr.submission_time>=$self->{_start_timestamp} and tr.submission_time<$self->{_finish_timestamp} AND tr.opsys_id=o.opsys_id AND o.platform_id=pl.platform_id";
|
|
my $platform_sql_group_by = "GROUP BY o.platform_id";
|
|
my $platform_sql_order_by = "ORDER BY num_results DESC";
|
|
|
|
if (!$include_admin) {
|
|
$platform_sql_from .= ", users u left join user_group_map ugm on (u.user_id=ugm.user_id)";
|
|
$platform_sql_where .= " AND tr.user_id=u.user_id AND ugm.user_id is NULL";
|
|
}
|
|
|
|
if ($self->{_product_id}) {
|
|
$platform_sql_where .= " AND t.product_id=" . $self->{_product_id};
|
|
}
|
|
|
|
if ($self->{_branch_id}) {
|
|
$platform_sql_where .= " AND tr.branch_id=" . $self->{_branch_id};
|
|
}
|
|
|
|
if ($self->{_testgroup_id}) {
|
|
$platform_sql_from .= ", testcase_subgroups tsg, subgroup_testgroups sgtg";
|
|
$platform_sql_where .= " AND tr.testcase_id=tsg.testcase_id AND tsg.subgroup_id=sgtg.subgroup_id AND sgtg.testgroup_id=$self->{_testgroup_id}";
|
|
if ($self->{_subgroups} and scalar @{$self->{_subgroups}}) {
|
|
$platform_sql_where .= " AND tsg.subgroup_id IN (";
|
|
for (my $i=0; $i<=$#{$self->{_subgroups}}; $i++) {
|
|
if ($i>0) {
|
|
$platform_sql_where .= ",";
|
|
}
|
|
$platform_sql_where .= $self->{_subgroups}[$i]->{subgroup_id};
|
|
}
|
|
$platform_sql_where .= ")";
|
|
}
|
|
}
|
|
|
|
if ($self->{_build_id}) {
|
|
$platform_sql_where .= " AND tr.build_id LIKE '" . $self->{_build_id} . "%'";
|
|
}
|
|
|
|
if ($self->{_locale}) {
|
|
$platform_sql_where .= " AND tr.locale_abbrev='" . $self->{_locale} . "'";
|
|
}
|
|
|
|
my $platform_sql = "$platform_sql_select $platform_sql_from $platform_sql_where $platform_sql_group_by $platform_sql_order_by";
|
|
|
|
my $sth = $self->{_dbh}->prepare($platform_sql);
|
|
$sth->execute();
|
|
|
|
my @platforms;
|
|
while (my $result = $sth->fetchrow_hashref) {
|
|
push @platforms, $result;
|
|
}
|
|
$sth->finish;
|
|
|
|
return \@platforms;
|
|
}
|
|
|
|
#########################################################################
|
|
sub getBreakdownByResultStatus {
|
|
my ($self,$include_admin) = @_;
|
|
|
|
my $status_sql_select = "SELECT rs.name,count(tr.testresult_id) AS num_results,rs.class_name";
|
|
my $status_sql_from = "FROM test_results tr, test_result_status_lookup rs";
|
|
my $status_sql_where = "WHERE tr.submission_time>=$self->{_start_timestamp} and tr.submission_time<$self->{_finish_timestamp} AND rs.result_status_id=tr.result_status_id";
|
|
my $status_sql_group_by = "GROUP BY tr.result_status_id";
|
|
my $status_sql_order_by = "ORDER BY num_results DESC";
|
|
|
|
if (!$include_admin) {
|
|
$status_sql_from .= ", users u left join user_group_map ugm on (u.user_id=ugm.user_id)";
|
|
$status_sql_where .= " AND tr.user_id=u.user_id AND ugm.user_id is NULL";
|
|
}
|
|
|
|
if ($self->{_product_id}) {
|
|
$status_sql_from .= ", testcases t";
|
|
$status_sql_where .= " AND tr.testcase_id=t.testcase_id AND t.product_id=" . $self->{_product_id};
|
|
}
|
|
|
|
if ($self->{_branch_id}) {
|
|
$status_sql_where .= " AND tr.branch_id=" . $self->{_branch_id};
|
|
}
|
|
|
|
if ($self->{_testgroup_id}) {
|
|
$status_sql_from .= ", testcase_subgroups tsg, subgroup_testgroups sgtg";
|
|
$status_sql_where .= " AND tr.testcase_id=tsg.testcase_id AND tsg.subgroup_id=sgtg.subgroup_id AND sgtg.testgroup_id=" . $self->{_testgroup_id};
|
|
if ($self->{_subgroups} and scalar @{$self->{_subgroups}}) {
|
|
$status_sql_where .= " AND tsg.subgroup_id IN (";
|
|
for (my $i=0; $i<=$#{$self->{_subgroups}}; $i++) {
|
|
if ($i>0) {
|
|
$status_sql_where .= ",";
|
|
}
|
|
$status_sql_where .= $self->{_subgroups}[$i]->{subgroup_id};
|
|
}
|
|
$status_sql_where .= ")";
|
|
}
|
|
}
|
|
|
|
if ($self->{_build_id}) {
|
|
$status_sql_where .= " AND tr.build_id LIKE '" . $self->{_build_id} . "%'";
|
|
}
|
|
|
|
if ($self->{_locale}) {
|
|
$status_sql_where .= " AND tr.locale_abbrev='" . $self->{_locale} . "'";
|
|
}
|
|
|
|
my $status_sql = "$status_sql_select $status_sql_from $status_sql_where $status_sql_group_by $status_sql_order_by";
|
|
|
|
my $sth = $self->{_dbh}->prepare($status_sql);
|
|
$sth->execute();
|
|
|
|
my @statuses;
|
|
while (my $result = $sth->fetchrow_hashref) {
|
|
push @statuses, $result;
|
|
}
|
|
$sth->finish;
|
|
|
|
return \@statuses;
|
|
}
|
|
|
|
#########################################################################
|
|
sub getBreakdownBySubgroup {
|
|
my ($self,$include_admin) = @_;
|
|
|
|
my $subgroup_sql_select = "SELECT CONCAT(p.name,':',tg.name,':',s.name) as name,count(tr.testresult_id) as num_results,sgtg.subgroup_id";
|
|
my $subgroup_sql_from = "FROM test_results tr, testcases t, testcase_subgroups tsg, subgroups s, subgroup_testgroups sgtg, testgroups tg, products p";
|
|
my $subgroup_sql_where = "WHERE tr.submission_time>=$self->{_start_timestamp} and tr.submission_time<$self->{_finish_timestamp} AND tg.product_id=p.product_id AND tg.testgroup_id=sgtg.testgroup_id AND sgtg.subgroup_id=s.subgroup_id AND tsg.subgroup_id=s.subgroup_id AND tsg.testcase_id=t.testcase_id AND tr.testcase_id=t.testcase_id";
|
|
my $subgroup_sql_group_by = "GROUP BY tg.product_id,tg.testgroup_id,s.subgroup_id";
|
|
my $subgroup_sql_order_by = "ORDER BY num_results DESC, p.name ASC, tg.name ASC, sgtg.sort_order ASC";
|
|
|
|
if (!$include_admin) {
|
|
$subgroup_sql_from .= ", users u left join user_group_map ugm on (u.user_id=ugm.user_id)";
|
|
$subgroup_sql_where .= " AND tr.user_id=u.user_id AND ugm.user_id is NULL";
|
|
}
|
|
|
|
if ($self->{_product_id}) {
|
|
$subgroup_sql_where .= " AND t.product_id=" . $self->{_product_id};
|
|
}
|
|
|
|
if ($self->{_branch_id}) {
|
|
$subgroup_sql_where .= " AND tr.branch_id=$self->{_branch_id}";
|
|
}
|
|
|
|
if ($self->{_testgroup_id}) {
|
|
$subgroup_sql_where .= " AND tg.testgroup_id=" . $self->{_testgroup_id};
|
|
if ($self->{_subgroups} and scalar @{$self->{_subgroups}}) {
|
|
$subgroup_sql_where .= " AND tsg.subgroup_id IN (";
|
|
for (my $i=0; $i<=$#{$self->{_subgroups}}; $i++) {
|
|
if ($i>0) {
|
|
$subgroup_sql_where .= ",";
|
|
}
|
|
$subgroup_sql_where .= $self->{_subgroups}[$i]->{subgroup_id};
|
|
}
|
|
$subgroup_sql_where .= ")";
|
|
}
|
|
}
|
|
|
|
if ($self->{_build_id}) {
|
|
$subgroup_sql_where .= " AND tr.build_id LIKE '" . $self->{_build_id} . "%'";
|
|
}
|
|
|
|
if ($self->{_locale}) {
|
|
$subgroup_sql_where .= " AND tr.locale_abbrev='" . $self->{_locale} . "'";
|
|
}
|
|
|
|
my $subgroup_sql = "$subgroup_sql_select $subgroup_sql_from $subgroup_sql_where $subgroup_sql_group_by $subgroup_sql_order_by";
|
|
|
|
my @subgroups;
|
|
my $sth = $self->{_dbh}->prepare($subgroup_sql);
|
|
$sth->execute();
|
|
|
|
while (my $result = $sth->fetchrow_hashref) {
|
|
push @subgroups, $result;
|
|
}
|
|
$sth->finish;
|
|
|
|
my $subgroup_count_sql = "SELECT COUNT(t.testcase_id) FROM testcases t, testcase_subgroups tsg WHERE tsg.subgroup_id=? AND t.testcase_id=tsg.testcase_id AND t.enabled=1 AND t.community_enabled=1";
|
|
$sth = $self->{_dbh}->prepare($subgroup_count_sql);
|
|
$sth->execute();
|
|
|
|
foreach my $result (@subgroups) {
|
|
$sth->execute($result->{'subgroup_id'});
|
|
my ($testcase_count) = $sth->fetchrow_array;
|
|
$result->{'testcase_count'} = $testcase_count;
|
|
}
|
|
$sth->finish;
|
|
|
|
return \@subgroups;
|
|
}
|
|
|
|
#########################################################################
|
|
sub getBreakdownByUser {
|
|
my ($self,$include_admin) = @_;
|
|
|
|
my $user_sql_select = "SELECT u.user_id,u.email,count(tr.testresult_id) AS num_results,u.irc_nickname";
|
|
my $user_sql_from = "FROM test_results tr, testcases t, users u";
|
|
my $user_sql_where = "WHERE tr.testcase_id=t.testcase_id AND tr.submission_time>=$self->{_start_timestamp} and tr.submission_time<$self->{_finish_timestamp} AND tr.user_id=u.user_id";
|
|
my $user_sql_group_by = "GROUP BY tr.user_id";
|
|
my $user_sql_order_by = "ORDER BY num_results DESC";
|
|
|
|
if (!$include_admin) {
|
|
$user_sql_from .= " left join user_group_map ugm on (u.user_id=ugm.user_id)";
|
|
$user_sql_where .= " AND ugm.user_id is NULL";
|
|
}
|
|
|
|
if ($self->{_product_id}) {
|
|
$user_sql_where .= " AND t.product_id=" . $self->{_product_id};
|
|
}
|
|
|
|
if ($self->{_branch_id}) {
|
|
$user_sql_where .= " AND tr.branch_id=" . $self->{_branch_id};
|
|
}
|
|
|
|
if ($self->{_testgroup_id}) {
|
|
$user_sql_from .= ", testcase_subgroups tsg, subgroup_testgroups sgtg";
|
|
$user_sql_where .= " AND tr.testcase_id=tsg.testcase_id AND tsg.subgroup_id=sgtg.subgroup_id AND sgtg.testgroup_id=" . $self->{_testgroup_id};
|
|
if ($self->{_subgroups} and scalar @{$self->{_subgroups}}) {
|
|
$user_sql_where .= " AND tsg.subgroup_id IN (";
|
|
for (my $i=0; $i<=$#{$self->{_subgroups}}; $i++) {
|
|
if ($i>0) {
|
|
$user_sql_where .= ",";
|
|
}
|
|
$user_sql_where .= $self->{_subgroups}[$i]->{subgroup_id};
|
|
}
|
|
$user_sql_where .= ")";
|
|
}
|
|
}
|
|
|
|
if ($self->{_build_id}) {
|
|
$user_sql_where .= " AND tr.build_id LIKE '" . $self->{_build_id} . "%'";
|
|
}
|
|
|
|
if ($self->{_locale}) {
|
|
$user_sql_where .= " AND tr.locale_abbrev='" . $self->{_locale} . "'";
|
|
}
|
|
|
|
my $user_sql = "$user_sql_select $user_sql_from $user_sql_where $user_sql_group_by $user_sql_order_by";
|
|
|
|
my $sth = $self->{_dbh}->prepare($user_sql);
|
|
$sth->execute();
|
|
|
|
my @users;
|
|
while (my $result = $sth->fetchrow_hashref) {
|
|
push @users, $result;
|
|
}
|
|
$sth->finish;
|
|
|
|
return \@users;
|
|
}
|
|
|
|
#########################################################################
|
|
sub getBreakdownByUserAndResultStatus {
|
|
my ($self,$include_admin) = @_;
|
|
|
|
my $tester_sql_select = "SELECT u.email,rs.class_name AS result_status,count(rs.name) as num_results,u.irc_nickname";
|
|
my $tester_sql_from = "FROM test_results tr, test_result_status_lookup rs, users u";
|
|
my $tester_sql_where = "WHERE tr.submission_time>=$self->{_start_timestamp} and tr.submission_time<$self->{_finish_timestamp} AND tr.user_id=u.user_id AND rs.result_status_id=tr.result_status_id";
|
|
my $tester_sql_group_by = "GROUP BY tr.user_id,rs.name";
|
|
my $tester_sql_order_by = "ORDER BY u.irc_nickname DESC, u.email DESC";
|
|
|
|
if (!$include_admin) {
|
|
$tester_sql_from .= " left join user_group_map ugm on (u.user_id=ugm.user_id)";
|
|
$tester_sql_where .= " AND ugm.user_id is NULL";
|
|
}
|
|
|
|
if ($self->{_product_id}) {
|
|
$tester_sql_from .= ", testcases t";
|
|
$tester_sql_where .= " AND tr.testcase_id=t.testcase_id AND t.product_id=" . $self->{_product_id};
|
|
}
|
|
|
|
if ($self->{_branch_id}) {
|
|
$tester_sql_where .= " AND tr.branch_id=$self->{_branch_id}";
|
|
}
|
|
|
|
if ($self->{_testgroup_id}) {
|
|
$tester_sql_from .= ", testcase_subgroups tsg, subgroup_testgroups sgtg";
|
|
$tester_sql_where .= " AND tr.testcase_id=tsg.testcase_id AND tsg.subgroup_id=sgtg.subgroup_id AND sgtg.testgroup_id=$self->{_testgroup_id}";
|
|
if ($self->{_subgroups} and scalar @{$self->{_subgroups}}) {
|
|
$tester_sql_where .= " AND tsg.subgroup_id IN (";
|
|
for (my $i=0; $i<=$#{$self->{_subgroups}}; $i++) {
|
|
if ($i>0) {
|
|
$tester_sql_where .= ",";
|
|
}
|
|
$tester_sql_where .= $self->{_subgroups}[$i]->{subgroup_id};
|
|
}
|
|
$tester_sql_where .= ")";
|
|
}
|
|
}
|
|
|
|
if ($self->{_build_id}) {
|
|
$tester_sql_where .= " AND tr.build_id LIKE '$self->{_build_id}%'";
|
|
}
|
|
|
|
if ($self->{_locale}) {
|
|
$tester_sql_where .= " AND tr.locale_abbrev='" . $self->{_locale} . "'";
|
|
}
|
|
|
|
my $tester_sql = "$tester_sql_select $tester_sql_from $tester_sql_where $tester_sql_group_by $tester_sql_order_by";
|
|
|
|
my $sth = $self->{_dbh}->prepare($tester_sql);
|
|
$sth->execute();
|
|
|
|
my $testers;
|
|
while (my @result = $sth->fetchrow_array) {
|
|
$testers->{$result[0]}->{$result[1]} = $result[2];
|
|
$testers->{$result[0]}->{'irc_nickname'} = $result[3];
|
|
}
|
|
$sth->finish;
|
|
|
|
my @tester_result_statuses;
|
|
foreach my $key (sort keys %$testers) {
|
|
my $hash_ref;
|
|
$hash_ref->{'email'} = $key;
|
|
$hash_ref->{'irc_nickname'} = $testers->{$key}->{'irc_nickname'};
|
|
$hash_ref->{'pass'} = $testers->{$key}->{'pass'} || 0;
|
|
$hash_ref->{'fail'} = $testers->{$key}->{'fail'} || 0;
|
|
$hash_ref->{'unclear'} = $testers->{$key}->{'unclear'} || 0;
|
|
push @tester_result_statuses, $hash_ref;
|
|
}
|
|
|
|
return \@tester_result_statuses;
|
|
}
|
|
|
|
#########################################################################
|
|
sub getDescription {
|
|
my ($self) = @_;
|
|
|
|
return $self->{_description};
|
|
}
|
|
|
|
#########################################################################
|
|
sub getStartTimestamp {
|
|
my ($self, $for_display) = @_;
|
|
|
|
if ($for_display) {
|
|
return &Date::Manip::UnixDate($self->{_start_timestamp},"%Y-%m-%d %H:%M:%S");
|
|
}
|
|
|
|
return $self->{_start_timestamp};
|
|
}
|
|
|
|
#########################################################################
|
|
sub getFinishTimestamp {
|
|
my ($self, $for_display) = @_;
|
|
|
|
if ($for_display) {
|
|
return &Date::Manip::UnixDate($self->{_finish_timestamp},"%Y-%m-%d %H:%M:%S");
|
|
}
|
|
|
|
return $self->{_finish_timestamp};
|
|
}
|
|
|
|
#########################################################################
|
|
sub getProductId {
|
|
my ($self) = @_;
|
|
|
|
return $self->{_product_id};
|
|
}
|
|
|
|
1;
|
|
|
|
|
|
|