### Eclipse Workspace Patch 1.0
#P drupal-contrib
Index: modules/buddylist/buddylist_views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/buddylist/buddylist_views.inc,v
retrieving revision 1.5
diff -u -r1.5 buddylist_views.inc
--- modules/buddylist/buddylist_views.inc	7 Jan 2007 18:23:25 -0000	1.5
+++ modules/buddylist/buddylist_views.inc	4 Apr 2007 14:54:27 -0000
@@ -8,18 +8,37 @@
 
 function buddylist_views_tables() {
   $tables['buddylist'] = array(
-    "name" => "buddylist",
-    "join" => array(
-      "left" => array(
-        "table" => "users",
-        "field" => "uid",
+    'name' => 'buddylist',
+    'join' => array(
+      'left' => array(
+        'table' => 'users',
+        'field' => 'uid',
       ),
-      "right" => array(
-        "field" => "buddy",
+      'right' => array(
+        'field' => 'buddy',
+      ),
+    ),
+    'fields' => array(
+      'timestamp' => array(
+        'name' => t('Buddylist: Created time'),
+        'sortable' => true,
+        'handler' => views_handler_field_dates(),
+        'option' => 'string',
+        'help' => t('This will display the time that the buddy was created.'),
       ),
     ),
   );
 
+  // Add option to sort by creation time only if usernode is enabled
+  if (module_exists('usernode')) {
+    $tables['buddylist']['sorts'] = array(
+      'timestamp' => array(
+        'name' => t('Buddylist: Created time'),
+        'help' => t('This allows you to sort chronologically by buddy creation time.'),
+      )
+    );
+  }
+
   $tables['buddylist_users'] = array(
     'name' => 'users',
     'join' => array(
@@ -62,7 +81,7 @@
         'help' => t('This allows you to filter by buddies of a particular user.'),
       ),
       'currentuid' => array(
-	'field' => 'uid',
+        'field' => 'uid',
         'name' => t('Buddylist: Author Is A Buddy Of Current User'),
         'operator' => 'views_handler_operator_eqneq',
         'list' => 'views_handler_filter_usercurrent',
@@ -100,33 +119,17 @@
         ),
       ),
     );
-    $tables['usernode_buddylist_buddyof'] = array(
-      "name" => "buddylist",
+    $tables['usernode_buddylist_username'] = array(
+      "name" => "users",
       "join" => array(
         "left" => array(
-          "table" => "usernode",
+          "table" => "usernode_buddylist",
           "field" => "uid",
         ),
         "right" => array(
           "field" => "uid",
         ),
       ),
-      'filters' => array(
-        'uid' => array(
-          'name' => t('Buddylist: Username Is A Buddy Of Usernode'),
-          'operator' => 'views_handler_operator_or',
-          'list' => 'views_handler_filter_username',
-          'value-type' => 'array',
-          'help' => t('This allows you to filter by buddies of a particular user.'),
-        ),
-        'currentuid' => array(
-          'field' => 'uid',
-          'name' => t('Buddylist: Current User Is A Buddy Of Usernode'),
-          'operator' => 'views_handler_operator_eqneq',
-          'list' => 'views_handler_filter_usercurrent',
-          'help' => t('This allows you to filter by buddies of the current user.'),
-        ),
-      ),
     );
     $tables['usernode_buddylist_buddyof'] = array(
       "name" => "buddylist",
@@ -156,6 +159,7 @@
         ),
       ),
     );
+
   }
   return($tables);
 }
@@ -299,6 +303,11 @@
         'handler' => 'buddylist_views_handler_arg_buddies',
         'help' => t('This will filter usernodes from users, which are buddies of the user with the ID passed to the view as argument.'),
       ),
+      'buddylist_buddies_username' => array(
+        'name' => t('Buddylist: Usernode is buddy of username'),
+        'handler' => 'buddylist_views_handler_arg_buddies_username',
+        'help' => t('This will filter usernodes from users, which are buddies of the user with the username passed to the view as argument.'),
+      ),
       'buddylist_buddies_buddyof' => array(
         'name' => t('Buddylist: UID is buddy of Usernode'),
         'handler' => 'buddylist_views_handler_arg_buddies_buddyof',
@@ -389,3 +398,46 @@
       return check_plain($user->name);
   }
 }
+
+
+/**
+ * Callback for buddylist_views_arguments
+ */
+function buddylist_views_handler_arg_buddies_username($op, &$query, $argtype, $arg = '') {
+  switch($op) {
+    case 'summary':
+      $table_data = _views_get_tables();
+      $joininfo = $table_data['usernode_buddylist_buddyof']['join'];
+      $joininfo['type'] = 'inner';
+      $query->add_table("usernode_buddylist_buddyof", true, 1, $joininfo);
+      
+      $query->add_table('users', true);
+      $query->add_field('name', 'users');
+      $query->add_field('uid', 'users');
+      $fieldinfo['field'] = "users.name";
+      return $fieldinfo;
+      break;
+    case 'sort':
+      $query->add_orderby('users', 'name', $argtype);
+      break;
+    case 'filter':
+      $name = $arg;
+      $table_data = _views_get_tables();
+      $joininfo = $table_data['usernode_buddylist']['join'];
+      $joininfo['type'] = 'inner';
+      $query->add_table("usernode_buddylist", true, 1, $joininfo);
+      $joininfo = $table_data['usernode_buddylist_username']['join'];
+      $joininfo['type'] = 'inner';
+      $joininfo['extra'] = array('name' => $name);
+      $query->add_table("usernode_buddylist_username", true, 1, $joininfo);
+      break;
+    case 'link':
+      $name = ($query->name ? $query->name : variable_get('anonymous', 'Anonymous'));
+      return l($name, "$arg/" . intval($query->uid));
+    case 'title':
+      if (!$query) {
+        return variable_get('anonymous', 'Anonymous');
+      }
+      return check_plain($query);
+  }
+}
\ No newline at end of file
