Overview
  • Namespace
  • Class

Namespaces

  • WPGraphQL
    • Data
    • Type
      • Avatar
      • Comment
        • Connection
      • CommentAuthor
      • EditLock
      • Enum
      • MediaItem
        • Mutation
      • Plugin
        • Connection
      • PostObject
        • Connection
        • Mutation
      • PostType
      • Setting
      • Taxonomy
      • TermObject
        • Connection
        • Mutation
      • Theme
        • Connection
      • Union
      • User
        • Connection
        • Mutation
    • Utils

Classes

  • WPGraphQL\AppContext
  • WPGraphQL\Data\Config
  • WPGraphQL\Data\ConnectionResolver
  • WPGraphQL\Data\DataSource
  • WPGraphQL\Data\Loader
  • WPGraphQL\Router
  • WPGraphQL\Type\Avatar\AvatarType
  • WPGraphQL\Type\Comment\CommentQuery
  • WPGraphQL\Type\Comment\CommentType
  • WPGraphQL\Type\Comment\Connection\CommentConnectionArgs
  • WPGraphQL\Type\Comment\Connection\CommentConnectionDefinition
  • WPGraphQL\Type\Comment\Connection\CommentConnectionResolver
  • WPGraphQL\Type\CommentAuthor\CommentAuthorQuery
  • WPGraphQL\Type\CommentAuthor\CommentAuthorType
  • WPGraphQL\Type\EditLock\EditLockType
  • WPGraphQL\Type\Enum\MediaItemStatusEnumType
  • WPGraphQL\Type\Enum\MimeTypeEnumType
  • WPGraphQL\Type\Enum\PostObjectFieldFormatEnumType
  • WPGraphQL\Type\Enum\PostStatusEnumType
  • WPGraphQL\Type\Enum\PostTypeEnumType
  • WPGraphQL\Type\Enum\RelationEnumType
  • WPGraphQL\Type\Enum\TaxonomyEnumType
  • WPGraphQL\Type\MediaItem\MediaItemType
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemCreate
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemDelete
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemMutation
  • WPGraphQL\Type\MediaItem\Mutation\MediaItemUpdate
  • WPGraphQL\Type\Plugin\Connection\PluginConnectionDefinition
  • WPGraphQL\Type\Plugin\Connection\PluginConnectionResolver
  • WPGraphQL\Type\Plugin\PluginQuery
  • WPGraphQL\Type\Plugin\PluginType
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionArgs
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionArgsDateQuery
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionDefinition
  • WPGraphQL\Type\PostObject\Connection\PostObjectConnectionResolver
  • WPGraphQL\Type\PostObject\Mutation\PostObjectCreate
  • WPGraphQL\Type\PostObject\Mutation\PostObjectDelete
  • WPGraphQL\Type\PostObject\Mutation\PostObjectMutation
  • WPGraphQL\Type\PostObject\Mutation\PostObjectUpdate
  • WPGraphQL\Type\PostObject\Mutation\TermObjectDelete
  • WPGraphQL\Type\PostObject\PostObjectQuery
  • WPGraphQL\Type\PostObject\PostObjectType
  • WPGraphQL\Type\PostType\PostTypeType
  • WPGraphQL\Type\RootMutationType
  • WPGraphQL\Type\RootQueryType
  • WPGraphQL\Type\Setting\SettingQuery
  • WPGraphQL\Type\Setting\SettingType
  • WPGraphQL\Type\Taxonomy\TaxonomyType
  • WPGraphQL\Type\TermObject\Connection\TermObjectConnectionArgs
  • WPGraphQL\Type\TermObject\Connection\TermObjectConnectionDefinition
  • WPGraphQL\Type\TermObject\Connection\TermObjectConnectionResolver
  • WPGraphQL\Type\TermObject\Mutation\TermObjectCreate
  • WPGraphQL\Type\TermObject\Mutation\TermObjectMutation
  • WPGraphQL\Type\TermObject\Mutation\TermObjectUpdate
  • WPGraphQL\Type\TermObject\TermObjectQuery
  • WPGraphQL\Type\TermObject\TermObjectType
  • WPGraphQL\Type\Theme\Connection\ThemeConnectionDefinition
  • WPGraphQL\Type\Theme\Connection\ThemeConnectionResolver
  • WPGraphQL\Type\Theme\ThemeType
  • WPGraphQL\Type\Union\CommentAuthorUnionType
  • WPGraphQL\Type\Union\PostObjectUnionType
  • WPGraphQL\Type\Union\TermObjectUnionType
  • WPGraphQL\Type\User\Connection\UserConnectionArgs
  • WPGraphQL\Type\User\Connection\UserConnectionDefinition
  • WPGraphQL\Type\User\Connection\UserConnectionResolver
  • WPGraphQL\Type\User\Mutation\UserCreate
  • WPGraphQL\Type\User\Mutation\UserDelete
  • WPGraphQL\Type\User\Mutation\UserMutation
  • WPGraphQL\Type\User\Mutation\UserUpdate
  • WPGraphQL\Type\User\UserQuery
  • WPGraphQL\Type\User\UserType
  • WPGraphQL\Type\WPEnumType
  • WPGraphQL\Type\WPInputObjectType
  • WPGraphQL\Type\WPObjectType
  • WPGraphQL\Types
  • WPGraphQL\Utils\InstrumentSchema
  • WPGraphQL\WPSchema

