summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/api/ApiStatsQuery.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/api/ApiStatsQuery.php')
-rw-r--r--www/wiki/extensions/Translate/api/ApiStatsQuery.php95
1 files changed, 95 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/api/ApiStatsQuery.php b/www/wiki/extensions/Translate/api/ApiStatsQuery.php
new file mode 100644
index 00000000..51244e0e
--- /dev/null
+++ b/www/wiki/extensions/Translate/api/ApiStatsQuery.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * A base module for querying message group related stats.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * A base module for querying message group related stats.
+ *
+ * @ingroup API TranslateAPI
+ * @since 2012-11-30
+ */
+abstract class ApiStatsQuery extends ApiQueryBase {
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ /**
+ * Implement this to implement input validation and return the name of the target that
+ * is then given to loadStats.
+ * @param array $params
+ * @return string
+ */
+ abstract protected function validateTargetParamater( array $params );
+
+ /**
+ * Implement this to load stats.
+ * @param string $target
+ * @param int $flags See MessageGroupStats for possible flags
+ * @return array[]
+ */
+ abstract protected function loadStatistics( $target, $flags = 0 );
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ $target = $this->validateTargetParamater( $params );
+ $cache = $this->loadStatistics( $target, MessageGroupStats::FLAG_CACHE_ONLY );
+
+ $result = $this->getResult();
+ $incomplete = false;
+
+ foreach ( $cache as $item => $stats ) {
+ if ( $item < $params['offset'] ) {
+ continue;
+ }
+
+ if ( $stats[MessageGroupStats::TOTAL] === null ) {
+ $incomplete = true;
+ $this->setContinueEnumParameter( 'offset', $item );
+ break;
+ }
+
+ $data = $this->makeItem( $item, $stats );
+ $result->addValue( [ 'query', $this->getModuleName() ], null, $data );
+ }
+
+ $result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'stats' );
+
+ if ( $incomplete ) {
+ DeferredUpdates::addCallableUpdate( function () use ( $target ) {
+ $this->loadStatistics( $target );
+ } );
+ }
+ }
+
+ protected function makeItem( $item, $stats ) {
+ return [
+ 'total' => $stats[MessageGroupStats::TOTAL],
+ 'translated' => $stats[MessageGroupStats::TRANSLATED],
+ 'fuzzy' => $stats[MessageGroupStats::FUZZY],
+ 'proofread' => $stats[MessageGroupStats::PROOFREAD],
+ ];
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'offset' => [
+ ApiBase::PARAM_DFLT => '0',
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ],
+ 'timelimit' => [
+ ApiBase::PARAM_DFLT => 8,
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_MAX => 10,
+ ApiBase::PARAM_MIN => 0,
+ ApiBase::PARAM_DEPRECATED => true, // Since 2018.10
+ ],
+ ];
+ }
+}