Merge branch 'lists_fixes' into 1.0.x
This commit is contained in:
commit
da6822c1f0
@ -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,
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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');
|
||||||
|
$list->tagger = $this->id;
|
||||||
|
$list->selectAdd('id as "cursor"');
|
||||||
|
|
||||||
|
if ($since_id>0) {
|
||||||
|
$list->whereAdd('id > '.$since_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($max_id>0) {
|
||||||
|
$list->whereAdd('id <= '.$max_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($offset>=0 && !is_null($limit)) {
|
||||||
|
$list->limit($offset, $limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
$list->orderBy('id DESC');
|
||||||
|
|
||||||
|
if ($list->find()) {
|
||||||
|
while ($list->fetch()) {
|
||||||
|
$ids[] = $list->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self::cacheSet($keypart, implode(',', $ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
$tags->selectAdd('id as "cursor"');
|
$showPrivate = (($auth_user instanceof User ||
|
||||||
|
$auth_user instanceof Profile) &&
|
||||||
|
$auth_user->id === $this->id);
|
||||||
|
|
||||||
if ($since_id>0) {
|
$lists = array();
|
||||||
$tags->whereAdd('id > '.$since_id);
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($max_id>0) {
|
return new ArrayWrapper($lists);
|
||||||
$tags->whereAdd('id <= '.$max_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($offset>=0 && !is_null($limit)) {
|
|
||||||
$tags->limit($offset, $limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
$tags->orderBy('id DESC');
|
|
||||||
$tags->find();
|
|
||||||
|
|
||||||
return $tags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
73
doc-src/lists
Normal file
73
doc-src/lists
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<!-- Copyright 2008-2010 StatusNet Inc. and contributors. -->
|
||||||
|
<!-- Document licensed under Creative Commons Attribution 3.0 Unported. See -->
|
||||||
|
<!-- http://creativecommons.org/licenses/by/3.0/ for details. -->
|
||||||
|
|
||||||
|
%%site.name%% supports
|
||||||
|
[tags](http://en.wikipedia.org/wiki/Tag_(metadata)) to help you
|
||||||
|
organize your activities here. You can use tags for people and for
|
||||||
|
notices.
|
||||||
|
|
||||||
|
Tagging a notice
|
||||||
|
----------------
|
||||||
|
|
||||||
|
You can tag a notice using a *hashtag*; a # character followed by
|
||||||
|
letters and numbers as well as '.', '-', and '_'. Note that accented
|
||||||
|
latin characters are not supported, and non-roman scripts are right out.
|
||||||
|
|
||||||
|
The HTML for the notice will link to a stream of all the other notices
|
||||||
|
with that tag. This can be a great way to keep track of a conversation.
|
||||||
|
|
||||||
|
The most popular current tags on the site can be found in the [public
|
||||||
|
tag cloud](%%action.publictagcloud%%). Their size shows their
|
||||||
|
popularity and recency.
|
||||||
|
|
||||||
|
Tagging yourself
|
||||||
|
----------------
|
||||||
|
|
||||||
|
You can also add tags for yourself on your [profile
|
||||||
|
settings](%%action.profilesettings%%) page or by using the edit tags
|
||||||
|
button on your profile page. Use single words to
|
||||||
|
describe yourself, your experiences and your interest. The tags will
|
||||||
|
become links on your profile page to a list of all the users on the
|
||||||
|
site who use that same tag. It can be a nice way to find people who
|
||||||
|
are related to you geographically or who have a common interest.
|
||||||
|
|
||||||
|
Tagging others
|
||||||
|
--------------
|
||||||
|
|
||||||
|
You can also tag other users by using the edit tags button next to
|
||||||
|
their profile. Such tags are called *people tags*. Once you have
|
||||||
|
created a people tag, you can add or remove users from it using the
|
||||||
|
tag's edit form. This makes it easy to organize your subscriptions
|
||||||
|
into groups and sort through them separately. Also, it will let
|
||||||
|
you create custom lists of people that others can subscribe to.
|
||||||
|
|
||||||
|
You can also send a notice "to the attention of" your subscribers
|
||||||
|
whom you've marked with a particular tag (note: *not* people who've
|
||||||
|
marked themselves with that tag). "@#family hello" will send a
|
||||||
|
notice to all your subscribers you've marked with the tag 'family'.
|
||||||
|
|
||||||
|
Private and public people tags
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
A private people tag is only visible to the creator, it cannot be
|
||||||
|
subscribed to, but the timeline can be viewed. To create a new
|
||||||
|
private prepend a '.' to the tag in the tags editing box. To set
|
||||||
|
an existing public tag as private or vice-versa, go to the tag's
|
||||||
|
edit page.
|
||||||
|
|
||||||
|
The most used public tags are displayed in the
|
||||||
|
[public people tag cloud](%%action.publicpeopletagcloud%%). Their
|
||||||
|
size shows their frequency of use.
|
||||||
|
|
||||||
|
Remote people tags
|
||||||
|
------------------
|
||||||
|
|
||||||
|
You can even [tag remote users](%%action.profilesettings%%). Just
|
||||||
|
enter the remote profile's URI and click on the "Fetch" button to
|
||||||
|
fetch the profile, you can then add tags and save them.
|
||||||
|
|
||||||
|
Subscribing to the timeline of a people tag on another server also
|
||||||
|
works. Just copy the URL of the people tag's timeline page to the
|
||||||
|
[OStatus subscription](%%action.ostatussub%%) form.
|
||||||
|
|
@ -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()
|
||||||
|
@ -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',
|
||||||
|
Loading…
Reference in New Issue
Block a user