summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/utils/StatsBar.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/utils/StatsBar.php')
-rw-r--r--www/wiki/extensions/Translate/utils/StatsBar.php104
1 files changed, 104 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/utils/StatsBar.php b/www/wiki/extensions/Translate/utils/StatsBar.php
new file mode 100644
index 00000000..df2801a2
--- /dev/null
+++ b/www/wiki/extensions/Translate/utils/StatsBar.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Compact stats.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013 Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Compact, colorful stats.
+ * @since 2012-11-30
+ */
+class StatsBar {
+ /**
+ * @see MessageGroupStats
+ * @var int[]
+ */
+ protected $stats;
+
+ /**
+ * @var string Message group id
+ */
+ protected $group;
+
+ /**
+ * @var string Language
+ */
+ protected $language;
+
+ /**
+ * @param string $group
+ * @param string $language
+ * @param array[]|null $stats
+ *
+ * @return self
+ */
+ public static function getNew( $group, $language, array $stats = null ) {
+ $self = new self();
+ $self->group = $group;
+ $self->language = $language;
+
+ if ( is_array( $stats ) ) {
+ $self->stats = $stats;
+ } else {
+ $self->stats = MessageGroupStats::forItem( $group, $language );
+ }
+
+ return $self;
+ }
+
+ /**
+ * @param IContextSource $context
+ *
+ * @return string HTML
+ */
+ public function getHtml( IContextSource $context ) {
+ $context->getOutput()->addModules( 'ext.translate.statsbar' );
+
+ $total = $this->stats[MessageGroupStats::TOTAL];
+ $proofread = $this->stats[MessageGroupStats::PROOFREAD];
+ $translated = $this->stats[MessageGroupStats::TRANSLATED];
+ $fuzzy = $this->stats[MessageGroupStats::FUZZY];
+
+ if ( !$total ) {
+ $untranslated = null;
+ $wproofread = $wtranslated = $wfuzzy = $wuntranslated = 0;
+ } else {
+ // Proofread is subset of translated
+ $untranslated = $total - $translated - $fuzzy;
+
+ $wproofread = round( 100 * $proofread / $total, 2 );
+ $wtranslated = round( 100 * ( $translated - $proofread ) / $total, 2 );
+ $wfuzzy = round( 100 * $fuzzy / $total, 2 );
+ $wuntranslated = round( 100 - $wproofread - $wtranslated - $wfuzzy, 2 );
+ }
+
+ return Html::rawElement( 'div', [
+ 'class' => 'tux-statsbar',
+ 'data-total' => $total,
+ 'data-group' => $this->group,
+ 'data-language' => $this->language,
+ ],
+ Html::element( 'span', [
+ 'class' => 'tux-proofread',
+ 'style' => "width: $wproofread%",
+ 'data-proofread' => $proofread,
+ ] ) . Html::element( 'span', [
+ 'class' => 'tux-translated',
+ 'style' => "width: $wtranslated%",
+ 'data-translated' => $translated,
+ ] ) . Html::element( 'span', [
+ 'class' => 'tux-fuzzy',
+ 'style' => "width: $wfuzzy%",
+ 'data-fuzzy' => $fuzzy,
+ ] ) . Html::element( 'span', [
+ 'class' => 'tux-untranslated',
+ 'style' => "width: $wuntranslated%",
+ 'data-untranslated' => $untranslated,
+ ] )
+ );
+ }
+}