| @@ -6,12 +6,11 @@ | ||
| 6 | 6 | */ |
| 7 | 7 | |
| 8 | 8 | declare( strict_types=1 ); |
| 9 | 9 | |
| 10 | - | |
| 11 | 10 | namespace Packetery\Module; |
| 12 | 11 | |
| 13 | -use PacketeryNette\Http\Request; | |
| 12 | +use Packetery\Nette\Http\Request; | |
| 14 | 13 | |
| 15 | 14 | /** |
| 16 | 15 | * Class QueryProcessor |
| 17 | 16 | */ |
| @@ -31,16 +30,25 @@ | ||
| 31 | 30 | */ |
| 32 | 31 | private $orderRepository; |
| 33 | 32 | |
| 34 | 33 | /** |
| 34 | + * Context resolver. | |
| 35 | + * | |
| 36 | + * @var ContextResolver | |
| 37 | + */ | |
| 38 | + private $contextResolver; | |
| 39 | + | |
| 40 | + /** | |
| 35 | 41 | * Constructor. |
| 36 | 42 | * |
| 37 | 43 | * @param Request $httpRequest HTTP request. |
| 38 | 44 | * @param Order\Repository $orderRepository Order repository. |
| 45 | + * @param ContextResolver $contextResolver Context resolver. | |
| 39 | 46 | */ |
| 40 | - public function __construct( Request $httpRequest, Order\Repository $orderRepository ) { | |
| 47 | + public function __construct( Request $httpRequest, Order\Repository $orderRepository, ContextResolver $contextResolver ) { | |
| 41 | 48 | $this->httpRequest = $httpRequest; |
| 42 | 49 | $this->orderRepository = $orderRepository; |
| 50 | + $this->contextResolver = $contextResolver; | |
| 43 | 51 | } |
| 44 | 52 | |
| 45 | 53 | /** |
| 46 | 54 | * Registers service. |
| @@ -47,9 +55,10 @@ | ||
| 47 | 55 | * |
| 48 | 56 | * @return void |
| 49 | 57 | */ |
| 50 | 58 | public function register(): void { |
| 51 | - add_filter( 'posts_clauses', [ $this, 'processPostClauses' ], 10, 2 ); | |
| 59 | + add_filter( 'posts_clauses', [ $this, 'processClauses' ], 10, 2 ); | |
| 60 | + add_filter( 'woocommerce_orders_table_query_clauses', [ $this, 'processHposClauses' ] ); | |
| 52 | 61 | } |
| 53 | 62 | |
| 54 | 63 | /** |
| 55 | 64 | * Extends WP_Query to include custom table. |
| @@ -55,44 +64,72 @@ | ||
| 55 | 64 | * Extends WP_Query to include custom table. |
| 56 | 65 | * |
| 57 | 66 | * @link https://wordpress.stackexchange.com/questions/50305/how-to-extend-wp-query-to-include-custom-table-in-query |
| 58 | 67 | * |
| 59 | - * @param array $clauses Clauses. | |
| 60 | - * @param \WP_Query $queryObject WP_Query. | |
| 68 | + * @param array<string, string> $clauses Clauses. | |
| 69 | + * @param \WP_Query $queryObject WP_Query. | |
| 61 | 70 | * |
| 62 | - * @return array | |
| 71 | + * @return array<string, string> | |
| 63 | 72 | */ |
| 64 | - public function processPostClauses( array $clauses, \WP_Query $queryObject ): array { | |
| 65 | - $paramValues = [ | |
| 66 | - 'packetery_carrier_id' => null, | |
| 67 | - 'packetery_to_submit' => null, | |
| 68 | - 'packetery_to_print' => null, | |
| 69 | - 'packetery_order_type' => null, | |
| 70 | - ]; | |
| 73 | + public function processClauses( array $clauses, \WP_Query $queryObject ): array { | |
| 74 | + if ( $this->contextResolver->isOrderGridPage() === false ) { | |
| 75 | + return $clauses; | |
| 76 | + } | |
| 71 | 77 | |
| 72 | - foreach ( $paramValues as $key => $value ) { | |
| 73 | - $paramValues[ $key ] = $this->getParamValue( $queryObject, $key ); | |
| 78 | + $isOrderPostQueryCall = | |
| 79 | + isset( $queryObject->query['post_type'] ) && | |
| 80 | + ( | |
| 81 | + $queryObject->query['post_type'] === 'shop_order' || | |
| 82 | + ( is_array( $queryObject->query['post_type'] ) && in_array( 'shop_order', $queryObject->query['post_type'], true ) ) | |
| 83 | + ); | |
| 84 | + if ( $isOrderPostQueryCall === false ) { | |
| 85 | + return $clauses; | |
| 74 | 86 | } |
| 75 | 87 | |
| 76 | - return $this->orderRepository->processPostClauses( $clauses, $queryObject, $paramValues ); | |
| 88 | + return $this->orderRepository->processClauses( | |
| 89 | + $clauses, | |
| 90 | + $queryObject, | |
| 91 | + $this->getParamValues() | |
| 92 | + ); | |
| 77 | 93 | } |
| 78 | 94 | |
| 79 | 95 | /** |
| 80 | - * Gets parameter value from GET data or WP_Query. | |
| 96 | + * Extends High-Performance order storage grid filters. | |
| 81 | 97 | * |
| 82 | - * @param \WP_Query $queryObject WP_Query. | |
| 83 | - * @param string $key Key. | |
| 98 | + * @param array<string, string> $clauses Clauses. | |
| 84 | 99 | * |
| 85 | - * @return mixed|null | |
| 100 | + * @return array<string, string> | |
| 86 | 101 | */ |
| 87 | - private function getParamValue( \WP_Query $queryObject, $key ) { | |
| 88 | - $get = $this->httpRequest->getQuery(); | |
| 89 | - if ( isset( $get[ $key ] ) && '' !== (string) $get[ $key ] ) { | |
| 90 | - return $get[ $key ]; | |
| 102 | + public function processHposClauses( array $clauses ): array { | |
| 103 | + if ( $this->contextResolver->isOrderGridPage() === false ) { | |
| 104 | + return $clauses; | |
| 91 | 105 | } |
| 92 | - if ( isset( $queryObject->query[ $key ] ) && '' !== (string) $queryObject->query[ $key ] ) { | |
| 93 | - return $queryObject->query[ $key ]; | |
| 106 | + | |
| 107 | + return $this->orderRepository->processClauses( | |
| 108 | + $clauses, | |
| 109 | + null, | |
| 110 | + $this->getParamValues() | |
| 111 | + ); | |
| 112 | + } | |
| 113 | + | |
| 114 | + /** | |
| 115 | + * Gets param values. | |
| 116 | + * | |
| 117 | + * @return array<string,null> | |
| 118 | + */ | |
| 119 | + private function getParamValues(): array { | |
| 120 | + $paramValues = [ | |
| 121 | + 'packetery_carrier_id' => null, | |
| 122 | + 'packetery_to_submit' => null, | |
| 123 | + 'packetery_to_print' => null, | |
| 124 | + 'packetery_order_type' => null, | |
| 125 | + 'orderby' => null, | |
| 126 | + 'order' => null, | |
| 127 | + ]; | |
| 128 | + | |
| 129 | + foreach ( $paramValues as $key => $value ) { | |
| 130 | + $paramValues[ $key ] = $this->httpRequest->getQuery( $key ); | |
| 94 | 131 | } |
| 95 | 132 | |
| 96 | - return null; | |
| 133 | + return $paramValues; | |
| 97 | 134 | } |
| 98 | 135 | } |