Location: PHPKode > projects > Aukyla Document Management System > adms2/plugins/Modules/ADMS_Search.php
<?php
/*
     ADMS_Search.php, provides search capabilities for ADMS
     Copyright (C) 2004-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('Locale.php');
require_once('Search.php');
require_once('Signal.php');

require_once('ADMS/Utils.php');

class ADMS_Search
{
	public static function instance()
	{
		if(self::$instance == null)
		{
			self::$instance = new ADMS_Search();
		}

		return self::$instance;
	}

	private function __construct()
	{
		Locale::init('apps/ADMS');

		Signal::connect('ADMS::DocumentCreated',     array($this, 'documentCreated'));
		Signal::connect('ADMS::DocumentUpdated',     array($this, 'documentUpdated'));
		Signal::connect('ADMS::DocumentRemoved',     array($this, 'documentRemoved'));
		Signal::connect('ADMS::UploadDocumentAdded', array($this, 'documentCreated'));
		Signal::connect('ADMS::LinkCreated',         array($this, 'documentCreated'));
		Signal::connect('ADMS::FolderCreated',       array($this, 'documentCreated'));
		Signal::connect('ADMS::FolderUpdated',       array($this, 'documentUpdated'));
		Signal::connect('ADMS::FolderRemoved',       array($this, 'folderRemoved'));
		Signal::connect('ADMS::EntryMoved',          array($this, 'entryMoved'));

		$this->search = Search::instance();
	}

	public function documentCreated($uri)
	{
		$documentId = $this->search->addDocument('ADMS', $uri);
		if($documentId !== false)
		{
			$this->setTimeStamps($documentId, $uri);

			$locationString = ADMS_Utils::getLocationString($uri);

			if($locationString != i18n('(unknown location)'))
			{
				$this->search->indexText($documentId, $locationString, 10);
			}
		}
	}

	public function documentUpdated($uri)
	{
		$this->search->removeDocument('ADMS', $uri);
		$documentId = $this->search->addDocument('ADMS', $uri);
		if($documentId !== false)
		{
			$this->setTimeStamps($documentId, $uri);
		}
	}

	public function documentRemoved($uri)
	{
		$this->search->removeDocument('ADMS', $uri);
	}

	public function folderRemoved($uri)
	{
		$this->search->removeDocument('ADMS', $uri);
	}

	public function entryMoved($fromUri, $toUri)
	{
		$this->search->moveDocument('ADMS', $fromUri, $toUri);

		$locationString = ADMS_Utils::getLocationString($toUri);

		if($locationString != i18n('(unknown location)'))
		{
			$this->search->indexText($documentId, $locationString, 10);
		}
	}

	private function setTimeStamps($documentId, $uri)
	{
		$ctime = URI::metaData($uri, 'ctime');
		$mtime = URI::metaData($uri, 'mtime');

		if($ctime != '')
		{
			$this->search->setMetaData($documentId, 'ctime', $ctime);
		}
		if($mtime != '')
		{
			$this->search->setMetaData($documentId, 'mtime', $mtime);
		}
	}

	private static $instance = null;
	private $search;
}

// trigger creation of an ADMS_Search class instance
ADMS_Search::instance();

?>
Return current item: Aukyla Document Management System