Passed
Push — main ( 72ff1c...f45cd4 )
by Paul
05:18
created

glsr_remove_optimizepress()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 16
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 13
c 1
b 1
f 0
dl 0
loc 16
rs 9.8333
cc 3
nc 3
nop 0
1
<?php
2
3
use GeminiLabs\SiteReviews\Application;
4
use GeminiLabs\SiteReviews\Compatibility;
5
use GeminiLabs\SiteReviews\Modules\Html\Builder;
6
use GeminiLabs\SiteReviews\Modules\Paginate;
7
8
defined('ABSPATH') || exit;
9
10
/**
11
 * Bootstrap pagination
12
 * @return array
13
 * @filter site-reviews/paginate_link
14
 */
15
function glsr_filter_bootstrap_pagination_link(array $link, array $args, Builder $builder) {
16
    $args['class'] = 'page-link';
17
    if ('current' === $link['type']) {
18
        $class = 'page-item active';
19
        $text = $builder->span($args);
20
    }
21
    if ('dots' === $link['type']) {
22
        $text = $builder->span($args);
23
    }
24
    $link['link'] = $builder->li([
25
        'text' => $text ?? $builder->a($args),
26
        'class' => $class ?? 'page-item',
27
    ]);
28
    return $link;
29
}
30
add_filter('site-reviews/paginate_links', function (string $links, array $args) {
31
    if ('bootstrap' !== glsr_get_option('general.style')) {
32
        return $links;
33
    }
34
    $args = wp_parse_args(['mid_size' => 1], $args);
35
    add_filter('site-reviews/paginate_link', 'glsr_filter_bootstrap_pagination_link', 10, 3);
36
    $links = (new Paginate($args))->links();
37
    remove_filter('site-reviews/paginate_link', 'glsr_filter_bootstrap_pagination_link');
38
    $links = wp_list_pluck($links, 'link');
39
    return implode("\n", $links);
40
}, 10, 2);
41
42
/**
43
 * @param array $editors
44
 * @param string $postType
45
 * @return array
46
 * @see https://wordpress.org/plugins/classic-editor/
47
 */
48
add_filter('classic_editor_enabled_editors_for_post_type', function ($editors, $postType) {
49
    return glsr()->post_type == $postType
50
        ? ['block_editor' => false, 'classic_editor' => false]
51
        : $editors;
52
}, 10, 2);
53
54
/**
55
 * Add human-readable capability names
56
 * @return void
57
 * @see https://wordpress.org/plugins/members/
58
 */
59
add_action('members_register_caps', function () {
60
    $labels = [
61
        'create_site-reviews' => _x('Create Reviews', 'admin-text', 'site-reviews'),
62
        'delete_others_site-reviews' => _x("Delete Others' Reviews", 'admin-text', 'site-reviews'),
63
        'delete_site-reviews' => _x('Delete Reviews', 'admin-text', 'site-reviews'),
64
        'delete_private_site-reviews' => _x('Delete Private Reviews', 'admin-text', 'site-reviews'),
65
        'delete_published_site-reviews' => _x('Delete Approved Reviews', 'admin-text', 'site-reviews'),
66
        'edit_others_site-reviews' => _x("Edit Others' Reviews", 'admin-text', 'site-reviews'),
67
        'edit_site-reviews' => _x('Edit Reviews', 'admin-text', 'site-reviews'),
68
        'edit_private_site-reviews' => _x('Edit Private Reviews', 'admin-text', 'site-reviews'),
69
        'edit_published_site-reviews' => _x('Edit Approved Reviews', 'admin-text', 'site-reviews'),
70
        'publish_site-reviews' => _x('Approve Reviews', 'admin-text', 'site-reviews'),
71
        'read_private_site-reviews' => _x('Read Private Reviews', 'admin-text', 'site-reviews'),
72
        'respond_to_site-reviews' => _x('Respond To Reviews', 'admin-text', 'site-reviews'),
73
        'respond_to_others_site-reviews' => _x("Respond To Others' Reviews", 'admin-text', 'site-reviews'),
74
        'assign_site-review_terms' => _x('Assign Review Categories', 'admin-text', 'site-reviews'),
75
        'delete_site-review_terms' => _x('Delete Review Categories', 'admin-text', 'site-reviews'),
76
        'edit_site-review_terms' => _x('Edit Review Categories', 'admin-text', 'site-reviews'),
77
        'manage_site-review_terms' => _x('Manage Review Categories', 'admin-text', 'site-reviews'),
78
    ];
79
    array_walk($labels, function ($label, $capability) {
80
        members_register_cap($capability, ['label' => $label]);
81
    });
82
});
83
84
/**
85
 * Remove Oxygen Builder metabox from reviews
86
 * @see https://oxygenbuilder.com
87
 */
