L'utilisateur est authentifié, il a mis à jour son profil, et le récupère à chaque nouvelle connexion.
Dans notre application, l'utilisateur peut ajouter un film dans une liste. C'est équivalent pour la publication d'un article, ou post dans une liste ou une file d'actualité.
Un bouton "+" est ajouter à la liste, pour afficher une vue avec des textFields, une image, et des boutons pour "annuler", "ajouter une image", et "envoyer" la fiche du film.
Les @IBOutels sont créés dans un nouveau fichier "AddMovieController", dans lequel est placé en extension un imagePicker (comme pour l'image de profil). Le bouton "annuler" est implémenté avec la méthode "dismiss()", pour revenir à la liste.
Le bouton "Ajouter Photo" est implémenté avec la méthode "movieImageAlert()" (identique à l'ajout d'une image de profil)
class AddMovieController: RootController {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var titleTF: UITextField!
@IBOutlet weak var partTF: UITextField!
@IBOutlet weak var yearTF: UITextField!
@IBOutlet weak var directorTF: UITextField!
@IBOutlet weak var pitchTV: UITextView!
override func viewDidLoad() {
}
@IBAction func dismissPopup(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
@IBAction func addMovieImage(_ sender: UIButton) {
movieImageAlert()
}
@IBAction func sendMovie(_ sender: UIButton) {
}
func movieImageAlert() {
let photoSourceController = UIAlertController(title: "", message: "Choississez votre image", preferredStyle: .actionSheet)
....
Ajouter la méthode "touchBegan" pour cacher le clavier après la saisie :
// cache le clavier
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
CREATION DE LA METHODE POUR ENVOYER UN OBJET:
Dans "FireDatabase.swift", ajouter le chemin à la base de données des films (comme pour "users") :
// chemin d'accès à la collection nommé "movies"
var moviesCollection: CollectionReference {
return base.collection("movies")
}
Puis créer une méthode pour ajouter les données de l'objet dans cette base de données :
//pour envoyer un movie sur la database
func addMovie(_ data: [String: Any]) {
moviesCollection.document().setData(data)
}
IMPLEMENTATION DU BOUTON ENVOYER
@IBAction func sendMovie(_ sender: UIButton) {
guard let uid = FireAuth().myId() else { return }
//vérifier qu'il y a au moins un champ complété ou une image
if imageView.image != nil || titleTF.text != "" || partTF.text != "" || yearTF.text != "" || directorTF.text != "" || pitchTV.text != "" {
//récupération de la date du jour
let date = Date().timeIntervalSince1970
//création du tableau de données
var data: [String: Any] = [
"titre": titleTF.text ?? "",
"part": partTF.text ?? "",
"year": yearTF.text ?? "",
"director": directorTF.text ?? "",
"pitch": pitchTV.text ?? "",
"uid": uid
]
//si il n'y a pas d'image, les données peuvent être envoyer à database Firestore
if imageView.image == nil {
FireDatabase().addMovie(data)
} else {
// il y a une image, on l'envoi sur Storage et on récupére son url
let ref = FireStorage().affiche(uid, date)
FireStorage().sendImageToFirebase(ref, imageView.image!) { (imageUrl, error) in
if let urlString = imageUrl {
data["movieImageUrl"] = urlString // on compléte le tableau de données avec l'url récupéré
FireDatabase().addMovie(data) // on envoi les données
}
}
}
} else {
showAlert("erreur", "Pour envoyer un film, renseigner au moins un élément ou prenez une photo")
}
}
Après avoir renseigné au moins un champ, ou pris une photo, le bouton "envoyer" est actif.
Sur la console Firebase, il y a maintenant dans le Firestore, une nouvelle collection nommée "Movies", où apparaît le film qui vient d'être créé, et dans Storage, une nouvelle collection "Affiche" avec l'image associée.