From bc2fd9d8d29acc9a74e03d561c0f9bb190d54b19 Mon Sep 17 00:00:00 2001 From: conradverm Date: Thu, 24 Jan 2008 15:02:26 +0000 Subject: [PATCH] KTS-2875 "Create a hooking mechanism for new searchable fields to be part of the general text search" Fixed. --- search2/search/fieldRegistry.inc.php | 11 +++++++++++ search2/search/fields/AnyMetadataField.inc.php | 3 +++ search2/search/fields/DocumentIdField.inc.php | 2 ++ search2/search/fields/FilenameField.inc.php | 3 +++ search2/search/fields/GeneralTextField.inc.php | 32 +++++++++++++++++++++----------- search2/search/fields/TitleField.inc.php | 2 ++ 6 files changed, 42 insertions(+), 11 deletions(-) diff --git a/search2/search/fieldRegistry.inc.php b/search2/search/fieldRegistry.inc.php index c1c8a63..805cac2 100755 --- a/search2/search/fieldRegistry.inc.php +++ b/search2/search/fieldRegistry.inc.php @@ -70,6 +70,8 @@ class ExprFieldRegistry private $display; + private $general; + /** * Initialise the registry. * This is private and class must be obtained via the get() method. @@ -136,8 +138,17 @@ class ExprFieldRegistry else { $this->display[] = $field->getAlias(); + + if (isset($field->general_op)) + { + $this->general[] = get_class($field); + } } + } + function getGeneralTextClasses() + { + return $this->general; } public function resolveAlias($alias) diff --git a/search2/search/fields/AnyMetadataField.inc.php b/search2/search/fields/AnyMetadataField.inc.php index 37d6b2c..d80992f 100755 --- a/search2/search/fields/AnyMetadataField.inc.php +++ b/search2/search/fields/AnyMetadataField.inc.php @@ -38,6 +38,9 @@ class AnyMetadataField extends DBFieldExpr { + public $general_op = ExprOp::CONTAINS; + + public function __construct() { parent::__construct('value', 'document_fields_link', _kt('Any Metadata')); diff --git a/search2/search/fields/DocumentIdField.inc.php b/search2/search/fields/DocumentIdField.inc.php index 4187e2e..098d5f8 100755 --- a/search2/search/fields/DocumentIdField.inc.php +++ b/search2/search/fields/DocumentIdField.inc.php @@ -38,6 +38,8 @@ class DocumentIdField extends DBFieldExpr { + public $general_op = ExprOp::IS; + public function __construct() { parent::__construct('id', 'documents', _kt('Document ID')); diff --git a/search2/search/fields/FilenameField.inc.php b/search2/search/fields/FilenameField.inc.php index 282f86a..8a64a1c 100755 --- a/search2/search/fields/FilenameField.inc.php +++ b/search2/search/fields/FilenameField.inc.php @@ -38,6 +38,9 @@ class FilenameField extends DBFieldExpr { + public $general_op = ExprOp::CONTAINS; + + public function __construct() { parent::__construct('filename', 'document_content_version', _kt('Filename')); diff --git a/search2/search/fields/GeneralTextField.inc.php b/search2/search/fields/GeneralTextField.inc.php index 9af83fc..96df5b6 100755 --- a/search2/search/fields/GeneralTextField.inc.php +++ b/search2/search/fields/GeneralTextField.inc.php @@ -54,7 +54,6 @@ class GeneralTextField extends SearchableText return DefaultOpCollection::validateParent($this, DefaultOpCollection::$contains); } - public function rewrite(&$left, &$op, &$right) { // note the grouping of the db queries @@ -62,17 +61,28 @@ class GeneralTextField extends SearchableText $left = new OpExpr(new DocumentTextField(), ExprOp::CONTAINS, $right); $op = ExprOp::OP_OR; + $value = $right; + $right=null; + + $registry = ExprFieldRegistry::getRegistry(); + $classes = $registry->getGeneralTextClasses(); + + while (!empty($classes)) + { + $classname = array_pop($classes); + $obj = new $classname(); + $exprop = $obj->general_op; + $newexpr = new OpExpr($obj, $exprop, $value); + if (empty($right)) + { + $right = $newexpr; + } + else + { + $right = new OpExpr($right, ExprOp::OP_OR, $newexpr); + } + } - $right = new OpExpr( - new OpExpr(new FilenameField(), ExprOp::CONTAINS, $right), - ExprOp::OP_OR, - new OpExpr( - new OpExpr( - new TitleField(), ExprOp::CONTAINS, $right), - ExprOp::OP_OR, - new OpExpr(new AnyMetadataField(), ExprOp::CONTAINS, $right) - ) - ); } diff --git a/search2/search/fields/TitleField.inc.php b/search2/search/fields/TitleField.inc.php index f3b42f9..2b2de0c 100755 --- a/search2/search/fields/TitleField.inc.php +++ b/search2/search/fields/TitleField.inc.php @@ -38,6 +38,8 @@ class TitleField extends DBFieldExpr { + public $general_op = ExprOp::CONTAINS; + public function __construct() { parent::__construct('name', 'document_metadata_version', _kt('Title')); -- libgit2 0.21.4