PluginProbe
Packeta / trunk
Packeta vtrunk
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
packeta / src / Packetery / Module / QueryProcessor.php

QueryProcessor.php in Packeta trunk, at src/Packetery/Module/QueryProcessor.php

156 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class QueryProcessor
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module;
11
12 use Packetery\Nette\Http\Request;
13
14 /**
15 * Class QueryProcessor
16 */
17 class QueryProcessor {
18
19 /**
20 * HTTP request.
21 *
22 * @var Request
23 */
24 private $httpRequest;
25
26 /**
27 * Order repository.
28 *
29 * @var \Packetery\Module\Order\Repository
30 */
31 private $orderRepository;
32
33 /**
34 * Context resolver.
35 *
36 * @var ContextResolver
37 */
38 private $contextResolver;
39
40 /**
41 * Constructor.
42 *
43 * @param Request $httpRequest HTTP request.
44 * @param Order\Repository $orderRepository Order repository.
45 * @param ContextResolver $contextResolver Context resolver.
46 */
47 public function __construct( Request $httpRequest, Order\Repository $orderRepository, ContextResolver $contextResolver ) {
48 $this->httpRequest = $httpRequest;
49 $this->orderRepository = $orderRepository;
50 $this->contextResolver = $contextResolver;
51 }
52
53 /**
54 * Registers service.
55 *
56 * @return void
57 */
58 public function register(): void {
59 add_filter( 'posts_clauses', [ $this, 'processClauses' ], 10, 2 );
60 add_filter( 'woocommerce_orders_table_query_clauses', [ $this, 'processHposClauses' ] );
61 }
62
63 /**
64 * Extends WP_Query to include custom table.
65 *
66 * @link https://wordpress.stackexchange.com/questions/50305/how-to-extend-wp-query-to-include-custom-table-in-query
67 *
68 * @param array<string, string>|mixed $clauses Clauses.
69 * @param \WP_Query|mixed $queryObject WP_Query.
70 *
71 * @return array<string, string>|mixed
72 */
73 public function processClauses( $clauses, $queryObject ) {
74 if ( $this->contextResolver->isOrderGridPage() === false ) {
75 return $clauses;
76 }
77
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;
90 }
91
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 );
113 }
114
115 /**
116 * Extends High-Performance order storage grid filters.
117 *
118 * @param array<string, string> $clauses Clauses.
119 *
120 * @return array<string, string>
121 */
122 public function processHposClauses( array $clauses ): array {
123 if ( $this->contextResolver->isOrderGridPage() === false ) {
124 return $clauses;
125 }
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 );
151 }
152
153 return $paramValues;
154 }
155 }
156