<?php/* * Created on 05. Jan. 2007 by Norman Markgraf (nmarkgraf(at)user.sourceforge.net) * * 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 GPL. For more information please see * <http://opendocumentphp.org>. * * $Id: SettingsDocument.php 136 2007-03-02 18:02:29Z nmarkgraf $ */require_once 'OpenDocumentPHP/util/AbstractDocument.php';/** * SettingsDocument class. * * OpenDocumentPHP does not support the settings document right now. But it is in * the OpenDocument documentation, so we have build a wrapper class for it. * * Because of that, no real functionality is added. Feel free to change it. ;-) * * @author Norman Markgraf (nmarkgraf(at)user.sourceforge.net) * @copyright Copyright in 2006, 2007 by The OpenDocumentPHP Team * @license http://www.gnu.org/licenses/gpl.html GNU General Public License 2.0. * @version $Revision: 136 $ * @package OpenDocumentPHP * @subpackage settings * @since 0.5.0 - 08. Feb. 2007 */class SettingsDocument extends AbstractDocument { /** * Root element of the settings DOM document. * * @var DOMElement * @access private * @since 0.5.0 - 08. Feb. 2007 */ private $settings; /** * Constructor method. * * We construct an empty settings document here. It should look like: * <code> * <?xml version="1.0" encoding="UTF-8"?> * <office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.0"> * <office:settings/> * </office:document-settings> * </code> * * This is in general not a valid document, because the <office:settings> tag needs * some children (one or more config items). If there are no such children the * {@link saveXML()} method will remove the <office:settings/> tag to match the * RelaxNG specification. * So currently the saved settings.xml should look more like: * <code> * <?xml version="1.0" encoding="UTF-8"?> * <office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.0" / * </code> * * * @since 0.5.0 - 08. Feb. 2007 */ function __construct() { parent :: __construct('office:document-settings'); /* * create a main (not root) element ( <office:settings>...</office:settings> ) */ $this->settings = $this->createElementNS(self :: OFFICE, 'office:settings'); /* * and add it to the document root. This may be wrong, if we did not add * any further config items to the settings document. But we will correct this * later in the saveXML method. */ $this->root->appendChild($this->settings); } /** * Save the needed parts of the settings.xml as a XML. If we do not have * any config items in th settings document, we remove anything and leave * just the skeleton. * * @access private * @since 0.5.3 - 09. Jul. 2007 */ function saveXML() { /* * We must check if this->settings has any children, if not we *must* remove it from the tree. */ if ( !$this->settings->hasChildNodes() ) { $this->root->removeChild( $this->settings ); } /* * Now we can do the inhereted stuff. */ return parent::saveXML(); } /** * Loads a settings document into this SettingsDocument object. * * @access public * @since 0.5.2 - 22. Feb. 2007 */ function loadXML($source) { $ret = parent::loadXML($source); if ($ret === TRUE) { // We need to set $this->meta and $this->root !! $this->initXpath(); // We need to set $this->meta and $this->root !! $this->root = $this->documentElement; $result = $this->xpath->query('/office:document-settings/office:settings'); $tmp = $result; if ($tmp->length == 1) { $this->settings = $tmp->item( 0 ); } else { // This should never happend! $ret = FALSE; } } return $ret; }}?>