Skip to content

Commit

Permalink
Merge 33b09e3 into 604c8a0
Browse files Browse the repository at this point in the history
  • Loading branch information
kidunot89 committed Apr 30, 2019
2 parents 604c8a0 + 33b09e3 commit 80b8c28
Show file tree
Hide file tree
Showing 30 changed files with 693 additions and 138 deletions.
2 changes: 1 addition & 1 deletion access-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/**
* This file contains access functions for various class methods
*
* @package WPGraphQL\Extensions\WooCommerce
* @package WPGraphQL\Extensions\WooCommerce
* @since 0.0.1
*/

Expand Down
4 changes: 4 additions & 0 deletions src/class-actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
use WPGraphQL\Extensions\WooCommerce\Type\WPObject\Tax_Rate_Type;
use WPGraphQL\Extensions\WooCommerce\Type\WPObject\Shipping_Method_Type;
use WPGraphQL\Extensions\WooCommerce\Type\WPObject\Cart_Type;
use WPGraphQL\Extensions\WooCommerce\Type\WPObject\Variation_Attribute_Type;
use WPGraphQL\Extensions\WooCommerce\Connection\Posts;
use WPGraphQL\Extensions\WooCommerce\Connection\WC_Terms;
use WPGraphQL\Extensions\WooCommerce\Connection\Coupons;
Expand All @@ -47,6 +48,7 @@
use WPGraphQL\Extensions\WooCommerce\Connection\Order_Items;
use WPGraphQL\Extensions\WooCommerce\Connection\Refunds;
use WPGraphQL\Extensions\WooCommerce\Connection\Product_Attributes;
use WPGraphQL\Extensions\WooCommerce\Connection\Variation_Attributes;
use WPGraphQL\Extensions\WooCommerce\Connection\Product_Gallery;
use WPGraphQL\Extensions\WooCommerce\Connection\Customers;
use WPGraphQL\Extensions\WooCommerce\Connection\Tax_Rates;
Expand Down Expand Up @@ -108,6 +110,7 @@ public static function graphql_register_types() {
Tax_Rate_Type::register();
Shipping_Method_Type::register();
Cart_Type::register();
Variation_Attribute_Type::register();

// Connections.
Posts::register_connections();
Expand All @@ -118,6 +121,7 @@ public static function graphql_register_types() {
Order_Items::register_connections();
Refunds::register_connections();
Product_Attributes::register_connections();
Variation_Attributes::register_connections();
Customers::register_connections();
Tax_Rates::register_connections();
Shipping_Methods::register_connections();
Expand Down
11 changes: 0 additions & 11 deletions src/connection/class-product-attributes.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,6 @@ class Product_Attributes {
public static function register_connections() {
// From Product.
register_graphql_connection( self::get_connection_config() );
register_graphql_connection( self::get_connection_config( array( 'fromFieldName' => 'defaultAttributes' ) ) );
// From ProductVariation.
register_graphql_connection( self::get_connection_config( array( 'fromType' => 'ProductVariation' ) ) );
register_graphql_connection(
self::get_connection_config(
array(
'fromType' => 'ProductVariation',
'fromFieldName' => 'defaultAttributes',
)
)
);
}

/**
Expand Down
58 changes: 58 additions & 0 deletions src/connection/class-variation-attributes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
/**
* Connection type - VariationAttributes
*
* Registers connections to VariationAttribute
*
* @package WPGraphQL\Extensions\WooCommerce\Connection
* @since 0.0.4
*/

namespace WPGraphQL\Extensions\WooCommerce\Connection;

use WPGraphQL\Extensions\WooCommerce\Data\Factory;

/**
* Class Product_Attributes
*/
class Variation_Attributes {
/**
* Registers the various connections from other Types to VariationAttribute
*/
public static function register_connections() {
// From ProductVariation.
register_graphql_connection( self::get_connection_config() );
// From Product.
register_graphql_connection(
self::get_connection_config(
array(
'fromType' => 'Product',
'fromFieldName' => 'defaultAttributes',
)
)
);
}

/**
* Given an array of $args, this returns the connection config, merging the provided args
* with the defaults
*
* @access public
* @param array $args - Connection configuration.
*
* @return array
*/
public static function get_connection_config( $args = array() ) {
$defaults = array(
'fromType' => 'ProductVariation',
'toType' => 'VariationAttribute',
'fromFieldName' => 'attributes',
'connectionArgs' => array(),
'resolve' => function ( $root, $args, $context, $info ) {
return Factory::resolve_variation_attribute_connection( $root, $args, $context, $info );
},
);

return array_merge( $defaults, $args );
}
}
17 changes: 17 additions & 0 deletions src/data/class-factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Order_Item_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Product_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Product_Attribute_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Variation_Attribute_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Product_Download_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Refund_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Tax_Rate_Connection_Resolver;
Expand Down Expand Up @@ -260,6 +261,22 @@ public static function resolve_product_attribute_connection( $source, array $arg
return $resolver->resolve( $source, $args, $context, $info );
}

/**
* Resolves VariationAttribute connections
*
* @param mixed $source - Data resolver for connection source.
* @param array $args - Connection arguments.
* @param AppContext $context - AppContext object.
* @param ResolveInfo $info - ResolveInfo object.
*
* @return array
* @access public
*/
public static function resolve_variation_attribute_connection( $source, array $args, AppContext $context, ResolveInfo $info ) {
$resolver = new Variation_Attribute_Connection_Resolver();
return $resolver->resolve( $source, $args, $context, $info );
}

/**
* Resolves ProductDownload connections
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php
/**
* ConnectionResolver - Variation_Attribute_Connection_Resolver
*
* Resolves connections to VariationAttributes
*
* @package WPGraphQL\Extensions\WooCommerce\Data\Connection
* @since 0.0.4
*/

namespace WPGraphQL\Extensions\WooCommerce\Data\Connection;

use GraphQL\Type\Definition\ResolveInfo;
use GraphQLRelay\Relay;
use WPGraphQL\AppContext;
use WPGraphQL\Extensions\WooCommerce\Model\Product;

/**
* Class Variation_Attribute_Connection_Resolver
*/
class Variation_Attribute_Connection_Resolver {

/**
* Returns data array from WC_Product_Attribute ArrayAccess object.
*
* @param WC_Product_Attribute $attrs - WC_Product_Attribute object.
* @return array
*/
public function to_data_array( $attrs = array() ) {
$attributes = array();
if ( array( '0' ) !== $attrs ) {
foreach ( $attrs as $name => $value ) {
$term = \get_term_by( 'slug', $value, $name );
if ( empty( $term ) ) {
$attributes[] = array(
'id' => 0,
'name' => $name,
'value' => $value,
);
} else {
$attributes[] = array(
'id' => $term->term_id,
'name' => $term->taxonomy,
'value' => $term->name,
);
}
}
}

return $attributes;
}

/**
* Creates connection
*
* @param mixed $source - Connection source Model instance.
* @param array $args - Connection arguments.
* @param AppContext $context - AppContext object.
* @param ResolveInfo $info - ResolveInfo object.
*/
public function resolve( $source, array $args, AppContext $context, ResolveInfo $info ) {
if ( is_a( $source, Product::class ) ) {
$attributes = $this->to_data_array( $source->default_attributes );
} else {
$attributes = $this->to_data_array( $source->attributes );
}

$connection = Relay::connectionFromArray( $attributes, $args );
$nodes = array();
if ( ! empty( $connection['edges'] ) && is_array( $connection['edges'] ) ) {
foreach ( $connection['edges'] as $edge ) {
$nodes[] = ! empty( $edge['node'] ) ? $edge['node'] : null;
}
}
$connection['nodes'] = ! empty( $nodes ) ? $nodes : null;
return ! empty( $attributes ) ? $connection : null;
}
}
2 changes: 1 addition & 1 deletion src/model/class-customer.php
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ protected function init() {
return ( ! empty( $this->data->get_shipping() ) ) ? $this->data->get_shipping() : null;
},
'isPayingCustomer' => function() {
return ( ! empty( $this->data->get_is_paying_customer() ) ) ? $this->data->get_is_paying_customer() : null;
return ( ! is_null( $this->data->get_is_paying_customer() ) ) ? $this->data->get_is_paying_customer() : null;
},
/**
* Connection resolvers fields
Expand Down

0 comments on commit 80b8c28

Please sign in to comment.