aboutsummaryrefslogtreecommitdiff
path: root/node_import_truncate.module
blob: 38a12d1a9c28a717cf5783b8df4006a7673dfc4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
// $Id$

/**
 * @file
 * Node Import Truncate module.
 *
 * This module adds a final step at the Node Import form so users
 * can choose whether to erase all nodes of a given content type
 * before importing new data into it.
 */

/**
 * Implementation of hook_menu();
 */
function node_import_truncate_menu() {
  $items['admin/content/node_import/truncate'] = array(
    'title'            => 'Node Import Truncate',
    'description'      => 'Mass deletion page.',
    'page callback'    => 'node_import_truncate_page',
    'access arguments' => array('administer nodes'),
    'type'             => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Menu callback.
 */
function node_import_truncate_page($taskid = NULL) {
  $output  = t('Choose whether to delete older content.');
  $output .= drupal_get_form('node_import_truncate_form', $taskid);
  return $output;
}

/**
 * Mass deletion form.
 */
function node_import_truncate_form(&$form_state, $taskid = NULL) {
  $form['taskid'] = array(
    '#type'  => 'value',
    '#value' => $taskid,
  );
  $form['mass_delete'] = array(
    '#type'          => 'checkbox',
    '#title'         => t('Pre-import mass deletion'),
    '#description'   => t('Delete old content before importing new data.'),
    '#default_value' => variable_get('node_import_truncate', '0'),
  );
  $form['submit'] = array(
    '#type'  => 'submit',
    '#value' => t('Submit'),
  );
  return $form;
}

/**
 * Implementation of hook_validate();
 */
function node_import_truncate_form_validate($form, $form_state) {
  if (!isset($form_state['values']['mass_delete'])) {
    form_set_error('mass_delete', t('Please choose an option'));
  }
}

/**
 * Handle post-validation form-submission.
 */
function node_import_truncate_form_submit($form, &$form_state) {
  $mass_delete = $form_state['values']['mass_delete'];
  variable_set('node_import_truncate', $mass_delete);

  if (isset($form_state['values']['taskid'])) {
    $taskid   = $form_state['values']['taskid'];
    $redirect = 'admin/content/node_import/' . $taskid;
  }
  else {
    $redirect = NULL;
  }

  if ($mass_delete == 1) {
    $task  = node_import_load($taskid);
    $type  = ereg_replace('.*:', '', $task['type']);
    $batch = array(
        'title'      => t('Deleting old data.'),
        'operations' => array(
          array('node_truncate', array($type)),
          ),
        'finished'   => 'node_truncate_callback',
        );

    batch_set($batch);
    batch_process($redirect);
  }
  else {
    drupal_goto($redirect);
  }
}

/**
 * Implementation of hook_node_import_task();
 *
 * As the user may be adding a spreadsheet containing
 * old and new content, we need to check whether to remove
 * all previous content to prevent duplicate data in the
 * database.
 */
function node_import_truncate_node_import_task($task, $op) {
  if ($op == 'insert') {
    drupal_goto('admin/content/node_import/truncate/' . $task['taskid']);
  }
}