You are here

function simplenews_statistics_update_6302 in Simplenews Statistics 6.3

Upgrade to 3.x continued.

File

./simplenews_statistics.install, line 225
Simplenews statistics (un)install and updates file.

Code

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

  // Change the name from clicks tot total_clicks.
  $spec = array(
    'description' => 'Total clicks for this newsletter',
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0,
  );
  db_change_field($ret, 'simplenews_statistics', 'clicks', 'total_clicks', $spec);

  // Change the name from opens tot total_opens.
  $spec = array(
    'description' => 'Total opens for this newsletter',
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0,
  );
  db_change_field($ret, 'simplenews_statistics', 'opens', 'total_opens', $spec);

  // Add a field for the unique opens based on emailaddress.
  $spec = array(
    'description' => 'Emailaddress-unique opens for this newsletter',
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0,
  );
  db_add_field($ret, 'simplenews_statistics', 'unique_opens', $spec);

  // Fill the field with data.
  $query = 'SELECT COUNT(email) AS unique_opens, nid FROM {simplenews_statistics_opens} GROUP BY nid';
  $result = db_query($query);
  while ($row = db_fetch_array($result)) {
    $query = 'UPDATE {simplenews_statistics} SET unique_opens=%d WHERE nid=%d';
    db_query($query, $row['unique_opens'], $row['nid']);
  }

  // Add a field for the unique click-throughs based on email and newsletter.
  $spec = array(
    'description' => 'Number of users who have clicked at least one link in the newsletter',
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0,
  );
  db_add_field($ret, 'simplenews_statistics', 'user_unique_click_through', $spec);

  // Fill the field with data.
  $query = 'SELECT COUNT(email) AS unique_clicks, nid FROM {simplenews_statistics_clicks} GROUP BY nid';
  $result = db_query($query);
  while ($row = db_fetch_array($result)) {
    $query = 'UPDATE {simplenews_statistics} SET user_unique_click_through=%d WHERE nid=%d';
    db_query($query, $row['unique_clicks'], $row['nid']);
  }

  // Remove opens field and insert the number of opens as individual records.
  $result = db_query('SELECT email, nid, opens, timestamp FROM {simplenews_statistics_opens} WHERE opens > 1');
  while ($row = db_fetch_array($result)) {
    for ($i = 0; $i < $row['opens']; $i++) {
      $query = 'INSERT INTO {simplenews_statistics_opens} (email, nid, timestamp) VALUES ("%s", %d, %d)';
      db_query($query, $row['email'], $row['nid'], $row['timestamp']);
    }
  }
  db_drop_field($ret, 'simplenews_statistics_opens', 'opens');
  return $ret;
}