jenkins-bot has submitted this change and it was merged.

Change subject: Show the translations of the user for review
......................................................................


Show the translations of the user for review

UI need some more work to make it as per
https://commons.wikimedia.org/wiki/File:Translate-workflow-spec.pdf?page=29

Change-Id: Ifde218749b4d1de53fab1975e1588f9d3f020a4c
---
M Resources.php
M TranslateSandbox.i18n.php
M api/ApiTranslationStash.php
M resources/css/ext.translate.special.translatesandbox.css
M resources/js/ext.translate.special.translatesandbox.js
M resources/js/ext.translate.special.translationstash.js
M resources/js/ext.translate.translationstashstorage.js
M specials/SpecialTranslateSandbox.php
M specials/SpecialTranslationStash.php
9 files changed, 160 insertions(+), 32 deletions(-)

Approvals:
  Nikerabbit: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/Resources.php b/Resources.php
index b202090..f7446d2 100644
--- a/Resources.php
+++ b/Resources.php
@@ -359,6 +359,7 @@
        'styles' => 'resources/css/ext.translate.special.translatesandbox.css',
        'position' => 'top',
        'dependencies' => array(
+               'ext.translate.translationstashstorage',
                'mediawiki.api',
                'jquery.uls.grid',
                'jquery.ui.dialog',
@@ -367,6 +368,9 @@
                'tsb-accept-button-label',
                'tsb-reject-button-label',
                'tsb-reminder-link-text',
+               'tsb-translations-source',
+               'tsb-translations-user',
+               'tsb-translations-current',
        ),
 ) + $resourcePaths;
 
diff --git a/TranslateSandbox.i18n.php b/TranslateSandbox.i18n.php
index 44a6b0e..d507d96 100644
--- a/TranslateSandbox.i18n.php
+++ b/TranslateSandbox.i18n.php
@@ -31,7 +31,9 @@
        'tsb-accept-button-label' => 'Accept',
        'tsb-reject-button-label' => 'Reject',
        'tsb-reminder-link-text' => 'Send email reminder',
-
+       'tsb-translations-source' => 'Source',
+       'tsb-translations-user' => 'User translations',
+       'tsb-translations-current' => 'Existing translations',
        'translationstash' => 'Welcome',
        'translate-translationstash-welcome' => 'Welcome {{GENDER:$1|$1}}, you 
are a new translator',
        'translate-translationstash-welcome-note' => 'Become familiar with the 
translation tools by translating some randomly selected messages.',
@@ -74,6 +76,9 @@
 * $1 - the number of translations user has completed in the stash',
        'translate-translationstash-skip-button-label' => 'Label for the skip 
button in translation editor.
 {{Identical|Try another}}',
