X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fprofile.php;h=940af80866ddae224f8561d4f69c133d21f60d51;hb=3796392e46bb793fcdbf6c67e4217f86355edcf0;hp=3e4795b1654b59b27d4fcda5aca207468b250af6;hpb=2df4879834d554904f1eccfd6efe5d906bdcea47;p=platal.git diff --git a/modules/profile.php b/modules/profile.php index 3e4795b..940af80 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'); @@ -328,14 +329,15 @@ class ProfileModule extends PLModule $wiz->addPage('ProfilePageGeneral', 'Général', 'general'); $wiz->addPage('ProfilePageAddresses', 'Adresses personnelles', 'adresses'); $wiz->addPage('ProfilePageJobs', 'Informations professionnelles', 'emploi'); - if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) { + $viewPrivate = S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE); + if ($viewPrivate) { $wiz->addPage('ProfilePageGroups', 'Groupes X - Binets', 'poly'); } $wiz->addPage('ProfilePageDecos', 'Décorations - Medailles', 'deco'); - if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE)) { + if ($viewPrivate) { $wiz->addPage('ProfilePageMentor', 'Mentoring', 'mentor'); } - if (S::user()->checkPerms(User::PERM_DIRECTORY_PRIVATE) && $profile->isDeltatenEnabled(Profile::DELTATEN_OLD)) { + if ($viewPrivate && $profile->isDeltatenEnabled(Profile::DELTATEN_OLD)) { $wiz->addPage('ProfilePageDeltaten', 'Opération N N-10', 'deltaten'); } $wiz->apply($page, 'profile/edit/' . $profile->hrid(), $opened_tab, $mode); @@ -347,6 +349,8 @@ class ProfileModule extends PLModule $page->setTitle('Mon Profil'); $page->assign('hrpid', $profile->hrid()); + $page->assign('viewPrivate', $viewPrivate); + $page->assign('isMe', S::user()->isMyProfile($profile)); if (isset($success) && $success) { $page->trigSuccess('Ton profil a bien été mis à jour.'); } @@ -354,7 +358,7 @@ class ProfileModule extends PLModule function handler_education_js($page) { - pl_cached_content_headers("text/javascript", "utf-8"); + pl_cached_dynamic_content_headers('text/javascript', 'utf-8'); $page->changeTpl('profile/education.js.tpl', NO_SKIN); require_once 'education.func.inc.php'; } @@ -426,12 +430,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 +564,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 +572,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 { + $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 { - $res .= $result['field'].'|'; - if ($count) { - $res .= $result['nb'].'|'; + 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(); }