Add endpoints and methods for updating dictionaries + words

This commit is contained in:
Robbie Antenesse 2018-01-06 16:53:58 -07:00
parent d2336bf9c9
commit 6646bf19d7
3 changed files with 179 additions and 8 deletions

View File

@ -108,6 +108,52 @@ VALUES ($new_dictionary_id, ?, ?)";
return false; return false;
} }
public function setDetails ($user, $dictionary, $dictionary_object) {
$query1 = "UPDATE dictionaries
SET name=:name,
specification=:specification,
description=:description,
allow_duplicates=:allow_duplicates,
case_sensitive=:case_sensitive,
sort_by_definition=:sort_by_definition,
is_complete=:is_complete,
is_public=:is_public,
last_updated=NOW()
WHERE user=$user AND id=$dictionary";
$result1 = $this->db->execute($query1, array(
':name' => $dictionary_object['name'],
':specification' => $dictionary_object['specification'],
':description' => $dictionary_object['description'],
':allow_duplicates' => $dictionary_object['settings']['allowDuplicates'],
':case_sensitive' => $dictionary_object['settings']['caseSensitive'],
':sort_by_definition' => $dictionary_object['settings']['sortByDefinition'],
':is_complete' => $dictionary_object['settings']['isComplete'],
':is_public' => $dictionary_object['settings']['isPublic'],
));
if ($result1->rowCount() > 0) {
$linguistics = $dictionary_object['details'];
$query2 = "UPDATE dictionary_linguistics
SET parts_of_speech=:parts_of_speech,
phonology=:phonology,
orthography_notes=:orthography_notes,
grammar_notes=:grammar_notes
WHERE dictionary=$dictionary";
$result2 = $this->db->execute($query2, array(
':parts_of_speech' => json_encode($dictionary_object['partsOfSpeech']),
':phonology' => json_encode($linguistics['phonology']),
':orthography_notes' => $linguistics['orthographyNotes'],
':grammar_notes' => $linguistics['grammarNotes'],
));
if ($result2->rowCount() > 0) {
return true;
}
}
return false;
}
public function getWords ($user, $dictionary) { public function getWords ($user, $dictionary) {
$query = "SELECT words.* FROM words JOIN dictionaries ON id = dictionary WHERE dictionary=$dictionary AND user=$user"; $query = "SELECT words.* FROM words JOIN dictionaries ON id = dictionary WHERE dictionary=$dictionary AND user=$user";
$results = $this->db->query($query)->fetchAll(); $results = $this->db->query($query)->fetchAll();
@ -127,4 +173,31 @@ VALUES ($new_dictionary_id, ?, ?)";
} }
return array(); return array();
} }
public function setWords ($dictionary, $words = array()) {
$query = 'INSERT INTO words (word_id, name, pronunciation, part_of_speech, definition, details, createdOn) VALUES ';
$params = array();
foreach($words as $word) {
$query .= "(?, ?, ?, ?, ?, ?, NOW()), ";
array_push(
$params,
$word['id'],
$word['name'],
$word['pronunciation'],
$word['partOfSpeech'],
$word['definition'],
$word['details']
);
}
$query .= trim($query, ', ') . ' ON DUPLICATE KEY UPDATE
name=VALUES(name),
pronunciation=VALUE(pronunciation),
part_of_speech=VALUE(part_of_speech),
definition=VALUE(definition),
details=VALUE(details),
last_updated=NOW()';
$results = $this->db->execute($query);
return $results->rowCount() > 0;
}
} }

View File

