Daniel Kinzler has submitted this change and it was merged.

Change subject: Slightly overhaul SetAliases
......................................................................


Slightly overhaul SetAliases

SetAliases was acting weird in case it was told to do
more than just set, add or remove at once (while only
add and remove together make sense and are valid after
this change). This furthermore fixes an edit summary
bug.

Bug: 46743
Change-Id: Ic265625ed4987d4b7eed294ee8df303972834aa0
---
M repo/Wikibase.i18n.php
M repo/includes/api/SetAliases.php
2 files changed, 51 insertions(+), 32 deletions(-)

Approvals:
  Daniel Kinzler: Verified; Looks good to me, approved
  jenkins-bot: Checked



diff --git a/repo/Wikibase.i18n.php b/repo/Wikibase.i18n.php
index d0619f5..4936778 100644
--- a/repo/Wikibase.i18n.php
+++ b/repo/Wikibase.i18n.php
@@ -209,7 +209,7 @@
        'wikibase-entitydata-text' => 'This page provides a linked data 
interface to entity values. Please provide the entity ID in the URL, using 
subpage syntax.',
 
        // API errors - these messages should not be translated
-       'wikibase-api-aliases-invalid-list' => 'Use either one of "set", "add" 
and "remove" parameters.', # Do not translate
+       'wikibase-api-aliases-invalid-list' => 'Use either "set" or 
"add"/"remove" parameters.', # Do not translate
        'wikibase-api-no-token' => 'No token given.', # Do not translate
        'wikibase-api-no-data' => 'No data to operate upon.', # Do not translate
        'wikibase-api-client-error' => 'The external client site failed.', # Do 
not translate
diff --git a/repo/includes/api/SetAliases.php b/repo/includes/api/SetAliases.php
index 52fe519..91bc26a 100644
--- a/repo/includes/api/SetAliases.php
+++ b/repo/includes/api/SetAliases.php
@@ -22,6 +22,7 @@
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < [email protected] >
  * @author John Erling Blad < [email protected] >
