From: Valerio Bozzolan Date: Fri, 3 Nov 2017 01:46:52 +0000 (+0100) Subject: Added an optional $maxdepth to CategoryFinder X-Git-Tag: 1.31.0-rc.0~1220 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=6fe7bf695f3d4b3c8266dac6e186188c2d792d38 Added an optional $maxdepth to CategoryFinder Bug: T179065 Change-Id: I760bb75aa9f14d55456ea2d604a4c25234826403 --- diff --git a/includes/CategoryFinder.php b/includes/CategoryFinder.php index 2a70f5f3fd..3561f7f586 100644 --- a/includes/CategoryFinder.php +++ b/includes/CategoryFinder.php @@ -56,6 +56,9 @@ class CategoryFinder { /** @var array Array of article/category IDs */ protected $next = []; + /** @var int Max layer depth **/ + protected $maxdepth = -1; + /** @var array Array of DBKEY category names */ protected $targets = []; @@ -73,12 +76,17 @@ class CategoryFinder { * @param array $articleIds Array of article IDs * @param array $categories FIXME * @param string $mode FIXME, default 'AND'. + * @param int $maxdepth Maximum layer depth. Where: + * -1 means deep recursion (default); + * 0 means no-parents; + * 1 means one parent layer, etc. * @todo FIXME: $categories/$mode */ - public function seed( $articleIds, $categories, $mode = 'AND' ) { + public function seed( $articleIds, $categories, $mode = 'AND', $maxdepth = -1 ) { $this->articles = $articleIds; $this->next = $articleIds; $this->mode = $mode; + $this->maxdepth = $maxdepth; # Set the list of target categories; convert them to DBKEY form first $this->targets = []; @@ -98,8 +106,17 @@ class CategoryFinder { */ public function run() { $this->dbr = wfGetDB( DB_REPLICA ); - while ( count( $this->next ) > 0 ) { + + $i = 0; + $dig = true; + while ( count( $this->next ) && $dig ) { $this->scanNextLayer(); + + // Is there any depth limit? + if ( $this->maxdepth !== -1 ) { + $dig = $i < $this->maxdepth; + $i++; + } } # Now check if this applies to the individual articles