| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 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: | |
| * Wayne Beaton - initial API and implementation | |
| *******************************************************************************/ | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php"); | |
| trace_file_info(__FILE__); | |
| 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(); | |
| // TODO Refactor this code | |
| // This is repeated in downloads.php; if it's use twice, it needs a single home. | |
| if ($App->devmode) { | |
| $base = $_SERVER['DOCUMENT_ROOT'] . '/projects/tests/data/ip-scans'; | |
| } else { | |
| $base = '/home/data/httpd/writable/projects/ip-scans'; | |
| mustBeCommitter(); | |
| include($App->getProjectCommon()); | |
| } | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/util/summary.php"); | |
| function getProjectPairings($base) { | |
| global $projectNamePattern; | |
| $pairings = array(); | |
| if (!$dh = opendir($base)) return $scans; | |
| while (($file = readdir($dh)) !== false) { | |
| if (!preg_match("/^$projectNamePattern.xml$/", $file)) continue; | |
| retrievePairings($pairings, "$base/$file"); | |
| } | |
| closedir($dh); | |
| return $pairings; | |
| } | |
| function retrievePairings(&$pairings, $file) { | |
| $scan = simplexml_load_file($file); | |
| foreach ($scan->project as $project) { | |
| retrieveProjectPairings($pairings, $project); | |
| } | |
| } | |
| function retrieveProjectPairings(&$pairings, $project) { | |
| $source = $project['id']; | |
| foreach($project->includes as $target) { | |
| $target = (string)$target['id']; | |
| $pairings[$target][] = $source; | |
| } | |
| } | |
| function cmp_count($a, $b) { | |
| if (count($a) == count($b)) return 0; | |
| return (count($a) > count($b)) ? -1 : 1; | |
| } | |
| $pairings = getProjectPairings($base); | |
| uasort($pairings, 'cmp_count'); | |
| ob_start(); | |
| $pageKeywords = ""; | |
| $pageTitle = "Project Use Frequency"; | |
| $pageAuthor = "Wayne Beaton"; | |
| ?> | |
| <div id="midcolumn"> | |
| <h1><?= $pageTitle ?></h1> | |
| <div class="homeitem"> | |
| <p>This page shows the frequency with which bits of projects are distributed | |
| by other projects. Project A is considered to be used/distributed by project B | |
| if project B includes at least one bundle from project A in its download directory. | |
| Note that that this does not reflect actual use; that would require scanning | |
| bundle manifests (which we don't do just yet).</p> | |
| <?php | |
| echo "<ul>"; | |
| foreach($pairings as $target => $sources) { | |
| $count = count($sources); | |
| $entries = array(); | |
| foreach($sources as $id) { | |
| $entries[] = "<a href=\"downloads.php?id=$id\">$id</a>"; | |
| } | |
| $list = join(', ', $entries); | |
| echo "<li>$target ($count)"; | |
| echo "<ul><li>$list</li></ul>"; | |
| echo "</li>"; | |
| } | |
| echo "</ul>"; | |
| ?> | |
| </div> | |
| </div> | |
| <?php | |
| $html = ob_get_contents(); | |
| ob_end_clean(); | |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); | |
| echo get_trace_html(); | |
| ?> |