getInputs(); $name = $inputs['name'] ?? 'unknown'; $email = $inputs['email'] ?? ''; return sprintf( 'Create organizer "%s"%s', $name, $email ? " ({$email})" : '' ); } /** * Human-readable version of tool inputs for the approval card. * Resolves event_id to event title. * * @return array */ public function get_approval_inputs(): array { $inputs = $this->getInputs(); if ( ! empty( $inputs['event_id'] ) ) { $post = get_post( (int) $inputs['event_id'] ); if ( $post ) { $inputs['event'] = $post->post_title . ' (ID: ' . $inputs['event_id'] . ')'; } unset( $inputs['event_id'] ); } return $inputs; } /** * Execute the tool * * @param string $name Organizer full name. * @param string $email Organizer email. * @param string|null $designation Job title. * @param string|null $company_name Company name. * @param string|null $summary Short bio. * @param int|null $event_id Event to link the organizer to. * @return array */ public function __invoke( string $name, string $email, ?string $designation = null, ?string $company_name = null, ?string $summary = null, ?int $event_id = null ): array { $check = $this->guard( 'etn_manage_organizer', 'etn_manage_event' ); if ( $check ) { return $check; } try { if ( empty( trim( $name ) ) ) { return [ 'error' => 'Organizer name is required.' ]; } if ( ! is_email( $email ) ) { return [ 'error' => 'A valid email address is required.' ]; } $body = [ 'name' => sanitize_text_field( $name ), 'email' => sanitize_email( $email ), 'category' => [ 'organizer' ], ]; if ( null !== $designation ) { $body['designation'] = sanitize_text_field( $designation ); } if ( null !== $company_name ) { $body['company_name'] = sanitize_text_field( $company_name ); } if ( null !== $summary ) { $body['summary'] = wp_kses_post( $summary ); } $request = new \WP_REST_Request( 'POST' ); $request->set_header( 'content-type', 'application/json' ); $request->set_body( wp_json_encode( $body ) ); $response = ( new \Eventin\Speaker\Api\SpeakerController() )->create_item( $request ); if ( is_wp_error( $response ) ) { return [ 'error' => $response->get_error_message() ]; } $user_id = (int) ( $response->get_data()['id'] ?? 0 ); if ( ! $user_id ) { return [ 'error' => 'Failed to create organizer. Eventin did not return a valid user ID.' ]; } if ( ! empty( $event_id ) && $event_id > 0 ) { $existing = get_post_meta( $event_id, 'etn_event_organizer', true ); $existing = is_array( $existing ) ? $existing : []; $existing[] = $user_id; update_post_meta( $event_id, 'etn_event_organizer', array_unique( $existing ) ); } return [ 'success' => true, 'organizer_id' => $user_id, 'message' => "Organizer \"{$name}\" created (ID: {$user_id}).", ]; } catch ( \Exception $e ) { Log::error( 'Eventin_Create_Organizer_Tool error', [ 'error' => $e->getMessage() ] ); return [ 'error' => 'Failed to create organizer: ' . $e->getMessage() ]; } } }