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 / SubscriptionsPage / SettingsPage.php
wp-user-avatar / src / Admin / SettingsPages / Membership / SubscriptionsPage Last commit date
SettingsPage.php 4 years ago SubscriptionWPListTable.php 4 years ago index.php 4 years ago
SettingsPage.php
244 lines
1 <?php
2
3 namespace ProfilePress\Core\Admin\SettingsPages\Membership\SubscriptionsPage;
4
5 use ProfilePress\Core\Admin\SettingsPages\AbstractSettingsPage;
6 use ProfilePress\Core\Membership\Models\Subscription\SubscriptionFactory;
7 use ProfilePress\Core\Membership\Models\Subscription\SubscriptionStatus;
8 use ProfilePress\Custom_Settings_Page_Api;
9 use ProfilePressVendor\Carbon\CarbonImmutable;
10
11 class SettingsPage extends AbstractSettingsPage
12 {
13 public $error_bucket;
14
15 /** @var SubscriptionWPListTable */
16 private $subscriptionListTable;
17
18 function __construct()
19 {
20 add_action('ppress_register_menu_page', [$this, 'register_cpf_settings_page']);
21 add_action('ppress_admin_settings_page_subscriptions', [$this, 'settings_page_function']);
22
23 if (ppressGET_var('page') == PPRESS_MEMBERSHIP_SUBSCRIPTIONS_SETTINGS_SLUG) {
24 add_filter('set-screen-option', [__CLASS__, 'set_screen'], 10, 3);
25 add_filter('set_screen_option_rules_per_page', [__CLASS__, 'set_screen'], 10, 3);
26
27 add_action('admin_init', function () {
28 $this->save_subscription();
29 });
30 }
31 }
32
33 public function default_header_menu()
34 {
35 return 'subscriptions';
36 }
37
38 public function register_cpf_settings_page()
39 {
40 $hook = add_submenu_page(
41 PPRESS_DASHBOARD_SETTINGS_SLUG,
42 $this->admin_page_title() . ' - ProfilePress',
43 esc_html__('Subscriptions', 'wp-user-avatar'),
44 'manage_options',
45 PPRESS_MEMBERSHIP_SUBSCRIPTIONS_SETTINGS_SLUG,
46 array($this, 'admin_page_callback'));
47
48 add_action("load-$hook", array($this, 'add_options'));
49
50 do_action('ppress_membership_subscriptions_settings_page_register', $hook);
51 }
52
53 /**
54 * @return void|string
55 * @throws \Exception
56 */
57 public function save_subscription()
58 {
59 if ( ! isset($_POST['ppress_save_subscription'])) return;
60
61 ppress_verify_nonce();
62
63 if ( ! current_user_can('manage_options')) return;
64
65 $subscription = SubscriptionFactory::fromId(absint(ppressGET_var('id')));
66 $cloned_subscription = clone $subscription;
67 $subscription->created_date = ppress_local_datetime_to_utc(sanitize_text_field($_POST['sub_created_date']));
68 if ( ! $subscription->is_lifetime()) {
69 $expiration_date = CarbonImmutable::createFromFormat('Y-m-d', sanitize_text_field($_POST['sub_expiration_date']), wp_timezone())
70 ->toDateTimeString();
71
72 $subscription->expiration_date = $expiration_date;
73 }
74 $subscription->profile_id = sanitize_text_field($_POST['sub_profile_id']);
75 $subscription->customer_id = absint($_POST['sub_customer_user']);
76
77 if (in_array($_POST['sub_status'], array_keys(SubscriptionStatus::get_all()))) {
78 $subscription->status = sanitize_text_field($_POST['sub_status']);
79 }
80
81 $subscription->initial_amount = ppress_sanitize_amount($_POST['sub_initial_amount']);
82
83 if ( ! empty($_POST['sub_initial_tax'])) {
84 $subscription->initial_tax = ppress_sanitize_amount($_POST['sub_initial_tax']);
85 }
86
87 if ( ! empty($_POST['sub_initial_tax_rate'])) {
88 $subscription->initial_tax_rate = sanitize_text_field($_POST['sub_initial_tax_rate']);
89 }
90
91 if ( ! empty($_POST['sub_recurring_amount'])) {
92 $subscription->recurring_amount = ppress_sanitize_amount($_POST['sub_recurring_amount']);
93 }
94
95 if ( ! empty($_POST['sub_recurring_tax'])) {
96 $subscription->recurring_tax = ppress_sanitize_amount($_POST['sub_recurring_tax']);
97 }
98
99 if ( ! empty($_POST['sub_recurring_tax_rate'])) {
100 $subscription->recurring_tax_rate = ppress_sanitize_amount($_POST['sub_recurring_tax_rate']);
101 }
102
103 $subscription_id = $subscription->save();
104
105 switch ($subscription->status) {
106 case SubscriptionStatus::EXPIRED :
107 $cloned_subscription->expire(true);
108 break;
109 case SubscriptionStatus::CANCELLED :
110 $cloned_subscription->cancel(
111 $cloned_subscription->has_cancellation_requested() === false
112 );
113 break;
114 case SubscriptionStatus::COMPLETED :
115 $cloned_subscription->complete();
116 break;
117 }
118
119 wp_safe_redirect(add_query_arg(['ppress_subscription_action' => 'edit', 'id' => $subscription_id, 'saved' => 'true'], PPRESS_MEMBERSHIP_SUBSCRIPTIONS_SETTINGS_PAGE));
120 exit;
121 }
122
123 public function admin_page_title()
124 {
125 $title = esc_html__('Subscriptions', 'wp-user-avatar');
126
127 if (ppressGET_var('ppress_subscription_action') == 'edit') {
128 $title = esc_html__('Edit Subscription', 'wp-user-avatar');
129 }
130
131 return $title;
132 }
133
134 public static function set_screen($status, $option, $value)
135 {
136 return $value;
137 }
138
139 public function add_options()
140 {
141 $args = [
142 'label' => esc_html__('Subscriptions', 'wp-user-avatar'),
143 'default' => 10,
144 'option' => 'subscriptions_per_page'
145 ];
146
147 add_screen_option('per_page', $args);
148
149 $this->subscriptionListTable = new SubscriptionWPListTable();
150 }
151
152 public function admin_notices()
153 {
154 if ( ! isset($_GET['saved']) && ! isset($this->error_bucket)) return;
155
156 $status = 'updated';
157 $message = '';
158
159 if ( ! empty($this->error_bucket)) {
160 $message = $this->error_bucket;
161 $status = 'error';
162 }
163
164 if (isset($_GET['saved'])) {
165 $message = esc_html__('Changes saved.', 'wp-user-avatar');
166 }
167
168 printf('<div id="message" class="%s notice is-dismissible"><p>%s</strong></p></div>', $status, $message);
169 }
170
171 public function settings_page_function()
172 {
173 add_action('wp_cspa_main_content_area', [$this, 'admin_settings_page_callback'], 10, 2);
174 add_action('wp_cspa_before_closing_header', [$this, 'add_new_button']);
175 add_action('wp_cspa_form_tag', function ($option_name) {
176 if ($option_name == 'ppress_subscriptions') {
177 printf(' action="%s"', ppress_get_current_url_query_string());
178 }
179 });
180
181 add_action('wp_cspa_after_settings_tab', function ($option_name) {
182 if ($option_name == 'ppress_subscriptions' && ppressGET_var('ppress_subscription_action') == 'edit') {
183
184 echo '<div class="notice notice-info">';
185 echo '<p>';
186 echo sprintf(__('%1$sNote%2$s - Be careful modifying details here. For example, changing the gateway subscription ID can result in renewals not being processed. While changing the expiration date will not affect when renewal payments are processed because your payment processor determines when.', 'wp-user-avatar'), '<strong>', '</strong>');
187 echo '</p>';
188 echo '</div>';
189 }
190 });
191
192 $instance = Custom_Settings_Page_Api::instance();
193 if ( ! isset($_GET['ppress_subscription_action'])) {
194 $instance->form_method('get');
195 $instance->remove_nonce_field();
196 }
197 $instance->add_view_classes('ppview');
198 $instance->option_name('ppress_subscriptions');
199 $instance->page_header($this->admin_page_title());
200 $instance->build(true);
201 }
202
203 public function add_new_button()
204 {
205 if (ppressGET_var('ppress_subscription_action') == 'edit') {
206 $url = esc_url_raw(PPRESS_MEMBERSHIP_SUBSCRIPTIONS_SETTINGS_PAGE);
207 echo "<a class=\"add-new-h2\" href=\"$url\">" . esc_html__('Back to Subscriptions', 'wp-user-avatar') . '</a>';
208 }
209 }
210
211 public function admin_settings_page_callback()
212 {
213 if (in_array(ppressGET_var('ppress_subscription_action'), ['new', 'edit'])) {
214 $this->admin_notices();
215 require_once dirname(dirname(__FILE__)) . '/views/subscriptions/add-edit-subscription.php';
216
217 return;
218 }
219
220 $this->subscriptionListTable->prepare_items();
221
222 echo '<input type="hidden" name="page" value="' . PPRESS_MEMBERSHIP_SUBSCRIPTIONS_SETTINGS_SLUG . '" />';
223 echo '<input type="hidden" name="view" value="subscriptions" />';
224 if (isset($_GET['status'])) {
225 echo '<input type="hidden" name="status" value="' . sanitize_text_field($_GET['status']) . '" />';
226 }
227 $this->subscriptionListTable->views();
228 $this->subscriptionListTable->filter_bar();
229 $this->subscriptionListTable->display();
230
231 do_action('ppress_subscription_wp_list_table_bottom');
232 }
233
234 public static function get_instance()
235 {
236 static $instance = null;
237
238 if (is_null($instance)) {
239 $instance = new self();
240 }
241
242 return $instance;
243 }
244 }