| <?php |
| //error_reporting(E_ALL); ini_set("display_errors", true); |
| 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"); |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/projects/projectInfoData.class.php"); |
| require_once("/home/data/httpd/eclipse-php-classes/system/dbconnection_foundation_ro.class.php"); |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/smartconnection.class.php"); |
| |
| // ---------------------------------------------------------------------------- |
| // PHOENIX STUFF |
| |
| $App = new App(); |
| $Nav = new Nav(); |
| $Menu = new Menu(); |
| include($App->getProjectCommon()); |
| |
| $pageTitle = "Project Plan - "; |
| $pageAuthor = "Bjorn Freeman-Benson"; |
| |
| $Nav->setLinkList(array()); // empty Nav |
| |
| // ---------------------------------------------------------------------------- |
| // BEGIN CODE |
| |
| // Start Output Buffering |
| ob_start(); |
| ?> |
| <style> |
| h2 { |
| border-bottom: 2px solid gray; |
| } |
| h3 { |
| border-bottom: 1px dotted gray; |
| } |
| </style> |
| <?php |
| /* |
| * Must have a ?projectid=xxx |
| */ |
| preg_match('/^([a-z.0-9\-_]+)$/', $_REQUEST['projectid'], $matches); |
| if(!isset($matches[1])) { |
| ?><span style="background-color: #FFCCCC; font-weight: bold; font-size: 150%">Error: unable to display project plan without a ?projectid=xxx</span><?php |
| } else { |
| $projectid = $matches[1]; |
| |
| $project = new ProjectInfoData($projectid); |
| |
| $pageTitle .= $projectid; |
| |
| function report_bugzillas( $param ) { |
| $url = '' . $param; |
| $url = trim( $url ); |
| if( !$url ) { |
| ?><ul><li><em>no items</em></li></ul><?php |
| return; |
| } |
| if( substr($url,0,25) == 'https://bugs.eclipse.org/' ) { |
| $url = 'https://bugs.eclipse.org/' . substr($url,25); |
| } elseif( substr($url,0,24) == 'http://bugs.eclipse.org/' ) { |
| $url = 'http://bugs.eclipse.org/' . substr($url,24); |
| } else { |
| ?><ul><li><span style="background-color: #FFCCCC; font-weight: bold; font-size: 150%;">Error: url is not a bugs.eclipse.org url</span></li></ul><?php |
| return; |
| } |
| $url = $url . "&ctype=rdf"; |
| $url = $url . "&columnlist=bug_id,short_desc,target_milestone,bug_status"; |
| /* |
| * For some reason, simplexml doesn't handle the RDF with namespaces, |
| * so we just remove all the namespace stuff here. |
| */ |
| $text = file_get_contents( $url ); |
| $text = preg_replace( "/bz:/", '', $text ); |
| $text = preg_replace( "/rdf:/", '', $text ); |
| $text = preg_replace( "/nc:/", '', $text ); |
| /* */ |
| $rdf = simplexml_load_string( $text ); |
| // echo "<pre>url=/"; print_r($url); |
| // echo "/<br>text=/"; print_r($text); |
| // echo "/<br>rdf=/"; print_r($rdf); |
| // echo "/</pre>"; |
| |
| ?><ul><?php |
| foreach( $rdf->result->bugs->Seq->li as $each ) { |
| $status_begin = ''; |
| $status_end = ''; |
| if( $each->bug->bug_status == 'RESOLVED' |
| || $each->bug->bug_status == 'VERIFIED' |
| || $each->bug->bug_status == 'CLOSED' ) { |
| $status_begin = '<strike>'; |
| $status_end = '</strike>'; |
| } |
| ?><li><?= $each->bug->short_desc ?> |
| [<a href="http://bugs.eclipse.org/<?= $each->bug->id ?>"><?= $each->bug->id ?></a>] |
| <?= $status_begin ?>(target milestone: <?= $each->bug->target_milestone ?>) |
| <?= $status_end ?></li><?php |
| } |
| ?></ul><?php |
| } |
| |
| function show_error_page( $errormsg, $projectid ) { |
| $leaders = array(); |
| |
| $dbc = new DBConnectionFoundation(); |
| $dbh = $dbc->connect(); |
| $result = mysql_query(" |
| SELECT DISTINCT(People.PersonID), FName, LName |
| FROM PeopleProjects, Projects, People |
| WHERE PeopleProjects.Relation in ('PL','PD') |
| AND InactiveDate is NULL |
| AND People.PersonID = PeopleProjects.PersonID |
| AND Projects.ProjectID = PeopleProjects.ProjectID |
| AND Projects.ProjectID = '$projectid' |
| ORDER BY LName", $dbh); |
| while( $row = mysql_fetch_assoc($result) ) { |
| $leaders[] = $row['FName'] . ' ' . $row['LName']; |
| } |
| |
| if( count($leaders) == 0 ) { |
| $leaderstr = "project leader(s)"; |
| } else { |
| if( count($leaders) == 1 ) { |
| $leaderstr = "project leader (" . $leaders[0] . ")"; |
| } else { |
| $t1 = array_pop( $leaders ); |
| $leaderstr = "project leaders (" . implode( ", ", $leaders ) . " and " . $t1 . ")"; |
| } |
| } |
| ?><div style="margin-top: 60px; margin-left: 50px; width: 400px"><center><img src="/projects/images/no-plan.jpg"><p> |
| <div style="margin-top: 40px; margin-bottom: 60px"> |
| Unable to display the <?= $projectid ?> project plan because |
| <?= $errormsg ?><p> |
| The project team and <?= $leaderstr ?> are responsible for the project plan. |
| You can contact them via the <a href="http://www.eclipse.org/mail/">project's developer mailing list</a>. |
| </div></center></div><?php |
| } |
| |
| /* |
| * If the parameter is a projectid only, look up the url in the meta-data database |
| */ |
| if( isset($_REQUEST['planURL']) ) { |
| $url = $_REQUEST['planURL']; |
| } else { |
| $url = $project->projectplanurls[0]; |
| } |
| /* |
| * Verify that the url is pointing to eclipse.org to prevent cross-site attacks |
| */ |
| if( preg_match("/^\w+:/", $url) && substr($url,0,23) != 'http://www.eclipse.org/' ) { |
| if( isset($_REQUEST['planURL']) ) { |
| show_error_page( 'the specified URL (' . $url . ') does not refer to an http://www.eclipse.org/ page.', $projectid ); |
| } else { |
| show_error_page( 'the project meta-data "projectplanurl" (' . $url . ') does not refer to an http://www.eclipse.org/ page.', $projectid ); |
| } |
| } else { |
| if( substr($url,0,5) != 'http:' ) |
| $url = $_SERVER['DOCUMENT_ROOT'] . $url; |
| /* |
| * If the request is for raw format |
| */ |
| if( isset($_REQUEST['raw']) ) { |
| $contents = @file_get_contents( $url ); |
| ?> |
| <div style="margin-left: 10px; margin-top: 10px"> |
| <b>Location: </b><?= $url ?><br> |
| <b>Meta-data Tag: </b>projectplanurl<br> |
| <b>Raw: </b><p> |
| <pre> |
| <?= htmlspecialchars($contents) ?> |
| </pre> |
| </div> |
| <?php |
| } else { |
| /* |
| * Load the XML file |
| */ |
| $xml = @simplexml_load_file( $url ); |
| if( $xml === false |
| || !isset($xml->themes_and_priorities->theme) ) { |
| $contents = @file_get_contents( $url ); |
| if( !$contents ) { |
| show_error_page( 'the project meta-data "projectplanurl" (' . $url . ') points to an empty file.', $projectid ); |
| } else { |
| if( preg_match( "/&(?<!amp;)/", $contents ) ) { |
| show_error_page( 'the file appears to have at least one naked &s in bugzilla urls: &s must be escaped as &amp; to be valid XML.', $projectid ); |
| } else { |
| show_error_page( 'the file is not a valid project plan XML file. See <a href="http://wiki.eclipse.org/Development_Resources/Project_Plan">the documentation</a> for details.', $projectid ); |
| } |
| } |
| } else { |
| $projectname = $project->projectnames[0]; |
| |
| // ---------------------------------------------------------------------------- |
| // OUTPUT |
| ?> |
| <div id="maincontent"> |
| <div id="midcolumn"> |
| |
| <h1>Project Plan for |
| <a href="http://www.eclipse.org/projects/project_summary.php?projectid=<?= $projectid ?>"><span |
| style="font-size: 140%"><?= $projectname ?></span></a>, version <?= $xml->release->attributes()->version ?></h1> |
| <h2>Introduction</h2> |
| <?= $xml->introduction ?> |
| <h2>Release Deliverables</h2> |
| <?= $xml->release_deliverables ?> |
| <h2>Release Milestones</h2> |
| <p><?= $xml->release_milestones->preamble ?></p> |
| <table border="1" align="center"> |
| <?php |
| foreach ($xml->release_milestones->milestone as $milestone ) { |
| ?><tr><td><b><?= $milestone->attributes()->milestone ?></b></td> |
| <td><?= $milestone->attributes()->date ?></td> |
| <td><?= $milestone ?></td></tr> |
| <?php |
| } |
| ?> |
| </table> |
| <p><?= $xml->release_milestones->postamble ?></p> |
| <h2>Target Environments</h2> |
| <?= $xml->target_environments ?> |
| <h3>Internationalization</h3> |
| <?= $xml->target_environments->internationalization ?> |
| <h2>Compatibility With Previous Releases</h2> |
| <?= $xml->compatibility_with_previous_releases ?> |
| |
| <h2>Themes and Priorities</h2> |
| <p><?= $xml->themes_and_priorities->preamble ?></p> |
| <?php |
| $list = array(); |
| for( $i = 0; isset($xml->themes_and_priorities->theme[$i]); $i++ ) { |
| $list[] = $xml->themes_and_priorities->theme[$i]; |
| } |
| foreach( $list as $plan_theme ) { |
| ?><h3><?= $plan_theme->attributes()->name ?></h3> |
| <?php |
| if( $plan_theme->description != null ) { |
| ?><p style="margin-top: -6px"><?= $plan_theme->description ?></p> |
| <?php |
| } |
| ?> |
| <ul><?php |
| ?><li><b>Committed</b><ul><?php echo "\n"; |
| if( $plan_theme->committed->attributes()->bugzilla != null ) { |
| report_bugzillas( $plan_theme->committed->attributes()->bugzilla ); |
| } else { |
| if( trim($plan_theme->committed) ) { |
| echo $plan_theme->committed; |
| } else { |
| ?><ul><li><em>no items</em></li></ul><?php |
| } |
| } |
| ?></ul></li><li><b>Proposed</b><ul><?php echo "\n"; |
| if( $plan_theme->proposed->attributes()->bugzilla != null ) { |
| report_bugzillas( $plan_theme->proposed->attributes()->bugzilla ); |
| } else { |
| if( trim($plan_theme->proposed) ) { |
| echo $plan_theme->proposed; |
| } else { |
| ?><ul><li><em>no items</em></li></ul><?php |
| } |
| } |
| ?></ul></li><li><b>Deferred</b><ul><?php echo "\n"; |
| if( $plan_theme->deferred->attributes()->bugzilla != null ) { |
| report_bugzillas( $plan_theme->deferred->attributes()->bugzilla ); |
| } else { |
| if( trim($plan_theme->deferred) ) { |
| echo $plan_theme->deferred; |
| } else { |
| ?><ul><li><em>no items</em></li></ul><?php |
| } |
| } |
| ?></ul></li></ul><?php echo "\n"; |
| } |
| |
| $idx = 0; |
| foreach( $xml->appendix as $appendix ) { |
| $appidx = substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", $idx, 1); |
| ?><h2>Appendix <?= $appidx ?>. <?= $appendix->attributes()->name ?></h2> |
| <?= $xml->appendix ?> |
| <?php |
| } |
| ?> |
| <?php |
| }// if( $xml === false ) |
| ?> |
| <div style="float: right; text-align: right"><a href="?projectid=<?= $projectid ?>&raw=1">view raw xml of project plan</a><br> |
| <a href="/projects/dev_process/project-status-infrastructure.php">from project meta-data key "projectplanurl"</a></div> |
| <?php |
| }// if( !raw ) |
| }// if( !cross site attack ) |
| }// if( !$url ) |
| ?> |
| |
| </div> <!-- midcolumn --> |
| </div> <!-- maincontent --> |
| <?php |
| $html = ob_get_contents(); |
| ob_end_clean(); |
| |
| # Generate the web page |
| $pageKeywords = ''; |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); |
| ?> |