123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513 |
- <?php
- function batch_test_menu() {
- $items = array();
- $items['batch-test'] = array(
- 'title' => 'Batch test',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('batch_test_simple_form'),
- 'access callback' => TRUE,
- );
-
- $items['batch-test/simple'] = array(
- 'title' => 'Simple',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => 0,
- );
-
- $items['batch-test/multistep'] = array(
- 'title' => 'Multistep',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('batch_test_multistep_form'),
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 1,
- );
-
- $items['batch-test/chained'] = array(
- 'title' => 'Chained',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('batch_test_chained_form'),
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 2,
- );
-
-
- $items['batch-test/programmatic'] = array(
- 'title' => 'Programmatic',
- 'page callback' => 'batch_test_programmatic',
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 3,
- );
-
- $items['batch-test/no-form'] = array(
- 'title' => 'Simple page',
- 'page callback' => 'batch_test_no_form',
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 4,
- );
-
- $items['batch-test/large-percentage'] = array(
- 'title' => 'Simple page with batch over 100% complete',
- 'page callback' => 'batch_test_large_percentage',
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 5,
- );
-
- $items['batch-test/nested-programmatic'] = array(
- 'title' => 'Nested programmatic',
- 'page callback' => 'batch_test_nested_drupal_form_submit',
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 6,
- );
-
- $items['batch-test/redirect'] = array(
- 'title' => 'Redirect',
- 'page callback' => 'batch_test_redirect_page',
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 7,
- );
-
- $items['admin/batch-test/test-theme'] = array(
- 'page callback' => 'batch_test_theme_batch',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
- return $items;
- }
- function batch_test_simple_form() {
- $form['batch'] = array(
- '#type' => 'select',
- '#title' => 'Choose batch',
- '#options' => array(
- 'batch_0' => 'batch 0',
- 'batch_1' => 'batch 1',
- 'batch_2' => 'batch 2',
- 'batch_3' => 'batch 3',
- 'batch_4' => 'batch 4',
- ),
- );
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => 'Submit',
- );
- return $form;
- }
- function batch_test_simple_form_submit($form, &$form_state) {
- batch_test_stack(NULL, TRUE);
- $function = '_batch_test_' . $form_state['values']['batch'];
- batch_set($function());
- $form_state['redirect'] = 'batch-test/redirect';
- }
- function batch_test_multistep_form($form, &$form_state) {
- if (empty($form_state['storage']['step'])) {
- $form_state['storage']['step'] = 1;
- }
- $form['step_display'] = array(
- '#markup' => 'step ' . $form_state['storage']['step'] . '<br/>',
- );
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => 'Submit',
- );
- return $form;
- }
- function batch_test_multistep_form_submit($form, &$form_state) {
- batch_test_stack(NULL, TRUE);
- switch ($form_state['storage']['step']) {
- case 1:
- batch_set(_batch_test_batch_1());
- break;
- case 2:
- batch_set(_batch_test_batch_2());
- break;
- }
- if ($form_state['storage']['step'] < 2) {
- $form_state['storage']['step']++;
- $form_state['rebuild'] = TRUE;
- }
-
- $form_state['redirect'] = 'batch-test/redirect';
- }
- function batch_test_chained_form() {
-
-
- $form['value'] = array(
- '#type' => 'textfield',
- '#title' => 'Value',
- '#default_value' => 1,
- );
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => 'Submit',
- );
- $form['#submit'] = array(
- 'batch_test_chained_form_submit_1',
- 'batch_test_chained_form_submit_2',
- 'batch_test_chained_form_submit_3',
- 'batch_test_chained_form_submit_4',
- );
- return $form;
- }
- function batch_test_chained_form_submit_1($form, &$form_state) {
- batch_test_stack(NULL, TRUE);
- batch_test_stack('submit handler 1');
- batch_test_stack('value = ' . $form_state['values']['value']);
- $form_state['values']['value']++;
- batch_set(_batch_test_batch_1());
-
- $form_state['redirect'] = 'should/be/discarded';
- }
- function batch_test_chained_form_submit_2($form, &$form_state) {
- batch_test_stack('submit handler 2');
- batch_test_stack('value = ' . $form_state['values']['value']);
- $form_state['values']['value']++;
- batch_set(_batch_test_batch_2());
-
- $form_state['redirect'] = 'should/be/discarded';
- }
- function batch_test_chained_form_submit_3($form, &$form_state) {
- batch_test_stack('submit handler 3');
- batch_test_stack('value = ' . $form_state['values']['value']);
- $form_state['values']['value']++;
-
- $form_state['redirect'] = 'should/be/discarded';
- }
- function batch_test_chained_form_submit_4($form, &$form_state) {
- batch_test_stack('submit handler 4');
- batch_test_stack('value = ' . $form_state['values']['value']);
- $form_state['values']['value']++;
- batch_set(_batch_test_batch_3());
-
- $form_state['redirect'] = 'batch-test/redirect';
- }
- function batch_test_programmatic($value = 1) {
- $form_state = array(
- 'values' => array('value' => $value)
- );
- drupal_form_submit('batch_test_chained_form', $form_state);
- return 'Got out of a programmatic batched form.';
- }
- function batch_test_nested_drupal_form_submit($value = 1) {
-
- $batch['operations'] = array(
- array('_batch_test_nested_drupal_form_submit_callback', array($value)),
- );
- batch_set($batch);
- batch_process('batch-test/redirect');
- }
- function _batch_test_nested_drupal_form_submit_callback($value) {
- $state['values']['test_value'] = $value;
- drupal_form_submit('batch_test_mock_form', $state);
- }
- function batch_test_mock_form($form, $form_state) {
- $form['test_value'] = array(
- '#type' => 'textfield',
- );
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Submit'),
- );
- return $form;
- }
- function batch_test_mock_form_submit($form, &$form_state) {
- batch_test_stack('mock form submitted with value = ' . $form_state['values']['test_value']);
- }
- function batch_test_no_form() {
- batch_test_stack(NULL, TRUE);
- batch_set(_batch_test_batch_1());
- batch_process('batch-test/redirect');
- }
- function batch_test_large_percentage() {
- batch_test_stack(NULL, TRUE);
- batch_set(_batch_test_batch_5());
- batch_process('batch-test/redirect');
- }
- function batch_test_redirect_page() {
- return 'Redirection successful.';
- }
- function _batch_test_batch_0() {
- $batch = array(
- 'operations' => array(),
- 'finished' => '_batch_test_finished_0',
- 'file' => drupal_get_path('module', 'batch_test'). '/batch_test.callbacks.inc',
- );
- return $batch;
- }
- function _batch_test_batch_1() {
-
- $total = 10;
- $sleep = (1000000 / $total) * 2;
- $operations = array();
- for ($i = 1; $i <= $total; $i++) {
- $operations[] = array('_batch_test_callback_1', array($i, $sleep));
- }
- $batch = array(
- 'operations' => $operations,
- 'finished' => '_batch_test_finished_1',
- 'file' => drupal_get_path('module', 'batch_test'). '/batch_test.callbacks.inc',
- );
- return $batch;
- }
- function _batch_test_batch_2() {
-
- $total = 10;
- $sleep = (1000000 / $total) * 2;
- $operations = array(
- array('_batch_test_callback_2', array(1, $total, $sleep)),
- );
- $batch = array(
- 'operations' => $operations,
- 'finished' => '_batch_test_finished_2',
- 'file' => drupal_get_path('module', 'batch_test') . '/batch_test.callbacks.inc',
- );
- return $batch;
- }
- function _batch_test_batch_3() {
-
- $total = 10;
- $sleep = (1000000 / $total) * 2;
- $operations = array();
- for ($i = 1; $i <= round($total / 2); $i++) {
- $operations[] = array('_batch_test_callback_1', array($i, $sleep));
- }
- $operations[] = array('_batch_test_callback_2', array(1, $total / 2, $sleep));
- for ($i = round($total / 2) + 1; $i <= $total; $i++) {
- $operations[] = array('_batch_test_callback_1', array($i, $sleep));
- }
- $operations[] = array('_batch_test_callback_2', array(6, $total / 2, $sleep));
- $batch = array(
- 'operations' => $operations,
- 'finished' => '_batch_test_finished_3',
- 'file' => drupal_get_path('module', 'batch_test') . '/batch_test.callbacks.inc',
- );
- return $batch;
- }
- function _batch_test_batch_4() {
-
- $total = 10;
- $sleep = (1000000 / $total) * 2;
- $operations = array();
- for ($i = 1; $i <= round($total / 2); $i++) {
- $operations[] = array('_batch_test_callback_1', array($i, $sleep));
- }
- $operations[] = array('_batch_test_nested_batch_callback', array());
- for ($i = round($total / 2) + 1; $i <= $total; $i++) {
- $operations[] = array('_batch_test_callback_1', array($i, $sleep));
- }
- $batch = array(
- 'operations' => $operations,
- 'finished' => '_batch_test_finished_4',
- 'file' => drupal_get_path('module', 'batch_test') . '/batch_test.callbacks.inc',
- );
- return $batch;
- }
- function _batch_test_batch_5() {
-
- $total = 10;
- $sleep = (1000000 / $total) * 2;
- $operations = array();
- for ($i = 1; $i <= $total; $i++) {
- $operations[] = array('_batch_test_callback_5', array($i, $sleep));
- }
- $batch = array(
- 'operations' => $operations,
- 'finished' => '_batch_test_finished_5',
- 'file' => drupal_get_path('module', 'batch_test'). '/batch_test.callbacks.inc',
- );
- return $batch;
- }
- function batch_test_theme_batch() {
- batch_test_stack(NULL, TRUE);
- $batch = array(
- 'operations' => array(
- array('_batch_test_theme_callback', array()),
- ),
- );
- batch_set($batch);
- batch_process('batch-test/redirect');
- }
- function _batch_test_theme_callback() {
-
-
-
-
-
- global $theme;
- batch_test_stack($theme);
- }
- function batch_test_stack($data = NULL, $reset = FALSE) {
- if ($reset) {
- variable_del('batch_test_stack');
- }
- if (!isset($data)) {
- return variable_get('batch_test_stack', array());
- }
- $stack = variable_get('batch_test_stack', array());
- $stack[] = $data;
- variable_set('batch_test_stack', $stack);
- }
|