You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by ch...@apache.org on 2008/10/14 23:53:15 UTC
svn commit: r704704 -
/incubator/shindig/trunk/php/src/social/sample/JsonDbOpensocialService.php
Author: chabotc
Date: Tue Oct 14 14:53:14 2008
New Revision: 704704
URL: http://svn.apache.org/viewvc?rev=704704&view=rev
Log:
SHINDIG-653 incremental improvement to the jsondb sample code, not completely done yet i think but very close to it now
Modified:
incubator/shindig/trunk/php/src/social/sample/JsonDbOpensocialService.php
Modified: incubator/shindig/trunk/php/src/social/sample/JsonDbOpensocialService.php
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/social/sample/JsonDbOpensocialService.php?rev=704704&r1=704703&r2=704704&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/social/sample/JsonDbOpensocialService.php (original)
+++ incubator/shindig/trunk/php/src/social/sample/JsonDbOpensocialService.php Tue Oct 14 14:53:14 2008
@@ -67,30 +67,30 @@
$fileName = sys_get_temp_dir() . '/' . $this->jsonDbFileName;
if (file_exists($fileName)) {
if (! is_readable($fileName)) {
- throw new Exception("Could not read temp json db file: $fileName, check permissions");
+ throw new SocialSpiException("Could not read temp json db file: $fileName, check permissions", ResponseError::$INTERNAL_ERROR);
}
$cachedDb = file_get_contents($fileName);
$jsonDecoded = json_decode($cachedDb, true);
if ($jsonDecoded == $cachedDb) {
- throw new Exception("Failed to decode the json db");
+ throw new SocialSpiException("Failed to decode the json db", ResponseError::$INTERNAL_ERROR);
}
return $jsonDecoded;
} else {
$jsonDb = Config::get('jsondb_path');
if (! file_exists($jsonDb) || ! is_readable($jsonDb)) {
- throw new Exception("Could not read json db file: $jsonDb, check if the file exists & has proper permissions");
+ throw new SocialSpiException("Could not read json db file: $jsonDb, check if the file exists & has proper permissions", ResponseError::$INTERNAL_ERROR);
}
$dbConfig = @file_get_contents($jsonDb);
$contents = preg_replace('/[^http:\/\/|^https:\/\/]\/\/.*$/m', '', preg_replace('@/\\*(?:.|[\\n\\r])*?\\*/@', '', $dbConfig));
$jsonDecoded = json_decode($contents, true);
if ($jsonDecoded == $contents) {
- throw new Exception("Failed to decode the json db");
+ throw new SocialSpiException("Failed to decode the json db", ResponseError::$INTERNAL_ERROR);
}
$this->saveDb($jsonDecoded);
return $jsonDecoded;
}
} catch (Exception $e) {
- throw new Exception("An error occured while reading/writing the json db: " . $e);
+ throw new SocialSpiException("An error occured while reading/writing the json db: " . $e->getMessage(), ResponseError::$INTERNAL_ERROR);
}
}
@@ -149,13 +149,17 @@
public function getPerson($userId, $groupId, $fields, SecurityToken $token)
{
+ if (! is_object($groupId)) {
+ throw new SocialSpiException("Not Implemented", ResponseError::$NOT_IMPLEMENTED);
+ }
$person = $this->getPeople($userId, $groupId, new CollectionOptions(), $fields, $token);
- // return of getPeople is a ResponseItem(RestfulCollection(ArrayOfPeople)), disassemble to return just one person
- $person = $person->getResponse()->getEntry();
- if (is_array($person) && count($person) == 1) {
- return new ResponseItem(null, null, $person[0]);
+ if (is_array($person->getEntry())) {
+ $person = $person->getEntry();
+ if (is_array($person) && count($person) == 1) {
+ return array_pop($person);
+ }
}
- return new ResponseItem(NOT_FOUND, "Person not found", null);
+ throw new SocialSpiException("Person not found", ResponseError::$BAD_REQUEST);
}
public function getPeople($userId, $groupId, CollectionOptions $options, $fields, SecurityToken $token)
@@ -191,6 +195,7 @@
$newPerson['isOwner'] = isset($person['isOwner']) ? $person['isOwner'] : false;
$newPerson['isViewer'] = isset($person['isViewer']) ? $person['isViewer'] : false;
$newPerson['name'] = $person['name'];
+ $newPerson['displayName'] = $person['displayName'];
foreach ($fields as $field => $present) {
$present = strtolower($present);
if (isset($person[$present]) && ! isset($newPerson[$present])) {
@@ -207,13 +212,9 @@
}
//TODO: The samplecontainer doesn't support any filters yet. We should fix this.
$totalSize = count($people);
- $last = $first + $max;
- $last = min($last, $totalSize);
- if ($first !== false && $first != null && $last) {
- $people = array_slice($people, $first, $last);
- }
- $collection = new RestfulCollection($people, $first, $totalSize);
- return new ResponseItem(null, null, $collection);
+ $collection = new RestfulCollection($people, $options->getStartIndex(), $totalSize);
+ $collection->setItemsPerPage($options->getCount());
+ return $collection;
}
public function getPersonData($userId, GroupId $groupId, $appId, $fields, SecurityToken $token)
@@ -223,28 +224,27 @@
$friendsTable = $db[self::$FRIEND_LINK_TABLE];
$data = array();
$ids = $this->getIdSet($userId, $groupId, $token);
-
foreach ($ids as $id) {
if (isset($allData[$id])) {
$allPersonData = $allData[$id];
$personData = array();
foreach (array_keys($allPersonData) as $key) {
- if (isset($fields[$key]) || isset($fields['@all'])) {
+ if (in_array($key, $fields) || in_array("@all", $fields)) {
$personData[$key] = $allPersonData[$key];
}
}
$data[$id] = $personData;
}
}
- return new ResponseItem(null, null, RestfulCollection::createFromEntry($data));
+ return new DataCollection($data);
}
public function updatePersonData(UserId $userId, GroupId $groupId, $appId, $fields, $values, SecurityToken $token)
{
$db = $this->getDb();
foreach ($fields as $key => $present) {
- if (! $this->isValidKey($key)) {
- return new ResponseItem(BAD_REQUEST, "The person app data key had invalid characters", null);
+ if (! $this->isValidKey($present)) {
+ throw new SocialSpiException("The person app data key had invalid characters", ResponseError::$BAD_REQUEST);
}
}
$allData = $this->getAllData();
@@ -252,52 +252,56 @@
switch ($groupId->getType()) {
case 'self':
foreach ($fields as $key => $present) {
- $value = isset($values[$key]) ? @$values[$key] : null;
- $person[$key] = $value;
+ $value = isset($values[$present]) ? @$values[$present] : null;
+ $person[$present] = $value;
}
break;
default:
- return new ResponseItem(NOT_IMPLEMENTED, "We don't support updating data in batches yet", null);
+ throw new SocialSpiException("We don't support updating data in batches yet", ResponseError::$NOT_IMPLEMENTED);
break;
}
$allData[$userId->getUserId($token)] = $person;
$db[self::$DATA_TABLE] = $allData;
$this->saveDb($db);
- return new ResponseItem(null, null, array());
+ return null;
}
public function deletePersonData($userId, GroupId $groupId, $appId, $fields, SecurityToken $token)
{
foreach ($fields as $key => $present) {
if (! $this->isValidKey($key)) {
- return new ResponseItem(BAD_REQUEST, "The person app data key had invalid characters", null);
+ throw new SocialSpiException("The person app data key had invalid characters", ResponseError::$BAD_REQUEST);
}
}
switch ($groupId->getType()) {
case 'self':
- foreach ($fields as $key => $present) { //TODO: actually implement this!
+ foreach ($fields as $key => $present) {
+ $value = isset($values[$key]) ? null : @$values[$key];
+ $person[$key] = $value;
}
+ $allData[$userId->getUserId($token)] = $person;
+ $db[self::$DATA_TABLE] = $allData;
+ $this->saveDb($db);
break;
default:
- return new ResponseItem(NOT_IMPLEMENTED, "We don't support deleting data in batches yet", null);
+ throw new SocialSpiException("We don't support updating data in batches yet", ResponseError::$NOT_IMPLEMENTED);
break;
}
- return new ResponseItem(null, null, array());
+ return null;
}
public function getActivity($userId, $groupId, $appdId, $fields, $activityId, SecurityToken $token)
{
$activities = $this->getActivities($userId, $groupId, $appdId, null, null, null, null, $fields, $token);
- $activities = $activities->getResponse();
if ($activities instanceof RestfulCollection) {
$activities = $activities->getEntry();
foreach ($activities as $activity) {
- if ($activity['id'] == $activityId) {
- return new ResponseItem(null, null, $activity);
+ if ($activity->getId() == $activityId) {
+ return $activity;
}
}
}
- return new ResponseItem(NOT_FOUND, "Activity not found", null);
+ throw new SocialSpiException("Activity not found", ResponseError::$NOT_FOUND);
}
public function getActivities($userIds, $groupId, $appId, $sortBy, $filterBy, $startIndex, $count, $fields, $token)
@@ -313,8 +317,13 @@
$activities = array_merge($activities, $allActivities[$id]);
}
}
- // TODO: Sort them
- return new ResponseItem(null, null, RestfulCollection::createFromEntry($activities));
+ $totalResults = count($activities);
+ if (! $totalResults) {
+ throw new SocialSpiException("Activity not found", ResponseError::$NOT_FOUND);
+ }
+ $ret = new RestfulCollection($activities, $startIndex, $totalResults);
+ $ret->setItemsPerPage($count);
+ return $ret;
}
public function createActivity($userId, $groupId, $appId, $fields, $activity, SecurityToken $token)
@@ -322,12 +331,16 @@
$db = $this->getDb();
$activitiesTable = $this->getAllActivities();
$activity['appId'] = $token->getAppId();
- array_push($activitiesTable[$userId->getUserId($token)], $activity);
- $db[self::$ACTIVITIES_TABLE] = $activitiesTable;
- $this->saveDb($db);
- return new ResponseItem(null, null, array());
+ try {
+ array_push($activitiesTable[$userId->getUserId($token)], $activity);
+ $db[self::$ACTIVITIES_TABLE] = $activitiesTable;
+ $this->saveDb($db);
+ // Should this return something to show success?
+ } catch (Exception $e) {
+ throw new SocialSpiException("Activity can't be created: " . $e->getMessage(), ResponseError::$INTERNAL_ERROR);
+ }
}
-
+
public function deleteActivities($userId, $groupId, $appId, $activityIds, SecurityToken $token)
{
throw new SocialSpiException("Not implemented", ResponseError::$NOT_IMPLEMENTED);
@@ -335,7 +348,7 @@
public function createMessage($userId, $message, SecurityToken $token)
{
- return new ResponseItem(NOT_IMPLEMENTED, "Not implemented", null);
+ throw new SocialSpiException("Not implemented", ResponseError::$NOT_IMPLEMENTED);
}
/**
@@ -405,4 +418,4 @@
}
return $ids;
}
-}
\ No newline at end of file
+}