forked from GNUsocial/gnu-social
Merge remote-tracking branch 'gitorious/1.0.x' into 1.0.x
This commit is contained in:
commit
0925b96840
@ -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,
|
||||
|
@ -47,12 +47,12 @@ class EditpeopletagAction extends OwnerDesignAction
|
||||
function title()
|
||||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $this->boolean('delete')) {
|
||||
// TRANS: Title for edit people tag page after deleting a tag.
|
||||
// TRANS: %s is a tag.
|
||||
// TRANS: Title for edit list page after deleting a tag.
|
||||
// TRANS: %s is a list.
|
||||
return sprintf(_('Delete %s list'), $this->peopletag->tag);
|
||||
}
|
||||
// TRANS: Title for edit people tag page.
|
||||
// TRANS: %s is a tag.
|
||||
// TRANS: Title for edit list page.
|
||||
// TRANS: %s is a list.
|
||||
return sprintf(_('Edit list %s'), $this->peopletag->tag);
|
||||
}
|
||||
|
||||
@ -105,7 +105,7 @@ class EditpeopletagAction extends OwnerDesignAction
|
||||
}
|
||||
|
||||
if (!$this->peopletag) {
|
||||
// TRANS: Client error displayed when referring to a non-exsting people tag.
|
||||
// TRANS: Client error displayed when referring to a non-exsting list.
|
||||
$this->clientError(_('No such list.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -215,7 +215,7 @@ class EditpeopletagAction extends OwnerDesignAction
|
||||
$this->element('p', 'instructions', $this->confirm);
|
||||
} else {
|
||||
$this->element('p', 'instructions',
|
||||
// TRANS: Form instruction for edit people tag form.
|
||||
// TRANS: Form instruction for edit list form.
|
||||
_('Use this form to edit the list.'));
|
||||
}
|
||||
}
|
||||
@ -293,7 +293,7 @@ class EditpeopletagAction extends OwnerDesignAction
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($this->group, 'UPDATE', __FILE__);
|
||||
// TRANS: TRANS: Server error displayed when updating a people tag fails.
|
||||
// TRANS: TRANS: Server error displayed when updating a list fails.
|
||||
$this->serverError(_('Could not update list.'));
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ class PeopletaggedAction extends OwnerDesignAction
|
||||
$this->peopletag = Profile_list::pkeyGet(array('tagger' => $user->id, 'tag' => $tag));
|
||||
|
||||
if (!$this->peopletag) {
|
||||
// TRANS: Client error displayed when referring to non-existing people tag.
|
||||
// TRANS: Client error displayed when referring to a non-existing list.
|
||||
$this->clientError(_('No such list.'), 404);
|
||||
return false;
|
||||
}
|
||||
@ -103,13 +103,13 @@ class PeopletaggedAction extends OwnerDesignAction
|
||||
function title()
|
||||
{
|
||||
if ($this->page == 1) {
|
||||
// TRANS: Title for list of people tagged by the user with a tag.
|
||||
// TRANS: %1$s is a tag, %2$s is a username.
|
||||
// TRANS: Title for list of people listed by the user.
|
||||
// TRANS: %1$s is a list, %2$s is a username.
|
||||
return sprintf(_('People listed in %1$s by %2$s'),
|
||||
$this->peopletag->tag, $this->tagger->nickname);
|
||||
} else {
|
||||
// TRANS: Title for list of people tagged by the user with a tag.
|
||||
// TRANS: %1$s is a tag, %2$s is a username, %2$s is a page number.
|
||||
// TRANS: Title for list of people listed by the user.
|
||||
// TRANS: %1$s is a list, %2$s is a username, %2$s is a page number.
|
||||
return sprintf(_('People listed in %1$s by %2$s, page %3$d'),
|
||||
$this->peopletag->tag, $this->user->nickname,
|
||||
$this->page);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ class PeopletagsforuserAction extends OwnerDesignAction
|
||||
function showAnonymousMessage()
|
||||
{
|
||||
$notice =
|
||||
// TRANS: Message displayed for anonymous users on page that displays people tags for a user.
|
||||
// TRANS: Message displayed for anonymous users on page that displays lists for a user.
|
||||
// TRANS: This message contains Markdown links in the form [description](links).
|
||||
// TRANS: %s is a tagger nickname.
|
||||
sprintf(_('These are lists for **%s**. ' .
|
||||
@ -138,7 +138,7 @@ class PeopletagsforuserAction extends OwnerDesignAction
|
||||
|
||||
function showEmptyListMessage()
|
||||
{
|
||||
// TRANS: Message displayed on page that displays people tags for a user when there are none.
|
||||
// TRANS: Message displayed on page that displays lists for a user when there are none.
|
||||
// TRANS: This message contains Markdown links in the form [description](links).
|
||||
// TRANS: %s is a tagger nickname.
|
||||
$message = sprintf(_('%s has not been [listed](%%%%doc.lists%%%%) by anyone yet.'), $this->tagged->nickname);
|
||||
|
@ -46,11 +46,11 @@ class PeopletagsubscriptionsAction extends OwnerDesignAction
|
||||
function title()
|
||||
{
|
||||
if ($this->page == 1) {
|
||||
// TRANS: Title for page that displays people tags subscribed to by a user.
|
||||
// TRANS: Title for page that displays lists subscribed to by a user.
|
||||
// TRANS: %s is a profile nickname.
|
||||
return sprintf(_('Lists subscribed to by %s'), $this->profile->nickname);
|
||||
} else {
|
||||
// TRANS: Title for page that displays people tags subscribed to by a user.
|
||||
// TRANS: Title for page that displays lists subscribed to by a user.
|
||||
// TRANS: %1$s is a profile nickname, %2$d is a page number.
|
||||
return sprintf(_('Lists subscribed to by %1$s, page %2$d'), $this->profile->nickname, $this->page);
|
||||
}
|
||||
@ -104,7 +104,7 @@ class PeopletagsubscriptionsAction extends OwnerDesignAction
|
||||
function showAnonymousMessage()
|
||||
{
|
||||
$notice =
|
||||
// TRANS: Message displayed for anonymous users on page that displays people tags subscribed to by a user.
|
||||
// TRANS: Message displayed for anonymous users on page that displays lists subscribed to by a user.
|
||||
// TRANS: This message contains Markdown links in the form [description](links).
|
||||
// TRANS: %s is a profile nickname.
|
||||
sprintf(_('These are lists subscribed to by **%s**. ' .
|
||||
|
@ -606,7 +606,6 @@ class RegisterAction extends Action
|
||||
function showSuccessContent()
|
||||
{
|
||||
if (Event::handle('onStartRegisterSuccess', array($this))) {
|
||||
|
||||
$nickname = $this->arg('nickname');
|
||||
|
||||
$profileurl = common_local_url('showstream',
|
||||
|
@ -120,7 +120,7 @@ class ShowprofiletagAction extends Action
|
||||
{
|
||||
if ($this->page > 1) {
|
||||
if($this->peopletag->private) {
|
||||
// TRANS: Title for private people tag timeline.
|
||||
// TRANS: Title for private list timeline.
|
||||
// TRANS: %1$s is a people tag, %2$s is a page number.
|
||||
return sprintf(_('Private timeline for %1$s list by you, page %2$d'),
|
||||
$this->peopletag->tag, $this->page);
|
||||
@ -128,13 +128,13 @@ class ShowprofiletagAction extends Action
|
||||
|
||||
$current = common_current_user();
|
||||
if (!empty($current) && $current->id == $this->peopletag->tagger) {
|
||||
// TRANS: Title for public people tag timeline where the viewer is the tagger.
|
||||
// TRANS: Title for public list timeline where the viewer is the tagger.
|
||||
// TRANS: %1$s is a people tag, %2$s is a page number.
|
||||
return sprintf(_('Timeline for %1$s list by you, page %2$d'),
|
||||
$this->peopletag->tag, $this->page);
|
||||
}
|
||||
|
||||
// TRANS: Title for private people tag timeline.
|
||||
// TRANS: Title for private list timeline.
|
||||
// TRANS: %1$s is a people tag, %2$s is the tagger's nickname, %3$d is a page number.
|
||||
return sprintf(_('Timeline for %1$s list by %2$s, page %3$d'),
|
||||
$this->peopletag->tag,
|
||||
@ -143,22 +143,22 @@ class ShowprofiletagAction extends Action
|
||||
);
|
||||
} else {
|
||||
if($this->peopletag->private) {
|
||||
// TRANS: Title for private people tag timeline.
|
||||
// TRANS: %s is a people tag.
|
||||
// TRANS: Title for private list timeline.
|
||||
// TRANS: %s is a list.
|
||||
return sprintf(_('Private timeline of %s list by you'),
|
||||
$this->peopletag->tag);
|
||||
}
|
||||
|
||||
$current = common_current_user();
|
||||
if (!empty($current) && $current->id == $this->peopletag->tagger) {
|
||||
// TRANS: Title for public people tag timeline where the viewer is the tagger.
|
||||
// TRANS: %s is a people tag.
|
||||
// TRANS: Title for public list timeline where the viewer is the tagger.
|
||||
// TRANS: %s is a list.
|
||||
return sprintf(_('Timeline for %s list by you'),
|
||||
$this->peopletag->tag);
|
||||
}
|
||||
|
||||
// TRANS: Title for private people tag timeline.
|
||||
// TRANS: %1$s is a people tag, %2$s is the tagger's nickname.
|
||||
// TRANS: Title for private list timeline.
|
||||
// TRANS: %1$s is a list, %2$s is the tagger's nickname.
|
||||
return sprintf(_('Timeline for %1$s list by %2$s'),
|
||||
$this->peopletag->tag,
|
||||
$this->tagger->nickname
|
||||
@ -189,7 +189,7 @@ class ShowprofiletagAction extends Action
|
||||
)
|
||||
),
|
||||
// TRANS: Feed title.
|
||||
// TRANS: %1$s is a people tag, %2$s is tagger's nickname.
|
||||
// TRANS: %1$s is a list, %2$s is tagger's nickname.
|
||||
sprintf(_('Feed for %1$s list by %2$s (Atom)'),
|
||||
$this->peopletag->tag, $this->tagger->nickname
|
||||
)
|
||||
@ -205,8 +205,8 @@ class ShowprofiletagAction extends Action
|
||||
|
||||
function showEmptyListMessage()
|
||||
{
|
||||
// TRANS: Empty list message for people tag timeline.
|
||||
// TRANS: %1$s is a people tag, %2$s is a tagger's nickname.
|
||||
// TRANS: Empty list message for list timeline.
|
||||
// TRANS: %1$s is a list, %2$s is a tagger's nickname.
|
||||
$message = sprintf(_('This is the timeline for %1$s list by %2$s but no one has posted anything yet.'),
|
||||
$this->peopletag->tag,
|
||||
$this->tagger->nickname) . ' ';
|
||||
@ -287,20 +287,8 @@ class ShowprofiletagAction extends Action
|
||||
if (Event::handle('StartShowTaggedProfilesMiniList', array($this))) {
|
||||
$title = '';
|
||||
|
||||
$current = common_current_user();
|
||||
if(!empty($current) && $this->peopletag->tagger == $current->id) {
|
||||
// TRANS: Header on show profile tag page.
|
||||
// TRANS: %s is a people tag.
|
||||
$title = sprintf(_('Listed'), $this->peopletag->tag);
|
||||
} else {
|
||||
// TRANS: Header on show profile tag page.
|
||||
// TRANS: %1$s is a people tag, %2$s is a tagger's nickname.
|
||||
$title = sprintf(_('Listed'),
|
||||
$this->peopletag->tag,
|
||||
$this->tagger->nickname);
|
||||
}
|
||||
|
||||
$this->element('h2', null, $title);
|
||||
// TRANS: Header on show list page.
|
||||
$this->element('h2', null, _('Listed'));
|
||||
|
||||
$cnt = 0;
|
||||
|
||||
@ -308,7 +296,7 @@ class ShowprofiletagAction extends Action
|
||||
$pml = new ProfileMiniList($profile, $this);
|
||||
$cnt = $pml->show();
|
||||
if ($cnt == 0) {
|
||||
// TRANS: Content of "People tagged x by a user" if there are no tagged users.
|
||||
// TRANS: Content of "Listed" page if there are no listed users.
|
||||
$this->element('p', null, _('(None)'));
|
||||
}
|
||||
}
|
||||
|
@ -227,8 +227,8 @@ class SubscriptionsListItem extends SubscriptionListItem
|
||||
}
|
||||
|
||||
$this->out->element('input', $attrs);
|
||||
// TRANS: Checkbox label for enabling Jabber messages for a profile in a subscriptions list.
|
||||
$this->out->element('label', array('for' => 'jabber-'.$this->profile->id), _('IM'));
|
||||
// TRANS: Checkbox label for enabling IM messages for a profile in a subscriptions list.
|
||||
$this->out->element('label', array('for' => 'jabber-'.$this->profile->id), _m('LABEL','IM'));
|
||||
} else {
|
||||
$this->out->hidden('jabber', $sub->jabber);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -28,8 +28,9 @@ Here are some documents that you might find helpful in understanding
|
||||
* [Contact](%%doc.contact%%) - who to contact with questions about the service
|
||||
* [IM](%%doc.im%%) - using the instant-message (IM) features of %%site.name%%
|
||||
* [SMS](%%doc.sms%%) - tying your cellphone to %%site.name%%
|
||||
* [tags](%%doc.tags%%) - different ways to use tagging
|
||||
* [Tags](%%doc.tags%%) - different ways to use tagging
|
||||
* [Groups](%%doc.groups%%) - joining together in groups
|
||||
* [Lists](%%doc.lists%%) - organize your contacts
|
||||
* [OpenMicroBlogging](%%doc.openmublog%%) - subscribing to remote users
|
||||
* [Privacy](%%doc.privacy%%) - %%site.name%%'s privacy policy
|
||||
* [Source](%%doc.source%%) - How to get the StatusNet source code
|
||||
|
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.
|
||||
|
@ -44,7 +44,6 @@ define('GROUPS_PER_MINILIST', 8);
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class GroupMiniList extends GroupList
|
||||
{
|
||||
function show()
|
||||
|
@ -44,7 +44,6 @@ if (!defined('STATUSNET')) {
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class InviteButtonSection extends Section
|
||||
{
|
||||
function showTitle()
|
||||
@ -57,7 +56,8 @@ class InviteButtonSection extends Section
|
||||
$this->out->element('a',
|
||||
array('href' => common_local_url('invite'),
|
||||
'class' => 'invite_button'),
|
||||
_('Invite more colleagues'));
|
||||
// TRANS: Button text for inviting more users to the StatusNet instance.
|
||||
_m('BUTTON','Invite more colleagues'));
|
||||
return false;
|
||||
}
|
||||
}
|
@ -51,7 +51,7 @@ class ListsNav extends Menu
|
||||
|
||||
$user = common_current_user();
|
||||
|
||||
$this->lists = $profile->getOwnedTags($user);
|
||||
$this->lists = $profile->getLists($user);
|
||||
}
|
||||
|
||||
function show()
|
||||
|
@ -105,8 +105,8 @@ class PeopletagEditForm extends Form
|
||||
*/
|
||||
function formLegend()
|
||||
{
|
||||
// TRANS: Form legend for people tag edit form.
|
||||
// TRANS: %s is a people tag.
|
||||
// TRANS: Form legend for list edit form.
|
||||
// TRANS: %s is a list.
|
||||
$this->out->element('legend', null, sprintf(_('Edit list %s'), $this->peopletag->tag));
|
||||
}
|
||||
|
||||
@ -137,21 +137,21 @@ class PeopletagEditForm extends Form
|
||||
$this->out->elementStart('li');
|
||||
$desclimit = Profile_list::maxDescription();
|
||||
if ($desclimit == 0) {
|
||||
// TRANS: Field title for description of people tag.
|
||||
// TRANS: Field title for description of list.
|
||||
$descinstr = _('Describe the list or topic.');
|
||||
} else {
|
||||
// TRANS: Field title for description of people tag.
|
||||
// TRANS: Field title for description of list.
|
||||
// TRANS: %d is the maximum number of characters for the description.
|
||||
$descinstr = sprintf(_m('Describe the list or topic in %d character.',
|
||||
'Describe the list or topic in %d characters.',
|
||||
$desclimit),
|
||||
$desclimit);
|
||||
}
|
||||
// TRANS: Field label for description of people tag.
|
||||
// TRANS: Field label for description of list.
|
||||
$this->out->textarea('description', _('Description'),
|
||||
($this->out->arg('description')) ? $this->out->arg('description') : $description,
|
||||
$descinstr);
|
||||
// TRANS: Checkbox label to mark a people tag private.
|
||||
// TRANS: Checkbox label to mark a list private.
|
||||
$this->out->checkbox('private', _('Private'), $private);
|
||||
$this->out->elementEnd('li');
|
||||
$this->out->elementEnd('ul');
|
||||
@ -167,11 +167,11 @@ class PeopletagEditForm extends Form
|
||||
// TRANS: Button text to save a people tag.
|
||||
$this->out->submit('submit', _('Save'));
|
||||
$this->out->submit('form_action-yes',
|
||||
// TRANS: Button text to delete a people tag.
|
||||
// TRANS: Button text to delete a list.
|
||||
_m('BUTTON','Delete'),
|
||||
'submit',
|
||||
'delete',
|
||||
// TRANS: Button title to delete a people tag.
|
||||
// TRANS: Button title to delete a list.
|
||||
_('Delete this list.'));
|
||||
}
|
||||
|
||||
|
@ -103,10 +103,10 @@ class PeopletagGroupNav extends Widget
|
||||
// People tag timeline
|
||||
$this->out->menuItem(common_local_url('showprofiletag', array('tagger' => $user_profile->nickname,
|
||||
'tag' => $tag->tag)),
|
||||
// TRANS: Menu item in people tag navigation panel.
|
||||
// TRANS: Menu item in list navigation panel.
|
||||
_m('MENU','List'),
|
||||
// TRANS: Menu item title in people tag navigation panel.
|
||||
// TRANS: %1$s is a tag, %2$s is a nickname.
|
||||
// TRANS: Menu item title in list navigation panel.
|
||||
// TRANS: %1$s is a list, %2$s is a nickname.
|
||||
sprintf(_('%1$s list by %2$s.'), $tag->tag,
|
||||
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
|
||||
$action == 'showprofiletag', 'nav_timeline_peopletag');
|
||||
@ -114,10 +114,10 @@ class PeopletagGroupNav extends Widget
|
||||
// Tagged
|
||||
$this->out->menuItem(common_local_url('peopletagged', array('tagger' => $user->nickname,
|
||||
'tag' => $tag->tag)),
|
||||
// TRANS: Menu item in people tag navigation panel.
|
||||
// TRANS: Menu item in list navigation panel.
|
||||
_m('MENU','Listed'),
|
||||
// TRANS: Menu item title in people tag navigation panel.
|
||||
// TRANS: %1$s is a tag, %2$s is a nickname.
|
||||
// TRANS: Menu item title in list navigation panel.
|
||||
// TRANS: %1$s is a list, %2$s is a nickname.
|
||||
sprintf(_('%1$s list by %2$s.'), $tag->tag,
|
||||
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
|
||||
$action == 'peopletagged', 'nav_peopletag_tagged');
|
||||
@ -125,10 +125,10 @@ class PeopletagGroupNav extends Widget
|
||||
// Subscribers
|
||||
$this->out->menuItem(common_local_url('peopletagsubscribers', array('tagger' => $user->nickname,
|
||||
'tag' => $tag->tag)),
|
||||
// TRANS: Menu item in people tag navigation panel.
|
||||
// TRANS: Menu item in list navigation panel.
|
||||
_m('MENU','Subscribers'),
|
||||
// TRANS: Menu item title in people tag navigation panel.
|
||||
// TRANS: %1$s is a tag, %2$s is a nickname.
|
||||
// TRANS: Menu item title in list navigation panel.
|
||||
// TRANS: %1$s is a list, %2$s is a nickname.
|
||||
sprintf(_('Subscribers to %1$s list by %2$s.'), $tag->tag,
|
||||
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
|
||||
$action == 'peopletagsubscribers', 'nav_peopletag_subscribers');
|
||||
@ -140,8 +140,8 @@ class PeopletagGroupNav extends Widget
|
||||
'tag' => $tag->tag)),
|
||||
// TRANS: Menu item in people tag navigation panel.
|
||||
_m('MENU','Edit'),
|
||||
// TRANS: Menu item title in people tag navigation panel.
|
||||
// TRANS: %s is a tag.
|
||||
// TRANS: Menu item title in list navigation panel.
|
||||
// TRANS: %s is a list.
|
||||
sprintf(_('Edit %s list by you.'), $tag->tag,
|
||||
(($user_profile && $user_profile->fullname) ? $user_profile->fullname : $nickname)),
|
||||
$action == 'editpeopletag', 'nav_peopletag_edit');
|
||||
|
@ -192,9 +192,9 @@ class PeopletagListItem extends Widget
|
||||
$this->out->element('a', array('href' =>
|
||||
common_local_url('editpeopletag', array('tagger' => $this->profile->nickname,
|
||||
'tag' => $this->peopletag->tag)),
|
||||
// TRANS: Title for link to edit people tag settings.
|
||||
// TRANS: Title for link to edit list settings.
|
||||
'title' => _('Edit list settings.')),
|
||||
// TRANS: Text for link to edit people tag settings.
|
||||
// TRANS: Text for link to edit list settings.
|
||||
_('Edit'));
|
||||
$this->out->elementEnd('li');
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ class PeopletagNav extends Menu
|
||||
_m('MENU','List Subscriptions'),
|
||||
// TRANS: Tooltip for menu item in the group navigation page.
|
||||
// TRANS: %s is the nickname of the group.
|
||||
sprintf(_m('TOOLTIP','Lists subscribed to by %s'), $nickname),
|
||||
sprintf(_m('TOOLTIP','Lists subscribed to by %s.'), $nickname),
|
||||
$action_name == 'peopletagsubscriptions',
|
||||
'nav_list_group');
|
||||
$this->out->menuItem(common_local_url('peopletagsforuser', array('nickname' =>
|
||||
@ -87,7 +87,7 @@ class PeopletagNav extends Menu
|
||||
sprintf(_m('MENU','Lists with %s'), $nickname),
|
||||
// TRANS: Tooltip for menu item in the group navigation page.
|
||||
// TRANS: %s is the nickname of the group.
|
||||
sprintf(_m('TOOLTIP','Lists with %s'), $nickname),
|
||||
sprintf(_m('TOOLTIP','Lists with %s.'), $nickname),
|
||||
$action_name == 'peopletagsforuser',
|
||||
'nav_lists_with');
|
||||
$this->out->menuItem(common_local_url('peopletagsbyuser', array('nickname' =>
|
||||
@ -96,7 +96,7 @@ class PeopletagNav extends Menu
|
||||
sprintf(_m('MENU','Lists by %s'), $nickname),
|
||||
// TRANS: Tooltip for menu item in the group navigation page.
|
||||
// TRANS: %s is the nickname of the group.
|
||||
sprintf(_m('TOOLTIP','Lists by %s'), $nickname),
|
||||
sprintf(_m('TOOLTIP','Lists by %s.'), $nickname),
|
||||
$action_name == 'peopletagsbyuser',
|
||||
'nav_lists_by');
|
||||
Event::handle('EndGroupGroupNav', array($this));
|
||||
|
@ -65,8 +65,8 @@ class PeopletagsBySubsSection extends PeopletagSection
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for section contaning people tags with the most subscribers.
|
||||
return _('Lists with most subscribers');
|
||||
// TRANS: Title for section contaning lists with the most subscribers.
|
||||
return _('Popular lists');
|
||||
}
|
||||
|
||||
function divId()
|
||||
|
@ -83,7 +83,6 @@ class PeopletagSection extends Section
|
||||
|
||||
class PeopletagSectionItem extends PeopletagListItem
|
||||
{
|
||||
|
||||
function showStart()
|
||||
{
|
||||
}
|
||||
@ -121,8 +120,8 @@ class PeopletagSectionItem extends PeopletagListItem
|
||||
|
||||
function showTag()
|
||||
{
|
||||
// TRANS: Tag summary. %1$d is the number of users tagged with the tag,
|
||||
// TRANS: %2$d is the number of subscribers to the tag.
|
||||
// TRANS: List summary. %1$d is the number of users in the list,
|
||||
// TRANS: %2$d is the number of subscribers to the list.
|
||||
$title = sprintf(_('Listed: %1$d Subscribers: %2$d'),
|
||||
$this->peopletag->taggedCount(),
|
||||
$this->peopletag->subscriberCount());
|
||||
|
@ -67,8 +67,7 @@ class PeopletagsForUserSection extends PeopletagSection
|
||||
if (!empty($user) && $this->profile->id == $user->id) {
|
||||
return sprintf(_('Lists with you'));
|
||||
}
|
||||
// TRANS: Title for page that displays
|
||||
// which people tags a user has been tagged with.
|
||||
// TRANS: Title for page that displays which people tags a user has been tagged with.
|
||||
// TRANS: %s is a profile name.
|
||||
return sprintf(_('Lists with %s'), $this->profile->getBestName());
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ class PeopletagSubscriptionsSection extends PeopletagSection
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for page that displays people tags a user has subscribed to.
|
||||
// TRANS: Title for page that displays lists a user has subscribed to.
|
||||
return _('List subscriptions');
|
||||
}
|
||||
|
||||
|
@ -52,8 +52,8 @@ class PersonalTagCloudSection extends TagCloudSection
|
||||
|
||||
function title()
|
||||
{
|
||||
// TRANS: Title for personal tag cloud section. %s is a user nickname.
|
||||
return sprintf(_('Tags'), $this->user->nickname);
|
||||
// TRANS: Title for personal tag cloud section.
|
||||
return _m('TITLE','Tags');
|
||||
}
|
||||
|
||||
function getTags()
|
||||
|
@ -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',
|
||||
@ -293,9 +292,9 @@ class ProfileAction extends OwnerDesignAction
|
||||
array('nickname' => $this->profile->nickname));
|
||||
|
||||
$this->elementStart('h2');
|
||||
// TRANS: H2 text for user list membership statistics.
|
||||
$this->element('a',
|
||||
array('href' => $url),
|
||||
// TRANS: H2 text for user list membership statistics.
|
||||
_('Lists'));
|
||||
$this->text(' ');
|
||||
$this->text($lists->N);
|
||||
|
@ -145,7 +145,7 @@ class SubGroupNav extends Menu
|
||||
// TRANS: Menu item in local navigation menu.
|
||||
_m('MENU','Invite'),
|
||||
// TRANS: Menu item title in local navigation menu.
|
||||
// TRANS: %s is a user nickname.
|
||||
// TRANS: %s is the StatusNet sitename.
|
||||
sprintf(_('Invite friends and colleagues to join you on %s.'),
|
||||
common_config('site', 'name')),
|
||||
$action == 'invite',
|
||||
|
@ -91,17 +91,23 @@ class GroupdirectoryAction extends Action
|
||||
|
||||
if ($this->filter == 'all') {
|
||||
if ($this->page != 1) {
|
||||
// TRANS: Title for group directory page. %d is a page number.
|
||||
return(sprintf(_m('Group Directory, page %d'), $this->page));
|
||||
}
|
||||
// TRANS: Title for group directory page.
|
||||
return _m('Group directory');
|
||||
} else if ($this->page == 1) {
|
||||
return sprintf(
|
||||
// TRANS: Title for group directory page when it is filtered.
|
||||
// TRANS: %s is the filter string.
|
||||
_m('Group directory - %s'),
|
||||
strtoupper($this->filter)
|
||||
);
|
||||
} else {
|
||||
return sprintf(
|
||||
_m('Group directory - %s, page %d'),
|
||||
// TRANS: Title for group directory page when it is filtered.
|
||||
// TRANS: %1$s is the filter string, %2$d is a page number.
|
||||
_m('Group directory - %1$s, page %2$d'),
|
||||
strtoupper($this->filter),
|
||||
$this->page
|
||||
);
|
||||
@ -115,19 +121,11 @@ class GroupdirectoryAction extends Action
|
||||
*/
|
||||
function getInstructions()
|
||||
{
|
||||
// TRANS: Page notice for groups directory.
|
||||
// TRANS: %%site.name%% is the name of the StatusNet site.
|
||||
// TRANS: %%action.newgroup%% is a URL. Do not change it.
|
||||
// TRANS: This message contains Markdown links in the form [link text](link).
|
||||
$instructions = <<< END_OF_INSTRUCTIONS
|
||||
After you join a group you can send messages to all other members
|
||||
using the syntax "!groupname".
|
||||
|
||||
Browse groups, or search for groups on by their name, location or topic.
|
||||
Separate the terms by spaces; they must be three characters or more.
|
||||
END_OF_INSTRUCTIONS;
|
||||
|
||||
return _m($instructions);
|
||||
// TRANS: Page instructions.
|
||||
return _m("After you join a group you can send messages to all other members\n".
|
||||
"using the syntax \"!groupname\".\n\n".
|
||||
"Browse groups, or search for groups on by their name, location or topic.\n".
|
||||
"Separate the terms by spaces; they must be three characters or more.\n");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -217,7 +215,7 @@ END_OF_INSTRUCTIONS;
|
||||
'href' => common_local_url('newgroup'),
|
||||
'class' => 'more'),
|
||||
// TRANS: Link to create a new group on the group list page.
|
||||
_('Create a new group')
|
||||
_m('Create a new group')
|
||||
);
|
||||
$this->elementEnd('p');
|
||||
}
|
||||
@ -226,6 +224,7 @@ END_OF_INSTRUCTIONS;
|
||||
|
||||
$this->elementStart('div', array('id' => 'profile_directory'));
|
||||
|
||||
// @todo FIXME: Does "All" need i18n here?
|
||||
$alphaNav = new AlphaNav($this, false, false, array('0-9', 'All'));
|
||||
$alphaNav->show();
|
||||
|
||||
@ -280,12 +279,15 @@ END_OF_INSTRUCTIONS;
|
||||
|
||||
$this->elementStart('fieldset');
|
||||
|
||||
// TRANS: Fieldset legend.
|
||||
$this->element('legend', null, _m('Search groups'));
|
||||
$this->elementStart('ul', 'form_data');
|
||||
$this->elementStart('li');
|
||||
|
||||
// TRANS: Field label for input of one or more keywords.
|
||||
$this->input('q', _m('Keyword(s)'), $this->q);
|
||||
|
||||
// TRANS: Button text for searching group directory.
|
||||
$this->submit('search', _m('BUTTON','Search'));
|
||||
$this->elementEnd('li');
|
||||
$this->elementEnd('ul');
|
||||
@ -401,19 +403,20 @@ GROUP_QUERY_END;
|
||||
'p',
|
||||
'error',
|
||||
sprintf(
|
||||
_m('No groups starting with %s'),
|
||||
// TRANS: Empty list message for searching group directory.
|
||||
// TRANS: %s is the search string.
|
||||
_m('No groups starting with %s.'),
|
||||
$this->filter
|
||||
)
|
||||
);
|
||||
} else {
|
||||
// TRANS: Empty list message for searching group directory.
|
||||
$this->element('p', 'error', _m('No results.'));
|
||||
$message = _m(<<<E_O_T
|
||||
* Make sure all words are spelled correctly.
|
||||
* Try different keywords.
|
||||
* Try more general keywords.
|
||||
* Try fewer keywords.
|
||||
E_O_T
|
||||
);
|
||||
// TRANS: Help text for searching group directory.
|
||||
$message = _m("* Make sure all words are spelled correctly.\n".
|
||||
"* Try different keywords.\n".
|
||||
"* Try more general keywords.\n".
|
||||
"* Try fewer keywords.");
|
||||
$this->elementStart('div', 'help instructions');
|
||||
$this->raw(common_markup_to_html($message));
|
||||
$this->elementEnd('div');
|
||||
@ -427,5 +430,4 @@ E_O_T
|
||||
$gbm = new GroupsByMembersSection($this);
|
||||
$gbm->show();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* StatusNet, the distributed open-source microblogging tool
|
||||
*
|
||||
@ -43,7 +42,6 @@ require_once INSTALLDIR . '/lib/subscriptionlist.php';
|
||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||
* @link http://status.net/
|
||||
*/
|
||||
|
||||
class SortableGroupList extends SortableSubscriptionList
|
||||
{
|
||||
/** Owner of this list */
|
||||
@ -63,12 +61,13 @@ class SortableGroupList extends SortableSubscriptionList
|
||||
$this->out->elementStart('tr');
|
||||
|
||||
$tableHeaders = array(
|
||||
// TRANS: Column header in table for user nickname.
|
||||
'nickname' => _m('Nickname'),
|
||||
// TRANS: Column header in table for timestamp when user was created.
|
||||
'created' => _m('Created')
|
||||
);
|
||||
|
||||
foreach ($tableHeaders as $id => $label) {
|
||||
|
||||
$attrs = array('id' => $id);
|
||||
$current = (!empty($this->action->sort) && $this->action->sort == $id);
|
||||
|
||||
@ -110,6 +109,7 @@ class SortableGroupList extends SortableSubscriptionList
|
||||
$this->out->elementEnd('th');
|
||||
}
|
||||
|
||||
// TRANS: Column header in table for members of a group.
|
||||
$this->out->element('th', array('id' => 'Members'), _m('Members'));
|
||||
$this->out->element('th', array('id' => 'controls'), null);
|
||||
|
||||
@ -245,6 +245,7 @@ class SortableGroupListItem extends SortableSubscriptionListItem
|
||||
function showCreatedDate()
|
||||
{
|
||||
$this->out->elementStart('td', 'entry_created');
|
||||
// @todo FIXME: Should we provide i18n for timestamps in core?
|
||||
$this->out->raw(date('j M Y', strtotime($this->profile->created)));
|
||||
$this->out->elementEnd('td');
|
||||
}
|
||||
@ -267,5 +268,4 @@ class SortableGroupListItem extends SortableSubscriptionListItem
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -854,7 +854,7 @@ class OStatusPlugin extends Plugin
|
||||
$oprofile = Ostatus_profile::staticGet('peopletag_id', $peopletag->id);
|
||||
if ($oprofile) {
|
||||
if (!$oprofile->subscribe()) {
|
||||
// TRANS: Exception thrown when setup of remote people tag subscription fails.
|
||||
// TRANS: Exception thrown when setup of remote list subscription fails.
|
||||
throw new Exception(_m('Could not set up remote list subscription.'));
|
||||
}
|
||||
|
||||
@ -875,7 +875,7 @@ class OStatusPlugin extends Plugin
|
||||
// TRANS: Title for remote follow list.
|
||||
$act->title = _m('TITLE','Follow list');
|
||||
// TRANS: Success message for remote list follow through OStatus.
|
||||
// TRANS: %1$s is the subscriber name, %2$s the prople tag, %3$s is the tagger's name.
|
||||
// TRANS: %1$s is the subscriber name, %2$s is the list, %3$s is the tagger's name.
|
||||
$act->content = sprintf(_m("%1$s is now following people listed in %2$s by %3$s."),
|
||||
$sub->getBestName(),
|
||||
$oprofile->getBestName(),
|
||||
|
@ -169,6 +169,7 @@ class OStatusPeopletagAction extends OStatusSubAction
|
||||
|
||||
function getInstructions()
|
||||
{
|
||||
// TRANS: Instructions for OStatus list subscription form.
|
||||
return _m('You can subscribe to lists from other supported sites. Paste the lists\'s URI below:');
|
||||
}
|
||||
|
||||
|
@ -588,6 +588,36 @@ address {
|
||||
-webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.invite_button {
|
||||
height: 2.1em;
|
||||
line-height: 2.1em;
|
||||
display: block;
|
||||
text-align: center;
|
||||
color:#fff;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
font-size: 1.2em;
|
||||
text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.2);
|
||||
border: 1px solid #d7621c;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
background: #FB6104;
|
||||
background: -moz-linear-gradient(top, #ff9d63 , #FB6104);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff9d63), color-stop(100%,#FB6104));
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff9d63', endColorstr='#FB6104',GradientType=0 );
|
||||
}
|
||||
|
||||
.invite_button:hover {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.6);
|
||||
background: #ff9d63;
|
||||
background: -moz-linear-gradient(top, #FB6104 , #fc8035);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FB6104), color-stop(100%,#fc8035));
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FB6104', endColorstr='#fc8035',GradientType=0 );
|
||||
}
|
||||
|
||||
#content h1 {
|
||||
border-bottom: 3px solid #A6ADBF;
|
||||
color: #A6ADBF;
|
||||
|
Loading…
Reference in New Issue
Block a user