From 086ae52d12011746a75f5588e877347bc0457352 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 21 Mar 2008 11:49:34 +0100 Subject: Update auf MediaWiki 1.12.0 --- includes/AjaxFunctions.php | 121 +++++++++++++++++++++++++++------------------ 1 file changed, 72 insertions(+), 49 deletions(-) (limited to 'includes/AjaxFunctions.php') diff --git a/includes/AjaxFunctions.php b/includes/AjaxFunctions.php index 4fb76dcc..ffd3168a 100644 --- a/includes/AjaxFunctions.php +++ b/includes/AjaxFunctions.php @@ -73,64 +73,87 @@ function code2utf($num){ return ''; } +define( 'AJAX_SEARCH_VERSION', 2 ); //AJAX search cache version + function wfSajaxSearch( $term ) { - global $wgContLang, $wgOut; + global $wgContLang, $wgOut, $wgUser, $wgCapitalLinks, $wgMemc; $limit = 16; + $sk = $wgUser->getSkin(); + $output = ''; + + $term = trim( $term ); + $term = $wgContLang->checkTitleEncoding( $wgContLang->recodeInput( js_unescape( $term ) ) ); + if ( $wgCapitalLinks ) + $term = $wgContLang->ucfirst( $term ); + $term_title = Title::newFromText( $term ); + + $memckey = $term_title ? wfMemcKey( 'ajaxsearch', md5( $term_title->getFullText() ) ) : wfMemcKey( 'ajaxsearch', md5( $term ) ); + $cached = $wgMemc->get($memckey); + if( is_array( $cached ) && $cached['version'] == AJAX_SEARCH_VERSION ) { + $response = new AjaxResponse( $cached['html'] ); + $response->setCacheDuration( 30*60 ); + return $response; + } - $l = new Linker; - - $term = str_replace( ' ', '_', $wgContLang->ucfirst( - $wgContLang->checkTitleEncoding( $wgContLang->recodeInput( js_unescape( $term ) ) ) - ) ); - - if ( strlen( str_replace( '_', '', $term ) )<3 ) - return; - - $db = wfGetDB( DB_SLAVE ); - $res = $db->select( 'page', 'page_title', - array( 'page_namespace' => 0, - "page_title LIKE '". $db->strencode( $term) ."%'" ), - "wfSajaxSearch", - array( 'LIMIT' => $limit+1 ) - ); - - $r = ""; + $r = $more = ''; + $canSearch = true; + + $results = PrefixSearch::titleSearch( $term, $limit + 1 ); + foreach( array_slice( $results, 0, $limit ) as $titleText ) { + $r .= '
  • ' . $sk->makeKnownLink( $titleText ) . "
  • \n"; + } + + // Hack to check for specials + if( $results ) { + $t = Title::newFromText( $results[0] ); + if( $t && $t->getNamespace() == NS_SPECIAL ) { + $canSearch = false; + if( count( $results ) > $limit ) { + $more = '' . + $sk->makeKnownLinkObj( + SpecialPage::getTitleFor( 'Specialpages' ), + wfMsgHtml( 'moredotdotdot' ) ) . + ''; + } + } else { + if( count( $results ) > $limit ) { + $more = '' . + $sk->makeKnownLinkObj( + SpecialPage::getTitleFor( "Allpages", $term ), + wfMsgHtml( 'moredotdotdot' ) ) . + ''; + } + } + } - $i=0; - while ( ( $row = $db->fetchObject( $res ) ) && ( ++$i <= $limit ) ) { - $nt = Title::newFromDBkey( $row->page_title ); - $r .= '
  • ' . $l->makeKnownLinkObj( $nt ) . "
  • \n"; + $valid = (bool) $term_title; + $term_url = urlencode( $term ); + $term_diplay = htmlspecialchars( $valid ? $term_title->getFullText() : $term ); + $subtitlemsg = ( $valid ? 'searchsubtitle' : 'searchsubtitleinvalid' ); + $subtitle = wfMsgWikiHtml( $subtitlemsg, $term_diplay ); + $html = '
    ' + . wfMsgHtml( 'hideresults' ) . '
    ' + . '

    '.wfMsgHtml('search') + . '

    '. $subtitle . '
    '; + if( $canSearch ) { + $html .= '"; } - if ( $i > $limit ) { - $more = '' . $l->makeKnownLink( $wgContLang->specialPage( "Allpages" ), - wfMsg('moredotdotdot'), - "namespace=0&from=" . wfUrlEncode ( $term ) ) . - ''; - } else { - $more = ''; + if( $r ) { + $html .= "

    " . wfMsgHtml( 'articletitles', $term_diplay ) . "

    " + . '' . $more; } - $subtitlemsg = ( Title::newFromText($term) ? 'searchsubtitle' : 'searchsubtitleinvalid' ); - $subtitle = $wgOut->parse( wfMsg( $subtitlemsg, wfEscapeWikiText($term) ) ); #FIXME: parser is missing mTitle ! - - $term = urlencode( $term ); - $html = '
    ' - . wfMsg( 'hideresults' ) . '
    ' - . '

    '.wfMsg('search') - . '

    '. $subtitle . '

    " . wfMsg( 'articletitles', $term ) . "

    " - . ''.$more; + $wgMemc->set( $memckey, array( 'version' => AJAX_SEARCH_VERSION, 'html' => $html ), 30 * 60 ); $response = new AjaxResponse( $html ); - $response->setCacheDuration( 30*60 ); - return $response; } @@ -154,7 +177,7 @@ function wfAjaxWatch($pagename = "", $watch = "") { } $watch = 'w' === $watch; - $title = Title::newFromText($pagename); + $title = Title::newFromDBkey($pagename); if(!$title) { // Invalid title return ''; -- cgit v1.2.3-54-g00ecf