Merge "Done a bit of deglobalisation."
[lhc/web/wiklou.git] / includes / search / SearchUpdate.php
index b9c2335..40dd36c 100644 (file)
@@ -1,14 +1,39 @@
 <?php
 /**
+ * Search index updater
+ *
  * See deferred.txt
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
  * @ingroup Search
  */
-class SearchUpdate {
 
-       /* private */ var $mId = 0, $mNamespace, $mTitle, $mText;
-       /* private */ var $mTitleWords;
+/**
+ * Database independant search index updater
+ *
+ * @ingroup Search
+ */
+class SearchUpdate implements DeferrableUpdate {
 
-       function SearchUpdate( $id, $title, $text = false ) {
+       private $mId = 0, $mNamespace, $mTitle, $mText;
+       private $mTitleWords;
+
+       function __construct( $id, $title, $text = false ) {
                $nt = Title::newFromText( $title );
                if( $nt ) {
                        $this->mId = $id;
@@ -27,32 +52,32 @@ class SearchUpdate {
                global $wgContLang, $wgDisableSearchUpdate;
 
                if( $wgDisableSearchUpdate || !$this->mId ) {
-                       return false;
+                       return;
                }
-               $fname = 'SearchUpdate::doUpdate';
-               wfProfileIn( $fname );
+
+               wfProfileIn( __METHOD__ );
 
                $search = SearchEngine::create();
                $lc = SearchEngine::legalSearchChars() . '&#;';
 
                if( $this->mText === false ) {
                        $search->updateTitle($this->mId,
-                               Title::indexTitle( $this->mNamespace, $this->mTitle ));
-                       wfProfileOut( $fname );
+                               $search->normalizeText( Title::indexTitle( $this->mNamespace, $this->mTitle ) ) );
+                       wfProfileOut( __METHOD__ );
                        return;
                }
 
                # Language-specific strip/conversion
-               $text = $wgContLang->stripForSearch( $this->mText );
+               $text = $wgContLang->normalizeForSearch( $this->mText );
 
-               wfProfileIn( $fname.'-regexps' );
+               wfProfileIn( __METHOD__ . '-regexps' );
                $text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/",
                        ' ', $wgContLang->lc( " " . $text . " " ) ); # Strip HTML markup
                $text = preg_replace( "/(^|\\n)==\\s*([^\\n]+)\\s*==(\\s)/sD",
                  "\\1\\2 \\2 \\2\\3", $text ); # Emphasize headings
 
                # Strip external URLs
-               $uc = "A-Za-z0-9_\\/:.,~%\\-+&;#?!=()@\\xA0-\\xFF";
+               $uc = "A-Za-z0-9_\\/:.,~%\\-+&;#?!=()@\\x80-\\xFF";
                $protos = "http|https|ftp|mailto|news|gopher";
                $pat = "/(^|[^\\[])({$protos}):[{$uc}]+([^{$uc}]|$)/";
                $text = preg_replace( $pat, "\\1 \\3", $text );
@@ -92,20 +117,21 @@ class SearchUpdate {
 
                # Strip wiki '' and '''
                $text = preg_replace( "/''[']*/", " ", $text );
-               wfProfileOut( "$fname-regexps" );
+               wfProfileOut( __METHOD__ . '-regexps' );
 
                wfRunHooks( 'SearchUpdate', array( $this->mId, $this->mNamespace, $this->mTitle, &$text ) );
 
                # Perform the actual update
-               $search->update($this->mId, Title::indexTitle( $this->mNamespace, $this->mTitle ),
-                               $text);
+               $search->update($this->mId, $search->normalizeText( Title::indexTitle( $this->mNamespace, $this->mTitle ) ),
+                               $search->normalizeText( $text ) );
 
-               wfProfileOut( $fname );
+               wfProfileOut( __METHOD__ );
        }
 }
 
 /**
  * Placeholder class
+ *
  * @ingroup Search
  */
 class SearchUpdateMyISAM extends SearchUpdate {