PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 6.3.2
Admin and Site Enhancements (ASE) v6.3.2
9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-common-methods.php
admin-site-enhancements / classes Last commit date
class-activation.php 2 years ago class-admin-interface.php 2 years ago class-common-methods.php 2 years ago class-content-management.php 2 years ago class-custom-code.php 2 years ago class-deactivation.php 2 years ago class-disable-components.php 2 years ago class-login-logout.php 2 years ago class-optimizations.php 2 years ago class-security.php 2 years ago class-settings-fields-render.php 2 years ago class-settings-sanitization.php 2 years ago class-settings-sections-fields.php 2 years ago class-utilities.php 2 years ago
class-common-methods.php
199 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 /**
6 * Class that provides common methods used throughout the plugin
7 *
8 * @since 2.5.0
9 */
10 class Common_Methods
11 {
12 /**
13 * Get IP of the current visitor/user. In use by at least the Limit Login Attempts feature.
14 *
15 * @since 2.5.0
16 */
17 public function get_user_ip_address()
18 {
19
20 if ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
21 $ip_address = sanitize_text_field( $_SERVER['REMOTE_ADDR'] );
22 } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
23 $ip_address = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_FOR'] );
24 } elseif ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
25 $ip_address = sanitize_text_field( $_SERVER['HTTP_CLIENT_IP'] );
26 } else {
27 $ip_address = '0.0.0.0';
28 }
29
30 return $ip_address;
31 }
32
33 /**
34 * Convert number of seconds into hours, minutes, seconds. In use by at least the Limit Login Attempts feature.
35 *
36 * @since 2.5.0
37 */
38 public function seconds_to_period( $seconds, $conversion_type )
39 {
40 $period_start = new \DateTime( '@0' );
41 $period_end = new \DateTime( "@{$seconds}" );
42
43 if ( $conversion_type == 'to-days-hours-minutes-seconds' ) {
44 return $period_start->diff( $period_end )->format( '%a days, %h hours, %i minutes and %s seconds' );
45 } elseif ( $conversion_type == 'to-hours-minutes-seconds' ) {
46 return $period_start->diff( $period_end )->format( '%h hours, %i minutes and %s seconds' );
47 } elseif ( $conversion_type == 'to-minutes-seconds' ) {
48 return $period_start->diff( $period_end )->format( '%i minutes and %s seconds' );
49 } else {
50 return $period_start->diff( $period_end )->format( '%a days, %h hours, %i minutes and %s seconds' );
51 }
52
53 }
54
55 /**
56 * Remove html tags and content inside the tags from a string
57 *
58 * @since 3.0.3
59 */
60 public function strip_html_tags_and_content( $string )
61 {
62 // Strip HTML tags and content inside them. Ref: https://stackoverflow.com/a/39320168
63
64 if ( !is_null( $string ) ) {
65 $string = preg_replace( '@<(\\w+)\\b.*?>.*?</\\1>@si', '', $string );
66 // Strip any remaining HTML or PHP tags
67 $string = strip_tags( $string );
68 }
69
70 return $string;
71 }
72
73 /**
74 * Get menu hidden by toggle
75 *
76 * @since 5.1.0
77 */
78 public function get_menu_hidden_by_toggle()
79 {
80 $menu_hidden_by_toggle = array();
81 $options = get_option( ASENHA_SLUG_U, array() );
82
83 if ( array_key_exists( 'custom_menu_hidden', $options ) ) {
84 $menu_hidden = $options['custom_menu_hidden'];
85 $menu_hidden = explode( ',', $menu_hidden );
86 $menu_hidden_by_toggle = array();
87 foreach ( $menu_hidden as $menu_id ) {
88 $menu_hidden_by_toggle[] = $this->restore_menu_item_id( $menu_id );
89 }
90 }
91
92 return $menu_hidden_by_toggle;
93 }
94
95 /**
96 * Get user capabilities for which the "Show All/Less" menu toggle should be shown for
97 *
98 * @since 5.1.0
99 */
100 public function get_user_capabilities_to_show_menu_toggle_for()
101 {
102 global $menu ;
103 $menu_always_hidden = array();
104 $user_capabilities_menus_are_hidden_for = array();
105 $menu_hidden_by_toggle = $this->get_menu_hidden_by_toggle();
106 // indexed array
107 foreach ( $menu as $menu_key => $menu_info ) {
108 foreach ( $menu_hidden_by_toggle as $hidden_menu_id ) {
109
110 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
111 $menu_item_id = $menu_info[2];
112 } else {
113 $menu_item_id = $menu_info[5];
114 }
115
116 if ( $menu_item_id == $hidden_menu_id ) {
117 $user_capabilities_menus_are_hidden_for[] = $menu_info[1];
118 }
119 }
120 }
121 $user_capabilities_menus_are_hidden_for = array_unique( $user_capabilities_menus_are_hidden_for );
122 return $user_capabilities_menus_are_hidden_for;
123 // indexed array
124 }
125
126 /**
127 * Transform menu item's ID
128 *
129 * @since 5.1.0
130 */
131 public function transform_menu_item_id( $menu_item_id )
132 {
133 // Transform e.g. edit.php?post_type=page ==> edit__php___post_type____page
134 $menu_item_id_transformed = str_replace( array(
135 ".",
136 "?",
137 "=/",
138 "=",
139 "&",
140 "/"
141 ), array(
142 "__",
143 "___",
144 "_______",
145 "____",
146 "_____",
147 "______"
148 ), $menu_item_id );
149 return $menu_item_id_transformed;
150 }
151
152 /**
153 * Transform menu item's ID
154 *
155 * @since 5.1.0
156 */
157 public function restore_menu_item_id( $menu_item_id_transformed )
158 {
159 // Transform e.g. edit__php___post_type____page ==> edit.php?post_type=page
160 $menu_item_id = str_replace( array(
161 "_______",
162 "______",
163 "_____",
164 "____",
165 "___",
166 "__"
167 ), array(
168 "=/",
169 "/",
170 "&",
171 "=",
172 "?",
173 "."
174 ), $menu_item_id_transformed );
175 return $menu_item_id;
176 }
177
178 /**
179 * Sanitize hexedecimal numbers used for colors
180 *
181 * @link https://plugins.trac.wordpress.org/browser/bm-custom-login/trunk/bm-custom-login.php
182 * @param string $color Hex number to sanitize.
183 * @return string
184 */
185 public function sanitize_hex_color( $color )
186 {
187 if ( '' === $color ) {
188 return '';
189 }
190 // Make sure the color starts with a hash.
191 $color = '#' . ltrim( $color, '#' );
192 // 3 or 6 hex digits, or the empty string.
193 if ( preg_match( '|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) {
194 return $color;
195 }
196 return null;
197 }
198
199 }