PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.14.2
GiveWP – Donation Plugin and Fundraising Platform v4.14.2
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / Routes / Router.php
give / src / Framework / Routes Last commit date
Route.php 2 years ago RouteListener.php 2 years ago Router.php 1 year ago
Router.php
141 lines
1 <?php
2
3 namespace Give\Framework\Routes;
4
5 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
6 use Give\Helpers\Language;
7
8 use function is_callable;
9 use function str_contains;
10
11 class Router
12 {
13 /**
14 * @since 3.0.0
15 * @param string $uri
16 * @param string|callable $action
17 * @param string $method
18 *
19 * @return void
20 */
21 public function get(string $uri, $action, $method = '__invoke')
22 {
23 $this->addRoute('GET', $method, $uri, $action);
24 }
25
26 /**
27 * @since 3.0.0
28 * @param string $uri
29 * @param string|callable $action
30 * @param string $method
31 *
32 * @return void
33 */
34 public function post(string $uri, $action, $method = '__invoke')
35 {
36 $this->addRoute('POST', $method, $uri, $action);
37 }
38
39 /**
40 * @since 3.0.0
41 */
42 protected function isRouteValid(string $route): bool
43 {
44 return isset($_GET['givewp-route']) && $_GET['givewp-route'] === $route;
45 }
46
47 /**
48 * @since 3.0.0
49 */
50 protected function getRequestDataByType(string $type): array
51 {
52 if ($type === 'POST'){
53 return $this->getDataFromPostRequest();
54 }
55
56 return $this->getDataFromGetRequest();
57 }
58
59 /**
60 * @since 3.0.0
61 */
62 protected function getDataFromPostRequest(): array
63 {
64 $requestData = [];
65
66 if (!isset($_SERVER['CONTENT_TYPE'])) {
67 return $requestData;
68 }
69
70 if (str_contains($_SERVER['CONTENT_TYPE'], "application/json")) {
71 $requestData = file_get_contents('php://input');
72 $requestData = json_decode($requestData, true);
73 $requestData = give_clean($requestData);
74 } else {
75 $requestData = array_merge(
76 give_clean($_REQUEST),
77 give_clean($_FILES)
78 );
79 }
80
81 return $requestData;
82 }
83
84 /**
85 * @since 3.0.0
86 */
87 protected function getDataFromGetRequest(): array
88 {
89 return give_clean($_GET);
90 }
91
92 /**
93 * @since 3.22.0 Add locale support
94 * @since 3.0.0
95 *
96 * @param string $type
97 * @param string $method
98 * @param string $uri
99 * @param $action
100 *
101 * @return void
102 */
103 protected function addRoute(string $type, string $method, string $uri, $action)
104 {
105 add_action('template_redirect', function () use ($type, $method, $uri, $action) {
106 if (!$this->isRouteValid($uri)) {
107 // fail silently for use with template_redirect
108 return;
109 }
110
111 $request = $this->getRequestDataByType($type);
112 $request['locale'] = ! empty($request['locale']) ? $request['locale'] : Language::getLocale();
113
114 if (is_callable($action)) {
115 return $action($request);
116 }
117
118 if (!method_exists($action, $method)) {
119 throw new InvalidArgumentException("The method $method does not exist on $action");
120 }
121
122 return give($action)->$method($request);
123 });
124 }
125
126 /**
127 * @since 4.3.0 Use trailingslashit() method to prevent errors on websites installed in subdirectories
128 * @since 3.0.0
129 */
130 public function url(string $uri, array $args = []): string
131 {
132 return add_query_arg(
133 array_merge(
134 ['givewp-route' => $uri],
135 $args
136 ),
137 trailingslashit(home_url())
138 );
139 }
140 }
141