Location: PHPKode > projects > Aukyla Document Management System > plugins/DocumentHandlers/application_vnd_oasis_opendocument_DocumentHandler.php
<?php
/*
     application_vnd_oasis_opendocument_DocumentHandler.php, handler for
     OpenDocument documents
     Copyright (C) 2005 Arend van Beelen, Auton Rijnsburg

     This program is free software; you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the Free
     Software Foundation; either version 2 of the License, or (at your option)
     any later version.

     This program is distributed in the hope that it will be useful, but WITHOUT
     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
     more details.

     You should have received a copy of the GNU General Public License along
     with this program; if not, write to the Free Software Foundation, Inc.,
     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

     For any questions, comments or whatever, you may mail me at: hide@address.com
*/

require_once('Document.php');
require_once('DocumentHandler.php');
require_once('OpenDocument.php');
require_once('String.php');
require_once('URI.php');

class application_vnd_oasis_opendocument_DocumentHandler extends DocumentHandler
{
	public static function view(Container $parent, $uri)
	{
		$tmpdir = URI::uniquePath('tmp://', 'DocumentViewer');
		URI::mkdir($tmpdir);
		$tmpuri = "$tmpdir/content.html";
		$openDocument = new OpenDocument();
		if($openDocument->load($uri) == false)
		{
			new Paragraph($parent, i18n('The document could not be opened.'));
			return;
		}
		if($openDocument->convertToXHTML($tmpuri) == false)
		{
			new Paragraph($parent, i18n('The document could not be converted.'));
			return;
		}
		//new DocumentViewer($parent, $tmpuri, 'text/html');
		$lines = URI::file($tmpuri);
		if($lines === false)
		{
			$lines = array();
		}
		$contents = '';
		$inBody = false;
		foreach($lines as $line)
		{
			if($inBody == false)
			{
				if(strstr($line, '<body>') !== false)
				{
					$inBody = true;
					if(strstr($line, '</body>') !== false)
					{
						$inBody = false;
						$line = String::substringBefore($line, '</body>');
					}
					$contents .= String::substringAfter($line, '<body>');
				}
			}
			else
			{
				if(strstr($line, '</body>') !== false)
				{
					$inBody = false;
					$contents .= String::substringBefore($line, '</body>');
				}
				else if(ctype_space($line) != true)
				{
					$contents .= $line;
				}
			}
		}
		new RawWidget($parent, "<htmlblock xmlns=\"http://www.w3.org/1999/xhtml\">$contents</htmlblock>");
	}

	public static function supportsIndexing()
	{
		return true;
	}

	public static function index($documentId, $uri)
	{
		$openDocument = new OpenDocument();
		if($openDocument->load($uri) == false)
		{
			return;
		}

		$search = Search::instance();

		$search->indexText($documentId, $openDocument->title(), 40);
		$search->indexText($documentId, $openDocument->subject(), 30);
		$search->indexText($documentId, $openDocument->keywords(), 40);
		$search->indexText($documentId, $openDocument->comments(), 30);
		$search->indexText($documentId, $openDocument->author(), 20);

		$doc = new DOMDocument();
		if($doc->load($openDocument->temporaryDirectory().'/content.xml') == false)
		{
			return;
		}

		self::indexNode($documentId, $doc->firstChild);
	}

	private static function indexNode($documentId, $node, $weight = 1)
	{
		while($node)
		{
			if($node instanceof DOMText)
			{
				$search = Search::instance();
				$search->indexText($documentId, $node->nodeValue, $weight);
			}
			else
			{
				if($node->localName == 'h' &&
				   $node->namespaceURI == 'urn:oasis:names:tc:opendocument:xmlns:text:1.0')
				{
					$weight = 20;
				}
				self::indexNode($documentId, $node->firstChild, $weight);
			}

			$node = $node->nextSibling;
		}
	}
}

?>
Return current item: Aukyla Document Management System