Working api

This commit is contained in:
nikolark committed 2014-07-09 16:47:09 +02:00
1 parent d41fca975a
commit d69eefcace
1 file changed
+58 -14
+58 -14
View File
@@ -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()));