Interfaces

  • WPGraphQL\Data\ConnectionResolverInterface
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 
<?php

namespace WPGraphQL\Type\User\Mutation;

use GraphQL\Error\UserError;
use GraphQLRelay\Relay;
use WPGraphQL\Types;

/**
 * Class UserUpdate
 *
 * @package WPGraphQL\Type\User\Mutation
 */
class UserUpdate {

    /**
     * Stores the user update mutation
     *
     * @var array $mutation
     */
    private static $mutation;

    /**
     * Process the user update mutation
     *
     * @return array|null
     * @access public
     */
    public static function mutate() {

        if ( empty( self::$mutation ) ) {

            self::$mutation = Relay::mutationWithClientMutationId( [
                'name' => 'UpdateUser',
                'description' => 'Updates a user object',
                'inputFields' => self::input_fields(),
                'outputFields' => [
                    'user' => [
                        'type' => Types::user(),
                        'description' => __( 'The updated user', 'wp-graphql' ),
                        'resolve' => function( $payload ) {
                            return get_user_by( 'ID', $payload['userId'] );
                        }
                    ]
                ], 'mutateAndGetPayload' => function( $input ) {

                    $id_parts      = ! empty( $input['id'] ) ? Relay::fromGlobalId( $input['id'] ) : null;
                    $existing_user = get_user_by( 'ID', $id_parts['id'] );

                    /**
                     * If there's no existing user, throw an exception
                     */
                    if ( empty( $id_parts['id'] )  || false === $existing_user ) {
                        throw new UserError( $id_parts['id'] );
                    }

                    if ( ! current_user_can( 'edit_users' ) ) {
                        throw new UserError( __( 'You do not have the appropriate capabilities to perform this action', 'wp-graphql' ) );
                    }

                    $user_args = UserMutation::prepare_user_object( $input, 'userCreate' );
                    $user_args['ID'] = absint( $id_parts['id'] );

                    /**
                     * If the query is trying to modify the users role, but doesn't have permissions to do so, throw an exception
                     */
                    if ( ! current_user_can( 'promote_users' ) && isset( $user_args['role'] ) ) {
                        throw new UserError( __( 'You do not have the appropriate capabilities to change this users role.', 'wp-graphql' ) );
                    }

                    /**
                     * Update the user
                     */
                    $user_id = wp_update_user( $user_args );

                    /**
                     * Throw an exception if the post failed to create
                     */
                    if ( is_wp_error( $user_id ) ) {
                        $error_message = $user_id->get_error_message();
                        if ( ! empty( $error_message ) ) {
                            throw new UserError( esc_html( $error_message ) );
                        } else {
                            throw new UserError( __( 'The user failed to update but no error was provided', 'wp-graphql' ) );
                        }
                    }

                    /**
                     * If the $user_id is empty, we should throw an exception
                     */
                    if ( empty( $user_id ) ) {
                        throw new UserError( __( 'The user failed to update', 'wp-graphql' ) );
                    }

                    /**
                     * Update additional user data
                     */
                    UserMutation::update_additional_user_object_data( $user_id, $input, 'update' );

                    /**
                     * Return the new user ID
                     */
                    return [
                        'userId' => $user_id,
                    ];

                }

            ] );
        }

        return ( ! empty( self::$mutation ) ) ? self::$mutation : null;

    }

    /**
     * Add the id as a nonNull field for update mutations
     *
     * @return array
     */
    private static function input_fields() {

        /**
         * Update mutations require an ID to be passed
         */
        return array_merge(
            [
                'id' => [
                    'type'        => Types::non_null( Types::id() ),
                    // translators: the placeholder is the name of the type of post object being updated
                    'description' => __( 'The ID of the user', 'wp-graphql' ),
                ],
            ],
            UserMutation::input_fields()
        );

    }

}
API documentation generated by ApiGen