<?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
 *    Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<!-- Featured story and ad -->
<div class="featured-story featured-ece">
  <div class="container">
    <div class="row">
      <div class="col-sm-12 col-sm-offset-2 col-md-16 col-md-offset-0 featured-story-block" style="background-color:transparent;">
        <p class="featured-story-description">Recommended</p>
        <h2><strong>Call for Papers now open</strong></h2>
        <p><a href="https://www.eclipsecon.org/europe2018"><img class="ece-logo" src="/home/images/ece-osgi-logo.png"></a></p>
        <h3><strong>Submissions close July 16!</strong></h3>
        <p><a class="btn btn-secondary btn-lg" href="https://www.eclipsecon.org/europe2018/cfp">More Info</a></p>
      </div>
      <div class="col-sm-9 col-md-8 featured-ad featured-story-block">
        <div class="featured-ad-content">
          <?php print $Theme->getRandomPromo(TRUE);?>
          <p class="featured-story-description">Sponsored Ad</p>
        </div>
      </div>
    </div>
  </div>
</div>

<!-- Announcements and Community news -->
<div class="news-list news-list-match-height news-list-top-shape">
  <div class="container">
    <div class="row">
      <div class="col-lg-10 col-lg-offset-2 col-md-12 news-list-col padding-bottom-50">
        <div class="news-list-icon text-center"><i data-feather="activity" stroke-width="1"></i></div>
        <h2 class="text-center">Announcements</h2>
        <?php
          $Announcements = new FeedParser();
          $Announcements->addPath($_SERVER['DOCUMENT_ROOT'] . "/community/news/2005newsarchive.rss");
          $Announcements->setViewMoreLink('/community/news/eclipsenews.php');
          $Announcements->setRssLink('http://feeds.feedburner.com/eclipse/fnews');
          $Announcements->setLimit(120);
          print $Announcements->output();
        ?>
        <ul class="list-inline news-list-links">
          <li class="news-list-links-view-all"><a href="/community/news/eclipsenews.php?archive=true">View all</a></li>
          <li class="news-list-links-rss"><a href="http://feeds.feedburner.com/eclipse/fnews" title="Subscribe to our RSS-feed">Subscribe to our RSS-feed <i class="fa fa-rss"></i></a></li>
        </ul>
      </div>
      <div class="col-lg-10 col-md-12 news-list-col padding-bottom-50">
        <div class="news-list-icon text-center"><i data-feather="tv" stroke-width="1"></i></div>
        <h2 class="text-center">Community News</h2>
        <?php
          $Community = new FeedParser();
          $Community->addPath($_SERVER['DOCUMENT_ROOT'] . "/community/news/2005inthenewsarchive.rss");
          $Community->setViewMoreLink('/community/news/eclipseinthenews.php');
          $Community->setRssLink('http://feeds.feedburner.com/eclipse/cnews');
          $Community->setLimit(120);
          print $Community->output();
        ?>
        <ul class="list-inline news-list-links">
          <li class="news-list-links-view-all"><a href="/community/news/eclipseinthenews.php?archive=true">View all</a></li>
          <li class="news-list-links-rss"><a href="http://feeds.feedburner.com/eclipse/cnews" title="Subscribe to our RSS-feed">Subscribe to our RSS-feed <i class="fa fa-rss"></i></a></li>
        </ul>
      </div>
    </div>
  </div>
</div>