X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fprofile.php;h=07e91897e6d4be5b59fb7932e8288036ef8e94bc;hb=fa89b8f6e35041c02747c7aad4a1a108ec6592b3;hp=3e4795b1654b59b27d4fcda5aca207468b250af6;hpb=2df4879834d554904f1eccfd6efe5d906bdcea47;p=platal.git diff --git a/modules/profile.php b/modules/profile.php index 3e4795b..07e9189 100644 --- a/modules/profile.php +++ b/modules/profile.php @@ -318,6 +318,7 @@ class ProfileModule extends PLModule } // Build the page + $page->addJsLink('jquery.ui.xorg.js'); $page->addJsLink('education.js', true, false); /* dynamic content */ $page->addJsLink('grades.js', true, false); /* dynamic content */ $page->addJsLink('profile.js'); @@ -426,12 +427,12 @@ class ProfileModule extends PLModule { pl_content_headers("text/html"); $page->changeTpl('profile/deco.medal.tpl', NO_SKIN); - $valid = XDB::fetchOneCell("SELECT NOT FIND_IN_SET('validation', flags) - FROM profile_medal_enum - WHERE id = {?}", - $id); + list($valid, $has_levels) = XDB::fetchOneRow("SELECT NOT FIND_IN_SET('validation', flags), FIND_IN_SET('has_levels', flags) + FROM profile_medal_enum + WHERE id = {?}", + $id); $page->assign('id', $i); - $page->assign('medal', array('id' => $id, 'grade' => 0, 'valid' => $valid)); + $page->assign('medal', array('id' => $id, 'grade' => 0, 'valid' => $valid, 'has_levels' => $has_levels)); } function handler_ajax_job($page, $id, $pid) @@ -560,7 +561,7 @@ class ProfileModule extends PLModule { pl_content_headers("text/plain"); - $q = Env::v('q').'%'; + $q = Env::v('term') . '%'; $tokens = JobTerms::tokenize($q); if (count($tokens) == 0) { exit; @@ -568,51 +569,79 @@ class ProfileModule extends PLModule sort($tokens); $q_normalized = implode(' ', $tokens); - // try to look in cached results + // Try to look in cached results. + $cached = false; $cache = XDB::query('SELECT result FROM search_autocomplete - WHERE name = {?} AND - query = {?} AND - generated > NOW() - INTERVAL 1 DAY', - $type, $q_normalized); - if ($res = $cache->fetchOneCell()) { - echo $res; - die(); - } - - $joins = JobTerms::token_join_query($tokens, 'e'); - if ($type == 'mentor') { - $count = ', COUNT(DISTINCT pid) AS nb'; - $countjoin = ' INNER JOIN profile_job_term_relation AS r ON(r.jtid_1 = e.jtid) INNER JOIN profile_mentor_term AS m ON(r.jtid_2 = m.jtid)'; - $countorder = 'nb DESC, '; + WHERE name = {?} AND query = {?} AND generated > NOW() - INTERVAL 1 DAY', + $type, $q_normalized); + + if ($cache->numRows() > 0) { + $cached = true; + $data = explode("\n", $cache->fetchOneCell()); + $list = array(); + foreach ($data as $line) { + if ($line != '') { + $aux = explode("\t", $line); + if ($type == 'mentor') { + $item = array( + 'field' => $aux[0], + 'nb' => $aux[1], + 'id' => $aux[2] + ); + $item['value'] = SearchModule::format_autocomplete($item); + } else { + $item = array( + 'value' => $aux[0], + 'id' => $aux[1] + ); + } + array_push($list, $item); + } + } } else { - $count = $countjoin = $countorder = ''; - } - $list = XDB::iterator('SELECT e.jtid AS id, e.full_name AS field'.$count.' - FROM profile_job_term_enum AS e '.$joins.$countjoin.' - GROUP BY e.jtid - ORDER BY '.$countorder.'field - LIMIT 11'); - $nbResults = 0; - $res = ''; - while ($result = $list->next()) { - $nbResults++; - if ($nbResults == 11) { - $res .= $q."|-1\n"; + $joins = JobTerms::token_join_query($tokens, 'e'); + if ($type == 'mentor') { + $count = ', COUNT(DISTINCT pid) AS nb'; + $countjoin = ' INNER JOIN profile_job_term_relation AS r ON(r.jtid_1 = e.jtid) INNER JOIN profile_mentor_term AS m ON(r.jtid_2 = m.jtid)'; + $countorder = 'nb DESC, '; } else { - $res .= $result['field'].'|'; - if ($count) { - $res .= $result['nb'].'|'; + $count = $countjoin = $countorder = ''; + } + $list = XDB::fetchAllAssoc('SELECT e.jtid AS id, e.full_name AS field' . $count . ' + FROM profile_job_term_enum AS e ' . $joins . $countjoin . ' + GROUP BY e.jtid + ORDER BY ' . $countorder . 'field + LIMIT ' . DirEnumeration::AUTOCOMPLETE_LIMIT); + $to_cache = ''; + if ($type == 'mentor') { + foreach ($list as &$item) { + $to_cache .= $item['field'] . "\t" . $item['nb'] . "\t" . $item['id'] . "\n"; + $item['value'] = SearchModule::format_autocomplete($item); + } + } else { + foreach ($list as &$item) { + $to_cache .= $item['field'] . "\t" . $item['id'] . "\n"; + $item['value'] = $item['field']; } - $res .= $result['id']; } - $res .= "\n"; } - XDB::query('INSERT INTO search_autocomplete (name, query, result, generated) - VALUES ({?}, {?}, {?}, NOW()) - ON DUPLICATE KEY UPDATE result = VALUES(result), generated = VALUES(generated)', - $type, $q_normalized, $res); - echo $res; + + if (count($list) == DirEnumeration::AUTOCOMPLETE_LIMIT && $type == 'nomentor') { + $list[] = array( + 'value' => '… parcourir les résultats dans un arbre …', + 'field' => '', + 'id' => -1 + ); + } + + if (!$cached) { + XDB::query('INSERT INTO search_autocomplete (name, query, result, generated) + VALUES ({?}, {?}, {?}, NOW()) + ON DUPLICATE KEY UPDATE result = VALUES(result), generated = VALUES(generated)', + $type, $q_normalized, $to_cache); + } + echo json_encode($list); exit(); }