"Notice: Trying to get property of non-object in..." when doing search.json

"Notice: Trying to get property of non-object in..." when doing search.json

Issue ID:3478
Issue Category:bug
Keywords:1.0.1, api, avatar, json, notice, php, profile, search, statusnet

i get the following error when doing an api-request:
Notice: Trying to get property of non-object in /var/kunden/web14/user/elevate.at_peter.wetz/web/statusnet/classes/Profile.php on line 146

the request is the following:

the code in profile.php is the following:
142 // GAR! I cannot figure out where _avatars gets pre-filled with the avatar from
143 // the previously used profile! Please shoot me now! --Zach
144 if (array_key_exists($width, $this->_avatars)) {
145 // Don't return cached avatar unless it's really for this profile
146 if ($this->_avatars[$width]->profile_id == $this->id) {
147 return $this->_avatars[$width];
148 }
149 }

infos to my statusnet-version: http://status.elevate.at/main/version
i have shell access and everything..
phpinfo: http://elevate.at/users/elevate.at_peter.wetz/phpinfo.php

statusnet-log says:
2011-10-14 08:24:59 LOG_WARNING: [status.elevate.at:13033.c03ca52a GET /api/search.json?q=%23e11opening&rpp=20&callback=jQuery16407833815943754445_1318579877532&_=1318580699072] Unable to find theme 'default', falling back to default theme 'neo'


2011-10-14 08:24:59 LOG_DEBUG: [status.elevate.at:13033.c03ca52a GET /api/search.json?q=%23e11opening&rpp=20&callback=jQuery16407833815943754445_1318579877532&_=1318580699072] apisearchjson prepare()



btw: this issue does not neccessarily need to have something to do with the upgrad to version 1.0!


i think the problem is that statusnet confuses the users here..
why i think that? because the API response is (if i comment the code which makes problems right now (profile.php)) putting in the wrong users:

one API response is:
"text": "@elevatefestival starts Oct.20th in Graz. Feat. Johan Galtung opening speech + Kumi Naidoo + more http://ur1.ca/5d1pl #E11fest #E11opening",
"to_user_id": null,
"to_user": null,
"from_user": "beta",
"id": "106",
"from_user_id": "7",
"iso_language_code": null,
"source": "Gwibber",
"profile_image_url": "http://status.elevate.at/theme/neo/default-avatar-stream.png",
"created_at": "Mon, 10 Oct 2011 20:48:01 +0000"

the problem is that the notice actually doesnt come from:
"from_user": "beta",
"from_user_id": "7",

as you can see here the notice is coming from the user DAN:

and thats why i think that in the end there is a problem in the profile.php file...

so: why is search.json returning the wrong users for the notices?


Simple fix - don't know whether it will solve the underlying problem.

in /path/to/SN/classes/Profile.php at line 144, change:

if (array_key_exists($width, $this->_avatars)) {


if (array_key_exists($width, $this->_avatars) && is_object($this->_avatars[$width])) {


Jon's fix will probably take care of all the error messages. However to solve the problem at its roots, it all arises in the Profile class _fillAvatar function (as a result from caching attempts in its getAvatar function?)

So my suggestion for avoiding generating new non-object entries in the Profile _avatars array is to make the function look like this:

function _fillAvatar($width, $avatar)
// This avoids storing null values, causing
if (is_object($avatar)) {
$this->_avatars[$width] = $avatar;

I'm submitting this as a merge request together with several other improvements to Avatar handling...


Please see merge request #186 at https://gitorious.org/statusnet/mainline/merge_requests/186 for the merge request I mentioned.

Login or Register to modify this issue, or to receive updates by email.

You can also subscribe to the RSS feed for updates to this issue.