diff --git a/gcal-import-admin.php b/gcal-import-admin.php
index 0d33e6b..889d388 100644
--- a/gcal-import-admin.php
+++ b/gcal-import-admin.php
@@ -128,7 +128,7 @@ function gcal_geocoding_setting_string() {
),
array(
'option' => 'official',
- 'name' => 'Google official - in Entwicklung; erfordert einen API Key --> ',
+ 'name' => 'Google official - erfordert einen API Key --> ',
),
array(
'option' => 'inofficial',
@@ -144,7 +144,7 @@ function gcal_geocoding_setting_string() {
$checked = ( $current == $coder['option'] ? 'checked' : '' );
echo ' ' . $coder['name'];
if ( $coder['option'] == 'official' ) {
- echo '';
+ echo '';
}
echo '' ;
diff --git a/gcal-import-geocode.php b/gcal-import-geocode.php
index b8c80be..6583dae 100644
--- a/gcal-import-geocode.php
+++ b/gcal-import-geocode.php
@@ -136,19 +136,22 @@ Suchen: if ( isset ( $options['geocache']['hashx'] ) ) ...
function gcal_import_geocode_official($location) {
$options = get_option('gcal_options');
- $apikey = $options['apikey'];
- if ( empty ($apikey) ) { // ??? we should handle this in the admin frontend.
+ if ( ! isset ( $options['gcal_apikey'] ) || '' == $options['gcal_apikey'] ) { // ??? we should handle this in the admin frontend.
gcal_error_log ("WARN: using Google official geocoding but provided no APIKEY");
return array ('','');
} else {
+ $apikey = $options['gcal_apikey'];
$location = urlencode($location);
-
+ $useragent = 'Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0';
// https://developers.google.com/maps/documentation/geocoding/start
$url = "https://maps.googleapis.com/maps/api/geocode/json?address=$location&key=$apikey";
- $response = wp_remote_get($url);
- $json = wp_remote_retrieve_body($response);
- $http_code = wp_remote_retrieve_response_code($response);
- // we need to catch errors, e.g. wrong APIKEY, like this:
+
+ $response = curl_get_remote($url);
+ $decoded = json_decode($response, true);
+ $lat = $decoded['results']['0']['geometry']['location']['lat'];
+ $lon = $decoded['results']['0']['geometry']['location']['lng'];
+ gcal_error_log ("INFO: " . __FUNCTION__ . " found lat $lat lon $lon");
+ return array ($lat, $lon);
/*
{
"error_message" : "The provided API key is invalid.",
@@ -156,13 +159,6 @@ function gcal_import_geocode_official($location) {
"status" : "REQUEST_DENIED"
}
*/
-
- // https://www.php.net/manual/en/function.json-decode.php
- $decoded = json_decode($json, true);
- $file = dirname (__FILE__) . '/json-decoded.txt';
- // should be results->geometry->location->lat/lng.
- file_put_contents ($file, var_export ($decoded, TRUE));
- return array ('','');
}
}
diff --git a/gcal-import-worker.php b/gcal-import-worker.php
index 2a26535..1b7df6b 100644
--- a/gcal-import-worker.php
+++ b/gcal-import-worker.php
@@ -7,7 +7,7 @@ defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
// we'll set this as category => proxy, link => link, active => 0;
// in the admin page, all entries will be displayed with a checkbox for activating, deactivating, deleting.
-require_once dirname ( __FILE__ ) . "/gcal-import-geocode.php";
+require_once __DIR__ . "/gcal-import-geocode.php";
/**
@@ -100,16 +100,36 @@ The update and delete logic goes as follows:
add_action( 'gcal_import_worker_hook', 'gcal_import_worker' );
-require_once dirname (__FILE__) . '/icalparser/src/IcalParser.php';
-require_once dirname (__FILE__) . '/icalparser/src/Recurrence.php';
-require_once dirname (__FILE__) . '/icalparser/src/Freq.php';
-require_once dirname (__FILE__) . '/icalparser/src/WindowsTimezones.php';
+require_once __DIR__ . '/icalparser/src/IcalParser.php';
+require_once __DIR__ . '/icalparser/src/Recurrence.php';
+require_once __DIR__ . '/icalparser/src/Freq.php';
+require_once __DIR__ . '/icalparser/src/WindowsTimezones.php';
+
+
+function curl_get_remote($url) {
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_HEADER, false);
+ $response = curl_exec($ch);
+ if ( curl_errno($ch) ) {
+// $info = curl_getinfo($ch);
+ $message = __FUNCTION__ . ": cURL error " . curl_error($ch);
+// gcal_error_log ("WARN: $message");
+ curl_close($ch);
+ throw new \RuntimeException($message);
+ }
+ curl_close($ch);
+ // now we're sure we have a valid response:
+ return ($response);
+}
+
function gcal_import_do_import($category, $link) {
$my_latlon = array('', '');
$cal = new \om\IcalParser();
- $results = $cal->parseFile($link);
+ $results = $cal->parseString(curl_get_remote($link));
// TODO: Fehlerbehandlung, wenn der Link kaputt ist. Muss graceful passieren.
// icalparser nutzt intern file_get_contents, und da kommt man nicht ohne weiteres ran. Evtl. ändern auf curl?
@@ -286,13 +306,10 @@ function gcal_import_do_import($category, $link) {
// and update the _created field
update_post_meta ( $id, '_gcal_created', $lastmodified );
gcal_error_log ("INFO: updated post $post_id");
- } elseif ( $lastmodified == $created ) {
- // it was not modified after we created it, so we only update the recent tag.
} elseif ( $lastmodified < $created ) {
// iiiiek! A time reversal or a secret time machine! That should not happen!
gcal_error_log ("WARN: post $id last-modified : created $lastmodified < $created ");
- }
- // and set the event to recent = true no matter what.
+ } // else both are equal, and we do nothing except setting recent to true.
update_post_meta ( $id, '_gcal_recent', 'true' );
}
} else {