<?php
/**
* PHP VoiceViewer - Output Class Interface
*
* Project : PHP VoiceViewer
* Copyright : Christopher Cooper © 2010
* License : FreeBSD
* Author : Christopher Cooper (PaNtHaLooN), hide@address.com
* Date : March 2010
* Version : 1.0.0
*
* Copyright 2010 Christopher Cooper. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY CHRISTOPHER COOPER ``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 CHRISTOPHER COOPER 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.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of Christopher Cooper.
*/
// Define acronyms
defined('DS') || define('DS', DIRECTORY_SEPARATOR);
// Main include
@require_once(dirname(__FILE__) . DS . '..' . DS . 'main.inc.php');
interface ivvOutput
{
const OUTPUT_ENCODING = 'utf-8';
public static function displayError( $errno, $errstr, $errfile, $errline, $simple = true );
public static function displayServer( ivvServer &$server );
public static function fileExists( $id );
public static function displayFile( $id );
}
abstract class avvOutput implements ivvOutput
{
final public static function &getErrorDOM( $code, $message, $file, $line, $simple = true )
{
$doc = new DOMDocument(ivvEntity::DOM_VERSION, ivvEntity::DOM_ENCODING);
$doc->formatOutput = true;
$errornode = $doc->appendChild($doc->createElement(ivvEntity::TAG_ERROR));
if ( $simple === false )
{
$errornode->setAttribute(ivvEntity::TAG_ERROR_CODE, $code);
$filenode = $errornode->appendChild($doc->createElement(ivvEntity::TAG_ERROR_FILE));
$filenode->setAttribute(ivvEntity::TAG_ERROR_LINE, $line);
$filenode->appendChild($doc->createCDATASection($file));
}
$msgnode = $errornode->appendChild($doc->createElement(ivvEntity::TAG_ERROR_MESSAGE));
$msgnode->appendChild($doc->createCDATASection($message));
return $doc;
}
public static function displayError( $code, $message, $file, $line, $simple = true )
{
self::genHeaderContent('xml');
echo(self::getErrorDOM($code, $message, $file, $line, $simple)->saveXML());
}
final public static function &getServerDOM( ivvServer &$server )
{
$doc = new DOMDocument(ivvEntity::DOM_VERSION, ivvEntity::DOM_ENCODING);
$doc->formatOutput = true;
$doc->appendChild($server->createDOMElement($doc));
return $doc;
}
public static function displayServer( ivvServer &$server )
{
self::genHeaderContent('xml');
echo(self::getServerDOM($server)->saveXML());
}
public static function fileExists( $id )
{
// No files defined in abstract class -> always returns false
return false;
}
public static function displayFile( $id )
{
// No files defined in abstract class -> no files to be displayed
}
final public static function getContentString( $id )
{
switch( $id )
{
case 'text':
return 'text';
break;
case 'html':
case 'xhtml':
default:
return 'text/html';
break;
case 'xml':
return 'text/xml';
break;
case 'xsl':
case 'xslt':
return 'text/xsl';
break;
}
}
final public static function genHeaderContent( $id )
{
header('Content-Type: ' . self::getContentString($id) . '; charset=' . self::OUTPUT_ENCODING);
}
final public static function genHeaderFilename( $name, $type = 'inline' )
{
header('Content-Disposition: ' . $type . '; filename="' . $name . '"');
}
}
?>