PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.35
OttoKit: All-in-One Automation Platform v1.1.35
1.1.36 1.1.35 1.1.34 1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / redirection / actions / redirection-create-role-redirect.php
suretriggers / src / Integrations / redirection / actions Last commit date
redirection-create-login-redirect.php 3 months ago redirection-create-role-redirect.php 3 months ago redirection-create-url-redirect.php 3 months ago redirection-delete-redirect.php 3 months ago redirection-toggle-redirect.php 3 months ago
redirection-create-role-redirect.php
166 lines
1 <?php
2 /**
3 * RedirectionCreateRoleRedirect.
4 * php version 5.6
5 *
6 * @category RedirectionCreateRoleRedirect
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\Redirection\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Integrations\Redirection\Redirection;
19 use SureTriggers\Traits\SingletonLoader;
20
21 /**
22 * RedirectionCreateRoleRedirect
23 *
24 * @category RedirectionCreateRoleRedirect
25 * @package SureTriggers
26 * @author BSF <username@example.com>
27 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
28 * @link https://www.brainstormforce.com/
29 * @since 1.0.0
30 */
31 class RedirectionCreateRoleRedirect extends AutomateAction {
32
33 /**
34 * Integration type.
35 *
36 * @var string
37 */
38 public $integration = 'Redirection';
39
40 /**
41 * Action name.
42 *
43 * @var string
44 */
45 public $action = 'rd_create_role_redirect';
46
47 use SingletonLoader;
48
49 /**
50 * Register a action.
51 *
52 * @param array $actions actions.
53 * @return array
54 */
55 public function register( $actions ) {
56 $actions[ $this->integration ][ $this->action ] = [
57 'label' => __( 'Create Role-Based Redirect', 'suretriggers' ),
58 'action' => $this->action,
59 'function' => [ $this, 'action_listener' ],
60 ];
61 return $actions;
62 }
63
64 /**
65 * Action listener.
66 *
67 * @param int $user_id user_id.
68 * @param int $automation_id automation_id.
69 * @param array $fields fields.
70 * @param array $selected_options selectedOptions.
71 * @throws Exception Throws exception.
72 *
73 * @return array
74 */
75 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
76 if ( ! class_exists( 'Red_Item' ) ) {
77 return [
78 'status' => esc_attr__( 'Error', 'suretriggers' ),
79 'response' => esc_attr__( 'Redirection plugin is not active.', 'suretriggers' ),
80 ];
81 }
82
83 $source_url = isset( $selected_options['source_url'] ) ? sanitize_text_field( $selected_options['source_url'] ) : '';
84 $role = isset( $selected_options['role'] ) ? sanitize_text_field( $selected_options['role'] ) : '';
85 $url_from = isset( $selected_options['url_from'] ) ? sanitize_text_field( $selected_options['url_from'] ) : '';
86 $url_notfrom = isset( $selected_options['url_notfrom'] ) ? sanitize_text_field( $selected_options['url_notfrom'] ) : '';
87 $action_code = isset( $selected_options['action_code'] ) ? absint( $selected_options['action_code'] ) : 302;
88 $title = isset( $selected_options['title'] ) ? sanitize_text_field( $selected_options['title'] ) : '';
89
90 // Block dangerous URL protocols.
91 $dangerous_protocol = '/^\s*(javascript|data|vbscript)\s*:/i';
92 if ( preg_match( $dangerous_protocol, $source_url ) || preg_match( $dangerous_protocol, $url_from ) || preg_match( $dangerous_protocol, $url_notfrom ) ) {
93 return [
94 'status' => esc_attr__( 'Error', 'suretriggers' ),
95 'response' => esc_attr__( 'Invalid URL protocol.', 'suretriggers' ),
96 ];
97 }
98
99 // Validate HTTP status code.
100 $allowed_codes = [ 301, 302, 303, 304, 307, 308, 400, 403, 404, 410 ];
101 if ( ! in_array( $action_code, $allowed_codes, true ) ) {
102 $action_code = 302;
103 }
104
105 if ( empty( $source_url ) ) {
106 return [
107 'status' => esc_attr__( 'Error', 'suretriggers' ),
108 'response' => esc_attr__( 'Source URL is required.', 'suretriggers' ),
109 ];
110 }
111
112 if ( empty( $role ) ) {
113 return [
114 'status' => esc_attr__( 'Error', 'suretriggers' ),
115 'response' => esc_attr__( 'User role or capability is required.', 'suretriggers' ),
116 ];
117 }
118
119 if ( empty( $url_from ) && empty( $url_notfrom ) ) {
120 return [
121 'status' => esc_attr__( 'Error', 'suretriggers' ),
122 'response' => esc_attr__( 'At least one target URL (matched or unmatched role) is required.', 'suretriggers' ),
123 ];
124 }
125
126 $group_id = Redirection::get_default_group_id();
127 if ( false === $group_id ) {
128 return [
129 'status' => esc_attr__( 'Error', 'suretriggers' ),
130 'response' => esc_attr__( 'No redirect groups found. Please create a group in the Redirection plugin first.', 'suretriggers' ),
131 ];
132 }
133
134 $redirect = \Red_Item::create(
135 [
136 'url' => $source_url,
137 'action_data' => [
138 'role' => $role,
139 'url_from' => $url_from,
140 'url_notfrom' => $url_notfrom,
141 ],
142 'action_type' => 'url',
143 'action_code' => $action_code,
144 'match_type' => 'role',
145 'title' => $title,
146 'group_id' => $group_id,
147 ]
148 );
149
150 if ( is_wp_error( $redirect ) ) {
151 return [
152 'status' => esc_attr__( 'Error', 'suretriggers' ),
153 'response' => sanitize_text_field( $redirect->get_error_message() ),
154 ];
155 }
156
157 return [
158 'status' => esc_attr__( 'Success', 'suretriggers' ),
159 'response' => esc_attr__( 'Role-based redirect created successfully.', 'suretriggers' ),
160 'redirect' => Redirection::get_redirect_context( $redirect ),
161 ];
162 }
163 }
164
165 RedirectionCreateRoleRedirect::get_instance();
166