94,7 → 94,7 |
// AFAICT, pas de réel risque de SQL-injection du côté de sphinx (au pire, $req = FALSE) |
// et il serait dommage de devoir limiter la puissante syntaxe offerte à l'utilisation |
//$requeteTpl = "SELECT group_id, main_id FROM i_projet, i_spip, i_papyrus, i_bazar, i_coste, i_nvjfl WHERE MATCH('%s') LIMIT 50"; |
$requeteTpl = 'SELECT group_id, main_id, id '. |
$requeteTpl = 'SELECT group_id, main_id, id, WEIGHT() AS poids '. |
'FROM i_projet, i_spip, i_papyrus, i_bazar, i_coste, i_nvjfl '. |
"WHERE MATCH('%s') ". |
'LIMIT 50 '; |
104,7 → 104,9 |
if ($requete) { |
$res = array('spip' => array(), 'bazar' => array(), 'projet' => array(), 'papyrus' => array(), 'coste' => array(), 'nvjfl' => array()); |
$ids_par_poids = array(); |
$poidsMax = 0; |
while($rec = mysql_fetch_array($requete, MYSQL_ASSOC)) { |
$poidsMax = ($rec['poids'] > $poidsMax) ? $rec['poids'] : $poidsMax; |
$res[$rec['group_id']][$rec['id']] = $rec; |
$ids_par_poids[] = $rec['main_id']; |
} |
116,7 → 118,6 |
unset($res['spip'][$v['id']]['group_id'], |
$res['spip'][$v['id']]['main_id'], |
$res['spip'][$v['id']]['id']); |
// left: weight |
$docs['spip-' . $v['id']] = array_merge($v, $res['spip'][$v['id']]); |
} |
|
126,7 → 127,6 |
unset($res['bazar'][$v['id']]['group_id'], |
$res['bazar'][$v['id']]['main_id'], |
$res['bazar'][$v['id']]['id']); |
// left: weight |
$docs['bazar-' . $v['id']] = array_merge($v, $res['bazar'][$v['id']]); |
} |
|
136,7 → 136,6 |
unset($res['projet'][$v['id']]['group_id'], |
$res['projet'][$v['id']]['main_id'], |
$res['projet'][$v['id']]['id']); |
// left: weight |
$docs['projet-' . $v['id']] = array_merge($v, $res['projet'][$v['id']]); |
} |
|
146,7 → 145,6 |
unset($res['papyrus'][$v['id']]['group_id'], |
$res['papyrus'][$v['id']]['main_id'], |
$res['papyrus'][$v['id']]['id']); |
// left: weight |
$docs['papyrus-' . $v['id']] = array_merge($v, $res['papyrus'][$v['id']]); |
} |
|
156,7 → 154,6 |
unset($res['coste'][$v['id']]['group_id'], |
$res['coste'][$v['id']]['main_id'], |
$res['coste'][$v['id']]['id']); |
// left: weight |
$docs['coste-' . $v['id']] = array_merge($v, $res['coste'][$v['id']]); |
} |
|
166,20 → 163,18 |
unset($res['nvjfl'][$v['id']]['group_id'], |
$res['nvjfl'][$v['id']]['main_id'], |
$res['nvjfl'][$v['id']]['id']); |
// left: weight |
$docs['nvjfl-' . $v['id']] = array_merge($v, $res['nvjfl'][$v['id']]); |
} |
//die('<pre>'.print_r($docs, true).'</pre>'); |
|
// sort |
$sorted = _sortArrayByArray($docs, $ids_par_poids); |
$max = current($sorted); |
$max = $max['weight']; |
|
if (isset($_GET['tri']) && $_GET['tri'] == 'date') { |
usort($sorted, '_actuNewerFirst'); |
} |
// transforme les clefs pour s'adapter aux templates existants |
array_walk($sorted, '_weight2score', $max); |
array_walk($sorted, '_weight2score', $poidsMax); |
|
// var_dump($sorted);die; |
$retour = $sorted; |
366,11 → 361,11 |
return isset($a['date_creation']) && isset($b['date_creation']) ? strcmp($b['date_creation'], $a['date_creation']) : 0; |
} |
|
// adaption aux templates existants: [score] => [weight] |
// Transforme un score en pourcentage |
function _weight2score(&$item, $key, $max) { |
$item['score'] = intval($item['weight'] / $max * 100); |
$item['score'] = intval($item['poids'] / $max * 100); |
$item['date_creation'] = isset($item['date_creation']) ? strftime("%d %B %Y", strtotime($item['date_creation'])) : ''; |
unset($item['weight']); |
unset($item['poids']); |
} |
|
?> |