mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-05-09 13:06:14 +00:00
add support for indexing folders
This commit is contained in:
parent
e36a41eeae
commit
efed9f2b9c
|
@ -914,19 +914,28 @@ switch($command) {
|
||||||
break; /* }}} */
|
break; /* }}} */
|
||||||
|
|
||||||
case 'indexdocument': /* {{{ */
|
case 'indexdocument': /* {{{ */
|
||||||
|
case 'indexfolder': /* {{{ */
|
||||||
if($user && $user->isAdmin()) {
|
if($user && $user->isAdmin()) {
|
||||||
if($fulltextservice) {
|
if($fulltextservice) {
|
||||||
$document = $dms->getDocument($_REQUEST['id']);
|
if($command == 'indexdocument') {
|
||||||
if($document) {
|
$hook = 'indexDocument';
|
||||||
|
$object = $dms->getDocument($_REQUEST['id']);
|
||||||
|
$prefix = 'D';
|
||||||
|
} else {
|
||||||
|
$hook = 'indexFolder';
|
||||||
|
$object = $dms->getFolder($_REQUEST['id']);
|
||||||
|
$prefix = 'F';
|
||||||
|
}
|
||||||
|
if($object) {
|
||||||
if($index = $fulltextservice->Indexer()) {
|
if($index = $fulltextservice->Indexer()) {
|
||||||
$idoc = $fulltextservice->IndexedDocument($document, true);
|
$idoc = $fulltextservice->IndexedDocument($object, true);
|
||||||
$error = $idoc->getErrorMsg();
|
$error = $idoc->getErrorMsg();
|
||||||
if(!$error) {
|
if(!$error) {
|
||||||
$ires = null;
|
$ires = null;
|
||||||
if(isset($GLOBALS['SEEDDMS_HOOKS']['indexDocument'])) {
|
if(isset($GLOBALS['SEEDDMS_HOOKS'][$hook])) {
|
||||||
foreach($GLOBALS['SEEDDMS_HOOKS']['indexDocument'] as $hookObj) {
|
foreach($GLOBALS['SEEDDMS_HOOKS'][$hook] as $hookObj) {
|
||||||
if (method_exists($hookObj, 'preIndexDocument')) {
|
if (method_exists($hookObj, 'pre'.ucfirst($hook))) {
|
||||||
$ires = $hookObj->preIndexDocument(null, $document, $idoc);
|
$ires = $hookObj->preIndexDocument(null, $object, $idoc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -934,17 +943,17 @@ switch($command) {
|
||||||
$ires = $index->addDocument($idoc);
|
$ires = $index->addDocument($idoc);
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
if(false === $ires) {
|
if(false === $ires) {
|
||||||
echo json_encode(array('success'=>false, 'message'=>getMLText('error_document_indexed'), 'data'=>$document->getID()));
|
echo json_encode(array('success'=>false, 'message'=>getMLText('error_document_indexed'), 'data'=>$prefix.$object->getID()));
|
||||||
} else {
|
} else {
|
||||||
echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_indexed'), 'data'=>$document->getID(), 'cmd'=>$idoc->getCmd()));
|
echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_indexed'), 'data'=>$prefix.$object->getID(), 'cmd'=>$idoc->getCmd()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
echo json_encode(array('success'=>false, 'message'=>$error, 'data'=>$document->getID(), 'mimetype'=>$idoc->getMimeType(), 'cmd'=>$idoc->getCmd()));
|
echo json_encode(array('success'=>false, 'message'=>$error, 'data'=>$object->getID(), 'mimetype'=>$idoc->getMimeType(), 'cmd'=>$idoc->getCmd()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
echo json_encode(array('success'=>false, 'message'=>getMLText('error_occured'), 'data'=>$document->getID()));
|
echo json_encode(array('success'=>false, 'message'=>getMLText('error_occured'), 'data'=>$prefix.$object->getID()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
|
|
|
@ -195,22 +195,31 @@ if(isset($_GET["fullsearch"]) && $_GET["fullsearch"] && $settings->_enableFullSe
|
||||||
} else {
|
} else {
|
||||||
$entries = array();
|
$entries = array();
|
||||||
$facets = $searchresult['facets'];
|
$facets = $searchresult['facets'];
|
||||||
$dcount = $searchresult['count']; //0;
|
$dcount = 0;
|
||||||
$fcount = 0;
|
$fcount = 0;
|
||||||
if($searchresult) {
|
if($searchresult) {
|
||||||
foreach($searchresult['hits'] as $hit) {
|
foreach($searchresult['hits'] as $hit) {
|
||||||
if($tmp = $dms->getDocument($hit['document_id'])) {
|
if($hit['document_id'][0] == 'D') {
|
||||||
if($tmp->getAccessMode($user) >= M_READ) {
|
if($tmp = $dms->getDocument(substr($hit['document_id'], 1))) {
|
||||||
$tmp->verifyLastestContentExpriry();
|
// if($tmp->getAccessMode($user) >= M_READ) {
|
||||||
$entries[] = $tmp;
|
$tmp->verifyLastestContentExpriry();
|
||||||
// $dcount++;
|
$entries[] = $tmp;
|
||||||
|
$dcount++;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
} elseif($hit['document_id'][0] == 'F') {
|
||||||
|
if($tmp = $dms->getFolder(substr($hit['document_id'], 1))) {
|
||||||
|
// if($tmp->getAccessMode($user) >= M_READ) {
|
||||||
|
$entries[] = $tmp;
|
||||||
|
$fcount++;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($pageNumber != 'all' && $dcount > $limit) {
|
if($pageNumber != 'all' && $searchresult['count'] > $limit) {
|
||||||
$totalPages = (int) ($dcount/$limit);
|
$totalPages = (int) ($searchresult['count']/$limit);
|
||||||
if($dcount%$limit)
|
if($searchresult['count']%$limit)
|
||||||
$totalPages++;
|
$totalPages++;
|
||||||
// if($limit > 0)
|
// if($limit > 0)
|
||||||
// $entries = array_slice($entries, ($pageNumber-1)*$limit, $limit);
|
// $entries = array_slice($entries, ($pageNumber-1)*$limit, $limit);
|
||||||
|
|
|
@ -59,19 +59,65 @@ include($myincpath."/inc/inc.Init.php");
|
||||||
include($myincpath."/inc/inc.Extension.php");
|
include($myincpath."/inc/inc.Extension.php");
|
||||||
include($myincpath."/inc/inc.DBInit.php");
|
include($myincpath."/inc/inc.DBInit.php");
|
||||||
|
|
||||||
function tree($dms, $fulltextservice, $folder, $indent='') { /* {{{ */
|
function tree($dms, $fulltextservice, $folder, $indent='', $numdocs) { /* {{{ */
|
||||||
global $settings, $themes;
|
global $settings, $themes;
|
||||||
echo $themes->black($indent."D ".$folder->getName()).PHP_EOL;
|
|
||||||
$subfolders = $folder->getSubFolders();
|
|
||||||
foreach($subfolders as $subfolder) {
|
|
||||||
tree($dms, $fulltextservice, $subfolder, $indent.' ');
|
|
||||||
}
|
|
||||||
$documents = $folder->getDocuments();
|
|
||||||
$index = $fulltextservice->Indexer();
|
$index = $fulltextservice->Indexer();
|
||||||
$lucenesearch = $fulltextservice->Search();
|
$lucenesearch = $fulltextservice->Search();
|
||||||
|
|
||||||
|
// echo $themes->black($indent."D ".$folder->getName()).PHP_EOL;
|
||||||
|
echo $themes->black($indent."D ".$folder->getId().":".$folder->getName()." ");
|
||||||
|
if(($numdocs == 0) || !($hit = $lucenesearch->getFolder($folder->getId()))) {
|
||||||
|
try {
|
||||||
|
$idoc = $fulltextservice->IndexedDocument($folder, true);
|
||||||
|
if(isset($GLOBALS['SEEDDMS_HOOKS']['indexFolder'])) {
|
||||||
|
foreach($GLOBALS['SEEDDMS_HOOKS']['indexFolder'] as $hookObj) {
|
||||||
|
if (method_exists($hookObj, 'preIndexFolder')) {
|
||||||
|
$hookObj->preIndexDocument(null, $folder, $idoc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$index->addDocument($idoc);
|
||||||
|
echo $themes->green(" (Folder added)").PHP_EOL;
|
||||||
|
} catch(Exception $e) {
|
||||||
|
echo $themes->error(" (Timeout)").PHP_EOL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
$created = (int) $hit->getDocument()->getFieldValue('created');
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$created = 0;
|
||||||
|
}
|
||||||
|
if($created >= $folder->getDate()) {
|
||||||
|
echo $themes->italic(" (Folder unchanged)").PHP_EOL;
|
||||||
|
} else {
|
||||||
|
$index->delete($hit->id);
|
||||||
|
try {
|
||||||
|
$idoc = $fulltextservice->IndexedDocument($folder, true);
|
||||||
|
if(isset($GLOBALS['SEEDDMS_HOOKS']['indexDocument'])) {
|
||||||
|
foreach($GLOBALS['SEEDDMS_HOOKS']['indexDocument'] as $hookObj) {
|
||||||
|
if (method_exists($hookObj, 'preIndexDocument')) {
|
||||||
|
$hookObj->preIndexDocument(null, $folder, $idoc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$index->addDocument($idoc);
|
||||||
|
echo $themes->green(" (Folder updated)").PHP_EOL;
|
||||||
|
} catch(Exception $e) {
|
||||||
|
echo $themes->error(" (Timeout)").PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$subfolders = $folder->getSubFolders();
|
||||||
|
foreach($subfolders as $subfolder) {
|
||||||
|
tree($dms, $fulltextservice, $subfolder, $indent.' ', $numdocs);
|
||||||
|
}
|
||||||
|
|
||||||
|
$documents = $folder->getDocuments();
|
||||||
foreach($documents as $document) {
|
foreach($documents as $document) {
|
||||||
echo $themes->black($indent." ".$document->getId().":".$document->getName()." ");
|
echo $themes->black($indent." ".$document->getId().":".$document->getName()." ");
|
||||||
if(!($hit = $lucenesearch->getDocument($document->getId()))) {
|
if(($numdocs == 0) || !($hit = $lucenesearch->getDocument($document->getId()))) {
|
||||||
try {
|
try {
|
||||||
$idoc = $fulltextservice->IndexedDocument($document, true);
|
$idoc = $fulltextservice->IndexedDocument($document, true);
|
||||||
if(isset($GLOBALS['SEEDDMS_HOOKS']['indexDocument'])) {
|
if(isset($GLOBALS['SEEDDMS_HOOKS']['indexDocument'])) {
|
||||||
|
@ -124,8 +170,12 @@ if(!$index) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$numdocs = $fulltextservice->Indexer()->count();
|
||||||
$folder = $dms->getFolder($settings->_rootFolderID);
|
$folder = $dms->getFolder($settings->_rootFolderID);
|
||||||
tree($dms, $fulltextservice, $folder);
|
/* if numdocs is 0, then there is no need to check if a document/folder is already
|
||||||
|
* indexed. That speeds up the indexing.
|
||||||
|
*/
|
||||||
|
tree($dms, $fulltextservice, $folder,'', $numdocs);
|
||||||
|
|
||||||
$index->commit();
|
$index->commit();
|
||||||
$index->optimize();
|
$index->optimize();
|
||||||
|
|
|
@ -32,18 +32,43 @@ class SeedDMS_View_Indexer_Process_Folder { /* {{{ */
|
||||||
public function __construct($fulltextservice, $forceupdate) { /* {{{ */
|
public function __construct($fulltextservice, $forceupdate) { /* {{{ */
|
||||||
$this->fulltextservice = $fulltextservice;
|
$this->fulltextservice = $fulltextservice;
|
||||||
$this->forceupdate = $forceupdate;
|
$this->forceupdate = $forceupdate;
|
||||||
|
$this->numdocs = $this->fulltextservice->Indexer()->count();
|
||||||
} /* }}} */
|
} /* }}} */
|
||||||
|
|
||||||
public function process($folder) { /* {{{ */
|
public function process($folder) { /* {{{ */
|
||||||
|
$lucenesearch = $this->fulltextservice->Search();
|
||||||
|
echo "<div class=\"folder\">".$folder->getId().":".htmlspecialchars($folder->getFolderPathPlain());
|
||||||
|
/* If the document wasn't indexed before then just add it */
|
||||||
|
if(($this->numdocs == 0) || !($hit = $lucenesearch->getFolder($folder->getId()))) {
|
||||||
|
echo " <span id=\"status_F".$folder->getID()."\" class=\"indexme indexstatus\" data-docid=\"F".$folder->getID()."\">".getMLText('index_waiting')."</span>";
|
||||||
|
} else {
|
||||||
|
/* Check if the attribute created is set or has a value older
|
||||||
|
* than the lastet content. Documents without such an attribute
|
||||||
|
* where added when a new document was added to the dms. In such
|
||||||
|
* a case the document content wasn't indexed.
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
$created = (int) $hit->getDocument()->getFieldValue('created');
|
||||||
|
} catch (/* Zend_Search_Lucene_ */Exception $e) {
|
||||||
|
$created = 0;
|
||||||
|
}
|
||||||
|
if($created >= $folder->getDate() && !$this->forceupdate) {
|
||||||
|
echo "<span id=\"status_F".$folder->getID()."\" class=\"indexstatus\" data-docid=\"F".$folder->getID()."\">".getMLText('index_document_unchanged')."</span>";
|
||||||
|
} else {
|
||||||
|
$this->fulltextservice->Indexer()->delete($hit->id);
|
||||||
|
echo " <span id=\"status_F".$folder->getID()."\" class=\"indexme indexstatus\" data-docid=\"F".$folder->getID()."\">".getMLText('index_waiting')."</span>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "</div>";
|
||||||
|
|
||||||
$documents = $folder->getDocuments();
|
$documents = $folder->getDocuments();
|
||||||
if($documents) {
|
if($documents) {
|
||||||
$lucenesearch = $this->fulltextservice->Search();
|
// echo "<div class=\"folder\">".htmlspecialchars($folder->getFolderPathPlain())."</div>";
|
||||||
echo "<div class=\"folder\">".$folder->getFolderPathPlain()."</div>";
|
|
||||||
foreach($documents as $document) {
|
foreach($documents as $document) {
|
||||||
echo "<div class=\"document\">".$document->getId().":".htmlspecialchars($document->getName());
|
echo "<div class=\"document\">".$document->getId().":".htmlspecialchars($document->getName());
|
||||||
/* If the document wasn't indexed before then just add it */
|
/* If the document wasn't indexed before then just add it */
|
||||||
if(!($hit = $lucenesearch->getDocument($document->getId()))) {
|
if(($this->numdocs == 0) || !($hit = $lucenesearch->getDocument($document->getId()))) {
|
||||||
echo " <span id=\"status_".$document->getID()."\" class=\"indexme indexstatus\" data-docid=\"".$document->getID()."\">".getMLText('index_waiting')."</span>";
|
echo " <span id=\"status_D".$document->getID()."\" class=\"indexme indexstatus\" data-docid=\"D".$document->getID()."\">".getMLText('index_waiting')."</span>";
|
||||||
} else {
|
} else {
|
||||||
/* Check if the attribute created is set or has a value older
|
/* Check if the attribute created is set or has a value older
|
||||||
* than the lastet content. Documents without such an attribute
|
* than the lastet content. Documents without such an attribute
|
||||||
|
@ -57,10 +82,10 @@ class SeedDMS_View_Indexer_Process_Folder { /* {{{ */
|
||||||
}
|
}
|
||||||
$content = $document->getLatestContent();
|
$content = $document->getLatestContent();
|
||||||
if($created >= $content->getDate() && !$this->forceupdate) {
|
if($created >= $content->getDate() && !$this->forceupdate) {
|
||||||
echo "<span id=\"status_".$document->getID()."\" class=\"indexstatus\" data-docid=\"".$document->getID()."\">".getMLText('index_document_unchanged')."</span>";
|
echo "<span id=\"status_D".$document->getID()."\" class=\"indexstatus\" data-docid=\"D".$document->getID()."\">".getMLText('index_document_unchanged')."</span>";
|
||||||
} else {
|
} else {
|
||||||
$this->fulltextservice->Indexer()->delete($hit->id);
|
$this->fulltextservice->Indexer()->delete($hit->id);
|
||||||
echo " <span id=\"status_".$document->getID()."\" class=\"indexme indexstatus\" data-docid=\"".$document->getID()."\">".getMLText('index_waiting')."</span>";
|
echo " <span id=\"status_D".$document->getID()."\" class=\"indexme indexstatus\" data-docid=\"D".$document->getID()."\">".getMLText('index_waiting')."</span>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "</div>";
|
echo "</div>";
|
||||||
|
@ -105,12 +130,18 @@ function check_queue() {
|
||||||
if(funcArray.length == 0) {
|
if(funcArray.length == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var command = '';
|
||||||
docid = funcArray.pop();
|
docid = funcArray.pop();
|
||||||
$('#status_'+docid).html('Processsing ...');
|
$('#status_'+docid).html('Processsing ...');
|
||||||
|
if(docid[0] == 'F') {
|
||||||
|
command = 'indexfolder';
|
||||||
|
} else {
|
||||||
|
command = 'indexdocument';
|
||||||
|
}
|
||||||
$.ajax({url: '../op/op.Ajax.php',
|
$.ajax({url: '../op/op.Ajax.php',
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
data: {command: 'indexdocument', id: docid},
|
data: {command: command, id: docid.substring(1)},
|
||||||
beforeSend: function() {
|
beforeSend: function() {
|
||||||
queue_count++; // Add request to the counter
|
queue_count++; // Add request to the counter
|
||||||
$('.queue-bar').css('width', (queue_count*100/MAX_REQUESTS)+'%');
|
$('.queue-bar').css('width', (queue_count*100/MAX_REQUESTS)+'%');
|
||||||
|
|
Loading…
Reference in New Issue
Block a user