ios/pg4/pg4/EditAddTableViewController.m

135 lines
4.6 KiB
Objective-C

//
// EditAddTableViewController.m
// pg4
//
// Created by Ben Harris on 12/3/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import "EditAddTableViewController.h"
#import <sqlite3.h>
@interface EditAddTableViewController ()
@end
@implementation EditAddTableViewController
@synthesize nameTextField;
@synthesize deptTextField;
@synthesize emailTextField;
- (void)viewDidLoad {
[super viewDidLoad];
[self setTitle:@"Add/Edit"];
// if we are loading an existing professor
if (selectedIndexPath != nil) {
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
}
NSString *query = [NSString stringWithFormat:
@"select name, email, department\
from profs where prof_id =\
(select prof_id from profs where department = \
(select distinct department from profs order by department limit 1 offset %ld)\
order by name limit 1 offset %ld)",
(long)selectedIndexPath.section, (long)selectedIndexPath.row];
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
nameTextField.text = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 0)];
emailTextField.text = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 1)];
deptTextField.text = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 2)];
sqlite3_finalize(stmt);
sqlite3_close(db);
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
target:self
action:@selector(deleteProf)];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void) setSelectedIndexPath:(NSIndexPath *)indexPath {
selectedIndexPath = indexPath;
}
- (void) setDBPath:(NSString *) db_path {
dbpath = db_path;
}
- (void) deleteProf {
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
}
NSString *query = [NSString stringWithFormat:
@"delete from profs where prof_id =\
(select prof_id from profs where department = \
(select distinct department from profs order by department limit 1 offset %ld)\
order by name limit 1 offset %ld)",
(long)selectedIndexPath.section, (long)selectedIndexPath.row];
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
sqlite3_close(db);
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// name is required!! don't do anything if the field is empty
if ([nameTextField.text isEqualToString:@""]) return;
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
}
NSString *query;
// if there is no selected cell
if (selectedIndexPath != nil) {
// update
query = [NSString stringWithFormat:
@"update profs set name = '%@', department = '%@', email = '%@'\
where prof_id = (select prof_id from profs where department = \
(select distinct department from profs order by department limit 1 offset %ld)\
order by name limit 1 offset %ld)",
nameTextField.text, deptTextField.text, emailTextField.text,
(long)selectedIndexPath.section, (long)selectedIndexPath.row];
} else { // insert
query = [NSString stringWithFormat:@"insert into profs (name, department, email) values ('%@', '%@', '%@')",
nameTextField.text, deptTextField.text, emailTextField.text];
}
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
sqlite3_close(db);
}
@end