Commit 84bc96a9 authored by bernman's avatar bernman
Browse files

Issue #1276456 by bernman: Initial port to Drupal 7

parent bb3433dc
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGELOG.txt: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line

Sequenced newsletter 7.x-1.x
----------------------------
- by bernman: Initial port to Drupal 7

Sequenced newsletter 6.x-1.x
----------------------------
- #1348858 by Ben Coleman: PostgreSQL incompatibility: use ORDER BY <field>, <field> not ORDER BY <field> AND <field>
+131 −88
Changes for sequenced_newsletter.admin.inc: 131 added lines, 88 removed lines.
Original line number Diff line number Diff line
@@ -9,26 +9,18 @@
/**
 * Administration pages form callback.
 */
function sequenced_newsletter_admin() {
function sequenced_newsletter_admin($form, &$form_state) {
  $form = array();
  $form['add_link'] = array(
    '#value' => theme_item_list( array(
            l('Create sequenced newsletter', 'admin/settings/sequenced_newsletter/add'),
            l('View list of sent sequenced newsletters', 'admin/settings/sequenced_newsletter/list'),
    )),
  $header = array(
    'name' => t('Sequenced newsletter name'),
    'status' => t('Status'),
    'operations' => t('Operations'),
  );
  
  $rows = _sequenced_newsletter_get_active_items();
  $form['table'] = array(
    '#value' => theme_table(
                    array(
                      t('Sequenced newsletter name'),
                      t('Actions'),
                    ),
                    _sequenced_newsletter_get_active_items()
                ),
    '#markup' => theme('table', array('header' => $header, 'rows' => $rows, 'empty' => t('No sequences.'))),
  );


  return $form;
}

@@ -36,105 +28,136 @@ function sequenced_newsletter_admin() {
/**
 * Form callback for sequenced newsletter edit form.
 */
function sequenced_newsletter_admin_edit(&$form_state, $id = -1) {
  // Go back if cancelled
  if (isset($form_state['post']) && isset($form_state['post']['cancel'])) {
    drupal_goto('admin/settings/sequenced_newsletter');
  }
function sequenced_newsletter_admin_edit($form, &$form_state, $id = -1) {
  
  // Load old data if editing existing entry.
  $old_data = array();
  $data = array();
  if ($id > -1) {
    $old_data = _sequenced_newsletter_get_item($id);
    $data = _sequenced_newsletter_get_item($id);
  }
  $data += array(
    'name' => '',
    'enabled' => 0,
    'tid' => 0,
    'sort' => 0,
    'start_time' => date('Y-m-d H:i'),
    'reset' => 0,
    'interval' => 0,
  );
  
  // Build form.
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t("Sequenced's newsletter name"),
    '#default_value' => isset($old_data['name']) ? check_plain($old_data['name']) : '',
    '#description' => t("Enter human name for this newsletter. Name's length is limited to 128 characters."),
    '#title' => t('Sequenced\'s newsletter name'),
    '#default_value' => $data['name'],
    '#description' => t('Enter human name for this newsletter. Name\'s length is limited to 128 characters.'),
    '#required' => TRUE,
  );

  $options = array(
    t('Disabled'),
    t('Enabled'),
  );

  $form['enabled'] = array(
    '#type' => 'radios',
    '#title' => t('Enable this sequenced newsletter'),
    '#default_value' => isset($old_data['enabled']) ? check_plain($old_data['enabled']) : 0,
    '#description' => t("When enabled sequenced newsletters will be sent. When diabled nothing will happen."),
    '#options' => array(t('Disabled'), t('Enabled')),
    '#default_value' => $data['enabled'],
    '#description' => t('When enabled sequenced newsletters will be sent. When disabled nothing will happen.'),
    '#options' => $options,
  );

  $form['newsletter'] = array(
    '#type' => 'fieldset',
    '#title' => t('Newsletter'),
  );

  $form['tid'] = array(
  $form['newsletter']['tid'] = array(
    '#type' => 'select',
    '#title' => t('Newsletter'),
    '#default_value' => isset($old_data['tid']) ? $old_data['tid'] : 0,
    '#default_value' => $data['tid'],
    '#options' => _sequenced_newsletter_get_tids(),
    '#description' => t("Sequenced newsletter. Subscribers will get sequenced emails from this newsletter term."),
    '#description' => t('Sequenced newsletter. Subscribers will get sequenced emails from this newsletter term.'),
    '#required' => TRUE,
  );

  $form['start_time'] = array(
  $form['newsletter']['sort'] = array(
    '#type' => 'select',
    '#title' => t('Sorting field'),
    '#default_value' => $data['sort'],
    '#options' => _sequenced_newsletter_get_sort(),
    '#description' => t('Which field to use for ordering newsletter issues.'),
    '#required' => TRUE,
  );
 
  $form['timing'] = array(
    '#type' => 'fieldset',
    '#title' => t('Sequence timing'),
  );

  $form['timing']['start_time'] = array(
    '#type' => 'date_select',
    '#title' => t('Sequence start'),
    '#date_type' =>  DATE_DATETIME,
    '#default_value'   => isset($old_data['start_time']) ? date('Y-m-d H:i', $old_data['start_time']) : date('Y-m-d H:i'),
    '#default_value'=> $data['start_time'],
    '#date_format' => 'm-d-Y - H:i',
    '#date_timezone'   => date_default_timezone_name(),
    '#date_timezone' => date_default_timezone(),
    '#description' => t('Time and day when emails will be moved into spool/sending will start.'),
    '#required' => TRUE
  );

  if ($id != -1) {
    $form['reset'] = array(
  if ($id > -1) {
    $form['timing']['reset'] = array(
      '#type' => 'checkbox',
      '#title' => t('Reset time'),
      '#default_value' => 0,
      '#description' => t("Check if you want to reset timing of this newsletter. If you changed Sequence start time, than this is probbably a good idea.<br />WARNING: Mail will be sent immediatley if timer is reseted and send time is set to past."),
      '#default_value' => $data['reset'],
      '#description' => t("Check if you want to reset timing of this newsletter. If you changed Sequence start time, then this is probbably a good idea.<br />WARNING: Mail will be sent immediatley if timer is reset and send time is set to the past."),
    );
  }
 
  $form['interval'] = array(
  $form['timing']['interval'] = array(
    '#type' => 'select',
    '#title' => t('Sending interval'),
    '#default_value' => isset($old_data['interval']) ? $old_data['interval'] : 0,
    '#default_value' => $data['interval'],
    '#options' => _sequenced_newsletter_get_intervals(),
    '#description' => t("Interval to send sequenced newspetters."),
    '#required' => TRUE,
  );
 
  $form['sort'] = array(
    '#type' => 'select',
    '#title' => t('Sorting field'),
    '#default_value' => isset($old_data['sort']) ? $old_data['sort'] : 0,
    '#options' => _sequenced_newsletter_get_sort(),
    '#description' => t("Which field to use for ordering newsletter issues."),
    '#required' => TRUE,
  );
  
  $form['sqnid'] = array(
    '#type' => 'hidden',
    '#value' => $id,
  );
 
  $form['submit'] = array(
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );

  $form['cancel'] = array(
    '#type' => 'button',
    '#value' => t('Cancel'),
    '#name' => 'cancel',
  if ($id > -1) {
    $form['actions']['delete'] = array(
      '#type' => 'submit',
      '#value' => t('Delete'),
    );
  }

  return $form;
}

function sequenced_newsletter_admin_edit_submit(&$form, &$form_state) {
  // TODO: Check if time conversions acts OK in timezone context.
  $date = strptime($form_state['values']['start_time'], '%Y-%m-%d %H:%M:%S');
  $date = mktime($date['tm_hour'], $date['tm_min'], $date['tm_sec'], $date['tm_mon']+1, $date['tm_mday'], $date['tm_year']+1900);
function sequenced_newsletter_admin_edit_validate($form, &$form_state) {
  if ($form_state['clicked_button']['#value'] != t('Delete')) {
  }
}

function sequenced_newsletter_admin_edit_submit($form, &$form_state) {
  $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : '';
  if ($op == t('Delete')) {
    $form_state['redirect'] = 'admin/config/services/simplenews/sequenced_newsletter/' . $form_state['values']['sqnid'] . '/delete';
    return;
  }

  $date_obj = new DateTime($form_state['values']['start_time'], new DateTimeZone(date_default_timezone()));
  $date = $date_obj->getTimestamp();

  // Prepare data for DB.
  $insert = array(
@@ -175,15 +198,18 @@ function sequenced_newsletter_admin_edit_submit(&$form, &$form_state) {
  }
 
  // Redirect back to basic configuration.
  $form_state['redirect'] = 'admin/settings/sequenced_newsletter';
  $form_state['redirect'] = 'admin/config/services/simplenews/sequenced_newsletter';
}

/**
 * Delete callback.
 */
function sequenced_newsletter_admin_delete(&$form_state, $id) {
  $result = db_query("SELECT name FROM {sequenced_newsletter_conf} WHERE sqnid = %d", $id);
  $result = db_fetch_array($result);
function sequenced_newsletter_admin_delete($form, &$form_state, $id) {
  $result = db_select('sequenced_newsletter_conf', 'snc')
    ->fields('snc', array('name'))
    ->condition('sqnid', $id)
    ->execute()
    ->fetchAssoc();

  $form['sqnid'] = array(
    '#type' => 'value',
@@ -192,19 +218,23 @@ function sequenced_newsletter_admin_delete(&$form_state, $id) {

  return confirm_form($form,
    t('Are you sure you want to delete %title?', array('%title' => $result['name'])),
    isset($_GET['destination']) ? $_GET['destination'] : 'admin/settings/sequenced_newsletter',
    isset($_GET['destination']) ? $_GET['destination'] : 'admin/config/services/simplenews/sequenced_newsletter',
    t('This action cannot be undone.'),
    t('Delete'),
    t('Cancel')
  );
}

function sequenced_newsletter_admin_delete_submit(&$form, &$form_state) {
function sequenced_newsletter_admin_delete_submit($form, &$form_state) {
  if ($form_state['values']['confirm']) {
    db_query("UPDATE {sequenced_newsletter_conf} SET status=2 WHERE sqnid=%d", $form_state['values']['sqnid']);
    #db_query("UPDATE {sequenced_newsletter_conf} SET status=2 WHERE sqnid=%d", $form_state['values']['sqnid']);
    db_update('sequenced_newsletter_conf')
      ->fields(array('status' => 2))
      ->condition('sqnid', $form_state['values']['sqnid'])
      ->execute();
  }

  $form_state['redirect'] = 'admin/settings/sequenced_newsletter';
  $form_state['redirect'] = 'admin/config/services/simplenews/sequenced_newsletter';
}


@@ -216,9 +246,12 @@ function sequenced_newsletter_admin_delete_submit(&$form, &$form_state) {
function _sequenced_newsletter_get_tids() {
  //get simplenews terms
  $vid = variable_get('simplenews_vid', -1);
  $terms = db_query("SELECT * FROM {term_data} WHERE vid=%d", $vid);
  $terms_array = Array();
  while ($row = db_fetch_array($terms)) {
  $terms = db_select('taxonomy_term_data', 'td')
    ->fields('td', array('tid', 'name'))
    ->condition('vid', $vid)
    ->execute();
  $terms_array = array();
  while ($row = $terms->fetchAssoc()) {
    $terms_array[$row['tid']] = t($row['name']);
  }
  
@@ -231,7 +264,7 @@ function _sequenced_newsletter_get_tids() {
 * @return Array of possible intervals.
 */
function _sequenced_newsletter_get_intervals() {
  return Array(
  return array(
    0 => t('Daily'),
    1 => t('Weekly'),
    2 => t('Monthly'),
@@ -246,9 +279,10 @@ function _sequenced_newsletter_get_intervals() {
 * @return Array of possible order fields.
 */
function _sequenced_newsletter_get_sort() {
  return Array(
      0 => t('nid'),
      1 => t('updated time'),
  return array(
    0 => t('Node id (nid)'),
    1 => t('Node update time (changed)'),
    2 => t('Node create time (created)'),
  );
}

@@ -260,21 +294,25 @@ function _sequenced_newsletter_get_sort() {
 * @return seq. newsletter as array.
 */
function _sequenced_newsletter_get_item($id) {
  $result = db_query("SELECT * FROM {sequenced_newsletter_conf} WHERE sqnid = %d AND status <> 2", $id);
  $result = db_select('sequenced_newsletter_conf', 'snc')
    ->fields('snc', array('sqnid', 'name', 'status', 'tid', 'start_date', 'send_interval', 'sort'))
    ->condition('sqnid', $id)
    ->condition('status', 2, '<>')
    ->execute();
  if ($result) {
    $item = db_fetch_object($result);
    $item = $result->fetchAssoc();
    return array(
      'name' => $item->name,
      'enabled' => $item->status,
      'tid' => $item->tid,
      'start_time' => $item->start_date,
      'interval' => $item->send_interval,
      'sqnid' => $item->sqnid,
      'sort' => $item->sort,
      'name' => check_plain($item['name']),
      'enabled' => $item['status'],
      'tid' => $item['tid'],
      'start_time' => date('Y-m-d H:i', $item['start_date']),
      'interval' => $item['send_interval'],
      'sqnid' => $item['sqnid'],
      'sort' => $item['sort'],
    );
  }
  else {
    drupal_goto('admin/settings/sequenced_newsletter');
    drupal_goto('admin/config/services/simplenews/sequenced_newsletter');
  }
}

@@ -285,14 +323,19 @@ function _sequenced_newsletter_get_item($id) {
 */
function _sequenced_newsletter_get_active_items() {
  $data = array();
  $result = db_query("SELECT *  FROM {sequenced_newsletter_conf} WHERE status <> 2 ORDER BY sqnid ASC");
  $result = db_select('sequenced_newsletter_conf', 'snc')
    ->fields('snc', array('sqnid', 'name', 'status'))
    ->condition('status', 2, '<>')
    ->orderBy('sqnid', 'ASC')
    ->execute();
  
  while ($item = db_fetch_array($result)) {
    $edit = l(t('Edit'), 'admin/settings/sequenced_newsletter/edit/' . $item['sqnid']);
    $delete = l(t('Delete'), 'admin/settings/sequenced_newsletter/delete/' . $item['sqnid']);
  foreach ($result as $item) {
    $edit = l(t('Edit'), 'admin/config/services/simplenews/sequenced_newsletter/' . $item->sqnid . '/edit');
    $delete = l(t('Delete'), 'admin/config/services/simplenews/sequenced_newsletter/' . $item->sqnid . '/delete');
    
    $data[] = array(
      check_plain($item['name']),
      check_plain($item->name),
      $item->status ? t('Enabled') : t('Disabled'),
      $edit . ' ' . $delete, 
    );
  }
+2 −3
Changes for sequenced_newsletter.info: 2 added lines, 3 removed lines.
Original line number Diff line number Diff line
; $Id$
name = Sequenced newsletter
description = Makes possible to send scheduled sequenced email newsletters.
package = Mail
core = 7.x
dependencies[] = simplenews
dependencies[] = date_api
package = Mail
core = 6.x
 No newline at end of file
+13 −71
Changes for sequenced_newsletter.install: 13 added lines, 71 removed lines.
Original line number Diff line number Diff line
@@ -10,8 +10,6 @@
 * Implementation of hook_install().
 */
function sequenced_newsletter_install() {
  drupal_install_schema('sequenced_newsletter');
  drupal_install_schema('sequenced_newsletter_conf');
}

/**
@@ -20,46 +18,41 @@ function sequenced_newsletter_install() {
function sequenced_newsletter_schema() {
  // Database for storing newsletters
  $schema['sequenced_newsletter'] = array(
    'description' => 'Sequenced newsletter sequence data.',
    'fields' => array(
      'nid' => array(
        'type' => 'int',
        'size' => 'big',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0),
        'default' => 0,
      ),
      'sid' => array(
        'type' => 'int',
        'size' => 'big',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0),
        'default' => 0,
      ),
      'sqnid' => array(
        'type' => 'int',
        'size' => 'big',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0),
        'default' => 0,
      ),
      'date_spooled' => array(
        'type' => 'int',
        'length' => 11,
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 0)
        'default' => 0,
      ),
    )
  );
  
  // Confiuration database.
  $schema['sequenced_newsletter_conf'] = _sequenced_newsletter_conf_schema();

  return $schema;
}


/**
 * Returns definition for configuration schema.
 */
function _sequenced_newsletter_conf_schema() {
  return array(
  $schema['sequenced_newsletter_conf'] = array(
    'description' => 'Table with configuration for sequenced newsletter.',
    'fields' => array(
      'sqnid' => array(
@@ -119,64 +112,13 @@ function _sequenced_newsletter_conf_schema() {
    ),
    'primary key' => array('sqnid'),
  );

  return $schema;
}

/**
 * Implementation of hook_uninstall().
 */
function sequenced_newsletter_uninstall() {
  drupal_uninstall_schema('sequenced_newsletter');
  drupal_uninstall_schema('sequenced_newsletter_conf');
}

/**
 * Updates module to be able to use multiple sequences.
 */
function sequenced_newsletter_update_6001() {
  // Add table sequenced_newsletter_conf
  $ret = array();
  db_create_table($ret, 'sequenced_newsletter_conf', _sequenced_newsletter_conf_schema());
  
  // Add sqnid field to sequenced_newsletter
  $ret = array();
  db_add_field($ret, 'sequenced_newsletter', 'sqnid', 
    array(
      'type' => 'int',
      'size' => 'big',
      'not null' => TRUE,
      'unsigned' => TRUE,
      'default' => 0
    )
  );
  
  // Get data about old newsletter.
  $tid = variable_get('sequenced_newsletter_master', 0);
  $last_send = variable_get('sequenced_newsletter_last_run', 0);
  $name = "Imported sequenced newsletter";
  $interval = variable_get('sequenced_newsletter_period', 0);
  $status = variable_get('sequenced_newsletter_enable', 0);
  $start = strtotime(variable_get('sequenced_newsletter_start_time', '01-01-1970 - 00:01'));
  
  print variable_get('sequenced_newsletter_start_time', '01-01-1970 - 00:01')."\n";
  print variable_get('sequenced_newsletter_last_run', 0)."\n";
  print variable_get('sequenced_newsletter_enable', 0)."\n";
    
  // Delete old variables
  variable_del('sequenced_newsletter_master');
  variable_del('sequenced_newsletter_last_run');
  variable_del('sequenced_newsletter_period');
  variable_del('sequenced_newsletter_enable');
  variable_del('sequenced_newsletter_start_time');
  
  // Import old newsletter
  db_query("INSERT INTO {sequenced_newsletter_conf}(tid,name,start_date,last_send,send_interval,sort,status) VALUES('%d','%s','%d','%d','%d','%d','%d')",
    $tid,
    $name,
    $start,
    $last_send,
    $interval,
    $status
  );
  db_query("UPDATE {sequenced_newsletter} SET sqnid=1");
  
  db_query("DELETE FROM {variable} WHERE name LIKE 'sequenced_newsletter_%%'");
}
+125 −50

File changed.

Preview size limit exceeded, changes collapsed.