You are here

newsletter_subscriber.admin.inc in Newsletter 7.2

hook_menu callbacks for admin pages.

File

modules/subscriber/includes/newsletter_subscriber.admin.inc
View source
<?php

/**
 * @file
 * hook_menu callbacks for admin pages.
 */

/**
 * Form callback: create or edit a subscriber.
 *
 * @param $subscriber
 *   The subscriber object to edit or for a create form an empty subscriber object
 *     with only a subscriber type defined.
 *
 * @see newsletter_subscriber_form_validate()
 * @see newsletter_subscriber_form_submit()
 * @see newsletter_subscriber_form_submit_delete()
 * @see NewsletterSubscriberUIController::hook_menu()
 * @ingroup forms
 */
function newsletter_subscriber_form($form, &$form_state, $subscriber) {

  // Add the default field elements.
  $form['mail'] = array(
    '#type' => 'textfield',
    '#title' => t('E-mail'),
    '#default_value' => isset($subscriber->mail) ? $subscriber->mail : '',
    '#maxlength' => 255,
    '#required' => TRUE,
    '#weight' => -5,
  );

  // Simply use default language for now.
  // @todo Support multilingual newsletters.
  $form['language'] = array(
    '#type' => 'value',
    '#value' => LANGUAGE_NONE,
  );

  // Add the field related form elements.
  field_attach_form('newsletter_subscriber', $subscriber, $form, $form_state);
  $form['actions'] = array(
    '#type' => 'container',
    '#attributes' => array(
      'class' => array(
        'form-actions',
      ),
    ),
    '#weight' => 400,
  );

  // We add the form's #submit array to this button along with the actual submit
  // handler to preserve any submit handlers added by a form callback_wrapper.
  $submit = array();
  if (!empty($form['#submit'])) {
    $submit += $form['#submit'];
  }
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save subscriber'),
    '#submit' => $submit + array(
      'newsletter_subscriber_form_submit',
    ),
  );
  if (!empty($subscriber->hash)) {
    $form['actions']['delete'] = array(
      '#type' => 'submit',
      '#value' => t('Unsubscribe'),
      '#submit' => $submit + array(
        'newsletter_subscriber_form_submit_delete',
      ),
      '#weight' => 45,
    );
  }
  $form['actions']['cancel'] = array(
    '#type' => 'link',
    '#href' => 'admin/config/media/newsletter/subscribers',
    '#title' => t('Cancel'),
  );

  // We append the validate handler to #validate in case a form callback_wrapper
  // is used to add validate handlers earlier.
  $form['#validate'][] = 'newsletter_subscriber_form_validate';
  $form_state['newsletter_subscriber'] = $subscriber;
  return $form;
}

/**
 * Form validation handler for newsletter_subscriber_form().
 *
 * @see newsletter_subscriber_form_submit()
 */
function newsletter_subscriber_form_validate(&$form, &$form_state) {
  $subscriber = $form_state['newsletter_subscriber'];
  if (!valid_email_address($form_state['values']['mail'])) {
    form_set_error('mail', t('This e-mail does not exist.'));
  }

  // Notify field widgets to validate their data.
  field_attach_form_validate('newsletter_subscriber', $subscriber, $form, $form_state);
}

/**
 * Form API submit callback for the subscriber form.
 *
 * @see newsletter_subscriber_form_validate()
 * @todo remove hard-coded link
 */
function newsletter_subscriber_form_submit(&$form, &$form_state) {
  $subscriber = entity_ui_controller('newsletter_subscriber')
    ->entityFormSubmitBuildEntity($form, $form_state);

  // Save the subscriber and set a message.
  newsletter_subscriber_save($subscriber);
  drupal_set_message(t('Subscription saved'));
}

/**
 * Form API submit callback for the delete button.
 *
 * @todo Remove hard-coded path
 */
function newsletter_subscriber_form_submit_delete(&$form, &$form_state) {
  $form_state['redirect'] = 'admin/config/media/newsletter/subscribers/manage/' . $form_state['newsletter_subscriber']->subscriber_id . '/delete';
}

/**
 * Form callback: confirmation form for deleting a subscriber.
 *
 * @param $subscriber
 *   The subscriber to delete
 *
 * @see newsletter_subscriber_delete_form_submit()
 * @see confirm_form()
 * @ingroup forms
 */
function newsletter_subscriber_delete_form($form, &$form_state, $subscriber) {
  $form['#subscriber'] = $subscriber;
  $form['#submit'][] = 'newsletter_subscriber_delete_form_submit';
  if (entity_access('view', 'newsletter_subscriber')) {
    $cancel = 'admin/config/media/newsletter/subscribers';
  }
  else {
    $cancel = '<front>';
  }
  $form = confirm_form($form, t('Are you sure you want to unsubscribe %mail?', array(
    '%mail' => $subscriber->mail,
  )), $cancel, '<p>' . t('This action cannot be undone.') . '</p>', t('Delete'), t('Cancel'), 'confirm');
  return $form;
}

