Fixed issue 62, crash when searching in the issues.

The issue search is now correctly limiting the search to the issues.
This commit is contained in:
Loic d'Anterroches 2008-11-22 14:17:26 +01:00
parent d8870e6df0
commit c86cf6e5f1
2 changed files with 10 additions and 7 deletions

View File

@ -43,10 +43,11 @@ class IDF_Search extends Pluf_Search
* *
* @param string Query string. * @param string Query string.
* @param int Project id to limit the results (null) * @param int Project id to limit the results (null)
* @param string Stemmer class. * @param string Model class (null)
* @return array Results. * @param string Stemmer class ('Pluf_Text_Stemmer_Porter')
* @return array Results
*/ */
public static function mySearch($query, $project=null, $stemmer='Pluf_Text_Stemmer_Porter') public static function mySearch($query, $project=null, $model=null, $stemmer='Pluf_Text_Stemmer_Porter')
{ {
$query = Pluf_Text::cleanString(html_entity_decode($query, ENT_QUOTES, 'UTF-8')); $query = Pluf_Text::cleanString(html_entity_decode($query, ENT_QUOTES, 'UTF-8'));
$words = Pluf_Text::tokenize($query); $words = Pluf_Text::tokenize($query);
@ -61,7 +62,7 @@ class IDF_Search extends Pluf_Search
if (in_array(null, $word_ids)) { if (in_array(null, $word_ids)) {
return array(); return array();
} }
return self::mySearchDocuments($word_ids, $project); return self::mySearchDocuments($word_ids, $project, $model);
} }
/** /**
@ -72,9 +73,10 @@ class IDF_Search extends Pluf_Search
* *
* @param array Ids. * @param array Ids.
* @param IDF_Project Project to limit the search. * @param IDF_Project Project to limit the search.
* @param string Model class to limit the search.
* @return array Sorted by score, returns model_class, model_id and score. * @return array Sorted by score, returns model_class, model_id and score.
*/ */
public static function mySearchDocuments($wids, $project) public static function mySearchDocuments($wids, $project, $model)
{ {
$db =& Pluf::db(); $db =& Pluf::db();
$gocc = new IDF_Search_Occ(); $gocc = new IDF_Search_Occ();
@ -83,7 +85,8 @@ class IDF_Search extends Pluf_Search
$where[] = $db->qn('word').'='.(int)$id; $where[] = $db->qn('word').'='.(int)$id;
} }
$prj = (is_null($project)) ? '' : ' AND project='.(int)$project->id; $prj = (is_null($project)) ? '' : ' AND project='.(int)$project->id;
$select = 'SELECT model_class, model_id, SUM(pondocc) AS score FROM '.$gocc->getSqlTable().' WHERE '.implode(' OR ', $where).$prj.' GROUP BY model_class, model_id HAVING COUNT(*)='.count($wids).' ORDER BY score DESC'; $md = (is_null($model)) ? '' : ' AND model_class='.$db->esc($model);
$select = 'SELECT model_class, model_id, SUM(pondocc) AS score FROM '.$gocc->getSqlTable().' WHERE '.implode(' OR ', $where).$prj.$md.' GROUP BY model_class, model_id HAVING COUNT(*)='.count($wids).' ORDER BY score DESC';
return $db->select($select); return $db->select($select);
} }

View File

@ -198,7 +198,7 @@ class IDF_Views_Issue
} }
$q = $request->REQUEST['q']; $q = $request->REQUEST['q'];
$title = sprintf(__('Search Issues - %s'), Pluf_esc($q)); $title = sprintf(__('Search Issues - %s'), Pluf_esc($q));
$issues = new Pluf_Search_ResultSet(IDF_Search::mySearch($q, $prj)); $issues = new Pluf_Search_ResultSet(IDF_Search::mySearch($q, $prj, 'IDF_Issue'));
if (count($issues) > 100) { if (count($issues) > 100) {
// no more than 100 results as we do not care // no more than 100 results as we do not care
$issues->results = array_slice($issues->results, 0, 100); $issues->results = array_slice($issues->results, 0, 100);