Monday, February 2, 2009

Add/delete to/from buddylist snippet

PLEASE NOTE! These snippets are user submitted. It is impossible to check them all, so please use at your own risk! For users who have setup drupal using an alternate database to the default (MYSQL), please note that the snippets may contain some database queries specific to MYSQL.

Description

This php snippet inserts the ADD TO BUDDYLIST link

Dependencies: buddylist.module must be installed and enabled. The snippet checks to see if the user viewing the profile page has the access permission to maintain buddy list before displaying the link

Usage

  • For use in your user profile page override
  • Using a text editor like NOTEPAD.EXE or an equivalent, copy and paste the code into your user_profile.tpl.php file
  • Change the div class name or the link text to suit.
global $user;
if (
$user->uid != $account->uid) {
if (@
in_array($account->uid, array_keys(buddylist_get_buddies($user->uid))) && user_access('maintain buddy list')) {
print
l(t('Remove !username from your buddylist',array('!username' => $account->name)), 'buddy/delete/'. $account->uid);
}
else {
if (
$account->uid != $user->uid && user_access('maintain buddy list')) {
print
l(t('Add !username to your buddylist',array('!username' => $account->name)), 'buddy/add/'. $account->uid);
}
}
}
?>

Several people I know are

pribeh - February 22, 2008 - 01:50

Several people I know are reporting that this doesn't work past 5.3. And I don't know why.

Would be nice to know how to get this to work in a block as well. Someone posted this as a starting point but I don't know php.

$uid = arg(1); // second part of the path user/1 on user profile page
Loading a user:
$account = user_load(array('uid' => $uid));
Get the name:
$name = $account->name;
?>

Any help would be uber appreciated. I currently don't have a way other than the template fix for my users to add buddies.

With the help of a few

pribeh - February 26, 2008 - 03:01

With the help of a few others the following code seems to do the trick:


if (@in_array($account->uid, array_keys(buddylist_get_buddies($user->uid))) && user_access('maintain buddy list')) {
print
".$account->uid."\">Remove " .$account->name. " from your buddylist";
}
else {
if (
$user->uid != $account->uid && user_access('maintain buddy list')) {
print
".$account->uid."\">Add " .$account->name. " to your buddylist";
}
}
?>

Make sure to specify this at the beginning of your user_profile.tpl.php:

global $user;
?>

and also make sure to specify your code in template.php to focus on $account (the profile being viewed) as opposed to $user (logged-in user viewing profile):

/**
* Catch the theme_user_profile function, and redirect through the template api
*/
function phptemplate_user_profile($account, $fields = array()) {
// Pass to phptemplate, including translating the parameters to an associative array. The element names are the names that the variables
// will be assigned within your template.
/* potential need for other code to extract field info */
return _phptemplate_callback('user_profile', array('account' => $account, 'fields' => $fields));
}
}

The above code was taken from Muslim Guy's posts and modified by Nevets.

Inserting image as link to Add or Delete from your buddylist

merto@drupal.org - July 21, 2008 - 13:59

These will override theme_user_profile and will insert image as link to Remove or Add to my buddylist below user_picture without calling _phptemplate_callback. It will also give me the flexibility to style all category name.

function phptemplate_user_profile($account, $fields) {
$output = '
';
$output .= '
';
$output .= theme('user_picture', $account);
global
$user;
if (
in_array($account->uid, array_keys(buddylist_get_buddies($user->uid))) && user_access('maintain buddy list')) {
$output .= l(theme('image', drupal_get_path('module', 'buddylist') .'/images/user_delete.png', t('Remove')), 'buddy/delete/' . $account->uid, array('title'=>t('remove from my buddylist')),drupal_get_destination(), NULL, NULL, TRUE, TRUE);
}
else {
if (
$user->uid != $account->uid && user_access('maintain buddy list')) {
$output .= l(theme('image', drupal_get_path('module', 'buddylist') .'/images/user_add.png', t('Add')),'buddy/add/' . $account->uid, array('title'=>t('add to my buddylist')),drupal_get_destination(), NULL, NULL, TRUE, TRUE);
}
}

$output .= '
'
;
$output .= '
';

foreach (
$fields as $category => $items) {
$category = str_replace(" ", "-", $category);
if (
strlen($category) > 0) {
$output .= '
. check_plain($category ). '">';
$output .= '

'. check_plain($category) .'

'
;
}

foreach (
$items as $item) {
if (isset(
$item['title'])) {
$output .= '
. $item['class'] .'">'. $item['title'].' :' .'
'
;
}
$output .= '
. $item['class'] .'">'. $item['value'] .'
'
;
}
$output .= '
'
;
}
$output .= '
'
;
$output .= '
'
;

return
$output;
}
?>

Buddylist 2

tucspl - May 28, 2008 - 18:39

In order to get this to work for buddylist 2, try this snippet (this goes in your user_profile.tpl.php):

if ($GLOBALS['user']->uid != $user->uid): ?>
//load all buddies from active user
$userbuddies = buddy_api_get_buddies($user->uid);
//buddylist links
if ($GLOBALS['user']->uid != $user->uid && user_access('maintain buddy list')) {
in_array($user->uid, array_keys($userbuddies)) ? print l(t('Remove @username from your contact list',array('@username'=>$user->name)), 'buddy/delete/'.$user->uid, array(), drupal_get_destination(), NULL, FALSE, FALSE) : print l(t('Add @username to your contact list',array('@username'=>$user->name)), 'buddy/add/'.$user->uid, array(), drupal_get_destination(), NULL, FALSE, FALSE);
}
?>

endif; ?>

Note: If used the snippet on this page (the comment above this comment) to replace $user with $account in your template.php, replace that snippet with this (this goes in template.php):

/**
* Catch the theme_user_profile function, and redirect through the template api
*/
function phptemplate_user_profile($user, $fields = array()) {
// Pass to phptemplate, including translating the parameters to an associative array. The element names are the names that the variables
// will be assigned within your template.
/* potential need for other code to extract field info */
return _phptemplate_callback('user_profile', array('user' => $user, 'fields' => $fields));
}
?>