How to set the default options on an existing plugin in a WP MU new user install

At the top of the api.php page before the class JSON_API line add the following code:

add_action( 'wpmu_new_blog', 'wpse_set_defaults' );

function wpse_set_defaults( $blog_id ) {
    global $json_api;

    switch_to_blog( $blog_id );

    // set the default controllers here
    $required_controllers = explode(",", "categories,posts,user,attachments");

    $id = 'json_api_controllers';

    $available_controllers = $json_api->get_controllers();
    $active_controllers = explode(',', get_option($id, 'core'));
    $action = "activate";

    foreach ($required_controllers as $controller) {
        if (in_array($controller, $available_controllers)) {
            if ($action == 'activate' && !in_array($controller, $active_controllers)) {
                $active_controllers[] = $controller;
            } else if ($action == 'deactivate') {
                $index = array_search($controller, $active_controllers);
                if ($index !== false) {
                    unset($active_controllers[$index]);
                }
            }
        }
    }

    $value = implode(',', $active_controllers);

    // get option and set it
    $option_exists = (get_option($id, null) !== null);

    if ($option_exists) {
        update_option($id, $value);
    } else {
        add_option($id, $value);
    }

    restore_current_blog();
}

You can set other options here as well.

tech