forked from GNUsocial/gnu-social
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
|
||||
$count = 20;
|
||||
$profile = $this->user->getProfile();
|
||||
$fn = array($profile, 'getOwnedTags');
|
||||
$fn = array($profile, 'getLists');
|
||||
|
||||
list($this->lists,
|
||||
$this->next_cursor,
|
||||
|
@ -70,7 +70,7 @@ class PeopletagautocompleteAction extends Action
|
||||
}
|
||||
|
||||
$profile = $this->user->getProfile();
|
||||
$tags = $profile->getOwnedTags(common_current_user());
|
||||
$tags = $profile->getLists(common_current_user());
|
||||
|
||||
$this->tags = array();
|
||||
while ($tags->fetch()) {
|
||||
@ -88,7 +88,7 @@ class PeopletagautocompleteAction extends Action
|
||||
$this->tags[] = $arr;
|
||||
}
|
||||
|
||||
$tags->free();
|
||||
$tags = NULL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ class PeopletagsbyuserAction extends OwnerDesignAction
|
||||
|
||||
$user = common_current_user();
|
||||
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')) {
|
||||
if (empty($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);
|
||||
}
|
||||
} else {
|
||||
$this->tags = $this->tagger->getOwnedTags(common_current_user(), $offset, $limit);
|
||||
$this->tags = $this->tagger->getLists(common_current_user(), $offset, $limit);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -321,36 +321,66 @@ class Profile extends Memcached_DataObject
|
||||
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();
|
||||
$tags->tagger = $this->id;
|
||||
$ids = array();
|
||||
|
||||
if (($auth_user instanceof User || $auth_user instanceof Profile) &&
|
||||
$auth_user->id === $this->id) {
|
||||
// no condition, get both private and public tags
|
||||
$keypart = sprintf('profile:lists:%d', $this->id);
|
||||
|
||||
$idstr = self::cacheGet($keypart);
|
||||
|
||||
if ($idstr !== false) {
|
||||
$ids = explode(',', $idstr);
|
||||
} else {
|
||||
$tags->private = false;
|
||||
}
|
||||
|
||||
$tags->selectAdd('id as "cursor"');
|
||||
$list = new Profile_list();
|
||||
$list->selectAdd();
|
||||
$list->selectAdd('id');
|
||||
$list->tagger = $this->id;
|
||||
$list->selectAdd('id as "cursor"');
|
||||
|
||||
if ($since_id>0) {
|
||||
$tags->whereAdd('id > '.$since_id);
|
||||
$list->whereAdd('id > '.$since_id);
|
||||
}
|
||||
|
||||
if ($max_id>0) {
|
||||
$tags->whereAdd('id <= '.$max_id);
|
||||
$list->whereAdd('id <= '.$max_id);
|
||||
}
|
||||
|
||||
if($offset>=0 && !is_null($limit)) {
|
||||
$tags->limit($offset, $limit);
|
||||
$list->limit($offset, $limit);
|
||||
}
|
||||
|
||||
$tags->orderBy('id DESC');
|
||||
$tags->find();
|
||||
$list->orderBy('id DESC');
|
||||
|
||||
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)
|
||||
@ -1323,42 +1353,4 @@ class Profile extends Memcached_DataObject
|
||||
}
|
||||
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();
|
||||
|
||||
$this->lists = $profile->getOwnedTags($user);
|
||||
$this->lists = $profile->getLists($user);
|
||||
}
|
||||
|
||||
function show()
|
||||
|
@ -279,9 +279,8 @@ class ProfileAction extends OwnerDesignAction
|
||||
function showLists()
|
||||
{
|
||||
$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) {
|
||||
$this->elementStart('div', array('id' => 'entity_lists',
|
||||
|
Loading…
Reference in New Issue
Block a user