PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / 4.0.3
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress v4.0.3
4.17.3 4.17.2 4.17.1 4.17.0 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 / CouponsPage / SettingsPage.php
wp-user-avatar / src / Admin / SettingsPages / Membership / CouponsPage Last commit date
CouponWPListTable.php 4 years ago SettingsPage.php 4 years ago index.php 4 years ago
SettingsPage.php
182 lines
1 <?php
2
3 namespace ProfilePress\Core\Admin\SettingsPages\Membership\CouponsPage;
4
5 use ProfilePress\Core\Admin\SettingsPages\AbstractSettingsPage;
6 use ProfilePress\Core\Membership\Models\Coupon\CouponFactory;
7 use ProfilePress\Custom_Settings_Page_Api;
8
9 class SettingsPage extends AbstractSettingsPage
10 {
11 public $error_bucket;
12
13 /** @var CouponWPListTable */
14 private $couponListTable;
15
16 function __construct()
17 {
18 add_action('ppress_admin_settings_page_coupons', [$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') == 'coupons') {
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_coupon();
31 });
32 }
33 }
34
35 /**
36 * @return string|void
37 */
38 public function save_coupon()
39 {
40 if ( ! isset($_POST['ppress_save_coupon'])) 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 'amount' => esc_html__('Discount', 'wp-user-avatar'),
48 'unit' => esc_html__('Discount', 'wp-user-avatar'),
49 'coupon_application' => esc_html__('Coupon Application', 'wp-user-avatar')
50 ];
51
52 foreach ($required_fields as $field_id => $field_name) {
53 if (empty($_POST[$field_id])) {
54 return $this->error_bucket = sprintf(esc_html__('%s cannot be empty.', 'wp-user-avatar'), $field_name);
55 }
56 }
57
58 $coupon_code = empty($_POST['code']) ? strtoupper(wp_generate_password(8, false)) : sanitize_text_field($_POST['code']);
59
60 $coupon = CouponFactory::fromId(absint(ppressGET_var('id')));
61 $coupon->code = $coupon_code;
62 $coupon->description = sanitize_textarea_field($_POST['description']);
63 $coupon->amount = sanitize_text_field($_POST['amount']);
64 $coupon->unit = sanitize_text_field($_POST['unit']);
65 $coupon->coupon_application = sanitize_text_field($_POST['coupon_application']);
66 $coupon->plan_ids = ppress_clean(ppressPOST_var('plan_ids', [], true), 'absint');
67 $coupon->start_date = sanitize_text_field($_POST['start_date']);
68 $coupon->end_date = sanitize_text_field($_POST['end_date']);
69 $coupon->usage_limit = absint($_POST['usage_limit']);
70
71 $coupon_id = $coupon->save();
72
73 wp_safe_redirect(add_query_arg(['ppress_coupon_action' => 'edit', 'id' => $coupon_id, 'saved' => 'true'], PPRESS_MEMBERSHIP_COUPONS_SETTINGS_PAGE));
74 exit;
75 }
76
77 public function admin_page_title($title = '')
78 {
79 if (ppressGET_var('view') == 'coupons') {
80
81 $title = esc_html__('Coupons', 'wp-user-avatar');
82
83 if (ppressGET_var('ppress_coupon_action') == 'new') {
84 $title = esc_html__('Add a Coupon', 'wp-user-avatar');
85 }
86
87 if (ppressGET_var('ppress_coupon_action') == 'edit') {
88 $title = esc_html__('Edit Coupon', 'wp-user-avatar');
89 }
90 }
91
92 return $title;
93 }
94
95 public static function set_screen($status, $option, $value)
96 {
97 return $value;
98 }
99
100 public function add_options()
101 {
102 if (ppressGET_var('view') == 'coupons') {
103
104 $args = [
105 'label' => esc_html__('Coupons', 'wp-user-avatar'),
106 'default' => 10,
107 'option' => 'coupons_per_page'
108 ];
109
110 add_screen_option('per_page', $args);
111
112 $this->couponListTable = new CouponWPListTable();
113 }
114 }
115
116 public function admin_notices()
117 {
118 if ( ! isset($_GET['saved']) && ! isset($this->error_bucket)) return;
119
120 $status = 'updated';
121 $message = '';
122
123 if ( ! empty($this->error_bucket)) {
124 $message = $this->error_bucket;
125 $status = 'error';
126 }
127
128 if (isset($_GET['saved'])) {
129 $message = esc_html__('Changes saved.', 'wp-user-avatar');
130 }
131
132 printf('<div id="message" class="%s notice is-dismissible"><p>%s</strong></p></div>', $status, $message);
133 }
134
135 public function settings_page_function()
136 {
137 add_action('wp_cspa_main_content_area', [$this, 'admin_settings_page_callback'], 10, 2);
138 add_action('wp_cspa_before_closing_header', [$this, 'add_new_button']);
139
140 $instance = Custom_Settings_Page_Api::instance();
141 $instance->option_name('ppview'); // adds ppview css class to #poststuff
142 $instance->page_header($this->admin_page_title());
143 $instance->build(true);
144 }
145
146 public function add_new_button()
147 {
148 if ( ! isset($_GET['ppress_subp_action'])) {
149 $url = esc_url_raw(add_query_arg('ppress_coupon_action', 'new', self::$parent_menu_url_map['coupons']));
150 echo "<a class=\"add-new-h2\" href=\"$url\">" . esc_html__('Add New Coupon', 'wp-user-avatar') . '</a>';
151 }
152 }
153
154 public function admin_settings_page_callback()
155 {
156 if (in_array(ppressGET_var('ppress_coupon_action'), ['new', 'edit'])) {
157 $this->admin_notices();
158 require_once dirname(dirname(__FILE__)) . '/views/add-edit-coupon.php';
159
160 return;
161 }
162
163 $this->couponListTable->prepare_items(); // has to be here.
164
165 echo '<form method="post">';
166 $this->couponListTable->display();
167 echo '</form>';
168
169 do_action('ppress_coupon_wp_list_table_bottom');
170 }
171
172 public static function get_instance()
173 {
174 static $instance = null;
175
176 if (is_null($instance)) {
177 $instance = new self();
178 }
179
180 return $instance;
181 }
182 }