/* * ENTWA_EVENT_TICKETS_AJAX_BRIDGE_001 * * Preserve Entawa Manager's screen-scoped security model for * Event Tickets AJAX requests. Event Tickets loads and edits the * ticket panel through admin-ajax.php, where the originating Events * screen is no longer available to the normal Manager screen bridge. * * Access is granted only when: * - the current user is Entawa Manager; * - the request is one of the approved Event Tickets AJAX actions; * - the parent object is a tribe_events post; * - the Events screen is explicitly enabled in Manager Access. */ function entwa_manager_screen_admin_event_tickets_ajax_caps( $allcaps, $caps, $args, $user ) { if ( ! $user instanceof WP_User || ! in_array( 'entawa_manager', (array) $user->roles, true ) ) { return $allcaps; } $doing_ajax = function_exists( 'wp_doing_ajax' ) ? wp_doing_ajax() : ( defined( 'DOING_AJAX' ) && DOING_AJAX ); if ( ! $doing_ajax ) { return $allcaps; } $action = sanitize_key( (string) ( $_REQUEST['action'] ?? '' ) ); $allowed_actions = array( 'tribe-ticket-panels', 'tribe-ticket-add', 'tribe-ticket-edit', 'tribe-ticket-delete', 'tribe-ticket-duplicate', ); if ( ! in_array( $action, $allowed_actions, true ) ) { return $allcaps; } $post_id = absint( $_REQUEST['post_id'] ?? 0 ); if ( ! $post_id || 'tribe_events' !== get_post_type( $post_id ) ) { return $allcaps; } if ( ! function_exists( 'entwa_manager_screen_admin_workspace' ) || ! function_exists( 'entwa_manager_screen_admin_post_type_screen' ) ) { return $allcaps; } $workspace = entwa_manager_screen_admin_workspace( $user ); if ( ! is_array( $workspace ) || ! entwa_manager_screen_admin_post_type_screen( 'tribe_events', $workspace ) ) { return $allcaps; } /* * WordPress edit_post() for a published event owned by another * user maps to these primitive event capabilities. * * Event Tickets additionally checks edit_event_tickets. * * These grants exist only for this approved AJAX request. */ foreach ( array( 'edit_tribe_events', 'edit_others_tribe_events', 'edit_published_tribe_events', 'edit_private_tribe_events', 'edit_event_tickets', ) as $capability ) { $allcaps[ $capability ] = true; } return $allcaps; } add_filter( 'user_has_cap', 'entwa_manager_screen_admin_event_tickets_ajax_caps', 999, 4 );