PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 1.7.6
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v1.7.6
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / admin / class-betterdocs-admin.php

class-betterdocs-admin.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 1.7.6, at admin/class-betterdocs-admin.php

414 lines 12.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The admin-specific functionality of the plugin.
4 *
5 * @link https://wpdeveloper.net
6 * @since 1.0.0
7 *
8 * @package BetterDocs
9 * @subpackage BetterDocs/admin
10 * @author WPDeveloper <support@wpdeveloper.net>
11 */
12
13 class BetterDocs_Admin {
14
15 /**
16 * The ID of this plugin.
17 *
18 * @since 1.0.0
19 * @access private
20 * @var string $plugin_name The ID of this plugin.
21 */
22 private $plugin_name;
23 private $menu_slug;
24 /**
25 * All builder args
26 *
27 * @var array
28 */
29 private $builder_args;
30 /**
31 * Builder Metabox ID
32 *
33 * @var string
34 */
35 private $metabox_id;
36
37 /**
38 * The version of this plugin.
39 *
40 * @since 1.0.0
41 * @access private
42 * @var string $version The current version of this plugin.
43 */
44 private $version;
45
46 /**
47 * The type.
48 *
49 * @since 1.0.0
50 * @access public
51 * @var string the post type of betterdocs.
52 */
53 public $type = 'docs';
54
55 public $metabox;
56
57 public static $prefix = 'betterdocs_meta_';
58
59 public static $settings;
60
61 /**
62 * Initialize the class and set its properties.
63 *
64 * @since 1.0.0
65 * @param string $plugin_name The name of this plugin.
66 * @param string $version The version of this plugin.
67 */
68 public static $counts;
69
70 public static $enabled_types = [];
71 public static $active_items = [];
72
73 public function __construct( $plugin_name, $version ) {
74
75 $this->plugin_name = $plugin_name;
76 $this->version = $version;
77 $this->metabox = new BetterDocs_MetaBox();
78 self::$settings = BetterDocs_DB::get_settings();
79 }
80
81 /**
82 * Register the stylesheets for the admin area.
83 *
84 * @since 1.0.0
85 */
86 public function enqueue_styles( $hook ) {
87 wp_enqueue_style(
88 $this->plugin_name . '-admin-global',
89 BETTERDOCS_ADMIN_URL . 'assets/css/betterdocs-global.css',
90 array(), $this->version, 'all'
91 );
92
93 $tax = function_exists('get_current_screen') ? get_current_screen() : '';
94 if (!in_array($hook, array('toplevel_page_betterdocs-admin', 'betterdocs_page_betterdocs-settings', 'betterdocs_page_betterdocs-analytics'))) {
95 if ($tax->taxonomy !== 'doc_category') {
96 return;
97 } else {
98 return;
99 }
100 }
101
102 wp_enqueue_style(
103 $this->plugin_name . '-select2',
104 BETTERDOCS_ADMIN_URL . 'assets/css/select2.min.css',
105 array(), $this->version, 'all'
106 );
107
108 wp_enqueue_style(
109 $this->plugin_name,
110 BETTERDOCS_ADMIN_URL . 'assets/css/betterdocs-admin.css',
111 array(), $this->version, 'all'
112 );
113
114 }
115 /**
116 * Register the JavaScript for the admin area.
117 *
118 * @since 1.0.0
119 */
120 public function enqueue_scripts( $hook ) {
121 $tax = function_exists('get_current_screen') ? get_current_screen() : '';
122 if (!in_array($hook, array('toplevel_page_betterdocs-admin', 'betterdocs_page_betterdocs-settings', 'betterdocs_page_betterdocs-analytics', 'betterdocs_page_betterdocs-setup'))) {
123 if ($tax->taxonomy !== 'doc_category') {
124 return;
125 } else {
126 return;
127 }
128 }
129
130 wp_enqueue_script( 'wp-color-picker' );
131
132 wp_enqueue_script(
133 $this->plugin_name . '-select2',
134 BETTERDOCS_ADMIN_URL . 'assets/js/select2.min.js',
135 array( 'jquery' ), $this->version, true
136 );
137
138 wp_enqueue_script(
139 $this->plugin_name . '-sweetalert',
140 BETTERDOCS_ADMIN_URL . 'assets/js/sweetalert.min.js',
141 array( 'jquery' ), $this->version, true
142 );
143
144 wp_enqueue_script(
145 $this->plugin_name,
146 BETTERDOCS_ADMIN_URL . 'assets/js/betterdocs-admin.js',
147 array( 'jquery' ), $this->version, true
148 );
149
150 wp_localize_script( $this->plugin_name, 'betterdocsAdminConfig', self::toggleFields() );
151
152 }
153
154 public function toggleFields( $builder = false ){
155
156 $args = BetterDocs_Settings::settings_args();
157
158 $toggleFields = $hideFields = $conditions = array();
159
160 $tabs = $args;
161 if( ! empty( $tabs ) ) {
162 foreach( $tabs as $tab_id => $tab ) {
163 $sections = isset( $tab['sections'] ) ? $tab[ 'sections' ] : [];
164 if( ! empty( $sections ) ) {
165 foreach( $sections as $section_id => $section ) {
166 $fields = isset( $section['fields'] ) ? $section[ 'fields' ] : [];
167 if( isset( $section['tabs'] ) && ! empty( $section['tabs'] ) ) {
168 foreach( $section['tabs'] as $inner_field_tab_key => $inner_field_tab ) {
169 if( isset( $inner_field_tab['fields'] ) ) {
170 foreach( $inner_field_tab['fields'] as $inner_tab_field_key => $inner_tab_field_tab ) {
171 if( isset( $inner_tab_field_tab['hide'] ) && ! empty( $inner_tab_field_tab['hide'] ) && is_array( $inner_tab_field_tab['hide'] ) ) {
172 $hideFields = $this->a_walk( $inner_tab_field_tab['hide'], $inner_tab_field_key, $hideFields );
173 }
174 if( isset( $inner_tab_field_tab['dependency'] ) && ! empty( $inner_tab_field_tab['dependency'] ) && is_array( $inner_tab_field_tab['dependency'] ) ) {
175 $conditions = $this->a_walk( $inner_tab_field_tab['dependency'], $inner_tab_field_key, $conditions );
176 }
177 }
178 }
179 }
180 }
181 if( ! empty( $fields ) ) {
182 foreach( $fields as $field_key => $field ) {
183 if( isset( $field['fields'] ) ) {
184 $iFields = $field['fields'];
185 foreach( $iFields as $inner_field_key => $inner_field ) {
186 if( isset( $inner_field['hide'] ) && ! empty( $inner_field['hide'] ) && is_array( $inner_field['hide'] ) ) {
187 $hideFields = $this->a_walk( $inner_field['hide'], $inner_field_key, $hideFields );
188 }
189 if( isset( $inner_field['dependency'] ) && ! empty( $inner_field['dependency'] ) && is_array( $inner_field['dependency'] ) ) {
190 $conditions = $this->a_walk( $inner_field['dependency'], $inner_field_key, $conditions );
191 }
192 }
193 }
194 if( isset( $field['hide'] ) && ! empty( $field['hide'] ) && is_array( $field['hide'] ) ) {
195 $hideFields = $this->a_walk( $field['hide'], $field_key, $hideFields );
196 }
197 if( isset( $field['dependency'] ) && ! empty( $field['dependency'] ) && is_array( $field['dependency'] ) ) {
198 $conditions = $this->a_walk( $field['dependency'], $field_key, $conditions );
199 }
200 }
201 }
202 }
203 }
204 }
205 }
206
207 return array(
208 'toggleFields' => $conditions, // TODO: toggling system has to be more optimized!
209 'hideFields' => $hideFields,
210 );
211 }
212
213 public function a_walk( $array, $field_key, &$returned_array = [] ){
214 array_walk( $array, function( $value, $key ) use ( $field_key, &$returned_array ) {
215 $returned_array[ $field_key ][ $key ] = $value;
216 } );
217
218 return $returned_array;
219 }
220
221 /**
222 * Admin Menu Page
223 *
224 * @return void
225 */
226 public function menu_page(){
227 $settings_class = new betterdocs_settings();
228 $singular_name = BetterDocs_DB::get_settings('breadcrumb_doc_title');
229
230 $betterdocs_articles_caps = apply_filters( 'betterdocs_articles_caps', 'edit_posts', 'article_roles' );
231 $betterdocs_terms_caps = apply_filters( 'betterdocs_terms_caps', 'delete_others_posts', 'article_roles' );
232 $betterdocs_settings_caps = apply_filters( 'betterdocs_settings_caps', 'administrator', 'settings_roles' );
233
234 $settings = apply_filters( 'betterdocs_admin_menu', array(
235 'betterdocs-setup' => array(
236 'title' => __('Quick Setup', 'betterdocs'),
237 'capability' => 'delete_users',
238 'callback' => 'BetterDocsSetupWizard::plugin_setting_page'
239 ),
240 'betterdocs-settings' => array(
241 'title' => __('Settings', 'betterdocs'),
242 'capability' => $betterdocs_settings_caps,
243 'callback' => array( $settings_class, 'settings_page' )
244 ),
245 ) );
246
247 $this->menu_slug = apply_filters( 'betterdocs_menu_slug', 'edit.php?post_type=docs' );
248 $betterdocs_admin_output = apply_filters( 'betterdocs_admin_output', array() );
249
250 add_menu_page(
251 'BetterDocs', 'BetterDocs',
252 $betterdocs_articles_caps, $this->menu_slug, $betterdocs_admin_output,
253 BETTERDOCS_ADMIN_URL.'/assets/img/betterdocs-icon-white.svg', 5
254 );
255 add_submenu_page(
256 $this->menu_slug, '',
257 __( 'All Docs', 'betterdocs' ),
258 $betterdocs_articles_caps, $this->menu_slug
259 );
260 add_submenu_page( $this->menu_slug, __('Add New', 'betterdocs'), __('Add New', 'betterdocs'), $betterdocs_articles_caps, 'post-new.php?post_type=docs');
261 add_submenu_page(
262 $this->menu_slug, __('Categories', 'betterdocs'), __('Categories', 'betterdocs'),
263 $betterdocs_terms_caps, 'edit-tags.php?taxonomy=doc_category&post_type=docs'
264 );
265 add_submenu_page(
266 $this->menu_slug, __('Tags', 'betterdocs'), __('Tags', 'betterdocs'),
267 $betterdocs_terms_caps, 'edit-tags.php?taxonomy=doc_tag&post_type=docs'
268 );
269
270 foreach( $settings as $slug => $setting ) {
271 $cap = isset( $setting['capability'] ) ? $setting['capability'] : 'delete_users';
272 $hook = add_submenu_page( $this->menu_slug, $setting['title'], $setting['title'], $cap, $slug, $setting['callback'] );
273 }
274 }
275
276 public function highlight_admin_menu( $parent_file ){
277 global $current_screen;
278 if( $this->menu_slug === 'betterdocs-admin' && in_array( $current_screen->id, array( 'edit-doc_tag', 'edit-doc_category' ) ) ) {
279 $parent_file = 'betterdocs-admin';
280 } else {
281 if( in_array( $current_screen->id, array( 'edit-doc_tag', 'edit-doc_category' ) ) ) {
282 $parent_file = 'edit.php?post_type=docs';
283 }
284 }
285 return $parent_file;
286 }
287
288 public function highlight_admin_submenu( $parent_file, $submenu_file ){
289 global $current_screen, $pagenow;
290 if ( $current_screen->post_type == 'docs' ) {
291 if ( $pagenow == 'post.php' ) {
292 $submenu_file = 'edit.php?post_type=docs';
293 }
294 if ( $pagenow == 'post-new.php' ) {
295 $submenu_file = 'post-new.php?post_type=docs';
296 }
297 if( $current_screen->id === 'edit-doc_category' ) {
298 $submenu_file = 'edit-tags.php?taxonomy=doc_category&post_type=docs';
299 }
300 if( $current_screen->id === 'edit-doc_tag' ) {
301 $submenu_file = 'edit-tags.php?taxonomy=doc_tag&post_type=docs';
302 }
303 if( $current_screen->id === 'edit-knowledge_base' ) {
304 $submenu_file = 'edit-tags.php?taxonomy=knowledge_base&post_type=docs';
305 }
306 }
307 if( 'betterdocs_page_betterdocs-settings' == $current_screen->id ) {
308 $submenu_file = 'betterdocs-settings';
309 }
310 if( 'betterdocs_page_betterdocs-setup' == $current_screen->id ) {
311 $submenu_file = 'betterdocs-setup';
312 }
313
314 return $submenu_file;
315 }
316
317
318 public function quick_builder() {
319 $builder_args = $this->builder_args;
320 $tabs = $this->builder_args['tabs'];
321 $prefix = self::$prefix;
322 $metabox_id = $this->metabox_id;
323 /**
324 * This lines of code is for editing a notification in simple|quick builder
325 *
326 * @var [type]
327 */
328 $idd = null;
329 if( isset( $_GET['post_id'] ) && ! empty( $_GET['post_id'] )) {
330 $idd = intval( $_GET['post_id'] );
331 }
332 include_once BETTERDOCS_ADMIN_DIR_PATH . 'partials/betterdocs-quick-builder-display.php';
333 }
334 /**
335 * Generate the builder data acording to default meta data
336 *
337 * @param array $data
338 * @return array
339 */
340 protected function builder_data( $data ) {
341 $post_data = [];
342 $prefix = self::$prefix;
343 $meta_fields = BetterDocs_MetaBox::get_metabox_fields( $prefix );
344 foreach( $meta_fields as $meta_key => $meta_field ) {
345 if( in_array( $meta_key, array_keys($data) ) ) {
346 $post_data[ $meta_key ] = $data[ $meta_key ];
347 } else {
348 $post_data[ $meta_key ] = '';
349
350 if( isset( $meta_field['defaults'] ) ) {
351 $post_data[ $meta_key ] = $meta_field['defaults'];
352 }
353 if( isset( $meta_field['default'] ) ) {
354 $post_data[ $meta_key ] = $meta_field['default'];
355 }
356 }
357 }
358
359 return array_merge( $post_data, $data );
360 }
361
362 public static function get_form_action( $query_var = '', $builder_form = false ) {
363 $page = '/edit.php?post_type=docs&page=betterdocs-settings';
364
365 if ( is_network_admin() ) {
366 return network_admin_url( $page . $query_var );
367 } else {
368 return admin_url( $page . $query_var );
369 }
370 }
371
372
373 /**
374 * Admin Init For User Interactions
375 * @return void
376 */
377 public function admin_init( $hook ){
378 /**
379 * BetterDocs Admin URL
380 */
381 $current_url = admin_url('edit.php?post_type=docs&page=betterdocs-settings');
382 }
383 public function toolbar_menu( $admin_bar ){
384 if ( ! is_admin() || ! is_admin_bar_showing() ) {
385 return;
386 }
387
388 // Show only when the user is a member of this site, or they're a super admin.
389 if ( ! is_user_member_of_blog() && ! is_super_admin() ) {
390 return;
391 }
392
393 $saved_settings = BetterDocs_DB::get_settings();
394 $docs_url = '';
395 if( isset( $saved_settings['builtin_doc_page'] ) && intval( $saved_settings['builtin_doc_page'] ) ) {
396 $docs_url = get_post_type_archive_link( BetterDocs_Docs_Post_Type::$post_type );
397 } elseif (isset( $saved_settings['docs_page'] ) && intval( $saved_settings['docs_page'] )) {
398 $docs_url = !empty( $saved_settings['docs_page'] ) ? get_page_link($saved_settings['docs_page']) : false;
399 }
400
401 if( $docs_url ) {
402 $admin_bar->add_node(
403 array(
404 'parent' => 'site-name',
405 'id' => 'view-docs',
406 'title' => __( 'Visit Documentation', 'betterdocs' ),
407 'href' => $docs_url,
408 )
409 );
410 }
411 }
412
413 }
414