You are here

function simplenews_scheduler_form_simplenews_node_tab_send_form_alter in Simplenews Scheduler 7

Same name and namespace in other branches
  1. 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 &lt;?php ?&gt; 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),
      ));
    }
  }
}