$user = null;
}
- $twitter_user['id'] = intval($profile->id);
+ $twitter_user['id'] = $profile->getID();
$twitter_user['name'] = $profile->getBestName();
- $twitter_user['screen_name'] = $profile->nickname;
- $twitter_user['location'] = ($profile->location) ? $profile->location : null;
- $twitter_user['description'] = ($profile->bio) ? $profile->bio : null;
+ $twitter_user['screen_name'] = $profile->getNickname();
+ $twitter_user['location'] = $profile->location;
+ $twitter_user['description'] = $profile->getDescription();
// TODO: avatar url template (example.com/user/avatar?size={x}x{y})
$twitter_user['profile_image_url'] = Avatar::urlByProfile($profile, AVATAR_STREAM_SIZE);
$twitter_user['friends_count'] = $profile->subscriptionCount();
- $twitter_user['created_at'] = $this->dateTwitter($profile->created);
+ $twitter_user['created_at'] = self::dateTwitter($profile->created);
$timezone = 'UTC';
$sub = Subscription::getSubscription($this->scoped, $profile);
// Notifications on?
$twitter_user['following'] = true;
- $twitter_user['statusnet_blocking'] = $this->scoped->hasBlocked($profile);
$twitter_user['notifications'] = ($sub->jabber || $sub->sms);
} catch (NoResultException $e) {
// well, the values are already false...
}
+ $twitter_user['statusnet_blocking'] = $this->scoped->hasBlocked($profile);
}
if ($get_notice) {
$twitter_status = array();
$twitter_status['text'] = $notice->content;
$twitter_status['truncated'] = false; # Not possible on StatusNet
- $twitter_status['created_at'] = $this->dateTwitter($notice->created);
+ $twitter_status['created_at'] = self::dateTwitter($notice->created);
try {
// We could just do $notice->reply_to but maybe the future holds a
// different story for parenting.
$in_reply_to = $parent->id;
} catch (NoParentNoticeException $e) {
$in_reply_to = null;
+ } catch (NoResultException $e) {
+ // the in_reply_to message has probably been deleted
+ $in_reply_to = null;
}
$twitter_status['in_reply_to_status_id'] = $in_reply_to;
$twitter_status['in_reply_to_screen_name'] =
($replier_profile) ? $replier_profile->nickname : null;
- if (isset($notice->lat) && isset($notice->lon)) {
+ try {
+ $notloc = Notice_location::locFromStored($notice);
// 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 {
+ 'coordinates' => array((float) $notloc->lat,
+ (float) $notloc->lon));
+ } catch (ServerException $e) {
$twitter_status['geo'] = null;
}
// StatusNet-specific
- $twitter_status['statusnet_html'] = $notice->rendered;
+ $twitter_status['statusnet_html'] = $notice->getRendered();
$twitter_status['statusnet_conversation_id'] = intval($notice->conversation);
// The event call to handle NoticeSimpleStatusArray lets plugins add data to the output array
$twitter_group['homepage'] = $group->homepage;
$twitter_group['description'] = $group->description;
$twitter_group['location'] = $group->location;
- $twitter_group['created'] = $this->dateTwitter($group->created);
- $twitter_group['modified'] = $this->dateTwitter($group->modified);
+ $twitter_group['created'] = self::dateTwitter($group->created);
+ $twitter_group['modified'] = self::dateTwitter($group->modified);
return $twitter_group;
}
// We trim() to avoid extraneous whitespace in the output
- $entry['content'] = common_xml_safe_str(trim($notice->rendered));
+ $entry['content'] = common_xml_safe_str(trim($notice->getRendered()));
$entry['title'] = $profile->nickname . ': ' . common_xml_safe_str(trim($notice->content));
$entry['link'] = common_local_url('shownotice', array('notice' => $notice->id));
$entry['published'] = common_date_iso8601($notice->created);
$entry['pubDate'] = common_date_rfc2822($notice->created);
$entry['guid'] = $entry['link'];
- if (isset($notice->lat) && isset($notice->lon)) {
+ try {
+ $notloc = Notice_location::locFromStored($notice);
// 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 {
+ 'coordinates' => array((float) $notloc->lat,
+ (float) $notloc->lon));
+ } catch (ServerException $e) {
$entry['geo'] = null;
}
break;
default:
if (strncmp($element, 'statusnet_', 10) == 0) {
+ if ($element === 'statusnet_in_groups' && is_array($value)) {
+ // QVITTERFIX because it would cause an array to be sent as $value
+ // THIS IS UNDOCUMENTED AND SHOULD NEVER BE RELIED UPON (qvitter uses json output)
+ $value = json_encode($value);
+ }
$this->element('statusnet:'.substr($element, 10), null, $value);
} else {
$this->element($element, null, $value);
function showJsonObjects($objects)
{
- print(json_encode($objects));
+ $json_objects = json_encode($objects);
+ if($json_objects === false) {
+ $this->clientError(_('JSON encoding failed. Error: ').json_last_error_msg());
+ } else {
+ print $json_objects;
+ }
}
+
function showSingleXmlStatus($notice)
{
$this->initDocument('xml');
'xmlns:statusnet' => 'http://status.net/schema/api/1/'));
if (is_array($notice)) {
- $notice = new ArrayWrapper($notice);
+ //FIXME: make everything calling showJsonTimeline use only Notice objects
+ $ids = array();
+ foreach ($notice as $n) {
+ $ids[] = $n->getID();
+ }
+ $notice = Notice::multiGet('id', $ids);
}
while ($notice->fetch()) {
$this->element('ttl', null, '40');
if (is_array($notice)) {
- $notice = new ArrayWrapper($notice);
+ //FIXME: make everything calling showJsonTimeline use only Notice objects
+ $ids = array();
+ foreach ($notice as $n) {
+ $ids[] = $n->getID();
+ }
+ $notice = Notice::multiGet('id', $ids);
}
while ($notice->fetch()) {
$this->element('subtitle', null, $subtitle);
if (is_array($notice)) {
- $notice = new ArrayWrapper($notice);
+ //FIXME: make everything calling showJsonTimeline use only Notice objects
+ $ids = array();
+ foreach ($notice as $n) {
+ $ids[] = $n->getID();
+ }
+ $notice = Notice::multiGet('id', $ids);
}
while ($notice->fetch()) {
$statuses = array();
if (is_array($notice)) {
- $notice = new ArrayWrapper($notice);
+ //FIXME: make everything calling showJsonTimeline use only Notice objects
+ $ids = array();
+ foreach ($notice as $n) {
+ $ids[] = $n->getID();
+ }
+ $notice = Notice::multiGet('id', $ids);
}
while ($notice->fetch()) {
$this->endDocument('xml');
}
- function dateTwitter($dt)
+ static function dateTwitter($dt)
{
$dateStr = date('d F Y H:i:s', strtotime($dt));
$d = new DateTime($dateStr, new DateTimeZone('UTC'));
if (self::is_decimal($this->arg('user_id'))) {
return Profile::getKV('id', $this->arg('user_id'));
}
- } else if ($this->arg('screen_name')) {
+ } elseif (mb_strlen($this->arg('screen_name')) > 0) {
$nickname = common_canonical_nickname($this->arg('screen_name'));
- $user = User::getKV('nickname', $nickname);
- return $user instanceof User ? $user->getProfile() : null;
+ $user = User::getByNickname($nickname);
+ return $user->getProfile();
} else {
// Fall back to trying the currently authenticated user
return $this->scoped;
}
- } else if (self::is_decimal($id)) {
- return Profile::getKV($id);
+ } else if (self::is_decimal($id) && intval($id) > 0) {
+ return Profile::getByID($id);
} else {
+ // FIXME: check if isAcct to identify remote profiles and not just local nicknames
$nickname = common_canonical_nickname($id);
- $user = User::getKV('nickname', $nickname);
- return $user ? $user->getProfile() : null;
+ $user = User::getByNickname($nickname);
+ return $user->getProfile();
}
}