null,'email'=>null,'note'=>null,'is_active'=>true],$current,$input); $data['display_name']=MembershipValidator::text($data['display_name']??null,'display_name',190); $data['phone']=MembershipValidator::text($data['phone'],'phone',50,true); $data['email']=self::email($data['email']); $data['note']=BookingValidator::note($data['note'],'note'); $data['is_active']=CatalogValidator::boolean($data['is_active'],'is_active');return $data; } public static function email(mixed $value): ?string { $value=MembershipValidator::text($value,'email',190,true);if(null===$value)return null; if(!is_email($value))CatalogValidator::invalid('email',__('Enter a valid email address.','abece-booking'));return sanitize_email($value); } public function search(mixed $query): array { $query=MembershipValidator::text($query,'q',190);if(mb_strlen($query)<2)CatalogValidator::invalid('q',__('Enter at least two characters.','abece-booking')); return $this->repository->search($query); } public function delete(int $id): void {throw new CatalogException('abece_booking_deactivate_contact',__('Deactivate external contacts instead of deleting them.','abece-booking'),405);} }