<?php
/*******************************************************************************
 * Copyright (c) 2015 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://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Denis Roy (Eclipse Foundation) - Initial implementation
 *    Christopher Guindon (Eclipse Foundation)
 *******************************************************************************/

$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);
}

$friends_html = getFriendsHTML();

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

# Load up distros program if file selected is a Galileo/SDK package
$packageName  = getPackageFromFilename($_file, "neon");
$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.";
}

if ($Friend->getIsBenefit()) {
  // Friends of Eclipse
  $download_link['url'] .= "&mirror_id=2";
  $download_link['text'] = 'Friends of Eclipse Mirror';
  $download_link['icon'] = '<i class="fa fa-star orange"></i>';
}
elseif ($_country_code != "xx" && $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;
}

function getFriendsHTML() {

  $friendsHTML = "";
  global $Friend, $Session;

  if(!$Friend->getIsBenefit()) {
    $loginstring = "";
    if($Session->getGID() == "") {
      $loginstring = ' <i class="fa fa-star orange"></i> <a href="http://dev.eclipse.org/site_login">Friends login</a>';
    }
    $friendsHTML .= <<<EOHTML
<div class="choose-mirror">
  <h3>Friends of Eclipse Mirror</h3>
  <ul class="list-unstyled">
    <li><i class="fa fa-star orange"></i> Canada - Friends of Eclipse Mirror <i class="fa fa-star orange"></i>
    <a href="/donate">Become a Friend!</a>$loginstring
    </li>
  </ul>
</div>
EOHTML;
  }
  return $friendsHTML;
}
$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>
  <?php if (count($companies) > 0) :?>
    <?php print $friends_html;?>
  <?php endif;?>
  <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) > 40) ? substr($company->companyBlurb, 0, 40) . '...' : $company->companyBlurb;?></p>

          <p><a href="<?php print $link;?>" class="mirror-download-btn orange"><i class="fa fa-plus-circle" aria-hidden="true"></i></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)) :?>
        <div class="text-center"><?php print $friends_html; ?></div>
      <?php else:?>
          <?php print $members_html;?>
      <?php endif;?>
    </div>
  </div>
</div>
<div id="rightcolumn">
  <div class="padding-top-10">
    <?php print chooseRandomPromo();?>
  </div>
  <div class="sideitem">
    <h6>Other options for this file</h6>
    <ul>
      <li><a href="download.php?file=<?print $_file; ?>">All mirrors</a> (<a href="download.php?file=<?print $_file; ?>&format=xml">xml</a>)</li>
      <li><a href="download.php?file=<?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">Friends of Eclipse</a></li>
      <li><a href="mir_request.php">Becoming a mirror site</a></li>
      <li><a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-129.htm">Updating and installing Eclipse components</a></li>
      <li><a href="/newsgroups">Eclipse newsgroups</a></li>
    </ul>
  </div>
</div>
<div class="text-center padding-top-15 padding-bottom-10 col-md-24 clearfix">
  <script type="text/javascript"><!--
  google_ad_client = "pub-6797025590085056";
  /* 468x60, created 5/28/08 */
  google_ad_slot = "9054930060";
  google_ad_width = 468;
  google_ad_height = 60;
  //-->
  </script>
  <script type="text/javascript" src="//pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  </div>