X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FQueryPage.php;h=5b68965c573109fd68b8aabb77279ca9c954569b;hb=ee940c906d8170f5326d9364fe0dbf3a2d6f4ae5;hp=b7a19ffef5a3c0919b3cc9a8093b8932ec89d599;hpb=b59ce2294385403bf4da644a0323aa7ba01b8a66;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/QueryPage.php b/includes/QueryPage.php index b7a19ffef5..5b68965c57 100644 --- a/includes/QueryPage.php +++ b/includes/QueryPage.php @@ -1,7 +1,6 @@ sortDescending() ? "DESC" : "") + . " LIMIT {$offset}, {$limit}"; } # Is this query expensive (for some definition of expensive)? Then we @@ -40,39 +59,58 @@ class QueryPage { # This is the actual workhorse. It does everything needed to make a # real, honest-to-gosh query page. - + function doQuery( $offset, $limit ) { - - global $wgUser, $wgOut, $wgLang, $wgMiserMode; + global $wgUser, $wgOut, $wgLang, $wgRequest; + global $wgMiserMode; $sname = $this->getName(); $fname = get_class($this) . "::doQuery"; + $sql = $this->getSQL( $offset, $limit ); - if ( $this->isExpensive( ) ) { - - $vsp = $wgLang->getValidSpecialPages(); - $logpage = new LogPage( "!" . $vsp[$sname] ); - $logpage->mUpdateRecentChanges = false; - - if ( $wgMiserMode ) { - $logpage->showAsDisabledPage(); - return; + $wgOut->setSyndicated( true ); + + if ( $this->isExpensive() ) { + $type = wfStrencode( $sname ); + $recache = $wgRequest->getBool( "recache" ); + if( $recache ) { + # Clear out any old cached data + $res = wfQuery( "DELETE FROM querycache WHERE qc_type='$type'", DB_WRITE, $fname ); + + # Save results into the querycache table + $maxstored = 1000; + $res = wfQuery( + "INSERT INTO querycache(qc_type,qc_namespace,qc_title,qc_value) " . + $this->getSQL() . + $this->getOrderLimit( 0, $maxstored ), + DB_WRITE, $fname ); + } + if( $wgMiserMode || $recache ) { + $sql = + "SELECT qc_type as type, qc_namespace as namespace,qc_title as title, qc_value as value + FROM querycache WHERE qc_type='$type'"; + } + if( $wgMiserMode ) { + $wgOut->addWikiText( wfMsg( "perfcached" ) ); } } - $sql = $this->getSQL( $offset, $limit ); - - $res = wfQuery( $sql, DB_READ, $fname ); - + $res = wfQuery( $sql . $this->getOrderLimit( $offset, $limit ), DB_READ, $fname ); + + $num = wfNumRows($res); + $sk = $wgUser->getSkin( ); - $top = wfShowingResults( $offset, $limit ); + $top = wfShowingResults( $offset, $num); $wgOut->addHTML( "

{$top}\n" ); - $sl = wfViewPrevNext( $offset, $limit, $wgLang->specialPage( $sname ) ); - $wgOut->addHTML( "
{$sl}\n" ); + # often disable 'next' link when we reach the end + if($num < $limit) { $atend = true; } else { $atend = false; } + + $sl = wfViewPrevNext( $offset, $limit , $wgLang->specialPage( $sname ), "" ,$atend ); + $wgOut->addHTML( "
{$sl}

\n" ); - $s = "
    "; + $s = "
      "; while ( $obj = wfFetchObject( $res ) ) { $format = $this->formatResult( $sk, $obj ); $s .= "
    1. {$format}
    2. \n"; @@ -80,23 +118,15 @@ class QueryPage { wfFreeResult( $res ); $s .= "
    "; $wgOut->addHTML( $s ); - $wgOut->addHTML( "

    {$sl}\n" ); - - # Saving cache - - if ( $this->isExpensive() && $offset == 0 && $limit >= 50 ) { - $logpage->replaceContent( $s ); - } + $wgOut->addHTML( "

    {$sl}

    \n" ); } # Similar to above, but packaging in a syndicated feed instead of a web page function doFeed( $class = "" ) { global $wgFeedClasses; global $wgOut, $wgLanguageCode, $wgLang; - if( $class == "rss" ) { - $wgOut->disable(); - - $feed = new RSSFeed( + if( isset($wgFeedClasses[$class]) ) { + $feed = new $wgFeedClasses[$class]( $this->feedTitle(), $this->feedDesc(), $this->feedUrl() ); @@ -119,45 +149,58 @@ class QueryPage { # Override for custom handling. If the titles/links are ok, just do feedItemDesc() function feedResult( $row ) { - if( isset( $row->cur_title ) ) { - $title = Title::MakeTitle( $row->cur_namespace, $row->cur_title ); - } elseif( isset( $row->old_title ) ) { - $title = Title::MakeTitle( $row->old_namespace, $row->old_title ); - } elseif( isset( $row->rc_title ) ) { - $title = Title::MakeTitle( $row->rc_namespace, $row->rc_title ); - } else { + if( !isset( $row->title ) ) { return NULL; } + $title = Title::MakeTitle( IntVal( $row->namespace ), $row->title ); if( $title ) { - $date = ""; - if( isset( $row->cur_timestamp ) ) { - $date = $row->cur_timestamp; - } elseif( isset( $row->old_timestamp ) ) { - $date = $row->old_timestamp; - } elseif( isset( $row->rc_cur_timestamp ) ) { - $date = $row->rc_cur_timestamp; + if( isset( $row->timestamp ) ) { + $date = $row->timestamp; + } else { + $date = ""; } + + $comments = ""; + if( $title ) { + $talkpage = $title->getTalkPage(); + $comments = $talkpage->getFullURL(); + } + return new FeedItem( $title->getText(), $this->feedItemDesc( $row ), $title->getFullURL(), - $date); + $date, + $this->feedItemAuthor( $row ), + $comments); } else { return NULL; } } function feedItemDesc( $row ) { - if( isset( $row->cur_comment ) ) { - return $row->cur_comment; - } elseif( isset( $row->old_comment ) ) { - return $row->old_comment; - } elseif( isset( $row->rc_comment ) ) { - return $row->rc_comment; + $text = ""; + if( isset( $row->comment ) ) { + $text = htmlspecialchars( $row->comment ); + } else { + $text = ""; } - return ""; + + if( isset( $row->text ) ) { + $text = "

    " . htmlspecialchars( wfMsg( "summary" ) ) . ": " . $text . "

    \n
    \n
    " . + nl2br( htmlspecialchars( $row->text ) ) . "
    ";; + } + return $text; } - + + function feedItemAuthor( $row ) { + if( isset( $row->user_text ) ) { + return $row->user_text; + } else { + return ""; + } + } + function feedTitle() { global $wgLanguageCode, $wgSitename, $wgLang; $pages = $wgLang->getValidSpecialPages(); @@ -171,7 +214,8 @@ class QueryPage { function feedUrl() { global $wgLang; - return wfFullUrl( $wgLang->SpecialPage( $this->getName() ) ); + $title = Title::MakeTitle( NS_SPECIAL, $this->getName() ); + return $title->getFullURL(); } } @@ -182,7 +226,8 @@ class QueryPage { class PageQueryPage extends QueryPage { function formatResult( $skin, $result ) { - return $skin->makeKnownLink( $result->cur_title, "" ); + $nt = Title::makeTitle( $result->namespace, $result->title ); + return $skin->makeKnownLinkObj( $nt, "" ); } }