PluginProbe
Packeta / 2.3.2
Packeta v2.3.2
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
← All changes | src/Packetery/Module/QueryProcessor.php +85 -28 1.2.62.3.2 View file →
@@ -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,92 @@
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>|mixed $clauses Clauses.
69 + * @param \WP_Query|mixed $queryObject WP_Query.
61 70 *
62 - * @return array
71 + * @return array<string, string>|mixed
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( $clauses, $queryObject ) {
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 + if ( ! is_array( $clauses )
79 + || array_filter(
80 + $clauses,
81 + static function ( $value, $key ) {
82 + return is_string( $key ) && is_string( $value );
83 + },
84 + ARRAY_FILTER_USE_BOTH
85 + ) !== $clauses
86 + ) {
87 + WcLogger::logArgumentTypeError( __METHOD__, 'clauses', 'array', $clauses );
88 +
89 + return $clauses;
74 90 }
75 91
76 - return $this->orderRepository->processPostClauses( $clauses, $queryObject, $paramValues );
92 + if ( ! $queryObject instanceof \WP_Query ) {
93 + WcLogger::logArgumentTypeError( __METHOD__, 'queryObject', \WP_Query::class, $queryObject );
94 +
95 + return $clauses;
96 + }
97 +
98 + $isOrderPostQueryCall =
99 + isset( $queryObject->query['post_type'] ) &&
100 + (
101 + $queryObject->query['post_type'] === 'shop_order' ||
102 + ( is_array( $queryObject->query['post_type'] ) && in_array( 'shop_order', $queryObject->query['post_type'], true ) )
103 + );
104 + if ( $isOrderPostQueryCall === false ) {
105 + return $clauses;
106 + }
107 +
108 + return $this->orderRepository->processClauses(
109 + $clauses,
110 + $queryObject,
111 + $this->getParamValues()
112 + );
77 113 }
78 114
79 115 /**
80 - * Gets parameter value from GET data or WP_Query.
116 + * Extends High-Performance order storage grid filters.
81 117 *
82 - * @param \WP_Query $queryObject WP_Query.
83 - * @param string $key Key.
118 + * @param array<string, string> $clauses Clauses.
84 119 *
85 - * @return mixed|null
120 + * @return array<string, string>
86 121 */
87 - private function getParamValue( \WP_Query $queryObject, string $key ) {
88 - $get = $this->httpRequest->getQuery();
89 - if ( isset( $get[ $key ] ) && '' !== (string) $get[ $key ] ) {
90 - return $get[ $key ];
122 + public function processHposClauses( array $clauses ): array {
123 + if ( $this->contextResolver->isOrderGridPage() === false ) {
124 + return $clauses;
91 125 }
92 - if ( isset( $queryObject->query[ $key ] ) && '' !== (string) $queryObject->query[ $key ] ) {
93 - return $queryObject->query[ $key ];
126 +
127 + return $this->orderRepository->processClauses(
128 + $clauses,
129 + null,
130 + $this->getParamValues()
131 + );
132 + }
133 +
134 + /**
135 + * Gets param values.
136 + *
137 + * @return array<string,null>
138 + */
139 + private function getParamValues(): array {
140 + $paramValues = [
141 + 'packetery_carrier_id' => null,
142 + 'packetery_to_submit' => null,
143 + 'packetery_to_print' => null,
144 + 'packetery_order_type' => null,
145 + 'orderby' => null,
146 + 'order' => null,
147 + ];
148 +
149 + foreach ( $paramValues as $key => $value ) {
150 + $paramValues[ $key ] = $this->httpRequest->getQuery( $key );
94 151 }
95 152
96 - return null;
153 + return $paramValues;
97 154 }
98 155 }