PluginProbe
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI / 8.0.5
GamiPress – Gamification plugin to reward points, badges & ranks in WordPress, now with AI v8.0.5
8.0.5 8.0.4 8.0.3 8.0.1 8.0.2 8.0.0 7.9.9.7 7.9.9.6 7.9.9.5 7.9.9.4 7.9.9.3 7.9.9.2 7.9.9.1 7.9.9 7.9.8 7.9.7 7.9.6 7.9.5 7.9.4 7.9.3 7.9.2 7.9.1 7.9.0 7.8.9 7.8.8 All 47 releases
← All changes | includes/admin/pages/settings.php +202 -0 7.9.3 → 8.0.5 View file →
@@ -1,0 +1,202 @@
1 +<?php
2 +/**
3 + * Admin Settings Page
4 + *
5 + * @package GamiPress\Admin\Settings
6 + * @author GamiPress <[email protected]>, Ruben Garcia <[email protected]>
7 + * @since 1.0.0
8 + */
9 +// Exit if accessed directly
10 +if( !defined( 'ABSPATH' ) ) exit;
11 +
12 +require_once GAMIPRESS_DIR . 'includes/admin/settings/general.php';
13 +require_once GAMIPRESS_DIR . 'includes/admin/settings/social.php';
14 +require_once GAMIPRESS_DIR . 'includes/admin/settings/email.php';
15 +require_once GAMIPRESS_DIR . 'includes/admin/settings/network.php';
16 +
17 +/**
18 + * Register GamiPress Settings with Settings API.
19 + *
20 + * @since 1.0.0
21 + *
22 + * @return void
23 + */
24 +function gamipress_register_settings() {
25 +
26 + register_setting( 'gamipress_settings', 'gamipress_settings' );
27 +
28 +}
29 +add_action( 'admin_init', 'gamipress_register_settings' );
30 +
31 +/**
32 + * Register settings page.
33 + *
34 + * @since 1.0.0
35 + *
36 + * @return void
37 + */
38 +function gamipress_register_settings_page() {
39 +
40 + $tabs = array();
41 + $boxes = array();
42 +
43 + $is_settings_page = ( isset( $_GET['page'] ) && $_GET['page'] === 'gamipress_settings' );
44 +
45 + if( $is_settings_page ) {
46 +
47 + // Loop settings sections
48 + foreach( gamipress_get_settings_sections() as $section_id => $section ) {
49 +
50 + $meta_boxes = array();
51 +
52 + /**
53 + * Filter: gamipress_settings_{$section_id}_meta_boxes
54 + *
55 + * @param array $meta_boxes
56 + *
57 + * @return array
58 + */
59 + $meta_boxes = apply_filters( "gamipress_settings_{$section_id}_meta_boxes", $meta_boxes );
60 +
61 + if( ! empty( $meta_boxes ) ) {
62 +
63 + // Loop settings section meta boxes
64 + foreach( $meta_boxes as $meta_box_id => $meta_box ) {
65 +
66 + // Check meta box tabs
67 + if( isset( $meta_box['tabs'] ) && ! empty( $meta_box['tabs'] ) ) {
68 +
69 + // Loop meta box tabs
70 + foreach( $meta_box['tabs'] as $tab_id => $tab ) {
71 +
72 + $tab['id'] = $tab_id;
73 +
74 + $meta_box['tabs'][$tab_id] = $tab;
75 +
76 + }
77 +
78 + }
79 +
80 + // Only add settings meta box if has fields
81 + if( isset( $meta_box['fields'] ) && ! empty( $meta_box['fields'] ) ) {
82 +
83 + // Loop meta box fields
84 + foreach( $meta_box['fields'] as $field_id => $field ) {
85 +
86 + $field['id'] = $field_id;
87 +
88 + // Support for group fields
89 + if( isset( $field['fields'] ) && is_array( $field['fields'] ) ) {
90 +
91 + foreach( $field['fields'] as $group_field_id => $group_field ) {
92 +
93 + $field['fields'][$group_field_id]['id'] = $group_field_id;
94 +
95 + }
96 +
97 + }
98 +
99 + $meta_box['fields'][$field_id] = $field;
100 +
101 + }
102 +
103 + $meta_box['id'] = $meta_box_id;
104 +
105 + $meta_box['display_cb'] = false;
106 + $meta_box['admin_menu_hook'] = false;
107 + $meta_box['priority'] = 'high'; // Fixes issue with CMB2 2.9.0
108 +
109 + $meta_box['show_on'] = array(
110 + 'key' => 'options-page',
111 + 'value' => array( 'gamipress_settings' ),
112 + );
113 +
114 + $box = new_cmb2_box( $meta_box );
115 +
116 + $box->object_type( 'options-page' );
117 +
118 + $boxes[] = $box;
119 +
120 + }
121 + }
122 +
123 + $tabs[] = array(
124 + 'id' => $section_id,
125 + 'title' => ( ( isset( $section['icon'] ) ) ? '<i class="dashicons ' . $section['icon'] . '"></i>' : '' ) . $section['title'],
126 + 'desc' => '',
127 + 'boxes' => array_keys( $meta_boxes ),
128 + );
129 + }
130 + }
131 +
132 + }
133 +
134 + $minimum_role = gamipress_get_manager_capability();
135 +
136 + try {
137 + // Create the options page
138 + new Cmb2_Metatabs_Options( array(
139 + 'key' => 'gamipress_settings',
140 + 'class' => 'gamipress-page',
141 + 'title' => __( 'Settings', 'gamipress' ),
142 + 'topmenu' => 'gamipress',
143 + 'cols' => 1,
144 + 'boxes' => $boxes,
145 + 'tabs' => $tabs,
146 + 'menuargs' => array(
147 + 'menu_title' => __( 'Settings', 'gamipress' ),
148 + 'capability' => $minimum_role,
149 + 'view_capability' => $minimum_role,
150 + ),
151 + 'savetxt' => __( 'Save Settings', 'gamipress' ),
152 + 'resettxt' => __( 'Reset Settings', 'gamipress' ),
153 + ) );
154 + } catch ( Exception $e ) {
155 +
156 + }
157 +
158 +}
159 +add_action( 'cmb2_admin_init', 'gamipress_register_settings_page', 12 );
160 +
161 +/**
162 + * GamiPress registered settings sections
163 + *
164 + * @since 1.0.1
165 + *
166 + * @return array
167 + */
168 +function gamipress_get_settings_sections() {
169 +
170 + $gamipress_settings_sections = array(
171 + 'general' => array(
172 + 'title' => __( 'General', 'gamipress' ),
173 + 'icon' => 'dashicons-admin-settings',
174 + ),
175 + 'social' => array(
176 + 'title' => __( 'Social', 'gamipress' ),
177 + 'icon' => 'dashicons-share',
178 + ),
179 + 'style' => array(
180 + 'title' => __( 'Style', 'gamipress' ),
181 + 'icon' => 'dashicons-admin-appearance',
182 + ),
183 + 'email' => array(
184 + 'title' => __( 'Emails', 'gamipress' ),
185 + 'icon' => 'dashicons-email-alt',
186 + ),
187 + 'addons' => array(
188 + 'title' => __( 'Add-ons', 'gamipress' ),
189 + 'icon' => 'dashicons-admin-plugins',
190 + ),
191 + );
192 +
193 + if( is_multisite() ) {
194 + $gamipress_settings_sections['network'] = array(
195 + 'title' => __( 'Network', 'gamipress' ),
196 + 'icon' => 'dashicons-networking',
197 + );
198 + }
199 +
200 + return apply_filters( 'gamipress_settings_sections', $gamipress_settings_sections );
201 +
202 +}