public function testTextModule() { $module = SearchModule::create(); $module->Title = 'Test'; $module->ContentTitle = 'Test'; $module->Summary = 'Text'; $module->write(); $this->assertTrue($module->ID > 0); }
/** * Page for url "profile/jobterms" (function also used for "referent/autocomplete" @see * handler_ref_autocomplete). Displays an "autocomplete" page (plain text with values * separated by "|" chars) for jobterms to add in profile. * @param $page the Platal page * @param $type set to 'mentor' to display the number of mentors for each term and order * by descending number of mentors. * * @param Env::v('q') the text that has been typed and to complete automatically */ function handler_jobterms($page, $type = 'nomentor') { pl_content_headers("text/plain"); $q = Env::v('term') . '%'; $tokens = JobTerms::tokenize($q); if (count($tokens) == 0) { exit; } sort($tokens); $q_normalized = implode(' ', $tokens); // 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 ($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 { $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 { foreach ($list as &$item) { $to_cache .= $item['field'] . "\t" . $item['id'] . "\n"; $item['value'] = $item['field']; } } } 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; }