PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / Admin / SettingsPages / Membership / GroupsPage / SettingsPage.php
wp-user-avatar / src / Admin / SettingsPages / Membership / GroupsPage Last commit date
GroupWPListTable.php 1 year ago SettingsPage.php 1 year ago index.php 3 years ago
SettingsPage.php
187 lines
1 <?php
2
3 namespace ProfilePress\Core\Admin\SettingsPages\Membership\GroupsPage;
4
5 use ProfilePress\Core\Admin\SettingsPages\AbstractSettingsPage;
6 use ProfilePress\Core\Membership\Models\Group\GroupFactory;
7 use ProfilePress\Custom_Settings_Page_Api;
8
9 class SettingsPage extends AbstractSettingsPage
10 {
11 public $error_bucket;
12
13 /** @var GroupWPListTable */
14 private $groupListTable;
15
16 function __construct()
17 {
18 add_action('ppress_admin_settings_page_groups', [$this, 'settings_page_function']);
19 add_filter('ppress_membership_plans_settings_page_title', [$this, 'admin_page_title']);
20 add_action('ppress_membership_plans_settings_page_register', function ($hook) {
21 add_action("load-$hook", array($this, 'add_options'));
22 });
23
24 if (ppressGET_var('page') == PPRESS_MEMBERSHIP_PLANS_SETTINGS_SLUG && ppressGET_var('view') == 'groups') {
25
26 add_filter('set-screen-option', [__CLASS__, 'set_screen'], 10, 3);
27 add_filter('set_screen_option_rules_per_page', [__CLASS__, 'set_screen'], 10, 3);
28
29 add_action('admin_init', function () {
30 $this->save_group();
31 });
32 }
33 }
34
35 /**
36 * @return string|void
37 */
38 public function save_group()
39 {
40 if ( ! isset($_POST['ppress_save_group'])) return;
41
42 check_admin_referer('wp-csa-nonce', 'wp_csa_nonce');
43
44 if ( ! current_user_can('manage_options')) return;
45
46 $required_fields = [
47 'name' => esc_html__('Group Name', 'wp-user-avatar'),
48 'plan_ids' => esc_html__('Membership Plans', 'wp-user-avatar')
49 ];
50
51 foreach ($required_fields as $field_id => $field_name) {
52 if (empty($_POST[$field_id])) {
53 return $this->error_bucket = sprintf(esc_html__('%s cannot be empty.', 'wp-user-avatar'), $field_name);
54 }
55 }
56
57 $group = GroupFactory::fromId(absint(ppressGET_var('id')));
58 $group->name = sanitize_textarea_field($_POST['name']);
59 $group->plan_ids = ppress_clean($_POST['plan_ids']);
60 $group->plans_display_field = sanitize_text_field($_POST['plans_display_field']);
61
62 $group_id = $group->save();
63
64 // doing this because if no change is made and form saved, save() returns false.
65 if ( ! $group_id && $group->exists()) {
66 $group_id = absint(ppressGET_var('id'));
67 }
68
69 wp_safe_redirect(add_query_arg(['ppress_group_action' => 'edit', 'id' => $group_id, 'saved' => 'true'], PPRESS_MEMBERSHIP_GROUPS_SETTINGS_PAGE));
70 exit;
71 }
72
73 public function admin_page_title($title = '')
74 {
75 if (ppressGET_var('view') == 'groups') {
76
77 $title = esc_html__('Groups', 'wp-user-avatar');
78
79 if (ppressGET_var('ppress_group_action') == 'new') {
80 $title = esc_html__('Add a Group', 'wp-user-avatar');
81 }
82
83 if (ppressGET_var('ppress_group_action') == 'edit') {
84 $title = esc_html__('Edit Group', 'wp-user-avatar');
85 }
86 }
87
88 return $title;
89 }
90
91 public static function set_screen($status, $option, $value)
92 {
93 return $value;
94 }
95
96 public function add_options()
97 {
98 if (ppressGET_var('view') == 'groups') {
99
100 $args = [
101 'label' => esc_html__('Groups', 'wp-user-avatar'),
102 'default' => 10,
103 'option' => 'groups_per_page'
104 ];
105
106 add_screen_option('per_page', $args);
107
108 $this->groupListTable = new GroupWPListTable();
109 }
110 }
111
112 public function admin_notices()
113 {
114 if ( ! isset($_GET['saved']) && ! isset($this->error_bucket)) return;
115
116 $status = 'updated';
117 $message = '';
118
119 if ( ! empty($this->error_bucket)) {
120 $message = $this->error_bucket;
121 $status = 'error';
122 }
123
124 if (isset($_GET['saved'])) {
125 $message = esc_html__('Changes saved.', 'wp-user-avatar');
126 }
127
128 printf('<div id="message" class="%s notice is-dismissible"><p>%s</strong></p></div>', $status, $message);
129 }
130
131 public function settings_page_function()
132 {
133 add_filter('wp_cspa_main_content_area', [$this, 'admin_settings_page_callback'], 10, 2);
134 add_action('wp_cspa_before_closing_header', [$this, 'add_new_button']);
135
136 $instance = Custom_Settings_Page_Api::instance();
137 $instance->option_name('ppview'); // adds ppview css class to #poststuff
138 $instance->page_header($this->admin_page_title());
139 $instance->build(true);
140 }
141
142 public function add_new_button()
143 {
144 if ( ! isset($_GET['ppress_subp_action'])) {
145 $url = esc_url_raw(add_query_arg('ppress_group_action', 'new', self::$parent_menu_url_map['groups']));
146 echo "<a class=\"add-new-h2\" href=\"$url\">" . esc_html__('Add New Group', 'wp-user-avatar') . '</a>';
147 }
148 }
149
150 public function admin_settings_page_callback()
151 {
152 if (in_array(ppressGET_var('ppress_group_action'), ['new', 'edit'])) {
153 $this->admin_notices();
154 require_once dirname(dirname(__FILE__)) . '/views/add-edit-plan-group.php';
155
156 return;
157 }
158
159 $this->groupListTable->prepare_items(); // has to be here.
160
161 self::group_info_note();
162
163 echo '<form method="post">';
164 $this->groupListTable->display();
165 echo '</form>';
166
167 do_action('ppress_group_wp_list_table_bottom');
168 }
169
170 public static function group_info_note()
171 {
172 echo '<div class="pp-custom-field-notice"><p>';
173 esc_html_e('Groups let users select a membership plan from a list of plans to purchase during checkout. It also allows members to switch (upgrade & downgrade) between plans in the same group.', 'wp-user-avatar');
174 echo '</p></div>';
175 }
176
177 public static function get_instance()
178 {
179 static $instance = null;
180
181 if (is_null($instance)) {
182 $instance = new self();
183 }
184
185 return $instance;
186 }
187 }