You are here

newsletter_template.admin.inc in Newsletter 7.2

hook_menu callbacks for admin pages.

File

modules/template/includes/newsletter_template.admin.inc
View source
<?php

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

/**
 * Form callback: create or edit a template.
 *
 * @param $template
 *   The template object to edit or for a create form an empty template object
 *     with only a template type defined.
 *
 * @see newsletter_template_form_validate()
 * @see newsletter_template_form_submit()
 * @see newsletter_template_form_submit_delete()
 * @see NewslettertemplateUIController::hook_menu()
 * @ingroup forms
 */
function newsletter_template_form($form, &$form_state, $template) {

  // Add the default field elements.
  $form['mail'] = array(
    '#type' => 'textfield',
    '#title' => t('E-mail'),
    '#default_value' => isset($template->mail) ? $template->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_template', $template, $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 template'),
    '#submit' => $submit + array(
      'newsletter_template_form_submit',
    ),
  );
  if (!empty($template->hash)) {
    $form['actions']['delete'] = array(
      '#type' => 'submit',
      '#value' => t('Unsubscribe'),
      '#submit' => $submit + array(
        'newsletter_template_form_submit_delete',
      ),
      '#weight' => 45,
    );
  }
  $form['actions']['cancel'] = array(
    '#type' => 'link',
    '#href' => 'admin/config/media/newsletter/templates',
    '#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_template_form_validate';
  $form_state['newsletter_template'] = $template;
  return $form;
}

/**
 * Form validation handler for newsletter_template_form().
 *
 * @see newsletter_template_form_submit()
 */
function newsletter_template_form_validate(&$form, &$form_state) {
  $template = $form_state['newsletter_template'];
  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_template', $template, $form, $form_state);
}

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

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

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

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

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

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

  // Machine-readable type name.
  $form['type'] = array(
    '#type' => 'machine_name',
    '#default_value' => isset($newsletter_template_type->type) ? $newsletter_template_type->type : '',
    '#maxlength' => 32,
    //'#disabled' => $newsletter_template_type->isLocked() && $op != 'clone',
    '#machine_name' => array(
      'exists' => 'newsletter_template_get_types',
      'source' => array(
        'name',
      ),
    ),
    '#description' => t('A unique machine-readable name for this template type. It must only contain lowercase letters, numbers, and underscores.'),
  );
  $form['data']['#tree'] = TRUE;
  $form['actions'] = array(
    '#type' => 'container',
    '#attributes' => array(
      'class' => array(
        'form-actions',
      ),
    ),
    '#weight' => 400,
  );
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save template type'),
  );
  $form['actions']['delete'] = array(
    '#type' => 'submit',
    '#value' => t('Delete template type'),
    '#limit_validation_errors' => array(),
    '#submit' => array(
      'newsletter_template_type_form_submit_delete',
    ),
  );
  return $form;
}

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

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

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

Functions

Namesort descending Description
newsletter_template_delete_form Form callback: confirmation form for deleting a template.
newsletter_template_delete_form_submit Form API submit callback for the newsletter_template_delete_form form.
newsletter_template_form Form callback: create or edit a template.
newsletter_template_form_submit Form API submit callback for the template form.
newsletter_template_form_submit_delete Form API submit callback for the delete button.
newsletter_template_form_validate Form validation handler for newsletter_template_form().
newsletter_template_type_form Form callback: create or edit a template type.
newsletter_template_type_form_submit Form API submit callback for the type form.
newsletter_template_type_form_submit_delete Form API submit callback for the delete button.