From d69eefcacea86f5e10c8e68b3e789ecf00b00638 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Wed, 9 Jul 2014 16:47:09 +0200 Subject: [PATCH] Working api --- api/user.php | 72 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 14 deletions(-) diff --git a/api/user.php b/api/user.php index 0e4a6e5..aa03fe9 100644 --- a/api/user.php +++ b/api/user.php @@ -13,6 +13,12 @@ function set_response_code($code) { header('X-Ignore-This: something', true, $code); } +function is_valid_utf8($text) { + return mb_check_encoding($text, 'utf-8'); +} + +header('Access-Control-Allow-Origin: *', true); // Come fetch! + /* Connect to database */ $options = array( 'debug' => 2, @@ -24,7 +30,7 @@ $conn = DB::connect(getDSN(), $options); if(DB :: isError($conn)) { echo $conn->toString(); } -$conn->setFetchMode(DB_FETCHMODE_ASSOC); +$conn->setFetchMode(DB_FETCHMODE_ORDERED); /* Validate params */ if(!isset($_GET['q'])) { @@ -44,32 +50,70 @@ $query = $_GET['q']; $query = "%" . str_replace(" ", "% %", $query) . "%"; $query = $conn->quoteSmart($query); -$sql = "SELECT DISTINCT u.id, u.username, u.firstname, u.lastname, u.email +// Search query +$sql = "SELECT DISTINCT u.id FROM din_user u WHERE CONCAT(UPPER(u.firstname), ' ', UPPER(u.lastname)) LIKE $query OR CONCAT(UPPER(u.firstname), ' ', UPPER(u.lastname)) LIKE $query OR UPPER(u.username) LIKE $query - OR UPPER(u.email) LIKE $query - ORDER BY u.firstname, u.lastname ASC"; + OR UPPER(u.email) LIKE $query"; -$res = $conn->query($sql); +$res = $conn->getAll($sql); if( DB::isError($res) ) { set_response_code(500); - echo json_encode(array('error' => $res->toString)); + echo json_encode(array('error' => $res->message)); die(); } - + +if( count($res) === 0 ) { + echo json_encode(array( + 'meta' => array('num_results' => 0), + 'results' => array() + )); + die(); +} +$id_array = array(); +foreach($res as $value) { + $id_array[] = $value[0]; +} +$ids = implode(",", $id_array); + +$conn->setFetchMode(DB_FETCHMODE_ASSOC); +/* Get data */ +$sql = "SELECT u.id, u.username, u.firstname, u.lastname, u.email, up.number + FROM din_user as u + LEFT JOIN din_userphonenumber as up ON up.user_id=u.id + WHERE u.id IN ($ids) + ORDER BY u.firstname, u.lastname ASC"; + +$res = $conn->getAll($sql); + +if( DB::isError($res) ) { + set_response_code(500); + echo json_encode(array('error' => $res->message)); + die(); +} + + +/* Encode and output */ $results = array(); -while ($row =& $res->fetchRow()) { - $results[] = $row; + +foreach($res as $result) { + foreach($result as $key => $value) { + /* Encoding issues? oh yes, utf-8 please */ + if(!is_valid_utf8($value)) { + $result[$key] = utf8_encode($value); + } + } + $results[] = $result; } -//var_dump($results); $out = json_encode(array( - 'results' => $results, 'meta' => array( - 'num_results' => $res->numRows(), - 'query' => $sql - ))); + 'num_results' => count($results), + 'query' => $sql), + 'results' => $results, +)); + if($out === false) { set_response_code(500); echo json_encode(array('error' => json_last_error_msg()));