Index: modules/buddylist/buddylist.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/buddylist/buddylist.module,v
retrieving revision 1.9
diff -u -r1.9 buddylist.module
--- modules/buddylist/buddylist.module	15 Nov 2003 09:15:40 -0000	1.9
+++ modules/buddylist/buddylist.module	12 Mar 2004 21:09:48 -0000
@@ -23,6 +23,14 @@
       else {
         $output .= form_item(t("Buddy List"), l(t("Add to Buddy List"), "buddylist/add/" . $thisuser->uid));
       }
+
+      // look up this user's friends
+      $friends = buddylist_list_buddies($thisuser->uid, 0, 1);
+      $output .= form_item(t("Friends"), $friends, "These are the users this user has friended");
+
+      // look up users who consider this user a friend
+      $friend_of = buddylist_list_buddies_of($thisuser->uid, 1);
+      $output .= form_item(t("Friend Of"), $friend_of, "These are the users that have friended this user");
     }
     return $output;
   }
@@ -72,7 +80,7 @@
             break;
 
           case 1:
-            $block["content"] = theme("node_title_list" ,db_query("SELECT distinct n.nid, u.uid, u.name, n.created, n.title FROM buddylist b, node n LEFT JOIN users u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 AND n.uid=b.buddy AND b.uid=%d ORDER BY n.nid DESC LIMIT 10",$user->uid));
+            $block["content"] = node_title_list(db_query("SELECT distinct n.nid, u.uid, u.name, n.created, n.title FROM buddylist b, node n LEFT JOIN users u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 AND n.uid=b.buddy AND b.uid=%d ORDER BY n.nid DESC LIMIT 10",$user->uid));
             if (!sizeof($block["content"])) {
               return NULL;
             } 
@@ -115,8 +123,23 @@
     return l($icon,"buddylist/delete/$id");
   }
 
+  function buddylist_link($type, $node = 0, $main) {
+    global $user;
+  
+    if ($type == "system") {
+      menu("buddylist", t("buddy list"), "buddylist_page", 0, 0);
+      menu("buddylist/list", t("view buddylist"), "buddylist_page", 1, 0);
+      menu("buddylist/add", t("add to buddylist"), "buddylist_page", 0, 1);
+      menu("buddylist/save", t("user added to buddylist"), "buddylist_page", 0, 1);
+      menu("buddylist/delete", t("delete buddylist"), "buddylist_page", 0, 1);
+      menu("buddylist/remove", t("user removed from buddylist"), "buddylist_page", 0, 1);
+      menu("buddylist/view", t("view buddylist"), "buddylist_page", 0, 1);
+    }
+  }
+
   function buddylist_page() {
     global $user;
+
     $edit = $_POST["edit"];
     $op = $_POST["op"];
     if (empty($op)) {
@@ -124,7 +147,7 @@
     }
     switch ($op) {
       case 'add' : 
-        $title = "Confirm Addition to Buddy List?";
+        $title = t("Confirm Addition to Buddy List?");
         $output = buddylist_addbuddy_form(arg(2));
         break;
       case "Add User" :
@@ -133,10 +156,15 @@
         break;
 
       case 'delete' : 
-        $title = "Confirm Removal from Buddy List?";
+        $title = t("Confirm Removal from Buddy List?");
         $output = buddylist_deletebuddy_form(arg(2));
         break;
       
+      case 'list' : 
+        $title = t("Your Buddy List");
+        $output = buddylist_list_buddies();
+        break;
+      
       case "Remove User" :
       case "remove" :
         $output = buddylist_remove($edit['buddy_id']);
@@ -144,13 +172,11 @@
 
       case "view" :
       default :
-        $title = "My Buddies";
+        $title = t("My Buddies");
+        $output = buddylist_list_content();
         break;
     }
-    print theme("header");
-    print theme("box", t($title), $output);
-    print theme("footer");
-
+    print theme("page", $output, $title);
   }
 
   function buddylist_addbuddy_form($uid) {
@@ -168,7 +194,7 @@
       return t("Cannot add yourself to buddy list");
     }
     else {
-      $form  = "Add User <b>'" . l($buddy->name,"user/" . $uid) . "'</b> to Buddy List?<br /><br />";
+      $form  = t("Add User <b>'") . l($buddy->name,"user/" . $uid) . t("'</b> to Buddy List?<br /><br />");
       $form .= form_hidden("buddy_id", $uid);
       $form .= form_submit(t("Add User"));  
       return form($form,"post",url("buddylist/save"));
@@ -184,10 +210,10 @@
       return "This user does not exist";
     }
     elseif (!in_array($uid, $_SESSION['buddylist'])) {
-      return "This user is not on your buddy list";
+      return t("This user is not on your buddy list");
     }
     else {
-      $form  = "Remove User <b>'" . l($buddy->name,"user/" . $uid) . "'</b> from Buddy List?<br /><br />";
+      $form  = t("Remove User <b>'") . l($buddy->name,"user/" . $uid) . t("'</b> from Buddy List?<br /><br />");
       $form .= form_hidden("buddy_id", $uid);
       $form .= form_submit(t("Remove User"));  
       return form($form,"post",url("buddylist/remove"));
@@ -206,4 +232,70 @@
     buddylist_update_session();
   }
 
