? .DS_Store
? twitter-views.patch
Index: twitter.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/twitter/twitter.install,v
retrieving revision 1.1
diff -u -p -r1.1 twitter.install
--- twitter.install	8 Jun 2008 04:48:33 -0000	1.1
+++ twitter.install	8 Jun 2008 09:03:35 -0000
@@ -55,17 +55,17 @@ function twitter_schema() {
         'type' => 'int',
         'not null' => TRUE
       ),
-      'name' => array(
+      'screen_name' => array(
         'description' => t("The unique login name of the {twitter_account} user."),
         'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => ''
+        'length' => 255
       ),
-      'screen_name' => array(
+      'name' => array(
         'description' => t("The full name of the {twitter_account} user."),
         'type' => 'varchar',
-        'length' => 255
+        'length' => 64,
+        'not null' => TRUE,
+        'default' => ''
       ),
       'description' => array(
         'description' => t("The description/biography associated with the {twitter_account}."),
@@ -92,7 +92,7 @@ function twitter_schema() {
         'description' => t("A UNIX timestamp marking the date Twitter statuses were last fetched on."),
         'type' => 'int',
         'not null' => TRUE
-      ),      
+      ),
     ),
     'indexes' => array('screen_name' => array('screen_name')),
     'primary key' => array('twitter_uid'),
@@ -114,9 +114,10 @@ function twitter_schema() {
         'description' => t("The password for the Twitter account."),
         'type' => 'varchar',
         'length' => 64
-      ),            
+      ),
     ),
     'primary key' => array('uid', 'screen_name'),
+    'indexes' => array('screen_name' => array('screen_name'), 'uid' => array('uid')),
   );
 
   return $schema;
Index: twitter.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/twitter/twitter.module,v
retrieving revision 1.2
diff -u -p -r1.2 twitter.module
--- twitter.module	8 Jun 2008 04:48:33 -0000	1.2
+++ twitter.module	8 Jun 2008 09:03:35 -0000
@@ -25,7 +25,7 @@ function twitter_menu() {
     'file' => 'twitter.pages.inc',
     'type' => MENU_LOCAL_TASK,
   );
-  
+
   return $items;
 }
 
