Test Failed
Push — main ( ed15c3...2f7161 )
by Paul
12:26 queued 06:03
created

glsr_load_ninja_forms_css()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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