You are here

function webform_purge_cron in Webform Purge 7

Implements hook_cron().

File

./webform_purge.module, line 11
Custom functionality for purging webform submissions.

Code

function webform_purge_cron() {

  // Is the webform purge function enabled in system settings?
  $enabled = variable_get('webform_purge_enabled');
  if ($enabled == 1) {

    // Run once each day or on every cron run?
    $run_once = variable_get('webform_purge_run_once');
    if ($run_once == 1) {

      // Run only once so find out if we need to run it yet today.
      $cron_last = variable_get('cron_last');
      $run = date('ymd', $cron_last) != date('ymd') ? TRUE : FALSE;
    }
    else {
      $run = TRUE;
    }
    if ($run) {

      // Get the checked checkboxes.
      $checkboxes = variable_get('webform_purge_checkbox_state');
      $purge_all = variable_get('webform_purge_all_submissions', FALSE);

      // Construct timestamp for purging.
      $days_to_retain = variable_get('webform_purge_days_to_retain');
      $purge_timestamp = strtotime(date('Y-m-d H:i:s') . ' -' . $days_to_retain . ' day');

      // Get the records elegible for purging.
      $limit = variable_get('webform_purge_cron_limit', 100000);
      if ($purge_all == 1) {
        $query = db_query('SELECT * FROM {webform_submissions} WHERE submitted < :purge_timestamp' . ($limit ? ' LIMIT ' . check_plain($limit) : ''), array(
          ':purge_timestamp' => $purge_timestamp,
        ));
      }
      else {
        $query = db_query('SELECT * FROM {webform_submissions} WHERE submitted < :purge_timestamp AND nid IN (:nid)' . ($limit ? ' LIMIT ' . check_plain($limit) : ''), array(
          ':purge_timestamp' => $purge_timestamp,
          ':nid' => $checkboxes,
        ));
      }
      $rows = $query
        ->fetchAll();

      // If submissions found to purge, get on with it.
      if (count($rows) > 0) {
        $deleted = 0;
        foreach ($rows as $row) {
          $node = node_load($row->nid);
          $submission = webform_menu_submission_load($row->sid, $row->nid);
          webform_submission_delete($node, $submission);
          $deleted++;
        }
        watchdog('webform_purge', 'Purged %total webform submissions.', array(
          '%total' => $deleted,
        ));
      }
      else {
        watchdog('webform_purge', 'No eligible webform submissions found to purge.', array());
      }
    }
  }
}