diff --git a/curweather/curweather.php b/curweather/curweather.php index 67d5939e7..9ad74b48a 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -1,13 +1,18 @@ - Find the location code for the station or airport nearest you here. - * Version: 1.0 + * Description: Shows current weather conditions for user's location on their network page. + * Version: 1.1 * Author: Tony Baldwin * Author: Fabio Comuni + * Author: Tobias Diekershoff * */ -require_once('addon/curweather/getweather.php'); +use Cmfcmf\OpenWeatherMap; +use Cmfcmf\OpenWeatherMap\Exception as OWMException; + +// Must point to composer's autoload file. +require('vendor/autoload.php'); function curweather_install() { register_hook('network_mod_init', 'addon/curweather/curweather.php', 'curweather_network_mod_init'); @@ -35,21 +40,45 @@ function curweather_network_mod_init(&$fk_app,&$b) { // the $rpt value is needed for location // which getweather uses to fetch the weather data for weather and temp $rpt = get_pconfig(local_user(), 'curweather', 'curweather_loc'); - $wxdata = GetWeather::get($rpt); - $temp = $wxdata['TEMPERATURE_STRING']; - $weather = $wxdata['WEATHER']; - $rhumid = $wxdata['RELATIVE_HUMIDITY']; - $pressure = $wxdata['PRESSURE_STRING']; - $wind = $wxdata['WIND_STRING']; - $curweather = '
-
-

'.t("Current Weather").'

'; - $curweather .= "Weather: $weather
- Temperature: $temp
- Relative Humidity: $rhumid
- Pressure: $pressure
- Wind: $wind"; + + // set the language to the browsers language and use metric units + $lang = $_SESSION['language']; + $units = get_pconfig( local_user(), 'curweather', 'curweather_units'); + $appid = get_config('curweather','appid'); + if ($units==="") + $units = 'metric'; + // Get OpenWeatherMap object. Don't use caching (take a look into + // Example_Cache.php to see how it works). + $owm = new OpenWeatherMap(); + + try { + $weather = $owm->getWeather($rpt, $units, $lang, $appid); + $temp = $weather->temperature->getValue(); + if ( $units === 'metric') { + $temp .= '°C'; + } else { + $temp .= '°F'; + }; + $rhumid = $weather->humidity; + $pressure = $weather->pressure; + $wind = $weather->wind->speed . " " . $weather->wind->direction; + $description = $weather->clouds->getDescription(); + } catch(OWMException $e) { + alert ( 'OpenWeatherMap exception: ' . $e->getMessage() . ' (Code ' . $e->getCode() . ').'); + } catch(\Exception $e) { + alert ('General exception: ' . $e->getMessage() . ' (Code ' . $e->getCode() . ').'); + } + + $curweather = '
+
+

'.t("Current Weather").': '.$weather->city->name.'

'; + + $curweather .= "$description; $temp
"; + $curweather .= t('Relative Humidity').": $rhumid
"; + $curweather .= t('Pressure').": $pressure
"; + $curweather .= t('Wind').": $wind
"; + $curweather .= ''. t('Data by').': OpenWeatherMap. '.t('Show on map').''; $curweather .= '
'; @@ -63,6 +92,7 @@ function curweather_plugin_settings_post($a,$post) { return; set_pconfig(local_user(),'curweather','curweather_loc',trim($_POST['curweather_loc'])); set_pconfig(local_user(),'curweather','curweather_enable',intval($_POST['curweather_enable'])); + set_pconfig(local_user(),'curweather','curweather_units',trim($_POST['curweather_units'])); info( t('Current Weather settings updated.') . EOL); } @@ -73,36 +103,50 @@ function curweather_plugin_settings(&$a,&$s) { if(! local_user()) return; - /* Add our stylesheet to the curweather so we can make our settings look nice */ - - $a->page['htmlhead'] .= '' . "\r\n"; - /* Get the current state of our config variable */ $curweather_loc = get_pconfig(local_user(), 'curweather', 'curweather_loc'); + $curweather_units = get_pconfig(local_user(), 'curweather', 'curweather_units'); + $appid = get_config('curweather','appid'); + if (x($appid)) { + $noappidtext = t('No APPID found, please contact your admin to optain one.'); + } else { + $noappidtext = ''; + } $enable = intval(get_pconfig(local_user(),'curweather','curweather_enable')); $enable_checked = (($enable) ? ' checked="checked" ' : ''); - - /* Add some HTML to the existing form */ - - $s .= '
'; - $s .= '

' . t('Current Weather') . '

'; - $s .= '
'; - $s .= '

Find the location code for the airport/weather station nearest you here.

'; - $s .= ''; - $s .= ''; - $s .= '
'; - $s .= ''; - $s .= ''; - $s .= '
'; - - $s .= '
'; - - /* provide a submit button */ - - $s .= '
'; + // load template and replace the macros + $t = get_markup_template("settings.tpl", "addon/curweather/" ); + $s = replace_macros ($t, array( + '$submit' => t('Save Settings'), + '$header' => t('curweather Settings'), + '$noappidtext' => t('No APPID found, please contact your admin to optain one.'), + '$info' => t('Enter either the name of your location or the zip code.'), + '$curweather_loc' => array( 'curweather_loc', t('Your Location'), $curweather_loc, t('Identifier of your location (name or zip code), e.g. Berlin,DE or 14476,DE.') ), + '$curweather_units' => array( 'curweather_units', t('Units'), $curweather_units, t('select if the temperatur should be displayed in °C or °F'), array('metric'=>'°C', 'imperial'=>'°F')), + '$enabled' => array( 'curweather_enable', t('Show weather data'), $enable, '') + )); + return; } - - +// Config stuff for the admin panel to let the admin of the node set a APPID +// for accessing the API of openweathermap +function curweather_plugin_admin_post (&$a) { + if(! is_site_admin()) + return; + if ($_POST['curweather-submit']) { + set_config('curweather','appid',trim($_POST['appid'])); + info( t('Curweather settings saved.'.EOL)); + } +} +function curweather_plugin_admin (&$a, &$o) { + if(! is_site_admin()) + return; + $appid = get_config('curweather','appid'); + $t = get_markup_template("admin.tpl", "addon/curweather/" ); + $o = replace_macros ($t, array( + '$submit' => t('Save Settings'), + '$appid' => array('appid', t('Your APPID'), $appid, t('Your API key provided by OpenWeatherMap')) + )); +}