1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace ComboStrap; 4*04fd306cSNickeau 5*04fd306cSNickeauuse action_plugin_combo_linkwizard; 6*04fd306cSNickeau 7*04fd306cSNickeau/** 8*04fd306cSNickeau * Function that supports the internal search functions 9*04fd306cSNickeau */ 10*04fd306cSNickeauclass Search 11*04fd306cSNickeau{ 12*04fd306cSNickeau 13*04fd306cSNickeau /** 14*04fd306cSNickeau * @param $searchTermWords 15*04fd306cSNickeau * @param array $columns 16*04fd306cSNickeau * @return array - the parametrized sql and the parameters 17*04fd306cSNickeau */ 18*04fd306cSNickeau public static function getPageRowsSql($searchTermWords, array $columns = ["h1", "title", "name"]): array 19*04fd306cSNickeau { 20*04fd306cSNickeau $sqlParameters = []; 21*04fd306cSNickeau $sqlPredicates = []; 22*04fd306cSNickeau foreach ($searchTermWords as $searchTermWord) { 23*04fd306cSNickeau if (strlen($searchTermWord) < action_plugin_combo_linkwizard::MINIMAL_WORD_LENGTH) { 24*04fd306cSNickeau continue; 25*04fd306cSNickeau } 26*04fd306cSNickeau $pattern = "%$searchTermWord%"; 27*04fd306cSNickeau $sqlPatternPredicates = []; 28*04fd306cSNickeau foreach ($columns as $column) { 29*04fd306cSNickeau $sqlParameters[] = $pattern; 30*04fd306cSNickeau $sqlPatternPredicates[] = "$column like ? COLLATE NOCASE"; 31*04fd306cSNickeau } 32*04fd306cSNickeau $sqlPredicates[] = "(" . implode(" or ", $sqlPatternPredicates) . ")"; 33*04fd306cSNickeau } 34*04fd306cSNickeau $sqlPredicate = implode(" and ", $sqlPredicates); 35*04fd306cSNickeau $searchTermSql = <<<EOF 36*04fd306cSNickeauselect id as "id" from pages where $sqlPredicate order by name 37*04fd306cSNickeauEOF; 38*04fd306cSNickeau return [$searchTermSql, $sqlParameters]; 39*04fd306cSNickeau } 40*04fd306cSNickeau 41*04fd306cSNickeau /** 42*04fd306cSNickeau * @param $searchTerm 43*04fd306cSNickeau * @param array $columns 44*04fd306cSNickeau * @return MarkupPath[] 45*04fd306cSNickeau */ 46*04fd306cSNickeau public static function getPages($searchTerm, array $columns = ["h1", "title", "name"]): array 47*04fd306cSNickeau { 48*04fd306cSNickeau $minimalWordLength = action_plugin_combo_linkwizard::MINIMAL_WORD_LENGTH; 49*04fd306cSNickeau if (strlen($searchTerm) < $minimalWordLength) { 50*04fd306cSNickeau return []; 51*04fd306cSNickeau } 52*04fd306cSNickeau $searchTermWords = StringUtility::getWords($searchTerm); 53*04fd306cSNickeau if (sizeOf($searchTermWords) === 0) { 54*04fd306cSNickeau return []; 55*04fd306cSNickeau } 56*04fd306cSNickeau try { 57*04fd306cSNickeau $sqlite = Sqlite::createOrGetSqlite(); 58*04fd306cSNickeau } catch (ExceptionSqliteNotAvailable $e) { 59*04fd306cSNickeau return []; 60*04fd306cSNickeau } 61*04fd306cSNickeau [$searchTermSql, $sqlParameters] = self::getPageRowsSql($searchTermWords, $columns); 62*04fd306cSNickeau $request = $sqlite 63*04fd306cSNickeau ->createRequest() 64*04fd306cSNickeau ->setQueryParametrized($searchTermSql, $sqlParameters); 65*04fd306cSNickeau $pages = []; 66*04fd306cSNickeau try { 67*04fd306cSNickeau $rows = $request 68*04fd306cSNickeau ->execute() 69*04fd306cSNickeau ->getRows(); 70*04fd306cSNickeau foreach ($rows as $row) { 71*04fd306cSNickeau $pages[] = MarkupPath::createMarkupFromId($row["id"]); 72*04fd306cSNickeau } 73*04fd306cSNickeau return $pages; 74*04fd306cSNickeau } catch (ExceptionCompile $e) { 75*04fd306cSNickeau LogUtility::msg("Error while trying to retrieve a list of pages", LogUtility::LVL_MSG_ERROR, action_plugin_combo_linkwizard::CANONICAL); 76*04fd306cSNickeau return $pages; 77*04fd306cSNickeau } finally { 78*04fd306cSNickeau $request->close(); 79*04fd306cSNickeau } 80*04fd306cSNickeau } 81*04fd306cSNickeau} 82