Setting up send to a friend for non-members

Was working on some modifications for the Print module's send to a friend functionality. In this case we have a legacy database that has several years worth of site registrations. If a user isn't registered for the site yet we want to send them an additional paragraph explaining how to get the registration code for the site.

By doing a hook_form_alter() on the send as email form it's possible to extract the submit function for the form and have our own processor handle it. Here's a way to handle splitting the members and non-members up for mailing.

<?phpfunction cali_print_mail_form_submit($form_id, $form_values) {  $to_array = array();  $to_members = array();  $to_nonmembers = array();  if (!array_key_exists('cancel', $form_values)) {  if (!empty($form_values['fld_from_name'])) {    $from = '"'. $form_values['fld_from_name'] .'" <'. $form_values['fld_from_addr'] .'>';  }  else {    $from = $form_values['fld_from_addr'];  }  $to = $form_values['txt_to_addrs'];  // Split $to into members and non-members array  $to_array = explode(',', $to);  foreach ($to_array as $key => $value) {    $result = db_query('SELECT lr.uid from {legacy_registration} lr where lr.email = "%s"', trim($value));    $count = db_num_rows($result);    if ($count) {      $to_members[] = $value;    }    else {      $to_nonmembers[] = $value;    }  }  $params = array();  $params['subject'] = $form_values['fld_subject'];  $params['message'] = $form_values['txt_message'];  $params['path'] = $form_values['path'];  $params['cid'] = isset($form_values['cid']) ? $form_values['cid'] : NULL;  $params['teaser'] = $form_values['chk_teaser'];  $to_members = string(implode(', ', $to_members));  $to_nonmembers = string(implode(', ', $to_nonmembers));    //send to members frist then we can modify the message  print_mail_mail('sendpage', $message, $params);  $ret_members = drupal_mail('print_mail_sendpage', $to_members, $message['subject'], $message['body'], $from, $message['headers']);  //send to non-members  $params['message'] = "You have received a message for a for the super website." .                        "You need to go to your site registrar to get a registration key.\n\n" . $params['message'];  print_mail_mail('sendpage', $message, $params);  $ret_nonmembers = drupal_mail('print_mail_sendpage', $to_nonmembers, $message['subject'], $message['body'], $from, $message['headers']);      if ($ret_members || $ret_nonmembers) {    flood_register_event('print_mail');    watchdog('print_mail', t('%name [%from] sent %page to [%to]', array('%name' => $form_values['fld_from_name'], '%from' => $form_values['fld_from_addr'], '%page' => $form_values['path'], '%to' => $to)));    $site_name = variable_get('site_name', t('us'));    $print_mail_text_confirmation = variable_get('print_mail_text_confirmation', t('Thank you for spreading the word about !site.'));    drupal_set_message(t($print_mail_text_confirmation, array('!site' => $site_name)));    $nodepath = drupal_get_normal_path($params['path']);    db_query("UPDATE {print_mail_page_counter} SET sentcount = sentcount + %d, sent_timestamp = %d WHERE path = '%s'", count(split(',', $to)), time(), $nodepath);  }  }  return preg_replace('!^book/export/html/!', 'node/', $form_values['path']);}?>

Category: 

1 Comment