Aggiunta ricerca in modalità DAO MANAGED per notizia model
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
/*
|
||||
* DaoSearchable.php
|
||||
* Author: Riccardo Di Dato
|
||||
* Creation Date: 02 nov 2018
|
||||
*/
|
||||
|
||||
interface DaoSearchable {
|
||||
public static function getSearchableFields(): array;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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"
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user