Summary [2]
summary for this week:
1. During reading Bugzilla source code, I come across some Perl language problem. THEN, Learning some advance Perl feature, including reference, DBI, template.
2. Since my task for GSoC is to create an Extension for the purpose of collecting Statistics to show about a user in Bugzilla. for the first thing, I need to understand how Bugzilla extension works, and then how to write a Bugzilla extension. In Bugzilla, I try to understand two extensions: /extensions/example; /extension/voting.
3. Besides, I begin to try to write a “HelloWorld” extension, which first collects some Stats including #comments, #fixedBug, #SubmitedBug.
I implement hook sub page_before_template:
sub page_before_template { my ($self, $args) = @_; my $page = $args->{page_id}; my $vars = $args->{vars}; if ($page =~ m{^stats/user\.}) { _page_user($vars); } } sub _page_user { my ($vars) = @_; my $dbh = Bugzilla->dbh; my $user = Bugzilla->user; my $input = Bugzilla->input_params; my $who_id = $input->{user_id} || $user->id; my $who = Bugzilla::User->check({ id => $who_id }); # my (@sql_statements, %all_bug_ids,@all_bug_cnts, $id, $sql_state); my @types= qw( #bugs_reported #bugs_assigned #comment #voting #cc #qa #patch ); $sql_statements[0] = "SELECT bugs.bug_id FROM bugs WHERE bugs.reporter = ?"; $sql_statements[1] = "SELECT bugs.bug_id FROM bugs WHERE bugs.assigned_to = ?"; $sql_statements[2] = "SELECT DISTINCT longdescs.bug_id FROM longdescs WHERE longdescs.who = ?"; $sql_statements[3] = "SELECT votes.bug_id FROM votes WHERE votes.who = ?"; $sql_statements[4] = "SELECT cc.bug_id FROM cc WHERE cc.who = ?"; $sql_statements[5] = "SELECT bugs.bug_id FROM bugs WHERE bugs.qa_contact = ?"; $sql_statements[6] = "SELECT attachments.bug_id FROM attachments WHERE attachments.submitter_id = ? AND attachments.ispatch = 1"; for (my $index = 0; $index < @sql_statements; $index++){ my $sth = $dbh->prepare($sql_statements[$index]); $sth->execute($who->id); my @bug_ids; while(($id) = $sth->fetchrow_array()) { push (@bug_ids, $id); } $all_bug_ids{$types[$index]} = [@bug_ids]; my $cnt = @bug_ids; push (@all_bug_cnts, $cnt); $sth->finish(); } # Calculate Point for userid my $point = log($all_bug_cnts[0] + 1) + log($all_bug_cnts[1]+ 1)*2 + log($all_bug_cnts[2])/log(10) + log($all_bug_cnts[3]+ 1) + log($all_bug_cnts[4] + 1) + 3*log($all_bug_cnts[6] + 1); $vars->{'all_bugs'} = \%all_bug_ids; $vars->{'point'} = $point; $vars->{'user'} = $who; #$vars->{'types'} = ['#bugs_reported', '#bugs_assigned', '#comment', '#voting', '#cc', '#qa','#patch']; }
ps: DBI: http://www.felixgers.de/teaching/perl/perl_DBI.html