You are here

newsletter_subscriber.module in Newsletter 7.2

Module for the Newsletter Subscriber Entity

File

modules/subscriber/newsletter_subscriber.module
View source
<?php

/**
 * @file
 * Module for the Newsletter Subscriber Entity
 */

/**
 * Implements hook_menu().
 */
function newsletter_subscriber_menu() {
  $items = array();
  $items['newsletter/subscribe'] = array(
    'title' => 'Subscribe',
    'description' => 'Subscribe to our newsletters.',
    'access arguments' => array(
      'subscribe newsletters',
    ),
    'page callback' => 'newsletter_subscriber_manage_subscriptions',
    'file' => 'includes/newsletter_subscriber.pages.inc',
  );
  $items['newsletter/confirm/%newsletter_subscriber_by_hash'] = array(
    'title' => 'Confirm subscription',
    'description' => 'Confirm your subscription to our newsletters.',
    'access arguments' => array(
      'subscribe newsletters',
    ),
    'type' => MENU_CALLBACK,
    'page callback' => 'newsletter_confirm',
    'page arguments' => array(
      2,
    ),
    'file' => 'includes/newsletter_subscriber.pages.inc',
  );
  $items['newsletter/unsubscribe/%newsletter_subscriber_by_hash'] = array(
    'title' => 'Unsubscribe',
    'description' => 'Confirm that you want to unsubscribe from our newsletters.',
    'access arguments' => array(
      'subscribe newsletters',
    ),
    'type' => MENU_CALLBACK,
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'newsletter_subscriber_unsubscribe',
      2,
    ),
    'file' => 'includes/newsletter_subscriber.pages.inc',
  );
  $items['newsletter/edit/%newsletter_subscriber_by_hash'] = array(
    'title' => 'Edit newsletter subscriptions',
    'page callback' => 'newsletter_subscriber_manage_subscriptions',
    'page arguments' => array(
      2,
    ),
    'access arguments' => array(
      'subscribe newsletters',
    ),
    'type' => MENU_CALLBACK,
    'file' => 'includes/newsletter_subscriber.pages.inc',
  );
  $items['user/%newsletter_subscriber_by_uid_or_new/newsletter'] = array(
    'title' => 'Newsletter subscriptions',
    'page callback' => 'newsletter_subscriber_manage_subscriptions',
    'page arguments' => array(
      1,
    ),
    'access callback' => 'newsletter_subscriber_access',
    'access arguments' => array(
      'edit',
      1,
    ),
    'type' => MENU_LOCAL_TASK,
    'file' => 'includes/newsletter_subscriber.pages.inc',
  );
  return $items;
}

/**
 * Implements hook_entity_info().
 */
function newsletter_subscriber_entity_info() {
  $entities['newsletter_subscriber'] = array(
    'label' => t('Newsletter subscriber'),
    'entity class' => 'NewsletterSubscriber',
    'controller class' => 'NewsletterSubscriberController',
    'base table' => 'newsletter_subscriber',
    'fieldable' => TRUE,
    'entity keys' => array(
      'id' => 'subscriber_id',
      'bundle' => 'type',
    ),
    // Bundles are defined by the subscriber types below.
    'bundles' => array(),
    'bundle keys' => array(
      'bundle' => 'type',
    ),
    'label callback' => 'entity_class_label',
    'uri callback' => 'entity_class_uri',
    'creation callback' => 'newsletter_subscriber_create',
    'access callback' => 'newsletter_subscriber_access',
    'module' => 'newsletter_subscriber',
    // The information below is used by the NewsletterSubscriberUIController.
    'admin ui' => array(
      'path' => 'admin/config/media/newsletter/subscribers',
      'file' => 'includes/newsletter_subscriber.admin.inc',
      'controller class' => 'NewsletterSubscriberUIController',
      'menu wildcard' => '%newsletter_subscriber',
    ),
  );

  // Add bundle info but bypass entity_load() as we cannot use it here.
  $types = db_select('newsletter_subscriber_type', 'ns')
    ->fields('ns')
    ->execute()
    ->fetchAllAssoc('type');
  foreach ($types as $type => $info) {
    $entities['newsletter_subscriber']['bundles'][$type] = array(
      'label' => $info->name,
      'admin' => array(
        'path' => 'admin/structure/newsletter-subscriber-types/manage/%newsletter_subscriber_type',
        'real path' => 'admin/structure/newsletter-subscriber-types/manage/' . $type,
        'bundle argument' => 4,
        'access arguments' => array(
          'administer newsletter subscriber types',
        ),
      ),
    );
  }

  // The entity that holds information about the entity types.
  $entities['newsletter_subscriber_type'] = array(
    'label' => t('Newsletter subscriber type'),
    'entity class' => 'NewsletterSubscriberType',
    'controller class' => 'NewsletterSubscriberTypeController',
    'base table' => 'newsletter_subscriber_type',
    'fieldable' => FALSE,
    'bundle of' => 'newsletter_subscriber',
    'exportable' => TRUE,
    'entity keys' => array(
      'id' => 'id',
      'name' => 'type',
      'label' => 'name',
    ),
    'access callback' => 'newsletter_subscriber_type_access',
    'module' => 'newsletter_subscriber',
    // Enable the entity API's admin UI.
    'admin ui' => array(
      'path' => 'admin/structure/newsletter-subscriber-types',
      'file' => 'includes/newsletter_subscriber.admin.inc',
      'controller class' => 'NewsletterSubscriberTypeUIController',
    ),
  );
  return $entities;
}

