| <?php |
| /******************************************************************************* |
| * Copyright (c) 2017 Eclipse Foundation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-2.0 |
| *******************************************************************************/ |
| 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 dirname ( __FILE__ ) . '/../classes/database.inc'; |
| require_once dirname ( __FILE__ ) . '/../classes/Project.class.php'; |
| |
| $App = new App(); |
| $Nav = new Nav(); |
| $Menu = new Menu(); |
| include($App->getProjectCommon()); |
| |
| $pageTitle = "Eclipse Foundation Cryptography"; |
| $pageKeywords = ""; |
| $pageAuthor = "Wayne Beaton"; |
| |
| $since = null; |
| if (isset($_GET['since'])) { |
| $since = strtotime($_GET['since']); |
| } |
| |
| function cryptographyDo($since, $function) { |
| $sql = " |
| select |
| b.bug_id as id, |
| cp.name as project, |
| b.short_desc as title, |
| kd.name as type, |
| c.thetext as text |
| from |
| (select |
| c.bug_id, min(c.comment_id) as comment_id |
| from longdescs as c |
| join keywords as k on c.bug_id=k.bug_id |
| join keyworddefs as kd on k.keywordid=kd.id |
| where kd.name='cryptography' |
| group by bug_id) as crypto |
| join bugs as b on crypto.bug_id=b.bug_id |
| join longdescs as c on crypto.comment_id=c.comment_id |
| join components as cp on b.component_id=cp.id |
| join keywords as k on b.bug_id=k.bug_id |
| join keyworddefs as kd on k.keywordid=kd.id |
| where |
| b.bug_severity in ('approved', 'license_certified') |
| and kd.name in ('projectcode', 'thirdparty') |
| and date(creation_ts) > date(':since') |
| order by cp.name, b.bug_id"; |
| |
| // If $since is null, this should render as the |
| // epoch start which effectively means "forever". |
| $args = array(':since' => date('Y-m-d', $since)); |
| |
| query ( 'ipzilla', $sql, $args, function ($row) use ($function) { |
| $cq = new Stdclass(); |
| $cq->id = $row['id']; |
| $cq->title = $row['title']; |
| $cq->projectId = $row['project']; |
| $cq->project = Project::getProject($row['project']); |
| $cq->type = $row['type']; |
| $cq->cryptography = getCryptographyStatement($row['text']); |
| |
| $function($cq); |
| }); |
| } |
| |
| function getCryptographyStatement($string) { |
| if (preg_match('/Cryptography:.*/', $string, $matches)) |
| return $matches[0]; |
| return ''; |
| } |
| |
| function probablyNoForCryptography($cq) { |
| // No entry means no. |
| if (!trim($cq->cryptography)) return true; |
| if (preg_match('/^Cryptography:\s*(.*)$/', trim($cq->cryptography), $matches)) { |
| $statement = trim($matches[1]); |
| // Blank entry means no. |
| if (!$statement) return true; |
| // Explicit no or equivalent as the first word is no. |
| if (preg_match('/^(?:no|none|not)\b/i', $statement)) return true; |
| } |
| return false; |
| } |
| |
| function probablyYesForCryptography($cq) { |
| if (preg_match('/^Cryptography:\s*(.*)$/', $cq->cryptography, $matches)) { |
| $statement = trim($matches[1]); |
| if (!$statement) return false; |
| if (preg_match('/^(?:yes)\b/i', $statement)) return true; |
| } |
| return false; |
| } |
| |
| $projects = array(); |
| $cqs = array(); |
| cryptographyDo($since, function($cq) use (&$projects, &$cqs) { |
| if ($project = $cq->project) { |
| $cqs[$project->getId()][] = $cq; |
| $projects[$project->getId()] = $project; |
| } |
| }); |
| |
| ob_start(); |
| ?> |
| <div id="maincontent"> |
| <div id="midcolumn"> |
| <h1><?= $pageTitle ?></h1> |
| |
| <p>The following CQs all include the <em>cryptography</em> keyword.</p> |
| |
| <?php |
| if ($since) { |
| $date = $App->getFormattedDate($since); |
| echo "<p>Showing changes since {$date}. Show <a href=\"?\">all</a>.</p>"; |
| } else { |
| echo "<p>Only show the <a href=\"?since=-1 month\">changes in the last month</a> |
| or <a href=\"?since=-2 month\">changes in the last two months</a>.</p>"; |
| } |
| ?> |
| |
| <h3>Projects</h3> |
| |
| <p>Projects that contain encryption:<p> |
| <ul> |
| <?php |
| foreach($projects as $project) { |
| if ($project->isArchived()) continue; |
| |
| $name = $project->getFormalName(); |
| |
| echo "<li><a href=\"{$project->getUrl()}\">$name</a> {$project->getUrl()}/developer</li>"; |
| } |
| |
| ?> |
| </ul> |
| |
| <h3>Contribution Questionnaires</h3> |
| |
| <p>CQs that indicate that they contain cryptography:<p> |
| <ul> |
| <?php |
| foreach($cqs as $id => $values) { |
| $project = Project::getProject($id); |
| echo "<li>{$project->getFormalName()}<ul>"; |
| foreach($values as $cq) { |
| echo "<li>[<a href=\"https://dev.eclipse.org/ipzilla/show_bug.cgi?id={$cq->id}\">{$cq->id}</a>] {$cq->title}</li>"; |
| } |
| echo "</ul></li>"; |
| } |
| |
| ?> |
| </ul> |
| |
| </div> |
| </div> |
| |
| <?php |
| $html = ob_get_contents(); |
| ob_end_clean(); |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); |
| ?> |