<?php
/**
 * @file
 * Install, update and uninstall functions for the twitter module.
 */

/**
 * Implements hook_requirements()
 */
function twitter_requirements($phase) {
  $requirements = array();
  $t = get_t();
  if ($phase == 'runtime') {
    // Verify that the Twitter Application keys are set.
    $requirements['twitter_keys'] = array('title' => $t('Twitter Application keys'));
    $consumer_key = variable_get('twitter_consumer_key', NULL);
    $consumer_secret = variable_get('twitter_consumer_secret', NULL);
    if (empty($consumer_key) || empty($consumer_secret)) {
      $requirements['twitter_keys']['value'] = $t('Missing');
      $requirements['twitter_keys']['description'] =
        $t('In order to interact with Twitter, you need to create an application at ' .
           '<a href="http://dev.twitter.com" target="_blank">http://dev.twitter.com</a> ' .
           'and set the generated Application keys at the ' .
           '<a href="/admin/config/services/twitter">Twitter settings page</a>');
      $requirements['twitter_keys']['severity'] = REQUIREMENT_ERROR;
    }
    else {
      $requirements['twitter_keys']['value'] = $t('Configured');
      $requirements['twitter_keys']['severity'] = REQUIREMENT_OK;
    }
  }
  return $requirements;
}

/**
 * Implements hook_schema().
 */