/**
 * Implements hook_entity_property_info_alter().
 */
function newsletter_entity_property_info_alter(&$info) {

  // Turn subscriber status into boolean for better views integration.
  $info['newsletter_subscriber']['properties']['status']['type'] = 'boolean';
}

/**
 * Implements hook_permission().
 */
function newsletter_subscriber_permission() {

  // We set up permisssions to manage entity types, manage all entities and the
  // permissions for each individual entity.
  $permissions = array(
    'administer newsletter subscriber types' => array(
      'title' => t('Administer newsletter subscribers types'),
      'description' => t('Create and delete fields for newsletter subscriber types, and set their permissions.'),
    ),
    'administer newsletter subscribers' => array(
      'title' => t('Administer newsletter subscribers'),
      'description' => t('Edit and delete all newsletter subscribers'),
    ),
    'subscribe newsletters' => array(
      'title' => t('Subscribe newsletters'),
      'description' => t('Can subscribe to various newsletter lists.'),
    ),
  );

  // Generate permissions per subscriber type.
  foreach (newsletter_subscriber_get_types() as $type) {
    $type_name = check_plain($type->type);
    $permissions += array(
      "edit any {$type_name} subscriber" => array(
        'title' => t('%type_name: Edit any newsletter subscriber', array(
          '%type_name' => $type->name,
        )),
      ),
      "view any {$type_name} subscriber" => array(
        'title' => t('%type_name: View any newsletter subscriber', array(
          '%type_name' => $type->name,
        )),
      ),
    );
  }
  return $permissions;
}

/**
 * Implements hook_variable_info().
 */
function newsletter_subscriber_variable_info($options) {
  $variable['newsletter_subscriber_block_prefix'] = array(
    'title' => t('Newsletter subscribe block prefix'),
    'description' => t('This text will appear above the email address in the subscribe block.'),
    'type' => 'string',
    'access' => 'administer newsletter subscribers',
  );
  $variable['newsletter_subscriber_block_suffix'] = array(
    'title' => t('Newsletter subscribe block suffix'),
    'description' => t('This text will appear below the email address in the subscribe block.'),
    'type' => 'string',
    'access' => 'administer newsletter subscribers',
  );
  return $variable;
}

/**
 * Implements hook_block_info().
 */
