function simplenews_scheduler_form_simplenews_node_tab_send_form_alter in Simplenews Scheduler 7
Same name and namespace in other branches
- 6.2 simplenews_scheduler.module \simplenews_scheduler_form_simplenews_node_tab_send_form_alter()
Implements hook_form_FORM_ID_alter().
@todo replace the "This newsletter has been sent" checkbox of simplenews module by a message like "Last edition of this newsletter was sent at 12.12.2012"
File
- ./
simplenews_scheduler.module, line 56 - Simplenews Scheduler module allows a schedule to be set for sending (and resending) a Simplenews item.
Code
function simplenews_scheduler_form_simplenews_node_tab_send_form_alter(&$form, &$form_state) {
global $user;
// Add schedule settings to the send newsletter form.
if (user_access('send scheduled newsletters')) {
// Make sure that this is not an edition.
$node = node_load($form['nid']['#value']);
// Only add the schedule send options if the newsletter has not been sent,
// in which case there is no send form element.
if (isset($form['simplenews']['send']) && !isset($node->simplenews_scheduler_edition)) {
// Set the default values.
$form['#submit'][] = "simplenews_scheduler_submit";
$scheduler = array();
$record = db_select('simplenews_scheduler', 's')
->fields('s')
->condition('nid', $node->nid)
->execute()
->fetchAssoc();
if (!empty($record)) {
$scheduler = $record;
}
else {
$scheduler['activated'] = 0;
}
$form_state['simplenews_scheduler'] = $scheduler;
// Only show relevant options
if ($scheduler['activated'] == 0) {
$form['simplenews']['send']['#options'] += array(
SIMPLENEWS_COMMAND_SEND_SCHEDULE => t('Send newsletter according to schedule'),
);
}
else {
$form['simplenews']['send']['#options'] += array(
SIMPLENEWS_COMMAND_SEND_NONE => t("Stop newsletter schedule"),
);
drupal_set_message(t('Newsletter Schedule will send again on @next_run', array(
'@next_run' => format_date($record['next_run']),
)));
}
$form['simplenews']['send']['#default_value'] = $scheduler['activated'] == 1 ? SIMPLENEWS_COMMAND_SEND_SCHEDULE : variable_get('simplenews_send', SIMPLENEWS_COMMAND_SEND_NONE);
$form['simplenews']['scheduler'] = array(
'#type' => 'fieldset',
'#title' => t('Schedule details'),
'#attributes' => array(
'class' => array(
'schedule-info',
),
),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#states' => array(
'visible' => array(
':input[name="simplenews[send]"]' => array(
'value' => (string) SIMPLENEWS_COMMAND_SEND_SCHEDULE,
),
),
),
);
// If there is no default value, use the current time for start.
$start_date = !empty($scheduler['start_date']) ? $scheduler['start_date'] : REQUEST_TIME;
// and Today + 2 years for stop, that should be enough.
$stop_date = !empty($scheduler['stop_date']) ? $scheduler['stop_date'] : REQUEST_TIME + 2 * 365 * 24 * 60 * 60;
$form['simplenews']['scheduler']['start_date'] = array(
'#type' => 'date_select',
'#title' => t('Start sending on'),
'#default_value' => date('Y-m-d H:i', $start_date),
'#required' => TRUE,
'#date_format' => 'Y-m-d H:i',
'#date_label_position' => 'within',
'#date_year_range' => '-0:+3',
'#description' => t('Intervals work by creating a new node at the
desired time and marking this to be sent, ensure
you have your <a href="@site">site timezones</a>
configured and <a href="@user">user timezone</a>
configured.', array(
'@site' => url('admin/config/date-time'),
'@user' => url('user/' . $user->uid . '/edit'),
)),
);
$intervals = array(
'hour' => t('Hour'),
'day' => t('Day'),
'week' => t('Week'),
'month' => t('Month'),
);
$form['simplenews']['scheduler']['interval'] = array(
'#type' => 'select',
'#title' => t('Sending interval'),
'#options' => $intervals,
'#description' => t('Interval to send at'),
'#default_value' => !empty($scheduler['send_interval']) ? $scheduler['send_interval'] : 'week',
);
$form['simplenews']['scheduler']['frequency'] = array(
'#type' => 'textfield',
'#title' => t('Interval frequency'),
'#size' => 5,
'#default_value' => !empty($scheduler['interval_frequency']) ? $scheduler['interval_frequency'] : 1,
'#description' => t('Set the number of Intervals between newsletter transmission.'),
);
$stoptypes = array(
t('Never'),
t('On a given date'),
t('After a maximum number of editions'),
);
$form['simplenews']['scheduler']['stoptype'] = array(
'#type' => 'radios',
'#title' => t('Stop sending'),
'#options' => $stoptypes,
'#default_value' => !empty($scheduler['stop_type']) ? $scheduler['stop_type'] : 0,
'#attributes' => array(
'class' => array(
'simplenews-command-stop',
),
),
);
$form['simplenews']['scheduler']['stop_edition'] = array(
'#type' => 'textfield',
'#default_value' => isset($scheduler['stop_edition']) ? $scheduler['stop_edition'] : 0,
'#size' => 5,
'#maxlength' => 5,
'#required' => TRUE,
'#description' => t('The maximum number of editions which should be sent.'),
'#states' => array(
'visible' => array(
':input[name="simplenews[scheduler][stoptype]"]' => array(
'value' => (string) 2,
),
),
),
);
$form['simplenews']['scheduler']['stop_date'] = array(
'#type' => 'date_select',
'#title' => t('Stop sending on'),
'#default_value' => date('Y-m-d H:i', $stop_date),
'#required' => TRUE,
'#date_format' => 'Y-m-d H:i',
'#date_label_position' => 'within',
'#date_year_range' => '-0:+3',
'#description' => t('The date when the last sent newsletter will be sent.'),
'#states' => array(
'visible' => array(
':input[name="simplenews[scheduler][stoptype]"]' => array(
'value' => (string) 1,
),
),
),
);
$form['simplenews']['scheduler']['php_eval'] = array(
'#type' => 'textarea',
'#title' => t('Additionally only create newsletter edition if the following code returns true'),
'#default_value' => isset($scheduler['php_eval']) ? $scheduler['php_eval'] : '',
'#required' => FALSE,
'#description' => t('Additionally evaluate the following PHP code and only issue the newsletter edition if it returns true. Do not include <?php ?> tags.'),
'#access' => user_access('use PHP for settings'),
);
$form['simplenews']['scheduler']['title'] = array(
'#type' => 'textfield',
'#title' => t('Title pattern for new edition nodes'),
'#description' => t('New edition nodes will have their title set to the above string, with tokens replaced.'),
'#required' => TRUE,
'#default_value' => isset($scheduler['title']) ? $scheduler['title'] : '[node:title]',
);
$form['simplenews']['scheduler']['token_help'] = array(
'#title' => t('Replacement patterns'),
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['simplenews']['scheduler']['token_help']['help'] = array(
'#theme' => 'token_tree',
'#token_types' => array(
'node',
),
);
$form['simplenews']['scheduler']['activated'] = array(
'#type' => 'value',
'#value' => $scheduler['activated'],
);
}
elseif (isset($node->simplenews_scheduler_edition)) {
// This is a newsletter edition.
$form['simplenews']['none']['#title'] = t('This node is part of a scheduled newsletter configuration. View the original newsletter <a href="@parent">here</a>.', array(
'@parent' => url('node/' . $node->simplenews_scheduler_edition->pid),
));
}
}
}