<?php
/**
 * Copyright (c) 2014, 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Christopher Guindon (Eclipse Foundation) - initial API and implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */

function communityList() {
  $retvalue = array();
  $retvalue[] = array(
    "BIRT Exchange",
    "http://www.birt-exchange.com/",
    "Community site for Java developers to share code, report designs and ideas."
  );
  $retvalue[] = array(
    "Eclipse Developer Journal",
    "http://eclipse.sys-con.com/",
    "An on-line Eclipse magazine hosted by SYS-Con Media."
  );
  $retvalue[] = array(
    "Eclipse Wiki",
    "http://wiki.eclipse.org",
    "A wiki with lots of tips, tricks and useful information about Eclipse."
  );
  $retvalue[] = array(
    "EclipseZone",
    "http://www.eclipsezone.com/",
    "An online community by and for Eclipse users everywhere - hosted by JavaLobby."
  );
  $retvalue[] = array(
    "IBM developerWorks - Eclipse Resources",
    "http://www-128.ibm.com/developerworks/opensource/top-projects/eclipse.html",
    "IBM's developerWorks hosts a variety of tutorials, articles and related information on Eclipse."
  );
  $retvalue[] = array(
    "IBM Research",
    "http://www.research.ibm.com/eclipse/",
    "Visit this site to read about Eclipse-related technical projects, programs, workshops and other such activities going on at IBM Research."
  );

  return $retvalue;
}

?>

