. */ /** * Doctrine_Resource_Server * * @author Konsta Vesterinen * @author Jonathan H. Wage * @package Doctrine * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @version $Revision$ * @category Object Relational Mapping * @link www.phpdoctrine.com * @since 1.0 */ class Doctrine_Resource_Server extends Doctrine_Resource { public function __construct($name = null, $config = null) { if ($name) { $config['name'] = $name; } parent::__construct($config); } static public function getInstance($name, $config = null) { static $instance; if (!$instance) { $instance = new Doctrine_Resource_Server($name, $config); } return $instance; } public function executeSave($request) { $model = $request->get('model'); $data = $request->get('data'); $identifier = $request->get('identifier'); $table = Doctrine_Manager::getInstance()->getTable($model); $existing = true; foreach ($identifier as $key => $value) { if (!$value) { $existing = false; } } if ($existing) { $record = $table->find($identifier); } else { $record = new $model(); } $record->fromArray($data); $record->save(); return $record->toArray(true, true); } public function executeDelete($request) { $model = $request->get('model'); $identifier = $request->get('identifier'); $table = Doctrine_Manager::getInstance()->getTable($model); $record = $table->find($identifier); $record->delete(); } public function executeQuery($request) { $dql = $request->get('dql'); $params = $request->get('params') ? $request->get('params'):array(); $conn = Doctrine_Manager::connection(); return $conn->query($dql, $params)->toArray(true, true); } public function executeLoad($request) { $path = '/tmp/' . rand() . '.' . $request->get('format'); $models = $this->getConfig('models') ? $this->getConfig('models'):array(); $export = new Doctrine_Export_Schema(); $export->exportSchema($path, $request->get('format'), null, $models); $schema = Doctrine_Parser::load($path, $request->get('format')); unlink($path); return $schema; } public function execute(array $r) { if (!isset($r['data'])) { throw new Doctrine_Resource_Exception('You must specify a data xml string in your request'); } $type = $r['type']; $format = isset($r['format']) ? $r['format']:'xml'; $data = Doctrine_Parser::load($r['data'], $format); $funcName = 'execute' . Doctrine::classify($type); $requestObj = new Doctrine_Resource_Request($data); if (method_exists($this, $funcName)) { $result = $this->$funcName($requestObj); } else { throw new Doctrine_Resource_Exception('Unknown Doctrine Resource Server function'); } if ($result) { return Doctrine_Parser::dump($result, $format); } else { return null; } } public function run($request) { try { $result = $this->execute($request); echo $result; } catch(Exception $e) { echo $this->exception($e); } } public function exception($e) { $error = array('error' => $e->getMessage()); return Doctrine_Parser::dump($error); } }