if ($application->approval_state > 0) {
    // Already finally approved or rejected?
    $message = get_string('application_unavailable', 'local_obu_application');
} else {
    $message = '';
}
$mform = new mdl_redirect_form(null, $parameters);
if ($mform->is_cancelled()) {
    redirect($home);
}
if ($mform_data = $mform->get_data()) {
    if ($mform_data->submitbutton == get_string('save', 'local_obu_application')) {
        if ($application->approval_level == 1) {
            $application->manager_email = $approver_email;
        } else {
            $application->funder_email = $approver_email;
        }
        update_application($application);
        update_approver($application, $approver_email);
        // Update the approvals and send notification emails
        redirect($home);
    }
}
echo $OUTPUT->header();
echo $OUTPUT->heading($heading);
if ($message) {
    notice($message, $url);
} else {
    $mform->display();
}
echo $OUTPUT->footer();
function update_workflow(&$application, $approved = true, $data = null)
{
    $approver_email = '';
    // Update the application record
    if ($application->approval_level == 0) {
        // Being submitted
        /*		$application->approval_level = 1;
        		$approver_email = $application->manager_email;
        	} else if ($application->approval_level == 1) { // Manager
        		$application->approval_1_comment = $data->comment;
        		$application->approval_1_date = time();
        		if (!$approved) {
        			$application->approval_state = 1; // Rejected
        		} else*/
        if ($application->self_funding == 0) {
            $application->approval_level = 2;
            // Funder
            $application->funding_id = $data->funding_organisation;
            if ($application->funding_id == 0) {
                // 'Other Organisation'
                $application->funding_organisation = '';
                $application->funder_email = $data->funder_email;
                // Must have been given
            } else {
                // A known organisation with a fixed email address
                $organisation = read_organisation($application->funding_id);
                $application->funding_organisation = $organisation->name;
                $application->funder_email = $organisation->email;
            }
            $approver_email = $application->funder_email;
        } else {
            $application->approval_level = 3;
            // Brookes
            $hls = get_complete_user_data('username', 'hls');
            $approver_email = $hls->email;
        }
    } else {
        if ($application->approval_level == 2) {
            // Funder
            $application->approval_2_comment = $data->comment;
            $application->approval_2_date = time();
            if (!$approved) {
                $application->approval_state = 1;
                // Rejected
            } else {
                $application->approval_level = 3;
                // Brookes
                // Store the funding details
                if ($application->funding_organisation != '') {
                    // NHS trust (previously selected by the manager)
                    $application->funding_method = $data->funding_method;
                    $application->funder_name = $data->funder_name;
                    if ($application->funding_method == 1) {
                        // Invoice
                        $application->invoice_ref = $data->invoice_ref;
                        $application->invoice_address = $data->invoice_address;
                        $application->invoice_email = $data->invoice_email;
                        $application->invoice_phone = $data->invoice_phone;
                        $application->invoice_contact = $data->invoice_contact;
                    }
                } else {
                    // Must be an invoice to a non-NHS organisation
                    $application->funding_method = 0;
                    $application->funding_organisation = $data->organisation;
                    $application->invoice_ref = $data->invoice_ref;
                    $application->invoice_address = $data->invoice_address;
                    $application->invoice_email = $data->invoice_email;
                    $application->invoice_phone = $data->invoice_phone;
                    $application->invoice_contact = $data->invoice_contact;
                }
                $hls = get_complete_user_data('username', 'hls');
                $approver_email = $hls->email;
            }
        } else {
            // Brookes
            $application->approval_3_comment = $data->comment;
            $application->approval_3_date = time();
            if (!$approved) {
                $application->approval_state = 1;
                // Rejected
            } else {
                $application->approval_state = 2;
                // It ends here
            }
        }
    }
    update_application($application);
    // Update the stored approval requests and send notification emails
    update_approver($application, $approver_email);
}