/**
  * @since 0.3
  *
  * @param User $user
  * @param string[] $add
  * @param string[] $remove
  * @param array $extraParams
  *
  * @return bool
  */
 public function change(User $user, $add = [], $remove = [], array $extraParams = [])
 {
     $result = $this->api->postRequest(new SimpleRequest('query', ['list' => 'users', 'ustoken' => 'userrights', 'ususers' => $user->getName()]));
     $params = ['user' => $user->getName(), 'token' => $result['query']['users'][0]['userrightstoken']];
     if (!empty($add)) {
         $params['add'] = implode('|', $add);
     }
     if (!empty($remove)) {
         $params['remove'] = implode('|', $remove);
     }
     $this->api->postRequest(new SimpleRequest('userrights', array_merge($extraParams, $params)));
     return true;
 }
 /**
  * @dataProvider provideValidConstruction
  */
 public function testValidConstruction($name, $id, $editcount, $registration, $groups, $rights, $gender)
 {
     $user = new User($name, $id, $editcount, $registration, $groups, $rights, $gender);
     $this->assertEquals($name, $user->getName());
     $this->assertEquals($id, $user->getId());
     $this->assertEquals($editcount, $user->getEditcount());
     $this->assertEquals($registration, $user->getRegistration());
     $this->assertEquals($groups['groups'], $user->getGroups());
     $this->assertEquals($groups['implicitgroups'], $user->getGroups('implicitgroups'));
     $this->assertEquals($rights, $user->getRights());
     $this->assertEquals($gender, $user->getGender());
 }
 /**
  * @since 0.3
  *
  * @param User $user
  * @param string[] $add
  * @param string[] $remove
  * @param UserRightsOptions|null $options
  *
  * @return bool
  */
 public function change(User $user, $add = array(), $remove = array(), UserRightsOptions $options = null)
 {
     $result = $this->api->postRequest(new SimpleRequest('query', array('list' => 'users', 'ustoken' => 'userrights', 'ususers' => $user->getName())));
     $params = array('user' => $user->getName(), 'token' => $result['query']['users'][0]['userrightstoken']);
     $reason = $options->getReason();
     if (!empty($reason)) {
         $params['reason'] = $reason;
     }
     if (!empty($add)) {
         $params['add'] = implode('|', $add);
     }
     if (!empty($remove)) {
         $params['remove'] = implode('|', $remove);
     }
     $this->api->postRequest(new SimpleRequest('userrights', $params));
     return true;
 }