function newsletter_subscriber_block_info() {
  $blocks['newsletter_subscriber_subscribe'] = array(
    'info' => t('Newsletter: Subscribe'),
  );
  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function newsletter_subscriber_block_view($delta = '') {
  switch ($delta) {
    case 'newsletter_subscriber_subscribe':
      if (user_access('subscribe newsletters') && (!newsletter_subscriber_is_subscribed() || variable_get('newsletter_subscriber_block_always_show', FALSE))) {
        $block['subject'] = t('Subscribe to our Newsletters');
        $block['content'][] = array(
          '#prefix' => '<div class="prefix">',
          '#markup' => check_plain(variable_get('newsletter_subscriber_block_prefix')),
          '#suffix' => '</div>',
        );
        $block['content'][] = drupal_get_form('newsletter_subscriber_subscribe_form');
        $block['content'][] = array(
          '#prefix' => '<div class="suffix">',
          '#markup' => check_plain(variable_get('newsletter_subscriber_block_suffix')),
          '#suffix' => '</div>',
        );
      }
      else {
        $block = array();
      }
      break;
  }
  return $block;
}

/**
 * Implements hook_block_configure().
 */
function newsletter_subscriber_block_configure($delta = '') {
  $form = array();
  if ($delta == 'newsletter_subscriber_subscribe') {
    $form['settings'] = array(
      '#type' => 'fieldset',
      '#collapsible' => TRUE,
      '#title' => t('Layout settings'),
    );
    $form['settings']['newsletter_subscriber_block_prefix'] = array(
      '#type' => 'textarea',
      '#title' => t('Text before email address'),
      '#description' => t('This text will appear above the email address in the subscribe block.'),
      '#default_value' => variable_get('newsletter_block_prefix'),
    );
    $form['settings']['newsletter_subscriber_block_suffix'] = array(
      '#type' => 'textarea',
      '#title' => t('Text after email address'),
      '#description' => t('This text will appear below the email address in the subscribe block.'),
      '#default_value' => variable_get('newsletter_block_suffix'),
    );
    $form['settings']['newsletter_subscriber_block_always_show_mail'] = array(
      '#type' => 'checkbox',
      '#title' => t('Always show e-mail in the subscribe form block.'),
      '#default_value' => variable_get('newsletter_show_email_in_block', FALSE),
    );
    $form['settings']['newsletter_subscriber_block_always_show'] = array(
      '#type' => 'checkbox',
      '#title' => t('Always show subscribe block,even if user is subscribed.'),
      '#default_value' => variable_get('newsletter_always_show_subscribe_block', FALSE),
    );
  }
  return $form;
}

/**
 * Implements hook_block_save().
 */
function newsletter_subscriber_block_save($delta = '', $edit = array()) {
  if ($delta == 'newsletter_subscriber_subscribe') {

    // Save the configuration to the database.
    foreach ($edit as $key => $value) {
      if (strpos($key, 'newsletter_subscriber_') === 0) {
        variable_set($key, $value);
      }
    }
  }
  return;
}

/**
 * Implements hook_user_insert().
 */
function newsletter_subscriber_user_insert(&$edit, $account, $category) {
  if ($lists = variable_get('newsletter_subscriber_subscribe_new_users', array())) {
    $subscriber = newsletter_subscriber_create(array(
      'email' => $account->mail,
      'uid' => $account->uid,
    ));
    $subscriber_wrapper = entity_metadata_wrapper('newsletter_subscriber', $subscriber);
    foreach ($lists as $list) {
      $subscriber_wrapper->field_newsletter_list[]->target_id = $list;
    }
    newsletter_subscriber_save($subscriber);
  }
}

/**
 * Determines whether the given user has access to a newsletter subscriber.
 *
 * @param $op
 *   The operation being performed. One of 'view', 'update', 'create', 'delete'
 *   or just 'edit' (being the same as 'create' or 'update').
 * @param $subscriber
 *   Optionally a subscriber or a subscriber type to check access for.
 *   If nothing is given, access for all subscribers is determined.
 * @param $account
 *   The user to check for. Leave it to NULL to check for the global user.
 *
 * @return boolean
 *   Whether access is allowed or not.
 */
function newsletter_subscriber_access($op, $subscriber = NULL, $account = NULL) {
  if (user_access('administer newsletter subscribers', $account)) {
    return TRUE;
  }
  if (isset($subscriber) && ($type_name = $subscriber->type)) {
    $op = $op == 'view' ? 'view' : 'edit';
    if (user_access("{$op} any {$type_name} newsletter subscriber", $account)) {
      return TRUE;
    }
    elseif ($subscriber->uid == $GLOBALS['user']->uid && user_access('subscribe newsletters')) {
      return TRUE;
    }
  }
  return FALSE;
}

/**
 * Access callback for the entity API.
 */
function newsletter_subscriber_type_access($op, $type = NULL, $account = NULL) {
  return user_access('administer newsletter subscriber types', $account);
}

/**
 * Gets an array of all newsletter subscriber types, keyed by the type name.
 *
 * @param $type_name
 *   If set, the type with the given name is returned.
 * @return NeswletterSubscriberType[]
 *   Depending whether $type isset, an array of newsletter subscriber types
 *   or a single one.
 */
function newsletter_subscriber_get_types($type_name = NULL) {
  $types = entity_load_multiple_by_name('newsletter_subscriber_type', isset($type_name) ? array(
    $type_name,
  ) : FALSE);
  return isset($type_name) ? reset($types) : $types;
}

/**
 * Menu argument loader; Load a subscriber type by string.
 *
 * @param $type
 *   The machine-readable name of a subscriber type to load.
 *
 * @return
 *   A subscriber type array or FALSE if $type does not exist.
 */
function newsletter_subscriber_type_load($type) {
  return newsletter_subscriber_get_types($type);
}

/**
 * Fetch a subscriber object.
 *
 * @param $subscriber_id
 *   Integer specifying the subscriber id.
 * @param $reset
 *   A boolean indicating that the internal cache should be reset.
 *
 * @return
 *   A fully-loaded $subscriber object or FALSE if it cannot be loaded.
 *
 * @see newsletter_subscriber_load_multiple()
 */
function newsletter_subscriber_load($subscriber_id, $reset = FALSE) {
  if (empty($subscriber_id)) {
    return array();
  }
  $subscribers = newsletter_subscriber_load_multiple(array(
    $subscriber_id,
  ), array(), $reset);
  return reset($subscribers);
}

/**
 * Load multiple subscribers by IDs.
 *
 * @param $subscriber_ids
 *   An array of subscriber IDs.
 * @param $reset
 *   A boolean indicating that the internal cache should be reset.
 *
 * @return
 *   An array of subscriber objects, indexed by subscriber_id.
 *
 * @see entity_load()
 * @see newsletter_subscriber_load()
 */
function newsletter_subscriber_load_multiple($subscriber_ids = array(), $reset = FALSE) {
  return entity_load('newsletter_subscriber', $subscriber_ids, array(), $reset);
}

/**
 * Loads up the requested subscriber by hash.
 */
function newsletter_subscriber_by_hash_load($hash) {
  return newsletter_subscriber_by_property('hash', $hash);
}

/**
 * Loads up the requested subscriber by uid. If none is found creates a new one.
 */
function newsletter_subscriber_by_uid_or_new_load($uid) {
  $user = user_load($uid);
  $subscriber = newsletter_subscriber_by_property('uid', $uid);
  return $subscriber ? $subscriber : newsletter_subscriber_create(array(
    'uid' => $uid,
    'mail' => $user->mail,
  ));
}

/**
 * Loads up a requested subscriber object by a property.
 *
 * @param $property
 *   The newsletter subscriber property to search against.
 * @param $value
 *   The searched value of propery.
 *
 * @return
 *   Fully loaded subscriber object.
 */
function newsletter_subscriber_by_property($property, $value) {
  $query = new EntityFieldQuery();
  $entities = $query
    ->entityCondition('entity_type', 'newsletter_subscriber')
    ->propertyCondition($property, $value)
    ->execute();
  $keys = isset($entities['newsletter_subscriber']) ? array_keys($entities['newsletter_subscriber']) : array();

  // Since we always expect to have one subscriber:
  return newsletter_subscriber_load(array_pop($keys));
}

/**
 * Get the subscribers of a newsletter list.
 *
 * @param $nlid
 *   The id of the newsletter list.
 * @param $filter
 *   (boolean) Whether to filter out unconfirmed subscribers.
 *
 * @return
 *   Array containg the subscriber full objects. Otherwise an empty array.
 */
function newsletter_subscriber_by_list($nlid, $filter = TRUE) {
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'newsletter_subscriber')
    ->fieldCondition('field_newsletter_list', 'target_id', $nlid);
  if ($filter) {
    $query
      ->propertyCondition('confirmed', 1);
  }
  $entities = $query
    ->execute();
  return isset($entities['newsletter_subscriber']) ? newsletter_subscriber_load_multiple(array_keys($entities['newsletter_subscriber'])) : array();
}

