PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
← All changes | inc/admin/class-lp-admin-menu.php +149 -43 4.1.7.34.4.8 View file →
@@ -6,8 +6,10 @@
6 6 * @package LearnPress
7 7 * @version 1.0
8 8 */
9 9
10 +use LearnPress\Helpers\Config;
11 +
10 12 defined( 'ABSPATH' ) || exit;
11 13
12 14 /**
13 15 * Class LP_Admin_Menu
@@ -21,8 +23,15 @@
21 23 */
22 24 protected $menu_items = array();
23 25
24 26 /**
27 + * Array of menu groups.
28 + *
29 + * @var array
30 + */
31 + protected $group_menus = array();
32 +
33 + /**
25 34 * Main menu capability.
26 35 *
27 36 * @var string
28 37 */
@@ -32,8 +41,9 @@
32 41 * LP_Admin_Menu Construct
33 42 */
34 43 public function __construct() {
35 44 add_action( 'admin_menu', array( $this, 'admin_menu' ) );
45 + add_action( 'admin_menu', array( $this, 'lp_group_menus' ), 9999 );
36 46
37 47 if ( apply_filters( 'learn_press_show_admin_bar_courses_page', true ) ) {
38 48 add_action( 'admin_bar_menu', array( $this, 'admin_bar_menus' ), 50 );
39 49 }
@@ -45,9 +55,9 @@
45 55 include_once 'sub-menus/abstract-submenu.php';
46 56 }
47 57
48 58 /**
49 - * Admin bar menu.
59 + * Added url Pages of LP.
50 60 *
51 61 * @param WP_Admin_Bar $wp_admin_bar
52 62 *
53 63 * @return void
@@ -52,31 +62,40 @@
52 62 *
53 63 * @return void
54 64 */
55 65 public function admin_bar_menus( $wp_admin_bar ) {
56 - if ( ! is_admin() || ! is_user_logged_in() ) {
66 + if ( ! current_user_can( 'administrator' ) ) {
57 67 return;
58 68 }
59 69
60 - // Add link view archive courses.
61 - $wp_admin_bar->add_node(
62 - array(
70 + $url_pages = array(
71 + 'lp-courses' => array(
72 + 'title' => esc_html__( 'View Page Courses', 'learnpress' ),
73 + 'href' => learn_press_get_page_link( 'courses' ),
63 74 'parent' => 'site-name',
64 - 'id' => 'courses-page',
65 - 'title' => esc_html__( 'View Courses', 'learnpress' ),
66 - 'href' => learn_press_get_page_link( 'courses' ),
67 - )
75 + ),
76 + 'lp-profile' => array(
77 + 'title' => esc_html__( 'View Page Profile', 'learnpress' ),
78 + 'href' => learn_press_get_page_link( 'profile' ),
79 + 'parent' => 'site-name',
80 + ),
81 + 'lp-instructors' => array(
82 + 'title' => esc_html__( 'View Page Instructors', 'learnpress' ),
83 + 'href' => learn_press_get_page_link( 'instructors' ),
84 + 'parent' => 'site-name',
85 + ),
68 86 );
69 87
70 - // Ad link view profile.
71 - $wp_admin_bar->add_node(
72 - array(
73 - 'id' => 'course_profile',
74 - 'parent' => 'user-actions',
75 - 'title' => esc_html__( 'View Profile', 'learnpress' ),
76 - 'href' => learn_press_get_page_link( 'profile' ),
77 - )
78 - );
88 + foreach ( $url_pages as $id => $url_page ) {
89 + $wp_admin_bar->add_node(
90 + array(
91 + 'id' => $id,
92 + 'parent' => $url_page['parent'] ?? 'appearance',
93 + 'title' => sprintf( '<span class="ab-label">%s</span>', $url_page['title'] ),
94 + 'href' => $url_page['href'],
95 + )
96 + );
97 + }
79 98 }
80 99
81 100 /**
82 101 * Get main menu capability.
@@ -97,29 +116,23 @@
97 116 'LearnPress',
98 117 $this->get_capability(),
99 118 'learn_press',
100 119 '',
101 - 'dashicons-welcome-learn-more',
120 + LP_PLUGIN_URL . '/assets/images/logo-menu.png',
102 121 '3.14'
103 122 );
104 123
105 - // Default submenu items
106 - $menu_items = array();
107 - $menu_items['statistic'] = include_once 'sub-menus/class-lp-submenu-statistics.php';
108 - $menu_items['addons'] = include_once 'sub-menus/class-lp-submenu-addons.php';
109 - $menu_items['settings'] = include_once 'sub-menus/class-lp-submenu-settings.php';
110 - $menu_items['tools'] = include_once 'sub-menus/class-lp-submenu-tools.php';
111 - $menu_items['categories'] = include_once 'sub-menus/class-lp-submenu-categories.php';
112 - $menu_items['tags'] = include_once 'sub-menus/class-lp-submenu-tags.php';
124 + // Default submenu items and groups from config.
125 + $wp_menus_config = Config::instance()->get( 'wp-menus' );
126 + $menu_items = $wp_menus_config['menus'] ?? array();
127 + $this->group_menus = $wp_menus_config['group_menus'] ?? array();
113 128
129 + // Old hook declare type Class Submenu.
114 130 $menu_items = apply_filters( 'learn-press/admin/menu-items', $menu_items );
115 131
116 - // Sort menu items by it's priority
117 - uasort( $menu_items, 'learn_press_sort_list_by_priority_callback' );
118 -
119 132 add_action(
120 133 'parent_file',
121 - function( $parent_file ) {
134 + function ( $parent_file ) {
122 135 global $current_screen;
123 136
124 137 $taxonomy = $current_screen->taxonomy;
125 138 if ( $taxonomy == 'course_tag' ) {
@@ -133,22 +146,30 @@
133 146 );
134 147
135 148 if ( $menu_items ) {
136 149 foreach ( $menu_items as $k => $item ) {
150 + // Third-party classes passed as string.
137 151 if ( is_string( $item ) && class_exists( $item ) ) {
138 152 $item = new $item();
139 153 }
140 154
141 - if ( ! $item instanceof LP_Abstract_Submenu ) {
155 + // For declare type new menu item from config array.
156 + if ( is_array( $item ) ) {
157 + add_submenu_page(
158 + 'learn_press',
159 + $item['page_title'] ?? '',
160 + $item['menu_title'] ?? '',
161 + $item['capability'] ?? '',
162 + $item['id'] ?? '',
163 + $item['callback'] ?? false,
164 + $item['priority'] ?? 10
165 + //$item->get_priority()
166 + );
167 +
142 168 continue;
143 169 }
144 170
145 - if ( in_array( $k, [ 'tags', 'categories' ] ) ) {
146 - $callback = false;
147 - } else {
148 - $callback = $item->get_callback();
149 - }
150 -
171 + // For declare type old menu item from class.
151 172 add_submenu_page(
152 173 'learn_press',
153 174 $item->get_page_title(),
154 175 $item->get_menu_title(),
@@ -153,18 +174,104 @@
153 174 $item->get_page_title(),
154 175 $item->get_menu_title(),
155 176 $item->get_capability(),
156 177 $item->get_id(),
157 - $callback
178 + $item->get_callback(),
179 + //$item->get_priority()
158 180 );
159 181 }
160 182 $this->menu_items = $menu_items;
161 183 }
162 184
163 - $addons = LP_Admin::instance()->get_addons();
185 + // $addons = LP_Admin::instance()->get_addons();
164 186 }
165 187
166 188 /**
189 + * Group and reorder the LearnPress admin submenu items.
190 + *
191 + * Items are grouped by the 'learn-press/wp-admin/menu-group' filter
192 + * and ordered by the default group and slug order. Unmatched items
193 + * are added to the 'operations' group. A divider is inserted between
194 + * each group.
195 + *
196 + * @return void
197 + */
198 + public function lp_group_menus() {
199 + global $submenu;
200 +
201 + $lp_menus = $submenu['learn_press'] ?? [];
202 + if ( empty( $lp_menus ) ) {
203 + return;
204 + }
205 +
206 + $group_menus_default = $this->group_menus;
207 + $group_menus = array();
208 +
209 + // Group menus by default
210 + foreach ( $lp_menus as $item ) {
211 + $slug = $item[2] ?? '';
212 + $in_group = false;
213 +
214 + foreach ( $group_menus_default as $group => $menus ) {
215 + if ( in_array( $slug, $menus ) ) {
216 + $group_menus[ $group ][] = $item;
217 + $in_group = true;
218 + }
219 + }
220 +
221 + // If not in any group, add to operations
222 + if ( ! $in_group ) {
223 + $group_menus['operations'][] = $item;
224 + }
225 + }
226 +
227 + // Reorder menus
228 + $menus_new = [];
229 + $i = 0;
230 + $count = count( $group_menus_default );
231 + foreach ( $group_menus_default as $group => $menus ) {
232 + if ( ! isset( $group_menus[ $group ] ) ) {
233 + continue;
234 + }
235 +
236 + // Order items by the default slug order, then append leftovers.
237 + $items_by_slug = [];
238 + foreach ( $group_menus[ $group ] as $item ) {
239 + $items_by_slug[ $item[2] ?? '' ] = $item;
240 + }
241 +
242 + foreach ( $menus as $menu_slug ) {
243 + if ( ! is_string( $menu_slug ) ) {
244 + continue;
245 + }
246 +
247 + if ( isset( $items_by_slug[ $menu_slug ] ) ) {
248 + $menus_new[] = $items_by_slug[ $menu_slug ];
249 + unset( $items_by_slug[ $menu_slug ] );
250 + }
251 + }
252 +
253 + foreach ( $items_by_slug as $item ) {
254 + $menus_new[] = $item;
255 + }
256 +
257 + ++$i;
258 + if ( $i < $count ) {
259 + // Add divider between groups
260 + $menus_new[] = array(
261 + '',
262 + $this->get_capability(),
263 + '#',
264 + '',
265 + 'lp-menu-divider lp-menu-divider-' . $group,
266 + );
267 + }
268 + }
269 +
270 + $submenu['learn_press'] = $menus_new;
271 + }
272 +
273 + /**
167 274 * Callback function using for "usort".
168 275 *
169 276 * @param LP_Abstract_Submenu $a
170 277 * @param LP_Abstract_Submenu $b
@@ -179,11 +286,10 @@
179 286 return $this->menu_items;
180 287 }
181 288
182 289 public static function instance() {
183 - static $instance = false;
184 -
185 - if ( ! $instance ) {
290 + static $instance;
291 + if ( is_null( $instance ) ) {
186 292 $instance = new self();
187 293 }
188 294
189 295 return $instance;