PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 1.7.3
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v1.7.3
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.3, at admin/class-betterdocs-admin.php

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