X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=geonames%2Fgeonames.php;h=dcbd65f80c816a26f2973c31fa3917d0621ff007;hb=397282cbb355754bedc85cf606c16521ce42c2bf;hp=19725bef3ff53e1561f236cead784715fe8e9757;hpb=cdb914458b8dadd94d7feb31a21e4b5ddd8ff872;p=friendica-addons.git diff --git a/geonames/geonames.php b/geonames/geonames.php old mode 100755 new mode 100644 index 19725bef..dcbd65f8 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -4,186 +4,139 @@ * 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 plugin is installed, the system calls the plugin - * 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\Hook; +use Friendica\Core\Logger; +use Friendica\Core\Renderer; +use Friendica\DI; +use Friendica\Core\Config\Util\ConfigFileManager; +use Friendica\Util\XML; -function geonames_install() { +function geonames_install() +{ + Hook::register('load_config', __FILE__, 'geonames_load_config'); - /** - * - * Our plugin will attach in three places. + /* Our addon will attach in three places. * The first is just prior to storing a local post. - * */ - register_hook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); + Hook::register('post_local', __FILE__, 'geonames_post_hook'); - /** - * - * Then we'll attach into the plugin 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. - * */ - register_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - register_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_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. - * - */ - - unregister_hook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); - unregister_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - unregister_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); - - - logger("removed geonames"); +function geonames_load_config(ConfigFileManager $loader) +{ + DI::app()->getConfigCache()->load($loader->loadAddonConfig('geonames'), \Friendica\Core\Config\ValueObject\Cache::SOURCE_STATIC); } - - -function geonames_post_hook($a, &$item) { - - /** - * - * An item was posted on the local system. +function geonames_post_hook(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 plugin - * + * - The profile owner must have allowed our addon */ - logger('geonames invoked'); + Logger::notice('geonames invoked'); - if(! local_user()) /* non-zero if this is a logged in user of this system */ + if (!DI::userSession()->getLocalUserId()) { /* 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 (DI::userSession()->getLocalUserId() != $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 = get_config('geonames', 'username'); - $active = get_pconfig(local_user(), 'geonames', 'enable'); + $geo_account = DI::config()->get('geonames', 'username'); + $active = DI::pConfig()->get(DI::userSession()->getLocalUserId(), '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 = DI::httpClient()->fetch('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 array $post The $_POST array */ - -function geonames_plugin_admin_post($a,$post) { - if(! local_user() || (! x($_POST,'geonames-submit'))) +function geonames_addon_settings_post(array $post) +{ + if (!DI::userSession()->getLocalUserId() || empty($_POST['geonames-submit'])) { return; - set_pconfig(local_user(),'geonames','enable',intval($_POST['geonames'])); + } - info( t('Geonames settings updated.') . EOL); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'geonames', 'enable', intval($_POST['geonames-enable'])); } - /** - * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * + * @param array $data + * @throws Exception */ - - - -function geonames_plugin_admin(&$a,&$s) { - - if(! local_user()) +function geonames_addon_settings(array &$data) +{ + if (!DI::userSession()->getLocalUserId()) { return; + } - $geo_account = get_config('geonames', 'username'); - - if(! $geo_account) + $geo_account = DI::config()->get('geonames', 'username'); + if (!$geo_account) { return; + } - /* Add our stylesheet to the page so we can make our settings look nice */ - - $a->page['htmlhead'] .= '' . "\r\n"; - - /* Get the current state of our config variable */ - - $enabled = get_pconfig(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 */ + $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'geonames', 'enable')); - $s .= '
'; + $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/geonames/'); + $html = Renderer::replaceMacros($t, [ + '$info' => 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], + ]); + $data = [ + 'addon' => 'geonames', + 'title' => DI::l10n()->t('Geonames Settings'), + 'html' => $html, + ]; }