+  // Lists out all of a user's buddies' content 
+  function buddylist_list_content() {
+    global $user;
+    $result = pager_query("SELECT distinct n.nid, n.type, u.uid, u.name, n.created, n.title FROM buddylist b, node n LEFT JOIN users u ON n.uid = u.uid WHERE n.status = 1 AND n.uid=b.buddy AND b.uid=$user->uid ORDER BY n.nid DESC",variable_get('default_nodes_main', 10));
+    if (db_num_rows($result)) {
+      drupal_set_html_head('<link rel="alternate" type="application/rss+xml" title="RSS" href="'. url('node/feed') .'" />');
+  
+      $output = '';
+      while ($node = db_fetch_object($result)) {
+        $output .= node_view(node_load(array('nid' => $node->nid, 'type' => $node->type)), 1);
+      }
+      $output .= theme('pager', NULL, variable_get('default_nodes_main', 10));
+    }
+    else {
+      $output = t("<p>None of your buddies have posted any blog entries.</p>");
+    }
+  
+    return $output;
+  }
+  
+  // Lists all of a user's buddies.  Optionally show links to remove and/or include count.
+  function buddylist_list_buddies($uid=null, $show_remove_link=1, $show_count=0) {
+    global $user;
+    if(!$uid && $user->uid > 0) {
+      $uid = $user->uid;
+    }
+    
+    $result = db_query("SELECT b.buddy as uid, u.name FROM buddylist b, users u WHERE b.uid=%d AND u.uid=b.buddy ORDER BY b.timestamp DESC",$uid);
+    while ($account = db_fetch_object($result)) {
+      $link = l($account->name, "user/view/$account->uid");
+      if($show_remove_link) {
+        $link .= "&nbsp;&nbsp;" . l(t("[remove]"), "buddylist/delete/$account->uid");
+      }
+      $users[] = $link;
+    }
+    
+    if($show_count) {
+      $cnt = sizeof($users);
+      $title = "<b>($cnt user" . ($cnt == 1? '':'s') . ")</b>";
+    }
+
+    return theme("user_list",$users, $title);
+    
+  }
+  
+  // Lists all of the users who consider this user a buddy.  Optionally include count.
+  function buddylist_list_buddies_of($uid=null, $show_count=0) {
+    global $user;
+    if(!$uid && $user->uid > 0) {
+      $uid = $user->uid;
+    }
+      
+    $result = db_query("SELECT b.uid as uid, u.name FROM buddylist b, users u WHERE b.buddy=%d AND u.uid=b.uid ORDER BY b.timestamp DESC",$uid);
+    while ($account = db_fetch_object($result)) {
+      $link = l($account->name, "user/view/$account->uid");
+      $users[] = $link;
+    }
+
+    if($show_count) {
+      $cnt = sizeof($users);
+      $title = "<b>($cnt " . t("user" . ($cnt == 1? '':'s')) . ")</b>";
+    }
+
+    return theme("user_list",$users, $title);
+    
+  }
 ?>
Index: modules/buddylist/buddylist.mysql
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/buddylist/buddylist.mysql,v
retrieving revision 1.1
diff -u -r1.1 buddylist.mysql
--- modules/buddylist/buddylist.mysql	12 May 2003 21:40:42 -0000	1.1
+++ modules/buddylist/buddylist.mysql	12 Mar 2004 21:09:48 -0000
@@ -1 +1,3 @@
 create table buddylist (uid int(10) unsigned, buddy int(10) unsigned,timestamp int(11));
+create index buddylist_uid on buddylist(uid);
+create index buddylist_buddy on buddylist(buddy);
