| <?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); # All on the same line to unclutter the user's desktop' |
| /******************************************************************************* |
| * Copyright (c) 2009 Eclipse Foundation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Eclipse Foundation- initial API and implementation |
| *******************************************************************************/ |
| |
| |
| /*================================================= |
| * C O M M I T T E R S |
| */ |
| /* |
| * Step 1: |
| * Find ALL the past and present committers on this project |
| * complete with their current employer's name |
| */ |
| function dump_project_committers(&$projectids) { |
| global $App; |
| $all_committers_in_db = array(); |
| $sql = " |
| SELECT DISTINCT(People.PersonID) as PID, FName, LName, Name1, Name2, |
| PeopleProjects.InactiveDate is NULL as Active |
| FROM PeopleProjects, Projects, People |
| LEFT JOIN OrganizationContacts |
| ON OrganizationContacts.PersonID = People.PersonID |
| LEFT JOIN Organizations |
| ON OrganizationContacts.OrganizationID = Organizations.OrganizationID |
| WHERE PeopleProjects.Relation in ('CM') |
| AND People.PersonID = PeopleProjects.PersonID |
| AND Projects.ProjectID = PeopleProjects.ProjectID |
| AND ( |
| Projects.ProjectID IN ( '" . implode( "','", $projectids ) . "' ) |
| OR ( |
| ParentProjectID IN ( '" . implode( "','", $projectids ) . "' ) |
| AND IsComponent = 1) |
| ) |
| ORDER BY LName, FName"; |
| $result = $App->foundation_sql( $sql ); |
| //mysql_error_check(); |
| while( $row = mysql_fetch_assoc($result) ) { |
| $row['Comment'] = ''; |
| $all_committers_in_db[ $row['PID'] ] = $row; |
| } |
| /* |
| * Step 2: |
| * Get the commits activity to figure out everyone who |
| * ever committed code to the project. |
| */ |
| $blob = file("http://dash.eclipse.org/dash/commits/web-api/commits-index.php?projectid=" . implode(',', $projectids) ); |
| $cm_counts = array(); |
| foreach( $blob as $line ) { |
| $words = split( "\t", $line ); |
| if( substr($words[0],0,1) == '#' ) // skip comments |
| continue; |
| if( $words[2] == 999999 ) // only use the 'inf' records |
| // WTB Only add if the person is actually a committer on the project. |
| if (isset($all_committers_in_db[$words[0]])) |
| $cm_counts[$words[0]] = $words[1]; |
| } |
| |
| /* |
| * Step 4: |
| * Compute three lists: committers who once committed code |
| * and committers who appear never to have committed any code |
| * and committers who have been excluded |
| */ |
| $committers_at_least_once = array(); |
| $committers_never = array(); |
| foreach( $all_committers_in_db as $key => $row ) { |
| if( isset($cm_counts[$key]) ) { |
| $committers_at_least_once[$key] = $row; |
| } else { |
| $committers_never[$key] = $row; |
| } |
| } |
| foreach( $cm_counts as $key => $row ) { |
| if( !isset($all_committers_in_db[$key] ) ) { |
| $committers_at_least_once[$key] = |
| array( 'PID' => $key, |
| 'FName' => '', // WTB Previously used the pid for FName. Feels wrong. |
| 'LName' => '', |
| 'Name1' => '', // WTB Removed '(Not a current committer)'. Seems silly. |
| 'Name2' => '', |
| 'Active' => '0'); |
| } |
| } |
| /* |
| * Step 5: |
| * Sort the lists |
| */ |
| |
| foreach($committers_at_least_once as $committer) { |
| dump_committer($committer, true); |
| } |
| |
| foreach($committers_never as $committer) { |
| dump_committer($committer, false); |
| } |
| } |
| |
| function dump_committer(&$committer, $hasCommits) { |
| $id = $committer['PID']; |
| $first = htmlentities($committer['FName'], ENT_COMPAT | ENT_XML1); |
| $last = htmlentities($committer['LName'], ENT_COMPAT | ENT_XML1); |
| $name1 = htmlentities($committer['Name1'], ENT_COMPAT | ENT_XML1); |
| $name2 = htmlentities($committer['Name2'], ENT_COMPAT | ENT_XML1); |
| $active = $committer['Active'] ? 'true' : 'false'; |
| $commits = $hasCommits ? 'true' : 'false'; |
| echo "<iplog:committer id=\"$id\" firstName=\"$first\" lastName=\"$last\" affiliation=\"$name1\" active=\"$active\" hasCommits=\"$commits\"/>\n"; |
| } |
| ?> |