@ -59,7 +59,10 @@ class User {
$id = $user_data->id; $id = $user_data->id;
$new_dictionary = $this->dictionary->create($id); $new_dictionary = $this->dictionary->create($id);
if ($new_dictionary !== false) { if ($new_dictionary !== false) {
return $this->generateUserToken($id, $new_dictionary); return array(
'token' => $this->generateUserToken($id, $new_dictionary),
'dictionary' => $this->getCurrentDictionary($token),
);
} }
} }
return false; return false;
@ -73,7 +76,10 @@ class User {
if ($dictionary_id !== false) { if ($dictionary_id !== false) {
$changed_dictionary = $this->dictionary->changeCurrent($id, $dictionary_id); $changed_dictionary = $this->dictionary->changeCurrent($id, $dictionary_id);
if ($changed_dictionary !== false) { if ($changed_dictionary !== false) {
return $this->generateUserToken($id, $changed_dictionary); return array(
'token' => $this->generateUserToken($id, $changed_dictionary),
'dictionary' => $this->getCurrentDictionary($token),
);
} }
} }
} }
@ -102,6 +108,38 @@ class User {
return false; return false;
} }
public function saveWholeCurrentDictionary ($token, $dictionary_data) {
$user_data = $this->token->decode($token);
if ($user_data !== false) {
$user = $user_data->id;
$dictionary = $user_data->dictionary;
$details_updated = $this->dictionary->setDetails($user, $dictionary, $dictionary_data['details']);
$words_updated = $this->dictionary->setWords($dictionary, $dictionary_data['words']);
return $details_updated && $words_updated;
}
return false;
}
public function updateCurrentDictionaryDetails ($token, $dictionary_details) {
$user_data = $this->token->decode($token);
if ($user_data !== false) {
$user = $user_data->id;
$dictionary = $user_data->dictionary;
return $this->dictionary->setDetails($user, $dictionary, $dictionary_details);
}
return false;
}
public function updateOrAddWordsToCurrentDictionary ($token, $words) {
// Useful even for just one word
$user_data = $this->token->decode($token);
if ($user_data !== false) {
$dictionary = $user_data->dictionary;
return $this->dictionary->setWords($dictionary, $words);
}
return false;
}
private function generateUserToken ($user_id, $dictionary_id) { private function generateUserToken ($user_id, $dictionary_id) {
$user_data = array( $user_data = array(
'id' => intval($user_id), 'id' => intval($user_id),

View File

@ -78,10 +78,10 @@ switch ($action) {
case 'create-new-dictionary': { case 'create-new-dictionary': {
if ($token !== false) { if ($token !== false) {
$user = new User(); $user = new User();
$new_token = $user->createNewDictionary($token); $new_data = $user->createNewDictionary($token);
if ($new_token !== false) { if ($new_data !== false) {
return Response::json(array( return Response::json(array(
'data' => $new_token, 'data' => $new_data,
'error' => false, 'error' => false,
), 200); ), 200);
} }
@ -98,10 +98,10 @@ switch ($action) {
case 'change-dictionary': { case 'change-dictionary': {
if ($token !== false && isset($request['dictionary'])) { if ($token !== false && isset($request['dictionary'])) {
$user = new User(); $user = new User();
$new_token = $user->changeCurrentDictionary($token, $request['dictionary']); $new_data = $user->changeCurrentDictionary($token, $request['dictionary']);
if ($new_token !== false) { if ($new_data !== false) {
return Response::json(array( return Response::json(array(
'data' => $new_token, 'data' => $new_data,
'error' => false, 'error' => false,
), 200); ), 200);
} }
@ -135,6 +135,66 @@ switch ($action) {
'error' => true, 'error' => true,
), 400); ), 400);
} }
case 'set-whole-current-dictionary': {
if ($token !== false && isset($request['dictionary'])) {
$user = new User();
$dictionary_data = $user->saveWholeCurrentDictionary($token, $request['dictionary']);
if ($dictionary_data !== false) {
return Response::json(array(
'data' => 'Updated successfully',
'error' => false,
), 200);
}
return Response::json(array(
'data' => 'Could not set dictionary: invalid token',
'error' => true,
), 401);
}
return Response::json(array(
'data' => 'Could not set dictionary: required data missing',
'error' => true,
), 400);
}
case 'set-dictionary-details': {
if ($token !== false && isset($request['details'])) {
$user = new User();
$update_details_success = $user->updateCurrentDictionaryDetails($token, $request['details']);
if ($update_details_success !== false) {
return Response::json(array(
'data' => 'Updated successfully',
'error' => false,
), 200);
}
return Response::json(array(
'data' => 'Could not set dictionary: invalid token',
'error' => true,
), 401);
}
return Response::json(array(
'data' => 'Could not set dictionary: required data missing',
'error' => true,
), 400);
}
case 'set-dictionary-words': {
if ($token !== false && isset($request['words'])) {
$user = new User();
$update_words_success = $user->updateOrAddWordsToCurrentDictionary($token, $request['words']);
if ($update_words_success !== false) {
return Response::json(array(
'data' => 'Updated successfully',
'error' => false,
), 200);
}
return Response::json(array(
'data' => 'Could not set dictionary: invalid token',
'error' => true,
), 401);
}
return Response::json(array(
'data' => 'Could not set dictionary: required data missing',
'error' => true,
), 400);
}
default: { default: {
return Response::html('Hi!'); return Response::html('Hi!');