95 lines
2.5 KiB
PHP
95 lines
2.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* @copyright Copyright (C) 2005-2010 Keyboard Monkeys Ltd. http://www.kb-m.com
|
|
* @license http://creativecommons.org/licenses/BSD/ BSD Licensese
|
|
* @author Keyboard Monkeys Ltd.
|
|
* @package Monkeys Framework
|
|
* @packager Keyboard Monkeys
|
|
*/
|
|
|
|
abstract class Monkeys_Lucene
|
|
{
|
|
const LUCENE_DIR = '/lucene';
|
|
|
|
private static $_index;
|
|
|
|
/**
|
|
* @throws Zend_Search_Lucene_exception
|
|
*/
|
|
public static function getIndex()
|
|
{
|
|
if (!@self::$_index) {
|
|
try {
|
|
self::$_index = Zend_Search_Lucene::open(APP_DIR . self::LUCENE_DIR);
|
|
} catch (Zend_Search_Lucene_Exception $e) {
|
|
self::$_index = Zend_Search_Lucene::create(APP_DIR . self::LUCENE_DIR);
|
|
Zend_Registry::get('logger')->log('Created Lucene index file', Zend_Log::INFO);
|
|
}
|
|
}
|
|
|
|
return self::$_index;
|
|
}
|
|
|
|
public static function optimizeIndex()
|
|
{
|
|
$index = self::getIndex();
|
|
$index->optimize();
|
|
}
|
|
|
|
public static function checkPcreUtf8Support()
|
|
{
|
|
if (@preg_match('/\pL/u', 'a') == 1) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static function clearIndex()
|
|
{
|
|
// need to remove the locks, otherwise error under windows
|
|
self::getIndex()->removeReference();
|
|
self::$_index = null;
|
|
|
|
self::_rmdirr(APP_DIR . self::LUCENE_DIR);
|
|
}
|
|
|
|
/** * Delete a file, or a folder and its contents
|
|
*
|
|
* @author Aidan Lister <aidan@php.net>
|
|
* @version 1.0.1
|
|
* @param string $dirname Directory to delete
|
|
* @return bool Returns TRUE on success, FALSE on failure
|
|
*/
|
|
private static function _rmdirr($dirname)
|
|
{
|
|
// Sanity check
|
|
if (!file_exists($dirname)) {
|
|
return false;
|
|
}
|
|
// Simple delete for a file
|
|
if (is_file($dirname)) {
|
|
return unlink($dirname);
|
|
}
|
|
// Loop through the folder
|
|
$dir = dir($dirname);
|
|
while (false !== $entry = $dir->read()) {
|
|
// Skip pointers and dot directories
|
|
if (substr($entry, 0, 1) == '.') {
|
|
continue;
|
|
}
|
|
// Deep delete directories
|
|
if (is_dir("$dirname/$entry")) {
|
|
self::_rmdirr("$dirname/$entry");
|
|
} else {
|
|
unlink("$dirname/$entry");
|
|
}
|
|
}
|
|
// Clean up
|
|
$dir->close();
|
|
|
|
return true;
|
|
}
|
|
}
|