diff --git a/geonames/README.md b/geonames/README.md index 443ddf3f0..7e9ed31a5 100644 --- a/geonames/README.md +++ b/geonames/README.md @@ -7,10 +7,10 @@ Use Geonames service to resolve nearest populated location for given latitude, l ## Installation -Pre-requisite: Register a username at geonames.org and set in `config/addon.config.php` +Pre-requisite: Register a username at https://www.geonames.org/login and set it in `config/addon.config.php` 'geonames' => [ 'username' => 'your_username' ], -Also visit http://geonames.org/manageaccount and enable access to the free web services. \ No newline at end of file +Also visit https://geonames.org/manageaccount and enable access to the free web services. \ No newline at end of file diff --git a/geonames/geonames.php b/geonames/geonames.php index 1ce6dbfa5..cc0420f41 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -4,202 +4,148 @@ * Description: Use Geonames service to resolve nearest populated location for given latitude, longitude * Version: 1.0 * Author: Mike Macgirvin - * - * - * Pre-requisite: Register a username at geonames.org - * and set in config/addon.config.php - * - * [geonames] - * username = your_username - * - * Also visit http://geonames.org/manageaccount and enable access to the free web services - * - * When addon is installed, the system calls the addon - * name_install() function, located in 'addon/name/name.php', - * where 'name' is the name of the addon. - * If the addon is removed from the configuration list, the - * system will call the name_uninstall() function. - * */ +use Friendica\App; use Friendica\Core\Config; use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\PConfig; +use Friendica\Core\Renderer; use Friendica\Util\Config\ConfigFileLoader; use Friendica\Util\Network; use Friendica\Util\XML; -function geonames_install() { +function geonames_install() +{ + Hook::register('load_config', __FILE__, 'geonames_load_config'); - Hook::register('load_config', 'addon/geonames/geonames.php', 'geonames_load_config'); - - /** - * - * Our addon will attach in three places. + /* Our addon will attach in three places. * The first is just prior to storing a local post. - * */ - Hook::register('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); + Hook::register('post_local', __FILE__, 'geonames_post_hook'); - /** - * - * Then we'll attach into the addon settings page, and also the + /* Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. - * */ - Hook::register('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); - Hook::register('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); - - Logger::log("installed geonames"); + Hook::register('addon_settings', __FILE__, 'geonames_addon_settings'); + Hook::register('addon_settings_post', __FILE__, 'geonames_addon_settings_post'); } - -function geonames_uninstall() { - - /** - * - * uninstall unregisters any hooks created with register_hook - * during install. It may also delete configuration settings - * and any other cleanup. - * - */ - - Hook::unregister('load_config', 'addon/geonames/geonames.php', 'geonames_load_config'); - Hook::unregister('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); - Hook::unregister('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); - Hook::unregister('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); - - - Logger::log("removed geonames"); -} - -function geonames_load_config(\Friendica\App $a, ConfigFileLoader $loader) +function geonames_load_config(App $a, ConfigFileLoader $loader) { $a->getConfigCache()->load($loader->loadAddonConfig('geonames')); } -function geonames_post_hook($a, &$item) { - - /** - * - * An item was posted on the local system. +function geonames_post_hook(App $a, array &$item) +{ + /* An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner * - The profile owner must have allowed our addon - * */ Logger::log('geonames invoked'); - if(! local_user()) /* non-zero if this is a logged in user of this system */ + if (!local_user()) { /* non-zero if this is a logged in user of this system */ return; + } - if(local_user() != $item['uid']) /* Does this person own the post? */ + if (local_user() != $item['uid']) { /* Does this person own the post? */ return; + } - if($item['parent']) /* If the item has a parent, this is a comment or something else, not a status post. */ + if ($item['parent']) { /* If the item has a parent, this is a comment or something else, not a status post. */ return; + } /* Retrieve our personal config setting */ $geo_account = Config::get('geonames', 'username'); $active = PConfig::get(local_user(), 'geonames', 'enable'); - if((! $geo_account) || (! $active)) + if (!$geo_account || !$active) { return; + } - if((! $item['coord']) || ($item['location'])) + if (!$item['coord'] || $item['location']) { return; + } - $coords = explode(' ',$item['coord']); + $coords = explode(' ', $item['coord']); - /** - * - * OK, we're allowed to do our stuff. - * - */ + /* OK, we're allowed to do our stuff. */ $s = Network::fetchUrl('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); - if(! $s) + if (!$s) { return; + } $xml = XML::parseString($s); - if($xml->geoname->name && $xml->geoname->countryName) + if ($xml->geoname->name && $xml->geoname->countryName) { $item['location'] = $xml->geoname->name . ', ' . $xml->geoname->countryName; + } - -// Logger::log('geonames : ' . print_r($xml,true), Logger::DATA); return; } - - - /** - * * Callback from the settings post function. - * $post contains the $_POST array. * We will make sure we've got a valid user account * and if so set our configuration setting for this person. * + * @param App $a + * @param array $post The $_POST array */ - -function geonames_addon_admin_post($a,$post) { - if(! local_user() || empty($_POST['geonames-submit'])) +function geonames_addon_settings_post(App $a, array $post) +{ + if (!local_user() || empty($_POST['geonames-submit'])) { return; - PConfig::set(local_user(),'geonames','enable',intval($_POST['geonames'])); + } - info(L10n::t('Geonames settings updated.') . EOL); + PConfig::set(local_user(), 'geonames', 'enable', intval($_POST['geonames-enable'])); + + info(L10n::t('Geonames settings updated.')); } - /** - * * Called from the Addon Setting form. * Add our own settings info to the page. * + * @param App $a + * @param string $s + * @throws Exception */ - - - -function geonames_addon_admin(&$a,&$s) { - - if(! local_user()) +function geonames_addon_settings(App $a, &$s) +{ + if (!local_user()) { return; + } $geo_account = Config::get('geonames', 'username'); - if(! $geo_account) + if (!$geo_account) { return; + } /* Add our stylesheet to the page so we can make our settings look nice */ - - $a->page['htmlhead'] .= '' . "\r\n"; + $stylesheetPath = __DIR__ . '/geonames.css'; + $a->registerStylesheet($stylesheetPath); /* Get the current state of our config variable */ + $enabled = intval(PConfig::get(local_user(), 'geonames', 'enable')); - $enabled = PConfig::get(local_user(),'geonames','enable'); - - $checked = (($enabled) ? ' checked="checked" ' : ''); - - /* Add some HTML to the existing form */ - - $s .= '
'; - $s .= '

' . L10n::t('Geonames Settings') . '

'; - $s .= '
'; - $s .= ''; - $s .= ''; - $s .= '
'; - - /* provide a submit button */ - - $s .= '
'; - + $t = Renderer::getMarkupTemplate('settings.tpl', __DIR__); + $s .= Renderer::replaceMacros($t, [ + '$title' => L10n::t('Geonames Settings'), + '$description' => L10n::t('Replace numerical coordinates by the nearest populated location name in your posts.'), + '$enable' => ['geonames-enable', L10n::t('Enable Geonames Addon'), $enabled], + '$submit' => L10n::t('Save Settings') + ]); } diff --git a/geonames/templates/settings.tpl b/geonames/templates/settings.tpl new file mode 100644 index 000000000..05897b6ac --- /dev/null +++ b/geonames/templates/settings.tpl @@ -0,0 +1,14 @@ + +

{{$title}}

+
+ +
\ No newline at end of file