Public feed #602002

Anonymous

public text v1 · immutable
Raw Edit
·published 2007-07-03 20:56 UTC
rendered paste body

/**
 * Implementation of hook_user().
 *
 * Checks whether an email address is subscribed to the newsletter when a new
 * user signs up. If so, changes uid from 0 to the new uid in
 * simplenews_subscriptions so that the user's subscription status is known when
 * he logs in.
 */
function simplenews_user($op, &$edit, &$account, $category = NULL) {
  switch ($op) {
    case 'insert':
      if ($edit['mail']) {
        $query = "SELECT snid FROM {simplenews_subscriptions} WHERE mail = '%s'";
        if ($result = db_fetch_object(db_query($query, $edit['mail']))) {
          db_query("UPDATE {simplenews_subscriptions} SET uid = %d WHERE snid = %d", $edit['uid'], $result->snid);
        }
      }
      break;
    case 'update':
      if ($category == 'account' && $edit['mail']) {
        $query = "SELECT snid FROM {simplenews_subscriptions} WHERE uid = %d";
        if ($result = db_fetch_object(db_query($query, $account->uid))) {
          db_query("DELETE FROM {simplenews_subscriptions} WHERE mail = '%s' AND uid = %d", $edit['mail'], 0);
          db_query("UPDATE {simplenews_subscriptions} SET mail = '%s' WHERE snid = %d", $edit['mail'], $result->snid);
        }
        else {
          $query = "SELECT snid FROM {simplenews_subscriptions} WHERE mail = '%s'";
          if ($result = db_fetch_object(db_query($query, $edit['mail']))) {
            db_query("UPDATE {simplenews_subscriptions} SET uid = %d WHERE snid = %d", $account->uid, $result->snid);
          }
        }
      }
      elseif ($category == 'newsletter' && user_access('subscribe to newsletters')) {
        foreach($edit['newsletters'] as $tid => $checked) {
          if ($checked) {
            simplenews_subscribe_user($account->mail, $tid, FALSE);
          }
          else {
            simplenews_unsubscribe_user($account->mail, $tid, FALSE);
          }
        }
      }
      break;
    case 'delete':
      db_query("UPDATE {simplenews_subscriptions} SET uid = 0 WHERE uid = %d", $account->uid);
      break;
    case 'form':
      if ($category == 'newsletter' && user_access('subscribe to newsletters')) {
        $subscription = simplenews_get_user_subscription($account->mail);
        $form = _simplenews_subscription_manager_form($subscription);
        $form['subscriptions']['#title'] =  t('Current newsletter subscriptions');
        unset($form['update'], $form['subscriptions']['mail']);
        return $form;
      }
      break;
    case 'categories':
      if (user_access('subscribe to newsletters')) {
        $output[] = array('name' => 'newsletter', 'title' => t('my newsletters'), 'weight' => 10);
      }
      return $output;
    case 'view':
      global $user;
      if ($user->uid == $account->uid || user_access('administer users')) {
        $tree = taxonomy_get_tree(_simplenews_get_vid());
        foreach ($tree as $newsletter) {
          if (db_num_rows(db_query('SELECT s.uid FROM {simplenews_subscriptions} s INNER JOIN {simplenews_snid_tid} t ON s.snid = t.snid WHERE s.uid = %d AND t.tid = %d', $account->uid, $newsletter->tid))) {
            $subscriptions[] = l($newsletter->name, 'taxonomy/term/'. $newsletter->tid);
          }
        }
        if ($subscriptions) {
          $subscriptions = implode(', ', $subscriptions);
        }
        else {
          $subscriptions = t('Currently no subscriptions');
        }


	

        $items[] = array('class' => 'item',
          'title' => t('Current subcriptions'),
          'value' => $subscriptions,
        );
        $items[] = array('class' => 'item',
          'title' => t('Manage subscriptions'),
          'value' => l(t('my newsletters'), 'user/'. $account->uid .'/edit/newsletter'),
        );
	//OMA: insert edit> my newsletters directly into My account page
	if (user_access('subscribe to newsletters')) {
        $subscription = simplenews_get_user_subscription($account->mail);
        $form = _simplenews_subscription_manager_form($subscription);
        $form['subscriptions']['#title'] =  t('Current newsletter subscriptions');
        //unset($form['update'], $form['subscriptions']['mail']);	
	$items[] = array('class' =>'item','title' =>'Current newsletter subscriptions','value' =>drupal_render($form));
	
	}
        return array(t('Newsletters') => $items);
      }
      break;
  }
}