/**
 * Deletes a subscriber.
 */
function newsletter_subscriber_delete(NewsletterSubscriber $subscriber) {
  $subscriber
    ->delete();
}

/**
 * Delete multiple subscribers.
 *
 * @param $subscriber_ids
 *   An array of newsletter subscriber IDs.
 */
function newsletter_subscriber_delete_multiple(array $subscriber_ids) {
  entity_get_controller('newsletter_subscriber')
    ->delete($subscriber_ids);
}

/**
 * Create a subscriber object.
 */
function newsletter_subscriber_create($values = array()) {
  return entity_get_controller('newsletter_subscriber')
    ->create($values);
}

/**
 * Saves a subscriber to the database.
 *
 * @param $subscriber
 *   The subscriber object.
 */
function newsletter_subscriber_save(NewsletterSubscriber $subscriber) {
  return $subscriber
    ->save();
}

/**
 * Create a subscriber type object.
 */
function newsletter_subscriber_type_create($values = array()) {
  return entity_get_controller('newsletter_subscriber_type')
    ->create($values);
}

/**
 * Saves a subscriber type to the db.
 */
function newsletter_subscriber_type_save(NewsletterSubscriberType $type) {
  $type
    ->save();
}

/**
 * Deletes a subscriber type from the db.
 */
