| <?php |
| /******************************************************************************* |
| * Copyright (c) 2022 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 |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| *******************************************************************************/ |
| /* |
| * EXPERIMENTAL |
| * |
| * This script answers a GitHub badge which indicates the review status of |
| * a particular project. Our logic is that if it has successfully completed a |
| * review in the last year. The badge indicates the date of the last review |
| * according to our records. The badge is green when the project is in good |
| * standing, red when it is due for a review, or yellow when we're not sure. |
| * |
| * We use https://shields.io/ to generate the badges (but serve the actual |
| * logos as SVGs locally. |
| */ |
| |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); |
| require_once dirname(__FILE__) . '/../classes/Project.class.php'; |
| require_once dirname(__FILE__) . '/../classes/common.php'; |
| require_once dirname(__FILE__) . '/../classes/database.inc'; |
| |
| $App = new App (); |
| |
| $sql = <<<EOQ |
| select |
| max(rev.date) as review, |
| max(rev.date) >= date_sub(now(), interval 1 year) as goodstanding |
| from Project as p |
| join ProjectReviews as rev on p.id=rev.project |
| where |
| p.id = ':id:' |
| and rev.type in ('progress', 'release','graduation', 'other') |
| and rev.status = 'success' |
| EOQ; |
| |
| // https://img.shields.io/badge/EDP%20Review-unknown-yellow |
| $badge = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="136" height="20" role="img" aria-label="EDP Review: unknown"><title>EDP Review: unknown</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="136" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="75" height="20" fill="#555"/><rect x="75" width="61" height="20" fill="#dfb317"/><rect width="136" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="385" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="650">EDP Review</text><text x="385" y="140" transform="scale(.1)" fill="#fff" textLength="650">EDP Review</text><text aria-hidden="true" x="1045" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">unknown</text><text x="1045" y="140" transform="scale(.1)" fill="#fff" textLength="510">unknown</text></g></svg>'; |
| |
| // Note that the query function escapes substitution parameters |
| // (so using the $_GET value as below is safe). |
| query('dashboard', $sql, array (':id:' => $_GET['id']), function ($row) use (&$badge) { |
| if ($row['review']) { |
| $badge = $row['goodstanding'] == "1" |
| // https://img.shields.io/badge/EDP%20Review-2022.12.12-green |
| ? '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="148" height="20" role="img" aria-label="EDP Review: 2022.12.12"><title>EDP Review: 2022.12.12</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="148" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="75" height="20" fill="#555"/><rect x="75" width="73" height="20" fill="#97ca00"/><rect width="148" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="385" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="650">EDP Review</text><text x="385" y="140" transform="scale(.1)" fill="#fff" textLength="650">EDP Review</text><text aria-hidden="true" x="1105" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="630">2022.12.12</text><text x="1105" y="140" transform="scale(.1)" fill="#fff" textLength="630">2022.12.12</text></g></svg>' |
| //https://img.shields.io/badge/EDP%20Review-2022.12.12-red |
| : '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="148" height="20" role="img" aria-label="EDP Review: 2022.12.12"><title>EDP Review: 2022.12.12</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="148" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="75" height="20" fill="#555"/><rect x="75" width="73" height="20" fill="#e05d44"/><rect width="148" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="385" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="650">EDP Review</text><text x="385" y="140" transform="scale(.1)" fill="#fff" textLength="650">EDP Review</text><text aria-hidden="true" x="1105" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="630">2022.12.12</text><text x="1105" y="140" transform="scale(.1)" fill="#fff" textLength="630">2022.12.12</text></g></svg>'; |
| $badge = str_replace("2022.12.12", date("Y.m.d", strtotime($row['review'])), $badge); |
| } |
| }); |
| |
| header('Content-Type: image/svg+xml'); |
| echo $badge; |
| ?> |