function twitter_schema() {
  $schema['twitter'] = array(
    'description' => "Stores individual Twitter posts.",
    'fields' => array(
      'twitter_id' => array(
        'description' => "Unique identifier for each {twitter} post.",
        'type' => 'numeric',
        'unsigned' => TRUE,
        'precision' => 20,
        'scale' => 0,
        'not null' => TRUE,
        'default' => 0,
      ),
      'screen_name' => array(
        'description' => "Screen Name of the {twitter_account} user.",
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
      ),
      'created_at' => array(
        'description' => "Date and time the {twitter} post was created.",
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => '',
      ),
      'created_time' => array(
        'description' => "A duplicate of {twitter}.created_at in UNIX timestamp format.",
        'type' => 'int',
        'not null' => TRUE,
      ),
      'text' => array(
        'description' => "The text of the {twitter} post.",
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
      ),
      'source' => array(
        'description' => "The application that created the {twitter} post.",
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
      ),
      'in_reply_to_status_id' => array(
        'description' => "Unique identifier of a status this {twitter} post was replying to.",
        'type' => 'numeric',
        'unsigned' => TRUE,
        'precision' => 20,
        'scale' => 0,
        'not null' => FALSE,
      ),
      'in_reply_to_user_id' => array(
        'description' => "Unique identifier for the {twitter_account} this post was replying to.",
        'type' => 'numeric',
        'unsigned' => TRUE,
        'precision' => 20,
        'scale' => 0,
        'not null' => FALSE,
      ),
      'in_reply_to_screen_name' => array(
        'description' => "Screen name of the {twitter} user this post was replying to.",
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
      ),
      'truncated' => array(
        'description' => "Boolean flag indicating whether the {twitter} status was cut off to fit in the 140 character limit.",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'indexes' => array('screen_name' => array('screen_name')),
    'primary key' => array('twitter_id'),
  );

  $schema['twitter_account'] = array(
    'description' => "Stores information on specific Twitter user accounts.",
    'fields' => array(
      'twitter_uid' => array(
        'description' => "The unique identifier of the {twitter_account}.",
        'type' => 'numeric',
        'unsigned' => TRUE,
        'precision' => 20,
        'scale' => 0,
        'not null' => TRUE,
        'default' => 0,
      ),
      'host' => array(
        'description' => 'The host for this account can be a laconi.ca instance',
        'type' => 'varchar',
        'length' => 255,
      ),
      'screen_name' => array(
        'description' => "The unique login name of the {twitter_account} user.",
        'type' => 'varchar',
        'length' => 255,
      ),
      'oauth_token' => array(
        'description' => 'The token_key for oauth-based access.',
        'type' => 'varchar',
        'length' => 64,
      ),
      'oauth_token_secret' => array(
        'description' => 'The token_secret for oauth-based access.',
        'type' => 'varchar',
        'length' => 64,
      ),
      'name' => array(
        'description' => "The full name of the {twitter_account} user.",
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => '',
      ),
      'description' => array(
        'description' => "The description/biography associated with the {twitter_account}.",
        'type' => 'varchar',
        'length' => 255,
      ),
      'location' => array(
        'description' => "The location of the {twitter_account}'s owner.",
        'type' => 'varchar',
        'length' => 255,
      ),
      'followers_count' => array(
        'description' => "The number of users following this {twitter_account}.",
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'friends_count' => array(
        'description' => "The number of users this {twitter_account} is following.",
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'statuses_count' => array(
        'description' => "The total number of status updates performed by a user, excluding direct messages sent.",
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'favourites_count' => array(
        'description' => "The  number of statuses a user has marked as favorite.",
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'url' => array(
        'description' => "The url of the {twitter_account}'s home page.",
        'type' => 'varchar',
        'length' => 255,
      ),
      'profile_image_url' => array(
        'description' => "The url of the {twitter_account}'s profile image.",
        'type' => 'varchar',
        'length' => 255,
      ),
      'protected' => array(
        'description' => "Boolean flag indicating whether the {twitter_account}'s posts are publicly accessible.",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'profile_background_color' => array(
        'description' => "hex RGB value for a user's background color",
        'type' => 'varchar',
        'length' => 6,
        'not null' => TRUE,
        'default' => '',
      ),
      'profile_text_color' => array(
        'description' => "hex RGB value for a user's text color",
        'type' => 'varchar',
        'length' => 6,
        'not null' => TRUE,
        'default' => '',
      ),
      'profile_link_color' => array(
        'description' => "hex RGB value for a user's link color",
        'type' => 'varchar',
        'length' => 6,
        'not null' => TRUE,
        'default' => '',
      ),
      'profile_sidebar_fill_color' => array(
        'description' => "hex RGB value for a user's sidebar color",
        'type' => 'varchar',
        'length' => 6,
        'not null' => TRUE,
        'default' => '',
      ),
      'profile_sidebar_border_color' => array(
        'description' => "hex RGB value for a user's border color",
        'type' => 'varchar',
        'length' => 6,
        'not null' => TRUE,
        'default' => '',
      ),
      'profile_background_image_url' => array(
        'description' => "The url of the {twitter_account}'s profile image.",
        'type' => 'varchar',
        'length' => 255,
      ),
      'profile_background_tile' => array(
        'description' => "Boolean indicating if a user's background is tiled.",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 1,
      ),
      'verified' => array(
        'description' => "Indicates if a user is verified.",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 1,
      ),
      'created_at' => array(
        'description' => "Date and time the {twitter_account} was created.",
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => '',
      ),
      'created_time' => array(
        'description' => "A duplicate of {twitter_account}.created_at in UNIX timestamp format.",
        'type' => 'int',
        'not null' => TRUE,
      ),
      'utc_offset' => array(
        'description' => "A duplicate of {twitter_account}.created_at in UNIX timestamp format.",
        'type' => 'int',
        'not null' => TRUE,
      ),
      'import' => array(
        'description' => "Boolean flag indicating whether the {twitter_user}'s posts should be pulled in by the site.",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'mentions' => array(
        'description' => "Boolean flag indicating whether the {twitter_user}'s mentions should be pulled in by the site.",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'last_refresh' => array(
        'description' => "A UNIX timestamp marking the date Twitter statuses were last fetched on.",
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'is_global' => array(
        'description' => "Boolean flag indicating if this account is available for global use",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'uid' => array(
        'description' => "The uid of the user who added this Twitter account",
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'indexes' => array('screen_name' => array('screen_name')),
    'primary key' => array('twitter_uid'),
  );

  return $schema;
}

/**
 * Implements hook_install().
 */
function twitter_install() {
  drupal_install_schema('twitter');
  // Set the weight to 3, making it heavier than Pathauto.
  db_query("UPDATE {system} SET weight = 3 WHERE name = 'twitter'");
}

/**
 * Implements hook_uninstall()
 */
function twitter_uninstall() {
  // Remove tables.
  drupal_uninstall_schema('twitter');
  // Remove variables
  variable_del('twitter_post_default_state');
  variable_del('twitter_consumer_key');
  variable_del('twitter_consumer_secret');
  variable_del('twitter_import');
  variable_del('twitter_expire');
  variable_del('twitter_host');
  variable_del('twitter_api');
  variable_del('twitter_search');
  variable_del('twitter_tinyurl');
  // These ones are generated by appending a content type, plus there
  // are two default ones
  $result = db_query("SELECT name FROM {variable} WHERE name LIKE 'twitter_post_default_%'");
  while ($var_name = db_result($result)) {
    variable_del($var_name);
  }
  variable_del('twitter_signin_button');
  variable_del('twitter_signin_register');
}

/**
 * Previous versions of the Twitter module had no database schema.
 * We're safe just running the basic install for update_1.
 */
function twitter_update_6000() {
  $ret = array();
  twitter_install();
  return $ret;
}

/**
 * Adding a handful of additional flags on accounts, and saving more metadata
 * when Twitter sends it to us.
 */
function twitter_update_6001() {
  $ret = array();
  $attributes = array(
    'description' => t("Boolean flag indicating whether the {twitter_user}'s posts should be pulled in by the site."),
    'unsigned' => TRUE,
    'default' => 1,
    'not null' => TRUE,
  );
  db_add_column($ret, 'twitter_user', 'import', 'int', $attributes);

  $attributes = array(
    'description' => t("The location of the {twitter_account}'s owner."),
    'length' => 255
  );
  db_add_column($ret, 'twitter_account', 'location', 'varchar(255)', $attributes);

  $attributes = array(
    'description' => t("The number of users following this {twitter_account}."),
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0
  );
  db_add_column($ret, 'twitter_account', 'followers_count', 'int', $attributes);

  return $ret;
}

/**
 * Set the weight a little heavier to allow Pathauto and other modules to do
 * their work on the title, path alias, etc. before the twitter post is sent.
 */
function twitter_update_6002() {
  $ret = array();
  $ret[] = update_sql("UPDATE {system} SET weight = 3 WHERE name = 'twitter'");
  return $ret;
}

/**
 * Twitter status IDs are hitting the rollover point for signed ints. Let's
 * be sure we're ready. See http://bit.ly/kokvi for details.
 */
function twitter_update_6003() {
  $ret = array();
  db_drop_primary_key($ret, 'twitter');
  
  db_change_field($ret, 'twitter', 'twitter_id', 'twitter_id',
    array('description' => t("Unique identifier for each {twitter} post."),
          'type' => 'int', 'size' => 'big', 'unsigned' => 'true', 'not null' => TRUE),
    array('primary key' => array('twitter_id')));

  return $ret;
}

/**
 * Add NOT NULL constraint and DEFAULT value to the screen_name field of the 
 * twitter and twitter_user tables per updated schema definition.
 *
 * See http://drupal.org/node/336048 and http://drupal.org/node/430442
 */
function twitter_update_6004() {
  $ret = array();
  // Have to drop PRIMARY KEY and indexes that use the field being changed.
  // twitter
  db_drop_index($ret, 'twitter', 'screen_name');
  db_change_field($ret, 'twitter', 'screen_name', 'screen_name', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''), array('indexes' => array('screen_name' => array('screen_name'))));

  // twitter_user
  db_drop_index($ret, 'twitter_user', 'screen_name');
  db_drop_primary_key($ret, 'twitter_user');
  db_change_field($ret, 'twitter_user', 'screen_name', 'screen_name', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''), array('primary key' => array('uid', 'screen_name'), 'indexes' => array('screen_name' => array('screen_name'))));
  return $ret;
}


/**
 * Dear PHP, I hate you so bad. Love, Jeff.
 *
 * Workaround for drupal_write_record(), which treats a DB bigint as a signed 32
 * bit int on 32 bit PHP builds. We can STORE bigints, and PHP automatically
 * converts them to floats in memory while we work with them, but db_placeholders()
 * always treats them as %d and casts them back to dumb signed ints.
 *
 * See http://drupal.org/node/333788 for more info.
 *
 * Instead we'll set the column type to 'string' which is a little like jumping
 * off the Sears Tower because the elevator's broken. But that's life.
 */
function twitter_update_6005() {
  $ret = array();

  // First clear out any borked statuses.
  $ret[] = update_sql("DELETE FROM {twitter} WHERE twitter_id = 2147483647");

  db_drop_primary_key($ret, 'twitter');
  
  db_change_field($ret, 'twitter', 'twitter_id', 'twitter_id',
    array('description' => t("Unique identifier for each {twitter} post."),
          'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
    array('primary key' => array('twitter_id')));
  
  return $ret;
}

/**
 * Dear PHP, I'm sorry baby. I know I said a lotta things last night, but I was
 * angry. I didn't mean it, you know that. I'll use numbers from now on -- no!
 * No, I'll use *decimals*. You'll like that, won't you, PHP? We're cool, right?
 *
 * Yeah. Yeah, we're cool.
 *
 * Also, while we're at it we'll add support for some of the additional Twitter
 * API data for replies, and convert the twitter_uid field to a numeric type, too.
 */
function twitter_update_6006() {
  $ret = array();

  db_drop_primary_key($ret, 'twitter');
  
  db_change_field($ret, 'twitter', 'twitter_id', 'twitter_id',
    array(
      'description' => t("Unique identifier for each {twitter} post."),
      'type' => 'numeric',
      'unsigned' => TRUE,
      'precision' => 20,
      'scale' => 0,
      'not null' => TRUE,
      'default' => 0
    ),
    array('primary key' => array('twitter_id'))
  );
  
  db_add_field($ret, 'twitter', 'in_reply_to_status_id',
    array(
      'description' => t("Unique identifier of a status this {twitter} post was replying to."),
      'type' => 'numeric',
      'precision' => 20,
      'scale' => 0,
      'unsigned' => TRUE,
      'not null' => FALSE,
    )
  );

  db_add_field($ret, 'twitter', 'in_reply_to_user_id',
    array(
      'description' => t("Unique identifier for the {twitter_account} this post was replying to."),
      'type' => 'numeric',
      'precision' => 20,
      'scale' => 0,
      'unsigned' => TRUE,
      'not null' => FALSE,
    )
  );

  db_add_field($ret, 'twitter', 'in_reply_to_screen_name',
    array(
      'description' => t("Screen name of the {twitter} user this post was replying to."),
      'type' => 'varchar',
      'length' => 255,
      'not null' => FALSE,
    )
  );

  db_add_field($ret, 'twitter', 'truncated',
    array(
      'description' => t("Boolean flag indicating whether the {twitter} status was cut off to fit in the 140 character limit."),
      'type' => 'int',
      'unsigned' => TRUE,
      'not null' => TRUE,
      'default' => 0,
    )
  );
  
  db_drop_primary_key($ret, 'twitter_account');

  db_change_field($ret, 'twitter_account', 'twitter_uid', 'twitter_uid',
    array(
      'description' => t("The unique identifier of the {twitter_account}."),
      'type' => 'numeric',
      'unsigned' => TRUE,
      'precision' => 20,
      'scale' => 0,
      'not null' => TRUE,
      'default' => 0
    ),
    array('primary key' => array('twitter_uid'))
  );

       
  return $ret;
}

/*
 * Update the last_refresh column to supply a default value. http://drupal.org/node/301317
 */
function twitter_update_6007() {
  $ret = array();
  db_change_field($ret, 'twitter_account', 'last_refresh', 'last_refresh',
    array(
      'description' => t("A UNIX timestamp marking the date Twitter statuses were last fetched on."),
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
    )
  );
  return $ret;
}

/**
 * Update from 2.x to 3.x 
 */
function twitter_update_6300() {
  $ret = array();

  // add additional fields to {twitter_account}
  db_add_field($ret, 'twitter_account', 'uid',
               array(
                 'description' => t("The {users}.uid of the owner of this account"),
                 'type' => 'int',
                 'unsigned' => TRUE,
                 'size' => 'big',
                 'not null' => TRUE,
               ));

  db_add_field($ret, 'twitter_account', 'host',
               array(
                 'description' => t('The host for this account can be a laconi.ca instance'),
                 'type' => 'varchar',
                 'length' => 255,
               ));

  db_add_field($ret, 'twitter_account', 'password',
               array(
                 'description' => t("The password for the Twitter account."),
                 'type' => 'varchar',
                 'length' => 64
               ));

  db_add_field($ret, 'twitter_account', 'oauth_token',
               array(
                 'description' => t('The token_key for oauth-based access.'),
                 'type' => 'varchar',
                 'length' => 64,
               ));
  db_add_field($ret, 'twitter_account', 'oauth_token_secret',
               array(
                 'description' => t('The token_secret for oauth-based access.'),
                 'type' => 'varchar',
                 'length' => 64,
               ));
  db_add_field($ret, 'twitter_account', 'friends_count',
               array(
                 'description' => t("The number of users this {twitter_account} is following."),
                 'type' => 'int',
                 'not null' => TRUE,
                 'default' => 0
               ));
  db_add_field($ret, 'twitter_account', 'statuses_count',
               array(
                 'description' => t("The total number of status updates performed by a user, excluding direct messages sent."),
                 'type' => 'int',
                 'not null' => TRUE,
                 'default' => 0
               ));
  db_add_field($ret, 'twitter_account', 'favourites_count',
               array(
                 'description' => t("The  number of statuses a user has marked as favorite."),
                 'type' => 'int',
                 'not null' => TRUE,
                 'default' => 0
               ));
  db_add_field($ret, 'twitter_account', 'profile_background_color',
               array(
                 'description' => t("hex RGB value for a user's background color"),
                 'type' => 'varchar',
                 'length' => 6,
                 'not null' => TRUE,
                 'default' => '',
               ));
  db_add_field($ret, 'twitter_account', 'profile_text_color',
               array(
                 'description' => t("hex RGB value for a user's text color"),
                 'type' => 'varchar',
                 'length' => 6,
                 'not null' => TRUE,
                 'default' => '',
               ));
  db_add_field($ret, 'twitter_account', 'profile_link_color',
               array(
                 'description' => t("hex RGB value for a user's link color"),
                 'type' => 'varchar',
                 'length' => 6,
                 'not null' => TRUE,
                 'default' => '',
               ));
  db_add_field($ret, 'twitter_account', 'profile_sidebar_fill_color',
               array(
                 'description' => t("hex RGB value for a user's sidebar color"),
                 'type' => 'varchar',
                 'length' => 6,
                 'not null' => TRUE,
                 'default' => '',
               ));
  db_add_field($ret, 'twitter_account', 'profile_sidebar_border_color',
               array(
                 'description' => t("hex RGB value for a user's border color"),
                 'type' => 'varchar',
                 'length' => 6,
                 'not null' => TRUE,
                 'default' => '',
               ));
  db_add_field($ret, 'twitter_account', 'profile_background_image_url',
               array(
                 'description' => t("The url of the {twitter_account}'s profile image."),
                 'type' => 'varchar',
                 'length' => 255
               ));
  db_add_field($ret, 'twitter_account', 'profile_background_tile',
               array(
                 'description' => t("Boolean indicating if a user's background is tiled."),
                 'type' => 'int',
                 'unsigned' => TRUE,
                 'not null' => TRUE,
                 'default' => 1
               ));
  db_add_field($ret, 'twitter_account', 'verified',
               array(
                 'description' => t("Indicates if a user is verified."),
                 'type' => 'int',
                 'unsigned' => TRUE,
                 'not null' => TRUE,
                 'default' => 1
               ));
  db_add_field($ret, 'twitter_account', 'created_at',
               array(
                 'description' => t("Date and time the {twitter_account} was created."),
                 'type' => 'varchar',
                 'length' => 64,
                 'not null' => TRUE,
                 'default' => ''
               ));
  db_add_field($ret, 'twitter_account', 'created_time',
               array(
                 'description' => t("A duplicate of {twitter_account}.created_at in UNIX timestamp format."),
                 'type' => 'int',
                 'not null' => TRUE
               ));
  db_add_field($ret, 'twitter_account', 'utc_offset',
               array(
                 'description' => t("A duplicate of {twitter_account}.created_at in UNIX timestamp format."),
                 'type' => 'int',
                 'not null' => TRUE
               ));
  db_add_field($ret, 'twitter_account', 'import',
               array(
                 'description' => t("Boolean flag indicating whether the {twitter_user}'s posts should be pulled in by the site."),
                 'type' => 'int',
                 'unsigned' => TRUE,
                 'not null' => TRUE,
                 'default' => 1
               ));
  db_add_field($ret, 'twitter_account', 'is_global',
               array(
                 'description' => t("Boolean flag indicating if this account is available for global use"),
                 'type' => 'int',
                 'unsigned' => TRUE,
                 'not null' => TRUE,
                 'default' => 0
               ));


  if (db_table_exists('twitter_user')) {
    $result = db_query("SELECT * FROM {twitter_user} ORDER BY uid DESC");
    while ($row = db_fetch_array($result)) {
      db_query("UPDATE {twitter_account} SET uid=%d, password='%s', import=%d WHERE screen_name='%s'",
               $row['uid'], $row['password'], $row['import'], $row['screen_name']);
    }

    db_drop_table($ret, 'twitter_user');
  }

  drupal_install_modules(array('twitter_post'));

  return $ret;
}

function twitter_update_6301() {
  $ret = array();

  // add additional fields to {twitter_account}
  db_add_field($ret, 'twitter_account', 'include_retweets',
               array(
                 'description' => t("Boolean flag indicating whether the {twitter_user}'s retweets should be pulled in by the site. Currently does not support native retweets."),
                 'type' => 'int',
                 'unsigned' => TRUE,
                 'not null' => TRUE,
                 'default' => 0
               ));

   return $ret;
}

/**
 * Update new default_state variable to preserve existing settings.
 */
function twitter_update_6302() {
  $ret = array();
  $default_seting = variable_get('twitter_default_state', NULL);
  if ($default_setting === NULL) {
    variable_set('twitter_post_default_state', 'create');
  }
  return $ret;
}

/**
 * Remove passwords no longer stored/used.
 */
function twitter_update_6303() {
  $ret = array();
  db_drop_field($ret, 'twitter_account', 'password');
  return $ret;
}

/**
 * Removes include_retweets field.
 */
function twitter_update_6500() {
  $ret = array();
  if (db_column_exists('twitter_account', 'include_retweets')) {
    db_drop_field($ret, 'twitter_account', 'include_retweets');
  }
  return $ret;
}

/**
 * Adds field mentions to twitter_account table.
 */
function twitter_update_6501() {
  $ret = array();
  $data = array(
    'description' => "Boolean flag indicating whether the {twitter_user}'s mentions should be pulled in by the site.",
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0,
  );
  db_add_field($ret, 'twitter_account', 'mentions', $data);
  return $ret;
}

/**
 * Drops field uid at twitter_account.
 *
 * This update has been set empty afterwards as the field is actually needed.
 */
function twitter_update_6502() {}

/**
 * Makes the import field not enabled by default at twitter_account table.
 */
function twitter_update_6503() {
  $ret = array();
  $spec = array(
    'description' => "Boolean flag indicating whether the {twitter_user}'s posts should be pulled in by the site.",
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0,
  );

  db_change_field($ret, 'twitter_account', 'import', 'import', $spec);
  return $ret;
}

/**
 * Adds field added_by_uid to twitter_account table.
 *
 * This update has been set empty afterwards as the existing field twitter_account.uid is used.
 */
function twitter_update_6504() {}

/**
 * Renames twitter_account.added_by_uid to twitter_account.uid.
 *
 * This reverts updates 6502 and 6504.
 */
function twitter_update_6505() {
  $ret = array();
  $spec = array(
   'description' => "The uid of the user who added this Twitter account",
   'type' => 'int',
   'unsigned' => TRUE,
   'not null' => TRUE,
   'default' => 0,
  );

  db_change_field($ret, 'twitter_account', 'added_by_uid', 'uid', $spec);
  return $ret;
}
