| <?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; |
| if ($link = $bug->link) $ref = "<a href=\"$link\">$ref</a>"; |
| $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><?php echo $ref; ?></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); |
| } |
| ?> |