<?
/**
 * Copyright (c) 2015, 2018 Eclipse Foundation.
 *
 * 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:
 *   Nathan Gervais (Eclipse Foundation) - Initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/smartconnection.class.php");
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/projects/projectInfoList.class.php");

function findHeliosRelease($releases) {
  $retval = array();
  foreach ($releases as $rr) {
    $earlydate = strtotime("2010-06-21");
    $latedate = strtotime("2010-07-01");
    $date = strtotime($rr->date);
    if (($date >= $earlydate) && ($date <= $latedate)) {
      $retval['version'] = $rr->name;
    }
  }
  return $retval;
}

function projectTable() {
  ob_start();
  ?>
<table cellspacing=0 class="webinars">
  <tr class="header">
    <td width="35%">Project Name</td>
    <td width="12%" align="center">Version</td>
    <td width="10%" align="center">Project Summary</td>
     <? /*<td class="tableHeader" width="12%" align="center">New And Noteworthy</td>*/ ?>
     <td width="12%" align="center">Download</td>
  </tr>
  <?
  $projectInfoList = new projectInfoList();
  $projectInfoList->selectProjectInfoList(NULL, 'simultaneousrelease', 'helios', 1);
  $projectInfoList->alphaSortList();

  $numProjects = $projectInfoList->getCount();

  for ($i = 0; $i < $numProjects; $i++) {
    $projectInfoIterator = $projectInfoList->getItemAt($i);
    $projectName = $projectInfoIterator->projectname;
    $projectid = $projectInfoIterator->projectid;
    $projectShortName = $projectInfoIterator->projectshortname;
    $download = $projectInfoIterator->downloadsurl;
    $url = $projectInfoIterator->projecturl;
    $releases = $projectInfoIterator->releases;
    $downloadurl = $projectInfoIterator->downloadsurl;
    $releaseInfo = str_replace('\"', '', findHeliosRelease($releases));
    if ($projectName != "") {
      ?>	<tr class="tableRow">
    <td><b><a href="<?=$url;?>"><?=$projectName;?></a></b></td>
    <td align="center"><?=$releaseInfo['version'];?></td>
    <td align="center"><a
      href="http://www.eclipse.org/projects/project_summary.php?projectid=<?=$projectid;?>"
    ><img src="images/homepage.gif"></a></td>
    <td align="center"><? if ($downloadurl != "") {?><a
      href="<?=$downloadurl;?>"
    >Download</a> <? } ?></td>
  </tr> <?

}
  }
  ?>
  </table>
<?
  $html = ob_get_contents();
  ob_end_clean();

  return $html;
} ?>
