PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / trunk
Forumax – AI Powered Advanced Community Forum Plugin vtrunk
2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 2.0.0 2.1.0 All 29 releases
bbp-core / includes / admin / menu / admin_ui.php

admin_ui.php in Forumax – AI Powered Advanced Community Forum Plugin trunk, at includes/admin/menu/admin_ui.php

201 lines 6.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! class_exists( 'bbPress' ) ) {
3 return;
4 }
5
6 $parent_forums = [];
7 $fcount = wp_count_posts( bbp_get_forum_post_type() );
8 $forum_count = (int) ( $fcount->publish + $fcount->hidden + $fcount->spam );
9 ?>
10 <div class="wrap">
11 <div class="body-dark">
12 <?php
13 if ( $forum_count > 0 ) :
14 include __DIR__ . '/admin_ui/header.php';
15 ?>
16 <main>
17 <div class="easydocs-sidebar-menu">
18 <div class="tab-container">
19 <?php
20 $forum_query = new WP_Query( [
21 'post_type' => bbp_get_forum_post_type(),
22 'posts_per_page' => -1,
23 'post_parent' => 0,
24 'orderby' => 'menu_order',
25 'order' => 'ASC',
26 'post_status' => 'publish',
27 ] );
28 $count = $forum_query->found_posts;
29 // Left Sidebar Forums.
30 include __DIR__ . '/admin_ui/forums.php';
31 ?>
32 <div class="easydocs-tab-content">
33 <?php
34 $ids = 0;
35 $container = 1;
36 if ( is_array( $parent_forums ) ) :
37 foreach ( $parent_forums as $item ) :
38 $ids ++;
39 $container ++;
40 $active = $ids == 1 ? ' tab-active' : '';
41
42 $children = new WP_Query(
43 [
44 'post_parent' => $item,
45 'post_type' => bbp_get_topic_post_type(),
46 'orderby' => 'menu_order',
47 'order' => 'asc',
48 'posts_per_page' => -1,
49 'post_status' => [ 'any', 'spam' ],
50 ]
51 );
52
53 $count_open = 0;
54 $count_closed = 0;
55 $count_hidden = 0;
56 $count_no_reply = 0;
57 $count_solved = 0;
58 $count_unsolved = 0;
59 $count_trash = 0;
60
61 while ( $children->have_posts() ) : $children->the_post();
62 $topic_id = get_the_ID();
63 $replies = get_children( [
64 'post_parent' => $topic_id,
65 'post_type' => bbp_get_reply_post_type(),
66 'post_status' => [ 'publish', 'draft', 'pending' ],
67 ] );
68
69 // Count open/closed topics.
70 if ( bbp_is_topic_closed( $topic_id ) ) {
71 $count_closed++;
72 } else {
73 $count_open++;
74 }
75
76 // Count spam( hidden ) topics.
77 if ( bbp_is_topic_spam( $topic_id ) || bbp_is_topic_pending( $topic_id ) ) {
78 $count_hidden++;
79 }
80
81 // Replies count.
82 if ( 0 == count( $replies ) ) {
83 $count_no_reply++;
84 }
85
86 // Count solved.
87 // Before using $GLOBALS['forumax_solve_topic'], check if it is set
88 if (isset($GLOBALS['forumax_solve_topic']) && $GLOBALS['forumax_solve_topic']->is_solved($topic_id)) {
89 $count_solved++;
90 } else {
91 $count_unsolved++;
92 }
93 endwhile;
94 wp_reset_postdata();
95
96 $trash_topic = new WP_Query( [
97 'post_parent' => $item,
98 'post_type' => bbp_get_topic_post_type(),
99 'posts_per_page' => -1,
100 'post_status' => [ 'trash' ],
101 ] );
102
103 while ( $trash_topic->have_posts() ) :
104 $trash_topic->the_post();
105 $trash_topic_id = get_the_ID();
106 // Count trash.
107 if ( bbp_is_topic_trash( $trash_topic_id ) ) {
108 $count_trash++;
109 }
110 endwhile;
111 wp_reset_postdata();
112 ?>
113 <div class="easydocs-tab <?php echo esc_attr( $active ); ?>" id="tab-<?php echo esc_attr( $item ); ?>">
114
115 <!-- Tab filters. -->
116 <?php include __DIR__ . '/admin_ui/tab_filters.php'; ?>
117
118 <!-- Children topics. -->
119 <?php include __DIR__ . '/admin_ui/topics.php'; ?>
120
121 <?php if ( $children->post_count > 0 ) : ?>
122 <div class="controls bbpc-admin-pagination" style="display:none;">
123 <div class="mixitup-control mixitup-page-list"></div>
124 </div>
125 <?php endif; ?>
126
127 <a class="easydocs-btn easydocs-btn-outline-blue easydocs-btn-sm easydocs-btn-round button button-info section-doc" id="bbpc-topic" target="_blank" name="submit" href="javascript:void(0)" bbp_forum_id="<?php echo esc_attr( $item ); ?>">
128 <?php esc_html_e( 'Add Topic', 'forumax' ); ?>
129 </a>
130 </div>
131 <?php
132 endforeach;
133 endif;
134 ?>
135 </div>
136 </div>
137 </div>
138 </main>
139 <?php
140 else :
141 ?>
142 <div class="eazydocs-no-content">
143 <img src="<?php echo esc_url( FORUMAX_IMG . 'icon/folder-open.png' ); ?>" alt="<?php esc_attr_e( 'Folder Open', 'forumax' ); ?>">
144 <p class="big-p"> <?php esc_html_e( 'No forums found. Get started by creating a new forum or importing demo data.', 'forumax' ); ?> </p>
145 <p class="forumax-empty-actions">
146 <a href="javascript:void(0)" type="button" id="bbpc-forum" class="button button-primary ezd-btn btn-lg">
147 <span class="dashicons dashicons-plus-alt2"></span>
148 <?php esc_html_e( 'Create Forum', 'forumax' ); ?>
149 </a>
150 <span class="forumax-actions-separator"><?php esc_html_e( 'or', 'forumax' ); ?></span>
151 <a href="javascript:void(0)" type="button" id="forumax-import-demo" class="button ezd-btn btn-lg forumax-import-demo-btn">
152 <span class="dashicons dashicons-database-import"></span>
153 <?php esc_html_e( 'Import Demo Data', 'forumax' ); ?>
154 </a>
155 </p>
156 </div>
157 <?php
158 endif;
159 ?>
160 </div>
161 </div>
162
163 <script>
164 (function ($) {
165 $(document).ready(function () {
166 let docContainer = document.querySelectorAll('.easydocs-tab');
167 var config = {
168 controls: {
169 scope: 'local',
170 },
171 animation: {
172 enable: false,
173 },
174 load: {
175 filter: '<?php echo esc_js( forumax_get_opt( 'default_filter', '.open-topics' ) ); ?>'
176 },
177 pagination: {
178 limit: 10,
179 },
180 callbacks: {
181 onMixEnd: function(state) {
182 var pagination = state.container.querySelector('.bbpc-admin-pagination');
183 if ( pagination ) {
184 // Count matching items directly from the DOM using the active
185 // filter selector. MixItUp always renders prev/next buttons so
186 // children.length is unreliable for detecting multi-page results.
187 var selector = state.activeFilter ? state.activeFilter.selector : '';
188 var matchCount = ( ! selector || selector === 'all' )
189 ? state.container.querySelectorAll('.mix').length
190 : state.container.querySelectorAll(selector).length;
191 pagination.style.display = matchCount > 10 ? 'block' : 'none';
192 }
193 }
194 }
195 };
196 for (let i = 0; i < docContainer.length; i++) {
197 var mixer1 = mixitup(docContainer[i], config);
198 }
199 });
200 })(jQuery);
201 </script>