GraphQL: Allow enable/disable users #2644

Remove code from webservices
pull/2818/head
Angel Fernando Quiroz Campos 6 years ago
parent 651781c27f
commit a9ee66700a
  1. 30
      main/webservices/soap_user.php
  2. 157
      main/webservices/webservice_user.php
  3. 50
      src/GraphQlBundle/Map/MutationMap.php
  4. 9
      src/GraphQlBundle/Resources/config/schema.types.graphql

@ -64,36 +64,6 @@ $s->wsdl->addComplexType(
'tns:user_result'
);
$s->register(
'WSUser.DisableUser',
[
'secret_key' => 'xsd:string',
'user_id_field_name' => 'xsd:string',
'user_id_value' => 'xsd:string',
]
);
$s->register(
'WSUser.DisableUsers',
['secret_key' => 'xsd:string', 'users' => 'tns:user_id[]'],
['return' => 'tns:user_result_array']
);
$s->register(
'WSUser.EnableUser',
[
'secret_key' => 'xsd:string',
'user_id_field_name' => 'xsd:string',
'user_id_value' => 'xsd:string',
]
);
$s->register(
'WSUser.EnableUsers',
['secret_key' => 'xsd:string', 'users' => 'tns:user_id[]'],
['return' => 'tns:user_result_array']
);
$s->register(
'WSUser.DeleteUser',
[

@ -11,104 +11,6 @@ require_once __DIR__.'/webservice.php';
*/
class WSUser extends WS
{
/**
* Disables a user.
*
* @param string API secret key
* @param string User id field name. Use "chamilo_user_id" as the field name if you want to use the internal user_id
* @param string User id value
*/
public function DisableUser(
$secret_key,
$user_id_field_name,
$user_id_value
) {
$verifKey = $this->verifyKey($secret_key);
if ($verifKey instanceof WSError) {
// Let the implementation handle it
$this->handleError($verifKey);
} else {
$result = $this->changeUserActiveState(
$user_id_field_name,
$user_id_value,
0
);
if ($result instanceof WSError) {
$this->handleError($result);
}
}
}
/**
* Disables multiple users.
*
* @param string API secret key
* @param array Array of users with elements of the form
* array('user_id_field_name' => 'name_of_field', 'user_id_value' => 'value')
*
* @return array Array with elements like
* array('user_id_value' => 'value', 'result' => array('code' => 0, 'message' => 'Operation was successful')).
* Note that if the result array contains a code different
* than 0, an error occured
*/
public function DisableUsers($secret_key, $users)
{
$verifKey = $this->verifyKey($secret_key);
if ($verifKey instanceof WSError) {
// Let the implementation handle it
$this->handleError($verifKey);
} else {
return $this->changeUsersActiveState($users, 0);
}
}
/**
* Enables a user.
*
* @param string API secret key
* @param string User id field name. Use "chamilo_user_id" as the field name if you want to use the internal user_id
* @param string User id value
*/
public function EnableUser($secret_key, $user_id_field_name, $user_id_value)
{
$verifKey = $this->verifyKey($secret_key);
if ($verifKey instanceof WSError) {
$this->handleError($verifKey);
} else {
$result = $this->changeUserActiveState(
$user_id_field_name,
$user_id_value,
1
);
if ($result instanceof WSError) {
$this->handleError($result);
}
}
}
/**
* Enables multiple users.
*
* @param string API secret key
* @param array Array of users with elements of the form
* array('user_id_field_name' => 'name_of_field', 'user_id_value' => 'value')
*
* @return array Array with elements like
* array('user_id_value' => 'value', 'result' => array('code' => 0, 'message' => 'Operation was successful')).
* Note that if the result array contains a code different
* than 0, an error occured
*/
public function EnableUsers($secret_key, $users)
{
$verifKey = $this->verifyKey($secret_key);
if ($verifKey instanceof WSError) {
// Let the implementation handle it
$this->handleError($verifKey);
} else {
return $this->changeUsersActiveState($users, 1);
}
}
/**
* Deletes a user.
*
@ -414,65 +316,6 @@ class WSUser extends WS
}
}
/**
* Enables or disables a user.
*
* @param string User id field name
* @param string User id value
* @param int Set to 1 to enable and to 0 to disable
*
* @return int
*/
protected function changeUserActiveState(
$user_id_field_name,
$user_id_value,
$state
) {
$user_id = $this->getUserId($user_id_field_name, $user_id_value);
if ($user_id instanceof WSError) {
return $user_id;
} else {
if ($state == 0) {
UserManager::disable($user_id);
} else {
if ($state == 1) {
UserManager::enable($user_id);
}
}
}
}
/**
* Enables or disables multiple users.
*
* @param array Users
* @param int Set to 1 to enable and to 0 to disable
*
* @return array Array of results
*/
protected function changeUsersActiveState($users, $state)
{
$results = [];
foreach ($users as $user) {
$result_tmp = [];
$result_op = $this->changeUserActiveState(
$user['user_id_field_name'],
$user['user_id_value'],
$state
);
$result_tmp['user_id_value'] = $user['user_id_value'];
if ($result_op instanceof WSError) {
// Return the error in the results
$result_tmp['result'] = $result_op->toArray();
} else {
$result_tmp['result'] = $this->getSuccessfulResult();
}
$results[] = $result_tmp;
}
return $results;
}
/**
* Deletes a user (helper method).
*

@ -533,4 +533,54 @@ class MutationMap extends ResolverMap implements ContainerAwareInterface
return $this->em->find('ChamiloCourseBundle:CNotebook', $noteId);
}
/**
* @param Argument $args
*
* @return bool
*/
protected function resolveDisableUser(Argument $args): bool
{
$this->changeUserActiveState($args['userId']['name'], $args['userId']['value'], false);
return true;
}
/**
* @param Argument $args
*
* @return bool
*/
protected function resolveEnableUser(Argument $args): bool
{
$this->changeUserActiveState($args['userId']['name'], $args['userId']['value'], true);
return true;
}
/**
* @param string $userIdName
* @param string $userIdValue
* @param bool $setActive
*/
private function changeUserActiveState($userIdName, $userIdValue, $setActive)
{
$this->checkAuthorization();
if (false === $this->securityChecker->isGranted('ROLE_ADMIN')) {
throw new UserError($this->translator->trans('Not allowed'));
}
$userId = \UserManager::get_user_id_from_original_id($userIdName, $userIdValue);
if (empty($userId)) {
throw new UserError($this->translator->trans('User not found'));
}
if ($setActive) {
\UserManager::enable($userId);
} else {
\UserManager::disable($userId);
}
}
}

@ -52,6 +52,10 @@ type Mutation {
user: Int!
course: Int!
): Boolean
disableUser(userId: UserIdInput!): Boolean
enableUser(userId: UserIdInput!): Boolean
}
# Objects
@ -445,6 +449,11 @@ input AddCourseNoteInput {
text: String!
}
input UserIdInput {
name: String!
value: String!
}
# Scalars
scalar DateTime

Loading…
Cancel
Save