| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2017 Eclipse Foundation and others. | |
| * | |
| * This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License 2.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-2.0 | |
| *******************************************************************************/ | |
| require_once(dirname(__FILE__) . "/../../eclipse.org-common/system/app.class.php"); | |
| require_once(dirname(__FILE__) . "/../../eclipse.org-common/system/nav.class.php"); | |
| require_once(dirname(__FILE__) . "/../../eclipse.org-common/system/menu.class.php"); | |
| require_once dirname(__FILE__) . '/../classes/Project.class.php'; | |
| require_once dirname(__FILE__) . '/../classes/database.inc'; | |
| require_once dirname(__FILE__) . '/../classes/common.php'; | |
| require_once dirname(__FILE__) . '/../classes/debug.php'; | |
| $App = new App(); | |
| $Nav = new Nav(); | |
| $Menu = new Menu(); | |
| include($App->getProjectCommon()); | |
| $pageTitle = "Eclipse Projects by Programming Language"; | |
| $pageKeywords = ""; | |
| $pageAuthor = "Wayne Beaton"; | |
| ob_start(); | |
| $languages = array(); | |
| $sql = "select language, project from ProjectLanguages"; | |
| query('dashboard', $sql, array(), function($row) use (&$languages) { | |
| if ($project = Project::getProject($row['project'])) { | |
| $languages[$row['language']]['projects'][] = $project; | |
| } | |
| }); | |
| /** | |
| * Sort an array based on mapped values. Key/value associations | |
| * are maintained. A mapping function is provided to transform | |
| * the elements of the area into values that are fed into the | |
| * sorting function. The sorting function is optional: if it | |
| * is not provided, then it is assumed that the mapping function | |
| * provide numeric values that are compared for sort order. | |
| * | |
| * @param mixed $values | |
| * @param callable $map | |
| * @param callable $function | |
| */ | |
| function masort(&$values, $map, $function = 'masort_int') { | |
| uasort($values, function($a, $b) use ($map, $function) { | |
| return $function($map($a), $map($b)); | |
| }); | |
| } | |
| /** | |
| * @internal | |
| * The default sort comparator. | |
| */ | |
| function masort_int($a, $b) {return $a == $b ? 0 : $a < $b;} | |
| masort($languages, function($value) {return count($value['projects']);}); | |
| // TODO show the file extension mappings. | |
| ?> | |
| <div id="maincontent"> | |
| <div id="midcolumn"> | |
| <h1><?= $pageTitle ?></h1> | |
| <p> | |
| <strong>EXPERIMENTAL!</strong> | |
| </p> | |
| <?php | |
| foreach($languages as $language => $data) { | |
| echo "<h3>$language</h3>"; | |
| echo "<ul>"; | |
| masort($data['projects'], function($project) {return $project->getNickname();}, 'strcasecmp'); | |
| /** @var \Project $project */ | |
| foreach($data['projects'] as $project) { | |
| echo "<li><a href=\"{$project->getUrl()}\">{$project->getFormalName()}</a></li>"; | |
| } | |
| echo "</ul>"; | |
| } | |
| ?> | |
| </div> | |
| </div> | |
| <?php | |
| $html = ob_get_contents(); | |
| ob_end_clean(); | |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); | |
| ?> |