diff --git a/api/api_functions.php b/api/api_functions.php index c6e334e..d985070 100644 --- a/api/api_functions.php +++ b/api/api_functions.php @@ -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; } \ No newline at end of file diff --git a/api/phonenumber.php b/api/phonenumber.php index 77d015a..baaa6c7 100644 --- a/api/phonenumber.php +++ b/api/phonenumber.php @@ -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, +)); ?> \ No newline at end of file diff --git a/api/user.php b/api/user.php index 35afcf4..f41cdc1 100644 --- a/api/user.php +++ b/api/user.php @@ -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),