Simple Membership - Version 3.8.9

Version Description

  • Added a new feature in the email settings menu to allow disabling of the "Account Upgraded" email notification.
Download this release

Release Info

Developer mra13
Plugin Icon 128x128 Simple Membership
Version 3.8.9
Comparing to
See all releases

Code changes from version 3.8.4 to 3.8.9

Files changed (44) hide show
  1. classes/admin-includes/class.swpm-payment-buttons-list-table.php +2 -1
  2. classes/admin-includes/class.swpm-payments-admin-menu.php +3 -1
  3. classes/admin-includes/class.swpm-payments-list-table.php +223 -192
  4. classes/class.simple-wp-membership.php +33 -4
  5. classes/class.swpm-ajax.php +9 -1
  6. classes/class.swpm-auth.php +3 -2
  7. classes/class.swpm-category-list.php +8 -1
  8. classes/class.swpm-front-registration.php +1 -0
  9. classes/class.swpm-init-time-tasks.php +14 -0
  10. classes/class.swpm-members.php +21 -1
  11. classes/class.swpm-membership-levels.php +4 -2
  12. classes/class.swpm-post-list.php +8 -1
  13. classes/class.swpm-settings.php +8 -2
  14. classes/class.swpm-transactions.php +19 -0
  15. classes/class.swpm-utils-misc.php +30 -1
  16. classes/class.swpm-utils.php +17 -4
  17. ipn/swpm-braintree-buy-now-ipn.php +1 -0
  18. ipn/swpm-smart-checkout-ipn.php +403 -354
  19. ipn/swpm-stripe-buy-now-ipn.php +162 -154
  20. ipn/swpm-stripe-subscription-ipn.php +172 -171
  21. ipn/swpm_handle_pp_ipn.php +290 -315
  22. ipn/swpm_handle_subsc_ipn.php +316 -268
  23. js/jquery.validationEngine-en.js +2 -2
  24. languages/simple-membership-de_DE.mo +0 -0
  25. languages/simple-membership-de_DE.po +3109 -3081
  26. languages/simple-membership.pot +14 -6
  27. lib/stripe-util-functions.php +3 -1
  28. readme.txt +25 -1
  29. simple-wp-membership.php +2 -2
  30. views/admin_add_ons_page.php +4 -0
  31. views/admin_addon_settings.php +3 -2
  32. views/admin_category_list.php +6 -2
  33. views/admin_post_list.php +11 -3
  34. views/payments/admin_create_payment_buttons.php +3 -0
  35. views/payments/payment-gateway/admin_braintree_buy_now_button.php +3 -0
  36. views/payments/payment-gateway/admin_paypal_buy_now_button.php +7 -1
  37. views/payments/payment-gateway/admin_paypal_smart_checkout_button.php +6 -0
  38. views/payments/payment-gateway/admin_paypal_subscription_button.php +8 -1
  39. views/payments/payment-gateway/admin_stripe_buy_now_button.php +6 -1
  40. views/payments/payment-gateway/admin_stripe_subscription_button.php +3 -2
  41. views/payments/payment-gateway/braintree_button_shortcode_view.php +26 -11
  42. views/payments/payment-gateway/paypal_button_shortcode_view.php +11 -2
  43. views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php +16 -3
  44. views/payments/payment-gateway/stripe_button_shortcode_view.php +12 -2
classes/admin-includes/class.swpm-payment-buttons-list-table.php CHANGED
@@ -33,7 +33,8 @@ class SwpmPaymentButtonsListTable extends WP_List_Table {
33
  break;
34
  case 'button_type':
35
  $button_type = get_post_meta($item['ID'], 'button_type', true);
36
- return $button_type;
 
37
  break;
38
  case 'button_shortcode':
39
  $level_id = get_post_meta($item['ID'], 'membership_level_id', true);
33
  break;
34
  case 'button_type':
35
  $button_type = get_post_meta($item['ID'], 'button_type', true);
36
+ $button_name=SwpmMiscUtils::get_button_type_name($button_type);
37
+ return $button_name;
38
  break;
39
  case 'button_shortcode':
40
  $level_id = get_post_meta($item['ID'], 'membership_level_id', true);
classes/admin-includes/class.swpm-payments-admin-menu.php CHANGED
@@ -7,8 +7,10 @@ class SwpmPaymentsAdminMenu {
7
  }
8
 
9
  function handle_main_payments_admin_menu() {
10
-
11
  do_action('swpm_payments_menu_start');
 
 
 
12
 
13
  $output = '';
14
  $tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : '';
7
  }
8
 
9
  function handle_main_payments_admin_menu() {
 
10
  do_action('swpm_payments_menu_start');
11
+
12
+ //Check current_user_can() or die.
13
+ SwpmMiscUtils::check_user_permission_and_is_admin('Main Payments Admin Menu');
14
 
15
  $output = '';
16
  $tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : '';
classes/admin-includes/class.swpm-payments-list-table.php CHANGED
@@ -1,192 +1,223 @@
1
- <?php
2
-
3
- if (!class_exists('WP_List_Table')){
4
- require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
5
- }
6
-
7
- class SWPMPaymentsListTable extends WP_List_Table {
8
-
9
- function __construct() {
10
- global $status, $page;
11
-
12
- //Set parent defaults
13
- parent::__construct(array(
14
- 'singular' => 'transaction', //singular name of the listed records
15
- 'plural' => 'transactions', //plural name of the listed records
16
- 'ajax' => false //does this table support ajax?
17
- ));
18
- }
19
-
20
- function column_default($item, $column_name) {
21
- //Just print the data for that column
22
- return $item[$column_name];
23
- }
24
-
25
- function column_id($item) {
26
-
27
- //Build row actions
28
- $actions = array(
29
- /* 'edit' => sprintf('<a href="admin.php?page=simple_wp_membership_payments&edit_txn=%s">Edit</a>', $item['id']),//TODO - Will be implemented in a future date */
30
- 'delete' => sprintf('<a href="admin.php?page=simple_wp_membership_payments&action=delete_txn&id=%s" onclick="return confirm(\'Are you sure you want to delete this record?\')">Delete</a>', $item['id']),
31
- );
32
-
33
- //Return the refid column contents
34
- return $item['id'] . $this->row_actions($actions);
35
- }
36
-
37
- function column_member_profile($item)
38
- {
39
- global $wpdb;
40
- $members_table_name = $wpdb->prefix . "swpm_members_tbl";
41
- $member_id = $item['member_id'];
42
- $subscr_id = $item['subscr_id'];
43
- $column_value = '';
44
-
45
- if(empty($member_id)){//Lets try to get the member id using unique reference
46
- if(!empty($subscr_id)){
47
- $resultset = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where subscr_id=%s", $subscr_id), OBJECT);
48
- if ($resultset) {
49
- //Found a record
50
- $member_id = $resultset->member_id;
51
- }
52
- }
53
- }
54
-
55
- if(!empty($member_id)){
56
- $profile_page = 'admin.php?page=simple_wp_membership&member_action=edit&member_id='.$member_id;
57
- $column_value = '<a href="'.$profile_page.'">'.SwpmUtils::_('View Profile').'</a>';
58
- }
59
- else{
60
- $column_value = '';
61
- }
62
- return $column_value;
63
- }
64
-
65
- function column_cb($item) {
66
- return sprintf(
67
- '<input type="checkbox" name="%1$s[]" value="%2$s" />',
68
- /* $1%s */ $this->_args['singular'], //Let's reuse singular label (affiliate)
69
- /* $2%s */ $item['id'] //The value of the checkbox should be the record's key/id
70
- );
71
- }
72
-
73
- function get_columns() {
74
- $columns = array(
75
- 'cb' => '<input type="checkbox" />', //Render a checkbox instead of text
76
- 'id' => SwpmUtils::_('Row ID'),
77
- 'email' => SwpmUtils::_('Email Address'),
78
- 'first_name' => SwpmUtils::_('First Name'),
79
- 'last_name' => SwpmUtils::_('Last Name'),
80
- 'member_profile' => SwpmUtils::_('Member Profile'),
81
- 'txn_date' => SwpmUtils::_('Date'),
82
- 'txn_id' => SwpmUtils::_('Transaction ID'),
83
- 'subscr_id' => SwpmUtils::_('Subscriber ID'),
84
- 'payment_amount' => SwpmUtils::_('Amount'),
85
- 'membership_level' => SwpmUtils::_('Membership Level')
86
- );
87
- return $columns;
88
- }
89
-
90
- function get_sortable_columns() {
91
- $sortable_columns = array(
92
- 'id' => array('id', false), //true means its already sorted
93
- 'membership_level' => array('membership_level', false),
94
- 'last_name' => array('last_name', false),
95
- 'txn_date' => array('txn_date', false),
96
- );
97
- return $sortable_columns;
98
- }
99
-
100
- function get_bulk_actions() {
101
- $actions = array(
102
- 'delete' => SwpmUtils::_('Delete')
103
- );
104
- return $actions;
105
- }
106
-
107
- function process_bulk_action() {
108
- //Detect when a bulk action is being triggered...
109
- if ('delete' === $this->current_action()) {
110
- $records_to_delete = array_map( 'sanitize_text_field', $_GET['transaction'] );
111
- if (empty($records_to_delete)) {
112
- echo '<div id="message" class="updated fade"><p>Error! You need to select multiple records to perform a bulk action!</p></div>';
113
- return;
114
- }
115
- foreach ($records_to_delete as $record_id) {
116
- if( !is_numeric( $record_id )){
117
- wp_die('Error! ID must be numeric.');
118
- }
119
- global $wpdb;
120
- $payments_table_name = $wpdb->prefix . "swpm_payments_tbl";
121
- $query_string = "DELETE FROM $payments_table_name WHERE id='$record_id'";
122
- $results = $wpdb->query($query_string);
123
- }
124
- echo '<div id="message" class="updated fade"><p>Selected records deleted successfully!</p></div>';
125
- }
126
- }
127
-
128
- function delete_record($record_id) {
129
- global $wpdb;
130
- $payments_table_name = $wpdb->prefix . "swpm_payments_tbl";
131
- $delete_command = "DELETE FROM " . $payments_table_name . " WHERE id = '$record_id'";
132
- $result = $wpdb->query($delete_command);
133
- }
134
-
135
- function prepare_items() {
136
- global $wpdb;
137
- $payments_table_name = $wpdb->prefix . "swpm_payments_tbl";
138
-
139
- // Lets decide how many records per page to show
140
- $per_page = apply_filters('swpm_transactions_menu_items_per_page', 50);
141
-
142
- $columns = $this->get_columns();
143
- $hidden = array();
144
- $sortable = $this->get_sortable_columns();
145
-
146
- $this->_column_headers = array($columns, $hidden, $sortable);
147
-
148
- $this->process_bulk_action();
149
-
150
- //This checks for sorting input. Read and sanitize the inputs
151
- $orderby_column = isset($_GET['orderby']) ? sanitize_text_field($_GET['orderby']) : '';
152
- $sort_order = isset($_GET['order']) ? sanitize_text_field($_GET['order']) : '';
153
- if (empty($orderby_column)) {
154
- $orderby_column = "id";
155
- $sort_order = "DESC";
156
- }
157
- $orderby_column = SwpmUtils::sanitize_value_by_array($orderby_column, $sortable);
158
- $sort_order = SwpmUtils::sanitize_value_by_array($sort_order, array('DESC' => '1', 'ASC' => '1'));
159
-
160
- //pagination requirement
161
- $current_page = $this->get_pagenum();
162
-
163
- if (isset($_POST['swpm_txn_search'])) {//Only load the searched records
164
- $search_term = trim(sanitize_text_field($_POST['swpm_txn_search']));
165
- $prepare_query = $wpdb->prepare("SELECT * FROM " . $payments_table_name . " WHERE `email` LIKE '%%%s%%' OR `txn_id` LIKE '%%%s%%' OR `first_name` LIKE '%%%s%%' OR `last_name` LIKE '%%%s%%'", $search_term, $search_term, $search_term, $search_term);
166
- $data = $wpdb->get_results($prepare_query, ARRAY_A);
167
- $total_items = count($data);
168
- } else {//Load all data in an optimized way (so it is only loading data for the current page)
169
- $query = "SELECT COUNT(*) FROM $payments_table_name";
170
- $total_items = $wpdb->get_var($query);
171
-
172
- //pagination requirement
173
- $query = "SELECT * FROM $payments_table_name ORDER BY $orderby_column $sort_order";
174
-
175
- $offset = ($current_page - 1) * $per_page;
176
- $query.=' LIMIT ' . (int) $offset . ',' . (int) $per_page;
177
-
178
- $data = $wpdb->get_results($query, ARRAY_A);
179
- }
180
-
181
- // Now we add our *sorted* data to the items property, where it can be used by the rest of the class.
182
- $this->items = $data;
183
-
184
- //pagination requirement
185
- $this->set_pagination_args(array(
186
- 'total_items' => $total_items, //WE have to calculate the total number of items
187
- 'per_page' => $per_page, //WE have to determine how many items to show on a page
188
- 'total_pages' => ceil($total_items / $per_page) //WE have to calculate the total number of pages
189
- ));
190
- }
191
-
192
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! class_exists( 'WP_List_Table' ) ) {
4
+ require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
5
+ }
6
+
7
+ class SWPMPaymentsListTable extends WP_List_Table {
8
+
9
+ public function __construct() {
10
+ global $status, $page;
11
+
12
+ // Set parent defaults
13
+ parent::__construct(
14
+ array(
15
+ 'singular' => 'transaction', // singular name of the listed records
16
+ 'plural' => 'transactions', // plural name of the listed records
17
+ 'ajax' => false, // does this table support ajax?
18
+ )
19
+ );
20
+ }
21
+
22
+ function column_default( $item, $column_name ) {
23
+ $val = $item[ $column_name ];
24
+ switch ( $column_name ) {
25
+ case 'payment_amount':
26
+ $val = SwpmMiscUtils::format_money( $val );
27
+ $val = apply_filters( 'swpm_transactions_page_amount_display', $val, $item );
28
+ break;
29
+ default:
30
+ break;
31
+ }
32
+ return $val;
33
+ }
34
+
35
+ function column_id( $item ) {
36
+
37
+ // Build row actions
38
+ $actions = array(
39
+ /* 'edit' => sprintf('<a href="admin.php?page=simple_wp_membership_payments&edit_txn=%s">Edit</a>', $item['id']),//TODO - Will be implemented in a future date */
40
+ 'delete' => sprintf( '<a href="admin.php?page=simple_wp_membership_payments&action=delete_txn&id=%s" onclick="return confirm(\'Are you sure you want to delete this record?\')">Delete</a>', $item['id'] ),
41
+ );
42
+
43
+ // Return the refid column contents
44
+ return $item['id'] . $this->row_actions( $actions );
45
+ }
46
+
47
+ function column_member_profile( $item ) {
48
+ global $wpdb;
49
+ $member_id = $item['member_id'];
50
+ $subscr_id = $item['subscr_id'];
51
+ $column_value = '';
52
+
53
+ if ( empty( $member_id ) ) {// Lets try to get the member id using unique reference
54
+ if ( ! empty( $subscr_id ) ) {
55
+ $resultset = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_members_tbl where subscr_id=%s", $subscr_id ), OBJECT );
56
+ if ( $resultset ) {
57
+ // Found a record
58
+ $member_id = $resultset->member_id;
59
+ }
60
+ }
61
+ }
62
+
63
+ if ( ! empty( $member_id ) ) {
64
+ $profile_page = 'admin.php?page=simple_wp_membership&member_action=edit&member_id=' . $member_id;
65
+ $column_value = '<a href="' . $profile_page . '">' . SwpmUtils::_( 'View Profile' ) . '</a>';
66
+ } else {
67
+ $column_value = '';
68
+ }
69
+ return $column_value;
70
+ }
71
+
72
+ function column_cb( $item ) {
73
+ return sprintf(
74
+ '<input type="checkbox" name="%1$s[]" value="%2$s" />',
75
+ /* $1%s */ $this->_args['singular'], // Let's reuse singular label (affiliate)
76
+ /* $2%s */ $item['id'] // The value of the checkbox should be the record's key/id
77
+ );
78
+ }
79
+
80
+ function get_columns() {
81
+ $columns = array(
82
+ 'cb' => '<input type="checkbox" />', // Render a checkbox instead of text
83
+ 'id' => SwpmUtils::_( 'Row ID' ),
84
+ 'email' => SwpmUtils::_( 'Email Address' ),
85
+ 'first_name' => SwpmUtils::_( 'First Name' ),
86
+ 'last_name' => SwpmUtils::_( 'Last Name' ),
87
+ 'member_profile' => SwpmUtils::_( 'Member Profile' ),
88
+ 'txn_date' => SwpmUtils::_( 'Date' ),
89
+ 'txn_id' => SwpmUtils::_( 'Transaction ID' ),
90
+ 'subscr_id' => SwpmUtils::_( 'Subscriber ID' ),
91
+ 'payment_amount' => SwpmUtils::_( 'Amount' ),
92
+ 'membership_level' => SwpmUtils::_( 'Membership Level' ),
93
+ );
94
+ return $columns;
95
+ }
96
+
97
+ function get_sortable_columns() {
98
+ $sortable_columns = array(
99
+ 'id' => array( 'id', false ), // true means its already sorted
100
+ 'membership_level' => array( 'membership_level', false ),
101
+ 'last_name' => array( 'last_name', false ),
102
+ 'txn_date' => array( 'txn_date', false ),
103
+ );
104
+ return $sortable_columns;
105
+ }
106
+
107
+ function get_bulk_actions() {
108
+ $actions = array(
109
+ 'delete' => SwpmUtils::_( 'Delete' ),
110
+ );
111
+ return $actions;
112
+ }
113
+
114
+ function process_bulk_action() {
115
+ // Detect when a bulk action is being triggered...
116
+ if ( 'delete' === $this->current_action() ) {
117
+ $records_to_delete = array_map( 'sanitize_text_field', $_GET['transaction'] );
118
+ if ( empty( $records_to_delete ) ) {
119
+ echo '<div id="message" class="updated fade"><p>Error! You need to select multiple records to perform a bulk action!</p></div>';
120
+ return;
121
+ }
122
+ foreach ( $records_to_delete as $record_id ) {
123
+ if ( ! is_numeric( $record_id ) ) {
124
+ wp_die( 'Error! ID must be numeric.' );
125
+ }
126
+ global $wpdb;
127
+ $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'swpm_payments_tbl WHERE id = %d', $record_id ) );
128
+ }
129
+ echo '<div id="message" class="updated fade"><p>Selected records deleted successfully!</p></div>';
130
+ }
131
+ }
132
+
133
+ function delete_record( $record_id ) {
134
+ global $wpdb;
135
+ $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'swpm_payments_tbl WHERE id = %d', $record_id ) );
136
+ // also delete record from swpm_transactions CPT
137
+ $trans = get_posts(
138
+ array(
139
+ 'meta_key' => 'db_row_id',
140
+ 'meta_value' => $record_id,
141
+ 'posts_per_page' => 1,
142
+ 'offset' => 0,
143
+ 'post_type' => 'swpm_transactions',
144
+ )
145
+ );
146
+ wp_reset_postdata();
147
+ if ( empty( $trans ) ) {
148
+ return;
149
+ }
150
+ $trans = $trans[0];
151
+ wp_delete_post( $trans->ID, true );
152
+
153
+ }
154
+
155
+ function prepare_items() {
156
+ global $wpdb;
157
+
158
+ // Lets decide how many records per page to show
159
+ $per_page = apply_filters( 'swpm_transactions_menu_items_per_page', 50 );
160
+
161
+ $columns = $this->get_columns();
162
+ $hidden = array();
163
+ $sortable = $this->get_sortable_columns();
164
+
165
+ $this->_column_headers = array( $columns, $hidden, $sortable );
166
+
167
+ $this->process_bulk_action();
168
+
169
+ // This checks for sorting input. Read and sanitize the inputs
170
+ $orderby_column = isset( $_GET['orderby'] ) ? sanitize_text_field( $_GET['orderby'] ) : '';
171
+ $sort_order = isset( $_GET['order'] ) ? sanitize_text_field( $_GET['order'] ) : '';
172
+ if ( empty( $orderby_column ) ) {
173
+ $orderby_column = 'id';
174
+ $sort_order = 'DESC';
175
+ }
176
+ $orderby_column = SwpmUtils::sanitize_value_by_array( $orderby_column, $sortable );
177
+ $sort_order = SwpmUtils::sanitize_value_by_array(
178
+ $sort_order,
179
+ array(
180
+ 'DESC' => '1',
181
+ 'ASC' => '1',
182
+ )
183
+ );
184
+
185
+ // pagination requirement
186
+ $current_page = $this->get_pagenum();
187
+
188
+ $search_term = filter_input( INPUT_POST, 'swpm_txn_search', FILTER_SANITIZE_STRING );
189
+ $search_term = trim( $search_term );
190
+
191
+ if ( $search_term ) {// Only load the searched records.
192
+ $like = $wpdb->esc_like( $search_term );
193
+ $like = '%' . $like . '%';
194
+ $prepare_query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_payments_tbl WHERE `email` LIKE %s OR `txn_id` LIKE %s OR `first_name` LIKE %s OR `last_name` LIKE %s", $like, $like, $like, $like );
195
+ $data = $wpdb->get_results( $prepare_query, ARRAY_A );
196
+ $total_items = count( $data );
197
+ } else { // Load all data in an optimized way (so it is only loading data for the current page)
198
+ $query = "SELECT COUNT(*) FROM {$wpdb->prefix}swpm_payments_tbl";
199
+ $total_items = $wpdb->get_var( $query );
200
+
201
+ // pagination requirement
202
+ $query = "SELECT * FROM {$wpdb->prefix}swpm_payments_tbl ORDER BY $orderby_column $sort_order";
203
+
204
+ $offset = ( $current_page - 1 ) * $per_page;
205
+ $query .= ' LIMIT ' . (int) $offset . ',' . (int) $per_page;
206
+
207
+ $data = $wpdb->get_results( $query, ARRAY_A );
208
+ }
209
+
210
+ // Now we add our *sorted* data to the items property, where it can be used by the rest of the class.
211
+ $this->items = $data;
212
+
213
+ // pagination requirement
214
+ $this->set_pagination_args(
215
+ array(
216
+ 'total_items' => $total_items, // WE have to calculate the total number of items
217
+ 'per_page' => $per_page, // WE have to determine how many items to show on a page
218
+ 'total_pages' => ceil( $total_items / $per_page ), // WE have to calculate the total number of pages
219
+ )
220
+ );
221
+ }
222
+
223
+ }
classes/class.simple-wp-membership.php CHANGED
@@ -65,7 +65,8 @@ class SimpleWpMembership {
65
  add_action('load-toplevel_page_simple_wp_membership', array(&$this, 'admin_library'));
66
  add_action('load-wp-membership_page_simple_wp_membership_levels', array(&$this, 'admin_library'));
67
 
68
- add_action('wp_authenticate', array(&$this, 'wp_authenticate_handler'), 1, 2);
 
69
  add_action('wp_logout', array(&$this, 'wp_logout'));
70
  add_action('swpm_logout', array(&$this, 'swpm_do_user_logout'));
71
  add_action('user_register', array(&$this, 'swpm_handle_wp_user_registration'));
@@ -93,6 +94,13 @@ class SimpleWpMembership {
93
 
94
  function wp_password_reset_hook($user, $pass) {
95
  $swpm_user = SwpmMemberUtils::get_user_by_user_name($user->user_login);
 
 
 
 
 
 
 
96
  $swpm_id = $swpm_user->member_id;
97
  if (!empty($swpm_id)) {
98
  $password_hash = SwpmUtils::encrypt_password($pass);
@@ -187,7 +195,8 @@ class SimpleWpMembership {
187
  //Initialize the settings menu hooks.
188
  $swpm_settings_obj->init_config_hooks();
189
  $addon_saved = filter_input(INPUT_POST, 'swpm-addon-settings');
190
- if (!empty($addon_saved)) {
 
191
  do_action('swpm_addon_settings_save');
192
  }
193
  }
@@ -292,6 +301,17 @@ class SimpleWpMembership {
292
  $auth->login_to_swpm_using_wp_user($user);
293
  }
294
 
 
 
 
 
 
 
 
 
 
 
 
295
  public function wp_authenticate_handler($username, $password) {
296
 
297
  $auth = SwpmAuth::get_instance();
@@ -640,7 +660,7 @@ class SimpleWpMembership {
640
  wp_register_script('swpm.validationEngine-localization', SIMPLE_WP_MEMBERSHIP_URL . '/js/swpm.validationEngine-localization.js', array('jquery'));
641
  }
642
 
643
- public static function enqueue_validation_scripts($add_params = false) {
644
  //Localization for jquery.validationEngine
645
  //This array will be merged with $.validationEngineLanguage.allRules object from jquery.validationEngine-en.js file
646
  $loc_data = array(
@@ -673,13 +693,22 @@ class SimpleWpMembership {
673
  ),
674
  );
675
 
676
- if ($add_params !== false) {
 
 
677
  // Additional parameters should be added to the array, replacing existing ones
 
 
 
 
 
678
  $loc_data = array_replace_recursive($add_params, $loc_data);
679
  }
680
 
681
  wp_localize_script('swpm.validationEngine-localization', 'swpm_validationEngine_localization', $loc_data);
682
 
 
 
683
  wp_enqueue_style('validationEngine.jquery');
684
  wp_enqueue_script('jquery.validationEngine');
685
  wp_enqueue_script('jquery.validationEngine-en');
65
  add_action('load-toplevel_page_simple_wp_membership', array(&$this, 'admin_library'));
66
  add_action('load-wp-membership_page_simple_wp_membership_levels', array(&$this, 'admin_library'));
67
 
68
+ add_action('wp_login', array(&$this, 'wp_login_hook_handler'), 10, 2);
69
+ add_action('wp_authenticate', array(&$this, 'wp_authenticate_handler'), 1, 2);
70
  add_action('wp_logout', array(&$this, 'wp_logout'));
71
  add_action('swpm_logout', array(&$this, 'swpm_do_user_logout'));
72
  add_action('user_register', array(&$this, 'swpm_handle_wp_user_registration'));
94
 
95
  function wp_password_reset_hook($user, $pass) {
96
  $swpm_user = SwpmMemberUtils::get_user_by_user_name($user->user_login);
97
+
98
+ //Check if SWPM user entry exists
99
+ if (empty($swpm_user)) {
100
+ SwpmLog::log_auth_debug("wp_password_reset_hook() - SWPM user not found for username: '" . $user->user_login ."'. This is OK, assuming that this user was created directly in WP Users menu (not using SWPM).", true);
101
+ return;
102
+ }
103
+
104
  $swpm_id = $swpm_user->member_id;
105
  if (!empty($swpm_id)) {
106
  $password_hash = SwpmUtils::encrypt_password($pass);
195
  //Initialize the settings menu hooks.
196
  $swpm_settings_obj->init_config_hooks();
197
  $addon_saved = filter_input(INPUT_POST, 'swpm-addon-settings');
198
+ if (!empty($addon_saved) && current_user_can('manage_options')) {
199
+ check_admin_referer('swpm_addon_settings_section', 'swpm_addon_settings_section_save_settings');
200
  do_action('swpm_addon_settings_save');
201
  }
202
  }
301
  $auth->login_to_swpm_using_wp_user($user);
302
  }
303
 
304
+ /* Used to log the user into SWPM system using the wp_login hook. Some social plugins use this hook to handle the login */
305
+ public function wp_login_hook_handler($user_login, $user){
306
+ SwpmLog::log_auth_debug('wp_login hook triggered. Username: ' . $user_login, true);
307
+ $auth = SwpmAuth::get_instance();
308
+ if ($auth->is_logged_in()) {
309
+ //User is already logged-in. Nothing to do.
310
+ return;
311
+ }
312
+ $auth->login_to_swpm_using_wp_user($user);
313
+ }
314
+
315
  public function wp_authenticate_handler($username, $password) {
316
 
317
  $auth = SwpmAuth::get_instance();
660
  wp_register_script('swpm.validationEngine-localization', SIMPLE_WP_MEMBERSHIP_URL . '/js/swpm.validationEngine-localization.js', array('jquery'));
661
  }
662
 
663
+ public static function enqueue_validation_scripts($add_params = array()) {
664
  //Localization for jquery.validationEngine
665
  //This array will be merged with $.validationEngineLanguage.allRules object from jquery.validationEngine-en.js file
666
  $loc_data = array(
693
  ),
694
  );
695
 
696
+ $nonce=wp_create_nonce( 'swpm-rego-form-ajax-nonce' );
697
+
698
+ if ($add_params) {
699
  // Additional parameters should be added to the array, replacing existing ones
700
+ if (isset($add_params['ajaxEmailCall'])) {
701
+ if (isset($add_params['ajaxEmailCall']['extraData'])) {
702
+ $add_params['ajaxEmailCall']['extraData'].='&nonce='.$nonce;
703
+ }
704
+ }
705
  $loc_data = array_replace_recursive($add_params, $loc_data);
706
  }
707
 
708
  wp_localize_script('swpm.validationEngine-localization', 'swpm_validationEngine_localization', $loc_data);
709
 
710
+ wp_localize_script('jquery.validationEngine-en', 'swpmRegForm', array('nonce' => $nonce));
711
+
712
  wp_enqueue_style('validationEngine.jquery');
713
  wp_enqueue_script('jquery.validationEngine');
714
  wp_enqueue_script('jquery.validationEngine-en');
classes/class.swpm-ajax.php CHANGED
@@ -10,6 +10,10 @@ class SwpmAjax {
10
  $field_value = filter_input(INPUT_GET, 'fieldValue');
11
  $field_id = filter_input(INPUT_GET, 'fieldId');
12
  $member_id = filter_input(INPUT_GET, 'member_id');
 
 
 
 
13
  if (!is_email($field_value)){
14
  echo '[ "' . $field_id . '",false, "'.SwpmUtils::_('Invalid Email Address').'" ]' ;
15
  exit;
@@ -18,7 +22,7 @@ class SwpmAjax {
18
  $query = $wpdb->prepare("SELECT member_id FROM $table WHERE email = %s AND user_name != ''", $field_value);
19
  $db_id = $wpdb->get_var($query) ;
20
  $exists = ($db_id > 0) && $db_id != $member_id;
21
- echo '[ "' . $field_id . (($exists) ? '",false, "&chi;&nbsp;'.SwpmUtils::_('Aready taken').'"]' : '",true, "&radic;&nbsp;Available"]');
22
  exit;
23
  }
24
 
@@ -26,6 +30,10 @@ class SwpmAjax {
26
  global $wpdb;
27
  $field_value = filter_input(INPUT_GET, 'fieldValue');
28
  $field_id = filter_input(INPUT_GET, 'fieldId');
 
 
 
 
29
  if (!SwpmMemberUtils::is_valid_user_name($field_value)){
30
  echo '[ "' . $field_id . '",false,"&chi;&nbsp;'. SwpmUtils::_('Name contains invalid character'). '"]';
31
  exit;
10
  $field_value = filter_input(INPUT_GET, 'fieldValue');
11
  $field_id = filter_input(INPUT_GET, 'fieldId');
12
  $member_id = filter_input(INPUT_GET, 'member_id');
13
+ if (!check_ajax_referer( 'swpm-rego-form-ajax-nonce', 'nonce', false )) {
14
+ echo '[ "' . $field_id . '",false, "'.SwpmUtils::_('Nonce check failed. Please reload page.').'" ]' ;
15
+ exit;
16
+ }
17
  if (!is_email($field_value)){
18
  echo '[ "' . $field_id . '",false, "'.SwpmUtils::_('Invalid Email Address').'" ]' ;
19
  exit;
22
  $query = $wpdb->prepare("SELECT member_id FROM $table WHERE email = %s AND user_name != ''", $field_value);
23
  $db_id = $wpdb->get_var($query) ;
24
  $exists = ($db_id > 0) && $db_id != $member_id;
25
+ echo '[ "' . $field_id . (($exists) ? '",false, "&chi;&nbsp;'.SwpmUtils::_('Aready taken').'"]' : '",true, "&radic;&nbsp;'.SwpmUtils::_('Available'). '"]');
26
  exit;
27
  }
28
 
30
  global $wpdb;
31
  $field_value = filter_input(INPUT_GET, 'fieldValue');
32
  $field_id = filter_input(INPUT_GET, 'fieldId');
33
+ if (!check_ajax_referer( 'swpm-rego-form-ajax-nonce', 'nonce', false )) {
34
+ echo '[ "' . $field_id . '",false, "'.SwpmUtils::_('Nonce check failed. Please reload page.').'" ]' ;
35
+ exit;
36
+ }
37
  if (!SwpmMemberUtils::is_valid_user_name($field_value)){
38
  echo '[ "' . $field_id . '",false,"&chi;&nbsp;'. SwpmUtils::_('Name contains invalid character'). '"]';
39
  exit;
classes/class.swpm-auth.php CHANGED
@@ -385,8 +385,9 @@ class SwpmAuth {
385
  ; //Use live API key
386
  }
387
  //Include the Stripe library.
388
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
389
- \Stripe\Stripe::setApiKey($secret_key);
 
390
  // Let's try to cancel subscription
391
  try {
392
  $sub = \Stripe\Subscription::retrieve($subscr_id);
385
  ; //Use live API key
386
  }
387
  //Include the Stripe library.
388
+ if ( ! class_exists( '\Stripe\Stripe' ) ) {
389
+ include(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
390
+ } \Stripe\Stripe::setApiKey($secret_key);
391
  // Let's try to cancel subscription
392
  try {
393
  $sub = \Stripe\Subscription::retrieve($subscr_id);
classes/class.swpm-category-list.php CHANGED
@@ -71,6 +71,13 @@ class SwpmCategoryList extends WP_List_Table {
71
  //Check we are on the admin end and user has management permission
72
  SwpmMiscUtils::check_user_permission_and_is_admin('category protection update');
73
 
 
 
 
 
 
 
 
74
  $selected = filter_input(INPUT_POST, 'membership_level_id');
75
  $selected_level_id = empty($selected) ? 1 : $selected;
76
  $category = ($selected_level_id == 1) ?
@@ -89,7 +96,7 @@ class SwpmCategoryList extends WP_List_Table {
89
  $filtered = filter_input_array(INPUT_POST, $args);
90
  $ids_in_page = $filtered['ids_in_page'];
91
  $category->remove($ids_in_page, 'category')->apply($ids, 'category')->save();
92
- $message = array('succeeded' => true, 'message' => '<p>' . SwpmUtils::_('Category protection updated!') . '</p>');
93
  SwpmTransfer::get_instance()->set('status', $message);
94
  }
95
 
71
  //Check we are on the admin end and user has management permission
72
  SwpmMiscUtils::check_user_permission_and_is_admin('category protection update');
73
 
74
+ //Check nonce
75
+ $swpm_category_prot_update_nonce = filter_input(INPUT_POST, 'swpm_category_prot_update_nonce');
76
+ if (!wp_verify_nonce($swpm_category_prot_update_nonce, 'swpm_category_prot_update_nonce_action')) {
77
+ //Nonce check failed.
78
+ wp_die(SwpmUtils::_("Error! Nonce security verification failed for Category Protection Update action. Clear cache and try again."));
79
+ }
80
+
81
  $selected = filter_input(INPUT_POST, 'membership_level_id');
82
  $selected_level_id = empty($selected) ? 1 : $selected;
83
  $category = ($selected_level_id == 1) ?
96
  $filtered = filter_input_array(INPUT_POST, $args);
97
  $ids_in_page = $filtered['ids_in_page'];
98
  $category->remove($ids_in_page, 'category')->apply($ids, 'category')->save();
99
+ $message = array('succeeded' => true, 'message' => '<p class="swpm-green-box">' . SwpmUtils::_('Category protection updated!') . '</p>');
100
  SwpmTransfer::get_instance()->set('status', $message);
101
  }
102
 
classes/class.swpm-front-registration.php CHANGED
@@ -283,6 +283,7 @@ class SwpmFrontRegistration extends SwpmRegistration {
283
  //Update the data in the swpm database.
284
  $swpm_id = $auth->get('member_id');
285
  //SwpmLog::log_simple_debug("Updating member profile data with SWPM ID: " . $swpm_id, true);
 
286
  $wpdb->update($wpdb->prefix . "swpm_members_tbl", $member_info, array('member_id' => $swpm_id));
287
  $auth->reload_user_data();//Reload user data after update so the profile page reflects the new data.
288
 
283
  //Update the data in the swpm database.
284
  $swpm_id = $auth->get('member_id');
285
  //SwpmLog::log_simple_debug("Updating member profile data with SWPM ID: " . $swpm_id, true);
286
+ $member_info = array_filter($member_info);//Remove any null values.
287
  $wpdb->update($wpdb->prefix . "swpm_members_tbl", $member_info, array('member_id' => $swpm_id));
288
  $auth->reload_user_data();//Reload user data after update so the profile page reflects the new data.
289
 
classes/class.swpm-init-time-tasks.php CHANGED
@@ -95,6 +95,20 @@ class SwpmInitTimeTasks {
95
  'hierarchical' => false,
96
  'supports' => array('title', 'editor')
97
  ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  }
99
 
100
  private function verify_and_delete_account() {
95
  'hierarchical' => false,
96
  'supports' => array('title', 'editor')
97
  ));
98
+
99
+ //Transactions will be stored using this CPT in parallel with swpm_payments_tbl DB table
100
+ $args = array(
101
+ 'supports' => array(''),
102
+ 'hierarchical' => false,
103
+ 'public' => false,
104
+ 'show_ui' => false,
105
+ 'can_export' => false,
106
+ 'has_archive' => false,
107
+ 'exclude_from_search' => true,
108
+ 'publicly_queryable' => false,
109
+ 'capability_type' => 'post',
110
+ );
111
+ register_post_type('swpm_transactions', $args);
112
  }
113
 
114
  private function verify_and_delete_account() {
classes/class.swpm-members.php CHANGED
@@ -409,6 +409,13 @@ class SwpmMembers extends WP_List_Table {
409
  echo '<div id="poststuff"><div id="post-body">';
410
 
411
  if (isset($_REQUEST['swpm_bulk_change_level_process'])) {
 
 
 
 
 
 
 
412
  $errorMsg = "";
413
  $from_level_id = sanitize_text_field($_REQUEST["swpm_bulk_change_level_from"]);
414
  $to_level_id = sanitize_text_field($_REQUEST['swpm_bulk_change_level_to']);
@@ -439,6 +446,13 @@ class SwpmMembers extends WP_List_Table {
439
  }
440
 
441
  if (isset($_REQUEST['swpm_bulk_user_start_date_change_process'])) {
 
 
 
 
 
 
 
442
  $errorMsg = "";
443
  $level_id = sanitize_text_field($_REQUEST["swpm_bulk_user_start_date_change_level"]);
444
  $new_date = sanitize_text_field($_REQUEST['swpm_bulk_user_start_date_change_date']);
@@ -477,6 +491,8 @@ class SwpmMembers extends WP_List_Table {
477
  <?php SwpmUtils::e('You can use the following option to bulk update the membership level of users who belong to the level you select below.'); ?>
478
  </p>
479
  <form method="post" action="">
 
 
480
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
481
  <tr valign="top">
482
  <td width="25%" align="left">
@@ -524,7 +540,8 @@ class SwpmMembers extends WP_List_Table {
524
  <?php SwpmUtils::e('You can manually set a specific access starts date value of all members who belong to a particular level using the following option.'); ?>
525
  </p>
526
  <form method="post" action="">
527
-
 
528
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
529
  <tr valign="top">
530
  <td width="25%" align="left">
@@ -578,6 +595,9 @@ class SwpmMembers extends WP_List_Table {
578
  function handle_main_members_admin_menu() {
579
  do_action('swpm_members_menu_start');
580
 
 
 
 
581
  $action = filter_input(INPUT_GET, 'member_action');
582
  $action = empty($action) ? filter_input(INPUT_POST, 'action') : $action;
583
  $selected = $action;
409
  echo '<div id="poststuff"><div id="post-body">';
410
 
411
  if (isset($_REQUEST['swpm_bulk_change_level_process'])) {
412
+ //Check nonce
413
+ $swpm_bulk_change_level_nonce = filter_input(INPUT_POST, 'swpm_bulk_change_level_nonce');
414
+ if (!wp_verify_nonce($swpm_bulk_change_level_nonce, 'swpm_bulk_change_level_nonce_action')) {
415
+ //Nonce check failed.
416
+ wp_die(SwpmUtils::_("Error! Nonce security verification failed for Bulk Change Membership Level action. Clear cache and try again."));
417
+ }
418
+
419
  $errorMsg = "";
420
  $from_level_id = sanitize_text_field($_REQUEST["swpm_bulk_change_level_from"]);
421
  $to_level_id = sanitize_text_field($_REQUEST['swpm_bulk_change_level_to']);
446
  }
447
 
448
  if (isset($_REQUEST['swpm_bulk_user_start_date_change_process'])) {
449
+ //Check nonce
450
+ $swpm_bulk_start_date_nonce = filter_input(INPUT_POST, 'swpm_bulk_start_date_nonce');
451
+ if (!wp_verify_nonce($swpm_bulk_start_date_nonce, 'swpm_bulk_start_date_nonce_action')) {
452
+ //Nonce check failed.
453
+ wp_die(SwpmUtils::_("Error! Nonce security verification failed for Bulk Change Access Starts Date action. Clear cache and try again."));
454
+ }
455
+
456
  $errorMsg = "";
457
  $level_id = sanitize_text_field($_REQUEST["swpm_bulk_user_start_date_change_level"]);
458
  $new_date = sanitize_text_field($_REQUEST['swpm_bulk_user_start_date_change_date']);
491
  <?php SwpmUtils::e('You can use the following option to bulk update the membership level of users who belong to the level you select below.'); ?>
492
  </p>
493
  <form method="post" action="">
494
+ <input type="hidden" name="swpm_bulk_change_level_nonce" value="<?php echo wp_create_nonce('swpm_bulk_change_level_nonce_action'); ?>" />
495
+
496
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
497
  <tr valign="top">
498
  <td width="25%" align="left">
540
  <?php SwpmUtils::e('You can manually set a specific access starts date value of all members who belong to a particular level using the following option.'); ?>
541
  </p>
542
  <form method="post" action="">
543
+ <input type="hidden" name="swpm_bulk_start_date_nonce" value="<?php echo wp_create_nonce('swpm_bulk_start_date_nonce_action'); ?>" />
544
+
545
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
546
  <tr valign="top">
547
  <td width="25%" align="left">
595
  function handle_main_members_admin_menu() {
596
  do_action('swpm_members_menu_start');
597
 
598
+ //Check current_user_can() or die.
599
+ SwpmMiscUtils::check_user_permission_and_is_admin('Main Members Admin Menu');
600
+
601
  $action = filter_input(INPUT_GET, 'member_action');
602
  $action = empty($action) ? filter_input(INPUT_POST, 'action') : $action;
603
  $selected = $action;
classes/class.swpm-membership-levels.php CHANGED
@@ -246,10 +246,12 @@ class SwpmMembershipLevels extends WP_List_Table {
246
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_post_list.php');
247
  }
248
 
249
- function handle_main_membership_level_admin_menu(){
250
-
251
  do_action( 'swpm_membership_level_menu_start' );
252
 
 
 
 
253
  $level_action = filter_input(INPUT_GET, 'level_action');
254
  $action = $level_action;
255
  $selected= $action;
246
  include_once(SIMPLE_WP_MEMBERSHIP_PATH . 'views/admin_post_list.php');
247
  }
248
 
249
+ function handle_main_membership_level_admin_menu(){
 
250
  do_action( 'swpm_membership_level_menu_start' );
251
 
252
+ //Check current_user_can() or die.
253
+ SwpmMiscUtils::check_user_permission_and_is_admin('Main Membership Level Admin Menu');
254
+
255
  $level_action = filter_input(INPUT_GET, 'level_action');
256
  $action = $level_action;
257
  $selected= $action;
classes/class.swpm-post-list.php CHANGED
@@ -102,6 +102,13 @@ class SwpmPostList extends WP_List_Table {
102
  //Check we are on the admin end and user has management permission
103
  SwpmMiscUtils::check_user_permission_and_is_admin('post protection update');
104
 
 
 
 
 
 
 
 
105
  $type = filter_input(INPUT_POST, 'list_type');
106
 
107
  $selected = filter_input(INPUT_POST, 'membership_level_id');
@@ -122,7 +129,7 @@ class SwpmPostList extends WP_List_Table {
122
  $filtered = filter_input_array(INPUT_POST, $args);
123
  $ids_in_page = $filtered['ids_in_page'];
124
  $post->remove($ids_in_page, $type)->apply($ids, $type)->save();
125
- $message = array('succeeded' => true, 'message' => '<p>' . SwpmUtils::_('Protection settings updated!') . '</p>');
126
  SwpmTransfer::get_instance()->set('status', $message);
127
  }
128
 
102
  //Check we are on the admin end and user has management permission
103
  SwpmMiscUtils::check_user_permission_and_is_admin('post protection update');
104
 
105
+ //Check nonce
106
+ $swpm_post_prot_update_nonce = filter_input(INPUT_POST, 'swpm_post_prot_update_nonce');
107
+ if (!wp_verify_nonce($swpm_post_prot_update_nonce, 'swpm_post_prot_update_nonce_action')) {
108
+ //Nonce check failed.
109
+ wp_die(SwpmUtils::_("Error! Nonce security verification failed for Post Protection Update action. Clear cache and try again."));
110
+ }
111
+
112
  $type = filter_input(INPUT_POST, 'list_type');
113
 
114
  $selected = filter_input(INPUT_POST, 'membership_level_id');
129
  $filtered = filter_input_array(INPUT_POST, $args);
130
  $ids_in_page = $filtered['ids_in_page'];
131
  $post->remove($ids_in_page, $type)->apply($ids, $type)->save();
132
+ $message = array('succeeded' => true, 'message' => '<p class="swpm-green-box">' . SwpmUtils::_('Protection settings updated!') . '</p>');
133
  SwpmTransfer::get_instance()->set('status', $message);
134
  }
135
 
classes/class.swpm-settings.php CHANGED
@@ -160,7 +160,9 @@ class SwpmSettings {
160
  add_settings_section('upgrade-email-settings', SwpmUtils::_(' Email Settings (Account Upgrade Notification)'), array(&$this, 'upgrade_email_settings_callback'), 'simple_wp_membership_settings');
161
  add_settings_field('upgrade-complete-mail-subject', SwpmUtils::_('Email Subject'), array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'upgrade-email-settings', array('item' => 'upgrade-complete-mail-subject', 'message' => ''));
162
  add_settings_field('upgrade-complete-mail-body', SwpmUtils::_('Email Body'), array(&$this, 'textarea_callback'), 'simple_wp_membership_settings', 'upgrade-email-settings', array('item' => 'upgrade-complete-mail-body', 'message' => ''));
163
-
 
 
164
  //Bulk account activate and notify email settings.
165
  add_settings_section('bulk-activate-email-settings', SwpmUtils::_(' Email Settings (Bulk Account Activate Notification)'), array(&$this, 'bulk_activate_email_settings_callback'), 'simple_wp_membership_settings');
166
  add_settings_field('bulk-activate-notify-mail-subject', SwpmUtils::_('Email Subject'), array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'bulk-activate-email-settings', array('item' => 'bulk-activate-notify-mail-subject', 'message' => ''));
@@ -474,6 +476,7 @@ class SwpmSettings {
474
 
475
  $output['upgrade-complete-mail-subject'] = sanitize_text_field($input['upgrade-complete-mail-subject']);
476
  $output['upgrade-complete-mail-body'] = wp_kses_data(force_balance_tags($input['upgrade-complete-mail-body']));
 
477
 
478
  $output['bulk-activate-notify-mail-subject'] = sanitize_text_field($input['bulk-activate-notify-mail-subject']);
479
  $output['bulk-activate-notify-mail-body'] = wp_kses_data(force_balance_tags($input['bulk-activate-notify-mail-body']));
@@ -550,8 +553,11 @@ class SwpmSettings {
550
  }
551
 
552
  public function handle_main_settings_admin_menu() {
553
-
554
  do_action('swpm_settings_menu_start');
 
 
 
 
555
  ?>
556
  <div class="wrap swpm-admin-menu-wrap"><!-- start wrap -->
557
 
160
  add_settings_section('upgrade-email-settings', SwpmUtils::_(' Email Settings (Account Upgrade Notification)'), array(&$this, 'upgrade_email_settings_callback'), 'simple_wp_membership_settings');
161
  add_settings_field('upgrade-complete-mail-subject', SwpmUtils::_('Email Subject'), array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'upgrade-email-settings', array('item' => 'upgrade-complete-mail-subject', 'message' => ''));
162
  add_settings_field('upgrade-complete-mail-body', SwpmUtils::_('Email Body'), array(&$this, 'textarea_callback'), 'simple_wp_membership_settings', 'upgrade-email-settings', array('item' => 'upgrade-complete-mail-body', 'message' => ''));
163
+ add_settings_field('disable-email-after-upgrade', SwpmUtils::_('Disable Email Notification After Upgrade'), array(&$this, 'checkbox_callback'), 'simple_wp_membership_settings', 'upgrade-email-settings', array('item' => 'disable-email-after-upgrade',
164
+ 'message' => SwpmUtils::_('You can use this option to disable the email notification that gets sent to the members when they make a payment for upgrade or renewal.')));
165
+
166
  //Bulk account activate and notify email settings.
167
  add_settings_section('bulk-activate-email-settings', SwpmUtils::_(' Email Settings (Bulk Account Activate Notification)'), array(&$this, 'bulk_activate_email_settings_callback'), 'simple_wp_membership_settings');
168
  add_settings_field('bulk-activate-notify-mail-subject', SwpmUtils::_('Email Subject'), array(&$this, 'textfield_callback'), 'simple_wp_membership_settings', 'bulk-activate-email-settings', array('item' => 'bulk-activate-notify-mail-subject', 'message' => ''));
476
 
477
  $output['upgrade-complete-mail-subject'] = sanitize_text_field($input['upgrade-complete-mail-subject']);
478
  $output['upgrade-complete-mail-body'] = wp_kses_data(force_balance_tags($input['upgrade-complete-mail-body']));
479
+ $output['disable-email-after-upgrade'] = isset($input['disable-email-after-upgrade']) ? esc_attr($input['disable-email-after-upgrade']) : "";
480
 
481
  $output['bulk-activate-notify-mail-subject'] = sanitize_text_field($input['bulk-activate-notify-mail-subject']);
482
  $output['bulk-activate-notify-mail-body'] = wp_kses_data(force_balance_tags($input['bulk-activate-notify-mail-body']));
553
  }
554
 
555
  public function handle_main_settings_admin_menu() {
 
556
  do_action('swpm_settings_menu_start');
557
+
558
+ //Check current_user_can() or die.
559
+ SwpmMiscUtils::check_user_permission_and_is_admin('Main Settings Menu');
560
+
561
  ?>
562
  <div class="wrap swpm-admin-menu-wrap"><!-- start wrap -->
563
 
classes/class.swpm-transactions.php CHANGED
@@ -30,6 +30,25 @@ class SwpmTransactions {
30
 
31
  $txn_data = array_filter($txn_data);//Remove any null values.
32
  $wpdb->insert($wpdb->prefix . "swpm_payments_tbl", $txn_data);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
  }
35
 
30
 
31
  $txn_data = array_filter($txn_data);//Remove any null values.
32
  $wpdb->insert($wpdb->prefix . "swpm_payments_tbl", $txn_data);
33
+
34
+ $db_row_id=$wpdb->insert_id;
35
+
36
+ //let's also store transactions data in swpm_transactions CPT
37
+ $post = array();
38
+ $post[ 'post_title' ] = '';
39
+ $post[ 'post_status' ] = 'publish';
40
+ $post[ 'content' ] = '';
41
+ $post[ 'post_type' ] = 'swpm_transactions';
42
+
43
+ $post_id=wp_insert_post($post);
44
+
45
+ update_post_meta($post_id,'db_row_id',$db_row_id);
46
+
47
+ foreach ($txn_data as $key=>$value) {
48
+ update_post_meta($post_id,$key,$value);
49
+ }
50
+
51
+ do_action('swpm_txn_record_saved',$txn_data,$db_row_id,$post_id);
52
 
53
  }
54
 
classes/class.swpm-utils-misc.php CHANGED
@@ -412,7 +412,7 @@ class SwpmMiscUtils {
412
  "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia",
413
  "Fiji", "Finland", "France", "Gabon", "Gambia, The", "Georgia", "Germany",
414
  "Ghana", "Greece", "Grenada", "Guatemala", "Guinea", "Guinea-Bissau",
415
- "Guyana", "Haiti", "Honduras", "Hungary", "Iceland", "India", "Indonesia",
416
  "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan",
417
  "Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait",
418
  "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya",
@@ -467,4 +467,33 @@ class SwpmMiscUtils {
467
  return $countries_dropdown;
468
  }
469
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
470
  }
412
  "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia",
413
  "Fiji", "Finland", "France", "Gabon", "Gambia, The", "Georgia", "Germany",
414
  "Ghana", "Greece", "Grenada", "Guatemala", "Guinea", "Guinea-Bissau",
415
+ "Guyana", "Haiti", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia",
416
  "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan",
417
  "Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait",
418
  "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya",
467
  return $countries_dropdown;
468
  }
469
 
470
+ public static function get_button_type_name($button_type)
471
+ {
472
+ $btnTypesNames = array(
473
+ 'pp_buy_now' => SwpmUtils::_('PayPal Buy Now'),
474
+ 'pp_subscription' => SwpmUtils::_('PayPal Subscription'),
475
+ 'pp_smart_checkout' => SwpmUtils::_('PayPal Smart Checkout'),
476
+ 'stripe_buy_now' => SwpmUtils::_('Stripe Buy Now'),
477
+ 'stripe_subscription' => SwpmUtils::_('Stripe Subscription'),
478
+ 'braintree_buy_now' => SwpmUtils::_('Braintree Buy Now')
479
+ );
480
+
481
+ $button_type_name = $button_type;
482
+
483
+ if (array_key_exists($button_type, $btnTypesNames)) {
484
+ $button_type_name = $btnTypesNames[$button_type];
485
+ }
486
+
487
+ return $button_type_name;
488
+ }
489
+
490
+ public static function format_money($amount, $currency = false)
491
+ {
492
+ $formatted = number_format($amount, 2);
493
+ if ($currency) {
494
+ $formatted .= ' ' . $currency;
495
+ }
496
+ return $formatted;
497
+ }
498
+
499
  }
classes/class.swpm-utils.php CHANGED
@@ -92,7 +92,7 @@ abstract class SwpmUtils {
92
  public static function get_formatted_expiry_date($start_date, $subscription_duration, $subscription_duration_type) {
93
  if ($subscription_duration_type == SwpmMembershipLevel::FIXED_DATE) {
94
  //Membership will expire after a fixed date.
95
- return SwpmUtils::get_formatted_date_according_to_wp_settings($subscription_duration);
96
  }
97
 
98
  $expires = self::calculate_subscription_period_days($subscription_duration, $subscription_duration_type);
@@ -102,8 +102,7 @@ abstract class SwpmUtils {
102
  }
103
 
104
  //Membership is set to a duration expiry settings.
105
-
106
- return date(get_option('date_format'), strtotime($start_date . ' ' . $expires . ' days'));
107
  }
108
 
109
  public static function gender_dropdown($selected = 'not specified') {
@@ -330,7 +329,6 @@ abstract class SwpmUtils {
330
  /*
331
  * Formats the given date value according to the WP date format settings. This function is useful for displaying a human readable date value to the user.
332
  */
333
-
334
  public static function get_formatted_date_according_to_wp_settings($date) {
335
  $date_format = get_option('date_format');
336
  if (empty($date_format)) {
@@ -343,6 +341,21 @@ abstract class SwpmUtils {
343
  return $formatted_date;
344
  }
345
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
346
  public static function swpm_username_exists($user_name) {
347
  global $wpdb;
348
  $member_table = $wpdb->prefix . 'swpm_members_tbl';
92
  public static function get_formatted_expiry_date($start_date, $subscription_duration, $subscription_duration_type) {
93
  if ($subscription_duration_type == SwpmMembershipLevel::FIXED_DATE) {
94
  //Membership will expire after a fixed date.
95
+ return SwpmUtils::get_formatted_and_translated_date_according_to_wp_settings($subscription_duration);
96
  }
97
 
98
  $expires = self::calculate_subscription_period_days($subscription_duration, $subscription_duration_type);
102
  }
103
 
104
  //Membership is set to a duration expiry settings.
105
+ return date_i18n(get_option('date_format'), strtotime($start_date . ' ' . $expires . ' days'));
 
106
  }
107
 
108
  public static function gender_dropdown($selected = 'not specified') {
329
  /*
330
  * Formats the given date value according to the WP date format settings. This function is useful for displaying a human readable date value to the user.
331
  */
 
332
  public static function get_formatted_date_according_to_wp_settings($date) {
333
  $date_format = get_option('date_format');
334
  if (empty($date_format)) {
341
  return $formatted_date;
342
  }
343
 
344
+ /*
345
+ * Formats and Translates the given date value according to the WP date format settings. This function is useful for displaying a human readable date value to the user.
346
+ * The $date argument value must be in nromal date format (2025-01-15). The function will use strtotime() function to convert it to unix time then use it.
347
+ */
348
+ public static function get_formatted_and_translated_date_according_to_wp_settings($date) {
349
+ $date_format = get_option('date_format');
350
+ if (empty($date_format)) {
351
+ //WordPress's date form settings is not set. Lets set a default format.
352
+ $date_format = 'Y-m-d';
353
+ }
354
+
355
+ $formatted_translated_date = date_i18n( $date_format, strtotime( $date ) );
356
+ return $formatted_translated_date;
357
+ }
358
+
359
  public static function swpm_username_exists($user_name) {
360
  global $wpdb;
361
  $member_table = $wpdb->prefix . 'swpm_members_tbl';
ipn/swpm-braintree-buy-now-ipn.php CHANGED
@@ -32,6 +32,7 @@ class SwpmBraintreeBuyNowIpnHandler {
32
 
33
  //Validate and verify some of the main values.
34
  $true_payment_amount = get_post_meta($button_id, 'payment_amount', true);
 
35
  if ($payment_amount != $true_payment_amount) {
36
  //Fatal error. Payment amount may have been tampered with.
37
  $error_msg = 'Fatal Error! Received payment amount (' . $payment_amount . ') does not match with the original amount (' . $true_payment_amount . ')';
32
 
33
  //Validate and verify some of the main values.
34
  $true_payment_amount = get_post_meta($button_id, 'payment_amount', true);
35
+ $true_payment_amount = apply_filters('swpm_payment_amount_filter',$true_payment_amount,$button_id);
36
  if ($payment_amount != $true_payment_amount) {
37
  //Fatal error. Payment amount may have been tampered with.
38
  $error_msg = 'Fatal Error! Received payment amount (' . $payment_amount . ') does not match with the original amount (' . $true_payment_amount . ')';
ipn/swpm-smart-checkout-ipn.php CHANGED
@@ -1,361 +1,410 @@
1
  <?php
2
 
3
- include_once('swpm_handle_subsc_ipn.php');
4
-
5
- class swpm_smart_checkout_ipn_handler {
6
-
7
- var $last_error; // holds the last error encountered
8
- var $ipn_log = false; // bool: log IPN results to text file?
9
- var $ipn_log_file; // filename of the IPN log
10
- var $ipn_response; // holds the IPN response from paypal
11
- var $ipn_data = array(); // array contains the POST values for IPN
12
- var $fields = array(); // array holds the fields to submit to paypal
13
- var $sandbox_mode = false;
14
-
15
- function __construct() {
16
- $this->paypal_url = 'https://www.paypal.com/cgi-bin/webscr';
17
- $this->last_error = '';
18
- $this->ipn_log_file = 'ipn_handle_debug_swpm.log';
19
- $this->ipn_response = '';
20
- }
21
-
22
- function swpm_validate_and_create_membership() {
23
- // Check Product Name , Price , Currency , Receivers email ,
24
- $error_msg = "";
25
-
26
- // Read the IPN and validate
27
- $gross_total = $this->ipn_data['mc_gross'];
28
- $transaction_type = $this->ipn_data['txn_type'];
29
- $txn_id = $this->ipn_data['txn_id'];
30
- $payment_status = $this->ipn_data['payment_status'];
31
-
32
- //Check payment status
33
- if (!empty($payment_status)) {
34
- if ($payment_status == "Denied") {
35
- $this->debug_log("Payment status for this transaction is DENIED. You denied the transaction... most likely a cancellation of an eCheque. Nothing to do here.", false);
36
- return false;
37
- }
38
- if ($payment_status == "Canceled_Reversal") {
39
- $this->debug_log("This is a dispute closed notification in your favour. The plugin will not do anyting.", false);
40
- return true;
41
- }
42
- if ($payment_status != "Completed" && $payment_status != "Processed" && $payment_status != "Refunded" && $payment_status != "Reversed") {
43
- $error_msg .= 'Funds have not been cleared yet. Transaction will be processed when the funds clear!';
44
- $this->debug_log($error_msg, false);
45
- $this->debug_log(json_encode($this->ipn_data), false);
46
- return false;
47
- }
48
- }
49
-
50
- //Check txn type
51
- if ($transaction_type == "new_case") {
52
- $this->debug_log('This is a dispute case. Nothing to do here.', true);
53
- return true;
54
- }
55
-
56
- $custom = urldecode($this->ipn_data['custom']);
57
- $this->ipn_data['custom'] = $custom;
58
- $customvariables = SwpmTransactions::parse_custom_var($custom);
59
-
60
- //Handle refunds
61
- if ($gross_total < 0) {
62
- // This is a refund or reversal
63
- $this->debug_log('This is a refund notification. Refund amount: ' . $gross_total, true);
64
- swpm_handle_subsc_cancel_stand_alone($this->ipn_data, true);
65
- return true;
66
- }
67
- if (isset($this->ipn_data['reason_code']) && $this->ipn_data['reason_code'] == 'refund') {
68
- $this->debug_log('This is a refund notification. Refund amount: ' . $gross_total, true);
69
- swpm_handle_subsc_cancel_stand_alone($this->ipn_data, true);
70
- return true;
71
- }
72
-
73
- if (($transaction_type == "subscr_signup")) {
74
- $this->debug_log('Subscription signup IPN received... (handled by the subscription IPN handler)', true);
75
- // Code to handle the signup IPN for subscription
76
- $subsc_ref = $customvariables['subsc_ref'];
77
-
78
- if (!empty($subsc_ref)) {
79
- $this->debug_log('Found a membership level ID. Creating member account...', true);
80
- $swpm_id = $customvariables['swpm_id'];
81
- swpm_handle_subsc_signup_stand_alone($this->ipn_data, $subsc_ref, $this->ipn_data['subscr_id'], $swpm_id);
82
- //Handle customized subscription signup
83
- }
84
- return true;
85
- } else if (($transaction_type == "subscr_cancel") || ($transaction_type == "subscr_eot") || ($transaction_type == "subscr_failed")) {
86
- // Code to handle the IPN for subscription cancellation
87
- $this->debug_log('Subscription cancellation IPN received... (handled by the subscription IPN handler)', true);
88
- swpm_handle_subsc_cancel_stand_alone($this->ipn_data);
89
- return true;
90
- } else {
91
- $cart_items = array();
92
- $this->debug_log('Transaction Type: Buy Now/Subscribe', true);
93
- $item_number = $this->ipn_data['item_number'];
94
- $item_name = $this->ipn_data['item_name'];
95
- $quantity = $this->ipn_data['quantity'];
96
- $mc_gross = $this->ipn_data['mc_gross'];
97
- $mc_currency = $this->ipn_data['mc_currency'];
98
-
99
- $current_item = array(
100
- 'item_number' => $item_number,
101
- 'item_name' => $item_name,
102
- 'quantity' => $quantity,
103
- 'mc_gross' => $mc_gross,
104
- 'mc_currency' => $mc_currency,
105
- );
106
-
107
- array_push($cart_items, $current_item);
108
- }
109
-
110
- $counter = 0;
111
- foreach ($cart_items as $current_cart_item) {
112
- $cart_item_data_num = $current_cart_item['item_number'];
113
- $cart_item_data_name = trim($current_cart_item['item_name']);
114
- $cart_item_data_quantity = $current_cart_item['quantity'];
115
- $cart_item_data_total = $current_cart_item['mc_gross'];
116
- $cart_item_data_currency = $current_cart_item['mc_currency'];
117
- if (empty($cart_item_data_quantity)) {
118
- $cart_item_data_quantity = 1;
119
- }
120
- $this->debug_log('Item Number: ' . $cart_item_data_num, true);
121
- $this->debug_log('Item Name: ' . $cart_item_data_name, true);
122
- $this->debug_log('Item Quantity: ' . $cart_item_data_quantity, true);
123
- $this->debug_log('Item Total: ' . $cart_item_data_total, true);
124
- $this->debug_log('Item Currency: ' . $cart_item_data_currency, true);
125
-
126
- //Get the button id
127
- $pp_hosted_button = false;
128
- $button_id = $cart_item_data_num; //Button id is the item number.
129
- $membership_level_id = get_post_meta($button_id, 'membership_level_id', true);
130
- if (!SwpmUtils::membership_level_id_exists($membership_level_id)) {
131
- $this->debug_log('This payment button was not created in the plugin. This is a paypal hosted button.', true);
132
- $pp_hosted_button = true;
133
- }
134
-
135
- //Price check
136
- $check_price = true;
137
- $msg = "";
138
- $msg = apply_filters('swpm_before_price_check_filter', $msg, $current_cart_item);
139
- if (!empty($msg) && $msg == "price-check-override") {//This filter allows an extension to do a customized version of price check (if needed)
140
- $check_price = false;
141
- $this->debug_log('Price and currency check has been overridden by an addon/extension.', true);
142
- }
143
- if ($check_price && !$pp_hosted_button) {
144
- //Check according to buy now payment or subscription payment.
145
- $button_type = get_post_meta($button_id, 'button_type', true);
146
- if ($button_type == 'pp_smart_checkout') {//This is a PayPal Smart Checkout type button
147
- $expected_amount = (get_post_meta($button_id, 'payment_amount', true)) * $cart_item_data_quantity;
148
- $expected_amount = round($expected_amount, 2);
149
- $received_amount = $cart_item_data_total;
150
- } else {
151
- $this->debug_log('Error! Unexpected button type: ' . $button_type, false);
152
- return false;
153
- }
154
-
155
- if ($received_amount < $expected_amount) {
156
- //Error! amount received is less than expected. This is invalid.
157
- $this->debug_log('Expected amount: ' . $expected_amount, true);
158
- $this->debug_log('Received amount: ' . $received_amount, true);
159
- $this->debug_log('Price check failed. Amount received is less than the amount expected. This payment will not be processed.', false);
160
- return false;
161
- }
162
- }
163
-
164
- //*** Handle Membership Payment ***
165
- //--------------------------------------------------------------------------------------
166
- // ========= Need to find the (level ID) in the custom variable ============
167
- $subsc_ref = $customvariables['subsc_ref']; //Membership level ID
168
- $this->debug_log('Membership payment paid for membership level ID: ' . $subsc_ref, true);
169
- if (!empty($subsc_ref)) {
170
- $swpm_id = "";
171
- if (isset($customvariables['swpm_id'])) {
172
- $swpm_id = $customvariables['swpm_id'];
173
- }
174
- if ($transaction_type == "smart_checkout") {
175
- $this->debug_log('Transaction type: web_accept. Creating member account...', true);
176
- swpm_handle_subsc_signup_stand_alone($this->ipn_data, $subsc_ref, $this->ipn_data['txn_id'], $swpm_id);
177
- }
178
- } else {
179
- $this->debug_log('Membership level ID is missing in the payment notification! Cannot process this notification.', false);
180
- }
181
- //== End of Membership payment handling ==
182
- $counter++;
183
- }
184
-
185
- /* * * Do Post payment operation and cleanup ** */
186
- //Save the transaction data
187
- $this->debug_log('Saving transaction data to the database table.', true);
188
- $this->ipn_data['gateway'] = 'pp_smart_checkout';
189
- $this->ipn_data['status'] = $this->ipn_data['payment_status'];
190
- SwpmTransactions::save_txn_record($this->ipn_data, $cart_items);
191
- $this->debug_log('Transaction data saved.', true);
192
-
193
- //Trigger the PayPal IPN processed action hook (so other plugins can can listen for this event).
194
- do_action('swpm_pp_smart_checkout_ipn_processed', $this->ipn_data);
195
-
196
- do_action('swpm_payment_ipn_processed', $this->ipn_data);
197
-
198
- return true;
199
- }
200
-
201
- function create_ipn_from_smart_checkout($data) {
202
- $ipn['custom'] = $data['custom_field'];
203
- $ipn['item_number'] = $data['button_id'];
204
- $ipn['item_name'] = $data['item_name'];
205
- $ipn['pay_id'] = $data['id'];
206
- $ipn['create_time'] = $data['create_time'];
207
- $ipn['txn_id'] = $data['transactions'][0]['related_resources'][0]['sale']['id'];
208
- $ipn['reason_code'] = !empty($data['transactions'][0]['related_resources'][0]['sale']['reason_code']) ? $data['transactions'][0]['related_resources'][0]['sale']['reason_code'] : '';
209
- $ipn['txn_type'] = 'smart_checkout';
210
- $ipn['payment_status'] = ucfirst($data['transactions'][0]['related_resources'][0]['sale']['state']);
211
- $ipn['transaction_subject'] = '';
212
- $ipn['mc_currency'] = $data['transactions'][0]['amount']['currency'];
213
- $ipn['mc_gross'] = $data['transactions'][0]['amount']['total'];
214
- $ipn['quantity'] = 1;
215
- $ipn['receiver_email'] = get_option('cart_paypal_email');
216
- //customer info
217
- $ipn['first_name'] = $data['payer']['payer_info']['first_name'];
218
- $ipn['last_name'] = $data['payer']['payer_info']['last_name'];
219
- $ipn['payer_email'] = $data['payer']['payer_info']['email'];
220
- $ipn['address_street'] = $data['payer']['payer_info']['shipping_address']['line1'];
221
- $ipn['address_city'] = $data['payer']['payer_info']['shipping_address']['city'];
222
- $ipn['address_state'] = $data['payer']['payer_info']['shipping_address']['state'];
223
- $ipn['address_zip'] = $data['payer']['payer_info']['shipping_address']['postal_code'];
224
- $ipn['address_country'] = $data['payer']['payer_info']['shipping_address']['country_code'];
225
-
226
- $this->ipn_data = $ipn;
227
- return true;
228
- }
229
-
230
- function validate_ipn_smart_checkout() {
231
-
232
- if ($this->sandbox_mode) {
233
- $client_id = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_test_id', true);
234
- $secret = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_test_sec', true);
235
- $api_base = 'https://api.sandbox.paypal.com';
236
- } else {
237
- $client_id = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_live_id', true);
238
- $secret = get_post_meta($this->ipn_data['item_number'], 'pp_smart_checkout_live_sec', true);
239
- $api_base = 'https://api.paypal.com';
240
- }
241
-
242
- $wp_request_headers = array(
243
- 'Accept' => 'application/json',
244
- 'Authorization' => 'Basic ' . base64_encode($client_id . ':' . $secret),
245
- );
246
-
247
- $res = wp_remote_request(
248
- $api_base . '/v1/oauth2/token', array(
249
- 'method' => 'POST',
250
- 'headers' => $wp_request_headers,
251
- 'body' => 'grant_type=client_credentials',
252
- )
253
- );
254
-
255
- $code = wp_remote_retrieve_response_code($res);
256
-
257
- if ($code !== 200) {
258
- //Some error occured.
259
- $body = wp_remote_retrieve_body($res);
260
- return sprintf(__('Error occured during payment verification. Error code: %d. Message: %s', "simple-membership"), $code, $body);
261
- }
262
-
263
- $body = wp_remote_retrieve_body($res);
264
- $body = json_decode($body);
265
-
266
- $token = $body->access_token;
267
-
268
- $wp_request_headers = array(
269
- 'Accept' => 'application/json',
270
- 'Authorization' => 'Bearer ' . $token,
271
- );
272
-
273
- $res = wp_remote_request(
274
- $api_base . '/v1/payments/payment/' . $this->ipn_data['pay_id'], array(
275
- 'method' => 'GET',
276
- 'headers' => $wp_request_headers,
277
- )
278
- );
279
-
280
- $code = wp_remote_retrieve_response_code($res);
281
-
282
- if ($code !== 200) {
283
- //Some error occured.
284
- $body = wp_remote_retrieve_body($res);
285
- return sprintf(__('Error occured during payment verification. Error code: %d. Message: %s', "simple-membership"), $code, $body);
286
- }
287
-
288
- $body = wp_remote_retrieve_body($res);
289
- $body = json_decode($body);
290
-
291
- //check payment details
292
- if ($body->transactions[0]->amount->total === $this->ipn_data['mc_gross'] &&
293
- $body->transactions[0]->amount->currency === $this->ipn_data['mc_currency']) {
294
- //payment is valid
295
- return true;
296
- } else {
297
- //payment is invalid
298
- return sprintf(__("Payment check failed: invalid amount received. Expected %s %s, got %s %s.", "simple-membership"), $this->ipn_data['mc_gross'], $this->ipn_data['mc_currency'], $body->transactions[0]->amount->total, $body->transactions[0]->amount->currency);
299
- }
300
- }
301
-
302
- function debug_log($message, $success, $end = false) {
303
- SwpmLog::log_simple_debug($message, $success, $end);
304
- }
 
 
 
 
 
 
 
305
 
306
  }
307
 
308
  function swpm_pp_smart_checkout_ajax_hanlder() {
309
- // Start of IPN handling (script execution)
310
-
311
- if (isset($_POST['swpm_pp_smart_checkout_payment_data'])) {
312
- $data = $_POST['swpm_pp_smart_checkout_payment_data'];
313
- }
314
- if (empty($data)) {
315
- wp_send_json(array('success' => false, 'errMsg' => __('Empty payment data received.', "simple-membership")));
316
- }
317
-
318
- $ipn_handler_instance = new swpm_smart_checkout_ipn_handler();
319
-
320
- $ipn_data_success = $ipn_handler_instance->create_ipn_from_smart_checkout($data);
321
-
322
- if ($ipn_data_success !== true) {
323
- //error occured during IPN array creation
324
- wp_send_json(array('success' => false, 'errMsg' => $ipn_data_success));
325
- }
326
-
327
- $settings = SwpmSettings::get_instance();
328
- $debug_enabled = $settings->get_value('enable-debug');
329
- if (!empty($debug_enabled)) {//debug is enabled in the system
330
- $debug_log = "log.txt"; // Debug log file name
331
- $ipn_handler_instance->ipn_log = true;
332
- $ipn_handler_instance->ipn_log_file = $debug_log;
333
- }
334
-
335
- $sandbox_enabled = $settings->get_value('enable-sandbox-testing');
336
- if (!empty($sandbox_enabled)) { // Sandbox testing enabled
337
- $ipn_handler_instance->paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
338
- $ipn_handler_instance->sandbox_mode = true;
339
- }
340
-
341
- $ipn_handler_instance->debug_log('Paypal Smart Checkout Class Initiated by ' . $_SERVER['REMOTE_ADDR'], true);
342
-
343
- // Validate the IPN
344
- $res = $ipn_handler_instance->validate_ipn_smart_checkout();
345
-
346
- if ($res !== true) {
347
- wp_send_json(array('success' => false, 'errMsg' => $res));
348
- }
349
-
350
-
351
- $ipn_handler_instance->debug_log('Creating product Information to send.', true);
352
-
353
- if (!$ipn_handler_instance->swpm_validate_and_create_membership()) {
354
- $ipn_handler_instance->debug_log('IPN product validation failed.', false);
355
- wp_send_json(array('success' => false, 'errMsg' => __('IPN product validation failed. Check debug log for more details.', "simple-membership")));
356
- }
357
-
358
- $ipn_handler_instance->debug_log('Paypal class finished.', true, true);
359
-
360
- wp_send_json(array('success' => true));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  }
1
  <?php
2
 
3
+ require_once 'swpm_handle_subsc_ipn.php';
4
+ // Ignoring invalid class name PHPCS warning
5
+ class swpm_smart_checkout_ipn_handler { // phpcs:ignore
6
+
7
+ public $ipn_log = false; // bool: log IPN results to text file?
8
+ public $ipn_log_file; // filename of the IPN log.
9
+ public $ipn_response; // holds the IPN response from paypal.
10
+ public $ipn_data = array(); // array contains the POST values for IPN.
11
+ public $fields = array(); // array holds the fields to submit to paypal.
12
+ public $sandbox_mode = false;
13
+
14
+ public function __construct() {
15
+ $this->paypal_url = 'https://www.paypal.com/cgi-bin/webscr';
16
+ $this->ipn_log_file = 'ipn_handle_debug_swpm.log';
17
+ $this->ipn_response = '';
18
+ }
19
+
20
+ public function swpm_validate_and_create_membership() {
21
+ // Check Product Name , Price , Currency , Receivers email.
22
+ $error_msg = '';
23
+
24
+ // Read the IPN and validate.
25
+ $gross_total = $this->ipn_data['mc_gross'];
26
+ $transaction_type = $this->ipn_data['txn_type'];
27
+ $txn_id = $this->ipn_data['txn_id'];
28
+ $payment_status = $this->ipn_data['payment_status'];
29
+
30
+ // Check payment status.
31
+ if ( ! empty( $payment_status ) ) {
32
+ if ( 'Denied' == $payment_status ) {
33
+ $this->debug_log( 'Payment status for this transaction is DENIED. You denied the transaction... most likely a cancellation of an eCheque. Nothing to do here.', false );
34
+ return false;
35
+ }
36
+ if ( 'Canceled_Reversal' == $payment_status ) {
37
+ $this->debug_log( 'This is a dispute closed notification in your favour. The plugin will not do anyting.', false );
38
+ return true;
39
+ }
40
+ if ( 'Completed' != $payment_status && 'Processed' != $payment_status && 'Refunded' != $payment_status && 'Reversed' != $payment_status ) {
41
+ $error_msg .= 'Funds have not been cleared yet. Transaction will be processed when the funds clear!';
42
+ $this->debug_log( $error_msg, false );
43
+ $this->debug_log( wp_json_encode( $this->ipn_data ), false );
44
+ return false;
45
+ }
46
+ }
47
+
48
+ // Check txn type.
49
+ if ( 'new_case' == $transaction_type ) {
50
+ $this->debug_log( 'This is a dispute case. Nothing to do here.', true );
51
+ return true;
52
+ }
53
+
54
+ $custom = urldecode( $this->ipn_data['custom'] );
55
+ $this->ipn_data['custom'] = $custom;
56
+ $customvariables = SwpmTransactions::parse_custom_var( $custom );
57
+
58
+ // Handle refunds.
59
+ if ( $gross_total < 0 ) {
60
+ // This is a refund or reversal.
61
+ $this->debug_log( 'This is a refund notification. Refund amount: ' . $gross_total, true );
62
+ swpm_handle_subsc_cancel_stand_alone( $this->ipn_data, true );
63
+ return true;
64
+ }
65
+ if ( isset( $this->ipn_data['reason_code'] ) && 'refund' == $this->ipn_data['reason_code'] ) {
66
+ $this->debug_log( 'This is a refund notification. Refund amount: ' . $gross_total, true );
67
+ swpm_handle_subsc_cancel_stand_alone( $this->ipn_data, true );
68
+ return true;
69
+ }
70
+
71
+ if ( ( 'subscr_signup' == $transaction_type ) ) {
72
+ $this->debug_log( 'Subscription signup IPN received... (handled by the subscription IPN handler)', true );
73
+ // Code to handle the signup IPN for subscription.
74
+ $subsc_ref = $customvariables['subsc_ref'];
75
+
76
+ if ( ! empty( $subsc_ref ) ) {
77
+ $this->debug_log( 'Found a membership level ID. Creating member account...', true );
78
+ $swpm_id = $customvariables['swpm_id'];
79
+ swpm_handle_subsc_signup_stand_alone( $this->ipn_data, $subsc_ref, $this->ipn_data['subscr_id'], $swpm_id );
80
+ // Handle customized subscription signup.
81
+ }
82
+ return true;
83
+ } elseif ( ( 'subscr_cancel' == $transaction_type ) || ( 'subscr_eot' == $transaction_type ) || ( 'subscr_failed' == $transaction_type ) ) {
84
+ // Code to handle the IPN for subscription cancellation.
85
+ $this->debug_log( 'Subscription cancellation IPN received... (handled by the subscription IPN handler)', true );
86
+ swpm_handle_subsc_cancel_stand_alone( $this->ipn_data );
87
+ return true;
88
+ } else {
89
+ $cart_items = array();
90
+ $this->debug_log( 'Transaction Type: Buy Now/Subscribe', true );
91
+ $item_number = $this->ipn_data['item_number'];
92
+ $item_name = $this->ipn_data['item_name'];
93
+ $quantity = $this->ipn_data['quantity'];
94
+ $mc_gross = $this->ipn_data['mc_gross'];
95
+ $mc_currency = $this->ipn_data['mc_currency'];
96
+
97
+ $current_item = array(
98
+ 'item_number' => $item_number,
99
+ 'item_name' => $item_name,
100
+ 'quantity' => $quantity,
101
+ 'mc_gross' => $mc_gross,
102
+ 'mc_currency' => $mc_currency,
103
+ );
104
+
105
+ array_push( $cart_items, $current_item );
106
+ }
107
+
108
+ $counter = 0;
109
+ foreach ( $cart_items as $current_cart_item ) {
110
+ $cart_item_data_num = $current_cart_item['item_number'];
111
+ $cart_item_data_name = trim( $current_cart_item['item_name'] );
112
+ $cart_item_data_quantity = $current_cart_item['quantity'];
113
+ $cart_item_data_total = $current_cart_item['mc_gross'];
114
+ $cart_item_data_currency = $current_cart_item['mc_currency'];
115
+ if ( empty( $cart_item_data_quantity ) ) {
116
+ $cart_item_data_quantity = 1;
117
+ }
118
+ $this->debug_log( 'Item Number: ' . $cart_item_data_num, true );
119
+ $this->debug_log( 'Item Name: ' . $cart_item_data_name, true );
120
+ $this->debug_log( 'Item Quantity: ' . $cart_item_data_quantity, true );
121
+ $this->debug_log( 'Item Total: ' . $cart_item_data_total, true );
122
+ $this->debug_log( 'Item Currency: ' . $cart_item_data_currency, true );
123
+
124
+ // Get the button id.
125
+ $pp_hosted_button = false;
126
+ $button_id = $cart_item_data_num; // Button id is the item number.
127
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
128
+ if ( ! SwpmUtils::membership_level_id_exists( $membership_level_id ) ) {
129
+ $this->debug_log( 'This payment button was not created in the plugin. This is a paypal hosted button.', true );
130
+ $pp_hosted_button = true;
131
+ }
132
+
133
+ // Price check.
134
+ $check_price = true;
135
+ $msg = '';
136
+ $msg = apply_filters( 'swpm_before_price_check_filter', $msg, $current_cart_item );
137
+ if ( ! empty( $msg ) && 'price-check-override' == $msg ) {// This filter allows an extension to do a customized version of price check (if needed).
138
+ $check_price = false;
139
+ $this->debug_log( 'Price and currency check has been overridden by an addon/extension.', true );
140
+ }
141
+ if ( $check_price && ! $pp_hosted_button ) {
142
+ // Check according to buy now payment or subscription payment.
143
+ $button_type = get_post_meta( $button_id, 'button_type', true );
144
+ if ( 'pp_smart_checkout' == $button_type ) {// This is a PayPal Smart Checkout type button.
145
+ $expected_amount = ( get_post_meta( $button_id, 'payment_amount', true ) ) * $cart_item_data_quantity;
146
+ $expected_amount = round( $expected_amount, 2 );
147
+ $expected_amount = apply_filters( 'swpm_payment_amount_filter', $expected_amount, $button_id );
148
+ $received_amount = $cart_item_data_total;
149
+ } else {
150
+ $this->debug_log( 'Error! Unexpected button type: ' . $button_type, false );
151
+ return false;
152
+ }
153
+
154
+ if ( $received_amount < $expected_amount ) {
155
+ // Error! amount received is less than expected. This is invalid.
156
+ $this->debug_log( 'Expected amount: ' . $expected_amount, true );
157
+ $this->debug_log( 'Received amount: ' . $received_amount, true );
158
+ $this->debug_log( 'Price check failed. Amount received is less than the amount expected. This payment will not be processed.', false );
159
+ return false;
160
+ }
161
+ }
162
+
163
+ // *** Handle Membership Payment ***
164
+ // --------------------------------------------------------------------------------------
165
+ // ========= Need to find the (level ID) in the custom variable ============
166
+ $subsc_ref = $customvariables['subsc_ref']; // Membership level ID.
167
+ $this->debug_log( 'Membership payment paid for membership level ID: ' . $subsc_ref, true );
168
+ if ( ! empty( $subsc_ref ) ) {
169
+ $swpm_id = '';
170
+ if ( isset( $customvariables['swpm_id'] ) ) {
171
+ $swpm_id = $customvariables['swpm_id'];
172
+ }
173
+ if ( 'smart_checkout' == $transaction_type ) {
174
+ $this->debug_log( 'Transaction type: web_accept. Creating member account...', true );
175
+ swpm_handle_subsc_signup_stand_alone( $this->ipn_data, $subsc_ref, $this->ipn_data['txn_id'], $swpm_id );
176
+ }
177
+ } else {
178
+ $this->debug_log( 'Membership level ID is missing in the payment notification! Cannot process this notification.', false );
179
+ }
180
+ // == End of Membership payment handling ==
181
+ $counter++;
182
+ }
183
+
184
+ /*
185
+ * * Do Post payment operation and cleanup * *
186
+ */
187
+ // Save the transaction data.
188
+ $this->debug_log( 'Saving transaction data to the database table.', true );
189
+ $this->ipn_data['gateway'] = 'pp_smart_checkout';
190
+ $this->ipn_data['status'] = $this->ipn_data['payment_status'];
191
+ SwpmTransactions::save_txn_record( $this->ipn_data, $cart_items );
192
+ $this->debug_log( 'Transaction data saved.', true );
193
+
194
+ // Trigger the PayPal IPN processed action hook (so other plugins can can listen for this event).
195
+ do_action( 'swpm_pp_smart_checkout_ipn_processed', $this->ipn_data );
196
+
197
+ do_action( 'swpm_payment_ipn_processed', $this->ipn_data );
198
+
199
+ return true;
200
+ }
201
+
202
+ public function create_ipn_from_smart_checkout( $data ) {
203
+ $ipn['custom'] = $data['custom_field'];
204
+ $ipn['item_number'] = $data['button_id'];
205
+ $ipn['item_name'] = $data['item_name'];
206
+ $ipn['pay_id'] = $data['id'];
207
+ $ipn['create_time'] = $data['create_time'];
208
+ $ipn['txn_id'] = $data['transactions'][0]['related_resources'][0]['sale']['id'];
209
+ $ipn['reason_code'] = ! empty( $data['transactions'][0]['related_resources'][0]['sale']['reason_code'] ) ? $data['transactions'][0]['related_resources'][0]['sale']['reason_code'] : '';
210
+ $ipn['txn_type'] = 'smart_checkout';
211
+ $ipn['payment_status'] = ucfirst( $data['transactions'][0]['related_resources'][0]['sale']['state'] );
212
+ $ipn['transaction_subject'] = '';
213
+ $ipn['mc_currency'] = $data['transactions'][0]['amount']['currency'];
214
+ $ipn['mc_gross'] = $data['transactions'][0]['amount']['total'];
215
+ $ipn['quantity'] = 1;
216
+ $ipn['receiver_email'] = get_option( 'cart_paypal_email' );
217
+ // customer info.
218
+ $ipn['first_name'] = $data['payer']['payer_info']['first_name'];
219
+ $ipn['last_name'] = $data['payer']['payer_info']['last_name'];
220
+ $ipn['payer_email'] = $data['payer']['payer_info']['email'];
221
+ $ipn['address_street'] = $data['payer']['payer_info']['shipping_address']['line1'];
222
+ $ipn['address_city'] = $data['payer']['payer_info']['shipping_address']['city'];
223
+ $ipn['address_state'] = $data['payer']['payer_info']['shipping_address']['state'];
224
+ $ipn['address_zip'] = $data['payer']['payer_info']['shipping_address']['postal_code'];
225
+ $ipn['address_country'] = $data['payer']['payer_info']['shipping_address']['country_code'];
226
+
227
+ $this->ipn_data = $ipn;
228
+ return true;
229
+ }
230
+
231
+ public function validate_ipn_smart_checkout() {
232
+
233
+ if ( $this->sandbox_mode ) {
234
+ $client_id = get_post_meta( $this->ipn_data['item_number'], 'pp_smart_checkout_test_id', true );
235
+ $secret = get_post_meta( $this->ipn_data['item_number'], 'pp_smart_checkout_test_sec', true );
236
+ $api_base = 'https://api.sandbox.paypal.com';
237
+ } else {
238
+ $client_id = get_post_meta( $this->ipn_data['item_number'], 'pp_smart_checkout_live_id', true );
239
+ $secret = get_post_meta( $this->ipn_data['item_number'], 'pp_smart_checkout_live_sec', true );
240
+ $api_base = 'https://api.paypal.com';
241
+ }
242
+
243
+ $wp_request_headers = array(
244
+ 'Accept' => 'application/json',
245
+ // Ignoring base64_encode() PHPCS warning as it's being properly used in this case.
246
+ 'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $secret ), // phpcs:ignore
247
+ );
248
+
249
+ $res = wp_remote_request(
250
+ $api_base . '/v1/oauth2/token',
251
+ array(
252
+ 'method' => 'POST',
253
+ 'headers' => $wp_request_headers,
254
+ 'body' => 'grant_type=client_credentials',
255
+ )
256
+ );
257
+
258
+ $code = wp_remote_retrieve_response_code( $res );
259
+
260
+ if ( 200 !== $code ) {
261
+ // Some error occured.
262
+ $body = wp_remote_retrieve_body( $res );
263
+ // translators: %1$d is error code; %2$s is error message.
264
+ return sprintf( __( 'Error occured during payment verification. Error code: %1$d. Message: %2$s', 'simple-membership' ), $code, $body );
265
+ }
266
+
267
+ $body = wp_remote_retrieve_body( $res );
268
+ $body = json_decode( $body );
269
+
270
+ $token = $body->access_token;
271
+
272
+ $wp_request_headers = array(
273
+ 'Accept' => 'application/json',
274
+ 'Authorization' => 'Bearer ' . $token,
275
+ );
276
+
277
+ $res = wp_remote_request(
278
+ $api_base . '/v1/payments/payment/' . $this->ipn_data['pay_id'],
279
+ array(
280
+ 'method' => 'GET',
281
+ 'headers' => $wp_request_headers,
282
+ )
283
+ );
284
+
285
+ $code = wp_remote_retrieve_response_code( $res );
286
+
287
+ if ( 200 !== $code ) {
288
+ // Some error occured.
289
+ $body = wp_remote_retrieve_body( $res );
290
+ // translators: %1$d is error code; %2$s is error message.
291
+ return sprintf( __( 'Error occured during payment verification. Error code: %1$d. Message: %2$s', 'simple-membership' ), $code, $body );
292
+ }
293
+
294
+ $body = wp_remote_retrieve_body( $res );
295
+ $body = json_decode( $body );
296
+
297
+ // check payment details.
298
+ if ( $body->transactions[0]->amount->total === $this->ipn_data['mc_gross'] &&
299
+ $body->transactions[0]->amount->currency === $this->ipn_data['mc_currency'] ) {
300
+ // payment is valid.
301
+ return true;
302
+ } else {
303
+ // payment is invalid.
304
+ // translators: %1$s is expected amount, %2$s is expected currency.
305
+ return sprintf( __( 'Payment check failed: invalid amount received. Expected %1$s %2$s, got %3$s %4$s.', 'simple-membership' ), $this->ipn_data['mc_gross'], $this->ipn_data['mc_currency'], $body->transactions[0]->amount->total, $body->transactions[0]->amount->currency );
306
+ }
307
+ }
308
+
309
+ public function debug_log( $message, $success, $end = false ) {
310
+ SwpmLog::log_simple_debug( $message, $success, $end );
311
+ }
312
 
313
  }
314
 
315
  function swpm_pp_smart_checkout_ajax_hanlder() {
316
+ // Start of IPN handling (script execution).
317
+
318
+ // check nonce.
319
+ $uniqid = filter_input( INPUT_POST, 'uniqid', FILTER_SANITIZE_STRING );
320
+
321
+ if ( ! check_ajax_referer( 'swpm-pp-smart-checkout-ajax-nonce-' . $uniqid, 'nonce', false ) ) {
322
+ wp_send_json(
323
+ array(
324
+ 'success' => false,
325
+ 'errMsg' => __(
326
+ 'Nonce check failed. Please reload page.',
327
+ 'simple-membership'
328
+ ),
329
+ )
330
+ );
331
+ exit;
332
+ }
333
+
334
+ $data = filter_input( INPUT_POST, 'swpm_pp_smart_checkout_payment_data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
335
+
336
+ if ( empty( $data ) ) {
337
+ wp_send_json(
338
+ array(
339
+ 'success' => false,
340
+ 'errMsg' => __(
341
+ 'Empty payment data received.',
342
+ 'simple-membership'
343
+ ),
344
+ )
345
+ );
346
+ }
347
+
348
+ $ipn_handler_instance = new swpm_smart_checkout_ipn_handler();
349
+
350
+ $ipn_data_success = $ipn_handler_instance->create_ipn_from_smart_checkout( $data );
351
+
352
+ if ( true !== $ipn_data_success ) {
353
+ // error occured during IPN array creation.
354
+ wp_send_json(
355
+ array(
356
+ 'success' => false,
357
+ 'errMsg' => $ipn_data_success,
358
+ )
359
+ );
360
+ }
361
+
362
+ $settings = SwpmSettings::get_instance();
363
+ $debug_enabled = $settings->get_value( 'enable-debug' );
364
+ if ( ! empty( $debug_enabled ) ) {// debug is enabled in the system.
365
+ $debug_log = 'log.txt'; // Debug log file name.
366
+ $ipn_handler_instance->ipn_log = true;
367
+ $ipn_handler_instance->ipn_log_file = $debug_log;
368
+ }
369
+
370
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
371
+ if ( ! empty( $sandbox_enabled ) ) { // Sandbox testing enabled.
372
+ $ipn_handler_instance->paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
373
+ $ipn_handler_instance->sandbox_mode = true;
374
+ }
375
+
376
+ $ip = filter_input( INPUT_SERVER, 'REMOTE_ADDR', FILTER_SANITIZE_STRING );
377
+
378
+ $ipn_handler_instance->debug_log( 'Paypal Smart Checkout Class Initiated by ' . $ip, true );
379
+
380
+ // Validate the IPN.
381
+ $res = $ipn_handler_instance->validate_ipn_smart_checkout();
382
+
383
+ if ( true !== $res ) {
384
+ wp_send_json(
385
+ array(
386
+ 'success' => false,
387
+ 'errMsg' => $res,
388
+ )
389
+ );
390
+ }
391
+
392
+ $ipn_handler_instance->debug_log( 'Creating product Information to send.', true );
393
+
394
+ if ( ! $ipn_handler_instance->swpm_validate_and_create_membership() ) {
395
+ $ipn_handler_instance->debug_log( 'IPN product validation failed.', false );
396
+ wp_send_json(
397
+ array(
398
+ 'success' => false,
399
+ 'errMsg' => __(
400
+ 'IPN product validation failed. Check debug log for more details.',
401
+ 'simple-membership'
402
+ ),
403
+ )
404
+ );
405
+ }
406
+
407
+ $ipn_handler_instance->debug_log( 'Paypal class finished.', true, true );
408
+
409
+ wp_send_json( array( 'success' => true ) );
410
  }
ipn/swpm-stripe-buy-now-ipn.php CHANGED
@@ -1,154 +1,162 @@
1
- <?php
2
-
3
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_subsc_ipn.php');
4
-
5
- class SwpmStripeBuyNowIpnHandler {
6
-
7
- public function __construct() {
8
-
9
- $this->handle_stripe_ipn();
10
- }
11
-
12
- public function handle_stripe_ipn(){
13
- SwpmLog::log_simple_debug("Stripe Buy Now IPN received. Processing request...", true);
14
- //SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
15
-
16
- //Include the Stripe library.
17
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
18
-
19
- //Read and sanitize the request parameters.
20
- $button_id = sanitize_text_field($_REQUEST['item_number']);
21
- $button_id = absint($button_id);
22
- $button_title = sanitize_text_field($_REQUEST['item_name']);
23
- $payment_amount = sanitize_text_field($_REQUEST['item_price']);
24
- $currency_code = sanitize_text_field($_REQUEST['currency_code']);
25
- $zeroCents = unserialize(SIMPLE_WP_MEMBERSHIP_STRIPE_ZERO_CENTS);
26
- if (in_array($currency_code,$zeroCents)) {
27
- $price_in_cents = $payment_amount;
28
- } else {
29
- $price_in_cents = $payment_amount * 100 ;//The amount (in cents). This value is used in Stripe API.
30
- }
31
- $stripe_token = sanitize_text_field($_POST['stripeToken']);
32
- $stripe_token_type = sanitize_text_field($_POST['stripeTokenType']);
33
- $stripe_email = sanitize_email($_POST['stripeEmail']);
34
-
35
- //Retrieve the CPT for this button
36
- $button_cpt = get_post($button_id);
37
- if(!$button_cpt){
38
- //Fatal error. Could not find this payment button post object.
39
- SwpmLog::log_simple_debug("Fatal Error! Failed to retrieve the payment button post object for the given button ID: ". $button_id, false);
40
- wp_die("Fatal Error! Payment button (ID: ".$button_id.") does not exist. This request will fail.");
41
- }
42
-
43
- $membership_level_id = get_post_meta($button_id, 'membership_level_id', true);
44
-
45
- //Validate and verify some of the main values.
46
- $true_payment_amount = get_post_meta($button_id, 'payment_amount', true);
47
- if( $payment_amount != $true_payment_amount ) {
48
- //Fatal error. Payment amount may have been tampered with.
49
- $error_msg = 'Fatal Error! Received payment amount ('.$payment_amount.') does not match with the original amount ('.$true_payment_amount.')';
50
- SwpmLog::log_simple_debug($error_msg, false);
51
- wp_die($error_msg);
52
- }
53
- $true_currency_code = get_post_meta($button_id, 'payment_currency', true);
54
- if( $currency_code != $true_currency_code ) {
55
- //Fatal error. Currency code may have been tampered with.
56
- $error_msg = 'Fatal Error! Received currency code ('.$currency_code.') does not match with the original code ('.$true_currency_code.')';
57
- SwpmLog::log_simple_debug($error_msg, false);
58
- wp_die($error_msg);
59
- }
60
-
61
- //Validation passed. Go ahead with the charge.
62
-
63
- //Sandbox and other settings
64
- $settings = SwpmSettings::get_instance();
65
- $sandbox_enabled = $settings->get_value('enable-sandbox-testing');
66
- if($sandbox_enabled){
67
- SwpmLog::log_simple_debug("Sandbox payment mode is enabled. Using test API key details.", true);
68
- $secret_key = get_post_meta($button_id, 'stripe_test_secret_key', true);;//Use sandbox API key
69
- } else {
70
- $secret_key = get_post_meta($button_id, 'stripe_live_secret_key', true);;//Use live API key
71
- }
72
-
73
- //Set secret API key in the Stripe library
74
- \Stripe\Stripe::setApiKey($secret_key);
75
-
76
- // Get the credit card details submitted by the form
77
- $token = $stripe_token;
78
-
79
- // Create the charge on Stripe's servers - this will charge the user's card
80
- try {
81
- $charge = \Stripe\Charge::create(array(
82
- "amount" => $price_in_cents, //Amount in cents
83
- "currency" => strtolower($currency_code),
84
- "source" => $token,
85
- "description" => $button_title,
86
- "receipt_email" => $stripe_email,
87
- ));
88
- } catch(\Stripe\Error\Card $e) {
89
- // The card has been declined
90
- SwpmLog::log_simple_debug("Stripe Charge Error! The card has been declined. ".$e->getMessage(), false);
91
- $body = $e->getJsonBody();
92
- $error = $body['error'];
93
- $error_string = print_r($error,true);
94
- SwpmLog::log_simple_debug("Error details: ".$error_string, false);
95
- wp_die("Stripe Charge Error! Card charge has been declined. " . $e->getMessage() . $error_string);
96
- }
97
-
98
- //Everything went ahead smoothly with the charge.
99
- SwpmLog::log_simple_debug("Stripe Buy Now charge successful.", true);
100
-
101
- //Grab the charge ID and set it as the transaction ID.
102
- $txn_id = $charge->id;//$charge->balance_transaction;
103
- //The charge ID can be used to retrieve the transaction details using hte following call.
104
- //\Stripe\Charge::retrieve($charge->id);
105
- $custom = sanitize_text_field($_REQUEST['custom']);
106
- $custom_var = SwpmTransactions::parse_custom_var($custom);
107
- $swpm_id = isset($custom_var['swpm_id'])? $custom_var['swpm_id']: '';
108
-
109
- //Create the $ipn_data array.
110
- $ipn_data = array();
111
- $ipn_data['mc_gross'] = $payment_amount;
112
- $ipn_data['first_name'] = '';
113
- $ipn_data['last_name'] = '';
114
- $ipn_data['payer_email'] = $stripe_email;
115
- $ipn_data['membership_level'] = $membership_level_id;
116
- $ipn_data['txn_id'] = $txn_id;
117
- $ipn_data['subscr_id'] = '';
118
- $ipn_data['swpm_id'] = $swpm_id;
119
- $ipn_data['ip'] = $custom_var['user_ip'];
120
- $ipn_data['custom'] = $custom;
121
- $ipn_data['gateway'] = 'stripe';
122
- $ipn_data['status'] = 'completed';
123
-
124
- $ipn_data['address_street'] = '';
125
- $ipn_data['address_city'] = '';
126
- $ipn_data['address_state'] = '';
127
- $ipn_data['address_zipcode'] = '';
128
- $ipn_data['country'] = '';
129
-
130
- //Handle the membership signup related tasks.
131
- swpm_handle_subsc_signup_stand_alone($ipn_data,$membership_level_id,$txn_id,$swpm_id);
132
-
133
- //Save the transaction record
134
- SwpmTransactions::save_txn_record($ipn_data);
135
- SwpmLog::log_simple_debug('Transaction data saved.', true);
136
-
137
- //Trigger the stripe IPN processed action hook (so other plugins can can listen for this event).
138
- do_action('swpm_stripe_ipn_processed', $ipn_data);
139
-
140
- do_action('swpm_payment_ipn_processed', $ipn_data);
141
-
142
- //Redirect the user to the return URL (or to the homepage if a return URL is not specified for this payment button).
143
- $return_url = get_post_meta($button_id, 'return_url', true);
144
- if (empty($return_url)) {
145
- $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
146
- }
147
- SwpmLog::log_simple_debug("Redirecting customer to: ".$return_url, true);
148
- SwpmLog::log_simple_debug("End of Stripe Buy Now IPN processing.", true, true);
149
- SwpmMiscUtils::redirect_to_url($return_url);
150
-
151
- }
152
- }
153
-
154
- $swpm_stripe_buy_ipn = new SwpmStripeBuyNowIpnHandler();
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_subsc_ipn.php';
4
+
5
+ class SwpmStripeBuyNowIpnHandler {
6
+
7
+ public function __construct() {
8
+
9
+ $this->handle_stripe_ipn();
10
+ }
11
+
12
+ public function handle_stripe_ipn() {
13
+ SwpmLog::log_simple_debug( 'Stripe Buy Now IPN received. Processing request...', true );
14
+ // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
15
+
16
+ // Include the Stripe library.
17
+ if ( ! class_exists( '\Stripe\Stripe' ) ) {
18
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php';
19
+ }
20
+
21
+ // Read and sanitize the request parameters.
22
+ $button_id = sanitize_text_field( $_REQUEST['item_number'] );
23
+ $button_id = absint( $button_id );
24
+ $button_title = sanitize_text_field( $_REQUEST['item_name'] );
25
+ $payment_amount = sanitize_text_field( $_REQUEST['item_price'] );
26
+ $currency_code = sanitize_text_field( $_REQUEST['currency_code'] );
27
+ $zero_cents = unserialize( SIMPLE_WP_MEMBERSHIP_STRIPE_ZERO_CENTS );
28
+ if ( in_array( $currency_code, $zero_cents ) ) {
29
+ $price_in_cents = $payment_amount;
30
+ } else {
31
+ $price_in_cents = $payment_amount * 100;// The amount (in cents). This value is used in Stripe API.
32
+ }
33
+ $stripe_token = filter_input( INPUT_POST, 'stripeToken', FILTER_SANITIZE_STRING );
34
+ $stripe_token_type = filter_input( INPUT_POST, 'stripeTokenType', FILTER_SANITIZE_STRING );
35
+ $stripe_email = filter_input( INPUT_POST, 'stripeEmail', FILTER_SANITIZE_EMAIL );
36
+
37
+ // Retrieve the CPT for this button
38
+ $button_cpt = get_post( $button_id );
39
+ if ( ! $button_cpt ) {
40
+ // Fatal error. Could not find this payment button post object.
41
+ SwpmLog::log_simple_debug( 'Fatal Error! Failed to retrieve the payment button post object for the given button ID: ' . $button_id, false );
42
+ wp_die( esc_html( sprintf( 'Fatal Error! Payment button (ID: %d) does not exist. This request will fail.', $button_id ) ) );
43
+ }
44
+
45
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
46
+
47
+ // Validate and verify some of the main values.
48
+ $true_payment_amount = get_post_meta( $button_id, 'payment_amount', true );
49
+ $true_payment_amount = apply_filters( 'swpm_payment_amount_filter', $true_payment_amount, $button_id );
50
+
51
+ if ( $payment_amount != $true_payment_amount ) {
52
+ // Fatal error. Payment amount may have been tampered with.
53
+ $error_msg = 'Fatal Error! Received payment amount (' . $payment_amount . ') does not match with the original amount (' . $true_payment_amount . ')';
54
+ SwpmLog::log_simple_debug( $error_msg, false );
55
+ wp_die( esc_html( $error_msg ) );
56
+ }
57
+ $true_currency_code = get_post_meta( $button_id, 'payment_currency', true );
58
+ if ( $currency_code != $true_currency_code ) {
59
+ // Fatal error. Currency code may have been tampered with.
60
+ $error_msg = 'Fatal Error! Received currency code (' . $currency_code . ') does not match with the original code (' . $true_currency_code . ')';
61
+ SwpmLog::log_simple_debug( $error_msg, false );
62
+ wp_die( esc_html( $error_msg ) );
63
+ }
64
+
65
+ // Validation passed. Go ahead with the charge.
66
+
67
+ // Sandbox and other settings
68
+ $settings = SwpmSettings::get_instance();
69
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
70
+ if ( $sandbox_enabled ) {
71
+ SwpmLog::log_simple_debug( 'Sandbox payment mode is enabled. Using test API key details.', true );
72
+ $secret_key = get_post_meta( $button_id, 'stripe_test_secret_key', true );
73
+ // Use sandbox API key
74
+ } else {
75
+ $secret_key = get_post_meta( $button_id, 'stripe_live_secret_key', true );
76
+ // Use live API key
77
+ }
78
+
79
+ // Set secret API key in the Stripe library
80
+ \Stripe\Stripe::setApiKey( $secret_key );
81
+
82
+ // Get the credit card details submitted by the form
83
+ $token = $stripe_token;
84
+
85
+ // Create the charge on Stripe's servers - this will charge the user's card
86
+ try {
87
+ $charge = \Stripe\Charge::create(
88
+ array(
89
+ 'amount' => $price_in_cents, // Amount in cents
90
+ 'currency' => strtolower( $currency_code ),
91
+ 'source' => $token,
92
+ 'description' => $button_title,
93
+ 'receipt_email' => $stripe_email,
94
+ )
95
+ );
96
+ } catch ( \Stripe\Error\Card $e ) {
97
+ // The card has been declined
98
+ SwpmLog::log_simple_debug( 'Stripe Charge Error! The card has been declined. ' . $e->getMessage(), false );
99
+ $body = $e->getJsonBody();
100
+ $error = $body['error'];
101
+ $error_string = print_r( $error, true );
102
+ SwpmLog::log_simple_debug( 'Error details: ' . $error_string, false );
103
+ wp_die( esc_html( 'Stripe Charge Error! Card charge has been declined. ' . $e->getMessage() . $error_string ) );
104
+ }
105
+
106
+ // Everything went ahead smoothly with the charge.
107
+ SwpmLog::log_simple_debug( 'Stripe Buy Now charge successful.', true );
108
+
109
+ // Grab the charge ID and set it as the transaction ID.
110
+ $txn_id = $charge->id;// $charge->balance_transaction;
111
+ // The charge ID can be used to retrieve the transaction details using hte following call.
112
+ // \Stripe\Charge::retrieve($charge->id);
113
+ $custom = sanitize_text_field( $_REQUEST['custom'] );
114
+ $custom_var = SwpmTransactions::parse_custom_var( $custom );
115
+ $swpm_id = isset( $custom_var['swpm_id'] ) ? $custom_var['swpm_id'] : '';
116
+
117
+ // Create the $ipn_data array.
118
+ $ipn_data = array();
119
+ $ipn_data['mc_gross'] = $payment_amount;
120
+ $ipn_data['first_name'] = '';
121
+ $ipn_data['last_name'] = '';
122
+ $ipn_data['payer_email'] = $stripe_email;
123
+ $ipn_data['membership_level'] = $membership_level_id;
124
+ $ipn_data['txn_id'] = $txn_id;
125
+ $ipn_data['subscr_id'] = '';
126
+ $ipn_data['swpm_id'] = $swpm_id;
127
+ $ipn_data['ip'] = $custom_var['user_ip'];
128
+ $ipn_data['custom'] = $custom;
129
+ $ipn_data['gateway'] = 'stripe';
130
+ $ipn_data['status'] = 'completed';
131
+
132
+ $ipn_data['address_street'] = '';
133
+ $ipn_data['address_city'] = '';
134
+ $ipn_data['address_state'] = '';
135
+ $ipn_data['address_zipcode'] = '';
136
+ $ipn_data['country'] = '';
137
+
138
+ // Handle the membership signup related tasks.
139
+ swpm_handle_subsc_signup_stand_alone( $ipn_data, $membership_level_id, $txn_id, $swpm_id );
140
+
141
+ // Save the transaction record
142
+ SwpmTransactions::save_txn_record( $ipn_data );
143
+ SwpmLog::log_simple_debug( 'Transaction data saved.', true );
144
+
145
+ // Trigger the stripe IPN processed action hook (so other plugins can can listen for this event).
146
+ do_action( 'swpm_stripe_ipn_processed', $ipn_data );
147
+
148
+ do_action( 'swpm_payment_ipn_processed', $ipn_data );
149
+
150
+ // Redirect the user to the return URL (or to the homepage if a return URL is not specified for this payment button).
151
+ $return_url = get_post_meta( $button_id, 'return_url', true );
152
+ if ( empty( $return_url ) ) {
153
+ $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
154
+ }
155
+ SwpmLog::log_simple_debug( 'Redirecting customer to: ' . $return_url, true );
156
+ SwpmLog::log_simple_debug( 'End of Stripe Buy Now IPN processing.', true, true );
157
+ SwpmMiscUtils::redirect_to_url( $return_url );
158
+
159
+ }
160
+ }
161
+
162
+ $swpm_stripe_buy_ipn = new SwpmStripeBuyNowIpnHandler();
ipn/swpm-stripe-subscription-ipn.php CHANGED
@@ -1,179 +1,180 @@
1
  <?php
2
 
3
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_subsc_ipn.php');
4
 
5
  class SwpmStripeSubscriptionIpnHandler {
6
 
7
- public function __construct() {
8
-
9
- $this->handle_stripe_ipn();
10
- }
11
-
12
- public function handle_stripe_ipn() {
13
- if (isset($_GET['hook'])) {
14
- //this is Webhook notify from Stripe
15
- //TODO: add Webhook Signing Secret verification
16
- //To do this, we need to get customer ID, retreive its details from Stripe, get button_id from metadata
17
- //and see if the button has Signing Secret option set. If it is - we need to check signatures
18
- //More details here: https://stripe.com/docs/webhooks#signatures
19
-
20
- $input = @file_get_contents("php://input");
21
- if (empty($input)) {
22
- SwpmLog::log_simple_debug("Stripe Subscription Webhook sent empty data or page was accessed directly. Aborting.", false);
23
- echo 'Empty Webhook data received.';
24
- die;
25
- }
26
- //SwpmLog::log_simple_debug($input, true);
27
- $event_json = json_decode($input);
28
-
29
- $type = $event_json->type;
30
-
31
- if ($type == 'customer.subscription.deleted' || $type == "charge.refunded") {
32
- //Subscription expired or refunded event
33
- SwpmLog::log_simple_debug("Stripe Subscription Webhook received. Processing request...", true);
34
- //Let's form minimal ipn_data array for swpm_handle_subsc_cancel_stand_alone
35
- $customer = $event_json->data->object->customer;
36
- $subscr_id = $event_json->data->object->id;
37
- $ipn_data = array();
38
- $ipn_data['subscr_id'] = $subscr_id;
39
- $ipn_data['parent_txn_id'] = $customer;
40
-
41
- swpm_handle_subsc_cancel_stand_alone($ipn_data);
42
- }
43
- http_response_code(200); //tells Stripe we received this notify
44
- return;
45
- }
46
-
47
- SwpmLog::log_simple_debug("Stripe Subscription IPN received. Processing request...", true);
48
- //SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
49
- //Include the Stripe library.
50
- include(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
51
-
52
- //Read and sanitize the request parameters.
53
- $button_id = sanitize_text_field($_REQUEST['item_number']);
54
- $button_id = absint($button_id);
55
- $button_title = sanitize_text_field($_REQUEST['item_name']);
56
-
57
- $stripe_token = sanitize_text_field($_POST['stripeToken']);
58
- $stripe_token_type = sanitize_text_field($_POST['stripeTokenType']);
59
- $stripe_email = sanitize_email($_POST['stripeEmail']);
60
-
61
- //Retrieve the CPT for this button
62
- $button_cpt = get_post($button_id);
63
- if (!$button_cpt) {
64
- //Fatal error. Could not find this payment button post object.
65
- SwpmLog::log_simple_debug("Fatal Error! Failed to retrieve the payment button post object for the given button ID: " . $button_id, false);
66
- wp_die("Fatal Error! Payment button (ID: " . $button_id . ") does not exist. This request will fail.");
67
- }
68
-
69
- $plan_id = get_post_meta($button_id, 'stripe_plan_id', true);
70
- $descr = 'Subscription to "' . $plan_id . '" plan';
71
-
72
- $membership_level_id = get_post_meta($button_id, 'membership_level_id', true);
73
-
74
- //Validate and verify some of the main values.
75
- //Validation passed. Go ahead with the charge.
76
- //Sandbox and other settings
77
- $settings = SwpmSettings::get_instance();
78
- $sandbox_enabled = $settings->get_value('enable-sandbox-testing');
79
- if ($sandbox_enabled) {
80
- SwpmLog::log_simple_debug("Sandbox payment mode is enabled. Using test API key details.", true);
81
- $secret_key = get_post_meta($button_id, 'stripe_test_secret_key', true);
82
- ; //Use sandbox API key
83
- } else {
84
- $secret_key = get_post_meta($button_id, 'stripe_live_secret_key', true);
85
- ; //Use live API key
86
- }
87
-
88
- //Set secret API key in the Stripe library
89
- \Stripe\Stripe::setApiKey($secret_key);
90
-
91
- // Get the credit card details submitted by the form
92
- $token = $stripe_token;
93
-
94
- // Create the charge on Stripe's servers - this will charge the user's card
95
- try {
96
- $customer = \Stripe\Customer::create(array(
97
- 'description' => $descr,
98
- 'email' => $stripe_email,
99
- 'source' => $token,
100
- 'plan' => $plan_id,
101
- 'trial_from_plan' => 'true',
102
- ));
103
- } catch (Exception $e) {
104
- SwpmLog::log_simple_debug("Error occurred during Stripe Subscribe. " . $e->getMessage(), false);
105
- $body = $e->getJsonBody();
106
- $error = $body['error'];
107
- $error_string = print_r($error, true);
108
- SwpmLog::log_simple_debug("Error details: " . $error_string, false);
109
- wp_die("Stripe Subscription Error! " . $e->getMessage() . $error_string);
110
- }
111
-
112
- //Everything went ahead smoothly with the charge.
113
- SwpmLog::log_simple_debug("Stripe Subscription successful.", true);
114
-
115
- //let's add button_id to metadata
116
- $customer->metadata = array('button_id' => $button_id);
117
- try {
118
- $customer->save();
119
- } catch (Exception $e) {
120
- SwpmLog::log_simple_debug("Error occurred during Stripe customer metadata update. " . $e->getMessage(), false);
121
- $body = $e->getJsonBody();
122
- SwpmLog::log_simple_debug("Error details: " . $error_string, false);
123
- }
124
-
125
- //Grab customer ID and set it as the transaction ID.
126
- $txn_id = $customer->id; //$charge->balance_transaction;
127
- //Grab subscription ID
128
- $subscr_id = $customer->subscriptions->data[0]->id;
129
- $custom = sanitize_text_field($_REQUEST['custom']);
130
- $custom_var = SwpmTransactions::parse_custom_var($custom);
131
- $swpm_id = isset($custom_var['swpm_id']) ? $custom_var['swpm_id'] : '';
132
-
133
- $payment_amount = $customer->subscriptions->data[0]->plan->amount / 100;
134
-
135
- //Create the $ipn_data array.
136
- $ipn_data = array();
137
- $ipn_data['mc_gross'] = $payment_amount;
138
- $ipn_data['first_name'] = '';
139
- $ipn_data['last_name'] = '';
140
- $ipn_data['payer_email'] = $stripe_email;
141
- $ipn_data['membership_level'] = $membership_level_id;
142
- $ipn_data['txn_id'] = $txn_id;
143
- $ipn_data['subscr_id'] = $subscr_id . '|' . $button_id;
144
- $ipn_data['swpm_id'] = $swpm_id;
145
- $ipn_data['ip'] = $custom_var['user_ip'];
146
- $ipn_data['custom'] = $custom;
147
- $ipn_data['gateway'] = 'stripe';
148
- $ipn_data['status'] = 'completed';
149
-
150
- $ipn_data['address_street'] = '';
151
- $ipn_data['address_city'] = '';
152
- $ipn_data['address_state'] = '';
153
- $ipn_data['address_zipcode'] = '';
154
- $ipn_data['country'] = '';
155
-
156
- //Handle the membership signup related tasks.
157
- swpm_handle_subsc_signup_stand_alone($ipn_data, $membership_level_id, $txn_id, $swpm_id);
158
-
159
- //Save the transaction record
160
- SwpmTransactions::save_txn_record($ipn_data);
161
- SwpmLog::log_simple_debug('Transaction data saved.', true);
162
-
163
- //Trigger the stripe IPN processed action hook (so other plugins can can listen for this event).
164
- do_action('swpm_stripe_ipn_processed', $ipn_data);
165
-
166
- do_action('swpm_payment_ipn_processed', $ipn_data);
167
-
168
- //Redirect the user to the return URL (or to the homepage if a return URL is not specified for this payment button).
169
- $return_url = get_post_meta($button_id, 'return_url', true);
170
- if (empty($return_url)) {
171
- $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
172
- }
173
- SwpmLog::log_simple_debug("Redirecting customer to: " . $return_url, true);
174
- SwpmLog::log_simple_debug("End of Stripe Subscription IPN processing.", true, true);
175
- SwpmMiscUtils::redirect_to_url($return_url);
176
- }
 
177
 
178
  }
179
 
1
  <?php
2
 
3
+ require SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_subsc_ipn.php';
4
 
5
  class SwpmStripeSubscriptionIpnHandler {
6
 
7
+ public function __construct() {
8
+
9
+ $this->handle_stripe_ipn();
10
+ }
11
+
12
+ public function handle_stripe_ipn() {
13
+ if ( isset( $_GET['hook'] ) ) {
14
+ // this is Webhook notify from Stripe
15
+ // TODO: add Webhook Signing Secret verification
16
+ // To do this, we need to get customer ID, retreive its details from Stripe, get button_id from metadata
17
+ // and see if the button has Signing Secret option set. If it is - we need to check signatures
18
+ // More details here: https://stripe.com/docs/webhooks#signatures
19
+
20
+ $input = @file_get_contents( 'php://input' );
21
+ if ( empty( $input ) ) {
22
+ SwpmLog::log_simple_debug( 'Stripe Subscription Webhook sent empty data or page was accessed directly. Aborting.', false );
23
+ echo 'Empty Webhook data received.';
24
+ die;
25
+ }
26
+ // SwpmLog::log_simple_debug($input, true);
27
+ $event_json = json_decode( $input );
28
+
29
+ $type = $event_json->type;
30
+
31
+ if ( 'customer.subscription.deleted' === $type || 'charge.refunded' === $type ) {
32
+ // Subscription expired or refunded event
33
+ SwpmLog::log_simple_debug( 'Stripe Subscription Webhook received. Processing request...', true );
34
+ // Let's form minimal ipn_data array for swpm_handle_subsc_cancel_stand_alone
35
+ $customer = $event_json->data->object->customer;
36
+ $subscr_id = $event_json->data->object->id;
37
+ $ipn_data = array();
38
+ $ipn_data['subscr_id'] = $subscr_id;
39
+ $ipn_data['parent_txn_id'] = $customer;
40
+
41
+ swpm_handle_subsc_cancel_stand_alone( $ipn_data );
42
+ }
43
+ http_response_code( 200 ); // tells Stripe we received this notify
44
+ return;
45
+ }
46
+
47
+ SwpmLog::log_simple_debug( 'Stripe Subscription IPN received. Processing request...', true );
48
+ // SwpmLog::log_simple_debug(print_r($_REQUEST, true), true);//Useful for debugging purpose
49
+ // Include the Stripe library.
50
+ if ( ! class_exists( '\Stripe\Stripe' ) ) {
51
+ include SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php';
52
+ }
53
+ // Read and sanitize the request parameters.
54
+ $button_id = sanitize_text_field( $_REQUEST['item_number'] );
55
+ $button_id = absint( $button_id );
56
+ $button_title = sanitize_text_field( $_REQUEST['item_name'] );
57
+
58
+ $stripe_token = filter_input( INPUT_POST, 'stripeToken', FILTER_SANITIZE_STRING );
59
+ $stripe_token_type = filter_input( INPUT_POST, 'stripeTokenType', FILTER_SANITIZE_STRING );
60
+ $stripe_email = filter_input( INPUT_POST, 'stripeEmail', FILTER_SANITIZE_EMAIL );
61
+
62
+ // Retrieve the CPT for this button
63
+ $button_cpt = get_post( $button_id );
64
+ if ( ! $button_cpt ) {
65
+ // Fatal error. Could not find this payment button post object.
66
+ SwpmLog::log_simple_debug( 'Fatal Error! Failed to retrieve the payment button post object for the given button ID: ' . $button_id, false );
67
+ wp_die( esc_html( sprintf( 'Fatal Error! Payment button (ID: %d) does not exist. This request will fail.', $button_id ) ) );
68
+ }
69
+
70
+ $plan_id = get_post_meta( $button_id, 'stripe_plan_id', true );
71
+ $descr = 'Subscription to "' . $plan_id . '" plan';
72
+
73
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
74
+
75
+ // Validate and verify some of the main values.
76
+ // Validation passed. Go ahead with the charge.
77
+ // Sandbox and other settings
78
+ $settings = SwpmSettings::get_instance();
79
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
80
+ if ( $sandbox_enabled ) {
81
+ SwpmLog::log_simple_debug( 'Sandbox payment mode is enabled. Using test API key details.', true );
82
+ $secret_key = get_post_meta( $button_id, 'stripe_test_secret_key', true ); // Use sandbox API key
83
+ } else {
84
+ $secret_key = get_post_meta( $button_id, 'stripe_live_secret_key', true ); // Use live API key
85
+ }
86
+
87
+ // Set secret API key in the Stripe library
88
+ \Stripe\Stripe::setApiKey( $secret_key );
89
+
90
+ // Get the credit card details submitted by the form
91
+ $token = $stripe_token;
92
+
93
+ // Create the charge on Stripe's servers - this will charge the user's card
94
+ try {
95
+ $customer = \Stripe\Customer::create(
96
+ array(
97
+ 'description' => $descr,
98
+ 'email' => $stripe_email,
99
+ 'source' => $token,
100
+ 'plan' => $plan_id,
101
+ 'trial_from_plan' => 'true',
102
+ )
103
+ );
104
+ } catch ( Exception $e ) {
105
+ SwpmLog::log_simple_debug( 'Error occurred during Stripe Subscribe. ' . $e->getMessage(), false );
106
+ $body = $e->getJsonBody();
107
+ $error = $body['error'];
108
+ $error_string = print_r( $error, true );
109
+ SwpmLog::log_simple_debug( 'Error details: ' . $error_string, false );
110
+ wp_die( esc_html( 'Stripe Subscription Error! ' . $e->getMessage() . $error_string ) );
111
+ }
112
+
113
+ // Everything went ahead smoothly with the charge.
114
+ SwpmLog::log_simple_debug( 'Stripe Subscription successful.', true );
115
+
116
+ // let's add button_id to metadata
117
+ $customer->metadata = array( 'button_id' => $button_id );
118
+ try {
119
+ $customer->save();
120
+ } catch ( Exception $e ) {
121
+ SwpmLog::log_simple_debug( 'Error occurred during Stripe customer metadata update. ' . $e->getMessage(), false );
122
+ $body = $e->getJsonBody();
123
+ SwpmLog::log_simple_debug( 'Error details: ' . $error_string, false );
124
+ }
125
+
126
+ // Grab customer ID and set it as the transaction ID.
127
+ $txn_id = $customer->id; // $charge->balance_transaction;
128
+ // Grab subscription ID
129
+ $subscr_id = $customer->subscriptions->data[0]->id;
130
+ $custom = sanitize_text_field( $_REQUEST['custom'] );
131
+ $custom_var = SwpmTransactions::parse_custom_var( $custom );
132
+ $swpm_id = isset( $custom_var['swpm_id'] ) ? $custom_var['swpm_id'] : '';
133
+
134
+ $payment_amount = $customer->subscriptions->data[0]->plan->amount / 100;
135
+
136
+ // Create the $ipn_data array.
137
+ $ipn_data = array();
138
+ $ipn_data['mc_gross'] = $payment_amount;
139
+ $ipn_data['first_name'] = '';
140
+ $ipn_data['last_name'] = '';
141
+ $ipn_data['payer_email'] = $stripe_email;
142
+ $ipn_data['membership_level'] = $membership_level_id;
143
+ $ipn_data['txn_id'] = $txn_id;
144
+ $ipn_data['subscr_id'] = $subscr_id;
145
+ $ipn_data['swpm_id'] = $swpm_id;
146
+ $ipn_data['ip'] = $custom_var['user_ip'];
147
+ $ipn_data['custom'] = $custom;
148
+ $ipn_data['gateway'] = 'stripe';
149
+ $ipn_data['status'] = 'completed';
150
+
151
+ $ipn_data['address_street'] = '';
152
+ $ipn_data['address_city'] = '';
153
+ $ipn_data['address_state'] = '';
154
+ $ipn_data['address_zipcode'] = '';
155
+ $ipn_data['country'] = '';
156
+
157
+ // Handle the membership signup related tasks.
158
+ swpm_handle_subsc_signup_stand_alone( $ipn_data, $membership_level_id, $txn_id, $swpm_id );
159
+
160
+ // Save the transaction record
161
+ SwpmTransactions::save_txn_record( $ipn_data );
162
+ SwpmLog::log_simple_debug( 'Transaction data saved.', true );
163
+
164
+ // Trigger the stripe IPN processed action hook (so other plugins can can listen for this event).
165
+ do_action( 'swpm_stripe_ipn_processed', $ipn_data );
166
+
167
+ do_action( 'swpm_payment_ipn_processed', $ipn_data );
168
+
169
+ // Redirect the user to the return URL (or to the homepage if a return URL is not specified for this payment button).
170
+ $return_url = get_post_meta( $button_id, 'return_url', true );
171
+ if ( empty( $return_url ) ) {
172
+ $return_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL;
173
+ }
174
+ SwpmLog::log_simple_debug( 'Redirecting customer to: ' . $return_url, true );
175
+ SwpmLog::log_simple_debug( 'End of Stripe Subscription IPN processing.', true, true );
176
+ SwpmMiscUtils::redirect_to_url( $return_url );
177
+ }
178
 
179
  }
180
 
ipn/swpm_handle_pp_ipn.php CHANGED
@@ -1,333 +1,308 @@
1
  <?php
2
 
3
- include_once('swpm_handle_subsc_ipn.php');
4
-
5
- class swpm_paypal_ipn_handler {
6
-
7
- var $last_error; // holds the last error encountered
8
- var $ipn_log = false; // bool: log IPN results to text file?
9
- var $ipn_log_file; // filename of the IPN log
10
- var $ipn_response; // holds the IPN response from paypal
11
- var $ipn_data = array(); // array contains the POST values for IPN
12
- var $fields = array(); // array holds the fields to submit to paypal
13
- var $sandbox_mode = false;
14
-
15
- function __construct()
16
- {
17
- $this->paypal_url = 'https://www.paypal.com/cgi-bin/webscr';
18
- $this->last_error = '';
19
- $this->ipn_log_file = 'ipn_handle_debug_swpm.log';
20
- $this->ipn_response = '';
21
- }
22
-
23
- function swpm_validate_and_create_membership()
24
- {
25
- // Check Product Name , Price , Currency , Receivers email ,
26
- $error_msg = "";
27
-
28
- // Read the IPN and validate
29
- $gross_total = $this->ipn_data['mc_gross'];
30
- $transaction_type = $this->ipn_data['txn_type'];
31
- $txn_id = $this->ipn_data['txn_id'];
32
- $payment_status = $this->ipn_data['payment_status'];
33
-
34
- //Check payment status
35
- if (!empty($payment_status))
36
- {
37
- if ($payment_status == "Denied") {
38
- $this->debug_log("Payment status for this transaction is DENIED. You denied the transaction... most likely a cancellation of an eCheque. Nothing to do here.", false);
39
- return false;
40
- }
41
- if ($payment_status == "Canceled_Reversal") {
42
- $this->debug_log("This is a dispute closed notification in your favour. The plugin will not do anyting.", false);
43
- return true;
44
- }
45
- if ($payment_status != "Completed" && $payment_status != "Processed" && $payment_status != "Refunded" && $payment_status != "Reversed")
46
- {
47
- $error_msg .= 'Funds have not been cleared yet. Transaction will be processed when the funds clear!';
48
- $this->debug_log($error_msg,false);
49
- return false;
50
- }
51
- }
52
-
53
- //Check txn type
54
- if ($transaction_type == "new_case") {
55
- $this->debug_log('This is a dispute case. Nothing to do here.', true);
56
- return true;
57
- }
58
-
59
- $custom = urldecode($this->ipn_data['custom']);
60
- $this->ipn_data['custom'] = $custom;
61
- $customvariables = SwpmTransactions::parse_custom_var($custom);
62
-
63
- //Handle refunds
64
- if ($gross_total < 0)
65
- {
66
- // This is a refund or reversal
67
- $this->debug_log('This is a refund notification. Refund amount: '.$gross_total,true);
68
- swpm_handle_subsc_cancel_stand_alone($this->ipn_data,true);
69
- return true;
70
- }
71
- if (isset($this->ipn_data['reason_code']) && $this->ipn_data['reason_code'] == 'refund'){
72
- $this->debug_log('This is a refund notification. Refund amount: '.$gross_total,true);
73
- swpm_handle_subsc_cancel_stand_alone($this->ipn_data,true);
74
- return true;
75
- }
76
-
77
- if (($transaction_type == "subscr_signup"))
78
- {
79
- $this->debug_log('Subscription signup IPN received... (handled by the subscription IPN handler)',true);
80
- // Code to handle the signup IPN for subscription
81
- $subsc_ref = $customvariables['subsc_ref'];
82
-
83
- if (!empty($subsc_ref))
84
- {
85
- $this->debug_log('Found a membership level ID. Creating member account...',true);
86
- $swpm_id = $customvariables['swpm_id'];
87
- swpm_handle_subsc_signup_stand_alone($this->ipn_data,$subsc_ref,$this->ipn_data['subscr_id'],$swpm_id);
88
- //Handle customized subscription signup
89
- }
90
- return true;
91
- }
92
- else if (($transaction_type == "subscr_cancel") || ($transaction_type == "subscr_eot") || ($transaction_type == "subscr_failed"))
93
- {
94
- // Code to handle the IPN for subscription cancellation
95
- $this->debug_log('Subscription cancellation IPN received... (handled by the subscription IPN handler)',true);
96
- swpm_handle_subsc_cancel_stand_alone($this->ipn_data);
97
- return true;
98
- }
99
- else
100
- {
101
- $cart_items = array();
102
- $this->debug_log('Transaction Type: Buy Now/Subscribe',true);
103
- $item_number = $this->ipn_data['item_number'];
104
- $item_name = $this->ipn_data['item_name'];
105
- $quantity = $this->ipn_data['quantity'];
106
- $mc_gross = $this->ipn_data['mc_gross'];
107
- $mc_currency = $this->ipn_data['mc_currency'];
108
-
109
- $current_item = array(
110
- 'item_number' => $item_number,
111
- 'item_name' => $item_name,
112
- 'quantity' => $quantity,
113
- 'mc_gross' => $mc_gross,
114
- 'mc_currency' => $mc_currency,
115
- );
116
-
117
- array_push($cart_items, $current_item);
118
- }
119
-
120
- $counter = 0;
121
- foreach ($cart_items as $current_cart_item)
122
- {
123
- $cart_item_data_num = $current_cart_item['item_number'];
124
- $cart_item_data_name = trim($current_cart_item['item_name']);
125
- $cart_item_data_quantity = $current_cart_item['quantity'];
126
- $cart_item_data_total = $current_cart_item['mc_gross'];
127
- $cart_item_data_currency = $current_cart_item['mc_currency'];
128
- if(empty($cart_item_data_quantity)){
129
- $cart_item_data_quantity = 1;
130
- }
131
- $this->debug_log('Item Number: '.$cart_item_data_num,true);
132
- $this->debug_log('Item Name: '.$cart_item_data_name,true);
133
- $this->debug_log('Item Quantity: '.$cart_item_data_quantity,true);
134
- $this->debug_log('Item Total: '.$cart_item_data_total,true);
135
- $this->debug_log('Item Currency: '.$cart_item_data_currency,true);
136
-
137
- //Get the button id
138
- $pp_hosted_button = false;
139
- $button_id = $cart_item_data_num;//Button id is the item number.
140
- $membership_level_id = get_post_meta($button_id, 'membership_level_id', true);
141
- if(!SwpmUtils::membership_level_id_exists($membership_level_id)){
142
- $this->debug_log('This payment button was not created in the plugin. This is a paypal hosted button.', true);
143
- $pp_hosted_button = true;
144
- }
145
-
146
- //Price check
147
- $check_price = true;
148
- $msg = "";
149
- $msg = apply_filters('swpm_before_price_check_filter', $msg, $current_cart_item);
150
- if (!empty($msg) && $msg == "price-check-override") {//This filter allows an extension to do a customized version of price check (if needed)
151
- $check_price = false;
152
- $this->debug_log('Price and currency check has been overridden by an addon/extension.', true);
153
- }
154
- if ($check_price && !$pp_hosted_button) {
155
- //Check according to buy now payment or subscription payment.
156
- $button_type = get_post_meta($button_id, 'button_type', true);
157
- if ( $button_type == 'pp_buy_now'){//This is a PayPal buy now type button
158
- $expected_amount = (get_post_meta($button_id, 'payment_amount', true)) * $cart_item_data_quantity;
159
- $expected_amount = round($expected_amount, 2);
160
- $received_amount = $cart_item_data_total;
161
- } else if ($button_type == 'pp_subscription'){//This is a PayPal subscription type button
162
- //Trial payment or recurring payment?
163
- //TODO - is_recurring_payment() check to determine if it is a recurring payment
164
- $trial_billing_amount = get_post_meta($button_id, 'trial_billing_amount', true);
165
- $billing_amount = get_post_meta($button_id, 'billing_amount', true);
166
- $expected_amount = 0;
167
- $received_amount = $cart_item_data_total;
168
- } else {
169
- $this->debug_log('Error! Unexpected button type: '.$button_type, false);
170
- return false;
171
- }
172
-
173
- if ($received_amount < $expected_amount) {
174
- //Error! amount received is less than expected. This is invalid.
175
- $this->debug_log('Expected amount: '.$expected_amount, true);
176
- $this->debug_log('Received amount: '.$received_amount, true);
177
- $this->debug_log('Price check failed. Amount received is less than the amount expected. This payment will not be processed.', false);
178
- return false;
179
- }
180
-
181
- }
182
-
183
- //*** Handle Membership Payment ***
184
- //--------------------------------------------------------------------------------------
185
- // ========= Need to find the (level ID) in the custom variable ============
186
- $subsc_ref = $customvariables['subsc_ref'];//Membership level ID
187
- $this->debug_log('Membership payment paid for membership level ID: '.$subsc_ref,true);
188
- if (!empty($subsc_ref))
189
- {
190
- $swpm_id = "";
191
- if(isset($customvariables['swpm_id'])){
192
- $swpm_id = $customvariables['swpm_id'];
193
- }
194
- if ($transaction_type == "web_accept")
195
- {
196
- $this->debug_log('Transaction type: web_accept. Creating member account...',true);
197
- swpm_handle_subsc_signup_stand_alone($this->ipn_data,$subsc_ref,$this->ipn_data['txn_id'],$swpm_id);
198
- }
199
- else if($transaction_type == "subscr_payment"){
200
- $this->debug_log('Transaction type: subscr_payment. Checking if the member profile needed to be updated',true);
201
- swpm_update_member_subscription_start_date_if_applicable($this->ipn_data);
202
- }
203
- }
204
- else
205
- {
206
- $this->debug_log('Membership level ID is missing in the payment notification! Cannot process this notification.',false);
207
- }
208
- //== End of Membership payment handling ==
209
- $counter++;
210
- }
211
-
212
- /*** Do Post payment operation and cleanup ***/
213
- //Save the transaction data
214
- $this->debug_log('Saving transaction data to the database table.', true);
215
- $this->ipn_data['gateway'] = 'paypal';
216
- $this->ipn_data['status'] = $this->ipn_data['payment_status'];
217
- SwpmTransactions::save_txn_record($this->ipn_data, $cart_items);
218
- $this->debug_log('Transaction data saved.', true);
219
-
220
- //Trigger the PayPal IPN processed action hook (so other plugins can can listen for this event).
221
- do_action('swpm_paypal_ipn_processed', $this->ipn_data);
222
-
223
- do_action('swpm_payment_ipn_processed', $this->ipn_data);
224
-
225
- return true;
226
- }
227
-
228
- function swpm_validate_ipn()
229
- {
230
- //Generate the post string from the _POST vars aswell as load the _POST vars into an arry
231
- $post_string = '';
232
- foreach ($_POST as $field=>$value) {
233
- $this->ipn_data["$field"] = $value;
234
- $post_string .= $field.'='.urlencode(stripslashes($value)).'&';
235
- }
236
-
237
- $this->post_string = $post_string;
238
- $this->debug_log('Post string : '. $this->post_string,true);
239
-
240
- //IPN validation check
241
- if($this->validate_ipn_using_remote_post()){
242
- //We can also use an alternative validation using the validate_ipn_using_curl() function
243
- return true;
244
- } else {
245
- return false;
246
- }
247
-
248
- }
249
-
250
- function validate_ipn_using_remote_post(){
251
- $this->debug_log( 'Checking if PayPal IPN response is valid', true);
252
-
253
- // Get received values from post data
254
- $validate_ipn = array( 'cmd' => '_notify-validate' );
255
- $validate_ipn += wp_unslash( $_POST );
256
-
257
- // Send back post vars to paypal
258
- $params = array(
259
- 'body' => $validate_ipn,
260
- 'timeout' => 60,
261
- 'httpversion' => '1.1',
262
- 'compress' => false,
263
- 'decompress' => false,
264
- 'user-agent' => 'Simple Membership Plugin',
265
- );
266
-
267
- // Post back to get a response.
268
- $connection_url = $this->sandbox_mode ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr';
269
- $this->debug_log('Connecting to: ' . $connection_url, true);
270
- $response = wp_safe_remote_post( $connection_url, $params );
271
-
272
- //The following two lines can be used for debugging
273
- //$this->debug_log( 'IPN Request: ' . print_r( $params, true ) , true);
274
- //$this->debug_log( 'IPN Response: ' . print_r( $response, true ), true);
275
-
276
- // Check to see if the request was valid.
277
- if ( ! is_wp_error( $response ) && strstr( $response['body'], 'VERIFIED' ) ) {
278
- $this->debug_log('IPN successfully verified.', true);
279
- return true;
280
- }
281
-
282
- // Invalid IPN transaction. Check the log for details.
283
- $this->debug_log('IPN validation failed.', false);
284
- if ( is_wp_error( $response ) ) {
285
- $this->debug_log('Error response: ' . $response->get_error_message(), false);
286
- }
287
- return false;
288
- }
289
-
290
- function debug_log($message,$success,$end=false)
291
- {
292
- SwpmLog::log_simple_debug($message, $success, $end);
293
- }
294
  }
295
 
296
  // Start of IPN handling (script execution)
297
 
298
  $ipn_handler_instance = new swpm_paypal_ipn_handler();
299
 
300
- $settings = SwpmSettings::get_instance();
301
- $debug_enabled = $settings->get_value('enable-debug');
302
- if(!empty($debug_enabled))//debug is enabled in the system
303
- {
304
- $debug_log = "log.txt"; // Debug log file name
305
- echo 'Debug logging is enabled. Check the '.$debug_log.' file for debug output.';
306
- $ipn_handler_instance->ipn_log = true;
307
  $ipn_handler_instance->ipn_log_file = $debug_log;
308
- if(empty($_POST))
309
- {
310
- $ipn_handler_instance->debug_log('This debug line was generated because you entered the URL of the ipn handling script in the browser.',true,true);
311
- exit;
312
  }
313
  }
314
 
315
- $sandbox_enabled = $settings->get_value('enable-sandbox-testing');
316
- if(!empty($sandbox_enabled)) // Sandbox testing enabled
317
- {
318
- $ipn_handler_instance->paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
319
- $ipn_handler_instance->sandbox_mode = true;
320
  }
321
 
322
- $ipn_handler_instance->debug_log('Paypal Class Initiated by '.$_SERVER['REMOTE_ADDR'],true);
323
 
324
  // Validate the IPN
325
- if ($ipn_handler_instance->swpm_validate_ipn())
326
- {
327
- $ipn_handler_instance->debug_log('Creating product Information to send.',true);
328
 
329
- if(!$ipn_handler_instance->swpm_validate_and_create_membership()){
330
- $ipn_handler_instance->debug_log('IPN product validation failed.',false);
331
- }
332
  }
333
- $ipn_handler_instance->debug_log('Paypal class finished.',true,true);
1
  <?php
2
 
3
+ require_once 'swpm_handle_subsc_ipn.php';
4
+
5
+ class swpm_paypal_ipn_handler { // phpcs:ignore
6
+
7
+ public $ipn_log = false; // bool: log IPN results to text file?
8
+ public $ipn_log_file; // filename of the IPN log
9
+ public $ipn_response; // holds the IPN response from paypal
10
+ public $ipn_data = array(); // array contains the POST values for IPN
11
+ public $fields = array(); // array holds the fields to submit to paypal
12
+ public $sandbox_mode = false;
13
+
14
+ public function __construct() {
15
+ $this->paypal_url = 'https://www.paypal.com/cgi-bin/webscr';
16
+ $this->ipn_log_file = 'ipn_handle_debug_swpm.log';
17
+ $this->ipn_response = '';
18
+ }
19
+
20
+ public function swpm_validate_and_create_membership() {
21
+ // Check Product Name , Price , Currency , Receivers email ,
22
+ $error_msg = '';
23
+
24
+ // Read the IPN and validate
25
+ $gross_total = $this->ipn_data['mc_gross'];
26
+ $transaction_type = $this->ipn_data['txn_type'];
27
+ $txn_id = $this->ipn_data['txn_id'];
28
+ $payment_status = $this->ipn_data['payment_status'];
29
+
30
+ // Check payment status
31
+ if ( ! empty( $payment_status ) ) {
32
+ if ( 'Denied' == $payment_status ) {
33
+ $this->debug_log( 'Payment status for this transaction is DENIED. You denied the transaction... most likely a cancellation of an eCheque. Nothing to do here.', false );
34
+ return false;
35
+ }
36
+ if ( 'Canceled_Reversal' === $payment_status ) {
37
+ $this->debug_log( 'This is a dispute closed notification in your favour. The plugin will not do anyting.', false );
38
+ return true;
39
+ }
40
+ if ( 'Completed' !== $payment_status && 'Processed' !== $payment_status && 'Refunded' !== $payment_status && 'Reversed' !== $payment_status ) {
41
+ $error_msg .= 'Funds have not been cleared yet. Transaction will be processed when the funds clear!';
42
+ $this->debug_log( $error_msg, false );
43
+ return false;
44
+ }
45
+ }
46
+
47
+ // Check txn type
48
+ if ( 'new_case' === $transaction_type ) {
49
+ $this->debug_log( 'This is a dispute case. Nothing to do here.', true );
50
+ return true;
51
+ }
52
+
53
+ $custom = urldecode( $this->ipn_data['custom'] );
54
+ $this->ipn_data['custom'] = $custom;
55
+ $customvariables = SwpmTransactions::parse_custom_var( $custom );
56
+
57
+ // Handle refunds
58
+ if ( $gross_total < 0 ) {
59
+ // This is a refund or reversal
60
+ $this->debug_log( 'This is a refund notification. Refund amount: ' . $gross_total, true );
61
+ swpm_handle_subsc_cancel_stand_alone( $this->ipn_data, true );
62
+ return true;
63
+ }
64
+ if ( isset( $this->ipn_data['reason_code'] ) && 'refund' === $this->ipn_data['reason_code'] ) {
65
+ $this->debug_log( 'This is a refund notification. Refund amount: ' . $gross_total, true );
66
+ swpm_handle_subsc_cancel_stand_alone( $this->ipn_data, true );
67
+ return true;
68
+ }
69
+
70
+ if ( ( 'subscr_signup' === $transaction_type ) ) {
71
+ $this->debug_log( 'Subscription signup IPN received... (handled by the subscription IPN handler)', true );
72
+ // Code to handle the signup IPN for subscription
73
+ $subsc_ref = $customvariables['subsc_ref'];
74
+
75
+ if ( ! empty( $subsc_ref ) ) {
76
+ $this->debug_log( 'Found a membership level ID. Creating member account...', true );
77
+ $swpm_id = $customvariables['swpm_id'];
78
+ swpm_handle_subsc_signup_stand_alone( $this->ipn_data, $subsc_ref, $this->ipn_data['subscr_id'], $swpm_id );
79
+ // Handle customized subscription signup
80
+ }
81
+ return true;
82
+ } elseif ( ( $transaction_type == 'subscr_cancel' ) || ( $transaction_type == 'subscr_eot' ) || ( $transaction_type == 'subscr_failed' ) ) {
83
+ // Code to handle the IPN for subscription cancellation
84
+ $this->debug_log( 'Subscription cancellation IPN received... (handled by the subscription IPN handler)', true );
85
+ swpm_handle_subsc_cancel_stand_alone( $this->ipn_data );
86
+ return true;
87
+ } else {
88
+ $cart_items = array();
89
+ $this->debug_log( 'Transaction Type: Buy Now/Subscribe', true );
90
+ $item_number = $this->ipn_data['item_number'];
91
+ $item_name = $this->ipn_data['item_name'];
92
+ $quantity = $this->ipn_data['quantity'];
93
+ $mc_gross = $this->ipn_data['mc_gross'];
94
+ $mc_currency = $this->ipn_data['mc_currency'];
95
+
96
+ $current_item = array(
97
+ 'item_number' => $item_number,
98
+ 'item_name' => $item_name,
99
+ 'quantity' => $quantity,
100
+ 'mc_gross' => $mc_gross,
101
+ 'mc_currency' => $mc_currency,
102
+ );
103
+
104
+ array_push( $cart_items, $current_item );
105
+ }
106
+
107
+ $counter = 0;
108
+ foreach ( $cart_items as $current_cart_item ) {
109
+ $cart_item_data_num = $current_cart_item['item_number'];
110
+ $cart_item_data_name = trim( $current_cart_item['item_name'] );
111
+ $cart_item_data_quantity = $current_cart_item['quantity'];
112
+ $cart_item_data_total = $current_cart_item['mc_gross'];
113
+ $cart_item_data_currency = $current_cart_item['mc_currency'];
114
+ if ( empty( $cart_item_data_quantity ) ) {
115
+ $cart_item_data_quantity = 1;
116
+ }
117
+ $this->debug_log( 'Item Number: ' . $cart_item_data_num, true );
118
+ $this->debug_log( 'Item Name: ' . $cart_item_data_name, true );
119
+ $this->debug_log( 'Item Quantity: ' . $cart_item_data_quantity, true );
120
+ $this->debug_log( 'Item Total: ' . $cart_item_data_total, true );
121
+ $this->debug_log( 'Item Currency: ' . $cart_item_data_currency, true );
122
+
123
+ // Get the button id
124
+ $pp_hosted_button = false;
125
+ $button_id = $cart_item_data_num;// Button id is the item number.
126
+ $membership_level_id = get_post_meta( $button_id, 'membership_level_id', true );
127
+ if ( ! SwpmUtils::membership_level_id_exists( $membership_level_id ) ) {
128
+ $this->debug_log( 'This payment button was not created in the plugin. This is a paypal hosted button.', true );
129
+ $pp_hosted_button = true;
130
+ }
131
+
132
+ // Price check
133
+ $check_price = true;
134
+ $msg = '';
135
+ $msg = apply_filters( 'swpm_before_price_check_filter', $msg, $current_cart_item );
136
+ if ( ! empty( $msg ) && $msg == 'price-check-override' ) {// This filter allows an extension to do a customized version of price check (if needed)
137
+ $check_price = false;
138
+ $this->debug_log( 'Price and currency check has been overridden by an addon/extension.', true );
139
+ }
140
+ if ( $check_price && ! $pp_hosted_button ) {
141
+ // Check according to buy now payment or subscription payment.
142
+ $button_type = get_post_meta( $button_id, 'button_type', true );
143
+ if ( $button_type == 'pp_buy_now' ) {// This is a PayPal buy now type button
144
+ $expected_amount = ( get_post_meta( $button_id, 'payment_amount', true ) ) * $cart_item_data_quantity;
145
+ $expected_amount = round( $expected_amount, 2 );
146
+ $expected_amount = apply_filters( 'swpm_payment_amount_filter', $expected_amount, $button_id );
147
+ $received_amount = $cart_item_data_total;
148
+ } elseif ( $button_type == 'pp_subscription' ) {// This is a PayPal subscription type button
149
+ // Trial payment or recurring payment?
150
+ // TODO - is_recurring_payment() check to determine if it is a recurring payment
151
+ $trial_billing_amount = get_post_meta( $button_id, 'trial_billing_amount', true );
152
+ $billing_amount = get_post_meta( $button_id, 'billing_amount', true );
153
+ $expected_amount = 0;
154
+ $received_amount = $cart_item_data_total;
155
+ } else {
156
+ $this->debug_log( 'Error! Unexpected button type: ' . $button_type, false );
157
+ return false;
158
+ }
159
+
160
+ if ( $received_amount < $expected_amount ) {
161
+ // Error! amount received is less than expected. This is invalid.
162
+ $this->debug_log( 'Expected amount: ' . $expected_amount, true );
163
+ $this->debug_log( 'Received amount: ' . $received_amount, true );
164
+ $this->debug_log( 'Price check failed. Amount received is less than the amount expected. This payment will not be processed.', false );
165
+ return false;
166
+ }
167
+ }
168
+
169
+ // *** Handle Membership Payment ***
170
+ // --------------------------------------------------------------------------------------
171
+ // ========= Need to find the (level ID) in the custom variable ============
172
+ $subsc_ref = $customvariables['subsc_ref'];// Membership level ID
173
+ $this->debug_log( 'Membership payment paid for membership level ID: ' . $subsc_ref, true );
174
+ if ( ! empty( $subsc_ref ) ) {
175
+ $swpm_id = '';
176
+ if ( isset( $customvariables['swpm_id'] ) ) {
177
+ $swpm_id = $customvariables['swpm_id'];
178
+ }
179
+ if ( $transaction_type == 'web_accept' ) {
180
+ $this->debug_log( 'Transaction type: web_accept. Creating member account...', true );
181
+ swpm_handle_subsc_signup_stand_alone( $this->ipn_data, $subsc_ref, $this->ipn_data['txn_id'], $swpm_id );
182
+ } elseif ( $transaction_type == 'subscr_payment' ) {
183
+ $this->debug_log( 'Transaction type: subscr_payment. Checking if the member profile needed to be updated', true );
184
+ swpm_update_member_subscription_start_date_if_applicable( $this->ipn_data );
185
+ }
186
+ } else {
187
+ $this->debug_log( 'Membership level ID is missing in the payment notification! Cannot process this notification.', false );
188
+ }
189
+ // == End of Membership payment handling ==
190
+ $counter++;
191
+ }
192
+
193
+ /*** Do Post payment operation and cleanup */
194
+ // Save the transaction data
195
+ $this->debug_log( 'Saving transaction data to the database table.', true );
196
+ $this->ipn_data['gateway'] = 'paypal';
197
+ $this->ipn_data['status'] = $this->ipn_data['payment_status'];
198
+ SwpmTransactions::save_txn_record( $this->ipn_data, $cart_items );
199
+ $this->debug_log( 'Transaction data saved.', true );
200
+
201
+ // Trigger the PayPal IPN processed action hook (so other plugins can can listen for this event).
202
+ do_action( 'swpm_paypal_ipn_processed', $this->ipn_data );
203
+
204
+ do_action( 'swpm_payment_ipn_processed', $this->ipn_data );
205
+
206
+ return true;
207
+ }
208
+
209
+ public function swpm_validate_ipn() {
210
+ // Generate the post string from the _POST vars aswell as load the _POST vars into an arry
211
+ $post_string = '';
212
+ foreach ( $_POST as $field => $value ) {
213
+ $this->ipn_data[ "$field" ] = $value;
214
+ $post_string .= $field . '=' . urlencode( stripslashes( $value ) ) . '&';
215
+ }
216
+
217
+ $this->post_string = $post_string;
218
+ $this->debug_log( 'Post string : ' . $this->post_string, true );
219
+
220
+ // IPN validation check
221
+ if ( $this->validate_ipn_using_remote_post() ) {
222
+ // We can also use an alternative validation using the validate_ipn_using_curl() function
223
+ return true;
224
+ } else {
225
+ return false;
226
+ }
227
+
228
+ }
229
+
230
+ public function validate_ipn_using_remote_post() {
231
+ $this->debug_log( 'Checking if PayPal IPN response is valid', true );
232
+
233
+ // Get received values from post data
234
+ $validate_ipn = array( 'cmd' => '_notify-validate' );
235
+ $validate_ipn += wp_unslash( $_POST );
236
+
237
+ // Send back post vars to paypal
238
+ $params = array(
239
+ 'body' => $validate_ipn,
240
+ 'timeout' => 60,
241
+ 'httpversion' => '1.1',
242
+ 'compress' => false,
243
+ 'decompress' => false,
244
+ 'user-agent' => 'Simple Membership Plugin',
245
+ );
246
+
247
+ // Post back to get a response.
248
+ $connection_url = $this->sandbox_mode ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr';
249
+ $this->debug_log( 'Connecting to: ' . $connection_url, true );
250
+ $response = wp_safe_remote_post( $connection_url, $params );
251
+
252
+ // The following two lines can be used for debugging
253
+ // $this->debug_log( 'IPN Request: ' . print_r( $params, true ) , true);
254
+ // $this->debug_log( 'IPN Response: ' . print_r( $response, true ), true);
255
+
256
+ // Check to see if the request was valid.
257
+ if ( ! is_wp_error( $response ) && strstr( $response['body'], 'VERIFIED' ) ) {
258
+ $this->debug_log( 'IPN successfully verified.', true );
259
+ return true;
260
+ }
261
+
262
+ // Invalid IPN transaction. Check the log for details.
263
+ $this->debug_log( 'IPN validation failed.', false );
264
+ if ( is_wp_error( $response ) ) {
265
+ $this->debug_log( 'Error response: ' . $response->get_error_message(), false );
266
+ }
267
+ return false;
268
+ }
269
+
270
+ public function debug_log( $message, $success, $end = false ) {
271
+ SwpmLog::log_simple_debug( $message, $success, $end );
272
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  }
274
 
275
  // Start of IPN handling (script execution)
276
 
277
  $ipn_handler_instance = new swpm_paypal_ipn_handler();
278
 
279
+ $settings = SwpmSettings::get_instance();
280
+ $debug_enabled = $settings->get_value( 'enable-debug' );
281
+ if ( ! empty( $debug_enabled ) ) {
282
+ $debug_log = 'log.txt'; // Debug log file name
283
+ echo esc_html( sprintf( 'Debug logging is enabled. Check the %s file for debug output.', $debug_log ) );
284
+ $ipn_handler_instance->ipn_log = true;
 
285
  $ipn_handler_instance->ipn_log_file = $debug_log;
286
+ if ( empty( $_POST ) ) {
287
+ $ipn_handler_instance->debug_log( 'This debug line was generated because you entered the URL of the ipn handling script in the browser.', true, true );
288
+ exit;
 
289
  }
290
  }
291
 
292
+ $sandbox_enabled = $settings->get_value( 'enable-sandbox-testing' );
293
+ if ( ! empty( $sandbox_enabled ) ) {
294
+ $ipn_handler_instance->paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
295
+ $ipn_handler_instance->sandbox_mode = true;
 
296
  }
297
 
298
+ $ipn_handler_instance->debug_log( 'Paypal Class Initiated by ' . $_SERVER['REMOTE_ADDR'], true );
299
 
300
  // Validate the IPN
301
+ if ( $ipn_handler_instance->swpm_validate_ipn() ) {
302
+ $ipn_handler_instance->debug_log( 'Creating product Information to send.', true );
 
303
 
304
+ if ( ! $ipn_handler_instance->swpm_validate_and_create_membership() ) {
305
+ $ipn_handler_instance->debug_log( 'IPN product validation failed.', false );
306
+ }
307
  }
308
+ $ipn_handler_instance->debug_log( 'Paypal class finished.', true, true );
ipn/swpm_handle_subsc_ipn.php CHANGED
@@ -1,284 +1,332 @@
1
  <?php
2
 
3
- function swpm_handle_subsc_signup_stand_alone($ipn_data, $subsc_ref, $unique_ref, $swpm_id = '') {
4
- global $wpdb;
5
- $settings = SwpmSettings::get_instance();
6
- $members_table_name = $wpdb->prefix . "swpm_members_tbl";
7
- $membership_level = $subsc_ref;
8
-
9
- if (isset($ipn_data['gateway']) && $ipn_data['gateway'] == 'stripe' && isset($ipn_data['subscr_id'])) {
10
- $subscr_id = $ipn_data['subscr_id'];
11
- } else {
12
- $subscr_id = $unique_ref;
13
- }
14
-
15
- swpm_debug_log_subsc("swpm_handle_subsc_signup_stand_alone(). Custom value: " . $ipn_data['custom'] . ", Unique reference: " . $unique_ref, true);
16
- $custom_vars = parse_str($ipn_data['custom']);
17
-
18
- if (empty($swpm_id)) {
19
- //Lets try to find an existing user profile for this payment
20
- $email = $ipn_data['payer_email'];
21
- $query_db = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name WHERE email = %s", $email), OBJECT);
22
- if (!$query_db) {//try to retrieve the member details based on the unique_ref
23
- swpm_debug_log_subsc("Could not find any record using the given email address (" . $email . "). Attempting to query database using the unique reference: " . $unique_ref, true);
24
- if (!empty($unique_ref)) {
25
- $query_db = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name WHERE subscr_id = %s", $unique_ref), OBJECT);
26
- if ($query_db) {
27
- $swpm_id = $query_db->member_id;
28
- swpm_debug_log_subsc("Found a match in the member database using unique reference. Member ID: " . $swpm_id, true);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  } else {
30
- swpm_debug_log_subsc("Did not find a match for an existing member profile for the given reference. This must me a new payment from a new member.", true);
 
31
  }
32
- } else {
33
- swpm_debug_log_subsc("Unique reference is missing in the notification so we have to assume that this is not a payment for an existing member.", true);
34
- }
35
- } else {
36
- $swpm_id = $query_db->member_id;
37
- swpm_debug_log_subsc("Found a match in the member database. Member ID: " . $swpm_id, true);
38
- }
39
- }
40
-
41
- if (!empty($swpm_id)) {
42
- //This is payment from an existing member/user. Update the existing member account
43
- swpm_debug_log_subsc("Modifying the existing membership profile... Member ID: " . $swpm_id, true);
44
-
45
- //Upgrade the member account
46
- $account_state = 'active'; //This is renewal or upgrade of a previously active account. So the status should be set to active
47
-
48
- $resultset = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where member_id=%d", $swpm_id), OBJECT);
49
- if (!$resultset) {
50
- swpm_debug_log_subsc("ERROR! Could not find a member account record for the given Member ID: " . $swpm_id, false);
51
- return;
52
- }
53
- $old_membership_level = $resultset->membership_level;
54
-
55
- //If the payment is for the same/existing membership level, then this is a renewal. Refresh the start date as appropriate.
56
- $args = array('swpm_id' => $swpm_id, 'membership_level' => $membership_level, 'old_membership_level' => $old_membership_level);
57
- $subscription_starts = SwpmMemberUtils::calculate_access_start_date_for_account_update($args);
58
- $subscription_starts = apply_filters('swpm_account_update_subscription_starts', $subscription_starts, $args);
59
- swpm_debug_log_subsc("Setting access starts date value to: " . $subscription_starts, true);
60
-
61
- swpm_debug_log_subsc("Updating the current membership level (" . $old_membership_level . ") of this member to the newly paid level (" . $membership_level . ")", true);
62
- //Set account status to active, update level to the newly paid level, update access start date, update subsriber ID (if applicable).
63
- $updatedb = $wpdb->prepare("UPDATE $members_table_name SET account_state=%s, membership_level=%d,subscription_starts=%s,subscr_id=%s WHERE member_id=%d", $account_state, $membership_level, $subscription_starts, $subscr_id, $swpm_id);
64
- $results = $wpdb->query($updatedb);
65
-
66
- //Trigger level changed/updated action hook
67
- do_action('swpm_membership_level_changed', array('member_id' => $swpm_id, 'from_level' => $old_membership_level, 'to_level' => $membership_level));
68
-
69
- //Set Email details for the account upgrade notification
70
- $email = $ipn_data['payer_email'];
71
- $subject = $settings->get_value('upgrade-complete-mail-subject');
72
- if (empty($subject)) {
73
- $subject = "Member Account Upgraded";
74
- }
75
- $body = $settings->get_value('upgrade-complete-mail-body');
76
- if (empty($body)) {
77
- $body = "Your account has been upgraded successfully";
78
- }
79
- $from_address = $settings->get_value('email-from');
80
-
81
- $additional_args = array();
82
- $email_body = SwpmMiscUtils::replace_dynamic_tags($body, $swpm_id, $additional_args);
83
- $headers = 'From: ' . $from_address . "\r\n";
84
- }// End of existing user account upgrade/update
85
- else {
86
- // create new member account
87
- $default_account_status = $settings->get_value('default-account-status', 'active');
88
-
89
- $data = array();
90
- $data['user_name'] = '';
91
- $data['password'] = '';
92
-
93
- $data['first_name'] = $ipn_data['first_name'];
94
- $data['last_name'] = $ipn_data['last_name'];
95
- $data['email'] = $ipn_data['payer_email'];
96
- $data['membership_level'] = $membership_level;
97
- $data['subscr_id'] = $subscr_id;
98
-
99
- $data['gender'] = 'not specified';
100
- $data['address_street'] = $ipn_data['address_street'];
101
- $data['address_city'] = $ipn_data['address_city'];
102
- $data['address_state'] = $ipn_data['address_state'];
103
- $data['address_zipcode'] = isset($ipn_data['address_zip']) ? $ipn_data['address_zip'] : '';
104
- $data['country'] = isset($ipn_data['address_country']) ? $ipn_data['address_country'] : '';
105
- $data['member_since'] = $data['subscription_starts'] = $data['last_accessed'] = date("Y-m-d");
106
- $data['account_state'] = $default_account_status;
107
- $reg_code = uniqid();
108
- $md5_code = md5($reg_code);
109
- $data['reg_code'] = $md5_code;
110
- $data['referrer'] = $data['extra_info'] = $data['txn_id'] = '';
111
- $data['last_accessed_from_ip'] = isset($user_ip) ? $user_ip : ''; //Save the users IP address
112
-
113
- swpm_debug_log_subsc("Creating new member account. Membership level ID: " . $membership_level . ", Subscriber ID value: " . $data['subscr_id'], true);
114
 
115
- $data = array_filter($data); //Remove any null values.
116
- $wpdb->insert($members_table_name, $data); //Create the member record
117
- $results = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where subscr_id=%s and reg_code=%s", $subscr_id, $md5_code), OBJECT);
118
- $id = $results->member_id; //Alternatively use $wpdb->insert_id;
119
- if (empty($id)) {
120
- swpm_debug_log_subsc("Error! Failed to insert a new member record. This request will fail.", false);
121
- return;
122
- }
123
-
124
- $separator = '?';
125
- $url = $settings->get_value('registration-page-url');
126
- if (strpos($url, '?') !== false) {
127
- $separator = '&';
128
- }
129
-
130
- $reg_url = $url . $separator . 'member_id=' . $id . '&code=' . $md5_code;
131
- swpm_debug_log_subsc("Member signup URL: " . $reg_url, true);
132
-
133
- $subject = $settings->get_value('reg-prompt-complete-mail-subject');
134
- if (empty($subject)) {
135
- $subject = "Please complete your registration";
136
- }
137
- $body = $settings->get_value('reg-prompt-complete-mail-body');
138
- if (empty($body)) {
139
- $body = "Please use the following link to complete your registration. \n {reg_link}";
140
- }
141
- $from_address = $settings->get_value('email-from');
142
- $body = html_entity_decode($body);
143
-
144
- $additional_args = array('reg_link' => $reg_url);
145
- $email_body = SwpmMiscUtils::replace_dynamic_tags($body, $id, $additional_args);
146
- $headers = 'From: ' . $from_address . "\r\n";
147
- }
148
-
149
- $subject = apply_filters('swpm_email_signup_upgrade_complete_subject', $subject);
150
- $email_body = apply_filters('swpm_email_signup_upgrade_complete_body', $email_body);
151
- wp_mail($email, $subject, $email_body, $headers);
152
- swpm_debug_log_subsc("Member signup/upgrade completion email successfully sent to: " . $email, true);
153
  }
154
 
155
  /*
156
  * All in one function that can handle notification for refund, cancellation, end of term
157
  */
158
 
159
- function swpm_handle_subsc_cancel_stand_alone($ipn_data, $refund = false) {
160
-
161
- global $wpdb;
162
- $members_table_name = $wpdb->prefix . "swpm_members_tbl";
163
-
164
- $customvariables = SwpmTransactions::parse_custom_var($ipn_data['custom']);
165
- $swpm_id = $customvariables['swpm_id'];
166
-
167
- swpm_debug_log_subsc("Refund/Cancellation check - lets see if a member account needs to be deactivated.", true);
168
- //swpm_debug_log_subsc("Parent txn id: " . $ipn_data['parent_txn_id'] . ", Subscr ID: " . $ipn_data['subscr_id'] . ", SWPM ID: " . $swpm_id, true);
169
-
170
- if (!empty($swpm_id)) {
171
- //This IPN has the SWPM ID. Retrieve the member record using member ID.
172
- swpm_debug_log_subsc("Member ID is present. Retrieving member account from the database. Member ID: " . $swpm_id, true);
173
- $resultset = SwpmMemberUtils::get_user_by_id($swpm_id);
174
- } else if (isset($ipn_data['subscr_id']) && !empty($ipn_data['subscr_id'])) {
175
- //This IPN has the subscriber ID. Retrieve the member record using subscr_id.
176
- $subscr_id = $ipn_data['subscr_id'];
177
- swpm_debug_log_subsc("Subscriber ID is present. Retrieving member account from the database. Subscr_id: " . $subscr_id, true);
178
- $resultset = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where subscr_id LIKE %s", '%' . $wpdb->esc_like($subscr_id) . '%'), OBJECT);
179
- } else {
180
- //Refund for a one time transaction. Use the parent transaction ID to retrieve the profile.
181
- $subscr_id = $ipn_data['parent_txn_id'];
182
- $resultset = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name where subscr_id LIKE %s", '%' . $wpdb->esc_like($subscr_id) . '%'), OBJECT);
183
- }
184
-
185
- if ($resultset) {
186
- //We have found a member profile for this notification.
187
-
188
- $member_id = $resultset->member_id;
189
-
190
- //First, check if this is a refund notification.
191
- if ($refund) {
192
- //This is a refund (not just a subscription cancellation or end). So deactivate the account regardless and bail.
193
- SwpmMemberUtils::update_account_state($member_id, 'inactive'); //Set the account status to inactive.
194
- swpm_debug_log_subsc("Subscription refund notification received! Member account deactivated.", true);
195
- return;
196
- }
197
-
198
- //This is a cancellation or end of subscription term (no refund).
199
- //Lets retrieve the membership level and details
200
- $level_id = $resultset->membership_level;
201
- swpm_debug_log_subsc("Membership level ID of the member is: " . $level_id, true);
202
- $level_row = SwpmUtils::get_membership_level_row_by_id($level_id);
203
- $subs_duration_type = $level_row->subscription_duration_type;
204
-
205
- if ($subs_duration_type == SwpmMembershipLevel::NO_EXPIRY) {
206
- //This is a level with "no expiry" or "until cancelled" duration.
207
- swpm_debug_log_subsc('This is a level with "no expiry" or "until cancelled" duration', true);
208
-
209
- //Deactivate this account as the membership level is "no expiry" or "until cancelled".
210
- $account_state = 'inactive';
211
- SwpmMemberUtils::update_account_state($member_id, $account_state);
212
- swpm_debug_log_subsc("Subscription cancellation or end of term received! Member account deactivated. Member ID: " . $member_id, true);
213
- } else if ($subs_duration_type == SwpmMembershipLevel::FIXED_DATE) {
214
- //This is a level with a "fixed expiry date" duration.
215
- swpm_debug_log_subsc('This is a level with a "fixed expiry date" duration.', true);
216
- swpm_debug_log_subsc('Nothing to do here. The account will expire on the fixed set date.', true);
217
- } else {
218
- //This is a level with "duration" type expiry (example: 30 days, 1 year etc). subscription_period has the duration/period.
219
- $subs_period = $level_row->subscription_period;
220
- $subs_period_unit = SwpmMembershipLevel::get_level_duration_type_string($level_row->subscription_duration_type);
221
-
222
- swpm_debug_log_subsc('This is a level with "duration" type expiry. Duration period: ' . $subs_period . ', Unit: ' . $subs_period_unit, true);
223
- swpm_debug_log_subsc('Nothing to do here. The account will expire after the duration time is over.', true);
224
-
225
- //TODO Later as an improvement. If you wanted to segment the members who have unsubscribed, you can set the account status to "unsubscribed" here.
226
- //Make sure the cronjob to do expiry check and deactivate the member accounts treat this status as if it is "active".
227
- }
228
-
229
- $ipn_data['member_id'] = $member_id;
230
- do_action('swpm_subscription_payment_cancelled', $ipn_data); //Hook for recurring payment received
231
- } else {
232
- swpm_debug_log_subsc("No associated active member record found for this notification.", false);
233
- return;
234
- }
 
 
 
 
 
 
 
 
 
 
 
235
  }
236
 
237
- function swpm_update_member_subscription_start_date_if_applicable($ipn_data) {
238
- global $wpdb;
239
- $members_table_name = $wpdb->prefix . "swpm_members_tbl";
240
- $email = $ipn_data['payer_email'];
241
- $subscr_id = $ipn_data['subscr_id'];
242
- $account_state = SwpmSettings::get_instance()->get_value('default-account-status', 'active');
243
- swpm_debug_log_subsc("Updating subscription start date if applicable for this subscription payment. Subscriber ID: " . $subscr_id . " Email: " . $email, true);
244
-
245
- //We can also query using the email address or SWPM ID (if present in custom var).
246
- $query_db = $wpdb->get_row($wpdb->prepare("SELECT * FROM $members_table_name WHERE subscr_id = %s", $subscr_id), OBJECT);
247
- if ($query_db) {
248
- $swpm_id = $query_db->member_id;
249
- $current_primary_level = $query_db->membership_level;
250
- swpm_debug_log_subsc("Found a record in the member table. The Member ID of the account to check is: " . $swpm_id . " Membership Level: " . $current_primary_level, true);
251
-
252
- $ipn_data['member_id'] = $swpm_id;
253
- do_action('swpm_recurring_payment_received', $ipn_data); //Hook for recurring payment received
254
-
255
- $subscription_starts = (date("Y-m-d"));
256
-
257
- $updatedb = $wpdb->prepare("UPDATE $members_table_name SET account_state=%s,subscription_starts=%s WHERE member_id=%d", $account_state, $subscription_starts, $swpm_id);
258
- $resultset = $wpdb->query($updatedb);
259
- swpm_debug_log_subsc("Updated the member profile with current date as the subscription start date.", true);
260
- } else {
261
- swpm_debug_log_subsc("Did not find an existing record in the members table for subscriber ID: " . $subscr_id, true);
262
- swpm_debug_log_subsc("This is a new subscription payment for a new subscription agreement.", true);
263
- }
 
 
 
 
 
 
 
 
264
  }
265
 
266
- function swpm_debug_log_subsc($message, $success, $end = false) {
267
- $settings = SwpmSettings::get_instance();
268
- $debug_enabled = $settings->get_value('enable-debug');
269
- if (empty($debug_enabled)) {//Debug is not enabled
270
- return;
271
- }
272
-
273
- $debug_log_file_name = SIMPLE_WP_MEMBERSHIP_PATH . 'log.txt';
274
-
275
- // Timestamp
276
- $text = '[' . date('m/d/Y g:i A') . '] - ' . (($success) ? 'SUCCESS: ' : 'FAILURE: ') . $message . "\n";
277
- if ($end) {
278
- $text .= "\n------------------------------------------------------------------\n\n";
279
- }
280
- // Write to log
281
- $fp = fopen($debug_log_file_name, 'a');
282
- fwrite($fp, $text);
283
- fclose($fp); // close file
284
  }
1
  <?php
2
 
3
+ function swpm_handle_subsc_signup_stand_alone( $ipn_data, $subsc_ref, $unique_ref, $swpm_id = '' ) {
4
+ global $wpdb;
5
+ $settings = SwpmSettings::get_instance();
6
+ $membership_level = $subsc_ref;
7
+
8
+ if ( isset( $ipn_data['subscr_id'] ) && !empty( $ipn_data['subscr_id'] ) ) {
9
+ $subscr_id = $ipn_data['subscr_id'];
10
+ } else {
11
+ $subscr_id = $unique_ref;
12
+ }
13
+
14
+ swpm_debug_log_subsc( 'swpm_handle_subsc_signup_stand_alone(). Custom value: ' . $ipn_data['custom'] . ', Unique reference: ' . $unique_ref, true );
15
+ parse_str( $ipn_data['custom'], $custom_vars );
16
+
17
+ if ( empty( $swpm_id ) ) {
18
+ // Lets try to find an existing user profile for this payment.
19
+ $email = $ipn_data['payer_email'];
20
+ $query_db = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_members_tbl WHERE email = %s", $email ), OBJECT ); // db call ok; no-cache ok.
21
+ if ( ! $query_db ) { // try to retrieve the member details based on the unique_ref.
22
+ swpm_debug_log_subsc( 'Could not find any record using the given email address (' . $email . '). Attempting to query database using the unique reference: ' . $unique_ref, true );
23
+ if ( ! empty( $unique_ref ) ) {
24
+ $query_db = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_members_tbl WHERE subscr_id = %s", $unique_ref ), OBJECT ); // db call ok; no-cache ok.
25
+ if ( $query_db ) {
26
+ $swpm_id = $query_db->member_id;
27
+ swpm_debug_log_subsc( 'Found a match in the member database using unique reference. Member ID: ' . $swpm_id, true );
28
+ } else {
29
+ swpm_debug_log_subsc( 'Did not find a match for an existing member profile for the given reference. This must be a new payment from a new member.', true );
30
+ }
31
+ } else {
32
+ swpm_debug_log_subsc( 'Unique reference is missing in the notification so we have to assume that this is not a payment for an existing member.', true );
33
+ }
34
+ } else {
35
+ $swpm_id = $query_db->member_id;
36
+ swpm_debug_log_subsc( 'Found a match in the member database. Member ID: ' . $swpm_id, true );
37
+ }
38
+ }
39
+
40
+ if ( ! empty( $swpm_id ) ) {
41
+ // This is payment from an existing member/user. Update the existing member account.
42
+ swpm_debug_log_subsc( 'Modifying the existing membership profile... Member ID: ' . $swpm_id, true );
43
+
44
+ // Upgrade the member account.
45
+ $account_state = 'active'; // This is renewal or upgrade of a previously active account. So the status should be set to active.
46
+
47
+ $resultset = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_members_tbl WHERE member_id = %d", $swpm_id ), OBJECT );
48
+ if ( ! $resultset ) {
49
+ swpm_debug_log_subsc( 'ERROR! Could not find a member account record for the given Member ID: ' . $swpm_id, false );
50
+ return;
51
+ }
52
+ $old_membership_level = $resultset->membership_level;
53
+
54
+ // If the payment is for the same/existing membership level, then this is a renewal. Refresh the start date as appropriate.
55
+ $args = array(
56
+ 'swpm_id' => $swpm_id,
57
+ 'membership_level' => $membership_level,
58
+ 'old_membership_level' => $old_membership_level,
59
+ );
60
+ $subscription_starts = SwpmMemberUtils::calculate_access_start_date_for_account_update( $args );
61
+ $subscription_starts = apply_filters( 'swpm_account_update_subscription_starts', $subscription_starts, $args );
62
+ swpm_debug_log_subsc( 'Setting access starts date value to: ' . $subscription_starts, true );
63
+
64
+ swpm_debug_log_subsc( 'Updating the current membership level (' . $old_membership_level . ') of this member to the newly paid level (' . $membership_level . ')', true );
65
+ // Set account status to active, update level to the newly paid level, update access start date, update subsriber ID (if applicable).
66
+ $wpdb->query(
67
+ $wpdb->prepare(
68
+ "UPDATE {$wpdb->prefix}swpm_members_tbl SET account_state=%s, membership_level=%d,subscription_starts=%s,subscr_id=%s WHERE member_id=%d",
69
+ $account_state,
70
+ $membership_level,
71
+ $subscription_starts,
72
+ $subscr_id,
73
+ $swpm_id
74
+ )
75
+ );
76
+
77
+ // Trigger level changed/updated action hook.
78
+ do_action(
79
+ 'swpm_membership_level_changed',
80
+ array(
81
+ 'member_id' => $swpm_id,
82
+ 'from_level' => $old_membership_level,
83
+ 'to_level' => $membership_level,
84
+ )
85
+ );
86
+
87
+ // Set Email details for the account upgrade notification.
88
+ $email = $ipn_data['payer_email'];
89
+ $subject = $settings->get_value( 'upgrade-complete-mail-subject' );
90
+ if ( empty( $subject ) ) {
91
+ $subject = 'Member Account Upgraded';
92
+ }
93
+ $body = $settings->get_value( 'upgrade-complete-mail-body' );
94
+ if ( empty( $body ) ) {
95
+ $body = 'Your account has been upgraded successfully';
96
+ }
97
+ $from_address = $settings->get_value( 'email-from' );
98
+
99
+ $additional_args = array();
100
+ $email_body = SwpmMiscUtils::replace_dynamic_tags( $body, $swpm_id, $additional_args );
101
+ $headers = 'From: ' . $from_address . "\r\n";
102
+
103
+ $subject = apply_filters( 'swpm_email_upgrade_complete_subject', $subject );
104
+ $email_body = apply_filters( 'swpm_email_upgrade_complete_body', $email_body );
105
+
106
+ if ( $settings->get_value('disable-email-after-upgrade') ) {
107
+ swpm_debug_log_subsc( 'The disable upgrade email settings is checked. No account upgrade/update email will be sent.', true );
108
+ //Nothing to do.
109
  } else {
110
+ wp_mail( $email, $subject, $email_body, $headers );
111
+ swpm_debug_log_subsc( 'Member upgrade/update completion email successfully sent to: ' . $email, true );
112
  }
113
+ // End of existing user account upgrade/update.
114
+ } else {
115
+ // create new member account.
116
+ $default_account_status = $settings->get_value( 'default-account-status', 'active' );
117
+
118
+ $data = array();
119
+ $data['user_name'] = '';
120
+ $data['password'] = '';
121
+
122
+ $data['first_name'] = $ipn_data['first_name'];
123
+ $data['last_name'] = $ipn_data['last_name'];
124
+ $data['email'] = $ipn_data['payer_email'];
125
+ $data['membership_level'] = $membership_level;
126
+ $data['subscr_id'] = $subscr_id;
127
+
128
+ $data['gender'] = 'not specified';
129
+ $data['address_street'] = $ipn_data['address_street'];
130
+ $data['address_city'] = $ipn_data['address_city'];
131
+ $data['address_state'] = $ipn_data['address_state'];
132
+ $data['address_zipcode'] = isset( $ipn_data['address_zip'] ) ? $ipn_data['address_zip'] : '';
133
+ $data['country'] = isset( $ipn_data['address_country'] ) ? $ipn_data['address_country'] : '';
134
+ $data['member_since'] = $data['subscription_starts'] = $data['last_accessed'] = date( 'Y-m-d' );
135
+ $data['account_state'] = $default_account_status;
136
+ $reg_code = uniqid();
137
+ $md5_code = md5( $reg_code );
138
+ $data['reg_code'] = $md5_code;
139
+ $data['referrer'] = $data['extra_info'] = $data['txn_id'] = '';
140
+ $data['last_accessed_from_ip'] = isset( $custom_vars['user_ip'] ) ? $custom_vars['user_ip'] : ''; // Save the users IP address.
141
+
142
+ swpm_debug_log_subsc( 'Creating new member account. Membership level ID: ' . $membership_level . ', Subscriber ID value: ' . $data['subscr_id'], true );
143
+
144
+ $data = array_filter( $data ); // Remove any null values.
145
+ $wpdb->insert( "{$wpdb->prefix}swpm_members_tbl", $data ); // Create the member record.
146
+ $id = $wpdb->insert_id;
147
+ if ( empty( $id ) ) {
148
+ swpm_debug_log_subsc( 'Error! Failed to insert a new member record. This request will fail.', false );
149
+ return;
150
+ }
151
+
152
+ $separator = '?';
153
+ $url = $settings->get_value( 'registration-page-url' );
154
+ if ( strpos( $url, '?' ) !== false ) {
155
+ $separator = '&';
156
+ }
157
+
158
+ $reg_url = $url . $separator . 'member_id=' . $id . '&code=' . $md5_code;
159
+ swpm_debug_log_subsc( 'Member signup URL: ' . $reg_url, true );
160
+
161
+ $subject = $settings->get_value( 'reg-prompt-complete-mail-subject' );
162
+ if ( empty( $subject ) ) {
163
+ $subject = 'Please complete your registration';
164
+ }
165
+ $body = $settings->get_value( 'reg-prompt-complete-mail-body' );
166
+ if ( empty( $body ) ) {
167
+ $body = "Please use the following link to complete your registration. \n {reg_link}";
168
+ }
169
+ $from_address = $settings->get_value( 'email-from' );
170
+ $body = html_entity_decode( $body );
171
+
172
+ $additional_args = array( 'reg_link' => $reg_url );
173
+ $email_body = SwpmMiscUtils::replace_dynamic_tags( $body, $id, $additional_args );
174
+ $headers = 'From: ' . $from_address . "\r\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
 
176
+ $subject = apply_filters( 'swpm_email_complete_registration_subject', $subject );
177
+ $email_body = apply_filters( 'swpm_email_complete_registration_body', $email_body );
178
+ wp_mail( $email, $subject, $email_body, $headers );
179
+ swpm_debug_log_subsc( 'Member signup (prompt to complete registration) email successfully sent to: ' . $email, true );
180
+ }
181
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  }
183
 
184
  /*
185
  * All in one function that can handle notification for refund, cancellation, end of term
186
  */
187
 
188
+ function swpm_handle_subsc_cancel_stand_alone( $ipn_data, $refund = false ) {
189
+
190
+ global $wpdb;
191
+
192
+ $customvariables = SwpmTransactions::parse_custom_var( $ipn_data['custom'] );
193
+ $swpm_id = $customvariables['swpm_id'];
194
+
195
+ swpm_debug_log_subsc( 'Refund/Cancellation check - lets see if a member account needs to be deactivated.', true );
196
+ // swpm_debug_log_subsc("Parent txn id: " . $ipn_data['parent_txn_id'] . ", Subscr ID: " . $ipn_data['subscr_id'] . ", SWPM ID: " . $swpm_id, true);.
197
+
198
+ if ( ! empty( $swpm_id ) ) {
199
+ // This IPN has the SWPM ID. Retrieve the member record using member ID.
200
+ swpm_debug_log_subsc( 'Member ID is present. Retrieving member account from the database. Member ID: ' . $swpm_id, true );
201
+ $resultset = SwpmMemberUtils::get_user_by_id( $swpm_id );
202
+ } elseif ( isset( $ipn_data['subscr_id'] ) && ! empty( $ipn_data['subscr_id'] ) ) {
203
+ // This IPN has the subscriber ID. Retrieve the member record using subscr_id.
204
+ $subscr_id = $ipn_data['subscr_id'];
205
+ swpm_debug_log_subsc( 'Subscriber ID is present. Retrieving member account from the database. Subscr_id: ' . $subscr_id, true );
206
+ $resultset = $wpdb->get_row(
207
+ $wpdb->prepare(
208
+ "SELECT * FROM {$wpdb->prefix}swpm_members_tbl where subscr_id LIKE %s",
209
+ '%' . $wpdb->esc_like( $subscr_id ) . '%'
210
+ ),
211
+ OBJECT
212
+ );
213
+ } else {
214
+ // Refund for a one time transaction. Use the parent transaction ID to retrieve the profile.
215
+ $subscr_id = $ipn_data['parent_txn_id'];
216
+ $resultset = $wpdb->get_row(
217
+ $wpdb->prepare(
218
+ "SELECT * FROM {$wpdb->prefix}swpm_members_tbl where subscr_id LIKE %s",
219
+ '%' . $wpdb->esc_like( $subscr_id ) . '%'
220
+ ),
221
+ OBJECT
222
+ );
223
+ }
224
+
225
+ if ( $resultset ) {
226
+ // We have found a member profile for this notification.
227
+
228
+ $member_id = $resultset->member_id;
229
+
230
+ // First, check if this is a refund notification.
231
+ if ( $refund ) {
232
+ // This is a refund (not just a subscription cancellation or end). So deactivate the account regardless and bail.
233
+ SwpmMemberUtils::update_account_state( $member_id, 'inactive' ); // Set the account status to inactive.
234
+ swpm_debug_log_subsc( 'Subscription refund notification received! Member account deactivated.', true );
235
+ return;
236
+ }
237
+
238
+ // This is a cancellation or end of subscription term (no refund).
239
+ // Lets retrieve the membership level and details.
240
+ $level_id = $resultset->membership_level;
241
+ swpm_debug_log_subsc( 'Membership level ID of the member is: ' . $level_id, true );
242
+ $level_row = SwpmUtils::get_membership_level_row_by_id( $level_id );
243
+ $subs_duration_type = $level_row->subscription_duration_type;
244
+
245
+ if ( SwpmMembershipLevel::NO_EXPIRY === $subs_duration_type ) {
246
+ // This is a level with "no expiry" or "until cancelled" duration.
247
+ swpm_debug_log_subsc( 'This is a level with "no expiry" or "until cancelled" duration', true );
248
+
249
+ // Deactivate this account as the membership level is "no expiry" or "until cancelled".
250
+ $account_state = 'inactive';
251
+ SwpmMemberUtils::update_account_state( $member_id, $account_state );
252
+ swpm_debug_log_subsc( 'Subscription cancellation or end of term received! Member account deactivated. Member ID: ' . $member_id, true );
253
+ } elseif ( SwpmMembershipLevel::FIXED_DATE === $subs_duration_type ) {
254
+ // This is a level with a "fixed expiry date" duration.
255
+ swpm_debug_log_subsc( 'This is a level with a "fixed expiry date" duration.', true );
256
+ swpm_debug_log_subsc( 'Nothing to do here. The account will expire on the fixed set date.', true );
257
+ } else {
258
+ // This is a level with "duration" type expiry (example: 30 days, 1 year etc). subscription_period has the duration/period.
259
+ $subs_period = $level_row->subscription_period;
260
+ $subs_period_unit = SwpmMembershipLevel::get_level_duration_type_string( $level_row->subscription_duration_type );
261
+
262
+ swpm_debug_log_subsc( 'This is a level with "duration" type expiry. Duration period: ' . $subs_period . ', Unit: ' . $subs_period_unit, true );
263
+ swpm_debug_log_subsc( 'Nothing to do here. The account will expire after the duration time is over.', true );
264
+
265
+ // TODO Later as an improvement. If you wanted to segment the members who have unsubscribed, you can set the account status to "unsubscribed" here.
266
+ // Make sure the cronjob to do expiry check and deactivate the member accounts treat this status as if it is "active".
267
+ }
268
+
269
+ $ipn_data['member_id'] = $member_id;
270
+ do_action( 'swpm_subscription_payment_cancelled', $ipn_data ); // Hook for recurring payment received.
271
+ } else {
272
+ swpm_debug_log_subsc( 'No associated active member record found for this notification.', false );
273
+ return;
274
+ }
275
  }
276
 
277
+ function swpm_update_member_subscription_start_date_if_applicable( $ipn_data ) {
278
+ global $wpdb;
279
+ $email = $ipn_data['payer_email'];
280
+ $subscr_id = $ipn_data['subscr_id'];
281
+ $account_state = SwpmSettings::get_instance()->get_value( 'default-account-status', 'active' );
282
+ swpm_debug_log_subsc( 'Updating subscription start date if applicable for this subscription payment. Subscriber ID: ' . $subscr_id . ' Email: ' . $email, true );
283
+
284
+ // We can also query using the email address or SWPM ID (if present in custom var).
285
+ $query_db = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_members_tbl WHERE subscr_id = %s", $subscr_id ), OBJECT );
286
+ if ( $query_db ) {
287
+ $swpm_id = $query_db->member_id;
288
+ $current_primary_level = $query_db->membership_level;
289
+ swpm_debug_log_subsc( 'Found a record in the member table. The Member ID of the account to check is: ' . $swpm_id . ' Membership Level: ' . $current_primary_level, true );
290
+
291
+ $ipn_data['member_id'] = $swpm_id;
292
+ do_action( 'swpm_recurring_payment_received', $ipn_data ); // Hook for recurring payment received.
293
+
294
+ $subscription_starts = ( date( 'Y-m-d' ) );
295
+
296
+ $wpdb->query(
297
+ $wpdb->prepare(
298
+ "UPDATE {$wpdb->prefix}swpm_members_tbl SET account_state=%s,subscription_starts=%s WHERE member_id=%d",
299
+ $account_state,
300
+ $subscription_starts,
301
+ $swpm_id
302
+ )
303
+ );
304
+ swpm_debug_log_subsc( 'Updated the member profile with current date as the subscription start date.', true );
305
+ // Lets check to see if the subscriber ID and the subscription start date value was updated correctly.
306
+ $member_record = SwpmMemberUtils::get_user_by_id( $swpm_id );
307
+ swpm_debug_log_subsc( 'Value after update - Subscriber ID: ' . $member_record->subscr_id . ', Start Date: ' . $member_record->subscription_starts, true );
308
+ } else {
309
+ swpm_debug_log_subsc( 'Did not find an existing record in the members table for subscriber ID: ' . $subscr_id, true );
310
+ swpm_debug_log_subsc( 'This is a new subscription payment for a new subscription agreement.', true );
311
+ }
312
  }
313
 
314
+ function swpm_debug_log_subsc( $message, $success, $end = false ) {
315
+ $settings = SwpmSettings::get_instance();
316
+ $debug_enabled = $settings->get_value( 'enable-debug' );
317
+ if ( empty( $debug_enabled ) ) { // Debug is not enabled.
318
+ return;
319
+ }
320
+
321
+ $debug_log_file_name = SIMPLE_WP_MEMBERSHIP_PATH . 'log.txt';
322
+
323
+ // Timestamp.
324
+ $text = '[' . date( 'm/d/Y g:i A' ) . '] - ' . ( ( $success ) ? 'SUCCESS: ' : 'FAILURE: ' ) . $message . "\n";
325
+ if ( $end ) {
326
+ $text .= "\n------------------------------------------------------------------\n\n";
327
+ }
328
+ // Write to log.
329
+ $fp = fopen( $debug_log_file_name, 'a' );
330
+ fwrite( $fp, $text );
331
+ fclose( $fp ); // close file.
332
  }
js/jquery.validationEngine-en.js CHANGED
@@ -157,7 +157,7 @@
157
  "ajaxUserCall": {
158
  "url": "ajaxurl",
159
  // you may want to pass extra data on the ajax call
160
- "extraData": "&action=swpm_validate_user_name",
161
  "alertTextOk": "* This username is available",
162
  "alertText": "* This user is already taken",
163
  "alertTextLoad": "* Validating, please wait"
@@ -165,7 +165,7 @@
165
  "ajaxEmailCall": {
166
  "url": "ajaxurl",
167
  // you may want to pass extra data on the ajax call
168
- "extraData": "&action=swpm_validate_email",
169
  "alertText": "* This email is already taken",
170
  "alertTextOk": "* This email is available",
171
  "alertTextLoad": "* Validating, please wait"
157
  "ajaxUserCall": {
158
  "url": "ajaxurl",
159
  // you may want to pass extra data on the ajax call
160
+ "extraData": "&action=swpm_validate_user_name&nonce="+swpmRegForm.nonce,
161
  "alertTextOk": "* This username is available",
162
  "alertText": "* This user is already taken",
163
  "alertTextLoad": "* Validating, please wait"
165
  "ajaxEmailCall": {
166
  "url": "ajaxurl",
167
  // you may want to pass extra data on the ajax call
168
+ "extraData": "&action=swpm_validate_email&nonce="+swpmRegForm.nonce,
169
  "alertText": "* This email is already taken",
170
  "alertTextOk": "* This email is available",
171
  "alertTextLoad": "* Validating, please wait"
languages/simple-membership-de_DE.mo CHANGED
Binary file
languages/simple-membership-de_DE.po CHANGED
@@ -1,3081 +1,3109 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: Simple Membership\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2019-05-26 13:48+0600\n"
6
- "PO-Revision-Date: 2019-06-11 15:51+0200\n"
7
- "Last-Translator: Geo_Writer <information@geoplan-systems.de>\n"
8
- "Language-Team: Deutsch\n"
9
- "Language: de_DE\n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "X-Generator: Poedit 2.2.3\n"
14
- "X-Poedit-KeywordsList: __;_e;e\n"
15
- "X-Poedit-Basepath: ..\n"
16
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
- "X-Loco-Version: 2.2.2; wp-5.2.1\n"
18
- "X-Poedit-SearchPath-0: Übersetzungen 01 2019\n"
19
- "X-Poedit-SearchPath-1: simple-membership\n"
20
-
21
- #: classes/class.simple-wp-membership.php:180
22
- msgid "The admin of this site does not allow users to access the wp dashboard."
23
- msgstr "Es ist Mitgliedern nicht erlaubt, auf das WP-Dashboard zuzugreifen."
24
-
25
- #: classes/class.simple-wp-membership.php:181
26
- msgid "Go back to the home page by "
27
- msgstr "Gehe zurück zur Startseite "
28
-
29
- #: classes/class.simple-wp-membership.php:181
30
- msgid "clicking here"
31
- msgstr "hier klicken"
32
-
33
- #: classes/class.simple-wp-membership.php:242
34
- msgid ""
35
- "Error! This site has the force WP user login feature enabled in the "
36
- "settings. We could not find a WP user record for the given username: "
37
- msgstr ""
38
- "Fehler! Diese Seite hat in den Einstellungen \"Synchronisation mit den WP "
39
- "Benutzereinträgen erzwingen\" aktiviert. Wir konnten keinen WP Benutzer-"
40
- "Eintrag für den eingegebenen Benutzernamen finden: "
41
-
42
- #: classes/class.simple-wp-membership.php:243
43
- msgid ""
44
- "This error is triggered when a member account doesn't have a corresponding "
45
- "WP user account. So the plugin fails to log the user into the WP User system."
46
- msgstr ""
47
- "Dieser Fehler tritt auf, wenn zu einem Mitglieds-Konto kein "
48
- "korrespondierender WP User Account existiert. Dann kann das Plugin den "
49
- "Benutzer nicht in das WP User System einloggen."
50
-
51
- #: classes/class.simple-wp-membership.php:244
52
- msgid ""
53
- "Contact the site admin and request them to check your username in the WP "
54
- "Users menu to see what happened with the WP user entry of your account."
55
- msgstr ""
56
- "Kontaktieren Sie den Website-Administrator und fordern sie ihn auf, Ihren "
57
- "Benutzernamen zu prüfen, um zu sehen, was mit dem Benutzer-Eintrag Ihres "
58
- "Accounts passiert ist."
59
-
60
- #: classes/class.simple-wp-membership.php:245
61
- msgid ""
62
- "The site admin can disable the Force WP User Synchronization feature in the "
63
- "settings to disable this feature and this error will go away."
64
- msgstr ""
65
- "Der Admin kann die erzwungene WP User Synchronisation in den Einstellungen "
66
- "deaktivieren und dadurch diesen Fehler beheben."
67
-
68
- #: classes/class.simple-wp-membership.php:246
69
- msgid "You can use the back button of your browser to go back to the site."
70
- msgstr ""
71
- "Sie können mit Klick auf den \"zurück\" button in Ihrem Browser zu der Seite "
72
- "zurückkehren."
73
-
74
- #: classes/class.simple-wp-membership.php:407
75
- msgid "You are not logged in."
76
- msgstr "Sie sind nicht eingeloggt."
77
-
78
- #: classes/class.simple-wp-membership.php:458
79
- msgid ""
80
- "You have the sandbox payment mode enabled in plugin settings. Make sure to "
81
- "turn off the sandbox mode when you want to do live transactions."
82
- msgstr ""
83
- "Sie haben in den Einstellungen des Plugins die Testumgebung für die "
84
- "Zahlungsvorgänge aktiviert. Bitte stellen Sie sicher, dass Sie die "
85
- "Testumgebung deaktivieren, wenn Sie Zahlungen vornehmen wollen."
86
-
87
- #: classes/class.simple-wp-membership.php:473
88
- msgid "Simple WP Membership Protection"
89
- msgstr "Simple WP Membership Schutz"
90
-
91
- #: classes/class.simple-wp-membership.php:485
92
- msgid "Simple Membership Protection options"
93
- msgstr "Schutz-Einstellungen für Simple Membership"
94
-
95
- #: classes/class.simple-wp-membership.php:503
96
- msgid "Do you want to protect this content?"
97
- msgstr "Möchten Sie diesen Inhalt schützen?"
98
-
99
- #: classes/class.simple-wp-membership.php:504
100
- msgid "No, Do not protect this content."
101
- msgstr "Nein, diesen Inhalt nicht schützen."
102
-
103
- #: classes/class.simple-wp-membership.php:505
104
- msgid "Yes, Protect this content."
105
- msgstr "Ja, diesen Inhalt schützen."
106
-
107
- #: classes/class.simple-wp-membership.php:508
108
- msgid "Select the membership level that can access this content:"
109
- msgstr ""
110
- "Wählen Sie die Mitgliedschaftsstufe aus, die auf diesen Inhalt zugreifen "
111
- "kann:"
112
-
113
- #: classes/class.simple-wp-membership.php:646
114
- #: classes/class.simple-wp-membership.php:650
115
- msgid "Validating, please wait"
116
- msgstr "Überprüfung, bitte warten"
117
-
118
- #: classes/class.simple-wp-membership.php:653
119
- msgid "Invalid email address"
120
- msgstr "Ungültige E-Mail-Adresse"
121
-
122
- #: classes/class.simple-wp-membership.php:656
123
- msgid "This field is required"
124
- msgstr "Dieses Feld ist erforderlich"
125
-
126
- #: classes/class.simple-wp-membership.php:659 classes/class.swpm-auth.php:296
127
- msgid "Invalid Username"
128
- msgstr "Ungültiger Benutzername"
129
-
130
- #: classes/class.simple-wp-membership.php:659
131
- msgid "Usernames can only contain: letters, numbers and .-_*@"
132
- msgstr "Benutzername kann nur enthalten: Buchstaben, Ziffern und .-_*@"
133
-
134
- #: classes/class.simple-wp-membership.php:662
135
- msgid "Minimum "
136
- msgstr "Minimum "
137
-
138
- #: classes/class.simple-wp-membership.php:663
139
- msgid " characters required"
140
- msgstr " Buchstaben erforderlich"
141
-
142
- #: classes/class.simple-wp-membership.php:666
143
- msgid "Apostrophe character is not allowed"
144
- msgstr "Apostroph ist nicht zulässig"
145
-
146
- #: classes/class.simple-wp-membership.php:697
147
- msgid "WP Membership"
148
- msgstr "WP Mitgliedschaft"
149
-
150
- #: classes/class.simple-wp-membership.php:698 classes/class.swpm-members.php:11
151
- #: classes/class.swpm-members.php:581
152
- msgid "Members"
153
- msgstr "Mitglieder"
154
-
155
- #: classes/class.simple-wp-membership.php:699
156
- #: classes/class.swpm-category-list.php:20
157
- #: classes/class.swpm-membership-levels.php:12
158
- #: classes/class.swpm-membership-levels.php:265
159
- #: classes/class.swpm-post-list.php:21
160
- msgid "Membership Levels"
161
- msgstr "Mitgliedschaftsstufen"
162
-
163
- #: classes/class.simple-wp-membership.php:700
164
- msgid "Settings"
165
- msgstr "Einstellungen"
166
-
167
- #: classes/class.simple-wp-membership.php:701
168
- msgid "Payments"
169
- msgstr "Zahlungen"
170
-
171
- #: classes/class.simple-wp-membership.php:702
172
- msgid "Add-ons"
173
- msgstr "Add-ons"
174
-
175
- #: classes/class.swpm-access-control.php:47
176
- #: classes/class.swpm-access-control.php:120
177
- msgid "You need to login to view this content. "
178
- msgstr "Sie müssen sich anmelden, um diesen Inhalt ansehen zu können. "
179
-
180
- #: classes/class.swpm-access-control.php:56
181
- #: classes/class.swpm-access-control.php:128
182
- #: classes/class.swpm-access-control.php:212
183
- msgid "Your account has expired. "
184
- msgstr "Mitgliedschaft abgelaufen. "
185
-
186
- #: classes/class.swpm-access-control.php:66
187
- #: classes/class.swpm-access-control.php:138
188
- msgid "This content can only be viewed by members who joined on or before "
189
- msgstr ""
190
- "Dieser Inhalt kann nur von Mitgliedern angesehen werden, die sich "
191
- "registriert haben an oder vor "
192
-
193
- #: classes/class.swpm-access-control.php:79
194
- #: classes/class.swpm-access-control.php:148
195
- msgid "This content is not permitted for your membership level."
196
- msgstr "Dieser Inhalt ist für Ihre Mitgliedschaftsstufe nicht freigeschaltet."
197
-
198
- #: classes/class.swpm-access-control.php:204
199
- msgid "You need to login to view the rest of the content. "
200
- msgstr ""
201
- "Sie müssen sich anmelden um den restlichen Inhalt angezeigt zu bekommen. "
202
-
203
- #: classes/class.swpm-access-control.php:217
204
- msgid " The rest of the content is not permitted for your membership level."
205
- msgstr ""
206
- " Der Rest des Inhalts ist für Ihre Mitgliedschaftsstufe nicht freigeschaltet."
207
-
208
- #: classes/class.swpm-admin-registration.php:25
209
- msgid "Error! Nonce verification failed for user registration from admin end."
210
- msgstr ""
211
- "Fehler! Nonce-Überprüfung für Benutzerregistrierung durch den Admin "
212
- "fehlgeschlagen."
213
-
214
- #: classes/class.swpm-admin-registration.php:71
215
- msgid "Member record added successfully."
216
- msgstr "Der Eintrag für das Mitglied wurde erfolgreich hinzugefügt."
217
-
218
- #: classes/class.swpm-admin-registration.php:76
219
- #: classes/class.swpm-admin-registration.php:124
220
- #: classes/class.swpm-admin-registration.php:151
221
- #: classes/class.swpm-membership-level.php:73
222
- #: classes/class.swpm-membership-level.php:105
223
- msgid "Please correct the following:"
224
- msgstr "Bitte korrigieren Sie folgendes:"
225
-
226
- #: classes/class.swpm-admin-registration.php:87
227
- msgid "Error! Nonce verification failed for user edit from admin end."
228
- msgstr ""
229
- "Fehler! Nonce-Überprüfung für die Bearbeitung der Benutzerdaten durch den "
230
- "Admin fehlgeschlagen."
231
-
232
- #: classes/class.swpm-admin-registration.php:139
233
- msgid "Your current password"
234
- msgstr "Ihr aktuelles Passwort"
235
-
236
- #: classes/class.swpm-ajax.php:14
237
- msgid "Invalid Email Address"
238
- msgstr "Ungültige E-Mail Adresse"
239
-
240
- #: classes/class.swpm-ajax.php:21 classes/class.swpm-ajax.php:36
241
- msgid "Aready taken"
242
- msgstr "Wird schon verwendet"
243
-
244
- #: classes/class.swpm-ajax.php:30
245
- msgid "Name contains invalid character"
246
- msgstr "Name enthält ungültiges Zeichen"
247
-
248
- #: classes/class.swpm-ajax.php:37
249
- msgid "Available"
250
- msgstr "Verfügbar"
251
-
252
- #: classes/class.swpm-auth.php:57
253
- msgid ""
254
- "Warning! Simple Membership plugin cannot process this login request to "
255
- "prevent you from getting logged out of WP Admin accidentally."
256
- msgstr ""
257
- "Warnung! Simple Membership Plugin kann dieses Login nicht durchführen, um zu "
258
- "verhindern, dass Sie versehentlich als WP Admin ausgeloggt werden."
259
-
260
- #: classes/class.swpm-auth.php:58
261
- msgid "Click here"
262
- msgstr "Hier klicken"
263
-
264
- #: classes/class.swpm-auth.php:58
265
- msgid " to see the profile you are currently logged into in this browser."
266
- msgstr ""
267
- " um das Profil zu sehen, mit dem Sie in diesem Browser eingeloggt sind."
268
-
269
- #: classes/class.swpm-auth.php:59
270
- msgid ""
271
- "You are logged into the site as an ADMIN user in this browser. First, logout "
272
- "from WP Admin then you will be able to log in as a normal member."
273
- msgstr ""
274
- "Sie sind auf dieser Seite mit diesem Browser als ADMIN eingeloggt. Loggen "
275
- "Sie sich zuerst als Admin aus, dann können Sie sich als Mitglied einloggen."
276
-
277
- #: classes/class.swpm-auth.php:60
278
- msgid ""
279
- "Alternatively, you can use a different browser (where you are not logged-in "
280
- "as ADMIN) to test the membership login."
281
- msgstr ""
282
- "Alternativ können Sie einen anderen Browser verwenden (in welchem Sie nicht "
283
- "als Admin eingeloggt sind), um das Login-Interface zu testen."
284
-
285
- #: classes/class.swpm-auth.php:61
286
- msgid ""
287
- "Your normal visitors or members will never see this message. This message is "
288
- "ONLY for ADMIN user."
289
- msgstr ""
290
- "Ihre Besucher und Mitglieder werden diese Nachricht niemals sehen können. "
291
- "Diese Meldung ist AUSSCHLIESSLICH für ADMIN."
292
-
293
- #: classes/class.swpm-auth.php:68
294
- msgid "Captcha validation failed on login form."
295
- msgstr "Captcha-Validierung fehlgeschlagen."
296
-
297
- #: classes/class.swpm-auth.php:93
298
- msgid "User Not Found."
299
- msgstr "Benutzer nicht gefunden."
300
-
301
- #: classes/class.swpm-auth.php:100
302
- msgid "Password Empty or Invalid."
303
- msgstr "Passwort leer oder ungültig."
304
-
305
- #: classes/class.swpm-auth.php:133
306
- msgid "Account is inactive."
307
- msgstr "Ihr Konto ist inaktiv."
308
-
309
- #: classes/class.swpm-auth.php:136 classes/class.swpm-auth.php:162
310
- msgid "Account has expired."
311
- msgstr "Mitgliedschaft abgelaufen."
312
-
313
- #: classes/class.swpm-auth.php:139
314
- msgid "Account is pending."
315
- msgstr "Ihr Konto ist inaktiv."
316
-
317
- #: classes/class.swpm-auth.php:146
318
- #, php-format
319
- msgid ""
320
- "You need to activate your account. If you didn't receive an email then %s to "
321
- "resend the activation email."
322
- msgstr ""
323
- "Sie müssen Ihr Konto aktivieren. Falls Sie keine Email erhalten haben, dann "
324
- "%s um die Aktivierungs-Email nochmal zu senden."
325
-
326
- #: classes/class.swpm-auth.php:146
327
- #: classes/class.swpm-front-registration.php:376
328
- #: classes/class.swpm-front-registration.php:426
329
- #: classes/class.swpm-utils-misc.php:169
330
- msgid "click here"
331
- msgstr "hier klicken"
332
-
333
- #: classes/class.swpm-auth.php:170
334
- msgid "You are logged in as:"
335
- msgstr "Sie sind eingeloggt als:"
336
-
337
- #: classes/class.swpm-auth.php:234
338
- msgid "Logged Out Successfully."
339
- msgstr "Abmeldung war erfolgreich."
340
-
341
- #: classes/class.swpm-auth.php:287
342
- msgid "Session Expired."
343
- msgstr "Sitzung ist abgelaufen."
344
-
345
- #: classes/class.swpm-auth.php:304
346
- msgid "Please login again."
347
- msgstr "Bitte loggen Sie sich erneut ein."
348
-
349
- #: classes/class.swpm-category-list.php:19 classes/class.swpm-members.php:24
350
- #: classes/class.swpm-membership-levels.php:11
351
- #: classes/class.swpm-membership-levels.php:21
352
- #: classes/class.swpm-post-list.php:20
353
- #: classes/admin-includes/class.swpm-payments-list-table.php:85
354
- #: views/add.php:40 views/admin_member_form_common_part.php:2 views/edit.php:75
355
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:50
356
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:34
357
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:229
358
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:49
359
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:35
360
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:317
361
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:47
362
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:273
363
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:99
364
- msgid "Membership Level"
365
- msgstr "Mitgliedschaftsstufe"
366
-
367
- #: classes/class.swpm-category-list.php:33
368
- msgid "Category ID"
369
- msgstr "Kategorie ID"
370
-
371
- #: classes/class.swpm-category-list.php:34
372
- msgid "Category Name"
373
- msgstr "Kategorie Name"
374
-
375
- #: classes/class.swpm-category-list.php:35
376
- msgid "Category Type (Taxonomy)"
377
- msgstr "Kategorie Typ (Taxonomy)"
378
-
379
- #: classes/class.swpm-category-list.php:36
380
- msgid "Description"
381
- msgstr "Beschreibung"
382
-
383
- #: classes/class.swpm-category-list.php:37
384
- msgid "Count"
385
- msgstr "Anzahl"
386
-
387
- #: classes/class.swpm-category-list.php:92
388
- msgid "Category protection updated!"
389
- msgstr "Kategorie Schutz aktualisiert!"
390
-
391
- #: classes/class.swpm-category-list.php:130
392
- msgid "No category found."
393
- msgstr "Kategorie wurde nicht gefunden."
394
-
395
- #: classes/class.swpm-comment-form-related.php:15
396
- msgid "Please login to comment."
397
- msgstr ""
398
- "Bitte loggen Sie sich ein, damit Sie einen Kommentar hinterlassen können."
399
-
400
- #: classes/class.swpm-comment-form-related.php:40
401
- msgid "Please Login to Comment."
402
- msgstr ""
403
- "Bitte loggen Sie sich ein, damit Sie einen Kommentar hinterlassen können."
404
-
405
- #: classes/class.swpm-comment-form-related.php:79
406
- msgid "Comments not allowed by a non-member."
407
- msgstr "Nicht-Mitglieder können keinen Kommentar hinterlassen."
408
-
409
- #: classes/class.swpm-form.php:30
410
- msgid ""
411
- "Wordpress account exists with given username. But given email doesn't match."
412
- msgstr ""
413
- "Es existiert bereits ein Account mit den angegebenen Benutzernamen. Die E-"
414
- "Mail Adresse passt aber nicht zum Benutzernamen."
415
-
416
- #: classes/class.swpm-form.php:31
417
- msgid ""
418
- " Use a different username to complete the registration. If you want to use "
419
- "that username then you must enter the correct email address associated with "
420
- "the existing WP user to connect with that account."
421
- msgstr ""
422
- " Verwenden Sie einen anderen Benutzernamen, um die Registrierung "
423
- "abzuschließen. Wenn Sie diesen Benutzernamen verwenden möchten, geben Sie "
424
- "die korrekte e-Mail-Adresse, die verbunden ist mit dem bestehenden WP-"
425
- "Benutzer, um sich mit diesem Konto zu verbinden."
426
-
427
- #: classes/class.swpm-form.php:37
428
- msgid ""
429
- "Wordpress account exists with given email. But given username doesn't match."
430
- msgstr ""
431
- "Es existiert bereits ein WP Account mit der angegebenen E-Mail Adresse. Der "
432
- "Benutzername passt aber nicht zur E-Mail Adresse."
433
-
434
- #: classes/class.swpm-form.php:38
435
- msgid ""
436
- " Use a different email address to complete the registration. If you want to "
437
- "use that email then you must enter the correct username associated with the "
438
- "existing WP user to connect with that account."
439
- msgstr ""
440
- " Verwenden Sie eine andere E-Mail Adresse um Ihre Registrierung "
441
- "abzuschließen. Wenn Sie diese E-Mail Adresse verwenden wollen, müssen Sie "
442
- "den richtigen Benutzernamen des bestehenden WP Benutzereintrags eingeben, um "
443
- "sich mit diesem Account zu verbinden."
444
-
445
- #: classes/class.swpm-form.php:48
446
- msgid "Username is required"
447
- msgstr "Der Mitgliedername ist erforderlich"
448
-
449
- #: classes/class.swpm-form.php:52
450
- msgid "Username contains invalid character"
451
- msgstr "Der Benutzername enthält ungültige Zeichen"
452
-
453
- #: classes/class.swpm-form.php:60
454
- msgid "Username already exists."
455
- msgstr "Ihr Benutzername existiert bereits."
456
-
457
- #: classes/class.swpm-form.php:83
458
- msgid "Password is required"
459
- msgstr "Passwort erforderlich"
460
-
461
- #: classes/class.swpm-form.php:90
462
- msgid "Password mismatch"
463
- msgstr "Die Passwörter stimmen nicht überein"
464
-
465
- #: classes/class.swpm-form.php:101
466
- msgid "Email is required"
467
- msgstr "E-Mail Adresse wird benötigt"
468
-
469
- #: classes/class.swpm-form.php:105
470
- msgid "Email is invalid"
471
- msgstr "E-Mail Adresse ist ungültig"
472
-
473
- #: classes/class.swpm-form.php:121
474
- msgid "Email is already used."
475
- msgstr "Ihre E-Mail Adresse existiert bereits."
476
-
477
- #: classes/class.swpm-form.php:179
478
- msgid "Member since field is invalid"
479
- msgstr "\"Mitglied seit\" Feld ist inkorrekt"
480
-
481
- #: classes/class.swpm-form.php:190
482
- msgid "Access starts field is invalid"
483
- msgstr "Ungültiger Wert für den Beginn des Zugangs"
484
-
485
- #: classes/class.swpm-form.php:200
486
- msgid "Gender field is invalid"
487
- msgstr "Feld \"Geschlecht\" ist inkorrekt"
488
-
489
- #: classes/class.swpm-form.php:211
490
- msgid "Account state field is invalid"
491
- msgstr "Kontostatusfeld ist ungültig"
492
-
493
- #: classes/class.swpm-form.php:218
494
- msgid "Invalid membership level"
495
- msgstr "Ungültige Mitgliedschaftsstufe"
496
-
497
- #: classes/class.swpm-front-registration.php:33
498
- msgid ""
499
- "Error! Invalid Request. Could not find a match for the given security code "
500
- "and the user ID."
501
- msgstr ""
502
- "Fehler! Ungültige Anfrage. Konnte keine Übereinstimmung für den angegebenen "
503
- "Sicherheitscode und die Benutzer-ID finden."
504
-
505
- #: classes/class.swpm-front-registration.php:45
506
- #: classes/class.swpm-utils-misc.php:274 views/login.php:36
507
- msgid "Join Us"
508
- msgstr "Noch kein Mitglied? Registrieren Sie sich hier"
509
-
510
- #: classes/class.swpm-front-registration.php:47
511
- msgid ""
512
- "Free membership is disabled on this site. Please make a payment from the "
513
- msgstr ""
514
- "Die Kostenlose Mitgliedschaft ist auf dieser Seite deaktiviert. Bitte "
515
- "erstellen Sie eine Zahlung für "
516
-
517
- #: classes/class.swpm-front-registration.php:49
518
- msgid " page to pay for a premium membership."
519
- msgstr " Seite, um für eine Premium-Mitgliedschaft zu bezahlen."
520
-
521
- #: classes/class.swpm-front-registration.php:51
522
- msgid ""
523
- "You will receive a unique link via email after the payment. You will be able "
524
- "to use that link to complete the premium membership registration."
525
- msgstr ""
526
- "Sie werden einen persönlichen Link per E-Mail nach Beendigung des "
527
- "Zahlungsvorgangs erhalten. Mit diesem Link können Sie die Registrierung "
528
- "Ihrer Premium Mitgliedschaft abschließen."
529
-
530
- #: classes/class.swpm-front-registration.php:79
531
- msgid "Security check: captcha validation failed."
532
- msgstr "Sicherheitskontrolle: Captcha-Validierung fehlgeschlagen."
533
-
534
- #: classes/class.swpm-front-registration.php:89
535
- msgid "You must accept the terms and conditions."
536
- msgstr "Sie müssen die allgemeinen Geschäftsbedingungen akzeptieren."
537
-
538
- #: classes/class.swpm-front-registration.php:100
539
- msgid "You must agree to the privacy policy."
540
- msgstr "Sie müssen der Datenschutzerklärung zustimmen."
541
-
542
- #: classes/class.swpm-front-registration.php:140
543
- msgid ""
544
- "You need to confirm your email address. Please check your email and follow "
545
- "instructions to complete your registration."
546
- msgstr ""
547
- "Sie müssen Ihre Email Adresse bestätigen. Bitte prüfen Sie Ihre Email "
548
- "Adresse und folgen Sie den Anweisungen, um die Anmeldung abzuschließen."
549
-
550
- #: classes/class.swpm-front-registration.php:145
551
- msgid "Registration Successful. "
552
- msgstr "Registrierung erfolgreich. "
553
-
554
- #: classes/class.swpm-front-registration.php:145
555
- #: classes/class.swpm-utils-misc.php:273 classes/class.swpm-utils-misc.php:285
556
- msgid "Please"
557
- msgstr "Bitte"
558
-
559
- #: classes/class.swpm-front-registration.php:145
560
- #: classes/class.swpm-utils-misc.php:273 views/login.php:30
561
- msgid "Login"
562
- msgstr "Einloggen"
563
-
564
- #: classes/class.swpm-front-registration.php:159
565
- msgid "Please correct the following"
566
- msgstr "Bitte korrigieren Sie folgendes"
567
-
568
- #: classes/class.swpm-front-registration.php:207
569
- msgid "Membership Level Couldn't be found."
570
- msgstr "Mitgliedschaftsstufe konnte nicht gefunden werden."
571
-
572
- #: classes/class.swpm-front-registration.php:258
573
- msgid "Error! Nonce verification failed for front end profile edit."
574
- msgstr ""
575
- "Fehler! Nonce-Überprüfung für Front-End Profil-Bearbeitung fehlgeschlagen."
576
-
577
- #: classes/class.swpm-front-registration.php:266
578
- msgid "Profile updated successfully."
579
- msgstr "Profil erfolgreich aktualisiert."
580
-
581
- #: classes/class.swpm-front-registration.php:275
582
- msgid ""
583
- "Profile updated successfully. You will need to re-login since you changed "
584
- "your password."
585
- msgstr ""
586
- "Profil erfolgreich aktualisiert. Sie müssen sich erneut anmelden, da Sie Ihr "
587
- "Passwort geändert haben."
588
-
589
- #: classes/class.swpm-front-registration.php:289
590
- msgid "Please correct the following."
591
- msgstr "Bitte korrigieren Sie folgendes."
592
-
593
- #: classes/class.swpm-front-registration.php:301
594
- msgid "Captcha validation failed."
595
- msgstr "Captcha-Validierung fehlgeschlagen."
596
-
597
- #: classes/class.swpm-front-registration.php:309
598
- msgid "Email address not valid."
599
- msgstr "Ungültige E-Mail Adresse."
600
-
601
- #: classes/class.swpm-front-registration.php:320
602
- msgid "No user found with that email address."
603
- msgstr "Kein Benutzer mit dieser E-Mail-Adresse gefunden."
604
-
605
- #: classes/class.swpm-front-registration.php:321
606
- #: classes/class.swpm-front-registration.php:350
607
- msgid "Email Address: "
608
- msgstr "E-Mail Adresse: "
609
-
610
- #: classes/class.swpm-front-registration.php:349
611
- msgid "New password has been sent to your email address."
612
- msgstr "Es wurde ein neues Passwort an Ihre E-Mail-Adresse gesendet."
613
-
614
- #: classes/class.swpm-front-registration.php:371
615
- msgid "Can't find member account."
616
- msgstr "Kann kein Mitgliedskonto finden."
617
-
618
- #: classes/class.swpm-front-registration.php:376
619
- #: classes/class.swpm-front-registration.php:426
620
- msgid "Account already active. "
621
- msgstr "Ihr Konto ist schon aktiv. "
622
-
623
- #: classes/class.swpm-front-registration.php:376
624
- #: classes/class.swpm-front-registration.php:426
625
- msgid " to login."
626
- msgstr " um einzuloggen."
627
-
628
- #: classes/class.swpm-front-registration.php:383
629
- msgid ""
630
- "Activation code mismatch. Cannot activate this account. Please contact the "
631
- "site admin."
632
- msgstr ""
633
- "Problem mit dem Aktivierungs-Code. Das Konto kann nicht aktiviert werden. "
634
- "Bitte kontaktieren Sie den Admin."
635
-
636
- #: classes/class.swpm-front-registration.php:397
637
- msgid "Success! Your account has been activated successfully."
638
- msgstr "Erfolg! Ihr Konto ist erfolgreich aktiviert."
639
-
640
- #: classes/class.swpm-front-registration.php:421
641
- msgid "Cannot find member account."
642
- msgstr "Kann kein Mitgliedskonto finden."
643
-
644
- #: classes/class.swpm-front-registration.php:443
645
- msgid ""
646
- "Activation email has been sent. Please check your email and activate your "
647
- "account."
648
- msgstr ""
649
- "Aktivierungs-Email gesendet. Bitte checken Sie Ihre Emails und aktivieren "
650
- "Sie das Konto."
651
-
652
- #: classes/class.swpm-init-time-tasks.php:118
653
- msgid "Sorry, Nonce verification failed."
654
- msgstr "Entschuldigung, Nonce-Überprüfung fehlgeschlagen."
655
-
656
- #: classes/class.swpm-init-time-tasks.php:125
657
- msgid "Sorry, Password didn't match."
658
- msgstr "Passwort stimmt leider nicht überein."
659
-
660
- #: classes/class.swpm-level-form.php:50
661
- msgid "Date format is not valid."
662
- msgstr "Datumsformat ist nicht gültig."
663
-
664
- #: classes/class.swpm-level-form.php:58
665
- msgid "Access duration must be > 0."
666
- msgstr "Zugriffsdauer muss >0 sein."
667
-
668
- #: classes/class.swpm-members.php:10
669
- msgid "Member"
670
- msgstr "Mitglied"
671
-
672
- #: classes/class.swpm-members.php:19
673
- #: classes/class.swpm-membership-levels.php:20
674
- msgid "ID"
675
- msgstr "ID"
676
-
677
- #: classes/class.swpm-members.php:20 views/add.php:16 views/admin_add.php:11
678
- #: views/admin_edit.php:19 views/edit.php:23
679
- #: includes/swpm_mda_show_profile.php:27
680
- msgid "Username"
681
- msgstr "Benutzername"
682
-
683
- #: classes/class.swpm-members.php:21
684
- #: classes/admin-includes/class.swpm-payments-list-table.php:78
685
- #: views/add.php:32 views/admin_member_form_common_part.php:15
686
- #: views/edit.php:39 includes/swpm_mda_show_profile.php:28
687
- msgid "First Name"
688
- msgstr "Vorname"
689
-
690
- #: classes/class.swpm-members.php:22
691
- #: classes/admin-includes/class.swpm-payments-list-table.php:79
692
- #: views/add.php:36 views/admin_member_form_common_part.php:19
693
- #: views/edit.php:43 includes/swpm_mda_show_profile.php:29
694
- msgid "Last Name"
695
- msgstr "Nachname"
696
-
697
- #: classes/class.swpm-members.php:23 views/add.php:20 views/edit.php:27
698
- #: includes/swpm_mda_show_profile.php:35
699
- msgid "Email"
700
- msgstr "E-Mail"
701
-
702
- #: classes/class.swpm-members.php:25 views/admin_member_form_common_part.php:11
703
- msgid "Access Starts"
704
- msgstr "Beginn der Zugriffsmöglichkeit"
705
-
706
- #: classes/class.swpm-members.php:26 includes/swpm_mda_show_profile.php:31
707
- msgid "Account State"
708
- msgstr "Kontostatus"
709
-
710
- #: classes/class.swpm-members.php:27
711
- msgid "Last Login Date"
712
- msgstr "Datum des letzten Log-In"
713
-
714
- #: classes/class.swpm-members.php:46
715
- #: classes/class.swpm-membership-levels.php:36
716
- #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:94
717
- #: classes/admin-includes/class.swpm-payments-list-table.php:102
718
- msgid "Delete"
719
- msgstr "Löschen"
720
-
721
- #: classes/class.swpm-members.php:47
722
- msgid "Set Status to Active"
723
- msgstr "Setzen Sie den Status auf Aktiv"
724
-
725
- #: classes/class.swpm-members.php:48
726
- msgid "Set Status to Active and Notify"
727
- msgstr "Setzen Sie den Status auf Aktiv und Benachrichtigen"
728
-
729
- #: classes/class.swpm-members.php:49
730
- msgid "Set Status to Inactive"
731
- msgstr "Setzen Sie den Status auf Inaktiv"
732
-
733
- #: classes/class.swpm-members.php:50
734
- msgid "Set Status to Pending"
735
- msgstr "Setzen Sie den Status auf Ausstehend"
736
-
737
- #: classes/class.swpm-members.php:51
738
- msgid "Set Status to Expired"
739
- msgstr "Setzen Sie den Status auf abgelaufen"
740
-
741
- #: classes/class.swpm-members.php:72
742
- msgid "incomplete"
743
- msgstr "unvollständig"
744
-
745
- #: classes/class.swpm-members.php:191
746
- msgid "No member found."
747
- msgstr "Kein Mitglied gefunden."
748
-
749
- #: classes/class.swpm-members.php:337
750
- msgid "Error! Nonce verification failed for user delete from admin end."
751
- msgstr ""
752
- "Fehler! Nonce-Überprüfung für Löschung eines Benutzers durch den Admin "
753
- "fehlgeschlagen."
754
-
755
- #: classes/class.swpm-members.php:406 classes/class.swpm-members.php:436
756
- msgid "Error! Please select a membership level first."
757
- msgstr "Fehler! Bitte wählen Sie zuerst eine Mitgliedsstufe aus."
758
-
759
- #: classes/class.swpm-members.php:423
760
- msgid "Membership level change operation completed successfully."
761
- msgstr "Änderung der Mitgliedschaftsstufe wurde erfolgreich abgeschlossen."
762
-
763
- #: classes/class.swpm-members.php:453
764
- msgid "Access starts date change operation successfully completed."
765
- msgstr "Datumsänderung erfolgreich abgeschlossen."
766
-
767
- #: classes/class.swpm-members.php:462
768
- msgid "Bulk Update Membership Level of Members"
769
- msgstr "Massen-Änderung der Mitgliedschaftsstufe der Mitglieder"
770
-
771
- #: classes/class.swpm-members.php:465
772
- msgid ""
773
- "You can manually change the membership level of any member by editing the "
774
- "record from the members menu. "
775
- msgstr ""
776
- "Sie können die Mitgliedschaftsstufe eines beliebigen Mitglieds manuell "
777
- "ändern, indem Sie den Datensatz aus dem Mitgliedermenü bearbeiten. "
778
-
779
- #: classes/class.swpm-members.php:466
780
- msgid ""
781
- "You can use the following option to bulk update the membership level of "
782
- "users who belong to the level you select below."
783
- msgstr ""
784
- "Sie können die folgende Option verwenden, um die Mitgliedschaftsstufe aller "
785
- "Benutzer gesammelt zu aktualisieren, die zu der Ebene gehören, die Sie unten "
786
- "auswählen."
787
-
788
- #: classes/class.swpm-members.php:472 classes/class.swpm-members.php:520
789
- msgid "Membership Level: "
790
- msgstr "Mitgliedschaftsstufe: "
791
-
792
- #: classes/class.swpm-members.php:476
793
- msgid "Select Current Level"
794
- msgstr "Wählen Sie die aktuelle Stufe aus"
795
-
796
- #: classes/class.swpm-members.php:479
797
- msgid ""
798
- "Select the current membership level (the membership level of all members who "
799
- "are in this level will be updated)."
800
- msgstr ""
801
- "Wählen Sie die aktuelle Mitgliedschaftsstufe aus (die Mitgliedschaftsstufe "
802
- "aller Mitglieder, die sich in dieser Ebene befinden, wird aktualisiert)."
803
-
804
- #: classes/class.swpm-members.php:485
805
- msgid "Level to Change to: "
806
- msgstr "Mitgliedschaft ändern in: "
807
-
808
- #: classes/class.swpm-members.php:489
809
- msgid "Select Target Level"
810
- msgstr "Ziel Ebene auswählen"
811
-
812
- #: classes/class.swpm-members.php:492
813
- msgid "Select the new membership level."
814
- msgstr "Wählen Sie die neue Mitgliedschaftsstufe aus."
815
-
816
- #: classes/class.swpm-members.php:498
817
- msgid "Bulk Change Membership Level"
818
- msgstr "Massen-Änderung der Mitgliedschaftsstufe"
819
-
820
- #: classes/class.swpm-members.php:508
821
- msgid "Bulk Update Access Starts Date of Members"
822
- msgstr "Massen-Änderung des Datums, ab dem die Mitgliedschaft beginnt"
823
-
824
- #: classes/class.swpm-members.php:512
825
- msgid ""
826
- "The access starts date of a member is set to the day the user registers. "
827
- "This date value is used to calculate how long the member can access your "
828
- "content that are protected with a duration type protection in the membership "
829
- "level. "
830
- msgstr ""
831
- "Der Zugriff eines Mitglieds startet am Tag, an dem sich der Benutzer "
832
- "registriert hat. Dieser Datumswert wird verwendet, um zu berechnen, wie "
833
- "lange das Mitglied auf Ihre Inhalte zugreifen kann. "
834
-
835
- #: classes/class.swpm-members.php:513
836
- msgid ""
837
- "You can manually set a specific access starts date value of all members who "
838
- "belong to a particular level using the following option."
839
- msgstr ""
840
- "Sie können mit der folgenden Option manuell ein bestimmtes Start-Datum "
841
- "festlegen, für alle Mitglieder, die zu einer bestimmten "
842
- "Mitgliedschaftsstufe gehören."
843
-
844
- #: classes/class.swpm-members.php:523
845
- msgid "Select Level"
846
- msgstr "Stufe auswählen"
847
-
848
- #: classes/class.swpm-members.php:526
849
- msgid ""
850
- "Select the Membership level (the access start date of all members who are in "
851
- "this level will be updated)."
852
- msgstr ""
853
- "Wählen Sie die Mitgliedschaftsstufe aus (das Zugangsstartdatum aller "
854
- "Mitglieder, die sich auf dieser Ebene befinden, wird aktualisiert)."
855
-
856
- #: classes/class.swpm-members.php:535
857
- msgid "Specify the access starts date value."
858
- msgstr "Geben Sie das Datum ein, ab dem der Zugriff möglich ist."
859
-
860
- #: classes/class.swpm-members.php:541
861
- msgid "Bulk Change Access Starts Date"
862
- msgstr "Massen-Änderung des Datums, ab dem der Zugriff möglich ist"
863
-
864
- #: classes/class.swpm-members.php:576
865
- msgid "Simple WP Membership::Members"
866
- msgstr "Simple WP Membership::Mitglieder"
867
-
868
- #: classes/class.swpm-members.php:577
869
- #: classes/class.swpm-membership-levels.php:226 views/admin_members_list.php:44
870
- msgid "Add New"
871
- msgstr "Neu hinzufügen"
872
-
873
- #: classes/class.swpm-members.php:582 views/admin_add.php:6
874
- msgid "Add Member"
875
- msgstr "Neues Mitglied hinzufügen"
876
-
877
- #: classes/class.swpm-members.php:583
878
- msgid "Bulk Operation"
879
- msgstr "Massen-Änderung"
880
-
881
- #: classes/class.swpm-membership-level.php:52
882
- msgid ""
883
- "Error! Nonce verification failed for membership level creation from admin "
884
- "end."
885
- msgstr ""
886
- "Fehler! Nonce-Überprüfung für die Erstellung von Mitgliedschaft-Stufen durch "
887
- "den Admin fehlgeschlagen."
888
-
889
- #: classes/class.swpm-membership-level.php:68
890
- msgid "Membership Level Creation Successful."
891
- msgstr "Mitgliedschaftstufe erfolgreich erstellt.."
892
-
893
- #: classes/class.swpm-membership-level.php:84
894
- msgid ""
895
- "Error! Nonce verification failed for membership level edit from admin end."
896
- msgstr ""
897
- "Fehler! Nonce-Überprüfung für Bearbeiten der Mitgliedschafts-Stufe durch den "
898
- "Admin fehlgeschlagen ."
899
-
900
- #: classes/class.swpm-membership-level.php:100
901
- msgid "Membership Level Updated Successfully."
902
- msgstr "Mitgliedschaftstufe wurde erfolgreich aktualisiert."
903
-
904
- #: classes/class.swpm-membership-levels.php:22
905
- msgid "Role"
906
- msgstr "Rolle"
907
-
908
- #: classes/class.swpm-membership-levels.php:23
909
- msgid "Access Valid For/Until"
910
- msgstr "Zugang gültig für/bis"
911
-
912
- #: classes/class.swpm-membership-levels.php:133
913
- msgid "No membership levels found."
914
- msgstr "Keine Mitgliedschaftsstufen gefunden."
915
-
916
- #: classes/class.swpm-membership-levels.php:197
917
- msgid ""
918
- "Error! Nonce verification failed for membership level delete from admin end."
919
- msgstr ""
920
- "Fehler! Nonce-Überprüfung für das Löschen der Mitgliedschaftsstufe durch den "
921
- "Admin fehlgeschlagen."
922
-
923
- #: classes/class.swpm-membership-levels.php:216 views/admin_members_list.php:31
924
- #: views/payments/admin_all_payment_transactions.php:16 views/template-1.php:53
925
- #: views/template-2.php:54
926
- msgid "Search"
927
- msgstr "Suchen"
928
-
929
- #: classes/class.swpm-membership-levels.php:261
930
- msgid "Simple WP Membership::Membership Levels"
931
- msgstr "Simple WP Membership::Mitgliedschaftsstufen"
932
-
933
- #: classes/class.swpm-membership-levels.php:266
934
- msgid "Add Level"
935
- msgstr "Neue Mitgliedschaftsstufe hinzufügen"
936
-
937
- #: classes/class.swpm-membership-levels.php:267
938
- msgid "Manage Content Protection"
939
- msgstr "Schutz der Inhalte verwalten"
940
-
941
- #: classes/class.swpm-membership-levels.php:268
942
- msgid "Category Protection"
943
- msgstr "Kategorie Schutz"
944
-
945
- #: classes/class.swpm-membership-levels.php:269
946
- msgid "Post and Page Protection"
947
- msgstr "Schutz von Beiträgen und Seiten"
948
-
949
- #: classes/class.swpm-post-list.php:43 classes/class.swpm-post-list.php:52
950
- #: classes/class.swpm-post-list.php:62
951
- #: classes/admin-includes/class.swpm-payments-list-table.php:81
952
- msgid "Date"
953
- msgstr "Datum"
954
-
955
- #: classes/class.swpm-post-list.php:44 classes/class.swpm-post-list.php:53
956
- #: classes/class.swpm-post-list.php:63
957
- msgid "Title"
958
- msgstr "Titel"
959
-
960
- #: classes/class.swpm-post-list.php:45 classes/class.swpm-post-list.php:54
961
- #: classes/class.swpm-post-list.php:64
962
- msgid "Author"
963
- msgstr "Autor"
964
-
965
- #: classes/class.swpm-post-list.php:46 classes/class.swpm-post-list.php:56
966
- #: classes/class.swpm-post-list.php:66
967
- msgid "Status"
968
- msgstr "Status"
969
-
970
- #: classes/class.swpm-post-list.php:55
971
- msgid "Categories"
972
- msgstr "Kategorien"
973
-
974
- #: classes/class.swpm-post-list.php:65
975
- msgid "Type"
976
- msgstr "Typ"
977
-
978
- #: classes/class.swpm-post-list.php:125
979
- msgid "Protection settings updated!"
980
- msgstr "Schutz-Einstellungen aktualisiert!"
981
-
982
- #: classes/class.swpm-post-list.php:230
983
- msgid "No items found."
984
- msgstr "Keine Einträge gefunden."
985
-
986
- #: classes/class.swpm-protection.php:22
987
- msgid ""
988
- "The category or parent category of this post is protected. You can change "
989
- "the category protection settings from the "
990
- msgstr ""
991
- "Die Kategorie oder Eltern-Kategorie diese Beitrags ist geschützt. Sie können "
992
- "den Schutz der Kategorie ändern von "
993
-
994
- #: classes/class.swpm-protection.php:23
995
- msgid "category protection menu"
996
- msgstr "Menue des Kategorie Schutzes"
997
-
998
- #: classes/class.swpm-settings.php:26 classes/class.swpm-settings.php:54
999
- msgid "General Settings"
1000
- msgstr "Allgemeine Einstellungen"
1001
-
1002
- #: classes/class.swpm-settings.php:27
1003
- msgid "Payment Settings"
1004
- msgstr "Einstellungen für Zahlungsvorgänge"
1005
-
1006
- #: classes/class.swpm-settings.php:28
1007
- msgid "Email Settings"
1008
- msgstr "E-Mail Einstellungen"
1009
-
1010
- #: classes/class.swpm-settings.php:29
1011
- msgid "Tools"
1012
- msgstr "Tools"
1013
-
1014
- #: classes/class.swpm-settings.php:30 classes/class.swpm-settings.php:187
1015
- msgid "Advanced Settings"
1016
- msgstr "Erweiterte Einstellungen"
1017
-
1018
- #: classes/class.swpm-settings.php:31
1019
- msgid "Addons Settings"
1020
- msgstr "Einstellungen für die Erweiterungen"
1021
-
1022
- #: classes/class.swpm-settings.php:53
1023
- msgid "Plugin Documentation"
1024
- msgstr "Plugin-Dokumentation"
1025
-
1026
- #: classes/class.swpm-settings.php:55
1027
- msgid "Enable Free Membership"
1028
- msgstr "Kostenlose Mitgliedschaft erlauben"
1029
-
1030
- #: classes/class.swpm-settings.php:56
1031
- msgid ""
1032
- "Enable/disable registration for free membership level. When you enable this "
1033
- "option, make sure to specify a free membership level ID in the field below."
1034
- msgstr ""
1035
- "Aktivierung/Deaktivierung der Registrierung für eine kostenlose "
1036
- "Mitgliedschaft. Wenn Sie diese Option aktivieren, stellen Sie bitte sicher, "
1037
- "dass Sie eine ID für eine kostenlose Mitgliedschaft angeben."
1038
-
1039
- #: classes/class.swpm-settings.php:57
1040
- msgid "Free Membership Level ID"
1041
- msgstr "Kostenlose Mitgliedschaftsstufen-ID"
1042
-
1043
- #: classes/class.swpm-settings.php:58
1044
- msgid "Assign free membership level ID"
1045
- msgstr "ID der kostenlosen Mitgliedschaftsstufe zuweisen"
1046
-
1047
- #: classes/class.swpm-settings.php:59
1048
- msgid "Enable More Tag Protection"
1049
- msgstr "Aktiviere den \"Mehr\"-Tag Schutz"
1050
-
1051
- #: classes/class.swpm-settings.php:60
1052
- msgid ""
1053
- "Enables or disables \"more\" tag protection in the posts and pages. Anything "
1054
- "after the More tag is protected. Anything before the more tag is teaser "
1055
- "content."
1056
- msgstr ""
1057
- "Aktiviert oder deaktiviert den \"mehr\" Tag Schutz in Beiträgen und Seiten. "
1058
- "Der Inhalt nach dem \"mehr\" Tag ist geschützt. Inhalt vor diesem Tag ist "
1059
- "\"Teaser\" Inhalt."
1060
-
1061
- #: classes/class.swpm-settings.php:61
1062
- msgid "Hide Adminbar"
1063
- msgstr "Admin-Bar ausblenden"
1064
-
1065
- #: classes/class.swpm-settings.php:62
1066
- msgid ""
1067
- "WordPress shows an admin toolbar to the logged in users of the site. Check "
1068
- "this if you want to hide that admin toolbar in the frontend of your site."
1069
- msgstr ""
1070
- "Für eingeloggte User ist in WordPress die Admin Toolbar standardmäßig "
1071
- "sichtbar. Setzen Sie ein Häkchen um die Admin Toolbar auszublenden."
1072
-
1073
- #: classes/class.swpm-settings.php:63
1074
- msgid "Show Adminbar to Admin"
1075
- msgstr "Adminbar dem Admin anzeigen"
1076
-
1077
- #: classes/class.swpm-settings.php:64
1078
- msgid ""
1079
- "Use this option if you want to show the admin toolbar to admin users only. "
1080
- "The admin toolbar will be hidden for all other users."
1081
- msgstr ""
1082
- "Aktivieren Sie diese Option, wenn die Admin Toolbar nur für Admins sichtbar "
1083
- "sein soll. Die Admin Toolbar ist für alle anderen Anwender nicht sichtbar."
1084
-
1085
- #: classes/class.swpm-settings.php:65
1086
- msgid "Disable Access to WP Dashboard"
1087
- msgstr "Deaktivieren Sie den Zugriff auf das WP Dashboard"
1088
-
1089
- #: classes/class.swpm-settings.php:66
1090
- msgid ""
1091
- "WordPress allows a standard wp user to be able to go to the wp-admin URL and "
1092
- "access his profile from the wp dashbaord. Using this option will prevent any "
1093
- "non admin users from going to the wp dashboard."
1094
- msgstr ""
1095
- "WordPress ermöglicht es einem Standard-WP-Benutzer, in die WP-Admin URL zu "
1096
- "gelangen und auf sein Profil aus dem WP-Dashboard zuzugreifen. Mit dieser "
1097
- "Option wird verhindert, dass Benutzer, die nicht Admins sind, auf das WP-"
1098
- "Dashboard zugreifen können."
1099
-
1100
- #: classes/class.swpm-settings.php:68 classes/class.swpm-settings.php:242
1101
- msgid "Default Account Status"
1102
- msgstr "Standardkonto Status"
1103
-
1104
- #: classes/class.swpm-settings.php:71
1105
- msgid ""
1106
- "Select the default account status for newly registered users. If you want to "
1107
- "manually approve the members then you can set the status to \"Pending\"."
1108
- msgstr ""
1109
- "Wählen Sie eine Voreinstellung für den Mitglieder-Status neu registrierter "
1110
- "Mitglieder. Wenn Sie die Registrierung neuer Mitglieder manuell bestätigen "
1111
- "möchten, setzen Sie den Status auf \"ausstehend\"."
1112
-
1113
- #: classes/class.swpm-settings.php:73
1114
- msgid "Members Must be Logged in to Comment"
1115
- msgstr ""
1116
- "Mitglieder müssen eingeloggt sein, um Kommentare hinterlassen zu können"
1117
-
1118
- #: classes/class.swpm-settings.php:74
1119
- msgid ""
1120
- "Enable this option if you only want the members of the site to be able to "
1121
- "post a comment."
1122
- msgstr ""
1123
- "Aktivieren Sie diese Option, wenn Sie nur Mitgliedern die Möglichkeit geben "
1124
- "wollen, Kommentare zu hinterlassen."
1125
-
1126
- #: classes/class.swpm-settings.php:83
1127
- msgid "Pages Settings"
1128
- msgstr "Seiteneinstellungen"
1129
-
1130
- #: classes/class.swpm-settings.php:84
1131
- msgid "Login Page URL"
1132
- msgstr "URL der Login Seite"
1133
-
1134
- #: classes/class.swpm-settings.php:86
1135
- msgid "Registration Page URL"
1136
- msgstr "Registrierungsseiten-URL"
1137
-
1138
- #: classes/class.swpm-settings.php:88
1139
- msgid "Join Us Page URL"
1140
- msgstr "Jetzt Anmelden-URL"
1141
-
1142
- #: classes/class.swpm-settings.php:90
1143
- msgid "Edit Profile Page URL"
1144
- msgstr "Profilseite URL bearbeiten"
1145
-
1146
- #: classes/class.swpm-settings.php:92
1147
- msgid "Password Reset Page URL"
1148
- msgstr "Passwort zurücksetzten-URL"
1149
-
1150
- #: classes/class.swpm-settings.php:95
1151
- msgid "Test & Debug Settings"
1152
- msgstr "Test & Debug-Einstellungen"
1153
-
1154
- #: classes/class.swpm-settings.php:97
1155
- msgid "Check this option to enable debug logging."
1156
- msgstr ""
1157
- "Aktivieren Sie diese Option, um die Debug-Protokollierung zu aktivieren."
1158
-
1159
- #: classes/class.swpm-settings.php:98
1160
- msgid ""
1161
- " This can be useful when troubleshooting an issue. Turn it off and reset the "
1162
- "log files after the troubleshooting is complete."
1163
- msgstr ""
1164
- " Dies kann hilfreich sein um einen Fehler zu lokalisieren. Schalten Sie es "
1165
- "aus und setzen Sie die Log Dateien zurück, wenn Sie die Fehlersuche "
1166
- "abgeschlossen haben."
1167
-
1168
- #: classes/class.swpm-settings.php:100
1169
- msgid "View general debug log file by clicking "
1170
- msgstr "Allgemeine Debug Log Datei ansehen "
1171
-
1172
- #: classes/class.swpm-settings.php:100 classes/class.swpm-settings.php:101
1173
- #: classes/class.swpm-settings.php:102
1174
- msgid "here"
1175
- msgstr "hier"
1176
-
1177
- #: classes/class.swpm-settings.php:101
1178
- msgid "View login related debug log file by clicking "
1179
- msgstr "Login Debug Log Datei ansehen "
1180
-
1181
- #: classes/class.swpm-settings.php:102
1182
- msgid "Reset debug log files by clicking "
1183
- msgstr "Zurücksetzen der Debug Log Dateien "
1184
-
1185
- #: classes/class.swpm-settings.php:103
1186
- msgid "Enable Debug"
1187
- msgstr "Debug aktivieren"
1188
-
1189
- #: classes/class.swpm-settings.php:105
1190
- msgid "Enable Sandbox Testing"
1191
- msgstr "Sandbox-Test aktivieren"
1192
-
1193
- #: classes/class.swpm-settings.php:106
1194
- msgid "Enable this option if you want to do sandbox payment testing."
1195
- msgstr ""
1196
- "Aktivieren Sie die Testumgebung, um diese Option um die Bezahlmethode zu "
1197
- "testen."
1198
-
1199
- #: classes/class.swpm-settings.php:119
1200
- msgid "Email Settings Overview"
1201
- msgstr "E-Mail Einstellungen"
1202
-
1203
- #: classes/class.swpm-settings.php:120
1204
- msgid "Email Misc. Settings"
1205
- msgstr "E-Mail Einstellungen"
1206
-
1207
- #: classes/class.swpm-settings.php:122
1208
- msgid "From Email Address"
1209
- msgstr "Von E-Mail-Adresse"
1210
-
1211
- #: classes/class.swpm-settings.php:126
1212
- msgid "Email Settings (Prompt to Complete Registration )"
1213
- msgstr "E-Mail-Einstellungen (Eingabeaufforderung zur Anmeldung)"
1214
-
1215
- #: classes/class.swpm-settings.php:127 classes/class.swpm-settings.php:140
1216
- #: classes/class.swpm-settings.php:158 classes/class.swpm-settings.php:163
1217
- #: classes/class.swpm-settings.php:168 classes/class.swpm-settings.php:173
1218
- msgid "Email Subject"
1219
- msgstr "E-Mail Betreff"
1220
-
1221
- #: classes/class.swpm-settings.php:129 classes/class.swpm-settings.php:142
1222
- #: classes/class.swpm-settings.php:159 classes/class.swpm-settings.php:164
1223
- #: classes/class.swpm-settings.php:169 classes/class.swpm-settings.php:174
1224
- msgid "Email Body"
1225
- msgstr "E-Mail Text"
1226
-
1227
- #: classes/class.swpm-settings.php:133
1228
- msgid ""
1229
- "Enter the email address where you want the admin notification email to be "
1230
- "sent to."
1231
- msgstr ""
1232
- "Geben Sie hier die Email Adresse ein, zu der die Benachrichtigung an den "
1233
- "Admin gesendet werden soll."
1234
-
1235
- #: classes/class.swpm-settings.php:134
1236
- msgid ""
1237
- " You can put multiple email addresses separated by comma (,) in the above "
1238
- "field to send the notification to multiple email addresses."
1239
- msgstr ""
1240
- " Sie können mehrere Email Adressen eingeben, an die die Benachrichtigungen "
1241
- "gesendet werden sollen. Die Email Adressen müssen durch Komma (,) getrennt "
1242
- "werden."
1243
-
1244
- #: classes/class.swpm-settings.php:136
1245
- msgid "Enter the subject for the admin notification email."
1246
- msgstr "Geben Sie den Betreff für die Admin-Benachrichtigungs-E-Mail ein."
1247
-
1248
- #: classes/class.swpm-settings.php:137
1249
- msgid ""
1250
- "This email will be sent to the admin when a new user completes the "
1251
- "membership registration. Only works if you have enabled the \"Send "
1252
- "Notification to Admin\" option above."
1253
- msgstr ""
1254
- "Diese Email wird an den Admin gesendet, wenn ein neues Mitglied die "
1255
- "Registrierung abgeschlossen hat. Der Email Versand erfolgt nur, wenn Sie die "
1256
- "Option \"Den Admin benachrichtigen\" aktiviert haben."
1257
-
1258
- #: classes/class.swpm-settings.php:139
1259
- msgid "Email Settings (Registration Complete)"
1260
- msgstr "E-Mail-Einstellungen (Anmeldung abgeschlossen)"
1261
-
1262
- #: classes/class.swpm-settings.php:144
1263
- msgid "Send Notification to Admin"
1264
- msgstr "Benachrichtigung an Admin senden"
1265
-
1266
- #: classes/class.swpm-settings.php:145
1267
- msgid ""
1268
- "Enable this option if you want the admin to receive a notification when a "
1269
- "member registers."
1270
- msgstr ""
1271
- "Aktivieren Sie diese Option, wenn der Admin benachrichtigt werden soll, wenn "
1272
- "sich ein neues Mitglied registriert hat."
1273
-
1274
- #: classes/class.swpm-settings.php:146
1275
- msgid "Admin Email Address"
1276
- msgstr "Email Adresse des Admin"
1277
-
1278
- #: classes/class.swpm-settings.php:148
1279
- msgid "Admin Notification Email Subject"
1280
- msgstr "Betreff-Zeile der Admin Benachrichtigung"
1281
-
1282
- #: classes/class.swpm-settings.php:150
1283
- msgid "Admin Notification Email Body"
1284
- msgstr "E-Mail Text der Admin Benachrichtigung"
1285
-
1286
- #: classes/class.swpm-settings.php:153
1287
- msgid "Send Email to Member When Added via Admin Dashboard"
1288
- msgstr ""
1289
- "Mitglied mit E-Mail benachrichtigen wenn er vom Administrator hinzugefügt "
1290
- "wird"
1291
-
1292
- #: classes/class.swpm-settings.php:157
1293
- msgid "Email Settings (Password Reset)"
1294
- msgstr "E-Mail-Einstellungen (Passwort zurücksetzen)"
1295
-
1296
- #: classes/class.swpm-settings.php:162
1297
- msgid " Email Settings (Account Upgrade Notification)"
1298
- msgstr " E-Mail-Einstellungen (Kontoaktualisierungsbenachrichtigung)"
1299
-
1300
- #: classes/class.swpm-settings.php:167
1301
- msgid " Email Settings (Bulk Account Activate Notification)"
1302
- msgstr " E-Mail-Einstellungen (Account Benachrichtigung aktivieren)"
1303
-
1304
- #: classes/class.swpm-settings.php:172
1305
- msgid " Email Settings (Email Activation)"
1306
- msgstr " E-Mail-Einstellungen (Email Aktivierung)"
1307
-
1308
- #: classes/class.swpm-settings.php:189
1309
- msgid "Enable Expired Account Login"
1310
- msgstr "Aktivieren Sie das \"abgelaufene Konto\" Login"
1311
-
1312
- #: classes/class.swpm-settings.php:190
1313
- msgid ""
1314
- "When enabled, expired members will be able to log into the system but won't "
1315
- "be able to view any protected content. This allows them to easily renew "
1316
- "their account by making another payment."
1317
- msgstr ""
1318
- "Wenn aktiviert, können Mitglieder mit abgelaufener Mitgliedschaft sich "
1319
- "einloggen, können aber nicht auf geschützten Inhalte zugreifen. Dies es "
1320
- "ermöglicht es ihnen, Ihre Mitgliedschaft durch Bezahlung zu reaktivieren."
1321
-
1322
- #: classes/class.swpm-settings.php:192
1323
- msgid "Membership Renewal URL"
1324
- msgstr "URL zur Erneuerung der Mitgliedschaft"
1325
-
1326
- #: classes/class.swpm-settings.php:193
1327
- msgid ""
1328
- "You can create a renewal page for your site. Read <a href=\"https://simple-"
1329
- "membership-plugin.com/creating-membership-renewal-button/\" target=\"_blank"
1330
- "\">this documentation</a> to learn how to create a renewal page."
1331
- msgstr ""
1332
- "Sie können eine Seite für die Erneuerung der Mitgliedschaft für Ihre Website "
1333
- "einrichten. Lesen Sie dazu <a href=\"https://simple-membership-plugin.com/"
1334
- "creating-membership-renewal-button/\" target=\"_blank\">diese Dokumentation</"
1335
- "a> für Informationen, wie Sie eine Seite für die Erneuerung der "
1336
- "Mitgliedschaft einrichten."
1337
-
1338
- #: classes/class.swpm-settings.php:195
1339
- msgid "After Registration Redirect URL"
1340
- msgstr "URL, zu der nach der Registrierung weitergeleitet wird"
1341
-
1342
- #: classes/class.swpm-settings.php:196
1343
- msgid ""
1344
- "You can enter an URL here to redirect the members to this page after they "
1345
- "submit the registration form. Read <a href=\"https://simple-membership-"
1346
- "plugin.com/configure-after-registration-redirect-for-members/\" target="
1347
- "\"_blank\">this documentation</a> to learn how to setup after registration "
1348
- "redirect."
1349
- msgstr ""
1350
- "Sie können hier eine URL eingeben, um die Mitglieder auf diese Seite "
1351
- "weiterzuleiten, nachdem sie das Registrierungsformular abgeschickt haben. "
1352
- "Lesen Sie dazu <a href=\"https://simple-membership-plugin.com/creating-"
1353
- "membership-renewal-button/\" target=\"_blank\">diese Dokumentation</a> für "
1354
- "Informationen, wie Sie die Weiterleitung nach der Registrierung einrichten."
1355
-
1356
- #: classes/class.swpm-settings.php:198
1357
- msgid "Enable Auto Login After Registration"
1358
- msgstr "Autom. Login nach Registrierung erlauben"
1359
-
1360
- #: classes/class.swpm-settings.php:199
1361
- msgid ""
1362
- "Use this option if you want the members to be automatically logged into your "
1363
- "site right after they complete the registration. This option will override "
1364
- "any after registration redirection and instead it will trigger the after "
1365
- "login redirection. Read <a href=\"https://simple-membership-plugin.com/"
1366
- "configure-auto-login-after-registration-members/\" target=\"_blank\">this "
1367
- "documentation</a> to learn more."
1368
- msgstr ""
1369
- "Wenden Sie diese Möglichkeit an, wenn Sie möchten, dass die Mitglieder "
1370
- "automatisch eingeloggt sind, wenn sie die Registrierung abgeschlossen haben. "
1371
- "Lesen Sie dazu <a href=\"https://simple-membership-plugin.com/creating-"
1372
- "membership-renewal-button/\" target=\"_blank\">diese Dokumentation</a> für "
1373
- "weitere Informationen."
1374
-
1375
- #: classes/class.swpm-settings.php:201
1376
- msgid "After Logout Redirect URL"
1377
- msgstr ""
1378
- "URL, zu der nach dem Logout\n"
1379
- " weitergeleitet wird"
1380
-
1381
- #: classes/class.swpm-settings.php:202
1382
- msgid ""
1383
- "You can enter an URL here to redirect the members to this page after they "
1384
- "click the logout link to logout from your site."
1385
- msgstr ""
1386
- "Sie können hier eine URL angeben, auf die Mitglieder geleitet werden, "
1387
- "nachdem Sie den Logout Link zum Ausloggen angeklickt haben."
1388
-
1389
- #: classes/class.swpm-settings.php:204
1390
- msgid "Logout Member on Browser Close"
1391
- msgstr "Mitglied ausloggen, wenn der Browser geschlossen wird"
1392
-
1393
- #: classes/class.swpm-settings.php:205
1394
- msgid ""
1395
- "Enable this option if you want the member to be logged out of the account "
1396
- "when he closes the browser."
1397
- msgstr ""
1398
- "Aktivieren Sie diese Option, wenn Sie möchten, dass das Mitglied aus dem "
1399
- "Konto ausgeloggt wird, wenn es den Browser schließt."
1400
-
1401
- #: classes/class.swpm-settings.php:207
1402
- msgid "Allow Account Deletion"
1403
- msgstr "Kontolöschung zulassen"
1404
-
1405
- #: classes/class.swpm-settings.php:208
1406
- msgid "Allow users to delete their accounts."
1407
- msgstr "Benutzern erlauben, ihre Konten zu löschen."
1408
-
1409
- #: classes/class.swpm-settings.php:210
1410
- msgid "Force Strong Password for Members"
1411
- msgstr "Ein starkes Passwort erzwingen"
1412
-
1413
- #: classes/class.swpm-settings.php:211
1414
- msgid ""
1415
- "Enable this if you want the users to be forced to use a strong password for "
1416
- "their accounts."
1417
- msgstr ""
1418
- "Aktivieren Sie diese Option, wenn Mitglieder nur starke Passworte nutzen "
1419
- "dürfen."
1420
-
1421
- #: classes/class.swpm-settings.php:213
1422
- msgid "Use WordPress Timezone"
1423
- msgstr "Die Wordpress Zeitzone benutzen"
1424
-
1425
- #: classes/class.swpm-settings.php:214
1426
- msgid ""
1427
- "Use this option if you want to use the timezone value specified in your "
1428
- "WordPress General Settings interface."
1429
- msgstr ""
1430
- "Verwenden Sie diese Option, wenn Sie den in Ihrer WordPress Einstellungen "
1431
- "angegebenen Zeitzonenwert verwenden möchten."
1432
-
1433
- #: classes/class.swpm-settings.php:216
1434
- msgid "Auto Delete Pending Account"
1435
- msgstr "Automatisches Löschen einer ausstehenden Mitgliedschaft"
1436
-
1437
- #: classes/class.swpm-settings.php:219
1438
- msgid "Select how long you want to keep \"pending\" account."
1439
- msgstr ""
1440
- "Wählen Sie aus, wie lange Sie ausstehende Benutzerkonten behalten möchten."
1441
-
1442
- #: classes/class.swpm-settings.php:221
1443
- msgid "Admin Dashboard Access Permission"
1444
- msgstr "Admin-Dashboard Zugriffsberechtigung"
1445
-
1446
- #: classes/class.swpm-settings.php:224
1447
- msgid ""
1448
- "SWPM admin dashboard is accessible to admin users only (just like any other "
1449
- "plugin). You can allow users with other WP user role to access the SWPM "
1450
- "admin dashboard by selecting a value here."
1451
- msgstr ""
1452
- "Auf das SWPM Dashboard können nur Admins zugreifen (wie bei jedem Plugin). "
1453
- "Sie können anderen Benutzern mit anderen WP Rollen den Zugriff auf das SWPM "
1454
- "Dashboard ermöglichen, wenn Sie hier den entsprechenden Wert wählen."
1455
-
1456
- #: classes/class.swpm-settings.php:226
1457
- msgid "Force WP User Synchronization"
1458
- msgstr "Synchronisation mit den WP Benutzereinträgen erzwingen"
1459
-
1460
- #: classes/class.swpm-settings.php:227
1461
- msgid ""
1462
- "Enable this option if you want to force the member login to be synchronized "
1463
- "with WP user account. This can be useful if you are using another plugin "
1464
- "that uses WP user records. For example: bbPress plugin."
1465
- msgstr ""
1466
- "Aktivieren Sie diese Option, wenn eingeloggte Mitglieder mit den WP User "
1467
- "Einträgen synchronisiert werden sollen. Dies kann hilfreich sein, wenn Sie "
1468
- "ein anderes Plugin installiert haben, das WP User Einträge verwendet. Bspw. "
1469
- "das bbPress Plugin."
1470
-
1471
- #: classes/class.swpm-settings.php:230
1472
- msgid "Create Member Accounts for New WP Users"
1473
- msgstr "Mitgliedschaften für neue Anwender einrichten"
1474
-
1475
- #: classes/class.swpm-settings.php:232
1476
- msgid "Enable Auto Create Member Accounts"
1477
- msgstr "Automatische Erstellung einer Mitgliedschaft erlauben"
1478
-
1479
- #: classes/class.swpm-settings.php:233
1480
- msgid ""
1481
- "Enable this option to automatically create member accounts for any new WP "
1482
- "user that is created by another plugin."
1483
- msgstr ""
1484
- "Aktivieren Sie diese Option um Mitgliedschaften automatisch einrichten zu "
1485
- "lassen, wenn ein WP User Datensatz durch ein anderes WP Plugin erstellt "
1486
- "worden ist."
1487
-
1488
- #: classes/class.swpm-settings.php:236
1489
- msgid "Default Membership Level"
1490
- msgstr "Voreingestellte Mitgliedschaftsstufe"
1491
-
1492
- #: classes/class.swpm-settings.php:239
1493
- msgid ""
1494
- "When automatically creating a member account using this feature, the "
1495
- "membership level of the user will be set to the one you specify here."
1496
- msgstr ""
1497
- "Wenn mit dieser Funktion eine Mitgliedschaft automatisch eingerichtet wird, "
1498
- "wird die hier angegebene Mitgliedschaftsstufe gesetzt."
1499
-
1500
- #: classes/class.swpm-settings.php:245
1501
- msgid ""
1502
- "When automatically creating a member account using this feature, the "
1503
- "membership account status of the user will be set to the one you specify "
1504
- "here."
1505
- msgstr ""
1506
- "Wenn mit dieser Funktion eine Mitgliedschaft automatisch eingerichtet wird, "
1507
- "wird der hier angegebene Mitglieder-Status gesetzt."
1508
-
1509
- #: classes/class.swpm-settings.php:247
1510
- msgid "Payment Notification Forward URL"
1511
- msgstr "URL an die die Zahlungsbenachrichtigung weitergeleitet werden soll"
1512
-
1513
- #: classes/class.swpm-settings.php:248
1514
- msgid ""
1515
- "You can enter an URL here to forward the payment notification after the "
1516
- "membership payment has been processed by this plugin. Useful if you want to "
1517
- "forward the payment notification to an external script for further "
1518
- "processing."
1519
- msgstr ""
1520
- "Sie können hier eine URL angeben, an die die Zahlungsbenachrichtigung "
1521
- "weitergeleitet wird, nachdem die Zahlung durch dieses Plugin verarbeitet "
1522
- "worden ist. Nützlich, wenn die die Zahlungsbenachrichtigung an ein externes "
1523
- "Skript für eine Weiterverarbeitung weitergegebene werden soll."
1524
-
1525
- #: classes/class.swpm-settings.php:251 views/add.php:65
1526
- msgid "Terms and Conditions"
1527
- msgstr "Allgemeine Geschäftbedingungen"
1528
-
1529
- #: classes/class.swpm-settings.php:253
1530
- msgid "Enable Terms and Conditions"
1531
- msgstr "Allgemeine Geschäftsbedingungen aktivieren"
1532
-
1533
- #: classes/class.swpm-settings.php:254
1534
- msgid "Users must accept the terms before they can complete the registration."
1535
- msgstr ""
1536
- "Mitglieder müssen die allgemeinen Geschäftsbedingungen akzeptieren, um die "
1537
- "Registrierung abzuschließen."
1538
-
1539
- #: classes/class.swpm-settings.php:255
1540
- msgid "Terms and Conditions Page URL"
1541
- msgstr "URL der allgemeinen Geschäftsbedingungen"
1542
-
1543
- #: classes/class.swpm-settings.php:256
1544
- msgid ""
1545
- "Enter the URL of your terms and conditions page. You can create a WordPress "
1546
- "page and specify your terms in there then specify the URL of that page in "
1547
- "the above field."
1548
- msgstr "Geben Sie die URL Ihrer allgemeinen Geschäftsbedingungen ein."
1549
-
1550
- #: classes/class.swpm-settings.php:257
1551
- msgid "Enable Privacy Policy"
1552
- msgstr "Datenschutzerklärung aktivieren"
1553
-
1554
- #: classes/class.swpm-settings.php:258
1555
- msgid "Users must accept it before they can complete the registration."
1556
- msgstr ""
1557
- "Mitglieder müssen die Datenschutzerklärung bestätigen, um die Registrierung "
1558
- "abzuschließen."
1559
-
1560
- #: classes/class.swpm-settings.php:259
1561
- msgid "Privacy Policy Page URL"
1562
- msgstr "URL der Datenschutzerklärung"
1563
-
1564
- #: classes/class.swpm-settings.php:260
1565
- msgid "Enter the URL of your privacy policy page."
1566
- msgstr "Geben Sie die URL der Datenschutzerklärung an."
1567
-
1568
- #: classes/class.swpm-settings.php:350 classes/class.swpm-settings.php:396
1569
- #: classes/class.swpm-settings.php:425
1570
- msgid "Settings updated!"
1571
- msgstr "Einstellungen aktualisiert!"
1572
-
1573
- #: classes/class.swpm-settings.php:355
1574
- msgid "General Plugin Settings."
1575
- msgstr "Allgemeine Plugin-Einstellungen."
1576
-
1577
- #: classes/class.swpm-settings.php:359
1578
- msgid "Page Setup and URL Related settings."
1579
- msgstr "Seiten- und URL-spezifische Einstellungen."
1580
-
1581
- #: classes/class.swpm-settings.php:362
1582
- msgid ""
1583
- "The following pages are required for the plugin to function correctly. These "
1584
- "pages were automatically created by the plugin at install time."
1585
- msgstr ""
1586
- "Die folgenden Seiten sind für ein korrektes Funktionieren des Plugin "
1587
- "erforderlich. Diese Seiten werden bei der Installation des Plugin "
1588
- "automatisch angelegt."
1589
-
1590
- #: classes/class.swpm-settings.php:367
1591
- msgid "Testing and Debug Related Settings."
1592
- msgstr "Einstellungen zum Testen und Debuggen."
1593
-
1594
- #: classes/class.swpm-settings.php:371
1595
- msgid ""
1596
- "This email will be sent to your users when they complete the registration "
1597
- "and become a member."
1598
- msgstr ""
1599
- "Diese Email wird den Benutzern gesendet, wenn Sie Ihre Registrierung "
1600
- "abgeschlossen haben und Mitglied geworden sind."
1601
-
1602
- #: classes/class.swpm-settings.php:375
1603
- msgid ""
1604
- "This email will be sent to your users when they use the password reset "
1605
- "functionality."
1606
- msgstr ""
1607
- "Diese Email wird den Mitgliedern gesendet, wenn sie das Passwort zurück "
1608
- "setzen."
1609
-
1610
- #: classes/class.swpm-settings.php:381
1611
- msgid ""
1612
- "This interface lets you custsomize the various emails that gets sent to your "
1613
- "members for various actions. The default settings should be good to get your "
1614
- "started."
1615
- msgstr ""
1616
- "Über diese Schnittstelle können Sie die verschiedenen E-Mails anpassen, die "
1617
- "für verschiedene Aktionen an Ihre Mitglieder gesendet werden. Die "
1618
- "Standardeinstellungen sollten ausreichen, um loszulegen."
1619
-
1620
- #: classes/class.swpm-settings.php:385 views/admin_tools_settings.php:82
1621
- msgid "This documentation"
1622
- msgstr "Plugin-Dokumentation"
1623
-
1624
- #: classes/class.swpm-settings.php:386
1625
- msgid ""
1626
- " explains what email merge tags you can use in the email body field to "
1627
- "customize it (if you want to)."
1628
- msgstr ""
1629
- " erklärt, welche E-Mail-Merge-Tags Sie im E-Mail-Text verwenden können, um "
1630
- "sie anzupassen (wenn Sie möchten)."
1631
-
1632
- #: classes/class.swpm-settings.php:399
1633
- msgid "Settings in this section apply to all emails."
1634
- msgstr "Die Einstellungen in diesem Abschnitt gelten für alle E-Mails."
1635
-
1636
- #: classes/class.swpm-settings.php:403
1637
- msgid ""
1638
- "This email will be sent to your users after account upgrade (when an "
1639
- "existing member pays for a new membership level)."
1640
- msgstr ""
1641
- "Diese Email wird den Mitgliedern gesendet, wenn sie den Zahlungsvorgang für "
1642
- "einen höheren Level der Mitgliedschaft abgeschlossen haben."
1643
-
1644
- #: classes/class.swpm-settings.php:407
1645
- msgid ""
1646
- "This email will be sent to your members when you use the bulk account "
1647
- "activate and notify action."
1648
- msgstr ""
1649
- "Diese Email wird an die Mitglieder gesendet, wenn Sie die Aktivierung und "
1650
- "Benachrichtigung gesammelt vornehmen."
1651
-
1652
- #: classes/class.swpm-settings.php:408
1653
- msgid ""
1654
- " You cannot use email merge tags in this email. You can only use generic "
1655
- "text."
1656
- msgstr ""
1657
- " Sie können nicht E-Mail-Merge-Tags in dieser e-Mail verwenden. Sie können "
1658
- "nur generische Text verwenden."
1659
-
1660
- #: classes/class.swpm-settings.php:413
1661
- msgid ""
1662
- "This email will be sent if Email Activation is enabled for a Membership "
1663
- "Level."
1664
- msgstr ""
1665
- "Diese E-Mail wird gesendet, wenn die E-Mail-Aktivierung für eine "
1666
- "Mitgliedschaftsstufe aktiviert ist."
1667
-
1668
- #: classes/class.swpm-settings.php:417
1669
- msgid ""
1670
- "This email will be sent to prompt users to complete registration after the "
1671
- "payment."
1672
- msgstr ""
1673
- "Diese E-Mail wird gesendet, um Benutzer zu veranlassen, die Registrierung "
1674
- "nach der Zahlung zu vervollständigen."
1675
-
1676
- #: classes/class.swpm-settings.php:428
1677
- msgid "This page allows you to configure some advanced features of the plugin."
1678
- msgstr ""
1679
- "Auf dieser Seite können Sie einige erweiterte Einstellungen dieses Plugins "
1680
- "konfigurieren."
1681
-
1682
- #: classes/class.swpm-settings.php:432
1683
- msgid ""
1684
- "This section allows you to configure automatic creation of member accounts "
1685
- "when new WP User records are created by another plugin. It can be useful if "
1686
- "you are using another plugin that creates WP user records and you want them "
1687
- "to be recognized in the membership plugin."
1688
- msgstr ""
1689
- "Dies ermöglicht Ihnen, Mitgliedschaften automatisch einrichten zu lassen, "
1690
- "wenn ein WP User Datensatz durch ein anderes WP Plugin erstellt worden ist. "
1691
- "Dies kann hilfreich sein, wenn Sie ein anderes Plugin installiert haben, das "
1692
- "WP User Einträge erstellt und Sie möchten, dass diese Einträge von "
1693
- "Membership Plugin übernommen werden."
1694
-
1695
- #: classes/class.swpm-settings.php:436
1696
- msgid ""
1697
- "This section allows you to configure terms and conditions and privacy policy "
1698
- "that users must accept at registration time."
1699
- msgstr ""
1700
- "In diesem Bereich können Sie die Zugriffe auf die allgemeinen "
1701
- "Geschäftsbedingungen und die Datenschutzerklärung eingeben, die die Anwender "
1702
- "bei der Registrierung akzeptieren müssen."
1703
-
1704
- #: classes/class.swpm-settings.php:565
1705
- msgid "Simple WP Membership::Settings"
1706
- msgstr "Simple WP Membership::Einstellungen"
1707
-
1708
- #: classes/class.swpm-utils-member.php:36
1709
- #: classes/class.swpm-utils-member.php:44
1710
- #: classes/class.swpm-utils-member.php:52
1711
- #: classes/class.swpm-utils-member.php:62
1712
- msgid "User is not logged in."
1713
- msgstr "Benutzer ist nicht angemeldet."
1714
-
1715
- #: classes/class.swpm-utils-member.php:80
1716
- msgid "No Expiry"
1717
- msgstr "Kein Ablaufdatum"
1718
-
1719
- #: classes/class.swpm-utils-misc.php:50
1720
- msgid "Registration"
1721
- msgstr "Registrierung"
1722
-
1723
- #: classes/class.swpm-utils-misc.php:73
1724
- msgid "Member Login"
1725
- msgstr "Login für Mitglieder"
1726
-
1727
- #: classes/class.swpm-utils-misc.php:96
1728
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:117
1729
- msgid "Profile"
1730
- msgstr "Profil"
1731
-
1732
- #: classes/class.swpm-utils-misc.php:119
1733
- msgid "Password Reset"
1734
- msgstr "Passwort zurücksetzen"
1735
-
1736
- #: classes/class.swpm-utils-misc.php:168
1737
- #, php-format
1738
- msgid ""
1739
- "You will be automatically redirected in a few seconds. If not, please %s."
1740
- msgstr ""
1741
- "Sie werden automatisch in ein paar Sekunden weitergeleitet. Falls nicht, "
1742
- "bitte %s."
1743
-
1744
- #: classes/class.swpm-utils-misc.php:172
1745
- msgid "Action Status"
1746
- msgstr "Aktionsstatus"
1747
-
1748
- #: classes/class.swpm-utils-misc.php:274
1749
- msgid "Not a Member?"
1750
- msgstr "Noch kein Mitglied?"
1751
-
1752
- #: classes/class.swpm-utils-misc.php:285
1753
- msgid "renew"
1754
- msgstr "erneuern"
1755
-
1756
- #: classes/class.swpm-utils-misc.php:285
1757
- msgid " your account to gain access to this content."
1758
- msgstr " Ihr Konto, um Zugang zu diesem Inhalt zu erhalten."
1759
-
1760
- #: classes/class.swpm-utils-misc.php:343 classes/class.swpm-utils-misc.php:349
1761
- msgid "Error! This action ("
1762
- msgstr "Fehler! Diese Aktion ("
1763
-
1764
- #: classes/class.swpm-utils-misc.php:421
1765
- msgid "(Please Select)"
1766
- msgstr "(Bitte auswählen)"
1767
-
1768
- #: classes/class.swpm-utils-template.php:38
1769
- msgid "Error! Failed to find a template path for the specified template: "
1770
- msgstr ""
1771
- "Fehler! Ein Zugriffspfad auf dieses Template konnte nicht gefunden werden: "
1772
-
1773
- #: classes/class.swpm-utils.php:101
1774
- msgid "Never"
1775
- msgstr "Niemals"
1776
-
1777
- #: classes/class.swpm-utils.php:116 views/admin_members_list.php:19
1778
- msgid "Active"
1779
- msgstr "Aktiv"
1780
-
1781
- #: classes/class.swpm-utils.php:117 views/admin_members_list.php:20
1782
- msgid "Inactive"
1783
- msgstr "Inaktiv"
1784
-
1785
- #: classes/class.swpm-utils.php:118 views/admin_members_list.php:21
1786
- msgid "Activation Required"
1787
- msgstr "Aktivierung benötigt"
1788
-
1789
- #: classes/class.swpm-utils.php:119 views/admin_members_list.php:22
1790
- msgid "Pending"
1791
- msgstr "Ausstehend"
1792
-
1793
- #: classes/class.swpm-utils.php:120 views/admin_members_list.php:24
1794
- msgid "Expired"
1795
- msgstr "Abgelaufen"
1796
-
1797
- #: classes/class.swpm-utils.php:414 views/account_delete_warning.php:3
1798
- msgid "Delete Account"
1799
- msgstr "Konto löschen"
1800
-
1801
- #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:75
1802
- msgid "Payment Button ID"
1803
- msgstr "Zahlungs-Button-ID"
1804
-
1805
- #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:76
1806
- msgid "Payment Button Title"
1807
- msgstr "Zahlungs Button Titel"
1808
-
1809
- #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:77
1810
- msgid "Membership Level ID"
1811
- msgstr "Mitgliedsschaftsstufen ID"
1812
-
1813
- #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:78
1814
- msgid "Button Type"
1815
- msgstr "Button Typ"
1816
-
1817
- #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:79
1818
- msgid "Button Shortcode"
1819
- msgstr "Button Shortcode"
1820
-
1821
- #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:127
1822
- #: views/admin_members_list.php:9
1823
- #: views/payments/admin_all_payment_transactions.php:32
1824
- msgid "The selected entry was deleted!"
1825
- msgstr "Der ausgewählte Eintrag wurde gelöscht!"
1826
-
1827
- #: classes/admin-includes/class.swpm-payments-admin-menu.php:21
1828
- msgid "Simple Membership::Payments"
1829
- msgstr "Simple WP Membership::Zahlungsvorgänge"
1830
-
1831
- #: classes/admin-includes/class.swpm-payments-admin-menu.php:25
1832
- msgid "Transactions"
1833
- msgstr "Transaktionen"
1834
-
1835
- #: classes/admin-includes/class.swpm-payments-admin-menu.php:26
1836
- msgid "Manage Payment Buttons"
1837
- msgstr "Zahlungsarten verwalten"
1838
-
1839
- #: classes/admin-includes/class.swpm-payments-admin-menu.php:27
1840
- #: views/payments/admin_payment_buttons.php:27
1841
- msgid "Create New Button"
1842
- msgstr "Neue Schaltfläche erstellen"
1843
-
1844
- #: classes/admin-includes/class.swpm-payments-list-table.php:57
1845
- #: views/template-1.php:95 views/template-2.php:97
1846
- msgid "View Profile"
1847
- msgstr "Profil anzeigen"
1848
-
1849
- #: classes/admin-includes/class.swpm-payments-list-table.php:76
1850
- msgid "Row ID"
1851
- msgstr "Zeilen-ID"
1852
-
1853
- #: classes/admin-includes/class.swpm-payments-list-table.php:77
1854
- #: views/forgot_password.php:5
1855
- msgid "Email Address"
1856
- msgstr "E-Mail Adresse"
1857
-
1858
- #: classes/admin-includes/class.swpm-payments-list-table.php:80
1859
- msgid "Member Profile"
1860
- msgstr "Mitgliedsprofil"
1861
-
1862
- #: classes/admin-includes/class.swpm-payments-list-table.php:82
1863
- msgid "Transaction ID"
1864
- msgstr "Transaktions-ID"
1865
-
1866
- #: classes/admin-includes/class.swpm-payments-list-table.php:83
1867
- msgid "Subscriber ID"
1868
- msgstr "Abonnenten-ID"
1869
-
1870
- #: classes/admin-includes/class.swpm-payments-list-table.php:84
1871
- msgid "Amount"
1872
- msgstr "Summe"
1873
-
1874
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:60
1875
- msgid "Your membership profile will be updated to reflect the payment."
1876
- msgstr "Ihr Mitglieds Profil wird gemäß Zahlungsbetrag aktualisiert."
1877
-
1878
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:61
1879
- msgid "Your profile username: "
1880
- msgstr "Ihr Benutzername: "
1881
-
1882
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:73
1883
- msgid "Click on the following link to complete the registration."
1884
- msgstr ""
1885
- "Klicken Sie auf den folgenden Link, um die Registrierung abzuschließen."
1886
-
1887
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:74
1888
- msgid "Click here to complete your paid registration"
1889
- msgstr "Klicken Sie hier, um Ihre bezahlte Registrierung abzuschließen"
1890
-
1891
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:79
1892
- msgid ""
1893
- "If you have just made a membership payment then your payment is yet to be "
1894
- "processed. Please check back in a few minutes. An email will be sent to you "
1895
- "with the details shortly."
1896
- msgstr ""
1897
- "Wenn Sie die Zahlung für die Mitgliedschaft gerade veranlasst haben, dann "
1898
- "ist der Zahlungsvorgang möglicherweise noch nicht abgeschlossen. Bitte "
1899
- "warten Sie noch eine kurze Zeit. Sie erhalten in Kürze eine Email zur "
1900
- "Bestätigung."
1901
-
1902
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:93
1903
- msgid "Expiry: "
1904
- msgstr "Ablauf: "
1905
-
1906
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:95
1907
- msgid "You are not logged-in as a member"
1908
- msgstr "Sie sind nicht als Mitglied angemeldet"
1909
-
1910
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:115
1911
- msgid "Logged in as: "
1912
- msgstr "Eingeloggt als: "
1913
-
1914
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:118
1915
- #: views/loggedin.php:31
1916
- msgid "Logout"
1917
- msgstr "Ausloggen"
1918
-
1919
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:121
1920
- msgid "Login Here"
1921
- msgstr "Hier einloggen"
1922
-
1923
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:122
1924
- msgid "Not a member? "
1925
- msgstr "Noch kein Mitglied? "
1926
-
1927
- #: classes/shortcode-related/class.swpm-shortcodes-handler.php:123
1928
- msgid "Join Now"
1929
- msgstr "Noch kein Mitglied? Registrieren Sie sich hier"
1930
-
1931
- #: ipn/swpm-smart-checkout-ipn.php:260 ipn/swpm-smart-checkout-ipn.php:285
1932
- #, php-format
1933
- msgid "Error occured during payment verification. Error code: %d. Message: %s"
1934
- msgstr ""
1935
- "Fehler bei der Verifizierung der Zahlung aufgetreten. Fehler Code: %d. "
1936
- "Nachricht: %s"
1937
-
1938
- #: ipn/swpm-smart-checkout-ipn.php:298
1939
- #, php-format
1940
- msgid ""
1941
- "Payment check failed: invalid amount received. Expected %s %s, got %s %s."
1942
- msgstr ""
1943
- "Zahlungsprüfung fehlgeschlagen: ungültiger Betrag. Erwartet %s %s, erhalten "
1944
- "%s %s."
1945
-
1946
- #: ipn/swpm-smart-checkout-ipn.php:315
1947
- msgid "Empty payment data received."
1948
- msgstr "Leere Zahlungsdaten erhalten."
1949
-
1950
- #: ipn/swpm-smart-checkout-ipn.php:355
1951
- msgid "IPN product validation failed. Check debug log for more details."
1952
- msgstr ""
1953
- "IPN Produkt Verifizierung fehlgeschlagen. Siehe Debug Log für weitere "
1954
- "Details."
1955
-
1956
- #: views/account_delete_warning.php:7
1957
- msgid ""
1958
- "You are about to delete an account. This will delete user data associated "
1959
- "with this account. "
1960
- msgstr ""
1961
- "Sie sind dabei, ein Mitglieds-Konto zu löschen. Es werden alle "
1962
- "entsprechenden Einträge gelöscht. "
1963
-
1964
- #: views/account_delete_warning.php:8
1965
- msgid "It will also delete associated WordPress user account."
1966
- msgstr "Das entsprechende WordPress Benutzer Konto wird auch gelöscht."
1967
-
1968
- #: views/account_delete_warning.php:9
1969
- msgid ""
1970
- "(NOTE: for safety, we do not allow deletion of any associated WordPress "
1971
- "account with administrator role)."
1972
- msgstr ""
1973
- "(Hinweis: zur Sicherheit können keine WordPress Benutzerkonten mit "
1974
- "Administrator-Rechten gelöscht werden)"
1975
-
1976
- #: views/account_delete_warning.php:10
1977
- msgid "Continue?"
1978
- msgstr "Fortfahren?"
1979
-
1980
- #: views/account_delete_warning.php:13
1981
- msgid "Password: "
1982
- msgstr "Passwort: "
1983
-
1984
- #: views/account_delete_warning.php:14
1985
- msgid "Confirm Account Deletion"
1986
- msgstr "Kontolöschung bestätigen"
1987
-
1988
- #: views/add.php:24 views/admin_add.php:19 views/admin_edit.php:44
1989
- #: views/edit.php:31 views/login.php:17
1990
- msgid "Password"
1991
- msgstr "Passwort"
1992
-
1993
- #: views/add.php:28 views/edit.php:35
1994
- msgid "Repeat Password"
1995
- msgstr "Passwort wiederholen"
1996
-
1997
- #: views/add.php:65
1998
- msgid "I accept the "
1999
- msgstr "Ich akzeptiere "
2000
-
2001
- #: views/add.php:77
2002
- msgid "I agree to the "
2003
- msgstr "Ich akzeptiere "
2004
-
2005
- #: views/add.php:77
2006
- msgid "Privacy Policy"
2007
- msgstr "Datenschutzerklärung"
2008
-
2009
- #: views/add.php:88
2010
- msgid "Register"
2011
- msgstr "Registrieren"
2012
-
2013
- #: views/admin_add.php:7
2014
- msgid "Create a brand new user and add it to this site."
2015
- msgstr ""
2016
- "Erstellen Sie einen neuen Benutzer und fügen Sie ihn zu dieser Website hinzu."
2017
-
2018
- #: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:12
2019
- #: views/admin_add_level.php:16 views/admin_add_level.php:20
2020
- #: views/admin_edit.php:19 views/admin_edit.php:40
2021
- #: views/admin_edit_level.php:16 views/admin_edit_level.php:20
2022
- #: views/admin_edit_level.php:24
2023
- msgid "(required)"
2024
- msgstr "(Pflichtfeld)"
2025
-
2026
- #: views/admin_add.php:15 views/admin_edit.php:40
2027
- msgid "E-mail"
2028
- msgstr "E-Mail Adresse"
2029
-
2030
- #: views/admin_add.php:19
2031
- msgid "(twice, required)"
2032
- msgstr "(zweimal, erforderlich)"
2033
-
2034
- #: views/admin_add.php:24 views/admin_edit.php:48
2035
- msgid "Strength indicator"
2036
- msgstr "Passwortsicherheit"
2037
-
2038
- #: views/admin_add.php:25 views/admin_edit.php:49
2039
- msgid ""
2040
- "Hint: The password should be at least seven characters long. To make it "
2041
- "stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
2042
- "$ % ^ &amp; )."
2043
- msgstr ""
2044
- "Hinweis: Das Passwort sollte mindestens sieben Zeichen lang sein. Um es "
2045
- "stärker zu machen, verwenden Sie Groß- und Kleinbuchstaben, Zahlen und "
2046
- "Symbole wie! \" ? $ % ^ &)."
2047
-
2048
- #: views/admin_add.php:29 views/admin_edit.php:53 views/loggedin.php:10
2049
- msgid "Account Status"
2050
- msgstr "Kontostatus"
2051
-
2052
- #: views/admin_add.php:39
2053
- msgid "Add New Member "
2054
- msgstr "Neues Mitglied hinzufügen "
2055
-
2056
- #: views/admin_addon_settings.php:3
2057
- msgid ""
2058
- "Some of the simple membership plugin's addon settings and options will be "
2059
- "displayed here (if you have them)"
2060
- msgstr ""
2061
- "Einstellungen einiger der Erweiterungen und Optionen des Simple Membership "
2062
- "Plugins werden hier angezeigt (sofern sie installiert sind)"
2063
-
2064
- #: views/admin_addon_settings.php:8
2065
- msgid "Save Changes"
2066
- msgstr "Änderungen speichern"
2067
-
2068
- #: views/admin_add_level.php:6
2069
- msgid "Add Membership Level"
2070
- msgstr "Mitgliedschaftsstufe hinzufügen"
2071
-
2072
- #: views/admin_add_level.php:7
2073
- msgid "Create new membership level."
2074
- msgstr "Neue Mitgliedschaftsstufe erstellen."
2075
-
2076
- #: views/admin_add_level.php:12 views/admin_edit_level.php:16
2077
- msgid "Membership Level Name"
2078
- msgstr "Name der Mitgliedschaftsstufe"
2079
-
2080
- #: views/admin_add_level.php:16 views/admin_edit_level.php:20
2081
- msgid "Default WordPress Role"
2082
- msgstr "Standard-WordPress-Rolle"
2083
-
2084
- #: views/admin_add_level.php:20 views/admin_edit_level.php:24
2085
- msgid "Access Duration"
2086
- msgstr "Zugriffsdauer"
2087
-
2088
- #: views/admin_add_level.php:23
2089
- msgid "No Expiry (Access for this level will not expire until cancelled"
2090
- msgstr "Kein Ablauf (Zugriff läuft nicht ab, bis er storniert wird"
2091
-
2092
- #: views/admin_add_level.php:24 views/admin_add_level.php:26
2093
- #: views/admin_add_level.php:28 views/admin_add_level.php:30
2094
- #: views/admin_edit_level.php:28 views/admin_edit_level.php:31
2095
- #: views/admin_edit_level.php:34 views/admin_edit_level.php:37
2096
- msgid "Expire After"
2097
- msgstr "Läuft aus nach"
2098
-
2099
- #: views/admin_add_level.php:25 views/admin_edit_level.php:29
2100
- msgid "Days (Access expires after given number of days)"
2101
- msgstr "Tage (Zugang läuft nach vorgegebener Anzahl der Tage ab.)"
2102
-
2103
- #: views/admin_add_level.php:27
2104
- msgid "Weeks (Access expires after given number of weeks"
2105
- msgstr "Wochen (Zugang läuft nach vorgegebener Anzahl der Wochen ab)"
2106
-
2107
- #: views/admin_add_level.php:29 views/admin_edit_level.php:35
2108
- msgid "Months (Access expires after given number of months)"
2109
- msgstr "Monate (Zugang läuft nach vorgegebener Anzahl der Monate ab.)"
2110
-
2111
- #: views/admin_add_level.php:31 views/admin_edit_level.php:38
2112
- msgid "Years (Access expires after given number of years)"
2113
- msgstr "Jahre (Zugang läuft nach vorgegebener Anzahl der Jahre ab.)"
2114
-
2115
- #: views/admin_add_level.php:32 views/admin_edit_level.php:40
2116
- msgid "Fixed Date Expiry"
2117
- msgstr "Festes Ablaufdatum"
2118
-
2119
- #: views/admin_add_level.php:33 views/admin_edit_level.php:41
2120
- msgid "(Access expires on a fixed date)"
2121
- msgstr "(Der Zugang läuft zu einem festen Termin ab)"
2122
-
2123
- #: views/admin_add_level.php:38 views/admin_edit_level.php:46
2124
- msgid "Email Activation"
2125
- msgstr "E-Mail-Aktivierung"
2126
-
2127
- #: views/admin_add_level.php:43
2128
- msgid ""
2129
- "Enable new user activation via email. When enabled, members will need to "
2130
- "click on an activation link that is sent to their email address to activate "
2131
- "the account. Useful for free membership. "
2132
- msgstr ""
2133
- "Aktivierung neuer Benutzer über Email freigeben. Wenn es freigegeben ist, "
2134
- "müssen neue Mitglieder einen Aktivierungslink anklicken, der an ihre Email-"
2135
- "Adresse gesendet wird. Vorteilhaft für kostenlose Mitgliedschaften. "
2136
-
2137
- #: views/admin_add_level.php:44 views/admin_edit_level.php:52
2138
- msgid "View Documentation"
2139
- msgstr "Dokumentation ansehen"
2140
-
2141
- #: views/admin_add_level.php:45 views/admin_edit_level.php:53
2142
- msgid "Note:"
2143
- msgstr "Hinweis:"
2144
-
2145
- #: views/admin_add_level.php:45 views/admin_edit_level.php:53
2146
- msgid ""
2147
- "If enabled, decryptable member password is temporarily stored in the "
2148
- "database until the account is activated."
2149
- msgstr ""
2150
- "Wenn aktiviert wird das unverschlüsselte Passwort zeitweilig in der "
2151
- "Datenbank gespeichert, bis die Mitgliedschaft aktiviert ist."
2152
-
2153
- #: views/admin_add_level.php:52
2154
- msgid "Add New Membership Level "
2155
- msgstr "Neue Mitgliedschaftsstufe hinzufügen "
2156
-
2157
- #: views/admin_add_ons_page.php:7
2158
- msgid "Simple WP Membership::Add-ons"
2159
- msgstr "Simple WP Membership::Add-ons"
2160
-
2161
- #: views/admin_category_list.php:5
2162
- msgid ""
2163
- "First of all, globally protect the category on your site by selecting "
2164
- "\"General Protection\" from the drop-down box below and then select the "
2165
- "categories that should be protected from non-logged in users."
2166
- msgstr ""
2167
- "Zuerst wählen Sie im Drop-Down Menue \"Genereller Schutz\" und wählen dann "
2168
- "die Kategorien aus, die Sie vor nicht eingeloggten Benutzern schützen wollen."
2169
-
2170
- #: views/admin_category_list.php:8
2171
- msgid ""
2172
- "Next, select an existing membership level from the drop-down box below and "
2173
- "then select the categories you want to grant access to (for that particular "
2174
- "membership level)."
2175
- msgstr ""
2176
- "Dann wählen Sie einen Mitglieder-Level aus dem Drop-Down Menue und wählen "
2177
- "die Kategorien, zu denen Sie Mitgliedern dieses Levels Zugriff gewähren "
2178
- "wollen."
2179
-
2180
- #: views/admin_category_list.php:11 views/admin_post_list.php:11
2181
- msgid "Read the "
2182
- msgstr "Lesen Sie "
2183
-
2184
- #: views/admin_category_list.php:11
2185
- msgid "category protection documentation"
2186
- msgstr "die Dokumentation zu Kategorie-Schutz"
2187
-
2188
- #: views/admin_category_list.php:17 views/admin_post_list.php:27
2189
- msgid "Membership Level:"
2190
- msgstr "Mitgliedschaftsstufe:"
2191
-
2192
- #: views/admin_category_list.php:19 views/admin_post_list.php:29
2193
- msgid "General Protection"
2194
- msgstr "Genereller Schutz"
2195
-
2196
- #: views/admin_category_list.php:23 views/admin_post_list.php:33
2197
- #: views/edit.php:83
2198
- msgid "Update"
2199
- msgstr "Aktualisieren"
2200
-
2201
- #: views/admin_edit.php:11
2202
- msgid "Edit Member"
2203
- msgstr "Mitglied bearbeiten"
2204
-
2205
- #: views/admin_edit.php:13
2206
- msgid "Edit existing member details."
2207
- msgstr "Bearbeiten Sie die vorhandenen Mitglieds-Details."
2208
-
2209
- #: views/admin_edit.php:14
2210
- msgid " You are currenty editing member with member ID: "
2211
- msgstr " Sie bearbeiten gerade das Mitglied mit der Mitglieds-ID: "
2212
-
2213
- #: views/admin_edit.php:44
2214
- msgid "(twice, leave empty to retain old password)"
2215
- msgstr "(doppelt, leer lassen, um das bestehende Passwort zu behalten)"
2216
-
2217
- #: views/admin_edit.php:59
2218
- msgid ""
2219
- "This is the member's account status. If you want to manually activate an "
2220
- "expired member's account then read"
2221
- msgstr ""
2222
- "Dies ist der Status der Mitgliedschaft. Wenn Sie eine abgelaufene "
2223
- "Mitgliedschaft manuell aktivieren möchten, dann lesen Sie"
2224
-
2225
- #: views/admin_edit.php:60
2226
- msgid "this documentation"
2227
- msgstr "diese Dokumentation"
2228
-
2229
- #: views/admin_edit.php:61
2230
- msgid " to learn how to do it."
2231
- msgstr " lernen, wie es zu machen ist."
2232
-
2233
- #: views/admin_edit.php:66
2234
- msgid "Notify User"
2235
- msgstr "Benutzer benachrichtigen"
2236
-
2237
- #: views/admin_edit.php:69
2238
- msgid ""
2239
- "You can use this option to send a quick notification email to this member "
2240
- "(the email will be sent when you hit the save button below)."
2241
- msgstr ""
2242
- "Sie können mit dieser Option eine Nachricht an dieses Mitglied senden. (die "
2243
- "E-Mail wird gesendet, wenn Sie den Button zum speichern anklicken)"
2244
-
2245
- #: views/admin_edit.php:75
2246
- msgid "Subscriber ID/Reference"
2247
- msgstr "Abonennten ID / Referenz"
2248
-
2249
- #: views/admin_edit.php:79
2250
- msgid "Last Accessed Date"
2251
- msgstr "Datum des letzten Zugriffs"
2252
-
2253
- #: views/admin_edit.php:82 views/admin_edit.php:89
2254
- msgid "This value gets updated when this member logs into your site."
2255
- msgstr "Dieser Wert wird aktualisiert, wenn dieses Mitglied sich einloggt."
2256
-
2257
- #: views/admin_edit.php:86
2258
- msgid "Last Accessed From IP"
2259
- msgstr "Letzter Zugriff von IP"
2260
-
2261
- #: views/admin_edit.php:97
2262
- msgid "Save Data"
2263
- msgstr "Daten speichern"
2264
-
2265
- #: views/admin_edit.php:102
2266
- msgid "Delete User Profile"
2267
- msgstr "Benutzerprofil löschen"
2268
-
2269
- #: views/admin_edit_level.php:6
2270
- msgid "Edit membership level"
2271
- msgstr "Mitgliedschaft bearbeiten"
2272
-
2273
- #: views/admin_edit_level.php:9
2274
- msgid ""
2275
- "You can edit details of a selected membership level from this interface. "
2276
- msgstr ""
2277
- "Sie können die Details des ausgewählten Mitgliederlevels hier bearbeiten. "
2278
-
2279
- #: views/admin_edit_level.php:10
2280
- msgid "You are currently editing: "
2281
- msgstr "Sie bearbeiten gerade: "
2282
-
2283
- #: views/admin_edit_level.php:27
2284
- msgid "No Expiry (Access for this level will not expire until cancelled)"
2285
- msgstr "Kein Ablauf (Zugriff läuft nicht ab, bis er storniert wird)"
2286
-
2287
- #: views/admin_edit_level.php:32
2288
- msgid "Weeks (Access expires after given number of weeks)"
2289
- msgstr "Wochen (Zugang läuft nach vorgegebener Anzahl von Wochen)"
2290
-
2291
- #: views/admin_edit_level.php:51
2292
- msgid ""
2293
- "Enable new user activation via email. When enabled, members will need to "
2294
- "click on an activation link that is sent to their email address to activate "
2295
- "the account. Useful for free membership."
2296
- msgstr ""
2297
- "Aktivierung neuer Benutzer über Email freigeben. Wenn es freigegeben ist, "
2298
- "müssen neue Mitglieder einen Aktivierungslink anklicken, der an ihre Email-"
2299
- "Adresse gesendet wird. Vorteilhaft für kostenlose Mitgliedschaften."
2300
-
2301
- #: views/admin_edit_level.php:60
2302
- msgid "Save Membership Level "
2303
- msgstr "Mitgliedschaftsstufe speichern "
2304
-
2305
- #: views/admin_membership_manage.php:18
2306
- msgid "Example Content Protection Settings"
2307
- msgstr "Beispiel Inhaltsschutz Einstellungen"
2308
-
2309
- #: views/admin_members_list.php:18
2310
- msgid "All"
2311
- msgstr "Alle"
2312
-
2313
- #: views/admin_members_list.php:23
2314
- msgid "Incomplete"
2315
- msgstr "Unvollständig"
2316
-
2317
- #: views/admin_member_form_common_part.php:23
2318
- #: includes/swpm_mda_show_profile.php:37
2319
- msgid "Gender"
2320
- msgstr "Geschlecht"
2321
-
2322
- #: views/admin_member_form_common_part.php:30 views/edit.php:47
2323
- #: includes/swpm_mda_show_profile.php:34
2324
- msgid "Phone"
2325
- msgstr "Telefonnummer"
2326
-
2327
- #: views/admin_member_form_common_part.php:34 views/edit.php:51
2328
- msgid "Street"
2329
- msgstr "Straße"
2330
-
2331
- #: views/admin_member_form_common_part.php:38 views/edit.php:55
2332
- msgid "City"
2333
- msgstr "Stadt"
2334
-
2335
- #: views/admin_member_form_common_part.php:42 views/edit.php:59
2336
- msgid "State"
2337
- msgstr "Bundesland"
2338
-
2339
- #: views/admin_member_form_common_part.php:46 views/edit.php:63
2340
- msgid "Zipcode"
2341
- msgstr "PLZ"
2342
-
2343
- #: views/admin_member_form_common_part.php:50 views/edit.php:67
2344
- #: includes/swpm_mda_show_profile.php:33
2345
- msgid "Country"
2346
- msgstr "Land"
2347
-
2348
- #: views/admin_member_form_common_part.php:54
2349
- #: includes/swpm_mda_show_profile.php:38
2350
- msgid "Company"
2351
- msgstr "Firma"
2352
-
2353
- #: views/admin_member_form_common_part.php:58
2354
- #: includes/swpm_mda_show_profile.php:36
2355
- msgid "Member Since"
2356
- msgstr "Mitglied seit"
2357
-
2358
- #: views/admin_post_list.php:5
2359
- msgid ""
2360
- "First of all, globally protect posts and pages on your site by selecting "
2361
- "\"General Protection\" from the drop-down box below and then select posts "
2362
- "and pages that should be protected from non-logged in users."
2363
- msgstr ""
2364
- "Zuerst wählen Sie im Drop-Down Menue \"Genereller Schutz\" und wählen dann "
2365
- "die Beiträge und Seiten aus, die Sie vor nicht eingeloggten Benutzern "
2366
- "schützen wollen."
2367
-
2368
- #: views/admin_post_list.php:8
2369
- msgid ""
2370
- "Next, select an existing membership level from the drop-down box below and "
2371
- "then select posts and pages you want to grant access to (for that particular "
2372
- "membership level)."
2373
- msgstr ""
2374
- "Dann wählen Sie einen Mitglieder-Level aus dem Drop-Down Menue und wählen "
2375
- "die Beiträge und Seiten, zu denen Sie Mitgliedern dieses Levels Zugriff "
2376
- "gewähren wollen."
2377
-
2378
- #: views/admin_post_list.php:11
2379
- msgid "bulk protect posts and pages documentation"
2380
- msgstr ""
2381
- "die Dokumentation, wie Beiträge und Seiten in einer Massenanwendung "
2382
- "geschützt werden"
2383
-
2384
- #: views/admin_post_list.php:11
2385
- msgid " to learn how to use it."
2386
- msgstr " um zu lernen, wie es benutzt wird."
2387
-
2388
- #: views/admin_post_list.php:21
2389
- msgid "Posts"
2390
- msgstr "Beiträge"
2391
-
2392
- #: views/admin_post_list.php:22
2393
- msgid "Pages"
2394
- msgstr "Seiten"
2395
-
2396
- #: views/admin_post_list.php:23
2397
- msgid "Custom Posts"
2398
- msgstr "Benutzerdefinierte Beiträge"
2399
-
2400
- #: views/admin_tools_settings.php:14
2401
- msgid "The required pages have been re-created."
2402
- msgstr "Die notwendigen Seiten wurden wiederhergestellt."
2403
-
2404
- #: views/admin_tools_settings.php:21
2405
- msgid "Generate a Registration Completion link"
2406
- msgstr "Einen \"Registrierung abgeschlossen\" Link generieren"
2407
-
2408
- #: views/admin_tools_settings.php:24
2409
- msgid ""
2410
- "You can manually generate a registration completion link here and give it to "
2411
- "your customer if they have missed the email that was automatically sent out "
2412
- "to them after the payment."
2413
- msgstr ""
2414
- "Sie können hier manuell einen \"Registrierung abgeschlossen\" Link "
2415
- "generieren falls Ihr Kunde die automatische E-Mail verlegt hat."
2416
-
2417
- #: views/admin_tools_settings.php:29
2418
- msgid "Generate Registration Completion Link"
2419
- msgstr "\"Registrierung Abgeschlossen\" Link generieren"
2420
-
2421
- #: views/admin_tools_settings.php:30
2422
- msgid "For a Particular Member ID"
2423
- msgstr "Für eine bestimmte Mitglieds-ID"
2424
-
2425
- #: views/admin_tools_settings.php:32
2426
- msgid "OR"
2427
- msgstr "ODER"
2428
-
2429
- #: views/admin_tools_settings.php:33
2430
- msgid "For All Incomplete Registrations"
2431
- msgstr "Für alle unvollständigen Anmeldungen"
2432
-
2433
- #: views/admin_tools_settings.php:38
2434
- msgid "Send Registration Reminder Email Too"
2435
- msgstr "Registrierungserinnerung auch per E-Mail verschicken"
2436
-
2437
- #: views/admin_tools_settings.php:44
2438
- msgid "Submit"
2439
- msgstr "Absenden"
2440
-
2441
- #: views/admin_tools_settings.php:53
2442
- msgid ""
2443
- "Link(s) generated successfully. The following link(s) can be used to "
2444
- "complete the registration."
2445
- msgstr ""
2446
- "Link(s) sind erfolgreich angelegt. Folgende(r) Link(s) kann/können genutzt "
2447
- "werden, um die Registrierung zu Vervollständigen."
2448
-
2449
- #: views/admin_tools_settings.php:55
2450
- msgid "Registration completion links will appear below"
2451
- msgstr ""
2452
- "Der Link für die Vervollständigung der Registrierung wird unten angezeigt"
2453
-
2454
- #: views/admin_tools_settings.php:65
2455
- msgid "A prompt to complete registration email was also sent."
2456
- msgstr ""
2457
- "Eine Aufforderung, die Registrierung zu vervollständigen, wurde ebenfalls "
2458
- "gesendet."
2459
-
2460
- #: views/admin_tools_settings.php:78 views/admin_tools_settings.php:88
2461
- msgid "Re-create the Required Pages"
2462
- msgstr "Die notwendigen Seiten wiederherstellen"
2463
-
2464
- #: views/admin_tools_settings.php:81
2465
- msgid ""
2466
- "If you have accidentally deleted the required pages that this plugin creates "
2467
- "at install time, you can use this option to re-create them."
2468
- msgstr ""
2469
- "Falls Sie aus Versehen die von diesem Plugin automatisch erstellten und "
2470
- "benötigten Seiten gelöscht haben, können Sie sie mit dieser Option wieder "
2471
- "herstellen."
2472
-
2473
- #: views/admin_tools_settings.php:82
2474
- msgid " has full explanation."
2475
- msgstr " vollständige Erklärung hat."
2476
-
2477
- #: views/edit.php:32 views/edit.php:36
2478
- msgid "Leave empty to keep the current password"
2479
- msgstr "Lassen Sie das Feld leer, um das aktuelle Passwort beizubehalten"
2480
-
2481
- #: views/edit.php:71
2482
- msgid "Company Name"
2483
- msgstr "Firmennname"
2484
-
2485
- #: views/forgot_password.php:12
2486
- msgid "Reset Password"
2487
- msgstr "Passwort zurücksetzen"
2488
-
2489
- #: views/loggedin.php:6
2490
- msgid "Logged in as"
2491
- msgstr "Eingeloggt als"
2492
-
2493
- #: views/loggedin.php:14
2494
- msgid "Membership"
2495
- msgstr "Mitgliedschaft"
2496
-
2497
- #: views/loggedin.php:18
2498
- msgid "Account Expiry"
2499
- msgstr "Kontoablauf"
2500
-
2501
- #: views/loggedin.php:26
2502
- msgid "Edit Profile"
2503
- msgstr "Profil bearbeiten"
2504
-
2505
- #: views/login.php:11
2506
- msgid "Username or Email"
2507
- msgstr "Mitgliedsname oder Email"
2508
-
2509
- #: views/login.php:24
2510
- msgid "Remember Me"
2511
- msgstr "Erinneren Sie sich an mich"
2512
-
2513
- #: views/login.php:33
2514
- msgid "Forgot Password?"
2515
- msgstr "Passwort vergessen?"
2516
-
2517
- #: views/payments/admin_all_payment_transactions.php:6
2518
- msgid "All the payments/transactions of your members are recorded here."
2519
- msgstr ""
2520
- "Alle Zahlungen / Transaktionen Ihrer Mitglieder werden hier aufgezeichnet."
2521
-
2522
- #: views/payments/admin_all_payment_transactions.php:12
2523
- msgid "Search for a transaction by using email or name"
2524
- msgstr "Suche nach einer Transaktion mit Email oder Name"
2525
-
2526
- #: views/payments/admin_create_payment_buttons.php:15
2527
- msgid ""
2528
- "You can create new payment button for your memberships using this interface."
2529
- msgstr ""
2530
- "Sie können eine neue Schaltfläche für Zahlungen für Mitgliedschaften mit "
2531
- "diesem Interface erzeugen."
2532
-
2533
- #: views/payments/admin_create_payment_buttons.php:23
2534
- msgid "Select Payment Button Type"
2535
- msgstr "Wählen Sie den Schaltflächen Typ für Zahlungen"
2536
-
2537
- #: views/payments/admin_create_payment_buttons.php:26
2538
- msgid "PayPal Buy Now"
2539
- msgstr "PayPal Jetzt kaufen"
2540
-
2541
- #: views/payments/admin_create_payment_buttons.php:28
2542
- msgid "PayPal Subscription"
2543
- msgstr "PayPal Abonnement"
2544
-
2545
- #: views/payments/admin_create_payment_buttons.php:30
2546
- msgid "PayPal Smart Checkout"
2547
- msgstr "PayPal Smart Checkout"
2548
-
2549
- #: views/payments/admin_create_payment_buttons.php:32
2550
- msgid "Stripe Buy Now"
2551
- msgstr "Stripe Jetzt kaufen"
2552
-
2553
- #: views/payments/admin_create_payment_buttons.php:34
2554
- msgid "Stripe Subscription"
2555
- msgstr "Stripe Mitgliedschaft"
2556
-
2557
- #: views/payments/admin_create_payment_buttons.php:36
2558
- msgid "Braintree Buy Now"
2559
- msgstr "Braintree Jetzt kaufen"
2560
-
2561
- #: views/payments/admin_create_payment_buttons.php:43
2562
- msgid "Next"
2563
- msgstr "Weiter"
2564
-
2565
- #: views/payments/admin_edit_payment_buttons.php:15
2566
- msgid "You can edit a payment button using this interface."
2567
- msgstr "Sie können eine Schaltfläche für Zahlungen hier bearbeiten."
2568
-
2569
- #: views/payments/admin_payment_buttons.php:6
2570
- msgid ""
2571
- "All the membership buttons that you created in the plugin are displayed here."
2572
- msgstr ""
2573
- "Alle Schaltflächen für Mitgliedschaften, die Sie angelegt haben, finden Sie "
2574
- "hier."
2575
-
2576
- #: views/payments/admin_payment_settings.php:21
2577
- msgid "Error! The membership level ID ("
2578
- msgstr "Fehler! Die Mitgliederstufen-ID ("
2579
-
2580
- #: views/payments/admin_payment_settings.php:28
2581
- msgid ""
2582
- "You can create membership payment buttons from the payments menu of this "
2583
- "plugin (useful if you want to offer paid membership on the site)."
2584
- msgstr ""
2585
- "Sie können Schaltflächen für die Zahlungen für Mitgliedschaften über das "
2586
- "Zahlungsmenü dieses Plugins erstellen (nützlich, wenn Sie eine "
2587
- "kostenpflichtige Mitgliedschaft auf der Website anbieten möchten)."
2588
-
2589
- #: views/payments/admin_payment_settings.php:33
2590
- msgid "PayPal Integration Settings"
2591
- msgstr "PayPal Integration Einstellungen"
2592
-
2593
- #: views/payments/admin_payment_settings.php:36
2594
- msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
2595
- msgstr "Generieren Sie den \"Advanced Variables\" Code für Ihren PayPal-Button"
2596
-
2597
- #: views/payments/admin_payment_settings.php:39
2598
- msgid "Enter the Membership Level ID"
2599
- msgstr "Geben Sie die Mitgliederstufen-ID ein"
2600
-
2601
- #: views/payments/admin_payment_settings.php:41
2602
- msgid "Generate Code"
2603
- msgstr "Code generieren"
2604
-
2605
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:22
2606
- msgid "Braintree Buy Now Button Configuration"
2607
- msgstr "Braintree \"Jetzt kaufen\" Button Konfiguration"
2608
-
2609
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:34
2610
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:213
2611
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:33
2612
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:301
2613
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:259
2614
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:83
2615
- msgid "Button ID"
2616
- msgstr "Button ID"
2617
-
2618
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:42
2619
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:26
2620
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:221
2621
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:41
2622
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:27
2623
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:309
2624
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:39
2625
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:266
2626
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:91
2627
- msgid "Button Title"
2628
- msgstr "Button Titel"
2629
-
2630
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:60
2631
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:44
2632
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:239
2633
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:59
2634
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:57
2635
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:282
2636
- msgid "Payment Amount"
2637
- msgstr "Zahlungsbetrag"
2638
-
2639
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:68
2640
- msgid ""
2641
- "Braintree API key and account details. You can get this from your Braintree "
2642
- "account."
2643
- msgstr ""
2644
- "Braintree API Schlüssel und Konto Details. Sie können diese aus Ihrem "
2645
- "Braintree Konto erhalten."
2646
-
2647
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:72
2648
- msgid "Merchant ID"
2649
- msgstr "Händler ID"
2650
-
2651
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:80
2652
- msgid "Public Key"
2653
- msgstr "Öffentlicher Schlüssel"
2654
-
2655
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:87
2656
- msgid "Private Key"
2657
- msgstr "Privater Schlüssel"
2658
-
2659
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:95
2660
- msgid "Merchant Account ID"
2661
- msgstr "Händler-Konto-ID"
2662
-
2663
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:113
2664
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:137
2665
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:361
2666
- msgid "The following details are optional."
2667
- msgstr "Die folgenden Angaben sind optional."
2668
-
2669
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:117
2670
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:92
2671
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:287
2672
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:204
2673
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:172
2674
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:456
2675
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:149
2676
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:373
2677
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:191
2678
- msgid "Return URL"
2679
- msgstr "Zu URL zurückkehren"
2680
-
2681
- #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:127
2682
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:126
2683
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:321
2684
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:214
2685
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:200
2686
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:484
2687
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:159
2688
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:383
2689
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:212
2690
- msgid "Save Payment Data"
2691
- msgstr "Zahlungsdaten speichern"
2692
-
2693
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:16
2694
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:204
2695
- msgid "PayPal Buy Now Button Configuration"
2696
- msgstr "PayPal \"Jetzt kaufen\" Button Configuration"
2697
-
2698
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:52
2699
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:247
2700
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:67
2701
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:45
2702
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:327
2703
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:65
2704
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:289
2705
- msgid "Payment Currency"
2706
- msgstr "Währung der Zahlung"
2707
-
2708
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:100
2709
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:295
2710
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:85
2711
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:367
2712
- msgid "PayPal Email"
2713
- msgstr "PayPal E-Mail Adresse"
2714
-
2715
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:108
2716
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:303
2717
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:180
2718
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:464
2719
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:199
2720
- msgid "Button Image URL"
2721
- msgstr "Button Bild-URL"
2722
-
2723
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:116
2724
- #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:311
2725
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:188
2726
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:472
2727
- msgid "Custom Checkout Page Logo Image"
2728
- msgstr "Benutzerdefinierte Checkout Seiten Logo"
2729
-
2730
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:21
2731
- msgid "PayPal Smart Checkout Button Configuration"
2732
- msgstr "PayPal Smart Checkout Button Konfiguration"
2733
-
2734
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:107
2735
- msgid ""
2736
- "PayPal Smart Checkout API Credentials (you can get this from your PayPal "
2737
- "account)"
2738
- msgstr ""
2739
- "PayPal Smart Checkout API Berechtigungen (Sie können diese von Ihrem PayPal-"
2740
- "Konto erhalten)"
2741
-
2742
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:111
2743
- msgid "Live Client ID"
2744
- msgstr "Kunden ID"
2745
-
2746
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:119
2747
- msgid "Live Secret"
2748
- msgstr "Live Secret"
2749
-
2750
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:127
2751
- msgid "Sandbox Client ID"
2752
- msgstr "Sandbox Kunden ID"
2753
-
2754
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:135
2755
- msgid "Sandbox Secret"
2756
- msgstr "Sandbox Geheimschlüssel"
2757
-
2758
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:143
2759
- msgid "Button Appearance Settings"
2760
- msgstr "Button Erscheinungsbild Einstellungen"
2761
-
2762
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:147
2763
- msgid "Size"
2764
- msgstr "Größe"
2765
-
2766
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:150
2767
- msgid "Medium"
2768
- msgstr "Medium"
2769
-
2770
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:151
2771
- msgid "Large"
2772
- msgstr "Groß"
2773
-
2774
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:152
2775
- msgid "Repsonsive"
2776
- msgstr "Repsonsive"
2777
-
2778
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:154
2779
- msgid "Select button size."
2780
- msgstr "Schaltflächengröße auswählen."
2781
-
2782
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:158
2783
- msgid "Color"
2784
- msgstr "Farbe"
2785
-
2786
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:161
2787
- msgid "Gold"
2788
- msgstr "Gold"
2789
-
2790
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:162
2791
- msgid "Blue"
2792
- msgstr "Blau"
2793
-
2794
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:163
2795
- msgid "Silver"
2796
- msgstr "Silber"
2797
-
2798
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:164
2799
- msgid "Black"
2800
- msgstr "Schwarz"
2801
-
2802
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:166
2803
- msgid "Select button color."
2804
- msgstr "Schaltflächenfarbe wählen."
2805
-
2806
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:170
2807
- msgid "Shape"
2808
- msgstr "Form"
2809
-
2810
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:172
2811
- msgid "Rectangular"
2812
- msgstr "Rechteckig"
2813
-
2814
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:173
2815
- msgid "Pill"
2816
- msgstr "Pill"
2817
-
2818
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:174
2819
- msgid "Select button shape."
2820
- msgstr "Schaltflächenform wählen."
2821
-
2822
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:178
2823
- msgid "Layout"
2824
- msgstr "Layout"
2825
-
2826
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:180
2827
- msgid "Vertical"
2828
- msgstr "Vertikal"
2829
-
2830
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:181
2831
- msgid "Horizontal"
2832
- msgstr "Horizontal"
2833
-
2834
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:182
2835
- msgid "Select button layout."
2836
- msgstr "Schaltflächenform wählen."
2837
-
2838
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:187
2839
- msgid "Additional Settings"
2840
- msgstr "Weitere Einstellungen"
2841
-
2842
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:191
2843
- msgid "Payment Methods"
2844
- msgstr "Zahlungsmethoden"
2845
-
2846
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:193
2847
- msgid "PayPal Credit"
2848
- msgstr "PayPal Kredit"
2849
-
2850
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:194
2851
- msgid "ELV"
2852
- msgstr "ELV"
2853
-
2854
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:195
2855
- msgid ""
2856
- "Select payment methods that could be used by customers. Note that payment "
2857
- "with cards is always enabled."
2858
- msgstr ""
2859
- "Wählen Sie Zahlungsmethoden, die von Kunden genutzt werden können. Hinweis: "
2860
- "Zahlung über Karten ist immer freigegeben."
2861
-
2862
- #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:200
2863
- msgid "The following details are optional"
2864
- msgstr "Die folgenden Angaben sind optional"
2865
-
2866
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:18
2867
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:295
2868
- msgid "PayPal Subscription Button Configuration"
2869
- msgstr "PayPal \"Abonnieren\" Button Konfiguration"
2870
-
2871
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:93
2872
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:375
2873
- msgid "Billing Amount Each Cycle"
2874
- msgstr "Abrechnungsbetrag des Zyklusses"
2875
-
2876
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:101
2877
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:383
2878
- msgid "Billing Cycle"
2879
- msgstr "Abrechnungszyklus"
2880
-
2881
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:114
2882
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:396
2883
- msgid "Billing Cycle Count"
2884
- msgstr "Abrechnungszyklen"
2885
-
2886
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:122
2887
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:404
2888
- msgid "Re-attempt on Failure"
2889
- msgstr "Wiederholungsversuch bei aufgetretenem Fehler"
2890
-
2891
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:135
2892
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:419
2893
- msgid ""
2894
- "Trial Billing Details (Leave empty if you are not offering a trial period)"
2895
- msgstr ""
2896
- "Abrechnungsdetails für Probezeitraum (Leer lassen, wenn Sie keine Probezeit "
2897
- "anbieten)"
2898
-
2899
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:141
2900
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:425
2901
- msgid "Trial Billing Amount"
2902
- msgstr "Rechnungsbetrag für Probezeitraum"
2903
-
2904
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:149
2905
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:433
2906
- msgid "Trial Billing Period"
2907
- msgstr "Abrechnungszeitraum für Probezeitraum"
2908
-
2909
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:166
2910
- #: views/payments/payment-gateway/admin_paypal_subscription_button.php:450
2911
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:177
2912
- msgid "Optional Details"
2913
- msgstr "Optionale Details"
2914
-
2915
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:29
2916
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:250
2917
- msgid "Stripe Buy Now Button Configuration"
2918
- msgstr "Stripe \"Jetzt kaufen\" Button Konfiguration"
2919
-
2920
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:104
2921
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:328
2922
- msgid "Stripe API keys. You can get this from your Stripe account."
2923
- msgstr ""
2924
- "Stripe API-Schlüssel. Sie können diese von Ihrem Stripe-Konto erhalten."
2925
-
2926
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:108
2927
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:332
2928
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:131
2929
- msgid "Test Publishable Key"
2930
- msgstr "Testen Sie den Veröffentlichungs-Schlüssel"
2931
-
2932
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:115
2933
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:339
2934
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:139
2935
- msgid "Test Secret Key"
2936
- msgstr "Testen Sie den geheimen Schlüssel"
2937
-
2938
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:122
2939
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:346
2940
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:147
2941
- msgid "Live Publishable Key"
2942
- msgstr "Veröffentlichungs Schlüssel"
2943
-
2944
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:129
2945
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:353
2946
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:155
2947
- msgid "Live Secret Key"
2948
- msgstr "Geheimer Schlüssel"
2949
-
2950
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:141
2951
- #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:365
2952
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:183
2953
- msgid "Collect Customer Address"
2954
- msgstr "Adress-Daten des Kunden anfordern"
2955
-
2956
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:75
2957
- msgid "Stripe Subscription Button Configuration"
2958
- msgstr "Konfiguration des Stripe Anmeldungs-Button"
2959
-
2960
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:109
2961
- msgid "Stripe Plan ID"
2962
- msgstr "Stripe Plan ID"
2963
-
2964
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:125
2965
- msgid "Stripe API Settings"
2966
- msgstr "Stripe API Einstellungen"
2967
-
2968
- #: views/payments/payment-gateway/admin_stripe_subscription_button.php:163
2969
- msgid "Webook Endpoint URL"
2970
- msgstr "Webook Endpoint URL"
2971
-
2972
- #: views/payments/payment-gateway/braintree_button_shortcode_view.php:20
2973
- #: views/payments/payment-gateway/paypal_button_shortcode_view.php:91
2974
- #: views/payments/payment-gateway/paypal_button_shortcode_view.php:93
2975
- #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:15
2976
- #: views/payments/payment-gateway/stripe_button_shortcode_view.php:20
2977
- #: views/payments/payment-gateway/stripe_button_shortcode_view.php:150
2978
- msgid "Buy Now"
2979
- msgstr "Jetzt kaufen"
2980
-
2981
- #: views/payments/payment-gateway/paypal_button_shortcode_view.php:226
2982
- #: views/payments/payment-gateway/paypal_button_shortcode_view.php:228
2983
- msgid "Subscribe Now"
2984
- msgstr "Jetzt abonnieren"
2985
-
2986
- #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:137
2987
- msgid "Error occured during PayPal Smart Checkout process."
2988
- msgstr "Fehler aufgetreten während des PayPal Smart Checkout Prozesses."
2989
-
2990
- #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:165
2991
- msgid "HTTP error occured during payment process:"
2992
- msgstr "HTTP Fehler aufgetreten während des Zahlungsvorgangs:"
2993
-
2994
- #: Translation strings from addons === Form builder addon
2995
- msgid "Type password here"
2996
- msgstr "Passowrt hier eingeben"
2997
-
2998
- msgid "Retype password here"
2999
- msgstr "Passwort hier nochmal eingeben"
3000
-
3001
- msgid "Registration is complete. You can now log into the site."
3002
- msgstr "Registrierung ist vollständig. Sie können sich jetzt einloggen."
3003
-
3004
- msgid " Field has invalid character"
3005
- msgstr " Eingabe nicht erlaubter Zeichen"
3006
-
3007
- msgid " Password does not match"
3008
- msgstr " Passworte stimmen nicht überein"
3009
-
3010
- msgid "Already taken."
3011
- msgstr "Schon verwendet."
3012
-
3013
- msgid "Street Address"
3014
- msgstr "Strassen Adresse"
3015
-
3016
- msgid "Apt, Suite, Bldg. (optional)"
3017
- msgstr "Gebäude (optional)"
3018
-
3019
- msgid "State / Province / Region"
3020
- msgstr "Staat / Land / Region"
3021
-
3022
- msgid "Postal / Zip Code"
3023
- msgstr "PLZ"
3024
-
3025
- msgid ""
3026
- "Check this box to delete the image. The image will be deleted when you save "
3027
- "the profile."
3028
- msgstr ""
3029
- "Setzen Sie im Kontrolkästchen einen Haken, um das Bidl zu löschen. Das Bild "
3030
- "wird gelöscht, wenn Sie das Profil abspeichern."
3031
-
3032
- msgid "You will need to re-login since you changed your password."
3033
- msgstr "Sie müssen sich neu anmelden, da Sie Ihr Passwort geändert haben."
3034
-
3035
- msgid ""
3036
- "Please enter any two digits with <strong>no</strong> spaces (Example: 12)"
3037
- msgstr ""
3038
- "Bitte geben Sie zwei Ziffern <strong>ohne</strong>Leerzeichen ein (bspw.: 12)"
3039
-
3040
- msgid "Verification"
3041
- msgstr "Verifizierung"
3042
-
3043
- msgid "Please enter any two digits with no spaces (Example: 12)*"
3044
- msgstr "Bitte geben Sie zwei Ziffern ohne Leerzeichen ein (bspw.: 12)"
3045
-
3046
- msgid "Username can only contain: letters, numbers and .-*@"
3047
- msgstr "Mitgliedsname kann nur enthalten: Buchstaben, Zahlen und .-*@"
3048
-
3049
- #: === Partial protection addon strings
3050
- msgid "You do not have permission to view this content."
3051
- msgstr "Ihre Mitgliedschaft erlaubt es nicht, diesen Inhalt anzuzeigen."
3052
-
3053
- msgid "Your membership level does not have permission to view this content."
3054
- msgstr "Ihre Mitgliedschaft erlaubt es nicht, diesen Inhalt anzuzeigen."
3055
-
3056
- msgid "This content is for members only."
3057
- msgstr "Auf diesen Inhalt dürfen nur Mitglieder zugreifen."
3058
-
3059
- #: === Member Directory Listing addon strings swpm-member-directory-admin.php:9
3060
- msgid "Member Directory"
3061
- msgstr "Mitglieder Verzeichnis"
3062
-
3063
- #: includes/swpm_mda_show_profile.php:26
3064
- msgid "Member ID"
3065
- msgstr "Mitglieds ID"
3066
-
3067
- #: includes/swpm_mda_show_profile.php:30
3068
- msgid "Level"
3069
- msgstr "Level"
3070
-
3071
- #: includes/swpm_mda_show_profile.php:32
3072
- msgid "Address"
3073
- msgstr "Adresse"
3074
-
3075
- #: views/template-1.php:52 views/template-2.php:53
3076
- msgid "Search..."
3077
- msgstr "Suche..."
3078
-
3079
- #: views/template-1.php:60 views/template-2.php:62
3080
- msgid "Clear Search"
3081
- msgstr "Suche löschen"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Simple Membership\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2019-08-18 09:41+0000\n"
6
+ "PO-Revision-Date: 2019-08-18 11:47+0200\n"
7
+ "Last-Translator: Geo_Writer <information@geoplan-systems.de>\n"
8
+ "Language-Team: Deutsch\n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 2.2.3\n"
14
+ "X-Poedit-KeywordsList: __;_e;e\n"
15
+ "X-Poedit-Basepath: ..\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+ "X-Loco-Version: 2.2.2; wp-5.2.1\n"
18
+ "X-Poedit-SearchPath-0: Übersetzungen 01 2019\n"
19
+ "X-Poedit-SearchPath-1: simple-membership\n"
20
+
21
+ #: classes/class.simple-wp-membership.php:180
22
+ msgid "The admin of this site does not allow users to access the wp dashboard."
23
+ msgstr "Es ist Mitgliedern nicht erlaubt, auf das WP-Dashboard zuzugreifen."
24
+
25
+ #: classes/class.simple-wp-membership.php:181
26
+ msgid "Go back to the home page by "
27
+ msgstr "Gehe zurück zur Startseite "
28
+
29
+ #: classes/class.simple-wp-membership.php:181
30
+ msgid "clicking here"
31
+ msgstr "hier klicken"
32
+
33
+ #: classes/class.simple-wp-membership.php:242
34
+ msgid ""
35
+ "Error! This site has the force WP user login feature enabled in the "
36
+ "settings. We could not find a WP user record for the given username: "
37
+ msgstr ""
38
+ "Fehler! Diese Seite hat in den Einstellungen \"Synchronisation mit den WP "
39
+ "Benutzereinträgen erzwingen\" aktiviert. Wir konnten keinen WP Benutzer-"
40
+ "Eintrag für den eingegebenen Benutzernamen finden: "
41
+
42
+ #: classes/class.simple-wp-membership.php:243
43
+ msgid ""
44
+ "This error is triggered when a member account doesn't have a corresponding "
45
+ "WP user account. So the plugin fails to log the user into the WP User system."
46
+ msgstr ""
47
+ "Dieser Fehler tritt auf, wenn zu einem Mitglieds-Konto kein "
48
+ "korrespondierender WP User Account existiert. Dann kann das Plugin den "
49
+ "Benutzer nicht in das WP User System einloggen."
50
+
51
+ #: classes/class.simple-wp-membership.php:244
52
+ msgid ""
53
+ "Contact the site admin and request them to check your username in the WP "
54
+ "Users menu to see what happened with the WP user entry of your account."
55
+ msgstr ""
56
+ "Kontaktieren Sie den Website-Administrator und fordern sie ihn auf, Ihren "
57
+ "Benutzernamen zu prüfen, um zu sehen, was mit dem Benutzer-Eintrag Ihres "
58
+ "Accounts passiert ist."
59
+
60
+ #: classes/class.simple-wp-membership.php:245
61
+ msgid ""
62
+ "The site admin can disable the Force WP User Synchronization feature in the "
63
+ "settings to disable this feature and this error will go away."
64
+ msgstr ""
65
+ "Der Admin kann die erzwungene WP User Synchronisation in den Einstellungen "
66
+ "deaktivieren und dadurch diesen Fehler beheben."
67
+
68
+ #: classes/class.simple-wp-membership.php:246
69
+ msgid "You can use the back button of your browser to go back to the site."
70
+ msgstr ""
71
+ "Sie können mit Klick auf den \"zurück\" button in Ihrem Browser zu der Seite "
72
+ "zurückkehren."
73
+
74
+ #: classes/class.simple-wp-membership.php:407
75
+ msgid "You are not logged in."
76
+ msgstr "Sie sind nicht eingeloggt."
77
+
78
+ #: classes/class.simple-wp-membership.php:458
79
+ msgid ""
80
+ "You have the sandbox payment mode enabled in plugin settings. Make sure to "
81
+ "turn off the sandbox mode when you want to do live transactions."
82
+ msgstr ""
83
+ "Sie haben in den Einstellungen des Plugins die Testumgebung für die "
84
+ "Zahlungsvorgänge aktiviert. Bitte stellen Sie sicher, dass Sie die "
85
+ "Testumgebung deaktivieren, wenn Sie Zahlungen vornehmen wollen."
86
+
87
+ #: classes/class.simple-wp-membership.php:473
88
+ msgid "Simple WP Membership Protection"
89
+ msgstr "Simple WP Membership Schutz"
90
+
91
+ #: classes/class.simple-wp-membership.php:485
92
+ msgid "Simple Membership Protection options"
93
+ msgstr "Schutz-Einstellungen für Simple Membership"
94
+
95
+ #: classes/class.simple-wp-membership.php:503
96
+ msgid "Do you want to protect this content?"
97
+ msgstr "Möchten Sie diesen Inhalt schützen?"
98
+
99
+ #: classes/class.simple-wp-membership.php:504
100
+ msgid "No, Do not protect this content."
101
+ msgstr "Nein, diesen Inhalt nicht schützen."
102
+
103
+ #: classes/class.simple-wp-membership.php:505
104
+ msgid "Yes, Protect this content."
105
+ msgstr "Ja, diesen Inhalt schützen."
106
+
107
+ #: classes/class.simple-wp-membership.php:508
108
+ msgid "Select the membership level that can access this content:"
109
+ msgstr ""
110
+ "Wählen Sie die Mitgliedschaftsstufe aus, die auf diesen Inhalt zugreifen "
111
+ "kann:"
112
+
113
+ #: classes/class.simple-wp-membership.php:646
114
+ #: classes/class.simple-wp-membership.php:650
115
+ msgid "Validating, please wait"
116
+ msgstr "Überprüfung, bitte warten"
117
+
118
+ #: classes/class.simple-wp-membership.php:653
119
+ msgid "Invalid email address"
120
+ msgstr "Ungültige E-Mail-Adresse"
121
+
122
+ #: classes/class.simple-wp-membership.php:656
123
+ msgid "This field is required"
124
+ msgstr "Dieses Feld ist erforderlich"
125
+
126
+ msgid "Password must contain at least:"
127
+ msgstr "Das Kennwort muss mindestens Folgendes enthalten:"
128
+
129
+ msgid "- a digit"
130
+ msgstr "- eine Ziffer"
131
+
132
+ msgid "- an uppercase letter"
133
+ msgstr "- einen Großbuchstaben"
134
+
135
+ msgid "- a lowercase letter"
136
+ msgstr "- einen Kleinbuchstaben"
137
+
138
+ #: classes/class.simple-wp-membership.php:659 classes/class.swpm-auth.php:296
139
+ msgid "Invalid Username"
140
+ msgstr "Ungültiger Benutzername"
141
+
142
+ #: classes/class.simple-wp-membership.php:659
143
+ msgid "Usernames can only contain: letters, numbers and .-_*@"
144
+ msgstr "Benutzername kann nur enthalten: Buchstaben, Ziffern und .-_*@"
145
+
146
+ #: classes/class.simple-wp-membership.php:662
147
+ msgid "Minimum "
148
+ msgstr "Minimum "
149
+
150
+ #: classes/class.simple-wp-membership.php:663
151
+ msgid " characters required"
152
+ msgstr " Zeichen erforderlich"
153
+
154
+ #: classes/class.simple-wp-membership.php:666
155
+ msgid "Apostrophe character is not allowed"
156
+ msgstr "Apostroph ist nicht zulässig"
157
+
158
+ #: classes/class.simple-wp-membership.php:697
159
+ msgid "WP Membership"
160
+ msgstr "WP Mitgliedschaft"
161
+
162
+ #: classes/class.simple-wp-membership.php:698 classes/class.swpm-members.php:11
163
+ #: classes/class.swpm-members.php:581
164
+ msgid "Members"
165
+ msgstr "Mitglieder"
166
+
167
+ #: classes/class.simple-wp-membership.php:699
168
+ #: classes/class.swpm-category-list.php:20
169
+ #: classes/class.swpm-membership-levels.php:12
170
+ #: classes/class.swpm-membership-levels.php:265
171
+ #: classes/class.swpm-post-list.php:21
172
+ msgid "Membership Levels"
173
+ msgstr "Mitgliedschaftsstufen"
174
+
175
+ #: classes/class.simple-wp-membership.php:700
176
+ msgid "Settings"
177
+ msgstr "Einstellungen"
178
+
179
+ #: classes/class.simple-wp-membership.php:701
180
+ msgid "Payments"
181
+ msgstr "Zahlungen"
182
+
183
+ #: classes/class.simple-wp-membership.php:702
184
+ msgid "Add-ons"
185
+ msgstr "Add-ons"
186
+
187
+ #: classes/class.swpm-access-control.php:47
188
+ #: classes/class.swpm-access-control.php:120
189
+ msgid "You need to login to view this content. "
190
+ msgstr "Sie müssen sich anmelden, um diesen Inhalt ansehen zu können. "
191
+
192
+ #: classes/class.swpm-access-control.php:56
193
+ #: classes/class.swpm-access-control.php:128
194
+ #: classes/class.swpm-access-control.php:212
195
+ msgid "Your account has expired. "
196
+ msgstr "Mitgliedschaft abgelaufen. "
197
+
198
+ #: classes/class.swpm-access-control.php:66
199
+ #: classes/class.swpm-access-control.php:138
200
+ msgid "This content can only be viewed by members who joined on or before "
201
+ msgstr ""
202
+ "Dieser Inhalt kann nur von Mitgliedern angesehen werden, die sich "
203
+ "registriert haben an oder vor "
204
+
205
+ #: classes/class.swpm-access-control.php:79
206
+ #: classes/class.swpm-access-control.php:148
207
+ msgid "This content is not permitted for your membership level."
208
+ msgstr "Dieser Inhalt ist für Ihre Mitgliedschaftsstufe nicht freigeschaltet."
209
+
210
+ #: classes/class.swpm-access-control.php:204
211
+ msgid "You need to login to view the rest of the content. "
212
+ msgstr ""
213
+ "Sie müssen sich anmelden um den restlichen Inhalt angezeigt zu bekommen. "
214
+
215
+ #: classes/class.swpm-access-control.php:217
216
+ msgid " The rest of the content is not permitted for your membership level."
217
+ msgstr ""
218
+ " Der Rest des Inhalts ist für Ihre Mitgliedschaftsstufe nicht freigeschaltet."
219
+
220
+ #: classes/class.swpm-admin-registration.php:25
221
+ msgid "Error! Nonce verification failed for user registration from admin end."
222
+ msgstr ""
223
+ "Fehler! Nonce-Überprüfung für Benutzerregistrierung durch den Admin "
224
+ "fehlgeschlagen."
225
+
226
+ #: classes/class.swpm-admin-registration.php:71
227
+ msgid "Member record added successfully."
228
+ msgstr "Der Eintrag für das Mitglied wurde erfolgreich hinzugefügt."
229
+
230
+ #: classes/class.swpm-admin-registration.php:76
231
+ #: classes/class.swpm-admin-registration.php:124
232
+ #: classes/class.swpm-admin-registration.php:151
233
+ #: classes/class.swpm-membership-level.php:73
234
+ #: classes/class.swpm-membership-level.php:105
235
+ msgid "Please correct the following:"
236
+ msgstr "Bitte korrigieren Sie folgendes:"
237
+
238
+ #: classes/class.swpm-admin-registration.php:87
239
+ msgid "Error! Nonce verification failed for user edit from admin end."
240
+ msgstr ""
241
+ "Fehler! Nonce-Überprüfung für die Bearbeitung der Benutzerdaten durch den "
242
+ "Admin fehlgeschlagen."
243
+
244
+ #: classes/class.swpm-admin-registration.php:139
245
+ msgid "Your current password"
246
+ msgstr "Ihr aktuelles Passwort"
247
+
248
+ #: classes/class.swpm-ajax.php:14
249
+ msgid "Invalid Email Address"
250
+ msgstr "Ungültige E-Mail Adresse"
251
+
252
+ #: classes/class.swpm-ajax.php:21 classes/class.swpm-ajax.php:36
253
+ msgid "Aready taken"
254
+ msgstr "Wird schon verwendet"
255
+
256
+ #: classes/class.swpm-ajax.php:30
257
+ msgid "Name contains invalid character"
258
+ msgstr "Name enthält ungültiges Zeichen"
259
+
260
+ #: classes/class.swpm-ajax.php:37
261
+ msgid "Available"
262
+ msgstr "Verfügbar"
263
+
264
+ #: classes/class.swpm-auth.php:57
265
+ msgid ""
266
+ "Warning! Simple Membership plugin cannot process this login request to "
267
+ "prevent you from getting logged out of WP Admin accidentally."
268
+ msgstr ""
269
+ "Warnung! Simple Membership Plugin kann dieses Login nicht durchführen, um zu "
270
+ "verhindern, dass Sie versehentlich als WP Admin ausgeloggt werden."
271
+
272
+ #: classes/class.swpm-auth.php:58
273
+ msgid "Click here"
274
+ msgstr "Hier klicken"
275
+
276
+ #: classes/class.swpm-auth.php:58
277
+ msgid " to see the profile you are currently logged into in this browser."
278
+ msgstr ""
279
+ " um das Profil zu sehen, mit dem Sie in diesem Browser eingeloggt sind."
280
+
281
+ #: classes/class.swpm-auth.php:59
282
+ msgid ""
283
+ "You are logged into the site as an ADMIN user in this browser. First, logout "
284
+ "from WP Admin then you will be able to log in as a normal member."
285
+ msgstr ""
286
+ "Sie sind auf dieser Seite mit diesem Browser als ADMIN eingeloggt. Loggen "
287
+ "Sie sich zuerst als Admin aus, dann können Sie sich als Mitglied einloggen."
288
+
289
+ #: classes/class.swpm-auth.php:60
290
+ msgid ""
291
+ "Alternatively, you can use a different browser (where you are not logged-in "
292
+ "as ADMIN) to test the membership login."
293
+ msgstr ""
294
+ "Alternativ können Sie einen anderen Browser verwenden (in welchem Sie nicht "
295
+ "als Admin eingeloggt sind), um das Login-Interface zu testen."
296
+
297
+ #: classes/class.swpm-auth.php:61
298
+ msgid ""
299
+ "Your normal visitors or members will never see this message. This message is "
300
+ "ONLY for ADMIN user."
301
+ msgstr ""
302
+ "Ihre Besucher und Mitglieder werden diese Nachricht niemals sehen können. "
303
+ "Diese Meldung ist AUSSCHLIESSLICH für ADMIN."
304
+
305
+ #: classes/class.swpm-auth.php:68
306
+ msgid "Captcha validation failed on login form."
307
+ msgstr "Captcha-Validierung fehlgeschlagen."
308
+
309
+ #: classes/class.swpm-auth.php:93
310
+ msgid "User Not Found."
311
+ msgstr "Benutzer nicht gefunden."
312
+
313
+ #: classes/class.swpm-auth.php:100
314
+ msgid "Password Empty or Invalid."
315
+ msgstr "Passwort leer oder ungültig."
316
+
317
+ #: classes/class.swpm-auth.php:133
318
+ msgid "Account is inactive."
319
+ msgstr "Ihr Konto ist inaktiv."
320
+
321
+ #: classes/class.swpm-auth.php:136 classes/class.swpm-auth.php:162
322
+ msgid "Account has expired."
323
+ msgstr "Mitgliedschaft abgelaufen."
324
+
325
+ #: classes/class.swpm-auth.php:139
326
+ msgid "Account is pending."
327
+ msgstr "Ihr Konto ist inaktiv."
328
+
329
+ #: classes/class.swpm-auth.php:146
330
+ #, php-format
331
+ msgid ""
332
+ "You need to activate your account. If you didn't receive an email then %s to "
333
+ "resend the activation email."
334
+ msgstr ""
335
+ "Sie müssen Ihr Konto aktivieren. Falls Sie keine Email erhalten haben, dann "
336
+ "%s um die Aktivierungs-Email nochmal zu senden."
337
+
338
+ #: classes/class.swpm-auth.php:146
339
+ #: classes/class.swpm-front-registration.php:376
340
+ #: classes/class.swpm-front-registration.php:426
341
+ #: classes/class.swpm-utils-misc.php:169
342
+ msgid "click here"
343
+ msgstr "hier klicken"
344
+
345
+ #: classes/class.swpm-auth.php:170
346
+ msgid "You are logged in as:"
347
+ msgstr "Sie sind eingeloggt als:"
348
+
349
+ #: classes/class.swpm-auth.php:234
350
+ msgid "Logged Out Successfully."
351
+ msgstr "Abmeldung war erfolgreich."
352
+
353
+ #: classes/class.swpm-auth.php:287
354
+ msgid "Session Expired."
355
+ msgstr "Sitzung ist abgelaufen."
356
+
357
+ #: classes/class.swpm-auth.php:304
358
+ msgid "Please login again."
359
+ msgstr "Bitte loggen Sie sich erneut ein."
360
+
361
+ #: classes/class.swpm-category-list.php:19 classes/class.swpm-members.php:24
362
+ #: classes/class.swpm-membership-levels.php:11
363
+ #: classes/class.swpm-membership-levels.php:21
364
+ #: classes/class.swpm-post-list.php:20
365
+ #: classes/admin-includes/class.swpm-payments-list-table.php:85
366
+ #: views/add.php:40 views/admin_member_form_common_part.php:2 views/edit.php:75
367
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:50
368
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:34
369
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:229
370
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:49
371
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:35
372
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:317
373
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:47
374
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:273
375
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:99
376
+ msgid "Membership Level"
377
+ msgstr "Mitgliedschaftsstufe"
378
+
379
+ #: classes/class.swpm-category-list.php:33
380
+ msgid "Category ID"
381
+ msgstr "Kategorie ID"
382
+
383
+ #: classes/class.swpm-category-list.php:34
384
+ msgid "Category Name"
385
+ msgstr "Kategorie Name"
386
+
387
+ #: classes/class.swpm-category-list.php:35
388
+ msgid "Category Type (Taxonomy)"
389
+ msgstr "Kategorie Typ (Taxonomy)"
390
+
391
+ #: classes/class.swpm-category-list.php:36
392
+ msgid "Description"
393
+ msgstr "Beschreibung"
394
+
395
+ #: classes/class.swpm-category-list.php:37
396
+ msgid "Count"
397
+ msgstr "Anzahl"
398
+
399
+ #: classes/class.swpm-category-list.php:92
400
+ msgid "Category protection updated!"
401
+ msgstr "Kategorie Schutz aktualisiert!"
402
+
403
+ #: classes/class.swpm-category-list.php:130
404
+ msgid "No category found."
405
+ msgstr "Kategorie wurde nicht gefunden."
406
+
407
+ #: classes/class.swpm-comment-form-related.php:15
408
+ msgid "Please login to comment."
409
+ msgstr ""
410
+ "Bitte loggen Sie sich ein, damit Sie einen Kommentar hinterlassen können."
411
+
412
+ #: classes/class.swpm-comment-form-related.php:40
413
+ msgid "Please Login to Comment."
414
+ msgstr ""
415
+ "Bitte loggen Sie sich ein, damit Sie einen Kommentar hinterlassen können."
416
+
417
+ #: classes/class.swpm-comment-form-related.php:79
418
+ msgid "Comments not allowed by a non-member."
419
+ msgstr "Nicht-Mitglieder können keinen Kommentar hinterlassen."
420
+
421
+ #: classes/class.swpm-form.php:30
422
+ msgid ""
423
+ "Wordpress account exists with given username. But given email doesn't match."
424
+ msgstr ""
425
+ "Es existiert bereits ein Account mit den angegebenen Benutzernamen. Die E-"
426
+ "Mail Adresse passt aber nicht zum Benutzernamen."
427
+
428
+ #: classes/class.swpm-form.php:31
429
+ msgid ""
430
+ " Use a different username to complete the registration. If you want to use "
431
+ "that username then you must enter the correct email address associated with "
432
+ "the existing WP user to connect with that account."
433
+ msgstr ""
434
+ " Verwenden Sie einen anderen Benutzernamen, um die Registrierung "
435
+ "abzuschließen. Wenn Sie diesen Benutzernamen verwenden möchten, geben Sie "
436
+ "die korrekte e-Mail-Adresse, die verbunden ist mit dem bestehenden WP-"
437
+ "Benutzer, um sich mit diesem Konto zu verbinden."
438
+
439
+ #: classes/class.swpm-form.php:37
440
+ msgid ""
441
+ "Wordpress account exists with given email. But given username doesn't match."
442
+ msgstr ""
443
+ "Es existiert bereits ein WP Account mit der angegebenen E-Mail Adresse. Der "
444
+ "Benutzername passt aber nicht zur E-Mail Adresse."
445
+
446
+ #: classes/class.swpm-form.php:38
447
+ msgid ""
448
+ " Use a different email address to complete the registration. If you want to "
449
+ "use that email then you must enter the correct username associated with the "
450
+ "existing WP user to connect with that account."
451
+ msgstr ""
452
+ " Verwenden Sie eine andere E-Mail Adresse um Ihre Registrierung "
453
+ "abzuschließen. Wenn Sie diese E-Mail Adresse verwenden wollen, müssen Sie "
454
+ "den richtigen Benutzernamen des bestehenden WP Benutzereintrags eingeben, um "
455
+ "sich mit diesem Account zu verbinden."
456
+
457
+ #: classes/class.swpm-form.php:48
458
+ msgid "Username is required"
459
+ msgstr "Der Mitgliedername ist erforderlich"
460
+
461
+ #: classes/class.swpm-form.php:52
462
+ msgid "Username contains invalid character"
463
+ msgstr "Der Benutzername enthält ungültige Zeichen"
464
+
465
+ #: classes/class.swpm-form.php:60
466
+ msgid "Username already exists."
467
+ msgstr "Ihr Benutzername existiert bereits."
468
+
469
+ #: classes/class.swpm-form.php:83
470
+ msgid "Password is required"
471
+ msgstr "Passwort erforderlich"
472
+
473
+ #: classes/class.swpm-form.php:90
474
+ msgid "Password mismatch"
475
+ msgstr "Die Passwörter stimmen nicht überein"
476
+
477
+ #: classes/class.swpm-form.php:101
478
+ msgid "Email is required"
479
+ msgstr "E-Mail Adresse wird benötigt"
480
+
481
+ #: classes/class.swpm-form.php:105
482
+ msgid "Email is invalid"
483
+ msgstr "E-Mail Adresse ist ungültig"
484
+
485
+ #: classes/class.swpm-form.php:121
486
+ msgid "Email is already used."
487
+ msgstr "Ihre E-Mail Adresse existiert bereits."
488
+
489
+ #: classes/class.swpm-form.php:179
490
+ msgid "Member since field is invalid"
491
+ msgstr "\"Mitglied seit\" Feld ist inkorrekt"
492
+
493
+ #: classes/class.swpm-form.php:190
494
+ msgid "Access starts field is invalid"
495
+ msgstr "Ungültiger Wert für den Beginn des Zugangs"
496
+
497
+ #: classes/class.swpm-form.php:200
498
+ msgid "Gender field is invalid"
499
+ msgstr "Feld \"Geschlecht\" ist inkorrekt"
500
+
501
+ #: classes/class.swpm-form.php:211
502
+ msgid "Account state field is invalid"
503
+ msgstr "Kontostatusfeld ist ungültig"
504
+
505
+ #: classes/class.swpm-form.php:218
506
+ msgid "Invalid membership level"
507
+ msgstr "Ungültige Mitgliedschaftsstufe"
508
+
509
+ #: classes/class.swpm-front-registration.php:33
510
+ msgid ""
511
+ "Error! Invalid Request. Could not find a match for the given security code "
512
+ "and the user ID."
513
+ msgstr ""
514
+ "Fehler! Ungültige Anfrage. Konnte keine Übereinstimmung für den angegebenen "
515
+ "Sicherheitscode und die Benutzer-ID finden."
516
+
517
+ #: classes/class.swpm-front-registration.php:45
518
+ #: classes/class.swpm-utils-misc.php:274 views/login.php:36
519
+ msgid "Join Us"
520
+ msgstr "Registrieren Sie sich hier, wenn Sie noch kein Mitglied sind"
521
+
522
+ #: classes/class.swpm-front-registration.php:47
523
+ msgid ""
524
+ "Free membership is disabled on this site. Please make a payment from the "
525
+ msgstr ""
526
+ "Die Kostenlose Mitgliedschaft ist auf dieser Seite deaktiviert. Bitte "
527
+ "erstellen Sie eine Zahlung für "
528
+
529
+ #: classes/class.swpm-front-registration.php:49
530
+ msgid " page to pay for a premium membership."
531
+ msgstr " Seite, um für eine Premium-Mitgliedschaft zu bezahlen."
532
+
533
+ #: classes/class.swpm-front-registration.php:51
534
+ msgid ""
535
+ "You will receive a unique link via email after the payment. You will be able "
536
+ "to use that link to complete the premium membership registration."
537
+ msgstr ""
538
+ "Sie werden einen persönlichen Link per E-Mail nach Beendigung des "
539
+ "Zahlungsvorgangs erhalten. Mit diesem Link können Sie die Registrierung "
540
+ "Ihrer Premium Mitgliedschaft abschließen."
541
+
542
+ #: classes/class.swpm-front-registration.php:79
543
+ msgid "Security check: captcha validation failed."
544
+ msgstr "Sicherheitskontrolle: Captcha-Validierung fehlgeschlagen."
545
+
546
+ #: classes/class.swpm-front-registration.php:89
547
+ msgid "You must accept the terms and conditions."
548
+ msgstr "Sie müssen die allgemeinen Geschäftsbedingungen akzeptieren."
549
+
550
+ #: classes/class.swpm-front-registration.php:100
551
+ msgid "You must agree to the privacy policy."
552
+ msgstr "Sie müssen der Datenschutzerklärung zustimmen."
553
+
554
+ #: classes/class.swpm-front-registration.php:140
555
+ msgid ""
556
+ "You need to confirm your email address. Please check your email and follow "
557
+ "instructions to complete your registration."
558
+ msgstr ""
559
+ "<p><strong>Sie müssen Ihre Email Adresse bestätigen. Bitte sehen Sie in "
560
+ "Ihren Email Posteingang und folgen Sie den Anweisungen in der Ihnen "
561
+ "zugesandten Email, um die Anmeldung abzuschließen.</strong></p>"
562
+
563
+ #: classes/class.swpm-front-registration.php:145
564
+ msgid "Registration Successful. "
565
+ msgstr "Registrierung erfolgreich. "
566
+
567
+ #: classes/class.swpm-front-registration.php:145
568
+ #: classes/class.swpm-utils-misc.php:273 classes/class.swpm-utils-misc.php:285
569
+ msgid "Please"
570
+ msgstr "Bitte"
571
+
572
+ #: classes/class.swpm-front-registration.php:145
573
+ #: classes/class.swpm-utils-misc.php:273 views/login.php:30
574
+ msgid "Login"
575
+ msgstr "Einloggen"
576
+
577
+ #: classes/class.swpm-front-registration.php:159
578
+ msgid "Please correct the following"
579
+ msgstr "Bitte korrigieren Sie folgendes"
580
+
581
+ #: classes/class.swpm-front-registration.php:207
582
+ msgid "Membership Level Couldn't be found."
583
+ msgstr "Mitgliedschaftsstufe konnte nicht gefunden werden."
584
+
585
+ #: classes/class.swpm-front-registration.php:258
586
+ msgid "Error! Nonce verification failed for front end profile edit."
587
+ msgstr ""
588
+ "Fehler! Nonce-Überprüfung für Front-End Profil-Bearbeitung fehlgeschlagen."
589
+
590
+ #: classes/class.swpm-front-registration.php:266
591
+ msgid "Profile updated successfully."
592
+ msgstr "Profil erfolgreich aktualisiert."
593
+
594
+ #: classes/class.swpm-front-registration.php:275
595
+ msgid ""
596
+ "Profile updated successfully. You will need to re-login since you changed "
597
+ "your password."
598
+ msgstr ""
599
+ "Profil erfolgreich aktualisiert. Sie müssen sich erneut anmelden, da Sie Ihr "
600
+ "Passwort geändert haben."
601
+
602
+ #: classes/class.swpm-front-registration.php:289
603
+ msgid "Please correct the following."
604
+ msgstr "Bitte korrigieren Sie folgendes."
605
+
606
+ #: classes/class.swpm-front-registration.php:301
607
+ msgid "Captcha validation failed."
608
+ msgstr "Captcha-Validierung fehlgeschlagen."
609
+
610
+ #: classes/class.swpm-front-registration.php:309
611
+ msgid "Email address not valid."
612
+ msgstr "Ungültige E-Mail Adresse."
613
+
614
+ #: classes/class.swpm-front-registration.php:320
615
+ msgid "No user found with that email address."
616
+ msgstr "Kein Benutzer mit dieser E-Mail-Adresse gefunden."
617
+
618
+ #: classes/class.swpm-front-registration.php:321
619
+ #: classes/class.swpm-front-registration.php:350
620
+ msgid "Email Address: "
621
+ msgstr "E-Mail Adresse: "
622
+
623
+ #: classes/class.swpm-front-registration.php:349
624
+ msgid "New password has been sent to your email address."
625
+ msgstr "Es wurde ein neues Passwort an Ihre E-Mail-Adresse gesendet."
626
+
627
+ #: classes/class.swpm-front-registration.php:371
628
+ msgid "Can't find member account."
629
+ msgstr "Kann kein Mitgliedskonto finden."
630
+
631
+ #: classes/class.swpm-front-registration.php:376
632
+ #: classes/class.swpm-front-registration.php:426
633
+ msgid "Account already active. "
634
+ msgstr "Ihr Konto ist schon aktiv. "
635
+
636
+ #: classes/class.swpm-front-registration.php:376
637
+ #: classes/class.swpm-front-registration.php:426
638
+ msgid " to login."
639
+ msgstr " um einzuloggen."
640
+
641
+ #: classes/class.swpm-front-registration.php:383
642
+ msgid ""
643
+ "Activation code mismatch. Cannot activate this account. Please contact the "
644
+ "site admin."
645
+ msgstr ""
646
+ "Problem mit dem Aktivierungs-Code. Das Konto kann nicht aktiviert werden. "
647
+ "Bitte kontaktieren Sie den Admin."
648
+
649
+ #: classes/class.swpm-front-registration.php:397
650
+ msgid "Success! Your account has been activated successfully."
651
+ msgstr "Erfolg! Ihr Konto ist erfolgreich aktiviert."
652
+
653
+ #: classes/class.swpm-front-registration.php:421
654
+ msgid "Cannot find member account."
655
+ msgstr "Kann kein Mitgliedskonto finden."
656
+
657
+ #: classes/class.swpm-front-registration.php:443
658
+ msgid ""
659
+ "Activation email has been sent. Please check your email and activate your "
660
+ "account."
661
+ msgstr ""
662
+ "Aktivierungs-Email gesendet. Bitte checken Sie Ihre Emails und aktivieren "
663
+ "Sie das Konto."
664
+
665
+ #: classes/class.swpm-init-time-tasks.php:118
666
+ msgid "Sorry, Nonce verification failed."
667
+ msgstr "Entschuldigung, Nonce-Überprüfung fehlgeschlagen."
668
+
669
+ #: classes/class.swpm-init-time-tasks.php:125
670
+ msgid "Sorry, Password didn't match."
671
+ msgstr "Passwort stimmt leider nicht überein."
672
+
673
+ #: classes/class.swpm-level-form.php:50
674
+ msgid "Date format is not valid."
675
+ msgstr "Datumsformat ist nicht gültig."
676
+
677
+ #: classes/class.swpm-level-form.php:58
678
+ msgid "Access duration must be > 0."
679
+ msgstr "Zugriffsdauer muss >0 sein."
680
+
681
+ #: classes/class.swpm-members.php:10
682
+ msgid "Member"
683
+ msgstr "Mitglied"
684
+
685
+ #: classes/class.swpm-members.php:19
686
+ #: classes/class.swpm-membership-levels.php:20
687
+ msgid "ID"
688
+ msgstr "ID"
689
+
690
+ #: classes/class.swpm-members.php:20 views/add.php:16 views/admin_add.php:11
691
+ #: views/admin_edit.php:19 views/edit.php:23
692
+ #: includes/swpm_mda_show_profile.php:27
693
+ msgid "Username"
694
+ msgstr "Benutzername"
695
+
696
+ #: classes/class.swpm-members.php:21
697
+ #: classes/admin-includes/class.swpm-payments-list-table.php:78
698
+ #: views/add.php:32 views/admin_member_form_common_part.php:15
699
+ #: views/edit.php:39 includes/swpm_mda_show_profile.php:28
700
+ msgid "First Name"
701
+ msgstr "Vorname"
702
+
703
+ #: classes/class.swpm-members.php:22
704
+ #: classes/admin-includes/class.swpm-payments-list-table.php:79
705
+ #: views/add.php:36 views/admin_member_form_common_part.php:19
706
+ #: views/edit.php:43 includes/swpm_mda_show_profile.php:29
707
+ msgid "Last Name"
708
+ msgstr "Nachname"
709
+
710
+ #: classes/class.swpm-members.php:23 views/add.php:20 views/edit.php:27
711
+ #: includes/swpm_mda_show_profile.php:35
712
+ msgid "Email"
713
+ msgstr "E-Mail"
714
+
715
+ #: classes/class.swpm-members.php:25 views/admin_member_form_common_part.php:11
716
+ msgid "Access Starts"
717
+ msgstr "Beginn der Zugriffsmöglichkeit"
718
+
719
+ #: classes/class.swpm-members.php:26 includes/swpm_mda_show_profile.php:31
720
+ msgid "Account State"
721
+ msgstr "Kontostatus"
722
+
723
+ #: classes/class.swpm-members.php:27
724
+ msgid "Last Login Date"
725
+ msgstr "Datum des letzten Log-In"
726
+
727
+ #: classes/class.swpm-members.php:46
728
+ #: classes/class.swpm-membership-levels.php:36
729
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:94
730
+ #: classes/admin-includes/class.swpm-payments-list-table.php:102
731
+ msgid "Delete"
732
+ msgstr "Löschen"
733
+
734
+ #: classes/class.swpm-members.php:47
735
+ msgid "Set Status to Active"
736
+ msgstr "Setzen Sie den Status auf Aktiv"
737
+
738
+ #: classes/class.swpm-members.php:48
739
+ msgid "Set Status to Active and Notify"
740
+ msgstr "Setzen Sie den Status auf Aktiv und Benachrichtigen"
741
+
742
+ #: classes/class.swpm-members.php:49
743
+ msgid "Set Status to Inactive"
744
+ msgstr "Setzen Sie den Status auf Inaktiv"
745
+
746
+ #: classes/class.swpm-members.php:50
747
+ msgid "Set Status to Pending"
748
+ msgstr "Setzen Sie den Status auf Ausstehend"
749
+
750
+ #: classes/class.swpm-members.php:51
751
+ msgid "Set Status to Expired"
752
+ msgstr "Setzen Sie den Status auf abgelaufen"
753
+
754
+ #: classes/class.swpm-members.php:72
755
+ msgid "incomplete"
756
+ msgstr "unvollständig"
757
+
758
+ #: classes/class.swpm-members.php:191
759
+ msgid "No member found."
760
+ msgstr "Kein Mitglied gefunden."
761
+
762
+ #: classes/class.swpm-members.php:337
763
+ msgid "Error! Nonce verification failed for user delete from admin end."
764
+ msgstr ""
765
+ "Fehler! Nonce-Überprüfung für Löschung eines Benutzers durch den Admin "
766
+ "fehlgeschlagen."
767
+
768
+ #: classes/class.swpm-members.php:406 classes/class.swpm-members.php:436
769
+ msgid "Error! Please select a membership level first."
770
+ msgstr "Fehler! Bitte wählen Sie zuerst eine Mitgliedsstufe aus."
771
+
772
+ #: classes/class.swpm-members.php:423
773
+ msgid "Membership level change operation completed successfully."
774
+ msgstr "Änderung der Mitgliedschaftsstufe wurde erfolgreich abgeschlossen."
775
+
776
+ #: classes/class.swpm-members.php:453
777
+ msgid "Access starts date change operation successfully completed."
778
+ msgstr "Datumsänderung erfolgreich abgeschlossen."
779
+
780
+ #: classes/class.swpm-members.php:462
781
+ msgid "Bulk Update Membership Level of Members"
782
+ msgstr "Massen-Änderung der Mitgliedschaftsstufe der Mitglieder"
783
+
784
+ #: classes/class.swpm-members.php:465
785
+ msgid ""
786
+ "You can manually change the membership level of any member by editing the "
787
+ "record from the members menu. "
788
+ msgstr ""
789
+ "Sie können die Mitgliedschaftsstufe eines beliebigen Mitglieds manuell "
790
+ "ändern, indem Sie den Datensatz aus dem Mitgliedermenü bearbeiten. "
791
+
792
+ #: classes/class.swpm-members.php:466
793
+ msgid ""
794
+ "You can use the following option to bulk update the membership level of "
795
+ "users who belong to the level you select below."
796
+ msgstr ""
797
+ "Sie können die folgende Option verwenden, um die Mitgliedschaftsstufe aller "
798
+ "Benutzer gesammelt zu aktualisieren, die zu der Ebene gehören, die Sie unten "
799
+ "auswählen."
800
+
801
+ #: classes/class.swpm-members.php:472 classes/class.swpm-members.php:520
802
+ msgid "Membership Level: "
803
+ msgstr "Mitgliedschaftsstufe: "
804
+
805
+ #: classes/class.swpm-members.php:476
806
+ msgid "Select Current Level"
807
+ msgstr "Wählen Sie die aktuelle Stufe aus"
808
+
809
+ #: classes/class.swpm-members.php:479
810
+ msgid ""
811
+ "Select the current membership level (the membership level of all members who "
812
+ "are in this level will be updated)."
813
+ msgstr ""
814
+ "Wählen Sie die aktuelle Mitgliedschaftsstufe aus (die Mitgliedschaftsstufe "
815
+ "aller Mitglieder, die sich in dieser Ebene befinden, wird aktualisiert)."
816
+
817
+ #: classes/class.swpm-members.php:485
818
+ msgid "Level to Change to: "
819
+ msgstr "Mitgliedschaft ändern in: "
820
+
821
+ #: classes/class.swpm-members.php:489
822
+ msgid "Select Target Level"
823
+ msgstr "Ziel Ebene auswählen"
824
+
825
+ #: classes/class.swpm-members.php:492
826
+ msgid "Select the new membership level."
827
+ msgstr "Wählen Sie die neue Mitgliedschaftsstufe aus."
828
+
829
+ #: classes/class.swpm-members.php:498
830
+ msgid "Bulk Change Membership Level"
831
+ msgstr "Massen-Änderung der Mitgliedschaftsstufe"
832
+
833
+ #: classes/class.swpm-members.php:508
834
+ msgid "Bulk Update Access Starts Date of Members"
835
+ msgstr "Massen-Änderung des Datums, ab dem die Mitgliedschaft beginnt"
836
+
837
+ #: classes/class.swpm-members.php:512
838
+ msgid ""
839
+ "The access starts date of a member is set to the day the user registers. "
840
+ "This date value is used to calculate how long the member can access your "
841
+ "content that are protected with a duration type protection in the membership "
842
+ "level. "
843
+ msgstr ""
844
+ "Der Zugriff eines Mitglieds startet am Tag, an dem sich der Benutzer "
845
+ "registriert hat. Dieser Datumswert wird verwendet, um zu berechnen, wie "
846
+ "lange das Mitglied auf Ihre Inhalte zugreifen kann. "
847
+
848
+ #: classes/class.swpm-members.php:513
849
+ msgid ""
850
+ "You can manually set a specific access starts date value of all members who "
851
+ "belong to a particular level using the following option."
852
+ msgstr ""
853
+ "Sie können mit der folgenden Option manuell ein bestimmtes Start-Datum "
854
+ "festlegen, für alle Mitglieder, die zu einer bestimmten "
855
+ "Mitgliedschaftsstufe gehören."
856
+
857
+ #: classes/class.swpm-members.php:523
858
+ msgid "Select Level"
859
+ msgstr "Stufe auswählen"
860
+
861
+ #: classes/class.swpm-members.php:526
862
+ msgid ""
863
+ "Select the Membership level (the access start date of all members who are in "
864
+ "this level will be updated)."
865
+ msgstr ""
866
+ "Wählen Sie die Mitgliedschaftsstufe aus (das Zugangsstartdatum aller "
867
+ "Mitglieder, die sich auf dieser Ebene befinden, wird aktualisiert)."
868
+
869
+ #: classes/class.swpm-members.php:535
870
+ msgid "Specify the access starts date value."
871
+ msgstr "Geben Sie das Datum ein, ab dem der Zugriff möglich ist."
872
+
873
+ #: classes/class.swpm-members.php:541
874
+ msgid "Bulk Change Access Starts Date"
875
+ msgstr "Massen-Änderung des Datums, ab dem der Zugriff möglich ist"
876
+
877
+ #: classes/class.swpm-members.php:576
878
+ msgid "Simple WP Membership::Members"
879
+ msgstr "Simple WP Membership::Mitglieder"
880
+
881
+ #: classes/class.swpm-members.php:577
882
+ #: classes/class.swpm-membership-levels.php:226 views/admin_members_list.php:44
883
+ msgid "Add New"
884
+ msgstr "Neu hinzufügen"
885
+
886
+ #: classes/class.swpm-members.php:582 views/admin_add.php:6
887
+ msgid "Add Member"
888
+ msgstr "Neues Mitglied hinzufügen"
889
+
890
+ #: classes/class.swpm-members.php:583
891
+ msgid "Bulk Operation"
892
+ msgstr "Massen-Änderung"
893
+
894
+ #: classes/class.swpm-membership-level.php:52
895
+ msgid ""
896
+ "Error! Nonce verification failed for membership level creation from admin "
897
+ "end."
898
+ msgstr ""
899
+ "Fehler! Nonce-Überprüfung für die Erstellung von Mitgliedschaft-Stufen durch "
900
+ "den Admin fehlgeschlagen."
901
+
902
+ #: classes/class.swpm-membership-level.php:68
903
+ msgid "Membership Level Creation Successful."
904
+ msgstr "Mitgliedschaftstufe erfolgreich erstellt.."
905
+
906
+ #: classes/class.swpm-membership-level.php:84
907
+ msgid ""
908
+ "Error! Nonce verification failed for membership level edit from admin end."
909
+ msgstr ""
910
+ "Fehler! Nonce-Überprüfung für Bearbeiten der Mitgliedschafts-Stufe durch den "
911
+ "Admin fehlgeschlagen ."
912
+
913
+ #: classes/class.swpm-membership-level.php:100
914
+ msgid "Membership Level Updated Successfully."
915
+ msgstr "Mitgliedschaftstufe wurde erfolgreich aktualisiert."
916
+
917
+ #: classes/class.swpm-membership-levels.php:22
918
+ msgid "Role"
919
+ msgstr "Rolle"
920
+
921
+ #: classes/class.swpm-membership-levels.php:23
922
+ msgid "Access Valid For/Until"
923
+ msgstr "Zugang gültig für/bis"
924
+
925
+ #: classes/class.swpm-membership-levels.php:133
926
+ msgid "No membership levels found."
927
+ msgstr "Keine Mitgliedschaftsstufen gefunden."
928
+
929
+ #: classes/class.swpm-membership-levels.php:197
930
+ msgid ""
931
+ "Error! Nonce verification failed for membership level delete from admin end."
932
+ msgstr ""
933
+ "Fehler! Nonce-Überprüfung für das Löschen der Mitgliedschaftsstufe durch den "
934
+ "Admin fehlgeschlagen."
935
+
936
+ #: classes/class.swpm-membership-levels.php:216 views/admin_members_list.php:31
937
+ #: views/payments/admin_all_payment_transactions.php:16 views/template-1.php:53
938
+ #: views/template-2.php:54
939
+ msgid "Search"
940
+ msgstr "Suchen"
941
+
942
+ #: classes/class.swpm-membership-levels.php:261
943
+ msgid "Simple WP Membership::Membership Levels"
944
+ msgstr "Simple WP Membership::Mitgliedschaftsstufen"
945
+
946
+ #: classes/class.swpm-membership-levels.php:266
947
+ msgid "Add Level"
948
+ msgstr "Neue Mitgliedschaftsstufe hinzufügen"
949
+
950
+ #: classes/class.swpm-membership-levels.php:267
951
+ msgid "Manage Content Protection"
952
+ msgstr "Schutz der Inhalte verwalten"
953
+
954
+ #: classes/class.swpm-membership-levels.php:268
955
+ msgid "Category Protection"
956
+ msgstr "Kategorie Schutz"
957
+
958
+ #: classes/class.swpm-membership-levels.php:269
959
+ msgid "Post and Page Protection"
960
+ msgstr "Schutz von Beiträgen und Seiten"
961
+
962
+ #: classes/class.swpm-post-list.php:43 classes/class.swpm-post-list.php:52
963
+ #: classes/class.swpm-post-list.php:62
964
+ #: classes/admin-includes/class.swpm-payments-list-table.php:81
965
+ msgid "Date"
966
+ msgstr "Datum"
967
+
968
+ #: classes/class.swpm-post-list.php:44 classes/class.swpm-post-list.php:53
969
+ #: classes/class.swpm-post-list.php:63
970
+ msgid "Title"
971
+ msgstr "Titel"
972
+
973
+ #: classes/class.swpm-post-list.php:45 classes/class.swpm-post-list.php:54
974
+ #: classes/class.swpm-post-list.php:64
975
+ msgid "Author"
976
+ msgstr "Autor"
977
+
978
+ #: classes/class.swpm-post-list.php:46 classes/class.swpm-post-list.php:56
979
+ #: classes/class.swpm-post-list.php:66
980
+ msgid "Status"
981
+ msgstr "Status"
982
+
983
+ #: classes/class.swpm-post-list.php:55
984
+ msgid "Categories"
985
+ msgstr "Kategorien"
986
+
987
+ #: classes/class.swpm-post-list.php:65
988
+ msgid "Type"
989
+ msgstr "Typ"
990
+
991
+ #: classes/class.swpm-post-list.php:125
992
+ msgid "Protection settings updated!"
993
+ msgstr "Schutz-Einstellungen aktualisiert!"
994
+
995
+ #: classes/class.swpm-post-list.php:230
996
+ msgid "No items found."
997
+ msgstr "Keine Einträge gefunden."
998
+
999
+ #: classes/class.swpm-protection.php:22
1000
+ msgid ""
1001
+ "The category or parent category of this post is protected. You can change "
1002
+ "the category protection settings from the "
1003
+ msgstr ""
1004
+ "Die Kategorie oder Eltern-Kategorie diese Beitrags ist geschützt. Sie können "
1005
+ "den Schutz der Kategorie ändern von "
1006
+
1007
+ #: classes/class.swpm-protection.php:23
1008
+ msgid "category protection menu"
1009
+ msgstr "Menue des Kategorie Schutzes"
1010
+
1011
+ #: classes/class.swpm-settings.php:26 classes/class.swpm-settings.php:54
1012
+ msgid "General Settings"
1013
+ msgstr "Allgemeine Einstellungen"
1014
+
1015
+ #: classes/class.swpm-settings.php:27
1016
+ msgid "Payment Settings"
1017
+ msgstr "Einstellungen für Zahlungsvorgänge"
1018
+
1019
+ #: classes/class.swpm-settings.php:28
1020
+ msgid "Email Settings"
1021
+ msgstr "E-Mail Einstellungen"
1022
+
1023
+ #: classes/class.swpm-settings.php:29
1024
+ msgid "Tools"
1025
+ msgstr "Tools"
1026
+
1027
+ #: classes/class.swpm-settings.php:30 classes/class.swpm-settings.php:187
1028
+ msgid "Advanced Settings"
1029
+ msgstr "Erweiterte Einstellungen"
1030
+
1031
+ #: classes/class.swpm-settings.php:31
1032
+ msgid "Addons Settings"
1033
+ msgstr "Einstellungen für die Erweiterungen"
1034
+
1035
+ #: classes/class.swpm-settings.php:53
1036
+ msgid "Plugin Documentation"
1037
+ msgstr "Plugin-Dokumentation"
1038
+
1039
+ #: classes/class.swpm-settings.php:55
1040
+ msgid "Enable Free Membership"
1041
+ msgstr "Kostenlose Mitgliedschaft erlauben"
1042
+
1043
+ #: classes/class.swpm-settings.php:56
1044
+ msgid ""
1045
+ "Enable/disable registration for free membership level. When you enable this "
1046
+ "option, make sure to specify a free membership level ID in the field below."
1047
+ msgstr ""
1048
+ "Aktivierung/Deaktivierung der Registrierung für eine kostenlose "
1049
+ "Mitgliedschaft. Wenn Sie diese Option aktivieren, stellen Sie bitte sicher, "
1050
+ "dass Sie eine ID für eine kostenlose Mitgliedschaft angeben."
1051
+
1052
+ #: classes/class.swpm-settings.php:57
1053
+ msgid "Free Membership Level ID"
1054
+ msgstr "Kostenlose Mitgliedschaftsstufen-ID"
1055
+
1056
+ #: classes/class.swpm-settings.php:58
1057
+ msgid "Assign free membership level ID"
1058
+ msgstr "ID der kostenlosen Mitgliedschaftsstufe zuweisen"
1059
+
1060
+ #: classes/class.swpm-settings.php:59
1061
+ msgid "Enable More Tag Protection"
1062
+ msgstr "Aktiviere den \"Mehr\"-Tag Schutz"
1063
+
1064
+ #: classes/class.swpm-settings.php:60
1065
+ msgid ""
1066
+ "Enables or disables \"more\" tag protection in the posts and pages. Anything "
1067
+ "after the More tag is protected. Anything before the more tag is teaser "
1068
+ "content."
1069
+ msgstr ""
1070
+ "Aktiviert oder deaktiviert den \"mehr\" Tag Schutz in Beiträgen und Seiten. "
1071
+ "Der Inhalt nach dem \"mehr\" Tag ist geschützt. Inhalt vor diesem Tag ist "
1072
+ "\"Teaser\" Inhalt."
1073
+
1074
+ #: classes/class.swpm-settings.php:61
1075
+ msgid "Hide Adminbar"
1076
+ msgstr "Admin-Bar ausblenden"
1077
+
1078
+ #: classes/class.swpm-settings.php:62
1079
+ msgid ""
1080
+ "WordPress shows an admin toolbar to the logged in users of the site. Check "
1081
+ "this if you want to hide that admin toolbar in the frontend of your site."
1082
+ msgstr ""
1083
+ "Für eingeloggte User ist in WordPress die Admin Toolbar standardmäßig "
1084
+ "sichtbar. Setzen Sie ein Häkchen um die Admin Toolbar auszublenden."
1085
+
1086
+ #: classes/class.swpm-settings.php:63
1087
+ msgid "Show Adminbar to Admin"
1088
+ msgstr "Adminbar dem Admin anzeigen"
1089
+
1090
+ #: classes/class.swpm-settings.php:64
1091
+ msgid ""
1092
+ "Use this option if you want to show the admin toolbar to admin users only. "
1093
+ "The admin toolbar will be hidden for all other users."
1094
+ msgstr ""
1095
+ "Aktivieren Sie diese Option, wenn die Admin Toolbar nur für Admins sichtbar "
1096
+ "sein soll. Die Admin Toolbar ist für alle anderen Anwender nicht sichtbar."
1097
+
1098
+ #: classes/class.swpm-settings.php:65
1099
+ msgid "Disable Access to WP Dashboard"
1100
+ msgstr "Deaktivieren Sie den Zugriff auf das WP Dashboard"
1101
+
1102
+ #: classes/class.swpm-settings.php:66
1103
+ msgid ""
1104
+ "WordPress allows a standard wp user to be able to go to the wp-admin URL and "
1105
+ "access his profile from the wp dashbaord. Using this option will prevent any "
1106
+ "non admin users from going to the wp dashboard."
1107
+ msgstr ""
1108
+ "WordPress ermöglicht es einem Standard-WP-Benutzer, in die WP-Admin URL zu "
1109
+ "gelangen und auf sein Profil aus dem WP-Dashboard zuzugreifen. Mit dieser "
1110
+ "Option wird verhindert, dass Benutzer, die nicht Admins sind, auf das WP-"
1111
+ "Dashboard zugreifen können."
1112
+
1113
+ #: classes/class.swpm-settings.php:68 classes/class.swpm-settings.php:242
1114
+ msgid "Default Account Status"
1115
+ msgstr "Standardkonto Status"
1116
+
1117
+ #: classes/class.swpm-settings.php:71
1118
+ msgid ""
1119
+ "Select the default account status for newly registered users. If you want to "
1120
+ "manually approve the members then you can set the status to \"Pending\"."
1121
+ msgstr ""
1122
+ "Wählen Sie eine Voreinstellung für den Mitglieder-Status neu registrierter "
1123
+ "Mitglieder. Wenn Sie die Registrierung neuer Mitglieder manuell bestätigen "
1124
+ "möchten, setzen Sie den Status auf \"ausstehend\"."
1125
+
1126
+ #: classes/class.swpm-settings.php:73
1127
+ msgid "Members Must be Logged in to Comment"
1128
+ msgstr ""
1129
+ "Mitglieder müssen eingeloggt sein, um Kommentare hinterlassen zu können"
1130
+
1131
+ #: classes/class.swpm-settings.php:74
1132
+ msgid ""
1133
+ "Enable this option if you only want the members of the site to be able to "
1134
+ "post a comment."
1135
+ msgstr ""
1136
+ "Aktivieren Sie diese Option, wenn Sie nur Mitgliedern die Möglichkeit geben "
1137
+ "wollen, Kommentare zu hinterlassen."
1138
+
1139
+ #: classes/class.swpm-settings.php:83
1140
+ msgid "Pages Settings"
1141
+ msgstr "Seiteneinstellungen"
1142
+
1143
+ #: classes/class.swpm-settings.php:84
1144
+ msgid "Login Page URL"
1145
+ msgstr "URL der Login Seite"
1146
+
1147
+ #: classes/class.swpm-settings.php:86
1148
+ msgid "Registration Page URL"
1149
+ msgstr "Registrierungsseiten-URL"
1150
+
1151
+ #: classes/class.swpm-settings.php:88
1152
+ msgid "Join Us Page URL"
1153
+ msgstr "Jetzt Anmelden-URL"
1154
+
1155
+ #: classes/class.swpm-settings.php:90
1156
+ msgid "Edit Profile Page URL"
1157
+ msgstr "Profilseite URL bearbeiten"
1158
+
1159
+ #: classes/class.swpm-settings.php:92
1160
+ msgid "Password Reset Page URL"
1161
+ msgstr "Passwort zurücksetzten-URL"
1162
+
1163
+ #: classes/class.swpm-settings.php:95
1164
+ msgid "Test & Debug Settings"
1165
+ msgstr "Test & Debug-Einstellungen"
1166
+
1167
+ #: classes/class.swpm-settings.php:97
1168
+ msgid "Check this option to enable debug logging."
1169
+ msgstr ""
1170
+ "Aktivieren Sie diese Option, um die Debug-Protokollierung zu aktivieren."
1171
+
1172
+ #: classes/class.swpm-settings.php:98
1173
+ msgid ""
1174
+ " This can be useful when troubleshooting an issue. Turn it off and reset the "
1175
+ "log files after the troubleshooting is complete."
1176
+ msgstr ""
1177
+ " Dies kann hilfreich sein um einen Fehler zu lokalisieren. Schalten Sie es "
1178
+ "aus und setzen Sie die Log Dateien zurück, wenn Sie die Fehlersuche "
1179
+ "abgeschlossen haben."
1180
+
1181
+ #: classes/class.swpm-settings.php:100
1182
+ msgid "View general debug log file by clicking "
1183
+ msgstr "Allgemeine Debug Log Datei ansehen "
1184
+
1185
+ #: classes/class.swpm-settings.php:100 classes/class.swpm-settings.php:101
1186
+ #: classes/class.swpm-settings.php:102
1187
+ msgid "here"
1188
+ msgstr "hier"
1189
+
1190
+ #: classes/class.swpm-settings.php:101
1191
+ msgid "View login related debug log file by clicking "
1192
+ msgstr "Login Debug Log Datei ansehen "
1193
+
1194
+ #: classes/class.swpm-settings.php:102
1195
+ msgid "Reset debug log files by clicking "
1196
+ msgstr "Zurücksetzen der Debug Log Dateien "
1197
+
1198
+ #: classes/class.swpm-settings.php:103
1199
+ msgid "Enable Debug"
1200
+ msgstr "Debug aktivieren"
1201
+
1202
+ #: classes/class.swpm-settings.php:105
1203
+ msgid "Enable Sandbox Testing"
1204
+ msgstr "Sandbox-Test aktivieren"
1205
+
1206
+ #: classes/class.swpm-settings.php:106
1207
+ msgid "Enable this option if you want to do sandbox payment testing."
1208
+ msgstr ""
1209
+ "Aktivieren Sie die Testumgebung, um diese Option um die Bezahlmethode zu "
1210
+ "testen."
1211
+
1212
+ #: classes/class.swpm-settings.php:119
1213
+ msgid "Email Settings Overview"
1214
+ msgstr "E-Mail Einstellungen"
1215
+
1216
+ #: classes/class.swpm-settings.php:120
1217
+ msgid "Email Misc. Settings"
1218
+ msgstr "E-Mail Einstellungen"
1219
+
1220
+ #: classes/class.swpm-settings.php:122
1221
+ msgid "From Email Address"
1222
+ msgstr "Von E-Mail-Adresse"
1223
+
1224
+ #: classes/class.swpm-settings.php:126
1225
+ msgid "Email Settings (Prompt to Complete Registration )"
1226
+ msgstr "E-Mail-Einstellungen (Eingabeaufforderung zur Anmeldung)"
1227
+
1228
+ #: classes/class.swpm-settings.php:127 classes/class.swpm-settings.php:140
1229
+ #: classes/class.swpm-settings.php:158 classes/class.swpm-settings.php:163
1230
+ #: classes/class.swpm-settings.php:168 classes/class.swpm-settings.php:173
1231
+ msgid "Email Subject"
1232
+ msgstr "E-Mail Betreff"
1233
+
1234
+ #: classes/class.swpm-settings.php:129 classes/class.swpm-settings.php:142
1235
+ #: classes/class.swpm-settings.php:159 classes/class.swpm-settings.php:164
1236
+ #: classes/class.swpm-settings.php:169 classes/class.swpm-settings.php:174
1237
+ msgid "Email Body"
1238
+ msgstr "E-Mail Text"
1239
+
1240
+ #: classes/class.swpm-settings.php:133
1241
+ msgid ""
1242
+ "Enter the email address where you want the admin notification email to be "
1243
+ "sent to."
1244
+ msgstr ""
1245
+ "Geben Sie hier die Email Adresse ein, zu der die Benachrichtigung an den "
1246
+ "Admin gesendet werden soll."
1247
+
1248
+ #: classes/class.swpm-settings.php:134
1249
+ msgid ""
1250
+ " You can put multiple email addresses separated by comma (,) in the above "
1251
+ "field to send the notification to multiple email addresses."
1252
+ msgstr ""
1253
+ " Sie können mehrere Email Adressen eingeben, an die die Benachrichtigungen "
1254
+ "gesendet werden sollen. Die Email Adressen müssen durch Komma (,) getrennt "
1255
+ "werden."
1256
+
1257
+ #: classes/class.swpm-settings.php:136
1258
+ msgid "Enter the subject for the admin notification email."
1259
+ msgstr "Geben Sie den Betreff für die Admin-Benachrichtigungs-E-Mail ein."
1260
+
1261
+ #: classes/class.swpm-settings.php:137
1262
+ msgid ""
1263
+ "This email will be sent to the admin when a new user completes the "
1264
+ "membership registration. Only works if you have enabled the \"Send "
1265
+ "Notification to Admin\" option above."
1266
+ msgstr ""
1267
+ "Diese Email wird an den Admin gesendet, wenn ein neues Mitglied die "
1268
+ "Registrierung abgeschlossen hat. Der Email Versand erfolgt nur, wenn Sie die "
1269
+ "Option \"Den Admin benachrichtigen\" aktiviert haben."
1270
+
1271
+ #: classes/class.swpm-settings.php:139
1272
+ msgid "Email Settings (Registration Complete)"
1273
+ msgstr "E-Mail-Einstellungen (Anmeldung abgeschlossen)"
1274
+
1275
+ #: classes/class.swpm-settings.php:144
1276
+ msgid "Send Notification to Admin"
1277
+ msgstr "Benachrichtigung an Admin senden"
1278
+
1279
+ #: classes/class.swpm-settings.php:145
1280
+ msgid ""
1281
+ "Enable this option if you want the admin to receive a notification when a "
1282
+ "member registers."
1283
+ msgstr ""
1284
+ "Aktivieren Sie diese Option, wenn der Admin benachrichtigt werden soll, wenn "
1285
+ "sich ein neues Mitglied registriert hat."
1286
+
1287
+ #: classes/class.swpm-settings.php:146
1288
+ msgid "Admin Email Address"
1289
+ msgstr "Email Adresse des Admin"
1290
+
1291
+ #: classes/class.swpm-settings.php:148
1292
+ msgid "Admin Notification Email Subject"
1293
+ msgstr "Betreff-Zeile der Admin Benachrichtigung"
1294
+
1295
+ #: classes/class.swpm-settings.php:150
1296
+ msgid "Admin Notification Email Body"
1297
+ msgstr "E-Mail Text der Admin Benachrichtigung"
1298
+
1299
+ #: classes/class.swpm-settings.php:153
1300
+ msgid "Send Email to Member When Added via Admin Dashboard"
1301
+ msgstr ""
1302
+ "Mitglied mit E-Mail benachrichtigen wenn er vom Administrator hinzugefügt "
1303
+ "wird"
1304
+
1305
+ #: classes/class.swpm-settings.php:157
1306
+ msgid "Email Settings (Password Reset)"
1307
+ msgstr "E-Mail-Einstellungen (Passwort zurücksetzen)"
1308
+
1309
+ #: classes/class.swpm-settings.php:162
1310
+ msgid " Email Settings (Account Upgrade Notification)"
1311
+ msgstr " E-Mail-Einstellungen (Kontoaktualisierungsbenachrichtigung)"
1312
+
1313
+ #: classes/class.swpm-settings.php:167
1314
+ msgid " Email Settings (Bulk Account Activate Notification)"
1315
+ msgstr " E-Mail-Einstellungen (Account Benachrichtigung aktivieren)"
1316
+
1317
+ #: classes/class.swpm-settings.php:172
1318
+ msgid " Email Settings (Email Activation)"
1319
+ msgstr " E-Mail-Einstellungen (Email Aktivierung)"
1320
+
1321
+ #: classes/class.swpm-settings.php:189
1322
+ msgid "Enable Expired Account Login"
1323
+ msgstr "Aktivieren Sie das \"abgelaufene Konto\" Login"
1324
+
1325
+ #: classes/class.swpm-settings.php:190
1326
+ msgid ""
1327
+ "When enabled, expired members will be able to log into the system but won't "
1328
+ "be able to view any protected content. This allows them to easily renew "
1329
+ "their account by making another payment."
1330
+ msgstr ""
1331
+ "Wenn aktiviert, können Mitglieder mit abgelaufener Mitgliedschaft sich "
1332
+ "einloggen, können aber nicht auf geschützten Inhalte zugreifen. Dies es "
1333
+ "ermöglicht es ihnen, Ihre Mitgliedschaft durch Bezahlung zu reaktivieren."
1334
+
1335
+ #: classes/class.swpm-settings.php:192
1336
+ msgid "Membership Renewal URL"
1337
+ msgstr "URL zur Erneuerung der Mitgliedschaft"
1338
+
1339
+ #: classes/class.swpm-settings.php:193
1340
+ msgid ""
1341
+ "You can create a renewal page for your site. Read <a href=\"https://simple-"
1342
+ "membership-plugin.com/creating-membership-renewal-button/\" target=\"_blank"
1343
+ "\">this documentation</a> to learn how to create a renewal page."
1344
+ msgstr ""
1345
+ "Sie können eine Seite für die Erneuerung der Mitgliedschaft für Ihre Website "
1346
+ "einrichten. Lesen Sie dazu <a href=\"https://simple-membership-plugin.com/"
1347
+ "creating-membership-renewal-button/\" target=\"_blank\">diese Dokumentation</"
1348
+ "a> für Informationen, wie Sie eine Seite für die Erneuerung der "
1349
+ "Mitgliedschaft einrichten."
1350
+
1351
+ #: classes/class.swpm-settings.php:195
1352
+ msgid "After Registration Redirect URL"
1353
+ msgstr "URL, zu der nach der Registrierung weitergeleitet wird"
1354
+
1355
+ #: classes/class.swpm-settings.php:196
1356
+ msgid ""
1357
+ "You can enter an URL here to redirect the members to this page after they "
1358
+ "submit the registration form. Read <a href=\"https://simple-membership-"
1359
+ "plugin.com/configure-after-registration-redirect-for-members/\" target="
1360
+ "\"_blank\">this documentation</a> to learn how to setup after registration "
1361
+ "redirect."
1362
+ msgstr ""
1363
+ "Sie können hier eine URL eingeben, um die Mitglieder auf diese Seite "
1364
+ "weiterzuleiten, nachdem sie das Registrierungsformular abgeschickt haben. "
1365
+ "Lesen Sie dazu <a href=\"https://simple-membership-plugin.com/creating-"
1366
+ "membership-renewal-button/\" target=\"_blank\">diese Dokumentation</a> für "
1367
+ "Informationen, wie Sie die Weiterleitung nach der Registrierung einrichten."
1368
+
1369
+ #: classes/class.swpm-settings.php:198
1370
+ msgid "Enable Auto Login After Registration"
1371
+ msgstr "Autom. Login nach Registrierung erlauben"
1372
+
1373
+ #: classes/class.swpm-settings.php:199
1374
+ msgid ""
1375
+ "Use this option if you want the members to be automatically logged into your "
1376
+ "site right after they complete the registration. This option will override "
1377
+ "any after registration redirection and instead it will trigger the after "
1378
+ "login redirection. Read <a href=\"https://simple-membership-plugin.com/"
1379
+ "configure-auto-login-after-registration-members/\" target=\"_blank\">this "
1380
+ "documentation</a> to learn more."
1381
+ msgstr ""
1382
+ "Wenden Sie diese Möglichkeit an, wenn Sie möchten, dass die Mitglieder "
1383
+ "automatisch eingeloggt sind, wenn sie die Registrierung abgeschlossen haben. "
1384
+ "Lesen Sie dazu <a href=\"https://simple-membership-plugin.com/creating-"
1385
+ "membership-renewal-button/\" target=\"_blank\">diese Dokumentation</a> für "
1386
+ "weitere Informationen."
1387
+
1388
+ #: classes/class.swpm-settings.php:201
1389
+ msgid "After Logout Redirect URL"
1390
+ msgstr ""
1391
+ "URL, zu der nach dem Logout\n"
1392
+ " weitergeleitet wird"
1393
+
1394
+ #: classes/class.swpm-settings.php:202
1395
+ msgid ""
1396
+ "You can enter an URL here to redirect the members to this page after they "
1397
+ "click the logout link to logout from your site."
1398
+ msgstr ""
1399
+ "Sie können hier eine URL angeben, auf die Mitglieder geleitet werden, "
1400
+ "nachdem Sie den Logout Link zum Ausloggen angeklickt haben."
1401
+
1402
+ #: classes/class.swpm-settings.php:204
1403
+ msgid "Logout Member on Browser Close"
1404
+ msgstr "Mitglied ausloggen, wenn der Browser geschlossen wird"
1405
+
1406
+ #: classes/class.swpm-settings.php:205
1407
+ msgid ""
1408
+ "Enable this option if you want the member to be logged out of the account "
1409
+ "when he closes the browser."
1410
+ msgstr ""
1411
+ "Aktivieren Sie diese Option, wenn Sie möchten, dass das Mitglied aus dem "
1412
+ "Konto ausgeloggt wird, wenn es den Browser schließt."
1413
+
1414
+ #: classes/class.swpm-settings.php:207
1415
+ msgid "Allow Account Deletion"
1416
+ msgstr "Kontolöschung zulassen"
1417
+
1418
+ #: classes/class.swpm-settings.php:208
1419
+ msgid "Allow users to delete their accounts."
1420
+ msgstr "Benutzern erlauben, ihre Konten zu löschen."
1421
+
1422
+ #: classes/class.swpm-settings.php:210
1423
+ msgid "Force Strong Password for Members"
1424
+ msgstr "Ein starkes Passwort erzwingen"
1425
+
1426
+ #: classes/class.swpm-settings.php:211
1427
+ msgid ""
1428
+ "Enable this if you want the users to be forced to use a strong password for "
1429
+ "their accounts."
1430
+ msgstr ""
1431
+ "Aktivieren Sie diese Option, wenn Mitglieder nur starke Passworte nutzen "
1432
+ "dürfen."
1433
+
1434
+ #: classes/class.swpm-settings.php:213
1435
+ msgid "Use WordPress Timezone"
1436
+ msgstr "Die Wordpress Zeitzone benutzen"
1437
+
1438
+ #: classes/class.swpm-settings.php:214
1439
+ msgid ""
1440
+ "Use this option if you want to use the timezone value specified in your "
1441
+ "WordPress General Settings interface."
1442
+ msgstr ""
1443
+ "Verwenden Sie diese Option, wenn Sie den in Ihrer WordPress Einstellungen "
1444
+ "angegebenen Zeitzonenwert verwenden möchten."
1445
+
1446
+ #: classes/class.swpm-settings.php:216
1447
+ msgid "Auto Delete Pending Account"
1448
+ msgstr "Automatisches Löschen einer ausstehenden Mitgliedschaft"
1449
+
1450
+ #: classes/class.swpm-settings.php:219
1451
+ msgid "Select how long you want to keep \"pending\" account."
1452
+ msgstr ""
1453
+ "Wählen Sie aus, wie lange Sie ausstehende Benutzerkonten behalten möchten."
1454
+
1455
+ #: classes/class.swpm-settings.php:221
1456
+ msgid "Admin Dashboard Access Permission"
1457
+ msgstr "Admin-Dashboard Zugriffsberechtigung"
1458
+
1459
+ #: classes/class.swpm-settings.php:224
1460
+ msgid ""
1461
+ "SWPM admin dashboard is accessible to admin users only (just like any other "
1462
+ "plugin). You can allow users with other WP user role to access the SWPM "
1463
+ "admin dashboard by selecting a value here."
1464
+ msgstr ""
1465
+ "Auf das SWPM Dashboard können nur Admins zugreifen (wie bei jedem Plugin). "
1466
+ "Sie können anderen Benutzern mit anderen WP Rollen den Zugriff auf das SWPM "
1467
+ "Dashboard ermöglichen, wenn Sie hier den entsprechenden Wert wählen."
1468
+
1469
+ #: classes/class.swpm-settings.php:226
1470
+ msgid "Force WP User Synchronization"
1471
+ msgstr "Synchronisation mit den WP Benutzereinträgen erzwingen"
1472
+
1473
+ #: classes/class.swpm-settings.php:227
1474
+ msgid ""
1475
+ "Enable this option if you want to force the member login to be synchronized "
1476
+ "with WP user account. This can be useful if you are using another plugin "
1477
+ "that uses WP user records. For example: bbPress plugin."
1478
+ msgstr ""
1479
+ "Aktivieren Sie diese Option, wenn eingeloggte Mitglieder mit den WP User "
1480
+ "Einträgen synchronisiert werden sollen. Dies kann hilfreich sein, wenn Sie "
1481
+ "ein anderes Plugin installiert haben, das WP User Einträge verwendet. Bspw. "
1482
+ "das bbPress Plugin."
1483
+
1484
+ #: classes/class.swpm-settings.php:230
1485
+ msgid "Create Member Accounts for New WP Users"
1486
+ msgstr "Mitgliedschaften für neue Anwender einrichten"
1487
+
1488
+ #: classes/class.swpm-settings.php:232
1489
+ msgid "Enable Auto Create Member Accounts"
1490
+ msgstr "Automatische Erstellung einer Mitgliedschaft erlauben"
1491
+
1492
+ #: classes/class.swpm-settings.php:233
1493
+ msgid ""
1494
+ "Enable this option to automatically create member accounts for any new WP "
1495
+ "user that is created by another plugin."
1496
+ msgstr ""
1497
+ "Aktivieren Sie diese Option um Mitgliedschaften automatisch einrichten zu "
1498
+ "lassen, wenn ein WP User Datensatz durch ein anderes WP Plugin erstellt "
1499
+ "worden ist."
1500
+
1501
+ #: classes/class.swpm-settings.php:236
1502
+ msgid "Default Membership Level"
1503
+ msgstr "Voreingestellte Mitgliedschaftsstufe"
1504
+
1505
+ #: classes/class.swpm-settings.php:239
1506
+ msgid ""
1507
+ "When automatically creating a member account using this feature, the "
1508
+ "membership level of the user will be set to the one you specify here."
1509
+ msgstr ""
1510
+ "Wenn mit dieser Funktion eine Mitgliedschaft automatisch eingerichtet wird, "
1511
+ "wird die hier angegebene Mitgliedschaftsstufe gesetzt."
1512
+
1513
+ #: classes/class.swpm-settings.php:245
1514
+ msgid ""
1515
+ "When automatically creating a member account using this feature, the "
1516
+ "membership account status of the user will be set to the one you specify "
1517
+ "here."
1518
+ msgstr ""
1519
+ "Wenn mit dieser Funktion eine Mitgliedschaft automatisch eingerichtet wird, "
1520
+ "wird der hier angegebene Mitglieder-Status gesetzt."
1521
+
1522
+ #: classes/class.swpm-settings.php:247
1523
+ msgid "Payment Notification Forward URL"
1524
+ msgstr "URL an die die Zahlungsbenachrichtigung weitergeleitet werden soll"
1525
+
1526
+ #: classes/class.swpm-settings.php:248
1527
+ msgid ""
1528
+ "You can enter an URL here to forward the payment notification after the "
1529
+ "membership payment has been processed by this plugin. Useful if you want to "
1530
+ "forward the payment notification to an external script for further "
1531
+ "processing."
1532
+ msgstr ""
1533
+ "Sie können hier eine URL angeben, an die die Zahlungsbenachrichtigung "
1534
+ "weitergeleitet wird, nachdem die Zahlung durch dieses Plugin verarbeitet "
1535
+ "worden ist. Nützlich, wenn die die Zahlungsbenachrichtigung an ein externes "
1536
+ "Skript für eine Weiterverarbeitung weitergegebene werden soll."
1537
+
1538
+ #: classes/class.swpm-settings.php:251 views/add.php:65
1539
+ msgid "Terms and Conditions"
1540
+ msgstr "Allgemeine Geschäftbedingungen"
1541
+
1542
+ #: classes/class.swpm-settings.php:253
1543
+ msgid "Enable Terms and Conditions"
1544
+ msgstr "Allgemeine Geschäftsbedingungen aktivieren"
1545
+
1546
+ #: classes/class.swpm-settings.php:254
1547
+ msgid "Users must accept the terms before they can complete the registration."
1548
+ msgstr ""
1549
+ "Mitglieder müssen die allgemeinen Geschäftsbedingungen akzeptieren, um die "
1550
+ "Registrierung abzuschließen."
1551
+
1552
+ #: classes/class.swpm-settings.php:255
1553
+ msgid "Terms and Conditions Page URL"
1554
+ msgstr "URL der allgemeinen Geschäftsbedingungen"
1555
+
1556
+ #: classes/class.swpm-settings.php:256
1557
+ msgid ""
1558
+ "Enter the URL of your terms and conditions page. You can create a WordPress "
1559
+ "page and specify your terms in there then specify the URL of that page in "
1560
+ "the above field."
1561
+ msgstr "Geben Sie die URL Ihrer allgemeinen Geschäftsbedingungen ein."
1562
+
1563
+ #: classes/class.swpm-settings.php:257
1564
+ msgid "Enable Privacy Policy"
1565
+ msgstr "Datenschutzerklärung aktivieren"
1566
+
1567
+ #: classes/class.swpm-settings.php:258
1568
+ msgid "Users must accept it before they can complete the registration."
1569
+ msgstr ""
1570
+ "Mitglieder müssen die Datenschutzerklärung bestätigen, um die Registrierung "
1571
+ "abzuschließen."
1572
+
1573
+ #: classes/class.swpm-settings.php:259
1574
+ msgid "Privacy Policy Page URL"
1575
+ msgstr "URL der Datenschutzerklärung"
1576
+
1577
+ #: classes/class.swpm-settings.php:260
1578
+ msgid "Enter the URL of your privacy policy page."
1579
+ msgstr "Geben Sie die URL der Datenschutzerklärung an."
1580
+
1581
+ #: classes/class.swpm-settings.php:350 classes/class.swpm-settings.php:396
1582
+ #: classes/class.swpm-settings.php:425
1583
+ msgid "Settings updated!"
1584
+ msgstr "Einstellungen aktualisiert!"
1585
+
1586
+ #: classes/class.swpm-settings.php:355
1587
+ msgid "General Plugin Settings."
1588
+ msgstr "Allgemeine Plugin-Einstellungen."
1589
+
1590
+ #: classes/class.swpm-settings.php:359
1591
+ msgid "Page Setup and URL Related settings."
1592
+ msgstr "Seiten- und URL-spezifische Einstellungen."
1593
+
1594
+ #: classes/class.swpm-settings.php:362
1595
+ msgid ""
1596
+ "The following pages are required for the plugin to function correctly. These "
1597
+ "pages were automatically created by the plugin at install time."
1598
+ msgstr ""
1599
+ "Die folgenden Seiten sind für ein korrektes Funktionieren des Plugin "
1600
+ "erforderlich. Diese Seiten werden bei der Installation des Plugin "
1601
+ "automatisch angelegt."
1602
+
1603
+ #: classes/class.swpm-settings.php:367
1604
+ msgid "Testing and Debug Related Settings."
1605
+ msgstr "Einstellungen zum Testen und Debuggen."
1606
+
1607
+ #: classes/class.swpm-settings.php:371
1608
+ msgid ""
1609
+ "This email will be sent to your users when they complete the registration "
1610
+ "and become a member."
1611
+ msgstr ""
1612
+ "Diese Email wird den Benutzern gesendet, wenn Sie Ihre Registrierung "
1613
+ "abgeschlossen haben und Mitglied geworden sind."
1614
+
1615
+ #: classes/class.swpm-settings.php:375
1616
+ msgid ""
1617
+ "This email will be sent to your users when they use the password reset "
1618
+ "functionality."
1619
+ msgstr ""
1620
+ "Diese Email wird den Mitgliedern gesendet, wenn sie das Passwort zurück "
1621
+ "setzen."
1622
+
1623
+ #: classes/class.swpm-settings.php:381
1624
+ msgid ""
1625
+ "This interface lets you custsomize the various emails that gets sent to your "
1626
+ "members for various actions. The default settings should be good to get your "
1627
+ "started."
1628
+ msgstr ""
1629
+ "Über diese Schnittstelle können Sie die verschiedenen E-Mails anpassen, die "
1630
+ "für verschiedene Aktionen an Ihre Mitglieder gesendet werden. Die "
1631
+ "Standardeinstellungen sollten ausreichen, um loszulegen."
1632
+
1633
+ #: classes/class.swpm-settings.php:385 views/admin_tools_settings.php:82
1634
+ msgid "This documentation"
1635
+ msgstr "Plugin-Dokumentation"
1636
+
1637
+ #: classes/class.swpm-settings.php:386
1638
+ msgid ""
1639
+ " explains what email merge tags you can use in the email body field to "
1640
+ "customize it (if you want to)."
1641
+ msgstr ""
1642
+ " erklärt, welche E-Mail-Merge-Tags Sie im E-Mail-Text verwenden können, um "
1643
+ "sie anzupassen (wenn Sie möchten)."
1644
+
1645
+ #: classes/class.swpm-settings.php:399
1646
+ msgid "Settings in this section apply to all emails."
1647
+ msgstr "Die Einstellungen in diesem Abschnitt gelten für alle E-Mails."
1648
+
1649
+ #: classes/class.swpm-settings.php:403
1650
+ msgid ""
1651
+ "This email will be sent to your users after account upgrade (when an "
1652
+ "existing member pays for a new membership level)."
1653
+ msgstr ""
1654
+ "Diese Email wird den Mitgliedern gesendet, wenn sie den Zahlungsvorgang für "
1655
+ "einen höheren Level der Mitgliedschaft abgeschlossen haben."
1656
+
1657
+ #: classes/class.swpm-settings.php:407
1658
+ msgid ""
1659
+ "This email will be sent to your members when you use the bulk account "
1660
+ "activate and notify action."
1661
+ msgstr ""
1662
+ "Diese Email wird an die Mitglieder gesendet, wenn Sie die Aktivierung und "
1663
+ "Benachrichtigung gesammelt vornehmen."
1664
+
1665
+ #: classes/class.swpm-settings.php:408
1666
+ msgid ""
1667
+ " You cannot use email merge tags in this email. You can only use generic "
1668
+ "text."
1669
+ msgstr ""
1670
+ " Sie können nicht E-Mail-Merge-Tags in dieser e-Mail verwenden. Sie können "
1671
+ "nur generische Text verwenden."
1672
+
1673
+ #: classes/class.swpm-settings.php:413
1674
+ msgid ""
1675
+ "This email will be sent if Email Activation is enabled for a Membership "
1676
+ "Level."
1677
+ msgstr ""
1678
+ "Diese E-Mail wird gesendet, wenn die E-Mail-Aktivierung für eine "
1679
+ "Mitgliedschaftsstufe aktiviert ist."
1680
+
1681
+ #: classes/class.swpm-settings.php:417
1682
+ msgid ""
1683
+ "This email will be sent to prompt users to complete registration after the "
1684
+ "payment."
1685
+ msgstr ""
1686
+ "Diese E-Mail wird gesendet, um Benutzer zu veranlassen, die Registrierung "
1687
+ "nach der Zahlung zu vervollständigen."
1688
+
1689
+ #: classes/class.swpm-settings.php:428
1690
+ msgid "This page allows you to configure some advanced features of the plugin."
1691
+ msgstr ""
1692
+ "Auf dieser Seite können Sie einige erweiterte Einstellungen dieses Plugins "
1693
+ "konfigurieren."
1694
+
1695
+ #: classes/class.swpm-settings.php:432
1696
+ msgid ""
1697
+ "This section allows you to configure automatic creation of member accounts "
1698
+ "when new WP User records are created by another plugin. It can be useful if "
1699
+ "you are using another plugin that creates WP user records and you want them "
1700
+ "to be recognized in the membership plugin."
1701
+ msgstr ""
1702
+ "Dies ermöglicht Ihnen, Mitgliedschaften automatisch einrichten zu lassen, "
1703
+ "wenn ein WP User Datensatz durch ein anderes WP Plugin erstellt worden ist. "
1704
+ "Dies kann hilfreich sein, wenn Sie ein anderes Plugin installiert haben, das "
1705
+ "WP User Einträge erstellt und Sie möchten, dass diese Einträge von "
1706
+ "Membership Plugin übernommen werden."
1707
+
1708
+ #: classes/class.swpm-settings.php:436
1709
+ msgid ""
1710
+ "This section allows you to configure terms and conditions and privacy policy "
1711
+ "that users must accept at registration time."
1712
+ msgstr ""
1713
+ "In diesem Bereich können Sie die Zugriffe auf die allgemeinen "
1714
+ "Geschäftsbedingungen und die Datenschutzerklärung eingeben, die die Anwender "
1715
+ "bei der Registrierung akzeptieren müssen."
1716
+
1717
+ #: classes/class.swpm-settings.php:565
1718
+ msgid "Simple WP Membership::Settings"
1719
+ msgstr "Simple WP Membership::Einstellungen"
1720
+
1721
+ #: classes/class.swpm-utils-member.php:36
1722
+ #: classes/class.swpm-utils-member.php:44
1723
+ #: classes/class.swpm-utils-member.php:52
1724
+ #: classes/class.swpm-utils-member.php:62
1725
+ msgid "User is not logged in."
1726
+ msgstr "Benutzer ist nicht angemeldet."
1727
+
1728
+ #: classes/class.swpm-utils-member.php:80
1729
+ msgid "No Expiry"
1730
+ msgstr "Kein Ablaufdatum"
1731
+
1732
+ #: classes/class.swpm-utils-misc.php:50
1733
+ msgid "Registration"
1734
+ msgstr "Registrierung"
1735
+
1736
+ #: classes/class.swpm-utils-misc.php:73
1737
+ msgid "Member Login"
1738
+ msgstr "Login für Mitglieder"
1739
+
1740
+ #: classes/class.swpm-utils-misc.php:96
1741
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:117
1742
+ msgid "Profile"
1743
+ msgstr "Profil"
1744
+
1745
+ #: classes/class.swpm-utils-misc.php:119
1746
+ msgid "Password Reset"
1747
+ msgstr "Passwort zurücksetzen"
1748
+
1749
+ #: classes/class.swpm-utils-misc.php:168
1750
+ #, php-format
1751
+ msgid ""
1752
+ "You will be automatically redirected in a few seconds. If not, please %s."
1753
+ msgstr ""
1754
+ "Sie werden automatisch in ein paar Sekunden weitergeleitet. Falls nicht, "
1755
+ "bitte %s."
1756
+
1757
+ #: classes/class.swpm-utils-misc.php:172
1758
+ msgid "Action Status"
1759
+ msgstr "Aktionsstatus"
1760
+
1761
+ #: classes/class.swpm-utils-misc.php:274
1762
+ msgid "Not a Member?"
1763
+ msgstr "Noch kein Mitglied?"
1764
+
1765
+ #: classes/class.swpm-utils-misc.php:285
1766
+ msgid "renew"
1767
+ msgstr "erneuern"
1768
+
1769
+ #: classes/class.swpm-utils-misc.php:285
1770
+ msgid " your account to gain access to this content."
1771
+ msgstr " Ihr Konto, um Zugang zu diesem Inhalt zu erhalten."
1772
+
1773
+ #: classes/class.swpm-utils-misc.php:343 classes/class.swpm-utils-misc.php:349
1774
+ msgid "Error! This action ("
1775
+ msgstr "Fehler! Diese Aktion ("
1776
+
1777
+ #: classes/class.swpm-utils-misc.php:421
1778
+ msgid "(Please Select)"
1779
+ msgstr "(Bitte auswählen)"
1780
+
1781
+ #: classes/class.swpm-utils-template.php:38
1782
+ msgid "Error! Failed to find a template path for the specified template: "
1783
+ msgstr ""
1784
+ "Fehler! Ein Zugriffspfad auf dieses Template konnte nicht gefunden werden: "
1785
+
1786
+ #: classes/class.swpm-utils.php:101
1787
+ msgid "Never"
1788
+ msgstr "Niemals"
1789
+
1790
+ #: classes/class.swpm-utils.php:116 views/admin_members_list.php:19
1791
+ msgid "Active"
1792
+ msgstr "Aktiv"
1793
+
1794
+ #: classes/class.swpm-utils.php:117 views/admin_members_list.php:20
1795
+ msgid "Inactive"
1796
+ msgstr "Inaktiv"
1797
+
1798
+ #: classes/class.swpm-utils.php:118 views/admin_members_list.php:21
1799
+ msgid "Activation Required"
1800
+ msgstr "Aktivierung benötigt"
1801
+
1802
+ #: classes/class.swpm-utils.php:119 views/admin_members_list.php:22
1803
+ msgid "Pending"
1804
+ msgstr "Ausstehend"
1805
+
1806
+ #: classes/class.swpm-utils.php:120 views/admin_members_list.php:24
1807
+ msgid "Expired"
1808
+ msgstr "Abgelaufen"
1809
+
1810
+ #: classes/class.swpm-utils.php:414 views/account_delete_warning.php:3
1811
+ msgid "Delete Account"
1812
+ msgstr "Konto löschen"
1813
+
1814
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:75
1815
+ msgid "Payment Button ID"
1816
+ msgstr "Zahlungs-Button-ID"
1817
+
1818
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:76
1819
+ msgid "Payment Button Title"
1820
+ msgstr "Zahlungs Button Titel"
1821
+
1822
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:77
1823
+ msgid "Membership Level ID"
1824
+ msgstr "Mitgliedsschaftsstufen ID"
1825
+
1826
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:78
1827
+ msgid "Button Type"
1828
+ msgstr "Button Typ"
1829
+
1830
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:79
1831
+ msgid "Button Shortcode"
1832
+ msgstr "Button Shortcode"
1833
+
1834
+ #: classes/admin-includes/class.swpm-payment-buttons-list-table.php:127
1835
+ #: views/admin_members_list.php:9
1836
+ #: views/payments/admin_all_payment_transactions.php:32
1837
+ msgid "The selected entry was deleted!"
1838
+ msgstr "Der ausgewählte Eintrag wurde gelöscht!"
1839
+
1840
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:21
1841
+ msgid "Simple Membership::Payments"
1842
+ msgstr "Simple WP Membership::Zahlungsvorgänge"
1843
+
1844
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:25
1845
+ msgid "Transactions"
1846
+ msgstr "Transaktionen"
1847
+
1848
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:26
1849
+ msgid "Manage Payment Buttons"
1850
+ msgstr "Zahlungsarten verwalten"
1851
+
1852
+ #: classes/admin-includes/class.swpm-payments-admin-menu.php:27
1853
+ #: views/payments/admin_payment_buttons.php:27
1854
+ msgid "Create New Button"
1855
+ msgstr "Neue Schaltfläche erstellen"
1856
+
1857
+ #: classes/admin-includes/class.swpm-payments-list-table.php:57
1858
+ #: views/template-1.php:95 views/template-2.php:97
1859
+ msgid "View Profile"
1860
+ msgstr "Profil anzeigen"
1861
+
1862
+ #: classes/admin-includes/class.swpm-payments-list-table.php:76
1863
+ msgid "Row ID"
1864
+ msgstr "Zeilen-ID"
1865
+
1866
+ #: classes/admin-includes/class.swpm-payments-list-table.php:77
1867
+ #: views/forgot_password.php:5
1868
+ msgid "Email Address"
1869
+ msgstr "E-Mail Adresse"
1870
+
1871
+ #: classes/admin-includes/class.swpm-payments-list-table.php:80
1872
+ msgid "Member Profile"
1873
+ msgstr "Mitgliedsprofil"
1874
+
1875
+ #: classes/admin-includes/class.swpm-payments-list-table.php:82
1876
+ msgid "Transaction ID"
1877
+ msgstr "Transaktions-ID"
1878
+
1879
+ #: classes/admin-includes/class.swpm-payments-list-table.php:83
1880
+ msgid "Subscriber ID"
1881
+ msgstr "Abonnenten-ID"
1882
+
1883
+ #: classes/admin-includes/class.swpm-payments-list-table.php:84
1884
+ msgid "Amount"
1885
+ msgstr "Summe"
1886
+
1887
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:60
1888
+ msgid "Your membership profile will be updated to reflect the payment."
1889
+ msgstr "Ihr Mitglieds Profil wird gemäß Zahlungsbetrag aktualisiert."
1890
+
1891
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:61
1892
+ msgid "Your profile username: "
1893
+ msgstr "Ihr Benutzername: "
1894
+
1895
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:73
1896
+ msgid "Click on the following link to complete the registration."
1897
+ msgstr ""
1898
+ "Klicken Sie auf den folgenden Link, um die Registrierung abzuschließen."
1899
+
1900
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:74
1901
+ msgid "Click here to complete your paid registration"
1902
+ msgstr "Klicken Sie hier, um Ihre bezahlte Registrierung abzuschließen"
1903
+
1904
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:79
1905
+ msgid ""
1906
+ "If you have just made a membership payment then your payment is yet to be "
1907
+ "processed. Please check back in a few minutes. An email will be sent to you "
1908
+ "with the details shortly."
1909
+ msgstr ""
1910
+ "Wenn Sie die Zahlung für die Mitgliedschaft gerade veranlasst haben, dann "
1911
+ "ist der Zahlungsvorgang möglicherweise noch nicht abgeschlossen. Bitte "
1912
+ "warten Sie noch eine kurze Zeit. Sie erhalten in Kürze eine Email zur "
1913
+ "Bestätigung."
1914
+
1915
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:93
1916
+ msgid "Expiry: "
1917
+ msgstr "Ablauf: "
1918
+
1919
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:95
1920
+ msgid "You are not logged-in as a member"
1921
+ msgstr "Sie sind nicht als Mitglied angemeldet"
1922
+
1923
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:115
1924
+ msgid "Logged in as: "
1925
+ msgstr "Eingeloggt als: "
1926
+
1927
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:118
1928
+ #: views/loggedin.php:31
1929
+ msgid "Logout"
1930
+ msgstr "Ausloggen"
1931
+
1932
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:121
1933
+ msgid "Login Here"
1934
+ msgstr "Hier einloggen"
1935
+
1936
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:122
1937
+ msgid "Not a member? "
1938
+ msgstr "Noch kein Mitglied? "
1939
+
1940
+ #: classes/shortcode-related/class.swpm-shortcodes-handler.php:123
1941
+ msgid "Join Now"
1942
+ msgstr "Registrieren Sie sich hier"
1943
+
1944
+ #: ipn/swpm-smart-checkout-ipn.php:260 ipn/swpm-smart-checkout-ipn.php:285
1945
+ #, php-format
1946
+ msgid "Error occured during payment verification. Error code: %d. Message: %s"
1947
+ msgstr ""
1948
+ "Fehler bei der Verifizierung der Zahlung aufgetreten. Fehler Code: %d. "
1949
+ "Nachricht: %s"
1950
+
1951
+ #: ipn/swpm-smart-checkout-ipn.php:298
1952
+ #, php-format
1953
+ msgid ""
1954
+ "Payment check failed: invalid amount received. Expected %s %s, got %s %s."
1955
+ msgstr ""
1956
+ "Zahlungsprüfung fehlgeschlagen: ungültiger Betrag. Erwartet %s %s, erhalten "
1957
+ "%s %s."
1958
+
1959
+ #: ipn/swpm-smart-checkout-ipn.php:315
1960
+ msgid "Empty payment data received."
1961
+ msgstr "Leere Zahlungsdaten erhalten."
1962
+
1963
+ #: ipn/swpm-smart-checkout-ipn.php:355
1964
+ msgid "IPN product validation failed. Check debug log for more details."
1965
+ msgstr ""
1966
+ "IPN Produkt Verifizierung fehlgeschlagen. Siehe Debug Log für weitere "
1967
+ "Details."
1968
+
1969
+ #: views/account_delete_warning.php:7
1970
+ msgid ""
1971
+ "You are about to delete an account. This will delete user data associated "
1972
+ "with this account. "
1973
+ msgstr ""
1974
+ "Sie sind dabei, ein Mitglieds-Konto zu löschen. Es werden alle "
1975
+ "entsprechenden Einträge gelöscht. "
1976
+
1977
+ #: views/account_delete_warning.php:8
1978
+ msgid "It will also delete associated WordPress user account."
1979
+ msgstr "Das entsprechende WordPress Benutzer Konto wird auch gelöscht."
1980
+
1981
+ #: views/account_delete_warning.php:9
1982
+ msgid ""
1983
+ "(NOTE: for safety, we do not allow deletion of any associated WordPress "
1984
+ "account with administrator role)."
1985
+ msgstr ""
1986
+ "(Hinweis: zur Sicherheit können keine WordPress Benutzerkonten mit "
1987
+ "Administrator-Rechten gelöscht werden)"
1988
+
1989
+ #: views/account_delete_warning.php:10
1990
+ msgid "Continue?"
1991
+ msgstr "Fortfahren?"
1992
+
1993
+ #: views/account_delete_warning.php:13
1994
+ msgid "Password: "
1995
+ msgstr "Passwort: "
1996
+
1997
+ #: views/account_delete_warning.php:14
1998
+ msgid "Confirm Account Deletion"
1999
+ msgstr "Kontolöschung bestätigen"
2000
+
2001
+ #: views/add.php:24 views/admin_add.php:19 views/admin_edit.php:44
2002
+ #: views/edit.php:31 views/login.php:17
2003
+ msgid "Password"
2004
+ msgstr "Passwort"
2005
+
2006
+ #: views/add.php:28 views/edit.php:35
2007
+ msgid "Repeat Password"
2008
+ msgstr "Passwort wiederholen"
2009
+
2010
+ #: views/add.php:65
2011
+ msgid "I accept the "
2012
+ msgstr "Ich akzeptiere die "
2013
+
2014
+ #: views/add.php:77
2015
+ msgid "I agree to the "
2016
+ msgstr "Ich akzeptiere die "
2017
+
2018
+ #: views/add.php:77
2019
+ msgid "Privacy Policy"
2020
+ msgstr "Datenschutzerklärung"
2021
+
2022
+ #: views/add.php:88
2023
+ msgid "Register"
2024
+ msgstr "Registrieren"
2025
+
2026
+ #: views/admin_add.php:7
2027
+ msgid "Create a brand new user and add it to this site."
2028
+ msgstr ""
2029
+ "Erstellen Sie einen neuen Benutzer und fügen Sie ihn zu dieser Website hinzu."
2030
+
2031
+ #: views/admin_add.php:11 views/admin_add.php:15 views/admin_add_level.php:12
2032
+ #: views/admin_add_level.php:16 views/admin_add_level.php:20
2033
+ #: views/admin_edit.php:19 views/admin_edit.php:40
2034
+ #: views/admin_edit_level.php:16 views/admin_edit_level.php:20
2035
+ #: views/admin_edit_level.php:24
2036
+ msgid "(required)"
2037
+ msgstr "(Pflichtfeld)"
2038
+
2039
+ #: views/admin_add.php:15 views/admin_edit.php:40
2040
+ msgid "E-mail"
2041
+ msgstr "E-Mail Adresse"
2042
+
2043
+ #: views/admin_add.php:19
2044
+ msgid "(twice, required)"
2045
+ msgstr "(zweimal, erforderlich)"
2046
+
2047
+ #: views/admin_add.php:24 views/admin_edit.php:48
2048
+ msgid "Strength indicator"
2049
+ msgstr "Passwortsicherheit"
2050
+
2051
+ #: views/admin_add.php:25 views/admin_edit.php:49
2052
+ msgid ""
2053
+ "Hint: The password should be at least seven characters long. To make it "
2054
+ "stronger, use upper and lower case letters, numbers and symbols like ! \" ? "
2055
+ "$ % ^ &amp; )."
2056
+ msgstr ""
2057
+ "Hinweis: Das Passwort sollte mindestens sieben Zeichen lang sein. Um es "
2058
+ "stärker zu machen, verwenden Sie Groß- und Kleinbuchstaben, Zahlen und "
2059
+ "Symbole wie! \" ? $ % ^ &)."
2060
+
2061
+ #: views/admin_add.php:29 views/admin_edit.php:53 views/loggedin.php:10
2062
+ msgid "Account Status"
2063
+ msgstr "Kontostatus"
2064
+
2065
+ #: views/admin_add.php:39
2066
+ msgid "Add New Member "
2067
+ msgstr "Neues Mitglied hinzufügen "
2068
+
2069
+ #: views/admin_addon_settings.php:3
2070
+ msgid ""
2071
+ "Some of the simple membership plugin's addon settings and options will be "
2072
+ "displayed here (if you have them)"
2073
+ msgstr ""
2074
+ "Einstellungen einiger der Erweiterungen und Optionen des Simple Membership "
2075
+ "Plugins werden hier angezeigt (sofern sie installiert sind)"
2076
+
2077
+ #: views/admin_addon_settings.php:8
2078
+ msgid "Save Changes"
2079
+ msgstr "Änderungen speichern"
2080
+
2081
+ #: views/admin_add_level.php:6
2082
+ msgid "Add Membership Level"
2083
+ msgstr "Mitgliedschaftsstufe hinzufügen"
2084
+
2085
+ #: views/admin_add_level.php:7
2086
+ msgid "Create new membership level."
2087
+ msgstr "Neue Mitgliedschaftsstufe erstellen."
2088
+
2089
+ #: views/admin_add_level.php:12 views/admin_edit_level.php:16
2090
+ msgid "Membership Level Name"
2091
+ msgstr "Name der Mitgliedschaftsstufe"
2092
+
2093
+ #: views/admin_add_level.php:16 views/admin_edit_level.php:20
2094
+ msgid "Default WordPress Role"
2095
+ msgstr "Standard-WordPress-Rolle"
2096
+
2097
+ #: views/admin_add_level.php:20 views/admin_edit_level.php:24
2098
+ msgid "Access Duration"
2099
+ msgstr "Zugriffsdauer"
2100
+
2101
+ #: views/admin_add_level.php:23
2102
+ msgid "No Expiry (Access for this level will not expire until cancelled"
2103
+ msgstr "Kein Ablauf (Zugriff läuft nicht ab, bis er storniert wird"
2104
+
2105
+ #: views/admin_add_level.php:24 views/admin_add_level.php:26
2106
+ #: views/admin_add_level.php:28 views/admin_add_level.php:30
2107
+ #: views/admin_edit_level.php:28 views/admin_edit_level.php:31
2108
+ #: views/admin_edit_level.php:34 views/admin_edit_level.php:37
2109
+ msgid "Expire After"
2110
+ msgstr "Läuft aus nach"
2111
+
2112
+ #: views/admin_add_level.php:25 views/admin_edit_level.php:29
2113
+ msgid "Days (Access expires after given number of days)"
2114
+ msgstr "Tage (Zugang läuft nach vorgegebener Anzahl der Tage ab.)"
2115
+
2116
+ #: views/admin_add_level.php:27
2117
+ msgid "Weeks (Access expires after given number of weeks"
2118
+ msgstr "Wochen (Zugang läuft nach vorgegebener Anzahl der Wochen ab)"
2119
+
2120
+ #: views/admin_add_level.php:29 views/admin_edit_level.php:35
2121
+ msgid "Months (Access expires after given number of months)"
2122
+ msgstr "Monate (Zugang läuft nach vorgegebener Anzahl der Monate ab.)"
2123
+
2124
+ #: views/admin_add_level.php:31 views/admin_edit_level.php:38
2125
+ msgid "Years (Access expires after given number of years)"
2126
+ msgstr "Jahre (Zugang läuft nach vorgegebener Anzahl der Jahre ab.)"
2127
+
2128
+ #: views/admin_add_level.php:32 views/admin_edit_level.php:40
2129
+ msgid "Fixed Date Expiry"
2130
+ msgstr "Festes Ablaufdatum"
2131
+
2132
+ #: views/admin_add_level.php:33 views/admin_edit_level.php:41
2133
+ msgid "(Access expires on a fixed date)"
2134
+ msgstr "(Der Zugang läuft zu einem festen Termin ab)"
2135
+
2136
+ #: views/admin_add_level.php:38 views/admin_edit_level.php:46
2137
+ msgid "Email Activation"
2138
+ msgstr "E-Mail-Aktivierung"
2139
+
2140
+ #: views/admin_add_level.php:43
2141
+ msgid ""
2142
+ "Enable new user activation via email. When enabled, members will need to "
2143
+ "click on an activation link that is sent to their email address to activate "
2144
+ "the account. Useful for free membership. "
2145
+ msgstr ""
2146
+ "Aktivierung neuer Benutzer über Email freigeben. Wenn es freigegeben ist, "
2147
+ "müssen neue Mitglieder einen Aktivierungslink anklicken, der an ihre Email-"
2148
+ "Adresse gesendet wird. Vorteilhaft für kostenlose Mitgliedschaften. "
2149
+
2150
+ #: views/admin_add_level.php:44 views/admin_edit_level.php:52
2151
+ msgid "View Documentation"
2152
+ msgstr "Dokumentation ansehen"
2153
+
2154
+ #: views/admin_add_level.php:45 views/admin_edit_level.php:53
2155
+ msgid "Note:"
2156
+ msgstr "Hinweis:"
2157
+
2158
+ #: views/admin_add_level.php:45 views/admin_edit_level.php:53
2159
+ msgid ""
2160
+ "If enabled, decryptable member password is temporarily stored in the "
2161
+ "database until the account is activated."
2162
+ msgstr ""
2163
+ "Wenn aktiviert wird das unverschlüsselte Passwort zeitweilig in der "
2164
+ "Datenbank gespeichert, bis die Mitgliedschaft aktiviert ist."
2165
+
2166
+ #: views/admin_add_level.php:52
2167
+ msgid "Add New Membership Level "
2168
+ msgstr "Neue Mitgliedschaftsstufe hinzufügen "
2169
+
2170
+ #: views/admin_add_ons_page.php:7
2171
+ msgid "Simple WP Membership::Add-ons"
2172
+ msgstr "Simple WP Membership::Add-ons"
2173
+
2174
+ #: views/admin_category_list.php:5
2175
+ msgid ""
2176
+ "First of all, globally protect the category on your site by selecting "
2177
+ "\"General Protection\" from the drop-down box below and then select the "
2178
+ "categories that should be protected from non-logged in users."
2179
+ msgstr ""
2180
+ "Zuerst wählen Sie im Drop-Down Menue \"Genereller Schutz\" und wählen dann "
2181
+ "die Kategorien aus, die Sie vor nicht eingeloggten Benutzern schützen wollen."
2182
+
2183
+ #: views/admin_category_list.php:8
2184
+ msgid ""
2185
+ "Next, select an existing membership level from the drop-down box below and "
2186
+ "then select the categories you want to grant access to (for that particular "
2187
+ "membership level)."
2188
+ msgstr ""
2189
+ "Dann wählen Sie einen Mitglieder-Level aus dem Drop-Down Menue und wählen "
2190
+ "die Kategorien, zu denen Sie Mitgliedern dieses Levels Zugriff gewähren "
2191
+ "wollen."
2192
+
2193
+ #: views/admin_category_list.php:11 views/admin_post_list.php:11
2194
+ msgid "Read the "
2195
+ msgstr "Lesen Sie "
2196
+
2197
+ #: views/admin_category_list.php:11
2198
+ msgid "category protection documentation"
2199
+ msgstr "die Dokumentation zu Kategorie-Schutz"
2200
+
2201
+ #: views/admin_category_list.php:17 views/admin_post_list.php:27
2202
+ msgid "Membership Level:"
2203
+ msgstr "Mitgliedschaftsstufe:"
2204
+
2205
+ #: views/admin_category_list.php:19 views/admin_post_list.php:29
2206
+ msgid "General Protection"
2207
+ msgstr "Genereller Schutz"
2208
+
2209
+ #: views/admin_category_list.php:23 views/admin_post_list.php:33
2210
+ #: views/edit.php:83
2211
+ msgid "Update"
2212
+ msgstr "Aktualisieren"
2213
+
2214
+ #: views/admin_edit.php:11
2215
+ msgid "Edit Member"
2216
+ msgstr "Mitglied bearbeiten"
2217
+
2218
+ #: views/admin_edit.php:13
2219
+ msgid "Edit existing member details."
2220
+ msgstr "Bearbeiten Sie die vorhandenen Mitglieds-Details."
2221
+
2222
+ #: views/admin_edit.php:14
2223
+ msgid " You are currenty editing member with member ID: "
2224
+ msgstr " Sie bearbeiten gerade das Mitglied mit der Mitglieds-ID: "
2225
+
2226
+ #: views/admin_edit.php:44
2227
+ msgid "(twice, leave empty to retain old password)"
2228
+ msgstr "(doppelt, leer lassen, um das bestehende Passwort zu behalten)"
2229
+
2230
+ #: views/admin_edit.php:59
2231
+ msgid ""
2232
+ "This is the member's account status. If you want to manually activate an "
2233
+ "expired member's account then read"
2234
+ msgstr ""
2235
+ "Dies ist der Status der Mitgliedschaft. Wenn Sie eine abgelaufene "
2236
+ "Mitgliedschaft manuell aktivieren möchten, dann lesen Sie"
2237
+
2238
+ #: views/admin_edit.php:60
2239
+ msgid "this documentation"
2240
+ msgstr "diese Dokumentation"
2241
+
2242
+ #: views/admin_edit.php:61
2243
+ msgid " to learn how to do it."
2244
+ msgstr " lernen, wie es zu machen ist."
2245
+
2246
+ #: views/admin_edit.php:66
2247
+ msgid "Notify User"
2248
+ msgstr "Benutzer benachrichtigen"
2249
+
2250
+ #: views/admin_edit.php:69
2251
+ msgid ""
2252
+ "You can use this option to send a quick notification email to this member "
2253
+ "(the email will be sent when you hit the save button below)."
2254
+ msgstr ""
2255
+ "Sie können mit dieser Option eine Nachricht an dieses Mitglied senden. (die "
2256
+ "E-Mail wird gesendet, wenn Sie den Button zum speichern anklicken)"
2257
+
2258
+ #: views/admin_edit.php:75
2259
+ msgid "Subscriber ID/Reference"
2260
+ msgstr "Abonennten ID / Referenz"
2261
+
2262
+ #: views/admin_edit.php:79
2263
+ msgid "Last Accessed Date"
2264
+ msgstr "Datum des letzten Zugriffs"
2265
+
2266
+ #: views/admin_edit.php:82 views/admin_edit.php:89
2267
+ msgid "This value gets updated when this member logs into your site."
2268
+ msgstr "Dieser Wert wird aktualisiert, wenn dieses Mitglied sich einloggt."
2269
+
2270
+ #: views/admin_edit.php:86
2271
+ msgid "Last Accessed From IP"
2272
+ msgstr "Letzter Zugriff von IP"
2273
+
2274
+ #: views/admin_edit.php:97
2275
+ msgid "Save Data"
2276
+ msgstr "Daten speichern"
2277
+
2278
+ #: views/admin_edit.php:102
2279
+ msgid "Delete User Profile"
2280
+ msgstr "Benutzerprofil löschen"
2281
+
2282
+ #: views/admin_edit_level.php:6
2283
+ msgid "Edit membership level"
2284
+ msgstr "Mitgliedschaft bearbeiten"
2285
+
2286
+ #: views/admin_edit_level.php:9
2287
+ msgid ""
2288
+ "You can edit details of a selected membership level from this interface. "
2289
+ msgstr ""
2290
+ "Sie können die Details des ausgewählten Mitgliederlevels hier bearbeiten. "
2291
+
2292
+ #: views/admin_edit_level.php:10
2293
+ msgid "You are currently editing: "
2294
+ msgstr "Sie bearbeiten gerade: "
2295
+
2296
+ #: views/admin_edit_level.php:27
2297
+ msgid "No Expiry (Access for this level will not expire until cancelled)"
2298
+ msgstr "Kein Ablauf (Zugriff läuft nicht ab, bis er storniert wird)"
2299
+
2300
+ #: views/admin_edit_level.php:32
2301
+ msgid "Weeks (Access expires after given number of weeks)"
2302
+ msgstr "Wochen (Zugang läuft nach vorgegebener Anzahl von Wochen)"
2303
+
2304
+ #: views/admin_edit_level.php:51
2305
+ msgid ""
2306
+ "Enable new user activation via email. When enabled, members will need to "
2307
+ "click on an activation link that is sent to their email address to activate "
2308
+ "the account. Useful for free membership."
2309
+ msgstr ""
2310
+ "Aktivierung neuer Benutzer über Email freigeben. Wenn es freigegeben ist, "
2311
+ "müssen neue Mitglieder einen Aktivierungslink anklicken, der an ihre Email-"
2312
+ "Adresse gesendet wird. Vorteilhaft für kostenlose Mitgliedschaften."
2313
+
2314
+ #: views/admin_edit_level.php:60
2315
+ msgid "Save Membership Level "
2316
+ msgstr "Mitgliedschaftsstufe speichern "
2317
+
2318
+ #: views/admin_membership_manage.php:18
2319
+ msgid "Example Content Protection Settings"
2320
+ msgstr "Beispiel Inhaltsschutz Einstellungen"
2321
+
2322
+ #: views/admin_members_list.php:18
2323
+ msgid "All"
2324
+ msgstr "Alle"
2325
+
2326
+ #: views/admin_members_list.php:23
2327
+ msgid "Incomplete"
2328
+ msgstr "Unvollständig"
2329
+
2330
+ #: views/admin_member_form_common_part.php:23
2331
+ #: includes/swpm_mda_show_profile.php:37
2332
+ msgid "Gender"
2333
+ msgstr "Geschlecht"
2334
+
2335
+ #: views/admin_member_form_common_part.php:30 views/edit.php:47
2336
+ #: includes/swpm_mda_show_profile.php:34
2337
+ msgid "Phone"
2338
+ msgstr "Telefonnummer"
2339
+
2340
+ #: views/admin_member_form_common_part.php:34 views/edit.php:51
2341
+ msgid "Street"
2342
+ msgstr "Straße"
2343
+
2344
+ #: views/admin_member_form_common_part.php:38 views/edit.php:55
2345
+ msgid "City"
2346
+ msgstr "Stadt"
2347
+
2348
+ #: views/admin_member_form_common_part.php:42 views/edit.php:59
2349
+ msgid "State"
2350
+ msgstr "Bundesland"
2351
+
2352
+ #: views/admin_member_form_common_part.php:46 views/edit.php:63
2353
+ msgid "Zipcode"
2354
+ msgstr "PLZ"
2355
+
2356
+ #: views/admin_member_form_common_part.php:50 views/edit.php:67
2357
+ #: includes/swpm_mda_show_profile.php:33
2358
+ msgid "Country"
2359
+ msgstr "Land"
2360
+
2361
+ #: views/admin_member_form_common_part.php:54
2362
+ #: includes/swpm_mda_show_profile.php:38
2363
+ msgid "Company"
2364
+ msgstr "Firma"
2365
+
2366
+ #: views/admin_member_form_common_part.php:58
2367
+ #: includes/swpm_mda_show_profile.php:36
2368
+ msgid "Member Since"
2369
+ msgstr "Mitglied seit"
2370
+
2371
+ #: views/admin_post_list.php:5
2372
+ msgid ""
2373
+ "First of all, globally protect posts and pages on your site by selecting "
2374
+ "\"General Protection\" from the drop-down box below and then select posts "
2375
+ "and pages that should be protected from non-logged in users."
2376
+ msgstr ""
2377
+ "Zuerst wählen Sie im Drop-Down Menue \"Genereller Schutz\" und wählen dann "
2378
+ "die Beiträge und Seiten aus, die Sie vor nicht eingeloggten Benutzern "
2379
+ "schützen wollen."
2380
+
2381
+ #: views/admin_post_list.php:8
2382
+ msgid ""
2383
+ "Next, select an existing membership level from the drop-down box below and "
2384
+ "then select posts and pages you want to grant access to (for that particular "
2385
+ "membership level)."
2386
+ msgstr ""
2387
+ "Dann wählen Sie einen Mitglieder-Level aus dem Drop-Down Menue und wählen "
2388
+ "die Beiträge und Seiten, zu denen Sie Mitgliedern dieses Levels Zugriff "
2389
+ "gewähren wollen."
2390
+
2391
+ #: views/admin_post_list.php:11
2392
+ msgid "bulk protect posts and pages documentation"
2393
+ msgstr ""
2394
+ "die Dokumentation, wie Beiträge und Seiten in einer Massenanwendung "
2395
+ "geschützt werden"
2396
+
2397
+ #: views/admin_post_list.php:11
2398
+ msgid " to learn how to use it."
2399
+ msgstr " um zu lernen, wie es benutzt wird."
2400
+
2401
+ #: views/admin_post_list.php:21
2402
+ msgid "Posts"
2403
+ msgstr "Beiträge"
2404
+
2405
+ #: views/admin_post_list.php:22
2406
+ msgid "Pages"
2407
+ msgstr "Seiten"
2408
+
2409
+ #: views/admin_post_list.php:23
2410
+ msgid "Custom Posts"
2411
+ msgstr "Benutzerdefinierte Beiträge"
2412
+
2413
+ #: views/admin_tools_settings.php:14
2414
+ msgid "The required pages have been re-created."
2415
+ msgstr "Die notwendigen Seiten wurden wiederhergestellt."
2416
+
2417
+ #: views/admin_tools_settings.php:21
2418
+ msgid "Generate a Registration Completion link"
2419
+ msgstr "Einen \"Registrierung abgeschlossen\" Link generieren"
2420
+
2421
+ #: views/admin_tools_settings.php:24
2422
+ msgid ""
2423
+ "You can manually generate a registration completion link here and give it to "
2424
+ "your customer if they have missed the email that was automatically sent out "
2425
+ "to them after the payment."
2426
+ msgstr ""
2427
+ "Sie können hier manuell einen \"Registrierung abgeschlossen\" Link "
2428
+ "generieren falls Ihr Kunde die automatische E-Mail verlegt hat."
2429
+
2430
+ #: views/admin_tools_settings.php:29
2431
+ msgid "Generate Registration Completion Link"
2432
+ msgstr "\"Registrierung Abgeschlossen\" Link generieren"
2433
+
2434
+ #: views/admin_tools_settings.php:30
2435
+ msgid "For a Particular Member ID"
2436
+ msgstr "Für eine bestimmte Mitglieds-ID"
2437
+
2438
+ #: views/admin_tools_settings.php:32
2439
+ msgid "OR"
2440
+ msgstr "ODER"
2441
+
2442
+ #: views/admin_tools_settings.php:33
2443
+ msgid "For All Incomplete Registrations"
2444
+ msgstr "Für alle unvollständigen Anmeldungen"
2445
+
2446
+ #: views/admin_tools_settings.php:38
2447
+ msgid "Send Registration Reminder Email Too"
2448
+ msgstr "Registrierungserinnerung auch per E-Mail verschicken"
2449
+
2450
+ #: views/admin_tools_settings.php:44
2451
+ msgid "Submit"
2452
+ msgstr "Absenden"
2453
+
2454
+ #: views/admin_tools_settings.php:53
2455
+ msgid ""
2456
+ "Link(s) generated successfully. The following link(s) can be used to "
2457
+ "complete the registration."
2458
+ msgstr ""
2459
+ "Link(s) sind erfolgreich angelegt. Folgende(r) Link(s) kann/können genutzt "
2460
+ "werden, um die Registrierung zu Vervollständigen."
2461
+
2462
+ #: views/admin_tools_settings.php:55
2463
+ msgid "Registration completion links will appear below"
2464
+ msgstr ""
2465
+ "Der Link für die Vervollständigung der Registrierung wird unten angezeigt"
2466
+
2467
+ #: views/admin_tools_settings.php:65
2468
+ msgid "A prompt to complete registration email was also sent."
2469
+ msgstr ""
2470
+ "Eine Aufforderung, die Registrierung zu vervollständigen, wurde ebenfalls "
2471
+ "gesendet."
2472
+
2473
+ #: views/admin_tools_settings.php:78 views/admin_tools_settings.php:88
2474
+ msgid "Re-create the Required Pages"
2475
+ msgstr "Die notwendigen Seiten wiederherstellen"
2476
+
2477
+ #: views/admin_tools_settings.php:81
2478
+ msgid ""
2479
+ "If you have accidentally deleted the required pages that this plugin creates "
2480
+ "at install time, you can use this option to re-create them."
2481
+ msgstr ""
2482
+ "Falls Sie aus Versehen die von diesem Plugin automatisch erstellten und "
2483
+ "benötigten Seiten gelöscht haben, können Sie sie mit dieser Option wieder "
2484
+ "herstellen."
2485
+
2486
+ #: views/admin_tools_settings.php:82
2487
+ msgid " has full explanation."
2488
+ msgstr " vollständige Erklärung hat."
2489
+
2490
+ #: views/edit.php:32 views/edit.php:36
2491
+ msgid "Leave empty to keep the current password"
2492
+ msgstr "Lassen Sie das Feld leer, um das aktuelle Passwort beizubehalten"
2493
+
2494
+ #: views/edit.php:71
2495
+ msgid "Company Name"
2496
+ msgstr "Firmennname"
2497
+
2498
+ #: views/forgot_password.php:12
2499
+ msgid "Reset Password"
2500
+ msgstr "Passwort zurücksetzen"
2501
+
2502
+ #: views/loggedin.php:6
2503
+ msgid "Logged in as"
2504
+ msgstr "Eingeloggt als"
2505
+
2506
+ #: views/loggedin.php:14
2507
+ msgid "Membership"
2508
+ msgstr "Mitgliedschaft"
2509
+
2510
+ #: views/loggedin.php:18
2511
+ msgid "Account Expiry"
2512
+ msgstr "Kontoablauf"
2513
+
2514
+ #: views/loggedin.php:26
2515
+ msgid "Edit Profile"
2516
+ msgstr "Profil bearbeiten"
2517
+
2518
+ #: views/login.php:11
2519
+ msgid "Username or Email"
2520
+ msgstr "Mitgliedsname oder Email"
2521
+
2522
+ #: views/login.php:24
2523
+ msgid "Remember Me"
2524
+ msgstr "Erinneren Sie sich an mich"
2525
+
2526
+ #: views/login.php:33
2527
+ msgid "Forgot Password?"
2528
+ msgstr "Passwort vergessen?"
2529
+
2530
+ #: views/payments/admin_all_payment_transactions.php:6
2531
+ msgid "All the payments/transactions of your members are recorded here."
2532
+ msgstr ""
2533
+ "Alle Zahlungen / Transaktionen Ihrer Mitglieder werden hier aufgezeichnet."
2534
+
2535
+ #: views/payments/admin_all_payment_transactions.php:12
2536
+ msgid "Search for a transaction by using email or name"
2537
+ msgstr "Suche nach einer Transaktion mit Email oder Name"
2538
+
2539
+ #: views/payments/admin_create_payment_buttons.php:15
2540
+ msgid ""
2541
+ "You can create new payment button for your memberships using this interface."
2542
+ msgstr ""
2543
+ "Sie können eine neue Schaltfläche für Zahlungen für Mitgliedschaften mit "
2544
+ "diesem Interface erzeugen."
2545
+
2546
+ #: views/payments/admin_create_payment_buttons.php:23
2547
+ msgid "Select Payment Button Type"
2548
+ msgstr "Wählen Sie den Schaltflächen Typ für Zahlungen"
2549
+
2550
+ #: views/payments/admin_create_payment_buttons.php:26
2551
+ msgid "PayPal Buy Now"
2552
+ msgstr "PayPal Jetzt kaufen"
2553
+
2554
+ #: views/payments/admin_create_payment_buttons.php:28
2555
+ msgid "PayPal Subscription"
2556
+ msgstr "PayPal Abonnement"
2557
+
2558
+ #: views/payments/admin_create_payment_buttons.php:30
2559
+ msgid "PayPal Smart Checkout"
2560
+ msgstr "PayPal Smart Checkout"
2561
+
2562
+ #: views/payments/admin_create_payment_buttons.php:32
2563
+ msgid "Stripe Buy Now"
2564
+ msgstr "Stripe Jetzt kaufen"
2565
+
2566
+ #: views/payments/admin_create_payment_buttons.php:34
2567
+ msgid "Stripe Subscription"
2568
+ msgstr "Stripe Mitgliedschaft"
2569
+
2570
+ #: views/payments/admin_create_payment_buttons.php:36
2571
+ msgid "Braintree Buy Now"
2572
+ msgstr "Braintree Jetzt kaufen"
2573
+
2574
+ #: views/payments/admin_create_payment_buttons.php:43
2575
+ msgid "Next"
2576
+ msgstr "Weiter"
2577
+
2578
+ #: views/payments/admin_edit_payment_buttons.php:15
2579
+ msgid "You can edit a payment button using this interface."
2580
+ msgstr "Sie können eine Schaltfläche für Zahlungen hier bearbeiten."
2581
+
2582
+ #: views/payments/admin_payment_buttons.php:6
2583
+ msgid ""
2584
+ "All the membership buttons that you created in the plugin are displayed here."
2585
+ msgstr ""
2586
+ "Alle Schaltflächen für Mitgliedschaften, die Sie angelegt haben, finden Sie "
2587
+ "hier."
2588
+
2589
+ #: views/payments/admin_payment_settings.php:21
2590
+ msgid "Error! The membership level ID ("
2591
+ msgstr "Fehler! Die Mitgliederstufen-ID ("
2592
+
2593
+ #: views/payments/admin_payment_settings.php:28
2594
+ msgid ""
2595
+ "You can create membership payment buttons from the payments menu of this "
2596
+ "plugin (useful if you want to offer paid membership on the site)."
2597
+ msgstr ""
2598
+ "Sie können Schaltflächen für die Zahlungen für Mitgliedschaften über das "
2599
+ "Zahlungsmenü dieses Plugins erstellen (nützlich, wenn Sie eine "
2600
+ "kostenpflichtige Mitgliedschaft auf der Website anbieten möchten)."
2601
+
2602
+ #: views/payments/admin_payment_settings.php:33
2603
+ msgid "PayPal Integration Settings"
2604
+ msgstr "PayPal Integration Einstellungen"
2605
+
2606
+ #: views/payments/admin_payment_settings.php:36
2607
+ msgid "Generate the \"Advanced Variables\" Code for your PayPal button"
2608
+ msgstr "Generieren Sie den \"Advanced Variables\" Code für Ihren PayPal-Button"
2609
+
2610
+ #: views/payments/admin_payment_settings.php:39
2611
+ msgid "Enter the Membership Level ID"
2612
+ msgstr "Geben Sie die Mitgliederstufen-ID ein"
2613
+
2614
+ #: views/payments/admin_payment_settings.php:41
2615
+ msgid "Generate Code"
2616
+ msgstr "Code generieren"
2617
+
2618
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:22
2619
+ msgid "Braintree Buy Now Button Configuration"
2620
+ msgstr "Braintree \"Jetzt kaufen\" Button Konfiguration"
2621
+
2622
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:34
2623
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:213
2624
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:33
2625
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:301
2626
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:259
2627
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:83
2628
+ msgid "Button ID"
2629
+ msgstr "Button ID"
2630
+
2631
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:42
2632
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:26
2633
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:221
2634
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:41
2635
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:27
2636
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:309
2637
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:39
2638
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:266
2639
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:91
2640
+ msgid "Button Title"
2641
+ msgstr "Button Titel"
2642
+
2643
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:60
2644
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:44
2645
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:239
2646
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:59
2647
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:57
2648
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:282
2649
+ msgid "Payment Amount"
2650
+ msgstr "Zahlungsbetrag"
2651
+
2652
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:68
2653
+ msgid ""
2654
+ "Braintree API key and account details. You can get this from your Braintree "
2655
+ "account."
2656
+ msgstr ""
2657
+ "Braintree API Schlüssel und Konto Details. Sie können diese aus Ihrem "
2658
+ "Braintree Konto erhalten."
2659
+
2660
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:72
2661
+ msgid "Merchant ID"
2662
+ msgstr "Händler ID"
2663
+
2664
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:80
2665
+ msgid "Public Key"
2666
+ msgstr "Öffentlicher Schlüssel"
2667
+
2668
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:87
2669
+ msgid "Private Key"
2670
+ msgstr "Privater Schlüssel"
2671
+
2672
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:95
2673
+ msgid "Merchant Account ID"
2674
+ msgstr "Händler-Konto-ID"
2675
+
2676
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:113
2677
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:137
2678
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:361
2679
+ msgid "The following details are optional."
2680
+ msgstr "Die folgenden Angaben sind optional."
2681
+
2682
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:117
2683
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:92
2684
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:287
2685
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:204
2686
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:172
2687
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:456
2688
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:149
2689
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:373
2690
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:191
2691
+ msgid "Return URL"
2692
+ msgstr "Zu URL zurückkehren"
2693
+
2694
+ #: views/payments/payment-gateway/admin_braintree_buy_now_button.php:127
2695
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:126
2696
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:321
2697
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:214
2698
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:200
2699
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:484
2700
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:159
2701
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:383
2702
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:212
2703
+ msgid "Save Payment Data"
2704
+ msgstr "Zahlungsdaten speichern"
2705
+
2706
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:16
2707
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:204
2708
+ msgid "PayPal Buy Now Button Configuration"
2709
+ msgstr "PayPal \"Jetzt kaufen\" Button Configuration"
2710
+
2711
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:52
2712
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:247
2713
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:67
2714
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:45
2715
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:327
2716
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:65
2717
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:289
2718
+ msgid "Payment Currency"
2719
+ msgstr "Währung der Zahlung"
2720
+
2721
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:100
2722
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:295
2723
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:85
2724
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:367
2725
+ msgid "PayPal Email"
2726
+ msgstr "PayPal E-Mail Adresse"
2727
+
2728
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:108
2729
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:303
2730
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:180
2731
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:464
2732
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:199
2733
+ msgid "Button Image URL"
2734
+ msgstr "Button Bild-URL"
2735
+
2736
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:116
2737
+ #: views/payments/payment-gateway/admin_paypal_buy_now_button.php:311
2738
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:188
2739
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:472
2740
+ msgid "Custom Checkout Page Logo Image"
2741
+ msgstr "Benutzerdefinierte Checkout Seiten Logo"
2742
+
2743
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:21
2744
+ msgid "PayPal Smart Checkout Button Configuration"
2745
+ msgstr "PayPal Smart Checkout Button Konfiguration"
2746
+
2747
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:107
2748
+ msgid ""
2749
+ "PayPal Smart Checkout API Credentials (you can get this from your PayPal "
2750
+ "account)"
2751
+ msgstr ""
2752
+ "PayPal Smart Checkout API Berechtigungen (Sie können diese von Ihrem PayPal-"
2753
+ "Konto erhalten)"
2754
+
2755
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:111
2756
+ msgid "Live Client ID"
2757
+ msgstr "Kunden ID"
2758
+
2759
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:119
2760
+ msgid "Live Secret"
2761
+ msgstr "Live Secret"
2762
+
2763
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:127
2764
+ msgid "Sandbox Client ID"
2765
+ msgstr "Sandbox Kunden ID"
2766
+
2767
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:135
2768
+ msgid "Sandbox Secret"
2769
+ msgstr "Sandbox Geheimschlüssel"
2770
+
2771
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:143
2772
+ msgid "Button Appearance Settings"
2773
+ msgstr "Button Erscheinungsbild Einstellungen"
2774
+
2775
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:147
2776
+ msgid "Size"
2777
+ msgstr "Größe"
2778
+
2779
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:150
2780
+ msgid "Medium"
2781
+ msgstr "Medium"
2782
+
2783
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:151
2784
+ msgid "Large"
2785
+ msgstr "Groß"
2786
+
2787
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:152
2788
+ msgid "Repsonsive"
2789
+ msgstr "Repsonsive"
2790
+
2791
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:154
2792
+ msgid "Select button size."
2793
+ msgstr "Schaltflächengröße auswählen."
2794
+
2795
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:158
2796
+ msgid "Color"
2797
+ msgstr "Farbe"
2798
+
2799
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:161
2800
+ msgid "Gold"
2801
+ msgstr "Gold"
2802
+
2803
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:162
2804
+ msgid "Blue"
2805
+ msgstr "Blau"
2806
+
2807
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:163
2808
+ msgid "Silver"
2809
+ msgstr "Silber"
2810
+
2811
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:164
2812
+ msgid "Black"
2813
+ msgstr "Schwarz"
2814
+
2815
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:166
2816
+ msgid "Select button color."
2817
+ msgstr "Schaltflächenfarbe wählen."
2818
+
2819
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:170
2820
+ msgid "Shape"
2821
+ msgstr "Form"
2822
+
2823
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:172
2824
+ msgid "Rectangular"
2825
+ msgstr "Rechteckig"
2826
+
2827
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:173
2828
+ msgid "Pill"
2829
+ msgstr "Pill"
2830
+
2831
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:174
2832
+ msgid "Select button shape."
2833
+ msgstr "Schaltflächenform wählen."
2834
+
2835
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:178
2836
+ msgid "Layout"
2837
+ msgstr "Layout"
2838
+
2839
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:180
2840
+ msgid "Vertical"
2841
+ msgstr "Vertikal"
2842
+
2843
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:181
2844
+ msgid "Horizontal"
2845
+ msgstr "Horizontal"
2846
+
2847
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:182
2848
+ msgid "Select button layout."
2849
+ msgstr "Schaltflächenform wählen."
2850
+
2851
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:187
2852
+ msgid "Additional Settings"
2853
+ msgstr "Weitere Einstellungen"
2854
+
2855
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:191
2856
+ msgid "Payment Methods"
2857
+ msgstr "Zahlungsmethoden"
2858
+
2859
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:193
2860
+ msgid "PayPal Credit"
2861
+ msgstr "PayPal Kredit"
2862
+
2863
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:194
2864
+ msgid "ELV"
2865
+ msgstr "ELV"
2866
+
2867
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:195
2868
+ msgid ""
2869
+ "Select payment methods that could be used by customers. Note that payment "
2870
+ "with cards is always enabled."
2871
+ msgstr ""
2872
+ "Wählen Sie Zahlungsmethoden, die von Kunden genutzt werden können. Hinweis: "
2873
+ "Zahlung über Karten ist immer freigegeben."
2874
+
2875
+ #: views/payments/payment-gateway/admin_paypal_smart_checkout_button.php:200
2876
+ msgid "The following details are optional"
2877
+ msgstr "Die folgenden Angaben sind optional"
2878
+
2879
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:18
2880
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:295
2881
+ msgid "PayPal Subscription Button Configuration"
2882
+ msgstr "PayPal \"Abonnieren\" Button Konfiguration"
2883
+
2884
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:93
2885
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:375
2886
+ msgid "Billing Amount Each Cycle"
2887
+ msgstr "Abrechnungsbetrag des Zyklusses"
2888
+
2889
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:101
2890
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:383
2891
+ msgid "Billing Cycle"
2892
+ msgstr "Abrechnungszyklus"
2893
+
2894
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:114
2895
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:396
2896
+ msgid "Billing Cycle Count"
2897
+ msgstr "Abrechnungszyklen"
2898
+
2899
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:122
2900
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:404
2901
+ msgid "Re-attempt on Failure"
2902
+ msgstr "Wiederholungsversuch bei aufgetretenem Fehler"
2903
+
2904
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:135
2905
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:419
2906
+ msgid ""
2907
+ "Trial Billing Details (Leave empty if you are not offering a trial period)"
2908
+ msgstr ""
2909
+ "Abrechnungsdetails für Probezeitraum (Leer lassen, wenn Sie keine Probezeit "
2910
+ "anbieten)"
2911
+
2912
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:141
2913
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:425
2914
+ msgid "Trial Billing Amount"
2915
+ msgstr "Rechnungsbetrag für Probezeitraum"
2916
+
2917
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:149
2918
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:433
2919
+ msgid "Trial Billing Period"
2920
+ msgstr "Abrechnungszeitraum für Probezeitraum"
2921
+
2922
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:166
2923
+ #: views/payments/payment-gateway/admin_paypal_subscription_button.php:450
2924
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:177
2925
+ msgid "Optional Details"
2926
+ msgstr "Optionale Details"
2927
+
2928
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:29
2929
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:250
2930
+ msgid "Stripe Buy Now Button Configuration"
2931
+ msgstr "Stripe \"Jetzt kaufen\" Button Konfiguration"
2932
+
2933
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:104
2934
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:328
2935
+ msgid "Stripe API keys. You can get this from your Stripe account."
2936
+ msgstr ""
2937
+ "Stripe API-Schlüssel. Sie können diese von Ihrem Stripe-Konto erhalten."
2938
+
2939
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:108
2940
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:332
2941
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:131
2942
+ msgid "Test Publishable Key"
2943
+ msgstr "Testen Sie den Veröffentlichungs-Schlüssel"
2944
+
2945
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:115
2946
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:339
2947
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:139
2948
+ msgid "Test Secret Key"
2949
+ msgstr "Testen Sie den geheimen Schlüssel"
2950
+
2951
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:122
2952
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:346
2953
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:147
2954
+ msgid "Live Publishable Key"
2955
+ msgstr "Veröffentlichungs Schlüssel"
2956
+
2957
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:129
2958
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:353
2959
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:155
2960
+ msgid "Live Secret Key"
2961
+ msgstr "Geheimer Schlüssel"
2962
+
2963
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:141
2964
+ #: views/payments/payment-gateway/admin_stripe_buy_now_button.php:365
2965
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:183
2966
+ msgid "Collect Customer Address"
2967
+ msgstr "Adress-Daten des Kunden anfordern"
2968
+
2969
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:75
2970
+ msgid "Stripe Subscription Button Configuration"
2971
+ msgstr "Konfiguration des Stripe Anmeldungs-Button"
2972
+
2973
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:109
2974
+ msgid "Stripe Plan ID"
2975
+ msgstr "Stripe Plan ID"
2976
+
2977
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:125
2978
+ msgid "Stripe API Settings"
2979
+ msgstr "Stripe API Einstellungen"
2980
+
2981
+ #: views/payments/payment-gateway/admin_stripe_subscription_button.php:163
2982
+ msgid "Webook Endpoint URL"
2983
+ msgstr "Webook Endpoint URL"
2984
+
2985
+ #: views/payments/payment-gateway/braintree_button_shortcode_view.php:20
2986
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:91
2987
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:93
2988
+ #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:15
2989
+ #: views/payments/payment-gateway/stripe_button_shortcode_view.php:20
2990
+ #: views/payments/payment-gateway/stripe_button_shortcode_view.php:150
2991
+ msgid "Buy Now"
2992
+ msgstr "Jetzt kaufen"
2993
+
2994
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:226
2995
+ #: views/payments/payment-gateway/paypal_button_shortcode_view.php:228
2996
+ msgid "Subscribe Now"
2997
+ msgstr "Jetzt abonnieren"
2998
+
2999
+ #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:137
3000
+ msgid "Error occured during PayPal Smart Checkout process."
3001
+ msgstr "Fehler aufgetreten während des PayPal Smart Checkout Prozesses."
3002
+
3003
+ #: views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php:165
3004
+ msgid "HTTP error occured during payment process:"
3005
+ msgstr "HTTP Fehler aufgetreten während des Zahlungsvorgangs:"
3006
+
3007
+ #: Translation strings from addons === Form builder addon
3008
+ msgid "Type password here"
3009
+ msgstr "Passowrt hier eingeben"
3010
+
3011
+ msgid "Retype password here"
3012
+ msgstr "Passwort hier nochmal eingeben"
3013
+
3014
+ msgid "Registration is complete. You can now log into the site."
3015
+ msgstr "Registrierung ist vollständig. Sie können sich jetzt einloggen."
3016
+
3017
+ msgid " Field has invalid character"
3018
+ msgstr " Eingabe nicht erlaubter Zeichen"
3019
+
3020
+ msgid " Password does not match"
3021
+ msgstr " Passworte stimmen nicht überein"
3022
+
3023
+ msgid "Already taken."
3024
+ msgstr "Schon verwendet."
3025
+
3026
+ msgid "Street Address"
3027
+ msgstr "Strassen Adresse"
3028
+
3029
+ msgid "Apt, Suite, Bldg. (optional)"
3030
+ msgstr "Gebäude (optional)"
3031
+
3032
+ msgid "State / Province / Region"
3033
+ msgstr "Staat / Land / Region"
3034
+
3035
+ msgid "Postal / Zip Code"
3036
+ msgstr "PLZ"
3037
+
3038
+ msgid ""
3039
+ "Check this box to delete the image. The image will be deleted when you save "
3040
+ "the profile."
3041
+ msgstr ""
3042
+ "Setzen Sie im Kontrolkästchen einen Haken, um das Bidl zu löschen. Das Bild "
3043
+ "wird gelöscht, wenn Sie das Profil abspeichern."
3044
+
3045
+ msgid "You will need to re-login since you changed your password."
3046
+ msgstr "Sie müssen sich neu anmelden, da Sie Ihr Passwort geändert haben."
3047
+
3048
+ msgid ""
3049
+ "Please enter any two digits with <strong>no</strong> spaces (Example: 12)"
3050
+ msgstr ""
3051
+ "Bitte geben Sie zwei Ziffern <strong>ohne</strong>Leerzeichen ein (bspw.: 12)"
3052
+
3053
+ msgid "Verification"
3054
+ msgstr "Verifizierung"
3055
+
3056
+ msgid "Please enter any two digits with no spaces (Example: 12)*"
3057
+ msgstr "Bitte geben Sie zwei Ziffern ohne Leerzeichen ein (bspw.: 12)"
3058
+
3059
+ msgid "Username can only contain: letters, numbers and .-*@"
3060
+ msgstr "Mitgliedsname kann nur enthalten: Buchstaben, Zahlen und .-*@"
3061
+
3062
+ msgid "Allowed characters are: letters, numbers and .-_*@"
3063
+ msgstr "Zulässige Zeichen sind: Buchstaben, Zahlen und .-_*@"
3064
+
3065
+ #: === Partial protection addon strings
3066
+ msgid "You do not have permission to view this content."
3067
+ msgstr "Ihre Mitgliedschaft erlaubt es nicht, diesen Inhalt anzuzeigen."
3068
+
3069
+ msgid "Your membership level does not have permission to view this content."
3070
+ msgstr "Ihre Mitgliedschaft erlaubt es nicht, diesen Inhalt anzuzeigen."
3071
+
3072
+ msgid "This content is for members only."
3073
+ msgstr "Auf diesen Inhalt dürfen nur Mitglieder zugreifen."
3074
+
3075
+ msgid "Please check at least one."
3076
+ msgstr "Bitte überprüfen Sie mindestens eine."
3077
+
3078
+ #: === Member Directory Listing addon strings swpm-member-directory-admin.php:9
3079
+ msgid "Member Directory"
3080
+ msgstr "Mitglieder Verzeichnis"
3081
+
3082
+ #: includes/swpm_mda_show_profile.php:26
3083
+ msgid "Member ID"
3084
+ msgstr "Mitglieds ID"
3085
+
3086
+ #: includes/swpm_mda_show_profile.php:30
3087
+ msgid "Level"
3088
+ msgstr "Level"
3089
+
3090
+ #: includes/swpm_mda_show_profile.php:32
3091
+ msgid "Address"
3092
+ msgstr "Adresse"
3093
+
3094
+ #: views/template-1.php:52 views/template-2.php:53
3095
+ msgid "Search..."
3096
+ msgstr "Suche..."
3097
+
3098
+ #: views/template-1.php:60 views/template-2.php:62
3099
+ msgid "Clear Search"
3100
+ msgstr "Suche löschen"
3101
+
3102
+ msgid "You must be logged in to upgrade a membership."
3103
+ msgstr "Sie müssen angemeldet sein, um eine Mitgliedschaft zu ändern."
3104
+
3105
+ msgid "Membership level has been updated."
3106
+ msgstr "Die Mitgliedschaftsstufe wurde aktualisiert."
3107
+
3108
+ msgid "Already a member of this level."
3109
+ msgstr "Bereits ein Mitglied dieser Mitgliedschaftsstufe."
languages/simple-membership.pot CHANGED
@@ -490,9 +490,7 @@ msgid "You must agree to the privacy policy."
490
  msgstr ""
491
 
492
  #: classes/class.swpm-front-registration.php:140
493
- msgid ""
494
- "You need to confirm your email address. Please check your email and follow "
495
- "instructions to complete your registration."
496
  msgstr ""
497
 
498
  #: classes/class.swpm-front-registration.php:145
@@ -2709,9 +2707,6 @@ msgstr ""
2709
  msgid "HTTP error occured during payment process:"
2710
  msgstr ""
2711
 
2712
- msgid "You need to confirm your email address. Please check your email and follow instructions to complete your registration."
2713
- msgstr ""
2714
-
2715
  #: Translation strings from addons === Form builder addon
2716
  msgid "Type password here"
2717
  msgstr ""
@@ -2777,6 +2772,9 @@ msgstr ""
2777
  msgid "This content is for members only."
2778
  msgstr ""
2779
 
 
 
 
2780
  #: === Member Directory Listing addon strings swpm-member-directory-admin.php:9
2781
  msgid "Member Directory"
2782
  msgstr ""
@@ -2800,3 +2798,13 @@ msgstr ""
2800
  #: views/template-1.php:60 views/template-2.php:62
2801
  msgid "Clear Search"
2802
  msgstr ""
 
 
 
 
 
 
 
 
 
 
490
  msgstr ""
491
 
492
  #: classes/class.swpm-front-registration.php:140
493
+ msgid "You need to confirm your email address. Please check your email and follow instructions to complete your registration."
 
 
494
  msgstr ""
495
 
496
  #: classes/class.swpm-front-registration.php:145
2707
  msgid "HTTP error occured during payment process:"
2708
  msgstr ""
2709
 
 
 
 
2710
  #: Translation strings from addons === Form builder addon
2711
  msgid "Type password here"
2712
  msgstr ""
2772
  msgid "This content is for members only."
2773
  msgstr ""
2774
 
2775
+ msgid "Please check at least one."
2776
+ msgstr ""
2777
+
2778
  #: === Member Directory Listing addon strings swpm-member-directory-admin.php:9
2779
  msgid "Member Directory"
2780
  msgstr ""
2798
  #: views/template-1.php:60 views/template-2.php:62
2799
  msgid "Clear Search"
2800
  msgstr ""
2801
+
2802
+ # === Misc Shortcodes Addon ===
2803
+ msgid "You must be logged in to upgrade a membership."
2804
+ msgstr ""
2805
+
2806
+ msgid "Membership level has been updated."
2807
+ msgstr ""
2808
+
2809
+ msgid "Already a member of this level."
2810
+ msgstr ""
lib/stripe-util-functions.php CHANGED
@@ -5,7 +5,9 @@
5
  class StripeUtilFunctions {
6
 
7
  public static function get_stripe_plan_info($api_key, $plan_id) {
8
- require_once(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
 
 
9
 
10
  $stripe_err = '';
11
 
5
  class StripeUtilFunctions {
6
 
7
  public static function get_stripe_plan_info($api_key, $plan_id) {
8
+ if ( ! class_exists( '\Stripe\Stripe' ) ) {
9
+ require_once(SIMPLE_WP_MEMBERSHIP_PATH . 'lib/stripe-gateway/init.php');
10
+ }
11
 
12
  $stripe_err = '';
13
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://simple-membership-plugin.com/
4
  Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
5
  Requires at least: 4.0
6
  Tested up to: 5.2
7
- Stable tag: 3.8.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -158,6 +158,30 @@ https://simple-membership-plugin.com/
158
 
159
  == Changelog ==
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  = 3.8.4 =
162
  - More strings from the settings admin interface of the plugin are translatable.
163
  - The strong password validation error message is now translatable (if you are using this feature).
4
  Tags: member, members, members only, membership, memberships, register, WordPress membership plugin, content, content protection, paypal, restrict, restrict access, Restrict content, admin, access control, subscription, teaser, protection, profile, login, login page, bbpress, stripe, braintree
5
  Requires at least: 4.0
6
  Tested up to: 5.2
7
+ Stable tag: 3.8.9
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
158
 
159
  == Changelog ==
160
 
161
+ = 3.8.9 =
162
+ - Added a new feature in the email settings menu to allow disabling of the "Account Upgraded" email notification.
163
+
164
+ = 3.8.8 =
165
+ - The expiry date in the login widget now shows the translated date value for Non-English installs.
166
+ - Updated the German language translation files.
167
+ - Integration with the Super Socializer plugin for social login.
168
+ https://simple-membership-plugin.com/social-login-plugin-simple-membership/
169
+
170
+ = 3.8.7 =
171
+ - Removed a PHP warning in the wp_password_reset_hook(). Thanks to John Wick for pointing this out.
172
+ - Small improvement to the PayPal subscription IPN handling script.
173
+
174
+ = 3.8.6 =
175
+ - Added nonce check to the "Addons settings" tab.
176
+
177
+ = 3.8.5 =
178
+ - Fixed CSRF issue in the Bulk Operation menu tab.
179
+ - Fixed Braintree payment issue that could occur if customer pays via PayPal.
180
+ - Fixed Stripe library conflict if other Stripe plugin is installed.
181
+ - Added support for the coupons addon.
182
+ - Added current_user_can() check to the admin menu handling function.
183
+ - Added nonce check to wp_ajax.
184
+
185
  = 3.8.4 =
186
  - More strings from the settings admin interface of the plugin are translatable.
187
  - The strong password validation error message is now translatable (if you are using this feature).
simple-wp-membership.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  Plugin Name: Simple WordPress Membership
4
- Version: 3.8.4
5
  Plugin URI: https://simple-membership-plugin.com/
6
  Author: smp7, wp.insider
7
  Author URI: https://simple-membership-plugin.com/
@@ -19,7 +19,7 @@ include_once('classes/class.simple-wp-membership.php');
19
  include_once('classes/class.swpm-cronjob.php');
20
  include_once('swpm-compat.php');
21
 
22
- define('SIMPLE_WP_MEMBERSHIP_VER', '3.8.4');
23
  define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.3');
24
  define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
25
  define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
1
  <?php
2
  /*
3
  Plugin Name: Simple WordPress Membership
4
+ Version: 3.8.9
5
  Plugin URI: https://simple-membership-plugin.com/
6
  Author: smp7, wp.insider
7
  Author URI: https://simple-membership-plugin.com/
19
  include_once('classes/class.swpm-cronjob.php');
20
  include_once('swpm-compat.php');
21
 
22
+ define('SIMPLE_WP_MEMBERSHIP_VER', '3.8.9');
23
  define('SIMPLE_WP_MEMBERSHIP_DB_VER', '1.3');
24
  define('SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL', home_url());
25
  define('SIMPLE_WP_MEMBERSHIP_PATH', dirname(__FILE__) . '/');
views/admin_add_ons_page.php CHANGED
@@ -1,4 +1,8 @@
1
  <?php
 
 
 
 
2
  $output = '';
3
  echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL . '/css/swpm.addons.listing.css" />' . "\n";
4
  ?>
1
  <?php
2
+
3
+ //Check current_user_can() or die.
4
+ SwpmMiscUtils::check_user_permission_and_is_admin('Main Addons Listing Menu');
5
+
6
  $output = '';
7
  echo '<link type="text/css" rel="stylesheet" href="' . SIMPLE_WP_MEMBERSHIP_URL . '/css/swpm.addons.listing.css" />' . "\n";
8
  ?>
views/admin_addon_settings.php CHANGED
@@ -4,6 +4,7 @@
4
  </p>
5
  <form action="" method="POST">
6
  <input type="hidden" name="tab" value="<?php echo $current_tab; ?>" />
7
- <?php do_action('swpm_addon_settings_section'); ?>
8
- <?php submit_button(SwpmUtils::_('Save Changes'), 'primary', 'swpm-addon-settings'); ?>
 
9
  </form>
4
  </p>
5
  <form action="" method="POST">
6
  <input type="hidden" name="tab" value="<?php echo $current_tab; ?>" />
7
+ <?php do_action('swpm_addon_settings_section');
8
+ wp_nonce_field('swpm_addon_settings_section','swpm_addon_settings_section_save_settings');
9
+ submit_button(SwpmUtils::_('Save Changes'), 'primary', 'swpm-addon-settings'); ?>
10
  </form>
views/admin_category_list.php CHANGED
@@ -12,7 +12,9 @@
12
  </p>
13
  </div>
14
 
15
- <form id="category_list_form" method="post">
 
 
16
  <p class="swpm-select-box-left">
17
  <label for="membership_level_id"><?php SwpmUtils::e('Membership Level:'); ?></label>
18
  <select id="membership_level_id" name="membership_level_id">
@@ -20,7 +22,9 @@
20
  <?php echo SwpmUtils::membership_level_dropdown($category_list->selected_level_id); ?>
21
  </select>
22
  </p>
23
- <p class="swpm-select-box-left"><input type="submit" class="button-primary" name="update_category_list" value="<?php SwpmUtils::e('Update'); ?>"></p>
 
 
24
  <?php $category_list->prepare_items(); ?>
25
  <?php $category_list->display(); ?>
26
  </form>
12
  </p>
13
  </div>
14
 
15
+ <form id="category_list_form" method="post">
16
+ <input type="hidden" name="swpm_category_prot_update_nonce" value="<?php echo wp_create_nonce('swpm_category_prot_update_nonce_action'); ?>" />
17
+
18
  <p class="swpm-select-box-left">
19
  <label for="membership_level_id"><?php SwpmUtils::e('Membership Level:'); ?></label>
20
  <select id="membership_level_id" name="membership_level_id">
22
  <?php echo SwpmUtils::membership_level_dropdown($category_list->selected_level_id); ?>
23
  </select>
24
  </p>
25
+ <p class="swpm-select-box-left">
26
+ <input type="submit" class="button-primary" name="update_category_list" value="<?php SwpmUtils::e('Update'); ?>">
27
+ </p>
28
  <?php $category_list->prepare_items(); ?>
29
  <?php $category_list->display(); ?>
30
  </form>
views/admin_post_list.php CHANGED
@@ -22,7 +22,12 @@
22
  <a class="nav-tab<?php echo $post_list->type == 'page' ? ' nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=post_list&list_type=page"><?php SwpmUtils::e('Pages'); ?></a>
23
  <a class="nav-tab<?php echo $post_list->type == 'custom_post' ? ' nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=post_list&list_type=custom_post"><?php SwpmUtils::e('Custom Posts'); ?></a>
24
  </div>
25
- <p><form id="post_list_form" method="post">
 
 
 
 
 
26
  <p class="swpm-select-box-left">
27
  <label for="membership_level_id"><?php SwpmUtils::e('Membership Level:'); ?></label>
28
  <select id="membership_level_id" name="membership_level_id">
@@ -30,11 +35,14 @@
30
  <?php echo SwpmUtils::membership_level_dropdown($post_list->selected_level_id); ?>
31
  </select>
32
  </p>
33
- <p class="swpm-select-box-left"><input type="submit" class="button-primary" name="update_post_list" value="<?php SwpmUtils::e('Update'); ?>"></p>
 
 
34
  <?php $post_list->prepare_items(); ?>
35
  <?php $post_list->display(); ?>
36
  <input type="hidden" name="list_type" value="<?php echo $post_list->type; ?>">
37
- </form></p>
 
38
 
39
  <script type="text/javascript">
40
  jQuery(document).ready(function ($) {
22
  <a class="nav-tab<?php echo $post_list->type == 'page' ? ' nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=post_list&list_type=page"><?php SwpmUtils::e('Pages'); ?></a>
23
  <a class="nav-tab<?php echo $post_list->type == 'custom_post' ? ' nav-tab-active' : ''; ?>" href="admin.php?page=simple_wp_membership_levels&level_action=post_list&list_type=custom_post"><?php SwpmUtils::e('Custom Posts'); ?></a>
24
  </div>
25
+
26
+ <br />
27
+ <div class="swpm_post_protection_list_form">
28
+ <form id="post_list_form" method="post">
29
+ <input type="hidden" name="swpm_post_prot_update_nonce" value="<?php echo wp_create_nonce('swpm_post_prot_update_nonce_action'); ?>" />
30
+
31
  <p class="swpm-select-box-left">
32
  <label for="membership_level_id"><?php SwpmUtils::e('Membership Level:'); ?></label>
33
  <select id="membership_level_id" name="membership_level_id">
35
  <?php echo SwpmUtils::membership_level_dropdown($post_list->selected_level_id); ?>
36
  </select>
37
  </p>
38
+ <p class="swpm-select-box-left">
39
+ <input type="submit" class="button-primary" name="update_post_list" value="<?php SwpmUtils::e('Update'); ?>">
40
+ </p>
41
  <?php $post_list->prepare_items(); ?>
42
  <?php $post_list->display(); ?>
43
  <input type="hidden" name="list_type" value="<?php echo $post_list->type; ?>">
44
+ </form>
45
+ </div>
46
 
47
  <script type="text/javascript">
48
  jQuery(document).ready(function ($) {
views/payments/admin_create_payment_buttons.php CHANGED
@@ -37,6 +37,7 @@ if (!isset($_REQUEST['swpm_button_type_selected'])) {
37
  <br />
38
  <?php
39
  apply_filters('swpm_new_button_select_button_type', '');
 
40
  ?>
41
 
42
  <br />
@@ -48,6 +49,8 @@ if (!isset($_REQUEST['swpm_button_type_selected'])) {
48
  <?php
49
  } else {
50
  //Button type has been selected. Show the payment button configuration option.
 
 
51
  //Fire the action hook. The addons can render the payment button configuration option as appropriate.
52
  $button_type = sanitize_text_field($_REQUEST['button_type']);
53
  do_action('swpm_create_new_button_for_' . $button_type);
37
  <br />
38
  <?php
39
  apply_filters('swpm_new_button_select_button_type', '');
40
+ wp_nonce_field( 'swpm_admin_create_btns', 'swpm_admin_create_btns' );
41
  ?>
42
 
43
  <br />
49
  <?php
50
  } else {
51
  //Button type has been selected. Show the payment button configuration option.
52
+ //check the nonce first
53
+ check_admin_referer('swpm_admin_create_btns','swpm_admin_create_btns');
54
  //Fire the action hook. The addons can render the payment button configuration option as appropriate.
55
  $button_type = sanitize_text_field($_REQUEST['button_type']);
56
  do_action('swpm_create_new_button_for_' . $button_type);
views/payments/payment-gateway/admin_braintree_buy_now_button.php CHANGED
@@ -124,6 +124,7 @@ function render_save_edit_braintree_button_interface($bt_opts, $is_edit_mode = f
124
  </table>
125
 
126
  <p class="submit">
 
127
  <input type="submit" name="swpm_braintree_buy_now_<?php echo ($is_edit_mode ? 'edit' : 'save'); ?>_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
128
  </p>
129
 
@@ -230,6 +231,7 @@ add_action('swpm_edit_payment_button_process_submission', 'swpm_save_edit_braint
230
  function swpm_save_edit_braintree_buy_now_button_data() {
231
  if (isset($_REQUEST['swpm_braintree_buy_now_save_submit'])) {
232
  //This is a Braintree buy now button save event.
 
233
 
234
  $button_id = wp_insert_post(
235
  array(
@@ -272,6 +274,7 @@ function swpm_save_edit_braintree_buy_now_button_data() {
272
 
273
  if (isset($_REQUEST['swpm_braintree_buy_now_edit_submit'])) {
274
  //This is a Braintree buy now button edit event.
 
275
  $button_id = sanitize_text_field($_REQUEST['button_id']);
276
  $button_id = absint($button_id);
277
  $button_type = sanitize_text_field($_REQUEST['button_type']);
124
  </table>
125
 
126
  <p class="submit">
127
+ <?php wp_nonce_field('swpm_admin_add_edit_braintree_buy_now_btn','swpm_admin_add_edit_braintree_buy_now_btn') ?>
128
  <input type="submit" name="swpm_braintree_buy_now_<?php echo ($is_edit_mode ? 'edit' : 'save'); ?>_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
129
  </p>
130
 
231
  function swpm_save_edit_braintree_buy_now_button_data() {
232
  if (isset($_REQUEST['swpm_braintree_buy_now_save_submit'])) {
233
  //This is a Braintree buy now button save event.
234
+ check_admin_referer( 'swpm_admin_add_edit_braintree_buy_now_btn', 'swpm_admin_add_edit_braintree_buy_now_btn' );
235
 
236
  $button_id = wp_insert_post(
237
  array(
274
 
275
  if (isset($_REQUEST['swpm_braintree_buy_now_edit_submit'])) {
276
  //This is a Braintree buy now button edit event.
277
+ check_admin_referer( 'swpm_admin_add_edit_braintree_buy_now_btn', 'swpm_admin_add_edit_braintree_buy_now_btn' );
278
  $button_id = sanitize_text_field($_REQUEST['button_id']);
279
  $button_id = absint($button_id);
280
  $button_type = sanitize_text_field($_REQUEST['button_type']);
views/payments/payment-gateway/admin_paypal_buy_now_button.php CHANGED
@@ -123,6 +123,7 @@ function swpm_create_new_pp_buy_now_button() {
123
  </table>
124
 
125
  <p class="submit">
 
126
  <input type="submit" name="swpm_pp_buy_now_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
127
  </p>
128
 
@@ -141,6 +142,8 @@ add_action('swpm_create_new_button_process_submission', 'swpm_save_new_pp_buy_no
141
  function swpm_save_new_pp_buy_now_button_data() {
142
  if (isset($_REQUEST['swpm_pp_buy_now_save_submit'])) {
143
  //This is a PayPal buy now button save event. Process the submission.
 
 
144
  //TODO - Do some extra validation check?
145
 
146
  //Save the button data
@@ -318,7 +321,8 @@ function swpm_edit_pp_buy_now_button() {
318
  </table>
319
 
320
  <p class="submit">
321
- <input type="submit" name="swpm_pp_buy_now_edit_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
 
322
  </p>
323
 
324
  </form>
@@ -336,6 +340,8 @@ add_action('swpm_edit_payment_button_process_submission', 'swpm_edit_pp_buy_now_
336
  function swpm_edit_pp_buy_now_button_data() {
337
  if (isset($_REQUEST['swpm_pp_buy_now_edit_submit'])) {
338
  //This is a PayPal buy now button edit event. Process the submission.
 
 
339
 
340
  //Update and Save the edited payment button data
341
  $button_id = sanitize_text_field($_REQUEST['button_id']);
123
  </table>
124
 
125
  <p class="submit">
126
+ <?php wp_nonce_field('swpm_admin_add_edit_pp_buy_now_btn','swpm_admin_create_pp_buy_now_btn') ?>
127
  <input type="submit" name="swpm_pp_buy_now_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
128
  </p>
129
 
142
  function swpm_save_new_pp_buy_now_button_data() {
143
  if (isset($_REQUEST['swpm_pp_buy_now_save_submit'])) {
144
  //This is a PayPal buy now button save event. Process the submission.
145
+ //Check nonce first
146
+ check_admin_referer( 'swpm_admin_add_edit_pp_buy_now_btn', 'swpm_admin_create_pp_buy_now_btn' );
147
  //TODO - Do some extra validation check?
148
 
149
  //Save the button data
321
  </table>
322
 
323
  <p class="submit">
324
+ <?php wp_nonce_field('swpm_admin_add_edit_pp_buy_now_btn','swpm_admin_edit_pp_buy_now_btn') ?>
325
+ <input type="submit" name="swpm_pp_buy_now_edit_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
326
  </p>
327
 
328
  </form>
340
  function swpm_edit_pp_buy_now_button_data() {
341
  if (isset($_REQUEST['swpm_pp_buy_now_edit_submit'])) {
342
  //This is a PayPal buy now button edit event. Process the submission.
343
+ //Check nonce first
344
+ check_admin_referer( 'swpm_admin_add_edit_pp_buy_now_btn', 'swpm_admin_edit_pp_buy_now_btn' );
345
 
346
  //Update and Save the edited payment button data
347
  $button_id = sanitize_text_field($_REQUEST['button_id']);
views/payments/payment-gateway/admin_paypal_smart_checkout_button.php CHANGED
@@ -211,6 +211,7 @@ function render_save_edit_pp_smart_checkout_button_interface($bt_opts, $is_edit_
211
  </table>
212
 
213
  <p class="submit">
 
214
  <input type="submit" name="swpm_pp_smart_checkout_<?php echo ($is_edit_mode ? 'edit' : 'save'); ?>_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
215
  </p>
216
 
@@ -294,6 +295,8 @@ function swpm_save_edit_pp_smart_checkout_button_data() {
294
  if (isset($_REQUEST['swpm_pp_smart_checkout_save_submit'])) {
295
  //This is a PayPal Smart Checkout button save event.
296
 
 
 
297
  $button_id = wp_insert_post(
298
  array(
299
  'post_title' => sanitize_text_field($_REQUEST['button_name']),
@@ -331,6 +334,9 @@ function swpm_save_edit_pp_smart_checkout_button_data() {
331
 
332
  if (isset($_REQUEST['swpm_pp_smart_checkout_edit_submit'])) {
333
  //This is a PayPal Smart Checkout button edit event.
 
 
 
334
  $button_id = sanitize_text_field($_REQUEST['button_id']);
335
  $button_id = absint($button_id);
336
  $button_type = sanitize_text_field($_REQUEST['button_type']);
211
  </table>
212
 
213
  <p class="submit">
214
+ <?php wp_nonce_field('swpm_admin_add_edit_pp_smart_checkout_btn','swpm_admin_add_edit_pp_smart_checkout_btn') ?>
215
  <input type="submit" name="swpm_pp_smart_checkout_<?php echo ($is_edit_mode ? 'edit' : 'save'); ?>_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
216
  </p>
217
 
295
  if (isset($_REQUEST['swpm_pp_smart_checkout_save_submit'])) {
296
  //This is a PayPal Smart Checkout button save event.
297
 
298
+ check_admin_referer( 'swpm_admin_add_edit_pp_smart_checkout_btn', 'swpm_admin_add_edit_pp_smart_checkout_btn' );
299
+
300
  $button_id = wp_insert_post(
301
  array(
302
  'post_title' => sanitize_text_field($_REQUEST['button_name']),
334
 
335
  if (isset($_REQUEST['swpm_pp_smart_checkout_edit_submit'])) {
336
  //This is a PayPal Smart Checkout button edit event.
337
+
338
+ check_admin_referer( 'swpm_admin_add_edit_pp_smart_checkout_btn', 'swpm_admin_add_edit_pp_smart_checkout_btn' );
339
+
340
  $button_id = sanitize_text_field($_REQUEST['button_id']);
341
  $button_id = absint($button_id);
342
  $button_type = sanitize_text_field($_REQUEST['button_type']);
views/payments/payment-gateway/admin_paypal_subscription_button.php CHANGED
@@ -197,7 +197,8 @@ function swpm_create_new_pp_subscription_button() {
197
  </div><!-- end of optional details box -->
198
 
199
  <p class="submit">
200
- <input type="submit" name="swpm_pp_subscription_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
 
201
  </p>
202
 
203
  </form>
@@ -214,6 +215,8 @@ function swpm_save_new_pp_subscription_button_data() {
214
  if (isset($_REQUEST['swpm_pp_subscription_save_submit'])) {
215
  //This is a PayPal subscription button save event. Process the submission.
216
 
 
 
217
  $button_id = wp_insert_post(
218
  array(
219
  'post_title' => sanitize_text_field($_REQUEST['button_name']),
@@ -481,6 +484,7 @@ function swpm_edit_pp_subscription_button() {
481
  </div><!-- end of optional details box -->
482
 
483
  <p class="submit">
 
484
  <input type="submit" name="swpm_pp_subscription_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
485
  </p>
486
 
@@ -497,6 +501,9 @@ add_action('swpm_edit_payment_button_process_submission', 'swpm_edit_pp_subscrip
497
  function swpm_edit_pp_subscription_button_data() {
498
  if (isset($_REQUEST['swpm_pp_subscription_save_submit'])) {
499
  //This is a PayPal subscription button edit event. Process the submission.
 
 
 
500
  //Update and Save the edited payment button data
501
  $button_id = sanitize_text_field($_REQUEST['button_id']);
502
  $button_id = absint($button_id);
197
  </div><!-- end of optional details box -->
198
 
199
  <p class="submit">
200
+ <?php wp_nonce_field('swpm_admin_add_edit_pp_subs_btn','swpm_admin_create_pp_subs_btn') ?>
201
+ <input type="submit" name="swpm_pp_subscription_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
202
  </p>
203
 
204
  </form>
215
  if (isset($_REQUEST['swpm_pp_subscription_save_submit'])) {
216
  //This is a PayPal subscription button save event. Process the submission.
217
 
218
+ check_admin_referer( 'swpm_admin_add_edit_pp_subs_btn', 'swpm_admin_create_pp_subs_btn' );
219
+
220
  $button_id = wp_insert_post(
221
  array(
222
  'post_title' => sanitize_text_field($_REQUEST['button_name']),
484
  </div><!-- end of optional details box -->
485
 
486
  <p class="submit">
487
+ <?php wp_nonce_field('swpm_admin_add_edit_pp_subs_btn','swpm_admin_edit_pp_subs_btn') ?>
488
  <input type="submit" name="swpm_pp_subscription_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
489
  </p>
490
 
501
  function swpm_edit_pp_subscription_button_data() {
502
  if (isset($_REQUEST['swpm_pp_subscription_save_submit'])) {
503
  //This is a PayPal subscription button edit event. Process the submission.
504
+
505
+ check_admin_referer( 'swpm_admin_add_edit_pp_subs_btn', 'swpm_admin_edit_pp_subs_btn' );
506
+
507
  //Update and Save the edited payment button data
508
  $button_id = sanitize_text_field($_REQUEST['button_id']);
509
  $button_id = absint($button_id);
views/payments/payment-gateway/admin_stripe_buy_now_button.php CHANGED
@@ -156,6 +156,7 @@ function swpm_create_new_stripe_buy_now_button() {
156
  </table>
157
 
158
  <p class="submit">
 
159
  <input type="submit" name="swpm_stripe_buy_now_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
160
  </p>
161
 
@@ -174,6 +175,8 @@ add_action('swpm_create_new_button_process_submission', 'swpm_save_new_stripe_bu
174
  function swpm_save_new_stripe_buy_now_button_data() {
175
  if (isset($_REQUEST['swpm_stripe_buy_now_save_submit'])) {
176
  //This is a Stripe buy now button save event. Process the submission.
 
 
177
  //Save the button data
178
  $button_id = wp_insert_post(
179
  array(
@@ -380,7 +383,8 @@ function swpm_edit_stripe_buy_now_button() {
380
  </table>
381
 
382
  <p class="submit">
383
- <input type="submit" name="swpm_stripe_buy_now_edit_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
 
384
  </p>
385
 
386
  </form>
@@ -398,6 +402,7 @@ add_action('swpm_edit_payment_button_process_submission', 'swpm_edit_stripe_buy_
398
  function swpm_edit_stripe_buy_now_button_data() {
399
  if (isset($_REQUEST['swpm_stripe_buy_now_edit_submit'])) {
400
  //This is a Stripe buy now button edit event. Process the submission.
 
401
  //Update and Save the edited payment button data
402
  $button_id = sanitize_text_field($_REQUEST['button_id']);
403
  $button_id = absint($button_id);
156
  </table>
157
 
158
  <p class="submit">
159
+ <?php wp_nonce_field('swpm_admin_add_edit_stripe_buy_now_btn','swpm_admin_create_stripe_buy_now_btn') ?>
160
  <input type="submit" name="swpm_stripe_buy_now_save_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
161
  </p>
162
 
175
  function swpm_save_new_stripe_buy_now_button_data() {
176
  if (isset($_REQUEST['swpm_stripe_buy_now_save_submit'])) {
177
  //This is a Stripe buy now button save event. Process the submission.
178
+ check_admin_referer( 'swpm_admin_add_edit_stripe_buy_now_btn', 'swpm_admin_create_stripe_buy_now_btn' );
179
+
180
  //Save the button data
181
  $button_id = wp_insert_post(
182
  array(
383
  </table>
384
 
385
  <p class="submit">
386
+ <?php wp_nonce_field('swpm_admin_add_edit_stripe_buy_now_btn','swpm_admin_edit_stripe_buy_now_btn') ?>
387
+ <input type="submit" name="swpm_stripe_buy_now_edit_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
388
  </p>
389
 
390
  </form>
402
  function swpm_edit_stripe_buy_now_button_data() {
403
  if (isset($_REQUEST['swpm_stripe_buy_now_edit_submit'])) {
404
  //This is a Stripe buy now button edit event. Process the submission.
405
+ check_admin_referer( 'swpm_admin_add_edit_stripe_buy_now_btn', 'swpm_admin_edit_stripe_buy_now_btn' );
406
  //Update and Save the edited payment button data
407
  $button_id = sanitize_text_field($_REQUEST['button_id']);
408
  $button_id = absint($button_id);
views/payments/payment-gateway/admin_stripe_subscription_button.php CHANGED
@@ -208,8 +208,8 @@ function swpm_render_new_edit_stripe_subscription_button_interface($opts, $edit
208
  </div><!-- end of optional details box -->
209
 
210
  <p class="submit">
211
- <input type="submit" name="swpm_stripe_subscription_<?php echo ($edit ? 'edit' : 'save');
212
- ?>_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
213
  </p>
214
 
215
  </form>
@@ -255,6 +255,7 @@ function swpm_save_edit_stripe_subscription_button_data() {
255
  }
256
  if (isset($edit)) {
257
  //This is a Stripe subscription button save or edit event. Process the submission.
 
258
  if ($edit) {
259
  $button_id = sanitize_text_field($_REQUEST['button_id']);
260
  $button_id = absint($button_id);
208
  </div><!-- end of optional details box -->
209
 
210
  <p class="submit">
211
+ <?php wp_nonce_field('swpm_admin_add_edit_stripe_subs_btn','swpm_admin_add_edit_stripe_subs_btn') ?>
212
+ <input type="submit" name="swpm_stripe_subscription_<?php echo ($edit ? 'edit' : 'save') ?>_submit" class="button-primary" value="<?php echo SwpmUtils::_('Save Payment Data'); ?>" >
213
  </p>
214
 
215
  </form>
255
  }
256
  if (isset($edit)) {
257
  //This is a Stripe subscription button save or edit event. Process the submission.
258
+ check_admin_referer( 'swpm_admin_add_edit_stripe_subs_btn', 'swpm_admin_add_edit_stripe_subs_btn' );
259
  if ($edit) {
260
  $button_id = sanitize_text_field($_REQUEST['button_id']);
261
  $button_id = absint($button_id);
views/payments/payment-gateway/braintree_button_shortcode_view.php CHANGED
@@ -5,7 +5,8 @@
5
  * *********************************************** */
6
  add_filter('swpm_payment_button_shortcode_for_braintree_buy_now', 'swpm_render_braintree_buy_now_button_sc_output', 10, 2);
7
 
8
- function swpm_render_braintree_buy_now_button_sc_output($button_code, $args) {
 
9
 
10
  $button_id = isset($args['id']) ? $args['id'] : '';
11
  if (empty($button_id)) {
@@ -13,13 +14,12 @@ function swpm_render_braintree_buy_now_button_sc_output($button_code, $args) {
13
  }
14
 
15
  //Get class option for button styling, set Stripe's default if none specified
16
- $class = isset($args['class']) ? $args['class'] : 'stripe-button-el';
17
 
18
  //Check new_window parameter
19
  $window_target = isset($args['new_window']) ? 'target="_blank"' : '';
20
  $button_text = (isset($args['button_text'])) ? $args['button_text'] : SwpmUtils::_('Buy Now');
21
- $billing_address = isset($args['billing_address']) ? '1' : '';
22
- ; //By default don't show the billing address in the checkout form.
23
  $item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
24
 
25
  $settings = SwpmSettings::get_instance();
@@ -38,9 +38,10 @@ function swpm_render_braintree_buy_now_button_sc_output($button_code, $args) {
38
  return '<p class="swpm-red-box">Error! The payment amount value of the button must be a numeric number. Example: 49.50 </p>';
39
  }
40
  $payment_amount = round($payment_amount, 2); //round the amount to 2 decimal place.
41
- $payment_amount_formatted = number_format($payment_amount, 2, '.', '');
42
  $payment_currency = get_post_meta($button_id, 'currency_code', true);
43
 
 
 
44
  //Return, cancel, notifiy URLs
45
  $return_url = get_post_meta($button_id, 'return_url', true);
46
  if (empty($return_url)) {
@@ -100,7 +101,13 @@ function swpm_render_braintree_buy_now_button_sc_output($button_code, $args) {
100
  $output .= '<p><input type="text" name="first_name" placeholder="First Name" value="' . (isset($member_first_name) ? $member_first_name : '') . '" required></p>';
101
  $output .= '<p><input type="text" name="last_name" placeholder="Last Name" value="' . (isset($member_last_name) ? $member_last_name : '') . '" required></p>';
102
  $output .= '<p><input type="text" name="member_email" placeholder="Email" value="' . (isset($member_email) ? $member_email : '') . '" required></p>';
103
- $output .= '<div id="swpm-braintree-amount-container-' . $uniqid . '" class="swpm-braintree-amount-container"><p>' . $payment_amount_formatted . ' ' . $payment_currency . '</p></div>';
 
 
 
 
 
 
104
  $output .= '</div>';
105
  $output .= '<button id="swpm-show-form-btn-' . $uniqid . '" class="swpm-braintree-pay-now-button swpm-braintree-show-form-button-' . $button_id . ' ' . $class . '" type="button" onclick="swpm_braintree_show_form_' . $uniqid . '();"><span>' . $button_text . '</span></button>';
106
  $output .= '<button id="swpm-submit-form-btn-' . $uniqid . '" class="swpm-braintree-pay-now-button swpm-braintree-submit-form-button-' . $button_id . ' ' . $class . '" type="submit" style="display: none;"><span>' . $button_text . '</span></button>';
@@ -113,19 +120,27 @@ function swpm_render_braintree_buy_now_button_sc_output($button_code, $args) {
113
  document.getElementById('swpm-submit-form-btn-_uniqid_').style.display = "block";
114
  document.getElementById('swpm-form-cont-_uniqid_').style.display = "block";
115
  var clientToken = '_token_';
116
- braintree.setup(clientToken, 'dropin', {container: 'swpm-form-cont-_uniqid_',
117
- onReady: function (obj) {
 
118
  document.getElementById('swpm-braintree-additional-fields-container-_uniqid_').style.display = "block";
119
  },
120
- onPaymentMethodReceived: function (obj) {
121
  document.getElementById('swpm-submit-form-btn-_uniqid_').disabled = true;
122
  var client = new braintree.api.Client({
123
  clientToken: clientToken
124
  });
 
 
 
 
 
 
 
125
  client.verify3DS({
126
- amount: '_amount_',
127
  creditCard: obj.nonce
128
- }, function (err, response) {
129
  if (!err) {
130
  document.getElementById('swpm-braintree-nonce-field-_uniqid_').value = response.nonce;
131
  document.getElementById('swpm-braintree-payment-form-_uniqid_').submit();
5
  * *********************************************** */
6
  add_filter('swpm_payment_button_shortcode_for_braintree_buy_now', 'swpm_render_braintree_buy_now_button_sc_output', 10, 2);
7
 
8
+ function swpm_render_braintree_buy_now_button_sc_output($button_code, $args)
9
+ {
10
 
11
  $button_id = isset($args['id']) ? $args['id'] : '';
12
  if (empty($button_id)) {
14
  }
15
 
16
  //Get class option for button styling, set Stripe's default if none specified
17
+ $class = isset($args['class']) ? $args['class'] : '';
18
 
19
  //Check new_window parameter
20
  $window_target = isset($args['new_window']) ? 'target="_blank"' : '';
21
  $button_text = (isset($args['button_text'])) ? $args['button_text'] : SwpmUtils::_('Buy Now');
22
+ $billing_address = isset($args['billing_address']) ? '1' : '';; //By default don't show the billing address in the checkout form.
 
23
  $item_logo = ''; //Can be used to show an item logo or thumbnail in the checkout form.
24
 
25
  $settings = SwpmSettings::get_instance();
38
  return '<p class="swpm-red-box">Error! The payment amount value of the button must be a numeric number. Example: 49.50 </p>';
39
  }
40
  $payment_amount = round($payment_amount, 2); //round the amount to 2 decimal place.
 
41
  $payment_currency = get_post_meta($button_id, 'currency_code', true);
42
 
43
+ $payment_amount_formatted = SwpmMiscUtils::format_money($payment_amount,$payment_currency);
44
+
45
  //Return, cancel, notifiy URLs
46
  $return_url = get_post_meta($button_id, 'return_url', true);
47
  if (empty($return_url)) {
101
  $output .= '<p><input type="text" name="first_name" placeholder="First Name" value="' . (isset($member_first_name) ? $member_first_name : '') . '" required></p>';
102
  $output .= '<p><input type="text" name="last_name" placeholder="Last Name" value="' . (isset($member_last_name) ? $member_last_name : '') . '" required></p>';
103
  $output .= '<p><input type="text" name="member_email" placeholder="Email" value="' . (isset($member_email) ? $member_email : '') . '" required></p>';
104
+ //apply filter to output additional form fields
105
+ $coupon_input = '';
106
+ $coupon_input = apply_filters('swpm_payment_form_additional_fields', $coupon_input, $button_id, $uniqid);
107
+ if (!empty($coupon_input)) {
108
+ $output .= $coupon_input;
109
+ }
110
+ $output .= '<div id="swpm-braintree-amount-container-' . $uniqid . '" class="swpm-braintree-amount-container"><p>' . $payment_amount_formatted.'</p></div>';
111
  $output .= '</div>';
112
  $output .= '<button id="swpm-show-form-btn-' . $uniqid . '" class="swpm-braintree-pay-now-button swpm-braintree-show-form-button-' . $button_id . ' ' . $class . '" type="button" onclick="swpm_braintree_show_form_' . $uniqid . '();"><span>' . $button_text . '</span></button>';
113
  $output .= '<button id="swpm-submit-form-btn-' . $uniqid . '" class="swpm-braintree-pay-now-button swpm-braintree-submit-form-button-' . $button_id . ' ' . $class . '" type="submit" style="display: none;"><span>' . $button_text . '</span></button>';
120
  document.getElementById('swpm-submit-form-btn-_uniqid_').style.display = "block";
121
  document.getElementById('swpm-form-cont-_uniqid_').style.display = "block";
122
  var clientToken = '_token_';
123
+ braintree.setup(clientToken, 'dropin', {
124
+ container: 'swpm-form-cont-_uniqid_',
125
+ onReady: function(obj) {
126
  document.getElementById('swpm-braintree-additional-fields-container-_uniqid_').style.display = "block";
127
  },
128
+ onPaymentMethodReceived: function(obj) {
129
  document.getElementById('swpm-submit-form-btn-_uniqid_').disabled = true;
130
  var client = new braintree.api.Client({
131
  clientToken: clientToken
132
  });
133
+ if (obj.type !== 'CreditCard') {
134
+ document.getElementById('swpm-braintree-nonce-field-_uniqid_').value = obj.nonce;
135
+ document.getElementById('swpm-braintree-payment-form-_uniqid_').submit();
136
+ return true;
137
+ }
138
+ var form = document.getElementById('swpm-braintree-payment-form-_uniqid_');
139
+ var amount = form.querySelector('[name="item_price"]').value;
140
  client.verify3DS({
141
+ amount: amount,
142
  creditCard: obj.nonce
143
+ }, function(err, response) {
144
  if (!err) {
145
  document.getElementById('swpm-braintree-nonce-field-_uniqid_').value = response.nonce;
146
  document.getElementById('swpm-braintree-payment-form-_uniqid_').submit();
views/payments/payment-gateway/paypal_button_shortcode_view.php CHANGED
@@ -54,12 +54,21 @@ function swpm_render_pp_buy_now_button_sc_output($button_code, $args) {
54
  /* === PayPal Buy Now Button Form === */
55
  $output = '';
56
  $output .= '<div class="swpm-button-wrapper swpm-pp-buy-now-wrapper">';
 
 
 
 
 
 
 
57
  if ($sandbox_enabled) {
58
- $output .= '<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" ' . $window_target . '>';
59
  } else {
60
- $output .= '<form action="https://www.paypal.com/cgi-bin/webscr" method="post" ' . $window_target . '>';
61
  }
62
 
 
 
63
  $output .= '<input type="hidden" name="cmd" value="_xclick" />';
64
  $output .= '<input type="hidden" name="charset" value="utf-8" />';
65
  $output .= '<input type="hidden" name="bn" value="TipsandTricks_SP" />';
54
  /* === PayPal Buy Now Button Form === */
55
  $output = '';
56
  $output .= '<div class="swpm-button-wrapper swpm-pp-buy-now-wrapper">';
57
+ $uniqid=uniqid();
58
+ //apply filter to output additional form fields
59
+ $coupon_input='';
60
+ $coupon_input = apply_filters('swpm_payment_form_additional_fields',$coupon_input,$button_id,$uniqid);
61
+ if (!empty($coupon_input)) {
62
+ $output.=$coupon_input;
63
+ }
64
  if ($sandbox_enabled) {
65
+ $action_url='https://www.sandbox.paypal.com/cgi-bin/webscr';
66
  } else {
67
+ $action_url='https://www.paypal.com/cgi-bin/webscr';
68
  }
69
 
70
+ $output.=sprintf('<form id="swpm-paypal-payment-form-%s" action="%s" method="post" %s>',$uniqid,$action_url,$window_target);
71
+
72
  $output .= '<input type="hidden" name="cmd" value="_xclick" />';
73
  $output .= '<input type="hidden" name="charset" value="utf-8" />';
74
  $output .= '<input type="hidden" name="bn" value="TipsandTricks_SP" />';
views/payments/payment-gateway/paypal_smart_checkout_button_shortcode_view.php CHANGED
@@ -96,7 +96,18 @@ function swpm_render_pp_smart_checkout_button_sc_output($button_code, $args) {
96
  }
97
  ?>
98
  <div class="swpm-button-wrapper">
 
 
 
 
 
 
 
 
 
99
  <div class="swpm-pp-smart-checkout-btn-<?php echo $uniqid; ?>"></div>
 
 
100
  <script>
101
  paypal.Button.render({
102
 
@@ -122,10 +133,11 @@ function swpm_render_pp_smart_checkout_button_sc_output($button_code, $args) {
122
  onClick: function () {
123
  },
124
  payment: function (data, actions) {
 
125
  return actions.payment.create({
126
  payment: {
127
  transactions: [{
128
- amount: {total: '<?php echo $payment_amount; ?>', currency: '<?php echo $payment_currency; ?>'}
129
  }]
130
  },
131
  meta: {partner_attribution_id: 'TipsandTricks_SP'}
@@ -142,11 +154,12 @@ function swpm_render_pp_smart_checkout_button_sc_output($button_code, $args) {
142
  paymentBtnCont.hide();
143
  paymentBtnSpinner.css('display', 'inline-block');
144
  return actions.payment.execute().then(function (data) {
145
- data.custom_field = '<?php echo $custom_field_value; ?>';
 
146
  data.button_id = '<?php echo esc_js($button_id); ?>';
147
  data.item_name = '<?php echo esc_js($item_name); ?>';
148
  jQuery.post('<?php echo esc_js(admin_url('admin-ajax.php')); ?>',
149
- {action: 'swpm_process_pp_smart_checkout', swpm_pp_smart_checkout_payment_data: data})
150
  .done(function (result) {
151
  if (result.success) {
152
  window.location.href = '<?php echo esc_js($return_url); ?>';
96
  }
97
  ?>
98
  <div class="swpm-button-wrapper">
99
+ <?php
100
+ //apply filter to output additional form fields
101
+ $coupon_input = '';
102
+ $coupon_input = apply_filters('swpm_payment_form_additional_fields', $coupon_input, $button_id, $uniqid);
103
+ if (!empty($coupon_input)) {
104
+ echo $coupon_input;
105
+ }
106
+ $nonce=wp_create_nonce( 'swpm-pp-smart-checkout-ajax-nonce-'.$uniqid );
107
+ ?>
108
  <div class="swpm-pp-smart-checkout-btn-<?php echo $uniqid; ?>"></div>
109
+ <input type="hidden" id="swpm-pp-smart-checkout-amount-<?php echo $uniqid; ?>" name="item_price" value="<?php echo $payment_amount;?>">
110
+ <input type="hidden" id="swpm-pp-smart-checkout-custom-<?php echo $uniqid; ?>" name="custom" value="<?php echo $custom_field_value; ?>">
111
  <script>
112
  paypal.Button.render({
113
 
133
  onClick: function () {
134
  },
135
  payment: function (data, actions) {
136
+ var amount = document.getElementById('swpm-pp-smart-checkout-amount-<?php echo $uniqid; ?>').value;
137
  return actions.payment.create({
138
  payment: {
139
  transactions: [{
140
+ amount: {total: amount, currency: '<?php echo $payment_currency; ?>'}
141
  }]
142
  },
143
  meta: {partner_attribution_id: 'TipsandTricks_SP'}
154
  paymentBtnCont.hide();
155
  paymentBtnSpinner.css('display', 'inline-block');
156
  return actions.payment.execute().then(function (data) {
157
+ var custom = document.getElementById('swpm-pp-smart-checkout-custom-<?php echo $uniqid; ?>').value;
158
+ data.custom_field = custom;
159
  data.button_id = '<?php echo esc_js($button_id); ?>';
160
  data.item_name = '<?php echo esc_js($item_name); ?>';
161
  jQuery.post('<?php echo esc_js(admin_url('admin-ajax.php')); ?>',
162
+ {action: 'swpm_process_pp_smart_checkout', swpm_pp_smart_checkout_payment_data: data, nonce: '<?php echo $nonce?>', uniqid: '<?php echo $uniqid?>', custom: custom})
163
  .done(function (result) {
164
  if (result.success) {
165
  window.location.href = '<?php echo esc_js($return_url); ?>';
views/payments/payment-gateway/stripe_button_shortcode_view.php CHANGED
@@ -45,6 +45,7 @@ function swpm_render_stripe_buy_now_button_sc_output($button_code, $args) {
45
  } else {
46
  $price_in_cents = $payment_amount * 100; //The amount (in cents). This value is passed to Stripe API.
47
  }
 
48
  //Return, cancel, notifiy URLs
49
  $notify_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL . '/?swpm_process_stripe_buy_now=1'; //We are going to use it to do post payment processing.
50
  //$button_image_url = get_post_meta($button_id, 'button_image_url', true);//Stripe doesn't currenty support button image for their standard checkout.
@@ -86,17 +87,19 @@ function swpm_render_stripe_buy_now_button_sc_output($button_code, $args) {
86
  }
87
  }
88
 
 
 
89
  /* === Stripe Buy Now Button Form === */
90
  $output = '';
91
  $output .= '<div class="swpm-button-wrapper swpm-stripe-buy-now-wrapper">';
92
- $output .= "<form action='" . $notify_url . "' METHOD='POST'> ";
93
  $output .= "<div style='display: none !important'>";
94
  $output .= "<script src='https://checkout.stripe.com/checkout.js' class='stripe-button'
95
  data-key='" . $publishable_key . "'
96
  data-panel-label='Pay'
97
  data-amount='{$price_in_cents}'
98
  data-name='{$item_name}'";
99
- $output .= "data-description='{$payment_amount} {$payment_currency}'";
100
  $output .= "data-locale='auto'";
101
  $output .= "data-label='{$button_text}'"; //Stripe doesn't currenty support button image for their standard checkout.
102
  $output .= "data-currency='{$payment_currency}'";
@@ -110,6 +113,13 @@ function swpm_render_stripe_buy_now_button_sc_output($button_code, $args) {
110
  $output .= "></script>";
111
  $output .= '</div>';
112
 
 
 
 
 
 
 
 
113
  $button_image_url = get_post_meta($button_id, 'button_image_url', true);
114
  if (!empty($button_image_url)) {
115
  $output .= '<input type="image" src="' . $button_image_url . '" class="' . $class . '" alt="' . $button_text . '" title="' . $button_text . '" />';
45
  } else {
46
  $price_in_cents = $payment_amount * 100; //The amount (in cents). This value is passed to Stripe API.
47
  }
48
+ $payment_amount_formatted=SwpmMiscUtils::format_money($payment_amount,$payment_currency);
49
  //Return, cancel, notifiy URLs
50
  $notify_url = SIMPLE_WP_MEMBERSHIP_SITE_HOME_URL . '/?swpm_process_stripe_buy_now=1'; //We are going to use it to do post payment processing.
51
  //$button_image_url = get_post_meta($button_id, 'button_image_url', true);//Stripe doesn't currenty support button image for their standard checkout.
87
  }
88
  }
89
 
90
+ $uniqid=uniqid();
91
+
92
  /* === Stripe Buy Now Button Form === */
93
  $output = '';
94
  $output .= '<div class="swpm-button-wrapper swpm-stripe-buy-now-wrapper">';
95
+ $output .= "<form id='swpm-stripe-payment-form-".$uniqid."' action='" . $notify_url . "' METHOD='POST'> ";
96
  $output .= "<div style='display: none !important'>";
97
  $output .= "<script src='https://checkout.stripe.com/checkout.js' class='stripe-button'
98
  data-key='" . $publishable_key . "'
99
  data-panel-label='Pay'
100
  data-amount='{$price_in_cents}'
101
  data-name='{$item_name}'";
102
+ $output .= "data-description='{$payment_amount_formatted}'";
103
  $output .= "data-locale='auto'";
104
  $output .= "data-label='{$button_text}'"; //Stripe doesn't currenty support button image for their standard checkout.
105
  $output .= "data-currency='{$payment_currency}'";
113
  $output .= "></script>";
114
  $output .= '</div>';
115
 
116
+ //apply filter to output additional form fields
117
+ $coupon_input='';
118
+ $coupon_input = apply_filters('swpm_payment_form_additional_fields',$coupon_input,$button_id,$uniqid);
119
+ if (!empty($coupon_input)) {
120
+ $output.=$coupon_input;
121
+ }
122
+
123
  $button_image_url = get_post_meta($button_id, 'button_image_url', true);
124
  if (!empty($button_image_url)) {
125
  $output .= '<input type="image" src="' . $button_image_url . '" class="' . $class . '" alt="' . $button_text . '" title="' . $button_text . '" />';