88
add_action('plugins_loaded', function () {
89
    global $ct_ignore_post_types;
90
    if (!empty($ct_ignore_post_types) && is_array($ct_ignore_post_types)) {
91
        $ct_ignore_post_types[] = Application::POST_TYPE;
92
        add_filter('pre_option_oxygen_vsb_ignore_post_type_'.Application::POST_TYPE, '__return_true');
93
    }
94
});
95
96
/**
97
 * Exclude the CAPTCHA scripts from being defered
98
 * @param array $scriptHandles
99
 * @return array
100
 * @see https://wordpress.org/plugins/speed-booster-pack/
101
 */
102
add_filter('sbp_exclude_defer_scripts', function ($scriptHandles) {
103
    $scriptHandles[] = glsr()->id.'/hcaptcha';
104
    $scriptHandles[] = glsr()->id.'/friendlycaptcha-module';
105
    $scriptHandles[] = glsr()->id.'/friendlycaptcha-nomodule';
106
    $scriptHandles[] = glsr()->id.'/google-recaptcha';
107
    $scriptHandles[] = glsr()->id.'/turnstile';
108
    return array_keys(array_flip($scriptHandles));
109
});
110
111
/**
112
 * Fix to display all reviews when sorting by rank
113
 * @param array $query
114
 * @return array
115
 * @see https://searchandfilter.com/
116
 */
117
add_filter('sf_edit_query_args', function ($query) {
118
    if (!empty($query['meta_key']) && '_glsr_ranking' == $query['meta_key']) {
119
        unset($query['meta_key']);
120
        $query['meta_query'] = [
121
            'relation' => 'OR',
122
            ['key' => '_glsr_ranking', 'compare' => 'NOT EXISTS'], // this comes first!
123
            ['key' => '_glsr_ranking', 'compare' => 'EXISTS'],
124
        ];
125
    }
126
    return $query;
127
}, 20);
128
129
/**
130
 * Prevent SG Optimizer from breaking the Site Reviews javascript file
131
 * @param array $excluded
132
 * @return array
133
 * @see https://wordpress.org/plugins/sg-cachepress/
134
 */
135
add_filter('sgo_js_minify_exclude', function ($excluded) {
136
    if (is_array($excluded) && !in_array(glsr()->id, $excluded)) {
137
        $excluded[] = glsr()->id;
138
    }
139
    return $excluded;
140
});
141
142
/**
143
 * Load the Ninja Forms (v3) CSS if the plugin style is selected.
144
 * @see https://ninjaforms.com/
145
 */
146
function glsr_is_ninja_forms_compatible() {
147
    return class_exists('Ninja_Forms')
148
        && class_exists('NF_Display_Render')
149
        && method_exists('Ninja_Forms', 'get_setting')
150
        && method_exists('NF_Display_Render', 'enqueue_styles_display');
151
}
152
add_action('enqueue_block_editor_assets', function () {
153
    if ('ninja_forms' === glsr_get_option('general.style') && glsr_is_ninja_forms_compatible()) {
154
        NF_Display_Render::enqueue_styles_display(Ninja_Forms::$url.'assets/css/');
155
    }
156
});
157
add_filter('site-reviews/config/styles/ninja_forms', function ($config) {
158
    if (glsr_is_ninja_forms_compatible()) {
159
        $formClass = 'nf-style-'.Ninja_Forms()->get_setting('opinionated_styles');
160
        $config = glsr_set($config, 'classes.form', $formClass);
161
    }
162
    return $config;
163
});
164
add_action('site-reviews/customize/ninja_forms', function () {
165
    if (glsr_is_ninja_forms_compatible()) {
166
        NF_Display_Render::enqueue_styles_display(Ninja_Forms::$url.'assets/css/');
167
    }
168
});
169
170
/**
171
 * Load the WPForms stylesheet when using the WPForms plugin style
172
 * @param string $template
173
 * @return string
174
 * @see https://wordpress.org/plugins/wpforms-lite/
175
 */
