newsletter_subscriber.admin.inc in Newsletter 7.2
hook_menu callbacks for admin pages.
File
modules/subscriber/includes/newsletter_subscriber.admin.incView 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
Name | 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. |