]> source.dussan.org Git - nextcloud-server.git/commitdiff
moving response classes over to OCP
authorThomas Müller <thomas.mueller@tmit.eu>
Tue, 20 Aug 2013 23:00:26 +0000 (01:00 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Tue, 20 Aug 2013 23:00:26 +0000 (01:00 +0200)
15 files changed:
lib/appframework/controller/controller.php
lib/appframework/http/dispatcher.php
lib/appframework/http/downloadresponse.php
lib/appframework/http/http.php
lib/appframework/http/jsonresponse.php [deleted file]
lib/appframework/http/redirectresponse.php
lib/appframework/http/response.php [deleted file]
lib/appframework/http/templateresponse.php [deleted file]
lib/appframework/middleware/middleware.php
lib/appframework/middleware/middlewaredispatcher.php
lib/appframework/middleware/security/securitymiddleware.php
lib/public/appframework/http/http.php [new file with mode: 0644]
lib/public/appframework/http/jsonresponse.php [new file with mode: 0644]
lib/public/appframework/http/response.php [new file with mode: 0644]
lib/public/appframework/http/templateresponse.php [new file with mode: 0644]

index f6f34618ec66790365864156c47bbc761c88cb15..a7498ba0e1e7c579b706449d217e0f88c4c16ac2 100644 (file)
@@ -24,9 +24,9 @@
 
 namespace OC\AppFramework\Controller;
 
-use OC\AppFramework\Http\TemplateResponse;
 use OC\AppFramework\Http\Request;
 use OC\AppFramework\Core\API;
+use OCP\AppFramework\Http\TemplateResponse;
 
 
 /**
@@ -133,7 +133,7 @@ abstract class Controller {
         * @param string $renderAs user renders a full page, blank only your template
         *                          admin an entry in the admin settings
         * @param array $headers set additional headers in name/value pairs
-        * @return \OC\AppFramework\Http\TemplateResponse containing the page
+        * @return \OCP\AppFramework\Http\TemplateResponse containing the page
         */
        public function render($templateName, array $params=array(),
                                                        $renderAs='user', array $headers=array()){
index 183854650fb915e3469da9fcb782f5b94721527e..ea57a6860cc27ea4fa4b3c9c8f8ba0a8a8db7666 100644 (file)
@@ -74,6 +74,9 @@ class Dispatcher {
                } catch(\Exception $exception){
                        $response = $this->middlewareDispatcher->afterException(
                                $controller, $methodName, $exception);
+                       if (is_null($response)) {
+                               throw $exception;
+                       }
                }
 
                $response = $this->middlewareDispatcher->afterController(
index 096e4fc83312162a8ab139fe28b5f5bdb72bcf2a..67b9542dba6956dc9ef919b809edf5195917a6e7 100644 (file)
@@ -28,7 +28,7 @@ namespace OC\AppFramework\Http;
 /**
  * Prompts the user to download the a file
  */
-abstract class DownloadResponse extends Response {
+class DownloadResponse extends \OCP\AppFramework\Http\Response {
 
        private $filename;
        private $contentType;
index 73f32d13b38956465b966ab42aeacae833d81af5..e00dc9cdc4a2514a34e13e958cd904fd8e858952 100644 (file)
 namespace OC\AppFramework\Http;
 
 
-class Http {
-
-       const STATUS_CONTINUE = 100;
-       const STATUS_SWITCHING_PROTOCOLS = 101;
-       const STATUS_PROCESSING = 102;
-       const STATUS_OK = 200;
-       const STATUS_CREATED = 201;
-       const STATUS_ACCEPTED = 202;
-       const STATUS_NON_AUTHORATIVE_INFORMATION = 203;
-       const STATUS_NO_CONTENT = 204;
-       const STATUS_RESET_CONTENT = 205;
-       const STATUS_PARTIAL_CONTENT = 206;
-       const STATUS_MULTI_STATUS = 207;
-       const STATUS_ALREADY_REPORTED = 208;
-       const STATUS_IM_USED = 226;
-       const STATUS_MULTIPLE_CHOICES = 300;
-       const STATUS_MOVED_PERMANENTLY = 301;
-       const STATUS_FOUND = 302;
-       const STATUS_SEE_OTHER = 303;
-       const STATUS_NOT_MODIFIED = 304;
-       const STATUS_USE_PROXY = 305;
-       const STATUS_RESERVED = 306;
-       const STATUS_TEMPORARY_REDIRECT = 307;
-       const STATUS_BAD_REQUEST = 400;
-       const STATUS_UNAUTHORIZED = 401;
-       const STATUS_PAYMENT_REQUIRED = 402;
-       const STATUS_FORBIDDEN = 403;
-       const STATUS_NOT_FOUND = 404;
-       const STATUS_METHOD_NOT_ALLOWED = 405;
-       const STATUS_NOT_ACCEPTABLE = 406;
-       const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407;
-       const STATUS_REQUEST_TIMEOUT = 408;
-       const STATUS_CONFLICT = 409;
-       const STATUS_GONE = 410;
-       const STATUS_LENGTH_REQUIRED = 411;
-       const STATUS_PRECONDITION_FAILED = 412;
-       const STATUS_REQUEST_ENTITY_TOO_LARGE = 413;
-       const STATUS_REQUEST_URI_TOO_LONG = 414;
-       const STATUS_UNSUPPORTED_MEDIA_TYPE = 415;
-       const STATUS_REQUEST_RANGE_NOT_SATISFIABLE = 416;
-       const STATUS_EXPECTATION_FAILED = 417;
-       const STATUS_IM_A_TEAPOT = 418;
-       const STATUS_UNPROCESSABLE_ENTITY = 422;
-       const STATUS_LOCKED = 423;
-       const STATUS_FAILED_DEPENDENCY = 424;
-       const STATUS_UPGRADE_REQUIRED = 426;
-       const STATUS_PRECONDITION_REQUIRED = 428;
-       const STATUS_TOO_MANY_REQUESTS = 429;
-       const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
-       const STATUS_INTERNAL_SERVER_ERROR = 500;
-       const STATUS_NOT_IMPLEMENTED = 501;
-       const STATUS_BAD_GATEWAY = 502;
-       const STATUS_SERVICE_UNAVAILABLE = 503;
-       const STATUS_GATEWAY_TIMEOUT = 504;
-       const STATUS_HTTP_VERSION_NOT_SUPPORTED = 505;
-       const STATUS_VARIANT_ALSO_NEGOTIATES = 506;
-       const STATUS_INSUFFICIENT_STORAGE = 507;
-       const STATUS_LOOP_DETECTED = 508;
-       const STATUS_BANDWIDTH_LIMIT_EXCEEDED = 509;
-       const STATUS_NOT_EXTENDED = 510;
-       const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511;
+class Http extends \OCP\AppFramework\Http\Http{
 
        private $server;
        private $protocolVersion;
diff --git a/lib/appframework/http/jsonresponse.php b/lib/appframework/http/jsonresponse.php
deleted file mode 100644 (file)
index 750f8a2..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/**
- * ownCloud - App Framework
- *
- * @author Bernhard Posselt
- * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-namespace OC\AppFramework\Http;
-
-
-/**
- * A renderer for JSON calls
- */
-class JSONResponse extends Response {
-
-       protected $data;
-
-
-       /**
-        * @param array|object $data the object or array that should be transformed
-        * @param int $statusCode the Http status code, defaults to 200
-        */
-       public function __construct($data=array(), $statusCode=Http::STATUS_OK) {
-               $this->data = $data;
-               $this->setStatus($statusCode);
-               $this->addHeader('X-Content-Type-Options', 'nosniff');
-               $this->addHeader('Content-type', 'application/json; charset=utf-8');
-       }
-
-
-       /**
-        * Returns the rendered json
-        * @return string the rendered json
-        */
-       public function render(){
-               return json_encode($this->data);
-       }
-
-       /**
-        * Sets values in the data json array
-        * @param array|object $params an array or object which will be transformed
-        *                             to JSON
-        */
-       public function setData($data){
-               $this->data = $data;
-       }
-
-
-       /**
-        * Used to get the set parameters
-        * @return array the data
-        */
-       public function getData(){
-               return $this->data;
-       }
-
-}
index 727e0fb642e4df713cadf1fb1a65e50229950dc1..688447f16180c2943a704cad0c95009d1d627841 100644 (file)
@@ -24,6 +24,8 @@
 
 namespace OC\AppFramework\Http;
 
+use OCP\AppFramework\Http\Response;
+
 
 /**
  * Redirects to a different URL
diff --git a/lib/appframework/http/response.php b/lib/appframework/http/response.php
deleted file mode 100644 (file)
index 5077810..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-
-/**
- * ownCloud - App Framework
- *
- * @author Bernhard Posselt, Thomas Tanghus, Bart Visscher
- * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-namespace OC\AppFramework\Http;
-
-
-/**
- * Base class for responses. Also used to just send headers
- */
-class Response {
-
-       /**
-        * @var array default headers
-        */
-       private $headers = array(
-               'Cache-Control' => 'no-cache, must-revalidate'
-       );
-
-
-       /**
-        * @var string
-        */
-       private $status = Http::STATUS_OK;
-
-
-       /**
-        * @var \DateTime
-        */
-       private $lastModified;
-
-
-       /**
-        * @var string
-        */
-       private $ETag;
-
-
-       /**
-        * Caches the response
-        * @param int $cacheSeconds the amount of seconds that should be cached
-        * if 0 then caching will be disabled
-        */
-       public function cacheFor($cacheSeconds) {
-
-               if($cacheSeconds > 0) {
-                       $this->addHeader('Cache-Control', 'max-age=' . $cacheSeconds . 
-                               ', must-revalidate');
-               } else {
-                       $this->addHeader('Cache-Control', 'no-cache, must-revalidate');
-               }
-
-       }
-
-
-       /**
-        * Adds a new header to the response that will be called before the render
-        * function
-        * @param string $name The name of the HTTP header
-        * @param string $value The value, null will delete it
-        */
-       public function addHeader($name, $value) {
-               if(is_null($value)) {
-                       unset($this->headers[$name]);
-               } else {
-                       $this->headers[$name] = $value;
-               }
-       }
-
-
-       /**
-        * Returns the set headers
-        * @return array the headers
-        */
-       public function getHeaders() {
-               $mergeWith = array();
-               
-               if($this->lastModified) {
-                       $mergeWith['Last-Modified'] = 
-                               $this->lastModified->format(\DateTime::RFC2822);
-               }
-
-               if($this->ETag) {
-                       $mergeWith['ETag'] = '"' . $this->ETag . '"';
-               }
-                       
-               return array_merge($mergeWith, $this->headers);
-       }
-
-
-       /**
-        * By default renders no output
-        * @return null
-        */
-       public function render() {
-               return null;
-       }
-
-
-       /**
-       * Set response status
-       * @param int $status a HTTP status code, see also the STATUS constants
-       */
-       public function setStatus($status) {
-               $this->status = $status;
-       }
-
-
-       /**
-        * Get response status
-        */
-       public function getStatus() {
-               return $this->status;
-       }
-
-
-       /**
-        * @return string the etag
-        */
-       public function getETag() {
-               return $this->ETag;
-       }
-
-
-       /**
-        * @return string RFC2822 formatted last modified date
-        */
-       public function getLastModified() {
-               return $this->lastModified;
-       }
-
-
-       /**
-        * @param string $ETag
-        */
-       public function setETag($ETag) {
-               $this->ETag = $ETag;
-       }
-
-
-       /**
-        * @param \DateTime $lastModified
-        */
-       public function setLastModified($lastModified) {
-               $this->lastModified = $lastModified;
-       }
-
-
-}
diff --git a/lib/appframework/http/templateresponse.php b/lib/appframework/http/templateresponse.php
deleted file mode 100644 (file)
index 0a32da4..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
-/**
- * ownCloud - App Framework
- *
- * @author Bernhard Posselt
- * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-namespace OC\AppFramework\Http;
-
-use OC\AppFramework\Core\API;
-
-
-/**
- * Response for a normal template
- */
-class TemplateResponse extends Response {
-
-       protected $templateName;
-       protected $params;
-       protected $api;
-       protected $renderAs;
-       protected $appName;
-
-       /**
-        * @param API $api an API instance
-        * @param string $templateName the name of the template
-        * @param string $appName optional if you want to include a template from
-        *                        a different app
-        */
-       public function __construct(API $api, $templateName, $appName=null) {
-               $this->templateName = $templateName;
-               $this->appName = $appName;
-               $this->api = $api;
-               $this->params = array();
-               $this->renderAs = 'user';
-       }
-
-
-       /**
-        * Sets template parameters
-        * @param array $params an array with key => value structure which sets template
-        *                      variables
-        */
-       public function setParams(array $params){
-               $this->params = $params;
-       }
-
-
-       /**
-        * Used for accessing the set parameters
-        * @return array the params
-        */
-       public function getParams(){
-               return $this->params;
-       }
-
-
-       /**
-        * Used for accessing the name of the set template
-        * @return string the name of the used template
-        */
-       public function getTemplateName(){
-               return $this->templateName;
-       }
-
-
-       /**
-        * Sets the template page
-        * @param string $renderAs admin, user or blank. Admin also prints the admin
-        *                         settings header and footer, user renders the normal
-        *                         normal page including footer and header and blank
-        *                         just renders the plain template
-        */
-       public function renderAs($renderAs){
-               $this->renderAs = $renderAs;
-       }
-
-
-       /**
-        * Returns the set renderAs
-        * @return string the renderAs value
-        */
-       public function getRenderAs(){
-               return $this->renderAs;
-       }
-
-
-       /**
-        * Returns the rendered html
-        * @return string the rendered html
-        */
-       public function render(){
-
-               if($this->appName !== null){
-                       $appName = $this->appName;
-               } else {
-                       $appName = $this->api->getAppName();
-               }
-
-               $template = $this->api->getTemplate($this->templateName, $this->renderAs, $appName);
-
-               foreach($this->params as $key => $value){
-                       $template->assign($key, $value);
-               }
-
-               return $template->fetchPage();
-       }
-
-}
index 4df884904685ea596fb8469e46782f668216079a..b12c03c3eb8da3627077f148679bc5d8aa8dd09e 100644 (file)
@@ -24,7 +24,7 @@
 
 namespace OC\AppFramework\Middleware;
 
-use OC\AppFramework\Http\Response;
+use OCP\AppFramework\Http\Response;
 
 
 /**
index c2d16134dc59f5ba4d718c1fa5cf610fd16e6531..70ab108e6b884d8404504a2db5bc246c3c2aa578 100644 (file)
@@ -25,7 +25,7 @@
 namespace OC\AppFramework\Middleware;
 
 use OC\AppFramework\Controller\Controller;
-use OC\AppFramework\Http\Response;
+use OCP\AppFramework\Http\Response;
 
 
 /**
index 52818b1b53ebbce131f9141c45360d5f3c63c65c..4f1447e1afba11ffea26f40792be80c392b053b3 100644 (file)
@@ -27,12 +27,12 @@ namespace OC\AppFramework\Middleware\Security;
 use OC\AppFramework\Controller\Controller;
 use OC\AppFramework\Http\Http;
 use OC\AppFramework\Http\Request;
-use OC\AppFramework\Http\Response;
-use OC\AppFramework\Http\JSONResponse;
 use OC\AppFramework\Http\RedirectResponse;
 use OC\AppFramework\Utility\MethodAnnotationReader;
 use OC\AppFramework\Middleware\Middleware;
 use OC\AppFramework\Core\API;
+use OCP\AppFramework\Http\Response;
+use OCP\AppFramework\Http\JSONResponse;
 
 
 /**
diff --git a/lib/public/appframework/http/http.php b/lib/public/appframework/http/http.php
new file mode 100644 (file)
index 0000000..9eafe78
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt, Thomas Tanghus, Bart Visscher
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework\Http;
+
+
+class Http {
+
+       const STATUS_CONTINUE = 100;
+       const STATUS_SWITCHING_PROTOCOLS = 101;
+       const STATUS_PROCESSING = 102;
+       const STATUS_OK = 200;
+       const STATUS_CREATED = 201;
+       const STATUS_ACCEPTED = 202;
+       const STATUS_NON_AUTHORATIVE_INFORMATION = 203;
+       const STATUS_NO_CONTENT = 204;
+       const STATUS_RESET_CONTENT = 205;
+       const STATUS_PARTIAL_CONTENT = 206;
+       const STATUS_MULTI_STATUS = 207;
+       const STATUS_ALREADY_REPORTED = 208;
+       const STATUS_IM_USED = 226;
+       const STATUS_MULTIPLE_CHOICES = 300;
+       const STATUS_MOVED_PERMANENTLY = 301;
+       const STATUS_FOUND = 302;
+       const STATUS_SEE_OTHER = 303;
+       const STATUS_NOT_MODIFIED = 304;
+       const STATUS_USE_PROXY = 305;
+       const STATUS_RESERVED = 306;
+       const STATUS_TEMPORARY_REDIRECT = 307;
+       const STATUS_BAD_REQUEST = 400;
+       const STATUS_UNAUTHORIZED = 401;
+       const STATUS_PAYMENT_REQUIRED = 402;
+       const STATUS_FORBIDDEN = 403;
+       const STATUS_NOT_FOUND = 404;
+       const STATUS_METHOD_NOT_ALLOWED = 405;
+       const STATUS_NOT_ACCEPTABLE = 406;
+       const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407;
+       const STATUS_REQUEST_TIMEOUT = 408;
+       const STATUS_CONFLICT = 409;
+       const STATUS_GONE = 410;
+       const STATUS_LENGTH_REQUIRED = 411;
+       const STATUS_PRECONDITION_FAILED = 412;
+       const STATUS_REQUEST_ENTITY_TOO_LARGE = 413;
+       const STATUS_REQUEST_URI_TOO_LONG = 414;
+       const STATUS_UNSUPPORTED_MEDIA_TYPE = 415;
+       const STATUS_REQUEST_RANGE_NOT_SATISFIABLE = 416;
+       const STATUS_EXPECTATION_FAILED = 417;
+       const STATUS_IM_A_TEAPOT = 418;
+       const STATUS_UNPROCESSABLE_ENTITY = 422;
+       const STATUS_LOCKED = 423;
+       const STATUS_FAILED_DEPENDENCY = 424;
+       const STATUS_UPGRADE_REQUIRED = 426;
+       const STATUS_PRECONDITION_REQUIRED = 428;
+       const STATUS_TOO_MANY_REQUESTS = 429;
+       const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
+       const STATUS_INTERNAL_SERVER_ERROR = 500;
+       const STATUS_NOT_IMPLEMENTED = 501;
+       const STATUS_BAD_GATEWAY = 502;
+       const STATUS_SERVICE_UNAVAILABLE = 503;
+       const STATUS_GATEWAY_TIMEOUT = 504;
+       const STATUS_HTTP_VERSION_NOT_SUPPORTED = 505;
+       const STATUS_VARIANT_ALSO_NEGOTIATES = 506;
+       const STATUS_INSUFFICIENT_STORAGE = 507;
+       const STATUS_LOOP_DETECTED = 508;
+       const STATUS_BANDWIDTH_LIMIT_EXCEEDED = 509;
+       const STATUS_NOT_EXTENDED = 510;
+       const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511;
+}
diff --git a/lib/public/appframework/http/jsonresponse.php b/lib/public/appframework/http/jsonresponse.php
new file mode 100644 (file)
index 0000000..085fdbe
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework\Http;
+
+
+/**
+ * A renderer for JSON calls
+ */
+class JSONResponse extends Response {
+
+       protected $data;
+
+
+       /**
+        * @param array|object $data the object or array that should be transformed
+        * @param int $statusCode the Http status code, defaults to 200
+        */
+       public function __construct($data=array(), $statusCode=Http::STATUS_OK) {
+               $this->data = $data;
+               $this->setStatus($statusCode);
+               $this->addHeader('X-Content-Type-Options', 'nosniff');
+               $this->addHeader('Content-type', 'application/json; charset=utf-8');
+       }
+
+
+       /**
+        * Returns the rendered json
+        * @return string the rendered json
+        */
+       public function render(){
+               return json_encode($this->data);
+       }
+
+       /**
+        * Sets values in the data json array
+        * @param array|object $params an array or object which will be transformed
+        *                             to JSON
+        */
+       public function setData($data){
+               $this->data = $data;
+       }
+
+
+       /**
+        * Used to get the set parameters
+        * @return array the data
+        */
+       public function getData(){
+               return $this->data;
+       }
+
+}
diff --git a/lib/public/appframework/http/response.php b/lib/public/appframework/http/response.php
new file mode 100644 (file)
index 0000000..6447725
--- /dev/null
@@ -0,0 +1,169 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt, Thomas Tanghus, Bart Visscher
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework\Http;
+
+
+/**
+ * Base class for responses. Also used to just send headers
+ */
+class Response {
+
+       /**
+        * @var array default headers
+        */
+       private $headers = array(
+               'Cache-Control' => 'no-cache, must-revalidate'
+       );
+
+
+       /**
+        * @var string
+        */
+       private $status = Http::STATUS_OK;
+
+
+       /**
+        * @var \DateTime
+        */
+       private $lastModified;
+
+
+       /**
+        * @var string
+        */
+       private $ETag;
+
+
+       /**
+        * Caches the response
+        * @param int $cacheSeconds the amount of seconds that should be cached
+        * if 0 then caching will be disabled
+        */
+       public function cacheFor($cacheSeconds) {
+
+               if($cacheSeconds > 0) {
+                       $this->addHeader('Cache-Control', 'max-age=' . $cacheSeconds . 
+                               ', must-revalidate');
+               } else {
+                       $this->addHeader('Cache-Control', 'no-cache, must-revalidate');
+               }
+
+       }
+
+
+       /**
+        * Adds a new header to the response that will be called before the render
+        * function
+        * @param string $name The name of the HTTP header
+        * @param string $value The value, null will delete it
+        */
+       public function addHeader($name, $value) {
+               if(is_null($value)) {
+                       unset($this->headers[$name]);
+               } else {
+                       $this->headers[$name] = $value;
+               }
+       }
+
+
+       /**
+        * Returns the set headers
+        * @return array the headers
+        */
+       public function getHeaders() {
+               $mergeWith = array();
+               
+               if($this->lastModified) {
+                       $mergeWith['Last-Modified'] = 
+                               $this->lastModified->format(\DateTime::RFC2822);
+               }
+
+               if($this->ETag) {
+                       $mergeWith['ETag'] = '"' . $this->ETag . '"';
+               }
+                       
+               return array_merge($mergeWith, $this->headers);
+       }
+
+
+       /**
+        * By default renders no output
+        * @return null
+        */
+       public function render() {
+               return null;
+       }
+
+
+       /**
+       * Set response status
+       * @param int $status a HTTP status code, see also the STATUS constants
+       */
+       public function setStatus($status) {
+               $this->status = $status;
+       }
+
+
+       /**
+        * Get response status
+        */
+       public function getStatus() {
+               return $this->status;
+       }
+
+
+       /**
+        * @return string the etag
+        */
+       public function getETag() {
+               return $this->ETag;
+       }
+
+
+       /**
+        * @return string RFC2822 formatted last modified date
+        */
+       public function getLastModified() {
+               return $this->lastModified;
+       }
+
+
+       /**
+        * @param string $ETag
+        */
+       public function setETag($ETag) {
+               $this->ETag = $ETag;
+       }
+
+
+       /**
+        * @param \DateTime $lastModified
+        */
+       public function setLastModified($lastModified) {
+               $this->lastModified = $lastModified;
+       }
+
+
+}
diff --git a/lib/public/appframework/http/templateresponse.php b/lib/public/appframework/http/templateresponse.php
new file mode 100644 (file)
index 0000000..97678c9
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCP\AppFramework\Http;
+
+use OC\AppFramework\Core\API;
+
+
+/**
+ * Response for a normal template
+ */
+class TemplateResponse extends Response {
+
+       protected $templateName;
+       protected $params;
+       protected $api;
+       protected $renderAs;
+       protected $appName;
+
+       /**
+        * @param API $api an API instance
+        * @param string $templateName the name of the template
+        * @param string $appName optional if you want to include a template from
+        *                        a different app
+        */
+       public function __construct(API $api, $templateName, $appName=null) {
+               $this->templateName = $templateName;
+               $this->appName = $appName;
+               $this->api = $api;
+               $this->params = array();
+               $this->renderAs = 'user';
+       }
+
+
+       /**
+        * Sets template parameters
+        * @param array $params an array with key => value structure which sets template
+        *                      variables
+        */
+       public function setParams(array $params){
+               $this->params = $params;
+       }
+
+
+       /**
+        * Used for accessing the set parameters
+        * @return array the params
+        */
+       public function getParams(){
+               return $this->params;
+       }
+
+
+       /**
+        * Used for accessing the name of the set template
+        * @return string the name of the used template
+        */
+       public function getTemplateName(){
+               return $this->templateName;
+       }
+
+
+       /**
+        * Sets the template page
+        * @param string $renderAs admin, user or blank. Admin also prints the admin
+        *                         settings header and footer, user renders the normal
+        *                         normal page including footer and header and blank
+        *                         just renders the plain template
+        */
+       public function renderAs($renderAs){
+               $this->renderAs = $renderAs;
+       }
+
+
+       /**
+        * Returns the set renderAs
+        * @return string the renderAs value
+        */
+       public function getRenderAs(){
+               return $this->renderAs;
+       }
+
+
+       /**
+        * Returns the rendered html
+        * @return string the rendered html
+        */
+       public function render(){
+
+               if($this->appName !== null){
+                       $appName = $this->appName;
+               } else {
+                       $appName = $this->api->getAppName();
+               }
+
+               $template = $this->api->getTemplate($this->templateName, $this->renderAs, $appName);
+
+               foreach($this->params as $key => $value){
+                       $template->assign($key, $value);
+               }
+
+               return $template->fetchPage();
+       }
+
+}