From a8e4ec7801b5ca8c986febed1f95124b412e92f9 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Tue, 19 Oct 2010 20:52:05 -0700 Subject: [PATCH] use browser geolocation when desired --- boot.php | 1 + include/items.php | 8 +++++++- include/notifier.php | 3 +++ mod/display.php | 11 +++++++++-- mod/item.php | 6 ++++-- mod/network.php | 17 +++++++++++++++-- mod/profile.php | 36 +++++++++++++++++++++++++----------- mod/settings.php | 7 ++++++- view/atom_feed.tpl | 3 ++- view/atom_item.tpl | 1 + view/jot-header.tpl | 1 + view/jot.tpl | 1 + view/settings.tpl | 8 ++++++++ view/theme/default/style.css | 7 ++++++- 14 files changed, 89 insertions(+), 21 deletions(-) diff --git a/boot.php b/boot.php index 5070f7bac6..8fec10afaa 100644 --- a/boot.php +++ b/boot.php @@ -55,6 +55,7 @@ define ( 'NAMESPACE_ACTIVITY', 'http://activitystrea.ms/spec/1.0/' ); define ( 'NAMESPACE_ACTIVITY_SCHEMA', 'http://activitystrea.ms/schema/1.0/'); define ( 'NAMESPACE_SALMON_ME', 'http://salmon-protocol.org/ns/magic-env'); define ( 'NAMESPACE_OSTATUSSUB', 'http://ostatus.org/schema/1.0/subscribe'); +define ( 'NAMESPACE_GEORSS', 'http://www.georss.org/georss'); // activity stream defines diff --git a/include/items.php b/include/items.php index 87e5b46eff..f04bf0bd87 100644 --- a/include/items.php +++ b/include/items.php @@ -199,8 +199,9 @@ function get_feed_for(&$a, $dfrn_id, $owner_id, $last_update, $direction = 0) { '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)), '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)), '$location' => xmlify($item['location']), + '$coord' => xmlify($item['coord']), '$type' => $type, - '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner_nick . '/' . $item['id']), + '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner_nick . '/' . $item['id']), '$content' => xmlify($item['body']), '$verb' => xmlify($verb), '$actobj' => $actobj, // do not xmlify @@ -355,6 +356,10 @@ function get_atom_elements($item) { elseif($rawowner[0]['child'][NAMESPACE_DFRN]['avatar'][0]['data']) $res['owner-avatar'] = unxmlify($rawowner[0]['child'][NAMESPACE_DFRN]['avatar'][0]['data']); + $rawgeo = $item->get_item_tags(NAMESPACE_GEORSS,'point'); + if($rawgeo) + $res['coord'] = unxmlify($rawgeo[0]['data']); + $rawverb = $item->get_item_tags(NAMESPACE_ACTIVITY, 'verb'); // select between supported verbs if($rawverb) @@ -429,6 +434,7 @@ function item_store($arr) { $arr['changed'] = datetime_convert(); $arr['title'] = notags(trim($arr['title'])); $arr['location'] = notags(trim($arr['location'])); + $arr['coord'] = notags(trim($arr['coord'])); $arr['body'] = escape_tags(trim($arr['body'])); $arr['last-child'] = intval($arr['last-child']); $arr['visible'] = ((x($arr,'visible') !== false) ? intval($arr['visible']) : 1); diff --git a/include/notifier.php b/include/notifier.php index db95c3aae4..99b3859960 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -209,6 +209,7 @@ '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)), '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)), '$location' => xmlify($item['location']), + '$coord' => xmlify($item['coord']), '$type' => 'text', '$verb' => xmlify($verb), '$actobj' => $actobj, @@ -249,6 +250,7 @@ '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)), '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)), '$location' => xmlify($item['location']), + '$coord' => xmlify($item['coord']), '$type' => 'text', '$verb' => xmlify($verb), '$actobj' => $actobj, @@ -269,6 +271,7 @@ '$content' => xmlify($item['body']), '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']), '$location' => xmlify($item['location']), + '$coord' => xmlify($item['coord']), '$type' => 'text', '$verb' => xmlify($verb), '$actobj' => $actobj, diff --git a/mod/display.php b/mod/display.php index fefef8ad6b..84176d2934 100644 --- a/mod/display.php +++ b/mod/display.php @@ -229,7 +229,14 @@ function display_content(&$a) { $like = (($alike[$item['id']]) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : ''); $dislike = (($dlike[$item['id']]) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : ''); - + $location = (($item['location']) ? '' . $item['location'] . '' : ''); + $coord = (($item['coord']) ? '' . $item['coord'] . '' : ''); + if($coord) { + if($location) + $location .= '
(' . $coord . ')'; + else + $location = '' . $coord . ''; + } $o .= replace_macros($template,array( '$id' => $item['item_id'], @@ -242,7 +249,7 @@ function display_content(&$a) { '$body' => bbcode($item['body']), '$ago' => relative_date($item['created']), '$lock' => $lock, - '$location' => (($item['location']) ? '' . $item['location'] . '' : ''), + '$location' => $location, '$indent' => (($item['parent'] != $item['item_id']) ? ' comment' : ''), '$owner_url' => $owner_url, '$owner_photo' => $owner_photo, diff --git a/mod/item.php b/mod/item.php index 39865cdafa..4ebb1e9781 100644 --- a/mod/item.php +++ b/mod/item.php @@ -57,6 +57,7 @@ function item_post(&$a) { $title = notags(trim($_POST['title'])); $body = escape_tags(trim($_POST['body'])); $location = notags(trim($_POST['location'])); + $coord = notags(trim($_POST['coord'])); $verb = notags(trim($_POST['verb'])); if(! strlen($body)) { @@ -128,8 +129,8 @@ function item_post(&$a) { $r = q("INSERT INTO `item` (`uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, `author-name`, `author-link`, `author-avatar`, `created`, - `edited`, `changed`, `uri`, `title`, `body`, `location`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`) - VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", + `edited`, `changed`, `uri`, `title`, `body`, `location`, `coord`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`) + VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", intval($profile_uid), dbesc($post_type), intval($wall), @@ -148,6 +149,7 @@ function item_post(&$a) { dbesc($title), dbesc($body), dbesc($location), + dbesc($coord), dbesc($verb), dbesc($str_contact_allow), dbesc($str_group_allow), diff --git a/mod/network.php b/mod/network.php index 3a747eac94..97a82a705c 100644 --- a/mod/network.php +++ b/mod/network.php @@ -28,9 +28,14 @@ function network_content(&$a, $update = 0) { } $_SESSION['return_url'] = $a->cmd; + $geotag = (($a->user['allow_location']) ? load_view_file('view/jot_geotag.tpl') : ''); + $tpl = load_view_file('view/jot-header.tpl'); - $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl())); + $a->page['htmlhead'] .= replace_macros($tpl, array( + '$baseurl' => $a->get_baseurl(), + '$geotag' => $geotag + )); require_once('view/acl_selectors.php'); @@ -272,6 +277,14 @@ function network_content(&$a, $update = 0) { $like = (($alike[$item['id']]) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : ''); $dislike = (($dlike[$item['id']]) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : ''); + $location = (($item['location']) ? '' . $item['location'] . '' : ''); + $coord = (($item['coord']) ? '' . $item['coord'] . '' : ''); + if($coord) { + if($location) + $location .= '
(' . $coord . ')'; + else + $location = '' . $coord . ''; + } // Build the HTML @@ -286,7 +299,7 @@ function network_content(&$a, $update = 0) { '$body' => bbcode($item['body']), '$ago' => relative_date($item['created']), '$lock' => $lock, - '$location' => (($item['location']) ? '' . $item['location'] . '' : ''), + '$location' => $location, '$indent' => (($item['parent'] != $item['item_id']) ? ' comment' : ''), '$owner_url' => $owner_url, '$owner_photo' => $owner_photo, diff --git a/mod/profile.php b/mod/profile.php index 8fa25cdbf8..ed26237b68 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -118,6 +118,8 @@ function profile_content(&$a, $update = 0) { } } + $is_owner = ((local_user()) && (local_user() == $a->profile['profile_uid']) ? true : false); + if(! $update) { if(x($_GET,'tab')) $tab = notags(trim($_GET['tab'])); @@ -141,9 +143,17 @@ function profile_content(&$a, $update = 0) { $celeb = ((($a->profile['page-flags'] == PAGE_SOAPBOX) || ($a->profile['page-flags'] == PAGE_COMMUNITY)) ? true : false); if(can_write_wall($a,$a->profile['profile_uid'])) { + + + $geotag = (($is_owner && $a->profile['allow_location']) ? load_view_file('view/jot_geotag.tpl') : ''); + $tpl = load_view_file('view/jot-header.tpl'); - $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl())); + $a->page['htmlhead'] .= replace_macros($tpl, array( + '$baseurl' => $a->get_baseurl(), + '$geotag' => $geotag + )); + require_once('view/acl_selectors.php'); $tpl = load_view_file("view/jot.tpl"); @@ -153,12 +163,12 @@ function profile_content(&$a, $update = 0) { $lockstate = 'unlock'; $o .= replace_macros($tpl,array( '$baseurl' => $a->get_baseurl(), - '$defloc' => (($_SESSION['uid'] == $a->profile['profile_uid']) ? $a->user['default-location'] : ''), + '$defloc' => (($is_owner) ? $a->user['default-location'] : ''), '$return_path' => $a->cmd, - '$visitor' => (($_SESSION['uid'] == $a->profile['profile_uid']) ? 'block' : 'none'), + '$visitor' => (($is_owner) ? 'block' : 'none'), '$lockstate' => $lockstate, '$bang' => '', - '$acl' => (($_SESSION['uid'] == $a->profile['profile_uid']) ? populate_acl($a->user, $celeb) : ''), + '$acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''), '$profile_uid' => $a->profile['profile_uid'] )); } @@ -173,18 +183,15 @@ function profile_content(&$a, $update = 0) { } - // TODO alter registration and settings and profile to update contact table when names and photos change. + // Construct permissions // default permissions - anonymous user $sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = '' "; - - - // Profile owner - everything is visible - if(local_user() && ($_SESSION['uid'] == $a->profile['profile_uid'])) { + if(is_owner) { $sql_extra = ''; // Oh - while we're here... reset the Unseen messages @@ -366,7 +373,14 @@ function profile_content(&$a, $update = 0) { $like = (($alike[$item['id']]) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : ''); $dislike = (($dlike[$item['id']]) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : ''); - + $location = (($item['location']) ? '' . $item['location'] . '' : ''); + $coord = (($item['coord']) ? '' . $item['coord'] . '' : ''); + if($coord) { + if($location) + $location .= '
(' . $coord . ')'; + else + $location = '' . $coord . ''; + } $o .= replace_macros($template,array( '$id' => $item['item_id'], @@ -378,7 +392,7 @@ function profile_content(&$a, $update = 0) { '$body' => bbcode($item['body']), '$ago' => relative_date($item['created']), '$lock' => $lock, - '$location' => (($item['location']) ? '' . $item['location'] . '' : ''), + '$location' => $location, '$indent' => (($item['parent'] != $item['item_id']) ? ' comment' : ''), '$drop' => $drop, '$like' => $like, diff --git a/mod/settings.php b/mod/settings.php index b453fa8258..863da44d5e 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -54,6 +54,7 @@ function settings_post(&$a) { $timezone = notags(trim($_POST['timezone'])); $defloc = notags(trim($_POST['defloc'])); + $allow_location = (($_POST['allow_location'] == 1) ? 1: 0); $publish = (($_POST['profile_in_directory'] == 1) ? 1: 0); $net_publish = (($_POST['profile_in_netdirectory'] == 1) ? 1: 0); $old_visibility = ((intval($_POST['visibility']) == 1) ? 1 : 0); @@ -104,7 +105,7 @@ function settings_post(&$a) { $str_group_deny = perms2str($_POST['group_deny']); $str_contact_deny = perms2str($_POST['contact_deny']); - $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `theme` = '%s' WHERE `uid` = %d LIMIT 1", + $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `theme` = '%s' WHERE `uid` = %d LIMIT 1", dbesc($username), dbesc($email), dbesc($timezone), @@ -115,6 +116,7 @@ function settings_post(&$a) { intval($notify), intval($page_flags), dbesc($defloc), + intval($allow_location), dbesc($theme), intval(local_user()) ); @@ -208,6 +210,8 @@ function settings_content(&$a) { else $profile_in_net_dir = ''; + $loc_checked = (($a->user['allow_location'] == 1) ? " checked=\"checked\" " : ""); + $invisible = (((! $profile['publish']) && (! $profile['net-publish'])) ? true : false); @@ -259,6 +263,7 @@ function settings_content(&$a) { '$timezone' => $timezone, '$zoneselect' => select_timezone($timezone), '$defloc' => $defloc, + '$loc_checked' => $loc_checked, '$profile_in_dir' => $profile_in_dir, '$profile_in_net_dir' => $profile_in_net_dir, '$permissions' => t('Default Post Permissions'), diff --git a/view/atom_feed.tpl b/view/atom_feed.tpl index da1d53e394..142119f491 100644 --- a/view/atom_feed.tpl +++ b/view/atom_feed.tpl @@ -4,7 +4,8 @@ xmlns:at="http://purl.org/atompub/tombstones/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:dfrn="http://purl.org/macgirvin/dfrn/1.0" - xmlns:as="http://activitystrea.ms/spec/1.0/" > + xmlns:as="http://activitystrea.ms/spec/1.0/" + xmlns:georss="http://www.georss.org/georss" > $feed_id $feed_title diff --git a/view/atom_item.tpl b/view/atom_item.tpl index 401441e160..b26ba2e694 100644 --- a/view/atom_item.tpl +++ b/view/atom_item.tpl @@ -19,6 +19,7 @@ $content $location + $coord $comment_allow $verb $actobj diff --git a/view/jot-header.tpl b/view/jot-header.tpl index b07ffb1f60..bdf0cb6106 100644 --- a/view/jot-header.tpl +++ b/view/jot-header.tpl @@ -118,6 +118,7 @@ tinyMCE.init({ } } + $geotag diff --git a/view/jot.tpl b/view/jot.tpl index 0dfad3f5e2..363c4617f9 100644 --- a/view/jot.tpl +++ b/view/jot.tpl @@ -11,6 +11,7 @@ + diff --git a/view/settings.tpl b/view/settings.tpl index e06671d371..eeb683c768 100644 --- a/view/settings.tpl +++ b/view/settings.tpl @@ -34,6 +34,14 @@ $zoneselect
+
+ + +
+
+ + +
diff --git a/view/theme/default/style.css b/view/theme/default/style.css index 237264df49..066456e546 100644 --- a/view/theme/default/style.css +++ b/view/theme/default/style.css @@ -105,7 +105,9 @@ blockquote:before { text-decoration: none; cursor: pointer; } - +.smalltext { + font-size: 0.7em; +} #sysmsg { width: 600px; margin-bottom: 10px; @@ -439,6 +441,7 @@ input#dfrn-url { #settings-email-end, #settings-nick-end, #settings-defloc-end, +#settings-allowloc-end, #settings-timezone-end, #settings-theme-end, #settings-password-end, @@ -456,6 +459,7 @@ input#dfrn-url { #settings-email-label, #settings-nick-label, #settings-defloc-label, +#settings-allowloc-label, #settings-timezone-label, #settings-theme-label, #settings-password-label, @@ -473,6 +477,7 @@ input#dfrn-url { #settings-email, #settings-nick, #settings-defloc, +#settings-allowloc, #timezone-select, #theme-select, #settings-password,