function newsletter_subscriber_type_delete(NewsletterSubscriberType $type) {
  $type
    ->delete();
}

/**
 * Implements hook_views_api().
 */
function newsletter_subscriber_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'newsletter_subscriber') . '/includes/views',
  );
}

/**
 * Implements hook_colorbox_form_access().
 */
function newsletter_subscriber_colorbox_form_access($form_id) {
  $form = explode('?', $form_id);
  if ($form[0] == 'newsletter_subscriber_manage_subscriptions_form') {
    module_load_include('inc', 'newsletter_subscriber', 'includes/newsletter_subscriber.pages');
    return user_access('subscribe newsletters');
  }
  return FALSE;
}

/**
 * Checks whether an email is registered to newsletter list or not.
 *
 * @return
 *   boolean TRUE or FALSE.
 */
function newsletter_subscriber_is_subscribed($mail = NULL) {
  if (!isset($mail)) {
    global $user;
    $mail = isset($user->mail) ? $user->mail : FALSE;
  }
  if ($mail) {
    $is_subscribed = db_query('SELECT mail FROM {newsletter_subscriber} WHERE mail = :mail', array(
      ':mail' => $mail,
    ))
      ->fetchField();
    return (bool) $is_subscribed;
  }
  return FALSE;
}

/**
 * Implements hook_form_FORM_ID_alter() for newsletter_configure_form.
 */
function newsletter_subscriber_form_newsletter_configure_form_alter(&$form, &$form_state) {
  $lists = db_query('SELECT list_id, title FROM {newsletter_list}')
    ->fetchAllKeyed();
  $form['settings']['newsletter_subscriber_subscribe_new_users'] = array(
    '#type' => 'select',
    '#title' => t('Automatically subscribe newly registered user to the selected lists:'),
    '#options' => array_map('check_plain', $lists),
    '#multiple' => TRUE,
    '#description' => t('Leave empty to bypass this feature'),
    '#default_value' => variable_get('newsletter_subscriber_subscribe_new_users', array()),
  );
  $form['settings']['newsletter_subscriber_show_email'] = array(
    '#type' => 'checkbox',
    '#title' => t('Always show e-mail in the subscribe form.'),
    '#default_value' => variable_get('newsletter_subscriber_show_email', TRUE),
  );
}

/**
 * Form constructor for the subscribe block form.
 *
 * @see newsletter_subscriber_subscribe_form_validate()
 * @see newsletter_subscribe_form_submit()
 * @ingroup forms
 */
function newsletter_subscriber_subscribe_form($form, &$form_state) {
  global $user;
  if (!isset($user->mail) || variable_get('newsletter_subscriber_block_always_show_mail', FALSE)) {
    $form['mail'] = array(
      '#type' => 'textfield',
      '#default_value' => t('user@example.com'),
      '#size' => 20,
      '#required' => TRUE,
    );
  }
  else {
    $form['logged-in'] = array(
      '#type' => 'hidden',
      '#value' => TRUE,
    );
  }

  //form_load_include($form_state, 'inc', 'newsletter_subscriber', 'includes/newsletter_subscriber.pages');
  $form['#attached']['js'][] = drupal_get_path('module', 'newsletter_subscriber') . '/js/newsletter_subscriber.js';
  $form['actions'] = array(
    '#type' => 'container',
    '#attributes' => array(
      'class' => array(
        'form-actions',
      ),
    ),
    '#weight' => 400,
  );
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Subscribe'),
  );
  return $form;
}

/**
 * Form validation handler for newsletter_subscriber_subscribe_form().
 *
 * @see newsletter_subscriber_subscribe_form_submit()
 */
function newsletter_subscriber_subscribe_form_validate($form, &$form_state) {
  if (isset($form_state['values']['logged-in'])) {
    global $user;
    $mail = $user->mail;
  }
  else {
    $mail = $form_state['values']['mail'] != t('user@example.com') ? $form_state['values']['mail'] : '';
  }
  if (!valid_email_address($mail) || newsletter_subscriber_is_subscribed($mail)) {
    form_set_error('mail', t("This e-mail doesn't exist or you have already subscribed"));
  }
}

