]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 300501: Move GetBugActivity() into Bug.pm - Patch by Frédéric Buclin <LpSolit...
authorlpsolit%gmail.com <>
Thu, 14 Jul 2005 07:02:16 +0000 (07:02 +0000)
committerlpsolit%gmail.com <>
Thu, 14 Jul 2005 07:02:16 +0000 (07:02 +0000)
Bugzilla/Bug.pm
CGI.pl
process_bug.cgi
show_activity.cgi

index fae0decc02dfe7f825b2b702d24f0ddc575a48b2..32030a7c2c95fd092d4fc187d78d239280b26e9b 100755 (executable)
@@ -805,6 +805,119 @@ sub GetComments {
     return \@comments;
 }
 
+# Get the activity of a bug, starting from $starttime (if given).
+# This routine assumes ValidateBugID has been previously called.
+sub GetBugActivity {
+    my ($id, $starttime) = @_;
+    my $dbh = Bugzilla->dbh;
+
+    # Arguments passed to the SQL query.
+    my @args = ($id);
+
+    # Only consider changes since $starttime, if given.
+    my $datepart = "";
+    if (defined $starttime) {
+        trick_taint($starttime);
+        push (@args, $starttime);
+        $datepart = "AND bugs_activity.bug_when > ?";
+    }
+
+    # Only includes attachments the user is allowed to see.
+    my $suppjoins = "";
+    my $suppwhere = "";
+    if (Param("insidergroup") && !UserInGroup(Param('insidergroup'))) {
+        $suppjoins = "LEFT JOIN attachments 
+                   ON attachments.attach_id = bugs_activity.attach_id";
+        $suppwhere = "AND COALESCE(attachments.isprivate, 0) = 0";
+    }
+
+    my $query = "
+        SELECT COALESCE(fielddefs.description, " 
+               # This is a hack - PostgreSQL requires both COALESCE
+               # arguments to be of the same type, and this is the only
+               # way supported by both MySQL 3 and PostgreSQL to convert
+               # an integer to a string. MySQL 4 supports CAST.
+               . $dbh->sql_string_concat('bugs_activity.fieldid', q{''}) .
+               "), fielddefs.name, bugs_activity.attach_id, " .
+        $dbh->sql_date_format('bugs_activity.bug_when', '%Y.%m.%d %H:%i:%s') .
+            ", bugs_activity.removed, bugs_activity.added, profiles.login_name
+          FROM bugs_activity
+               $suppjoins
+     LEFT JOIN fielddefs
+            ON bugs_activity.fieldid = fielddefs.fieldid
+    INNER JOIN profiles
+            ON profiles.userid = bugs_activity.who
+         WHERE bugs_activity.bug_id = ?
+               $datepart
+               $suppwhere
+      ORDER BY bugs_activity.bug_when";
+
+    my $list = $dbh->selectall_arrayref($query, undef, @args);
+
+    my @operations;
+    my $operation = {};
+    my $changes = [];
+    my $incomplete_data = 0;
+
+    foreach my $entry (@$list) {
+        my ($field, $fieldname, $attachid, $when, $removed, $added, $who) = @$entry;
+        my %change;
+        my $activity_visible = 1;
+
+        # check if the user should see this field's activity
+        if ($fieldname eq 'remaining_time'
+            || $fieldname eq 'estimated_time'
+            || $fieldname eq 'work_time'
+            || $fieldname eq 'deadline')
+        {
+            $activity_visible = UserInGroup(Param('timetrackinggroup')) ? 1 : 0;
+        } else {
+            $activity_visible = 1;
+        }
+
+        if ($activity_visible) {
+            # This gets replaced with a hyperlink in the template.
+            $field =~ s/^Attachment// if $attachid;
+
+            # Check for the results of an old Bugzilla data corruption bug
+            $incomplete_data = 1 if ($added =~ /^\?/ || $removed =~ /^\?/);
+
+            # An operation, done by 'who' at time 'when', has a number of
+            # 'changes' associated with it.
+            # If this is the start of a new operation, store the data from the
+            # previous one, and set up the new one.
+            if ($operation->{'who'}
+                && ($who ne $operation->{'who'}
+                    || $when ne $operation->{'when'}))
+            {
+                $operation->{'changes'} = $changes;
+                push (@operations, $operation);
+
+                # Create new empty anonymous data structures.
+                $operation = {};
+                $changes = [];
+            }
+
+            $operation->{'who'} = $who;
+            $operation->{'when'} = $when;
+
+            $change{'field'} = $field;
+            $change{'fieldname'} = $fieldname;
+            $change{'attachid'} = $attachid;
+            $change{'removed'} = $removed;
+            $change{'added'} = $added;
+            push (@$changes, \%change);
+        }
+    }
+
+    if ($operation->{'who'}) {
+        $operation->{'changes'} = $changes;
+        push (@operations, $operation);
+    }
+
+    return(\@operations, $incomplete_data);
+}
+
 # CountOpenDependencies counts the number of open dependent bugs for a
 # list of bugs and returns a list of bug_id's and their dependency count
 # It takes one parameter:
diff --git a/CGI.pl b/CGI.pl
index 27e9fab2651effaca780d762d6ad05fb9dcbefb9..73df776954dbd81d1da3afed0ad3641c373e452a 100644 (file)
--- a/CGI.pl
+++ b/CGI.pl
@@ -232,115 +232,6 @@ sub LogActivityEntry {
     }
 }
 
