function edgimo_register_waitlist_metabox()
{
    $prefix = '_waitlist_';
    $temp = get_posts(array('post_type' => 'activity', 'posts_per_page' => -1));
    $activities = array();
    foreach ($temp as $p) {
        $activities[$p->ID] = $p->post_title;
    }
    $cmb = new_cmb2_box(array('id' => $prefix . 'metabox', 'title' => __('Basic Waitlist Info', 'cmb2'), 'object_types' => array('waitlist'), 'context' => 'normal', 'priority' => 'high', 'show_names' => true));
    $cmb->add_field(array('name' => __('Activity', 'cmb2'), 'desc' => __('', 'cmb2'), 'id' => $prefix . 'activity', 'type' => 'select', 'options' => $activities));
    $cmb->add_field(array('name' => __('Contact Name', 'cmb2'), 'desc' => __('', 'cmb2'), 'id' => $prefix . 'name', 'type' => 'text'));
    $cmb->add_field(array('name' => __('Desired Seats', 'cmb2'), 'desc' => __('This is the maximum number of seats the user will be able to register for using their custom link. You may manually change it to limit their reservation.', 'cmb2'), 'id' => $prefix . 'desired_seats', 'type' => 'select', 'options' => AC::get_no_limit_registrant_count_array()));
    $cmb->add_field(array('name' => __('Waitlist Timestamp', 'cmb2'), 'desc' => __('', 'cmb2'), 'id' => $prefix . 'created', 'type' => 'text_datetime_timestamp'));
    $cmb->add_field(array('name' => __('Phone', 'cmb2'), 'desc' => __('', 'cmb2'), 'id' => $prefix . 'phone', 'type' => 'text'));
    $cmb->add_field(array('name' => __('Email', 'cmb2'), 'desc' => __('', 'cmb2'), 'id' => $prefix . 'email', 'type' => 'text'));
    $cmb->add_field(array('name' => __('Code', 'cmb2'), 'desc' => __('', 'cmb2'), 'id' => $prefix . 'code', 'type' => 'text'));
    $cmb->add_field(array('name' => __('Link Redeemed', 'cmb2'), 'desc' => __('This will automatically be set to Yes when the link has been used to successfully register.<br />You may manually change it to close or re-open the link.', 'cmb2'), 'id' => $prefix . 'redeemed', 'default' => 'false', 'type' => 'radio', 'options' => array('true' => 'Yes', 'false' => 'No')));
    $cmb->add_field(array('name' => __('Reservation ID', 'cmb2'), 'desc' => __('If the registration link was redeemed, this is the ID of the reservation created by it', 'cmb2'), 'id' => $prefix . 'reservation', 'type' => 'text'));
    $cmb->add_field(array('name' => __('Notes', 'cmb2'), 'desc' => __('Anything entered here will be visible only to admins', 'cmb2'), 'id' => $prefix . 'notes', 'type' => 'textarea'));
}
 public static function generate_waitlist_fields()
 {
     $fields = array('name' => array('label' => 'Contact Name', 'type' => 'text', 'validate' => 'required', 'filter' => 'trim|sanitize_string'), 'desired_seats' => array('label' => 'Number of Seats Desired', 'type' => 'select', 'options' => AC::get_no_limit_registrant_count_array(), 'validate' => 'required', 'filter' => 'trim|sanitize_string'), 'phone_1' => array('label' => 'Phone Number', 'type' => 'text', 'validate' => 'required|exact_len,3|numeric', 'filter' => 'trim|sanitize_string'), 'phone_2' => array('label' => 'Phone Number', 'type' => 'text', 'validate' => 'required|exact_len,3|numeric', 'filter' => 'trim|sanitize_string'), 'phone_3' => array('label' => 'Phone Number', 'type' => 'text', 'validate' => 'required|exact_len,4|numeric', 'filter' => 'trim|sanitize_string'), 'email' => array('label' => 'Email', 'type' => 'text', 'validate' => 'required|valid_email', 'filter' => 'trim|sanitize_string'));
     AC::$fields = $fields;
 }