X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FCategory.php;h=9d9b5a67ba204182784741b12ceb2eaf849cebdb;hb=f3a55bdbeaa0506226c65615f754eb255b5bd330;hp=b63685e16ce0afb58dc0bbebad404f7788203b31;hpb=5c339ed9285451948f3a3952518dcd054bb07c75;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Category.php b/includes/Category.php index b63685e16c..9d9b5a67ba 100644 --- a/includes/Category.php +++ b/includes/Category.php @@ -1,6 +1,6 @@ mName === null && $this->mTitle ) - $this->mName = $title->getDBkey(); - - if( $this->mName === null && $this->mID === null ) { - throw new MWException( __METHOD__.' has both names and IDs null' ); - } elseif( $this->mID === null ) { + if ( $this->mName === null && $this->mID === null ) { + throw new MWException( __METHOD__ . ' has both names and IDs null' ); + } elseif ( $this->mID === null ) { $where = array( 'cat_title' => $this->mName ); - } elseif( $this->mName === null ) { + } elseif ( $this->mName === null ) { $where = array( 'cat_id' => $this->mID ); } else { # Already initialized @@ -45,7 +45,8 @@ class Category { $where, __METHOD__ ); - if( !$row ) { + + if ( !$row ) { # Okay, there were no contents. Nothing to initialize. if ( $this->mTitle ) { # If there is a title object but no record in the category table, treat this as an empty category @@ -60,6 +61,7 @@ class Category { return false; # Fail } } + $this->mID = $row->cat_id; $this->mName = $row->cat_title; $this->mPages = $row->cat_pages; @@ -69,7 +71,7 @@ class Category { # (bug 13683) If the count is negative, then 1) it's obviously wrong # and should not be kept, and 2) we *probably* don't have to scan many # rows to obtain the correct figure, so let's risk a one-time recount. - if( $this->mPages < 0 || $this->mSubcats < 0 || $this->mFiles < 0 ) { + if ( $this->mPages < 0 || $this->mSubcats < 0 || $this->mFiles < 0 ) { $this->refreshCounts(); } @@ -86,7 +88,8 @@ class Category { public static function newFromName( $name ) { $cat = new self(); $title = Title::makeTitleSafe( NS_CATEGORY, $name ); - if( !is_object( $title ) ) { + + if ( !is_object( $title ) ) { return false; } @@ -100,7 +103,7 @@ class Category { * Factory function. * * @param $title Title for the category page - * @return Mixed: category, or false on a totally invalid name + * @return category|false on a totally invalid name */ public static function newFromTitle( $title ) { $cat = new self(); @@ -126,10 +129,10 @@ class Category { /** * Factory function, for constructing a Category object from a result set * - * @param $row result set row, must contain the cat_xxx fields. If the fields are null, + * @param $row result set row, must contain the cat_xxx fields. If the fields are null, * the resulting Category object will represent an empty category if a title object * was given. If the fields are null and no title was given, this method fails and returns false. - * @param $title optional title object for the category represented by the given row. + * @param Title $title optional title object for the category represented by the given row. * May be provided if it is already known, to avoid having to re-create a title object later. * @return Category */ @@ -137,8 +140,7 @@ class Category { $cat = new self(); $cat->mTitle = $title; - - # NOTE: the row often results from a LEFT JOIN on categorylinks. This may result in + # NOTE: the row often results from a LEFT JOIN on categorylinks. This may result in # all the cat_xxx fields being null, if the category page exists, but nothing # was ever added to the category. This case should be treated linke an empty # category, if possible. @@ -169,22 +171,26 @@ class Category { /** @return mixed DB key name, or false on failure */ public function getName() { return $this->getX( 'mName' ); } + /** @return mixed Category ID, or false on failure */ public function getID() { return $this->getX( 'mID' ); } + /** @return mixed Total number of member pages, or false on failure */ public function getPageCount() { return $this->getX( 'mPages' ); } + /** @return mixed Number of subcategories, or false on failure */ public function getSubcatCount() { return $this->getX( 'mSubcats' ); } + /** @return mixed Number of member files, or false on failure */ public function getFileCount() { return $this->getX( 'mFiles' ); } /** - * @return mixed The Title for this category, or false on failure. + * @return Title|false Title for this category, or false on failure. */ public function getTitle() { - if( $this->mTitle ) return $this->mTitle; - - if( !$this->initialize() ) { + if ( $this->mTitle ) return $this->mTitle; + + if ( !$this->initialize() ) { return false; } @@ -204,13 +210,19 @@ class Category { $conds = array( 'cl_to' => $this->getName(), 'cl_from = page_id' ); $options = array( 'ORDER BY' => 'cl_sortkey' ); - if( $limit ) $options[ 'LIMIT' ] = $limit; - if( $offset !== '' ) $conds[] = 'cl_sortkey > ' . $dbr->addQuotes( $offset ); + + if ( $limit ) { + $options[ 'LIMIT' ] = $limit; + } + + if ( $offset !== '' ) { + $conds[] = 'cl_sortkey > ' . $dbr->addQuotes( $offset ); + } return TitleArray::newFromResult( $dbr->select( array( 'page', 'categorylinks' ), - array( 'page_id', 'page_namespace','page_title', 'page_len', + array( 'page_id', 'page_namespace', 'page_title', 'page_len', 'page_is_redirect', 'page_latest' ), $conds, __METHOD__, @@ -221,10 +233,10 @@ class Category { /** Generic accessor */ private function getX( $key ) { - if( !$this->initialize() ) { + if ( !$this->initialize() ) { return false; } - return $this->{$key}; + return $this-> { $key } ; } /** @@ -233,31 +245,38 @@ class Category { * @return bool True on success, false on failure */ public function refreshCounts() { - if( wfReadOnly() ) { + if ( wfReadOnly() ) { return false; } - $dbw = wfGetDB( DB_MASTER ); - $dbw->begin(); + # Note, we must use names for this, since categorylinks does. - if( $this->mName === null ) { - if( !$this->initialize() ) { + if ( $this->mName === null ) { + if ( !$this->initialize() ) { return false; } - } else { - # Let's be sure that the row exists in the table. We don't need to - # do this if we got the row from the table in initialization! - $seqVal = $dbw->nextSequenceValue( 'category_cat_id_val' ); - $dbw->insert( - 'category', - array( 'cat_id' => $seqVal, - 'cat_title' => $this->mName ), - __METHOD__, - 'IGNORE' - ); } - $cond1 = $dbw->conditional( 'page_namespace='.NS_CATEGORY, 1, 'NULL' ); - $cond2 = $dbw->conditional( 'page_namespace='.NS_FILE, 1, 'NULL' ); + $dbw = wfGetDB( DB_MASTER ); + $dbw->begin(); + + # Insert the row if it doesn't exist yet (e.g., this is being run via + # update.php from a pre-1.16 schema). TODO: This will cause lots and + # lots of gaps on some non-MySQL DBMSes if you run populateCategory.php + # repeatedly. Plus it's an extra query that's unneeded almost all the + # time. This should be rewritten somehow, probably. + $seqVal = $dbw->nextSequenceValue( 'category_cat_id_seq' ); + $dbw->insert( + 'category', + array( + 'cat_id' => $seqVal, + 'cat_title' => $this->mName + ), + __METHOD__, + 'IGNORE' + ); + + $cond1 = $dbw->conditional( 'page_namespace=' . NS_CATEGORY, 1, 'NULL' ); + $cond2 = $dbw->conditional( 'page_namespace=' . NS_FILE, 1, 'NULL' ); $result = $dbw->selectRow( array( 'categorylinks', 'page' ), array( 'COUNT(*) AS pages',