bugzilla-4intranet/show_activity.cgi

98 lines
3.0 KiB
Perl
Executable File

#!/usr/bin/perl -wT
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# 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 the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is Netscape Communications
# Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s): Terry Weissman <terry@mozilla.org>
# Myk Melez <myk@mozilla.org>
# Gervase Markham <gerv@gerv.net>
use strict;
use lib qw(. lib);
use Bugzilla;
use Bugzilla::Error;
use Bugzilla::Bug;
use Bugzilla::Diff;
use Bugzilla::Constants;
my $cgi = Bugzilla->cgi;
my $template = Bugzilla->template;
my $vars = {};
###############################################################################
# Begin Data/Security Validation
###############################################################################
# Check whether or not the user is currently logged in.
Bugzilla->login();
# Make sure the bug ID is a positive integer representing an existing
# bug that the user is authorized to access.
my $id = $cgi->param('id');
my $bug = Bugzilla::Bug->check($id);
###############################################################################
# End Data/Security Validation
###############################################################################
# Run queries against the shadow DB. In the worst case, new changes are not
# visible immediately due to replication lag.
Bugzilla->switch_to_shadow_db;
my $operations;
($operations, $vars->{'incomplete_data'}) =
Bugzilla::Bug::GetBugActivity($bug->id);
for (my $i = 0; $i < scalar @$operations; $i++)
{
my $lines = 0;
for (my $j = 0; $j < scalar @{$operations->[$i]->{changes}}; $j++)
{
my $change = $operations->[$i]->{changes}->[$j];
my $field = Bugzilla->get_field($change->{fieldname});
if ($change->{fieldname} eq 'longdesc' || $field->{type} eq FIELD_TYPE_TEXTAREA)
{
my $diff = new Bugzilla::Diff($change->{removed}, $change->{added})->get_table;
if (!@$diff)
{
splice @{$operations->[$i]->{changes}}, $j, 1;
$j--;
}
else
{
$operations->[$i]->{changes}->[$j]->{lines} = $diff;
$lines += scalar @$diff;
}
}
else
{
$lines++;
}
}
$operations->[$i]->{total_lines} = $lines;
}
$vars->{'operations'} = $operations;
$vars->{'bug'} = $bug;
$template->process("bug/activity/show.html.tmpl", $vars)
|| ThrowTemplateError($template->error());
exit;