function opf_controller($arg, $opt = null, $module = '', $page_id = 0, $section_id = 0)
{
    global $wb;
    if (defined('PAGE_ID') && $page_id == 0) {
        $page_id = PAGE_ID;
    }
    opf_preload_filter_definitions();
    switch ($arg) {
        case 'init':
            // moved this to above but keeping the option for explicit initialization
            break;
        case 'page':
            opf_apply_filters($opt, OPF_TYPE_PAGE, FALSE, $page_id, FALSE, $wb);
            opf_apply_filters($opt, OPF_TYPE_PAGE_LAST, FALSE, $page_id, FALSE, $wb);
            opf_insert_frontend_files($opt);
            return $opt;
            break;
        case 'section':
            opf_apply_filters($opt, OPF_TYPE_SECTION, $module, $page_id, $section_id, $wb);
            opf_apply_filters($opt, OPF_TYPE_SECTION_LAST, $module, $page_id, $section_id, $wb);
            return $opt;
            break;
        case 'backend':
            if (!defined("WB_OPF_BE_OFF")) {
                if ($module == "") {
                    opf_apply_filters($opt, OPF_TYPE_PAGE, FALSE, 'backend', 0, $wb);
                    opf_apply_filters($opt, OPF_TYPE_PAGE_LAST, FALSE, 'backend', 0, $wb);
                } else {
                    opf_apply_filters($opt, OPF_TYPE_SECTION, $module, 'backend', 0, $wb);
                    opf_apply_filters($opt, OPF_TYPE_SECTION_LAST, $module, 'backend', 0, $wb);
                }
            }
            return $opt;
            break;
        case 'special':
            foreach (opf_apply_get_modules($page_id) as $module) {
                opf_apply_filters($opt, OPF_TYPE_SECTION, $module['module'], $page_id, $module['section_id'], $wb);
                opf_apply_filters($opt, OPF_TYPE_SECTION_LAST, $module['module'], $page_id, $module['section_id'], $wb);
            }
            return $opt;
            break;
        default:
            return $opt;
    }
}
$filter_type_options = '';
foreach ($types as $value => $text) {
    $filter_type_options .= "<option value=\"{$value}\" ";
    if ($type == $value) {
        $filter_type_options .= 'selected="selected"';
    }
    $filter_type_options .= ">" . opf_quotes($text) . "</option>";
}
if ($helppath) {
    $helppath_onclick = "javascript: return opf_popup('{$helppath}');";
} else {
    $helppath_onclick = '';
}
// fill target checkbox-trees.
$mlist = $plist1 = $plist2 = '';
opf_preload_filter_definitions();
if ($allowedit == 0 && $allowedittarget == 0) {
    // We can't use disabled or readonly with checkbox-tree, so just list the modules
    $mlist = opf_make_modules_checktree($modules, 'flat');
    // pages_parent
    $plist1 = opf_make_pages_parent_checktree($pages_parent, $pages, 'flat');
    // pages
} else {
    $mlist = opf_make_modules_checktree($modules, 'tree');
    $plist1 = opf_make_pages_parent_checktree($pages_parent, $pages, 'tree');
}
// do we have to display additional_fields?
$list_growfield = array();
$list_editarea = array();
$extra_fields = array();
if (!empty($additional_fields)) {