diff --git a/aritaku/iOS-client/My1DayApp.xcodeproj/project.pbxproj b/aritaku/iOS-client/My1DayApp.xcodeproj/project.pbxproj index 421a7eb..a052c85 100644 --- a/aritaku/iOS-client/My1DayApp.xcodeproj/project.pbxproj +++ b/aritaku/iOS-client/My1DayApp.xcodeproj/project.pbxproj @@ -24,6 +24,7 @@ 3ABA190A1B062C5B00C21087 /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ABA19091B062C5B00C21087 /* Message.swift */; }; 3ABA190C1B0633E800C21087 /* ImageHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ABA190B1B0633E800C21087 /* ImageHelper.swift */; }; 3AF957B81B05067F00106729 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 3AF957B71B05067F00106729 /* logo.png */; }; + 5DBF87CA1B19AACD00AD9A5F /* DeleteButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DBF87C91B19AACD00AD9A5F /* DeleteButton.swift */; }; CE8066ED1ADDF6E3003A2D22 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8066EC1ADDF6E3003A2D22 /* AppDelegate.swift */; }; CE8066F21ADDF6E3003A2D22 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE8066F01ADDF6E3003A2D22 /* Main.storyboard */; }; CE8066F41ADDF6E3003A2D22 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CE8066F31ADDF6E3003A2D22 /* Images.xcassets */; }; @@ -52,6 +53,7 @@ 3ABA19091B062C5B00C21087 /* Message.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; 3ABA190B1B0633E800C21087 /* ImageHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageHelper.swift; sourceTree = ""; }; 3AF957B71B05067F00106729 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = ""; }; + 5DBF87C91B19AACD00AD9A5F /* DeleteButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DeleteButton.swift; path = My1DayApp/DeleteButton.swift; sourceTree = ""; }; CE8066E71ADDF6E3003A2D22 /* My1DayApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = My1DayApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; CE8066EB1ADDF6E3003A2D22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CE8066EC1ADDF6E3003A2D22 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -110,6 +112,7 @@ CE8066DE1ADDF6E3003A2D22 = { isa = PBXGroup; children = ( + 5DBF87C91B19AACD00AD9A5F /* DeleteButton.swift */, CE8066E91ADDF6E3003A2D22 /* My1DayApp */, CE8066FF1ADDF6E3003A2D22 /* My1DayAppTests */, CE8066E81ADDF6E3003A2D22 /* Products */, @@ -275,6 +278,7 @@ 3A7CDC921AEA88B5000FBC23 /* MessageTableViewCell.swift in Sources */, 3A7CDC901AEA7B12000FBC23 /* MessageTableViewController.swift in Sources */, 3ABA190A1B062C5B00C21087 /* Message.swift in Sources */, + 5DBF87CA1B19AACD00AD9A5F /* DeleteButton.swift in Sources */, 3A877DA01B00E9D0002B726B /* APIRequest.swift in Sources */, CE8066ED1ADDF6E3003A2D22 /* AppDelegate.swift in Sources */, 3ABA190C1B0633E800C21087 /* ImageHelper.swift in Sources */, diff --git a/aritaku/iOS-client/My1DayApp/APIRequest.swift b/aritaku/iOS-client/My1DayApp/APIRequest.swift index a0c1283..3664e83 100644 --- a/aritaku/iOS-client/My1DayApp/APIRequest.swift +++ b/aritaku/iOS-client/My1DayApp/APIRequest.swift @@ -36,8 +36,28 @@ class APIRequest { let task: NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: completionHandler) task.resume() } + + //deleteするmethot + class func deleteMessage(id: Int, completionHandler: ((NSData!, NSURLResponse!, NSError!) -> Void)?) { + let request: NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: APIRequest.baseURLString + Endpoint.Messages.rawValue)!) + request.HTTPMethod = "POST" + request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") + + var error: NSError? + request.HTTPBody = NSJSONSerialization.dataWithJSONObject(["id":id], options: NSJSONWritingOptions.allZeros, error: &error) + + if error != nil{ + println(error) + return + } + + let session: NSURLSession = NSURLSession.sharedSession() + let task: NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: completionHandler) + task.resume() + } enum Endpoint: String { case Messages = "messages" + case Delete = "delete" } } \ No newline at end of file diff --git a/aritaku/iOS-client/My1DayApp/Base.lproj/Main.storyboard b/aritaku/iOS-client/My1DayApp/Base.lproj/Main.storyboard index 90d0cb7..6501d58 100644 --- a/aritaku/iOS-client/My1DayApp/Base.lproj/Main.storyboard +++ b/aritaku/iOS-client/My1DayApp/Base.lproj/Main.storyboard @@ -1,28 +1,40 @@ - + - + - + - + - + + + + + @@ -71,7 +85,7 @@ - + @@ -79,6 +93,11 @@ + + + + + @@ -120,6 +139,7 @@ + diff --git a/aritaku/iOS-client/My1DayApp/DeleteButton.swift b/aritaku/iOS-client/My1DayApp/DeleteButton.swift new file mode 100644 index 0000000..7510bda --- /dev/null +++ b/aritaku/iOS-client/My1DayApp/DeleteButton.swift @@ -0,0 +1,13 @@ +// +// DeleteButton.swift +// My1DayApp +// +// Created by 辻林大揮 on 2015/05/30. +// Copyright (c) 2015年 VOYAGE GROUP, inc. All rights reserved. +// + +import UIKit + +class DeleteButton: UIButton { + +} diff --git a/aritaku/iOS-client/My1DayApp/Message.swift b/aritaku/iOS-client/My1DayApp/Message.swift index bd96896..a89af10 100644 --- a/aritaku/iOS-client/My1DayApp/Message.swift +++ b/aritaku/iOS-client/My1DayApp/Message.swift @@ -11,18 +11,27 @@ import UIKit class Message { let body: String! let icon: UIImage? + let date: String! + let userName: String! // Mission1-1. created_at 用のインスタンス変数を追加 + let id:Int! init?(dictionary: [String: AnyObject]) { // Mission1-1 Dictionary から key:created_at の値を取得 - if let body: String = dictionary["body"] as? String, let icon: String = dictionary["icon"] as? String { + if let body: String = dictionary["body"] as? String, let icon: String = dictionary["icon"] as? String, let date: String = dictionary["created_at"] as? String, let userName: String = dictionary["username"] as? String { self.body = body self.icon = ImageHelper.imageWithBase64EncodedString(icon) + self.date = date + self.userName = userName + self.id = dictionary["id"] as? Int // Mission1-1 Dictionary から取得した値を created_at 用のインスタンス変数に追加 } else { self.body = nil self.icon = nil + self.date = nil + self.userName = nil // Mission1-1 インスタンス変数を nil で初期化 + self.id = nil return nil } } diff --git a/aritaku/iOS-client/My1DayApp/MessageTableViewCell.swift b/aritaku/iOS-client/My1DayApp/MessageTableViewCell.swift index 74692f2..946a133 100644 --- a/aritaku/iOS-client/My1DayApp/MessageTableViewCell.swift +++ b/aritaku/iOS-client/My1DayApp/MessageTableViewCell.swift @@ -11,17 +11,26 @@ import UIKit class MessageTableViewCell: UITableViewCell { @IBOutlet weak private var iconImageView: UIImageView! @IBOutlet weak private var messageLabel: UILabel! + @IBOutlet weak private var username: UILabel! + @IBOutlet weak private var date: UILabel! // Mission1-1 UILabel のインスタンス変数を追加 + var id:Int! override func prepareForReuse() { self.iconImageView.image = nil self.messageLabel.text = nil + self.username.text = nil + self.date.text = nil // Mission1-1 UILabel のインスタンス変数を初期化 + self.id = nil } func setupComponentsWithMessage(message: Message) { self.iconImageView.image = message.icon self.messageLabel.text = message.body + self.username.text = message.userName + self.date.text = message.date // Mission1-1 UILabel のインスタンス変数に created_at の値を代入 + self.id = message.id } } diff --git a/aritaku/iOS-client/My1DayApp/MessageTableViewController.swift b/aritaku/iOS-client/My1DayApp/MessageTableViewController.swift index c062614..c10d216 100644 --- a/aritaku/iOS-client/My1DayApp/MessageTableViewController.swift +++ b/aritaku/iOS-client/My1DayApp/MessageTableViewController.swift @@ -104,4 +104,66 @@ class MessageTableViewController: UITableViewController, PostViewControllerDelag self.reloadMessageTableView() } } + + + /* + Editableの状態にする. + */ + override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { + return true + } + + /* + 特定の行のボタン操作を有効にする. + */ + override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { + } + + /* + Buttonを拡張する. + */ + override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? { + + + // Deleteボタン. + var deleteButton: UITableViewRowAction = UITableViewRowAction(style: .Normal, title: "Delete") { (action, index) -> Void in + + tableView.editing = false + + + //ここがボタン押された時 + + var id:Int! + var cell = tableView.cellForRowAtIndexPath(indexPath) as! MessageTableViewCell + id = cell.id + println(id) + + APIRequest.deleteMessage(id) { + [weak self] (data, response, error) -> Void in + + + if error != nil { + // TODO: エラー処理 + println(error) + return + } + + var decodeError: NSError? + let responseBody: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &decodeError) + if decodeError != nil{ + println(decodeError) + return + } + + + } + + + + } + deleteButton.backgroundColor = UIColor.redColor() + + return [deleteButton] + } + } diff --git a/aritaku/iOS-client/My1DayApp/PostViewController.swift b/aritaku/iOS-client/My1DayApp/PostViewController.swift index f46d2f4..92ea61a 100644 --- a/aritaku/iOS-client/My1DayApp/PostViewController.swift +++ b/aritaku/iOS-client/My1DayApp/PostViewController.swift @@ -14,12 +14,14 @@ protocol PostViewControllerDelagate : NSObjectProtocol { class PostViewController: UIViewController { @IBOutlet weak private var messageTextView: UITextView! + @IBOutlet weak private var userName: UITextField! weak var delegate: PostViewControllerDelagate? // Mission1-2 Storyboard から UITextField のインスタンス変数を追加 override func viewDidLoad() { super.viewDidLoad() self.messageTextView.becomeFirstResponder() + self.userName.placeholder = "ユーザー名" } // MARK: - IBAction @@ -33,10 +35,11 @@ class PostViewController: UIViewController { self.messageTextView.resignFirstResponder() let message: String = self.messageTextView.text ?? "" + let username: String = self.userName.text ?? "" // Mission1-2 UITextField のインスタンス変数から値を取得 // Mission1-2 posetMessage の第2引数に 任意の値を渡す - APIRequest.postMessage(message, username: "名前はまだない") { + APIRequest.postMessage(message, username: username) { [weak self] (data, response, error) -> Void in self?.delegate?.postViewController(self!, didTouchUpCloseButton: sender) @@ -56,4 +59,9 @@ class PostViewController: UIViewController { } } + + + + + } diff --git a/aritaku/web-server/app.php b/aritaku/web-server/app.php index 9724354..535a539 100644 --- a/aritaku/web-server/app.php +++ b/aritaku/web-server/app.php @@ -17,13 +17,36 @@ return $app->json($message); }); +//ここをいじる $app->post('/messages', function (Request $request) use ($app) { $data = $app->validateRequestAsJson($request); + //bot機能を追加する $username = isset($data['username']) ? $data['username'] : ''; $body = isset($data['body']) ? $data['body'] : ''; + if ($body == "uranai") { + + //占い機能を追加 + $input = array("大吉", "中吉", "小吉"); + $rand_keys = array_rand($input,1); + + if ($rand_keys == 1) { + $body = "大吉"; + } else if ($rand_keys == 2) { + $body = "中吉"; + } else if ($rand_keys == 3) { + $body = "小吉"; + }; + + $createdMessage = $app->createMessage("uranai", $body, base64_encode(file_get_contents($app['icon_image_path']))); + + } else { + $createdMessage = $app->createMessage($username, $body, base64_encode(file_get_contents($app['icon_image_path']))); + $createdMessage = $app->createMessage("bot", $body, base64_encode(file_get_contents($app['icon_image_path']))); + + }; return $app->json($createdMessage); }); diff --git a/aritaku/web-server/log/api.log b/aritaku/web-server/log/api.log old mode 100644 new mode 100755