PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 2.5.5
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v2.5.5
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 / includes / FrontEnd / FrontEnd.php

FrontEnd.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 2.5.5, at includes/FrontEnd/FrontEnd.php

201 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPDeveloper\BetterDocs\FrontEnd;
4
5 use WPDeveloper\BetterDocs\Utils\Base;
6 use WPDeveloper\BetterDocs\Utils\Views;
7 use WPDeveloper\BetterDocs\Core\Settings;
8 use WPDeveloper\BetterDocs\Utils\Enqueue;
9 use WPDeveloper\BetterDocs\Utils\Database;
10 use WPDeveloper\BetterDocs\Dependencies\DI\Container;
11
12 class FrontEnd extends Base {
13 private $container;
14 private $database;
15 /**
16 * Enqueue
17 * @var Enqueue
18 */
19 private $assets;
20 /**
21 * Settings
22 * @var Settings
23 */
24 private $settings;
25 private $widget_attributes = [];
26 private $widget_type = '';
27
28 public function __construct( Container $container, Database $database, Settings $settings ) {
29 $this->container = $container;
30 $this->database = $database;
31 $this->settings = $settings;
32
33 $this->assets = $this->container->get( Enqueue::class );
34
35 add_action( 'init', [$this, 'init'] );
36 add_action( 'wp_enqueue_scripts', [$this, 'enqueue_scripts'] );
37
38 add_filter( 'betterdocs_layout_filename', [$this, 'layout_filename'], 10, 2 );
39
40 add_action( 'betterdocs_docs_before_social', [$this, 'article_reactions'] );
41
42 add_action('betterdocs_before_render', [ $this, 'before_render' ], 11, 2 );
43 add_action('betterdocs_after_render', [ $this, 'after_render' ], 11, 2 );
44 }
45
46 public function before_render( $widget, $widget_type ) {
47 $this->widget_attributes = isset( $widget->attributes ) ? $widget->attributes : [];
48 $this->widget_type = $widget_type;
49
50 /**
51 * This line of code will run for reactions shortcode, elementor widget and blocks
52 */
53 if( strpos( $widget->get_name(), 'reactions' ) !== false ) {
54 $this->localize_reactions_data();
55 }
56
57 /**
58 * This line of code will run for Feedback form Shortcode, Elementor widget and blocks
59 */
60 if( strpos( $widget->get_name(), 'feedback_form' ) ){
61 $this->localize_feedback_form_data();
62 }
63
64 add_filter('betterdocs_nested_terms_args', [$this, 'terms_args'], 11, 1);
65 add_filter('betterdocs_nested_docs_args', [$this, 'docs_args'], 11, 1);
66 }
67
68 public function after_render( $widget, $widget_type ){
69 remove_filter('betterdocs_nested_terms_args', [$this, 'terms_args'], 11);
70 remove_filter('betterdocs_nested_docs_args', [$this, 'docs_args'], 11);
71
72 $this->widget_attributes = [];
73 $this->widget_type = '';
74 }
75
76 public function terms_args( $args ){
77 switch( $this->widget_type ) {
78 case 'shortcode':
79 if( isset( $this->widget_attributes['terms_orderby'] ) ) {
80 $args['orderby'] = $this->widget_attributes['terms_orderby'];
81 }
82
83 if( isset( $this->widget_attributes['terms_order'] ) ) {
84 $args['order'] = $this->widget_attributes['terms_order'];
85 }
86 break;
87 case 'blocks':
88 $args['orderby'] = $this->widget_attributes['orderBy'];
89 $args['order'] = $this->widget_attributes['order'];
90 break;
91 case 'elementor':
92 $args['orderby'] = $this->widget_attributes['orderby'];
93 $args['order'] = $this->widget_attributes['order'];
94 break;
95 }
96
97 return $args;
98 }
99
100 public function docs_args( $args ){
101 switch( $this->widget_type ) {
102 case 'shortcode':
103 if( isset( $this->widget_attributes['orderby'] ) ) {
104 $args['orderby'] = $this->widget_attributes['orderby'];
105 }
106
107 if( isset( $this->widget_attributes['order'] ) ) {
108 $args['order'] = $this->widget_attributes['order'];
109 }
110 break;
111 case 'blocks':
112 $args['orderby'] = $this->widget_attributes['postsOrderBy'];
113 $args['order'] = $this->widget_attributes['postsOrder'];
114 break;
115 case 'elementor':
116 $args['orderby'] = $this->widget_attributes['post_orderby'];
117 $args['order'] = $this->widget_attributes['post_order'];
118 break;
119 }
120
121 return $args;
122 }
123
124 public function article_reactions() {
125 if ( $this->database->get_theme_mod( 'betterdocs_post_reactions', true ) ) {
126 echo do_shortcode( '[betterdocs_article_reactions]' );
127 }
128 }
129
130 public function enqueue_scripts() {
131 if( is_singular( 'docs' ) ) {
132 wp_enqueue_style( 'betterdocs-single' );
133 wp_enqueue_script( 'clipboard' );
134 }
135
136 if( is_post_type_archive( 'docs' ) ) {
137 wp_enqueue_style( 'betterdocs-docs' );
138 }
139
140 if( is_tax( 'doc_category' ) || is_tax( 'doc_tag') ) {
141 wp_enqueue_style( 'betterdocs-doc_category' );
142 }
143
144 if( is_tax( 'doc_category' ) || is_tax( 'doc_tag') || is_singular( 'docs' ) ) {
145 wp_enqueue_style( 'simplebar' );
146 wp_enqueue_script( 'simplebar' );
147 wp_enqueue_script( 'betterdocs-category-grid' );
148 }
149
150 if( is_post_type_archive('docs') || is_singular( 'docs' ) || is_tax( 'doc_category') || is_tax( 'doc_tag') || is_tax( 'knowledge_base') ) {
151 wp_enqueue_script( 'betterdocs' );
152 }
153 }
154
155 public function layout_filename( $filename, $origin_layout ) {
156 $filename = ( $origin_layout === 'layout-2' ) ? 'default' : $filename;
157 return $filename;
158 }
159
160 public function init() {
161 $this->container->get( TemplateLoader::class )->init();
162
163 add_filter( 'betterdocs_articles_args', [$this, 'article_args'], 11, 3 );
164 }
165
166 public function article_args( $args, $term_id, $_origin_args ) {
167 if ( null == $term_id || isset( $args['orderby'] ) ) {
168 return $args;
169 }
170
171 $post__in = betterdocs()->query->get_docs_order_by_terms( $term_id );
172
173 if( ! empty( $post__in ) ) {
174 $args['orderby'] = 'post__in';
175 $args['post__in'] = $post__in;
176 }
177
178 return $args;
179 }
180
181 public function localize_reactions_data(){
182 $this->assets->localize( 'betterdocs-reactions', 'betterdocsReactionsConfig', [
183 'post_id' => get_the_ID(),
184 'FEEDBACK' => array(
185 'DISPLAY' => true,
186 'TEXT' => esc_html__('How did you feel?', 'betterdocs'),
187 'SUCCESS' => esc_html__('Thanks for your feedback', 'betterdocs'),
188 'URL' => get_rest_url(null, '/betterdocs/v1/feedback'),
189 ),
190 ] );
191 }
192
193 public function localize_feedback_form_data() {
194 $this->assets->localize( 'betterdocs', 'betterdocsSubmitFormConfig', [
195 'ajax_url' => admin_url( 'admin-ajax.php' ),
196 'post_id' => get_the_ID(),
197 'nonce' => wp_create_nonce( 'betterdocs_submit_data' )
198 ] );
199 }
200 }
201