forked from joindin/joindin-legacy
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adding the user resources to the v2 API
- Loading branch information
Showing
2 changed files
with
164 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
<?php | ||
|
||
class UsersController extends ApiController { | ||
public function handle($request, $db) { | ||
// only GET is implemented so far | ||
if($request->verb == 'GET') { | ||
return $this->getAction($request, $db); | ||
} | ||
return false; | ||
} | ||
|
||
public function getAction($request, $db) { | ||
$user_id = $this->getItemId($request); | ||
|
||
// verbosity | ||
$verbose = $this->getVerbosity($request); | ||
|
||
// pagination settings | ||
$start = $this->getStart($request); | ||
$resultsperpage = $this->getResultsPerPage($request); | ||
|
||
if(isset($request->url_elements[4])) { | ||
switch($request->url_elements[4]) { | ||
/* | ||
case 'talks': | ||
$talk_mapper = new TalkMapper($db, $request); | ||
$list = $talk_mapper->getTalksByEventId($event_id, $resultsperpage, $start, $request, $verbose); | ||
break; | ||
*/ | ||
default: | ||
throw new InvalidArgumentException('Unknown Subrequest', 404); | ||
break; | ||
} | ||
} else { | ||
$mapper = new UserMapper($db, $request); | ||
if($user_id) { | ||
$list = $mapper->getUserById($user_id, $verbose); | ||
} else { | ||
$list = $mapper->getUserList($resultsperpage, $start, $verbose); | ||
} | ||
} | ||
|
||
return $list; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
<?php | ||
|
||
/** | ||
* UserMapper | ||
* | ||
* @uses ApiModel | ||
* @package API | ||
*/ | ||
class UserMapper extends ApiMapper | ||
{ | ||
|
||
/** | ||
* Default mapping for column names to API field names | ||
* | ||
* @return array with keys as API fields and values as db columns | ||
*/ | ||
public function getDefaultFields() | ||
{ | ||
$fields = array( | ||
"username" => "username", | ||
"full_name" => "full_name", | ||
"twitter_username" => "twitter_username" | ||
); | ||
return $fields; | ||
} | ||
|
||
/** | ||
* Field/column name mappings for the verbose version | ||
* | ||
* This should contain everything above and then more in most cases | ||
* | ||
* @return array with keys as API fields and values as db columns | ||
*/ | ||
public function getVerboseFields() | ||
{ | ||
$fields = array( | ||
"username" => "username", | ||
"full_name" => "full_name", | ||
"twitter_username" => "twitter_username", | ||
"last_login" => "last_login" | ||
); | ||
return $fields; | ||
} | ||
|
||
public function getUserById($user_id, $verbose = false) | ||
{ | ||
$results = $this->getUsers(1, 0, 'ID=' . (int)$user_id, null); | ||
if ($results) { | ||
$retval = $this->transformResults($results, $verbose); | ||
return $retval; | ||
} | ||
return false; | ||
|
||
} | ||
|
||
protected function getUsers($resultsperpage, $start, $where = null, $order = null) | ||
{ | ||
$sql = 'select user.* ' | ||
. 'from user ' | ||
. 'where active = 1 '; | ||
|
||
// where | ||
if ($where) { | ||
$sql .= ' and ' . $where; | ||
} | ||
|
||
// order by | ||
if ($order) { | ||
$sql .= ' order by ' . $order; | ||
} | ||
|
||
// limit clause | ||
$sql .= $this->buildLimit($resultsperpage, $start); | ||
|
||
$stmt = $this->_db->prepare($sql); | ||
|
||
$response = $stmt->execute(); | ||
if ($response) { | ||
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); | ||
return $results; | ||
} | ||
return false; | ||
} | ||
|
||
public function getUserList($resultsperpage, $start, $verbose = false) | ||
{ | ||
$order = 'user.ID'; | ||
$results = $this->getUsers($resultsperpage, $start, null, $order); | ||
if (is_array($results)) { | ||
$retval = $this->transformResults($results, $verbose); | ||
return $retval; | ||
} | ||
return false; | ||
} | ||
|
||
public function transformResults($results, $verbose) | ||
{ | ||
$list = parent::transformResults($results, $verbose); | ||
$base = $this->_request->base; | ||
$version = $this->_request->version; | ||
|
||
// add per-item links | ||
if (is_array($list) && count($list)) { | ||
foreach ($results as $key => $row) { | ||
$list[$key]['uri'] = $base . '/' . $version . '/users/' | ||
. $row['ID']; | ||
$list[$key]['verbose_uri'] = $base . '/' . $version . '/users/' | ||
. $row['ID'] . '?verbose=yes'; | ||
$list[$key]['website_uri'] = 'http://joind.in/user/view/' . $row['ID']; | ||
} | ||
} | ||
$retval = array(); | ||
$retval['users'] = $list; | ||
$retval['meta'] = $this->getPaginationLinks($list); | ||
|
||
return $retval; | ||
} | ||
|
||
} |