getInputs(); $name = trim( ( $inputs['first_name'] ?? '' ) . ' ' . ( $inputs['last_name'] ?? '' ) ); $name = '' !== $name ? $name : '(unnamed)'; $email = $inputs['email'] ?? '?'; return "Create team member {$name} <{$email}>"; } /** * Human-readable inputs shown in the approval card table. * * @return array */ public function get_approval_inputs(): array { return $this->getInputs(); } /** * Execute the tool after human approval. * * @param string $first_name First name. * @param string $email Email address. * @param string|null $last_name Last name. * @param string|null $phone Phone number. * @return array */ public function __invoke( string $first_name, string $email, ?string $last_name = null, ?string $phone = null ): array { $check = $this->guard_admin(); if ( $check ) { return $check; } if ( empty( trim( $first_name ) ) ) { return [ 'error' => 'first_name is required.' ]; } if ( ! is_email( $email ) ) { return [ 'error' => 'A valid email address is required.' ]; } if ( email_exists( $email ) ) { return [ 'error' => "A WordPress user with the email {$email} already exists. Use a different email." ]; } try { $body = [ 'first_name' => sanitize_text_field( $first_name ), 'email' => sanitize_email( $email ), ]; if ( null !== $last_name ) { $body['last_name'] = sanitize_text_field( $last_name ); } if ( null !== $phone ) { $body['phone'] = sanitize_text_field( $phone ); } $request = $this->build_json_request( 'POST', '/booktics/v1/team-members', $body ); if ( is_array( $request ) ) { return $request; } $controller = new \Booktics\Team_Member\Controllers\Team_Member_Controller(); $data = $this->extract_response( $controller->create_item( $request ), 'Failed to create team member.' ); if ( isset( $data['error'] ) ) { return $data; } $id = (int) ( $data['id'] ?? ( $data['ID'] ?? 0 ) ); if ( $id <= 0 ) { Log::error( 'Booktics_Create_Team_Member_Tool got a success response without an ID', [ 'data_keys' => array_keys( $data ) ] ); return [ 'error' => 'The team member may not have been created; Booktics returned no ID. Please verify in Booktics before retrying.' ]; } return [ 'success' => true, 'team_member' => $this->shape_team_member( $data ), 'message' => "Team member created successfully (ID: {$id}). An invite email was sent to {$email}.", ]; } catch ( \Throwable $e ) { Log::error( 'Booktics_Create_Team_Member_Tool error', [ 'error' => $e->getMessage() ] ); return [ 'error' => 'Failed to create team member: ' . $e->getMessage() ]; } } }