Add endpoints and methods for updating dictionaries + words
This commit is contained in:
parent
d2336bf9c9
commit
6646bf19d7
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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),
|
||||||
|
|
|
@ -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!');
|
||||||
|
|
Loading…
Reference in New Issue