<?php

/**
 * Implementation of hook_help().
 */
function simpleinvite_help($section) {
  switch ($section) {
    case 'admin/modules#description':
      return t('A simple form where users may invite their friends.');
  }
}

function simpleinvite_menu($may_cache) {
  global $user;
  
  if ($may_cache) {
    $items[] = array(
       'path' => 'admin/settings/simpleinvite', 
       'title' => t('Simpleinvite'), 
       'callback' => 'drupal_get_form',
       'callback arguments' => array('simpleinvite_admin_settings'),
    );
  }
  else {
    $items[] = array(
      'path' => 'simpleinvite', 
      'title' => t('Invite a friend'), 
      'callback' => 'drupal_get_form',
      'callback arguments' => array('simpleinvite_form'),  
      'access' => user_access('access content') && $user->mail,
    );
  }
  return $items;
}


function simpleinvite_admin_settings() {
  $form['email']['simpleinvite_page_subject'] = array(
    '#type' => 'textfield', 
    '#title' => t('Invitation subject'), 
    '#default_value' => variable_get('simpleinvite_page_subject', simpleinvite_mail_text('simpleinvite_page_subject')), 
    '#description' => t('Customize the subject of your invitation e-mail.') .' '. t('Available variables are:') .' @name, !site_url, @site_name, @custom.');
  $form['email']['simpleinvite_page_body'] = array(
    '#type' => 'textarea', 
    '#title' => t('Invitation body'), 
    '#default_value' => variable_get('simpleinvite_page_body', simpleinvite_mail_text('simpleinvite_page_body')), 
    '#description' => t('Customize the body of your invitation e-mail.') .' '. t('Available variables are:') .' @name, !site_url, @site_name, @custom.');
  return system_settings_form($form);
}

function simpleinvite_form() {
  $form['to'] = array(
    '#type' => 'textfield', 
    '#required' => TRUE, 
    '#title' => t('To'), 
    '#description' => t('Enter the email addresses you wish to invite. If inviting multiple addresses, separate each by a comma. You may only invite 10 addresses at a time.'));
  $form['custom'] = array(
    '#type' => 'textarea', 
    '#title' => t('Message'), 
    '#description' => t('Enter any message you wish to send with the invitation.'),
    '#cols' => 60,
    '#rows' => 25);
  $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Send'));
  return $form;
}

function simpleinvite_form_validate($form_id, $form_values) {
  $to = explode(',', $form_values['to']);
  if (count($to) > 10) {
    form_set_error('to', t('A maximum of 10 addresses was exceeded. No invitations sent.'));
  }
  
  foreach ($to as $mail) {
    if (!valid_email_address($mail)) {
      form_set_error('to', t('Invalid email address: %mail. No invitations sent.', array('%mail' => $mail)));
    }
  }
}

function simpleinvite_form_submit($form_id, $form_values) {
  global $user;
  
  $variables = array('@name' => $user->name, '@site_name' => variable_get('site_name', 'drupal'), '@custom' => $form_values['custom'], '!site_url' => url('', NULL, NULL, TRUE));
  $message = simpleinvite_mail_text('simpleinvite_page_body', $variables);
  $subject = simpleinvite_mail_text('simpleinvite_page_subject', $variables);
  $from = $user->mail;
  $mails = explode(',', $form_values['to']);
  foreach ($mails as $to) {
    drupal_mail('simpleinvite_invite', $to, $subject, $message, $from);
  }
  drupal_set_message(format_plural(count($mails), 'One invitation sent.', '%count invitations sent'));
}

/**
 * Define all simpleinvite emails
 * Modelled after Drupal's user.module
 */
function simpleinvite_mail_text($messageid, $variables = array()) {
  // Check if an admin setting overrides the default string.
  if ($admin_setting = variable_get($messageid, FALSE)) {
    return strtr($admin_setting, $variables);
  }
  // No override, return with default strings.
  else {
    switch ($messageid) {
      case 'simpleinvite_page_subject':
        return t("You are invited by @name to @site_name", $variables);
      case 'simpleinvite_page_body':
        return t("@name invites you to check out the '@site_name' web site at !site_url.\n\n@name wants you to know:\n------------------\n\n@custom", $variables);    
    }
  }
}
