From e25bb1e82b10bf3e9cf565d595381309568570a6 Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Sun, 3 Aug 2014 19:01:31 +0200 Subject: [PATCH] Adds stuff about groups --- api/groups.php | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ api/user.php | 51 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 api/groups.php diff --git a/api/groups.php b/api/groups.php new file mode 100644 index 0000000..e407cbf --- /dev/null +++ b/api/groups.php @@ -0,0 +1,59 @@ + 2, + 'portability' => DB_PORTABILITY_ALL, +); + +$conn = DB::connect(getDSN(), $options); + +if(DB :: isError($conn)) { + echo $conn->toString(); +} +$conn->setFetchMode(DB_FETCHMODE_ASSOC); + +// Search query +$sql = "SELECT g.name as group_name, g.id as group_id, g.posix_group, g.mailinglist, g.admin as is_admin_group, + d.user_id_contact, d.nicename, d.office, d.url, d.updated, d.name as division_name, d.id as division_id + FROM din_division AS d + LEFT JOIN din_group AS g ON d.id=g.division_id + WHERE g.id IS NOT NULL + ORDER BY g.name"; +$res = $conn->getAll($sql); + +/* Encode */ +$results = array(); +foreach($res as $result) { + foreach($result as $key => $value) { + /* Encoding issues? oh yes, utf-8 please */ + if(is_string($value)) { + $result[$key] = utf8_encode($value); + } + } + $results[] = $result; +} + +if( DB::isError($res) ) { + set_response_code(500); + echo json_encode(array('error' => $res->getMessage().". DEBUG: ".$res->getDebugInfo())); + die(); +} +echo json_encode(array('results' => $results)); + +?> diff --git a/api/user.php b/api/user.php index 7b88d0c..9c59fd5 100644 --- a/api/user.php +++ b/api/user.php @@ -33,10 +33,15 @@ if(DB :: isError($conn)) { } $conn->setFetchMode(DB_FETCHMODE_ORDERED); -/* Valid API KEY (defined in credentials.php) ? */ -if(!isset($_GET['apikey']) || $_GET['apikey'] !== USER_API_KEY) { +if( !isset($_GET['apikey']) ) { set_response_code(400); - echo json_encode(array('error' => "Invalid apikey.")); + echo json_encode(array('error' => "Missing param apikey.")); + die(); +} +/* Valid API KEY (defined in credentials.php) ? */ +if( $_GET['apikey'] !== USER_API_KEY ) { + set_response_code(400); + echo json_encode(array('error' => "Invalid apikey.".$_GET['apikey'])); die(); } @@ -46,7 +51,25 @@ if(!isset($_GET['q'])) { echo json_encode(array('error' => "Missing search param q")); die(); } -if( strlen($_GET['q']) <= 2 ) { + +/* Filters */ +$groups = array(); +if(isset($_GET['filter_groups']) && strlen($_GET['filter_groups']) > 0 ) { + if( !strstr(",", $_GET['filter_groups']) ) { + $groups = array($_GET['filter_groups']); + } else { + $groups = explode($_GET['filter_groups'], ","); + } + foreach($groups as $group) { + if( !is_numeric($group) ) { + set_response_code(400); + echo json_encode(array('error' => "Value in filter_groups must be numeric: '".$group."'")); + die(); + } + } +} + +if( strlen($_GET['q']) <= 2 && count($groups) == 0 ) { set_response_code(400); echo json_encode(array('error' => "Search param must be longer than 2 chars")); die(); @@ -58,13 +81,25 @@ $query = $_GET['q']; $query = "%" . str_replace(" ", "% %", $query) . "%"; $query = $conn->quoteSmart($query); + // Search query +$user_search_query = "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"; + $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"; + WHERE $user_search_query"; + +// Search query with groups +if(count($groups) > 0) { + $sql = "SELECT DISTINCT u.id + FROM din_user u + LEFT JOIN din_usergrouprelationship as ug ON u.id=ug.user_id + WHERE ($user_search_query) + AND ug.group_id IN(".implode($groups, ",").")"; +} $res = $conn->getAll($sql); if( DB::isError($res) ) {