Advertisement
Guest User

ViewExtensionBenBranch

a guest
Apr 17th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 16.73 KB | None | 0 0
  1. //
  2. //  File.swift
  3. //  projet-session-ios
  4. //
  5. //  Created by Benoit Vézina on 2019-03-31.
  6. //  Copyright © 2019 com.dmi.uqtr. All rights reserved.
  7. //
  8.  
  9. import Foundation
  10. import UIKit
  11. import CoreData
  12.  
  13. extension UIViewController {
  14.    
  15.     /******************* FETCH ********************/
  16.    
  17.     func fetchAllUsers() -> [UtilisateurMO]? {
  18.         let core = getPersistentContainerAndMoc()
  19.         let moc = core.1
  20.        
  21.         let fetch = NSFetchRequest<UtilisateurMO>(entityName: "Utilisateur")
  22.         var users = [UtilisateurMO]()
  23.         do {
  24.             let results = try moc.fetch(fetch)
  25.             if results.count < 1 {
  26.                 // TODO erreur fetch core data
  27.             }
  28.             users = results
  29.         } catch {
  30.             fatalError("Failed to fetch verif: \(error)")
  31.         }
  32.         return users
  33.     }
  34.    
  35.     func fetchUser(email: String) -> UtilisateurMO? {
  36.         let core = getPersistentContainerAndMoc()
  37.         let moc = core.1
  38.        
  39.         let fetch = NSFetchRequest<UtilisateurMO>(entityName: "Utilisateur")
  40.         fetch.predicate = NSPredicate(format: "courriel == %@", email)
  41.         let user:UtilisateurMO
  42.         do {
  43.             let results = try moc.fetch(fetch)
  44.             if results.count < 1 {
  45.                 return nil
  46.             }
  47.             user = results[0]
  48.         } catch {
  49.             fatalError("Failed to fetch verif: \(error)")
  50.         }
  51.         return user
  52.     }
  53.    
  54.     func fetchCurrentUser() -> UtilisateurMO?
  55.     {
  56.         let core = getPersistentContainerAndMoc()
  57.         let moc = core.1
  58.        
  59.         let emailObject = UserDefaults.standard.object(forKey: "email") as? String
  60.         if emailObject == nil {
  61.             return nil
  62.         }
  63.         let email:String = emailObject!
  64.        
  65.         let fetch = NSFetchRequest<UtilisateurMO>(entityName: "Utilisateur")
  66.         fetch.predicate = NSPredicate(format: "courriel == %@", email)
  67.         let user:UtilisateurMO
  68.         do {
  69.             let results = try moc.fetch(fetch)
  70.             if results.count < 1 {
  71.                 // TODO erreur fetch core data
  72.             }
  73.             user = results[0]
  74.         } catch {
  75.             fatalError("Failed to fetch verif: \(error)")
  76.         }
  77.         return user
  78.     }
  79.    
  80.     func fetchAllLogements() -> [LogementMO]? {
  81.         let core = getPersistentContainerAndMoc()
  82.         let moc = core.1
  83.        
  84.         let fetch = NSFetchRequest<LogementMO>(entityName: "Logement")
  85.         var logements = [LogementMO]()
  86.         do {
  87.             let results = try moc.fetch(fetch)
  88.             logements = results
  89.         } catch {
  90.             fatalError("Failed to fetch verif: \(error)")
  91.         }
  92.         return logements
  93.     }
  94.    
  95.     func fetchConversationById(id: NSManagedObjectID) -> ConversationMO {
  96.         let core = getPersistentContainerAndMoc()
  97.         let moc = core.1
  98.        
  99.         let conversation = moc.object(with: id) as! ConversationMO
  100.        
  101.         return conversation
  102.     }
  103.    
  104.     func fetchAllMessages() -> [MessageMO]? {
  105.         let core = getPersistentContainerAndMoc()
  106.         let moc = core.1
  107.        
  108.         let fetch = NSFetchRequest<MessageMO>(entityName: "Message")
  109.         var messages = [MessageMO]()
  110.         do {
  111.             let results = try moc.fetch(fetch)
  112.             messages = results
  113.         } catch {
  114.             fatalError("Failed to fetch verif: \(error)")
  115.         }
  116.         return messages
  117.     }
  118.    
  119.     func fetchMessagesByConversationId(id: NSManagedObjectID) -> [MessageMO]? {
  120.         let core = getPersistentContainerAndMoc()
  121.         let moc = core.1
  122.        
  123.         let conversation = moc.object(with: id) as! ConversationMO
  124.         let messagesObject = conversation.messages
  125.         if messagesObject == nil {
  126.             return nil
  127.         }
  128.         let messagesArray = Array(messagesObject!)
  129.         let messages = messagesArray as! [MessageMO]
  130.        
  131.         return messages
  132.     }
  133.    
  134.     func fetchMessagesByUsersPrenom(prenom1: String, prenom2: String) -> [MessageMO]? {
  135.         var messagesToReturn = [MessageMO]()
  136.         let messagesObject = fetchAllMessages()
  137.         if messagesObject == nil {
  138.             return nil
  139.         }
  140.         let messages = messagesObject!
  141.         for aMessage in messages {
  142.             let isTo = aMessage.to == prenom1 || aMessage.to == prenom2
  143.             let isFrom = aMessage.from == prenom1 || aMessage.from == prenom2
  144.             if isTo && isFrom {
  145.                 messagesToReturn.append(aMessage)
  146.             }
  147.         }
  148.        
  149.         return messagesToReturn
  150.     }
  151.    
  152.     /******************* INSERT ********************/
  153.    
  154.     func insertUser(fname: String, lname: String, tel: String, email: String, password: String) {
  155.         let core = getPersistentContainerAndMoc()
  156.         let moc = core.1
  157.        
  158.         let user = NSEntityDescription.insertNewObject(forEntityName:
  159.             "Utilisateur", into: moc) as! UtilisateurMO
  160.         user.setValue(fname, forKey: "prenom")
  161.         user.setValue(lname, forKey: "nom")
  162.         user.setValue(password, forKey: "password")
  163.         user.setValue(email, forKey: "courriel")
  164.         user.setValue(tel, forKey: "telephone")
  165.         do {
  166.             try moc.save()
  167.         } catch {
  168.             let nserror = error as NSError
  169.             fatalError("error \(nserror), \(nserror.userInfo)")
  170.         }
  171.     }
  172.    
  173.     func insertMessage(to: String, from: String, contenu: String, date: String, conversationId: NSManagedObjectID) -> MessageMO {
  174.         let core = getPersistentContainerAndMoc()
  175.         let moc = core.1
  176.        
  177.         let message = NSEntityDescription.insertNewObject(forEntityName: "Message", into: moc) as! MessageMO
  178.         message.setValue(to, forKey: "to")
  179.         message.setValue(from, forKey: "from")
  180.         message.setValue(contenu, forKey: "contenu")
  181.         if date == "" {
  182.             message.setValue(getDate(), forKey: "date")
  183.         } else {
  184.             message.setValue(date, forKey: "date")
  185.         }
  186.        
  187.         let conversation = moc.object(with: conversationId) as! ConversationMO
  188.         conversation.messages!.adding(message)
  189.        
  190.        
  191.        
  192.         do {
  193.             try moc.save()
  194.         } catch {
  195.             let nserror = error as NSError
  196.             fatalError("error \(nserror), \(nserror.userInfo)")
  197.         }
  198.        
  199.         return message
  200.     }
  201.    
  202.     /******************* DELETE ********************/
  203.    
  204.     func deleteAll() {
  205.         deleteAllUsers()
  206.         deleteAllLogement()
  207.         deleteAllConversation()
  208.         deleteAllMessage()
  209.     }
  210.    
  211.     func deleteAllUsers() {
  212.         let core = getPersistentContainerAndMoc()
  213.         let moc = core.1
  214.        
  215.         let fetch = NSFetchRequest<UtilisateurMO>(entityName: "Utilisateur")
  216.         var users = [UtilisateurMO]()
  217.         do {
  218.             let results = try moc.fetch(fetch)
  219.             if results.count < 1 {
  220.                 // TODO erreur fetch core data
  221.             }
  222.             users = results
  223.         } catch {
  224.             fatalError("Failed to fetch verif: \(error)")
  225.         }
  226.        
  227.         for user in users {
  228.             moc.delete(user)
  229.         }
  230.         do {
  231.             try moc.save()
  232.         } catch {
  233.             let nserror = error as NSError
  234.             fatalError("error \(nserror), \(nserror.userInfo)")
  235.         }
  236.     }
  237.    
  238.     func deleteAllLogement() {
  239.         let core = getPersistentContainerAndMoc()
  240.         let moc = core.1
  241.        
  242.         let fetch = NSFetchRequest<LogementMO>(entityName: "Logement")
  243.         var logements = [LogementMO]()
  244.         do {
  245.             let results = try moc.fetch(fetch)
  246.             if results.count < 1 {
  247.                 // TODO erreur fetch core data
  248.             }
  249.             logements = results
  250.         } catch {
  251.             fatalError("Failed to fetch verif: \(error)")
  252.         }
  253.        
  254.         for logement in logements {
  255.             moc.delete(logement)
  256.         }
  257.         do {
  258.             try moc.save()
  259.         } catch {
  260.             let nserror = error as NSError
  261.             fatalError("error \(nserror), \(nserror.userInfo)")
  262.         }
  263.     }
  264.    
  265.     func deleteAllConversation() {
  266.         let core = getPersistentContainerAndMoc()
  267.         let moc = core.1
  268.        
  269.         let fetch = NSFetchRequest<ConversationMO>(entityName: "Conversation")
  270.         var conversations = [ConversationMO]()
  271.         do {
  272.             let results = try moc.fetch(fetch)
  273.             if results.count < 1 {
  274.                 // TODO erreur fetch core data
  275.             }
  276.             conversations = results
  277.         } catch {
  278.             fatalError("Failed to fetch verif: \(error)")
  279.         }
  280.        
  281.         for conversation in conversations {
  282.             moc.delete(conversation)
  283.         }
  284.         do {
  285.             try moc.save()
  286.         } catch {
  287.             let nserror = error as NSError
  288.             fatalError("error \(nserror), \(nserror.userInfo)")
  289.         }
  290.     }
  291.    
  292.     func deleteAllMessage() {
  293.         let core = getPersistentContainerAndMoc()
  294.         let moc = core.1
  295.        
  296.         let fetch = NSFetchRequest<MessageMO>(entityName: "Message")
  297.         var messages = [MessageMO]()
  298.         do {
  299.             let results = try moc.fetch(fetch)
  300.             if results.count < 1 {
  301.                 // TODO erreur fetch core data
  302.             }
  303.             messages = results
  304.         } catch {
  305.             fatalError("Failed to fetch verif: \(error)")
  306.         }
  307.        
  308.         for message in messages {
  309.             moc.delete(message)
  310.         }
  311.         do {
  312.             try moc.save()
  313.         } catch {
  314.             let nserror = error as NSError
  315.             fatalError("error \(nserror), \(nserror.userInfo)")
  316.         }
  317.     }
  318.    
  319.     /******************* ORDER ********************/
  320.    
  321.     func orderConversationArrayByDate(conversations: [ConversationMO]) -> [ConversationMO] {
  322.         var orderedArray = [ConversationMO]()
  323.         var tempArray = conversations
  324.         var mostRecent = tempArray[0]
  325.         var mostRecentIndex = 0
  326.        
  327.         while orderedArray.count < conversations.count {
  328.             for (key, conversation) in tempArray.enumerated() {
  329.                 if conversation.date_dernier_message! < mostRecent.date_dernier_message! {
  330.                     mostRecent = conversation
  331.                     mostRecentIndex = key
  332.                 }
  333.             }
  334.             orderedArray.append(mostRecent)
  335.             tempArray.remove(at: mostRecentIndex)
  336.             if tempArray.count > 0 {
  337.                 mostRecent = tempArray[0]
  338.                 mostRecentIndex = 0
  339.             }
  340.         }
  341.        
  342.         return orderedArray
  343.     }
  344.    
  345.     /******************* MISC ********************/
  346.    
  347.     func insertDefaultEntities()
  348.     {
  349.         let core = getPersistentContainerAndMoc()
  350.         let moc = core.1
  351.        
  352.         var messages1 = [MessageMO]()
  353.        
  354.         let message1 = NSEntityDescription.insertNewObject(forEntityName: "Message", into: moc) as! MessageMO
  355.         message1.setValue("nathan", forKey: "to")
  356.         message1.setValue("ben", forKey: "from")
  357.         message1.setValue("Bienvenue sur LogEtudiant!", forKey: "contenu")
  358.         message1.setValue(getDate(), forKey: "date")
  359.         messages1.append(message1)
  360.        
  361.         let message2 = NSEntityDescription.insertNewObject(forEntityName: "Message", into: moc) as! MessageMO
  362.         message2.setValue("ben", forKey: "to")
  363.         message2.setValue("nathan", forKey: "from")
  364.         message2.setValue("Merci!", forKey: "contenu")
  365.         message2.setValue(getDate(), forKey: "date")
  366.         messages1.append(message2)
  367.        
  368.         var messages2 = [MessageMO]()
  369.        
  370.         let message3 = NSEntityDescription.insertNewObject(forEntityName: "Message", into: moc) as! MessageMO
  371.         message3.setValue("ben", forKey: "to")
  372.         message3.setValue("alex", forKey: "from")
  373.         message3.setValue("Hey ben!", forKey: "contenu")
  374.         message3.setValue(getDate(), forKey: "date")
  375.         messages2.append(message3)
  376.        
  377.         let message4 = NSEntityDescription.insertNewObject(forEntityName: "Message", into: moc) as! MessageMO
  378.         message4.setValue("alex", forKey: "to")
  379.         message4.setValue("ben", forKey: "from")
  380.         message4.setValue("Yo alex!", forKey: "contenu")
  381.         message4.setValue(getDate(), forKey: "date")
  382.         messages2.append(message4)
  383.        
  384.         var conversationsBen = [ConversationMO]()
  385.         var conversationsNat = [ConversationMO]()
  386.         var conversationsAlex = [ConversationMO]()
  387.        
  388.         let conversation1 = NSEntityDescription.insertNewObject(forEntityName: "Conversation", into: moc) as! ConversationMO
  389.         let messagesSet1 = NSSet(array: messages1)
  390.         conversation1.setValue(messagesSet1, forKey: "messages")
  391.         conversation1.setValue(getDate(), forKey: "date_dernier_message")
  392.         conversationsBen.append(conversation1)
  393.         conversationsNat.append(conversation1)
  394.        
  395.         let conversation2 = NSEntityDescription.insertNewObject(forEntityName: "Conversation", into: moc) as! ConversationMO
  396.         let messagesSet2 = NSSet(array: messages2)
  397.         conversation2.setValue(messagesSet2, forKey: "messages")
  398.         conversation2.setValue("2018-04-14 23:59", forKey: "date_dernier_message")
  399.         conversationsBen.append(conversation2)
  400.         conversationsAlex.append(conversation2)
  401.        
  402.         let ben = NSEntityDescription.insertNewObject(forEntityName:
  403.             "Utilisateur", into: moc) as! UtilisateurMO
  404.         ben.setValue("ben", forKey: "prenom")
  405.         ben.setValue("vez", forKey: "nom")
  406.         ben.setValue("123", forKey: "password")
  407.         ben.setValue("bmail", forKey: "courriel")
  408.         ben.setValue("123456789", forKey: "telephone")
  409.         var conversationsSet = NSSet(array: conversationsBen)
  410.         ben.setValue(conversationsSet, forKey: "conversations")
  411.        
  412.         let nathan = NSEntityDescription.insertNewObject(forEntityName:
  413.             "Utilisateur", into: moc) as! UtilisateurMO
  414.         nathan.setValue("nathan", forKey: "prenom")
  415.         nathan.setValue("sic", forKey: "nom")
  416.         nathan.setValue("123", forKey: "password")
  417.         nathan.setValue("nmail", forKey: "courriel")
  418.         nathan.setValue("24781864", forKey: "telephone")
  419.         conversationsSet = NSSet(array: conversationsNat)
  420.         nathan.setValue(conversationsSet, forKey: "conversations")
  421.        
  422.         let alex = NSEntityDescription.insertNewObject(forEntityName:
  423.             "Utilisateur", into: moc) as! UtilisateurMO
  424.         alex.setValue("alex", forKey: "prenom")
  425.         alex.setValue("duh", forKey: "nom")
  426.         alex.setValue("123", forKey: "password")
  427.         alex.setValue("amail", forKey: "courriel")
  428.         alex.setValue("846849548", forKey: "telephone")
  429.         conversationsSet = NSSet(array: conversationsAlex)
  430.         alex.setValue(conversationsSet, forKey: "conversations")
  431.        
  432.         do {
  433.             try moc.save()
  434.             print("Comptes préféfinis: \nemail: bmail, mdp: 123\nemail: nmail, mdp: 123\nemail: amail, mdp: 123")
  435.         } catch {
  436.             let nserror = error as NSError
  437.             fatalError("error \(nserror), \(nserror.userInfo)")
  438.         }
  439.     }
  440.    
  441.     /******************* PRIVATE ********************/
  442.    
  443.     private func getDate() -> String
  444.     {
  445.         let date = Date()
  446.         let calendar = Calendar.current
  447.         let year = calendar.component(.year, from: date)
  448.         let month = calendar.component(.month, from: date)
  449.         let monthDoubleDigit = month < 10 ? "0" : ""
  450.         let day = calendar.component(.day, from: date)
  451.         let dayDoubleDigit = day < 10 ? "0" : ""
  452.         let hour = calendar.component(.hour, from: date)
  453.         let hourDoubleDigit = hour < 10 ? "0" : ""
  454.         let minutes = calendar.component(.minute, from: date)
  455.         let minuteDoubleDigit = minutes < 10 ? "0" : ""
  456.         let dateString = "\(year)-\(monthDoubleDigit)\(month)-\(dayDoubleDigit)\(day) \(hourDoubleDigit)\(hour):\(minuteDoubleDigit)\(minutes)"
  457.         return dateString
  458.     }
  459.    
  460.     private func getPersistentContainerAndMoc() -> (NSPersistentContainer, NSManagedObjectContext) {
  461.         let persistentContainer: NSPersistentContainer = {
  462.             let container = NSPersistentContainer(name: "Logement")
  463.             container.loadPersistentStores(completionHandler:
  464.                 { (storeDescription, error) in
  465.                     if let error = error as NSError? {
  466.                         fatalError("error \(error.userInfo)")
  467.                     }
  468.             })
  469.             return container
  470.         }()
  471.         let moc = persistentContainer.viewContext
  472.         return (persistentContainer, moc)
  473.     }
  474.    
  475. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement