PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 6.5.1
Admin and Site Enhancements (ASE) v6.5.1
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
226 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 use WP_Query ;
6 /**
7 * Class that provides common methods used throughout the plugin
8 *
9 * @since 2.5.0
10 */
11 class Common_Methods
12 {
13 /**
14 * Get IP of the current visitor/user. In use by at least the Limit Login Attempts feature.
15 *
16 * @since 2.5.0
17 */
18 public function get_user_ip_address()
19 {
20
21 if ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
22 $ip_address = sanitize_text_field( $_SERVER['REMOTE_ADDR'] );
23 } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
24 $ip_address = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_FOR'] );
25 } elseif ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
26 $ip_address = sanitize_text_field( $_SERVER['HTTP_CLIENT_IP'] );
27 } else {
28 $ip_address = '0.0.0.0';
29 }
30
31 return $ip_address;
32 }
33
34 /**
35 * Convert number of seconds into hours, minutes, seconds. In use by at least the Limit Login Attempts feature.
36 *
37 * @since 2.5.0
38 */
39 public function seconds_to_period( $seconds, $conversion_type )
40 {
41 $period_start = new \DateTime( '@0' );
42 $period_end = new \DateTime( "@{$seconds}" );
43
44 if ( $conversion_type == 'to-days-hours-minutes-seconds' ) {
45 return $period_start->diff( $period_end )->format( '%a days, %h hours, %i minutes and %s seconds' );
46 } elseif ( $conversion_type == 'to-hours-minutes-seconds' ) {
47 return $period_start->diff( $period_end )->format( '%h hours, %i minutes and %s seconds' );
48 } elseif ( $conversion_type == 'to-minutes-seconds' ) {
49 return $period_start->diff( $period_end )->format( '%i minutes and %s seconds' );
50 } else {
51 return $period_start->diff( $period_end )->format( '%a days, %h hours, %i minutes and %s seconds' );
52 }
53
54 }
55
56 /**
57 * Remove html tags and content inside the tags from a string
58 *
59 * @since 3.0.3
60 */
61 public function strip_html_tags_and_content( $string )
62 {
63 // Strip HTML tags and content inside them. Ref: https://stackoverflow.com/a/39320168
64
65 if ( !is_null( $string ) ) {
66 $string = preg_replace( '@<(\\w+)\\b.*?>.*?</\\1>@si', '', $string );
67 // Strip any remaining HTML or PHP tags
68 $string = strip_tags( $string );
69 }
70
71 return $string;
72 }
73
74 /**
75 * Get menu hidden by toggle
76 *
77 * @since 5.1.0
78 */
79 public function get_menu_hidden_by_toggle()
80 {
81 $menu_hidden_by_toggle = array();
82 $options = get_option( ASENHA_SLUG_U, array() );
83
84 if ( array_key_exists( 'custom_menu_hidden', $options ) ) {
85 $menu_hidden = $options['custom_menu_hidden'];
86 $menu_hidden = explode( ',', $menu_hidden );
87 $menu_hidden_by_toggle = array();
88 foreach ( $menu_hidden as $menu_id ) {
89 $menu_hidden_by_toggle[] = $this->restore_menu_item_id( $menu_id );
90 }
91 }
92
93 return $menu_hidden_by_toggle;
94 }
95
96 /**
97 * Get user capabilities for which the "Show All/Less" menu toggle should be shown for
98 *
99 * @since 5.1.0
100 */
101 public function get_user_capabilities_to_show_menu_toggle_for()
102 {
103 global $menu ;
104 $menu_always_hidden = array();
105 $user_capabilities_menus_are_hidden_for = array();
106 $menu_hidden_by_toggle = $this->get_menu_hidden_by_toggle();
107 // indexed array
108 foreach ( $menu as $menu_key => $menu_info ) {
109 foreach ( $menu_hidden_by_toggle as $hidden_menu_id ) {
110
111 if ( false !== strpos( $menu_info[4], 'wp-menu-separator' ) ) {
112 $menu_item_id = $menu_info[2];
113 } else {
114 $menu_item_id = $menu_info[5];
115 }
116
117 if ( $menu_item_id == $hidden_menu_id ) {
118 $user_capabilities_menus_are_hidden_for[] = $menu_info[1];
119 }
120 }
121 }
122 $user_capabilities_menus_are_hidden_for = array_unique( $user_capabilities_menus_are_hidden_for );
123 return $user_capabilities_menus_are_hidden_for;
124 // indexed array
125 }
126
127 /**
128 * Transform menu item's ID
129 *
130 * @since 5.1.0
131 */
132 public function transform_menu_item_id( $menu_item_id )
133 {
134 // Transform e.g. edit.php?post_type=page ==> edit__php___post_type____page
135 $menu_item_id_transformed = str_replace( array(
136 ".",
137 "?",
138 "=/",
139 "=",
140 "&",
141 "/"
142 ), array(
143 "__",
144 "___",
145 "_______",
146 "____",
147 "_____",
148 "______"
149 ), $menu_item_id );
150 return $menu_item_id_transformed;
151 }
152
153 /**
154 * Transform menu item's ID
155 *
156 * @since 5.1.0
157 */
158 public function restore_menu_item_id( $menu_item_id_transformed )
159 {
160 // Transform e.g. edit__php___post_type____page ==> edit.php?post_type=page
161 $menu_item_id = str_replace( array(
162 "_______",
163 "______",
164 "_____",
165 "____",
166 "___",
167 "__"
168 ), array(
169 "=/",
170 "/",
171 "&",
172 "=",
173 "?",
174 "."
175 ), $menu_item_id_transformed );
176 return $menu_item_id;
177 }
178
179 /**
180 * Sanitize hexedecimal numbers used for colors
181 *
182 * @link https://plugins.trac.wordpress.org/browser/bm-custom-login/trunk/bm-custom-login.php
183 * @param string $color Hex number to sanitize.
184 * @return string
185 */
186 public function sanitize_hex_color( $color )
187 {
188 if ( '' === $color ) {
189 return '';
190 }
191 // Make sure the color starts with a hash.
192 $color = '#' . ltrim( $color, '#' );
193 // 3 or 6 hex digits, or the empty string.
194 if ( preg_match( '|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) {
195 return $color;
196 }
197 return null;
198 }
199
200 /**
201 * Get the post ID of the most recent post in a custom post type
202 *
203 * @since 6.4.1
204 */
205 public function get_most_recent_post_id( $post_type )
206 {
207 $args = array(
208 'post_type' => $post_type,
209 'posts_per_page' => 1,
210 'orderby' => 'date',
211 'order' => 'DESC',
212 );
213 $query = new WP_Query( $args );
214
215 if ( $query->have_posts() ) {
216 $query->the_post();
217 $post_id = get_the_ID();
218 wp_reset_postdata();
219 return $post_id;
220 }
221
222 return 0;
223 // Return 0 if no posts found
224 }
225
226 }