Author: chabotc
Date: Sat Jul 19 14:48:32 2008
New Revision: 678227

URL: http://svn.apache.org/viewvc?rev=678227&view=rev
Log:
This commit adds support for Atom format input for creating
Activities & setting app data (ie all the write actions that
are available through javascript right now).



Modified:
    incubator/shindig/trunk/php/src/social-api/converters/InputAtomConverter.php
    incubator/shindig/trunk/php/src/social-api/converters/InputConverter.php
    incubator/shindig/trunk/php/src/social-api/converters/InputJsonConverter.php
    incubator/shindig/trunk/php/src/social-api/dataservice/AppDataHandler.php

Modified: 
incubator/shindig/trunk/php/src/social-api/converters/InputAtomConverter.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/social-api/converters/InputAtomConverter.php?rev=678227&r1=678226&r2=678227&view=diff
==============================================================================
--- 
incubator/shindig/trunk/php/src/social-api/converters/InputAtomConverter.php 
(original)
+++ 
incubator/shindig/trunk/php/src/social-api/converters/InputAtomConverter.php 
Sat Jul 19 14:48:32 2008
@@ -1,5 +1,4 @@
 <?php
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements. See the NOTICE file
@@ -21,26 +20,55 @@
 /**
  * Convert Atom representations to the internal data structure representation
  */