-sub GetBugActivity {
-    my ($id, $starttime) = (@_);
-    my $datepart = "";
-    my $dbh = Bugzilla->dbh;
-
-    die "Invalid id: $id" unless $id=~/^\s*\d+\s*$/;
-
-    if (defined $starttime) {
-        $datepart = "AND bugs_activity.bug_when > " . SqlQuote($starttime);
-    }
-    my $suppjoins = "";
-    my $suppwhere = "";
-    if (Param("insidergroup") && !UserInGroup(Param('insidergroup'))) {
-        $suppjoins = "LEFT JOIN attachments 
-                   ON attachments.attach_id = bugs_activity.attach_id";
-        $suppwhere = "AND COALESCE(attachments.isprivate, 0) = 0";
-    }
-    my $query = "
-        SELECT COALESCE(fielddefs.description, " 
-               # This is a hack - PostgreSQL requires both COALESCE
-               # arguments to be of the same type, and this is the only
-               # way supported by both MySQL 3 and PostgreSQL to convert
-               # an integer to a string. MySQL 4 supports CAST.
-               . $dbh->sql_string_concat('bugs_activity.fieldid', q{''}) .
-               "), fielddefs.name, bugs_activity.attach_id, " .
-        $dbh->sql_date_format('bugs_activity.bug_when', '%Y.%m.%d %H:%i:%s') .
-            ", bugs_activity.removed, bugs_activity.added, profiles.login_name
-          FROM bugs_activity
-               $suppjoins
-     LEFT JOIN fielddefs
-            ON bugs_activity.fieldid = fielddefs.fieldid
-    INNER JOIN profiles
-            ON profiles.userid = bugs_activity.who
-         WHERE bugs_activity.bug_id = $id
-               $datepart
-               $suppwhere
-      ORDER BY bugs_activity.bug_when";
-
-    SendSQL($query);
-    
-    my @operations;
-    my $operation = {};
-    my $changes = [];
-    my $incomplete_data = 0;
-    
-    while (my ($field, $fieldname, $attachid, $when, $removed, $added, $who) 
-                                                               = FetchSQLData())
-    {
-        my %change;
-        my $activity_visible = 1;
-        
-        # check if the user should see this field's activity
-        if ($fieldname eq 'remaining_time' ||
-            $fieldname eq 'estimated_time' ||
-            $fieldname eq 'work_time' ||
-            $fieldname eq 'deadline') {
-
-            if (!UserInGroup(Param('timetrackinggroup'))) {
-                $activity_visible = 0;
-            } else {
-                $activity_visible = 1;
-            }
-        } else {
-            $activity_visible = 1;
-        }
-                
-        if ($activity_visible) {
-            # This gets replaced with a hyperlink in the template.
-            $field =~ s/^Attachment// if $attachid;
-
-            # Check for the results of an old Bugzilla data corruption bug
-            $incomplete_data = 1 if ($added =~ /^\?/ || $removed =~ /^\?/);
-        
-            # An operation, done by 'who' at time 'when', has a number of
-            # 'changes' associated with it.
-            # If this is the start of a new operation, store the data from the
-            # previous one, and set up the new one.
-            if ($operation->{'who'} 
-                && ($who ne $operation->{'who'} 
-                    || $when ne $operation->{'when'})) 
-            {
-                $operation->{'changes'} = $changes;
-                push (@operations, $operation);
-            
-                # Create new empty anonymous data structures.
-                $operation = {};
-                $changes = [];
-            }  
-            
-            $operation->{'who'} = $who;
-            $operation->{'when'} = $when;            
-        
-            $change{'field'} = $field;
-            $change{'fieldname'} = $fieldname;
-            $change{'attachid'} = $attachid;
-            $change{'removed'} = $removed;
-            $change{'added'} = $added;
-            push (@$changes, \%change);
-        }   
-    }
-    
-    if ($operation->{'who'}) {
-        $operation->{'changes'} = $changes;
-        push (@operations, $operation);
-    }
-    
-    return(\@operations, $incomplete_data);
-}
-
 ############# Live code below here (that is, not subroutine defs) #############
 
 use Bugzilla;
index 58e52f83c5e1e0744db6d8581f909235d89c685b..10dc47d62f152c4ef463542d26c0fdd137566713 100755 (executable)
@@ -1288,8 +1288,8 @@ foreach my $id (@idlist) {
     }   
     if (defined $cgi->param('delta_ts') && $cgi->param('delta_ts') ne $delta_ts)
     {
-        ($vars->{'operations'}) = GetBugActivity($cgi->param('id'),
-                                                 $cgi->param('delta_ts'));
+        ($vars->{'operations'}) = Bugzilla::Bug::GetBugActivity($cgi->param('id'),
+                                                                $cgi->param('delta_ts'));
 
         $vars->{'start_at'} = $cgi->param('longdesclength');
 
index 5ab4e366e69c87ab12aea251cc7d12ebf7c2f4a2..eacaeba372b366d6a47e65498a1a46fe6270af23 100755 (executable)
@@ -28,6 +28,9 @@ use lib qw(.);
 use vars qw ($template $vars);
 
 require "CGI.pl";
+
+use Bugzilla::Bug;
+
 my $cgi = Bugzilla->cgi;
 
 ###############################################################################
@@ -47,7 +50,7 @@ ValidateBugID($bug_id);
 ###############################################################################
 
 ($vars->{'operations'}, $vars->{'incomplete_data'}) = 
-                                                 GetBugActivity($bug_id);
+    Bugzilla::Bug::GetBugActivity($bug_id);
 
 $vars->{'bug_id'} = $bug_id;