Pour tout ça, je te dirai bien de garder ta structure actuelle, et que tes boutons gardent le submit, mais que tu leur ajoute une action, via une classe ou un id.
Du coup, lors du traitement, tu détecteras cette action, et tu traiteras en conséquence :
- dans le cas de l'aperçu, tu enregistre en base et tu redirect vers la page de l'aperçu
- dans le cas du brouillon, j'imagine que tu enregistres en base de la même façon, mais que tu ne redirige pas
- dans le cas de publier, tu enregistre différemment en base (table différente ou statut différent), et tu fais ce que tu veux