|  | <?php | 
|  | /** | 
|  | * Copyright (c) 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: | 
|  | * Christopher Guindon (Eclipse Foundation) - Initial implementation | 
|  | * | 
|  | * SPDX-License-Identifier: EPL-2.0 | 
|  | */ | 
|  |  | 
|  | if (basename(__FILE__) == basename($_SERVER['PHP_SELF'])) { | 
|  | exit(); | 
|  | } | 
|  |  | 
|  | require_once (realpath(dirname(__FILE__) . "/../../system/app.class.php")); | 
|  |  | 
|  | /** | 
|  | * Compare packages | 
|  | * | 
|  | * Migrated from downloads.git | 
|  | * | 
|  | * @author chrisguindon | 
|  | */ | 
|  | class ComparePackages { | 
|  | private $App = NULL; | 
|  | protected $os_display = ''; | 
|  | protected $display = ''; | 
|  | private $platform = array(); | 
|  | private $legend = array(); | 
|  | private $devmode = FALSE; | 
|  | private $images = array( | 
|  | 0 => '', | 
|  | 1 => array( | 
|  | 'included', | 
|  | 'check.jpg' | 
|  | ), | 
|  | // 2 => array('partially included', 'checkpartial.jpg'), | 
|  | 2 => array( | 
|  | 'Included (with Source)', | 
|  | 'checksource.jpg' | 
|  | ) | 
|  | ); | 
|  | protected $release = 'photon'; | 
|  | private $header = array(); | 
|  | private $header_strip = array( | 
|  | '(includes Incubating components)', | 
|  | 'Eclipse IDE for ', | 
|  | 'Eclipse for ', | 
|  | 'Eclipse IDE for ', | 
|  | 'Developers', | 
|  | 'Software', | 
|  | 'Eclipse' | 
|  | ); | 
|  | private $row = array(); | 
|  | private $path_xml_download = '/home/data/httpd/writable/community/'; | 
|  | protected $features_accepted = array(); | 
|  | protected $features_list = array(); | 
|  | private $path_xml_packages = 'Win.xml'; | 
|  | private $prefix_package = ''; | 
|  | public $protocol = 'http'; | 
|  |  | 
|  | public function __construct($App = NULL) { | 
|  | if (!is_a($App, 'App')) { | 
|  | $App = new App(); | 
|  | } | 
|  | $this->App = $App; | 
|  |  | 
|  | if (!empty($this->App->devmode) && $this->App->devmode == TRUE) { | 
|  | $this->path_xml_download = $_SERVER['DOCUMENT_ROOT'] . '/downloads-xml/'; | 
|  | } | 
|  | $this->protocol = $this->App->getHTTPPrefix(); | 
|  | $this->setupPlatform($this->App); | 
|  | $this->features_accepted = $this->getFeaturesXml(); | 
|  |  | 
|  | $this->setPrefixPackage('release'); | 
|  | $this->setRelease('latest'); | 
|  | } | 
|  |  | 
|  | public function setRelease($release) { | 
|  | $releases = array( | 
|  | 'juno', | 
|  | 'kepler', | 
|  | 'luna', | 
|  | 'mars', | 
|  | 'neon', | 
|  | 'oxygen', | 
|  | 'photon', | 
|  | '2018-09', | 
|  | 'latest' | 
|  | ); | 
|  | if (in_array($release, $releases)) { | 
|  | $this->release = $release; | 
|  | $this->features_list = $this->getFeaturesList(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public function getLegend() { | 
|  | foreach ($this->images as $id => $i) { | 
|  | $this->legend[] = $this->getLegendImage($id); | 
|  | } | 
|  | return implode(' ', $this->legend); | 
|  | } | 
|  |  | 
|  | public function setPrefixPackage($prefix) { | 
|  | $this->prefix_package = $prefix . 'Cache'; | 
|  | $this->prepareDownloads(); | 
|  | } | 
|  |  | 
|  | function getOs() { | 
|  | return $this->os_display; | 
|  | } | 
|  |  | 
|  | protected function prepareDownloads() { | 
|  | $od = $this->os_display; | 
|  | if ($od == "linux" || $od == "linux-x64") { | 
|  | $this->display = "Linux"; | 
|  | $this->updatePackages($this->prefix_package . "Linux.xml"); | 
|  | } | 
|  | elseif ($od == "macosx" || $od == "cocoa64") { | 
|  | $this->display = "macOS"; | 
|  | $this->updatePackages($this->prefix_package . "Cocoa.xml"); | 
|  | } | 
|  | elseif ($od == "carbon") { | 
|  | $this->display = "macOS"; | 
|  | $this->updatePackages($this->prefix_package . "Carbon.xml"); | 
|  | } | 
|  | else { | 
|  | $this->display = "Windows"; | 
|  | $this->updatePackages($this->prefix_package . "Win.xml"); | 
|  | } | 
|  | } | 
|  |  | 
|  | public function updatePackages($path) { | 
|  | $this->path_xml_packages = $path; | 
|  | $packages = simplexml_load_file($this->path_xml_download . $this->path_xml_packages, NULL, LIBXML_NOCDATA); | 
|  | $this->packages = $this->hackPackages($packages); | 
|  | } | 
|  |  | 
|  | public function getPackages($package = NULL) { | 
|  | foreach ($this->packages as $p) { | 
|  | if ($p['package_bugzilla_id'] == $package) { | 
|  | return $p; | 
|  | } | 
|  | } | 
|  | return $this->packages; | 
|  | } | 
|  |  | 
|  | public function getReadableFeature($id = NULL) { | 
|  | if (is_null($id) || $id == "" || empty($this->features_list[$id])) { | 
|  | return FALSE; | 
|  | } | 
|  | $this->features_list[$id]['name'] = (substr($this->features_list[$id]['name'], 0, 8) == 'Eclipse ') ? str_replace('Eclipse ', '', $this->features_list[$id]['name']) : $this->features_list[$id]['name']; | 
|  | if ($this->features_list[$id]['name'] == "%feature.label") { | 
|  | return FALSE; | 
|  | } | 
|  | return $this->features_list[$id]; | 
|  | } | 
|  |  | 
|  | public function output() { | 
|  | $this->getPackageData(); | 
|  | ob_start(); | 
|  | ?> | 
|  | <table id="compareTable" class="table"> | 
|  | <thead> | 
|  | <tr> | 
|  | <?php | 
|  | foreach ($this->header as $t) { | 
|  | print $t; | 
|  | } | 
|  | ?> | 
|  | </tr> | 
|  | </thead> | 
|  | <tbody> | 
|  | <?php | 
|  | $count = 0; | 
|  | foreach ($this->row as $t) { | 
|  | $count++; | 
|  | print '<tr id="row-' . $count . '">'; | 
|  | foreach ($t as $c) { | 
|  | print $c; | 
|  | } | 
|  | print '</tr>'; | 
|  | } | 
|  | ?> | 
|  | </tbody> | 
|  | </table> | 
|  | <?php | 
|  | return ob_get_clean(); | 
|  | } | 
|  |  | 
|  | private function getFeaturesXml() { | 
|  | // feature restriction | 
|  | $url = simplexml_load_file($this->path_xml_download . 'featuresRestriction.xml'); | 
|  | $json = json_encode($url); | 
|  | return json_decode($json, TRUE); | 
|  | } | 
|  |  | 
|  | private function getFeaturesList() { | 
|  | // readable features | 
|  | $url = $this->path_xml_download . 'features' . ucfirst($this->release) . '.json'; | 
|  | $json = json_decode(file_get_contents($url), TRUE); | 
|  | return $this->renameFeatures($json); | 
|  | } | 
|  |  | 
|  | private function hackPackages($p) { | 
|  |  | 
|  | // adding RCP to all packages. | 
|  | foreach ($p->package as $f) { | 
|  | $ex = explode(',;', $f->features); | 
|  | if (!in_array('org.eclipse.rcp', $ex)) { | 
|  | $f->features = $f->features . 'org.eclipse.rcp,;'; | 
|  | } | 
|  |  | 
|  | // Scout | 
|  | if ($f['icon'] == 'http://www.eclipse.org/downloads/images/scout.jpg') { | 
|  | $f->features = $f->features . 'org.eclipse.scout.source,;'; | 
|  | } | 
|  |  | 
|  | if ($f['icon'] == 'http://www.eclipse.org/downloads/images/dsl-package.jpg') { | 
|  | $f->features = $f->features . 'org.eclipse.rcp.source,;org.eclipse.cvs.source,;org.eclipse.jdt.source,;org.eclipse.pde.source,;org.eclipse.xtend.sdk.source,;org.eclipse.xtext.sdk.source'; | 
|  | } | 
|  | $count = 1; | 
|  | $f['icon'] = str_replace('http://www.eclipse.org', '', $f['icon'], $count); | 
|  | $f['id'] = $f['package_bugzilla_id']; | 
|  | $f['url'] = str_replace('http:', '', $f['url'], $count); | 
|  | $f['downloadurl'] = str_replace('http:', '', $f['downloadurl'], $count); | 
|  | $f['downloadurl64'] = str_replace('http:', '', $f['downloadurl64'], $count); | 
|  | } | 
|  |  | 
|  | return $p; | 
|  | } | 
|  |  | 
|  | private function renameFeatures($f) { | 
|  | return $f; | 
|  | } | 
|  |  | 
|  | private function getPackageData() { | 
|  | $count = 0; | 
|  |  | 
|  | $this->header[] = '<td class="col-' . $count . '"></td>'; | 
|  | $this->row['radio'][] = '<td id="td_info" class="col-' . $count . '"><span>Select packages to compare</span></td>'; | 
|  |  | 
|  | // Setting up the first two rows | 
|  | foreach ($this->packages->package as $p) { | 
|  | $count++; | 
|  | $name = str_replace(' and ', '/', str_replace($this->header_strip, '', $p['name'])); | 
|  | $this->row['radio'][] = '<td class="col-' . $count . '"><input type="checkbox" name="controls" id="controls-' . $count . '" value="col-' . $count . '" class="input-radio"/></td>'; | 
|  | $this->header[] = '<td class="col-' . $count . '"><a href="' . $this->protocol . '://eclipse.org' . $p['url'] . '" title="' . $p['name'] . '"><img width="32" src="' . $p['icon'] . '"><br/>' . $name . '</a></td>'; | 
|  | } | 
|  |  | 
|  | // creating a row from each feature | 
|  | foreach ($this->features_accepted['item'] as $a) { | 
|  | $count = 0; | 
|  | $multif = explode(';', $a); | 
|  | $rfeatures = $this->getReadableFeature($multif[0]); | 
|  | if (empty($rfeatures)) { | 
|  | continue; | 
|  | } | 
|  | $this->row[$multif[0]][] = '<td class="td_feature-name col-' . $count . '"><span title="' . $rfeatures['description'] . '">' . $rfeatures['name'] . '</span></td>'; | 
|  | foreach ($this->packages->package as $p) { | 
|  | $count++; | 
|  | $xfeatures = explode(",;", $p->features); | 
|  | foreach ($multif as $aa) { | 
|  | if (!empty($this->features_list[$aa]['id']) && in_array($this->features_list[$aa]['id'] . '.source', $xfeatures)) { | 
|  | $img = 2; | 
|  | break; | 
|  | } | 
|  | elseif (in_array($aa, $xfeatures)) { | 
|  | $img = 1; | 
|  | break; | 
|  | /* | 
|  | * }elseif ($a == 'org.eclipse.rcp'){ | 
|  | * $img = 1; | 
|  | */ | 
|  | } | 
|  | else { | 
|  | $img = 0; | 
|  | } | 
|  | } | 
|  | $this->row[$multif[0]][] = '<td class="col-' . $count . '">' . $this->getLegendImage($img) . '</td>'; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | private function getLegendImage($id = 0) { | 
|  | if (!$id) { | 
|  | return ' '; | 
|  | } | 
|  |  | 
|  | $image_prefix = '/downloads/images/'; | 
|  | return '<img width="16" src="' . $image_prefix . $this->images[$id][1] . '" alt="' . $this->images[$id][0] . '"><span class="check-description">' . $this->images[$id][0] . '</span>'; | 
|  | } | 
|  |  | 
|  | public function getRelease() { | 
|  | return $this->release; | 
|  | } | 
|  |  | 
|  | private function setupPlatform($App) { | 
|  | $this->os_display = (!isset($_GET['osType'])) ? $this->App->getClientOS() : $_GET['osType']; | 
|  | if ($this->os_display == 'linux-x64') { | 
|  | $this->os_display = 'linux'; | 
|  | } | 
|  |  | 
|  | // default to win32 if $this->App->getClientOS() is returning something | 
|  | // strange. | 
|  | $platform = array( | 
|  | 'win32', | 
|  | 'linux', | 
|  | 'macosx' | 
|  | ); | 
|  | if (!in_array($this->os_display, $platform)) { | 
|  | $this->os_display = 'win32'; | 
|  | } | 
|  |  | 
|  | $this->platform['win32'] = array( | 
|  | 'name' => 'Windows', | 
|  | 'shortname' => 'Windows' | 
|  | ); | 
|  | $this->platform['linux'] = array( | 
|  | 'name' => 'Linux', | 
|  | 'shortname' => 'Linux' | 
|  | ); | 
|  | $this->platform['macosx'] = array( | 
|  | 'name' => 'macOS', | 
|  | 'shortname' => 'macOS' | 
|  | ); | 
|  | } | 
|  | } |