parent
edb04b25de
commit
20838bb9c2
@ -0,0 +1,91 @@ |
||||
<?php |
||||
/** |
||||
* ownCloud |
||||
* |
||||
* @author Tom Needham |
||||
* @author Michael Gapczynski |
||||
* @author Bart Visscher |
||||
* @copyright 2012 Tom Needham tom@owncloud.com |
||||
* @copyright 2012 Michael Gapczynski mtgap@owncloud.com |
||||
* @copyright 2012 Bart Visscher bartv@thisnet.nl |
||||
* |
||||
* 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/>. |
||||
* |
||||
*/ |
||||
|
||||
class OC_API { |
||||
|
||||
/** |
||||
* api actions |
||||
*/ |
||||
protected $actions = array(); |
||||
|
||||
/** |
||||
* registers an api call |
||||
* @param string $method the http method |
||||
* @param string $url the url to match |
||||
* @param callable $action the function to run |
||||
*/ |
||||
public function register($method, $url, $action){ |
||||
$name = strtolower($method).$url; |
||||
if(!isset(self::$actions[$name])){ |
||||
OC_Router::create($name, $url) |
||||
->action('OC_API', 'call'); |
||||
self::$actions[$name] = array(); |
||||
} |
||||
self::$actions[$name][] = $action; |
||||
} |
||||
|
||||
/** |
||||
* handles an api call |
||||
* @param array $parameters |
||||
*/ |
||||
public function call($parameters){ |
||||
// TODO load the routes.php from apps |
||||
$name = $parameters['_name']; |
||||
$response = array(); |
||||
// Loop through registered actions |
||||
foreach(self::$actions[$name] as $action){ |
||||
if(is_callable($action)){ |
||||
$action_response = call_user_func($action, $parameters); |
||||
if(is_array($action_response)){ |
||||
// Merge with previous |
||||
$response = array_merge($response, $action_response); |
||||
} else { |
||||
// TODO - Something failed, do we return an error code, depends on other action responses |
||||
} |
||||
} else { |
||||
// Action not callable |
||||
// log |
||||
// TODO - Depending on other action responses, do we return a 501? |
||||
} |
||||
} |
||||
// Send the response |
||||
if(isset($parameters['_format'])){ |
||||
self::respond($response, $parameters['_format']); |
||||
} else { |
||||
self::respond($response); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* respond to a call |
||||
* @param int|array $response the response |
||||
* @param string $format the format xml|json |
||||
*/ |
||||
private function respond($response, $format='json'){ |
||||
// TODO respond in the correct format |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue