// // ItemImagePickerViewController.swift // Vendoo // // Created by Okechi Onyeje on 5/27/16. // Copyright © 2016 Okechi Onyeje. All rights reserved. // /* need to make this class display a top navigation bar so user may cancel the new item posting if need be */ import UIKit class ItemImagePickerViewController: UIViewController { //Outlets @IBOutlet weak var possibleItemImage1: UIImageView! @IBOutlet weak var possibleItemImage2: UIImageView! @IBOutlet weak var possibleItemImage3: UIImageView! @IBOutlet weak var possibleItemImage4: UIImageView! @IBOutlet weak var possibleItemImage5: UIImageView! @IBOutlet weak var itemName: UITextField! @IBOutlet weak var itemDescription: UITextView! @IBOutlet weak var itemPrice: UITextField! @IBOutlet weak var categoryPicker: UIPickerView! @IBOutlet weak var containerScrollView: UIScrollView! //class variables var pickerData: [String] = [String]() var itemImages:[UIImageView]! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. // Connect data: self.categoryPicker.delegate = self self.categoryPicker.dataSource = self self.itemDescription.delegate = self self.itemName.delegate = self self.itemPrice.delegate = self // Input data into the Array: pickerData = ["Category 1", "Category 2", "Category 3", "Category 4", "Category 5", "Category 6"] } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { // Get the new view controller using segue.destinationViewController. // Pass the selected object to the new view controller. if(segue.identifier == "SelectNetworkSegue"){ print(self.itemName.text!) print(self.itemDescription.text!) print(self.possibleItemImage1.image) print(self.itemPrice.text!) var dict: Dictionary = ["title":self.itemName.text!, "description":self.itemDescription.text!, "price":self.itemPrice.text!, "category":self.pickerData[self.categoryPicker.selectedRowInComponent(0)]] dict["picture"] = self.possibleItemImage1 (segue.destinationViewController as! NetworksTableViewController).setListingDictionary(dict) (segue.destinationViewController as! NetworksTableViewController).setManagers(((self.tabBarController as? HomeViewController)?.fbGraphManager)!, fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!) (segue.destinationViewController as! NetworksTableViewController).setNetworkSelectFunctionality(true) print(self.categoryPicker.selectedRowInComponent(0)) } } } //MARK: - Camera session methods extension ItemImagePickerViewController: UIImagePickerControllerDelegate { } //MARK: - UIPickerViewDelegate extension ItemImagePickerViewController: UIPickerViewDelegate { // Catpure the picker view selection func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { // This method is triggered whenever the user makes a change to the picker selection. // The parameter named row and component represents what was selected. } } //MARK: - UIPickerViewDatasource extension ItemImagePickerViewController: UIPickerViewDataSource { // The number of columns of data func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 } // The number of rows of data func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return pickerData.count } // The data to return for the row and component (column) that's being passed in func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return pickerData[row] } } extension ItemImagePickerViewController: UITextViewDelegate { func textViewDidBeginEditing(textView: UITextView) { if (textView.text! == "Description") { textView.text = "" textView.textColor = UIColor.blackColor() //optional } textView.becomeFirstResponder() } func textViewDidEndEditing(textView: UITextView) { if (textView.text! == "") { textView.text = "Description" textView.textColor = UIColor.lightGrayColor() //optional } textView.resignFirstResponder() } func textViewDidChange(textView: UITextView) { let fixedWidth = textView.frame.size.width textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) var newFrame = textView.frame newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) textView.frame = newFrame; } } extension ItemImagePickerViewController: UITextFieldDelegate { func textFieldShouldReturn(textField: UITextField) -> Bool { self.view.endEditing(true) return false } func hideKeyboard() { self.view.endEditing(true) } func textFieldDidBeginEditing(textField: UITextField) { self.containerScrollView.setContentOffset(CGPointMake(0, 200), animated: true) } func textFieldDidEndEditing(textField: UITextField) { self.containerScrollView.setContentOffset(CGPointMake(0, 0), animated: true) } } //Mark: - IBActions extension ItemImagePickerViewController { @IBAction func chooseSellerNetworks(sender: AnyObject) { //segue to networks selection self.performSegueWithIdentifier("SelectNetworkSegue", sender: self) } @IBAction func draftItem(sender: AnyObject) { if(self.possibleItemImage1.image == nil){ let alert = UIAlertController(title: "Image Needed", message: "To proceed to save your listing as a draft, you must supply at least one picture for your listing", preferredStyle: .Alert) alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) self.presentViewController(alert, animated: true, completion: nil) }else{ //save listing to private user path in firebase let newListingRef = (self.tabBarController as? HomeViewController)?.firebaseManager.ref.child("Users").child("\((self.tabBarController as? HomeViewController)?.firebaseManager.user_email)").child("user_Listings").childByAutoId() let category = (self.pickerData[self.categoryPicker.selectedRowInComponent(0)]) let listing: Dictionary = ["listingID": newListingRef!.key, "seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, "listingTitle": self.itemName.text, "listingPrice": self.itemPrice.text, "listingCategory": category, "listingDescription": self.itemDescription.text, "isListingDraft": false] (self.tabBarController as? HomeViewController)?.firebaseManager.ref.observeSingleEventOfType(.Value, withBlock: { snapshot in let databaseDict = snapshot.value as! [String : AnyObject] let storageRef = (self.tabBarController as? HomeViewController)?.firebaseManager.storage.referenceForURL((databaseDict["image_storage"] as? String)!) let listingImageRef = storageRef!.child("images/\(newListingRef!.key)"+".jpg") listingImageRef.putData(UIImagePNGRepresentation(self.possibleItemImage1.image!)!, metadata: nil,completion: {(metadata, error) -> Void in newListingRef!.setValue(listing as? Dictionary) }) //register new listing id in global path of firebase root' (self.tabBarController as? HomeViewController)?.firebaseManager.ref.child("Global_listings").setValue(newListingRef!.key) }) } } }