-class InputAtomConverter {
+class InputAtomConverter extends InputConverter {
 
        public function convertPeople($requestParam)
        {
-               $xml = simplexml_load_string($requestParam);
-               print_r($xml);
-               die();
+               throw new Exception("Operation not supported");
        }
 
        public function convertActivities($requestParam)
        {
-               $xml = simplexml_load_string($requestParam);
-               print_r($xml);
-               die();
+               $activity = array();
+               $xml = simplexml_load_string($requestParam, 'SimpleXMLElement', 
LIBXML_NOCDATA);
+               if (!isset($xml->title)) {
+                       throw new Exception("Mallformed activity xml");
+               }
+               // remember to either type cast to (string) or trim() the 
string so we don't get 
+               // SimpleXMLString types in the internal data representation. I 
often prefer
+               // using trim() since it cleans up the data too
+               $activity['id'] = isset($xml->id) ? trim($xml->id) : ''; 
+               $activity['title'] = trim($xml->title);
+               $activity['body'] = isset($xml->summary) ? trim($xml->summary) 
: ''; 
+               $activity['streamTitle'] = 
isset($xml->content->activity->streamTitle) ? 
trim($xml->content->activity->streamTitle) : ''; 
+               $activity['streamId'] = 
isset($xml->content->activity->streamId) ? 
trim($xml->content->activity->streamId) : ''; 
+               $activity['updated'] = isset($xml->updated) ? 
trim($xml->updated) : ''; 
+               if (isset($xml->content->activity->mediaItems)) {
+                       $activity['mediaItems'] = array();
+                       foreach ($xml->content->activity->mediaItems->MediaItem 
as $mediaItem) {
+                               $item = array();
+                               if (!isset($mediaItem->type) || 
!isset($mediaItem->mimeType) || !isset($mediaItem->url)) {
+                                       throw new Exception("Invalid media item 
in activity xml");
+                               }
+                               $item['type'] = trim($mediaItem->type);
+                               $item['mimeType'] = trim($mediaItem->mimeType);
+                               $item['url'] = trim($mediaItem->url);
+                               $activity['mediaItems'][] = $item;
+                       }
+               }
+               return $activity;
        }
 
        public function convertAppData($requestParam)
        {
-               $xml = simplexml_load_string($requestParam);
-               print_r($xml);
-               die();
+               $xml = simplexml_load_string($requestParam, 'SimpleXMLElement', 
LIBXML_NOCDATA);
+               if (!isset($xml->content) || !isset($xml->content->appdata)) {
+                       throw new Exception("Mallformed AppData xml");
+               }
+               $data = array();
+               foreach (get_object_vars($xml->content->appdata) as $key => 
$val) {
+                       $data[trim($key)] = trim($val);
+               }
+               return $data;
        }
 }

Modified: 
incubator/shindig/trunk/php/src/social-api/converters/InputConverter.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/social-api/converters/InputConverter.php?rev=678227&r1=678226&r2=678227&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/social-api/converters/InputConverter.php 
(original)
+++ incubator/shindig/trunk/php/src/social-api/converters/InputConverter.php 
Sat Jul 19 14:48:32 2008
@@ -25,7 +25,7 @@
  * hoisting rules somewhere..
  */
 abstract class InputConverter {
-       abstract public function convertPeople();
-       abstract public function convertActivities();
-       abstract public function convertAppData();      
+       abstract public function convertPeople($requestParam);
+       abstract public function convertActivities($requestParam);
+       abstract public function convertAppData($requestParam);
 }
\ No newline at end of file

Modified: 
incubator/shindig/trunk/php/src/social-api/converters/InputJsonConverter.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/social-api/converters/InputJsonConverter.php?rev=678227&r1=678226&r2=678227&view=diff
==============================================================================
--- 
incubator/shindig/trunk/php/src/social-api/converters/InputJsonConverter.php 
(original)
+++ 
incubator/shindig/trunk/php/src/social-api/converters/InputJsonConverter.php 
Sat Jul 19 14:48:32 2008
@@ -20,25 +20,37 @@
 /**
  * Convert json representations to the internal data structure representation
  */
-class InputJsonConverter {
+class InputJsonConverter extends InputConverter {
 
        public function convertPeople($requestParam)
        {
-               return json_decode($requestParam, true);
+               throw new Exception("Opperation not supported");
        }
 
        public function convertActivities($requestParam)
        {
-               return json_decode($requestParam, true);
+               $ret = json_decode($requestParam, true);
+               if ($ret == $requestParam) {
+                       throw new Exception("Mallformed activity json string");
+               }
+               return $ret;
        }
 
        public function convertAppData($requestParam)
        {
-               return json_decode($requestParam, true);
+               $ret = json_decode($requestParam, true);
+               if ($ret == $requestParam) {
+                       throw new Exception("Mallformed app data json string");
+               }
+               return $ret;
        }
 
        public function convertJsonBatch($requestParam)
        {
-               return json_decode($requestParam, true);
+               $ret = json_decode($requestParam, true);
+               if ($ret == $requestParam) {
+                       throw new Exception("Mallformed json batch string");
+               }
+               return $ret;
        }
 }

Modified: 
incubator/shindig/trunk/php/src/social-api/dataservice/AppDataHandler.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/social-api/dataservice/AppDataHandler.php?rev=678227&r1=678226&r2=678227&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/social-api/dataservice/AppDataHandler.php 
(original)
+++ incubator/shindig/trunk/php/src/social-api/dataservice/AppDataHandler.php 
Sat Jul 19 14:48:32 2008
@@ -35,9 +35,6 @@
         * /appdata/john.doe/@friends/app?fields=count
         * /appdata/john.doe/@self/app
         *
-        * The post data should be a regular json object. All of the fields 
vars will
-        * be pulled from the values and set on the person object. If there are 
no
-        * fields vars then all of the data will be overridden.
         */
        public function handleDelete(RestRequestItem $requestItem)
        {
@@ -74,7 +71,15 @@
        public function handlePost(RestRequestItem $requestItem)
        {
                $requestItem->parseUrlWithTemplate(self::$APP_DATA_PATH);
-               return 
$this->service->updatePersonData($requestItem->getUser(), 
$requestItem->getGroup(), $requestItem->getFields(), 
$requestItem->getPostData(), $requestItem->getAppId(), 
$requestItem->getToken());
+               // if no ?fields=foo,bar was specified, we try to guess them 
from the post data
+               $postFields = array();
+               if ($requestItem->getPostData() != null) {
+                       $data = $requestItem->getPostData();
+                       foreach ($data as $key => $val) {
+                               $postFields[] = $key;
+                       }
+               }
+               return 
$this->service->updatePersonData($requestItem->getUser(), 
$requestItem->getGroup(), $requestItem->getFieldsWithDefaultValue($postFields), 
$requestItem->getPostData(), $requestItem->getAppId(), 
$requestItem->getToken());
        }
 
        /**


Reply via email to