PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.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 2 years ago
Router.php
137 lines
1 <?php
2
3 namespace Give\Framework\Routes;
4
5 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
6
7 use function is_callable;
8 use function str_contains;
9
10 class Router
11 {
12 /**
13 * @since 3.0.0
14 * @param string $uri
15 * @param string|callable $action
16 * @param string $method
17 *
18 * @return void
19 */
20 public function get(string $uri, $action, $method = '__invoke')
21 {
22 $this->addRoute('GET', $method, $uri, $action);
23 }
24
25 /**
26 * @since 3.0.0
27 * @param string $uri
28 * @param string|callable $action
29 * @param string $method
30 *
31 * @return void
32 */
33 public function post(string $uri, $action, $method = '__invoke')
34 {
35 $this->addRoute('POST', $method, $uri, $action);
36 }
37
38 /**
39 * @since 3.0.0
40 */
41 protected function isRouteValid(string $route): bool
42 {
43 return isset($_GET['givewp-route']) && $_GET['givewp-route'] === $route;
44 }
45
46 /**
47 * @since 3.0.0
48 */
49 protected function getRequestDataByType(string $type): array
50 {
51 if ($type === 'POST'){
52 return $this->getDataFromPostRequest();
53 }
54
55 return $this->getDataFromGetRequest();
56 }
57
58 /**
59 * @since 3.0.0
60 */
61 protected function getDataFromPostRequest(): array
62 {
63 $requestData = [];
64
65 if (!isset($_SERVER['CONTENT_TYPE'])) {
66 return $requestData;
67 }
68
69 if (str_contains($_SERVER['CONTENT_TYPE'], "application/json")) {
70 $requestData = file_get_contents('php://input');
71 $requestData = json_decode($requestData, true);
72 $requestData = give_clean($requestData);
73 } else {
74 $requestData = array_merge(
75 give_clean($_REQUEST),
76 give_clean($_FILES)
77 );
78 }
79
80 return $requestData;
81 }
82
83 /**
84 * @since 3.0.0
85 */
86 protected function getDataFromGetRequest(): array
87 {
88 return give_clean($_GET);
89 }
90
91 /**
92 * @since 3.0.0
93 *
94 * @param string $type
95 * @param string $method
96 * @param string $uri
97 * @param $action
98 *
99 * @return void
100 */
101 protected function addRoute(string $type, string $method, string $uri, $action)
102 {
103 add_action('template_redirect', function () use ($type, $method, $uri, $action) {
104 if (!$this->isRouteValid($uri)) {
105 // fail silently for use with template_redirect
106 return;
107 }
108
109 $request = $this->getRequestDataByType($type);
110
111 if (is_callable($action)) {
112 return $action($request);
113 }
114
115 if (!method_exists($action, $method)) {
116 throw new InvalidArgumentException("The method $method does not exist on $action");
117 }
118
119 return give($action)->$method($request);
120 });
121 }
122
123 /**
124 * @since 3.0.0
125 */
126 public function url(string $uri, array $args = []): string
127 {
128 return add_query_arg(
129 array_merge(
130 ['givewp-route' => $uri],
131 $args
132 ),
133 home_url()
134 );
135 }
136 }
137