176
add_filter('site-reviews/build/template/reviews-form', function ($template) {
177
    if ('wpforms' === glsr_get_option('general.style')) {
178
        add_filter('wpforms_frontend_missing_assets_error_js_disable', '__return_true', PHP_INT_MAX);
179
        add_filter('wpforms_global_assets', '__return_true');
180
    }
181
    return $template;
182
});
183
184
/**
185
 * Remove the "Launch Thrive Architect" button from reviews
186
 * @return array
187
 * @see https://thrivethemes.com/architect/
188
 */
189
add_filter('tcb_post_types', function ($blacklist) {
190
    $blacklist[] = glsr()->post_type;
191
    return $blacklist;
192
});
193
194
/**
195
 * This will check updates for any addons which do not yet use the "site-reviews/addon/update" hook
196
 * @param \GeminiLabs\SiteReviews\Application $app
197
 */
198
add_action('site-reviews/addon/update', function ($app) {
199
    $addons = [
200
        'site-reviews-filters/site-reviews-filters.php' => 'GeminiLabs\SiteReviews\Addon\Filters\Application',
201
        'site-reviews-forms/site-reviews-forms.php' => 'GeminiLabs\SiteReviews\Addon\Forms\Application',
202
        'site-reviews-images/site-reviews-images.php' => 'GeminiLabs\SiteReviews\Addon\Images\Application',
203
        'site-reviews-notifications/site-reviews-notifications.php' => 'GeminiLabs\SiteReviews\Addon\Notifications\Application',
204
        'site-reviews-themes/site-reviews-themes.php' => 'GeminiLabs\SiteReviews\Addon\Themes\Application',
205
    ];
206
    foreach ($addons as $basename => $addon) {
207
        $file = trailingslashit(WP_PLUGIN_DIR).$basename;
208
        try {
209
            $reflection = new \ReflectionClass($addon);
210
            $addonId = $reflection->getConstant('ID');
211
            if (file_exists($file) && !array_key_exists($addonId, $app->updated)) {
212
                $app->update($addon, $file);
213
            }
214
        } catch (\ReflectionException $e) {
215
            // Fail silently
216
        }
217
    }
218
});
219
220
/**
221
 * This disables OptimizePress v2 assets an notices on Site Reviews admin pages
222
 */
223
function glsr_remove_optimizepress () {
224
    if (!defined('OP_VERSION')) {
225
        return;
226
    }
227
    if (!str_starts_with(glsr_current_screen()->post_type, glsr()->post_type)) {
228
        return;
229
    }
230
    glsr(Compatibility::class)->removeHook('admin_enqueue_scripts', 'print_scripts', '\OptimizePress_Admin_Init');
231
    remove_action('admin_notices', 'checkApiKeyValidity');
232
    remove_action('admin_notices', 'checkEligibility');
233
    remove_action('admin_notices', 'compatibilityCheck');
234
    remove_action('admin_notices', 'goToWebinarNewAPI');
235
    remove_action('admin_notices', 'pluginAndThemeAreRunning');
236
    remove_action('admin_notices', 'update_nag_screen');
237
    remove_filter('use_block_editor_for_post_type', 'op2_disable_gutenberg', 100);
238
    remove_filter('gutenberg_can_edit_post', 'op2_disable_gutenberg');
239
}
240
241
add_action('load-post.php', 'glsr_remove_optimizepress');
242
add_action('load-post-new.php', 'glsr_remove_optimizepress');
243