You are here

webform_submissions_bulk_delete.module in Webform Submissions Bulk Delete 7

Delete webform submissions with in the date range.

File

webform_submissions_bulk_delete.module
View source
<?php

/**
 * @file
 * Delete webform submissions with in the date range.
 */

/**
 * Implements hook_permission().
 */
function webform_submissions_bulk_delete_permission() {
  return array(
    'access administration menu' => array(
      'title' => t('Access Webform Data Export'),
      'description' => t('Access the Webform Data Export configuration admin pages'),
    ),
  );
}

/**
 * Implements hook_menu().
 */
function webform_submissions_bulk_delete_menu() {
  $items = array();
  $items['node/%webform_menu/webform-results/bulk-delete'] = array(
    'title' => 'Bulk Delete',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'webform_submissions_bulk_delete_form',
      1,
    ),
    'access arguments' => array(
      'access administration menu',
    ),
    'weight' => 9,
    'type' => MENU_LOCAL_TASK,
  );
  return $items;
}

/**
 * Implements hook_form().
 */
function webform_submissions_bulk_delete_form($form, $form_state, $node) {
  if (!isset($form_state['delete_submit']['submit'])) {
    $form['#attached']['css'] = array(
      drupal_get_path('module', 'webform_submissions_bulk_delete') . '/css/webform_submissions_bulk_delete.css',
    );
    $form['delete_start_date'] = array(
      '#date_format' => 'Y-m-d',
      '#title' => t('Start Date'),
      '#type' => 'date_popup',
      '#date_year_range' => '-10:+10',
    );
    $form['delete_end_date'] = array(
      '#date_format' => 'Y-m-d',
      '#title' => t('End date'),
      '#type' => 'date_popup',
      '#date_year_range' => '-10:+10',
    );
    $form['delete_submit'] = array(
      '#type' => 'submit',
      '#value' => t('Delete'),
      '#validate' => array(
        'webform_submissions_bulk_delete_form_validate',
      ),
      '#submit' => array(
        'webform_submissions_bulk_delete_form_submit',
      ),
    );
    return $form;
  }
  else {
    $path = current_path();
    $form['nid'] = array(
      '#type' => 'value',
      '#value' => $node->nid,
    );
    return confirm_form($form, t("Do you really want to make the submissions to delete?"), $path, t("Warning, this is the last step before form gets submitted"), t("Proceed?"));
  }
  return $form;
}

/**
 * Implements of form validation().
 */
function webform_submissions_bulk_delete_form_validate($form, &$form_state) {
  if (!isset($form['confirm'])) {
    $start_date = check_plain($form_state['values']['delete_start_date']);
    $end_date = check_plain($form_state['values']['delete_end_date']);
    if ($start_date == '') {
      form_set_error('Start Date validation', t('Please enter Start Date'));
    }
    if ($end_date == '') {
      form_set_error('End Date validation', t('Please enter End Date'));
    }
    if (strtotime($start_date) > strtotime($end_date)) {
      form_set_error('Date range validation', t('Start date should not greater than End date'));
    }
  }
}

/**
 * Implementation of batch creation().
 */
function webform_submissions_bulk_delete_form_submit($form, &$form_state) {
  if (!isset($form_state['delete_submit']['submit'])) {
    $form_state['delete_submit']['submit'] = TRUE;
    $form_state['rebuild'] = TRUE;
    $form_state['delete_submit']['original_form'] = $form_state['values'];
  }
  else {
    $batch = webform_submissions_bulk_delete_webform_submission_batch($form, $form_state);
    batch_set($batch);
    $nid = $form['nid']['#value'];
    batch_process('node/' . $nid . '/webform-results/bulk-delete');
  }
}

/**
 * Implementation of batch queue().
 */
function webform_submissions_bulk_delete_webform_submission_batch($form, &$form_state) {
  $operations = array();
  $nid = $form['nid']['#value'];
  $start_date = strtotime(check_plain($form_state['delete_submit']['original_form']['delete_start_date']));
  $end_date = check_plain($form_state['delete_submit']['original_form']['delete_end_date']);
  if ($end_date != '' && ($end_date = strtotime($end_date)) !== FALSE) {
    if ($end_date == strtotime('midnight', $end_date)) {

      // Full day specified.
      $end_date += 86399;
    }
  }
  $query = db_select('webform_submissions', 'submission');
  $query
    ->fields('submission', array(
    'sid',
  ));
  $query
    ->condition('submission.nid', $nid);
  $query
    ->condition('submission.submitted', $start_date, '>=');
  $query
    ->condition('submission.submitted', $end_date, '<=');
  $sid = $query
    ->execute()
    ->fetchAll();
  foreach ($sid as $submission_id) {
    $operations[] = array(
      'webform_submissions_bulk_delete_webform_submission_process',
      array(
        $submission_id->sid,
      ),
    );
  }
  $batch = array(
    'init_message' => t('Initializing...'),
    'title' => t('Submission Deletion in progress...'),
    'operations' => $operations,
    'progress_message' => t('@current Submission Deleted out of @total.'),
    'error_message' => t('An Error has occurred!'),
    'finished' => 'webform_submissions_bulk_delete_webform_submission_finished',
  );
  return $batch;
}

/**
 * Implementation of batch context().
 */
function webform_submissions_bulk_delete_webform_submission_process($submission_id, &$context) {
  webform_submissions_bulk_delete_webform_submission_action($submission_id, $context);
}

/**
 * Implementation of batch success().
 */
function webform_submissions_bulk_delete_webform_submission_finished($success, $results, $operations) {
  if (isset($results['success'])) {
    if (count($results['success']) > 0) {
      drupal_set_message(t('@count submissions has been deleted', array(
        '@count' => count($results['success']),
      )));
    }
  }
}

/**
 * Implementation of batch process().
 */
function webform_submissions_bulk_delete_webform_submission_action($submission_id, &$context) {
  db_delete('webform_submitted_data')
    ->condition('sid', $submission_id)
    ->execute();
  db_delete('webform_submissions')
    ->condition('sid', $submission_id)
    ->execute();
}