1
0
mirror of synced 2024-12-14 07:06:04 +03:00
doctrine2/lib/Doctrine/Resource/Server.php

152 lines
4.6 KiB
PHP
Raw Normal View History

<?php
2007-09-23 02:02:58 +04:00
/*
* $Id$
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
*/
/**
* Doctrine_Resource_Server
*
* @author Konsta Vesterinen <kvesteri@cc.hut.fi>
2007-09-24 08:58:57 +04:00
* @author Jonathan H. Wage <jwage@mac.com>
2007-09-23 02:02:58 +04:00
* @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
*/
2007-09-24 22:22:52 +04:00
class Doctrine_Resource_Server extends Doctrine_Resource
2007-09-25 18:09:05 +04:00
{
public function __construct($name = null, $config = null)
{
if ($name) {
$config['name'] = $name;
}
parent::__construct($config);
}
static public function getInstance($name, $config = null)
2007-09-21 22:01:08 +04:00
{
2007-09-24 08:58:57 +04:00
static $instance;
if (!$instance) {
2007-09-25 18:09:05 +04:00
$instance = new Doctrine_Resource_Server($name, $config);
2007-09-24 08:58:57 +04:00
}
return $instance;
2007-09-21 22:01:08 +04:00
}
2007-09-25 18:09:05 +04:00
2007-09-22 05:32:48 +04:00
public function executeSave($request)
{
2007-09-24 08:58:57 +04:00
$model = $request->get('model');
$data = $request->get('data');
2007-09-25 01:46:05 +04:00
$identifier = $request->get('identifier');
2007-09-22 05:32:48 +04:00
2007-09-24 22:22:52 +04:00
$table = Doctrine_Manager::getInstance()->getTable($model);
$existing = true;
2007-09-25 01:46:05 +04:00
foreach ($identifier as $key => $value) {
if (!$value) {
2007-09-24 22:22:52 +04:00
$existing = false;
}
}
if ($existing) {
2007-09-25 01:46:05 +04:00
$record = $table->find($identifier);
2007-09-24 22:22:52 +04:00
} else {
$record = new $model();
}
2007-09-22 05:32:48 +04:00
$record->fromArray($data);
$record->save();
return $record->toArray(true, true);
}
2007-09-25 01:46:05 +04:00
public function executeDelete($request)
{
$model = $request->get('model');
$identifier = $request->get('identifier');
$table = Doctrine_Manager::getInstance()->getTable($model);
$record = $table->find($identifier);
$record->delete();
}
2007-09-22 05:32:48 +04:00
public function executeQuery($request)
{
2007-09-24 08:58:57 +04:00
$dql = $request->get('dql');
$params = $request->get('params') ? $request->get('params'):array();
2007-09-22 05:32:48 +04:00
$conn = Doctrine_Manager::connection();
return $conn->query($dql, $params)->toArray(true, true);
}
2007-09-24 08:58:57 +04:00
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;
}
2007-09-24 22:22:52 +04:00
public function execute(array $r)
{
2007-09-24 22:22:52 +04:00
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);
2007-09-22 05:32:48 +04:00
$funcName = 'execute' . Doctrine::classify($type);
2007-09-21 22:01:08 +04:00
2007-09-24 22:22:52 +04:00
$requestObj = new Doctrine_Resource_Request($data);
2007-09-24 08:58:57 +04:00
if (method_exists($this, $funcName)) {
2007-09-24 22:22:52 +04:00
$result = $this->$funcName($requestObj);
2007-09-24 08:58:57 +04:00
} else {
throw new Doctrine_Resource_Exception('Unknown Doctrine Resource Server function');
}
if ($result) {
return Doctrine_Parser::dump($result, $format);
} else {
return false;
}
}
2007-09-21 22:01:08 +04:00
public function run($request)
{
echo $this->execute($request);
}
2007-09-24 08:58:57 +04:00
}