1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
<?php
/*-----8<--------------------------------------------------------------------
*
* BEdita - a semantic content management framework
*
* Copyright 2008 ChannelWeb Srl, Chialab Srl
*
* This file is part of BEdita: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* BEdita is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with BEdita (see LICENSE.LGPL).
* If not, see <http://gnu.org/licenses/lgpl-3.0.html>.
*
*------------------------------------------------------------------->8-----
*/
/**
* Xml View used to create XML response
*/
class XmlView extends View {
/**
* [__construct description]
* @param [type] $controller [description]
*/
public function __construct($controller) {
parent::__construct($controller);
$this->viewPath = 'pages/xml';
if (empty($this->helpers)) {
$this->helpers = array();
}
if (!in_array('Xml', $this->helpers)) {
$this->helpers[] = 'Xml';
}
}
public function render($action = null, $layout = null, $file = null) {
if (array_key_exists('_serialize', $this->viewVars)) {
// empty response
if ($this->viewVars['_serialize'] === null) {
return parent::render(false, false);
}
$this->serialize($this->viewVars['_serialize']);
return parent::render('xml', 'xml/default');
}
return parent::render($action, 'xml/default', $file);
}
protected function serialize($serialize) {
$rootNode = isset($this->viewVars['_rootNode']) ? $this->viewVars['_rootNode'] : 'response';
$data = array();
if (!is_array($serialize)) {
$serialize = array($serialize);
}
foreach ($serialize as $varName) {
if (array_key_exists($varName, $this->viewVars)) {
$data[$varName] = $this->viewVars[$varName];
}
}
if (count($data) > 1 || empty($data[$rootNode])) {
$data = array($rootNode => $data);
}
$this->viewVars['data'] = $data;
}
}