Aggiunta ricerca in modalità DAO MANAGED per notizia model

This commit is contained in:
r.didato
2018-11-02 13:44:49 +01:00
parent 53a3bcb2ee
commit a632a2ab61
4 changed files with 107 additions and 2 deletions
+12
View File
@@ -0,0 +1,12 @@
<?php
/*
* DaoSearchable.php
* Author: Riccardo Di Dato
* Creation Date: 02 nov 2018
*/
interface DaoSearchable {
public static function getSearchableFields(): array;
}
?>
+83 -1
View File
@@ -261,6 +261,8 @@ class GenericDao{
return $rval;
}
/**
* Ritorna la lista dei notizia model ordinati per pertinenza
* @param string $modelClass
@@ -271,11 +273,91 @@ class GenericDao{
* @return DaoSaveable[]
*/
public function search($modelClass, $search, array $filter = array(), array $options = array()){
if ( is_a($modelClass, DaoSearchable::class, true ) ) {
return $this->query($modelClass, self::getSearchFilter( $modelClass, $search, $filter, $options, $modelClass::getSearchableFields() ), $options);
}
else {
return $this->searchUseIndex($modelClass, $search, $filter, $options);
}
}
public function searchCount($modelClass, $search, array $filter = array(), array $options = array()){
if ( is_a($modelClass, DaoSearchable::class, true ) ) {
return $this->count($modelClass, self::getSearchFilter( $modelClass, $search, $filter, $options, $modelClass::getSearchableFields() ), $options);
}
else {
return $this->searchUseIndexCount($modelClass, $search, $filter, $options);
}
}
/**
* Versione MODDATA di quello in PHPFramework (usa solo SEARCH_MODE_DAO in modalità regex)
* @param string $modelClass
* @param string $search
* @param array $filter
* @param array $options
* @param array $recursiveIgnore
* @throws CoreException
* @return array|string[]
*/
private function getSearchFilter($modelClass, $search, array $filter = array(), array $options = array(), array $searchFields){
$search = trim($search);
if ( strcmp($search, "")!=0 ){
$searchArr = preg_split("/\s+/", $search);
if (sizeof($searchFields)>0) {
$internalAnd = [ '$and' => [] ];
foreach ($searchArr as $ele){
$internalOr = [ '$or' => [] ];
foreach ($searchFields as $field){
$internalOr['$or'][] = [
$field => new MongoDB\BSON\Regex($ele,'i')
];
}
$internalAnd['$and'][] = $internalOr;
}
if (sizeof($filter)>0){
$andFilter = array();
$andFilter['$and'] = array();
$andFilter['$and'][] = $filter;
$andFilter['$and'][] = $internalAnd;
$filter = $andFilter;
}
else {
$filter = $internalAnd;
}
}
}
return $filter;
}
/**
* Ritorna la lista dei notizia model ordinati per pertinenza
* @param string $modelClass
* @param string $searchWord
* @param array $filter
* @param array $options
* @throws CoreException
* @return DaoSaveable[]
*/
public function searchUseIndex($modelClass, $search, array $filter = array(), array $options = array()){
$filter['$text'] = array('$search'=> trim($search) );
return $this->query($modelClass, $filter, $options);
}
public function searchCount($modelClass, $search, array $filter = array(), array $options = array()){
public function searchUseIndexCount($modelClass, $search, array $filter = array(), array $options = array()){
$filter['$text'] = array('$search'=> trim($search) );
return $this->count($modelClass, $filter, $options);
}
+2
View File
@@ -7,6 +7,8 @@ Creation Date: 07/gen/2016
// Inclue Saam
require_once(dirname(__FILE__)."/DaoSaveableInterface.php");
require_once(dirname(__FILE__)."/DaoSearchable.php");
require_once(dirname(__FILE__)."/DaoSaveableDefaultImplementation.php");
require_once(dirname(__FILE__)."/GenericDao.php");
+10 -1
View File
@@ -16,7 +16,7 @@ Creation Date: 07/gen/2016
* @author rik
*
*/
class NotiziaModel extends HasMediaModel{
class NotiziaModel extends HasMediaModel implements DaoSearchable{
const STATUS_PENDING = 1;
const STATUS_ACCEPTED = 2;
const STATUS_REJECTED = 3;
@@ -113,6 +113,15 @@ class NotiziaModel extends HasMediaModel{
}
return $rval;
}
public static function getSearchableFields(): array {
return [
"about.author",
"sottotitolo",
"testo",
"titolo"
];
}
}
?>