+       'tsb-translations-source' => 'Table header label for source messages of 
user translations in [[Special:TranslateSandbox]].',
+       'tsb-translations-user' => 'Table header label for user translations in 
[[Special:TranslateSandbox]].',
+       'tsb-translations-current' =>  'Table header label for existing 
translations in [[Special:TranslateSandbox]].',
 );
 
 /** Afrikaans (Afrikaans)
@@ -519,7 +524,7 @@
        'tsb-reminder-title-generic' => 'Завершіть своє представлення, щоб 
стати перевіреним перекладачем',
        'tsb-reminder-content-generic' => 'Привіт, $1!
 
-Дякуємо за реєстрацію у проекті {{SITENAME}}. Якщо Ви завершите свої тестові 
+Дякуємо за реєстрацію у проекті {{SITENAME}}. Якщо Ви завершите свої тестові
 переклади, адміністратори зможуть скоро надати Вам повні права на переклад.
 
 Будь ласка, перейдіть на $2 і зробіть ще декілька перекладів.',
diff --git a/api/ApiTranslationStash.php b/api/ApiTranslationStash.php
index 053684d..0e5ba9f 100644
--- a/api/ApiTranslationStash.php
+++ b/api/ApiTranslationStash.php
@@ -15,46 +15,84 @@
 class ApiTranslationStash extends ApiBase {
        public function execute() {
                $params = $this->extractRequestParams();
-               $action = $params['subaction'];
+
+               // The user we are operating on, not necessarly the user making 
the request
+               $user = $this->getUser();
+
+               if ( isset( $params['username'] ) ){
+                       if ( $this->getUser()->isAllowed( 
'translate-sandboxmanage' ) ) {
+                               $user = User::newFromName( $params['username'] 
);
+                               if ( !$user ) {
+                                       $this->dieUsageMsg( array( 
'invalidparam', 'username' ) );
+                               }
+                       } else {
+                               $this->dieUsageMsg( array( 'invalidparam', 
'username' ) );
+                       }
+               }
+
                $stash = new TranslationStashStorage( wfGetDB( DB_MASTER ) );
+               $action = $params['subaction'];
+
                if ( $action === 'add' ) {
                        if ( !isset( $params['title'] ) ) {
                                $this->dieUsageMsg( array( 'missingparam', 
'title' ) );
                        }
-                       if ( !isset( $params['value'] ) ) {
-                               $this->dieUsageMsg( array( 'missingparam', 
'value' ) );
+                       if ( !isset( $params['translation'] ) ) {
+                               $this->dieUsageMsg( array( 'missingparam', 
'translation' ) );
                        }
+
+                       // @todo: Return value of Title::newFromText not checked
                        $translation = new StashedTranslation(
-                               $this->getUser(),
+                               $user,
                                Title::newFromText( $params['title'] ),
-                               $params['value'],
+                               $params['translation'],
                                FormatJson::decode( $params['metadata'], true )
                        );
                        $stash->addTranslation( $translation );
                }
 
                if ( $action === 'query' ) {
-                       $translations = $stash->getTranslations( 
$this->getUser() );
+                       $output['translations'] = array();
+
+                       $translations = $stash->getTranslations( $user );
                        foreach( $translations as $translation ) {
-                               $translation = array(
-                                       'title' => 
$translation->getTitle()->getPrefixedText(),
-                                       'value' => $translation->getValue(),
-                                       'metadata' => 
$translation->getMetadata(),
-                               );
-                               $output['translations'][] = $translation;
+                               $output['translations'][] = 
$this->formatTranslation( $translation );
                        }
                }
+
                // If we got this far, nothing has failed
                $output['result'] = 'ok';
                $this->getResult()->addValue( null, $this->getModuleName(), 
$output );
        }
 
+       protected function formatTranslation( StashedTranslation $translation ) 
{
+               $title = $translation->getTitle();
+               $handle = new MessageHandle( $title );
 
-       public function isWriteMode() {
-               return true;
+               // Prepare for the worst
+               $definition = '';
+               $comparison = '';
+               if ( $handle->isValid() ) {
+                       $groupId = MessageIndex::getPrimaryGroupId( $handle );
+                       $group = MessageGroups::getGroup( $groupId );
+
+                       $key = $handle->getKey();
+
+                       $definition = $group->getMessage( $key, 
$group->getSourceLanguage() );
+                       $comparison = $group->getMessage( $key, 
$handle->getCode() );
+               }
+
+               return array(
+                       'title' => $title->getPrefixedDBKey(),
+                       'definition' => $definition,
+                       'translation' => $translation->getValue(),
+                       'comparison' => $comparison,
+                       'metadata' => $translation->getMetadata(),
+               );
        }
 
-       public function needsToken() {
+
+       public function isWriteMode() {
                return true;
        }
 
@@ -94,6 +132,9 @@
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true,
                        ),
+                       'username' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                       ),
                );
        }
 
@@ -103,9 +144,11 @@
                return array(
                        'subaction' => 'Action',
                        'title' => 'Title of the translation unit page',
-                       'value' => 'Translation',
+                       'translation' => 'Translation made by the user',
                        'metadata' => 'Json object',
                        'token' => "A token previously acquired with $action",
+                       'username' => 'Optionally the user whose stash to get. '
+                               . 'Only priviledged users can do this',
                );
        }
 
@@ -116,7 +159,7 @@
        public function getExamples() {
                return array(
                        
"api.php?action=translationstash&subaction=add&title=MediaWiki:Jan/fi&" .
-                               "value=tammikuu&metadata={}",
+                               "translation=tammikuu&metadata={}",
                        "api.php?action=translationstash&subaction=query",
                );
        }
diff --git a/resources/css/ext.translate.special.translatesandbox.css 
b/resources/css/ext.translate.special.translatesandbox.css
index 5ee2558..af5e3f3 100644
--- a/resources/css/ext.translate.special.translatesandbox.css
+++ b/resources/css/ext.translate.special.translatesandbox.css
@@ -163,3 +163,20 @@
 textarea.body {
        height: 300px;
 }
+
+.translations .row {
+       border-bottom: 1px solid #c9c8c8;
+       padding: 10px;
+       font-size: 16px;
+}
+
+.translations .title {
+       font-size: 16px;
+       background-color: #F7F8F8;
+       font-weight: bold;
+}
+
+.translations .info {
+       font-size: 12px;
+       color: #6c6d70;
+}
\ No newline at end of file
diff --git a/resources/js/ext.translate.special.translatesandbox.js 
b/resources/js/ext.translate.special.translatesandbox.js
index c8b220f..02e0b9b 100644
--- a/resources/js/ext.translate.special.translatesandbox.js
+++ b/resources/js/ext.translate.special.translatesandbox.js
@@ -12,7 +12,7 @@
 
                options = $.extend( {}, {
                        action: 'translatesandbox',
-                       token: $( '#token' ).val()
+                       token: $( '#translatesandbox-token' ).val()
                }, options );
 
                api.post( options )
@@ -114,7 +114,8 @@
         * @param {Object} request The request data set from backend on request 
items
         */
        function displayRequestDetails( request ) {
-               var $detailsPane = $( '.details.pane' );
+               var storage,
+                       $detailsPane = $( '.details.pane' );
 
                $detailsPane.empty().append(
                        $( '<div>' )
@@ -161,8 +162,62 @@
                                                        e.preventDefault();
                                                        reminderDialog( request 
);
                                                } )
