<?php
/**
 * 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:
 *   Denis Roy (Eclipse Foundation) - Initial implementation
 *   Christopher Guindon (Eclipse Foundation)
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */

$mainDownloadFile = $app->getPubDownloadServerUrl() . $_file;
$target      = "";
$mirror_id_prev = 0;
$ccode_prev   = "";

$mir_count     = 0;
$mir_internal_count  = 0;

$strFileName = $filename_fileonly;
$strlength = strlen($strFileName);
if ($strlength > 57) {
  $strFileName = substr($strFileName, 0, 30) . "..." . substr($strFileName, $strlength-30, 30);
}

$download_link = array(
  'url' => 'download.php?file=' . $_file,
  'text' => '',
  'icon' => '',
  'suffix' => ''
);

# Load up distros program if file selected is a Oxygen/SDK package
$packageName  = getPackageFromFilename($_file, "2020-03");
$osName = getOsFromFilename($_file);
$companies = array();

if ($packageName != "") {
  include("distros/distros.php");
  $companies = getCompanyArrayByPackage($packageName);
}

$mirror_id_list  = array();
$mirror_is_available = TRUE;

$commiter_link = '';
if (!$Session->getIsLoggedIn()) {
  $commiter_link = " Eclipse Committers can <a href='" . $Session->getLoginPageURL() . "'>log in</a> for faster download.";
}

# Bug 544049 - Support GeoLite2
# For now, we'll show the first mirror as "preferred" even if we don't know the country.
# if ($_country_code != "xx" && $myrow = mysql_fetch_assoc($rs)) {
if ($myrow = mysql_fetch_assoc($rs)) {
  // Preferred mirror
  $download_link['url'] .= "&mirror_id=" . $myrow['mirror_id'];
  $download_link['text'] = '' . $myrow['country_desc'] .' - ' . $myrow['organization'] .' (' . $myrow['protocol'] . ')';
}
else {
  // No mirrors :(
  $mirror_is_available = FALSE;
  if ($Friend->getIsCommitter()) {
    $download_link['url'] .= '&file_id=' . $file_id;
    $download_link['text'] = 'Canada - Committers & Friends fast download from Eclipse.org';
  }
  else {
    $download_link['url'] .= '&mirror_id=1';
    $download_link['text'] = 'Canada - Main Eclipse.org downloads area';
  }
}

$mirrors_internal = array();
$mirrors = array();
while ($myrow = mysql_fetch_assoc($rs)) {
  $mirror_link = array();
  $internal_mirror_flag = FALSE;
  if (!is_numeric(array_search($myrow['mirror_id'], $mirror_id_list))) {
    $mirror_id_list[count($mirror_id_list)] = $myrow['mirror_id'];
    $path = "download.php?file=" . $_file . "&mirror_id=" . $myrow['mirror_id'];

    if ($myrow['is_internal'] == 1 && $_file != "") {
      # Bypass stats for internal mirrors
      $path = $myrow['base_path'] . getPath($myrow['drop_id'], $_drop_id, $myrow['rel_path_override'], $myrow['our_path'], $myrow['our_path2']);
      $internal_mirror_flag = TRUE;
    }

    $mirror_link = array(
      'path' => $path,
      'country' =>$myrow['country_desc'],
      'target' => $target,
      'protocol' => $myrow['protocol'],
      'organization' => $myrow['organization']
    );

    if ($internal_mirror_flag) {
      $mirrors_internal[$myrow['continent_desc']][$myrow['mirror_id']][]  = $mirror_link;
    }
    else{
      $mirrors[$myrow['continent_desc']][$myrow['mirror_id']][] = $mirror_link;
    }
  }
}

function _print_mirror_list($mirrors = array()) {
  $html = '';
foreach ($mirrors as $mid_mirrors) {
    $html .= '<li class="margin-bottom-10">';
    foreach($mid_mirrors as $key => $m) {
      $link = '<a href="' . $m['path'] . '" target="' . $m['target']. '">';
      if ($key == 0) {
        $html .= $m['country'] . ' - ';
        //$html .= $link . $m['organization'] .' ('. $m['protocol'] .')</a>';
        $html .= $link . $m['organization'] .'</a>';
      }
      else{
        $html .= ' &#160; (' . $link . $m['protocol'] . '</a>)';
      }
    }
    $html .= '</li>'. PHP_EOL;
  }
  return $html;
}

$mirror_html = '';
if (!empty($mirrors)) {
ob_start();
?>
  <h2>Choose a mirror close to you</h2>
  <hr>
  <div class="choose-mirror">
    <?php $x = 0; ?>
    <?php foreach ($mirrors as $continent => $mir):?>
      <?php $x++; ?>
      <div class="mirror-continent mirror-section-<?php print $x;?>">
        <h3><?php print $continent?></h3>
        <ul class="list-unstyled">
          <?php print _print_mirror_list($mir);?>
       </ul>
      </div>
    <?php endforeach;?>
    <a class="btn btn-sm btn-primary" id="show_all_mirrors" href="#show_all_mirrors">Show all</a>
  </div>
  <div class="choose-mirror">
    <h3>Main Download Site</h3>
    <ul class="list-unstyled">
      <li>Canada - <a href="download.php?file=<?print $_file; ?>&mirror_id=1">Main eclipse.org downloads area</a></li>
    </ul>
  </div>
  <?php
  $mirror_html = ob_get_clean();
}
$members_html = "";
ob_start();

