Skip to content

Commit

Permalink
fixes #59 better way to map graphQL input args to wp queries
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryan Kanner committed Feb 24, 2017
1 parent 2504751 commit c3f9880
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 272 deletions.
120 changes: 26 additions & 94 deletions src/Type/Comment/Connection/CommentConnectionResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use GraphQLRelay\Connection\ArrayConnection;
use GraphQLRelay\Relay;
use WPGraphQL\AppContext;
use WPGraphQL\Types;

/**
* Class CommentConnectionResolver - Connects the comments to other objects
Expand Down Expand Up @@ -241,102 +242,33 @@ public static function resolve( $source, array $args, $context, ResolveInfo $inf
*/
private static function map_input_fields_to_get_terms( $args, $source, $all_args, $context, $info ) {

$arg_mapping = [
'authorEmail' => 'author_email',
'authorUrl' => 'author_url',
'authorIn' => 'author__in',
'authorNotIn' => 'author__not_in',
'commentIn' => 'comment__in',
'commentNotIn' => 'comment__not_in',
'includeUnapproved' => 'includeUnapproved',
'parentIn' => 'parent__in',
'parentNotIn' => 'parent__not_in',
'contentAuthorIn' => 'post_author__in',
'contentAuthorNotIn' => 'post_author__not_in',
'contentId' => 'post_id',
'contentIdIn' => 'post__in',
'contentIdNotIn' => 'post__not_in',
'contentAuthor' => 'post_author',
'contentStatus' => 'post_status',
'contentType' => 'post_type',
'contentName' => 'post_name',
'contentParent' => 'post_parent',
'userId' => 'user_id',
];

/**
* Start a fresh array
* Map and sanitize the input args to the WP_Comment_Query compatible args
*/
$query_args = [];

if ( ! empty( $args['authorEmail'] ) ) {
$query_args['author_email'] = $args['authorEmail'];
}

if ( ! empty( $args['authorUrl'] ) ) {
$query_args['author_url'] = $args['authorUrl'];
}

if ( ! empty( $args['authorIn'] ) ) {
$query_args['author__in'] = $args['authorIn'];
}

if ( ! empty( $args['authorNotIn'] ) ) {
$query_args['author__not_in'] = $args['authorNotIn'];
}

if ( ! empty( $args['commentIn'] ) ) {
$query_args['comment__in'] = $args['commentIn'];
}

if ( ! empty( $args['commentNotIn'] ) ) {
$query_args['comment__not_in'] = $args['commentNotIn'];
}

if ( ! empty( $args['includeUnapproved'] ) ) {
$query_args['include_unapproved'] = $args['includeUnapproved'];
}

if ( ! empty( $args['karma'] ) ) {
$query_args['karma'] = $args['karma'];
}

if ( ! empty( $args['parent'] ) ) {
$query_args['parent'] = $args['parent'];
}

if ( ! empty( $args['parentIn'] ) ) {
$query_args['parent__in'] = $args['parentIn'];
}

if ( ! empty( $args['parentNotIn'] ) ) {
$query_args['parent__not_in'] = $args['parentNotIn'];
}

if ( ! empty( $args['contentAuthorIn'] ) ) {
$query_args['post_author__in'] = $args['contentAuthorIn'];
}

if ( ! empty( $args['contentAuthorNotIn'] ) ) {
$query_args['post_author__not_in'] = $args['contentAuthorNotIn'];
}

if ( ! empty( $args['contentId'] ) ) {
$query_args['post_id'] = $args['contentId'];
}

if ( ! empty( $args['contentIdIn'] ) ) {
$query_args['post__in'] = $args['contentIdIn'];
}

if ( ! empty( $args['contentIdNotIn'] ) ) {
$query_args['post__not_in'] = $args['contentIdNotIn'];
}

if ( ! empty( $args['contentAuthor'] ) ) {
$query_args['post_author'] = $args['contentAuthor'];
}

if ( ! empty( $args['contentStatus'] ) ) {
$query_args['post_status'] = $args['contentStatus'];
}

if ( ! empty( $args['contentType'] ) ) {
$query_args['post_type'] = $args['contentType'];
}

if ( ! empty( $args['contentName'] ) ) {
$query_args['post_name'] = $args['contentName'];
}

if ( ! empty( $args['contentParent'] ) ) {
$query_args['post_parent'] = $args['contentParent'];
}

if ( ! empty( $args['search'] ) ) {
$query_args['search'] = $args['search'];
}

if ( ! empty( $args['userId'] ) ) {
$query_args['user_id'] = $args['userId'];
}
$query_args = Types::map_input( $args, $arg_mapping );

/**
* Filter the input fields
Expand Down
66 changes: 28 additions & 38 deletions src/Type/PostObject/Connection/PostObjectConnectionResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use GraphQLRelay\Connection\ArrayConnection;
use GraphQLRelay\Relay;
use WPGraphQL\AppContext;
use WPGraphQL\Types;

/**
* Class PostObjectConnection - connects posts to other types
Expand Down Expand Up @@ -284,48 +285,37 @@ public static function resolve( $post_type, $source, array $args, $context, Reso
*/
public static function map_input_fields_to_wp_query( $args, $post_type, $source, $all_args, $context, $info ) {

$arg_mapping = array(
'authorName' => 'author_name',
'authorIn' => 'author__in',
'authorNotIn' => 'author__not_in',
'categoryName' => 'category_name',
'categoryAnd' => 'category__and',
'categoryIn' => 'category__in',
$arg_mapping = [
'authorName' => 'author_name',
'authorIn' => 'author__in',
'authorNotIn' => 'author__not_in',
'categoryName' => 'category_name',
'categoryAnd' => 'category__and',
'categoryIn' => 'category__in',
'categoryNotIn' => 'category__not_in',
'tagId' => 'tag_id',
'tagIds' => 'tag__and',
'tagNotIn' => 'tag__not_in',
'tagSlugAnd' => 'tag_slug__and',
'tagSlugIn' => 'tag_slug__in',
'search' => 's',
'id' => 'p',
'parent' => 'post_parent',
'parentIn' => 'post_parent__in',
'parentNotIn' => 'post_parent__not_in',
'in' => 'post__in',
'notIn' => 'post__not_in',
'nameIn' => 'post_name__in',
'hasPassword' => 'has_password',
'password' => 'post_password',
'status' => 'post_status',
'dateQuery' => 'date_query',
);
'tagId' => 'tag_id',
'tagIds' => 'tag__and',
'tagNotIn' => 'tag__not_in',
'tagSlugAnd' => 'tag_slug__and',
'tagSlugIn' => 'tag_slug__in',
'search' => 's',
'id' => 'p',
'parent' => 'post_parent',
'parentIn' => 'post_parent__in',
'parentNotIn' => 'post_parent__not_in',
'in' => 'post__in',
'notIn' => 'post__not_in',
'nameIn' => 'post_name__in',
'hasPassword' => 'has_password',
'password' => 'post_password',
'status' => 'post_status',
'dateQuery' => 'date_query',
];

/**
* Start a fresh array
* Map and sanitize the input args to the WP_Query compatible args
*/
$query_args = [];

/**
* Map the input args to the WP_Query compatible args
*/
foreach ( $args as $arg => $value ) {
if ( array_key_exists( $arg, $arg_mapping ) ) {
$query_args[ $arg_mapping[ $arg ] ] = sanitize_text_field( $value );
} else {
$query_args[ $arg ] = sanitize_text_field( $value );
}
}
$query_args = Types::map_input( $args, $arg_mapping );

/**
* Filter the input fields
Expand Down
98 changes: 16 additions & 82 deletions src/Type/TermObject/Connection/TermObjectConnectionResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use GraphQL\Type\Definition\ResolveInfo;
use GraphQLRelay\Connection\ArrayConnection;
use WPGraphQL\AppContext;
use WPGraphQL\Types;

/**
* Class TermObjectConnectionResolver
Expand Down Expand Up @@ -258,90 +259,23 @@ public static function resolve( $taxonomy, $source, array $args, $context, Resol
*/
public static function map_input_fields_to_get_terms( $args, $taxonomy, $source, $all_args, $context, $info ) {

$arg_mapping = [
'objectIds' => 'object_ids',
'hideEmpty' => 'hide_empty',
'excludeTree' => 'exclude_tree',
'termTaxonomId' => 'term_taxonomy_id',
'nameLike' => 'name__like',
'descriptionLike' => 'description__like',
'padCounts' => 'pad_counts',
'childOf' => 'child_of',
'cacheDomain' => 'cacheDomain',
'updateTermMetaCache' => 'update_term_meta_cache',
];

/**
* Start a fresh array
* Map and sanitize the input args to the WP_Term_Query compatible args
*/
$query_args = [];

if ( ! empty( $args['taxonomy'] ) ) {
$query_args['taxonomy'] = $args['taxonomy'];
}

if ( ! empty( $args['objectIds'] ) ) {
$query_args['object_ids'] = $args['objectIds'];
}

if ( ! empty( $args['orderby'] ) ) {
$query_args['orderby'] = $args['orderby'];
}

if ( ! empty( $args['hideEmpty'] ) ) {
$query_args['hide_empty'] = $args['hideEmpty'];
}

if ( ! empty( $args['include'] ) ) {
$query_args['include'] = $args['include'];
}

if ( ! empty( $args['exclude'] ) ) {
$query_args['exclude'] = $args['exclude'];
}

if ( ! empty( $args['excludeTree'] ) ) {
$query_args['exclude_tree'] = $args['excludeTree'];
}

if ( ! empty( $args['name'] ) ) {
$query_args['name'] = $args['name'];
}

if ( ! empty( $args['slug'] ) ) {
$query_args['slug'] = $args['slug'];
}

if ( ! empty( $args['termTaxonomId'] ) ) {
$query_args['term_taxonomy_id'] = $args['termTaxonomId'];
}

if ( ! empty( $args['hierarchical'] ) ) {
$query_args['hierarchical'] = $args['hierarchical'];
}

if ( ! empty( $args['search'] ) ) {
$query_args['search'] = $args['search'];
}

if ( ! empty( $args['nameLike'] ) ) {
$query_args['name__like'] = $args['nameLike'];
}

if ( ! empty( $args['descriptionLike'] ) ) {
$query_args['description__like'] = $args['descriptionLike'];
}

if ( ! empty( $args['padCounts'] ) ) {
$query_args['pad_counts'] = $args['padCounts'];
}

if ( ! empty( $args['childOf'] ) ) {
$query_args['child_of'] = $args['childOf'];
}

if ( ! empty( $args['parent'] ) ) {
$query_args['parent'] = $args['parent'];
}

if ( ! empty( $args['childless'] ) ) {
$query_args['childless'] = $args['childless'];
}

if ( ! empty( $args['cacheDomain'] ) ) {
$query_args['cache_domain'] = $args['cacheDomain'];
}

if ( ! empty( $args['updateTermMetaCache'] ) ) {
$query_args['update_term_meta_cache'] = $args['updateTermMetaCache'];
}
$query_args = Types::map_input( $args, $arg_mapping );

/**
* Filter the input fields
Expand Down
Loading

0 comments on commit c3f9880

Please sign in to comment.