<div id="midcolumn">
  <h1><?php print $pageTitle; ?></h1>
  <p>
    The page is about finding more information about Eclipse from around
    the Eclipse community. The community has provided many blogs, wikis,
    and websites that are dedicated to Eclipse and can help you to make
    the most of the Eclipse platform and tools. <br />
  </p>
  <a id="links"></a><br />
  <div class="homeitem3col">
    <a id="portals"></a>
    <h3>Links to Eclipse Portals</h3>
    <ul>
      <li>
        <b>Planet Eclipse</b> - <a href="http://planeteclipse.org/"
          target="_blank">http://planeteclipse.org/</a> - Planet Eclipse,
        hosted by the Eclipse Foundation, is a news aggregator for those
        who share an enthusiasm for Eclipse and the Eclipse community.
      </li>
      <li>
        <b>Eclipse Marketplace</b> - <a
          href="http://marketplace.eclipse.org" target="_blank">http://marketplace.eclipse.org</a>
        - Eclipse Marketplace, hosted by the Eclipse Foundation, offers
        the Eclipse community a convenient, information-rich portal that
        helps software developers find open source and commercial Eclipse
        plug-ins, tools and products that enhance the entire software
        development life-cycle.
      </li>
      <li>
        <b>Eclipse YouTube Channel</b> - <a
          href="http://www.youtube.com/user/EclipseFdn" target="_blank">http://www.youtube.com/user/EclipseFdn</a>
        - The Eclipse YouTube Channel, managed by the Eclipse Foundation,
        features videos from its members, community, Industry Working
        Groups, and Eclipse events (including EclipseCons), and much more.
      </li>
      <li>
        <b>Eclipse Tutorials</b> - <a
          href="http://del.icio.us/tag/eclipse%2Btutorials" target="_blank">http://del.icio.us/tag/eclipse+tutorials</a>
        - Bookmarked Eclipse tutorials on Delicious.com.
      </li>
      <li>
        <b>Equinox Portal</b> - <a href="/equinox-portal/" target="_blank">http://www.eclipse.org/equinox-portal</a>
        - The Equinox community is building new and interesting technology
        that makes it easier to create, extend and assemble innovative
        software.
      </li>
    </ul>
  </div>
  <div class="homeitem3col">
    <a id="Community"></a>
    <h3>Community Sites</h3>
    <ul>
      <?php
        // This is rendered from code in portals_listings.php in this directory --
        // so the data can be reused on membership pages.
        foreach (communityList() as $value) :
          ?>
      <li>
        <b><?php print $value[0]?></b> - <a href="<?php print $value[1]?>" target="_blank"><?php print $value[1]?></a><br />
        <?php print $value[2]?>
      </li>
      <?php endforeach; ?>
    </ul>
  </div>
  <div class="homeitem3col">
    <a id="user"></a>
    <h3>User Communities</h3>
    <ul>
      <li>
        <b>Regional Eclipse Communities</b> - <a
          href="http://wiki.eclipse.org/Regional_Communities#LIST_OF_REGIONAL_COMMUNITIES"
          target="_blank">http://wiki.eclipse.org/Regional_Communities</a><br />
        A wiki page listing groups of people located in the same
        geographic area that have a keen interest in using and
        contributing to Eclipse.
      </li>
      <li>
        <b>Eclipse Italian Community </b>- <a
          href="http://eclipse.dis.unina.it" target="_blank">http://eclipse.dis.unina.it</a>
        A bilingual (Italian and English) website created by the
        University of Napoli Federico II to foster collaboration in the
        Eclipse community in Italy and Europe.
      </li>
      <li>
        <b>SIG Eclipse </b> - The Java User Group Stuttgart (<a
          href="http://www.jugs.de/index.html" target="_blank">JUGS</a>)
        SIG Eclipse - <a href="http://www.jugs.de/sig-eclipse.html"
          target="_blank">http://www.jugs.de/sig-eclipse.html</a><br /> In
        der SIG Eclipse dreht sich alles um Eclipse. Eclipse als
        Entwicklungsumgebung, Eclipse als Rich Client Plattform, weitere
        Eclipse Projekte wie EMF, GEF usw.
      </li>
    </ul>
  </div>
  <div class="homeitem3col">
    <a id="foreign"></a>
    <h3>Foreign Language Sites</h3>
    <ul>
      <li>
        Chinese: <b>Eclipse-China Community</b> - <a
          href="http://eclipse-china.github.io" target="_blank">http://eclipse-china.github.io</a>
        A Chinese Eclipse community site.
      </li>
      <li>
        Chinese: <b>Chinese Eclipse Community</b> (CEC) - <a
          href="http://www.eclipseworld.org" target="_blank">http://www.eclipseworld.org</a>
        A professional Eclipse website that can help people using and
        developing Eclipse plugins in China.
      </li>
      <li>
        Danish: <b>Eclipse.dk</b> - <a href="http://eclipse.dk/"
          target="_blank"> http://eclipse.dk/</a> A Danish Eclipse
        community site.
      </li>
      <li>
        French: <b>eclipseTotale</b> - <a
          href="http://www.eclipsetotale.com/index.html" target="_blank">http://www.eclipsetotale.com/index.html</a><br />
        A French website dedicated to Eclipse and Websphere
      </li>
      <li>
        German: <b>Eclipse Plug-in Collection, Eclipse Magazin </b> - <a
          href="http://www.eclipse-magazin.de/plugins/" target="_blank">http://www.eclipse-magazin.de/plugins/</a><br />
        Eine Uebersicht ueber Eclipse Plug-ins erscheint im <i>Eclipse
        Magazin</i>.
      </li>
      <li>
        German: <b>EclipseProject.de</b> - <a
          href="http://www.eclipseproject.de/" target="_blank">http://www.eclipseproject.de/</a>
        A German language site created by the German Eclipse User
        Community, that includes news, forums, links and FAQs.
      </li>
      <li>
        Japanese: <b>Eclipse Japan</b> - <a
          href="http://www.eclipsewiki.net/eclipse/" target="_blank">http://www.eclipsewiki.net/eclipse/</a>
        A Japanese wiki on Eclipse!
      </li>
      <li>
        Japanese: <b>Eclipse-ml</b> - <a
          href="http://www.egroups.co.jp/group/eclipse-ml" target="_blank">
        http://www.egroups.co.jp/group/eclipse-ml</a> A mailing list in
        Japanese dedicated to Eclipse
      </li>
      <li>
        Japanese: <b>Nomura Research Institute, Ltd</b> - <a
          href="http://works.nri.co.jp/service/documents.html"
          target="_blank">http://works.nri.co.jp/service/documents.html</a>
        A website offering Japanese documents for developers. Topics
        include not only Eclipse, but also various plug-ins.
      </li>
      <li>
        Korean: <b>JLab</b> - <a href="http://www.jlab.net/"
          target="_blank">http://www.jlab.net/</a> A Korean language
        website built by the Korean Eclipse User Community.
      </li>
      <li>
        Korean: <b>Korean Eclipse Plug-in Developer Community</b> - <a
          href="http://cafe.naver.com/eclipseplugin.cafe" target="_blank">http://cafe.naver.com/eclipseplugin.cafe</a>
        The Korean Eclipse Plug-in Developer Community has an active
        community hoping to launch some useful plug-in projects.
      </li>
      <li>
        Spanish: <b>Platforma Eclipse</b> - <a
          href="http://plataformaeclipse.com/" target="_blank">http://plataformaeclipse.com/</a>
        A Spanish community site for online manuals and tutorials about
        Eclipse.
      </li>
    </ul>
  </div>
</div>
<div id="rightcolumn">
  <div class="sideitem">
    <h6>Quick Links</h6>
    <ul>
      <li><a href="#portals">Links to Eclipse Portals</a></li>
      <li><a href="#Community">Community Sites</a></li>
      <li><a href="#user">User Communities</a></li>
      <li><a href="#foreign">Foreign Language Sites</a></li>
    </ul>
  </div>
</div>