Skip to content

Commit

Permalink
Merge 797f5d0 into 604c8a0
Browse files Browse the repository at this point in the history
  • Loading branch information
kidunot89 committed Apr 28, 2019
2 parents 604c8a0 + 797f5d0 commit 9b306f5
Show file tree
Hide file tree
Showing 5 changed files with 216 additions and 40 deletions.
190 changes: 190 additions & 0 deletions class-inflect.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
<?php
/**
* Static Inflector class
*
* Author: T. Brian Jones
* Author URI: https://github.com/tbrianjones
*
* @author @tbrianjones
* @link https://gist.github.com/tbrianjones/ba0460cc1d55f357e00b
* @package WPGraphQL\Extensions\WooCommerce
* @since 0.0.4
*/

/**
* Class Inflect
*/
class Inflect {
/**
* Stores plural suffixes.
*
* @var array $plural
*/
private static $plural = array(
'/(quiz)$/i' => '$1zes',
'/^(ox)$/i' => '$1en',
'/([m|l])ouse$/i' => '$1ice',
'/(matr|vert|ind)ix|ex$/i' => '$1ices',
'/(x|ch|ss|sh)$/i' => '$1es',
'/([^aeiouy]|qu)y$/i' => '$1ies',
'/(hive)$/i' => '$1s',
'/(?:([^f])fe|([lr])f)$/i' => '$1$2ves',
'/(shea|lea|loa|thie)f$/i' => '$1ves',
'/sis$/i' => 'ses',
'/([ti])um$/i' => '$1a',
'/(tomat|potat|ech|her|vet)o$/i' => '$1oes',
'/(bu)s$/i' => '$1ses',
'/(alias)$/i' => '$1es',
'/(octop)us$/i' => '$1i',
'/(ax|test)is$/i' => '$1es',
'/(us)$/i' => '$1es',
'/s$/i' => 's',
'/$/' => 's',
);

/**
* Stores singular suffixes
*
* @var array $singular
*/
private static $singular = array(
'/(quiz)zes$/i' => '$1',
'/(matr)ices$/i' => '$1ix',
'/(vert|ind)ices$/i' => '$1ex',
'/^(ox)en$/i' => '$1',
'/(alias)es$/i' => '$1',
'/(octop|vir)i$/i' => '$1us',
'/(cris|ax|test)es$/i' => '$1is',
'/(shoe)s$/i' => '$1',
'/(o)es$/i' => '$1',
'/(bus)es$/i' => '$1',
'/([m|l])ice$/i' => '$1ouse',
'/(x|ch|ss|sh)es$/i' => '$1',
'/(m)ovies$/i' => '$1ovie',
'/(s)eries$/i' => '$1eries',
'/([^aeiouy]|qu)ies$/i' => '$1y',
'/([lr])ves$/i' => '$1f',
'/(tive)s$/i' => '$1',
'/(hive)s$/i' => '$1',
'/(li|wi|kni)ves$/i' => '$1fe',
'/(shea|loa|lea|thie)ves$/i' => '$1f',
'/(^analy)ses$/i' => '$1sis',
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '$1$2sis',
'/([ti])a$/i' => '$1um',
'/(n)ews$/i' => '$1ews',
'/(h|bl)ouses$/i' => '$1ouse',
'/(corpse)s$/i' => '$1',
'/(us)es$/i' => '$1',
'/s$/i' => '',
);

/**
* Stores irregular words
*
* @var array $irregular
*/
private static $irregular = array(
'move' => 'moves',
'foot' => 'feet',
'goose' => 'geese',
'sex' => 'sexes',
'child' => 'children',
'man' => 'men',
'tooth' => 'teeth',
'person' => 'people',
'valve' => 'valves',
);

/**
* Stores words without plural tenses
*
* @var array $uncountable
*/
private static $uncountable = array(
'sheep',
'fish',
'deer',
'series',
'species',
'money',
'rice',
'information',
'equipment',
);

/**
* Return plural tense of provide string
*
* @param string $string - word to be pluralized.
* @return string
*/
public static function pluralize( $string ) {
// save some time in the case that singular and plural are the same.
if ( in_array( strtolower( $string ), self::$uncountable, true ) ) {
return $string;
}

// check for irregular singular forms.
foreach ( self::$irregular as $pattern => $result ) {
$pattern = '/' . $pattern . '$/i';

if ( preg_match( $pattern, $string ) ) {
return preg_replace( $pattern, $result, $string );
}
}

// check for matches using regular expressions.
foreach ( self::$plural as $pattern => $result ) {
if ( preg_match( $pattern, $string ) ) {
return preg_replace( $pattern, $result, $string );
}
}

return $string;
}

/**
* Return singular tense of provided string
*
* @param string $string String to be singularized.
* @return string
*/
public static function singularize( $string ) {
// save some time in the case that singular and plural are the same.
if ( in_array( strtolower( $string ), self::$uncountable, true ) ) {
return $string;
}

// check for irregular plural forms.
foreach ( self::$irregular as $result => $pattern ) {
$pattern = '/' . $pattern . '$/i';

if ( preg_match( $pattern, $string ) ) {
return preg_replace( $pattern, $result, $string );
}
}

// check for matches using regular expressions.
foreach ( self::$singular as $pattern => $result ) {
if ( preg_match( $pattern, $string ) ) {
return preg_replace( $pattern, $result, $string );
}
}

return $string;
}

/**
* Return plural tense if provided count is greater than 1
*
* @param int $count Count to be evaluated.
* @param string $string String potentially pluralized.
*/
public static function pluralize_if( $count, $string ) {
if ( 1 === $count ) {
return '1 $string';
}

return $count . ' ' . self::pluralize( $string );
}
}
1 change: 1 addition & 0 deletions codeception.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ coverage:
include:
- wp-graphql-woocommerce.php
- access-functions.php
- class-inflect.php
- src/*.php
extensions:
enabled:
Expand Down
51 changes: 22 additions & 29 deletions src/class-filters.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

namespace WPGraphQL\Extensions\WooCommerce;

use Inflect;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\Post_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Connection\WC_Terms_Connection_Resolver;
use WPGraphQL\Extensions\WooCommerce\Data\Factory;
Expand Down Expand Up @@ -38,42 +39,17 @@ class Filters {
* Register filters
*/
public static function load() {
add_filter(
'register_taxonomy_args',
array(
'\WPGraphQL\Extensions\WooCommerce\Filters',
'register_taxonomy_args',
),
10,
2
);

add_filter(
'graphql_data_loaders',
array(
'\WPGraphQL\Extensions\WooCommerce\Filters',
'graphql_data_loaders',
),
10,
2
);

add_filter( 'register_taxonomy_args', array( __CLASS__, 'register_taxonomy_args' ), 10, 2 );
add_filter( 'graphql_data_loaders', array( __CLASS__, 'graphql_data_loaders' ), 10, 2 );
add_filter(
'graphql_post_object_connection_query_args',
array(
'\WPGraphQL\Extensions\WooCommerce\Filters',
'graphql_post_object_connection_query_args',
),
array( __CLASS__, 'graphql_post_object_connection_query_args' ),
10,
5
);

add_filter(
'graphql_term_object_connection_query_args',
array(
'\WPGraphQL\Extensions\WooCommerce\Filters',
'graphql_term_object_connection_query_args',
),
array( __CLASS__, 'graphql_term_object_connection_query_args' ),
10,
5
);
Expand Down Expand Up @@ -146,6 +122,23 @@ public static function register_taxonomy_args( $args, $taxonomy ) {
$args['graphql_plural_name'] = 'shippingClasses';
}

// Filter product attributes taxonomies.
$attribute_taxonomies = \wc_get_attribute_taxonomies();
if ( $attribute_taxonomies ) {
$attributes = array_map(
function( $tax ) {
return $tax->attribute_name;
},
$attribute_taxonomies
);
if ( in_array( $taxonomy, $attributes, true ) ) {
$singular_name = graphql_format_field_name( $taxonomy );
$args['show_in_graphql'] = true;
$args['graphql_single_name'] = $singular_name;
$args['graphql_plural_name'] = Inflect::pluralize( $singular_name );
}
}

return $args;
}

Expand Down
1 change: 1 addition & 0 deletions src/class-wp-graphql-woocommerce.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ private function includes() {

// Required non-autoloaded classes.
require_once WPGRAPHQL_WOOCOMMERCE_PLUGIN_DIR . 'access-functions.php';
require_once WPGRAPHQL_WOOCOMMERCE_PLUGIN_DIR . 'class-inflect.php';
}

/**
Expand Down
13 changes: 2 additions & 11 deletions src/type/object/class-product-attribute-type.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,8 @@ public static function register() {
'type' => array( 'list_of' => 'String' ),
'description' => __( 'Attribute options', 'wp-graphql-woocommerce' ),
'resolve' => function ( $attribute ) {
if ( empty( $attribute ) ) {
return null;
}
if ( ! $attribute->is_taxonomy() || ! taxonomy_exists( $attribute->get_name() ) ) {
return null;
}
$options = array();
foreach ( $attribute->get_options() as $option ) {
$options[] = get_term_by( 'id', $option, $attribute->get_name() )->name;
}
return $options;
$slugs = $attribute->get_slugs();
return ! empty( $slugs ) ? $slugs : null;
},
),
'position' => array(
Expand Down

0 comments on commit 9b306f5

Please sign in to comment.