| <?php | 
 | /******************************************************************************* | 
 |  * Copyright (c) 2012 EclipseSource 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://www.eclipse.org/legal/epl-v10.html | 
 |  ******************************************************************************/ | 
 |  | 
 | class Builds { | 
 |  | 
 |   private $builds; | 
 |  | 
 |   function Builds( $version ) { | 
 |     $buildsDirectory = $_SERVER['DOCUMENT_ROOT'] . "/rap/_builds/"; | 
 |     $buildsFile = $buildsDirectory . "builds-" . $version . ".xml"; | 
 |     $this->builds = simplexml_load_file( $buildsFile ); | 
 |     if( ! $this->builds ) { | 
 |       trigger_error( "Could not initialize Builds object", E_USER_ERROR ); | 
 |     } | 
 |   } | 
 |  | 
 |   function findBuild( $buildName ) { | 
 |     $result = NULL; | 
 |     if( $buildName ) { | 
 |       $selectedBuilds = $this->builds->xpath( "/builds/build[@shortname = '" . $buildName . "']" ); | 
 |       if( count( $selectedBuilds ) === 1 ) { | 
 |         $result = new Build( $this, $selectedBuilds[ 0 ] ); | 
 |       } | 
 |     } | 
 |     return $result; | 
 |   } | 
 |  | 
 |   function getLastCompletedBuild() { | 
 |     $result = NULL; | 
 |     $selectedBuilds = $this->builds->xpath( "/builds/build[@status = 'completed']" ); | 
 |     if( count( $selectedBuilds ) > 0 ) { | 
 |       $result = new Build( $this, end( $selectedBuilds ) ); | 
 |     } | 
 |     return $result; | 
 |   } | 
 |  | 
 |   function getLastCompletedReleaseBuild() { | 
 |     $result = NULL; | 
 |     $selectedBuilds = $this->builds->xpath( "/builds/build[@status = 'completed' and ( @type = 'R' or @type = 'SR' ) ]" ); | 
 |     if( count( $selectedBuilds ) > 0 ) { | 
 |       $result = new Build( $this, end( $selectedBuilds ) ); | 
 |     } | 
 |     return $result; | 
 |   } | 
 |  | 
 |   function getPreviousBuilds( $buildName ) { | 
 |     $result = array(); | 
 |     foreach( $this->builds->build as $build ) { | 
 |       if( $build[ "shortname" ] == $buildName ) { | 
 |         break; | 
 |       } | 
 |       $result[] = new Build( $this, $build ); | 
 |     } | 
 |     return $result; | 
 |   } | 
 |  | 
 |   function getVersion() { | 
 |     return (string) $this->builds[ "version" ]; | 
 |   } | 
 |  | 
 |   function getSimultaneousRelease() { | 
 |     return (string) $this->builds[ "simultaneousRelease" ]; | 
 |   } | 
 |  | 
 |   function getUpdateSite( $featureId ) { | 
 |     $feature = $this->_getFeature( $featureId ); | 
 |     return $feature ? (string) $feature->site : NULL; | 
 |   } | 
 |  | 
 |   function getDescription( $featureId ) { | 
 |     $feature = $this->_getFeature( $featureId ); | 
 |     return $feature ? (string) $feature->description : NULL; | 
 |   } | 
 |  | 
 |   function _getFeature( $id ) { | 
 |     $features = $this->builds->xpath( "/builds/feature[@id = '" . $id . "']" ); | 
 |     return count( $features ) === 1 ? $features[ 0 ] : NULL; | 
 |   } | 
 |  | 
 | } | 
 |  | 
 | class Build { | 
 |  | 
 |   private $parent; | 
 |   private $build; | 
 |  | 
 |   function Build( $parent, $element ) { | 
 |     $this->parent = $parent; | 
 |     $this->build = $element; | 
 |   } | 
 |  | 
 |   function getName() { | 
 |     return (string) $this->build[ "name" ]; | 
 |   } | 
 |  | 
 |   function getShortName() { | 
 |     return (string) $this->build[ "shortname" ]; | 
 |   } | 
 |  | 
 |   function isCompleted() { | 
 |     return ( (string) $this->build[ "status" ] ) === "completed"; | 
 |   } | 
 |  | 
 |   function getPublishDate() { | 
 |     return (string) $this->build[ "publishDate" ]; | 
 |   } | 
 |  | 
 |   function getNews() { | 
 |     return (string) $this->build[ "news" ]; | 
 |   } | 
 |  | 
 |   function getReleaseNotes() { | 
 |     return (string) $this->build[ "relnotes" ]; | 
 |   } | 
 |  | 
 |   function getZipFile( $featureId ) { | 
 |     $feature = $this->parent->_getFeature( $featureId ); | 
 |     if( $feature ) { | 
 |       return (string) $this->build[ $featureId . "Zip" ]; | 
 |     } | 
 |     return NULL; | 
 |   } | 
 |  | 
 |   function getZipFileUrl( $featureId ) { | 
 |     $filename = $this->getZipFile( $featureId ); | 
 |     if( $filename ) { | 
 |       $feature = $this->parent->_getFeature( $featureId ); | 
 |       if( $feature ) { | 
 |         $featurePath = (string) $feature->downloadPath; | 
 |         $downloadPrefix = "http://www.eclipse.org/downloads/download.php?file="; | 
 |         return $downloadPrefix . $featurePath . $filename; | 
 |       } | 
 |     } | 
 |     return NULL; | 
 |   } | 
 |  | 
 |   function getType() { | 
 |     $result = NULL; | 
 |     if( $this->build[ "type" ] == "M" ) { | 
 |       $result = "Milestone Build"; | 
 |     } else if( $this->build[ "type" ] == "RC" ) { | 
 |       $result = "Release Candidate"; | 
 |     } else if( $this->build[ "type" ] == "R" ) { | 
 |       $result = "Release"; | 
 |     } else if( $this->build[ "type" ] == "SR" ) { | 
 |       $result = "Service Release"; | 
 |     } | 
 |     return $result; | 
 |   } | 
 |  | 
 |   function getTargetMilestones() { | 
 |     $result; | 
 |     if( $this->build[ "type" ] == "R" ) { | 
 |       $result = array(); | 
 |       foreach( $this->parent->getPreviousBuilds( "R" ) as $build ) { | 
 |         $result[] = $build->getName(); | 
 |       } | 
 |       $result[] = $this->build[ "name" ]; | 
 |     } else if( $this->build[ "type" ] == "SR" ) { | 
 |       $result = "sr" . str_replace( ".", "", $this->build[ "name" ] ); | 
 |     } else { | 
 |       $result = $this->build[ "name" ]; | 
 |     } | 
 |     return $result; | 
 |   } | 
 |  | 
 | } | 
 |  | 
 | ?> |