Beispiel #1
0
                                                        // 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 {
Beispiel #2
0
/**
* 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 &raquo;%s&laquo; 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'), '&raquo;' . htmlReady($searchfor) . '&laquo;') ?>
    <? if ($localsearch): ?>
        <?= sprintf(_('in allen Versionen der Seite %s'), '&raquo;' . htmlReady($keyword) . '&laquo;') ?>
    <? 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."&nbsp;".$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."&nbsp;".$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."&nbsp;".$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."&nbsp;".$tdtail);
        print("</tr>");
    }

    echo "</tbody></table><p>&nbsp;</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());
}