/**
 * Form API submit callback for the newsletter_subscriber_delete_form form.
 */
function newsletter_subscriber_delete_form_submit($form, &$form_state) {
  $subscriber = $form['#subscriber'];
  newsletter_subscriber_delete($subscriber);
  drupal_set_message(t('The subscriber %mail has been unsubscribed.', array(
    '%mail' => $subscriber->mail,
  )));
  watchdog('newsletter_subscriber', 'Deleted subscriber %mail.', array(
    '%mail' => $subscriber->mail,
  ));
  if (entity_access('view', 'newsletter_subscriber')) {
    $form_state['redirect'] = 'admin/config/media/newsletter/subscribers';
  }
  else {
    $form_state['redirect'] = '<front>';
  }
}

/**
 * Form callback: create or edit a subscriber type.
 *
 * @param $newsletter_subscriber_type
 *   The newsletter subscriber type object to edit or create.
 *
 * @see newsletter_subscriber_type_form_validate()
 * @see newsletter_subscriber_type_form_submit()
 * @see newsletter_subscriber_type_form_submit_delete()
 * @see NewsletterSubscriberTypeUIController::hook_menu()
 * @ingroup forms
 */
function newsletter_subscriber_type_form($form, &$form_state, $newsletter_subscriber_type, $op = 'edit') {
  if ($op == 'clone') {
    $newsletter_subscriber_type->name .= ' (cloned)';
    $newsletter_subscriber_type->type = '';
  }
  $form_state['newsletter_subscriber_type'] = $newsletter_subscriber_type;
  $form['name'] = array(
    '#title' => t('Name'),
    '#type' => 'textfield',
    '#default_value' => $newsletter_subscriber_type->name,
    '#description' => t('The human-readable name of this subscriber type.'),
    '#required' => TRUE,
    '#size' => 30,
  );

  // Machine-readable type name.
  $form['type'] = array(
    '#type' => 'machine_name',
    '#default_value' => isset($newsletter_subscriber_type->type) ? $newsletter_subscriber_type->type : '',
    '#maxlength' => 32,
    //'#disabled' => $newsletter_subscriber_type->isLocked() && $op != 'clone',
    '#machine_name' => array(
      'exists' => 'newsletter_subscriber_get_types',
      'source' => array(
        'name',
      ),
    ),
    '#description' => t('A unique machine-readable name for this subscriber type. It must only contain lowercase letters, numbers, and underscores.'),
  );
  $form['data']['#tree'] = TRUE;
  $form['data']['allow_anonymous'] = array(
    '#type' => 'checkbox',
    '#title' => t('Allow anonymous subscribe using this type'),
    '#default_value' => !empty($newsletter_subscriber_type->data['allow_anonymous']),
  );
  $form['data']['roles'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Roles'),
    '#description' => t('Select the roles that can use this type. If a role applies on two or more subscriber types then the one with the lower weight will be used.'),
    '#options' => user_roles(TRUE),
    '#default_value' => $newsletter_subscriber_type->data['roles'],
  );
  $form['actions'] = array(
    '#type' => 'container',
    '#attributes' => array(
      'class' => array(
        'form-actions',
      ),
    ),
    '#weight' => 400,
  );
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save subscriber type'),
  );
  $form['actions']['delete'] = array(
    '#type' => 'submit',
    '#value' => t('Delete subscriber type'),
    '#limit_validation_errors' => array(),
    '#submit' => array(
      'newsletter_subscriber_type_form_submit_delete',
    ),
  );
  return $form;
}

/**
 * Form API submit callback for the type form.
 */
function newsletter_subscriber_type_form_submit(&$form, &$form_state) {
  $newsletter_subscriber_type = entity_ui_controller('newsletter_subscriber_type')
    ->entityFormSubmitBuildEntity($form, $form_state);

  // Save the subscriber type and go back to the list of subscriber types.
  newsletter_subscriber_type_save($newsletter_subscriber_type);
  $form_state['redirect'] = 'admin/structure/newsletter-subscriber-types';
}

/**
 * Form API submit callback for the delete button.
 */
function newsletter_subscriber_type_form_submit_delete(&$form, &$form_state) {
  $form_state['redirect'] = 'admin/structure/newsletter-subscriber-types/manage/' . $form_state['newsletter_subscriber_type']->type . '/delete';
}

Functions

Namesort descending Description
newsletter_subscriber_delete_form Form callback: confirmation form for deleting a subscriber.
newsletter_subscriber_delete_form_submit Form API submit callback for the newsletter_subscriber_delete_form form.
newsletter_subscriber_form Form callback: create or edit a subscriber.
newsletter_subscriber_form_submit Form API submit callback for the subscriber form.
newsletter_subscriber_form_submit_delete Form API submit callback for the delete button.
newsletter_subscriber_form_validate Form validation handler for newsletter_subscriber_form().
newsletter_subscriber_type_form Form callback: create or edit a subscriber type.
newsletter_subscriber_type_form_submit Form API submit callback for the type form.
newsletter_subscriber_type_form_submit_delete Form API submit callback for the delete button.