Bristol councilman posts public apology admitting ethics violation