19 include_once (
"FDL/Class.SearchDoc.php");
20 include_once (
"FDL/Class.DocSearch.php");
22 include_once (
"FDL/freedom_util.php");
42 $action->lay->set(
"isdetail",
false);
43 $action->lay->set(
"page", $page + 1);
44 $action->lay->set(
"dirid", $dirid);
47 $action->parent->AddJsRef(
$action->GetParam(
"CORE_JSURL") .
"/resizeimg.js");
55 $search->setValue(
"se_famid",
$famid);
56 $search->setValue(
"se_latest",
"yes");
58 $search->editdsearch();
69 $action->lay->set(
"INITSEARCH", $nosearch);
78 $tf = explode(
",", $faml);
79 foreach (
$tf as $k => $v) {
80 if ($v ==
"")
continue;
103 $sqlfilters = array();
104 $famfilter = $or = $and =
"";
105 if (count($kfams) > 0) {
108 foreach ($kfams as $k => $v) {
109 foreach ($tclassdoc as $kdoc => $cdoc) {
110 if (strstr(strtolower($cdoc[
"title"]) , $v[
"kfam"]) !=
false) {
111 if ($v[
"include"]) $or.= ($or !=
"" ?
" OR " :
"") .
"(fromid" . ($v[
"include"] ?
"=" :
"!=") . $cdoc[
"initid"] .
")";
112 else $and.= ($and !=
"" ?
" AND " :
"") .
"(fromid" . ($v[
"include"] ?
"=" :
"!=") . $cdoc[
"initid"] .
")";
116 if ($or !=
"") $famfilter =
"($or)";
117 if ($and !=
"") $famfilter.= ($famfilter !=
"" ?
" AND " :
"") .
" ($and)";
122 $sqlfilters[] =
"svalues ~* '" . pg_escape_string(substr(
$keyword, 1)) .
"'";
128 $tkeys = $sdoc->getTValue(
"se_keys");
129 foreach ($tkeys as $k => $v)
if (!$v) unset($tkeys[$k]);
130 $keys = implode(
'|', $tkeys);
132 if ($famfilter !=
"") $sqlfilters[] = $famfilter;
136 $s->useCollection($dirid);
137 $vardids =
"did_$dirid";
139 $vardids =
"did_$famid$keys";
140 foreach ($sqlfilters as
$filter) {
141 $s->addFilter($filter);
144 $displayedIds = array();
146 $displayedIds =
$action->read($vardids);
147 if ($displayedIds && count($displayedIds) > 0) {
148 $sqlExclude = sprintf(
"initid not in (%s)", implode(
",", $displayedIds));
149 $s->addFilter($sqlExclude);
154 $s->setOrder($orderby .
', id desc');
155 $s->setSlice($slice + 1);
156 $s->excludeConfidential();
158 $tdocs =
$s->search();
159 if (
$s->getError()) addLogMsg(
$s->getSearchInfo());
162 if (
$s->count() < ($slice + 1)) $globalCount =
$s->count();
166 $sc->useCollection($dirid);
168 foreach ($sqlfilters as
$filter) $sc->addFilter($filter);
170 $sc->excludeConfidential();
171 $globalCount = $sc->onlyCount();
179 if (
$s->count() == ($slice + 1)) {
181 $action->lay->set(
"notthenend",
true);
183 $action->lay->set(
"notthenend",
false);
187 $action->lay->set(
"theFollowingText", _(
"View next results"));
189 foreach ($tdocs as $k =>
$tdoc) {
190 if (
$tdoc[
"confidential"]) {
191 if ((
$tdoc[
"profid"] > 0) && ($workdoc->controlId(
$tdoc[
"profid"],
"confidential") !=
"")) {
196 $displayedIds[] =
$tdoc[
"initid"];
200 $tdocs[$k][
"htext"] = nl2br(str_replace(array(
206 ) , (str_replace(
"<",
"<", preg_replace(
"/<\\/?(\\w+[^:]?|\\w+\\s.*?)>/",
"", str_replace(array(
213 $tdocs[$k][
"iconsrc"] = $workdoc->getIcon(
$tdoc[
"icon"]);
214 $tdocs[$k][
"mdate"] = strftime(
"%a %d %b %Y",
$tdoc[
"revdate"]);
216 $action->register($vardids, $displayedIds);
221 "xpage" => $i / $slice + 1,
226 $action->lay->setBlockData(
"PAGES", $tpages);
229 $action->lay->setBlockData(
"DOCS", $tdocs);
231 $action->lay->set(
"dirid", $dirid);
234 if ($sdoc->isAffected()) {
235 $action->lay->set(
"isdetail",
false);
236 $action->lay->set(
"searchtitle", $sdoc->title);
237 $action->lay->set(
"dirid", $sdoc->id);
241 $action->lay->set(
"cpage",
"0");
242 $action->lay->set(
"notfirst",
false);
243 $action->lay->set(
"notthenend",
false);
247 if ($fkeyword ==
"")
$action->lay->set(
"key", _(
"search dynacase documents"));
248 else $action->lay->set(
"key", str_replace(
"\"",
""", $fkeyword));
250 $famsuffix = (
$famid == 0 ?
"" : sprintf(
"<span class=\"families\">(%s %s)</span>", _(
"family search result") ,
$famtitle));
251 if ($globalCount == 0) {
252 $action->lay->set(
"resulttext", sprintf(_(
"No document found for <b>%s</b>%s") ,
$keyword, $famsuffix));
253 }
else if ($globalCount == 1) {
254 $action->lay->set(
"resulttext", sprintf(_(
"One document for <b>%s</b>%s") ,
$keyword, $famsuffix));
256 $action->lay->set(
"resulttext", sprintf(_(
"Found <b>%d</b> Result for <b>%s</b>%s") , $globalCount,
$keyword, $famsuffix));
258 $action->lay->set(
"displayBottomBar", ($globalCount == 0 ?
false :
true));
259 $action->lay->set(
"displayTopBar", ($page == 0));
261 foreach ($tclassdoc as $k => $cdoc) {
262 $selectclass[$k][
"idcdoc"] = $cdoc[
"initid"];
263 $selectclass[$k][
"classname"] = $cdoc[
"title"];
264 $selectclass[$k][
"famselect"] = ($cdoc[
"initid"] ==
$famid) ?
"selected" :
"";
266 $action->lay->SetBlockData(
"SELECTCLASS", $selectclass);
275 $sqlselect =
'svalues';
276 $sqlfrom =
'doc' .
$tdoc[
"fromid"];
277 $sqlwhere =
'id=' .
$tdoc[
"id"];
279 $result = pg_query(
$dbid,
"select $sqlselect from $sqlfrom where $sqlwhere ;");
280 if (pg_numrows($result) > 0) {
281 $arr = pg_fetch_array($result, 0, PGSQL_ASSOC);
282 return implode(
' - ', $arr);
287 $s9 = utf8_decode(
$s);
288 $s9 = strtr($s9, utf8_decode($c1) , utf8_decode($c2));
289 return utf8_encode($s9);
302 $h = str_replace(
'£',
' - ', substr(
$s, 0, 100));
303 $pos1 = mb_strpos($h,
' ');
304 $pos2 = mb_strrpos($h,
' ');
305 $headline = substr($h, $pos1, ($pos2 - $pos1));
306 }
else if ((strlen(
$s) / 1024) >
getParam(
"FULLTEXT_HIGHTLIGHTSIZE", 200)) {
307 $headline = sprintf(_(
"document too big (%dKo): no highlight") , (strlen(
$s) / 1024));
310 $result = pg_query(
$dbid,
"select ts_headline('french','" . pg_escape_string(
unaccent(
$s)) .
"',to_tsquery('french','$k'))");
311 if (pg_numrows($result) > 0) {
312 $arr = pg_fetch_array($result, 0, PGSQL_ASSOC);
313 $headline = $arr[
"ts_headline"];
316 $headline = preg_replace(
'/[ ]+ /',
' ', $headline);
317 $headline = str_replace(array(
324 $pos = mb_strpos($headline,
'<b>');
326 if ($pos !==
false) {
327 $sw = (str_replace(array(
334 $s = preg_replace(
'/[ ]+ /',
' ',
$s);
335 $s = preg_replace(
'/<[a-z][^>]+>/',
'',
$s);
336 $s = str_replace(array(
343 $offset = mb_strpos(
$s, $sw);
345 if ($offset ===
false)
return $headline;
347 if (($pos + $offset) < $before) $p0 = 0;
348 else $p0 = $pos + $offset - $before;
349 $h = mb_substr(
$s, $p0, $pos + $offset - $p0);
350 $possp = mb_strpos($h,
' ');
351 if ($possp > 0) $h = mb_substr($h, $possp);
352 $pe = mb_strpos($headline,
'</b>', $pos);
355 $h.= mb_substr(
$s, $pos + $offset, $pe - $pos - 3);
363 $pb = mb_strpos($headline,
'<b>', $pos);
364 $pe = mb_strpos($headline,
'</b>', $pos);
366 if (($pe) && ($pb < $pe)) {
369 $h.= mb_substr(
$s, $pos - 4 - (7 * ($i - 1)) + $offset, $pb - $pos - 3);
371 $h.= mb_substr(
$s, $pb - (7 * $i) + $offset, $pe - $pb - 3);
376 $cur = $pos - (7 * $i) + 3 + $offset;
377 if (($cur - $offset) > 150) $pend = 30;
378 else $pend = 180 - $cur + $offset;
379 $send = mb_substr(
$s, $cur, $pend);
380 $possp = mb_strrpos($send,
' ');
381 $send = mb_substr($send, 0, $possp);
396 return strtr8(preg_replace(
'/<br\\s*?\/??>/i',
'', $text) ,
"\n\t£",
" -");