<?php
/*******************************************************************************
 * Copyright (c) 2018, 2021 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
 *******************************************************************************/

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'] . "/projects/classes/database.inc");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php");

$App = new App();
$Nav = new Nav();
$Menu = new Menu();
include($App->getProjectCommon());

$pageTitle 		= "Eclipse Foundation Trademarks";
$pageKeywords	= "";
$pageAuthor		= "Wayne Beaton";

ob_start();

function displayTrademarks($sql) {
    echo "<ul>";
    query('dashboard', $sql, array(), function($row) {
        $mark = $row['type'] == 'R' ? '&reg' : '&trade;';
        echo "<li>{$row['name']}{$mark}</li>";
    });
    echo "</ul>";
}

?>
<div id="maincontent">
<div id="midcolumn">
<h1><?= $pageTitle ?></h1>

<p>The names and logos of all open source
	projects, working groups, specifications, and all downloadable
	software products, are trademarks of the the Eclipse Foundation. In
	addition the Eclipse Foundation logo is a trademark of the Eclipse
	Foundation.</p>

<p>This document captures a list of trademarks claimed by the Eclipse Foundation.</p>

<h2 id="use">Trademark Use</h2>

<p>The <a href="/legal/logo_guidelines.php">Eclipse Foundation Trademark Usage Guidelines</a>
defines the allowable use of Eclipse Foundation names, marks and logos.</p>

<p>Supplemental guidelines:</p>

<ul>
<li><a href="https://jakarta.ee/legal/trademark_guidelines/">Jakarta EE Trademark Guidelines</a></li>
</ul>

<h2 id="attribution">Trademark Disclaimers</h2>

<p>Content on this web site, including the names listed on this page, may
    make reference to the trademarks in the following list. We disclaim any
    claim to trademark rights in their usage.</p>

<ul>
	<li>Java and all Java-based trademarks are trademarks of Oracle
		Corporation in the United States, other countries, or both.</li>
	<li>Microsoft, Windows, Windows NT, and the Windows logo are
		trademarks of Microsoft Corporation in the United States, other
		countries, or both.</li>
	<li>UNIX is a registered trademark of The Open Group in the United
		States and other countries.</li>
	<li>Linux is the registered trademark of Linus Torvalds in the U.S.
		and other countries.</li>
	<li>Android is a trademark of Google Inc.</li>
	<li>Other company, product, and service names may be trademarks or
		service marks of others.</li>
</ul>

<h2 id="registered">Registered Trademarks</h2>

<?php 
$sql = "select distinct name, type from Trademark where type='R' order by name";
displayTrademarks($sql);
?>

<h3 id="other">Other Trademarks</h3>

<?php 
$sql = "select distinct name, type from Trademark where category in ('other' ,'simrel') and type != 'R' order by name";
displayTrademarks($sql);
?>

<h2 id="wg">Eclipse Foundation Working Groups</h2>

<?php 
$sql = "select distinct name, type from Trademark where category='wg' order by name";
displayTrademarks($sql);
?>

<h2 id="specifications">Eclipse Foundation Specifications</h2>

<?php 
$sql = "select name, type from Trademark where category='specification' order by name";
displayTrademarks($sql);
?>

<h2 id="projects">Eclipse Foundation Projects</h2>

<?php 
$sql = "select name, type from Trademark where category='project' order by name";
displayTrademarks($sql);
?>

</div>
</div>

<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage(null, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>