2015-07-11 20:59:00 +02:00
< ? php
2013-02-11 18:49:19 +01:00
/**
* Name : Current Weather
2015-07-11 20:59:00 +02:00
* Description : Shows current weather conditions for user ' s location on their network page .
* Version : 1.1
2013-02-11 18:49:19 +01:00
* Author : Tony Baldwin < http :// friendica . tonybaldwin . info / u / t0ny >
* Author : Fabio Comuni < http :// kirkgroup . com / u / fabrixxm >
2015-07-11 20:59:00 +02:00
* Author : Tobias Diekershoff < https :// f . diekershoff . de / u / tobias >
2013-02-11 18:49:19 +01:00
*
*/
2015-07-11 20:59:00 +02:00
use Cmfcmf\OpenWeatherMap ;
2015-07-12 08:18:24 +02:00
use Cmfcmf\OpenWeatherMap\AbstractCache ;
2015-07-11 20:59:00 +02:00
use Cmfcmf\OpenWeatherMap\Exception as OWMException ;
// Must point to composer's autoload file.
require ( 'vendor/autoload.php' );
2015-07-13 11:22:51 +02:00
//require('addon/curweather/openweathermap-php-api/Cmfcmf/OpenWeatherMap.php');
//require('addon/curweather/vendor/cmfcmf/openweathermap-php-api/Cmfcmf/OpenWeatherMap.php');
2013-02-11 18:49:19 +01:00
function curweather_install () {
register_hook ( 'network_mod_init' , 'addon/curweather/curweather.php' , 'curweather_network_mod_init' );
register_hook ( 'plugin_settings' , 'addon/curweather/curweather.php' , 'curweather_plugin_settings' );
register_hook ( 'plugin_settings_post' , 'addon/curweather/curweather.php' , 'curweather_plugin_settings_post' );
}
function curweather_uninstall () {
unregister_hook ( 'network_mod_init' , 'addon/curweather/curweather.php' , 'curweather_network_mod_init' );
unregister_hook ( 'plugin_settings' , 'addon/curweather/curweather.php' , 'curweather_plugin_settings' );
unregister_hook ( 'plugin_settings_post' , 'addon/curweather/curweather.php' , 'curweather_plugin_settings_post' );
}
2015-07-12 08:18:24 +02:00
// The caching mechanism is taken from the cache example of the
// OpenWeatherMap-PHP-API library and a bit customized to allow admins to set
// the caching time depending on the plans they got from openweathermap.org
2015-07-12 15:39:49 +02:00
// and the usage of the friendica temppath
2015-07-12 08:18:24 +02:00
2015-07-13 07:05:55 +02:00
class CWCache extends AbstractCache
2015-07-12 08:18:24 +02:00
{
private function urlToPath ( $url )
{
2015-07-13 07:05:55 +02:00
// take friendicas tmp directory as base for the cache
2015-07-12 15:39:49 +02:00
$tmp = get_config ( 'system' , 'temppath' );
2015-07-12 08:18:24 +02:00
$dir = $tmp . DIRECTORY_SEPARATOR . " OpenWeatherMapPHPAPI " ;
if ( ! is_dir ( $dir )) {
mkdir ( $dir );
}
$path = $dir . DIRECTORY_SEPARATOR . md5 ( $url );
return $path ;
}
/**
* @ inheritdoc
*/
public function isCached ( $url )
{
$path = $this -> urlToPath ( $url );
if ( ! file_exists ( $path ) || filectime ( $path ) + $this -> seconds < time ()) {
return false ;
}
return true ;
}
/**
* @ inheritdoc
*/
public function getCached ( $url )
{
return file_get_contents ( $this -> urlToPath ( $url ));
}
/**
* @ inheritdoc
*/
public function setCached ( $url , $content )
{
file_put_contents ( $this -> urlToPath ( $url ), $content );
}
}
2013-02-11 18:49:19 +01:00
function curweather_network_mod_init ( & $fk_app , & $b ) {
if ( ! intval ( get_pconfig ( local_user (), 'curweather' , 'curweather_enable' )))
return ;
$fk_app -> page [ 'htmlhead' ] .= '<link rel="stylesheet" type="text/css" href="' . $fk_app -> get_baseurl () . '/addon/curweather/curweather.css' . '" media="all" />' . " \r \n " ;
2015-07-12 08:18:24 +02:00
// the OpenWeatherMap-PHP-APIlib does all the work here
2013-02-11 18:49:19 +01:00
// the $rpt value is needed for location
2015-07-12 08:18:24 +02:00
// $lang will be taken from the browser session to honour user settings
// $units can be set in the settings by the user
// $appid is configured by the admin in the admin panel
// those parameters will be used to get: cloud status, temperature, preassure
// and relative humidity for display, also the relevent area of the map is
// linked from lat/log of the reply of OWMp
2013-02-11 18:49:19 +01:00
$rpt = get_pconfig ( local_user (), 'curweather' , 'curweather_loc' );
2015-07-11 20:59:00 +02:00
// 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' );
2015-07-12 08:18:24 +02:00
$cachetime = intval ( get_config ( 'curweather' , 'cachetime' ));
2015-07-11 20:59:00 +02:00
if ( $units === " " )
$units = 'metric' ;
// Get OpenWeatherMap object. Don't use caching (take a look into
// Example_Cache.php to see how it works).
2015-07-12 08:18:24 +02:00
//$owm = new OpenWeatherMap();
2015-07-13 07:05:55 +02:00
$owm = new OpenWeatherMap ( null , new CWCache (), $cachetime );
2015-07-13 11:22:51 +02:00
$ok = true ;
2015-07-11 20:59:00 +02:00
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 ;
2015-07-12 08:18:24 +02:00
$wind = $weather -> wind -> speed -> getDescription () . ', ' . $weather -> wind -> speed . " " . $weather -> wind -> direction ;
2015-07-11 20:59:00 +02:00
$description = $weather -> clouds -> getDescription ();
2015-07-13 07:05:55 +02:00
$city = array (
'name' => $weather -> city -> name ,
'lon' => $weather -> city -> lon ,
'lat' => $weather -> city -> lat
);
2015-07-11 20:59:00 +02:00
} catch ( OWMException $e ) {
2015-07-13 11:22:51 +02:00
info ( 'OpenWeatherMap exception: ' . $e -> getMessage () . ' (Code ' . $e -> getCode () . ').' );
$ok = false ;
2015-07-11 20:59:00 +02:00
} catch ( \Exception $e ) {
2015-07-13 11:22:51 +02:00
info ( 'General exception: ' . $e -> getMessage () . ' (Code ' . $e -> getCode () . ').' );
$ok = false ;
2015-07-11 20:59:00 +02:00
}
2015-07-13 11:22:51 +02:00
if ( $ok ) {
$t = get_markup_template ( " widget.tpl " , " addon/curweather/ " );
$curweather = replace_macros ( $t , array (
'$title' => t ( " Current Weather " ),
'$city' => $city ,
'$description' => $description ,
'$temp' => $temp ,
'$relhumidity' => array ( 'caption' => t ( 'Relative Humidity' ), 'val' => $rhumid ),
'$pressure' => array ( 'caption' => t ( 'Pressure' ), 'val' => $pressure ),
'$wind' => array ( 'caption' => t ( 'Wind' ), 'val' => $wind ),
'$databy' => t ( 'Data by' ),
'$showonmap' => t ( 'Show on map' )
));
} else {
$t = get_markup_template ( 'widget-error.tpl' , 'addon/curweather/' );
$curweather = replace_macros ( $t , array (
'$problem' => t ( 'There was a problem accessing the weather data. But have a look' ),
'$rpt' => $rpt ,
'$atOWM' => t ( 'at OpenWeatherMap' )
));
}
2013-02-11 18:49:19 +01:00
$fk_app -> page [ 'aside' ] = $curweather . $fk_app -> page [ 'aside' ];
}
function curweather_plugin_settings_post ( $a , $post ) {
if ( ! local_user () || ( ! x ( $_POST , 'curweather-settings-submit' )))
return ;
set_pconfig ( local_user (), 'curweather' , 'curweather_loc' , trim ( $_POST [ 'curweather_loc' ]));
set_pconfig ( local_user (), 'curweather' , 'curweather_enable' , intval ( $_POST [ 'curweather_enable' ]));
2015-07-11 20:59:00 +02:00
set_pconfig ( local_user (), 'curweather' , 'curweather_units' , trim ( $_POST [ 'curweather_units' ]));
2013-02-11 18:49:19 +01:00
info ( t ( 'Current Weather settings updated.' ) . EOL );
}
function curweather_plugin_settings ( & $a , & $s ) {
if ( ! local_user ())
return ;
/* Get the current state of our config variable */
$curweather_loc = get_pconfig ( local_user (), 'curweather' , 'curweather_loc' );
2015-07-11 20:59:00 +02:00
$curweather_units = get_pconfig ( local_user (), 'curweather' , 'curweather_units' );
$appid = get_config ( 'curweather' , 'appid' );
2015-07-12 15:09:04 +02:00
if ( $appid == " " ) {
2015-07-11 20:59:00 +02:00
$noappidtext = t ( 'No APPID found, please contact your admin to optain one.' );
} else {
$noappidtext = '' ;
}
2013-02-11 18:49:19 +01:00
$enable = intval ( get_pconfig ( local_user (), 'curweather' , 'curweather_enable' ));
$enable_checked = (( $enable ) ? ' checked="checked" ' : '' );
2015-07-11 20:59:00 +02:00
// load template and replace the macros
$t = get_markup_template ( " settings.tpl " , " addon/curweather/ " );
$s = replace_macros ( $t , array (
'$submit' => t ( 'Save Settings' ),
2015-07-12 14:30:09 +02:00
'$header' => t ( 'Current Weather' ) . ' ' . t ( 'Settings' ),
2015-07-12 15:09:04 +02:00
'$noappidtext' => $noappidtext ,
2015-07-11 20:59:00 +02:00
'$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. <em>Berlin,DE</em> or <em>14476,DE</em>.' ) ),
'$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 ;
2013-02-11 18:49:19 +01:00
}
2015-07-11 20:59:00 +02:00
// 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' ]));
2015-07-12 08:18:24 +02:00
set_config ( 'curweather' , 'cachetime' , trim ( $_POST [ 'cachetime' ]));
2015-07-11 20:59:00 +02:00
info ( t ( 'Curweather settings saved.' . EOL ));
}
}
function curweather_plugin_admin ( & $a , & $o ) {
if ( ! is_site_admin ())
return ;
$appid = get_config ( 'curweather' , 'appid' );
2015-07-12 08:52:29 +02:00
$cachetime = get_config ( 'curweather' , 'cachetime' );
2015-07-11 20:59:00 +02:00
$t = get_markup_template ( " admin.tpl " , " addon/curweather/ " );
$o = replace_macros ( $t , array (
'$submit' => t ( 'Save Settings' ),
2015-07-12 08:18:24 +02:00
'$cachetime' => array ( 'cachetime' , t ( 'Caching Interval' ), $cachetime , t ( 'For how long should the weather data be cached? Choose according your OpenWeatherMap account type.' ), array ( '0' => t ( 'no cache' ), '300' => '5 ' . t ( 'minutes' ), '900' => '15 ' . t ( 'minutes' ), '1800' => '30 ' . t ( 'minutes' ), '3600' => '60 ' . t ( 'minutes' ))),
2015-07-11 20:59:00 +02:00
'$appid' => array ( 'appid' , t ( 'Your APPID' ), $appid , t ( 'Your API key provided by OpenWeatherMap' ))
));
}