| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2008, 2011 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: | |
| * Bjorn Freeman-Benson (Eclipse Foundation) - initial API and implementation | |
| * Wayne Beaton (Eclipse Foundation) - Bug 344064, 232607, 313218, 316769, | |
| * 343596, 244065, 344169, 327594 | |
| *******************************************************************************/ | |
| //ini_set("memory_limit","128M"); | |
| $serverRoot = dirname(__FILE__) . '/..'; | |
| require_once("$serverRoot/eclipse.org-common/system/app.class.php"); | |
| require_once("$serverRoot/eclipse.org-common/system/nav.class.php"); | |
| require_once("$serverRoot/eclipse.org-common/system/menu.class.php"); | |
| $App = new App(); | |
| $Nav = new Nav(); | |
| $Menu = new Menu(); | |
| include($App->getProjectCommon()); | |
| require_once("$serverRoot/projects/classes/Project.class.php"); | |
| require_once("$serverRoot/projects/classes/Committer.class.php"); | |
| require_once("$serverRoot/projects/classes/common.php"); | |
| require_once("$serverRoot/projects/classes/debug.php"); | |
| /** | |
| * Iterate through the list of project ids provided and | |
| * keep only those ids that map to actual existing projects. | |
| */ | |
| function getProjectIdsFromRequest() { | |
| if (!$params = split(',', getRawProjectIdsFromRequest())) return null; | |
| $ids = array(); | |
| foreach($params as $id) { | |
| if (isValidProjectId($id)) $ids[] = $id; | |
| } | |
| return $ids; | |
| } | |
| /** | |
| * The ids of the projects that we're going to work with can | |
| * be specified in either the 'id' or 'projectid' parameters. | |
| * Regardless of which parameter is used, we expect a | |
| * comma-separated list of project ids. | |
| */ | |
| function getRawProjectIdsFromRequest() { | |
| if (isset($_REQUEST['id'])) return $_REQUEST['id']; | |
| if (isset($_REQUEST['projectid'])) return $_REQUEST['projectid']; | |
| return array(); | |
| } | |
| /* | |
| * If the either the 'id' or 'projectid' parameter is not provided, or contains | |
| * invalid data, redirect to the selector page. | |
| */ | |
| $projectids = getProjectIdsFromRequest(); | |
| if (!$projectids) { | |
| header('Location: /projects/ip_log_selector.php'); | |
| exit(); | |
| } | |
| /* error_reporting(E_ALL); */ | |
| /* 221934 - this page to remain on eclipse.org */ | |
| header("Cache-control: no-cache"); | |
| header("Content-Type: text/html; charset=ISO-8859-15"); | |
| require_once("common/shared_functions.php"); | |
| $theme = ''; | |
| $pageTitle = "IP Log for "; | |
| $pageKeywords = ''; | |
| $pageAuthor = ''; | |
| # Initiate session | |
| $Session = $App->useSession("optional"); | |
| $Friend = $Session->getFriend(); | |
| $Nav->setLinkList(array()); // empty Nav | |
| if( $Session->getBugzillaID() == 0 ) { | |
| $Nav->addCustomNav("login", "http://dev.eclipse.org/site_login/", "", 1); | |
| } else { | |
| $Nav->addCustomNav("welcome<br>" . $Friend->getFirstName() . ' ' . $Friend->getLastName(), | |
| "http://dev.eclipse.org/site_login/", "", 1); | |
| } | |
| $pageTitle .= $projectids[0]; | |
| require_once("common/ip_log_common.php"); | |
| $fresult = get_ip_log_data_structures( $projectids ); | |
| $errors = $fresult[0]; | |
| $activecqs = $fresult[1]; | |
| $unusedcqs = $fresult[2]; | |
| $pendingcqs = $fresult[3]; | |
| $prereqcqs = $fresult[4]; | |
| $committers_at_least_once = $fresult[5]; | |
| $committers_never = $fresult[6]; | |
| $committers_excluded = $fresult[7]; | |
| // $contributors = $fresult[8]; | |
| // $contributors_excluded = $fresult[9]; | |
| /* | |
| * Determine if an edit form should be shown: | |
| * only one project is selected | |
| * and person is logged in | |
| * and person is a committer on that project | |
| */ | |
| check_if_show_edit_form( $projectids, $Session, $Friend, true, | |
| $show_edit_form, $reason_no_edit_form, $logged_in_email_address ); | |
| /*MOREMORE temporarily given Bjorn write access to all IP logs | |
| if( $Friend->getFriendID() == 66 ) { | |
| $show_edit_form = 1; | |
| $logged_in_email_address = 'bjorn.freeman-benson@eclipse.org'; | |
| } | |
| MOREMORE*/ | |
| $generate_final = 0; | |
| if( isset($_GET['generatefinal']) && $_GET['generatefinal'] ) { | |
| $show_edit_form = 0; | |
| $generate_final = 1; | |
| $reason_no_edit_form = ''; | |
| } | |
| ob_start(); | |
| /*================================================= | |
| * S A V E A N D U P D A T E D B | |
| */ | |
| if( $show_edit_form && isset($_POST['submit']) ) { | |
| $removes = array(); | |
| $inserts = array(); | |
| /*----------- COMMITTERS --------------*/ | |
| $all = array_merge( | |
| array_keys($committers_at_least_once), | |
| array_keys($committers_never), | |
| array_keys($committers_excluded) ); | |
| $removes[] = "ItemType = 'COMMITTR' AND Action = 'COMENT' AND ProjectID = '" . $projectids[0] . "'"; | |
| foreach( $all as $key ) { | |
| if( isset($_POST['CM_' . $key . '_REMOVE']) ) { | |
| $removes[] = "ItemType = 'COMMITTR' AND ItemID = '$key' AND ProjectID = '" . $projectids[0] . "'"; | |
| $inserts[] = "'COMMITTR', '$key', 'REMOVE', NULL, NULL, '" . $projectids[0] . "'"; | |
| } else if( isset($_POST['CM_' . $key . '_ACTIVE']) ) { | |
| $removes[] = "ItemType = 'COMMITTR' AND ItemID = '$key' AND ProjectID = '" . $projectids[0] . "'"; | |
| $inserts[] = "'COMMITTR', '$key', 'ACTIVE', NULL, NULL, '" . $projectids[0] . "'"; | |
| } else if( isset($_POST['CM_' . $key . '_DELIST']) ) { | |
| $removes[] = "ItemType = 'COMMITTR' AND ItemID = '$key' AND ProjectID = '" . $projectids[0] . "'"; | |
| } else if( isset($_POST['CM_' . $key . '_COMENT']) ) { | |
| if( $_POST['CM_' . $key . '_COMENT'] ) { | |
| $inserts[] = "'COMMITTR', '$key', 'COMENT', NULL, '" . | |
| addslashes($_POST['CM_' . $key . '_COMENT']) | |
| . "', '" . $projectids[0] . "'"; | |
| } | |
| } | |
| } | |
| // /*----------- CONTRIBUTIONS --------------*/ | |
| // foreach( $contributors as $email => $each ) { | |
| // $x = strtr( $email, '.@', '__' ); | |
| // if( isset($_POST['CN_' . $x . '_RMPERS']) ) { | |
| // /* removing a person removes all their contributions */ | |
| // foreach( $each['bugs'] as $bug ) { | |
| // $inserts[] = "'CONTRIB', '" . $bug['attach_id'] . "', 'RM" . $bug['type'] . "', NULL, NULL, '" . $projectids[0] . "'"; | |
| // } | |
| // } else { | |
| // foreach( $each['bugs'] as $bug ) { | |
| // if( isset($_POST['CN_' . $bug['attach_id'] . '_' . $bug['type'] . '_RM']) ) { | |
| // $inserts[] = "'CONTRIB', '" . $bug['attach_id'] . "', 'RM" . $bug['type'] . "', NULL, NULL, '" . $projectids[0] . "'"; | |
| // } | |
| // } | |
| // } | |
| // } | |
| // foreach( $contributors_excluded as $email => $each ) { | |
| // foreach( $each['bugs'] as $bug ) { | |
| // if( isset($_POST['CN_' . $bug['attach_id'] . '_' . $bug['type'] . '_DL']) ) { | |
| // $removes[] = "ItemType = 'CONTRIB' | |
| // AND ItemID = '" . $bug['attach_id'] . "' | |
| // AND Action = 'RM" . $bug['type'] . "' | |
| // AND ProjectID = '" . $projectids[0] . "'"; | |
| // } | |
| // } | |
| // } | |
| /*----------- S Q L --------------*/ | |
| if( count($removes) > 0 ) { | |
| $sql = "DELETE FROM `IPLogCorrections` WHERE (" | |
| . implode( ") | |
| OR (", $removes ) | |
| . ")"; | |
| /* echo "<pre>$sql</pre>"; */ | |
| $App->foundation_sql( $sql ); | |
| } | |
| if( count($inserts) > 0 ) { | |
| $sql = "INSERT INTO `IPLogCorrections` ( ItemType, ItemID, Action, Value, Comment, ProjectID ) | |
| VALUES (" . implode( "), | |
| (", $inserts ) . ")"; | |
| /* echo "<pre>$sql</pre>"; */ | |
| $App->foundation_sql( $sql ); | |
| } | |
| // header( "Location: http://www.eclipse.org/projects/ip_log_alt.php?projectid=" . implode(',',$projectids) ); | |
| // exit(); | |
| $fresult = get_ip_log_data_structures( $projectids ); | |
| $errors = $fresult[0]; | |
| $activecqs = $fresult[1]; | |
| $unusedcqs = $fresult[2]; | |
| $pendingcqs = $fresult[3]; | |
| $prereqcqs = $fresult[4]; | |
| $committers_at_least_once = $fresult[5]; | |
| $committers_never = $fresult[6]; | |
| $committers_excluded = $fresult[7]; | |
| // $contributors = $fresult[8]; | |
| // $contributors_excluded = $fresult[9]; | |
| } | |
| /*================================================= | |
| * H E A D E R | |
| */ | |
| ?> | |
| <form method="POST"> | |
| <div id="maincontent"> | |
| <div id="midcolumn"> | |
| <h1><?= $generate_final ? '' : 'Tentative ' ?>IP Log for <?php | |
| $x = array_merge( $projectids, array() ); | |
| if( count($x) > 1 ) { | |
| $y = array_pop($x); | |
| $z = array_pop($x); | |
| $x[] = "$z and $y"; | |
| } | |
| echo implode( ', ', $x ) | |
| ?></h1> | |
| <?php if( !$generate_final ) { ?> | |
| <div style="color: gray"> | |
| This tentative IP Log is generated dynamically from automatically collected project information. | |
| This information has not been vetted for accuracy by the Eclipse Foundation and may not represent | |
| the true state of the IP of this project(s). Please refer to the official approved IP Log(s) associated with | |
| the official release(s) of this project(s) for more information. | |
| </div> | |
| <?php | |
| } | |
| if ($show_edit_form && count($errors) > 0) { | |
| $App->AddExtraHtmlHeader("<style>.errorBox {margin:5px;padding:5px;border-style:solid;border-color:red}</style>"); | |
| echo "<div class=\"errorBox\">"; | |
| foreach( $errors as $errormsg ) { | |
| echo "<li>$errormsg</li>"; | |
| } | |
| echo "</div>"; | |
| } | |
| /*================================================= | |
| * C Q S | |
| */ | |
| function html_for_keywords( $row ) { | |
| return ($row['keyword_modified'] ? 'modified ' : '') . | |
| ($row['keyword_unmodified'] ? 'unmodified ' : '') . | |
| ($row['keyword_source'] ? 'source ' : '') . | |
| ($row['keyword_binary'] ? 'binary ' : '') . | |
| ($row['keyword_sourceandbinary'] ? 'source & binary' : ''); | |
| } | |
| function html_for_type($row) { | |
| switch( $row['bug_severity'] ) { | |
| case 'exempt_prereq':return "exempt pre-req"; | |
| case 'workswith': return "works with"; | |
| default: return "pre-req"; | |
| } | |
| } | |
| function html_for_status($row) { | |
| if( $row['keyword_obsolete'] ) | |
| return "obsolete: was used in the past but is not longer used"; | |
| if( $row['keyword_unused'] ) | |
| return "unused: not currently in use, but may be used in a future release"; | |
| if( $row['keyword_withdrawn'] ) | |
| return "withdrawn: never used and never will be used"; | |
| return " "; | |
| } | |
| ?> | |
| <h2>Licenses</h2> | |
| <?php | |
| if( $show_edit_form ) { | |
| ?><div style="margin-bottom: 10px"> | |
| Send email to | |
| <a href="mailto:emo-ip-team@eclipse.org">the Eclipse Legal team</a> to request changes | |
| to the licenses. | |
| </div> | |
| <?php | |
| } | |
| ?> | |
| <?php | |
| $licenses = gather_project_licenses($projectids); | |
| if (!$licenses) { | |
| ?> | |
| <p>This project has no licenses associated with it.<p> | |
| <?php | |
| } else { | |
| ?> | |
| <ul> | |
| <?php | |
| foreach ($licenses as $license) { | |
| ?> | |
| <li><?= $license ?></li> | |
| <?php | |
| } | |
| ?> | |
| </ul> | |
| <?php | |
| } | |
| ?> | |
| <h2>Third-Party Code</h2> | |
| <?php | |
| if( $show_edit_form ) { | |
| ?><div style="margin-bottom: 10px"> | |
| Corrections to the third-party code tables are made by adding or removing keywords | |
| to the CQs themselves. See <a href="http://wiki.eclipse.org/Development_Resources/Automatic_IP_Log#Third-Party_Code">the | |
| how to instructions</a> for more information | |
| about which keywords correspond to which tables. Send email to | |
| <a href="mailto:emo-ip-team@eclipse.org">the Eclipse Legal team</a> to request changes | |
| to the keywords. | |
| </div> | |
| <?php | |
| } | |
| ?> | |
| <?php | |
| // Bug 360718 Clean this code up as I go. Mixing PHP tags is just too hard to look at. | |
| /** | |
| * Dump HTML representing the provided CQs. | |
| * @internal | |
| * @param array $cqs | |
| * @param string $title title of the fourth column | |
| * @param string $callback function that provides a value for the fourth column. | |
| */ | |
| function dumpCQs($cqs, $title, $callback) { | |
| $column1width = '5%'; | |
| $column2width = '55%'; | |
| $column3width = '20%'; | |
| $column4width = '20%'; | |
| echo "<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\">\n"; | |
| echo "<tr>"; | |
| echo "<th bordercolor=\"#7A79A7\" bgcolor=\"#7A79A7\">CQ</th>"; | |
| echo "<th bordercolor=\"#7A79A7\" bgcolor=\"#7A79A7\">Third-Party Code</th>"; | |
| echo "<th bordercolor=\"#7A79A7\" bgcolor=\"#7A79A7\">License</th>"; | |
| echo "<th bordercolor=\"#7A79A7\" bgcolor=\"#7A79A7\">$title</th>"; | |
| echo "</tr>\n"; | |
| foreach( $cqs as $row ) { | |
| $bugId = $row['bug_id']; | |
| $description = $row['short_desc']; | |
| $license = $row['cf_license']; | |
| $value = $callback($row); | |
| echo "<tr>"; | |
| echo "<td align=\"right\" width=\"$column1width\"><a href=\"https://dev.eclipse.org/ipzilla/show_bug.cgi?id=$bugId\">$bugId</a></td>"; | |
| echo "<td width=\"$column2width\">$description</td>"; | |
| echo "<td width=\"$column3width\">$license</td>"; | |
| echo "<td width=\"$column4width\">$value</td>"; | |
| echo "</tr>\n"; | |
| } | |
| echo "</table>\n"; | |
| } | |
| echo "<h3>Pre-Req Dependencies</h3>\n"; | |
| if( count($activecqs) > 0 ) { | |
| dumpCQs($activecqs, "Use", 'html_for_keywords'); | |
| } else { | |
| echo "<p><em>No Pre-Req dependencies.</em></p>\n"; | |
| } | |
| echo "<h3>Exempt Pre-Req and Works With Dependencies</h3>\n"; | |
| if( count($prereqcqs) > 0 ) { | |
| dumpCQs($prereqcqs, "Type", 'html_for_type'); | |
| } else { | |
| echo "<p><em>No Exempt Pre-Req or Works With dependencies</em></p>\n"; | |
| } | |
| if( count($unusedcqs) > 0 ) { | |
| echo "<h3>Unused Approved Contributions</h3>\n"; | |
| dumpCQs($unusedcqs, "Status", 'html_for_status'); | |
| } | |
| if( count($pendingcqs) > 0 ) { | |
| echo "<h3>Pending Contribution Questionnaires</h3>\n"; | |
| dumpCQs($pendingcqs, 'Use', 'html_for_keywords'); | |
| } | |
| /*================================================= | |
| * C O M M I T T E R S | |
| */ | |
| function output_committer_table_start( $title, $explanation, $warning = null ) { | |
| global $show_edit_form; | |
| if( $show_edit_form && $explanation ) { | |
| ?><div style="margin-bottom: 10px"><?php echo $explanation ?></div> | |
| <?php | |
| } | |
| ?> | |
| <?php | |
| if ($show_edit_form && $warning) { | |
| ?> | |
| <div style="float:right;width:150px;border-style:dashed;border-width:thin;border-color:red;padding:5px"> | |
| <?= $warning ?> | |
| </div> | |
| <?php | |
| } | |
| ?> | |
| <table border="1" cellpadding="3" cellspacing="0"> | |
| <tr><th colspan="<?= $show_edit_form ? 4 : 3 ?>" bordercolor="#7A79A7" bgcolor="#7A79A7"><?= $title ?></th></tr> | |
| <tr><th bordercolor="#7A79A7" bgcolor="#7A79A7">Name</th> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Organization</th> | |
| <?php if( $show_edit_form ) { ?> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Correction</th> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Comment</th> | |
| <?php } else { ?> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7"> </th> | |
| <?php } ?> | |
| </tr> | |
| <?php | |
| } | |
| ?><h2>Committers</h2> | |
| <?php output_committer_table_start( "Past and Present Active", | |
| "This table lists everyone who is, or ever has been, a committer. | |
| The only reasons to remove someone from this list are (i) if they never | |
| were a committer, (ii) it is a bogus listing such as 'root', or (iii) all | |
| the code that person wrote is now obsolete and no longer being shipped. | |
| This list must include everyone who committed any code or other files are | |
| being distributed in the current release." ); ?> | |
| <?php | |
| foreach( $committers_at_least_once as $key => $row ) { | |
| ?><tr> | |
| <td><?= $row['FName'] . ' ' . $row['LName'] ?></td> | |
| <td><?= $row['Name1'] . ' ' . $row['Name2'] ?></td> | |
| <?php if( $show_edit_form ) { ?> | |
| <td><input type="checkbox" name="CM_<?= $key ?>_REMOVE" value="R"> exclude</td> | |
| <td><input type="text" name="CM_<?= $key ?>_COMENT" value="<?= $row['Comment'] ?>"></td> | |
| <?php } else { ?> | |
| <td><?= $row['Comment'] ?></td> | |
| <?php } ?> | |
| </tr> | |
| <?php | |
| } | |
| if( count($committers_at_least_once) == 0 ) { | |
| ?><tr><td colspan="2" align="center" style="color: red; font-weight: bold"><em>(Error: no committers)</em></td></tr> | |
| <?php } ?> | |
| </table> | |
| <p> | |
| <?php if( count($committers_never) > 0 ) { | |
| output_committer_table_start( "Never Active", | |
| "This table lists committers who do not appear to have committed any code or | |
| files to the project. This is a 'best-guess' table based on the commits explorer | |
| data. If someone listed here actually has committed code, please correct the | |
| table by making them active.", "Consider using the <a href=\"http://portal.eclipse.org\">portal</a> | |
| to remove <b>Never Active</b> committers." ); | |
| foreach( $committers_never as $key => $row ) { | |
| ?><tr> | |
| <td><?= $row['FName'] . ' ' . $row['LName'] ?></td> | |
| <td><?= $row['Name1'] . ' ' . $row['Name2'] ?></td> | |
| <?php if( $show_edit_form ) { ?> | |
| <td><input type="checkbox" name="CM_<?= $key ?>_ACTIVE" value="A"> make active<br> | |
| <input type="checkbox" name="CM_<?= $key ?>_REMOVE" value="R"> exclude</td> | |
| <td><input type="text" name="CM_<?= $key ?>_COMENT" value="<?= $row['Comment'] ?>"></td> | |
| <?php } else { ?> | |
| <td><?= $row['Comment'] ?></td> | |
| <?php } ?> | |
| </tr> | |
| <?php | |
| } | |
| ?> | |
| </table> | |
| <p> | |
| <?php | |
| } | |
| if( $show_edit_form && count($committers_excluded) > 0 ) { | |
| output_committer_table_start( "Corrections (Excluded)", | |
| "This table lists all the corrections. This table is not | |
| included in the final frozen ip log." ); | |
| foreach( $committers_excluded as $key => $row ) { | |
| ?><tr> | |
| <td><?= $row['FName'] . ' ' . $row['LName'] ?></td> | |
| <td><?= $row['Name1'] . ' ' . $row['Name2'] ?></td> | |
| <?php if( $show_edit_form ) { ?> | |
| <td><input type="checkbox" name="CM_<?= $key ?>_DELIST" value="D"> incorrectly excluded</td> | |
| <td><input type="text" name="CM_<?= $key ?>_COMENT" value="<?= $row['Comment'] ?>"></td> | |
| <?php } else { ?> | |
| <td><?= $row['Comment'] ?></td> | |
| <?php } ?> | |
| </tr> | |
| <?php | |
| } | |
| ?> | |
| </table> | |
| <p> | |
| <?php | |
| } | |
| /*================================================= | |
| * C O N T R I B U T O R S | |
| */ | |
| ?><h2>Contributors and Their Contributions</h2> | |
| <?php | |
| if( $show_edit_form ) { | |
| ?><div style="margin-bottom: 10px"> | |
| This table lists, by contributor and then by bug #, all the non-committer contributions. | |
| This section is probably the weakest of the automated data gathering because there are | |
| so many bugs and so many different ways that people have noted contributions over time.<p> | |
| To note a contribution: | |
| <ul> | |
| <li>Include the contribution as a patch on a bug and add the "iplog+" flag to that attachment. | |
| <li>Include the contribution as a comment on a bug and add the "iplog+" flag to the bug. (Note that this | |
| will add all the commenters of the bug as contributors and then you'll have to 'exclude' all those | |
| who did not contribute. Better to use patch attachments if possible.) | |
| </ul> | |
| <p> | |
| Note that this table includes all contributions that are being distributed in the code. | |
| The reasons to correct/remove entries from this table are:<ul> | |
| <li>The algorithm incorrectly classified something as a contribution when it really wasn't | |
| a contribution. | |
| <li>The contribution isn't/wasn't used at all. Note that if just one line of a file is used, | |
| then the contribution is considered as having been used. If possible, mark the | |
| attachment as obsolete in bugzilla; otherwise, use the corrections to make the change. | |
| </ul> | |
| Please note that if person X was a contributor and later became a committer, he or she will | |
| be listed both above in the committer table (for his/her work as a committer) | |
| and here in the contributor table (for his/her work prior to becoming a committer). | |
| </div> | |
| <?php | |
| } | |
| ?> | |
| <table border="1" cellpadding="3" cellspacing="0"> | |
| <tr> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Ref</th> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Size</th> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Description</th> | |
| <?php /* if( $show_edit_form ) { ?> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Correction</th> | |
| <?php } */?> | |
| </tr> | |
| <?php | |
| // TODO this needs to be pulled out as we refactor. | |
| require_once dirname(__FILE__) . '/classes/IPLog.class.php'; | |
| $projects = array(); | |
| foreach($projectids as $id) { | |
| $projects[] = get_project_from_pmi($id); | |
| } | |
| $log = new IPLog($projects); | |
| $contributors = $log->getContributions(); | |
| foreach( $contributors as $email => $each ) { | |
| $name = preg_replace( "/\s+/", " ", $each->name); | |
| if( strlen(trim($name)) == 0 ) { | |
| $name = $email; | |
| } else { | |
| $name .= " (" . substr( strstr( $email, '@' ), 1 ) . ")"; | |
| } | |
| ?><tr><td colspan="3" style="background-color: #DDDDDD"><?= $name ?></td> | |
| <? /*if( $show_edit_form ) { ?> | |
| <td style="background-color: #DDDDDD"><input type="checkbox" name="CN_<?= | |
| strtr( $email, '.@', '__' ) | |
| ?>_RMPERS" value="1"> exclude all</td> | |
| <? } */?> | |
| </tr> | |
| <?php | |
| foreach( $each->contributions as $bug ) { | |
| $ref = $bug->ref; | |
| $link = $bug->link; | |
| $description = htmlentities($bug->comments); | |
| $description = preg_replace("/\n/", '<br/>', $description); | |
| $description = preg_replace('/(bug:?\s*#?(\d+))/i', '<a href="https://bugs.eclipse.org/$2">Bug $2</a>', $description); | |
| ?><tr> | |
| <td><a href="<?php echo $link; ?>"><?= $ref ?></a></td> | |
| <td><?= $bug->size; ?></td> | |
| <td><?php echo $description; ?></td> | |
| <? /* if( $show_edit_form ) { ?> | |
| <td><input type="checkbox" name="CN_<?= $bug['attach_id'] ?>_<?= $bug['type'] ?>_RM" value="1"> exclude</td> | |
| <? } */ ?> | |
| </tr> | |
| <?php | |
| } | |
| } | |
| if( count($contributors) == 0 ) { | |
| ?><tr><td colspan="3" align="center""><em>(no contributors)</em></td></tr> | |
| <?php } ?> | |
| </table> | |
| <?php | |
| if( $show_edit_form && count($contributors_excluded) > 0 ) { | |
| ?><p> | |
| <div style="margin-bottom: 10px"> | |
| This table lists all the corrections. This table is not | |
| included in the final frozen ip log.</div> | |
| <table border="1" cellpadding="3" cellspacing="0"> | |
| <tr> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7" colspan="4">Corrections (Excluded)</th> | |
| </tr> | |
| <tr> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Bug</th> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Size</th> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Description</th> | |
| <th bordercolor="#7A79A7" bgcolor="#7A79A7">Correction</th> | |
| </tr> | |
| <?php | |
| foreach( $contributors_excluded as $email => $each ) { | |
| $name = preg_replace( "/\s+/", " ", $each['realname'] ); | |
| if( strlen(trim($name)) == 0 ) { | |
| $name = $email; | |
| } else { | |
| $name .= " (" . substr( strstr( $email, '@' ), 1 ) . ")"; | |
| } | |
| ?><tr><td colspan="4" style="background-color: #DDDDDD"><?= htmlentities($name) ?></td></tr> | |
| <?php | |
| foreach( $each['bugs'] as $bug ) { | |
| ?><tr> | |
| <td><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=<?= $bug['bug_id'] ?>"><?= $bug['bug_id'] ?></a></td> | |
| <td><?= pretty_size($bug['size']) ?></td> | |
| <td><?= $bug['bug_desc'] ?><br><?= $bug['attach_desc'] ?></td> | |
| <td><input type="checkbox" name="CN_<?= $bug['attach_id'] ?>_<?= $bug['type'] ?>_DL" value="1">incorrectly excluded</td> | |
| </tr> | |
| <?php | |
| } | |
| } | |
| ?></table> | |
| <?php | |
| } | |
| /*================================================= | |
| * R E P O S I T O R I E S | |
| */ | |
| if ($repositories = $log->getSourceRepositories()) { | |
| ?> | |
| <h2>Repositories</h2> | |
| <p>The information contained in this log was generated by using commit information from the following repositories:</p> | |
| <?php | |
| foreach($repositories as $repository) { | |
| $path = $repository->getPath(); | |
| if ($link = $repository->getLink()) $path = "<a href=\"$link\">$path</a>"; | |
| echo "<div style='padding-left: 2em'>$path</div>\n"; | |
| } | |
| } | |
| /*================================================= | |
| * F O O T E R | |
| */ | |
| ?> | |
| <p> | |
| </div><!-- midcolumn --> | |
| </div><!-- maincontent --> | |
| <?php if( !$generate_final ) { ?> | |
| <div style="clear: both; margin-left: -150px;" id="actionfooter"> | |
| <table width="100%" align="center" valign="top" > | |
| <tr><td valign="top" width="22%" style="border-right: thin solid gray; padding-right: 5px"> | |
| <p>Adjust the set of projects included in this IP Log.</p> | |
| <p><input type="button" name="submitlog" | |
| value="Adjust" | |
| onclick="document.location='ip_log_selector.php?projectid=<?= implode( ',', $projectids ) ?>'" | |
| ></p> | |
| </td> | |
| <td valign="top" width="22%" style="border-right: thin solid gray; padding-right: 5px; padding-left: 5px"> | |
| <?php | |
| if( !$show_edit_form ) { | |
| echo "<p>$reason_no_edit_form</p>"; | |
| } else { | |
| echo "<p>Save changes and return to this page for further review.</p>"; | |
| echo "<p><input type=\"submit\" name=\"submit\" value=\"Make These Corrections\"></p>"; | |
| } | |
| ?> | |
| </td> | |
| <td valign="top" width="22%" style="border-right: thin solid gray; padding-right: 5px; padding-left: 5px"> | |
| <?php | |
| if (getLoggedInCommitter() && getLoggedInCommitter()->canSubmitIPLogForAllProjects($projectids)) { | |
| $ids = implode(',', $projectids); | |
| echo "<p>After verifying (and correcting) this IP Log, submit the log to Eclipse Legal for approval.</p>"; | |
| echo "<p><input type=\"button\" name=\"submitlog\" value=\"Submit The Log\" | |
| onclick=\"document.location='ip_log_submit_to_legal.php?projectid=$ids'\"></p>"; | |
| echo "<p>Note: You should submit your log at least three weeks in advance of your review date or be at risk of postponing the review.</p>"; | |
| } else if (getLoggedInCommitter()) { | |
| echo "<p>You are not a committer on all of the projects in this log. You can submit an IP Log for review by Eclipse Legal only if you are a committer on all the projects in the log.</p>"; | |
| } else { | |
| echo " "; | |
| } | |
| ?> | |
| </td> | |
| <td valign="top" width="22%" style="padding-left: 5px"> | |
| <p><a href="http://wiki.eclipse.org/Development_Resources/Automatic_IP_Log" | |
| >Help & Documentation</a>: Learn how this IP log is generated | |
| and how to correct errors.</p> | |
| </td> | |
| </tr></table></div><!-- actionfooter --> | |
| </form> | |
| <?php | |
| } | |
| echo get_trace_html(); | |
| ?> | |
| <?php | |
| # Paste your HTML content between the EOHTML markers! | |
| $html = ob_get_contents(); | |
| ob_end_clean(); | |
| if ($generate_final) { | |
| // If we're generating the final log, omit the decoration. | |
| echo $html; | |
| } else { | |
| # Generate the web page | |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); | |
| } | |
| ?> |