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

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