Merge branch '0.9.x' into finish-account-api

* 0.9.x:
  Added a events for the settings menu items
  Bringing Sphinx search support up to code: broken out to a plugin, now supports multiple sites on a single server.
  Changed to Evan's event style and added an AuthPlugin superclass
  add geo output to statuses in json, xml, atom, rss in API
  Localisation updates from translatewiki.net (2009-11-10)
  Localisation updates from translatewiki.net
  Update pot
  add lat and long parameters to api/statuses/update
  change credential check to work more like other events
  fixup output of object attributes in db error code
  Performance fix for subscription/subscriber lists based on feedback from ops.
  Adjusting indexes to make favorites query more efficient, based on feedback from ops.
  Revert untested code; spews PHP notice warnings on every page view: "just sent a http 200 for the check-fancy from install.php"
  Added hook for the Group navigation items
  Updated block @title text (shouldn't say from group)
  Updated group block markup
  Revert "Remove more contractions"
This commit is contained in:
Zach Copley
2009-11-10 15:25:43 -08:00
155 changed files with 8200 additions and 2816 deletions

View File

@@ -60,26 +60,26 @@ class ApiAction extends Action
var $max_id = null;
var $since_id = null;
var $since = null;
/**
* Initialization.
*
* @param array $args Web and URL arguments
*
* @return boolean false if user does not exist
* @return boolean false if user doesn't exist
*/
function prepare($args)
{
parent::prepare($args);
$this->format = $this->arg('format');
$this->page = (int)$this->arg('page', 1);
$this->count = (int)$this->arg('count', 20);
$this->max_id = (int)$this->arg('max_id', 0);
$this->since_id = (int)$this->arg('since_id', 0);
$this->since = $this->arg('since');
return true;
}
@@ -138,7 +138,7 @@ class ApiAction extends Action
$design = null;
$user = $profile->getUser();
// Note: some profiles do not have an associated user
// Note: some profiles don't have an associated user
if (!empty($user)) {
$design = $user->getDesign();
@@ -164,7 +164,6 @@ class ApiAction extends Action
$twitter_user['favourites_count'] = $profile->faveCount(); // British spelling!
$timezone = 'UTC';
if ($user->timezone) {
@@ -208,7 +207,7 @@ class ApiAction extends Action
if ($get_notice) {
$notice = $profile->getCurrentNotice();
if ($notice) {
# do not get user!
# don't get user!
$twitter_user['status'] = $this->twitterStatusArray($notice, false);
}
}
@@ -243,6 +242,15 @@ class ApiAction extends Action
$twitter_status['in_reply_to_screen_name'] =
($replier_profile) ? $replier_profile->nickname : null;
if (isset($notice->lat) && isset($notice->lon)) {
// This is the format that GeoJSON expects stuff to be in
$twitter_status['geo'] = array('type' => 'Point',
'coordinates' => array((float) $notice->lat,
(float) $notice->lon));
} else {
$twitter_status['geo'] = null;
}
if (isset($this->auth_user)) {
$twitter_status['favorited'] = $this->auth_user->hasFave($notice);
} else {
@@ -268,7 +276,7 @@ class ApiAction extends Action
}
if ($include_user) {
# Do not get notice (recursive!)
# Don't get notice (recursive!)
$twitter_user = $this->twitterUserArray($profile, false);
$twitter_status['user'] = $twitter_user;
}
@@ -367,10 +375,19 @@ class ApiAction extends Action
$entry['pubDate'] = common_date_rfc2822($notice->created);
$entry['guid'] = $entry['link'];
if (isset($notice->lat) && isset($notice->lon)) {
// This is the format that GeoJSON expects stuff to be in.
// showGeoRSS() below uses it for XML output, so we reuse it
$entry['geo'] = array('type' => 'Point',
'coordinates' => array((float) $notice->lat,
(float) $notice->lon));
} else {
$entry['geo'] = null;
}
return $entry;
}
function twitterRelationshipArray($source, $target)
{
$relationship = array();
@@ -446,6 +463,9 @@ class ApiAction extends Action
case 'attachments':
$this->showXmlAttachments($twitter_status['attachments']);
break;
case 'geo':
$this->showGeoRSS($value);
break;
default:
$this->element($element, null, $value);
}
@@ -489,6 +509,18 @@ class ApiAction extends Action
}
}
function showGeoRSS($geo)
{
if (empty($geo)) {
// empty geo element
$this->element('geo');
} else {
$this->elementStart('geo', array('xmlns:georss' => 'http://www.georss.org/georss'));
$this->element('georss:point', null, $geo['coordinates'][0] . ' ' . $geo['coordinates'][1]);
$this->elementEnd('geo');
}
}
function showTwitterRssItem($entry)
{
$this->elementStart('item');
@@ -510,6 +542,7 @@ class ApiAction extends Action
}
}
$this->showGeoRSS($entry['geo']);
$this->elementEnd('item');
}
@@ -534,7 +567,6 @@ class ApiAction extends Action
$this->endDocument('json');
}
function showXmlTimeline($notice)
{
@@ -654,7 +686,6 @@ class ApiAction extends Action
$this->endTwitterRss();
}
function showTwitterAtomEntry($entry)
{
$this->elementStart('entry');
@@ -1079,7 +1110,7 @@ class ApiAction extends Action
function initTwitterAtom()
{
$this->startXML();
// FIXME: do not hardcode the language here!
// FIXME: don't hardcode the language here!
$this->elementStart('feed', array('xmlns' => 'http://www.w3.org/2005/Atom',
'xml:lang' => 'en-US',
'xmlns:thr' => 'http://purl.org/syndication/thread/1.0'));
@@ -1121,7 +1152,7 @@ class ApiAction extends Action
return User::staticGet('nickname', $nickname);
} else if ($this->arg('user_id')) {
// This is to ensure that a non-numeric user_id still
// overrides screen_name even if it does not get used
// overrides screen_name even if it doesn't get used
if (is_numeric($this->arg('user_id'))) {
return User::staticGet('id', $this->arg('user_id'));
}
@@ -1151,7 +1182,7 @@ class ApiAction extends Action
return User_group::staticGet('nickname', $nickname);
} else if ($this->arg('group_id')) {
// This is to ensure that a non-numeric user_id still
// overrides screen_name even if it does not get used
// overrides screen_name even if it doesn't get used
if (is_numeric($this->arg('group_id'))) {
return User_group::staticGet('id', $this->arg('group_id'));
}