if (count($companies) > 0) {?>
  <h2 class="mirror-members-h2"><strong>OR</strong> Get It Faster from our Members</h2>
  <?php if (count($companies) > 0) :?>
    <div class="row">
    <?php foreach($companies as $company) :?>
      <?php $link = $company->linkTo . "@" . strtoupper($packageName . "-" . $osName);?>
      <div class="col-sm-8 text-center">
        <div class="mirror-well">
          <p><a href="<?php print $link;?>">
            <img class="mirror-logo" src="distros/images/<?php print $company->companyLogo;?>"/>
          </a></p>
          <h3 class="mirror-members-h3">
            <a href="<?php print $link;?>"><?php print $company->companyName;?></a>
          </h3>
          <p><?php print (strlen($company->companyBlurb) > 55) ? substr($company->companyBlurb, 0, 55) . '...' : $company->companyBlurb;?></p>

          <p><a href="<?php print $link;?>" class="btn btn-warning btn-xs">Get it</a></p>

        </div>
      </div>
    <?php endforeach;?>
    </div>
  <?php endif;?>
<?php
  }
$members_html = ob_get_clean();
?>


<div class="col-md-18">
  <p>All downloads are provided under the terms and conditions of the <a href="/legal/epl/notice.php">Eclipse Foundation
  Software User Agreement</a> unless otherwise specified.</p>
  <div class="row">
    <div class="col-md-24">
      <div class="mirror-well text-center">
        <a href="<?php print $download_link['url'];?>" class="btn btn-warning margin-bottom-15 btn-lg"><i class="fa fa-download"></i> Download</a>
        <?php if (!$mirror_is_available) :?>
          <p>There are no mirrors for this file.<?php print $commiter_link;?></p>
        <?php endif;?>

        <p><strong>Download from:</strong> <?php print $download_link['icon'];?> <?php print $download_link['text'];?><?php print $download_link['suffix'];?></p>
        <p><strong>File:</strong> <a href="<?php print $download_link['url'];?>" class="orange"><?php print $strFileName;?></a> <?php $sha512sum="nsuidbus"; if ($sha512sum != "") :?><a  class="btn btn-ajax-checksum btn-xs btn-default" data-checksum-file="<?php print $_file;?>" data-checksum-type="sha512" data-toggle="tab" role="tab" aria-controls="settings" href="#btn-ajax-checksum-sha512">SHA-512</a><?php endif;?></p>
        <?php if ($sha512sum != "") :?>
          <div class="tab-content">
          <div id="btn-ajax-checksum-sha512" class="tab-pane fade" role="tabpanel">
            <div class="well well-sha512">
             <p></p>
            </div>
          </div>
          </div>
        <?php endif;?>
        <p><a role="button" data-toggle="collapse" href="#collapseExample" aria-expanded="false" aria-controls="collapseExample">>> Select Another Mirror</a></p>
        <div class="collapse" id="collapseExample">
          <div class="well choose-mirror-well">
            <i class="fa fa-times-circle close-choose-mirror-well" aria-hidden="true"></i>
            <?php print $mirror_html; ?>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div class="row">
    <div class="download-faster col-md-24">
      <?php if (!empty($mirrors_internal)) :?>
        <div class="choose-mirror">
          <h2 class="mirror-members-h2">The following Internal Mirrors should be used for this file</h2>
          <?php foreach ($mirrors_internal as $continent => $mir):?>
            <h3><?php print $continent?></h3>
            <ul class="list-unstyled text-center">
              <?php print _print_mirror_list($mir);?>
            </ul>
          <?php endforeach;?>
        </div>
      <?php endif;?>
      <?php if (!empty($members_html)) :?>
        <?php print $members_html;?>
      <?php endif;?>
    </div>
  </div>
</div>
<div id="rightcolumn" class="col-sm-6">
  <div class="padding-top-10 padding-bottom-30">
    <?php print chooseRandomPromo();?>
  </div>
  <div class="sideitem">
    <h6>Other options for this file</h6>
    <ul>
      <li><a href="download.php?file=<?php print $_file; ?>">All mirrors</a> (<a href="download.php?file=<?php print $_file; ?>&format=xml">xml</a>)</li>
      <li><a href="download.php?file=<?php print $_file; ?>&r=1">Direct link to file</a> (download starts immediately from best mirror)</li>
    </ul>
  </div>
  <div class="sideitem">
    <h6>Related Links</h6>
    <ul>
      <li><a href="/donate/">Donate</a></li>
      <li><a href="mir_request.php">Becoming a mirror site</a></li>
      <li><a href="https://help.eclipse.org/2019-03/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-129.htm">Updating and installing Eclipse components</a></li>
      <li><a href="/forums/">Eclipse forums</a></li>
    </ul>
  </div>
</div>
