...
 
Commits (61)
5 August 2004
-------------
- cleaned up code style
- removed some dead code
- fixed session handling
- added better browsing interface
- notification of new buddies
25 March 2004
-------------
Updated to drupal 4.4.0 , and current cvs. Fixed a bug with the anon user being able to have a buddylist
7 July 2003
-----------
Squished some bugs and verified that it is still working with stock drupal (4.2.0RC)
12 May 2003
-----------
[Adrian Rossouw]
- Initial upload to contrib directory.
Written by Adrian Rossouw <adrian@daemon.co.za>
Thanks to Ratko Kovacina for the comments/debugging info
Browsing improvements by Doug Sikora
Readme
------
This module allows users to put each other on a personal 'Buddy List' ,
also enabling them to keep up with their friend's postings via the 'My Friend's Blogs' block.
Send comments to adrian@daemon.co.za.
Requirements
------------
This module requires Drupal 4.4.0 or CVS from March 25 2004 or later.
Installation
------------
1. Create the SQL tables. This depends a little on your system, but the most
common method is:
mysql -u username -ppassword drupal < buddylist.mysql
Postgres database initialization file is also included, but not tested.
2. Copy the buddylist.module to the Drupal modules/ directory.
3. Enable buddy list in the "site settings | modules" administration screen.
4. Enable buddy list blocks you want in the "blocks" administration screen.
5. Optionally add the following theme function to your PHPTemplate's template.php file:
function phptemplate_username($object) {
global $user;
/* Use the default theme_username for anonymous users, nodes by this user */
if ($user->uid == 0 || $object->uid == $user->uid || $object->uid == 0) {
return theme_username($object);
}
if (!user_access('maintain buddy list')) {
return theme_username($object);
}
/* an array, keyed on buddy uids */
$buddies = buddylist_get_buddies($user->uid);
/* Find out if this buddy is in the user's buddy list */
foreach ($buddies as $buddyuid => $buddystructure) {
if ($buddyuid == $object->uid) {
$output .= theme_username($object);
$output .= " (";
$output .= theme('remove_from_buddylist_link', $object);
$output .= ")";
return $output;
}
}
/* The user is not in the buddylist, give a link to add */
$output .= theme_username($object);
$output .= " (";
$output .= theme('add_to_buddylist_link', $object);
$output .= ")";
return $output;
}
\ No newline at end of file
Readme
------
This module allows users to put each other on a personal 'Buddy List' ,
also enabling them to keep up with their friend's postings via the 'My Friend's Blogs' block.
This module allows users to put each other on a personal 'Buddy List'.
Users may put their buddies into groups, like many instant messaging applications. These groups may be used for controlling access to nodes using the buddylist_access.module
Features include buddy groups and the ability to track your buddies' recent posts.
Send comments to walkah@walkah.net.
Send comments to Robert Douglass at: http://drupal.org/user/5449/contact
Requirements
------------
This module requires Drupal 4.7.
This module does not yet offer PostgreSQL support. If you would like to contribute to this module by creating the appropriate PostgreSQL schema, please submit your code at http://drupal.org/project/issues/buddylist
Upgrading from 4.6
------------------
WARNING: There is currently no migration path from 4.6 to 4.7. There are significant database schema changes and the 4.7 module will not work with the 4.6 schema. A migration path is forthcoming. If you need one sooner, contact me: http://drupal.org/user/5449/contact
Installation
------------
1. Copy the buddylist.module to the Drupal modules/ directory.
2. Enable buddy list in the "site settings | modules" administration screen.
Enabling the buddylist module will trigger the creation of the database schema. If you are shown error messages you may have to create the schema by hand. Please see the database definition at the end of this file.
3. Enable buddy list blocks you want in the "blocks" administration screen.
4. Optionally add the following theme function to your PHPTemplate's template.php file:
function phptemplate_username($object) {
global $user;
/* Use the default theme_username for anonymous users, nodes by this user */
if ($user->uid == 0 || $object->uid == $user->uid || $object->uid == 0) {
return theme_username($object);
}
if (!user_access('maintain buddy list')) {
return theme_username($object);
}
/* an array, keyed on buddy uids */
$buddies = buddylist_get_buddies($user->uid);
/* Find out if this buddy is in the user's buddy list */
foreach ($buddies as $buddyuid => $buddystructure) {
if ($buddyuid == $object->uid) {
$output .= theme_username($object);
$output .= ' (';
$output .= theme('remove_from_buddylist_link', $object);
$output .= ')';
return $output;
}
}
/* The user is not in the buddylist, give a link to add */
$output .= theme_username($object);
$output .= ' (';
$output .= theme('add_to_buddylist_link', $object);
$output .= ')';
return $output;
}
Database Schema
---------------
If the automatic creation of the database tables was unsuccessful you can try creating the tables by hand using the following SQL:
CREATE TABLE `buddylist` (
`uid` int(10) unsigned NOT NULL default '0',
`buddy` int(10) unsigned NOT NULL default '0',
`timestamp` int(11) NOT NULL default '0',
`received` tinyint(1) NOT NULL default '0',
UNIQUE KEY `uid-buddy-label` (`uid`,`buddy`),
KEY `uid` (`uid`)
) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;
--
-- Table structure for table `buddylist_buddy_group`
--
CREATE TABLE `buddylist_buddy_group` (
`uid` int(11) NOT NULL default '0',
`buddy` int(11) NOT NULL default '0',
`label_id` int(11) NOT NULL default '0',
PRIMARY KEY (`uid`,`buddy`,`label_id`)
) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;
--
-- Table structure for table `buddylist_groups`
--
CREATE TABLE `buddylist_groups` (
`uid` int(11) NOT NULL default '0',
`label_id` int(11) NOT NULL default '0',
`label` varchar(255) NOT NULL default '',
`visible` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`uid`,`label_id`)
) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;
Credits
-------
Written by Adrian Rossouw.
Thanks to Ratko Kovacina for the comments/debugging info
Browsing improvements by Doug Sikora
Maintainer: Robert Douglass
Status: maintained (Feb. 2006)
Request/Approval Feature by Ankur Rishi, courtesy of Jewcy.com
TODO
----
1. PGSQL schema (see buddylist.install, buddylist_install())
2. Rework texts so that one is not stuck with "buddy" but could choose "contact", for example
3. Make a workflow whereby a buddy request is sent to the buddy for confirmation which is required before the buddy can be added.
4. Make the notification that someone added you to their buddylist use the privatemsg module, if available.
5. Consider possible Views module integration.
\ No newline at end of file
- Using Node Api, create access restrictions whereby users can set nodes to be private,public or buddies only.
- Add key to pgsql file
- Update translations
- Audit permissions
<?php
/**
* Install the initial schema.
*/
function buddylist_install() {
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$query1 = db_query("
CREATE TABLE {buddylist} (
uid int(10) unsigned NOT NULL default '0',
buddy int(10) unsigned NOT NULL default '0',
timestamp int(11) NOT NULL default '0',
received tinyint(1) NOT NULL default '0',
PRIMARY KEY (uid,buddy)
) /*!40100 DEFAULT CHARACTER SET utf8 */;");
$query2 = db_query("
CREATE TABLE {buddylist_buddy_group} (
uid int(11) NOT NULL default '0',
buddy int(11) NOT NULL default '0',
label_id int(11) NOT NULL default '0',
PRIMARY KEY (uid, buddy, label_id)
) /*!40100 DEFAULT CHARACTER SET utf8 */;");
$query3 = db_query("
CREATE TABLE {buddylist_groups} (
uid int(11) NOT NULL default '0',
label_id int(11) NOT NULL default '0',
label varchar(255) NOT NULL default '',
visible tinyint(1) NOT NULL default '0',
PRIMARY KEY (uid, label_id)
) /*!40100 DEFAULT CHARACTER SET utf8 */;");
$query4 = db_query("
CREATE TABLE {buddylist_pending_requests} (
requester_uid int(11) NOT NULL default '0',
requestee_uid int(11) NOT NULL default '0',
received tinyint(1),
PRIMARY KEY (requester_uid, requestee_uid)
) /*!40100 DEFAULT CHARACTER SET utf8 */;");
if ($query1 && $query2 && $query3 && $query4) {
$created = TRUE;
}
break;
}
if ($created) {
drupal_set_message(t('Buddylist module installed successfully.'));
}
else {
drupal_set_message(t('Table installation for the Buddylist module was unsuccessful. The tables may need to be installed by hand. See the README.txt file for a list of the installation queries.'), 'error');
}
}
function buddylist_update_1() {
return _system_update_utf8(array('buddylist'));
}
function buddylist_update_2() {
$ret = array();
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$result = update_sql("
CREATE TABLE {buddylist_pending_requests} (
requester_uid int(11) NOT NULL default '0',
requestee_uid int(11) NOT NULL default '0',
received tinyint(1),
PRIMARY KEY (requester_uid, requestee_uid)
) /*!40100 DEFAULT CHARACTER SET utf8 */;
");
$ret[] = $result;
break;
}
if ($result['success']) {
drupal_set_message(t('The database schema update for the Buddylist module was successful.'));
}
else {
drupal_set_message(t('Table database schema update for the Buddylist module was unsuccessful. The schema may need to be updated by hand. See the README.txt file for a list of the installation queries.'), 'error');
}
return $ret;
}
This diff is collapsed.
CREATE TABLE buddylist (
uid int(10) UNSIGNED NOT NULL,
buddy int(10) UNSIGNED NOT NULL,
timestamp int(11) NOT NULL,
`received` tinyint(1) NOT NULL default '0',
`label` varchar(255) NOT NULL default 'all',
UNIQUE KEY `uid-buddy-label` (`uid`,`buddy`,`label`),
KEY `uid` (`uid`),
KEY `label` (`label`)
);
\ No newline at end of file
CREATE TABLE buddylist (
uid integer NOT NULL default 0,
buddy integer NOT NULL default 0,
timestamp integer NOT NULL default 0
);
ALTER TABLE buddylist ADD COLUMN received smallint NOT NULL;
This diff is collapsed.
<?php
// $Id$
/**
* @file
* Add access control to nodes based on buddygroups
*/
/**
* Implementation of hook_help().
*/
function buddylist_access_help($section) {
switch ($section) {
case 'admin/modules#description':
return t('node access control by buddy group');
}
}
function buddylist_access_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
global $user;
switch ($op) {
case 'load':
// nothing yet
break;
case 'form post':
if (user_access('maintain buddy list')) {
// Allow node authors to set 'view' permissions by buddy groups.
if ($edit = $_POST['edit']) {
// do nothing
}
else {
$sql = "SELECT realm FROM {node_access} WHERE nid = %d AND realm LIKE '%s' AND gid = %d";
$result = db_query($sql, $node->nid, 'buddyof%', $node->uid);
while ($row = db_fetch_object($result)) {
$edit['buddylist_groups'][] = substr($row->realm, 9);
}
$output = buddylist_groups_select($node->uid, t('Optional. Restrict access to this post to members of these groups.'), $edit);
$output .= form_hidden('buddylist_groups_uid', $node->uid);
}
return $output;
}
break;
case 'insert':
case 'update':
buddylist_access_save_access($node);
break;
case 'delete':
$sql = "DELETE FROM {node_access} WHERE nid = %d AND realm LIKE '%s'";
db_query($sql, $node->nid, 'buddyof%');
break;
}
}
function buddylist_access_save_access($node) {
buddylist_access_nodeapi($node, 'delete');
if ($node->buddylist_groups) {
// this check prevents us from entering access control while editing an author. thats dangerous, because we might not have shown the author the right groups on the form
if ($node->buddylist_groups_uid == $node->uid) {
foreach ($node->buddylist_groups as $key => $label) {
$sql = "INSERT INTO {node_access} (nid, realm, gid, grant_view) VALUES (%d, '%s', %d, %d)";
db_query($sql, $node->nid, "buddyof||$label", $node->buddylist_groups_uid, 1);
}
}
}
else {
// if no groups are defined, this is a public node.
$sql = "INSERT INTO {node_access} (nid, gid, realm, grant_view) VALUES (%d, 0, 'buddyof||universal', 1)";
db_query($sql, $node->nid);
}
}
// realm = buddyof||$label
// we use a gid=$node->uid so that all access restrictions become moot during a node author change
function buddylist_access_node_grants($account, $op) {
if ($op == 'view') {
$sql = "SELECT b.uid, label FROM {buddylist} b INNER JOIN {users} u ON b.uid = u.uid WHERE b.buddy = %d";
$result = db_query($sql, $account->uid);
while ($row = db_fetch_object($result)) {
$grants["buddyof||$row->label"][] = $row->uid;
}
// the universal grant
$grants['buddyof||universal'][] = 0;
return $grants;
}
}
function buddylist_access_settings() {
$op = $_POST['op'];
drupal_set_title(t('Buddylist access configuration'));
$status = t('disabled');
$btn_text = t('Enable');
if (variable_get('buddylist_access_enabled', 0)) {
$status = t('enabled');
$btn_text = t('Disable');
}
$group = t('Buddylist_access access control is currently') . ' ' . theme('placeholder', $status). '.<br />';
$group .= form_button($btn_text). '<br />';
$output = form_group(t('Module status'), $group, t('After enabling this module via the module settings page or before disabling this module, use the above button to properly configure your node_access table.'));
if ($op) {
if ($op == t('Enable')) {
_buddylist_access_update_db(TRUE);
variable_set('buddylist_access_enabled', 1);
}
elseif ($op == t('Disable')) {
_buddylist_access_update_db(FALSE);
variable_set('buddylist_access_enabled', 0);
}
drupal_goto('admin/settings/buddylist_access');
}
return $output;
}
/**
* Update the node_access table when a user enables/disables the module in the
* settings page. Because Drupal does not, at this
* time, provide hooks that run automatically upon the enabling/disabling of a
* module in the admin/modules page, we must force the site-admin to explicitly
* enable/disable a module on the settings page, in
* addition to enabling/disabling the module in the admin/modules page.
*
* Here, if the user is enabling the module, we make sure the default entry in
* the node_access table is deleted and walk through all the nodes in the node table
* and grant all view access as is the default case when this module is not
* enabled. We only do this for nodes whose permissions haven't been set before by
* this module. It is possible that a site-admin may have previously enabled the
* module before disabling it. Upon re-enabling, we want to account for the old
* permissions set by the module by not re-inserting entries for them.
*
* Disabling the module simply requires re-inserting the default entry back into
* the node access table to give 'view' perms to everyone for everything:
* (0, 0, 'all', 1, 0, 0)
*/
function _buddylist_access_update_db($enable) {
if (!$enable) {
// We use the delete statement to avoid inserting a duplicate entry into the database.
// Without the DELETE query, this can happen when a site admin has already enabled the modules
// from the settings page and goes back to it and resaves the enabled setting.
db_query('REPLACE INTO {node_access} VALUES (0, 0, \'all\', 1, 0, 0)');
drupal_set_message(t('Buddylist_access access control has been disabled. You may now disable the module on the <em>%modules</em> page', array('%modules' => l(t('admin/modules'), 'admin/modules'))));
}
else { // the module was just enabled or re-enabled; provide default view access to everyone for nodes that were created
// between the previous disabling of the module and the current enabling of the module;
// nodes that were created during a previous enabled period are left-alone.
// Permissions for those nodes will be the same as when the module was previously enabled.
db_query('DELETE from {node_access} WHERE nid=0 AND gid=0 AND realm=\'all\' AND grant_view=1 AND grant_update=0 AND grant_delete=0');
// Assign universal grant to all nodes which don't already have any grants from this module
$result = db_query("SELECT n.nid FROM {node} n LEFT JOIN {node_access} na ON n.nid = na.nid AND realm LIKE '%buddyof%' WHERE ISNULL(na.gid)");
while ($row = db_fetch_object($result)) {
$sql = "INSERT INTO {node_access} (nid, gid, realm, grant_view) VALUES (%d, 0, 'buddyof||universal', 1)";
db_query($sql, $row->nid);
}
drupal_set_message(t('Buddylist_access access control enabled.'));
}
}
<?php
function buddylistinvite_help($section) {
switch ($section) {
case 'admin/modules#description':
return t('Integrates the %buddylist and invite modules.', buddylist_translation());
case 'admin/help#buddylistinvite':
return t("<p>Whenever a person resonds to an invitation from the invite module and joins the site, the inviter and invitee are added to each other's %buddy list.</p>", buddylist_translation());
case 'invite':
if (module_exist('buddylist') && user_access('maintain buddy list')) {
return t('<p>The people you invite will be automatically added to your %buddylist when they accept the invitation.</p>', buddylist_translation());
}
break;
}
}
/**
* implementation of hook_invite
* (see invite.module)
*/
function buddylistinvite_invite($op, $args) {
if (!module_exist('buddylist')) {
return;
}
if ($op == 'escalate' && user_access('maintain buddy list', $args['invitee']) && user_access('maintain buddy list', $args['inviter'])) {
$time = time();
watchdog('buddylistinvite', t("Users %user1 and %user2 are becoming %buddies", array('%user1' => theme('username', $args['invitee']), '%user2' => theme('username', $args['inviter'])) + buddylist_translation()));
db_query('INSERT INTO {buddylist} (received, uid, buddy, timestamp) VALUES (1, %d, %d, %d)', $args['invitee']->uid, $args['inviter']->uid, $time);
db_query('INSERT INTO {buddylist} (received, uid, buddy, timestamp) VALUES (1, %d, %d, %d)', $args['inviter']->uid, $args['invitee']->uid, $time);
}
}
function buddylistinvite_settings() {
$allgood = TRUE;
if (!module_exist('buddylist')) {
drupal_set_message(t('The buddylistinvite module depends on the %module module. Please <a href="admin/modules">enable</a> the %module module.', array('%module' => 'buddylist')));
$allgood = FALSE;
}
if (!module_exist('invite')) {
drupal_set_message(t('The buddylistinvite module depends on the %module module. Please <a href="admin/modules">enable</a> the %module module.', array('%module' => 'invite')));
$allgood = FALSE;
}
if ($allgood) {
drupal_set_message(t('Everything is ready to go. Inviters and Invitees will become %buddies automatically.', buddylist_translation()));
}
}
# LANGUAGE translation of PROJECT
# Copyright YEAR NAME <EMAIL@ADDRESS>
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: buddylist.modue $Id: buddylist.pot, v 1.0\n"
"POT-Creation-Date: 2004-04-04 14:20-0400\n"
"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
"Last-Translator: NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: buddylist.module:5
msgid "Enable Buddy List functionality"
msgstr ""
#: buddylist.module:21;24;48;65
msgid "Buddy List"
msgstr ""
#: buddylist.module:21
msgid "Remove from Buddy List"
msgstr ""
#: buddylist.module:24
msgid "Add to Buddy List"
msgstr ""
#: buddylist.module:49
msgid "Buddy Blogs"
msgstr ""
#: buddylist.module:74
msgid "My Friends' Blogs"
msgstr ""
#: buddylist.module:161
msgid "username"
msgstr ""
#: buddylist.module:162
msgid "last seen"
msgstr ""
#: buddylist.module:164
msgid "private message"
msgstr ""
#: buddylist.module:167;188
msgid "blog"
msgstr ""
#: buddylist.module:170;191
msgid "gallery"
msgstr ""
#: buddylist.module:185
msgid "send message"
msgstr ""
#: buddylist.module:210
msgid "This user does not exist"
msgstr ""
#: buddylist.module:213
msgid "This user is already on your buddy list"
msgstr ""
#: buddylist.module:216
msgid "Cannot add yourself to buddy list"
msgstr ""
#: buddylist.module:221
msgid "Add User"
msgstr ""
#: buddylist.module:240
msgid "Remove User"
msgstr ""
# SPANISH translation of DRUPAL
# Copyright 2004 Michelangelo Partipilo Mootz <mike@mcbo.com>
#
msgid ""
msgstr ""
"Project-Id-Version: buddylist.modue Spanish: buddylist.pot, v 1.0\n"
"POT-Creation-Date: 2004-04-04 14:20-0400\n"
"PO-Revision-Date: 2004-04-05 00:10-0400\n"
"Last-Translator: Michelangelo Partipilo Mootz <mike@mcbo.com>\n"
"Language-Team: Spanish <mike@mcbo.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: buddylist.module:5
msgid "Enable Buddy List functionality"
msgstr "Activar funcionalidad de Lista de Amigos"
#: buddylist.module:21;24;48;65
msgid "Buddy List"
msgstr "Lista de Amigos"
#: buddylist.module:21
msgid "Remove from Buddy List"
msgstr "Remover de Lista de Amigos"
#: buddylist.module:24
msgid "Add to Buddy List"
msgstr "Agregar a Lista de Amigos"
#: buddylist.module:49
msgid "Buddy Blogs"
msgstr "Blogs Amigos"
#: buddylist.module:74
msgid "My Friends' Blogs"
msgstr "Blogs de mis Amigos"
#: buddylist.module:161
msgid "username"
msgstr "nombre de usuario"
#: buddylist.module:162
msgid "last seen"
msgstr "última vez visto"
#: buddylist.module:164
msgid "private message"
msgstr "mensaje privado"
#: buddylist.module:167;188
msgid "blog"
msgstr "blog"
#: buddylist.module:170;191
msgid "gallery"
msgstr "galería"
#: buddylist.module:185
msgid "send message"
msgstr "enviar mensaje"
#: buddylist.module:210
msgid "This user does not exist"
msgstr "Este usuario no existe"
#: buddylist.module:213
msgid "This user is already on your buddy list"
msgstr "Este usuario ya está en tu lista de amigos"
#: buddylist.module:216
msgid "Cannot add yourself to buddy list"
msgstr "No puedes agregarte a tu propia lista de amigos"
#: buddylist.module:221
msgid "Add User"
msgstr "Agregar Usuario"
#: buddylist.module:240
msgid "Remove User"
msgstr "Eliminar Usuario"
msgid ""
msgstr ""
"Project-Id-Version: Drupal Module Buddylist v4.6.0 French Translation\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2005-09-17 17:34+0100\n"
"Last-Translator: Ludovic Dias http://www.flashtranslation.com <admin@flashtranslation.com>\n"
"Language-Team: flashtranslation.com <admin@flashtranslation.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: s\n"
"X-Poedit-Language: French\n"
#: buddylist.module:5
msgid "Enable Buddy List functionality"
msgstr "Autorise l'option Liste d'Amis"
#: buddylist.module:21
#: ;24;48;65
msgid "Buddy List"
msgstr "Liste d'Amis"
#: buddylist.module:21
msgid "Remove from Buddy List"
msgstr "Retirer de la liste d'Amis"
#: buddylist.module:24
msgid "Add to Buddy List"
msgstr "Ajouter à la liste d'Amis"
#: buddylist.module:49
msgid "Buddy Blogs"
msgstr "Blogs des Amis"
#: buddylist.module:74
msgid "My Friends' Blogs"
msgstr "Les Blogs de mes Amis"
#: buddylist.module:161
msgid "username"
msgstr "Nom d'utilisateur ou Pseudo"
#: buddylist.module:162
msgid "last seen"
msgstr "Vu pour la dernière fois"
#: buddylist.module:164
msgid "private message"
msgstr "Message personnel"
#: buddylist.module:167
#: ;188
msgid "blog"
msgstr "blog"
#: buddylist.module:170
#: ;191
msgid "gallery"
msgstr "Gallerie"
#: buddylist.module:185
msgid "send message"
msgstr "Envoyer un message"
#: buddylist.module:210
msgid "This user does not exist"
msgstr "Cette personne n'existe pas"
#: buddylist.module:213
msgid "This user is already on your buddy list"
msgstr "Cette personne est déjà sur votre liste d'Amis"
#: buddylist.module:216
msgid "Cannot add yourself to buddy list"
msgstr "Vous ne pouvez pas vous inscrire sur votre propre liste d'Amis"
#: buddylist.module:221
msgid "Add User"
msgstr "Ajouter le nom d'une personne"
#: buddylist.module:240
msgid "Remove User"
msgstr "Retirer le nom d'une personne"
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2005-05-26 19:45+0800\n"
"Last-Translator: 拖泥带水 <tnds@sohu.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: buddylist.module:5
msgid "Enable Buddy List functionality"
msgstr "启用好友列表"
#: buddylist.module:21
#: ;24;48;65
msgid "Buddy List"
msgstr "好友列表"
#: buddylist.module:21
msgid "Remove from Buddy List"
msgstr "从好友列表中删除"
#: buddylist.module:24
msgid "Add to Buddy List"
msgstr "加入好友列表"
#: buddylist.module:49
msgid "Buddy Blogs"
msgstr "好友的Blog"
#: buddylist.module:74
msgid "My Friends' Blogs"
msgstr "我的好友的Blog"
#: buddylist.module:161
msgid "username"
msgstr "用户名"
#: buddylist.module:162
msgid "last seen"
msgstr "上次见到"
#: buddylist.module:164
msgid "private message"
msgstr "私人信息"
#: buddylist.module:167
#: ;188
msgid "blog"
msgstr "blog"
#: buddylist.module:170
#: ;191
msgid "gallery"
msgstr "相册"
#: buddylist.module:185
msgid "send message"
msgstr "发送消息"
#: buddylist.module:210
msgid "This user does not exist"
msgstr "用户不存在"
#: buddylist.module:213
msgid "This user is already on your buddy list"
msgstr "此用户总是在你的好友列表中"
#: buddylist.module:216
msgid "Cannot add yourself to buddy list"
msgstr "不能将自己加为好友,ft"
#: buddylist.module:221
msgid "Add User"
msgstr "添加用户"
#: buddylist.module:240
msgid "Remove User"
msgstr "删除用户"