X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fapi%2FApiQueryTags.php;h=1b154faecbb924864dafdd8ec3491f47111f046d;hp=be67dd249b196fcde918753be77e82f3260d9c3f;hb=64b83bdb3afd0ee4f8fc1893a865409c198e601e;hpb=9bfd0c324c46f2894dab1428069061de8ef264e8 diff --git a/includes/api/ApiQueryTags.php b/includes/api/ApiQueryTags.php index be67dd249b..1b154faecb 100644 --- a/includes/api/ApiQueryTags.php +++ b/includes/api/ApiQueryTags.php @@ -53,37 +53,24 @@ class ApiQueryTags extends ApiQueryBase { $softwareDefinedTags = array_fill_keys( ChangeTags::listSoftwareDefinedTags(), 0 ); $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 ); $softwareActivatedTags = array_fill_keys( ChangeTags::listSoftwareActivatedTags(), 0 ); + $tagStats = ChangeTags::tagUsageStatistics(); - $definedTags = array_merge( $softwareDefinedTags, $explicitlyDefinedTags ); + $tagHitcounts = array_merge( $softwareDefinedTags, $explicitlyDefinedTags, $tagStats ); + $tags = array_keys( $tagHitcounts ); # Fetch defined tags that aren't past the continuation if ( $params['continue'] !== null ) { $cont = $params['continue']; - $tags = array_filter( array_keys( $definedTags ), function ( $v ) use ( $cont ) { + $tags = array_filter( $tags, function ( $v ) use ( $cont ) { return $v >= $cont; } ); - $tags = array_fill_keys( $tags, 0 ); - } else { - $tags = $definedTags; - } - - # Merge in all used tags - $this->addTables( 'change_tag' ); - $this->addFields( 'ct_tag' ); - $this->addFields( [ 'hitcount' => $fld_hitcount ? 'COUNT(*)' : '0' ] ); - $this->addOption( 'LIMIT', $limit + 1 ); - $this->addOption( 'GROUP BY', 'ct_tag' ); - $this->addWhereRange( 'ct_tag', 'newer', $params['continue'], null ); - $res = $this->select( __METHOD__ ); - foreach ( $res as $row ) { - $tags[$row->ct_tag] = (int)$row->hitcount; } # Now make sure the array is sorted for proper continuation - ksort( $tags ); + sort( $tags ); $count = 0; - foreach ( $tags as $tagName => $hitcount ) { + foreach ( $tags as $tagName ) { if ( ++$count > $limit ) { $this->setContinueEnumParameter( 'continue', $tagName ); break; @@ -102,7 +89,7 @@ class ApiQueryTags extends ApiQueryBase { } if ( $fld_hitcount ) { - $tag['hitcount'] = $hitcount; + $tag['hitcount'] = intval( $tagHitcounts[$tagName] ); } $isSoftware = isset( $softwareDefinedTags[$tagName] );