PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / 3.2.7
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress v3.2.7
4.17.2 4.17.1 4.17.0 4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / ContentProtection / Frontend / PostContent.php
wp-user-avatar / src / ContentProtection / Frontend Last commit date
Checker.php 4 years ago PostContent.php 4 years ago Redirect.php 4 years ago RestrictionShortcode.php 4 years ago index.php 5 years ago
PostContent.php
182 lines
1 <?php
2
3 namespace ProfilePress\Core\ContentProtection\Frontend;
4
5
6 use ProfilePress\Core\ContentProtection\SettingsPage;
7 use ProfilePress\Core\Classes\PROFILEPRESS_sql;
8
9 class PostContent
10 {
11 public function __construct()
12 {
13 add_filter('the_content', [$this, 'the_content'], PHP_INT_MAX - 1);
14 }
15
16 public function the_content($content)
17 {
18 $metas = PROFILEPRESS_sql::get_meta_data_by_key(SettingsPage::META_DATA_KEY);
19
20 if (is_array($metas)) {
21
22 foreach ($metas as $meta) {
23
24 $meta = ppress_var($meta, 'meta_value', []);
25
26 if ( ! in_array(ppress_var($meta, 'is_active', true), ['true', true], true)) continue;
27
28 $access_condition = ppress_var($meta, 'access_condition', []);
29
30 $noaccess_action = ppress_var($access_condition, 'noaccess_action');
31
32 if ('message' != $noaccess_action) continue;
33
34 $who_can_access = ppress_var($access_condition, 'who_can_access', 'everyone');
35
36 $access_roles = ppress_var($access_condition, 'access_roles', []);
37
38 $access_wp_users = ppress_var($access_condition, 'access_wp_users', []);
39
40 $noaccess_message_type = ppress_var($access_condition, 'noaccess_action_message_type', 'global');
41
42 $custom_message = ppress_var($access_condition, 'noaccess_action_message_custom', 'global');
43
44 if (Checker::content_match($meta['content'])) {
45
46 if (Checker::is_blocked($who_can_access, $access_roles, $access_wp_users)) {
47 $content = $this->get_restricted_message($noaccess_message_type, $custom_message);
48 }
49
50 break;
51 };
52 }
53 }
54
55 return $content;
56 }
57
58 public function get_restricted_message($noaccess_message_type = 'global', $custom_message = '')
59 {
60 $message = '';
61
62 $global_message = ppress_settings_by_key(
63 'global_restricted_access_message',
64 esc_html__('You are unauthorized to view this page.', 'wp-user-avatar'),
65 true
66 );
67
68 switch ($noaccess_message_type) {
69 case 'custom':
70 $message = wpautop($custom_message);
71 break;
72 case 'post_excerpt':
73 $message = $this->get_post_excerpt();
74 break;
75 case 'post_excerpt_global':
76 $message = $this->get_post_excerpt() . $this->parse_message($global_message);
77 break;
78 case 'post_excerpt_custom':
79 $message = $this->get_post_excerpt() . $this->parse_message($custom_message);
80 break;
81 }
82
83 if (empty($message)) {
84 $message = $this->parse_message($global_message);
85 }
86
87 return $message;
88 }
89
90 public function parse_message($message)
91 {
92 return do_shortcode(wpautop($message));
93 }
94
95 public function get_post_excerpt()
96 {
97 global $post;
98
99 if ( ! is_object($post)) return false;
100
101 $length = apply_filters('ppress_content_protection_excerpt_length', 100);
102
103 $more = false;
104
105 if (has_excerpt($post->ID)) {
106 $the_excerpt = $post->post_excerpt;
107 } elseif (strstr($post->post_content, '<!--more-->')) {
108 $more = true;
109 $length = strpos($post->post_content, '<!--more-->');
110 $the_excerpt = $post->post_content;
111 } else {
112 $the_excerpt = $post->post_content;
113 }
114
115 $tags = apply_filters('ppress_content_protection_excerpt_tags', '<a><img><em><i><code><ins><del><strong><blockquote><ul><ol><li><h1><h2><h3><h4><h5><h6><b>');
116
117 if ($more) {
118 $the_excerpt = strip_shortcodes(strip_tags(stripslashes(substr($the_excerpt, 0, $length)), $tags));
119 } else {
120 $the_excerpt = strip_shortcodes(strip_tags(stripslashes($the_excerpt), $tags));
121 $the_excerpt = preg_split('/\b/', $the_excerpt, $length * 2 + 1);
122 $excerpt_waste = array_pop($the_excerpt);
123 $the_excerpt = implode($the_excerpt);
124
125 if ( ! empty($the_excerpt)) {
126 $the_excerpt .= apply_filters('ppress_content_protection_excerpt_extra', ' . . .');
127 }
128 }
129
130 $the_excerpt = wpautop($this->close_tags($the_excerpt));
131
132 return apply_filters('ppress_content_protection_excerpt', $the_excerpt, $post, $length, $tags);
133 }
134
135 /**
136 * See https://stackoverflow.com/a/3810341/2648410
137 *
138 * @param $content
139 *
140 * @return false|mixed|string
141 */
142 public function close_tags($content)
143 {
144 if (class_exists('\DOMDocument')) {
145 $doc = new \DOMDocument();
146 $result = $doc->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
147 /** @see https://stackoverflow.com/a/20675396/2648410 */
148 if ($result) utf8_decode($doc->saveHTML($doc->documentElement));
149 } else {
150 /** @see https://stackoverflow.com/a/3810341/2648410 */
151 preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $content, $result);
152 $openedtags = $result[1];
153 preg_match_all('#</([a-z]+)>#iU', $content, $result);
154 $closedtags = $result[1];
155 $len_opened = count($openedtags);
156 if (count($closedtags) == $len_opened) {
157 return $content;
158 }
159 $openedtags = array_reverse($openedtags);
160 for ($i = 0; $i < $len_opened; $i++) {
161 if ( ! in_array($openedtags[$i], $closedtags)) {
162 $content .= '</' . $openedtags[$i] . '>';
163 } else {
164 unset($closedtags[array_search($openedtags[$i], $closedtags)]);
165 }
166 }
167 }
168
169 return $content;
170 }
171
172 public static function get_instance()
173 {
174 static $instance = null;
175
176 if (is_null($instance)) {
177 $instance = new self();
178 }
179
180 return $instance;
181 }
182 }