*/
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
-class Profile extends Memcached_DataObject
+class Profile extends Managed_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
return Memcached_DataObject::staticGet('Profile',$k,$v);
}
+ public static function schemaDef()
+ {
+ return array(
+ 'description' => 'local and remote users have profiles',
+ 'fields' => array(
+ 'id' => array('type' => 'serial', 'not null' => true, 'description' => 'unique identifier'),
+ 'nickname' => array('type' => 'varchar', 'length' => 64, 'not null' => true, 'description' => 'nickname or username', 'collate' => 'utf8_general_ci'),
+ 'fullname' => array('type' => 'varchar', 'length' => 255, 'description' => 'display name', 'collate' => 'utf8_general_ci'),
+ 'profileurl' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL, cached so we dont regenerate'),
+ 'homepage' => array('type' => 'varchar', 'length' => 255, 'description' => 'identifying URL', 'collate' => 'utf8_general_ci'),
+ 'bio' => array('type' => 'text', 'description' => 'descriptive biography', 'collate' => 'utf8_general_ci'),
+ 'location' => array('type' => 'varchar', 'length' => 255, 'description' => 'physical location', 'collate' => 'utf8_general_ci'),
+ 'lat' => array('type' => 'numeric', 'precision' => 10, 'scale' => 7, 'description' => 'latitude'),
+ 'lon' => array('type' => 'numeric', 'precision' => 10, 'scale' => 7, 'description' => 'longitude'),
+ 'location_id' => array('type' => 'int', 'description' => 'location id if possible'),
+ 'location_ns' => array('type' => 'int', 'description' => 'namespace for location'),
+
+ 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
+ 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
+ ),
+ 'primary key' => array('id'),
+ 'indexes' => array(
+ 'profile_nickname_idx' => array('nickname'),
+ )
+ );
+ }
+
function multiGet($keyCol, $keyVals, $skipNulls=true)
{
return parent::multiGet('Profile', $keyCol, $keyVals, $skipNulls);
return $this->_user;
}
- protected $_avatars = array();
+ protected $_avatars;
function getAvatar($width, $height=null)
{
$height = $width;
}
+ if (!isset($this->_avatars)) {
+ $this->_avatars = array();
+ }
+
if (array_key_exists($width, $this->_avatars)) {
return $this->_avatars[$width];
}
function isMember($group)
{
- $gm = Group_member::pkeyGet(array('profile_id' => $this->id,
- 'group_id' => $group->id));
- return (!empty($gm));
+ $groups = $this->getGroups(0, null);
+ $gs = $groups->fetchAll();
+ foreach ($gs as $g) {
+ if ($group->id == $g->id) {
+ return true;
+ }
+ }
+ return false;
}
function isAdmin($group)
$tags->tagged = $this->id;
$lists->joinAdd($tags);
+
#@fixme: postgres (round(date_part('epoch', my_date)))
$lists->selectAdd('unix_timestamp(profile_tag.modified) as "cursor"');
$lists = new Profile_list();
$subs = new Profile_tag_subscription();
- $lists->joinAdd($subs);
+ $lists->joinAdd('id', 'profile_tag_subscription:profile_tag_id');
+
#@fixme: postgres (round(date_part('epoch', my_date)))
$lists->selectAdd('unix_timestamp(profile_tag_subscription.created) as "cursor"');
$faves = new Fave();
$faves->user_id = $this->id;
- $cnt = (int) $faves->count('distinct notice_id');
+ $cnt = (int) $faves->count('notice_id');
if (!empty($c)) {
$c->set(Cache::key('profile:fave_count:'.$this->id), $cnt);
$ids[] = $profile->id;
}
- common_debug('Got here');
-
$avatars = Avatar::pivotGet('profile_id', $ids, array('width' => $width,
'height' => $width));
- common_debug(sprintf('Got %d avatars for %d profiles', count($avatars), count($ids)));
-
foreach ($profiles as $profile) {
$profile->_fillAvatar($width, $avatars[$profile->id]);
}