/**
 * Form submission handler for newsletter_subscriber_subscribe_form().
 *
 * @see newsletter_subscriber_subscribe_form_validate()
 */
function newsletter_subscriber_subscribe_form_submit($form, &$form_state) {
  $form_state['redirect'] = array(
    'newsletter/subscribe',
    array(
      'query' => array(
        'mail' => $form_state['values']['mail'],
      ) + drupal_get_destination(),
    ),
  );
}

/**
 * Form callback wrapper: additional operations on a subscriber.
 *
 * @param $subscriber
 *   The subscriber object being edited by this form.
 *
 * @param $op
 *   The operation performed.
 */
function newsletter_subscriber_operation_form($form, &$form_state, $type, $subscriber, $op) {
  form_load_include($form_state, 'inc', 'newsletter_subscriber', 'includes/newsletter_subscriber.admin');
  return drupal_get_form("newsletter_subscriber_{$op}_form", $subscriber);
}

/**
 * The class used for newsletter subscriber entities.
 */
class NewsletterSubscriber extends Entity {
  public function __construct($values = array()) {
    parent::__construct($values, 'newsletter_subscriber');
  }
  protected function defaultLabel() {
    return $this->mail;
  }

}

/**
 * The class used for newsletter subscriber type entities.
 */
class NewsletterSubscriberType extends Entity {
  public $type;
  public $label;
  public function __construct($values = array()) {
    parent::__construct($values, 'newsletter_subscriber_type');
  }

}

Functions

Namesort descending Description
newsletter_entity_property_info_alter Implements hook_entity_property_info_alter().
newsletter_subscriber_access Determines whether the given user has access to a newsletter subscriber.
newsletter_subscriber_block_configure Implements hook_block_configure().
newsletter_subscriber_block_info Implements hook_block_info().
newsletter_subscriber_block_save Implements hook_block_save().
newsletter_subscriber_block_view Implements hook_block_view().
newsletter_subscriber_by_hash_load Loads up the requested subscriber by hash.
newsletter_subscriber_by_list Get the subscribers of a newsletter list.
newsletter_subscriber_by_property Loads up a requested subscriber object by a property.
newsletter_subscriber_by_uid_or_new_load Loads up the requested subscriber by uid. If none is found creates a new one.
newsletter_subscriber_colorbox_form_access Implements hook_colorbox_form_access().
newsletter_subscriber_create Create a subscriber object.
newsletter_subscriber_delete Deletes a subscriber.
newsletter_subscriber_delete_multiple Delete multiple subscribers.
newsletter_subscriber_entity_info Implements hook_entity_info().
newsletter_subscriber_form_newsletter_configure_form_alter Implements hook_form_FORM_ID_alter() for newsletter_configure_form.
newsletter_subscriber_get_types Gets an array of all newsletter subscriber types, keyed by the type name.
newsletter_subscriber_is_subscribed Checks whether an email is registered to newsletter list or not.
newsletter_subscriber_load Fetch a subscriber object.
newsletter_subscriber_load_multiple Load multiple subscribers by IDs.
newsletter_subscriber_menu Implements hook_menu().
newsletter_subscriber_operation_form Form callback wrapper: additional operations on a subscriber.
newsletter_subscriber_permission Implements hook_permission().
newsletter_subscriber_save Saves a subscriber to the database.
newsletter_subscriber_subscribe_form Form constructor for the subscribe block form.
newsletter_subscriber_subscribe_form_submit Form submission handler for newsletter_subscriber_subscribe_form().
newsletter_subscriber_subscribe_form_validate Form validation handler for newsletter_subscriber_subscribe_form().
newsletter_subscriber_type_access Access callback for the entity API.
newsletter_subscriber_type_create Create a subscriber type object.
newsletter_subscriber_type_delete Deletes a subscriber type from the db.
newsletter_subscriber_type_load Menu argument loader; Load a subscriber type by string.
newsletter_subscriber_type_save Saves a subscriber type to the db.
newsletter_subscriber_user_insert Implements hook_user_insert().
newsletter_subscriber_variable_info Implements hook_variable_info().
newsletter_subscriber_views_api Implements hook_views_api().

Classes

Namesort descending Description
NewsletterSubscriber The class used for newsletter subscriber entities.
NewsletterSubscriberType The class used for newsletter subscriber type entities.