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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 
<?php

namespace WPGraphQL\Data;

use GraphQL\Error\UserError;

/**
 * Class Loader
 *
 * This class sets up general patterns for loading data in an optimized way. Used in conjunction with GraphQL Deferred
 * resolvers
 *
 * @package WPGraphQL\Data
 */
class Loader {

    /**
     * Holds the queue of items to be loaded
     *
     * @var array $buffer
     * @access protected
     */
    protected static $buffer = [];

    /**
     * Holds the collection of items that have already been loaded
     *
     * @var array $loaded
     * @access protected
     */
    protected static $loaded = [];

    /**
     * Add an item to the buffer
     *
     * @param string  $type The type of object to add
     * @param integer $id   The ID of the item to be loaded
     *
     * @access public
     */
    public static function addOne( $type, $id ) {

        if ( empty( self::$buffer[ $type ] ) ) {
            self::$buffer[ $type ] = [];
        }

        if ( ! in_array( $id, self::$buffer[ $type ], true ) ) {
            array_push( self::$buffer[ $type ], absint( $id ) );
        }

    }

    /**
     * Add many items to the buffer
     *
     * @param string $type The type of objects to add
     * @param array  $ids  Array of IDs to be added to the buffer
     *
     * @access public
     */
    public static function addMany( $type, array $ids ) {
        if ( ! empty( $ids ) && is_array( $ids ) ) {
            foreach ( $ids as $id ) {
                self::addOne( $type, $id );
            }
        }
    }

    /**
     * Load an individual item from the loaded items
     *
     * @param string $type The type of object to load
     * @param int    $id   The ID of the item to load
     *
     * @return mixed
     * @access public
     */
    public static function loadOne( $type, $id ) {
        $loaded = ! empty( self::$loaded[ $type ][ $id ] ) ? self::$loaded[ $type ][ $id ] : null;

        if ( ! empty( $loaded ) ) {
            return $loaded;
        } else {
            throw new UserError( sprintf( __( 'No %1$s was found with the provided ID', 'wp-graphql' ), $type, $id ) );
        }
    }

    /**
     * Load many items from the already loaded items
     *
     * @param string $type The type of objects to load
     * @param array  $ids  Array of items to load
     *
     * @access public
     */
    public static function loadMany( $type, array $ids ) {
        $load = [];
        if ( ! empty( $ids ) && is_array( $ids ) ) {
            foreach ( $ids as $id ) {
                $load[ $type ][] = self::$loaded[ $id ];
            }
        }
    }

    /**
     * Should be implemented by extending loader
     *
     * @param string $type The type of objects to load
     *
     * @return array
     * @access public
     */
    public static function loadBuffered( $type ) {

        switch ( $type ) {
            case 'user':
                return self::load_users();
                break;
            default:
                return [];
        }

    }

    /**
     * Loads users from the buffer
     *
     * @return mixed
     * @access protected
     */
    protected static function load_users() {

        $type = 'user';

        if ( ! empty( self::$buffer[ $type ] ) ) {
            $query = new \WP_User_Query( [
                'include'     => self::$buffer[ $type ],
                'orderby'     => 'include',
                'count_total' => false,
                'fields'      => 'all_with_meta'
            ] );
            if ( ! empty( $query->get_results() ) && is_array( $query->get_results() ) ) {
                foreach ( $query->get_results() as $user ) {
                    if ( $user instanceof \WP_User ) {
                        self::$loaded[ $type ][ $user->ID ] = $user;
                    }
                }
            }
        }

        self::reset_buffer( $type );

        return ! empty( self::$loaded[ $type ] ) ? self::$loaded[ $type ] : [];
    }

    /**
     * Resets the buffer for a given type
     *
     * @param string $type The buffer type to reset
     *
     * @access protected
     */
    protected static function reset_buffer( $type ) {
        self::$buffer[ $type ] = [];
    }


}
API documentation generated by ApiGen