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 
<?php

namespace WPGraphQL\Type\User\Mutation;

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

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

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

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

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

            self::$mutation = Relay::mutationWithClientMutationId( [
                'name' => 'DeleteUser',
                'description' => __( 'Delete a user object', 'wp-graphql' ),
                'inputFields' => [
                    'id' => [
                        'type' => Types::non_null( Types::id() ),
                        'description' => __( 'The ID of the user you want to delete', 'wp-graphql' ),
                    ],
                    'reassignId' => [
                        'type' => Types::id(),
                        'description' => __( 'Reassign posts and links to new User ID.', 'wp-graphql' ),
                    ]
                ],
                'outputFields' => [
                    'deletedId' => [
                        'type' => Types::id(),
                        'description' => __( 'The ID of the user that you just deleted', 'wp-graphql' ),
                        'resolve' => function( $payload ) {
                            $deleted = (object) $payload['userObject'];
                            return ( ! empty( $deleted->ID ) ) ? Relay::toGlobalId( 'user', $deleted->ID ) : null;
                        }
                    ],
                    'user' => [
                        'type' => Types::user(),
                        'description' => __( 'The user object for the user you are trying to delete', 'wp-graphql' ),
                        'resolve' => function( $payload ) {
                            $deleted = (object) $payload['userObject'];
                            return ( ! empty( $deleted ) ) ? $deleted : null;
                        }
                    ]
                ],
                'mutateAndGetPayload' => function( $input ) {

                    /**
                     * Get the ID from the global ID
                     */
                    $id_parts = Relay::fromGlobalId( $input['id'] );

                    if ( ! current_user_can( 'delete_users' ) ) {
                        throw new UserError( __( 'Sorry, you are not allowed to delete users.', 'wp-graphql' ) );
                    }

                    /**
                     * Retrieve the user object before it's deleted
                     */
                    $user_before_delete = get_user_by( 'id', absint( $id_parts['id'] ) );

                    /**
                     * Throw an error if the user we are trying to delete doesn't exist
                     */
                    if ( false === $user_before_delete ) {
                        throw new UserError( __( 'Could not find an existing user to delete', 'wp-graphql' ) );
                    }

                    /**
                     * Get the DB id for the user to reassign posts to from the relay ID.
                     */
                    $reassign_id_parts = ( ! empty( $input['reassignId'] ) ) ? Relay::fromGlobalId( $input['reassignId'] ) : null;
                    $reassign_id = ( ! empty( $reassign_id_parts ) ) ? absint( $reassign_id_parts['id'] ) : null;

                    /**
                     * If the wp_delete_user doesn't exist yet, load the file in which it is
                     * registered so it is available in this context. I think we need to
                     * load this manually here because WordPress only uses this
                     * function on the user edit screen normally.
                     */
                    if ( ! function_exists( 'wp_delete_user' ) ) {
                        require_once( ABSPATH . 'wp-admin/includes/user.php' );
                    }

                    if ( is_multisite() ) {
                        $deleted_user = wpmu_delete_user( absint( $id_parts['id'] ) );
                    } else {
                        $deleted_user = wp_delete_user( absint( $id_parts['id'] ), $reassign_id );
                    }
                    
                    if ( true !== $deleted_user ) {
                        throw new UserError( __( 'Could not delete the user.', 'wp-grapgql' ) );
                    }

                    return [
                        'userObject' => $user_before_delete,
                    ];
                }
            ] );
        }

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

    }

}
API documentation generated by ApiGen