root / Classes / EditPermissionsViewController.m @ 4b4b833e
History | View | Annotate | Download (19.3 kB)
1 | 91869be8 | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 91869be8 | Miltiadis Vasilakis | // EditPermissionsViewController.m |
3 | 91869be8 | Miltiadis Vasilakis | // pithos-ios |
4 | 91869be8 | Miltiadis Vasilakis | // |
5 | 91869be8 | Miltiadis Vasilakis | // Copyright 2011 GRNET S.A. All rights reserved. |
6 | 91869be8 | Miltiadis Vasilakis | // |
7 | 91869be8 | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | 91869be8 | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | 91869be8 | Miltiadis Vasilakis | // conditions are met: |
10 | 91869be8 | Miltiadis Vasilakis | // |
11 | 91869be8 | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | 91869be8 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | 91869be8 | Miltiadis Vasilakis | // disclaimer. |
14 | 91869be8 | Miltiadis Vasilakis | // |
15 | 91869be8 | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | 91869be8 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | 91869be8 | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | 91869be8 | Miltiadis Vasilakis | // provided with the distribution. |
19 | 91869be8 | Miltiadis Vasilakis | // |
20 | 91869be8 | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | 91869be8 | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | 91869be8 | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | 91869be8 | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | 91869be8 | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | 91869be8 | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | 91869be8 | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | 91869be8 | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | 91869be8 | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | 91869be8 | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | 91869be8 | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | 91869be8 | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | 91869be8 | Miltiadis Vasilakis | // |
33 | 91869be8 | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | 91869be8 | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | 91869be8 | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | 91869be8 | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | 91869be8 | Miltiadis Vasilakis | |
38 | 91869be8 | Miltiadis Vasilakis | #import "EditPermissionsViewController.h" |
39 | 91869be8 | Miltiadis Vasilakis | #import "AccountManager.h" |
40 | 91869be8 | Miltiadis Vasilakis | #import "UIViewController+Conveniences.h" |
41 | d17a05de | Miltiadis Vasilakis | #import "FolderViewController.h" |
42 | 45f2fce6 | Miltiadis Vasilakis | #import "Folder.h" |
43 | 45f2fce6 | Miltiadis Vasilakis | #import "PithosUtilities.h" |
44 | 7db1712d | Miltiadis Vasilakis | #import "APICallback.h" |
45 | 91869be8 | Miltiadis Vasilakis | |
46 | 91869be8 | Miltiadis Vasilakis | #define kUser 0 |
47 | 91869be8 | Miltiadis Vasilakis | #define kPermissions 1 |
48 | 54cb751a | Miltiadis Vasilakis | #define kSavePermissions 2 |
49 | 54cb751a | Miltiadis Vasilakis | #define kRemovePermissions 3 |
50 | 91869be8 | Miltiadis Vasilakis | |
51 | 91869be8 | Miltiadis Vasilakis | @implementation EditPermissionsViewController |
52 | 91869be8 | Miltiadis Vasilakis | |
53 | 91869be8 | Miltiadis Vasilakis | @synthesize account, container, object; |
54 | 91869be8 | Miltiadis Vasilakis | @synthesize user, readPermissionSelected, writePermissionSelected, permissions; |
55 | 91869be8 | Miltiadis Vasilakis | @synthesize oldPermissionsString; |
56 | 54cb751a | Miltiadis Vasilakis | @synthesize newPermissionsEntry, removePermissionsEnabled; |
57 | d17a05de | Miltiadis Vasilakis | @synthesize folderViewController, objectIsFolder; |
58 | 91869be8 | Miltiadis Vasilakis | |
59 | 91869be8 | Miltiadis Vasilakis | - (void)dealloc |
60 | 91869be8 | Miltiadis Vasilakis | { |
61 | 3a8071d4 | Miltiadis Vasilakis | [account release]; |
62 | 3a8071d4 | Miltiadis Vasilakis | [container release]; |
63 | 3a8071d4 | Miltiadis Vasilakis | [object release]; |
64 | 3a8071d4 | Miltiadis Vasilakis | [user release]; |
65 | 3a8071d4 | Miltiadis Vasilakis | [permissions release]; |
66 | 3a8071d4 | Miltiadis Vasilakis | [oldPermissionsString release]; |
67 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView release]; |
68 | 91869be8 | Miltiadis Vasilakis | [super dealloc]; |
69 | 91869be8 | Miltiadis Vasilakis | } |
70 | 91869be8 | Miltiadis Vasilakis | |
71 | 91869be8 | Miltiadis Vasilakis | - (void)didReceiveMemoryWarning |
72 | 91869be8 | Miltiadis Vasilakis | { |
73 | 91869be8 | Miltiadis Vasilakis | // Releases the view if it doesn't have a superview. |
74 | 91869be8 | Miltiadis Vasilakis | [super didReceiveMemoryWarning]; |
75 | 91869be8 | Miltiadis Vasilakis | |
76 | 91869be8 | Miltiadis Vasilakis | // Release any cached data, images, etc that aren't in use. |
77 | 91869be8 | Miltiadis Vasilakis | } |
78 | 91869be8 | Miltiadis Vasilakis | |
79 | 91869be8 | Miltiadis Vasilakis | #pragma mark - View lifecycle |
80 | 91869be8 | Miltiadis Vasilakis | |
81 | 91869be8 | Miltiadis Vasilakis | - (void)viewDidLoad |
82 | 91869be8 | Miltiadis Vasilakis | { |
83 | 91869be8 | Miltiadis Vasilakis | [super viewDidLoad]; |
84 | 91869be8 | Miltiadis Vasilakis | } |
85 | 91869be8 | Miltiadis Vasilakis | |
86 | 91869be8 | Miltiadis Vasilakis | - (void)viewDidUnload |
87 | 91869be8 | Miltiadis Vasilakis | { |
88 | 91869be8 | Miltiadis Vasilakis | [super viewDidUnload]; |
89 | 91869be8 | Miltiadis Vasilakis | } |
90 | 91869be8 | Miltiadis Vasilakis | |
91 | 91869be8 | Miltiadis Vasilakis | - (void)viewWillAppear:(BOOL)animated |
92 | 91869be8 | Miltiadis Vasilakis | { |
93 | 91869be8 | Miltiadis Vasilakis | [super viewWillAppear:animated]; |
94 | 91869be8 | Miltiadis Vasilakis | } |
95 | 91869be8 | Miltiadis Vasilakis | |
96 | 91869be8 | Miltiadis Vasilakis | - (void)viewDidAppear:(BOOL)animated |
97 | 91869be8 | Miltiadis Vasilakis | { |
98 | 91869be8 | Miltiadis Vasilakis | [super viewDidAppear:animated]; |
99 | 91869be8 | Miltiadis Vasilakis | } |
100 | 91869be8 | Miltiadis Vasilakis | |
101 | 91869be8 | Miltiadis Vasilakis | - (void)viewWillDisappear:(BOOL)animated |
102 | 91869be8 | Miltiadis Vasilakis | { |
103 | 91869be8 | Miltiadis Vasilakis | [super viewWillDisappear:animated]; |
104 | 91869be8 | Miltiadis Vasilakis | } |
105 | 91869be8 | Miltiadis Vasilakis | |
106 | 91869be8 | Miltiadis Vasilakis | - (void)viewDidDisappear:(BOOL)animated |
107 | 91869be8 | Miltiadis Vasilakis | { |
108 | 91869be8 | Miltiadis Vasilakis | [super viewDidDisappear:animated]; |
109 | 91869be8 | Miltiadis Vasilakis | } |
110 | 91869be8 | Miltiadis Vasilakis | |
111 | 91869be8 | Miltiadis Vasilakis | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { |
112 | 91869be8 | Miltiadis Vasilakis | return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait); |
113 | 91869be8 | Miltiadis Vasilakis | } |
114 | 91869be8 | Miltiadis Vasilakis | |
115 | 91869be8 | Miltiadis Vasilakis | #pragma mark - Table view data source |
116 | 91869be8 | Miltiadis Vasilakis | |
117 | 91869be8 | Miltiadis Vasilakis | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView |
118 | 91869be8 | Miltiadis Vasilakis | { |
119 | 54cb751a | Miltiadis Vasilakis | if (removePermissionsEnabled) |
120 | 54cb751a | Miltiadis Vasilakis | return 4; |
121 | 91869be8 | Miltiadis Vasilakis | else |
122 | 91869be8 | Miltiadis Vasilakis | return 3; |
123 | 91869be8 | Miltiadis Vasilakis | } |
124 | 91869be8 | Miltiadis Vasilakis | |
125 | 91869be8 | Miltiadis Vasilakis | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section |
126 | 91869be8 | Miltiadis Vasilakis | { |
127 | 91869be8 | Miltiadis Vasilakis | if (section == kPermissions) |
128 | 91869be8 | Miltiadis Vasilakis | return 2; |
129 | 91869be8 | Miltiadis Vasilakis | else |
130 | 91869be8 | Miltiadis Vasilakis | return 1; |
131 | 91869be8 | Miltiadis Vasilakis | } |
132 | 91869be8 | Miltiadis Vasilakis | |
133 | 91869be8 | Miltiadis Vasilakis | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
134 | 91869be8 | Miltiadis Vasilakis | { |
135 | 91869be8 | Miltiadis Vasilakis | static NSString *CellIdentifier = @"Cell"; |
136 | 91869be8 | Miltiadis Vasilakis | |
137 | 91869be8 | Miltiadis Vasilakis | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
138 | 91869be8 | Miltiadis Vasilakis | if (cell == nil) { |
139 | 91869be8 | Miltiadis Vasilakis | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; |
140 | 91869be8 | Miltiadis Vasilakis | } |
141 | 45f2fce6 | Miltiadis Vasilakis | |
142 | 91869be8 | Miltiadis Vasilakis | if (indexPath.section == kUser) { |
143 | 54cb751a | Miltiadis Vasilakis | UITextField *textField = nil; |
144 | 54cb751a | Miltiadis Vasilakis | for (id subView in cell.contentView.subviews) { |
145 | 54cb751a | Miltiadis Vasilakis | if ([subView isKindOfClass:[UITextField class]]) { |
146 | 54cb751a | Miltiadis Vasilakis | textField = (UITextField *)subView; |
147 | 54cb751a | Miltiadis Vasilakis | } |
148 | 54cb751a | Miltiadis Vasilakis | } |
149 | 54cb751a | Miltiadis Vasilakis | |
150 | 54cb751a | Miltiadis Vasilakis | if (textField == nil) { |
151 | 91869be8 | Miltiadis Vasilakis | CGRect bounds = [cell.contentView bounds]; |
152 | 07592312 | Miltiadis Vasilakis | CGRect rect = CGRectInset(bounds, 10.0, 10.0); |
153 | 54cb751a | Miltiadis Vasilakis | textField = [[UITextField alloc] initWithFrame:rect]; |
154 | 91869be8 | Miltiadis Vasilakis | [textField setFrame:rect]; |
155 | 91869be8 | Miltiadis Vasilakis | } |
156 | 54cb751a | Miltiadis Vasilakis | |
157 | 54cb751a | Miltiadis Vasilakis | [textField setClearButtonMode:UITextFieldViewModeWhileEditing]; |
158 | 54cb751a | Miltiadis Vasilakis | [textField setBackgroundColor:[UIColor clearColor]]; |
159 | 54cb751a | Miltiadis Vasilakis | [textField setOpaque:YES]; |
160 | 54cb751a | Miltiadis Vasilakis | [textField setAutocorrectionType:UITextAutocorrectionTypeNo]; |
161 | 54cb751a | Miltiadis Vasilakis | [textField setAutocapitalizationType:UITextAutocapitalizationTypeNone]; |
162 | 54cb751a | Miltiadis Vasilakis | [textField setDelegate:self]; |
163 | 4b4b833e | Miltiadis Vasilakis | textField.placeholder = @"User or User:Group"; |
164 | 54cb751a | Miltiadis Vasilakis | textField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; |
165 | 54cb751a | Miltiadis Vasilakis | textField.text = self.user; |
166 | 54cb751a | Miltiadis Vasilakis | |
167 | 54cb751a | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
168 | 54cb751a | Miltiadis Vasilakis | [cell.contentView addSubview:textField]; |
169 | ba01f5a7 | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
170 | 91869be8 | Miltiadis Vasilakis | } |
171 | 91869be8 | Miltiadis Vasilakis | else if (indexPath.section == kPermissions) { |
172 | 91869be8 | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
173 | 91869be8 | Miltiadis Vasilakis | if (indexPath.row == 0) { |
174 | 4b4b833e | Miltiadis Vasilakis | cell.textLabel.text = @"Read Only"; |
175 | 91869be8 | Miltiadis Vasilakis | if (readPermissionSelected) |
176 | 91869be8 | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryCheckmark; |
177 | 91869be8 | Miltiadis Vasilakis | else |
178 | 91869be8 | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
179 | 91869be8 | Miltiadis Vasilakis | } |
180 | 91869be8 | Miltiadis Vasilakis | else { |
181 | 4b4b833e | Miltiadis Vasilakis | cell.textLabel.text = @"Read/Write"; |
182 | 91869be8 | Miltiadis Vasilakis | if (writePermissionSelected) |
183 | 91869be8 | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryCheckmark; |
184 | 91869be8 | Miltiadis Vasilakis | else |
185 | 91869be8 | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
186 | 91869be8 | Miltiadis Vasilakis | } |
187 | 91869be8 | Miltiadis Vasilakis | } |
188 | 54cb751a | Miltiadis Vasilakis | else if (indexPath.section == kSavePermissions) { |
189 | 54cb751a | Miltiadis Vasilakis | cell.textLabel.text = @"Save"; |
190 | 54cb751a | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
191 | 54cb751a | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
192 | 54cb751a | Miltiadis Vasilakis | } |
193 | 91869be8 | Miltiadis Vasilakis | else if (indexPath.section == kRemovePermissions) { |
194 | 91869be8 | Miltiadis Vasilakis | cell.textLabel.text = @"Remove"; |
195 | 91869be8 | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
196 | 54cb751a | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
197 | 91869be8 | Miltiadis Vasilakis | } |
198 | 91869be8 | Miltiadis Vasilakis | |
199 | 91869be8 | Miltiadis Vasilakis | return cell; |
200 | 91869be8 | Miltiadis Vasilakis | } |
201 | 91869be8 | Miltiadis Vasilakis | |
202 | 91869be8 | Miltiadis Vasilakis | #pragma mark - Table view delegate |
203 | 91869be8 | Miltiadis Vasilakis | |
204 | 91869be8 | Miltiadis Vasilakis | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath |
205 | 91869be8 | Miltiadis Vasilakis | { |
206 | ba01f5a7 | Miltiadis Vasilakis | |
207 | 54cb751a | Miltiadis Vasilakis | if (indexPath.section != kUser) |
208 | 54cb751a | Miltiadis Vasilakis | [self.view endEditing:YES]; |
209 | ba01f5a7 | Miltiadis Vasilakis | |
210 | ba01f5a7 | Miltiadis Vasilakis | NSString *newUserName; |
211 | 54cb751a | Miltiadis Vasilakis | NSIndexPath *userCellIndexPath = [NSIndexPath indexPathForRow:0 inSection:kUser]; |
212 | 54cb751a | Miltiadis Vasilakis | UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:userCellIndexPath]; |
213 | 54cb751a | Miltiadis Vasilakis | UITextField *textField = [[cell.contentView subviews] objectAtIndex:0]; |
214 | 54cb751a | Miltiadis Vasilakis | newUserName = textField.text; |
215 | 54cb751a | Miltiadis Vasilakis | if (![self userInputIsValid:newUserName]) { |
216 | 54cb751a | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
217 | 54cb751a | Miltiadis Vasilakis | return; |
218 | 91869be8 | Miltiadis Vasilakis | } |
219 | 54cb751a | Miltiadis Vasilakis | |
220 | 91869be8 | Miltiadis Vasilakis | if (indexPath.section == kPermissions) { |
221 | 54cb751a | Miltiadis Vasilakis | UITableViewCell *readPermissionsCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:kPermissions]]; |
222 | 54cb751a | Miltiadis Vasilakis | UITableViewCell *writePermissionsCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:kPermissions]]; |
223 | 54cb751a | Miltiadis Vasilakis | |
224 | 91869be8 | Miltiadis Vasilakis | if (indexPath.row == 0) { |
225 | 91869be8 | Miltiadis Vasilakis | if (!readPermissionSelected) { |
226 | 91869be8 | Miltiadis Vasilakis | readPermissionSelected = YES; |
227 | 54cb751a | Miltiadis Vasilakis | if (writePermissionSelected) { |
228 | 91869be8 | Miltiadis Vasilakis | writePermissionSelected = FALSE; |
229 | 54cb751a | Miltiadis Vasilakis | writePermissionsCell.accessoryType = UITableViewCellAccessoryNone; |
230 | 54cb751a | Miltiadis Vasilakis | } |
231 | 54cb751a | Miltiadis Vasilakis | readPermissionsCell.accessoryType = UITableViewCellAccessoryCheckmark; |
232 | 91869be8 | Miltiadis Vasilakis | } |
233 | 91869be8 | Miltiadis Vasilakis | } |
234 | 91869be8 | Miltiadis Vasilakis | else if (indexPath.row == 1) { |
235 | 91869be8 | Miltiadis Vasilakis | if (!writePermissionSelected) { |
236 | 91869be8 | Miltiadis Vasilakis | writePermissionSelected = YES; |
237 | 54cb751a | Miltiadis Vasilakis | if (readPermissionSelected) { |
238 | 91869be8 | Miltiadis Vasilakis | readPermissionSelected = FALSE; |
239 | 54cb751a | Miltiadis Vasilakis | readPermissionsCell.accessoryType = UITableViewCellAccessoryNone; |
240 | 54cb751a | Miltiadis Vasilakis | } |
241 | 54cb751a | Miltiadis Vasilakis | writePermissionsCell.accessoryType = UITableViewCellAccessoryCheckmark; |
242 | 91869be8 | Miltiadis Vasilakis | } |
243 | 54cb751a | Miltiadis Vasilakis | } |
244 | 54cb751a | Miltiadis Vasilakis | } |
245 | 54cb751a | Miltiadis Vasilakis | else if (indexPath.section == kSavePermissions) { |
246 | 54cb751a | Miltiadis Vasilakis | if (!readPermissionSelected && !writePermissionSelected) { |
247 | 54cb751a | Miltiadis Vasilakis | [self alert:@"Cannot save permissions" message:@"Please select permissions type"]; |
248 | 54cb751a | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
249 | 54cb751a | Miltiadis Vasilakis | return; |
250 | 91869be8 | Miltiadis Vasilakis | } |
251 | 91869be8 | Miltiadis Vasilakis | |
252 | 54cb751a | Miltiadis Vasilakis | [self.permissions removeObjectForKey:self.user]; |
253 | 54cb751a | Miltiadis Vasilakis | if (readPermissionSelected) |
254 | 54cb751a | Miltiadis Vasilakis | [self.permissions setObject:@"read" forKey:newUserName]; |
255 | 54cb751a | Miltiadis Vasilakis | else if (writePermissionSelected) |
256 | 54cb751a | Miltiadis Vasilakis | [self.permissions setObject:@"write" forKey:newUserName]; |
257 | 54cb751a | Miltiadis Vasilakis | |
258 | 54cb751a | Miltiadis Vasilakis | self.user = newUserName; |
259 | 45f2fce6 | Miltiadis Vasilakis | self.oldPermissionsString = object.sharing; |
260 | 45f2fce6 | Miltiadis Vasilakis | object.sharing = [self buildPermissionsString]; |
261 | 45f2fce6 | Miltiadis Vasilakis | |
262 | 45f2fce6 | Miltiadis Vasilakis | if (objectIsFolder && ![PithosUtilities isContentTypeDirectory:object.contentType]) { |
263 | c7ddd1f3 | Miltiadis Vasilakis | if (((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) && |
264 | c7ddd1f3 | Miltiadis Vasilakis | [folderViewController.parentFolderViewController.folder.objects objectForKey:object.name]) || |
265 | c7ddd1f3 | Miltiadis Vasilakis | ((UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) && |
266 | c7ddd1f3 | Miltiadis Vasilakis | [folderViewController.folder.objects objectForKey:object.name])) { |
267 | 45f2fce6 | Miltiadis Vasilakis | NSString *alertMessage = [NSString stringWithFormat:@"In order to apply the changes in '%@', the object at the same path must be replaced. Continue?",object.name]; |
268 | 45f2fce6 | Miltiadis Vasilakis | NSString *alertTitle = @"Apply changes"; |
269 | 45f2fce6 | Miltiadis Vasilakis | UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertTitle |
270 | 45f2fce6 | Miltiadis Vasilakis | message:alertMessage |
271 | 45f2fce6 | Miltiadis Vasilakis | delegate:self |
272 | 45f2fce6 | Miltiadis Vasilakis | cancelButtonTitle:@"Cancel" |
273 | 45f2fce6 | Miltiadis Vasilakis | otherButtonTitles:@"OK", nil]; |
274 | 45f2fce6 | Miltiadis Vasilakis | [alert show]; |
275 | e06c24cf | Miltiadis Vasilakis | [alert release]; |
276 | 45f2fce6 | Miltiadis Vasilakis | return; |
277 | 45f2fce6 | Miltiadis Vasilakis | } else { |
278 | 45f2fce6 | Miltiadis Vasilakis | NSString *activityMessage = @"Applying permissions..."; |
279 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView release]; |
280 | 45f2fce6 | Miltiadis Vasilakis | activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; |
281 | 45f2fce6 | Miltiadis Vasilakis | [activityIndicatorView addToView:self.view]; |
282 | 45f2fce6 | Miltiadis Vasilakis | |
283 | 45f2fce6 | Miltiadis Vasilakis | object.name = object.fullPath; |
284 | 45f2fce6 | Miltiadis Vasilakis | object.contentType = @"application/directory"; |
285 | 45f2fce6 | Miltiadis Vasilakis | object.data = [NSData data]; |
286 | 7db1712d | Miltiadis Vasilakis | [self createNewFolder]; |
287 | 45f2fce6 | Miltiadis Vasilakis | return; |
288 | 45f2fce6 | Miltiadis Vasilakis | } |
289 | 45f2fce6 | Miltiadis Vasilakis | } |
290 | 54cb751a | Miltiadis Vasilakis | |
291 | 54cb751a | Miltiadis Vasilakis | NSString *activityMessage = @"Applying permissions..."; |
292 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView release]; |
293 | 54cb751a | Miltiadis Vasilakis | activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; |
294 | 54cb751a | Miltiadis Vasilakis | |
295 | 54cb751a | Miltiadis Vasilakis | [activityIndicatorView addToView:self.view]; |
296 | 7db1712d | Miltiadis Vasilakis | [[self.account.manager writeObjectMetadata:container object:object] |
297 | 7db1712d | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
298 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperview]; |
299 | 7db1712d | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
300 | 7db1712d | Miltiadis Vasilakis | removePermissionsEnabled = YES; |
301 | 7db1712d | Miltiadis Vasilakis | [self.tableView reloadData]; |
302 | 7db1712d | Miltiadis Vasilakis | if (objectIsFolder || (account.shared && ![oldPermissionsString isEqualToString:object.sharing])) { |
303 | 7db1712d | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
304 | 7db1712d | Miltiadis Vasilakis | [self.folderViewController refreshButtonPressed:nil]; |
305 | 7db1712d | Miltiadis Vasilakis | } |
306 | 7db1712d | Miltiadis Vasilakis | else { |
307 | 7db1712d | Miltiadis Vasilakis | self.folderViewController.needsRefreshing = YES; |
308 | 7db1712d | Miltiadis Vasilakis | } |
309 | 7db1712d | Miltiadis Vasilakis | } |
310 | 7db1712d | Miltiadis Vasilakis | } |
311 | 7db1712d | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
312 | 7db1712d | Miltiadis Vasilakis | object.sharing = self.oldPermissionsString; |
313 | 7db1712d | Miltiadis Vasilakis | readPermissionSelected = !readPermissionSelected; |
314 | 7db1712d | Miltiadis Vasilakis | writePermissionSelected = !writePermissionSelected; |
315 | 7db1712d | Miltiadis Vasilakis | |
316 | 7db1712d | Miltiadis Vasilakis | if (readPermissionSelected) |
317 | 7db1712d | Miltiadis Vasilakis | [self.permissions setObject:@"read" forKey:user]; |
318 | 7db1712d | Miltiadis Vasilakis | else if (writePermissionSelected) |
319 | 7db1712d | Miltiadis Vasilakis | [self.permissions setObject:@"write" forKey:user]; |
320 | 7db1712d | Miltiadis Vasilakis | |
321 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperview]; |
322 | 7db1712d | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
323 | 7db1712d | Miltiadis Vasilakis | [self.tableView reloadData]; |
324 | 7db1712d | Miltiadis Vasilakis | [self alert:@"There was a problem applying the permissions." request:request]; |
325 | 7db1712d | Miltiadis Vasilakis | }]; |
326 | 91869be8 | Miltiadis Vasilakis | } |
327 | 91869be8 | Miltiadis Vasilakis | else if (indexPath.section == kRemovePermissions) { |
328 | 3a8071d4 | Miltiadis Vasilakis | NSString *activityMessage = @"Removing permissions..."; |
329 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView release]; |
330 | 91869be8 | Miltiadis Vasilakis | activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; |
331 | 91869be8 | Miltiadis Vasilakis | [activityIndicatorView addToView:self.view]; |
332 | 91869be8 | Miltiadis Vasilakis | |
333 | 91869be8 | Miltiadis Vasilakis | [permissions removeObjectForKey:user]; |
334 | 91869be8 | Miltiadis Vasilakis | self.oldPermissionsString = object.sharing; |
335 | 91869be8 | Miltiadis Vasilakis | object.sharing = [self buildPermissionsString]; |
336 | 7db1712d | Miltiadis Vasilakis | [[self.account.manager writeObjectMetadata:container object:object] |
337 | 7db1712d | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
338 | 7db1712d | Miltiadis Vasilakis | self.user = @""; |
339 | 7db1712d | Miltiadis Vasilakis | self.readPermissionSelected = FALSE; |
340 | 7db1712d | Miltiadis Vasilakis | self.writePermissionSelected = FALSE; |
341 | 7db1712d | Miltiadis Vasilakis | removePermissionsEnabled = NO; |
342 | 7db1712d | Miltiadis Vasilakis | [self.tableView reloadData]; |
343 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperview]; |
344 | 7db1712d | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
345 | 7db1712d | Miltiadis Vasilakis | if (objectIsFolder || (account.shared && ![oldPermissionsString isEqualToString:object.sharing])) { |
346 | 7db1712d | Miltiadis Vasilakis | self.folderViewController.needsRefreshing = YES; |
347 | 7db1712d | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) |
348 | 7db1712d | Miltiadis Vasilakis | [self.folderViewController refreshButtonPressed:nil]; |
349 | 7db1712d | Miltiadis Vasilakis | else |
350 | 7db1712d | Miltiadis Vasilakis | self.folderViewController.refreshWhenAppeared = YES; |
351 | 7db1712d | Miltiadis Vasilakis | } |
352 | 7db1712d | Miltiadis Vasilakis | } |
353 | 7db1712d | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
354 | 7db1712d | Miltiadis Vasilakis | object.sharing = self.oldPermissionsString; |
355 | 7db1712d | Miltiadis Vasilakis | if (readPermissionSelected) |
356 | 7db1712d | Miltiadis Vasilakis | [self.permissions setObject:@"read" forKey:user]; |
357 | 7db1712d | Miltiadis Vasilakis | else if (writePermissionSelected) |
358 | 7db1712d | Miltiadis Vasilakis | [self.permissions setObject:@"write" forKey:user]; |
359 | 7db1712d | Miltiadis Vasilakis | |
360 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperview]; |
361 | 7db1712d | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
362 | 7db1712d | Miltiadis Vasilakis | [self.tableView reloadData]; |
363 | 7db1712d | Miltiadis Vasilakis | [self alert:@"There was a problem removing the permissions." request:request]; |
364 | 7db1712d | Miltiadis Vasilakis | }]; |
365 | 91869be8 | Miltiadis Vasilakis | } |
366 | 91869be8 | Miltiadis Vasilakis | } |
367 | 91869be8 | Miltiadis Vasilakis | |
368 | 91869be8 | Miltiadis Vasilakis | #pragma mark - Textfield delegate |
369 | 91869be8 | Miltiadis Vasilakis | |
370 | 91869be8 | Miltiadis Vasilakis | |
371 | 91869be8 | Miltiadis Vasilakis | - (BOOL)textFieldShouldReturn:(UITextField *)textField |
372 | 91869be8 | Miltiadis Vasilakis | { |
373 | 54cb751a | Miltiadis Vasilakis | [self userInputIsValid:textField.text]; |
374 | 91869be8 | Miltiadis Vasilakis | [textField resignFirstResponder]; |
375 | 45f2fce6 | Miltiadis Vasilakis | |
376 | 91869be8 | Miltiadis Vasilakis | return YES; |
377 | 91869be8 | Miltiadis Vasilakis | } |
378 | 91869be8 | Miltiadis Vasilakis | |
379 | 45f2fce6 | Miltiadis Vasilakis | #pragma mark - Alertview delegate |
380 | 45f2fce6 | Miltiadis Vasilakis | |
381 | 45f2fce6 | Miltiadis Vasilakis | - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex |
382 | 45f2fce6 | Miltiadis Vasilakis | { |
383 | 45f2fce6 | Miltiadis Vasilakis | if (buttonIndex == 1) { |
384 | 45f2fce6 | Miltiadis Vasilakis | NSString *activityMessage = @"Applying permissions..."; |
385 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView release]; |
386 | 45f2fce6 | Miltiadis Vasilakis | activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage]; |
387 | 45f2fce6 | Miltiadis Vasilakis | [activityIndicatorView addToView:self.view]; |
388 | 45f2fce6 | Miltiadis Vasilakis | |
389 | 45f2fce6 | Miltiadis Vasilakis | object.name = object.fullPath; |
390 | 45f2fce6 | Miltiadis Vasilakis | object.contentType = @"application/directory"; |
391 | 45f2fce6 | Miltiadis Vasilakis | object.data = [NSData data]; |
392 | 7db1712d | Miltiadis Vasilakis | [self createNewFolder]; |
393 | 45f2fce6 | Miltiadis Vasilakis | } else { |
394 | 45f2fce6 | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; |
395 | 45f2fce6 | Miltiadis Vasilakis | } |
396 | 45f2fce6 | Miltiadis Vasilakis | } |
397 | 45f2fce6 | Miltiadis Vasilakis | |
398 | 7db1712d | Miltiadis Vasilakis | - (void)createNewFolder { |
399 | 7db1712d | Miltiadis Vasilakis | [[self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil] |
400 | 7db1712d | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
401 | 7db1712d | Miltiadis Vasilakis | Folder *newFolder = [[Folder alloc] init]; |
402 | 7db1712d | Miltiadis Vasilakis | newFolder.name = [[object.name componentsSeparatedByString:@"/"] lastObject]; |
403 | 7db1712d | Miltiadis Vasilakis | newFolder.parent = folderViewController.folder; |
404 | 7db1712d | Miltiadis Vasilakis | newFolder.sharing = folderViewController.folder.sharing; |
405 | 7db1712d | Miltiadis Vasilakis | [folderViewController.folder.folders setObject:newFolder forKey:newFolder.name]; |
406 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperview]; |
407 | 7db1712d | Miltiadis Vasilakis | [newFolder release]; |
408 | 7db1712d | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; |
409 | 7db1712d | Miltiadis Vasilakis | removePermissionsEnabled = YES; |
410 | 7db1712d | Miltiadis Vasilakis | [self.tableView reloadData]; |
411 | 7db1712d | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
412 | 7db1712d | Miltiadis Vasilakis | [self.folderViewController refreshButtonPressed:nil]; |
413 | 7db1712d | Miltiadis Vasilakis | } |
414 | 7db1712d | Miltiadis Vasilakis | else { |
415 | 7db1712d | Miltiadis Vasilakis | self.folderViewController.needsRefreshing = YES; |
416 | 7db1712d | Miltiadis Vasilakis | self.folderViewController.refreshWhenAppeared = YES; |
417 | 7db1712d | Miltiadis Vasilakis | } |
418 | 7db1712d | Miltiadis Vasilakis | } |
419 | 7db1712d | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
420 | 7db1712d | Miltiadis Vasilakis | object.sharing = self.oldPermissionsString; |
421 | 7db1712d | Miltiadis Vasilakis | readPermissionSelected = !readPermissionSelected; |
422 | 7db1712d | Miltiadis Vasilakis | writePermissionSelected = !writePermissionSelected; |
423 | 7db1712d | Miltiadis Vasilakis | |
424 | 7db1712d | Miltiadis Vasilakis | if (readPermissionSelected) |
425 | 7db1712d | Miltiadis Vasilakis | [self.permissions setObject:@"read" forKey:user]; |
426 | 7db1712d | Miltiadis Vasilakis | else if (writePermissionSelected) |
427 | 7db1712d | Miltiadis Vasilakis | [self.permissions setObject:@"write" forKey:user]; |
428 | 7db1712d | Miltiadis Vasilakis | |
429 | 3a8071d4 | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperview]; |
430 | 7db1712d | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; |
431 | 7db1712d | Miltiadis Vasilakis | [self.tableView reloadData]; |
432 | 7db1712d | Miltiadis Vasilakis | [self alert:@"There was a problem applying the permissions." request:request]; |
433 | 7db1712d | Miltiadis Vasilakis | }]; |
434 | 7db1712d | Miltiadis Vasilakis | } |
435 | 7db1712d | Miltiadis Vasilakis | |
436 | 91869be8 | Miltiadis Vasilakis | #pragma mark - helper methods |
437 | 91869be8 | Miltiadis Vasilakis | |
438 | 91869be8 | Miltiadis Vasilakis | - (NSString *)buildPermissionsString |
439 | 91869be8 | Miltiadis Vasilakis | { |
440 | 91869be8 | Miltiadis Vasilakis | NSString *readPermissionsString = @""; |
441 | 91869be8 | Miltiadis Vasilakis | NSString *writePermissionsString = @""; |
442 | 45f2fce6 | Miltiadis Vasilakis | |
443 | 91869be8 | Miltiadis Vasilakis | for (NSString *aUser in [permissions allKeys]) { |
444 | 91869be8 | Miltiadis Vasilakis | if ([[permissions objectForKey:aUser] isEqual:@"read"]) { |
445 | 91869be8 | Miltiadis Vasilakis | if ([readPermissionsString length] == 0) |
446 | 91869be8 | Miltiadis Vasilakis | readPermissionsString = [NSString stringWithFormat:@"read=%@", aUser]; |
447 | 91869be8 | Miltiadis Vasilakis | else |
448 | 91869be8 | Miltiadis Vasilakis | readPermissionsString = [NSString stringWithFormat:@"%@,%@", readPermissionsString ,aUser]; |
449 | 91869be8 | Miltiadis Vasilakis | } |
450 | 91869be8 | Miltiadis Vasilakis | else if ([[permissions objectForKey:aUser] isEqual:@"write"]) { |
451 | 91869be8 | Miltiadis Vasilakis | if ([writePermissionsString length] == 0) |
452 | 91869be8 | Miltiadis Vasilakis | writePermissionsString = [NSString stringWithFormat:@"write=%@", aUser]; |
453 | 91869be8 | Miltiadis Vasilakis | else |
454 | 91869be8 | Miltiadis Vasilakis | writePermissionsString = [NSString stringWithFormat:@"%@,%@", writePermissionsString, aUser]; |
455 | 91869be8 | Miltiadis Vasilakis | } |
456 | 91869be8 | Miltiadis Vasilakis | } |
457 | 91869be8 | Miltiadis Vasilakis | |
458 | 91869be8 | Miltiadis Vasilakis | if ([writePermissionsString length] == 0) |
459 | 91869be8 | Miltiadis Vasilakis | return readPermissionsString; |
460 | 91869be8 | Miltiadis Vasilakis | else if ([readPermissionsString length] == 0) |
461 | 91869be8 | Miltiadis Vasilakis | return writePermissionsString; |
462 | 91869be8 | Miltiadis Vasilakis | else return [NSString stringWithFormat:@"%@;%@", readPermissionsString, writePermissionsString]; |
463 | 91869be8 | Miltiadis Vasilakis | } |
464 | 91869be8 | Miltiadis Vasilakis | |
465 | 54cb751a | Miltiadis Vasilakis | - (BOOL) userInputIsValid: (NSString *) input |
466 | 54cb751a | Miltiadis Vasilakis | { |
467 | d6b38316 | Miltiadis Vasilakis | if ([input length] == 0 |
468 | d6b38316 | Miltiadis Vasilakis | || [[input stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0 |
469 | d6b38316 | Miltiadis Vasilakis | ) { |
470 | 54cb751a | Miltiadis Vasilakis | [self alert:@"Invalid input" message:@"User name cannot be empty"]; |
471 | d6b38316 | Miltiadis Vasilakis | return NO; |
472 | d6b38316 | Miltiadis Vasilakis | } |
473 | d6b38316 | Miltiadis Vasilakis | else { |
474 | d6b38316 | Miltiadis Vasilakis | NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"=,;"]; |
475 | d6b38316 | Miltiadis Vasilakis | if ([input rangeOfCharacterFromSet:set].location != NSNotFound) { |
476 | d6b38316 | Miltiadis Vasilakis | [self alert:@"Invalid input" message:@"User name cannot contain '=', ',' or ';'"]; |
477 | d6b38316 | Miltiadis Vasilakis | return NO; |
478 | d6b38316 | Miltiadis Vasilakis | } |
479 | d6b38316 | Miltiadis Vasilakis | else { |
480 | d6b38316 | Miltiadis Vasilakis | return YES; |
481 | d6b38316 | Miltiadis Vasilakis | } |
482 | d6b38316 | Miltiadis Vasilakis | } |
483 | d6b38316 | Miltiadis Vasilakis | |
484 | d6b38316 | Miltiadis Vasilakis | return YES; |
485 | d6b38316 | Miltiadis Vasilakis | } |
486 | 91869be8 | Miltiadis Vasilakis | |
487 | 45f2fce6 | Miltiadis Vasilakis | |
488 | 91869be8 | Miltiadis Vasilakis | @end |