Phonenumber search returns full user objects

This commit is contained in:
nikolark committed 2015-07-10 18:42:44 +02:00
1 parent 197ee1f926
commit 47135d2d66
3 files changed
+81 -55

No files matched your search

+57
View File
@@ -58,4 +58,61 @@ function clean_phonenumber($pn) {
// E.164
function valid_phonenumber($phone) {
return preg_match('/^\+?\d{8,15}$/i', $phone);
}
function get_user_data($ids, $conn) {
$conn->setFetchMode(DB_FETCHMODE_ASSOC);
/* Get data */
$sql_is_member = "u.expires > NOW() OR u.expires IS NULL AS is_member";
$CARDNO_LEGACY_MAX = 100000000;
$sql_card_is_legacy = "u.cardno<$CARDNO_LEGACY_MAX AS card_is_legacy";
$sql_groups = "GROUP_CONCAT(DISTINCT g.id,';',g.name SEPARATOR ',') AS groups";
$data_sql = "SELECT u.id,u.username,u.firstname,u.lastname,u.email,up.number,u.expires,u.cardno,$sql_card_is_legacy,$sql_groups,$sql_is_member
FROM din_user as u
LEFT JOIN din_userphonenumber as up ON up.user_id=u.id
LEFT JOIN din_usergrouprelationship AS ug ON u.id=ug.user_id
LEFT JOIN din_group AS g ON g.id=ug.group_id
WHERE u.id IN ($ids)
GROUP BY u.id
ORDER BY u.firstname, u.lastname ASC";
$res = $conn->getAll($data_sql);
if( DB::isError($res) ) {
new Exception($res->getMessage());
}
$results = array();
/* Encode and output */
foreach($res as $result) {
foreach($result as $key => $value) {
if($key == "groups") {
if($value === "") {
continue; // no groups
}
$u_gs = array();
$u_groups = explode(",",$value);
foreach($u_groups as $g) {
list($id,$name) = explode(";", $g);
if( !is_valid_utf8($name) ) {
$name = utf8_encode($name);
}
$u_gs[] = array(
'id' => $id,
'name' => $name
);
}
$result[$key] = $u_gs;
}
/* Encoding issues? oh yes, utf-8 please */
elseif( !is_valid_utf8($value) ) {
$result[$key] = utf8_encode($value);
}
}
$results[] = $result;
}
return $results;
}
+20 -4
View File
@@ -50,12 +50,28 @@ if( DB::isError($res) ) {
echo json_encode(array('error' => $res->message));
die();
}
$user_ids = array();
if(count($res) == 0) {
echo json_encode(array('results' => []));
echo json_encode(array('meta' => array('num_results' => 0),'results' => []));
die();
}
$user_ids = $res[0];
echo json_encode(array('results' => $user_ids));
$id_array = array();
foreach($res as $value) {
$id_array[] = $value[0];
}
$user_ids = implode(",", $id_array);
try{
$results = get_user_data($user_ids, $conn);
} catch(Exception $e) {
set_response_code(500);
echo json_encode(array('error' => $e->getMessage()));
die();
}
echo json_encode(array(
'meta' => array(
'num_results' => count($results)
),
'results' => $results,
));
?>
+4 -51
View File
@@ -131,61 +131,14 @@ foreach($res as $value) {
}
$ids = implode(",", $id_array);
$conn->setFetchMode(DB_FETCHMODE_ASSOC);
/* Get data */
$sql_is_member = "u.expires > NOW() OR u.expires IS NULL AS is_member";
$CARDNO_LEGACY_MAX = 100000000;
$sql_card_is_legacy = "u.cardno<$CARDNO_LEGACY_MAX AS card_is_legacy";
$sql_groups = "GROUP_CONCAT(DISTINCT g.id,';',g.name SEPARATOR ',') AS groups";
$data_sql = "SELECT u.id,u.username,u.firstname,u.lastname,u.email,up.number,u.expires,u.cardno,$sql_card_is_legacy,$sql_groups,$sql_is_member
FROM din_user as u
LEFT JOIN din_userphonenumber as up ON up.user_id=u.id
LEFT JOIN din_usergrouprelationship AS ug ON u.id=ug.user_id
LEFT JOIN din_group AS g ON g.id=ug.group_id
WHERE u.id IN ($ids)
GROUP BY u.id
ORDER BY u.firstname, u.lastname ASC";
$res = $conn->getAll($data_sql);
if( DB::isError($res) ) {
try{
$results = get_user_data($ids, $conn);
} catch(Exception $e) {
set_response_code(500);
echo json_encode(array('error' => $res->getMessage()));
echo json_encode(array('error' => $e->getMessage()));
die();
}
/* Encode and output */
$results = array();
foreach($res as $result) {
foreach($result as $key => $value) {
if($key == "groups") {
if($value === "") {
continue; // no groups
}
$u_gs = array();
$u_groups = explode(",",$value);
foreach($u_groups as $g) {
list($id,$name) = explode(";", $g);
if( !is_valid_utf8($name) ) {
$name = utf8_encode($name);
}
$u_gs[] = array(
'id' => $id,
'name' => $name
);
}
$result[$key] = $u_gs;
}
/* Encoding issues? oh yes, utf-8 please */
elseif( !is_valid_utf8($value) ) {
$result[$key] = utf8_encode($value);
}
}
$results[] = $result;
}
$out = json_encode(array(
'meta' => array(
'num_results' => count($results),