// Delete all was confirmed -> delete entire page // $keyword = deleteAllWikiPage($keyword, $SessSemName[1]); $version = ""; // show latest version } } } } } } // // Show Page // SkipLinks::addIndex(_("Aktuelle Seite"), 'main_content', 100); showWikiPage($keyword, $version, $special, $show_wiki_comments, Request::get('hilight')); } } } } } } } } // end default action $layout = $GLOBALS['template_factory']->open('layouts/base'); $layout->content_for_layout = ob_get_clean(); if (in_array($cmd, words('show abortedit really_delete really_delete_all'))) { // redirect to normal view to avoid duplicate edits on reload or back/forward header('Location: ' . URLHelper::getURL('', compact('keyword'))); } else {
/** * Search Wiki * * @param searchfor string String to search for. * @param searchcurrentversions bool it true, only consider most recent versions or pages * @param keyword string last shown page or keyword for local (one page) search * @param keyword bool if localsearch is set, only one page (all versions) is searched **/ function searchWiki($searchfor, $searchcurrentversions, $keyword, $localsearch) { global $SessSemName; $range_id=$SessSemName[1]; $result=NULL; // check for invalid search string if (strlen($searchfor)<3) { $invalid_searchstring=1; } else if ($localsearch && !$keyword) { $invalid_searchstring=1; } else { // make search string if ($localsearch) { $query = "SELECT * FROM wiki WHERE range_id = ? AND body LIKE CONCAT('%', ?, '%') AND keyword = ? ORDER BY version DESC"; $parameters = array($range_id, $searchfor, $keyword); // $q="SELECT * FROM wiki WHERE range_id='$range_id' AND body LIKE '%$searchfori%' AND keyword='$keyword' ORDER BY version DESC"; } else if (!$searchcurrentversions) { // search in all versions of all pages $query = "SELECT * FROM wiki WHERE range_id = ? AND body LIKE CONCAT('%', ?, '%') ORDER BY keyword ASC, version DESC"; $parameters = array($range_id, $searchfor); // $q="SELECT * FROM wiki WHERE range_id='$range_id' AND body LIKE '%$searchfori%' ORDER BY keyword ASC, version DESC"; } else { // search only latest versions of all pages $query = "SELECT * FROM wiki AS w1 WHERE range_id = ? AND w1.body LIKE CONCAT('%', ?, '%') AND version = ( SELECT MAX(version) FROM wiki AS w2 WHERE w2.range_id =? AND w2.keyword = w1.keyword ) ORDER BY w1.keyword ASC"; $parameters = array($range_id, $searchfor, $range_id); // $q="SELECT * FROM wiki AS w1 WHERE range_id='$range_id' AND version=(SELECT MAX(version) FROM wiki AS w2 WHERE w2.range_id='$range_id' AND w2.keyword=w1.keyword) AND w1.body LIKE '%$searchfori%' ORDER BY w1.keyword ASC"; } $statement = DBManager::get()->prepare($query); $statement->execute($parameters); $results = $statement->fetchAll(PDO::FETCH_ASSOC); } // quit if no pages found / search string was invalid if ($invalid_searchstring || count($results) == 0) { if ($invalid_searchstring) { $message = MessageBox::error(_('Suchbegriff zu kurz. Geben Sie mindestens drei Zeichen ein.')); } else { $message = MessageBox::info(sprintf(_("Die Suche nach »%s« lieferte keine Treffer."), htmlReady($searchfor))); } PageLayout::postMessage($message); showWikiPage($keyword, NULL); return; } showPageFrameStart(); // show hits ?> <table class="default"> <caption> <?= sprintf(_('Treffer für Suche nach %s'), '»' . htmlReady($searchfor) . '«') ?> <? if ($localsearch): ?> <?= sprintf(_('in allen Versionen der Seite %s'), '»' . htmlReady($keyword) . '«') ?> <? elseif ($searchcurrentversions): ?> <?= _('in aktuellen Versionen') ?> <? else: ?> <?= _('in allen Versionen') ?> <? endif; ?> </caption> <colgroup> <col width="10%"> <col width="65%"> <col width="25%"> </colgroup> <thead> <tr> <th><?= _('Seite') ?></th> <th><?= _('Treffer') ?></th> <th><?= _('Version') ?></th> </tr> </thead> <tbody> <?php $c=1; $last_keyword=""; $last_keyword_count=0; foreach ($results as $result) { if (!$localsearch) { // don't display more than one hit in a page's versions // offer link instead if ($result['keyword']==$last_keyword) { $last_keyword_count++; continue; } else if ($last_keyword_count>0) { print($tdheadleft." ".$tdtail); if ($last_keyword_count==1) { $hitstring=_("Weitere Treffer in %s älteren Version. Klicken Sie %shier%s, um diese Treffer anzuzeigen."); } else { $hitstring=_("Weitere Treffer in %s älteren Versionen. Klicken Sie %shier%s, um diese Treffer anzuzeigen."); } print($tdheadleft."<em>".sprintf($hitstring,$last_keyword_count,"<b><a href=\"".URLHelper::getLink("?view=search&searchfor=$searchfor&keyword=".urlencode($last_keyword)."&localsearch=1")."\">","</a></b>")."</em>".$tdtail); print($tdheadleft." ".$tdtail); print("</tr>"); } $last_keyword=$result['keyword']; $last_keyword_count=0; } $tdheadleft="<td>"; $tdheadcenter="<td>"; $tdtail="</td>"; print("<tr>"); // Pagename print($tdheadleft); print("<a href=\"".URLHelper::getLink("?keyword=".$result['keyword']."&version=".$result['version']."&hilight=$searchfor&searchfor=$searchfor")."\">"); print($result['keyword']."</a>"); print($tdtail); // display hit previews $offset=0; // step through text $ignore_next_hits=0; // don't show hits more than once $first_line=1; // don't print <br> before first hit print($tdheadleft); // find all occurences while ($offset < strlen($result['body'])) { $pos=stripos($result['body'], $searchfor,$offset); if ($pos===FALSE) break; $offset=$pos+1; if (($ignore_next_hits--)>0) { // if more than one occurence is found // in a fragment to be displayed, // the fragment is only shown once continue; } // show max 80 chars $fragment = ''; $split_fragment = preg_split('/('.preg_quote($searchfor,'/').')/i', substr($result['body'],max(0, $pos-40), 80), -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($split_fragment); ++$i) { if ($i % 2) { $fragment .= '<span style="background-color:#FFFF88">'; $fragment .= htmlready($split_fragment[$i], false); $fragment .= '</span>'; } else { $fragment .= htmlready($split_fragment[$i], false); } } $found_in_fragment = (count($split_fragment) - 1) / 2; // number of hits in fragment $ignore_next_hits = ($found_in_fragment > 1) ? $found_in_fragment - 1 : 0; print("...".$fragment."..."); print "<br>"; } print($tdtail); // version info print($tdheadleft); print(date("d.m.Y, H:i", $result['chdate'])." ("._("Version")." ".$result['version'].")"); print($tdtail); print "</tr>"; } if (!$localsearch && $last_keyword_count>0) { print("<tr>"); print($tdheadleft." ".$tdtail); if ($last_keyword_count==1) { $hitstring=_("Weitere Treffer in %s älteren Version. Klicken Sie %shier%s, um diese Treffer anzuzeigen."); } else { $hitstring=_("Weitere Treffer in %s älteren Versionen. Klicken Sie %shier%s, um diese Treffer anzuzeigen."); } print($tdheadleft."<em>".sprintf($hitstring,$last_keyword_count,"<b><a href=\"".URLHelper::getLink("?view=search&searchfor=$searchfor&keyword=".urlencode($last_keyword)."&localsearch=1")."\">","</a></b>")."</em>".$tdtail); print($tdheadleft." ".$tdtail); print("</tr>"); } echo "</tbody></table><p> </p>"; // search $widget = new SearchWidget(URLHelper::getLink('?view=search&keyword=' . urlencode($keyword))); $widget->addNeedle(_('Im Wiki suchen'), 'searchfor', true); $widget->addFilter(_('Nur in aktuellen Versionen'), 'searchcurrentversions'); Sidebar::get()->addWidget($widget); showPageFrameEnd(array()); }