- if (file_exists(CONST_BasePath.'/settings/configuration.txt')) echo "settings/configuration.txt already exists\n";
- else passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_BasePath.'/settings');
-
- $sDate = $aCMDResult['osmosis-init-date'];
- $aDate = date_parse_from_format("Y-m-d\TH-i", $sDate);
- $sURL = 'http://toolserver.org/~mazder/replicate-sequences/?';
- $sURL .= 'Y='.$aDate['year'].'&m='.$aDate['month'].'&d='.$aDate['day'];
- $sURL .= '&H='.$aDate['hour'].'&i='.$aDate['minute'].'&s=0';
- $sURL .= '&stream=minute';
- echo "Getting state file: $sURL\n";
- $sStateFile = file_get_contents($sURL);
+ if (file_exists(CONST_BasePath.'/settings/configuration.txt'))
+ {
+ echo "settings/configuration.txt already exists\n";
+ }
+ else
+ {
+ passthru(CONST_Osmosis_Binary.' --read-replication-interval-init '.CONST_BasePath.'/settings');
+ // server layout changed afer license change, fix path to minutely diffs
+ passthru("sed -i 's:minute-replicate:replication/minute:' ".CONST_BasePath.'/settings/configuration.txt');
+ }
+
+ // Find the last node in the DB
+ $iLastOSMID = $oDB->getOne("select max(osm_id) as osm_id from place where osm_type = 'N'");
+
+ // Lookup the timestamp that node was created (less 3 hours for margin for changsets to be closed)
+ $sLastNodeURL = 'http://www.openstreetmap.org/api/0.6/node/'.$iLastOSMID;
+ $sLastNodeXML = file_get_contents($sLastNodeURL);
+ preg_match('#timestamp="(([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})Z)"#', $sLastNodeXML, $aLastNodeDate);
+ $iLastNodeTimestamp = strtotime($aLastNodeDate[1]) - (3*60*60);
+
+
+ // Search for the correct state file - uses file timestamps
+ $sRepURL = 'http://planet.openstreetmap.org/replication/minute/';
+ $sRep = file_get_contents($sRepURL);
+ preg_match_all('#<a href="[0-9]{3}/">([0-9]{3}/)</a> *(([0-9]{2})-([A-z]{3})-([0-9]{4}) ([0-9]{2}):([0-9]{2}))#', $sRep, $aRepMatches, PREG_SET_ORDER);
+ $aPrevRepMatch = false;
+ foreach($aRepMatches as $aRepMatch)
+ {
+ if (strtotime($aRepMatch[2]) < $iLastNodeTimestamp) break;
+ $aPrevRepMatch = $aRepMatch;
+ }
+ if ($aPrevRepMatch) $aRepMatch = $aPrevRepMatch;
+
+ $sRepURL .= $aRepMatch[1];
+ $sRep = file_get_contents($sRepURL);
+ preg_match_all('#<a href="[0-9]{3}/">([0-9]{3}/)</a> *(([0-9]{2})-([A-z]{3})-([0-9]{4}) ([0-9]{2}):([0-9]{2}))#', $sRep, $aRepMatches, PREG_SET_ORDER);
+ $aPrevRepMatch = false;
+ foreach($aRepMatches as $aRepMatch)
+ {
+ if (strtotime($aRepMatch[2]) < $iLastNodeTimestamp) break;
+ $aPrevRepMatch = $aRepMatch;
+ }
+ if ($aPrevRepMatch) $aRepMatch = $aPrevRepMatch;
+
+ $sRepURL .= $aRepMatch[1];
+ $sRep = file_get_contents($sRepURL);
+ preg_match_all('#<a href="[0-9]{3}.state.txt">([0-9]{3}).state.txt</a> *(([0-9]{2})-([A-z]{3})-([0-9]{4}) ([0-9]{2}):([0-9]{2}))#', $sRep, $aRepMatches, PREG_SET_ORDER);
+ $aPrevRepMatch = false;
+ foreach($aRepMatches as $aRepMatch)
+ {
+ if (strtotime($aRepMatch[2]) < $iLastNodeTimestamp) break;
+ $aPrevRepMatch = $aRepMatch;
+ }
+ if ($aPrevRepMatch) $aRepMatch = $aPrevRepMatch;
+
+ $sRepURL .= $aRepMatch[1].'.state.txt';
+ echo "Getting state file: $sRepURL\n";
+ $sStateFile = file_get_contents($sRepURL);