/**
  * The standard form definiton.
  * @return void.
  */
 public function definition()
 {
     $mform = $this->_form;
     $mform->addElement('submit', 'submit_button', get_string('back', 'tool_coursearchiver'));
     $data = $this->_customdata['processor_data'];
     $mform->addElement('hidden', 'formdata');
     $mform->setType('formdata', PARAM_RAW);
     $mform->setDefault('formdata', serialize($data['courses']));
     $mform->addElement('header', 'emaillist', get_string('emailselector', 'tool_coursearchiver'));
     // Do search here and display results.
     $processor = new tool_coursearchiver_processor(array("mode" => tool_coursearchiver_processor::MODE_GETEMAILS, "data" => $data["courses"]));
     $processor->execute(tool_coursearchiver_tracker::OUTPUT_HTML, null, $mform, $this);
     if ($processor->total > 0) {
         $buttonarray = array();
         $buttonarray[] =& $mform->createElement('submit', 'submit_button', get_string('hideemail', 'tool_coursearchiver'));
         $buttonarray[] =& $mform->createElement('submit', 'submit_button', get_string('archiveemail', 'tool_coursearchiver'));
         $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false);
         $mform->closeHeaderBefore('buttonar');
     }
     $this->set_data($data);
 }
                $processor = new tool_coursearchiver_processor(array("mode" => $mode, "data" => $owners));
                $processor->execute(tool_coursearchiver_tracker::OUTPUT_HTML);
                echo $OUTPUT->footer();
                break;
            case tool_coursearchiver_processor::MODE_HIDE:
            case tool_coursearchiver_processor::MODE_ARCHIVE:
                header('X-Accel-Buffering: no');
                echo $OUTPUT->header();
                echo $OUTPUT->heading_with_help(get_string('coursearchiver', 'tool_coursearchiver'), 'coursearchiver', 'tool_coursearchiver');
                $courses = unserialize($formdata);
                if (!is_array($courses) || empty($courses)) {
                    // If 0 courses are selected, show message and form again.
                    $returnurl = new moodle_url('/admin/tool/coursearchiver/step2.php', array("formdata" => $formdata, "error" => get_string('nocoursesselected', 'tool_coursearchiver')));
                    redirect($returnurl);
                }
                $processor = new tool_coursearchiver_processor(array("mode" => $mode, "data" => $courses));
                if (!empty($folder)) {
                    $processor->folder = $folder;
                }
                $processor->execute(tool_coursearchiver_tracker::OUTPUT_HTML, null);
                echo $OUTPUT->footer();
                break;
            default:
                $returnurl = new moodle_url('/admin/tool/coursearchiver/index.php', array("error" => get_string('unknownerror', 'tool_coursearchiver')));
                redirect($returnurl);
        }
    }
} else {
    if (!empty($formdata) && !empty($mode)) {
        // FORM 3 SUBMITTED, SHOW FORM 4.
        header('X-Accel-Buffering: no');
    case tool_coursearchiver_processor::MODE_ARCHIVE:
        $processor = new tool_coursearchiver_processor(array("mode" => $processoroptions['mode'], "data" => $courses));
        if (!empty($options['location'])) {
            $processor->folder = $options['location'];
        }
        $processor->execute(tool_coursearchiver_tracker::OUTPUT_CLI);
        break;
    case tool_coursearchiver_processor::MODE_HIDEEMAIL:
    case tool_coursearchiver_processor::MODE_ARCHIVEEMAIL:
        $owners = array();
        foreach ($selected as $s) {
            $t = explode("_", $s);
            if (count($t) == 2) {
                // Both a course and an owner are needed.
                if (array_key_exists($t[1], $owners)) {
                    $temp = $owners[$t[1]]['courses'];
                    $owners[$t[1]]['courses'] = array_merge($temp, array($t[0] => get_course($t[0])));
                } else {
                    $owners[$t[1]]['courses'] = array($t[0] => get_course($t[0]));
                    $owners[$t[1]]['user'] = $DB->get_record("user", array("id" => $t[1]));
                }
            }
        }
        $processor = new tool_coursearchiver_processor(array("mode" => $processoroptions['mode'], "data" => $owners));
        $processor->execute(tool_coursearchiver_tracker::OUTPUT_CLI);
        break;
    default:
        echo "\nFAILED TO CONTINUE";
        exit;
}
echo "\nFINISHED!";