@@ -65,12 +65,12 @@ function twitter_form_alter(&$form, $for
     $form['twitter'] += $twitter_form;
     $form['twitter']['status']['#default_value'] = variable_get('twitter_default_format', 'New post: !title (!url)');
     $form['twitter']['status']['#description'] = t('The given text will be posted to twitter.com. You can use !url, !title and !user as replacement text.');
-  } 
+  }
 }
 
 function twitter_nodeapi(&$node, $op, $a1) {
   module_load_include('inc', 'twitter');
-  
+
   switch ($op) {
     case 'insert':
     case 'update':
@@ -86,4 +86,4 @@ function twitter_nodeapi(&$node, $op, $a
       }
       break;
   }
-}
\ No newline at end of file
+}
Index: twitter.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/twitter/twitter.pages.inc,v
retrieving revision 1.1
diff -u -p -r1.1 twitter.pages.inc
--- twitter.pages.inc	8 Jun 2008 04:48:33 -0000	1.1
+++ twitter.pages.inc	8 Jun 2008 09:03:35 -0000
@@ -6,32 +6,32 @@
  */
 function twitter_admin_form() {
   $form = array();
-  
+
   $form['twitter_default_format'] = array(
     '#type' => 'textfield',
     '#title' => t('Default format string'),
     '#maxlength' => 140,
     '#description' => t('The given text will be posted to twitter.com. You can use !url, !title and !user as replacement text.')
   );
-  
+
   $form['twitter_types'] = array(
-    
+
   );
- 
-  return system_settings_form($form); 
+
+  return system_settings_form($form);
 }
 
 function twitter_user_settings($account) {
   module_load_include('inc', 'twitter');
-  
+
   $twitter_accounts = twitter_get_user_accounts($account->uid);
-  
+
   $header = array('', t('Name'), t('Description'));
   $rows = array();
-  
+
   foreach ($twitter_accounts as $twitter_account) {
     $rows[] = array(
-      '<img src="'.$twitter_account['profile_image_url'].'" />',
+      theme('image', $twitter_account['profile_image_url'], '', '', array(), FALSE),
       $twitter_account['screen_name'],
       $twitter_account['description'],
     );
@@ -47,7 +47,7 @@ function twitter_add_account($form_state
     global $user;
     $account = $user;
   }
-  
+
   $form['uid'] = array(
     '#type' => 'value',
     '#value' => $account->uid,
@@ -68,12 +68,12 @@ function twitter_add_account($form_state
     '#value' => t('Add account'),
   );
 
-  return $form;  
+  return $form;
 }
 
 function twitter_add_account_validate($form, &$form_state) {
   module_load_include('inc', 'twitter');
-  
+
   $verify = FALSE;
 
   $pass = $form_state['values']['password'];
@@ -93,7 +93,7 @@ function twitter_add_account_validate($f
 
 function twitter_add_account_submit($form, &$form_state) {
   module_load_include('inc', 'twitter');
-   
+
   if (!empty($form_state['values']['screen_name'])) {
     twitter_user_save($form_state['values']);
   }
Index: twitter.views.inc
===================================================================
RCS file: twitter.views.inc
diff -N twitter.views.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ twitter.views.inc	8 Jun 2008 09:03:36 -0000
@@ -0,0 +1,291 @@
+<?php
+// $Id$
+/**
+ * @file
+ * Provide views data and handlers for twitter.module
+ */
+
+/**
+ * @defgroup views_twitter_module twitter.module handlers
+ *
+ * Includes the ability to create views of just the twitter table.
+ * @{
+ */
+
+/**
+ * Implementation of hook_views_data()
+ */
+function twitter_views_data() {
+  // Basic table information.
+
+  $data['twitter']['table']['group']  = t('Twitter');
+
+  // Advertise this table as a possible base table
+  $data['twitter']['table']['base'] = array(
+    'field' => 'twitter_id',
+    'title' => t('Twitter message'),
+    'help' => t('Stores Twitter status messages.'),
+    'weight' => 10,
+  );
+
+  // Twitter screen name
+  $data['twitter']['screen_name'] = array(
+    'title' => t('Login name'),
+    'help' => t('The login account of the Twitter user.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+  );
+
+  // Twitter message timestamp
+  $data['twitter']['created_time'] = array(
+    'title' => t('Created time'),
+    'help' => t('The time the Twitter message was posted.'),
+    'field' => array(
+      'handler' => 'views_handler_field_date',
+      'click sortable' => TRUE,
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_date',
+    ),
+  );
+
+  // Twitter text
+  $data['twitter']['text'] = array(
+    'title' => t('Message text'),
+    'help' => t('The text of the Twitter message.'),
+    'field' => array(
+      'handler' => 'views_handler_field_xss',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+  );
+
+  // Twitter source
+  $data['twitter']['source'] = array(
+    'title' => t('Source'),
+    'help' => t('The name of the application that posted the Twitter message.'),
+    'field' => array(
+      'handler' => 'views_handler_field_xss',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+
+
+
+
+  $data['twitter_account']['table']['group']  = t('Twitter');
+
+  $data['twitter_account']['table']['join'] = array(
+    'twitter' => array(
+      'left_field' => 'screen_name',
+      'field' => 'screen_name',
+    ),
+    'users' => array(
+      'field' => 'screen_name',
+      'left_table' => 'twitter_user',
+      'left_field' => 'screen_name',
+    ),
+  );
+
+  // Twitter screen name
+  $data['twitter_account']['screen_name'] = array(
+    'title' => t('Login name'),
+    'help' => t('The login account of the Twitter user.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+  );
+
+
+  // Twitter account full name
+  $data['twitter_account']['name'] = array(
+    'title' => t('Full name'),
+    'help' => t('The full name Twitter account user.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'argument' => array(
+      'handler' => 'views_handler_argument_string',
+    ),
+  );
+
+  // Twitter account description
+  $data['twitter_account']['source'] = array(
+    'title' => t('Description'),
+    'help' => t('The description of the Twitter account user.'),
+    'field' => array(
+      'handler' => 'views_handler_field',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+
+  // Twitter account profile image
+  $data['twitter_account']['profile_image_url'] = array(
+    'title' => t('Profile image'),
+    'help' => t('The image used by the Twitter account user.'),
+    'field' => array(
+      'handler' => 'twitter_views_handler_profile_image',
+      'click sortable' => TRUE,
+    ),
+  );
+
+  // Twitter account url
+  $data['twitter_account']['url'] = array(
+    'title' => t('URL'),
+    'help' => t('The URL given by the Twitter account user.'),
+    'field' => array(
+      'handler' => 'views_handler_field_url',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+
+  // Twitter account protected
+  $data['twitter_account']['protected'] = array(
+    'title' => t('Protected status'),
+    'help' => t('Whether posts from this Twitter account should be visible to the general public.'),
+    'field' => array(
+      'handler' => 'views_handler_field_boolean',
+      'click sortable' => TRUE,
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_boolean_operator',
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+
+  // Twitter message timestamp
+  $data['twitter_account']['last_refresh'] = array(
+    'title' => t('Last refresh'),
+    'help' => t('The time the Twitter account statuses were retrieved.'),
+    'field' => array(
+      'handler' => 'views_handler_field_date',
+      'click sortable' => TRUE,
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_date',
+    ),
+  );
+
+
+  $data['twitter_user']['table']['group']  = t('Twitter/Drupal user account');
+
+  $data['twitter_user']['table']['join'] = array(
+    'users' => array(
+      'left_field' => 'uid',
+      'field' => 'uid',
+    ),
+    'twitter_account' => array(
+      'left_field' => 'screen_name',
+      'field' => 'screen_name',
+    ),
+    'twitter' => array(
+      'left_table' => 'twitter_account',
+      'left_field' => 'screen_name',
+      'field' => 'screen_name',
+    ),
+  );
+
+  // Twitter account description
+  $data['twitter_user']['uid'] = array(
+    'title' => t('User ID'),
+    'help' => t('The UID of the Twitter account.'),
+  );
+
+  // Twitter account description
+  $data['twitter_user']['screen_name'] = array(
+    'title' => t('Screen name'),
+    'help' => t('The screen name of the Twitter account.'),
+  );
+
+  return $data;
+}
+
+
+function twitter_views_data_alter(&$data) {
+  $data['users']['table']['join']['twitter'] = array(
+    'left_table' => 'twitter_user',
+    'left_field' => 'uid',
+    'field' => 'uid',
+  );
+  $data['users']['table']['join']['twitter_account'] = array(
+    'left_table' => 'twitter_user',
+    'left_field' => 'uid',
+    'field' => 'uid',
+  );
+  $data['users']['table']['join']['twitter_user'] = array(
+    'left_field' => 'uid',
+    'field' => 'uid',
+  );
+}
+
+
+/**
+ * Field handler to provide simple renderer that turns a URL into a clickable link.
+ */
+class twitter_views_handler_profile_image extends views_handler_field {
+  function render($values) {
+    $value = $values->{$this->field_alias};
+    return theme('image', $value, '', '', array(), FALSE);
+  }
+}
+
+
+/**
+ * @}
+ */
Index: twitter.views_default.inc
===================================================================
RCS file: twitter.views_default.inc
diff -N twitter.views_default.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ twitter.views_default.inc	8 Jun 2008 09:03:36 -0000
@@ -0,0 +1,211 @@
+<?php
+// $Id$
+
+function twitter_views_default_views() {
+  $view = new view;
+  $view->name = 'tweets';
+  $view->description = 'Displays Twitter.com status messages for users who have associated Twitter accounts.';
+  $view->tag = '';
+  $view->view_php = '';
+  $view->base_table = 'twitter';
+  $view->is_cacheable = '0';
+  $view->api_version = 2;
+  $view->disabled = FALSE; // Edit this to true to make a default view disabled initially
+  $view->display = array();
+    $display = new views_display;
+    $display->id = 'default';
+    $display->display_title = 'Tweets';
+    $display->display_plugin = 'default';
+    $display->position = '1';
+    $display->display_options = array(
+    'sorts' => array(
+      'created_time' => array(
+        'order' => 'DESC',
+        'id' => 'created_time',
+        'table' => 'twitter',
+        'field' => 'created_time',
+        'relationship' => 'none',
+      ),
+    ),
+    'fields' => array(
+      'profile_image_url' => array(
+        'label' => '',
+        'exclude' => 0,
+        'id' => 'profile_image_url',
+        'table' => 'twitter_account',
+        'field' => 'profile_image_url',
+        'relationship' => 'none',
+      ),
+      'text' => array(
+        'label' => '',
+        'exclude' => 0,
+        'id' => 'text',
+        'table' => 'twitter',
+        'field' => 'text',
+        'relationship' => 'none',
+      ),
+      'created_time' => array(
+        'label' => '',
+        'date_format' => 'time ago',
+        'custom_date_format' => '',
+        'exclude' => 0,
+        'id' => 'created_time',
+        'table' => 'twitter',
+        'field' => 'created_time',
+        'relationship' => 'none',
+      ),
+    ),
+    'filters' => array(
+      'protected' => array(
+        'operator' => '=',
+        'value' => 0,
+        'group' => '0',
+        'exposed' => FALSE,
+        'expose' => array(
+          'operator' => FALSE,
+          'label' => '',
+        ),
+        'id' => 'protected',
+        'table' => 'twitter_account',
+        'field' => 'protected',
+        'relationship' => 'none',
+      ),
+    ),
+    'style_plugin' => 'table',
+    'style_options' => array(
+      'grouping' => '',
+      'override' => 1,
+      'sticky' => 0,
+      'order' => 'asc',
+      'columns' => array(
+        'profile_image_url' => 'profile_image_url',
+        'text' => 'text',
+        'created_time' => 'text',
+      ),
+      'info' => array(
+        'profile_image_url' => array(
+          'sortable' => 0,
+          'separator' => '',
+        ),
+        'text' => array(
+          'sortable' => 0,
+          'separator' => ' &#8212; ',
+        ),
+        'created_time' => array(
+          'sortable' => 0,
+          'separator' => '',
+        ),
+      ),
+      'default' => '-1',
+    ),
+    'use_pager' => 'mini',
+    'pager_element' => 0,
+    'arguments' => array(
+      'uid' => array(
+        'default_action' => 'default',
+        'style_plugin' => 'default_summary',
+        'style_options' => array(),
+        'wildcard' => 'all',
+        'wildcard_substitution' => 'All author',
+        'title' => '%1\'s tweets',
+        'default_argument_type' => 'user',
+        'default_argument' => '',
+        'validate_type' => 'none',
+        'validate_fail' => 'not found',
+        'break_phrase' => 0,
+        'not' => 0,
+        'id' => 'uid',
+        'table' => 'users',
+        'field' => 'uid',
+        'relationship' => 'none',
+        'default_argument_user' => 1,
+        'default_argument_fixed' => '',
+        'default_argument_php' => '',
+        'validate_argument_node_type' => array(
+          'poll' => 0,
+          'page' => 0,
+          'review' => 0,
+          'story' => 0,
+        ),
+        'validate_argument_node_access' => 0,
+        'validate_argument_nid_type' => 'nid',
+        'validate_argument_vocabulary' => array(),
+        'validate_argument_type' => 'tid',
+        'validate_argument_php' => '',
+      ),
+    ),
+  );
+  $view->display['default'] = $display;
+    $display = new views_display;
+    $display->id = 'page';
+    $display->display_title = 'Page';
+    $display->display_plugin = 'page';
+    $display->position = '2';
+    $display->display_options = array(
+    'menu' => array(
+      'type' => 'tab',
+      'title' => 'Twitter',
+      'weight' => '1',
+    ),
+    'path' => 'user/%/tweets',
+  );
+  $view->display['page'] = $display;
+    $display = new views_display;
+    $display->id = 'block';
+    $display->display_title = 'Block';
+    $display->display_plugin = 'block';
+    $display->position = '3';
+    $display->display_options = array(
+    'fields' => array(
+      'text' => array(
+        'label' => '',
+        'exclude' => 0,
+        'id' => 'text',
+        'table' => 'twitter',
+        'field' => 'text',
+        'relationship' => 'none',
+      ),
+      'created_time' => array(
+        'label' => '',
+        'date_format' => 'time ago',
+        'custom_date_format' => '',
+        'exclude' => 0,
+        'id' => 'created_time',
+        'table' => 'twitter',
+        'field' => 'created_time',
+        'relationship' => 'none',
+      ),
+    ),
+    'defaults' => array(
+      'fields' => FALSE,
+      'style_plugin' => FALSE,
+      'style_options' => FALSE,
+      'row_plugin' => FALSE,
+      'row_options' => FALSE,
+      'items_per_page' => FALSE,
+      'offset' => FALSE,
+      'use_pager' => FALSE,
+      'pager_element' => FALSE,
+      'use_more' => FALSE,
+    ),
+    'style_plugin' => 'list',
+    'style_options' => array(),
+    'row_plugin' => 'fields',
+    'row_options' => array(
+      'inline' => array(
+        'text' => 'text',
+        'created_time' => 'created_time',
+      ),
+      'separator' => ' &#8212; ',
+    ),
+    'items_per_page' => 5,
+    'offset' => 0,
+    'use_pager' => '0',
+    'pager_element' => 0,
+    'use_more' => 1,
+    'block_description' => 'User Tweets',
+  );
+  $view->display['block'] = $display;
+
+  return array('tweets' => $view);
+}
