X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=geonames%2Fgeonames.php;h=8009a654ef17159f7a556c1c3bb2d0d67f74da75;hb=1ce63185abc24a0813c2045c43ec1e3fede6e113;hp=45d8fde5774c9a84c8e066e3ac2f5aebb4b55eab;hpb=c6e5bc3429c9c610895ba826d841cddd8c0f378b;p=friendica-addons.git diff --git a/geonames/geonames.php b/geonames/geonames.php index 45d8fde5..8009a654 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -4,188 +4,147 @@ * 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 .htconfig.php - * - * $a->config['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\Core\Addon; -use Friendica\Core\Config; -use Friendica\Core\PConfig; - -function geonames_install() { - /** - * - * Our addon will attach in three places. +use Friendica\App; +use Friendica\Core\Config; +use Friendica\Core\Hook; +use Friendica\Core\Logger; +use Friendica\Core\Renderer; +use Friendica\DI; +use Friendica\Util\ConfigFileLoader; +use Friendica\Util\Network; +use Friendica\Util\XML; + +function geonames_install() +{ + Hook::register('load_config', __FILE__, 'geonames_load_config'); + + /* Our addon will attach in three places. * The first is just prior to storing a local post. - * */ - Addon::registerHook('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. - * */ - Addon::registerHook('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); - Addon::registerHook('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); - - logger("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. - * - */ - - Addon::unregisterHook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); - Addon::unregisterHook('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); - Addon::unregisterHook('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); - - - logger("removed geonames"); +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('geonames invoked'); + 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'); + $geo_account = DI::config()->get('geonames', 'username'); + $active = DI::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 = fetch_url('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); + $s = Network::fetchUrl('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); - if(! $s) + if (!$s) { return; + } - $xml = parse_xml_string($s); + $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('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() || (! x($_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( t('Geonames settings updated.') . EOL); -} + DI::pConfig()->set(local_user(), 'geonames', 'enable', intval($_POST['geonames-enable'])); + info(DI::l10n()->t('Geonames settings updated.')); +} /** - * - * Called from the Addon Setting form. + * 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'); + $geo_account = DI::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'; + DI::page()->registerStylesheet($stylesheetPath); /* Get the current state of our config variable */ - - $enabled = PConfig::get(local_user(),'geonames','enable'); - - $checked = (($enabled) ? ' checked="checked" ' : ''); - - /* Add some HTML to the existing form */ - - $s .= '
'; - $s .= '

' . t('Geonames Settings') . '

'; - $s .= '
'; - $s .= ''; - $s .= ''; - $s .= '
'; - - /* provide a submit button */ - - $s .= '
'; - + $enabled = intval(DI::pConfig()->get(local_user(), 'geonames', 'enable')); + + $t = Renderer::getMarkupTemplate('settings.tpl', __DIR__); + $s .= Renderer::replaceMacros($t, [ + '$title' => DI::l10n()->t('Geonames Settings'), + '$description' => DI::l10n()->t('Replace numerical coordinates by the nearest populated location name in your posts.'), + '$enable' => ['geonames-enable', DI::l10n()->t('Enable Geonames Addon'), $enabled], + '$submit' => DI::l10n()->t('Save Settings') + ]); }