Skip to content

Commit

Permalink
adding the user resources to the v2 API
Browse files Browse the repository at this point in the history
  • Loading branch information
lornajane committed Apr 30, 2012
1 parent 9d725ef commit 884e875
Show file tree
Hide file tree
Showing 2 changed files with 164 additions and 0 deletions.
45 changes: 45 additions & 0 deletions src/api-v2/controllers/UsersController.php
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;
}
}
119 changes: 119 additions & 0 deletions src/api-v2/models/UserMapper.php
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;
}

}

0 comments on commit 884e875

Please sign in to comment.