From 51a33dc66da9ff3412f767cf8451f6aeaf7696ea Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 28 Dec 2009 13:59:03 -0800 Subject: add user-location-prefs data objects --- classes/User_location_prefs.php | 48 +++++++++++++++++++++++++++++++++++++++++ classes/statusnet.ini | 12 +++++++++-- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100755 classes/User_location_prefs.php (limited to 'classes') diff --git a/classes/User_location_prefs.php b/classes/User_location_prefs.php new file mode 100755 index 000000000..52cb254ba --- /dev/null +++ b/classes/User_location_prefs.php @@ -0,0 +1,48 @@ +. + * + * @category Data + * @package StatusNet + * @author Evan Prodromou + * @copyright 2009 StatusNet Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://status.net/ + */ + +require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; + +class User_location_prefs extends Memcached_DataObject +{ + ###START_AUTOCODE + /* the code below is auto generated do not remove the above tag */ + + public $__table = 'user_location_prefs'; // table name + public $user_id; // int(4) primary_key not_null + public $share_location; // tinyint(1) default_1 + public $created; // datetime not_null default_0000-00-00%2000%3A00%3A00 + public $modified; // timestamp not_null default_CURRENT_TIMESTAMP + + /* Static get */ + function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('User_location_prefs',$k,$v); } + + /* the code above is auto generated do not remove the tag below */ + ###END_AUTOCODE +} diff --git a/classes/statusnet.ini b/classes/statusnet.ini index 2cc37dbfe..ac69403a4 100644 --- a/classes/statusnet.ini +++ b/classes/statusnet.ini @@ -1,4 +1,3 @@ - [avatar] profile_id = 129 original = 17 @@ -564,4 +563,13 @@ modified = 384 [user_openid__keys] trustroot = K -user_id = K \ No newline at end of file +user_id = K + +[user_location_prefs] +user_id = 129 +share_location = 17 +created = 142 +modified = 384 + +[user_location_prefs__keys] +user_id = K -- cgit v1.2.3-54-g00ecf From 33786b2c4e172f9aebf03013c88685f417028bc0 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 28 Dec 2009 13:59:31 -0800 Subject: turn off exe bits --- classes/User_location_prefs.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 classes/User_location_prefs.php (limited to 'classes') diff --git a/classes/User_location_prefs.php b/classes/User_location_prefs.php old mode 100755 new mode 100644 -- cgit v1.2.3-54-g00ecf From c1e3b2f032d2a63298d4cde46b8dc17637634750 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 28 Dec 2009 14:21:07 -0800 Subject: remove namespace setting from location; it's unused --- actions/newnotice.php | 43 ++++++++++++++++++++++++------------------- actions/profilesettings.php | 5 +++++ classes/User.php | 16 ++++++++++++++++ lib/default.php | 2 +- 4 files changed, 46 insertions(+), 20 deletions(-) (limited to 'classes') diff --git a/actions/newnotice.php b/actions/newnotice.php index c014f1781..8591522dc 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -164,19 +164,6 @@ class NewnoticeAction extends Action $replyto = 'false'; } - $lat = $this->trimmed('lat'); - $lon = $this->trimmed('lon'); - $location_id = $this->trimmed('location_id'); - $location_ns = $this->trimmed('location_ns'); - - if (!empty($lat) && !empty($lon) && empty($location_id)) { - $location = Location::fromLatLon($lat, $lon); - if (!empty($location)) { - $location_id = $location->location_id; - $location_ns = $location->location_ns; - } - } - $upload = null; $upload = MediaFile::fromUpload('attach'); @@ -195,12 +182,30 @@ class NewnoticeAction extends Action } } - $notice = Notice::saveNew($user->id, $content_shortened, 'web', - array('reply_to' => ($replyto == 'false') ? null : $replyto, - 'lat' => $lat, - 'lon' => $lon, - 'location_id' => $location_id, - 'location_ns' => $location_ns)); + $options = array('reply_to' => ($replyto == 'false') ? null : $replyto); + + if ($user->shareLocation()) { + + $lat = $this->trimmed('lat'); + $lon = $this->trimmed('lon'); + $location_id = $this->trimmed('location_id'); + $location_ns = $this->trimmed('location_ns'); + + if (!empty($lat) && !empty($lon) && empty($location_id)) { + $location = Location::fromLatLon($lat, $lon); + if (!empty($location)) { + $location_id = $location->location_id; + $location_ns = $location->location_ns; + } + } + + $options['lat'] = $lat; + $options['lon'] = $lon; + $options['location_id'] = $location_id; + $options['location_ns'] = $location_ns; + } + + $notice = Notice::saveNew($user->id, $content_shortened, 'web', $options); if (isset($upload)) { $upload->attachToNotice($notice); diff --git a/actions/profilesettings.php b/actions/profilesettings.php index 359664096..58bf838d7 100644 --- a/actions/profilesettings.php +++ b/actions/profilesettings.php @@ -133,6 +133,11 @@ class ProfilesettingsAction extends AccountSettingsAction ($this->arg('location')) ? $this->arg('location') : $profile->location, _('Where you are, like "City, State (or Region), Country"')); $this->elementEnd('li'); + $this->elementStart('li'); + $this->checkbox('sharelocation', _('Share my current location when posting notices'), + ($this->arg('sharelocation')) ? + $this->arg('sharelocation') : $user->shareLocation()); + $this->elementEnd('li'); Event::handle('EndProfileFormData', array($this)); $this->elementStart('li'); $this->input('tags', _('Tags'), diff --git a/classes/User.php b/classes/User.php index 6708d95b6..2bcb7c2a0 100644 --- a/classes/User.php +++ b/classes/User.php @@ -996,4 +996,20 @@ class User extends Memcached_DataObject return $ids; } + + function shareLocation() + { + $share = true; + + $prefs = User_location_prefs::staticGet('user_id', $this->id); + + if (empty($prefs)) { + $share = common_config('location', 'share'); + } else { + $share = $prefs->share_location; + $prefs->free(); + } + + return $share; + } } diff --git a/lib/default.php b/lib/default.php index 42d4623b1..b5eda7b2c 100644 --- a/lib/default.php +++ b/lib/default.php @@ -226,7 +226,7 @@ $default = 'message' => array('contentlimit' => null), 'location' => - array('namespace' => 1), // 1 = geonames, 2 = Yahoo Where on Earth + array(), 'omb' => array('timeout' => 5), // HTTP request timeout in seconds when contacting remote hosts for OMB updates 'logincommand' => -- cgit v1.2.3-54-g00ecf From 6a6d88f0f4641f294a5c513c6aacba604e37222f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 28 Dec 2009 14:43:14 -0800 Subject: user_id is primary key for user_location_prefs --- classes/statusnet.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/statusnet.ini b/classes/statusnet.ini index ac69403a4..35a000aac 100644 --- a/classes/statusnet.ini +++ b/classes/statusnet.ini @@ -572,4 +572,5 @@ created = 142 modified = 384 [user_location_prefs__keys] -user_id = K +user_id = N + -- cgit v1.2.3-54-g00ecf From 97f611107a9620f0e01e6c00c91cd1edea66d981 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 28 Dec 2009 14:43:34 -0800 Subject: More configuration options for location sharing --- classes/User.php | 26 +++++++++++++++++--------- lib/default.php | 3 ++- 2 files changed, 19 insertions(+), 10 deletions(-) (limited to 'classes') diff --git a/classes/User.php b/classes/User.php index 2bcb7c2a0..34151778c 100644 --- a/classes/User.php +++ b/classes/User.php @@ -999,17 +999,25 @@ class User extends Memcached_DataObject function shareLocation() { - $share = true; + $cfg = common_config('location', 'share'); - $prefs = User_location_prefs::staticGet('user_id', $this->id); + if ($cfg == 'always') { + return true; + } else if ($cfg == 'never') { + return false; + } else { // user + $share = true; - if (empty($prefs)) { - $share = common_config('location', 'share'); - } else { - $share = $prefs->share_location; - $prefs->free(); - } + $prefs = User_location_prefs::staticGet('user_id', $this->id); - return $share; + if (empty($prefs)) { + $share = common_config('location', 'sharedefault'); + } else { + $share = $prefs->share_location; + $prefs->free(); + } + + return $share; + } } } diff --git a/lib/default.php b/lib/default.php index b5eda7b2c..8a70ed3fa 100644 --- a/lib/default.php +++ b/lib/default.php @@ -226,7 +226,8 @@ $default = 'message' => array('contentlimit' => null), 'location' => - array(), + array('share' => 'user', // whether to share location; 'always', 'user', 'never' + 'sharedefault' => true), 'omb' => array('timeout' => 5), // HTTP request timeout in seconds when contacting remote hosts for OMB updates 'logincommand' => -- cgit v1.2.3-54-g00ecf From e3789be03f9e2d20aa74da1a10c4090b260d3359 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 28 Dec 2009 15:13:15 -0800 Subject: Move location-argument-handling code into a single function Moved the important parts of the location-argument-handling stuff to a single function. Handles defaults and overrides correctly, and easy to use. Changed Web and API channels to use it. --- actions/apistatusesupdate.php | 20 +++++++-------- actions/newnotice.php | 22 +++++----------- classes/Notice.php | 59 +++++++++++++++++++++++++++++++++---------- 3 files changed, 61 insertions(+), 40 deletions(-) (limited to 'classes') diff --git a/actions/apistatusesupdate.php b/actions/apistatusesupdate.php index dabbea92f..f594bbf39 100644 --- a/actions/apistatusesupdate.php +++ b/actions/apistatusesupdate.php @@ -203,12 +203,6 @@ class ApiStatusesUpdateAction extends ApiAuthAction } } - $location = null; - - if (!empty($this->lat) && !empty($this->lon)) { - $location = Location::fromLatLon($this->lat, $this->lon); - } - $upload = null; try { @@ -235,11 +229,15 @@ class ApiStatusesUpdateAction extends ApiAuthAction $options = array('reply_to' => $reply_to); - if (!empty($location)) { - $options['lat'] = $location->lat; - $options['lon'] = $location->lon; - $options['location_id'] = $location->location_id; - $options['location_ns'] = $location->location_ns; + if ($this->user->shareLocation()) { + + $locOptions = Notice::locationOptions($this->lat, + $this->lon, + null, + null, + $this->user->getProfile()); + + $options = array_merge($options, $locOptions); } $this->notice = diff --git a/actions/newnotice.php b/actions/newnotice.php index 8591522dc..2d9f0ff79 100644 --- a/actions/newnotice.php +++ b/actions/newnotice.php @@ -186,23 +186,13 @@ class NewnoticeAction extends Action if ($user->shareLocation()) { - $lat = $this->trimmed('lat'); - $lon = $this->trimmed('lon'); - $location_id = $this->trimmed('location_id'); - $location_ns = $this->trimmed('location_ns'); - - if (!empty($lat) && !empty($lon) && empty($location_id)) { - $location = Location::fromLatLon($lat, $lon); - if (!empty($location)) { - $location_id = $location->location_id; - $location_ns = $location->location_ns; - } - } + $locOptions = Notice::locationOptions($this->trimmed('lat'), + $this->trimmed('lon'), + $this->trimmed('location_id'), + $this->trimmed('location_ns'), + $user->getProfile()); - $options['lat'] = $lat; - $options['lon'] = $lon; - $options['location_id'] = $location_id; - $options['location_ns'] = $location_ns; + $options = array_merge($options, $locOptions); } $notice = Notice::saveNew($user->id, $content_shortened, 'web', $options); diff --git a/classes/Notice.php b/classes/Notice.php index 7651d8bd5..9f68c5255 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -289,21 +289,11 @@ class Notice extends Memcached_DataObject if (!empty($lat) && !empty($lon)) { $notice->lat = $lat; $notice->lon = $lon; + } + + if (!empty($location_ns) && !empty($location_id)) { $notice->location_id = $location_id; $notice->location_ns = $location_ns; - } else if (!empty($location_ns) && !empty($location_id)) { - $location = Location::fromId($location_id, $location_ns); - if (!empty($location)) { - $notice->lat = $location->lat; - $notice->lon = $location->lon; - $notice->location_id = $location_id; - $notice->location_ns = $location_ns; - } - } else { - $notice->lat = $profile->lat; - $notice->lon = $profile->lon; - $notice->location_id = $profile->location_id; - $notice->location_ns = $profile->location_ns; } if (Event::handle('StartNoticeSave', array(&$notice))) { @@ -1429,4 +1419,47 @@ class Notice extends Memcached_DataObject return $ids; } + + function locationOptions($lat, $lon, $location_id, $location_ns, $profile = null) + { + $options = array(); + + if (!empty($location_id) && !empty($location_ns)) { + + $options['location_id'] = $location_id; + $options['location_ns'] = $location_ns; + + $location = Location::fromId($location_id, $location_ns); + + if (!empty($location)) { + $options['lat'] = $location->lat; + $options['lon'] = $location->lon; + } + + } else if (!empty($lat) && !empty($lon)) { + + $options['lat'] = $lat; + $options['lon'] = $lon; + + $location = Location::fromLatLon($lat, $lon); + + if (!empty($location)) { + $options['location_id'] = $location->location_id; + $options['location_ns'] = $location->location_ns; + } + } else if (!empty($profile)) { + + if (isset($profile->lat) && isset($profile->lon)) { + $options['lat'] = $profile->lat; + $options['lon'] = $profile->lon; + } + + if (isset($profile->location_id) && isset($profile->location_ns)) { + $options['location_id'] = $profile->location_id; + $options['location_ns'] = $profile->location_ns; + } + } + + return $options; + } } -- cgit v1.2.3-54-g00ecf From 0fb114c34f1ad13683234762002dc9e98e16cc10 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 29 Dec 2009 11:46:10 -0800 Subject: Fix for saving user location preferences -- user_id field was marked as an auto-increment and wasn't getting saved with new inserts. --- classes/statusnet.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/statusnet.ini b/classes/statusnet.ini index 35a000aac..4077746c4 100644 --- a/classes/statusnet.ini +++ b/classes/statusnet.ini @@ -572,5 +572,5 @@ created = 142 modified = 384 [user_location_prefs__keys] -user_id = N +user_id = U -- cgit v1.2.3-54-g00ecf From 544e884d30618224c317931c031175c0f6319849 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 30 Dec 2009 08:56:43 -1000 Subject: Add magic formula to keep DB_DataObject from treating location prefs pkey as autoincrement --- classes/User_location_prefs.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'classes') diff --git a/classes/User_location_prefs.php b/classes/User_location_prefs.php index 52cb254ba..bd6029f97 100644 --- a/classes/User_location_prefs.php +++ b/classes/User_location_prefs.php @@ -45,4 +45,9 @@ class User_location_prefs extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE + + function sequenceKey() + { + return array(false, false, false); + } } -- cgit v1.2.3-54-g00ecf