-                               )
+                               ),
+                       $( '<div>' )
+                               .addClass( 'translations row' )
                );
+
+               // @todo: move higher in the tree
+               storage = new mw.translate.TranslationStashStorage();
+               storage.getUserTranslations( request.username ).done( function 
( translations ) {
+                       var $target = $( '.translations' );
+
+                       // TODO: Header for the translations. not i18ned, need 
UX review
+                       $target.append(
+                               $( '<div>' )
+                                       .addClass( 'row title' )
+                                       .append(
+                                               $( '<div>' )
+                                                       .text( mw.msg( 
'tsb-translations-source' ) )
+                                                       .addClass( 'four 
columns' ),
+                                               $( '<div>' )
+                                                       .text( mw.msg( 
'tsb-translations-user' ) )
+                                                       .addClass( 'four 
columns' ),
+                                               $( '<div>' )
+                                                       .text( mw.msg( 
'tsb-translations-current' ) )
+                                                       .addClass( 'four 
columns' )
+                                       )
+                               );
+                       $.each( translations.translationstash.translations, 
function( index, translation ) {
+                               $target.append(
+                                       $( '<div>' )
+                                               .addClass( 'row' )
+                                               .append(
+                                                       $( '<div>' )
+                                                               .addClass( 
'four columns source' )
+                                                               .text( 
translation.definition ),
+                                                       $( '<div>' )
+                                                               .addClass( 
'four columns translation' )
+                                                               .append(
+                                                                       $( 
'<div>' ).text( translation.translation ),
+                                                                       $( 
'<div>' )
+                                                                               
.addClass( 'info' )
+                                                                               
.text(
+                                                                               
        $.uls.data.getAutonym( translation.title.split(/[\\/ ]+/).pop() )
+                                                                               
)
+                                                               ),
+                                                       $( '<div>' )
+                                                               .addClass( 
'four columns comparison' )
+                                                               .append(
+                                                                       $( 
'<div>' ).text( translation.comparison ),
+                                                                       $( 
'<div>' )
+                                                                               
.addClass( 'info' )
+                                                                               
.text( translation.title )
+                                                               )
+                                               )
+                                       );
+                       } );
+               } );
        }
 
        $( document ).ready( function () {
diff --git a/resources/js/ext.translate.special.translationstash.js 
b/resources/js/ext.translate.special.translationstash.js
index af38054..316a45c 100644
--- a/resources/js/ext.translate.special.translationstash.js
+++ b/resources/js/ext.translate.special.translationstash.js
@@ -138,7 +138,7 @@
 
                                        message.group = messagegroup;
                                        if ( userTranslations[message.title] ) {
-                                               message.translation = 
userTranslations[message.title].value;
+                                               message.translation = 
userTranslations[message.title].translation;
                                                message.properties.status = 
'translated';
                                        }
 
diff --git a/resources/js/ext.translate.translationstashstorage.js 
b/resources/js/ext.translate.translationstashstorage.js
index 3e911d5..ec7922a 100644
--- a/resources/js/ext.translate.translationstashstorage.js
+++ b/resources/js/ext.translate.translationstashstorage.js
@@ -24,8 +24,8 @@
                                action: 'translationstash',
                                subaction: 'add',
                                title: title,
-                               value: translation,
-                               token: $( '#token' ).val()
+                               translation: translation,
+                               token: $( '#translationstash-token' ).val()
                        } );
 
                        return deferred.promise();
@@ -35,12 +35,13 @@
                 * Get the current users translations
                 * @return {jQuery.Promise}
                 */
-               getUserTranslations: function () {
+               getUserTranslations: function ( user ) {
                        var deferred = new mw.Api().get( {
                                action: 'translationstash',
                                subaction: 'query',
                                // TODO: use postWithToken once it is ready in 
core.
-                               token: $( '#token' ).val()
+                               token: $( '#translationstash-token' ).val(),
+                               username: user
                        } );
 
                        return deferred.promise();
diff --git a/specials/SpecialTranslateSandbox.php 
b/specials/SpecialTranslateSandbox.php
index e641cdf..940fed9 100644
--- a/specials/SpecialTranslateSandbox.php
+++ b/specials/SpecialTranslateSandbox.php
@@ -31,8 +31,10 @@
         */
        protected function showPage() {
                // Easier to do this way than in JS
-               $token = Html::hidden( 'token', 
ApiTranslateSandbox::getToken(), array( 'id' => 'token' ) );
-
+               $sandboxToken = Html::hidden( 'token', 
ApiTranslateSandbox::getToken(),
+                       array( 'id' => 'translatesandbox-token' ) );
+               $stashToken = Html::hidden( 'token', 
ApiTranslationStash::getToken(),
+                       array( 'id' => 'translationstash-token' ) );
                $out = $this->getOutput();
                $out->addHtml( <<<HTML
 <div class="grid">
@@ -42,9 +44,9 @@
        </div>
        <div class="row">
                <div class="four columns pane 
requests">{$this->makeList()}</div>
-               <div class="four columns pane details"></div>
+               <div class="eight columns pane details"></div>
        </div>
-       $token
+       $sandboxToken $stashToken
 </div>
 HTML
                );
diff --git a/specials/SpecialTranslationStash.php 
b/specials/SpecialTranslationStash.php
index 9389d8e..b0b609b 100644
--- a/specials/SpecialTranslationStash.php
+++ b/specials/SpecialTranslationStash.php
@@ -74,7 +74,8 @@
        protected function showPage() {
                // Easier to do this way than in JS
                // @todo, but move to JS once it is easier there
-               $token = Html::hidden( 'token', 
ApiTranslationStash::getToken(), array( 'id' => 'token' ) );
+               $token = Html::hidden( 'token', ApiTranslationStash::getToken(),
+                       array( 'id' => 'translationstash-token' ) );
                $out = $this->getOutput();
                $user = $this->getUser();
 

-- 
To view, visit https://gerrit.wikimedia.org/r/88955
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifde218749b4d1de53fab1975e1588f9d3f020a4c
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Santhosh <[email protected]>
Gerrit-Reviewer: Amire80 <[email protected]>
Gerrit-Reviewer: KartikMistry <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to