+ * @author Marius Hoch < [email protected] >
  */
 class SetAliases extends ModifyEntity {
 
@@ -31,11 +32,11 @@
        protected function getRequiredPermissions( Entity $entity, array 
$params ) {
                $permissions = parent::getRequiredPermissions( $entity, $params 
);
 
-               if ( isset( $params['add'] ) || isset( $params['set'] ) ) {
+               if ( !empty( $params['add'] ) || isset( $params['set'] ) ) {
                        // add and set has a common permission due to the 
special page SetAliases
                        $permissions[] = 'alias-update';
                }
-               if ( isset( $params['remove'] ) ) {
+               if ( !empty( $params['remove'] ) ) {
                        $permissions[] = 'alias-remove';
                }
                return $permissions;
@@ -47,7 +48,7 @@
        protected function validateParameters( array $params ) {
                parent::validateParameters( $params );
 
-               if ( !( ( isset( $params['add'] ) || isset( $params['remove'] ) 
) XOR isset( $params['set'] ) ) ) {
+               if ( !( ( !empty( $params['add'] ) || !empty( $params['remove'] 
) ) xor isset( $params['set'] ) ) ) {
                        $this->dieUsage( $this->msg( 
'wikibase-api-aliases-invalid-list' )->text(), 'aliases-invalid-list' );
                }
        }
@@ -68,6 +69,7 @@
                $summary = $this->createSummary( $params );
                $summary->setLanguage( $params['language'] );
 
+               // Set the list of aliases to a user given one OR add/ remove 
certain entries
                if ( isset( $params['set'] ) ) {
                        $summary->setAction( 'set' );
                        $summary->addAutoSummaryArgs( $params['set'] );
@@ -78,30 +80,44 @@
                                        $params['set']
                                )
                        );
-               }
 
-               if ( isset( $params['remove'] ) ) {
-                       $summary->setAction( 'remove' );
-                       $summary->addAutoSummaryArgs( $params['remove'] );
-                       $entityContent->getEntity()->removeAliases(
-                               $params['language'],
-                               array_map(
-                                       function( $str ) { return 
Utils::trimToNFC( $str ); },
-                                       $params['remove']
-                               )
-                       );
-               }
+               } else {
 
-               if ( isset( $params['add'] ) ) {
-                       $summary->setAction( 'add' );
-                       $summary->addAutoSummaryArgs( $params['add'] );
-                       $entityContent->getEntity()->addAliases(
-                               $params['language'],
-                               array_map(
-                                       function( $str ) { return 
Utils::trimToNFC( $str ); },
-                                       $params['add']
-                               )
-                       );
+                       if ( !empty( $params['add'] ) ) {
+                               $entityContent->getEntity()->addAliases(
+                                       $params['language'],
+                                       array_map(
+                                               function( $str ) { return 
Utils::trimToNFC( $str ); },
+                                               $params['add']
+                                       )
+                               );
+                       }
+
+                       if ( !empty( $params['remove'] ) ) {
+                               $entityContent->getEntity()->removeAliases(
+                                       $params['language'],
+                                       array_map(
+                                               function( $str ) { return 
Utils::trimToNFC( $str ); },
+                                               $params['remove']
+                                       )
+                               );
+                       }
+
+                       // Set the action to set in case we add and remove 
entries in a single edit.
+                       if ( !empty( $params['add'] ) && !empty( 
$params['remove'] ) ) {
+                               $summary->setAction( 'set' );
+                               // Get the full list of current aliases
+                               $summary->addAutoSummaryArgs(
+                                       
$entityContent->getEntity()->getAliases( $params['language'] )
+                               );
+                       } elseif ( !empty( $params['add'] ) ) {
+                               $summary->setAction( 'add' );
+                               $summary->addAutoSummaryArgs( $params['add'] );
+                       } elseif ( !empty( $params['remove'] ) ) {
+                               $summary->setAction( 'remove' );
+                               $summary->addAutoSummaryArgs( $params['remove'] 
);
+                       }
+
                }
 
                $aliases = $entityContent->getEntity()->getAliases( 
$params['language'] );
@@ -162,9 +178,9 @@
                        parent::getParamDescriptionForSiteLink(),
                        parent::getParamDescriptionForEntity(),
                        array(
-                               'add' => 'List of aliases to add',
-                               'remove' => 'List of aliases to remove',
-                               'set' => 'A list of aliases that will replace 
the current list',
+                               'add' => 'List of aliases to add (can be 
combined with remove)',
+                               'remove' => 'List of aliases to remove (can be 
combined with add)',
+                               'set' => 'A list of aliases that will replace 
the current list (can not be combined with neither add nor remove)',
                                'language' => 'The language of which to set the 
aliases',
                        )
                );
@@ -185,13 +201,16 @@
        protected function getExamples() {
                return array(
                        
'api.php?action=wbsetaliases&language=en&id=q1&set=Foo|Bar'
-                               => 'Set the English labels for the entity with 
id q1 to Foo and Bar',
+                               => 'Set the English aliases for the entity with 
id q1 to Foo and Bar',
 
                        
'api.php?action=wbsetaliases&language=en&id=q1&add=Foo|Bar'
-                               => 'Add Foo and Bar to the list of English 
labels for the entity with id q1',
+                               => 'Add Foo and Bar to the list of English 
aliases for the entity with id q1',
 
                        
'api.php?action=wbsetaliases&language=en&id=q1&remove=Foo|Bar'
-                               => 'Remove Foo and Bar from the list of English 
labels for the entity with id q1',
+                               => 'Remove Foo and Bar from the list of English 
aliases for the entity with id q1',
+
+                       
'api.php?action=wbsetaliases&language=en&id=q1&remove=Foo&add=Bar'
+                               => 'Remove Foo from the list of English aliases 
for the entity with id q1 while adding Bar to it',
                );
        }
 

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic265625ed4987d4b7eed294ee8df303972834aa0
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Hoo man <[email protected]>
Gerrit-Reviewer: Aude <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to