Profile::getOwnedTags -> Profile::getLists, first argument is the current user, or the user accessing the lists.

This commit is contained in:
Shashi Gowda 2011-04-15 18:21:47 +05:30
parent abcfde4d7d
commit b78e5de474
6 changed files with 59 additions and 68 deletions

View File

@ -189,7 +189,7 @@ class ApiListsAction extends ApiBareAuthAction
// there is no argument named count // there is no argument named count
$count = 20; $count = 20;
$profile = $this->user->getProfile(); $profile = $this->user->getProfile();
$fn = array($profile, 'getOwnedTags'); $fn = array($profile, 'getLists');
list($this->lists, list($this->lists,
$this->next_cursor, $this->next_cursor,

View File

@ -70,7 +70,7 @@ class PeopletagautocompleteAction extends Action
} }
$profile = $this->user->getProfile(); $profile = $this->user->getProfile();
$tags = $profile->getOwnedTags(common_current_user()); $tags = $profile->getLists(common_current_user());
$this->tags = array(); $this->tags = array();
while ($tags->fetch()) { while ($tags->fetch()) {
@ -88,7 +88,7 @@ class PeopletagautocompleteAction extends Action
$this->tags[] = $arr; $this->tags[] = $arr;
} }
$tags->free(); $tags = NULL;
return true; return true;
} }

View File

@ -114,7 +114,7 @@ class PeopletagsbyuserAction extends OwnerDesignAction
$user = common_current_user(); $user = common_current_user();
if ($this->arg('public')) { if ($this->arg('public')) {
$this->tags = $this->tagger->getOwnedTags(false, $offset, $limit); $this->tags = $this->tagger->getLists(false, $offset, $limit);
} else if ($this->arg('private')) { } else if ($this->arg('private')) {
if (empty($user)) { if (empty($user)) {
// TRANS: Error message displayed when trying to perform an action that requires a logged in user. // TRANS: Error message displayed when trying to perform an action that requires a logged in user.
@ -128,7 +128,7 @@ class PeopletagsbyuserAction extends OwnerDesignAction
$this->clientError(_('You cannot view others\' private lists'), 403); $this->clientError(_('You cannot view others\' private lists'), 403);
} }
} else { } else {
$this->tags = $this->tagger->getOwnedTags(common_current_user(), $offset, $limit); $this->tags = $this->tagger->getLists(common_current_user(), $offset, $limit);
} }
return true; return true;
} }

View File

@ -321,36 +321,66 @@ class Profile extends Memcached_DataObject
return false; return false;
} }
function getOwnedTags($auth_user, $offset=0, $limit=null, $since_id=0, $max_id=0) function getLists($auth_user, $offset=0, $limit=null, $since_id=0, $max_id=0)
{ {
$tags = new Profile_list(); $ids = array();
$tags->tagger = $this->id;
if (($auth_user instanceof User || $auth_user instanceof Profile) && $keypart = sprintf('profile:lists:%d', $this->id);
$auth_user->id === $this->id) {
// no condition, get both private and public tags $idstr = self::cacheGet($keypart);
if ($idstr !== false) {
$ids = explode(',', $idstr);
} else { } else {
$tags->private = false; $list = new Profile_list();
} $list->selectAdd();
$list->selectAdd('id');
$tags->selectAdd('id as "cursor"'); $list->tagger = $this->id;
$list->selectAdd('id as "cursor"');
if ($since_id>0) { if ($since_id>0) {
$tags->whereAdd('id > '.$since_id); $list->whereAdd('id > '.$since_id);
} }
if ($max_id>0) { if ($max_id>0) {
$tags->whereAdd('id <= '.$max_id); $list->whereAdd('id <= '.$max_id);
} }
if($offset>=0 && !is_null($limit)) { if($offset>=0 && !is_null($limit)) {
$tags->limit($offset, $limit); $list->limit($offset, $limit);
} }
$tags->orderBy('id DESC'); $list->orderBy('id DESC');
$tags->find();
return $tags; if ($list->find()) {
while ($list->fetch()) {
$ids[] = $list->id;
}
}
self::cacheSet($keypart, implode(',', $ids));
}
$showPrivate = (($auth_user instanceof User ||
$auth_user instanceof Profile) &&
$auth_user->id === $this->id);
$lists = array();
foreach ($ids as $id) {
$list = Profile_list::staticGet('id', $id);
if (!empty($list) &&
($showPrivate || !$list->private)) {
if (!isset($list->cursor)) {
$list->cursor = $list->id;
}
$lists[] = $list;
}
}
return new ArrayWrapper($lists);
} }
function getOtherTags($auth_user=null, $offset=0, $limit=null, $since_id=0, $max_id=0) function getOtherTags($auth_user=null, $offset=0, $limit=null, $since_id=0, $max_id=0)
@ -1323,42 +1353,4 @@ class Profile extends Memcached_DataObject
} }
return $profile; return $profile;
} }
function getLists()
{
$ids = array();
$keypart = sprintf('profile:lists:%d', $this->id);
$idstr = self::cacheGet($keypart);
if ($idstr !== false) {
$ids = explode(',', $idstr);
} else {
$list = new Profile_list();
$list->selectAdd();
$list->selectAdd('id');
$list->tagger = $this->id;
if ($list->find()) {
while ($list->fetch()) {
$ids[] = $list->id;
}
}
self::cacheSet($keypart, implode(',', $ids));
}
$lists = array();
foreach ($ids as $id) {
$list = Profile_list::staticGet('id', $id);
if (!empty($list) &&
($showPrivate || !$list->private)) {
$lists[] = $list;
}
}
return new ArrayWrapper($lists);
}
} }

View File

@ -51,7 +51,7 @@ class ListsNav extends Menu
$user = common_current_user(); $user = common_current_user();
$this->lists = $profile->getOwnedTags($user); $this->lists = $profile->getLists($user);
} }
function show() function show()

View File

@ -279,9 +279,8 @@ class ProfileAction extends OwnerDesignAction
function showLists() function showLists()
{ {
$cur = common_current_user(); $cur = common_current_user();
$showPrivate = (!empty($cur) && $cur->id == $this->profile->id);
$lists = $this->profile->getLists($showPrivate); $lists = $this->profile->getLists($cur);
if ($lists->N > 0) { if ($lists->N > 0) {
$this->elementStart('div', array('id' => 'entity_lists', $this->elementStart('div', array('id' => 'entity_lists',