myCRED - Version 1.0

Version Description

  • Official release.
Download this release

Release Info

Developer designbymerovingi
Plugin Icon 128x128 myCRED
Version 1.0
Comparing to
See all releases

Version 1.0

Files changed (80) hide show
  1. abstracts/index.php +3 -0
  2. abstracts/mycred-abstract-hook.php +183 -0
  3. abstracts/mycred-abstract-module.php +440 -0
  4. addons/buddypress/hooks/bp-galleries.php +91 -0
  5. addons/buddypress/hooks/bp-groups.php +590 -0
  6. addons/buddypress/hooks/bp-links.php +233 -0
  7. addons/buddypress/hooks/bp-press.php +135 -0
  8. addons/buddypress/hooks/bp-profile.php +422 -0
  9. addons/buddypress/hooks/index.php +3 -0
  10. addons/buddypress/index.php +3 -0
  11. addons/buddypress/myCRED-addon-buddypress.php +462 -0
  12. addons/buy-creds/abstracts/index.php +3 -0
  13. addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php +932 -0
  14. addons/buy-creds/cacert.pem +3895 -0
  15. addons/buy-creds/gateways/index.php +3 -0
  16. addons/buy-creds/gateways/netbilling.php +698 -0
  17. addons/buy-creds/gateways/paypal-standard.php +376 -0
  18. addons/buy-creds/gateways/skrill.php +382 -0
  19. addons/buy-creds/images/index.php +3 -0
  20. addons/buy-creds/images/loading.gif +0 -0
  21. addons/buy-creds/images/netbilling.png +0 -0
  22. addons/buy-creds/images/payza.png +0 -0
  23. addons/buy-creds/images/skrill.png +0 -0
  24. addons/buy-creds/index.php +3 -0
  25. addons/buy-creds/myCRED-addon-buy-creds.php +772 -0
  26. addons/gateway/carts/index.php +3 -0
  27. addons/gateway/carts/mycred-woocommerce.php +401 -0
  28. addons/gateway/index.php +3 -0
  29. addons/gateway/myCRED-addon-gateway.php +19 -0
  30. addons/import/includes/File-CSV-DataSource.php +834 -0
  31. addons/import/includes/index.php +3 -0
  32. addons/import/index.php +3 -0
  33. addons/import/myCRED-addon-import.php +774 -0
  34. addons/index.php +3 -0
  35. addons/sell-content/css/edit.css +12 -0
  36. addons/sell-content/css/index.php +3 -0
  37. addons/sell-content/index.php +3 -0
  38. addons/sell-content/myCRED-addon-sell-content.php +700 -0
  39. addons/transfer/css/index.php +3 -0
  40. addons/transfer/css/transfer.css +34 -0
  41. addons/transfer/index.php +3 -0
  42. addons/transfer/js/index.php +3 -0
  43. addons/transfer/js/transfer.js +129 -0
  44. addons/transfer/myCRED-addon-transfer.php +827 -0
  45. assets/css/admin.css +86 -0
  46. assets/css/index.php +3 -0
  47. assets/css/widget.css +15 -0
  48. assets/images/cred-icon16.png +0 -0
  49. assets/images/cred-icon32.png +0 -0
  50. assets/images/index.php +3 -0
  51. assets/images/logo-menu.png +0 -0
  52. assets/index.php +3 -0
  53. assets/js/accordion.js +14 -0
  54. assets/js/index.php +3 -0
  55. assets/js/widget.js +5 -0
  56. assets/screenshot-1.png +0 -0
  57. assets/screenshot-2.png +0 -0
  58. assets/screenshot-3.png +0 -0
  59. assets/screenshot-4.png +0 -0
  60. assets/screenshot-5.png +0 -0
  61. includes/index.php +3 -0
  62. includes/mycred-admin.php +205 -0
  63. includes/mycred-functions.php +941 -0
  64. includes/mycred-install.php +647 -0
  65. includes/mycred-network.php +199 -0
  66. includes/mycred-protect.php +95 -0
  67. includes/mycred-rankings.php +286 -0
  68. includes/mycred-widgets.php +375 -0
  69. index.php +3 -0
  70. lang/index.php +3 -0
  71. lang/mycred-en_US.mo +0 -0
  72. lang/mycred-en_US.po +3425 -0
  73. modules/index.php +3 -0
  74. modules/mycred-module-addons.php +336 -0
  75. modules/mycred-module-general.php +223 -0
  76. modules/mycred-module-help.php +220 -0
  77. modules/mycred-module-hooks.php +1103 -0
  78. modules/mycred-module-log.php +841 -0
  79. mycred.php +536 -0
  80. readme.txt +112 -0
abstracts/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
abstracts/mycred-abstract-hook.php ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Hook class
5
+ * @see http://mycred.merovingi.com/classes/mycred_hook/
6
+ * @since 0.1
7
+ * @version 1.0
8
+ */
9
+ if ( !class_exists( 'myCRED_Hook' ) ) {
10
+ abstract class myCRED_Hook {
11
+
12
+ // Hook ID
13
+ public $id;
14
+
15
+ // myCRED_Settings Class
16
+ public $core;
17
+
18
+ // Hook Prefs
19
+ public $prefs = false;
20
+
21
+ /**
22
+ * Construct
23
+ */
24
+ function __construct( $args = array(), $hook_prefs = NULL ) {
25
+ if ( !empty( $args ) ) {
26
+ foreach ( $args as $key => $value ) {
27
+ $this->$key = $value;
28
+ }
29
+ }
30
+ if ( $hook_prefs !== NULL ) {
31
+ // Assign prefs if set
32
+ if ( isset( $hook_prefs[$this->id] ) )
33
+ $this->prefs = $hook_prefs[$this->id];
34
+
35
+ // Apply defaults (if needed)
36
+ if ( empty( $this->prefs ) || $this->prefs === false )
37
+ $this->prefs = $this->defaults;
38
+ }
39
+ $this->core = mycred_get_settings();
40
+ }
41
+
42
+ /**
43
+ * Run
44
+ * Must be over-ridden by sub-class!
45
+ * @since 0.1
46
+ * @version 1.0
47
+ */
48
+ function run() {
49
+ wp_die( 'function myCRED_Hook::run() must be over-ridden in a sub-class.' );
50
+ }
51
+
52
+ /**
53
+ * Preferences
54
+ * @since 0.1
55
+ * @version 1.0
56
+ */
57
+ function preferences() {
58
+ echo '<p>' . __( 'This Hook does no settings' ) . '</p>';
59
+ }
60
+
61
+ /**
62
+ * Sanitise Preference for Registration Hook
63
+ * @since 0.1
64
+ * @version 1.0
65
+ */
66
+ function sanitise_preferences( $data ) {
67
+ return $data;
68
+ }
69
+
70
+ /**
71
+ * Get Field Name
72
+ * Returns the field name for the current hook
73
+ * @since 0.1
74
+ * @version 1.0
75
+ */
76
+ function field_name( $field = '' ) {
77
+ if ( is_array( $field ) ) {
78
+ $array = array();
79
+ foreach ( $field as $parent => $child ) {
80
+ if ( !is_numeric( $parent ) )
81
+ $array[] = $parent;
82
+
83
+ if ( !empty( $child ) && !is_array( $child ) )
84
+ $array[] = $child;
85
+ }
86
+ $field = '[' . implode( '][', $array ) . ']';
87
+ }
88
+ else {
89
+ $field = '[' . $field . ']';
90
+ }
91
+ return 'mycred_pref_hooks[hook_prefs][' . $this->id . ']' . $field;
92
+ }
93
+
94
+ /**
95
+ * Get Field ID
96
+ * Returns the field id for the current hook
97
+ * @since 0.1
98
+ * @version 1.0
99
+ */
100
+ function field_id( $field = '' ) {
101
+ if ( is_array( $field ) ) {
102
+ $array = array();
103
+ foreach ( $field as $parent => $child ) {
104
+ if ( !is_numeric( $parent ) )
105
+ $array[] = str_replace( '_', '-', $parent );
106
+
107
+ if ( !empty( $child ) && !is_array( $child ) )
108
+ $array[] = str_replace( '_', '-', $child );
109
+ }
110
+ $field = implode( '-', $array );
111
+ }
112
+ else {
113
+ $field = str_replace( '_', '-', $field );
114
+ }
115
+ return 'mycred-hook-prefs-' . str_replace( '_', '-', $this->id ) . '-' . $field;
116
+ }
117
+
118
+ /**
119
+ * Impose Limits Dropdown
120
+ * @since 0.1
121
+ * @version 1.0
122
+ */
123
+ function impose_limits_dropdown( $pref_id = '' ) {
124
+ $limits = array(
125
+ '' => __( 'No limit', 'mycred' ),
126
+ 'twentyfour' => __( 'Once every 24 hours', 'mycred' ),
127
+ 'twelve' => __( 'Once every 12 hours', 'mycred' ),
128
+ 'sevendays' => __( 'Once every 7 days', 'mycred' ),
129
+ 'daily' => __( 'Once per day (reset at midnight)', 'mycred' )
130
+ );
131
+ $limits = apply_filters( 'mycred_hook_impose_limits', $limits );
132
+
133
+ echo '<select name="' . $this->field_name( $pref_id ) . '" id="' . $this->field_id( $pref_id ) . '">';
134
+ echo '<option value="">' . __( 'Select', 'mycred' ) . '</option>';
135
+ foreach ( $limits as $value => $description ) {
136
+ echo '<option value="' . $value . '"';
137
+ if ( $this->prefs[$pref_id] == $value ) echo ' selected="selected"';
138
+ echo '>' . $description . '</option>';
139
+ }
140
+ echo '</select>';
141
+ }
142
+
143
+ /**
144
+ * Has Entry
145
+ * Checks to see if a given action with reference ID and user ID exists in the log database.
146
+ * @param $action (string) required reference
147
+ * @param $ref_id (int) optional reference id
148
+ * @param $user_id (int) optional user id
149
+ * @since 0.1
150
+ * @version 1.0
151
+ */
152
+ function has_entry( $action = '', $ref_id = '', $user_id = '' ) {
153
+ global $wpdb;
154
+
155
+ $where = $prep = array();
156
+ if ( !empty( $action ) ) {
157
+ $where[] = 'ref = %s';
158
+ $prep[] = $action;
159
+ }
160
+
161
+ if ( !empty( $ref_id ) ) {
162
+ $where[] = 'ref_id = %d';
163
+ $prep[] = $ref_id;
164
+ }
165
+
166
+ if ( !empty( $user_id ) ) {
167
+ $where[] = 'user_id = %d';
168
+ $prep[] = abs( $user_id );
169
+ }
170
+
171
+ $where = implode( ' AND ', $where );
172
+
173
+ if ( !empty( $where ) ) {
174
+ $sql = "SELECT * FROM " . $wpdb->prefix . 'myCRED_log' . " WHERE $where";
175
+ $wpdb->get_results( $wpdb->prepare( $sql, $prep ) );
176
+ if ( $wpdb->num_rows > 0 ) return true;
177
+ }
178
+
179
+ return false;
180
+ }
181
+ }
182
+ }
183
+ ?>
abstracts/mycred-abstract-module.php ADDED
@@ -0,0 +1,440 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Module class
5
+ * @see http://mycred.merovingi.com/classes/mycred_module/
6
+ * @since 0.1
7
+ * @version 1.0
8
+ */
9
+ if ( !class_exists( 'myCRED_Module' ) ) {
10
+ abstract class myCRED_Module {
11
+
12
+ // Module ID (unique)
13
+ public $module_id;
14
+
15
+ // Core settings & functions
16
+ public $core;
17
+
18
+ // Module name (string)
19
+ public $module_name;
20
+
21
+ // Option ID (string|array)
22
+ public $option_id;
23
+
24
+ // Labels (array)
25
+ public $labels;
26
+
27
+ // Register (bool)
28
+ public $register;
29
+
30
+ // Screen ID (string)
31
+ public $screen_id;
32
+
33
+ // Menu Position (int)
34
+ public $menu_pos;
35
+
36
+ /**
37
+ * Construct
38
+ */
39
+ function __construct( $module_id = '', $args = array() ) {
40
+ // Module ID is required
41
+ if ( empty( $module_id ) )
42
+ wp_die( __( 'myCRED_Module() Error. A Module ID is required!', 'mycred' ) );
43
+
44
+ $this->module_id = $module_id;
45
+ $this->core = mycred_get_settings();
46
+
47
+ // Default arguments
48
+ $defaults = array(
49
+ 'module_name' => '',
50
+ 'option_id' => '',
51
+ 'defaults' => array(),
52
+ 'labels' => array(
53
+ 'menu' => '',
54
+ 'page_title' => ''
55
+ ),
56
+ 'register' => true,
57
+ 'screen_id' => '',
58
+ 'add_to_core' => false,
59
+ 'accordion' => false,
60
+ 'cap' => 'plugin',
61
+ 'menu_pos' => 10
62
+ );
63
+ $args = wp_parse_args( $args, $defaults );
64
+
65
+ $this->module_name = $args['module_name'];
66
+ $this->option_id = $args['option_id'];
67
+ $this->labels = $args['labels'];
68
+ $this->register = $args['register'];
69
+ $this->screen_id = $args['screen_id'];
70
+
71
+ $this->add_to_core = $args['add_to_core'];
72
+ $this->accordion = $args['accordion'];
73
+ $this->cap = $args['cap'];
74
+ $this->menu_pos = $args['menu_pos'];
75
+
76
+ $this->set_settings( $args['defaults'] );
77
+ unset( $args );
78
+ }
79
+
80
+ /**
81
+ * Set Settings
82
+ * @since 0.1
83
+ * @version 1.0
84
+ */
85
+ function set_settings( $defaults ) {
86
+ $module = $this->module_name;
87
+
88
+ // Reqest not to register any settings
89
+ if ( $this->register === false ) {
90
+ // If settings does not exist apply defaults
91
+ if ( !isset( $this->core->$module ) )
92
+ $this->$module = $defaults;
93
+ // Else append settings
94
+ else
95
+ $this->$module = $this->core->$module;
96
+ }
97
+ // Request to register settings
98
+ else {
99
+ // Option IDs must be provided
100
+ if ( !empty( $this->option_id ) ) {
101
+ // Array = more then one
102
+ if ( is_array( $this->option_id ) ) {
103
+ // General settings needs not to be loaded
104
+ if ( array_key_exists( 'mycred_pref_core', $this->option_id ) ) {
105
+ $this->$module = $this->core;
106
+ }
107
+ // Loop and grab
108
+ foreach ( $this->option_id as $option_id => $option_name ) {
109
+ if ( mycred_overwrite() === false )
110
+ $settings = get_option( $option_id );
111
+ else
112
+ $settings = get_blog_option( 1, $option_id );
113
+
114
+ if ( $settings === false && array_key_exists( $option_id, $defaults ) )
115
+ $this->$module[$option_name] = $defaults[$option_id];
116
+ else
117
+ $this->$module[$option_name] = $settings;
118
+ }
119
+ }
120
+ // String = one
121
+ else {
122
+ // General settings needs not to be loaded
123
+ if ( $this->option_id == 'mycred_pref_core' ) {
124
+ $this->$module = $this->core;
125
+ }
126
+ // Grab the requested option
127
+ else {
128
+ if ( mycred_overwrite() === false )
129
+ $this->$module = get_option( $this->option_id );
130
+ else
131
+ $this->$module = get_blog_option( 1, $this->option_id );
132
+
133
+ if ( $this->$module === false && !empty( $defaults ) )
134
+ $this->$module = $defaults;
135
+ }
136
+ }
137
+
138
+ if ( is_array( $this->$module ) ) {
139
+ foreach ( $this->$module as $key => $value ) {
140
+ $this->$key = $value;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Load
149
+ * @since 0.1
150
+ * @version 1.0
151
+ */
152
+ function load() {
153
+ if ( !empty( $this->screen_id ) && !empty( $this->labels ) ) {
154
+ add_action( 'mycred_add_menu', array( $this, 'add_menu' ), $this->menu_pos );
155
+ }
156
+
157
+ if ( $this->register === true && !empty( $this->option_id ) )
158
+ add_action( 'mycred_admin_init', array( $this, 'register_settings' ) );
159
+
160
+ if ( $this->add_to_core === true ) {
161
+ add_action( 'mycred_after_core_prefs', array( $this, 'after_general_settings' ) );
162
+ add_filter( 'mycred_save_core_prefs', array( $this, 'sanitize_extra_settings' ), 90, 3 );
163
+ }
164
+
165
+ add_action( 'mycred_pre_init', array( $this, 'module_pre_init' ) );
166
+ add_action( 'mycred_init', array( $this, 'module_init' ) );
167
+ add_action( 'mycred_admin_init', array( $this, 'module_admin_init' ) );
168
+ add_action( 'mycred_widgets_init', array( $this, 'module_widgets_init' ) );
169
+ }
170
+
171
+ /**
172
+ * Pre Init
173
+ * @since 0.1
174
+ * @version 1.0
175
+ */
176
+ function module_pre_init() { }
177
+
178
+ /**
179
+ * Init
180
+ * @since 0.1
181
+ * @version 1.0
182
+ */
183
+ function module_init() { }
184
+
185
+ /**
186
+ * Admin Init
187
+ * @since 0.1
188
+ * @version 1.0
189
+ */
190
+ function module_admin_init() { }
191
+
192
+ /**
193
+ * Widgets Init
194
+ * @since 0.1
195
+ * @version 1.0
196
+ */
197
+ function module_widgets_init() { }
198
+
199
+ /**
200
+ * Get
201
+ * @since 0.1
202
+ * @version 1.0
203
+ */
204
+ function get() { }
205
+
206
+ /**
207
+ * Call
208
+ * Either runs a given class method or function.
209
+ * @since 0.1
210
+ * @version 1.0
211
+ */
212
+ function call( $call, $callback, $return = NULL ) {
213
+ // Class
214
+ if ( is_array( $callback ) && class_exists( $callback[0] ) ) {
215
+ $class = $callback[0];
216
+ $methods = get_class_methods( $class );
217
+ if ( in_array( $call, $methods ) ) {
218
+ $new = new $class( $this );
219
+ return $new->$call( $return );
220
+ }
221
+ }
222
+ // Function
223
+ if ( !is_array( $callback ) ) {
224
+ if ( function_exists( $callback ) ) {
225
+ if ( $return !== NULL )
226
+ return call_user_func( $callback, $return, $this );
227
+ else
228
+ return call_user_func( $callback, $this );
229
+ }
230
+ }
231
+ }
232
+
233
+ /**
234
+ * If Installed
235
+ * Checks if hooks have been installed
236
+ *
237
+ * @returns (bool) true or false
238
+ * @since 0.1
239
+ * @version 1.0
240
+ */
241
+ function is_installed() {
242
+ $module_name = $this->module_name;
243
+ if ( $this->$module_name === false ) return false;
244
+ return true;
245
+ }
246
+
247
+ /**
248
+ * Is Active
249
+ * @param $key (string) required key to check for
250
+ * @returns (bool) true or false
251
+ * @since 0.1
252
+ * @version 1.0
253
+ */
254
+ function is_active( $key = '' ) {
255
+ $module = $this->module_name;
256
+ if ( !isset( $this->active ) && !empty( $key ) ) {
257
+ if ( isset( $this->$module['active'] ) )
258
+ $active = $this->$module['active'];
259
+ else
260
+ return false;
261
+
262
+ if ( in_array( $key, $active ) ) return true;
263
+ }
264
+ elseif ( isset( $this->active ) && !empty( $key ) ) {
265
+ if ( in_array( $key, $this->active ) ) return true;
266
+ }
267
+
268
+ return false;
269
+ }
270
+
271
+ /**
272
+ * Add Admin Menu Item
273
+ * @since 0.1
274
+ * @version 1.0
275
+ */
276
+ function add_menu() {
277
+ // Network Setting for Multisites
278
+ if ( is_multisite() && mycred_overwrite() === true && $this->screen_id != 'myCRED' && $GLOBALS['blog_id'] != 1 ) return;
279
+
280
+ if ( !empty( $this->labels ) && !empty( $this->screen_id ) ) {
281
+ // Menu Label
282
+ if ( !isset( $this->labels['page_title'] ) && !isset( $this->labels['menu'] ) )
283
+ $label_menu = __( 'Surprise', 'mycred' );
284
+ elseif ( isset( $this->labels['menu'] ) )
285
+ $label_menu = $this->labels['menu'];
286
+ else
287
+ $label_menu = $this->labels['page_title'];
288
+
289
+ // Page Title
290
+ if ( !isset( $this->labels['page_title'] ) && !isset( $this->labels['menu'] ) )
291
+ $label_title = __( 'Surprise', 'mycred' );
292
+ elseif ( isset( $this->labels['page_title'] ) )
293
+ $label_title = $this->labels['page_title'];
294
+ else
295
+ $label_title = $this->labels['menu'];
296
+
297
+ if ( $this->cap != 'plugin' )
298
+ $cap = $this->core->edit_creds_cap();
299
+ else
300
+ $cap = $this->core->edit_plugin_cap();
301
+
302
+ // Add Submenu Page
303
+ $page = add_submenu_page(
304
+ 'myCRED',
305
+ $label_menu,
306
+ $label_title,
307
+ $cap,
308
+ $this->screen_id,
309
+ array( $this, 'admin_page' )
310
+ );
311
+ add_action( 'admin_print_styles-' . $page, array( $this, 'settings_header' ) );
312
+ }
313
+ }
314
+
315
+ /**
316
+ * Register Settings
317
+ * @since 0.1
318
+ * @version 1.0
319
+ */
320
+ function register_settings() {
321
+ if ( empty( $this->option_id ) || $this->register === false ) return;
322
+ register_setting( 'myCRED-' . $this->module_name, $this->option_id, array( $this, 'sanitize_settings' ) );
323
+ }
324
+
325
+ /**
326
+ * Settings Header
327
+ * Outputs the "click to open" and "click to close" text to the accordion.
328
+ *
329
+ * @since 0.1
330
+ * @version 1.0
331
+ */
332
+ function settings_header() {
333
+ if ( $this->accordion === true )
334
+ wp_enqueue_script( 'mycred-admin' );
335
+
336
+ wp_enqueue_style( 'mycred-admin' );
337
+
338
+ if ( $this->accordion === false ) return;
339
+ $click_to_open = __( 'click to open', 'mycred' );
340
+ $click_to_close = __( 'click to close', 'mycred' ); ?>
341
+
342
+ <style type="text/css">
343
+ h4:before { float:right; padding-right: 12px; font-size: 14px; font-weight: normal; color: silver; }
344
+ h4.ui-accordion-header.ui-state-active:before { content: "<?php echo $click_to_close; ?>"; }
345
+ h4.ui-accordion-header:before { content: "<?php echo $click_to_open; ?>"; }
346
+ </style>
347
+ <?php
348
+ }
349
+
350
+ /**
351
+ * Admin Page
352
+ * @since 0.1
353
+ * @version 1.0
354
+ */
355
+ function admin_page() { }
356
+
357
+ /**
358
+ * Sanitize Settings
359
+ * @since 0.1
360
+ * @version 1.0
361
+ */
362
+ function sanitize_settings( $post ) {
363
+ return $post;
364
+ }
365
+
366
+ /**
367
+ * After General Settings
368
+ * @since 0.1
369
+ * @version 1.0
370
+ */
371
+ function after_general_settings() { }
372
+
373
+ /**
374
+ * Sanitize Core Settings
375
+ * @since 0.1
376
+ * @version 1.0
377
+ */
378
+ function sanitize_extra_settings( $new_data, $data, $core ) {
379
+ return $new_data;
380
+ }
381
+
382
+ /**
383
+ * Input Field Name Value
384
+ * @since 0.1
385
+ * @version 1.0
386
+ */
387
+ function field_name( $name = '' ) {
388
+ if ( is_array( $name ) ) {
389
+ $array = array();
390
+ foreach ( $name as $parent => $child ) {
391
+ if ( !is_numeric( $parent ) )
392
+ $array[] = $parent;
393
+
394
+ if ( !empty( $child ) && !is_array( $child ) )
395
+ $array[] = $child;
396
+ }
397
+ $name = '[' . implode( '][', $array ) . ']';
398
+ }
399
+ else {
400
+ $name = '[' . $name . ']';
401
+ }
402
+
403
+ if ( $this->add_to_core === true )
404
+ $name = '[' . $this->module_name . ']' . $name;
405
+
406
+ if ( !empty( $this->option_id ) )
407
+ return $this->option_id . $name;
408
+ else
409
+ return 'mycred_pref_core' . $name;
410
+ }
411
+
412
+ /**
413
+ * Input Field Id Value
414
+ * @since 0.1
415
+ * @version 1.0
416
+ */
417
+ function field_id( $id = '' ) {
418
+ if ( is_array( $id ) ) {
419
+ $array = array();
420
+ foreach ( $id as $parent => $child ) {
421
+ if ( !is_numeric( $parent ) )
422
+ $array[] = str_replace( '_', '-', $parent );
423
+
424
+ if ( !empty( $child ) && !is_array( $child ) )
425
+ $array[] = str_replace( '_', '-', $child );
426
+ }
427
+ $id = implode( '-', $array );
428
+ }
429
+ else {
430
+ $id = str_replace( '_', '-', $id );
431
+ }
432
+
433
+ if ( $this->add_to_core === true )
434
+ $id = $this->module_name . '-' . $id;
435
+
436
+ return str_replace( '_', '-', $this->module_id ) . '-' . $id;
437
+ }
438
+ }
439
+ }
440
+ ?>
addons/buddypress/hooks/bp-galleries.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_BuddyPress_Gallery class
5
+ *
6
+ * Creds for creating a gallery or deleting gallery
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_BuddyPress_Gallery' ) ) {
11
+ class myCRED_BuddyPress_Gallery extends myCRED_Hook {
12
+
13
+ /**
14
+ * Construct
15
+ */
16
+ function __construct( $hook_prefs ) {
17
+ parent::__construct( array(
18
+ 'id' => 'hook_bp_gallery',
19
+ 'defaults' => array(
20
+ 'new_gallery' => array(
21
+ 'creds' => 1,
22
+ 'log' => '%plural% for new gallery'
23
+ )
24
+ )
25
+ ), $hook_prefs );
26
+ }
27
+
28
+ /**
29
+ * Run
30
+ * @since 0.1
31
+ * @version 1.0
32
+ */
33
+ public function run() {
34
+ if ( $this->prefs['new_gallery']['creds'] != 0 ) {
35
+ add_action( 'bp_gallplus_data_after_save', array( $this, 'new_gallery' ) );
36
+ add_action( 'bp_album_data_after_save', array( $this, 'new_gallery' ) );
37
+ }
38
+ }
39
+
40
+ /**
41
+ * New Gallery
42
+ * @since 0.1
43
+ * @version 1.0
44
+ */
45
+ public function new_gallery( $gallery ) {
46
+ // Check if user is excluded
47
+ if ( $this->core->exclude_user( $gallery->owner_id ) ) return;
48
+
49
+ // Make sure this is unique event
50
+ if ( $this->has_entry( 'new_buddypress_gallery', $gallery->id ) ) return;
51
+
52
+ // Execute
53
+ $this->core->add_creds(
54
+ 'new_buddypress_gallery',
55
+ $gallery->owner_id,
56
+ $this->prefs['new_gallery']['creds'],
57
+ $this->prefs['new_gallery']['log'],
58
+ $gallery->id,
59
+ 'bp_gallery'
60
+ );
61
+
62
+ // Clean up
63
+ unset( $this );
64
+ }
65
+
66
+ /**
67
+ * Preferences
68
+ * @since 0.1
69
+ * @version 1.0
70
+ */
71
+ public function preferences() {
72
+ $prefs = $this->prefs; ?>
73
+
74
+ <!-- Creds for New Gallery -->
75
+ <label for="<?php echo $this->field_id( array( 'new_gallery', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Gallery', 'mycred' ) ); ?></label>
76
+ <ol id="">
77
+ <li>
78
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_gallery', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_gallery', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_gallery']['creds'] ); ?>" size="8" /></div>
79
+ </li>
80
+ <li class="empty">&nbsp;</li>
81
+ <li>
82
+ <label for="<?php echo $this->field_id( array( 'new_gallery', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
83
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_gallery', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_gallery', 'log' ) ); ?>" value="<?php echo $prefs['new_gallery']['log']; ?>" class="long" /></div>
84
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
85
+ </li>
86
+ </ol>
87
+ <?php unset( $this );
88
+ }
89
+ }
90
+ }
91
+ ?>
addons/buddypress/hooks/bp-groups.php ADDED
@@ -0,0 +1,590 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_BuddyPress_Groups class
5
+ *
6
+ * Creds for groups actions such as joining / leaving, creating / deleting, new topics / edit topics or new posts / edit posts
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_BuddyPress_Groups' ) ) {
11
+ class myCRED_BuddyPress_Groups extends myCRED_Hook {
12
+
13
+ /**
14
+ * Construct
15
+ */
16
+ function __construct( $hook_prefs ) {
17
+ parent::__construct( array(
18
+ 'id' => 'hook_bp_groups',
19
+ 'defaults' => array(
20
+ 'create' => array(
21
+ 'creds' => 10,
22
+ 'log' => '%plural% for creating a new group',
23
+ 'min' => 0
24
+ ),
25
+ 'delete' => array(
26
+ 'creds' => '-10',
27
+ 'log' => '%singular% deduction for deleting a group'
28
+ ),
29
+ 'new_topic' => array(
30
+ 'creds' => 1,
31
+ 'log' => '%plural% for new group topic'
32
+ ),
33
+ 'edit_topic' => array(
34
+ 'creds' => 1,
35
+ 'log' => '%plural% for updating group topic'
36
+ ),
37
+ 'new_post' => array(
38
+ 'creds' => 1,
39
+ 'log' => '%plural% for new group post'
40
+ ),
41
+ 'edit_post' => array(
42
+ 'creds' => 1,
43
+ 'log' => '%plural% for updating group post'
44
+ ),
45
+ 'join' => array(
46
+ 'creds' => 1,
47
+ 'log' => '%plural% for joining new group'
48
+ ),
49
+ 'leave' => array(
50
+ 'creds' => '-5',
51
+ 'log' => '%singular% deduction for leaving group'
52
+ ),
53
+ 'avatar' => array(
54
+ 'creds' => 1,
55
+ 'log' => '%plural% for new group avatar'
56
+ ),
57
+ 'comments' => array(
58
+ 'creds' => 1,
59
+ 'log' => '%plural% for new group comment'
60
+ )
61
+ )
62
+ ), $hook_prefs );
63
+ }
64
+
65
+ /**
66
+ * Run
67
+ * @since 0.1
68
+ * @version 1.0
69
+ */
70
+ public function run() {
71
+ if ( $this->prefs['create']['creds'] != 0 && $this->prefs['create']['min'] == 0 )
72
+ add_action( 'groups_group_create_complete', array( $this, 'create_group' ) );
73
+
74
+ if ( $this->prefs['create']['creds'] < 0 )
75
+ add_filter( 'bp_user_can_create_groups', array( $this, 'restrict_group_creation' ), 99, 2 );
76
+
77
+ if ( $this->prefs['delete']['creds'] != 0 )
78
+ add_action( 'groups_group_deleted', array( $this, 'delete_group' ) );
79
+
80
+ if ( $this->prefs['new_topic']['creds'] != 0 )
81
+ add_action( 'bp_forums_new_topic', array( $this, 'new_topic' ) );
82
+
83
+ if ( $this->prefs['edit_topic']['creds'] != 0 )
84
+ add_action( 'groups_edit_forum_topic', array( $this, 'edit_topic' ) );
85
+
86
+ if ( $this->prefs['new_post']['creds'] != 0 )
87
+ add_action( 'bp_forums_new_post', array( $this, 'new_post' ) );
88
+
89
+ if ( $this->prefs['edit_post']['creds'] != 0 )
90
+ add_action( 'groups_edit_forum_post', array( $this, 'edit_post' ) );
91
+
92
+ if ( $this->prefs['join']['creds'] != 0 || ( $this->prefs['create']['creds'] != 0 && $this->prefs['create']['min'] != 0 ) )
93
+ add_action( 'groups_join_group', array( $this, 'join_group' ), 20, 2 );
94
+
95
+ if ( $this->prefs['join']['creds'] < 0 )
96
+ add_filter( 'bp_get_group_join_button', array( $this, 'restrict_joining_group' ) );
97
+
98
+ if ( $this->prefs['leave']['creds'] != 0 )
99
+ add_action( 'groups_leave_group', array( $this, 'leave_group' ), 20, 2 );
100
+
101
+ if ( $this->prefs['avatar']['creds'] != 0 )
102
+ add_action( 'groups_screen_group_admin_avatar', array( $this, 'avatar_upload_group' ) );
103
+
104
+ if ( $this->prefs['comments']['creds'] != 0 )
105
+ add_action( 'bp_groups_posted_update', array( $this, 'new_group_comment' ), 20, 4 );
106
+ }
107
+
108
+ /**
109
+ * Creating Group
110
+ * @since 0.1
111
+ * @version 1.0
112
+ */
113
+ public function create_group( $group_id ) {
114
+ global $bp;
115
+
116
+ // Check if user should be excluded
117
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
118
+
119
+ // Execute
120
+ $this->core->add_creds(
121
+ 'creation_of_new_group',
122
+ $bp->loggedin_user->id,
123
+ $this->prefs['create']['creds'],
124
+ $this->prefs['create']['log'],
125
+ $group_id,
126
+ 'bp_group'
127
+ );
128
+
129
+ // Clean up
130
+ unset( $this );
131
+ }
132
+
133
+ /**
134
+ * Restrict Group Creation
135
+ * If creating a group costs and the user does not have enough points, we restrict creations.
136
+ * @since 0.1
137
+ * @version 1.0
138
+ */
139
+ public function restrict_group_creation( $can_create, $restricted ) {
140
+ global $bp;
141
+
142
+ // Check if user should be excluded
143
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return $can_create;
144
+
145
+ // Check if user has enough to create a group
146
+ $cost = abs( $this->prefs['create']['creds'] );
147
+ $balance = $this->core->get_users_cred( $bp->loggedin_user->id );
148
+ if ( $cost > $balance ) return false;
149
+
150
+ return $can_create;
151
+ }
152
+
153
+ /**
154
+ * Restrict Group Join
155
+ * If joining a group costs and the user does not have enough points, we restrict joining of groups.
156
+ * @since 0.1
157
+ * @version 1.0
158
+ */
159
+ public function restrict_joining_group( $button ) {
160
+ global $bp;
161
+
162
+ // Check if user should be excluded
163
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return $button;
164
+
165
+ // Check if user has enough to join group
166
+ $cost = abs( $this->prefs['join']['creds'] );
167
+ $balance = $this->core->get_users_cred( $bp->loggedin_user->id );
168
+ if ( $cost > $balance ) return false;
169
+
170
+ return $button;
171
+ }
172
+
173
+ /**
174
+ * Deleting Group
175
+ * @since 0.1
176
+ * @version 1.0
177
+ */
178
+ public function delete_group( $group_id ) {
179
+ global $bp;
180
+
181
+ // If admin is removing deduct from creator
182
+ if ( $bp->loggedin_user->is_super_admin ) {
183
+ $user_id = $bp->groups->current_group->creator_id;
184
+ }
185
+
186
+ // Else if admin but not the creator is removing
187
+ elseif ( $bp->loggedin_user->id != $bp->groups->current_group->creator_id ) {
188
+ $user_id = $bp->groups->current_group->creator_id;
189
+ }
190
+
191
+ // Else deduct from current user
192
+ else {
193
+ $user_id = $bp->loggedin_user->id;
194
+ }
195
+
196
+ // Check if user should be excluded
197
+ if ( $this->core->exclude_user( $user_id ) ) return;
198
+
199
+ // Execute
200
+ $this->core->add_creds(
201
+ 'deletion_of_group',
202
+ $user_id,
203
+ $this->prefs['delete']['creds'],
204
+ $this->prefs['delete']['log'],
205
+ $group_id,
206
+ 'bp_group'
207
+ );
208
+
209
+ // Clean up
210
+ unset( $this );
211
+ }
212
+
213
+ /**
214
+ * New Group Forum Topic
215
+ * @since 0.1
216
+ * @version 1.0
217
+ */
218
+ public function new_topic( $topic_id ) {
219
+ global $bp;
220
+
221
+ // Check if user should be excluded
222
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
223
+
224
+ // Make sure this is unique event
225
+ if ( $this->has_entry( 'new_group_forum_topic', $topic_id, $bp->loggedin_user->id ) ) return;
226
+
227
+ // Execute
228
+ $this->core->add_creds(
229
+ 'new_group_forum_topic',
230
+ $bp->loggedin_user->id,
231
+ $this->prefs['new_topic']['creds'],
232
+ $this->prefs['new_topic']['log'],
233
+ $topic_id,
234
+ 'bp_ftopic'
235
+ );
236
+
237
+ // Clean up
238
+ unset( $this );
239
+ }
240
+
241
+ /**
242
+ * Edit Group Forum Topic
243
+ * @since 0.1
244
+ * @version 1.0
245
+ */
246
+ public function edit_topic( $topic_id ) {
247
+ global $bp;
248
+
249
+ // Check if user should be excluded
250
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
251
+
252
+ // Execute
253
+ $this->core->add_creds(
254
+ 'edit_group_forum_topic',
255
+ $bp->loggedin_user->id,
256
+ $this->prefs['edit_topic']['creds'],
257
+ $this->prefs['edit_topic']['log'],
258
+ $topic_id,
259
+ 'bp_ftopic'
260
+ );
261
+
262
+ // Clean up
263
+ unset( $this );
264
+ }
265
+
266
+ /**
267
+ * New Group Forum Post
268
+ * @since 0.1
269
+ * @version 1.0
270
+ */
271
+ public function new_post( $post_id ) {
272
+ global $bp;
273
+
274
+ // Check if user should be excluded
275
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
276
+
277
+ // Make sure this is unique event
278
+ if ( $this->has_entry( 'new_group_forum_post', $post_id, $bp->loggedin_user->id ) ) return;
279
+
280
+ // Execute
281
+ $this->core->add_creds(
282
+ 'new_group_forum_post',
283
+ $bp->loggedin_user->id,
284
+ $this->prefs['new_post']['creds'],
285
+ $this->prefs['new_post']['log'],
286
+ $post_id,
287
+ 'bp_fpost'
288
+ );
289
+
290
+ // Clean up
291
+ unset( $this );
292
+ }
293
+
294
+ /**
295
+ * Edit Group Forum Post
296
+ * @since 0.1
297
+ * @version 1.0
298
+ */
299
+ public function edit_post( $post_id ) {
300
+ global $bp;
301
+
302
+ // Check if user should be excluded
303
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
304
+
305
+ // Execute
306
+ $this->core->add_creds(
307
+ 'edit_group_forum_post',
308
+ $bp->loggedin_user->id,
309
+ $this->prefs['edit_post']['creds'],
310
+ $this->prefs['edit_post']['log'],
311
+ $post_id,
312
+ 'bp_fpost'
313
+ );
314
+
315
+ // Clean up
316
+ unset( $this );
317
+ }
318
+
319
+ /**
320
+ * Joining Group
321
+ * @since 0.1
322
+ * @version 1.0
323
+ */
324
+ public function join_group( $group_id, $user_id ) {
325
+ // Minimum members limit
326
+ if ( $this->prefs['create']['min'] != 0 ) {
327
+ $group = groups_get_group( array( 'group_id' => $group_id ) );
328
+ $count = $group->total_member_count;
329
+ $creator = $group->creator_id;
330
+
331
+ // Award creator if we have reached the minimum number of members and we have not yet been awarded
332
+ if ( $count == $this->prefs['create']['min'] && !$this->has_entry( 'creation_of_new_group', $group_id, $creator ) ) {
333
+ $this->core->add_creds( 'creation_of_new_group', $creator, $this->prefs['create']['creds'], $this->prefs['create']['log'], $group_id, 'bp_group' );
334
+ }
335
+
336
+ // Clean up
337
+ unset( $group );
338
+ }
339
+
340
+ // Check if user should be excluded
341
+ if ( $this->core->exclude_user( $user_id ) ) return;
342
+
343
+ // Make sure this is unique event
344
+ if ( $this->has_entry( 'joining_group', $group_id, $user_id ) ) return;
345
+
346
+ // Execute
347
+ $this->core->add_creds(
348
+ 'joining_group',
349
+ $user_id,
350
+ $this->prefs['join']['creds'],
351
+ $this->prefs['join']['log'],
352
+ $group_id,
353
+ 'bp_group'
354
+ );
355
+
356
+ // Clean up
357
+ unset( $this );
358
+ }
359
+
360
+ /**
361
+ * Leaving Group
362
+ * @since 0.1
363
+ * @version 1.0
364
+ */
365
+ public function leave_group( $group_id, $user_id ) {
366
+ // Check if user should be excluded
367
+ if ( $this->core->exclude_user( $user_id ) ) return;
368
+
369
+ // Make sure this is unique event
370
+ if ( $this->has_entry( 'leaving_group', $group_id, $user_id ) ) return;
371
+
372
+ // Execute
373
+ $this->core->add_creds(
374
+ 'leaving_group',
375
+ $user_id,
376
+ $this->prefs['leave']['creds'],
377
+ $this->prefs['leave']['log'],
378
+ $group_id,
379
+ 'bp_group'
380
+ );
381
+
382
+ // Clean up
383
+ unset( $this );
384
+ }
385
+
386
+ /**
387
+ * Avatar Upload for Group
388
+ * @since 0.1
389
+ * @version 1.0
390
+ */
391
+ public function avatar_upload_group( $group_id ) {
392
+ global $bp;
393
+
394
+ // Check if user should be excluded
395
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
396
+
397
+ // Make sure this is unique event
398
+ if ( $this->has_entry( 'upload_group_avatar', $group_id ) ) return;
399
+
400
+ // Execute
401
+ $this->core->add_creds(
402
+ 'upload_group_avatar',
403
+ $bp->loggedin_user->id,
404
+ $this->prefs['avatar']['creds'],
405
+ $this->prefs['avatar']['log'],
406
+ $group_id,
407
+ 'bp_group'
408
+ );
409
+
410
+ // Clean up
411
+ unset( $this );
412
+ }
413
+
414
+ /**
415
+ * New Group Comment
416
+ * @since 0.1
417
+ * @version 1.0
418
+ */
419
+ public function new_group_comment( $content, $user_id, $group_id, $activity_id ) {
420
+ // Check if user should be excluded
421
+ if ( $this->core->exclude_user( $user_id ) ) return;
422
+
423
+ // Make sure this is unique event
424
+ if ( $this->has_entry( 'new_group_comment', $activity_id, $user_id ) ) return;
425
+
426
+ // Execute
427
+ $this->core->add_creds(
428
+ 'new_group_comment',
429
+ $user_id,
430
+ $this->prefs['comments']['creds'],
431
+ $this->prefs['comments']['log'],
432
+ $activity_id,
433
+ 'bp_activity'
434
+ );
435
+
436
+ // Clean up
437
+ unset( $this );
438
+ }
439
+
440
+ /**
441
+ * Preferences
442
+ * @since 0.1
443
+ * @version 1.0
444
+ */
445
+ public function preferences() {
446
+ $prefs = $this->prefs; ?>
447
+
448
+ <!-- Creds for New Group -->
449
+ <label for="<?php echo $this->field_id( array( 'create', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Creating Groups', 'mycred' ) ); ?></label>
450
+ <ol id="">
451
+ <li>
452
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'create', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'create', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['create']['creds'] ); ?>" size="8" /></div>
453
+ <span class="description"><?php echo $this->core->template_tags_general( __( 'If you use a negative value and the user does not have enough %_plural% the "Create Group" button will be disabled.', 'mycred' ) ); ?></span>
454
+ </li>
455
+ <li class="empty">&nbsp;</li>
456
+ <li>
457
+ <label for=""><?php echo $this->core->template_tags_general( __( 'Number of members before awarding %_plural%', 'mycred' ) ); ?></label>
458
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'create', 'min' ) ); ?>" id="<?php echo $this->field_id( array( 'create', 'min' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['create']['min'] ); ?>" size="8" /></div>
459
+ <span class="description"><?php echo $this->core->template_tags_general( __( 'Use zero to award %_plural% when group is created.', 'mycred' ) ); ?></span>
460
+ </li>
461
+ <li class="empty">&nbsp;</li>
462
+ <li>
463
+ <label for="<?php echo $this->field_id( array( 'create', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
464
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'create', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'create', 'log' ) ); ?>" value="<?php echo $prefs['create']['log']; ?>" class="long" /></div>
465
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
466
+ </li>
467
+ </ol>
468
+ <!-- Creds for Deleting Group -->
469
+ <label for="<?php echo $this->field_id( array( 'delete', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Deleting Groups', 'mycred' ) ); ?></label>
470
+ <ol id="">
471
+ <li>
472
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'delete', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'delete', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['delete']['creds'] ); ?>" size="8" /></div>
473
+ </li>
474
+ <li class="empty">&nbsp;</li>
475
+ <li>
476
+ <label for="<?php echo $this->field_id( array( 'delete', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
477
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'delete', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'delete', 'log' ) ); ?>" value="<?php echo $prefs['delete']['log']; ?>" class="long" /></div>
478
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
479
+ </li>
480
+ </ol>
481
+ <!-- Creds for New Forum Topic -->
482
+ <label for="<?php echo $this->field_id( array( 'new_topic', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Forum Topic', 'mycred' ) ); ?></label>
483
+ <ol id="">
484
+ <li>
485
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_topic', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_topic', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_topic']['creds'] ); ?>" size="8" /></div>
486
+ </li>
487
+ <li class="empty">&nbsp;</li>
488
+ <li>
489
+ <label for="<?php echo $this->field_id( array( 'new_topic', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
490
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_topic', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_topic', 'log' ) ); ?>" value="<?php echo $prefs['new_topic']['log']; ?>" class="long" /></div>
491
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
492
+ </li>
493
+ </ol>
494
+ <!-- Creds for Edit Forum Topic -->
495
+ <label for="<?php echo $this->field_id( array( 'edit_topic', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Editing Forum Topic', 'mycred' ) ); ?></label>
496
+ <ol id="">
497
+ <li>
498
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'edit_topic', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'edit_topic', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['edit_topic']['creds'] ); ?>" size="8" /></div>
499
+ </li>
500
+ <li class="empty">&nbsp;</li>
501
+ <li>
502
+ <label for="<?php echo $this->field_id( array( 'new_topic', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
503
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_topic', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_topic', 'log' ) ); ?>" value="<?php echo $prefs['new_topic']['log']; ?>" class="long" /></div>
504
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
505
+ </li>
506
+ </ol>
507
+ <!-- Creds for New Forum Post -->
508
+ <label for="<?php echo $this->field_id( array( 'new_post', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Forum Post', 'mycred' ) ); ?></label>
509
+ <ol id="">
510
+ <li>
511
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_post', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_post', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_post']['creds'] ); ?>" size="8" /></div>
512
+ </li>
513
+ <li class="empty">&nbsp;</li>
514
+ <li>
515
+ <label for="<?php echo $this->field_id( array( 'new_post', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
516
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_post', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_post', 'log' ) ); ?>" value="<?php echo $prefs['new_post']['log']; ?>" class="long" /></div>
517
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
518
+ </li>
519
+ </ol>
520
+ <!-- Creds for Edit Forum Post -->
521
+ <label for="<?php echo $this->field_id( array( 'edit_post', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Editing Forum Post', 'mycred' ) ); ?></label>
522
+ <ol id="">
523
+ <li>
524
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'edit_post', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'edit_post', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['edit_post']['creds'] ); ?>" size="8" /></div>
525
+ </li>
526
+ <li class="empty">&nbsp;</li>
527
+ <li>
528
+ <label for="<?php echo $this->field_id( array( 'edit_post', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
529
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'edit_post', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'edit_post', 'log' ) ); ?>" value="<?php echo $prefs['edit_post']['log']; ?>" class="long" /></div>
530
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
531
+ </li>
532
+ </ol>
533
+ <!-- Creds for Joining Group -->
534
+ <label for="<?php echo $this->field_id( array( 'join', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Joining Groups', 'mycred' ) ); ?></label>
535
+ <ol id="">
536
+ <li>
537
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'join', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'join', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['join']['creds'] ); ?>" size="8" /></div>
538
+ <span class="description"><?php echo $this->core->template_tags_general( __( 'If you use a negative value and the user does not have enough %_plural% the "Join Group" button will be disabled.', 'mycred' ) ); ?></span>
539
+ </li>
540
+ <li class="empty">&nbsp;</li>
541
+ <li>
542
+ <label for="<?php echo $this->field_id( array( 'join', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
543
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'join', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'join', 'log' ) ); ?>" value="<?php echo $prefs['join']['log']; ?>" class="long" /></div>
544
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
545
+ </li>
546
+ </ol>
547
+ <!-- Creds for Leaving Group -->
548
+ <label for="<?php echo $this->field_id( array( 'leave', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Leaving Groups', 'mycred' ) ); ?></label>
549
+ <ol id="">
550
+ <li>
551
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'leave', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'leave', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['leave']['creds'] ); ?>" size="8" /></div>
552
+ </li>
553
+ <li class="empty">&nbsp;</li>
554
+ <li>
555
+ <label for="<?php echo $this->field_id( array( 'leave', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
556
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'leave', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'leave', 'log' ) ); ?>" value="<?php echo $prefs['leave']['log']; ?>" class="long" /></div>
557
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
558
+ </li>
559
+ </ol>
560
+ <!-- Creds for New Group Avatar -->
561
+ <label for="<?php echo $this->field_id( array( 'avatar', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Group Avatar', 'mycred' ) ); ?></label>
562
+ <ol id="">
563
+ <li>
564
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'avatar', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'avatar', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['avatar']['creds'] ); ?>" size="8" /></div>
565
+ </li>
566
+ <li class="empty">&nbsp;</li>
567
+ <li>
568
+ <label for="<?php echo $this->field_id( array( 'avatar', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
569
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'avatar', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'avatar', 'log' ) ); ?>" value="<?php echo $prefs['avatar']['log']; ?>" class="long" /></div>
570
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
571
+ </li>
572
+ </ol>
573
+ <!-- Creds for New Group Comment -->
574
+ <label for="<?php echo $this->field_id( array( 'comments', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Group Comment', 'mycred' ) ); ?></label>
575
+ <ol id="">
576
+ <li>
577
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'comments', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'comments', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['comments']['creds'] ); ?>" size="8" /></div>
578
+ </li>
579
+ <li class="empty">&nbsp;</li>
580
+ <li>
581
+ <label for="<?php echo $this->field_id( array( 'new_group_comment', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
582
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'comments', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'comments', 'log' ) ); ?>" value="<?php echo $prefs['comments']['log']; ?>" class="long" /></div>
583
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
584
+ </li>
585
+ </ol>
586
+ <?php unset( $this );
587
+ }
588
+ }
589
+ }
590
+ ?>
addons/buddypress/hooks/bp-links.php ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_BuddyPress_Links class
5
+ *
6
+ * Creds for new links, voting on links, updating links and deleting links
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_BuddyPress_Links' ) ) {
11
+ class myCRED_BuddyPress_Links extends myCRED_Hook {
12
+
13
+ /**
14
+ * Construct
15
+ */
16
+ function __construct( $hook_prefs ) {
17
+ parent::__construct( array(
18
+ 'id' => 'hook_bp_links',
19
+ 'defaults' => array(
20
+ 'new_link' => array(
21
+ 'creds' => 1,
22
+ 'log' => '%plural% for new Link'
23
+ ),
24
+ 'vote_link' => array(
25
+ 'creds' => 1,
26
+ 'log' => '%plural% for voting on a link'
27
+ ),
28
+ 'update_link' => array(
29
+ 'creds' => 1,
30
+ 'log' => '%plural% for updating link'
31
+ ),
32
+ 'delete_link' => array(
33
+ 'creds' => '-1',
34
+ 'log' => '%singular% deduction for deleting a link'
35
+ ),
36
+ )
37
+ ), $hook_prefs );
38
+ }
39
+
40
+ /**
41
+ * Run
42
+ * @since 0.1
43
+ * @version 1.0
44
+ */
45
+ public function run() {
46
+ if ( $this->prefs['new_link']['creds'] != 0 )
47
+ add_action( 'bp_links_create_complete', array( $this, 'create_link' ) );
48
+
49
+ if ( $this->prefs['vote_link']['creds'] != 0 )
50
+ add_action( 'bp_links_cast_vote_success', array( $this, 'vote_link' ) );
51
+
52
+ if ( $this->prefs['update_link']['creds'] != 0 )
53
+ add_action( 'bp_links_posted_update', array( $this, 'update_link' ), 20, 4 );
54
+
55
+ if ( $this->prefs['delete_link']['creds'] != 0 )
56
+ add_action( 'bp_links_delete_link', array( $this, 'delete_link' ) );
57
+ }
58
+
59
+ /**
60
+ * New Link
61
+ * @since 0.1
62
+ * @version 1.0
63
+ */
64
+ public function create_link( $link_id ) {
65
+ global $bp;
66
+
67
+ // Check if user is excluded
68
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
69
+
70
+ // Make sure this is unique event
71
+ if ( $this->has_entry( 'new_link', $link_id, $bp->loggedin_user->id ) ) return;
72
+
73
+ // Execute
74
+ $this->core->add_creds(
75
+ 'new_link',
76
+ $bp->loggedin_user->id,
77
+ $this->prefs['new_link']['creds'],
78
+ $this->prefs['new_link']['log'],
79
+ $link_id,
80
+ 'bp_links'
81
+ );
82
+
83
+ // Clean up
84
+ unset( $this );
85
+ }
86
+
87
+ /**
88
+ * Vote on Link
89
+ * @since 0.1
90
+ * @version 1.0
91
+ */
92
+ public function vote_link( $link_id ) {
93
+ global $bp;
94
+
95
+ // Check if user is excluded
96
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
97
+
98
+ // Make sure this is unique event
99
+ if ( $this->has_entry( 'link_voting', $link_id, $bp->loggedin_user->id ) ) return;
100
+
101
+ // Execute
102
+ $this->core->add_creds(
103
+ 'link_voting',
104
+ $bp->loggedin_user->id,
105
+ $this->prefs['vote_link']['creds'],
106
+ $this->prefs['vote_link']['log'],
107
+ $link_id,
108
+ 'bp_links'
109
+ );
110
+
111
+ // Clean up
112
+ unset( $this );
113
+ }
114
+
115
+ /**
116
+ * Update Link
117
+ * @since 0.1
118
+ * @version 1.0
119
+ */
120
+ public function update_link( $content, $user_id, $link_id, $activity_id ) {
121
+ // Check if user is excluded
122
+ if ( $this->core->exclude_user( $user_id ) ) return;
123
+
124
+ // Make sure this is unique event
125
+ if ( $this->has_entry( 'update_link', $activity_id, $user_id ) ) return;
126
+
127
+ // Execute
128
+ $this->core->add_creds(
129
+ 'update_link',
130
+ $user_id,
131
+ $this->prefs['update_link']['creds'],
132
+ $this->prefs['update_link']['log'],
133
+ $activity_id,
134
+ 'bp_links'
135
+ );
136
+
137
+ // Clean up
138
+ unset( $this );
139
+ }
140
+
141
+ /**
142
+ * Delete Link
143
+ * @since 0.1
144
+ * @version 1.0
145
+ */
146
+ public function delete_link( $link_id ) {
147
+ global $bp;
148
+
149
+ // Check if user is excluded
150
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
151
+
152
+ // Make sure this is unique event
153
+ if ( $this->has_entry( 'link_deletion', $link_id, $bp->loggedin_user->id ) ) return;
154
+
155
+ // Execute
156
+ $this->core->add_creds(
157
+ 'link_deletion',
158
+ $bp->loggedin_user->id,
159
+ $this->prefs['delete_link']['creds'],
160
+ $this->prefs['delete_link']['log'],
161
+ $link_id,
162
+ 'bp_links'
163
+ );
164
+
165
+ // Clean up
166
+ unset( $this );
167
+ }
168
+
169
+ /**
170
+ * Preferences
171
+ * @since 0.1
172
+ * @version 1.0
173
+ */
174
+ public function preferences() {
175
+ $prefs = $this->prefs; ?>
176
+
177
+ <!-- Creds for New Link -->
178
+ <label for="<?php echo $this->field_id( array( 'new_link', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Links', 'mycred' ) ); ?></label>
179
+ <ol id="">
180
+ <li>
181
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_link', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_link', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_link']['creds'] ); ?>" size="8" /></div>
182
+ </li>
183
+ <li class="empty">&nbsp;</li>
184
+ <li>
185
+ <label for="<?php echo $this->field_id( array( 'new_link', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
186
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_link', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_link', 'log' ) ); ?>" value="<?php echo $prefs['new_link']['log']; ?>" class="long" /></div>
187
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
188
+ </li>
189
+ </ol>
190
+ <!-- Creds for Vote Link -->
191
+ <label for="<?php echo $this->field_id( array( 'vote_link', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Vote on Link', 'mycred' ) ); ?></label>
192
+ <ol id="">
193
+ <li>
194
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'vote_link', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'vote_link', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['vote_link']['creds'] ); ?>" size="8" /></div>
195
+ </li>
196
+ <li class="empty">&nbsp;</li>
197
+ <li>
198
+ <label for="<?php echo $this->field_id( array( 'vote_link', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
199
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'vote_link', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'vote_link', 'log' ) ); ?>" value="<?php echo $prefs['vote_link']['log']; ?>" class="long" /></div>
200
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
201
+ </li>
202
+ </ol>
203
+ <!-- Creds for Update Link -->
204
+ <label for="<?php echo $this->field_id( array( 'update_link', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Updating Links', 'mycred' ) ); ?></label>
205
+ <ol id="">
206
+ <li>
207
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'update_link', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'update_link', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['update_link']['creds'] ); ?>" size="8" /></div>
208
+ </li>
209
+ <li class="empty">&nbsp;</li>
210
+ <li>
211
+ <label for="<?php echo $this->field_id( array( 'update_link', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
212
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'update_link', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'update_link', 'log' ) ); ?>" value="<?php echo $prefs['update_link']['log']; ?>" class="long" /></div>
213
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
214
+ </li>
215
+ </ol>
216
+ <!-- Creds for Deleting Links -->
217
+ <label for="<?php echo $this->field_id( array( 'delete_link', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Deleting Links', 'mycred' ) ); ?></label>
218
+ <ol id="">
219
+ <li>
220
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'delete_link', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'delete_link', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['delete_link']['creds'] ); ?>" size="8" /></div>
221
+ </li>
222
+ <li class="empty">&nbsp;</li>
223
+ <li>
224
+ <label for="<?php echo $this->field_id( array( 'delete_link', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
225
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'delete_link', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'delete_link', 'log' ) ); ?>" value="<?php echo $prefs['delete_link']['log']; ?>" class="long" /></div>
226
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
227
+ </li>
228
+ </ol>
229
+ <?php unset( $this );
230
+ }
231
+ }
232
+ }
233
+ ?>
addons/buddypress/hooks/bp-press.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_BuddyPress_bbPress class
5
+ *
6
+ * Creds for bbPress 2.0
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_BuddyPress_bbPress' ) ) {
11
+ class myCRED_BuddyPress_bbPress extends myCRED_Hook {
12
+
13
+ /**
14
+ * Construct
15
+ */
16
+ function __construct( $hook_prefs ) {
17
+ parent::__construct( array(
18
+ 'id' => 'hook_bp_bbpress',
19
+ 'defaults' => array(
20
+ 'new_topic' => array(
21
+ 'creds' => 1,
22
+ 'log' => '%plural% for new forum topic'
23
+ ),
24
+ 'new_reply' => array(
25
+ 'creds' => 1,
26
+ 'log' => '%plural% for new forum reply'
27
+ )
28
+ )
29
+ ), $hook_prefs );
30
+ }
31
+
32
+ /**
33
+ * Run
34
+ * @since 0.1
35
+ * @version 1.0
36
+ */
37
+ public function run() {
38
+ if ( $this->prefs['new_topic']['creds'] != 0 )
39
+ add_action( 'bbp_new_topic', array( $this, 'new_topic' ), 20, 4 );
40
+
41
+ if ( $this->prefs['new_reply']['creds'] != 0 )
42
+ add_action( 'bbp_new_reply', array( $this, 'new_reply' ), 20, 5 );
43
+ }
44
+
45
+ /**
46
+ * New Topic
47
+ * @since 0.1
48
+ * @version 1.0
49
+ */
50
+ public function new_topic( $topic_id, $forum_id, $anonymous_data, $topic_author ) {
51
+ // Check if user is excluded
52
+ if ( $this->core->exclude_user( $topic_author ) ) return;
53
+
54
+ // Make sure this is unique event
55
+ if ( $this->has_entry( 'new_forum_topic', $topic_id, $topic_author ) ) return;
56
+
57
+ // Execute
58
+ $this->core->add_creds(
59
+ 'new_forum_topic',
60
+ $topic_author,
61
+ $this->prefs['new_topic']['creds'],
62
+ $this->prefs['new_topic']['log'],
63
+ $topic_id,
64
+ array( 'ref_type' => 'post' )
65
+ );
66
+
67
+ // Clean up
68
+ unset( $this );
69
+ }
70
+
71
+ /**
72
+ * New Reply
73
+ * @since 0.1
74
+ * @version 1.0
75
+ */
76
+ public function new_replay( $reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author ) {
77
+ // Check if user is excluded
78
+ if ( $this->core->exclude_user( $reply_author ) ) return;
79
+
80
+ // Make sure this is unique event
81
+ if ( $this->has_entry( 'new_forum_reply', $reply_id, $reply_author ) ) return;
82
+
83
+ // Execute
84
+ $this->core->add_creds(
85
+ 'new_forum_reply',
86
+ $reply_author,
87
+ $this->prefs['new_reply']['creds'],
88
+ $this->prefs['new_reply']['log'],
89
+ $reply_id,
90
+ array( 'ref_type' => 'post' )
91
+ );
92
+
93
+ // Clean up
94
+ unset( $this );
95
+ }
96
+
97
+ /**
98
+ * Preferences
99
+ * @since 0.1
100
+ * @version 1.0
101
+ */
102
+ public function preferences() {
103
+ $prefs = $this->prefs; ?>
104
+
105
+ <!-- Creds for New Topic -->
106
+ <label for="<?php echo $this->field_id( array( 'new_topic', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Topic', 'mycred' ) ); ?></label>
107
+ <ol id="">
108
+ <li>
109
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_topic', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_topic', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_topic']['creds'] ); ?>" size="8" /></div>
110
+ </li>
111
+ <li class="empty">&nbsp;</li>
112
+ <li>
113
+ <label for="<?php echo $this->field_id( array( 'new_topic', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
114
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_topic', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_topic', 'log' ) ); ?>" value="<?php echo $prefs['new_topic']['log']; ?>" class="long" /></div>
115
+ <span class="description"><?php _e( 'Available template tags: General, Post', 'mycred' ); ?></span>
116
+ </li>
117
+ </ol>
118
+ <!-- Creds for New Reply -->
119
+ <label for="<?php echo $this->field_id( array( 'new_reply', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Reply', 'mycred' ) ); ?></label>
120
+ <ol id="">
121
+ <li>
122
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_reply', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_reply', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_reply']['creds'] ); ?>" size="8" /></div>
123
+ </li>
124
+ <li class="empty">&nbsp;</li>
125
+ <li>
126
+ <label for="<?php echo $this->field_id( array( 'new_reply', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
127
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_reply', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_reply', 'log' ) ); ?>" value="<?php echo $prefs['new_reply']['log']; ?>" class="long" /></div>
128
+ <span class="description"><?php _e( 'Available template tags: General, Post', 'mycred' ); ?></span>
129
+ </li>
130
+ </ol>
131
+ <?php unset( $this );
132
+ }
133
+ }
134
+ }
135
+ ?>
addons/buddypress/hooks/bp-profile.php ADDED
@@ -0,0 +1,422 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_BuddyPress_Profile class
5
+ *
6
+ * Creds for profile updates
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_BuddyPress_Profile' ) ) {
11
+ class myCRED_BuddyPress_Profile extends myCRED_Hook {
12
+
13
+ /**
14
+ * Construct
15
+ */
16
+ function __construct( $hook_prefs ) {
17
+ parent::__construct( array(
18
+ 'id' => 'hook_bp_profile',
19
+ 'defaults' => array(
20
+ 'update' => array(
21
+ 'creds' => 1,
22
+ 'log' => '%plural% for updating profile'
23
+ ),
24
+ 'avatar' => array(
25
+ 'creds' => 1,
26
+ 'log' => '%plural% for new avatar'
27
+ ),
28
+ 'new_friend' => array(
29
+ 'creds' => 1,
30
+ 'log' => '%plural% for new friendship'
31
+ ),
32
+ 'leave_friend' => array(
33
+ 'creds' => '-1',
34
+ 'log' => '%singular% deduction for loosing a friend'
35
+ ),
36
+ 'new_comment' => array(
37
+ 'creds' => 1,
38
+ 'log' => '%plural% for new comment'
39
+ ),
40
+ 'delete_comment' => array(
41
+ 'creds' => '-1',
42
+ 'log' => '%singular% deduction for comment removal'
43
+ ),
44
+ 'message' => array(
45
+ 'creds' => 1,
46
+ 'log' => '%plural% for sending a message'
47
+ ),
48
+ 'send_gift' => array(
49
+ 'creds' => 1,
50
+ 'log' => '%plural% for sending a gift'
51
+ )
52
+ )
53
+ ), $hook_prefs );
54
+ }
55
+
56
+ /**
57
+ * Run
58
+ * @since 0.1
59
+ * @version 1.0
60
+ */
61
+ public function run() {
62
+ if ( $this->prefs['update']['creds'] != 0 )
63
+ add_action( 'bp_activity_posted_update', array( $this, 'new_update' ), 20, 3 );
64
+
65
+ if ( $this->prefs['avatar']['creds'] != 0 )
66
+ add_action( 'xprofile_avatar_uploaded', array( $this, 'avatar_upload' ) );
67
+
68
+ if ( $this->prefs['new_friend']['creds'] != 0 )
69
+ add_action( 'friends_friendship_accepted', array( $this, 'friendship_join' ), 20, 3 );
70
+
71
+ if ( $this->prefs['leave_friend']['creds'] != 0 )
72
+ add_action( 'friends_friendship_deleted', array( $this, 'friendship_leave' ) );
73
+
74
+ if ( $this->prefs['new_comment']['creds'] != 0 )
75
+ add_action( 'bp_activity_comment_posted', array( $this, 'new_comment' ), 20, 2 );
76
+
77
+ if ( $this->prefs['delete_comment']['creds'] != 0 )
78
+ add_action( 'bp_activity_action_delete_activity', array( $this, 'delete_comment' ), 20, 2 );
79
+
80
+ if ( $this->prefs['message']['creds'] != 0 )
81
+ add_action( 'messages_message_sent', array( $this, 'messages' ) );
82
+
83
+ if ( $this->prefs['send_gift']['creds'] != 0 )
84
+ add_action( 'bp_gifts_send_gifts', array( $this, 'send_gifts' ), 20, 2 );
85
+ }
86
+
87
+ /**
88
+ * New Profile Update
89
+ * @since 0.1
90
+ * @version 1.0
91
+ */
92
+ public function new_update( $content, $user_id, $activity_id ) {
93
+ // Check if user is excluded
94
+ if ( $this->core->exclude_user( $user_id ) ) return;
95
+
96
+ // Make sure this is unique event
97
+ if ( $this->has_entry( 'new_profile_update', $activity_id, $user_id ) ) return;
98
+
99
+ // Execute
100
+ $this->core->add_creds(
101
+ 'new_profile_update',
102
+ $user_id,
103
+ $this->prefs['update']['creds'],
104
+ $this->prefs['update']['log'],
105
+ $activity_id,
106
+ 'bp_activity'
107
+ );
108
+
109
+ // Clean up
110
+ unset( $this );
111
+ }
112
+
113
+ /**
114
+ * Avatar Upload
115
+ * @since 0.1
116
+ * @version 1.0
117
+ */
118
+ public function avatar_upload() {
119
+ global $bp;
120
+
121
+ // Check if user is excluded
122
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
123
+
124
+ // Make sure this is unique event
125
+ if ( $this->has_entry( 'upload_avatar', $bp->loggedin_user->id ) ) return;
126
+
127
+ // Execute
128
+ $this->core->add_creds(
129
+ 'upload_avatar',
130
+ $bp->loggedin_user->id,
131
+ $this->prefs['avatar']['creds'],
132
+ $this->prefs['avatar']['log']
133
+ );
134
+
135
+ // Clean up
136
+ unset( $this );
137
+ }
138
+
139
+ /**
140
+ * New Friendship
141
+ * @since 0.1
142
+ * @version 1.0
143
+ */
144
+ public function friendship_join( $friendship_id, $initiator_user_id, $friend_user_id ) {
145
+ // Check if user is excluded
146
+ if ( $this->core->exclude_user( $initiator_user_id ) ) return;
147
+
148
+ // Check if friend is excluded
149
+ if ( $this->core->exclude_user( $friend_user_id ) ) return;
150
+
151
+ // Make sure this is unique event
152
+ if ( $this->has_entry( 'new_friendship', $friend_user_id, $initiator_user_id ) ) return;
153
+
154
+ // Execute
155
+ $this->core->add_creds(
156
+ 'new_friendship',
157
+ $initiator_user_id,
158
+ $this->prefs['new_friend']['creds'],
159
+ $this->prefs['new_friend']['log'],
160
+ $friend_user_id,
161
+ array( 'ref_type' => 'user' )
162
+ );
163
+
164
+ // Clean up
165
+ unset( $this );
166
+ }
167
+
168
+ /**
169
+ * Ending Friendship
170
+ * @since 0.1
171
+ * @version 1.0
172
+ */
173
+ public function friendship_leave( $friendship_id, $initiator_user_id, $friend_user_id ) {
174
+ // Check if user is excluded
175
+ if ( $this->core->exclude_user( $initiator_user_id ) ) return;
176
+
177
+ // Check if friend is excluded
178
+ if ( $this->core->exclude_user( $friend_user_id ) ) return;
179
+
180
+ // Make sure this is unique event
181
+ if ( $this->has_entry( 'ended_friendship', $friend_user_id, $initiator_user_id ) ) return;
182
+
183
+ // Execute
184
+ $this->core->add_creds(
185
+ 'ended_friendship',
186
+ $initiator_user_id,
187
+ $this->prefs['leave_friend']['creds'],
188
+ $this->prefs['leave_friend']['log'],
189
+ $friend_user_id,
190
+ array( 'ref_type' => 'user' )
191
+ );
192
+
193
+ // Clean up
194
+ unset( $this );
195
+ }
196
+
197
+ /**
198
+ * New Comment
199
+ * @since 0.1
200
+ * @version 1.0
201
+ */
202
+ public function new_comment( $comment_id, $params ) {
203
+ global $bp;
204
+
205
+ // Check if user is excluded
206
+ if ( $this->core->exclude_user( $bp->loggedin_user->id ) ) return;
207
+
208
+ // Make sure this is unique event
209
+ if ( $this->has_entry( 'new_comment', $comment_id ) ) return;
210
+
211
+ // Execute
212
+ $this->core->add_creds(
213
+ 'new_comment',
214
+ $bp->loggedin_user->id,
215
+ $this->prefs['new_comment']['creds'],
216
+ $this->prefs['new_comment']['log'],
217
+ $comment_id,
218
+ 'bp_comment'
219
+ );
220
+
221
+ // Clean up
222
+ unset( $this );
223
+ }
224
+
225
+ /**
226
+ * Comment Deletion
227
+ * @since 0.1
228
+ * @version 1.0
229
+ */
230
+ public function delete_comment( $activity_id, $user_id ) {
231
+ // Check if user is excluded
232
+ if ( $this->core->exclude_user( $user_id ) ) return;
233
+
234
+ // Make sure this is unique event
235
+ if ( $this->has_entry( 'comment_deletion', $activity_id ) ) return;
236
+
237
+ // Execute
238
+ $this->core->add_creds(
239
+ 'comment_deletion',
240
+ $user_id,
241
+ $this->prefs['delete_comment']['creds'],
242
+ $this->prefs['delete_comment']['log'],
243
+ $activity_id,
244
+ 'bp_comment'
245
+ );
246
+
247
+ // Clean up
248
+ unset( $this );
249
+ }
250
+
251
+ /**
252
+ * New Message
253
+ * @since 0.1
254
+ * @version 1.0
255
+ */
256
+ public function messages( $message ) {
257
+ // Check if user is excluded
258
+ if ( $this->core->exclude_user( $message->sender_id ) ) return;
259
+
260
+ // Make sure this is unique event
261
+ if ( $this->has_entry( 'new_message', $message->thread_id ) ) return;
262
+
263
+ // Execute
264
+ $this->core->add_creds(
265
+ 'new_message',
266
+ $message->sender_id,
267
+ $this->prefs['message']['creds'],
268
+ $this->prefs['message']['log'],
269
+ $message->thread_id,
270
+ 'bp_message'
271
+ );
272
+
273
+ // Clean up
274
+ unset( $this );
275
+ }
276
+
277
+ /**
278
+ * Send Gift
279
+ * @since 0.1
280
+ * @version 1.0
281
+ */
282
+ public function send_gifts( $to_user_id, $from_user_id ) {
283
+ // Check if sender is excluded
284
+ if ( $this->core->exclude_user( $from_user_id ) ) return;
285
+
286
+ // Check if recipient is excluded
287
+ if ( $this->core->exclude_user( $to_user_id ) ) return;
288
+
289
+ // Make sure this is unique event
290
+ if ( $this->has_entry( 'sending_gift', $to_user_id ) ) return;
291
+
292
+ // Exclude
293
+ $this->core->add_creds(
294
+ 'sending_gift',
295
+ $from_user_id,
296
+ $this->prefs['send_gift']['creds'],
297
+ $this->prefs['send_gift']['log'],
298
+ $to_user_id,
299
+ 'bp_gifts'
300
+ );
301
+
302
+ // Clean up
303
+ unset( $this );
304
+ }
305
+
306
+ /**
307
+ * Preferences
308
+ * @since 0.1
309
+ * @version 1.0
310
+ */
311
+ public function preferences() {
312
+ $prefs = $this->prefs; ?>
313
+
314
+ <!-- Creds for Profile Update -->
315
+ <label for="<?php echo $this->field_id( array( 'update', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Profile Updates', 'mycred' ) ); ?></label>
316
+ <ol>
317
+ <li>
318
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'update', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'update', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['update']['creds'] ); ?>" size="8" /></div>
319
+ </li>
320
+ <li class="empty">&nbsp;</li>
321
+ <li>
322
+ <label for="<?php echo $this->field_id( array( 'update', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
323
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'update', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'update', 'log' ) ); ?>" value="<?php echo $prefs['update']['log']; ?>" class="long" /></div>
324
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
325
+ </li>
326
+ </ol>
327
+ <!-- Creds for New Avatar -->
328
+ <label for="<?php echo $this->field_id( array( 'avatar', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Avatar', 'mycred' ) ); ?></label>
329
+ <ol id="">
330
+ <li>
331
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'avatar', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'avatar', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['avatar']['creds'] ); ?>" size="8" /></div>
332
+ </li>
333
+ <li class="empty">&nbsp;</li>
334
+ <li>
335
+ <label for="<?php echo $this->field_id( array( 'avatar', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
336
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'avatar', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'avatar', 'log' ) ); ?>" value="<?php echo $prefs['avatar']['log']; ?>" class="long" /></div>
337
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
338
+ </li>
339
+ </ol>
340
+ <!-- Creds for New Friendships -->
341
+ <label for="<?php echo $this->field_id( array( 'new_friend', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Friendships', 'mycred' ) ); ?></label>
342
+ <ol id="">
343
+ <li>
344
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_friend', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_friend', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_friend']['creds'] ); ?>" size="8" /></div>
345
+ </li>
346
+ <li class="empty">&nbsp;</li>
347
+ <li>
348
+ <label for="<?php echo $this->field_id( array( 'new_friend', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
349
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_friend', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_friend', 'log' ) ); ?>" value="<?php echo $prefs['new_friend']['log']; ?>" class="long" /></div>
350
+ <span class="description"><?php _e( 'Available template tags: General, User', 'mycred' ); ?></span>
351
+ </li>
352
+ </ol>
353
+ <!-- Creds for Leaving Friendships -->
354
+ <label for="<?php echo $this->field_id( array( 'leave_friend', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Leaving Friendship', 'mycred' ) ); ?></label>
355
+ <ol id="">
356
+ <li>
357
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'leave_friend', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'leave_friend', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['leave_friend']['creds'] ); ?>" size="8" /></div>
358
+ </li>
359
+ <li class="empty">&nbsp;</li>
360
+ <li>
361
+ <label for="<?php echo $this->field_id( array( 'leave_friend', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
362
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'leave_friend', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'leave_friend', 'log' ) ); ?>" value="<?php echo $prefs['leave_friend']['log']; ?>" class="long" /></div>
363
+ <span class="description"><?php _e( 'Available template tags: General, User', 'mycred' ); ?></span>
364
+ </li>
365
+ </ol>
366
+ <!-- Creds for New Comment -->
367
+ <label for="<?php echo $this->field_id( array( 'new_comment', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Comment', 'mycred' ) ); ?></label>
368
+ <ol id="">
369
+ <li>
370
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_comment', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'new_comment', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['new_comment']['creds'] ); ?>" size="8" /></div>
371
+ </li>
372
+ <li class="empty">&nbsp;</li>
373
+ <li>
374
+ <label for="<?php echo $this->field_id( array( 'new_comment', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
375
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'new_comment', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'new_comment', 'log' ) ); ?>" value="<?php echo $prefs['new_comment']['log']; ?>" class="long" /></div>
376
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
377
+ </li>
378
+ </ol>
379
+ <!-- Creds for Deleting Comment -->
380
+ <label for="<?php echo $this->field_id( array( 'delete_comment', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Deleting Comment', 'mycred' ) ); ?></label>
381
+ <ol id="">
382
+ <li>
383
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'delete_comment', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'delete_comment', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['delete_comment']['creds'] ); ?>" size="8" /></div>
384
+ </li>
385
+ <li class="empty">&nbsp;</li>
386
+ <li>
387
+ <label for="<?php echo $this->field_id( array( 'delete_comment', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
388
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'delete_comment', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'delete_comment', 'log' ) ); ?>" value="<?php echo $prefs['delete_comment']['log']; ?>" class="long" /></div>
389
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
390
+ </li>
391
+ </ol>
392
+ <!-- Creds for Sending Messages -->
393
+ <label for="<?php echo $this->field_id( array( 'message', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for New Messages', 'mycred' ) ); ?></label>
394
+ <ol id="">
395
+ <li>
396
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'message', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'message', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['message']['creds'] ); ?>" size="8" /></div>
397
+ </li>
398
+ <li class="empty">&nbsp;</li>
399
+ <li>
400
+ <label for="<?php echo $this->field_id( array( 'message', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
401
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'message', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'message', 'log' ) ); ?>" value="<?php echo $prefs['message']['log']; ?>" class="long" /></div>
402
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
403
+ </li>
404
+ </ol>
405
+ <!-- Creds for Sending Gifts -->
406
+ <label for="<?php echo $this->field_id( array( 'send_gift', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Sending Gift', 'mycred' ) ); ?></label>
407
+ <ol id="">
408
+ <li>
409
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'send_gift', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'send_gift', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['send_gift']['creds'] ); ?>" size="8" /></div>
410
+ </li>
411
+ <li class="empty">&nbsp;</li>
412
+ <li>
413
+ <label for="<?php echo $this->field_id( array( 'send_gift', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
414
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'send_gift', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'send_gift', 'log' ) ); ?>" value="<?php echo $prefs['send_gift']['log']; ?>" class="long" /></div>
415
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
416
+ </li>
417
+ </ol>
418
+ <?php unset( $this );
419
+ }
420
+ }
421
+ }
422
+ ?>
addons/buddypress/hooks/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/buddypress/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/buddypress/myCRED-addon-buddypress.php ADDED
@@ -0,0 +1,462 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Addon: BuddyPress
4
+ * Addon URI: http://mycred.merovingi.com
5
+ * Version: 1.0
6
+ * Description: The BuddyPress add-on extends <strong>my</strong>CRED to work with BuddyPress allowing you to hook into most BuddyPress related actions.
7
+ * Author: Gabriel S Merovingi
8
+ * Author URI: http://www.merovingi.com
9
+ */
10
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
11
+ define( 'myCRED_BP', __FILE__ );
12
+ define( 'myCRED_BP_DIR', myCRED_ADDONS_DIR . 'buddypress/' );
13
+ define( 'myCRED_BP_HOOKS_DIR', myCRED_BP_DIR . 'hooks/' );
14
+ /**
15
+ * BuddyPress specific hooks grouped together
16
+ */
17
+ require_once( myCRED_BP_HOOKS_DIR . 'bp-groups.php' );
18
+ require_once( myCRED_BP_HOOKS_DIR . 'bp-profile.php' );
19
+ require_once( myCRED_BP_HOOKS_DIR . 'bp-links.php' );
20
+ require_once( myCRED_BP_HOOKS_DIR . 'bp-press.php' );
21
+ require_once( myCRED_BP_HOOKS_DIR . 'bp-galleries.php' );
22
+ /**
23
+ * myCRED_BuddyPress class
24
+ *
25
+ * @since 0.1
26
+ * @version 1.0
27
+ */
28
+ if ( !class_exists( 'myCRED_BuddyPress' ) ) {
29
+ class myCRED_BuddyPress extends myCRED_Module {
30
+
31
+ protected $hooks;
32
+ protected $settings;
33
+
34
+ /**
35
+ * Constructor
36
+ */
37
+ public function __construct() {
38
+ parent::__construct( 'myCRED_BuddyPress', array(
39
+ 'module_name' => 'buddypress',
40
+ 'defaults' => array(
41
+ 'visibility' => array(
42
+ 'balance' => 0,
43
+ 'history' => 0
44
+ ),
45
+ 'balance_location' => '',
46
+ 'balance_template' => '%plural% balance: %creds%',
47
+ 'history_location' => '',
48
+ 'history_menu_title' => array(
49
+ 'me' => __( "My History", 'mycred' ),
50
+ 'others' => __( "%s's History", 'mycred' )
51
+ ),
52
+ 'history_menu_pos' => 99
53
+ ),
54
+ 'register' => false,
55
+ 'add_to_core' => true
56
+ ) );
57
+ if ( !is_admin() )
58
+ add_action( 'bp_setup_nav', array( $this, 'setup_nav' ) );
59
+ }
60
+
61
+ /**
62
+ * Init
63
+ * @since 0.1
64
+ * @version 1.0
65
+ */
66
+ public function module_init() {
67
+ add_filter( 'mycred_setup_hooks', array( $this, 'register_hooks' ) );
68
+ add_action( 'admin_bar_menu', array( $this, 'adjust_admin_bar' ), 110 );
69
+ add_filter( 'mycred_post_type_excludes', array( $this, 'exclude_bb_post_types' ) );
70
+
71
+ if ( $this->buddypress['balance_location'] == 'top' || $this->buddypress['balance_location'] == 'both' )
72
+ add_action( 'bp_before_member_header_meta', array( $this, 'show_balance' ) );
73
+
74
+ if ( $this->buddypress['balance_location'] == 'profile_tab' || $this->buddypress['balance_location'] == 'both' )
75
+ add_action( 'bp_profile_field_item', array( $this, 'show_balance_profile' ) );
76
+ }
77
+
78
+ /**
79
+ * Exclude Post Types
80
+ * Used to exclude custom post types from being included under "Points for Publishing Content".
81
+ * @since 0.1
82
+ * @version 1.0
83
+ */
84
+ public function exclude_bb_post_types( $excludes ) {
85
+ if ( class_exists( 'bbPress' ) ) {
86
+ $excludes[] = 'topic';
87
+ $excludes[] = 'reply';
88
+ $excludes[] = 'forum';
89
+ }
90
+ return $excludes;
91
+ }
92
+
93
+ /**
94
+ * Adjust Admin Bar
95
+ * @since 0.1
96
+ * @version 1.0
97
+ */
98
+ public function adjust_admin_bar() {
99
+ // Bail if this is an ajax request
100
+ if ( !bp_use_wp_admin_bar() || defined( 'DOING_AJAX' ) || $this->core->exclude_user( get_current_user_id() ) )
101
+ return;
102
+
103
+ // Only add menu for logged in user
104
+ if ( is_user_logged_in() ) {
105
+ global $bp, $wp_admin_bar;
106
+
107
+ // Add secondary parent item for all BuddyPress components
108
+ $wp_admin_bar->add_menu( array(
109
+ 'parent' => 'my-account-xprofile',
110
+ 'id' => 'user-admin-mycred',
111
+ 'title' => $this->buddypress['history_menu_title']['me'],
112
+ 'href' => bp_loggedin_user_domain() . 'mycred-history/'
113
+ ) );
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Show Balance in Profile
119
+ * @since 0.1
120
+ * @version 1.0
121
+ */
122
+ public function show_balance_profile() {
123
+ $user_id = bp_displayed_user_id();
124
+ if ( $this->core->exclude_user( $user_id ) ) return;
125
+
126
+ $balance = $this->core->get_users_cred( $user_id ); ?>
127
+
128
+ <tr id="wp_displayname">
129
+ <td class="label"><?php
130
+
131
+ // Balance label
132
+ $template = $this->buddypress['balance_template'];
133
+ $template = str_replace( '%number%', '', $template );
134
+ $template = str_replace( '%creds%', '', $template );
135
+ $template = str_replace( '%rank%', '', $template );
136
+ echo $this->core->template_tags_general( trim( $template ) ); ?></td>
137
+ <td class="data">
138
+ <?php echo $this->core->format_creds( $balance ); ?>
139
+
140
+ </td>
141
+ </tr>
142
+ <?php
143
+ }
144
+
145
+ /**
146
+ * Show Balance in Header
147
+ * @since 0.1
148
+ * @version 1.0
149
+ */
150
+ public function show_balance( $table_row = false ) {
151
+ if ( bp_is_my_profile() || ( !bp_is_my_profile() && $this->buddypress['visibility']['balance'] ) || mycred_is_admin() ) {
152
+ $user_id = bp_displayed_user_id();
153
+ if ( $this->core->exclude_user( $user_id ) ) return;
154
+
155
+ $balance = $this->core->get_users_cred( $user_id );
156
+
157
+ $template = $this->buddypress['balance_template'];
158
+ $template = str_replace( '%number%', $balance, $template );
159
+ $template = str_replace( '%creds%', $this->core->format_creds( $balance ), $template );
160
+ $template = str_replace( '%rank%', mycred_rankings_position( $user_id ), $template );
161
+
162
+ echo '<div id="mycred-my-balance">' . $this->core->template_tags_general( $template ) . '</div>';
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Setup Navigation
168
+ * @since 0.1
169
+ * @version 1.0
170
+ */
171
+ public function setup_nav() {
172
+ if ( !is_user_logged_in() ) return;
173
+ global $bp;
174
+
175
+ $user_id = bp_displayed_user_id();
176
+ if ( $this->core->exclude_user( $user_id ) ) return;
177
+
178
+ $current = get_current_user_id();
179
+ if ( !$this->buddypress['visibility']['history'] && !$this->core->can_edit_plugin() && $user_id != $current ) return;
180
+
181
+ if ( $this->buddypress['visibility']['history'] || $this->core->can_edit_plugin() )
182
+ $show_for_displayed_user = true;
183
+ else
184
+ $show_for_displayed_user = false;
185
+
186
+ // Top Level Nav Item
187
+ $top_name = bp_word_or_name( $this->buddypress['history_menu_title']['me'], $this->buddypress['history_menu_title']['others'], false, false );
188
+ bp_core_new_nav_item( array(
189
+ 'name' => $this->core->template_tags_general( $top_name ),
190
+ 'slug' => 'mycred-history',
191
+ 'parent_url' => $bp->displayed_user->domain,
192
+ 'default_subnav_slug' => 'mycred-history',
193
+ 'screen_function' => array( $this, 'my_history' ),
194
+ 'show_for_displayed_user' => $show_for_displayed_user,
195
+ 'position' => $this->buddypress['history_menu_pos']
196
+ ) );
197
+
198
+ // Date Sorting
199
+ $date_sorting = apply_filters( 'mycred_sort_by_time', array(
200
+ '' => __( 'All', 'mycred' ),
201
+ 'today' => __( 'Today', 'mycred' ),
202
+ 'yesterday' => __( 'Yesterday', 'mycred' ),
203
+ 'thisweek' => __( 'This Week', 'mycred' ),
204
+ 'thismonth' => __( 'This Month', 'mycred' )
205
+ ) );
206
+ // "All" is default
207
+ bp_core_new_subnav_item( array(
208
+ 'name' => 'All',
209
+ 'slug' => 'mycred-history',
210
+ 'parent_url' => $bp->displayed_user->domain . 'mycred-history/',
211
+ 'parent_slug' => 'mycred-history',
212
+ 'screen_function' => array( $this, 'my_history' ),
213
+ 'show_for_displayed_user' => $show_for_displayed_user
214
+ ) );
215
+ // Loop though and add each filter option as a sub menu item
216
+ if ( !empty( $date_sorting ) ) {
217
+ foreach ( $date_sorting as $sorting_id => $sorting_name ) {
218
+ if ( empty( $sorting_id ) ) continue;
219
+
220
+ bp_core_new_subnav_item( array(
221
+ 'name' => $sorting_name,
222
+ 'slug' => $sorting_id,
223
+ 'parent_url' => $bp->displayed_user->domain . 'mycred-history/',
224
+ 'parent_slug' => 'mycred-history',
225
+ 'screen_function' => array( $this, 'my_history' ),
226
+ 'show_for_displayed_user' => $show_for_displayed_user
227
+ ) );
228
+ }
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Construct My History Page
234
+ * @since 0.1
235
+ * @version 1.0
236
+ */
237
+ public function my_history() {
238
+ add_action( 'bp_template_title', array( $this, 'my_history_title' ) );
239
+ add_action( 'bp_template_content', array( $this, 'my_history_screen' ) );
240
+ add_filter( 'mycred_log_column_headers', array( $this, 'columns' ) );
241
+ bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
242
+ }
243
+
244
+ /**
245
+ * Adjust Log Columns
246
+ * @since 0.1
247
+ * @version 1.0
248
+ */
249
+ public function columns( $columns ) {
250
+ unset( $columns['column-username'] );
251
+ return $columns;
252
+ }
253
+
254
+ /**
255
+ * My History Title
256
+ * @since 0.1
257
+ * @version 1.0
258
+ */
259
+ public function my_history_title() {
260
+ $title = bp_word_or_name( $this->buddypress['history_menu_title']['me'], $this->buddypress['history_menu_title']['others'], false, false );
261
+ echo $this->core->template_tags_general( $title );
262
+ }
263
+
264
+ /**
265
+ * My History Content
266
+ * @since 0.1
267
+ * @version 1.0
268
+ */
269
+ public function my_history_screen() {
270
+ global $bp;
271
+
272
+ $args = array(
273
+ 'user_id' => bp_displayed_user_id(),
274
+ 'number' => 10
275
+ );
276
+
277
+ if ( isset( $bp->canonical_stack['action'] ) && $bp->canonical_stack['action'] != 'mycred-history' )
278
+ $args['time'] = $bp->canonical_stack['action'];
279
+
280
+ $log = new myCRED_Query_Log( $args );
281
+ unset( $log->headers['column-username'] ); ?>
282
+
283
+ <div class="wrap" id="myCRED-wrap">
284
+ <form method="get" action="">
285
+ <?php $log->display(); ?>
286
+
287
+ </form>
288
+ </div>
289
+ <?php
290
+ unset( $log );
291
+ }
292
+
293
+ /**
294
+ * Register Hooks
295
+ * @since 0.1
296
+ * @version 1.0
297
+ */
298
+ public function register_hooks( $installed ) {
299
+ $installed['hook_bp_groups'] = array(
300
+ 'title' => __( 'BuddyPress: Groups' ),
301
+ 'description' => __( 'Awards %_plural% for group related actions. Use minus to deduct %_plural% or zero to disable a specific hook.', 'mycred' ),
302
+ 'callback' => array( 'myCRED_BuddyPress_Groups' )
303
+ );
304
+ $installed['hook_bp_profile'] = array(
305
+ 'title' => __( 'BuddyPress: Members' ),
306
+ 'description' => __( 'Awards %_plural% for profile related actions.', 'mycred' ),
307
+ 'callback' => array( 'myCRED_BuddyPress_Profile' )
308
+ );
309
+
310
+ if ( function_exists( 'bp_links_setup_root_component' ) ) {
311
+ $installed['hook_bp_links'] = array(
312
+ 'title' => __( 'BuddyPress: Links' ),
313
+ 'description' => __( 'Awards %_plural% for link related actions.', 'mycred' ),
314
+ 'callback' => array( 'myCRED_BuddyPress_Links' )
315
+ );
316
+ }
317
+
318
+ if ( function_exists( 'bpa_init' ) || function_exists( 'bpgpls_init' ) ) {
319
+ $installed['hook_bp_gallery'] = array(
320
+ 'title' => __( 'BuddyPress: Gallery Actions' ),
321
+ 'description' => __( 'Awards %_plural% for creating a new gallery either using BP Album+ or BP Gallery.', 'mycred' ),
322
+ 'callback' => array( 'myCRED_BuddyPress_Gallery' )
323
+ );
324
+ }
325
+
326
+ if ( class_exists( 'bbPress' ) ) {
327
+ $installed['hook_bp_bbpress'] = array(
328
+ 'title' => __( 'bbPress 2.0' ),
329
+ 'description' => __( 'Awards %_plural% for bbPress actions.', 'mycred' ),
330
+ 'callback' => array( 'myCRED_BuddyPress_bbPress' )
331
+ );
332
+ }
333
+
334
+ return $installed;
335
+ }
336
+
337
+ /**
338
+ * After General Settings
339
+ * @since 0.1
340
+ * @version 1.0
341
+ */
342
+ public function after_general_settings() {
343
+ // Settings
344
+ global $bp;
345
+
346
+ $settings = $this->buddypress;
347
+
348
+ $balance_locations = array(
349
+ '' => __( 'Do not show.', 'mycred' ),
350
+ 'top' => __( 'Include in Profile Header.', 'mycred' ),
351
+ 'profile_tab' => __( 'Include under the "Profile" tab', 'mycred' ),
352
+ 'both' => __( 'Include under the "Profile" tab and Profile Header.', 'mycred' )
353
+ );
354
+
355
+ $history_locations = array(
356
+ '' => __( 'Do not show.', 'mycred' ),
357
+ 'top' => __( 'Show in Profile', 'mycred' )
358
+ );
359
+
360
+ $bp_nav_positions = array();
361
+ if ( isset( $bp->bp_nav ) ) {
362
+ foreach ( $bp->bp_nav as $pos => $data ) {
363
+ if ( $data['slug'] == 'mycred-history' ) continue;
364
+ $bp_nav_positions[] = ucwords( $data['slug'] ) . ' = ' . $pos;
365
+ }
366
+ }?>
367
+
368
+ <h4 style="color:#BBD865;"><?php _e( 'BuddyPress', 'mycred' ); ?></h4>
369
+ <div class="body" style="display:none;">
370
+ <label class="subheader" for="<?php echo $this->field_id( 'balance_location' ); ?>"><?php echo $this->core->template_tags_general( __( '%singular% Balance', 'mycred' ) ); ?></label>
371
+ <ol>
372
+ <li>
373
+ <select name="<?php echo $this->field_name( 'balance_location' ); ?>" id="<?php echo $this->field_id( 'balance_location' ); ?>">
374
+ <?php
375
+ foreach ( $balance_locations as $location => $description ) {
376
+ echo '<option value="' . $location . '"';
377
+ if ( isset( $settings['balance_location'] ) && $settings['balance_location'] == $location ) echo ' selected="selected"';
378
+ echo '>' . $description . '</option>';
379
+ }
380
+ ?>
381
+
382
+ </select>
383
+ </li>
384
+ <li>
385
+ <input type="checkbox" name="<?php echo $this->field_name( array( 'visibility' => 'balance' ) ); ?>" id="<?php echo $this->field_id( array( 'visibility' => 'balance' ) ); ?>" <?php checked( $settings['visibility']['balance'], 1 ); ?> value="1" />
386
+ <label for="<?php echo $this->field_id( array( 'visibility' => 'balance' ) ); ?>"><?php echo $this->core->template_tags_general( __( 'Members can view each others %_singular% balance.', 'mycred' ) ); ?></label>
387
+ </li>
388
+ </ol>
389
+ <ol>
390
+ <li>
391
+ <label for="<?php echo $this->field_id( 'balance_template' ); ?>"><?php _e( 'Template', 'mycred' ); ?></label>
392
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'balance_template' ); ?>" id="<?php echo $this->field_id( 'balance_template' ); ?>" value="<?php echo $settings['balance_template']; ?>" class="long" /></div>
393
+ <span class="description"><?php _e( 'Available template tags are: %creds%, %number%, %rank%', 'mycred' ); ?></span>
394
+ </li>
395
+ </ol>
396
+ <label class="subheader" for="<?php echo $this->field_id( 'history_location' ); ?>"><?php echo $this->core->template_tags_general( __( '%plural% History', 'mycred' ) ); ?></label>
397
+ <ol>
398
+ <li>
399
+ <select name="<?php echo $this->field_name( 'history_location' ); ?>" id="<?php echo $this->field_id( 'history_location' ); ?>">
400
+ <?php
401
+ foreach ( $history_locations as $location => $description ) {
402
+ echo '<option value="' . $location . '"';
403
+ if ( isset( $settings['history_location'] ) && $settings['history_location'] == $location ) echo ' selected="selected"';
404
+ echo '>' . $description . '</option>';
405
+ }
406
+ ?>
407
+
408
+ </select>
409
+ </li>
410
+ <li>
411
+ <input type="checkbox" name="<?php echo $this->field_name( array( 'visibility' => 'history' ) ); ?>" id="<?php echo $this->field_id( array( 'visibility' => 'history' ) ); ?>" <?php checked( $settings['visibility']['history'], 1 ); ?> value="1" />
412
+ <label for="<?php echo $this->field_id( array( 'visibility' => 'history' ) ); ?>"><?php echo $this->core->template_tags_general( __( 'Members can view each others %_plural% history.', 'mycred' ) ); ?></label>
413
+ </li>
414
+ </ol>
415
+ <ol class="inline">
416
+ <li>
417
+ <label for="<?php echo $this->field_id( array( 'history_menu_title' => 'me' ) ); ?>"><?php _e( 'Menu Title', 'mycred' ); ?></label>
418
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'history_menu_title' => 'me' ) ); ?>" id="<?php echo $this->field_id( array( 'history_menu_title' => 'me' ) ); ?>" value="<?php echo $settings['history_menu_title']['me']; ?>" size="25" /></div>
419
+ <span class="description"><?php _e( 'Title shown to me', 'mycred' ); ?></span>
420
+ </li>
421
+ <li>
422
+ <label>&nbsp;</label>
423
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'history_menu_title' => 'others' ) ); ?>" id="<?php echo $this->field_id( array( 'history_menu_title' => 'others' ) ); ?>" value="<?php echo $settings['history_menu_title']['others']; ?>" size="25" /></div>
424
+ <span class="description"><?php _e( 'Title shown to others. Use %s to show the first name.', 'mycred' ); ?></span>
425
+ </li>
426
+ </ol>
427
+ <ol>
428
+ <li>
429
+ <label for="<?php echo $this->field_id( 'history_menu_pos' ); ?>"><?php _e( 'Menu Position', 'mycred' ); ?></label>
430
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'history_menu_pos' ); ?>" id="<?php echo $this->field_id( 'history_menu_pos' ); ?>" value="<?php echo $settings['history_menu_pos']; ?>" class="short" /></div>
431
+ <span class="description"><?php echo __( 'Current menu positions:', 'mycred' ) . ' ' . implode( ', ', $bp_nav_positions ); ?></span>
432
+ </li>
433
+ </ol>
434
+ </div>
435
+ <?php
436
+ }
437
+
438
+ /**
439
+ * Sanitize Core Settings
440
+ * @since 0.1
441
+ * @version 1.0
442
+ */
443
+ public function sanitize_extra_settings( $new_data, $data, $core ) {
444
+
445
+ $new_data['buddypress']['balance_location'] = sanitize_text_field( $data['buddypress']['balance_location'] );
446
+ $new_data['buddypress']['visibility']['balance'] = ( isset( $data['buddypress']['visibility']['balance'] ) ) ? true : false;
447
+
448
+ $new_data['buddypress']['history_location'] = sanitize_text_field( $data['buddypress']['history_location'] );
449
+ $new_data['buddypress']['balance_template'] = sanitize_text_field( $data['buddypress']['balance_template'] );
450
+
451
+ $new_data['buddypress']['history_menu_title']['me'] = sanitize_text_field( $data['buddypress']['history_menu_title']['me'] );
452
+ $new_data['buddypress']['history_menu_title']['others'] = sanitize_text_field( $data['buddypress']['history_menu_title']['others'] );
453
+ $new_data['buddypress']['history_menu_pos'] = abs( $data['buddypress']['history_menu_pos'] );
454
+ $new_data['buddypress']['visibility']['history'] = ( isset( $data['buddypress']['visibility']['history'] ) ) ? true : false;
455
+
456
+ return $new_data;
457
+ }
458
+ }
459
+ $buddypress = new myCRED_BuddyPress();
460
+ $buddypress->load();
461
+ }
462
+ ?>
addons/buy-creds/abstracts/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php ADDED
@@ -0,0 +1,932 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Payment_Gateway class
5
+ * @see http://mycred.merovingi.com/add-ons/mycred_payment_gateway/
6
+ * @since 0.1
7
+ * @version 1.0
8
+ */
9
+ if ( !class_exists( 'myCRED_Payment_Gateway' ) ) {
10
+ abstract class myCRED_Payment_Gateway {
11
+
12
+ protected $id;
13
+ protected $core;
14
+ protected $prefs = false;
15
+ protected $current_user_id;
16
+ protected $response;
17
+ protected $request;
18
+ protected $status;
19
+ protected $errors;
20
+
21
+ /**
22
+ * Construct
23
+ */
24
+ function __construct( $args = array(), $gateway_prefs = NULL ) {
25
+ // Current User ID
26
+ $this->current_user_id = get_current_user_id();
27
+
28
+ // Arguments
29
+ if ( !empty( $args ) ) {
30
+ foreach ( $args as $key => $value ) {
31
+ $this->$key = $value;
32
+ }
33
+ }
34
+
35
+ // Preferences
36
+ if ( $gateway_prefs !== NULL ) {
37
+ // Assign prefs if set
38
+ if ( is_array( $gateway_prefs ) && isset( $gateway_prefs[$this->id] ) )
39
+ $this->prefs = $gateway_prefs[$this->id];
40
+ elseif ( is_object( $gateway_prefs ) && isset( $gateway_prefs->gateway_prefs[$this->id] ) )
41
+ $this->prefs = $gateway_prefs->gateway_prefs[$this->id];
42
+
43
+ // Apply defaults (if needed)
44
+ if ( empty( $this->prefs ) || $this->prefs === false )
45
+ $this->prefs = $this->defaults;
46
+
47
+ $this->core = mycred_get_settings();
48
+ }
49
+
50
+ // Decode Log Entries
51
+ add_filter( 'mycred_prep_template_tags', array( $this, 'decode_log_entries' ), 10, 2 );
52
+ add_filter( 'mycred_parse_log_entry_buy_creds_with_' . $this->id, array( $this, 'log_entry' ), 10, 2 );
53
+ }
54
+
55
+ /**
56
+ * Process Purchase
57
+ * @since 0.1
58
+ * @version 1.0
59
+ */
60
+ function process() {
61
+ wp_die( 'function myCRED_Payment_Gateway::process() must be over-ridden in a sub-class.' );
62
+ }
63
+
64
+ /**
65
+ * Buy Creds Handler
66
+ * @since 0.1
67
+ * @version 1.0
68
+ */
69
+ function buy() {
70
+ wp_die( 'function myCRED_Payment_Gateway::buy() must be over-ridden in a sub-class.' );
71
+ }
72
+
73
+ /**
74
+ * Results Handler
75
+ * @since 0.1
76
+ * @version 1.0
77
+ */
78
+ public function returning() { }
79
+
80
+ /**
81
+ * Preferences
82
+ * @since 0.1
83
+ * @version 1.0
84
+ */
85
+ function preferences() {
86
+ echo '<p>' . __( 'This Payment Gateway has no settings' ) . '</p>';
87
+ }
88
+
89
+ /**
90
+ * Sanatize Prefs
91
+ * @since 0.1
92
+ * @version 1.0
93
+ */
94
+ function sanitise_preferences( $data ) {
95
+ return $data;
96
+ }
97
+
98
+ /**
99
+ * Decode Log Entries
100
+ * @since 0.1
101
+ * @version 1.0
102
+ */
103
+ function log_entry( $content, $log_entry ) {
104
+ $content = $this->core->template_tags_user( $content, $log_entry->ref_id );
105
+ return $content;
106
+ }
107
+
108
+ /**
109
+ * Get Field Name
110
+ * Returns the field name for the current gateway
111
+ * @since 0.1
112
+ * @version 1.0
113
+ */
114
+ public function field_name( $field = '' ) {
115
+ if ( is_array( $field ) ) {
116
+ $array = array();
117
+ foreach ( $field as $parent => $child ) {
118
+ if ( !is_numeric( $parent ) )
119
+ $array[] = str_replace( '_', '-', $parent );
120
+
121
+ if ( !empty( $child ) && !is_array( $child ) )
122
+ $array[] = str_replace( '_', '-', $child );
123
+ }
124
+ $field = '[' . implode( '][', $array ) . ']';
125
+ }
126
+ else {
127
+ $field = '[' . $field . ']';
128
+ }
129
+ return 'mycred_pref_buycreds[gateway_prefs][' . $this->id . ']' . $field;
130
+ }
131
+
132
+ /**
133
+ * Get Field ID
134
+ * Returns the field id for the current gateway
135
+ * @since 0.1
136
+ * @version 1.0
137
+ */
138
+ public function field_id( $field = '' ) {
139
+ if ( is_array( $field ) ) {
140
+ $array = array();
141
+ foreach ( $field as $parent => $child ) {
142
+ if ( !is_numeric( $parent ) )
143
+ $array[] = str_replace( '_', '-', $parent );
144
+
145
+ if ( !empty( $child ) && !is_array( $child ) )
146
+ $array[] = str_replace( '_', '-', $child );
147
+ }
148
+ $field = implode( '-', $array );
149
+ }
150
+ else {
151
+ $field = str_replace( '_', '-', $field );
152
+ }
153
+ return 'mycred-gateway-prefs-' . str_replace( '_', '-', $this->id ) . '-' . $field;
154
+ }
155
+
156
+ /**
157
+ * Callback URL
158
+ * @since 0.1
159
+ * @version 1.0
160
+ */
161
+ public function callback_url() {
162
+ return get_bloginfo( 'url' ) . '/?mycred_call=' . $this->id;
163
+ }
164
+
165
+ /**
166
+ * Purchase Page Header
167
+ * @since 0.1
168
+ * @version 1.0
169
+ */
170
+ public function purchase_header( $title = '', $reload = false ) { ?>
171
+
172
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
173
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
174
+ <head>
175
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
176
+ <title><?php echo $title; ?></title>
177
+ <meta name="robots" content="noindex, nofollow" />
178
+ <?php if ( $reload ) echo '<meta http-equiv="refresh" content="2;url=' . $reload . '" />'; ?>
179
+
180
+ <style type="text/css">
181
+ html { text-align: center; background-color: #FCFCFC; }
182
+ body { text-align: center; width: 50%; margin: 100px auto 48px auto; border-radius: 5px; border: 1px solid #dedede; padding: 32px 24px 24px 24px; background-color: white; font-family: Arial; }
183
+ .tl { text-align: left; }
184
+ .tc { text-align: center; }
185
+ .tr { text-align: right; }
186
+ .tj { text-align: justify; }
187
+ p { font-size: 10px; margin-top: 24px; text-align: left; }
188
+ form p { margin-top: 0; }
189
+ form label { display: block; }
190
+ form .long { width: 40%; }
191
+ form .medium { width: 20%; }
192
+ form .short { width: 10%; }
193
+ form .submit { text-align: right; }
194
+ form .error label { color: red; }
195
+ ul li { text-align: left; }
196
+ pre { text-align: left; background-color: #eee; padding: 4px; white-space: pre-wrap; }
197
+ a { color: #0E79BF; text-decoration: none; }
198
+ img { margin: 0 auto 12px auto; display: block; float: none; }
199
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
200
+ body { padding: 32px 12px; }
201
+ }
202
+ @media only screen and (max-width: 480px) {
203
+ body { padding: 48px 12px; margin-top: 48px; }
204
+ span { display: block; padding-top: 24px; }
205
+ }
206
+ </style>
207
+ </head>
208
+ <body>
209
+ <?php
210
+ }
211
+
212
+ /**
213
+ * Purchase Page Footer
214
+ * @since 0.1
215
+ * @version 1.0
216
+ */
217
+ public function purchase_footer() { ?>
218
+
219
+ </body>
220
+ </html>
221
+ <?php
222
+ }
223
+
224
+ /**
225
+ * Form Builder with Redirect
226
+ * Used by gateways that redirects users to a remote processor.
227
+ * @since 0.1
228
+ * @version 1.0
229
+ */
230
+ public function form_with_redirect( $hidden_fields = array(), $location = '', $logo_url = '', $custom_html = '', $sales_data = '' ) {
231
+ // Prep
232
+ $id = $this->id;
233
+ $goto = str_replace( '-', ' ', $id );
234
+ $goto = str_replace( '_', ' ', $goto );
235
+ $goto = __( 'Go to ', 'mycred' ) . ucwords( $goto );
236
+
237
+ // Logo
238
+ if ( empty( $logo_url ) )
239
+ $logo_url = plugins_url( 'images/cred-icon32.png', myCRED_THIS );
240
+
241
+ // Hidden Fields
242
+ $hidden_fields = apply_filters( "mycred_{$id}_purchase_fields", $hidden_fields, $this ); ?>
243
+
244
+ <form name="mycred_<?php echo str_replace( '-', '_', $this->id ); ?>_request" action="<?php echo $location; ?>" method="post">
245
+ <?php
246
+ // Required hidden form fields
247
+ foreach ( $hidden_fields as $name => $value ) {
248
+ echo "\t" . '<input type="hidden" name="' . $name . '" value="' . $value . '" />' . "\n";
249
+ }
250
+
251
+ // Option to add custom HTML
252
+ if ( !empty( $custom_html ) )
253
+ echo $custom_html; ?>
254
+
255
+ <div id="payment-gateway">
256
+ <img src="<?php echo $logo_url; ?>" border="0" alt="<?php _e( 'Payment Gateway Logo', 'mycred' ); ?>" />
257
+ <img src="<?php echo plugins_url( 'images/loading.gif', myCRED_PURCHASE ); ?>" alt="Loading" />
258
+ </div>
259
+ <?php
260
+ // Hidden submit button
261
+ $hidden_submit = '<input type="submit" name="submit-form" value="' . $goto . '" />';
262
+ if ( $this->prefs['sandbox'] )
263
+ echo $hidden_submit;
264
+ else
265
+ echo '<noscript>' . $hidden_submit . '</noscript>'; ?>
266
+
267
+ </form>
268
+ <div>
269
+ <p class="tc"><a href="javascript:void(0);" onclick="document.mycred_<?php echo str_replace( '-', '_', $this->id ); ?>_request.submit();return false;"><?php _e( 'Click here if you are not automatically redirected', 'mycred' ); ?></a></p>
270
+ </div>
271
+ <?php
272
+ // Sandbox
273
+ if ( $this->prefs['sandbox'] ) {
274
+ echo '<pre>request: ' . print_r( $hidden_fields, true ) . '</pre>';
275
+
276
+ echo '<pre>sales_data: ' . print_r( $this->decode_sales_data( $hidden_fields[$sales_data] ), true ) . '</pre>';
277
+
278
+ echo '<pre>length: ' . print_r( strlen( $hidden_fields[$sales_data] ), true ) . '</pre>';
279
+ }
280
+ ?>
281
+
282
+ <script type="text/javascript">
283
+ <?php if ( $this->prefs['sandbox'] ) echo '//'; ?>setTimeout( "document.mycred_<?php echo str_replace( '-', '_', $this->id ); ?>_request.submit()",2000 );
284
+ </script>
285
+ <?php
286
+ }
287
+
288
+ /**
289
+ * Get To
290
+ * Returns either the current user id or if gifting is enabled and used
291
+ * the id of the user this is gifted to.
292
+ * @since 0.1
293
+ * @version 1.0
294
+ */
295
+ public function get_to() {
296
+ // Gift to a user
297
+ if ( $this->core->buy_creds['gifting']['members'] == 1 ) {
298
+ if ( isset( $_POST['gift_to'] ) ) {
299
+ $gift_to = trim( $_POST['gift_to'] );
300
+ return abs( $gift_to );
301
+ }
302
+ elseif ( isset( $_GET['gift_to'] ) ) {
303
+ $gift_to = trim( $_GET['gift_to'] );
304
+ return abs( $gift_to );
305
+ }
306
+ }
307
+
308
+ // Gifting author
309
+ if ( $this->core->buy_creds['gifting']['authors'] == 1 ) {
310
+ if ( isset( $_POST['post_id'] ) ) {
311
+ $post_id = trim( $_POST['post_id'] );
312
+ $post_id = abs( $post_id );
313
+ $post = get_post( (int) $post_id );
314
+ $author = $post->post_author;
315
+ unset( $post );
316
+ return (int) $author;
317
+ }
318
+ elseif ( isset( $_GET['post_id'] ) ) {
319
+ $post_id = trim( $_GET['post_id'] );
320
+ $post_id = abs( $post_id );
321
+ $post = get_post( (int) $post_id );
322
+ $author = $post->post_author;
323
+ unset( $post );
324
+ return (int) $author;
325
+ }
326
+ }
327
+
328
+ return $this->current_user_id;
329
+ }
330
+
331
+ /**
332
+ * Get Thank You Page
333
+ * @since 0.1
334
+ * @version 1.0
335
+ */
336
+ public function get_thankyou() {
337
+ if ( $this->core->buy_creds['thankyou']['use'] == 'page' )
338
+ return get_permalink( $this->core->buy_creds['thankyou']['page'] );
339
+ else
340
+ return get_bloginfo( 'url' ) . '/' . $this->core->buy_creds['thankyou']['custom'];
341
+ }
342
+
343
+ /**
344
+ * Get Cancelled Page
345
+ * @since 0.1
346
+ * @version 1.0
347
+ */
348
+ public function get_cancelled() {
349
+ if ( $this->core->buy_creds['cancelled']['use'] == 'page' )
350
+ return get_permalink( $this->core->buy_creds['cancelled']['page'] );
351
+ else
352
+ return $this->core->buy_creds['cancelled']['custom'];
353
+ }
354
+
355
+ /**
356
+ * Get Entry
357
+ * Returns the appropriate log entry template.
358
+ * @since 0.1
359
+ * @version 1.0
360
+ */
361
+ public function get_entry( $_to, $_from ) {
362
+ // Log entry
363
+ if ( $_to == $_from ) return $this->core->buy_creds['log'];
364
+
365
+ if ( $this->core->buy_creds['gifting']['members'] == 1 || $this->core->buy_creds['gifting']['authors'] == 1 )
366
+ return $this->core->buy_creds['gifting']['log'];
367
+
368
+ return $this->core->buy_creds['log'];
369
+ }
370
+
371
+ /**
372
+ * POST to data
373
+ * @since 0.1
374
+ * @version 1.0
375
+ */
376
+ public function POST_to_data() {
377
+ $data = array();
378
+ $id = $this->id;
379
+ $allowed_keys = apply_filters( "mycred_POST_to_data_{$gateway_id}", ( isset( $this->allowed ) ) ? $this->allowed : array() );
380
+ foreach ( $_POST as $key => $value ) {
381
+ if ( !in_array( trim( $key ), $allowed_keys ) ) continue;
382
+ $data[$key] = stripslashes( $value );
383
+ }
384
+ unset( $_POST );
385
+ return $data;
386
+ }
387
+
388
+ /**
389
+ * Transaction ID unique
390
+ * Searches the Log for a given transaction.
391
+ *
392
+ * @returns (bool) true if transaction id is unique or false
393
+ * @since 0.1
394
+ * @version 1.0
395
+ */
396
+ public function transaction_id_is_unique( $transaction_id = '' ) {
397
+ if ( empty( $transaction_id ) ) return false;
398
+
399
+ global $wpdb;
400
+
401
+ // Make sure this is a new transaction
402
+ $sql = "SELECT * FROM " . $wpdb->prefix . 'myCRED_log' . " WHERE ref = %s AND data LIKE %s";
403
+
404
+ $gateway = str_replace( '-', '_', $this->id );
405
+ $gateway_id = 'buy_creds_with_' . $gateway;
406
+
407
+ $check = $wpdb->get_results( $wpdb->prepare( $sql, $gateway_id, '%' . $transaction_id . '%' ) );
408
+ if ( $wpdb->num_rows > 0 ) return false;
409
+
410
+ return true;
411
+ }
412
+
413
+ /**
414
+ * Create Token
415
+ * Returns a wp nonce
416
+ * @since 0.1
417
+ * @version 1.0
418
+ */
419
+ public function create_token() {
420
+ return wp_create_nonce( 'mycred-buy-' . $this->id );
421
+ }
422
+
423
+ /**
424
+ * Verify Token
425
+ * Based on wp_verify_nonce() this function requires the user id used when the token
426
+ * was created as by default not logged in users would generate different tokens causing us
427
+ * to fail.
428
+ *
429
+ * @param $user_id (int) required user id
430
+ * @param $nonce (string) required nonce to check
431
+ * @param $action (string) required nonce id
432
+ * @returns true or false
433
+ * @since 0.1
434
+ * @version 1.0
435
+ */
436
+ public function verify_token( $user_id, $nonce ) {
437
+ $uid = (int) $user_id;
438
+
439
+ $i = wp_nonce_tick();
440
+
441
+ // Nonce generated 0-12 hours ago
442
+ if ( substr( wp_hash( $i . 'mycred-buy-' . $this->id . $uid, 'nonce' ), -12, 10 ) == $nonce )
443
+ return true;
444
+
445
+ return false;
446
+ }
447
+
448
+ /**
449
+ * Encode Sales Data
450
+ * @since 0.1
451
+ * @version 1.0
452
+ */
453
+ public function encode_sales_data( $data ) {
454
+ // Include
455
+ require_once( myCRED_INCLUDES_DIR . 'mycred-protect.php' );
456
+ $protect = new myCRED_Protect();
457
+ return $protect->do_encode( $data );
458
+ }
459
+
460
+ /**
461
+ * Decode Sales Data
462
+ * @since 0.1
463
+ * @version 1.0
464
+ */
465
+ public function decode_sales_data( $data ) {
466
+ // Include
467
+ require_once( myCRED_INCLUDES_DIR . 'mycred-protect.php' );
468
+ $protect = new myCRED_Protect();
469
+ return $protect->do_decode( $data );
470
+ }
471
+
472
+ /**
473
+ * Currencies Dropdown
474
+ * @since 0.1
475
+ * @version 1.0
476
+ */
477
+ public function currencies_dropdown( $name = '' ) {
478
+ $currencies = array(
479
+ 'USD' => 'US Dollars',
480
+ 'AUD' => 'Australian Dollars',
481
+ 'CAD' => 'Canadian Dollars',
482
+ 'EUR' => 'Euro',
483
+ 'GBP' => 'British Pound Sterling',
484
+ 'JPY' => 'Yen',
485
+ 'NZD' => 'New Zealand Dollars',
486
+ 'CHF' => 'Swiss Francs',
487
+ 'HKD' => 'Hong Kong Dollars',
488
+ 'SGD' => 'Singapore Dollars',
489
+ 'SEK' => 'Swedish Kronor',
490
+ 'DKK' => 'Danish Kronor',
491
+ 'PLN' => 'Polish Zloty',
492
+ 'NOK' => 'Norwegian Kronor',
493
+ 'HUF' => 'Hungarian Forint',
494
+ 'CZK' => 'Check Koruna',
495
+ 'ILS' => 'Israeli Shekel',
496
+ 'MXN' => 'Mexican Peso',
497
+ 'BRL' => 'Brazilian Real',
498
+ 'MYR' => 'Malaysian Ringgits',
499
+ 'PHP' => 'Philippine Pesos',
500
+ 'TWD' => 'Taiwan New Dollars',
501
+ 'THB' => 'Thai Baht'
502
+ );
503
+ $currencies = apply_filters( 'mycred_dropdown_currencies', $currencies );
504
+
505
+ echo '<select name="' . $this->field_name( $name ) . '" id="' . $this->field_id( $name ) . '">';
506
+ echo '<option value="">' . __( 'Select', 'mycred' ) . '</option>';
507
+ foreach ( $currencies as $code => $cname ) {
508
+ echo '<option value="' . $code . '"';
509
+ if ( $this->prefs[$name] == $code ) echo ' selected="selected"';
510
+ echo '>' . $cname . '</option>';
511
+ }
512
+ echo '</select>';
513
+ }
514
+
515
+ /**
516
+ * Item Type Dropdown
517
+ * @since 0.1
518
+ * @version 1.0
519
+ */
520
+ public function item_types_dropdown( $name = '' ) {
521
+ $types = array(
522
+ 'product' => 'Product',
523
+ 'service' => 'Service',
524
+ 'donation' => 'Donation'
525
+ );
526
+ $types = apply_filters( 'mycred_dropdown_item_types', $types );
527
+
528
+ echo '<select name="' . $this->field_name( $name ) . '" id="' . $this->field_id( $name ) . '">';
529
+ echo '<option value="">' . __( 'Select', 'mycred' ) . '</option>';
530
+ foreach ( $types as $code => $cname ) {
531
+ echo '<option value="' . $code . '"';
532
+ if ( $this->prefs[$name] == $code ) echo ' selected="selected"';
533
+ echo '>' . $cname . '</option>';
534
+ }
535
+ echo '</select>';
536
+ }
537
+
538
+ /**
539
+ * Countries Dropdown Options
540
+ * @since 0.1
541
+ * @version 1.0
542
+ */
543
+ public function list_option_countries( $selected = '' ) {
544
+ $countries = array (
545
+ "US" => "UNITED STATES",
546
+ "AF" => "AFGHANISTAN",
547
+ "AL" => "ALBANIA",
548
+ "DZ" => "ALGERIA",
549
+ "AS" => "AMERICAN SAMOA",
550
+ "AD" => "ANDORRA",
551
+ "AO" => "ANGOLA",
552
+ "AI" => "ANGUILLA",
553
+ "AQ" => "ANTARCTICA",
554
+ "AG" => "ANTIGUA AND BARBUDA",
555
+ "AR" => "ARGENTINA",
556
+ "AM" => "ARMENIA",
557
+ "AW" => "ARUBA",
558
+ "AU" => "AUSTRALIA",
559
+ "AT" => "AUSTRIA",
560
+ "AZ" => "AZERBAIJAN",
561
+ "BS" => "BAHAMAS",
562
+ "BH" => "BAHRAIN",
563
+ "BD" => "BANGLADESH",
564
+ "BB" => "BARBADOS",
565
+ "BY" => "BELARUS",
566
+ "BE" => "BELGIUM",
567
+ "BZ" => "BELIZE",
568
+ "BJ" => "BENIN",
569
+ "BM" => "BERMUDA",
570
+ "BT" => "BHUTAN",
571
+ "BO" => "BOLIVIA",
572
+ "BA" => "BOSNIA AND HERZEGOVINA",
573
+ "BW" => "BOTSWANA",
574
+ "BV" => "BOUVET ISLAND",
575
+ "BR" => "BRAZIL",
576
+ "IO" => "BRITISH INDIAN OCEAN TERRITORY",
577
+ "BN" => "BRUNEI DARUSSALAM",
578
+ "BG" => "BULGARIA",
579
+ "BF" => "BURKINA FASO",
580
+ "BI" => "BURUNDI",
581
+ "KH" => "CAMBODIA",
582
+ "CM" => "CAMEROON",
583
+ "CA" => "CANADA",
584
+ "CV" => "CAPE VERDE",
585
+ "KY" => "CAYMAN ISLANDS",
586
+ "CF" => "CENTRAL AFRICAN REPUBLIC",
587
+ "TD" => "CHAD",
588
+ "CL" => "CHILE",
589
+ "CL" => "CHILE",
590
+ "CN" => "CHINA",
591
+ "CX" => "CHRISTMAS ISLAND",
592
+ "CC" => "COCOS (KEELING) ISLANDS",
593
+ "CO" => "COLOMBIA",
594
+ "KM" => "COMOROS",
595
+ "CG" => "CONGO",
596
+ "CD" => "CONGO, THE DEMOCRATIC REPUBLIC OF THE",
597
+ "CK" => "COOK ISLANDS",
598
+ "CR" => "COSTA RICA",
599
+ "CI" => "COTE D'IVOIRE",
600
+ "HR" => "CROATIA",
601
+ "CU" => "CUBA",
602
+ "CY" => "CYPRUS",
603
+ "CZ" => "CZECH REPUBLIC",
604
+ "DK" => "DENMARK",
605
+ "DJ" => "DJIBOUTI",
606
+ "DM" => "DOMINICA",
607
+ "DO" => "DOMINICAN REPUBLIC",
608
+ "EC" => "ECUADOR",
609
+ "EG" => "EGYPT",
610
+ "SV" => "EL SALVADOR",
611
+ "GQ" => "EQUATORIAL GUINEA",
612
+ "ER" => "ERITREA",
613
+ "EE" => "ESTONIA",
614
+ "ET" => "ETHIOPIA",
615
+ "FK" => "FALKLAND ISLANDS (MALVINAS)",
616
+ "FO" => "FAROE ISLANDS",
617
+ "FJ" => "FIJI",
618
+ "FI" => "FINLAND",
619
+ "FR" => "FRANCE",
620
+ "GF" => "FRENCH GUIANA",
621
+ "PF" => "FRENCH POLYNESIA",
622
+ "TF" => "FRENCH SOUTHERN TERRITORIES",
623
+ "GA" => "GABON",
624
+ "GM" => "GAMBIA",
625
+ "GE" => "GEORGIA",
626
+ "DE" => "GERMANY",
627
+ "GH" => "GHANA",
628
+ "GI" => "GIBRALTAR",
629
+ "GR" => "GREECE",
630
+ "GL" => "GREENLAND",
631
+ "GD" => "GRENADA",
632
+ "GP" => "GUADELOUPE",
633
+ "GU" => "GUAM",
634
+ "GT" => "GUATEMALA",
635
+ "GN" => "GUINEA",
636
+ "GW" => "GUINEA-BISSAU",
637
+ "GY" => "GUYANA",
638
+ "HT" => "HAITI",
639
+ "HM" => "HEARD ISLAND AND MCDONALD ISLANDS",
640
+ "VA" => "HOLY SEE (VATICAN CITY STATE)",
641
+ "HN" => "HONDURAS",
642
+ "HK" => "HONG KONG",
643
+ "HU" => "HUNGARY",
644
+ "IS" => "ICELAND",
645
+ "IN" => "INDIA",
646
+ "ID" => "INDONESIA",
647
+ "IR" => "IRAN, ISLAMIC REPUBLIC OF",
648
+ "IQ" => "IRAQ",
649
+ "IE" => "IRELAND",
650
+ "IL" => "ISRAEL",
651
+ "IT" => "ITALY",
652
+ "JM" => "JAMAICA",
653
+ "JP" => "JAPAN",
654
+ "JO" => "JORDAN",
655
+ "KZ" => "KAZAKHSTAN",
656
+ "KE" => "KENYA",
657
+ "KI" => "KIRIBATI",
658
+ "KP" => "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF",
659
+ "KR" => "KOREA, REPUBLIC OF",
660
+ "KW" => "KUWAIT",
661
+ "KG" => "KYRGYZSTAN",
662
+ "LA" => "LAO PEOPLE'S DEMOCRATIC REPUBLIC",
663
+ "LV" => "LATVIA",
664
+ "LB" => "LEBANON",
665
+ "LS" => "LESOTHO",
666
+ "LR" => "LIBERIA",
667
+ "LY" => "LIBYAN ARAB JAMAHIRIYA",
668
+ "LI" => "LIECHTENSTEIN",
669
+ "LT" => "LITHUANIA",
670
+ "LU" => "LUXEMBOURG",
671
+ "MO" => "MACAO",
672
+ "MK" => "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF",
673
+ "MG" => "MADAGASCAR",
674
+ "MW" => "MALAWI",
675
+ "MY" => "MALAYSIA",
676
+ "MV" => "MALDIVES",
677
+ "ML" => "MALI",
678
+ "MT" => "MALTA",
679
+ "MH" => "MARSHALL ISLANDS",
680
+ "MQ" => "MARTINIQUE",
681
+ "MR" => "MAURITANIA",
682
+ "MU" => "MAURITIUS",
683
+ "YT" => "MAYOTTE",
684
+ "MX" => "MEXICO",
685
+ "FM" => "MICRONESIA, FEDERATED STATES OF",
686
+ "MD" => "MOLDOVA, REPUBLIC OF",
687
+ "MC" => "MONACO",
688
+ "MN" => "MONGOLIA",
689
+ "MS" => "MONTSERRAT",
690
+ "MA" => "MOROCCO",
691
+ "MZ" => "MOZAMBIQUE",
692
+ "MM" => "MYANMAR",
693
+ "NA" => "NAMIBIA",
694
+ "NR" => "NAURU",
695
+ "NP" => "NEPAL",
696
+ "NL" => "NETHERLANDS",
697
+ "AN" => "NETHERLANDS ANTILLES",
698
+ "NC" => "NEW CALEDONIA",
699
+ "NZ" => "NEW ZEALAND",
700
+ "NI" => "NICARAGUA",
701
+ "NE" => "NIGER",
702
+ "NG" => "NIGERIA",
703
+ "NU" => "NIUE",
704
+ "NF" => "NORFOLK ISLAND",
705
+ "MP" => "NORTHERN MARIANA ISLANDS",
706
+ "NO" => "NORWAY",
707
+ "OM" => "OMAN",
708
+ "PK" => "PAKISTAN",
709
+ "PW" => "PALAU",
710
+ "PS" => "PALESTINIAN TERRITORY, OCCUPIED",
711
+ "PA" => "PANAMA",
712
+ "PG" => "PAPUA NEW GUINEA",
713
+ "PY" => "PARAGUAY",
714
+ "PE" => "PERU",
715
+ "PH" => "PHILIPPINES",
716
+ "PN" => "PITCAIRN",
717
+ "PL" => "POLAND",
718
+ "PT" => "PORTUGAL",
719
+ "PR" => "PUERTO RICO",
720
+ "QA" => "QATAR",
721
+ "RE" => "REUNION",
722
+ "RO" => "ROMANIA",
723
+ "RU" => "RUSSIAN FEDERATION",
724
+ "RW" => "RWANDA",
725
+ "SH" => "SAINT HELENA",
726
+ "KN" => "SAINT KITTS AND NEVIS",
727
+ "LC" => "SAINT LUCIA",
728
+ "PM" => "SAINT PIERRE AND MIQUELON",
729
+ "VC" => "SAINT VINCENT AND THE GRENADINES",
730
+ "WS" => "SAMOA",
731
+ "SM" => "SAN MARINO",
732
+ "ST" => "SAO TOME AND PRINCIPE",
733
+ "SA" => "SAUDI ARABIA",
734
+ "SN" => "SENEGAL",
735
+ "CS" => "SERBIA AND MONTENEGRO",
736
+ "SC" => "SEYCHELLES",
737
+ "SL" => "SIERRA LEONE",
738
+ "SG" => "SINGAPORE",
739
+ "SK" => "SLOVAKIA",
740
+ "SI" => "SLOVENIA",
741
+ "SB" => "SOLOMON ISLANDS",
742
+ "SO" => "SOMALIA",
743
+ "ZA" => "SOUTH AFRICA",
744
+ "GS" => "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS",
745
+ "ES" => "SPAIN",
746
+ "LK" => "SRI LANKA",
747
+ "SD" => "SUDAN",
748
+ "SR" => "SURINAME",
749
+ "SJ" => "SVALBARD AND JAN MAYEN",
750
+ "SZ" => "SWAZILAND",
751
+ "SE" => "SWEDEN",
752
+ "CH" => "SWITZERLAND",
753
+ "SY" => "SYRIAN ARAB REPUBLIC",
754
+ "TW" => "TAIWAN, PROVINCE OF CHINA",
755
+ "TJ" => "TAJIKISTAN",
756
+ "TZ" => "TANZANIA, UNITED REPUBLIC OF",
757
+ "TH" => "THAILAND",
758
+ "TL" => "TIMOR-LESTE",
759
+ "TG" => "TOGO",
760
+ "TK" => "TOKELAU",
761
+ "TO" => "TONGA",
762
+ "TT" => "TRINIDAD AND TOBAGO",
763
+ "TN" => "TUNISIA",
764
+ "TR" => "TURKEY",
765
+ "TM" => "TURKMENISTAN",
766
+ "TC" => "TURKS AND CAICOS ISLANDS",
767
+ "TV" => "TUVALU",
768
+ "UG" => "UGANDA",
769
+ "UA" => "UKRAINE",
770
+ "AE" => "UNITED ARAB EMIRATES",
771
+ "GB" => "UNITED KINGDOM",
772
+ "US" => "UNITED STATES",
773
+ "UM" => "UNITED STATES MINOR OUTLYING ISLANDS",
774
+ "UY" => "URUGUAY",
775
+ "UZ" => "UZBEKISTAN",
776
+ "VU" => "VANUATU",
777
+ "VE" => "VENEZUELA",
778
+ "VN" => "VIET NAM",
779
+ "VG" => "VIRGIN ISLANDS, BRITISH",
780
+ "VI" => "VIRGIN ISLANDS, U.S.",
781
+ "WF" => "WALLIS AND FUTUNA",
782
+ "EH" => "WESTERN SAHARA",
783
+ "YE" => "YEMEN",
784
+ "ZM" => "ZAMBIA",
785
+ "ZW" => "ZIMBABWE"
786
+ );
787
+ $countries = apply_filters( 'mycred_list_option_countries', $countries );
788
+
789
+ foreach ( $countries as $code => $cname ) {
790
+ echo '<option value="' . $code . '"';
791
+ if ( $selected == $code ) echo ' selected="selected"';
792
+ echo '>' . $cname . '</option>';
793
+ }
794
+ }
795
+
796
+ /**
797
+ * US States Dropdown Options
798
+ * @since 0.1
799
+ * @version 1.0
800
+ */
801
+ public function list_option_us_states( $selected = '', $non_us = false ) {
802
+ $states = array (
803
+ "AL" => "Alabama",
804
+ "AK" => "Alaska",
805
+ "AZ" => "Arizona",
806
+ "AR" => "Arkansas",
807
+ "CA" => "California",
808
+ "CO" => "Colorado",
809
+ "CT" => "Connecticut",
810
+ "DC" => "D.C.",
811
+ "DE" => "Delaware",
812
+ "FL" => "Florida",
813
+ "GA" => "Georgia",
814
+ "HI" => "Hawaii",
815
+ "ID" => "Idaho",
816
+ "IL" => "Illinois",
817
+ "IN" => "Indiana",
818
+ "IA" => "Iowa",
819
+ "KS" => "Kansas",
820
+ "KY" => "Kentucky",
821
+ "LA" => "Louisiana",
822
+ "ME" => "Maine",
823
+ "MD" => "Maryland",
824
+ "MA" => "Massachusetts",
825
+ "MI" => "Michigan",
826
+ "MN" => "Minnesota",
827
+ "MS" => "Mississippi",
828
+ "MO" => "Missouri",
829
+ "MT" => "Montana",
830
+ "NE" => "Nebraska",
831
+ "NV" => "Nevada",
832
+ "NH" => "New Hampshire",
833
+ "NJ" => "New Jersey",
834
+ "NM" => "New Mexico",
835
+ "NY" => "New York",
836
+ "NC" => "North Carolina",
837
+ "ND" => "North Dakota",
838
+ "OH" => "Ohio",
839
+ "OK" => "Oklahoma",
840
+ "OR" => "Oregon",
841
+ "PA" => "Pennsylvania",
842
+ "RI" => "Rhode Island",
843
+ "SC" => "South Carolina",
844
+ "SD" => "South Dakota",
845
+ "TN" => "Tennessee",
846
+ "TX" => "Texas",
847
+ "UT" => "Utah",
848
+ "VT" => "Vermont",
849
+ "VA" => "Virginia",
850
+ "WA" => "Washington",
851
+ "WV" => "West Virginia",
852
+ "WI" => "Wisconsin",
853
+ "WY" => "Wyoming"
854
+ );
855
+ $states = apply_filters( 'mycred_list_option_us', $states );
856
+
857
+ $outside = __( 'Outside US', 'mycred' );
858
+ if ( $non_us == 'top' ) echo '<option value="">' . $outside . '</option>';
859
+ foreach ( $states as $code => $cname ) {
860
+ echo '<option value="' . $code . '"';
861
+ if ( $selected == $code ) echo ' selected="selected"';
862
+ echo '>' . $cname . '</option>';
863
+ }
864
+ if ( $non_us == 'bottom' ) echo '<option value="">' . $outside . '</option>';
865
+ }
866
+
867
+ /**
868
+ * Months Dropdown Options
869
+ * @since 0.1
870
+ * @version 1.0
871
+ */
872
+ public function list_option_months( $selected = '' ) {
873
+ $months = array (
874
+ "01" => "January",
875
+ "02" => "February",
876
+ "03" => "March",
877
+ "04" => "April",
878
+ "05" => "May",
879
+ "06" => "June",
880
+ "07" => "July",
881
+ "08" => "August",
882
+ "09" => "September",
883
+ "10" => "October",
884
+ "11" => "November",
885
+ "12" => "December"
886
+ );
887
+
888
+ foreach ( $months as $number => $text ) {
889
+ echo '<option value="' . $number . '"';
890
+ if ( $selected == $number ) echo ' selected="selected"';
891
+ echo '>' . $text . '</option>';
892
+ }
893
+ }
894
+
895
+ /**
896
+ * Years Dropdown Options
897
+ * @since 0.1
898
+ * @version 1.0
899
+ */
900
+ public function list_option_card_years( $selected = '', $number = 16 ) {
901
+ $yy = date_i18n( 'y' );
902
+ $yyyy = date_i18n( 'Y' );
903
+ $count = 0;
904
+ $options = array();
905
+
906
+ while ( $count <= (int) $number ) {
907
+ $count++;
908
+ if ( $count > 1 ) {
909
+ $yy++;
910
+ $yyyy++;
911
+ }
912
+ $options[$yy] = $yyyy;
913
+ }
914
+
915
+ foreach ( $options as $key => $value ) {
916
+ echo '<option value="' . $key . '"';
917
+ if ( $selected == $key ) echo ' selected="selected"';
918
+ echo '>' . $value . '</option>';
919
+ }
920
+ }
921
+
922
+ /**
923
+ * Contextual Help
924
+ * @since 0.1
925
+ * @version 1.0
926
+ */
927
+ public function help( $screen_id, $screen ) {
928
+ if ( $screen_id != 'mycred_page_myCRED_page_gateways' ) return;
929
+ }
930
+ }
931
+ }
932
+ ?>
addons/buy-creds/cacert.pem ADDED
@@ -0,0 +1,3895 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## ca-bundle.crt -- Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+
17
+ # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $
18
+
19
+ GTE CyberTrust Global Root
20
+ ==========================
21
+ -----BEGIN CERTIFICATE-----
22
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
23
+ Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
24
+ A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
25
+ MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
26
+ Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
27
+ IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
28
+ sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
29
+ HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
30
+ AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
31
+ M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
32
+ NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
33
+ -----END CERTIFICATE-----
34
+
35
+ Thawte Server CA
36
+ ================
37
+ -----BEGIN CERTIFICATE-----
38
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
39
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
40
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
41
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
42
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
43
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
44
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
45
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
46
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
47
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
48
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
49
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
50
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
51
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
52
+ -----END CERTIFICATE-----
53
+
54
+ Thawte Premium Server CA
55
+ ========================
56
+ -----BEGIN CERTIFICATE-----
57
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
58
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
59
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
60
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
61
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
62
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
63
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
64
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
65
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
66
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
67
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
68
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
69
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
70
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
71
+ UCemDaYj+bvLpgcUQg==
72
+ -----END CERTIFICATE-----
73
+
74
+ Equifax Secure CA
75
+ =================
76
+ -----BEGIN CERTIFICATE-----
77
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
78
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
79
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
80
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
81
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
82
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
83
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
84
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
85
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
86
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
87
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
88
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
89
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
90
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
91
+ 70+sB3c4
92
+ -----END CERTIFICATE-----
93
+
94
+ Digital Signature Trust Co. Global CA 1
95
+ =======================================
96
+ -----BEGIN CERTIFICATE-----
97
+ MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
98
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
99
+ MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
100
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
101
+ A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
102
+ NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
103
+ o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
104
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
105
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
106
+ IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
107
+ MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
108
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
109
+ ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
110
+ kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
111
+ RbyhkwS7hp86W0N6w4pl
112
+ -----END CERTIFICATE-----
113
+
114
+ Digital Signature Trust Co. Global CA 3
115
+ =======================================
116
+ -----BEGIN CERTIFICATE-----
117
+ MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
118
+ ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
119
+ MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
120
+ IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
121
+ A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
122
+ VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
123
+ xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
124
+ BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
125
+ dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
126
+ IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
127
+ MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
128
+ BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
129
+ AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
130
+ up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
131
+ mPnHfxsb1gYgAlihw6ID
132
+ -----END CERTIFICATE-----
133
+
134
+ Verisign Class 3 Public Primary Certification Authority
135
+ =======================================================
136
+ -----BEGIN CERTIFICATE-----
137
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
138
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
139
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
140
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
141
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
142
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
143
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
144
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
145
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
146
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
147
+ Tqj/ZA1k
148
+ -----END CERTIFICATE-----
149
+
150
+ Verisign Class 1 Public Primary Certification Authority - G2
151
+ ============================================================
152
+ -----BEGIN CERTIFICATE-----
153
+ MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
154
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
155
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
156
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
157
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
158
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
159
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
160
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
161
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
162
+ k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
163
+ WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
164
+ MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
165
+ XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
166
+ lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
167
+ -----END CERTIFICATE-----
168
+
169
+ Verisign Class 2 Public Primary Certification Authority - G2
170
+ ============================================================
171
+ -----BEGIN CERTIFICATE-----
172
+ MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
173
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
174
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
175
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
176
+ c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
177
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
178
+ cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
179
+ Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
180
+ c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
181
+ nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
182
+ wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
183
+ ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
184
+ 1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
185
+ LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
186
+ -----END CERTIFICATE-----
187
+
188
+ Verisign Class 3 Public Primary Certification Authority - G2
189
+ ============================================================
190
+ -----BEGIN CERTIFICATE-----
191
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
192
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
193
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
194
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
195
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
196
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
197
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
198
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
199
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
200
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
201
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
202
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
203
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
204
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
205
+ -----END CERTIFICATE-----
206
+
207
+ GlobalSign Root CA
208
+ ==================
209
+ -----BEGIN CERTIFICATE-----
210
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
211
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
212
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
213
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
214
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
215
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
216
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
217
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
218
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
219
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
220
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
221
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
222
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
223
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
224
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
225
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
226
+ -----END CERTIFICATE-----
227
+
228
+ GlobalSign Root CA - R2
229
+ =======================
230
+ -----BEGIN CERTIFICATE-----
231
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
232
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
233
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
234
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
235
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
236
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
237
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
238
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
239
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
240
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
241
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
242
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
243
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
244
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
245
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
246
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
247
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
248
+ -----END CERTIFICATE-----
249
+
250
+ ValiCert Class 1 VA
251
+ ===================
252
+ -----BEGIN CERTIFICATE-----
253
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
254
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
255
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
256
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
257
+ MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
258
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
259
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
260
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
261
+ A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
262
+ GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
263
+ DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
264
+ lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
265
+ icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
266
+ Orf1LXLI
267
+ -----END CERTIFICATE-----
268
+
269
+ ValiCert Class 2 VA
270
+ ===================
271
+ -----BEGIN CERTIFICATE-----
272
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
273
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
274
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
275
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
276
+ MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
277
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
278
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
279
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
280
+ A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
281
+ CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
282
+ ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
283
+ SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
284
+ UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
285
+ W9ViH0Pd
286
+ -----END CERTIFICATE-----
287
+
288
+ RSA Root Certificate 1
289
+ ======================
290
+ -----BEGIN CERTIFICATE-----
291
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
292
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
293
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
294
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
295
+ MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
296
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
297
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
298
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
299
+ A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
300
+ 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
301
+ BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
302
+ 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
303
+ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
304
+ on+jjBXu
305
+ -----END CERTIFICATE-----
306
+
307
+ Verisign Class 1 Public Primary Certification Authority - G3
308
+ ============================================================
309
+ -----BEGIN CERTIFICATE-----
310
+ MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
311
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
312
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
313
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
314
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
315
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
316
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
317
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
318
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
319
+ ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
320
+ bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
321
+ rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
322
+ Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
323
+ FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
324
+ q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
325
+ y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
326
+ ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
327
+ a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
328
+ D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
329
+ -----END CERTIFICATE-----
330
+
331
+ Verisign Class 2 Public Primary Certification Authority - G3
332
+ ============================================================
333
+ -----BEGIN CERTIFICATE-----
334
+ MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
335
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
336
+ azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
337
+ b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
338
+ aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
339
+ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
340
+ c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
341
+ aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
342
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
343
+ AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
344
+ tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
345
+ C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
346
+ 0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
347
+ Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
348
+ JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
349
+ 0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
350
+ sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
351
+ JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
352
+ GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
353
+ -----END CERTIFICATE-----
354
+
355
+ Verisign Class 3 Public Primary Certification Authority - G3
356
+ ============================================================
357
+ -----BEGIN CERTIFICATE-----
358
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
359
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
360
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
361
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
362
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
363
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
364
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
365
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
366
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
367
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
368
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
369
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
370
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
371
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
372
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
373
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
374
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
375
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
376
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
377
+ -----END CERTIFICATE-----
378
+
379
+ Verisign Class 4 Public Primary Certification Authority - G3
380
+ ============================================================
381
+ -----BEGIN CERTIFICATE-----
382
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
383
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
384
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
385
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
386
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
387
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
388
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
389
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
390
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
391
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
392
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
393
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
394
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
395
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
396
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
397
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
398
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
399
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
400
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
401
+ -----END CERTIFICATE-----
402
+
403
+ Entrust.net Secure Server CA
404
+ ============================
405
+ -----BEGIN CERTIFICATE-----
406
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
407
+ BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
408
+ cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
409
+ ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
410
+ cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
411
+ A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
412
+ eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
413
+ dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
414
+ aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
415
+ aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
416
+ gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
417
+ ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
418
+ CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
419
+ dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
420
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
421
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
422
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
423
+ NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
424
+ HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
425
+ BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
426
+ Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
427
+ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
428
+ -----END CERTIFICATE-----
429
+
430
+ Entrust.net Premium 2048 Secure Server CA
431
+ =========================================
432
+ -----BEGIN CERTIFICATE-----
433
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
434
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
435
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
436
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
437
+ NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
438
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
439
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
440
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
441
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
442
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
443
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
444
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
445
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
446
+ AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
447
+ gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
448
+ AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
449
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
450
+ o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
451
+ 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
452
+ OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
453
+ -----END CERTIFICATE-----
454
+
455
+ Baltimore CyberTrust Root
456
+ =========================
457
+ -----BEGIN CERTIFICATE-----
458
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
459
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
460
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
461
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
462
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
463
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
464
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
465
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
466
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
467
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
468
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
469
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
470
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
471
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
472
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
473
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
474
+ -----END CERTIFICATE-----
475
+
476
+ Equifax Secure Global eBusiness CA
477
+ ==================================
478
+ -----BEGIN CERTIFICATE-----
479
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
480
+ RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
481
+ bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
482
+ HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
483
+ b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
484
+ PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
485
+ qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
486
+ hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
487
+ BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
488
+ MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
489
+ I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
490
+ NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
491
+ -----END CERTIFICATE-----
492
+
493
+ Equifax Secure eBusiness CA 1
494
+ =============================
495
+ -----BEGIN CERTIFICATE-----
496
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
497
+ RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
498
+ LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
499
+ ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
500
+ IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
501
+ 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
502
+ IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
503
+ MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
504
+ Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
505
+ AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
506
+ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
507
+ KpYrtWKmpj29f5JZzVoqgrI3eQ==
508
+ -----END CERTIFICATE-----
509
+
510
+ Equifax Secure eBusiness CA 2
511
+ =============================
512
+ -----BEGIN CERTIFICATE-----
513
+ MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
514
+ ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
515
+ MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
516
+ DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
517
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
518
+ 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
519
+ BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
520
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
521
+ JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
522
+ A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
523
+ uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
524
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
525
+ jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
526
+ 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
527
+ V+GRMOrN
528
+ -----END CERTIFICATE-----
529
+
530
+ AddTrust Low-Value Services Root
531
+ ================================
532
+ -----BEGIN CERTIFICATE-----
533
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
534
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
535
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
536
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
537
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
538
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
539
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
540
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
541
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
542
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
543
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
544
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
545
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
546
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
547
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
548
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
549
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
550
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
551
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
552
+ -----END CERTIFICATE-----
553
+
554
+ AddTrust External Root
555
+ ======================
556
+ -----BEGIN CERTIFICATE-----
557
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
558
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
559
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
560
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
561
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
562
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
563
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
564
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
565
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
566
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
567
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
568
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
569
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
570
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
571
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
572
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
573
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
574
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
575
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
576
+ -----END CERTIFICATE-----
577
+
578
+ AddTrust Public Services Root
579
+ =============================
580
+ -----BEGIN CERTIFICATE-----
581
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
582
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
583
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
584
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
585
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
586
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
587
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
588
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
589
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
590
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
591
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
592
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
593
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
594
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
595
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
596
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
597
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
598
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
599
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
600
+ -----END CERTIFICATE-----
601
+
602
+ AddTrust Qualified Certificates Root
603
+ ====================================
604
+ -----BEGIN CERTIFICATE-----
605
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
606
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
607
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
608
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
609
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
610
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
611
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
612
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
613
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
614
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
615
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
616
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
617
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
618
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
619
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
620
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
621
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
622
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
623
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
624
+ -----END CERTIFICATE-----
625
+
626
+ Entrust Root Certification Authority
627
+ ====================================
628
+ -----BEGIN CERTIFICATE-----
629
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
630
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
631
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
632
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
633
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
634
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
635
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
636
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
637
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
638
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
639
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
640
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
641
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
642
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
643
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
644
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
645
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
646
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
647
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
648
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
649
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
650
+ -----END CERTIFICATE-----
651
+
652
+ RSA Security 2048 v3
653
+ ====================
654
+ -----BEGIN CERTIFICATE-----
655
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
656
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
657
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
658
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
659
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
660
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
661
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
662
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
663
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
664
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
665
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
666
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
667
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
668
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
669
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
670
+ pKnXwiJPZ9d37CAFYd4=
671
+ -----END CERTIFICATE-----
672
+
673
+ GeoTrust Global CA
674
+ ==================
675
+ -----BEGIN CERTIFICATE-----
676
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
677
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
678
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
679
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
680
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
681
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
682
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
683
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
684
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
685
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
686
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
687
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
688
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
689
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
690
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
691
+ Mw==
692
+ -----END CERTIFICATE-----
693
+
694
+ GeoTrust Global CA 2
695
+ ====================
696
+ -----BEGIN CERTIFICATE-----
697
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
698
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
699
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
700
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
701
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
702
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
703
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
704
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
705
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
706
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
707
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
708
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
709
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
710
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
711
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
712
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
713
+ -----END CERTIFICATE-----
714
+
715
+ GeoTrust Universal CA
716
+ =====================
717
+ -----BEGIN CERTIFICATE-----
718
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
719
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
720
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
721
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
722
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
723
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
724
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
725
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
726
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
727
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
728
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
729
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
730
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
731
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
732
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
733
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
734
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
735
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
736
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
737
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
738
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
739
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
740
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
741
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
742
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
743
+ -----END CERTIFICATE-----
744
+
745
+ GeoTrust Universal CA 2
746
+ =======================
747
+ -----BEGIN CERTIFICATE-----
748
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
749
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
750
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
751
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
752
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
753
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
754
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
755
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
756
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
757
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
758
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
759
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
760
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
761
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
762
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
763
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
764
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
765
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
766
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
767
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
768
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
769
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
770
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
771
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
772
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
773
+ -----END CERTIFICATE-----
774
+
775
+ UTN-USER First-Network Applications
776
+ ===================================
777
+ -----BEGIN CERTIFICATE-----
778
+ MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
779
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
780
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
781
+ BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
782
+ WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
783
+ YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
784
+ dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
785
+ cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
786
+ mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
787
+ DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
788
+ Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
789
+ P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
790
+ j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
791
+ HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
792
+ cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
793
+ CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
794
+ IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
795
+ RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
796
+ xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
797
+ DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
798
+ -----END CERTIFICATE-----
799
+
800
+ America Online Root Certification Authority 1
801
+ =============================================
802
+ -----BEGIN CERTIFICATE-----
803
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
804
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
805
+ Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
806
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
807
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
808
+ ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
809
+ v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
810
+ DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
811
+ sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
812
+ 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
813
+ AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
814
+ o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
815
+ GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
816
+ VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
817
+ 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
818
+ Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
819
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
820
+ -----END CERTIFICATE-----
821
+
822
+ America Online Root Certification Authority 2
823
+ =============================================
824
+ -----BEGIN CERTIFICATE-----
825
+ MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
826
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
827
+ Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
828
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
829
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
830
+ ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
831
+ fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
832
+ f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
833
+ qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
834
+ RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
835
+ gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
836
+ 6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
837
+ FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
838
+ Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
839
+ B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
840
+ aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
841
+ AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
842
+ T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
843
+ +DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
844
+ JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
845
+ zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
846
+ ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
847
+ 1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
848
+ GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
849
+ Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
850
+ cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
851
+ -----END CERTIFICATE-----
852
+
853
+ Visa eCommerce Root
854
+ ===================
855
+ -----BEGIN CERTIFICATE-----
856
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
857
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
858
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
859
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
860
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
861
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
862
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
863
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
864
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
865
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
866
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
867
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
868
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
869
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
870
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
871
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
872
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
873
+ -----END CERTIFICATE-----
874
+
875
+ Certum Root CA
876
+ ==============
877
+ -----BEGIN CERTIFICATE-----
878
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
879
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
880
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
881
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
882
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
883
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
884
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
885
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
886
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
887
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
888
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
889
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
890
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
891
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
892
+ -----END CERTIFICATE-----
893
+
894
+ Comodo AAA Services root
895
+ ========================
896
+ -----BEGIN CERTIFICATE-----
897
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
898
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
899
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
900
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
901
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
902
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
903
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
904
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
905
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
906
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
907
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
908
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
909
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
910
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
911
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
912
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
913
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
914
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
915
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
916
+ -----END CERTIFICATE-----
917
+
918
+ Comodo Secure Services root
919
+ ===========================
920
+ -----BEGIN CERTIFICATE-----
921
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
922
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
923
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
924
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
925
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
926
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
927
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
928
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
929
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
930
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
931
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
932
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
933
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
934
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
935
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
936
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
937
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
938
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
939
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
940
+ RR3B7Hzs/Sk=
941
+ -----END CERTIFICATE-----
942
+
943
+ Comodo Trusted Services root
944
+ ============================
945
+ -----BEGIN CERTIFICATE-----
946
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
947
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
948
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
949
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
950
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
951
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
952
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
953
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
954
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
955
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
956
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
957
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
958
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
959
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
960
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
961
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
962
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
963
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
964
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
965
+ 9y5Xt5hwXsjEeLBi
966
+ -----END CERTIFICATE-----
967
+
968
+ QuoVadis Root CA
969
+ ================
970
+ -----BEGIN CERTIFICATE-----
971
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
972
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
973
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
974
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
975
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
976
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
977
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
978
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
979
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
980
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
981
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
982
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
983
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
984
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
985
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
986
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
987
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
988
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
989
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
990
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
991
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
992
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
993
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
994
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
995
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
996
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
997
+ 5nrQNiOKSnQ2+Q==
998
+ -----END CERTIFICATE-----
999
+
1000
+ QuoVadis Root CA 2
1001
+ ==================
1002
+ -----BEGIN CERTIFICATE-----
1003
+ MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1004
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
1005
+ ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1006
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1007
+ DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
1008
+ XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
1009
+ lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
1010
+ lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
1011
+ lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
1012
+ 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
1013
+ wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
1014
+ D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
1015
+ BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
1016
+ J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
1017
+ DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
1018
+ a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
1019
+ ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
1020
+ Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
1021
+ UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
1022
+ VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
1023
+ +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
1024
+ IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
1025
+ WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
1026
+ f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
1027
+ 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
1028
+ VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
1029
+ -----END CERTIFICATE-----
1030
+
1031
+ QuoVadis Root CA 3
1032
+ ==================
1033
+ -----BEGIN CERTIFICATE-----
1034
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
1035
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
1036
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
1037
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
1038
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
1039
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
1040
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
1041
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
1042
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
1043
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
1044
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
1045
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
1046
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
1047
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
1048
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
1049
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
1050
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
1051
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
1052
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
1053
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
1054
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
1055
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
1056
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
1057
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
1058
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
1059
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
1060
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
1061
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
1062
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
1063
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
1064
+ -----END CERTIFICATE-----
1065
+
1066
+ Security Communication Root CA
1067
+ ==============================
1068
+ -----BEGIN CERTIFICATE-----
1069
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1070
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1071
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
1072
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
1073
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
1074
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
1075
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
1076
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
1077
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
1078
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
1079
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
1080
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
1081
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
1082
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
1083
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
1084
+ FL39vmwLAw==
1085
+ -----END CERTIFICATE-----
1086
+
1087
+ Sonera Class 1 Root CA
1088
+ ======================
1089
+ -----BEGIN CERTIFICATE-----
1090
+ MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1091
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw
1092
+ NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1093
+ IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88
1094
+ 7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9
1095
+ EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl
1096
+ 0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645
1097
+ 2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa
1098
+ HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT
1099
+ iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9
1100
+ 28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV
1101
+ yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR
1102
+ vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P
1103
+ qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z
1104
+ IRlXvVWa
1105
+ -----END CERTIFICATE-----
1106
+
1107
+ Sonera Class 2 Root CA
1108
+ ======================
1109
+ -----BEGIN CERTIFICATE-----
1110
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1111
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
1112
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1113
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
1114
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
1115
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
1116
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
1117
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
1118
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
1119
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
1120
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
1121
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
1122
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
1123
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
1124
+ llpwrN9M
1125
+ -----END CERTIFICATE-----
1126
+
1127
+ Staat der Nederlanden Root CA
1128
+ =============================
1129
+ -----BEGIN CERTIFICATE-----
1130
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
1131
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
1132
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
1133
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
1134
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
1135
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
1136
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
1137
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
1138
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
1139
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
1140
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
1141
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
1142
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
1143
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
1144
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
1145
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
1146
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
1147
+ -----END CERTIFICATE-----
1148
+
1149
+ TDC Internet Root CA
1150
+ ====================
1151
+ -----BEGIN CERTIFICATE-----
1152
+ MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
1153
+ ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
1154
+ NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
1155
+ ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1156
+ MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
1157
+ xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
1158
+ znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
1159
+ 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
1160
+ otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
1161
+ AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
1162
+ VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
1163
+ MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
1164
+ AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
1165
+ UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
1166
+ CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
1167
+ gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
1168
+ 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
1169
+ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
1170
+ Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
1171
+ -----END CERTIFICATE-----
1172
+
1173
+ TDC OCES Root CA
1174
+ ================
1175
+ -----BEGIN CERTIFICATE-----
1176
+ MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
1177
+ ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
1178
+ MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
1179
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
1180
+ nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
1181
+ zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
1182
+ iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
1183
+ dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
1184
+ 3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
1185
+ 5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
1186
+ ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
1187
+ cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
1188
+ Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
1189
+ LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
1190
+ MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
1191
+ aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
1192
+ MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
1193
+ +RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
1194
+ NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
1195
+ A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
1196
+ A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
1197
+ AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
1198
+ AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
1199
+ -----END CERTIFICATE-----
1200
+
1201
+ UTN DATACorp SGC Root CA
1202
+ ========================
1203
+ -----BEGIN CERTIFICATE-----
1204
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
1205
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1206
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
1207
+ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
1208
+ MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
1209
+ HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
1210
+ dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
1211
+ AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
1212
+ raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
1213
+ wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
1214
+ 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
1215
+ 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
1216
+ DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
1217
+ BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
1218
+ LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
1219
+ DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
1220
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
1221
+ I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
1222
+ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
1223
+ DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
1224
+ -----END CERTIFICATE-----
1225
+
1226
+ UTN USERFirst Email Root CA
1227
+ ===========================
1228
+ -----BEGIN CERTIFICATE-----
1229
+ MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
1230
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1231
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0
1232
+ BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05
1233
+ OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx
1234
+ FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
1235
+ ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz
1236
+ dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1237
+ MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx
1238
+ B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8
1239
+ om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG
1240
+ TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl
1241
+ yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE
1242
+ AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV
1243
+ HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
1244
+ bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
1245
+ AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne
1246
+ xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+
1247
+ 5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV
1248
+ NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ
1249
+ w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
1250
+ -----END CERTIFICATE-----
1251
+
1252
+ UTN USERFirst Hardware Root CA
1253
+ ==============================
1254
+ -----BEGIN CERTIFICATE-----
1255
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
1256
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1257
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
1258
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
1259
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
1260
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
1261
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
1262
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
1263
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
1264
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
1265
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
1266
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
1267
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
1268
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
1269
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
1270
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
1271
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
1272
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
1273
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
1274
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
1275
+ nfhmqA==
1276
+ -----END CERTIFICATE-----
1277
+
1278
+ UTN USERFirst Object Root CA
1279
+ ============================
1280
+ -----BEGIN CERTIFICATE-----
1281
+ MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE
1282
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1283
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb
1284
+ BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz
1285
+ NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx
1286
+ HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy
1287
+ dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB
1288
+ BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR
1289
+ loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ
1290
+ w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu
1291
+ lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7
1292
+ RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL
1293
+ BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8
1294
+ ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly
1295
+ c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
1296
+ DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
1297
+ NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO
1298
+ PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE
1299
+ qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG
1300
+ hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
1301
+ -----END CERTIFICATE-----
1302
+
1303
+ Camerfirma Chambers of Commerce Root
1304
+ ====================================
1305
+ -----BEGIN CERTIFICATE-----
1306
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1307
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1308
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
1309
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
1310
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
1311
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
1312
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
1313
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
1314
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
1315
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
1316
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
1317
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
1318
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
1319
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
1320
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
1321
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
1322
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
1323
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
1324
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
1325
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
1326
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
1327
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
1328
+ -----END CERTIFICATE-----
1329
+
1330
+ Camerfirma Global Chambersign Root
1331
+ ==================================
1332
+ -----BEGIN CERTIFICATE-----
1333
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1334
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1335
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
1336
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
1337
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
1338
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
1339
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
1340
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
1341
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
1342
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
1343
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
1344
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
1345
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
1346
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
1347
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
1348
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
1349
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
1350
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
1351
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
1352
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
1353
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
1354
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
1355
+ -----END CERTIFICATE-----
1356
+
1357
+ NetLock Qualified (Class QA) Root
1358
+ =================================
1359
+ -----BEGIN CERTIFICATE-----
1360
+ MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1361
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1362
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn
1363
+ eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0
1364
+ bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER
1365
+ MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0
1366
+ LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0
1367
+ dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP
1368
+ aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV
1369
+ CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e
1370
+ 8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb
1371
+ m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ
1372
+ 0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM
1373
+ 0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1374
+ HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
1375
+ YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
1376
+ biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p
1377
+ a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz
1378
+ YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg
1379
+ YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg
1380
+ ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov
1381
+ L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr
1382
+ Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0
1383
+ aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg
1384
+ YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0
1385
+ IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3
1386
+ DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN
1387
+ wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg
1388
+ W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc
1389
+ R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
1390
+ 5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
1391
+ -----END CERTIFICATE-----
1392
+
1393
+ NetLock Notary (Class A) Root
1394
+ =============================
1395
+ -----BEGIN CERTIFICATE-----
1396
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
1397
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1398
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
1399
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
1400
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
1401
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
1402
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
1403
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
1404
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
1405
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
1406
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
1407
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
1408
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
1409
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
1410
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
1411
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
1412
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
1413
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
1414
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
1415
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
1416
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
1417
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
1418
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
1419
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
1420
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
1421
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
1422
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
1423
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
1424
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
1425
+ 8CgHrTwXZoi1/baI
1426
+ -----END CERTIFICATE-----
1427
+
1428
+ NetLock Business (Class B) Root
1429
+ ===============================
1430
+ -----BEGIN CERTIFICATE-----
1431
+ MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1432
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1433
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
1434
+ VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
1435
+ VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
1436
+ bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
1437
+ VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1438
+ iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
1439
+ o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
1440
+ 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1441
+ HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
1442
+ RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
1443
+ dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
1444
+ ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
1445
+ c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
1446
+ YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
1447
+ c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
1448
+ Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
1449
+ bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
1450
+ IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
1451
+ YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
1452
+ cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
1453
+ 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
1454
+ stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
1455
+ -----END CERTIFICATE-----
1456
+
1457
+ NetLock Express (Class C) Root
1458
+ ==============================
1459
+ -----BEGIN CERTIFICATE-----
1460
+ MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1461
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1462
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
1463
+ KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
1464
+ BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1465
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
1466
+ ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
1467
+ jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
1468
+ W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
1469
+ euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
1470
+ DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
1471
+ RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
1472
+ YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
1473
+ IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
1474
+ aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
1475
+ ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
1476
+ ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
1477
+ dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
1478
+ emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
1479
+ IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
1480
+ UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
1481
+ YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
1482
+ xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
1483
+ gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
1484
+ -----END CERTIFICATE-----
1485
+
1486
+ XRamp Global CA Root
1487
+ ====================
1488
+ -----BEGIN CERTIFICATE-----
1489
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
1490
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
1491
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
1492
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
1493
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
1494
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1495
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
1496
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
1497
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
1498
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
1499
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
1500
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1501
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
1502
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
1503
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
1504
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
1505
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
1506
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
1507
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
1508
+ -----END CERTIFICATE-----
1509
+
1510
+ Go Daddy Class 2 CA
1511
+ ===================
1512
+ -----BEGIN CERTIFICATE-----
1513
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
1514
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
1515
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
1516
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
1517
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
1518
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
1519
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
1520
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
1521
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
1522
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
1523
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
1524
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
1525
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
1526
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
1527
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
1528
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
1529
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
1530
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
1531
+ vZ8=
1532
+ -----END CERTIFICATE-----
1533
+
1534
+ Starfield Class 2 CA
1535
+ ====================
1536
+ -----BEGIN CERTIFICATE-----
1537
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
1538
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
1539
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
1540
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
1541
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
1542
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
1543
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
1544
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
1545
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
1546
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
1547
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
1548
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
1549
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
1550
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
1551
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
1552
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1553
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
1554
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
1555
+ QBFGmh95DmK/D5fs4C8fF5Q=
1556
+ -----END CERTIFICATE-----
1557
+
1558
+ StartCom Certification Authority
1559
+ ================================
1560
+ -----BEGIN CERTIFICATE-----
1561
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
1562
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
1563
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
1564
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
1565
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
1566
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
1567
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
1568
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
1569
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
1570
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
1571
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
1572
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
1573
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
1574
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
1575
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
1576
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
1577
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
1578
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
1579
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
1580
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
1581
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
1582
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
1583
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
1584
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
1585
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
1586
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
1587
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
1588
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
1589
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
1590
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
1591
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
1592
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
1593
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
1594
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
1595
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
1596
+ g14=
1597
+ -----END CERTIFICATE-----
1598
+
1599
+ Taiwan GRCA
1600
+ ===========
1601
+ -----BEGIN CERTIFICATE-----
1602
+ MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
1603
+ EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
1604
+ DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
1605
+ dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
1606
+ ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
1607
+ w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
1608
+ BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
1609
+ 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
1610
+ htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
1611
+ J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
1612
+ Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
1613
+ B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
1614
+ O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
1615
+ lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
1616
+ HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
1617
+ 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
1618
+ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
1619
+ Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
1620
+ Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
1621
+ D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
1622
+ DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
1623
+ Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
1624
+ 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
1625
+ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
1626
+ +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
1627
+ -----END CERTIFICATE-----
1628
+
1629
+ Firmaprofesional Root CA
1630
+ ========================
1631
+ -----BEGIN CERTIFICATE-----
1632
+ MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
1633
+ GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
1634
+ Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
1635
+ ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
1636
+ MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
1637
+ OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
1638
+ ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
1639
+ AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
1640
+ j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
1641
+ lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
1642
+ 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
1643
+ NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
1644
+ KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
1645
+ AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
1646
+ DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
1647
+ ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
1648
+ u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
1649
+ wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
1650
+ 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
1651
+ VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
1652
+ -----END CERTIFICATE-----
1653
+
1654
+ Wells Fargo Root CA
1655
+ ===================
1656
+ -----BEGIN CERTIFICATE-----
1657
+ MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
1658
+ BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
1659
+ cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1660
+ MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
1661
+ bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
1662
+ MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
1663
+ SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
1664
+ x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
1665
+ E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
1666
+ OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
1667
+ sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
1668
+ YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
1669
+ BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
1670
+ ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
1671
+ m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
1672
+ OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
1673
+ x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
1674
+ tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
1675
+ -----END CERTIFICATE-----
1676
+
1677
+ Swisscom Root CA 1
1678
+ ==================
1679
+ -----BEGIN CERTIFICATE-----
1680
+ MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
1681
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
1682
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
1683
+ MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
1684
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
1685
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
1686
+ MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
1687
+ NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
1688
+ AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
1689
+ b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
1690
+ 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
1691
+ cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
1692
+ WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
1693
+ haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
1694
+ MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
1695
+ HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
1696
+ BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
1697
+ MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
1698
+ jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
1699
+ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
1700
+ VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
1701
+ vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
1702
+ OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
1703
+ 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
1704
+ nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
1705
+ x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
1706
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
1707
+ -----END CERTIFICATE-----
1708
+
1709
+ DigiCert Assured ID Root CA
1710
+ ===========================
1711
+ -----BEGIN CERTIFICATE-----
1712
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
1713
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1714
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
1715
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1716
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
1717
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
1718
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
1719
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
1720
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
1721
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
1722
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
1723
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
1724
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
1725
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
1726
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
1727
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1728
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1729
+ -----END CERTIFICATE-----
1730
+
1731
+ DigiCert Global Root CA
1732
+ =======================
1733
+ -----BEGIN CERTIFICATE-----
1734
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
1735
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1736
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
1737
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1738
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
1739
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
1740
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
1741
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
1742
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
1743
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
1744
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
1745
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
1746
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
1747
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
1748
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
1749
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1750
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1751
+ -----END CERTIFICATE-----
1752
+
1753
+ DigiCert High Assurance EV Root CA
1754
+ ==================================
1755
+ -----BEGIN CERTIFICATE-----
1756
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
1757
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
1758
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
1759
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
1760
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
1761
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
1762
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
1763
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
1764
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
1765
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
1766
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
1767
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
1768
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
1769
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
1770
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
1771
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1772
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
1773
+ -----END CERTIFICATE-----
1774
+
1775
+ Certplus Class 2 Primary CA
1776
+ ===========================
1777
+ -----BEGIN CERTIFICATE-----
1778
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
1779
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
1780
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
1781
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
1782
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
1783
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
1784
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
1785
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
1786
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
1787
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
1788
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
1789
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
1790
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
1791
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
1792
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
1793
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
1794
+ l7+ijrRU
1795
+ -----END CERTIFICATE-----
1796
+
1797
+ DST Root CA X3
1798
+ ==============
1799
+ -----BEGIN CERTIFICATE-----
1800
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
1801
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
1802
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
1803
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
1804
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
1805
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
1806
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
1807
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
1808
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
1809
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
1810
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
1811
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
1812
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
1813
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
1814
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1815
+ -----END CERTIFICATE-----
1816
+
1817
+ DST ACES CA X6
1818
+ ==============
1819
+ -----BEGIN CERTIFICATE-----
1820
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1821
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1822
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1823
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1824
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1825
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1826
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1827
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1828
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1829
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1830
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1831
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1832
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1833
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1834
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1835
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1836
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1837
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1838
+ oKfN5XozNmr6mis=
1839
+ -----END CERTIFICATE-----
1840
+
1841
+ TURKTRUST Certificate Services Provider Root 1
1842
+ ==============================================
1843
+ -----BEGIN CERTIFICATE-----
1844
+ MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1845
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
1846
+ MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
1847
+ acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
1848
+ MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
1849
+ U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
1850
+ TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
1851
+ aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
1852
+ AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
1853
+ yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
1854
+ Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
1855
+ 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
1856
+ W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
1857
+ BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
1858
+ sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
1859
+ q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
1860
+ B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
1861
+ nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
1862
+ -----END CERTIFICATE-----
1863
+
1864
+ TURKTRUST Certificate Services Provider Root 2
1865
+ ==============================================
1866
+ -----BEGIN CERTIFICATE-----
1867
+ MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1868
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
1869
+ MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
1870
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
1871
+ MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
1872
+ dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
1873
+ A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
1874
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
1875
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
1876
+ LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
1877
+ x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
1878
+ QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
1879
+ 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
1880
+ AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
1881
+ A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
1882
+ Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
1883
+ Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
1884
+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
1885
+ 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
1886
+ UrbnBEI=
1887
+ -----END CERTIFICATE-----
1888
+
1889
+ SwissSign Platinum CA - G2
1890
+ ==========================
1891
+ -----BEGIN CERTIFICATE-----
1892
+ MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT
1893
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw
1894
+ HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM
1895
+ U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ
1896
+ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu
1897
+ 669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF
1898
+ eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne
1899
+ WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo
1900
+ j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6
1901
+ 8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T
1902
+ aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy
1903
+ domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D
1904
+ +m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV
1905
+ CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
1906
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
1907
+ zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
1908
+ IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1
1909
+ Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3
1910
+ NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4
1911
+ U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8
1912
+ KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl
1913
+ 9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B
1914
+ aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs
1915
+ OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY
1916
+ Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci
1917
+ IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
1918
+ -----END CERTIFICATE-----
1919
+
1920
+ SwissSign Gold CA - G2
1921
+ ======================
1922
+ -----BEGIN CERTIFICATE-----
1923
+ MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
1924
+ EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
1925
+ MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
1926
+ c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
1927
+ AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
1928
+ t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
1929
+ jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
1930
+ vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
1931
+ ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
1932
+ AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
1933
+ jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
1934
+ peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
1935
+ 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
1936
+ GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
1937
+ AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
1938
+ OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
1939
+ L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
1940
+ 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
1941
+ 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
1942
+ Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
1943
+ Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
1944
+ mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
1945
+ vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
1946
+ KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
1947
+ NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
1948
+ viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
1949
+ -----END CERTIFICATE-----
1950
+
1951
+ SwissSign Silver CA - G2
1952
+ ========================
1953
+ -----BEGIN CERTIFICATE-----
1954
+ MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
1955
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
1956
+ DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
1957
+ aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
1958
+ 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
1959
+ N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
1960
+ +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
1961
+ 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
1962
+ MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
1963
+ qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
1964
+ FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
1965
+ ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
1966
+ celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
1967
+ CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
1968
+ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
1969
+ tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
1970
+ cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
1971
+ 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
1972
+ kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
1973
+ 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
1974
+ /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
1975
+ DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
1976
+ e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
1977
+ WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
1978
+ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
1979
+ DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
1980
+ -----END CERTIFICATE-----
1981
+
1982
+ GeoTrust Primary Certification Authority
1983
+ ========================================
1984
+ -----BEGIN CERTIFICATE-----
1985
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
1986
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
1987
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
1988
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
1989
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1990
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
1991
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
1992
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
1993
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
1994
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
1995
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
1996
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
1997
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
1998
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
1999
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
2000
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
2001
+ -----END CERTIFICATE-----
2002
+
2003
+ thawte Primary Root CA
2004
+ ======================
2005
+ -----BEGIN CERTIFICATE-----
2006
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
2007
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2008
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2009
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
2010
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
2011
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
2012
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
2013
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
2014
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
2015
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
2016
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
2017
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
2018
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
2019
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
2020
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
2021
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
2022
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
2023
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
2024
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
2025
+ -----END CERTIFICATE-----
2026
+
2027
+ VeriSign Class 3 Public Primary Certification Authority - G5
2028
+ ============================================================
2029
+ -----BEGIN CERTIFICATE-----
2030
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
2031
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2032
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2033
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
2034
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
2035
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
2036
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
2037
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
2038
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2039
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
2040
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
2041
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
2042
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
2043
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
2044
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
2045
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
2046
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
2047
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
2048
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
2049
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
2050
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
2051
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
2052
+ -----END CERTIFICATE-----
2053
+
2054
+ SecureTrust CA
2055
+ ==============
2056
+ -----BEGIN CERTIFICATE-----
2057
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
2058
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
2059
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
2060
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
2061
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
2062
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
2063
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
2064
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
2065
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
2066
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
2067
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
2068
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2069
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
2070
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
2071
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
2072
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
2073
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
2074
+ -----END CERTIFICATE-----
2075
+
2076
+ Secure Global CA
2077
+ ================
2078
+ -----BEGIN CERTIFICATE-----
2079
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
2080
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
2081
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
2082
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
2083
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
2084
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
2085
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
2086
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
2087
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
2088
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
2089
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
2090
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
2091
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
2092
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
2093
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
2094
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
2095
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
2096
+ -----END CERTIFICATE-----
2097
+
2098
+ COMODO Certification Authority
2099
+ ==============================
2100
+ -----BEGIN CERTIFICATE-----
2101
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
2102
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
2103
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
2104
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
2105
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
2106
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
2107
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
2108
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
2109
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
2110
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
2111
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
2112
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
2113
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
2114
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
2115
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
2116
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
2117
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
2118
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
2119
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
2120
+ -----END CERTIFICATE-----
2121
+
2122
+ Network Solutions Certificate Authority
2123
+ =======================================
2124
+ -----BEGIN CERTIFICATE-----
2125
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
2126
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
2127
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
2128
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
2129
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
2130
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
2131
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
2132
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
2133
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
2134
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
2135
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
2136
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
2137
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
2138
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
2139
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
2140
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
2141
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
2142
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
2143
+ -----END CERTIFICATE-----
2144
+
2145
+ WellsSecure Public Root Certificate Authority
2146
+ =============================================
2147
+ -----BEGIN CERTIFICATE-----
2148
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
2149
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
2150
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
2151
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
2152
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
2153
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
2154
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
2155
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
2156
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
2157
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
2158
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
2159
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
2160
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
2161
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
2162
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
2163
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
2164
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
2165
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
2166
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
2167
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
2168
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
2169
+ tylv2G0xffX8oRAHh84vWdw+WNs=
2170
+ -----END CERTIFICATE-----
2171
+
2172
+ COMODO ECC Certification Authority
2173
+ ==================================
2174
+ -----BEGIN CERTIFICATE-----
2175
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
2176
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
2177
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
2178
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
2179
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
2180
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
2181
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
2182
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
2183
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
2184
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
2185
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
2186
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
2187
+ -----END CERTIFICATE-----
2188
+
2189
+ IGC/A
2190
+ =====
2191
+ -----BEGIN CERTIFICATE-----
2192
+ MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
2193
+ VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
2194
+ Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
2195
+ MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
2196
+ EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
2197
+ STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
2198
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
2199
+ TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
2200
+ So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
2201
+ HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
2202
+ frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
2203
+ tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
2204
+ egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
2205
+ iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
2206
+ q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
2207
+ MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
2208
+ Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
2209
+ lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
2210
+ 0mBWWg==
2211
+ -----END CERTIFICATE-----
2212
+
2213
+ Security Communication EV RootCA1
2214
+ =================================
2215
+ -----BEGIN CERTIFICATE-----
2216
+ MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
2217
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
2218
+ dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
2219
+ BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
2220
+ Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2221
+ AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
2222
+ /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
2223
+ WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
2224
+ ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
2225
+ bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
2226
+ 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
2227
+ SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
2228
+ iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
2229
+ Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
2230
+ mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
2231
+ T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
2232
+ -----END CERTIFICATE-----
2233
+
2234
+ OISTE WISeKey Global Root GA CA
2235
+ ===============================
2236
+ -----BEGIN CERTIFICATE-----
2237
+ MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
2238
+ BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
2239
+ A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
2240
+ bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
2241
+ VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
2242
+ IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
2243
+ IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
2244
+ Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
2245
+ Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
2246
+ d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
2247
+ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
2248
+ LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
2249
+ AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
2250
+ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
2251
+ MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
2252
+ +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
2253
+ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
2254
+ okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
2255
+ -----END CERTIFICATE-----
2256
+
2257
+ S-TRUST Authentication and Encryption Root CA 2005 PN
2258
+ =====================================================
2259
+ -----BEGIN CERTIFICATE-----
2260
+ MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE
2261
+ BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh
2262
+ cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT
2263
+ LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w
2264
+ NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk
2265
+ ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj
2266
+ aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp
2267
+ b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2268
+ MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob
2269
+ 4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL
2270
+ g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf
2271
+ eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3
2272
+ KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB
2273
+ /wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv
2274
+ bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU
2275
+ D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
2276
+ pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08
2277
+ P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA
2278
+ nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit
2279
+ F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b
2280
+ Hz2eBIPdltkdOpQ=
2281
+ -----END CERTIFICATE-----
2282
+
2283
+ Microsec e-Szigno Root CA
2284
+ =========================
2285
+ -----BEGIN CERTIFICATE-----
2286
+ MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
2287
+ BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
2288
+ EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
2289
+ MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
2290
+ dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
2291
+ GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
2292
+ AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
2293
+ d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
2294
+ oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
2295
+ QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
2296
+ PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
2297
+ MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
2298
+ IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
2299
+ VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
2300
+ LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
2301
+ dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
2302
+ AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
2303
+ 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
2304
+ AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
2305
+ egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
2306
+ Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
2307
+ PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
2308
+ c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
2309
+ cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
2310
+ IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
2311
+ WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
2312
+ MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
2313
+ MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
2314
+ Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
2315
+ HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
2316
+ nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
2317
+ aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
2318
+ 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
2319
+ yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
2320
+ S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
2321
+ -----END CERTIFICATE-----
2322
+
2323
+ Certigna
2324
+ ========
2325
+ -----BEGIN CERTIFICATE-----
2326
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
2327
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
2328
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
2329
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
2330
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
2331
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
2332
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
2333
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
2334
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
2335
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
2336
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
2337
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
2338
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
2339
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
2340
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
2341
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
2342
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
2343
+ -----END CERTIFICATE-----
2344
+
2345
+ AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
2346
+ ======================================
2347
+ -----BEGIN CERTIFICATE-----
2348
+ MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
2349
+ AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
2350
+ LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
2351
+ HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
2352
+ U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
2353
+ IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
2354
+ AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
2355
+ yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
2356
+ 2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
2357
+ 4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
2358
+ 2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
2359
+ 8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
2360
+ HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
2361
+ Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
2362
+ 5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
2363
+ czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
2364
+ AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
2365
+ ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
2366
+ BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
2367
+ cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
2368
+ AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
2369
+ EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
2370
+ /zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
2371
+ MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
2372
+ 3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
2373
+ eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
2374
+ /RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
2375
+ RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
2376
+ Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
2377
+ -----END CERTIFICATE-----
2378
+
2379
+ TC TrustCenter Class 2 CA II
2380
+ ============================
2381
+ -----BEGIN CERTIFICATE-----
2382
+ MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2383
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2384
+ IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
2385
+ MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2386
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
2387
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2388
+ AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
2389
+ IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
2390
+ xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
2391
+ Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
2392
+ SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
2393
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
2394
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2395
+ Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2396
+ cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2397
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2398
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
2399
+ dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
2400
+ KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
2401
+ TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
2402
+ JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
2403
+ vQ==
2404
+ -----END CERTIFICATE-----
2405
+
2406
+ TC TrustCenter Class 3 CA II
2407
+ ============================
2408
+ -----BEGIN CERTIFICATE-----
2409
+ MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2410
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2411
+ IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
2412
+ MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2413
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
2414
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2415
+ AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
2416
+ yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
2417
+ 6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
2418
+ uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
2419
+ 2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
2420
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
2421
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2422
+ Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2423
+ cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2424
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2425
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
2426
+ O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
2427
+ yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
2428
+ IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
2429
+ 092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
2430
+ 5A==
2431
+ -----END CERTIFICATE-----
2432
+
2433
+ TC TrustCenter Universal CA I
2434
+ =============================
2435
+ -----BEGIN CERTIFICATE-----
2436
+ MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
2437
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
2438
+ IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
2439
+ MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
2440
+ VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
2441
+ JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
2442
+ ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
2443
+ qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
2444
+ xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
2445
+ ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
2446
+ gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
2447
+ BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2448
+ AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
2449
+ 1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
2450
+ vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
2451
+ ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
2452
+ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
2453
+ 7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
2454
+ -----END CERTIFICATE-----
2455
+
2456
+ Deutsche Telekom Root CA 2
2457
+ ==========================
2458
+ -----BEGIN CERTIFICATE-----
2459
+ MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
2460
+ RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
2461
+ A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
2462
+ MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
2463
+ A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
2464
+ b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
2465
+ bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
2466
+ KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
2467
+ AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
2468
+ Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
2469
+ jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
2470
+ HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
2471
+ E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
2472
+ zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
2473
+ rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
2474
+ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
2475
+ Cm26OWMohpLzGITY+9HPBVZkVw==
2476
+ -----END CERTIFICATE-----
2477
+
2478
+ ComSign CA
2479
+ ==========
2480
+ -----BEGIN CERTIFICATE-----
2481
+ MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD
2482
+ EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy
2483
+ MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp
2484
+ Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q
2485
+ ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy
2486
+ P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN
2487
+ GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk
2488
+ YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM
2489
+ rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy
2490
+ oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P
2491
+ AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+
2492
+ VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2
2493
+ QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI
2494
+ mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb
2495
+ /627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG
2496
+ zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
2497
+ AGegcQCCSA==
2498
+ -----END CERTIFICATE-----
2499
+
2500
+ ComSign Secured CA
2501
+ ==================
2502
+ -----BEGIN CERTIFICATE-----
2503
+ MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
2504
+ AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
2505
+ NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
2506
+ QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2507
+ ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
2508
+ 49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
2509
+ 7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
2510
+ kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
2511
+ 9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
2512
+ AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
2513
+ U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
2514
+ j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
2515
+ AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
2516
+ BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
2517
+ FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
2518
+ 51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
2519
+ OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
2520
+ -----END CERTIFICATE-----
2521
+
2522
+ Cybertrust Global Root
2523
+ ======================
2524
+ -----BEGIN CERTIFICATE-----
2525
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
2526
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
2527
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
2528
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
2529
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
2530
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
2531
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
2532
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
2533
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
2534
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
2535
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
2536
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
2537
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
2538
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
2539
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
2540
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
2541
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
2542
+ -----END CERTIFICATE-----
2543
+
2544
+ ePKI Root Certification Authority
2545
+ =================================
2546
+ -----BEGIN CERTIFICATE-----
2547
+ MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
2548
+ EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
2549
+ Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
2550
+ MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
2551
+ MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
2552
+ AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
2553
+ IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
2554
+ lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
2555
+ qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
2556
+ 12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
2557
+ WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
2558
+ ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
2559
+ lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
2560
+ vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
2561
+ Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
2562
+ MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
2563
+ ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
2564
+ 1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
2565
+ KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
2566
+ xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
2567
+ NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
2568
+ GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
2569
+ xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
2570
+ gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
2571
+ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
2572
+ BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
2573
+ -----END CERTIFICATE-----
2574
+
2575
+ T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
2576
+ =============================================================================================================================
2577
+ -----BEGIN CERTIFICATE-----
2578
+ MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
2579
+ DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
2580
+ aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
2581
+ b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
2582
+ BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
2583
+ S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
2584
+ MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
2585
+ IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
2586
+ n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
2587
+ IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
2588
+ dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
2589
+ cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
2590
+ AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
2591
+ Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
2592
+ xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
2593
+ 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
2594
+ hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
2595
+ BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
2596
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
2597
+ N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
2598
+ y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
2599
+ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
2600
+ dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
2601
+ -----END CERTIFICATE-----
2602
+
2603
+ Buypass Class 2 CA 1
2604
+ ====================
2605
+ -----BEGIN CERTIFICATE-----
2606
+ MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2607
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
2608
+ MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2609
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
2610
+ hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
2611
+ cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
2612
+ 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
2613
+ 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
2614
+ uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
2615
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
2616
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
2617
+ 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
2618
+ 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
2619
+ fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
2620
+ wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
2621
+ -----END CERTIFICATE-----
2622
+
2623
+ Buypass Class 3 CA 1
2624
+ ====================
2625
+ -----BEGIN CERTIFICATE-----
2626
+ MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2627
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
2628
+ MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2629
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
2630
+ hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
2631
+ ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
2632
+ n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
2633
+ AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
2634
+ 1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
2635
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
2636
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
2637
+ pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
2638
+ EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
2639
+ htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
2640
+ el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
2641
+ -----END CERTIFICATE-----
2642
+
2643
+ EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
2644
+ ==========================================================================
2645
+ -----BEGIN CERTIFICATE-----
2646
+ MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
2647
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
2648
+ QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
2649
+ Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
2650
+ ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
2651
+ IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
2652
+ SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
2653
+ X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
2654
+ gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
2655
+ eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
2656
+ TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
2657
+ Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
2658
+ uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
2659
+ qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
2660
+ ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
2661
+ Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
2662
+ /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
2663
+ Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
2664
+ FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
2665
+ zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
2666
+ XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
2667
+ bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
2668
+ RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
2669
+ 1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
2670
+ 2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
2671
+ Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
2672
+ AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
2673
+ -----END CERTIFICATE-----
2674
+
2675
+ certSIGN ROOT CA
2676
+ ================
2677
+ -----BEGIN CERTIFICATE-----
2678
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
2679
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
2680
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
2681
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
2682
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
2683
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
2684
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
2685
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
2686
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
2687
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
2688
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
2689
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
2690
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
2691
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
2692
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
2693
+ -----END CERTIFICATE-----
2694
+
2695
+ CNNIC ROOT
2696
+ ==========
2697
+ -----BEGIN CERTIFICATE-----
2698
+ MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
2699
+ ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
2700
+ OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
2701
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
2702
+ o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
2703
+ VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
2704
+ VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
2705
+ czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
2706
+ y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
2707
+ wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
2708
+ lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
2709
+ Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
2710
+ O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
2711
+ BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
2712
+ G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
2713
+ mxE=
2714
+ -----END CERTIFICATE-----
2715
+
2716
+ ApplicationCA - Japanese Government
2717
+ ===================================
2718
+ -----BEGIN CERTIFICATE-----
2719
+ MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
2720
+ SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
2721
+ MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
2722
+ cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2723
+ CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
2724
+ fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
2725
+ wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
2726
+ jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
2727
+ nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
2728
+ WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
2729
+ BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
2730
+ vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
2731
+ o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
2732
+ /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
2733
+ io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
2734
+ dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
2735
+ rosot4LKGAfmt1t06SAZf7IbiVQ=
2736
+ -----END CERTIFICATE-----
2737
+
2738
+ GeoTrust Primary Certification Authority - G3
2739
+ =============================================
2740
+ -----BEGIN CERTIFICATE-----
2741
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
2742
+ BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
2743
+ IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
2744
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
2745
+ NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
2746
+ YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
2747
+ LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
2748
+ hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
2749
+ K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
2750
+ c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
2751
+ IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
2752
+ dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
2753
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
2754
+ 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
2755
+ cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
2756
+ Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
2757
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
2758
+ t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
2759
+ -----END CERTIFICATE-----
2760
+
2761
+ thawte Primary Root CA - G2
2762
+ ===========================
2763
+ -----BEGIN CERTIFICATE-----
2764
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
2765
+ VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
2766
+ IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
2767
+ Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
2768
+ MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
2769
+ b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
2770
+ IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
2771
+ LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
2772
+ 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
2773
+ mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
2774
+ G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
2775
+ rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
2776
+ -----END CERTIFICATE-----
2777
+
2778
+ thawte Primary Root CA - G3
2779
+ ===========================
2780
+ -----BEGIN CERTIFICATE-----
2781
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
2782
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2783
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2784
+ cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
2785
+ ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
2786
+ d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
2787
+ VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
2788
+ A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2789
+ MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
2790
+ P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
2791
+ +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
2792
+ 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
2793
+ vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
2794
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
2795
+ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
2796
+ A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
2797
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
2798
+ 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
2799
+ er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
2800
+ -----END CERTIFICATE-----
2801
+
2802
+ GeoTrust Primary Certification Authority - G2
2803
+ =============================================
2804
+ -----BEGIN CERTIFICATE-----
2805
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
2806
+ VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
2807
+ Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
2808
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
2809
+ OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
2810
+ MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
2811
+ b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
2812
+ BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
2813
+ KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
2814
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
2815
+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
2816
+ ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
2817
+ npaqBA+K
2818
+ -----END CERTIFICATE-----
2819
+
2820
+ VeriSign Universal Root Certification Authority
2821
+ ===============================================
2822
+ -----BEGIN CERTIFICATE-----
2823
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
2824
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2825
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2826
+ IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
2827
+ IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
2828
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
2829
+ cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
2830
+ IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
2831
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
2832
+ 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
2833
+ MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
2834
+ 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
2835
+ AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
2836
+ tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
2837
+ CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
2838
+ a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
2839
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
2840
+ Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
2841
+ Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
2842
+ P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
2843
+ wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
2844
+ mJO37M2CYfE45k+XmCpajQ==
2845
+ -----END CERTIFICATE-----
2846
+
2847
+ VeriSign Class 3 Public Primary Certification Authority - G4
2848
+ ============================================================
2849
+ -----BEGIN CERTIFICATE-----
2850
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
2851
+ VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
2852
+ b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
2853
+ ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
2854
+ YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
2855
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
2856
+ cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
2857
+ b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2858
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
2859
+ Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
2860
+ rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
2861
+ /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
2862
+ HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
2863
+ Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
2864
+ A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
2865
+ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
2866
+ -----END CERTIFICATE-----
2867
+
2868
+ NetLock Arany (Class Gold) Főtanúsítvány
2869
+ ============================================
2870
+ -----BEGIN CERTIFICATE-----
2871
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
2872
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
2873
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
2874
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
2875
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
2876
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
2877
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
2878
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
2879
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
2880
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
2881
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
2882
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
2883
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
2884
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
2885
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
2886
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
2887
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
2888
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
2889
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
2890
+ -----END CERTIFICATE-----
2891
+
2892
+ Staat der Nederlanden Root CA - G2
2893
+ ==================================
2894
+ -----BEGIN CERTIFICATE-----
2895
+ MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
2896
+ CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2897
+ Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
2898
+ TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
2899
+ ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
2900
+ 5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
2901
+ vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
2902
+ CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
2903
+ e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
2904
+ OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
2905
+ CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
2906
+ 48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
2907
+ trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
2908
+ qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
2909
+ AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
2910
+ ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
2911
+ HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
2912
+ A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
2913
+ +51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
2914
+ f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
2915
+ kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
2916
+ CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
2917
+ URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
2918
+ CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
2919
+ oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
2920
+ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
2921
+ 66+KAQ==
2922
+ -----END CERTIFICATE-----
2923
+
2924
+ CA Disig
2925
+ ========
2926
+ -----BEGIN CERTIFICATE-----
2927
+ MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
2928
+ QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
2929
+ MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
2930
+ bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
2931
+ DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
2932
+ GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
2933
+ Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
2934
+ hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
2935
+ ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
2936
+ gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
2937
+ AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
2938
+ aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
2939
+ ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
2940
+ BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
2941
+ WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
2942
+ mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
2943
+ CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
2944
+ ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
2945
+ 4Z7CRneC9VkGjCFMhwnN5ag=
2946
+ -----END CERTIFICATE-----
2947
+
2948
+ Juur-SK
2949
+ =======
2950
+ -----BEGIN CERTIFICATE-----
2951
+ MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
2952
+ c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
2953
+ DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
2954
+ SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
2955
+ aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2956
+ ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
2957
+ TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
2958
+ +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
2959
+ UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
2960
+ Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
2961
+ MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
2962
+ HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
2963
+ AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
2964
+ cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
2965
+ AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
2966
+ cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
2967
+ FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
2968
+ A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
2969
+ ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
2970
+ abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
2971
+ IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
2972
+ Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
2973
+ yyqcjg==
2974
+ -----END CERTIFICATE-----
2975
+
2976
+ Hongkong Post Root CA 1
2977
+ =======================
2978
+ -----BEGIN CERTIFICATE-----
2979
+ MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
2980
+ DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
2981
+ NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
2982
+ IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
2983
+ AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
2984
+ ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
2985
+ auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
2986
+ qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
2987
+ V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
2988
+ HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
2989
+ h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
2990
+ l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
2991
+ IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
2992
+ T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
2993
+ c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
2994
+ -----END CERTIFICATE-----
2995
+
2996
+ SecureSign RootCA11
2997
+ ===================
2998
+ -----BEGIN CERTIFICATE-----
2999
+ MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
3000
+ SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
3001
+ b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
3002
+ KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
3003
+ cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
3004
+ TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
3005
+ wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
3006
+ g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
3007
+ O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
3008
+ bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
3009
+ t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
3010
+ OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
3011
+ bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
3012
+ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
3013
+ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
3014
+ lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
3015
+ -----END CERTIFICATE-----
3016
+
3017
+ ACEDICOM Root
3018
+ =============
3019
+ -----BEGIN CERTIFICATE-----
3020
+ MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
3021
+ T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
3022
+ MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
3023
+ A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
3024
+ AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
3025
+ WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
3026
+ YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
3027
+ MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
3028
+ m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
3029
+ HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
3030
+ xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
3031
+ 3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
3032
+ 2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
3033
+ TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
3034
+ 4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
3035
+ 9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
3036
+ bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
3037
+ aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
3038
+ eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
3039
+ zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
3040
+ ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
3041
+ KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
3042
+ nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
3043
+ I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
3044
+ MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
3045
+ tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
3046
+ -----END CERTIFICATE-----
3047
+
3048
+ Verisign Class 1 Public Primary Certification Authority
3049
+ =======================================================
3050
+ -----BEGIN CERTIFICATE-----
3051
+ MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
3052
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5
3053
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
3054
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx
3055
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
3056
+ A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ
3057
+ VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2
3058
+ yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa
3059
+ XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n
3060
+ 0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ
3061
+ RjXZ+Hxb
3062
+ -----END CERTIFICATE-----
3063
+
3064
+ Verisign Class 3 Public Primary Certification Authority
3065
+ =======================================================
3066
+ -----BEGIN CERTIFICATE-----
3067
+ MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
3068
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
3069
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
3070
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
3071
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
3072
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
3073
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
3074
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
3075
+ CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
3076
+ bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
3077
+ D/xwzoiQ
3078
+ -----END CERTIFICATE-----
3079
+
3080
+ Microsec e-Szigno Root CA 2009
3081
+ ==============================
3082
+ -----BEGIN CERTIFICATE-----
3083
+ MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
3084
+ MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
3085
+ c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
3086
+ dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
3087
+ BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
3088
+ U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
3089
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
3090
+ fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
3091
+ 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
3092
+ pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
3093
+ 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
3094
+ AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
3095
+ QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
3096
+ FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
3097
+ lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
3098
+ I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
3099
+ tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
3100
+ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
3101
+ LXpUq3DDfSJlgnCW
3102
+ -----END CERTIFICATE-----
3103
+
3104
+ E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
3105
+ ===================================================
3106
+ -----BEGIN CERTIFICATE-----
3107
+ MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
3108
+ EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
3109
+ ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
3110
+ MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
3111
+ cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
3112
+ aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
3113
+ AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
3114
+ 8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
3115
+ jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
3116
+ JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
3117
+ 9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
3118
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
3119
+ SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
3120
+ F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
3121
+ D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
3122
+ Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
3123
+ fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
3124
+ -----END CERTIFICATE-----
3125
+
3126
+ GlobalSign Root CA - R3
3127
+ =======================
3128
+ -----BEGIN CERTIFICATE-----
3129
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
3130
+ YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
3131
+ bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
3132
+ aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
3133
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
3134
+ iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
3135
+ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
3136
+ rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
3137
+ OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
3138
+ xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
3139
+ FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
3140
+ lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
3141
+ EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
3142
+ bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
3143
+ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
3144
+ kpeDMdmztcpHWD9f
3145
+ -----END CERTIFICATE-----
3146
+
3147
+ TC TrustCenter Universal CA III
3148
+ ===============================
3149
+ -----BEGIN CERTIFICATE-----
3150
+ MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
3151
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
3152
+ IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
3153
+ Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
3154
+ QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
3155
+ KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
3156
+ AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
3157
+ QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
3158
+ juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
3159
+ CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
3160
+ M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
3161
+ A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
3162
+ BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
3163
+ g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
3164
+ KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
3165
+ BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
3166
+ CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
3167
+ woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
3168
+ -----END CERTIFICATE-----
3169
+
3170
+ Autoridad de Certificacion Firmaprofesional CIF A62634068
3171
+ =========================================================
3172
+ -----BEGIN CERTIFICATE-----
3173
+ MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
3174
+ BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
3175
+ MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
3176
+ QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
3177
+ NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
3178
+ Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
3179
+ B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
3180
+ 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
3181
+ ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
3182
+ plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
3183
+ MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
3184
+ LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
3185
+ bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
3186
+ vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
3187
+ EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
3188
+ DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
3189
+ cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
3190
+ bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
3191
+ ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
3192
+ 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
3193
+ R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
3194
+ T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
3195
+ Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
3196
+ osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
3197
+ crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
3198
+ saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
3199
+ KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
3200
+ 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
3201
+ -----END CERTIFICATE-----
3202
+
3203
+ Izenpe.com
3204
+ ==========
3205
+ -----BEGIN CERTIFICATE-----
3206
+ MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
3207
+ EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
3208
+ MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
3209
+ QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
3210
+ 03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
3211
+ ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
3212
+ +zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
3213
+ PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
3214
+ OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
3215
+ F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
3216
+ 0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
3217
+ 0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
3218
+ leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
3219
+ AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
3220
+ SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
3221
+ NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
3222
+ MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
3223
+ BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
3224
+ Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
3225
+ kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
3226
+ hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
3227
+ g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
3228
+ aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
3229
+ nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
3230
+ ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
3231
+ Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
3232
+ WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
3233
+ -----END CERTIFICATE-----
3234
+
3235
+ Chambers of Commerce Root - 2008
3236
+ ================================
3237
+ -----BEGIN CERTIFICATE-----
3238
+ MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
3239
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
3240
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
3241
+ QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
3242
+ Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
3243
+ ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
3244
+ EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
3245
+ cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
3246
+ AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
3247
+ XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
3248
+ h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
3249
+ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
3250
+ NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
3251
+ D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
3252
+ lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
3253
+ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
3254
+ ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
3255
+ EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
3256
+ G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
3257
+ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
3258
+ bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
3259
+ bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
3260
+ CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
3261
+ AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
3262
+ wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
3263
+ 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
3264
+ RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
3265
+ M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
3266
+ YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
3267
+ 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
3268
+ zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
3269
+ nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
3270
+ OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
3271
+ -----END CERTIFICATE-----
3272
+
3273
+ Global Chambersign Root - 2008
3274
+ ==============================
3275
+ -----BEGIN CERTIFICATE-----
3276
+ MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
3277
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
3278
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
3279
+ QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
3280
+ NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
3281
+ Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
3282
+ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
3283
+ aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
3284
+ VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
3285
+ XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
3286
+ ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
3287
+ /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
3288
+ TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
3289
+ H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
3290
+ Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
3291
+ HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
3292
+ wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
3293
+ AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
3294
+ BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
3295
+ BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
3296
+ aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
3297
+ aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
3298
+ 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
3299
+ dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
3300
+ /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
3301
+ ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
3302
+ dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
3303
+ 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
3304
+ foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
3305
+ qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
3306
+ P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
3307
+ c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
3308
+ 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
3309
+ -----END CERTIFICATE-----
3310
+
3311
+ Go Daddy Root Certificate Authority - G2
3312
+ ========================================
3313
+ -----BEGIN CERTIFICATE-----
3314
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3315
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
3316
+ MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
3317
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
3318
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
3319
+ A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
3320
+ hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
3321
+ 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
3322
+ +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
3323
+ fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
3324
+ NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
3325
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
3326
+ BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
3327
+ vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
3328
+ 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
3329
+ N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
3330
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
3331
+ -----END CERTIFICATE-----
3332
+
3333
+ Starfield Root Certificate Authority - G2
3334
+ =========================================
3335
+ -----BEGIN CERTIFICATE-----
3336
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3337
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3338
+ b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
3339
+ eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
3340
+ DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
3341
+ VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
3342
+ dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
3343
+ W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
3344
+ bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
3345
+ N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
3346
+ ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
3347
+ JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3348
+ AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
3349
+ TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
3350
+ 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
3351
+ F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
3352
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
3353
+ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
3354
+ -----END CERTIFICATE-----
3355
+
3356
+ Starfield Services Root Certificate Authority - G2
3357
+ ==================================================
3358
+ -----BEGIN CERTIFICATE-----
3359
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3360
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3361
+ b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
3362
+ IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
3363
+ BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
3364
+ dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
3365
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
3366
+ AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
3367
+ h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
3368
+ hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
3369
+ LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
3370
+ rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
3371
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
3372
+ SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
3373
+ E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
3374
+ xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
3375
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
3376
+ YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
3377
+ -----END CERTIFICATE-----
3378
+
3379
+ AffirmTrust Commercial
3380
+ ======================
3381
+ -----BEGIN CERTIFICATE-----
3382
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
3383
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
3384
+ MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3385
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
3386
+ AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
3387
+ DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
3388
+ C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
3389
+ BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
3390
+ MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
3391
+ HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3392
+ AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
3393
+ hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
3394
+ qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
3395
+ 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
3396
+ sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
3397
+ -----END CERTIFICATE-----
3398
+
3399
+ AffirmTrust Networking
3400
+ ======================
3401
+ -----BEGIN CERTIFICATE-----
3402
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
3403
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
3404
+ MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3405
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
3406
+ AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
3407
+ Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
3408
+ dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
3409
+ /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
3410
+ h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
3411
+ HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3412
+ AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
3413
+ UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
3414
+ 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
3415
+ WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
3416
+ /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
3417
+ -----END CERTIFICATE-----
3418
+
3419
+ AffirmTrust Premium
3420
+ ===================
3421
+ -----BEGIN CERTIFICATE-----
3422
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
3423
+ BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
3424
+ OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
3425
+ dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
3426
+ MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
3427
+ BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
3428
+ 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
3429
+ +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
3430
+ GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
3431
+ p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
3432
+ S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
3433
+ 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
3434
+ /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
3435
+ +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
3436
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
3437
+ MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
3438
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
3439
+ 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
3440
+ L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
3441
+ +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
3442
+ BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
3443
+ IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
3444
+ g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
3445
+ zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
3446
+ -----END CERTIFICATE-----
3447
+
3448
+ AffirmTrust Premium ECC
3449
+ =======================
3450
+ -----BEGIN CERTIFICATE-----
3451
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
3452
+ BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
3453
+ MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
3454
+ cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
3455
+ IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
3456
+ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
3457
+ BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
3458
+ BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
3459
+ 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
3460
+ eQ==
3461
+ -----END CERTIFICATE-----
3462
+
3463
+ Certum Trusted Network CA
3464
+ =========================
3465
+ -----BEGIN CERTIFICATE-----
3466
+ MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
3467
+ ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
3468
+ biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
3469
+ MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
3470
+ ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3471
+ MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
3472
+ AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
3473
+ l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
3474
+ J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
3475
+ fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
3476
+ cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
3477
+ Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
3478
+ DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
3479
+ jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
3480
+ mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
3481
+ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
3482
+ 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
3483
+ -----END CERTIFICATE-----
3484
+
3485
+ Certinomis - Autorité Racine
3486
+ =============================
3487
+ -----BEGIN CERTIFICATE-----
3488
+ MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
3489
+ Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
3490
+ LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
3491
+ A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
3492
+ JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
3493
+ ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
3494
+ wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
3495
+ Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
3496
+ 2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
3497
+ jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
3498
+ c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
3499
+ lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
3500
+ xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
3501
+ 530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
3502
+ 4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
3503
+ A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
3504
+ KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
3505
+ WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
3506
+ R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
3507
+ nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
3508
+ CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
3509
+ JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
3510
+ qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
3511
+ WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
3512
+ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
3513
+ vgt2Fl43N+bYdJeimUV5
3514
+ -----END CERTIFICATE-----
3515
+
3516
+ Root CA Generalitat Valenciana
3517
+ ==============================
3518
+ -----BEGIN CERTIFICATE-----
3519
+ MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
3520
+ ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
3521
+ IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
3522
+ WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
3523
+ CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
3524
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
3525
+ F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
3526
+ ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
3527
+ D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
3528
+ JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
3529
+ AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
3530
+ dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
3531
+ ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
3532
+ AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
3533
+ YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
3534
+ AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
3535
+ aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
3536
+ AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
3537
+ YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
3538
+ AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
3539
+ OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
3540
+ dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
3541
+ BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
3542
+ A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
3543
+ b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
3544
+ TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
3545
+ Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
3546
+ NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
3547
+ iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
3548
+ +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
3549
+ -----END CERTIFICATE-----
3550
+
3551
+ A-Trust-nQual-03
3552
+ ================
3553
+ -----BEGIN CERTIFICATE-----
3554
+ MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
3555
+ Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
3556
+ a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
3557
+ dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
3558
+ RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
3559
+ ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
3560
+ c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
3561
+ zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
3562
+ yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
3563
+ SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
3564
+ iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
3565
+ cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
3566
+ eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
3567
+ ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
3568
+ sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
3569
+ JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
3570
+ mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
3571
+ ahq97BvIxYSazQ==
3572
+ -----END CERTIFICATE-----
3573
+
3574
+ TWCA Root Certification Authority
3575
+ =================================
3576
+ -----BEGIN CERTIFICATE-----
3577
+ MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
3578
+ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
3579
+ dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
3580
+ EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
3581
+ IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3582
+ AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
3583
+ QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
3584
+ oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
3585
+ 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
3586
+ y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
3587
+ BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
3588
+ 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
3589
+ mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
3590
+ QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
3591
+ T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
3592
+ Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
3593
+ -----END CERTIFICATE-----
3594
+
3595
+ Security Communication RootCA2
3596
+ ==============================
3597
+ -----BEGIN CERTIFICATE-----
3598
+ MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
3599
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
3600
+ dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
3601
+ SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
3602
+ aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3603
+ ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
3604
+ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
3605
+ 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
3606
+ spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
3607
+ EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
3608
+ QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
3609
+ CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
3610
+ u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
3611
+ 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
3612
+ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
3613
+ mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
3614
+ -----END CERTIFICATE-----
3615
+
3616
+ EC-ACC
3617
+ ======
3618
+ -----BEGIN CERTIFICATE-----
3619
+ MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
3620
+ BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
3621
+ ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
3622
+ VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
3623
+ CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
3624
+ BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
3625
+ MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
3626
+ SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
3627
+ Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
3628
+ cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
3629
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
3630
+ w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
3631
+ ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
3632
+ HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
3633
+ E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
3634
+ 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
3635
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
3636
+ VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
3637
+ Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
3638
+ dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
3639
+ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
3640
+ Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
3641
+ l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
3642
+ E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
3643
+ 5EI=
3644
+ -----END CERTIFICATE-----
3645
+
3646
+ Hellenic Academic and Research Institutions RootCA 2011
3647
+ =======================================================
3648
+ -----BEGIN CERTIFICATE-----
3649
+ MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
3650
+ O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
3651
+ aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3652
+ IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
3653
+ AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3654
+ IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
3655
+ IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3656
+ AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
3657
+ 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
3658
+ 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
3659
+ 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
3660
+ 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
3661
+ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
3662
+ MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
3663
+ b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
3664
+ XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
3665
+ TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
3666
+ /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
3667
+ 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
3668
+ -----END CERTIFICATE-----
3669
+
3670
+ Actalis Authentication Root CA
3671
+ ==============================
3672
+ -----BEGIN CERTIFICATE-----
3673
+ MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
3674
+ BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
3675
+ AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
3676
+ MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
3677
+ IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
3678
+ IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
3679
+ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
3680
+ by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
3681
+ zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
3682
+ YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
3683
+ oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
3684
+ EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
3685
+ hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
3686
+ EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
3687
+ jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
3688
+ iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
3689
+ ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
3690
+ WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
3691
+ JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
3692
+ K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
3693
+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
3694
+ 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
3695
+ 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
3696
+ lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
3697
+ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
3698
+ vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
3699
+ -----END CERTIFICATE-----
3700
+
3701
+ Trustis FPS Root CA
3702
+ ===================
3703
+ -----BEGIN CERTIFICATE-----
3704
+ MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
3705
+ EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
3706
+ IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
3707
+ BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
3708
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
3709
+ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
3710
+ H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
3711
+ cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
3712
+ o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
3713
+ AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
3714
+ BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
3715
+ GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
3716
+ yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
3717
+ 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
3718
+ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
3719
+ iB6XzCGcKQENZetX2fNXlrtIzYE=
3720
+ -----END CERTIFICATE-----
3721
+
3722
+ StartCom Certification Authority
3723
+ ================================
3724
+ -----BEGIN CERTIFICATE-----
3725
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
3726
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
3727
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
3728
+ NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
3729
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
3730
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
3731
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
3732
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
3733
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
3734
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
3735
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
3736
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
3737
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
3738
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
3739
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
3740
+ 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
3741
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
3742
+ Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
3743
+ dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
3744
+ c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
3745
+ bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
3746
+ aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
3747
+ aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
3748
+ L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
3749
+ cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
3750
+ fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
3751
+ N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
3752
+ Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
3753
+ tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
3754
+ e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
3755
+ 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
3756
+ HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
3757
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
3758
+ D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
3759
+ -----END CERTIFICATE-----
3760
+
3761
+ StartCom Certification Authority G2
3762
+ ===================================
3763
+ -----BEGIN CERTIFICATE-----
3764
+ MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
3765
+ U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
3766
+ RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
3767
+ ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
3768
+ dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
3769
+ o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
3770
+ 4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
3771
+ Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
3772
+ Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
3773
+ O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
3774
+ vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
3775
+ nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
3776
+ FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
3777
+ z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
3778
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
3779
+ KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
3780
+ 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
3781
+ J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
3782
+ JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
3783
+ /+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
3784
+ nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
3785
+ blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
3786
+ l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
3787
+ 7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
3788
+ obp573PYtlNXLfbQ4ddI
3789
+ -----END CERTIFICATE-----
3790
+
3791
+ Buypass Class 2 Root CA
3792
+ =======================
3793
+ -----BEGIN CERTIFICATE-----
3794
+ MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
3795
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
3796
+ DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
3797
+ eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
3798
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
3799
+ g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
3800
+ 9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
3801
+ /+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
3802
+ CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
3803
+ awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
3804
+ zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
3805
+ Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
3806
+ Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
3807
+ M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
3808
+ VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
3809
+ AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
3810
+ A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
3811
+ osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
3812
+ aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
3813
+ DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
3814
+ LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
3815
+ oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
3816
+ wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
3817
+ CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
3818
+ rJgWVqA=
3819
+ -----END CERTIFICATE-----
3820
+
3821
+ Buypass Class 3 Root CA
3822
+ =======================
3823
+ -----BEGIN CERTIFICATE-----
3824
+ MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
3825
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
3826
+ DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
3827
+ eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
3828
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
3829
+ sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
3830
+ 5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
3831
+ 7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
3832
+ ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
3833
+ 2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
3834
+ /afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
3835
+ RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
3836
+ Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
3837
+ j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
3838
+ VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
3839
+ AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
3840
+ cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
3841
+ uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
3842
+ Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
3843
+ ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
3844
+ KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
3845
+ 6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
3846
+ UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
3847
+ eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
3848
+ Cp/HuZc=
3849
+ -----END CERTIFICATE-----
3850
+
3851
+ T-TeleSec GlobalRoot Class 3
3852
+ ============================
3853
+ -----BEGIN CERTIFICATE-----
3854
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
3855
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
3856
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
3857
+ MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
3858
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
3859
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
3860
+ DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
3861
+ 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
3862
+ NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
3863
+ iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
3864
+ 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
3865
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
3866
+ AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
3867
+ fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
3868
+ ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
3869
+ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
3870
+ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
3871
+ -----END CERTIFICATE-----
3872
+
3873
+ EE Certification Centre Root CA
3874
+ ===============================
3875
+ -----BEGIN CERTIFICATE-----
3876
+ MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
3877
+ EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
3878
+ dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
3879
+ MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
3880
+ UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
3881
+ ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
3882
+ DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
3883
+ TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
3884
+ rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
3885
+ 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
3886
+ P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
3887
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
3888
+ MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
3889
+ BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
3890
+ xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
3891
+ lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
3892
+ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
3893
+ 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
3894
+ dcGWxZ0=
3895
+ -----END CERTIFICATE-----
addons/buy-creds/gateways/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/buy-creds/gateways/netbilling.php ADDED
@@ -0,0 +1,698 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_NETbilling class
5
+ * NETbilling Payment Gateway
6
+ *
7
+ * @see http://secure.netbilling.com/public/docs/merchant/public/directmode/directmode3protocol.html
8
+ * @since 0.1
9
+ * @version 1.0
10
+ */
11
+ if ( !class_exists( 'myCRED_NETbilling' ) ) {
12
+ class myCRED_NETbilling extends myCRED_Payment_Gateway {
13
+
14
+ /**
15
+ * Construct
16
+ */
17
+ function __construct( $gateway_prefs ) {
18
+ global $netbilling_errors;
19
+
20
+ parent::__construct( array(
21
+ 'id' => 'netbilling',
22
+ 'defaults' => array(
23
+ 'sandbox' => 0,
24
+ 'account' => '',
25
+ 'site_tag' => '',
26
+ 'item_name' => __( 'Purchase of myCRED %plural%', 'mycred' ),
27
+ 'exchange' => '',
28
+ 'dynip_sec_code' => '',
29
+ 'num_attempts' => 3,
30
+ 'disable_avs' => 0,
31
+ 'disable_cvv2' => 0,
32
+ 'disable_fraud_checks' => 0,
33
+ 'disable_negative_db' => 0,
34
+ 'disable_email_receipts' => 0,
35
+ 'disable_expiration_check' => 0
36
+ )
37
+ ), $gateway_prefs );
38
+ }
39
+
40
+ /**
41
+ * Process
42
+ * @since 0.1
43
+ * @version 1.0
44
+ */
45
+ public function process() {
46
+ // Nonce check
47
+ if ( !isset( $_POST['token'] ) || !wp_verify_nonce( $_POST['token'], 'netbilling-purchase' ) ) {
48
+ unset( $_POST );
49
+ return;
50
+ }
51
+
52
+ // Attempt Limit
53
+ if ( $_POST['num_attempts'] > $this->prefs['num_attempts'] ) {
54
+ $this->status = 'fail';
55
+ $this->response = __( 'You have tried too many times. Please contact support.', 'mycred' );
56
+ return;
57
+ }
58
+
59
+ // Gateway is not installed
60
+ elseif ( empty( $this->prefs['account'] ) ) {
61
+ $this->status = 'fail';
62
+ $this->response = __( 'This payment gateway has not yet been setup! Exiting.', 'mycred' );
63
+ return;
64
+ }
65
+
66
+ // All good
67
+ else {
68
+ $attempts = $_REQUEST['num_attempts'];
69
+ }
70
+
71
+ $sales_data = array();
72
+ $error = array();
73
+
74
+ // Begin form validation
75
+ $_POST = array_map( 'strip_tags', $_POST );
76
+
77
+ // First Name check
78
+ if ( isset( $_POST['bill_name1'] ) && !empty( $_POST['bill_name1'] ) )
79
+ $sales_data['bill_name1'] = $_POST['bill_name1'];
80
+ else
81
+ $error['bill_name1'] = __( 'First name can not be empty', 'mycred' );
82
+
83
+ // Last Name check
84
+ if ( isset( $_POST['bill_name2'] ) && !empty( $_POST['bill_name2'] ) )
85
+ $sales_data['bill_name2'] = $_POST['bill_name2'];
86
+ else
87
+ $error['bill_name2'] = __( 'Last name can not be empty', 'mycred' );
88
+
89
+ // Street Check
90
+ if ( isset( $_POST['bill_street'] ) && !empty( $_POST['bill_street'] ) )
91
+ $sales_data['bill_street'] = $_POST['bill_street'];
92
+ else
93
+ $error['bill_street'] = __( 'Street can not be empty', 'mycred' );
94
+
95
+ // City check
96
+ if ( isset( $_POST['bill_city'] ) && !empty( $_POST['bill_city'] ) )
97
+ $sales_data['bill_city'] = $_POST['bill_city'];
98
+ else
99
+ $error['bill_city'] = __( 'City can not be empty', 'mycred' );
100
+
101
+ // Country check
102
+ if ( isset( $_POST['bill_country'] ) && !empty( $_POST['bill_country'] ) )
103
+ $sales_data['bill_country'] = $_POST['bill_country'];
104
+ else
105
+ $error['bill_country'] = __( 'Country can not be empty', 'mycred' );
106
+
107
+ // State Check
108
+ if ( isset( $_POST['bill_state_us'] ) && !empty( $_POST['bill_state_us'] ) && ( isset( $_POST['bill_country'] ) && $_POST['bill_country'] == 'US' ) )
109
+ $sales_data['bill_state'] = $_POST['bill_state_us'];
110
+ elseif ( isset( $_POST['bill_state_non'] ) && !empty( $_POST['bill_state_non'] ) && ( isset( $_POST['bill_country'] ) && $_POST['bill_country'] != 'US' ) )
111
+ $sales_data['bill_state'] = $_POST['bill_state_non'];
112
+ else
113
+ $error['bill_state'] = __( 'State can not be empty', 'mycred' );
114
+
115
+ // Zip / Post code check
116
+ if ( isset( $_POST['bill_zip'] ) && ( $_POST['bill_zip'] == 'US' && strlen( $_POST['bill_zip'] ) == 5 ) )
117
+ $sales_data['bill_zip'] = $_POST['bill_zip'];
118
+ elseif ( isset( $_POST['bill_zip'] ) && $_POST['bill_zip'] != 'US' )
119
+ $sales_data['bill_zip'] = $_POST['bill_zip'];
120
+ else
121
+ $error['bill_zip'] = __( 'Zip / Post Code can not be empty', 'mycred' );
122
+
123
+ // Email check
124
+ if ( isset( $_POST['cust_email'] ) && is_email( $_POST['cust_email'] ) )
125
+ $sales_data['cust_email'] = $_POST['cust_email'];
126
+ else
127
+ $error['cust_email'] = __( 'Email can not be empty', 'mycred' );
128
+
129
+ // Phone check
130
+ if ( isset( $_POST['cust_phone'] ) && strlen( $_POST['cust_phone'] ) < 10 )
131
+ $sales_data['cust_phone'] = $_POST['cust_phone'];
132
+
133
+ // Payment method check
134
+ if ( isset( $_POST['payment_method'] ) ) {
135
+ $sales_data['payment_method'] = $_POST['payment_method'];
136
+
137
+ // Pay using credit card
138
+ if ( $sales_data['payment_method'] == 'card' ) {
139
+ // Card Number check
140
+ if ( isset( $_POST['card_number'] ) && !empty( $_POST['card_number'] ) )
141
+ $sales_data['card_number'] = $_POST['card_number'];
142
+ else
143
+ $error['card_number'] = __( 'Please enter your credit card number', 'mycred' );
144
+
145
+ // Exiration Month check
146
+ if ( isset( $_POST['card_expire_month'] ) && !empty( $_POST['card_expire_month'] ) )
147
+ $sales_data['card_expire_month'] = $_POST['card_expire_month'];
148
+ else
149
+ $error['card_expire_month'] = __( 'Card Expiration Month must be selected', 'mycred' );
150
+
151
+ // Expiration Year check
152
+ if ( isset( $_POST['card_expire_year'] ) && !empty( $_POST['card_expire_year'] ) )
153
+ $sales_data['card_expire_year'] = $_POST['card_expire_year'];
154
+ else
155
+ $error['card_expire_year'] = __( 'Card Expiration Year must be set', 'mycred' );
156
+
157
+ // CCV2 Check
158
+ if ( isset( $_POST['card_cvv2'] ) && !empty( $_POST['card_cvv2'] ) )
159
+ $sales_data['card_cvv2'] = $_POST['card_cvv2'];
160
+ else
161
+ $error['card_cvv2'] = __( 'Please enter the CVV2 code from the back of your card', 'mycred' );
162
+ }
163
+
164
+ // Pay using bank transfer
165
+ else {
166
+ // Routing check
167
+ if ( isset( $_POST['ach_routing'] ) && !empty( $_POST['ach_routing'] ) )
168
+ $sales_data['ach_routing'] = $_POST['ach_routing'];
169
+ else
170
+ $error['ach_routing'] = __( 'Account Routing number missing', 'mycred' );
171
+
172
+ // Account check
173
+ if ( isset( $_POST['ach_account'] ) && !empty( $_POST['ach_account'] ) )
174
+ $sales_data['ach_account'] = $_POST['ach_account'];
175
+ else
176
+ $error['ach_account'] = __( 'Account Number missing', 'mycred' );
177
+ }
178
+ }
179
+
180
+ // Validate credit card
181
+ if ( $sales_data['payment_method'] == 'card' && isset( $sales_data['card_number'] ) && isset( $sales_data['card_expire_month'] ) && isset( $sales_data['card_expire_year'] ) ) {
182
+ // Check length
183
+ if ( strlen( $sales_data['card_number'] ) < 13 || strlen( $sales_data['card_number'] ) > 19 || !is_numeric( $sales_data['card_number'] ) )
184
+ $error['card_number'] = __( 'Incorrect Credit Card number', 'mycred' );
185
+
186
+ // Check expiration date
187
+ $exp_date = mktime( 0, 0, 0, $sales_data['card_expire_month'], 30, $sales_data['card_expire_year'] );
188
+ $today_date = date_i18n( 'U' );
189
+ if ( $exp_date < $today_date )
190
+ $error['card_expire_month'] = __( 'The credit card entered is past its expiration date.', 'mycred' );
191
+ }
192
+
193
+ // Validate CCV2
194
+ if ( isset( $sales_data['card_cvv2'] ) ) {
195
+ if ( strlen( $sales_data['card_cvv2'] ) < 3 || strlen( $sales_data['card_cvv2'] ) > 4 || !is_numeric( $sales_data['card_cvv2'] ) )
196
+ $error['card_cvv2'] = __( 'The CVV2 number entered is not valid.', 'mycred' );
197
+ }
198
+
199
+ // Validate check
200
+ if ( $sales_data['payment_method'] == 'check' && isset( $sales_data['ach_routing'] ) && isset( $sales_data['ach_account'] ) ) {
201
+ if ( strlen( $sales_data['ach_routing'] ) != 9 || !is_numeric( $sales_data['ach_routing'] ) )
202
+ $error['ach_routing'] = __( 'The bank routing number entered is not valid.', 'mycred' );
203
+
204
+ if ( strlen( $sales_data['ach_account'] ) <= 5 || !is_numeric( $sales_data['ach_account'] ) )
205
+ $error['ach_account'] = __( 'The bank account number entered is not valid.', 'mycred' );
206
+ }
207
+
208
+ // Errors
209
+ if ( !empty( $error ) ) {
210
+ $this->errors = $error;
211
+ $this->status = 'error';
212
+ $this->request = $_POST;
213
+ return;
214
+ }
215
+ // end of validation
216
+
217
+ // Construct payment request
218
+ $request = array();
219
+ $request['account_id'] = $this->prefs['account'];
220
+ $request['site_tag'] = $this->prefs['site_tag'];
221
+ $request['dynip_sec_code'] = $this->prefs['dynip_sec_code'];
222
+ $request['tran_type'] = "S";
223
+
224
+ $request['amount'] = $this->core->number( $_POST['cost'] );
225
+ $request['description'] = $this->core->template_tags_general( $this->prefs['item_name'] );
226
+
227
+ // Payment Form - Check
228
+ if ( $sales_data['payment_method'] == 'check' ) {
229
+ $request['pay_type'] = "K";
230
+ $request['account_number'] = $sales_data['ach_routing'] . ':' . $sales_data['ach_account'];
231
+ unset( $sales_data['ach_routing'] );
232
+ unset( $sales_data['ach_account'] );
233
+ }
234
+
235
+ // Payment Form - Credit Card
236
+ elseif ( $sales_data['payment_method'] == 'card' ) {
237
+ $request['pay_type'] = "C";
238
+ }
239
+ unset( $sales_data['payment_method'] );
240
+
241
+ // Merge what remains of $sales_data
242
+ $request = array_merge_recursive( $request, $sales_data );
243
+
244
+ // IP & Browser
245
+ $request['cust_ip'] = $_SERVER["REMOTE_ADDR"];
246
+ $request['cust_browser'] = $_SERVER["HTTP_USER_AGENT"];
247
+
248
+ // Advanced
249
+ $request['disable_avs'] = $this->prefs['disable_avs'];
250
+ $request['disable_cvv2'] = $this->prefs['disable_cvv2'];
251
+ $request['disable_fraud_checks'] = $this->prefs['disable_fraud_checks'];
252
+ $request['disable_negative_db'] = $this->prefs['disable_negative_db'];
253
+ $request['disable_email_receipts'] = $this->prefs['disable_email_receipts'];
254
+ $request['disable_expiration_check'] = $this->prefs['disable_expiration_check'];
255
+
256
+ $this->request = $request;
257
+ unset( $sales_data );
258
+
259
+ // Sandbox
260
+ if ( $this->prefs['sandbox'] ) {
261
+ $this->status = 'ready';
262
+ return;
263
+ }
264
+
265
+ // Builds the request string, all values are urlencoded
266
+ $post_str = '';
267
+ foreach ( $this->request as $k => $v ) {
268
+ if ( !empty( $post_str ) )
269
+ $post_str .= '&';
270
+ $post_str .= $k . '=' . urlencode( $v );
271
+ }
272
+
273
+ $ch = curl_init();
274
+ curl_setopt( $ch, CURLOPT_URL, $gateway_url );
275
+ curl_setopt( $ch, CURLOPT_POST, 1 );
276
+ curl_setopt( $ch, CURLOPT_HEADER, 1 );
277
+ curl_setopt( $ch, CURLOPT_TIMEOUT, 180 );
278
+ curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_str );
279
+ curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
280
+ curl_setopt( $ch, CURLOPT_VERBOSE, 1 );
281
+ curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
282
+ curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
283
+ curl_setopt( $ch, CURLOPT_ENCODING, "x-www-form-urlencoded" );
284
+
285
+ $res = curl_exec( $ch );
286
+ $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
287
+ curl_close( $ch );
288
+
289
+ // parses received data into variables
290
+ $resp = explode( "\n\r\n", $res );
291
+ $header = explode( "\n", $resp[0] );
292
+ parse_str( $resp[1], $result );
293
+
294
+ // Request Good - No exception
295
+ // http://secure.netbilling.com/public/docs/merchant/public/directmode/directmode3protocol.html#er
296
+ if ( $http_code == "200" ) {
297
+ // Response
298
+ $status_code = $result['status_code'];
299
+ $trans_id = $result['trans_id'];
300
+ $auth_code = $result['auth_code'];
301
+ $auth_date = $result['auth_date'];
302
+ $auth_msg = $result['auth_msg'];
303
+ $avs_code = $result['avs_code'];
304
+ $cvv2_code = $result['cvv2_code'];
305
+ $ticket_code = $result['ticket_code'];
306
+ $reason_code2 = $result['reason_code2'];
307
+
308
+ // Error codes
309
+ if ( $status_code == '0' || $status_code == 'F' ) {
310
+ if ( $auth_msg == 'BAD ADDRESS' ) {
311
+ $this->status = 'retry';
312
+ $this->response = __( 'Invalid Address', 'mycred' );
313
+ } elseif ( $auth_msg == 'CVV2 MISMATCH') {
314
+ $this->status = 'retry';
315
+ $this->response = __( 'Invalid CVV2', 'mycred' );
316
+ } elseif ( $auth_msg == 'A/DECLINED' ) {
317
+ $this->status = 'retry';
318
+ $this->response = __( 'You have tried too many times. Please contact support.', 'mycred' );
319
+ } elseif ( $auth_msg == 'B/DECLINED' ) {
320
+ $this->status = 'retry';
321
+ $this->response = __( 'Please contact support.', 'mycred' );
322
+ } elseif ( $auth_msg == 'C/DECLINED' ) {
323
+ $this->status = 'retry';
324
+ $this->response = __( 'Please contact support.', 'mycred' );
325
+ } elseif ( $auth_msg == 'E/DECLINED' ) {
326
+ $this->status = 'retry';
327
+ $this->response = __( 'Your email address is invalid.', 'mycred' );
328
+ } elseif ( $auth_msg == 'J/DECLINED' ) {
329
+ $this->status = 'retry';
330
+ $this->response = __( 'Your information is invalid. Please correct', 'mycred' );
331
+ } elseif ( $auth_msg == 'L/DECLINED' ) {
332
+ $this->status = 'retry';
333
+ $this->response = __( 'Invalid Address', 'mycred' );
334
+ } else {
335
+ $this->status = 'retry';
336
+ $this->response = __( 'Your card was declined. Please try again.', 'mycred' );
337
+ }
338
+ } elseif ( $status_code == 'D' ) {
339
+ $this->status = 'fail';
340
+ $this->response = __( 'Duplicate transaction. Please contact support', 'mycred' );
341
+ } else {
342
+ $this->status = 'approved';
343
+ $this->response = __( 'Your transaction was approved', 'mycred' );
344
+ }
345
+ }
346
+
347
+ // Request Bad - Exception (respons is an error)
348
+ else {
349
+ $this->status = 'retry';
350
+ $this->response = __( ' error: ', 'mycred' ) . substr( $header[0], 13 );
351
+ }
352
+
353
+ // Transaction Approved, add creds
354
+ if ( $this->status == 'approved' ) {
355
+ // Make sure this transaction is unique
356
+ if ( $this->transaction_id_is_unique( $trans_id ) ) {
357
+ $this->status = 'fail';
358
+ $this->response = __( 'Duplicate transaction. Please contact support', 'mycred' );
359
+ return;
360
+ }
361
+
362
+ // Prep
363
+ $_to = $this->get_to();
364
+ $_from = $this->current_user_id;
365
+
366
+ // Add creds
367
+ $this->core->add_creds(
368
+ 'buy_creds_with_netbilling',
369
+ $_to,
370
+ $amount,
371
+ $this->get_entry( $_to, $_from ),
372
+ $_from,
373
+ $trans_id
374
+ );
375
+ }
376
+
377
+ // Fail
378
+ elseif ( $this->status == 'retry' ) {
379
+ // Adjust attempt counter
380
+ if ( $_POST['num_attempts'] < $this->prefs['num_attempts'] ) {
381
+ $_POST['num_attempts']++;
382
+ }
383
+ }
384
+ }
385
+
386
+ /**
387
+ * Buy Handler
388
+ * @since 0.1
389
+ * @version 1.0
390
+ */
391
+ public function buy() {
392
+ // Attempt Counter
393
+ if ( isset( $_POST['num_attempts'] ) )
394
+ $attempts = $_POST['num_attempts'];
395
+ else
396
+ $attempts = 0;
397
+
398
+ // Payment Method
399
+ $payment_method = 'card';
400
+ if ( isset( $_REQUEST['payment_method'] ) && $_REQUEST['payment_method'] == 'check' )
401
+ $payment_method = 'check';
402
+
403
+ $to = $this->get_to();
404
+ $from = $this->current_user_id;
405
+
406
+ // Thank you page
407
+ $thankyou_url = $this->get_thankyou();
408
+
409
+ // Cancel page
410
+ $cancel_url = $this->get_cancelled();
411
+
412
+ // Amount & Cost
413
+ $amount = $_REQUEST['amount'];
414
+ $exchange = $this->prefs['exchange'];
415
+ $cost = $amount*$exchange;
416
+
417
+ // Set
418
+ $bill_name1 = $bill_name2 = $bill_street = $bill_city = $bill_state = $bill_zip = $bill_country = $cust_phone = $card_number = $card_expire_month = $card_expire_year = $card_cvv2 = $ach_routing = $ach_account = '';
419
+
420
+ $user = get_userdata( (int) $this->current_user_id );
421
+
422
+ // Header
423
+ $this->purchase_header( __( 'NETbilling', 'mycred' ) ); ?>
424
+
425
+ <p><img src="<?php echo plugins_url( 'images/netbilling.png', myCRED_PURCHASE ); ?>" alt="NETbilling Logo" /></p>
426
+ <?php
427
+ // Debug
428
+ if ( $this->prefs['sandbox'] && $this->core->can_edit_plugin( $from ) ) {
429
+ echo '
430
+ <h1>' . __( 'Debug', 'mycred' ) . '</h1>
431
+ <pre>$attempts: ' . print_r( $attempts, true ) . '</pre>
432
+ <pre>$this->status: ' . print_r( $this->status, true ) . '</pre>
433
+ <pre>$this->request: ' . print_r( $this->request, true ) . '</pre>
434
+ <pre>$this->response: ' . print_r( $this->response, true ) . '</pre>';
435
+ }
436
+ // Errors
437
+ if ( !empty( $this->errors ) ) {
438
+ echo '
439
+ <h1>' . __( 'Error', 'mycred' ) . '</h1>
440
+ <p>' . __( 'The following error/s were found: ', 'mycred' ) . $this->response . '</p>
441
+ <ul>';
442
+ foreach ( $this->errors as $form_field => $error_message ) {
443
+ echo '<li class="' . $form_field . '">' . $error_message . '</li>';
444
+ }
445
+
446
+ echo '
447
+ </ul>
448
+ <p class="try-again">' . __( 'Please update and try again.', 'mycred' ) . '</p>';
449
+ }
450
+
451
+ // Approved (do not load form)
452
+ elseif ( $this->status == 'approved' ) {
453
+ echo '
454
+ <h1>' . __( 'Transaction Approved', 'mycred' ) . '</h1>
455
+ <p>' . __( 'Your have successfully purchased ', 'mycred' ) . $this->core->number( $amount ) . ' ' . $this->core->plural() . '.</p>
456
+ <p class="action"><a href="' . $thankyou_url . '">' . __( 'Click here to continue', 'mycred' ) . '</a></p>';
457
+ $this->purchase_footer();
458
+ exit();
459
+ }
460
+
461
+ // Fail (do not load form)
462
+ elseif ( $this->status == 'fail' ) {
463
+ echo '
464
+ <h1>' . __( 'Transaction Declined', 'mycred' ) . '</h1>
465
+ <p>' . __( 'I am sorry but your transaction could not be completed due to the following ', 'mycred' ) . $this->response . '</p>
466
+ <p class="action"><a href="' . $cancel_url . '">' . __( 'Click here to continue', 'mycred' ) . '</a></p>';
467
+ $this->purchase_footer();
468
+ exit();
469
+ }
470
+
471
+ // Retry (reload form)
472
+ elseif ( $this->status == 'retry' ) {
473
+ echo '
474
+ <h1>' . __( 'Transaction Error', 'mycred' ) . '</h1>
475
+ <p>' . __( 'NETbilling returned the following error: ', 'mycred' ) . $this->response . '</p>
476
+ <p class="try-again">' . __( 'Please try again.', 'mycred' ) . '</p>';
477
+ } ?>
478
+
479
+ <form id="payment_form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
480
+ <h2><?php echo __( 'Purchase of', 'mycred' ) . ' ' . $this->core->number( $amount ) . ' ' . $this->core->plural() . ' ' . __( 'for', 'mycred' ) . ' $' . $this->core->number( $cost ); ?></h2>
481
+ <p class="info"><?php _e( 'Fields marked * are required!', 'mycred' ); ?></p>
482
+ <input type="hidden" name="mycred_call" value="netbilling" />
483
+ <input type="hidden" name="mycred_buy" value="netbilling" />
484
+ <input type="hidden" name="gift_to" value="<?php echo $to; ?>" />
485
+ <input type="hidden" name="note" value="<?php echo $message; ?>" />
486
+ <input type="hidden" name="amount" value="<?php echo $amount; ?>" />
487
+ <input type="hidden" name="cost" value="<?php echo $cost; ?>" />
488
+ <input type="hidden" name="payment_method" value="<?php echo $payment_method; ?>" />
489
+ <input type="hidden" name="token" value="<?php echo wp_create_nonce( 'netbilling-purchase' ); ?>" />
490
+ <input type="hidden" name="num_attempts" value="<?php echo $attempts; ?>" />
491
+ <h3><?php _e( 'Billing Details', 'mycred' ); ?></h3>
492
+ <p class="<?php if ( array_key_exists( 'bill_name1', $this->errors ) ) { echo 'error'; } ?>">
493
+ <label for="bill_name1">First Name *</label>
494
+ <input type="text" id="bill_name1" name="bill_name1" value="<?php if ( isset( $_POST['bill_name1'] ) ) echo $bill_name1 = $_POST['bill_name1']; ?>" maxlength="35" class="long" />
495
+ </p>
496
+ <p class="<?php if ( array_key_exists( 'bill_name2', $this->errors ) ) { echo 'error'; } ?>">
497
+ <label for="bill_name2">Last Name *</label>
498
+ <input type="text" id="bill_name2" name="bill_name2" value="<?php if ( isset( $_POST['bill_name2'] ) ) echo $bill_name2 = $_POST['bill_name2']; ?>" maxlength="35" class="long" />
499
+ </p>
500
+ <p class="<?php if ( array_key_exists( 'bill_street', $this->errors ) ) { echo 'error'; } ?>">
501
+ <label for="bill_street">Street Address *</label>
502
+ <input type="text" id="bill_street" name="bill_street" value="<?php if ( isset( $_POST['bill_street'] ) ) echo $bill_street = $_POST['bill_street']; ?>" maxlength="100" class="long" />
503
+ </p>
504
+ <p class="<?php if ( array_key_exists( 'bill_city', $this->errors ) ) { echo 'error'; } ?>">
505
+ <label for="bill_city">City *</label>
506
+ <input type="text" id="bill_city" name="bill_city" value="<?php if ( isset( $_POST['bill_city'] ) ) echo $bill_city = $_POST['bill_city']; ?>" maxlength="100" class="medium" />
507
+ </p>
508
+ <p class="<?php if ( array_key_exists( 'bill_state', $this->errors ) ) { echo 'error'; } ?>">
509
+ <label for="bill_state_us">State - US Residents *</label>
510
+ <select id="bill_state_us" name="bill_state_us">
511
+ <?php
512
+ // State
513
+ if ( isset( $_POST['bill_state_us'] ) ) $bill_state_us = $_POST['bill_state_us']; else $bill_state_us = '';
514
+ echo '<option value="">' . __( 'Select', 'mycred' );
515
+ $this->list_option_us_states( $bill_state_us ); ?>
516
+
517
+ </select>
518
+ </p>
519
+ <p class="<?php if ( array_key_exists( 'bill_state', $this->errors ) ) { echo 'error'; } ?>">
520
+ <label for="bill_state_non">State - All other *</label>
521
+ <input type="text" id="bill_state_non" name="bill_state_non" value="<?php if ( isset( $_POST['bill_state_non'] ) ) echo $_POST['bill_state_non']; ?>" maxlength="100" class="medium" />
522
+ </p>
523
+ <p class="<?php if ( array_key_exists( 'bill_zip', $this->errors ) ) { echo 'error'; } ?>">
524
+ <label for="bill_zip">Zip/Postal Code *</label>
525
+ <input type="text" id="bill_zip" name="bill_zip" value="<?php if ( isset( $_POST['bill_zip'] ) ) echo $_POST['bill_zip']; ?>" maxlength="12" class="short" />
526
+ </p>
527
+ <p class="<?php if ( array_key_exists( 'bill_country', $this->errors ) ) { echo 'error'; } ?>">
528
+ <label for="bill_country">Country *</label>
529
+ <select id="bill_country" name="bill_country">
530
+ <option value="">Choose Country</option>
531
+ <?php
532
+ // Country
533
+ if ( isset( $_POST['bill_country'] ) ) $bill_country = $_POST['bill_country']; else $bill_country = '';
534
+ $this->list_option_countries( $bill_country ); ?>
535
+
536
+ </select>
537
+ </p>
538
+ <p class="<?php if ( array_key_exists( 'cust_email', $this->errors ) ) { echo 'error'; } ?>">
539
+ <label for="cust_email">Email Address *</label>
540
+ <input type="text" id="cust_email" name="cust_email" value="<?php echo $user->user_email; ?>" maxlength="100" class="long" />
541
+ </p>
542
+ <p class="<?php if ( array_key_exists( 'cust_phone', $this->errors ) ) { echo 'error'; } ?>">
543
+ <label for="cust_phone">Phone Number</label>
544
+ <input type="text" id="cust_phone" name="cust_phone" value="<?php if ( isset( $_POST['cust_phone'] ) ) echo $cust_phone = $_POST['cust_phone']; ?>" maxlength="20" class="medium" />
545
+ </p>
546
+ <?php // Credit Card
547
+ if ( $payment_method == 'card' ) { ?>
548
+
549
+ <h3>Credit Card Information</h3>
550
+ <input type="hidden" name="payment_method" value="card" />
551
+ <p class="<?php if ( array_key_exists( 'card_number', $this->errors ) ) { echo 'error'; } ?>">
552
+ <label for="card_number">Credit Card Number *</label>
553
+ <input type="text" id="card_number" name="card_number" value="<?php if ( isset( $_POST['card_number'] ) ) echo $card_number = $_POST['card_number']; ?>" maxlength="19" class="medium" />
554
+ </p>
555
+ <p class="<?php if ( array_key_exists( 'card_expire_month', $this->errors ) ) { echo 'error'; } ?>">
556
+ <label for="card_expire_month">Expiration Date *</label>
557
+ <select id="card_expire_month" name="card_expire_month">
558
+ <?php
559
+ if ( isset( $_POST['card_expire_month'] ) ) $card_expire_month = $_POST['card_expire_month']; else $card_expire_month = '';
560
+ echo '<option value="">' . __( 'Month', 'mycred' ) . '</option>';
561
+ $this->list_option_months( $card_expire_month ); ?>
562
+
563
+ </select> <select id="card_expire_year" name="card_expire_year">
564
+ <?php
565
+ if ( isset( $_POST['card_expire_year'] ) ) $card_expire_year = $_POST['card_expire_year']; else $card_expire_year = '';
566
+ echo '<option value="">' . __( 'Year', 'mycred' ) . '</option>';
567
+ $this->list_option_card_years( $card_expire_year ); ?>
568
+
569
+ </select>
570
+ </p>
571
+ <p class="<?php if ( array_key_exists( 'card_cvv2', $this->errors ) ) { echo 'error'; } ?>">
572
+ <label for="card_cvv2">CVV2 Number *</label>
573
+ <input type="text" id="card_cvv2" name="card_cvv2" value="<?php if ( isset( $_POST['card_cvv2'] ) ) echo $card_cvv2 = $_POST['card_cvv2']; ?>" maxlength="4" class="short" />
574
+ </p>
575
+ <?php }
576
+
577
+ // Check
578
+ elseif ( $payment_method == 'check' ) { ?>
579
+
580
+ <h3>Check Information</h3>
581
+ <input type="hidden" name="payment_method" value="check" />
582
+ <p class="<?php if ( array_key_exists( 'ach_routing', $this->errors ) ) { echo 'error'; } ?>">
583
+ <label for="ach_routing">Routing Number *</label>
584
+ <input type="text" id="ach_routing" name="ach_routing" value="<?php if ( isset( $_POST['ach_routing'] ) ) echo $ach_routing = $_POST['ach_routing']; ?>" maxlength="9" class="long" />
585
+ </p>
586
+ <p class="<?php if ( array_key_exists( 'ach_account', $this->errors ) ) { echo 'error'; } ?>">
587
+ <label for="ach_account">Account Number *</label>
588
+ <input type="text" id="ach_account" name="ach_account" value="<?php if ( isset( $_POST['ach_account'] ) ) echo $ach_account = $_POST['ach_account']; ?>" maxlength="17" class="long" />
589
+ </p>
590
+ <?php } ?>
591
+
592
+ <p class="submit"><input type="submit" name="process_button" id="process_button" value="Submit" /></p>
593
+ </form>
594
+ <?php
595
+ $this->purchase_footer();
596
+ exit();
597
+ }
598
+
599
+ /**
600
+ * Preferences
601
+ * @since 0.1
602
+ * @version 1.0
603
+ */
604
+ public function preferences( $buy_creds ) {
605
+ $prefs = $this->prefs; ?>
606
+
607
+ <!--<pre><?php print_r( $this ); ?></pre>-->
608
+ <label class="subheader" for="<?php echo $this->field_id( 'sandbox' ); ?>"><?php _e( 'Sandbox Mode', 'mycred' ); ?></label>
609
+ <ol>
610
+ <li>
611
+ <input type="checkbox" name="<?php echo $this->field_name( 'sandbox' ); ?>" id="<?php echo $this->field_id( 'sandbox' ); ?>" value="1"<?php checked( $prefs['sandbox'], 1 ); ?> />
612
+ </li>
613
+ </ol>
614
+ <label class="subheader" for="<?php echo $this->field_id( 'account' ); ?>"><?php _e( 'Account ID', 'mycred' ); ?></label>
615
+ <ol>
616
+ <li>
617
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'account' ); ?>" id="<?php echo $this->field_id( 'account' ); ?>" value="<?php echo $prefs['account']; ?>" class="long" /></div>
618
+ </li>
619
+ </ol>
620
+ <label class="subheader" for="<?php echo $this->field_id( 'site_tag' ); ?>"><?php _e( 'Site Tag', 'mycred' ); ?></label>
621
+ <ol>
622
+ <li>
623
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'site_tag' ); ?>" id="<?php echo $this->field_id( 'site_tag' ); ?>" value="<?php echo $prefs['site_tag']; ?>" class="long" /></div>
624
+ </li>
625
+ </ol>
626
+ <label class="subheader" for="<?php echo $this->field_id( 'dynip_sec_code' ); ?>"><?php _e( 'Dynamic IP Security Code', 'mycred' ); ?></label>
627
+ <ol>
628
+ <li>
629
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'dynip_sec_code' ); ?>" id="<?php echo $this->field_id( 'dynip_sec_code' ); ?>" value="<?php echo $prefs['dynip_sec_code']; ?>" class="long" /></div>
630
+ </li>
631
+ </ol>
632
+ <label class="subheader" for="<?php echo $this->field_id( 'item_name' ); ?>"><?php _e( 'Item Name', 'mycred' ); ?></label>
633
+ <ol>
634
+ <li>
635
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'item_name' ); ?>" id="<?php echo $this->field_id( 'item_name' ); ?>" value="<?php echo $prefs['item_name']; ?>" class="long" /></div>
636
+ </li>
637
+ </ol>
638
+ <label class="subheader" for="<?php echo $this->field_id( 'exchange' ); ?>"><?php echo $this->core->template_tags_general( __( '%plural% Exchange Rate', 'mycred' ) ); ?></label>
639
+ <ol>
640
+ <li>
641
+ <div class="h2"><?php echo $this->core->format_creds( 1 ); ?> = <input type="text" name="<?php echo $this->field_name( 'exchange' ); ?>" id="<?php echo $this->field_id( 'exchange' ); ?>" value="<?php echo $prefs['exchange']; ?>" size="3" /> <span id="mycred-gateway-netbilling-currency">USD</span></div>
642
+ </li>
643
+ </ol>
644
+ <label class="subheader" for="<?php echo $this->field_id( 'num_attempts' ); ?>"><?php _e( 'Allowed Attempts', 'mycred' ); ?></label>
645
+ <ol>
646
+ <li>
647
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'num_attempts' ); ?>" id="<?php echo $this->field_id( 'num_attempts' ); ?>" value="<?php echo $prefs['num_attempts']; ?>" size="3" /></div>
648
+ <p><?php _e( 'Maximum number of attempts allowed for purchases.', 'mycred' ); ?></p>
649
+ </li>
650
+ </ol>
651
+ <label class="subheader"><?php _e( 'Advanced', 'mycred' ); ?></label>
652
+ <ol>
653
+ <li>
654
+ <input type="checkbox" name="<?php echo $this->field_name( 'disable_avs' ); ?>" id="<?php echo $this->field_id( 'disable_avs' ); ?>" value="1"<?php checked( $prefs['disable_avs'], 1 ); ?> />
655
+ <label for="<?php echo $this->field_id( 'disable_avs' ); ?>"><?php _e( 'Disable AVS (Address Verification System) for credit card transactions.', 'mycred' ); ?></label>
656
+ </li>
657
+ <li>
658
+ <input type="checkbox" name="<?php echo $this->field_name( 'disable_cvv2' ); ?>" id="<?php echo $this->field_id( 'disable_cvv2' ); ?>" value="1"<?php checked( $prefs['disable_cvv2'], 1 ); ?> />
659
+ <label for="<?php echo $this->field_id( 'disable_cvv2' ); ?>"><?php _e( 'Disable CVV2 (Card Verification Value 2) for credit card transactions.', 'mycred' ); ?></label>
660
+ </li>
661
+ <li>
662
+ <input type="checkbox" name="<?php echo $this->field_name( 'disable_fraud_checks' ); ?>" id="<?php echo $this->field_id( 'disable_fraud_checks' ); ?>" value="1"<?php checked( $prefs['disable_fraud_checks'], 1 ); ?> />
663
+ <label for="<?php echo $this->field_id( 'disable_fraud_checks' ); ?>"><?php _e( 'Disable all fraud protection other than AVS/CVV2. (This implies disable_negative_db)', 'mycred' ); ?></label>
664
+ </li>
665
+ <li>
666
+ <input type="checkbox" name="<?php echo $this->field_name( 'disable_negative_db' ); ?>" id="<?php echo $this->field_id( 'disable_negative_db' ); ?>" value="1"<?php checked( $prefs['disable_negative_db'], 1 ); ?> />
667
+ <label for="<?php echo $this->field_id( 'disable_negative_db' ); ?>"><?php _e( 'Disable only the negative database component of the fraud protection system.', 'mycred' ); ?></label>
668
+ </li>
669
+ <li>
670
+ <input type="checkbox" name="<?php echo $this->field_name( 'disable_email_receipts' ); ?>" id="<?php echo $this->field_id( 'disable_email_receipts' ); ?>" value="1"<?php checked( $prefs['disable_email_receipts'], 1 ); ?> />
671
+ <label for="<?php echo $this->field_id( 'disable_email_receipts' ); ?>"><?php _e( 'Disable automatic sending of both merchant and customer email receipts.', 'mycred' ); ?></label>
672
+ </li>
673
+ <li>
674
+ <input type="checkbox" name="<?php echo $this->field_name( 'disable_expiration_check' ); ?>" id="<?php echo $this->field_id( 'disable_expiration_check' ); ?>" value="1"<?php checked( $prefs['disable_expiration_check'], 1 ); ?> />
675
+ <label for="<?php echo $this->field_id( 'disable_expiration_check' ); ?>"><?php _e( 'Disable immediate rejection of expired cards.', 'mycred' ); ?></label>
676
+ </li>
677
+ </ol>
678
+ <?php
679
+ }
680
+
681
+ /**
682
+ * Sanatize Prefs
683
+ * @since 0.1
684
+ * @version 1.0
685
+ */
686
+ public function sanitise_preferences( $data ) {
687
+ $data['sandbox'] = ( isset( $data['sandbox'] ) ) ? 1 : 0;
688
+ $data['disable_avs'] = ( isset( $data['disable_avs'] ) ) ? 1 : 0;
689
+ $data['disable_cvv2'] = ( isset( $data['disable_cvv2'] ) ) ? 1 : 0;
690
+ $data['disable_fraud_checks'] = ( isset( $data['disable_fraud_checks'] ) ) ? 1 : 0;
691
+ $data['disable_negative_db'] = ( isset( $data['disable_negative_db'] ) ) ? 1 : 0;
692
+ $data['disable_email_receipts'] = ( isset( $data['disable_email_receipts'] ) ) ? 1 : 0;
693
+ $data['disable_expiration_check'] = ( isset( $data['disable_expiration_check'] ) ) ? 1 : 0;
694
+ return $data;
695
+ }
696
+ }
697
+ }
698
+ ?>
addons/buy-creds/gateways/paypal-standard.php ADDED
@@ -0,0 +1,376 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_PayPal class
5
+ * PayPal Payments Standard - Payment Gateway
6
+ *
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_PayPal_Standard' ) ) {
11
+ class myCRED_PayPal_Standard extends myCRED_Payment_Gateway {
12
+
13
+ /**
14
+ * Construct
15
+ */
16
+ function __construct( $gateway_prefs ) {
17
+ parent::__construct( array(
18
+ 'id' => 'paypal-standard',
19
+ 'defaults' => array(
20
+ 'sandbox' => 0,
21
+ 'currency' => '',
22
+ 'account' => '',
23
+ 'item_name' => __( 'Purchase of myCRED %plural%', 'mycred' ),
24
+ 'exchange' => 1
25
+ ),
26
+ 'allowed' => array( 'mc_gross', 'protection_eligibility', 'payer_id', 'tax', 'payment_date', 'payment_status', 'charset', 'first_name', 'mc_fee', 'notify_version', 'custom', 'payer_status', 'business', 'quantity', 'verify_sign', 'payer_email', 'txn_id', 'payment_type', 'last_name', 'receiver_email', 'payment_fee', 'receiver_id', 'txn_type', 'item_name', 'mc_currency', 'item_number', 'residence_country', 'test_ipn', 'handling_amount', 'transaction_subject', 'payment_gross', 'shipping', 'ipn_track_id' )
27
+ ), $gateway_prefs );
28
+ }
29
+
30
+ /**
31
+ * Process Handler
32
+ * @since 0.1
33
+ * @version 1.0
34
+ */
35
+ public function process() {
36
+ // Prep
37
+ $id = $this->id;
38
+ $error = false;
39
+ $log_entry = array();
40
+
41
+ // PayPal Host
42
+ if ( $this->prefs['sandbox'] )
43
+ $host = 'www.sandbox.paypal.com';
44
+ else
45
+ $host = 'www.paypal.com';
46
+
47
+ // Filter allowed POST keys
48
+ $data = $this->POST_to_data();
49
+
50
+ // Prep Respons
51
+ $request = 'cmd=_notify-validate';
52
+ $get_magic_quotes_exists = false;
53
+ if ( function_exists( 'get_magic_quotes_gpc' ) )
54
+ $get_magic_quotes_exists = true;
55
+
56
+ foreach ( $data as $key => $value ) {
57
+ if ( $get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1 )
58
+ $value = urlencode( stripslashes( $value ) );
59
+ else
60
+ $value = urlencode( $value );
61
+
62
+ $request .= "&$key=$value";
63
+ }
64
+
65
+ // Call PayPal
66
+ $curl_attempts = apply_filters( 'mycred_paypal_standard_max_attempts', 3 );
67
+ $attempt = 1;
68
+ // We will make a x number of curl attempts before finishing with a fsock.
69
+ // Success ends loop.
70
+ do {
71
+
72
+ $call = curl_init( "https://$host/cgi-bin/webscr" );
73
+ curl_setopt( $call, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
74
+ curl_setopt( $call, CURLOPT_POST, 1 );
75
+ curl_setopt( $call, CURLOPT_RETURNTRANSFER, 1 );
76
+ curl_setopt( $call, CURLOPT_POSTFIELDS, $request );
77
+ curl_setopt( $call, CURLOPT_SSL_VERIFYPEER, 1 );
78
+ curl_setopt( $call, CURLOPT_CAINFO, myCRED_PURCHASE_DIR . '/cacert.pem' );
79
+ curl_setopt( $call, CURLOPT_SSL_VERIFYHOST, 1 );
80
+ curl_setopt( $call, CURLOPT_FRESH_CONNECT, 1 );
81
+ curl_setopt( $call, CURLOPT_FORBID_REUSE, 1 );
82
+ curl_setopt( $call, CURLOPT_HTTPHEADER, array( 'Connection: Close' ) );
83
+ $result = curl_exec( $call );
84
+
85
+ // End on success
86
+ if ( $result !== false ) {
87
+ curl_close( $call );
88
+ break;
89
+ }
90
+
91
+ $log_entry[] = 'curl attempt: ' . $attempt . ' failed. Error: [' . curl_errno( $call ) . '][' . curl_error( $call ) . ']';
92
+
93
+ curl_close( $call );
94
+
95
+ // Final try
96
+ if ( $attempt == $curl_attempts ) {
97
+ $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
98
+ $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
99
+ $header .= "Content-Length: " . strlen( $request ) . "\r\n\r\n";
100
+ $fp = fsockopen( 'ssl://' . $host, 443, $errno, $errstr, 30 );
101
+ if ( !$fp ) {
102
+ $log_entry[] = 'fsockopen try failed as well [' . $errno . '][' . $errstr . ']!';
103
+ }
104
+ else {
105
+ fputs( $fp, $header . $request );
106
+ while ( !feof( $fp ) ) {
107
+ $result = fgets( $fp, 1024 );
108
+ }
109
+ fclose( $fp );
110
+ }
111
+ }
112
+ $attempt++;
113
+
114
+ } while ( $attempt <= $curl_attempts );
115
+
116
+ $sales_data = $this->decode_sales_data( $data['custom'] );
117
+ $s_data = explode( '|', $sales_data );
118
+ // to|from|amount|cost|currency|token|extra
119
+ list ( $_to, $_from, $amount, $cost, $_currency, $token, $other ) = $s_data;
120
+
121
+ // Request is verified
122
+ if ( strcmp( $result, "VERIFIED" ) == 0 ) {
123
+
124
+ // Verify token
125
+ if ( !$this->verify_token( $_from, trim( $token ), 'mycred-buy-paypal-standard' ) ) {
126
+ $log_entry[] = 'Could not verify token: [' . $token . ']';
127
+ $error = true;
128
+ }
129
+
130
+ // Make sure Purchase is unique
131
+ if ( !$this->transaction_id_is_unique( $data['txn_id'] ) ) {
132
+ $log_entry[] = 'Transaction ID previously used: [' . $data['txn_id'] . ']';
133
+ $error = true;
134
+ }
135
+
136
+ // Make sure accounts match
137
+ if ( $data['receiver_email'] != trim( $this->prefs['account'] ) ) {
138
+ $log_entry[] = 'Recipient Email mismatch: [' . $data['receiver_email'] . ']';
139
+ $error = true;
140
+ }
141
+
142
+ // Verify Currency
143
+ if ( $data['mc_currency'] != $this->prefs['currency'] || $data['mc_currency'] != $_currency ) {
144
+ $log_entry[] = 'Currency mismatch: [' . $data['mc_currency'] . '] [' . $_currency . ']';
145
+ $error = true;
146
+ }
147
+
148
+ // Verify Cost
149
+ $amount = $this->core->number( $amount );
150
+ $amount = abs( $amount );
151
+ $_cost = $amount*$this->prefs['exchange'];
152
+ if ( $cost != $_cost ) {
153
+ $log_entry[] = 'Amount mismatch: [' . $cost . '] [' . $_cost . ']';
154
+ $error = true;
155
+ }
156
+
157
+ // Handle Payment Status
158
+ if ( $error === false ) {
159
+ // Completed transaction
160
+ if ( $payment_status == 'Completed' ) {
161
+ $entry = $this->get_entry( $_to, $_from );
162
+ if ( $this->prefs['sandbox'] ) $entry = 'TEST ' . $entry;
163
+
164
+ $data = array(
165
+ 'txn_id' => $data['txn_id'],
166
+ 'payer_id' => $data['payer_id'],
167
+ 'name' => $data['first_name'] . ' ' . $data['last_name'],
168
+ 'ipn_track_id' => $data['ipn_track_id'],
169
+ 'sales_data' => $sales_data
170
+ );
171
+
172
+ // Add creds
173
+ $this->core->add_creds(
174
+ 'buy_creds_with_paypal_standard',
175
+ $_to,
176
+ $amount,
177
+ $entry,
178
+ $_from,
179
+ $data
180
+ );
181
+
182
+ $log_entry[] = 'CREDs Added.';
183
+ do_action( "mycred_buy_cred_{$id}_approved", $data );
184
+ }
185
+
186
+ // Pending transaction
187
+ elseif ( $payment_status == 'Pending' ) {
188
+ $log_entry[] = 'Transaction Pending';
189
+ do_action( "mycred_buy_cred_{$id}_pending", $data );
190
+ }
191
+
192
+ // Failed transaction
193
+ else {
194
+ $log_entry[] = 'Transaction Failed';
195
+ do_action( "mycred_buy_cred_{$id}_failed", $data );
196
+ }
197
+ }
198
+
199
+ // Error
200
+ else {
201
+ do_action( "mycred_buy_cred_{$id}_error", $log_entry, $data );
202
+ }
203
+
204
+ }
205
+ else {
206
+ $log_entry[] = 'Transaction could not be verified by PayPal';
207
+ }
208
+
209
+ do_action( "mycred_buy_cred_{$id}_end", $log_entry, $data );
210
+ unset( $data );
211
+
212
+ // Request is invalid
213
+ die();
214
+ }
215
+
216
+ /**
217
+ * Results Handler
218
+ * @since 0.1
219
+ * @version 1.0
220
+ */
221
+ public function returning() {
222
+ if ( isset( $_GET['tx'] ) && isset( $_GET['st'] ) && $_GET['st'] == 'Completed' ) {
223
+ // Thank you page
224
+ $thankyou_url = $this->get_thankyou();
225
+
226
+ $this->purchase_header( __( 'Success', 'mycred' ), $thankyou_url );
227
+ echo '<h1>' . __( 'Thank you for your purchase', 'mycred' ) . '</h1>';
228
+ $this->purchase_footer();
229
+ exit();
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Buy Handler
235
+ * @since 0.1
236
+ * @version 1.0
237
+ */
238
+ public function buy() {
239
+ if ( !isset( $this->prefs['account'] ) || empty( $this->prefs['account'] ) )
240
+ wp_die( __( 'Please setup this gateway before attempting to make a purchaase!', 'mycred' ) );
241
+
242
+ $amount = $_REQUEST['amount'];
243
+ $home = get_bloginfo( 'url' );
244
+ $token = $this->create_token();
245
+ $logo_url = 'https://www.paypalobjects.com/webstatic/mktg/logo/bdg_payments_by_pp_2line.png';
246
+
247
+ // Location
248
+ if ( $this->prefs['sandbox'] )
249
+ $location = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
250
+ else
251
+ $location = 'https://www.paypal.com/cgi-bin/webscr';
252
+
253
+ // Finance
254
+ $currency = $this->prefs['currency'];
255
+ $exchange = $this->prefs['exchange'];
256
+
257
+ $amount = $this->core->number( $amount );
258
+ $amount = abs( $amount );
259
+
260
+ $cost = $amount*$exchange;
261
+ $cost = $this->core->number( $cost );
262
+
263
+ // Thank you page
264
+ $thankyou_url = $this->get_thankyou();
265
+
266
+ // Cancel page
267
+ $cancel_url = $this->get_cancelled();
268
+
269
+ // Return to a url
270
+ if ( isset( $_REQUEST['return_to'] ) ) {
271
+ $thankyou_url = $_REQUEST['return_to'];
272
+ $cancel_url = $_REQUEST['return_to'];
273
+ }
274
+
275
+ $to = $this->get_to();
276
+ $from = $this->current_user_id;
277
+
278
+ // Let others play
279
+ $extra = apply_filters( 'mycred_paypal_standard_extra', '', $amount, $from, $to, $this->prefs, $this->core );
280
+ unset( $_REQUEST );
281
+
282
+ // Hidden form fields
283
+ // to|from|amount|cost|currency|token|extra
284
+ $sales_data = $to . '|' . $from . '|' . $amount . '|' . $cost . '|' . $currency . '|' . $token . '|' . $extra;
285
+ $item_name = str_replace( '%number%', $amount, $this->prefs['item_name'] );
286
+ $hidden_fields = array(
287
+ 'cmd' => '_xclick',
288
+ 'business' => $this->prefs['account'],
289
+ 'item_name' => $this->core->template_tags_general( $item_name ),
290
+ 'quantity' => $amount,
291
+ 'amount' => $this->core->number( $exchange ),
292
+ 'currency_code' => $currency,
293
+ 'no_shipping' => 1,
294
+ 'no_note' => 1,
295
+ 'custom' => $this->encode_sales_data( $sales_data ),
296
+ 'return' => $thankyou_url,
297
+ 'notify_url' => $this->callback_url(),
298
+ 'rm' => 2,
299
+ 'cbt' => __( 'Return to ', 'mycred' ) . get_bloginfo( 'name' ),
300
+ 'cancel_return' => $cancel_url
301
+ );
302
+
303
+ // Generate processing page
304
+ $this->purchase_header( __( 'Processing payment &hellip;', 'mycred' ) );
305
+ $this->form_with_redirect( $hidden_fields, $location, $logo_url, '', 'custom' );
306
+ $this->purchase_footer();
307
+
308
+ // Exit
309
+ unset( $this );
310
+ exit();
311
+ }
312
+
313
+ /**
314
+ * Preferences
315
+ * @since 0.1
316
+ * @version 1.0
317
+ */
318
+ public function preferences( $buy_creds ) {
319
+ $prefs = $this->prefs; ?>
320
+
321
+ <label class="subheader" for="<?php echo $this->field_id( 'sandbox' ); ?>"><?php _e( 'Sandbox Mode', 'mycred' ); ?></label>
322
+ <ol>
323
+ <li>
324
+ <input type="checkbox" name="<?php echo $this->field_name( 'sandbox' ); ?>" id="<?php echo $this->field_id( 'sandbox' ); ?>" value="1"<?php checked( $prefs['sandbox'], 1 ); ?> />
325
+ </li>
326
+ </ol>
327
+ <label class="subheader" for="<?php echo $this->field_id( 'currency' ); ?>"><?php _e( 'Currency', 'mycred' ); ?></label>
328
+ <ol>
329
+ <li>
330
+ <?php $this->currencies_dropdown( 'currency' ); ?>
331
+
332
+ <p><strong><?php _e( 'Important!', 'mycred' ); ?></strong> <?php _e( 'Make sure you select a currency that your PayPal account supports. Otherwise transactions will not be approved until you login to your PayPal account and Accept each transaction!', 'mycred' ); ?></p>
333
+ </li>
334
+ </ol>
335
+ <label class="subheader" for="<?php echo $this->field_id( 'account' ); ?>"><?php _e( 'Account Email', 'mycred' ); ?></label>
336
+ <ol>
337
+ <li>
338
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'account' ); ?>" id="<?php echo $this->field_id( 'account' ); ?>" value="<?php echo $prefs['account']; ?>" class="long" /></div>
339
+ </li>
340
+ </ol>
341
+ <label class="subheader" for="<?php echo $this->field_id( 'item_name' ); ?>"><?php _e( 'Item Name', 'mycred' ); ?></label>
342
+ <ol>
343
+ <li>
344
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'item_name' ); ?>" id="<?php echo $this->field_id( 'item_name' ); ?>" value="<?php echo $prefs['item_name']; ?>" class="long" /></div>
345
+ <span class="description"><?php _e( 'Description of the item being purchased by the user.', 'mycred' ); ?></span>
346
+ </li>
347
+ </ol>
348
+ <label class="subheader" for="<?php echo $this->field_id( 'exchange' ); ?>"><?php echo $this->core->template_tags_general( __( '%plural% Exchange Rate', 'mycred' ) ); ?></label>
349
+ <ol>
350
+ <li>
351
+ <div class="h2"><?php echo $this->core->format_creds( 1 ); ?> = <input type="text" name="<?php echo $this->field_name( 'exchange' ); ?>" id="<?php echo $this->field_id( 'exchange' ); ?>" value="<?php echo $prefs['exchange']; ?>" size="3" /> <span id="mycred-gateway-paypal-currency"><?php echo ( empty( $prefs['currency'] ) ) ? __( 'Your selected currency', 'mycred' ) : $prefs['currency']; ?></span></div>
352
+ </li>
353
+ </ol>
354
+ <label class="subheader"><?php _e( 'IPN Address', 'mycred' ); ?></label>
355
+ <ol>
356
+ <li>
357
+ <code style="padding: 12px;display:block;"><?php echo $this->callback_url(); ?></code>
358
+ <p><?php _e( 'For this gateway to work, you must login to your PayPal account and under "Profile" > "Selling Tools" enable "Instant Payment Notifications". Make sure the "Notification URL" is set to the above address and that you have selected "Receive IPN messages (Enabled)".', 'mycred' ); ?></p>
359
+ </li>
360
+ </ol>
361
+ <?php
362
+ }
363
+
364
+ /**
365
+ * Sanatize Prefs
366
+ * @since 0.1
367
+ * @version 1.0
368
+ */
369
+ public function sanitise_preferences( $data ) {
370
+ $data['sandbox'] = ( !isset( $data['sandbox'] ) ) ? 0 : 1;
371
+ $data['exchange'] = ( empty( $data['exchange'] ) ) ? 1 : $data['exchange'];
372
+ return $data;
373
+ }
374
+ }
375
+ }
376
+ ?>
addons/buy-creds/gateways/skrill.php ADDED
@@ -0,0 +1,382 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Skrill class
5
+ * Skrill (Moneybookers) - Payment Gateway
6
+ *
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_Skrill' ) ) {
11
+ class myCRED_Skrill extends myCRED_Payment_Gateway {
12
+
13
+ /**
14
+ * Construct
15
+ */
16
+ function __construct( $gateway_prefs ) {
17
+ parent::__construct( array(
18
+ 'id' => 'skrill',
19
+ 'defaults' => array(
20
+ 'sandbox' => 0,
21
+ 'currency' => '',
22
+ 'account' => '',
23
+ 'word' => '',
24
+ 'account_title' => '',
25
+ 'account_logo' => '',
26
+ 'confirmation_note' => '',
27
+ 'email_receipt' => 0,
28
+ 'item_name' => __( 'Purchase of myCRED %plural%', 'mycred' ),
29
+ 'exchange' => 1
30
+ ),
31
+ 'allowed' => array( 'pay_to_email', 'pay_from_email', 'merchant_id', 'customer_id', 'transaction_id', 'mb_transaction_id', 'mb_amount', 'mb_currency', 'status', 'failed_reason_code', 'md5sig', 'sha2sig', 'amount', 'currency', 'payment_type', 'merchant_fields', 'sales_data' )
32
+ ), $gateway_prefs );
33
+ }
34
+
35
+ /**
36
+ * Process Handler
37
+ * @since 0.1
38
+ * @version 1.0
39
+ */
40
+ public function process() {
41
+ // Prep
42
+ $id = $this->id;
43
+ $error = false;
44
+ $log_entry = array();
45
+
46
+ // Filter allowed POST keys
47
+ $data = $this->POST_to_data();
48
+
49
+ // Step 1. Compare md5
50
+ if ( !empty( $this->prefs['word'] ) ) {
51
+ $check = $data['merchant_id'] . $data['transaction_id'] . strtoupper( md5( $this->prefs['word'] ) ) . $data['mb_amount'] . $data['mb_currency'] . $data['status'];
52
+ if ( strtoupper( md5( $check ) ) !== $data['md5sig'] ) {
53
+ $log_entry[] = 'MD5 mismatch: [' . strtoupper( md5( $check ) ) . '] [' . $data['md5sig'] . ']';
54
+ $error = true;
55
+ }
56
+ }
57
+
58
+ // Step 2. Verify Sales Data
59
+ $sales_data = $this->decode_sales_data( $data['sales_data'] );
60
+ $s_data = explode( '|', $sales_data );
61
+
62
+ // to|from|amount|cost|currency|token|extra
63
+ list ( $_to, $_from, $_amount, $cost, $_currency, $token, $other ) = $s_data;
64
+
65
+ // Verify Token
66
+ if ( !$this->verify_token( $_from, trim( $token ) ) ) {
67
+ $log_entry[] = 'Could not verify token: [' . $token . ']';
68
+ $error = true;
69
+ }
70
+
71
+ // Make sure Purchase is unique
72
+ if ( !$this->transaction_id_is_unique( $data['transaction_id'] ) ) {
73
+ $log_entry[] = 'Transaction ID previously used: [' . $data['transaction_id'] . ']';
74
+ $error = true;
75
+ }
76
+
77
+ // Make sure accounts match
78
+ if ( $data['pay_to_email'] != trim( $this->prefs['account'] ) ) {
79
+ $log_entry[] = 'Recipient Email mismatch: [' . $data['pay_to_email'] . ']';
80
+ $error = true;
81
+ }
82
+
83
+ // Verify Currency
84
+ if ( $data['mb_currency'] != $this->prefs['currency'] || $data['mb_currency'] != $_currency ) {
85
+ $log_entry[] = 'Currency mismatch: [' . $data['mb_currency'] . '] [' . $_currency . ']';
86
+ $error = true;
87
+ }
88
+
89
+ // Verify Cost
90
+ $amount = $this->core->number( $data['amount'] );
91
+ $_cost = $amount*$this->prefs['exchange'];
92
+ if ( $cost != $_cost ) {
93
+ $log_entry[] = 'Amount mismatch: [' . $cost . '] [' . $_cost . ']';
94
+ $error = true;
95
+ }
96
+
97
+ // Step 3. Act acording to our findings
98
+ if ( $error === false ) {
99
+
100
+ // Pending transaction
101
+ if ( $data['status'] == '0' ) {
102
+ $log_entry[] = 'Transaction Pending';
103
+ do_action( "mycred_buy_cred_{$id}_pending", $data );
104
+ }
105
+
106
+ // Completed transaction
107
+ elseif ( $data['status'] == '2' ) {
108
+ // Highlight test purchases
109
+ $entry = $this->get_entry( $_to, $_from );
110
+ if ( $this->prefs['sandbox'] ) $entry = 'TEST ' . $entry;
111
+
112
+ $data = array(
113
+ 'transaction_id' => $data['transaction_id'],
114
+ 'skrill_ref' => $data['mb_transaction_id'],
115
+ 'md5' => $data['md5sig'],
116
+ 'sales_data' => $sales_data
117
+ );
118
+
119
+ // Add creds
120
+ $this->core->add_creds(
121
+ 'buy_creds_with_skrill',
122
+ $_to,
123
+ $amount,
124
+ $entry,
125
+ $_from,
126
+ $data
127
+ );
128
+
129
+ $log_entry[] = 'CREDs Added.';
130
+ do_action( "mycred_buy_cred_{$id}_approved", $data );
131
+ }
132
+
133
+ // Cancelled transaction
134
+ elseif ( $data['status'] == '-1' ) {
135
+ $log_entry[] = 'Transaction Cancelled';
136
+ do_action( "mycred_buy_cred_{$id}_cancelled", $data );
137
+ }
138
+
139
+ // Failed transaction
140
+ else {
141
+ $log_entry[] = 'Transaction Failed';
142
+ do_action( "mycred_buy_cred_{$id}_failed", $data );
143
+ }
144
+ }
145
+
146
+ // Error
147
+ else {
148
+ do_action( "mycred_buy_cred_{$id}_error", $log_entry, $data );
149
+ }
150
+
151
+ // Step 4. Log if need be
152
+ do_action( "mycred_buy_cred_{$id}_end", $log_entry, $data );
153
+ unset( $data );
154
+
155
+ // Respond & Die
156
+ header( "HTTP/1.1 200 OK" );
157
+ die();
158
+ }
159
+
160
+ /**
161
+ * Results Handler
162
+ * @since 0.1
163
+ * @version 1.0
164
+ */
165
+ public function returning() {
166
+ if ( isset( $_GET['transaction_id'] ) && !empty( $_GET['transaction_id'] ) && isset( $_GET['msid'] ) && !empty( $_GET['msid'] ) ) {
167
+ $thankyou_url = $this->get_thankyou();
168
+
169
+ $this->purchase_header( __( 'Success', 'mycred' ), $thankyou_url );
170
+ echo '<h1>' . __( 'Thank you for your purchase', 'mycred' ) . '</h1>';
171
+ $this->purchase_footer();
172
+ exit();
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Buy Handler
178
+ * @since 0.1
179
+ * @version 1.0
180
+ */
181
+ public function buy() {
182
+ if ( !isset( $this->prefs['account'] ) || empty( $this->prefs['account'] ) )
183
+ wp_die( __( 'Please setup this gateway before attempting to make a purchaase!', 'mycred' ) );
184
+
185
+ $amount = $_REQUEST['amount'];
186
+ $home = get_bloginfo( 'url' );
187
+ $logo_url = plugins_url( 'images/skrill.png', myCRED_PURCHASE );
188
+ $token = $this->create_token();
189
+ $transaction_id = 'BUYCRED' . date_i18n( 'U' ) . $this->get_to();
190
+
191
+ // Location
192
+ $location = 'https://www.moneybookers.com/app/payment.pl';
193
+
194
+ // Finance
195
+ $currency = $this->prefs['currency'];
196
+ $exchange = $this->prefs['exchange'];
197
+
198
+ $amount = $this->core->number( $amount );
199
+ $amount = abs( $amount );
200
+
201
+ $cost = $amount*$exchange;
202
+ $cost = $this->core->number( $cost );
203
+
204
+ // Thank you page
205
+ $thankyou_url = $this->get_thankyou();
206
+
207
+ // Cancel page
208
+ $cancel_url = $this->get_cancelled();
209
+
210
+ $to = $this->get_to();
211
+ $from = $this->current_user_id;
212
+
213
+ // Let others play
214
+ $extra = apply_filters( 'mycred_skrill_extra', '', $amount, $from, $to, $this->prefs, $this->core );
215
+ unset( $_REQUEST );
216
+
217
+ // Start constructing merchant details
218
+ $hidden_fields = array(
219
+ 'pay_to_email' => $this->prefs['account'],
220
+ 'transaction_id' => $transaction_id,
221
+ 'return_url' => $thankyou_url,
222
+ 'cancel_url' => $cancel_url,
223
+ 'status_url' => $this->callback_url(),
224
+ 'return_url_text' => __( 'Return to ', 'mycred' ) . get_bloginfo( 'name' ),
225
+ 'hide_login' => 1
226
+ );
227
+
228
+ // Customize Checkout Page
229
+ if ( isset( $this->prefs['account_title'] ) && !empty( $this->prefs['account_title'] ) )
230
+ $hidden_fields = array_merge_recursive( $hidden_fields, array(
231
+ 'recipient_description' => $this->core->template_tags_general( $this->prefs['account_title'] )
232
+ ) );
233
+
234
+ if ( isset( $this->prefs['account_logo'] ) && !empty( $this->prefs['account_logo'] ) )
235
+ $hidden_fields = array_merge_recursive( $hidden_fields, array(
236
+ 'logo_url' => $this->prefs['account_logo']
237
+ ) );
238
+
239
+ if ( isset( $this->prefs['confirmation_note'] ) && !empty( $this->prefs['confirmation_note'] ) )
240
+ $hidden_fields = array_merge_recursive( $hidden_fields, array(
241
+ 'confirmation_note' => $this->core->template_tags_general( $this->prefs['confirmation_note'] )
242
+ ) );
243
+
244
+ // If we want an email receipt for purchases
245
+ if ( isset( $this->prefs['email_receipt'] ) && !empty( $this->prefs['email_receipt'] ) )
246
+ $hidden_fields = array_merge_recursive( $hidden_fields, array(
247
+ 'status_url2' => $this->prefs['account']
248
+ ) );
249
+
250
+ // Sale Details
251
+ // to|from|amount|cost|currency|token|extra
252
+ $sales_data = $to . '|' . $from . '|' . $amount . '|' . $cost . '|' . $currency . '|' . $token . '|' . $extra;
253
+ $item_name = str_replace( '%number%', $amount, $this->prefs['item_name'] );
254
+ $sale_details = array(
255
+ 'merchant_fields' => 'sales_data',
256
+ 'sales_data' => $this->encode_sales_data( $sales_data ),
257
+
258
+ 'amount' => $cost,
259
+ 'currency' => $currency,
260
+
261
+ 'detail1_description' => __( 'Product:', 'mycred' ),
262
+ 'detail1_text' => $this->core->template_tags_general( $item_name )
263
+ );
264
+ $hidden_fields = array_merge_recursive( $hidden_fields, $sale_details );
265
+
266
+ // Gifting
267
+ if ( $to != $from ) {
268
+ $user = get_userdata( $to );
269
+ $gift_details = array(
270
+ 'detail2_description' => __( 'Gift to:', 'mycred' ),
271
+ 'detail2_text' => $user->display_name . ' ' . __( '(author)', 'mycred' )
272
+ );
273
+ $hidden_fields = array_merge_recursive( $hidden_fields, $gift_details );
274
+ unset( $user );
275
+ }
276
+
277
+ // Generate processing page
278
+ $this->purchase_header( __( 'Processing payment &hellip;', 'mycred' ) );
279
+ $this->form_with_redirect( $hidden_fields, $location, $logo_url, '', 'sales_data' );
280
+ $this->purchase_footer();
281
+
282
+ // Exit
283
+ unset( $this );
284
+ exit();
285
+ }
286
+
287
+ /**
288
+ * Preferences
289
+ * @since 0.1
290
+ * @version 1.0
291
+ */
292
+ public function preferences( $buy_creds ) {
293
+ $prefs = $this->prefs; ?>
294
+
295
+ <label class="subheader" for="<?php echo $this->field_id( 'sandbox' ); ?>"><?php _e( 'Sandbox Mode', 'mycred' ); ?></label>
296
+ <ol>
297
+ <li>
298
+ <input type="checkbox" name="<?php echo $this->field_name( 'sandbox' ); ?>" id="<?php echo $this->field_id( 'sandbox' ); ?>" value="1"<?php checked( $prefs['sandbox'], 1 ); ?> /><span class="description"><?php _e( 'Remember to use your Test Merchant Account when Sandbox mode is active!', 'mycred' ); ?></span>
299
+ </li>
300
+ </ol>
301
+ <label class="subheader" for="<?php echo $this->field_id( 'currency' ); ?>"><?php _e( 'Currency', 'mycred' ); ?></label>
302
+ <ol>
303
+ <li>
304
+ <?php $this->currencies_dropdown( 'currency' ); ?>
305
+
306
+ </li>
307
+ </ol>
308
+ <label class="subheader" for="<?php echo $this->field_id( 'account' ); ?>"><?php _e( 'Merchant Account Email', 'mycred' ); ?></label>
309
+ <ol>
310
+ <li>
311
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'account' ); ?>" id="<?php echo $this->field_id( 'account' ); ?>" value="<?php echo $prefs['account']; ?>" class="long" /></div>
312
+ </li>
313
+ </ol>
314
+ <label class="subheader" for="<?php echo $this->field_id( 'word' ); ?>"><?php _e( 'Secret Word', 'mycred' ); ?></label>
315
+ <ol>
316
+ <li>
317
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'word' ); ?>" id="<?php echo $this->field_id( 'word' ); ?>" value="<?php echo $prefs['word']; ?>" class="medium" /></div>
318
+ <span class="description"><?php _e( 'You can set your secret word under "Merchant Tools" in your Skrill Account.', 'mycred' ); ?></span>
319
+ </li>
320
+ </ol>
321
+ <label class="subheader" for="<?php echo $this->field_id( 'item_name' ); ?>"><?php _e( 'Item Name', 'mycred' ); ?></label>
322
+ <ol>
323
+ <li>
324
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'item_name' ); ?>" id="<?php echo $this->field_id( 'item_name' ); ?>" value="<?php echo $prefs['item_name']; ?>" class="long" /></div>
325
+ <span class="description"><?php _e( 'Description of the item being purchased by the user.', 'mycred' ); ?></span>
326
+ </li>
327
+ </ol>
328
+ <label class="subheader" for="<?php echo $this->field_id( 'exchange' ); ?>"><?php echo $this->core->template_tags_general( __( '%plural% Exchange Rate', 'mycred' ) ); ?></label>
329
+ <ol>
330
+ <li>
331
+ <div class="h2"><?php echo $this->core->format_creds( 1 ); ?> = <input type="text" name="<?php echo $this->field_name( 'exchange' ); ?>" id="<?php echo $this->field_id( 'exchange' ); ?>" value="<?php echo $prefs['exchange']; ?>" size="3" /> <span id="mycred-gateway-paypal-currency"><?php echo ( empty( $prefs['currency'] ) ) ? __( 'Your selected currency', 'mycred' ) : $prefs['currency']; ?></span></div>
332
+ </li>
333
+ </ol>
334
+ <label class="subheader" for="<?php echo $this->field_id( 'email_receipt' ); ?>"><?php _e( 'Confirmation Email', 'mycred' ); ?></label>
335
+ <ol>
336
+ <li>
337
+ <input type="checkbox" name="<?php echo $this->field_name( 'email_receipt' ); ?>" id="<?php echo $this->field_id( 'email_receipt' ); ?>" value="1"<?php checked( $prefs['email_receipt'], 1 ); ?> /><?php _e( 'Ask Skrill to send me a confirmation email for each successful purchase.', 'mycred' ); ?>
338
+ </li>
339
+ </ol>
340
+ <label class="subheader"><?php _e( 'Checkout Page', 'mycred' ); ?></label>
341
+ <ol>
342
+ <li>
343
+ <label for="<?php echo $this->field_id( 'account_title' ); ?>"><?php _e( 'Title', 'mycred' ); ?></label>
344
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'account_title' ); ?>" id="<?php echo $this->field_id( 'account_title' ); ?>" value="<?php echo $prefs['account_title']; ?>" class="long" /></div>
345
+ <span class="description"><?php _e( 'If left empty, your account email is used as title on the Skill Payment Page.', 'mycred' ); ?></span>
346
+ </li>
347
+ <li>
348
+ <label for="<?php echo $this->field_id( 'account_logo' ); ?>"><?php _e( 'Logo URL', 'mycred' ); ?></label>
349
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'account_logo' ); ?>" id="<?php echo $this->field_id( 'account_title' ); ?>" value="<?php echo $prefs['account_logo']; ?>" class="long" /></div>
350
+ <span class="description"><?php _e( 'The URL to the image you want to use on the top of the gateway. For best integration results we recommend you use logos with dimensions up to 200px in width and 50px in height.', 'mycred' ); ?></span>
351
+ </li>
352
+ <li>
353
+ <label for="<?php echo $this->field_id( 'confirmation_note' ); ?>"><?php _e( 'Confirmation Note', 'mycred' ); ?></label>
354
+ <textarea rows="10" cols="50" name="<?php echo $this->field_name( 'confirmation_note' ); ?>" id="<?php echo $this->field_id( 'confirmation_note' ); ?>" class="large-text code"><?php echo $prefs['confirmation_note']; ?></textarea>
355
+ <span class="description"><?php _e( 'Optional text to show user once a transaction has been successfully completed. This text is shown by Skrill.', 'mycred' ); ?></span>
356
+ </li>
357
+ <li>
358
+ <h3><?php _e( 'Important!', 'mycred' ); ?></h3>
359
+ <p><span class="description"><strong>1. </strong><?php echo $this->core->template_tags_general( __( 'By default all Skrill Merchant account accept payments via Bank Transfers. When a user selects this option, no %_plural% are awarded! You will need to manually award these once the bank transfer is completed.', 'mycred' ) ); ?></span></p>
360
+ <p><span class="description"><strong>2. </strong><?php _e( 'By default purchases made using Skrill will result in users having to signup for a Skrill account (if they do not have one already). You can contact <a href="mailto:">Skrill Merchant Services</a> and request to disable this feature.', 'mycred' ); ?></span></p>
361
+ </li>
362
+ </ol>
363
+ <?php
364
+ }
365
+
366
+ /**
367
+ * Sanatize Prefs
368
+ * @since 0.1
369
+ * @version 1.0
370
+ */
371
+ public function sanitise_preferences( $data ) {
372
+ $data['sandbox'] = ( !isset( $data['sandbox'] ) ) ? 0 : 1;
373
+ $data['email_receipt'] = ( !isset( $data['email_receipt'] ) ) ? 0 : 1;
374
+ $data['exchange'] = ( empty( $data['exchange'] ) ) ? 1 : $data['exchange'];
375
+
376
+ $data['account_title'] = substr( $data['account_title'], 0, 30 );
377
+ $data['confirmation_note'] = substr( $data['confirmation_note'], 0, 240 );
378
+ return $data;
379
+ }
380
+ }
381
+ }
382
+ ?>
addons/buy-creds/images/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/buy-creds/images/loading.gif ADDED
Binary file
addons/buy-creds/images/netbilling.png ADDED
Binary file
addons/buy-creds/images/payza.png ADDED
Binary file
addons/buy-creds/images/skrill.png ADDED
Binary file
addons/buy-creds/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/buy-creds/myCRED-addon-buy-creds.php ADDED
@@ -0,0 +1,772 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Addon: buyCRED
4
+ * Addon URI: http://mycred.merovingi.com
5
+ * Version: 1.0
6
+ * Description: The <strong>buy</strong>CRED Add-on allows your users to buy points using PayPal, Skrill (Moneybookers) or NETbilling. <strong>buy</strong>CRED can also let your users buy points for other members.
7
+ * Author: Gabriel S Merovingi
8
+ * Author URI: http://www.merovingi.com
9
+ */
10
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
11
+ define( 'myCRED_PURCHASE', __FILE__ );
12
+ define( 'myCRED_PURCHASE_VERSION', myCRED_VERSION . '.1' );
13
+ define( 'myCRED_PURCHASE_DIR', myCRED_ADDONS_DIR . 'buy-creds/' );
14
+ /**
15
+ * Payment Gateway factory
16
+ */
17
+ require_once( myCRED_PURCHASE_DIR . 'abstracts/mycred-abstract-payment-gateway.php' );
18
+ /**
19
+ * Payment Gateways, if you do not want to use one just comment it out.
20
+ */
21
+ require_once( myCRED_PURCHASE_DIR . 'gateways/paypal-standard.php' );
22
+ require_once( myCRED_PURCHASE_DIR . 'gateways/netbilling.php' );
23
+ require_once( myCRED_PURCHASE_DIR . 'gateways/skrill.php' );
24
+ /**
25
+ * myCRED_Buy_CREDs class
26
+ *
27
+ *
28
+ * @since 0.1
29
+ * @version 1.0
30
+ */
31
+ if ( !class_exists( 'myCRED_Buy_CREDs' ) ) {
32
+ class myCRED_Buy_CREDs extends myCRED_Module {
33
+
34
+ /**
35
+ * Construct
36
+ */
37
+ function __construct() {
38
+ parent::__construct( 'myCRED_Buy_CREDs', array(
39
+ 'module_name' => 'gateways',
40
+ 'option_id' => 'mycred_pref_buycreds',
41
+ 'defaults' => array(
42
+ 'installed' => array(),
43
+ 'active' => array(),
44
+ 'gateway_prefs' => array()
45
+ ),
46
+ 'labels' => array(
47
+ 'menu' => __( 'Payment Gateways', 'mycred' ),
48
+ 'page_title' => __( 'Payment Gateways', 'mycred' ),
49
+ 'page_header' => __( 'Payment Gateways', 'mycred' )
50
+ ),
51
+ 'screen_id' => 'myCRED_page_gateways',
52
+ 'accordion' => true,
53
+ 'add_to_core' => true,
54
+ 'menu_pos' => 85
55
+ ) );
56
+
57
+ add_action( 'mycred_help', array( $this, 'help' ), 10, 2 );
58
+ }
59
+
60
+ /**
61
+ * Process
62
+ * Processes Gateway returns and IPN calls
63
+ * @since 0.1
64
+ * @version 1.0
65
+ */
66
+ public function module_init() {
67
+ // Make sure we have installed gateways.
68
+ $installed = $this->get();
69
+ if ( empty( $installed ) ) return;
70
+
71
+ /**
72
+ * Step 1 - Look for returns
73
+ * Runs though all active payment gateways and lets them decide if this is the
74
+ * user returning after a remote purchase. Each gateway should know what to look
75
+ * for to determen if they are responsible for handling the return.
76
+ */
77
+ foreach ( $installed as $id => $data ) {
78
+ if ( !$this->is_active( $id ) ) continue;
79
+ $this->call( 'returning', $installed[$id]['callback'] );
80
+ }
81
+
82
+ /**
83
+ * Init Gateway
84
+ */
85
+ if ( isset( $_REQUEST['mycred_call'] ) || ( isset( $_REQUEST['mycred_buy'] ) && is_user_logged_in() ) ) {
86
+ $gateway_id = ( isset( $_REQUEST['mycred_call'] ) ) ? $_REQUEST['mycred_call'] : $_REQUEST['mycred_buy'];
87
+ if ( array_key_exists( $gateway_id, $installed ) && $this->is_active( $gateway_id ) ) {
88
+ $class = $installed[$gateway_id]['callback'][0];
89
+ $gateway = new $class( $this->gateway_prefs );
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Step 2 - Process
95
+ * Next we check to see if there is a purchase request, either made locally though
96
+ * a form submission or by gateways calling remotly (see PayPal).
97
+ */
98
+ if ( isset( $_REQUEST['mycred_call'] ) ) {
99
+ $gateway->process();
100
+ }
101
+
102
+ /**
103
+ * Step 3 - Buy Requests
104
+ * Finally we check if there is a request to buy creds. A request must be made by nominating
105
+ * the payment gateway that we want to use. Locally managed purchases can use this to show
106
+ * the form again if i.e. an error was detected. $this->core->buy_creds
107
+ */
108
+ if ( isset( $_REQUEST['mycred_buy'] ) && is_user_logged_in() ) {
109
+ if ( !isset( $_REQUEST['token'] ) || !wp_verify_nonce( $_REQUEST['token'], 'mycred-buy-creds' ) ) return;
110
+ if ( !isset( $_REQUEST['amount'] ) || $_REQUEST['amount'] == 0 || $_REQUEST['amount'] < $this->core->buy_creds['minimum'] ) return;
111
+ $gateway->buy();
112
+ }
113
+
114
+ // Finish by adding our shortcodes
115
+ add_shortcode( 'mycred_buy', array( $this, 'render_shortcode_basic' ) );
116
+ add_shortcode( 'mycred_buy_form', array( $this, 'render_shortcode_form' ) );
117
+ }
118
+
119
+ /**
120
+ * Get Payment Gateways
121
+ * Retreivs all available payment gateways that can be used to buy CREDs.
122
+ * @since 0.1
123
+ * @version 1.0
124
+ */
125
+ public function get() {
126
+ // Defaults
127
+ $installed['paypal-standard'] = array(
128
+ 'title' => __( 'PayPal Payments Standard' ),
129
+ 'callback' => array( 'myCRED_PayPal_Standard' )
130
+ );
131
+ $installed['netbilling'] = array(
132
+ 'title' => __( 'NETbilling' ),
133
+ 'callback' => array( 'myCRED_NETbilling' )
134
+ );
135
+ $installed['skrill'] = array(
136
+ 'title' => __( 'Skrill (Moneybookers)' ),
137
+ 'callback' => array( 'myCRED_Skrill' )
138
+ );
139
+ $installed = apply_filters( 'mycred_setup_gateways', $installed );
140
+
141
+ $this->installed = $installed;
142
+ return $installed;
143
+ }
144
+
145
+ /**
146
+ * Add to General Settings
147
+ * @since 0.1
148
+ * @version 1.0
149
+ */
150
+ public function after_general_settings() {
151
+ // Since we are both registering our own settings and want to hook into
152
+ // the core settings, we need to define our "defaults" here.
153
+ if ( !isset( $this->core->buy_creds ) ) {
154
+ $buy_creds = array(
155
+ 'minimum' => 1,
156
+ 'exchange' => 1,
157
+ 'log' => '%Plural% purchase',
158
+ 'login' => __( 'Please login to purchase %_plural%', 'mycred' ),
159
+ 'thankyou' => array(
160
+ 'use' => 'page',
161
+ 'custom' => '',
162
+ 'page' => ''
163
+ ),
164
+ 'cancelled' => array(
165
+ 'use' => 'custom',
166
+ 'custom' => '',
167
+ 'page' => ''
168
+ ),
169
+ 'gifting' => array(
170
+ 'members' => 1,
171
+ 'authors' => 1,
172
+ 'log' => __( 'Gift purchase from %display_name%.', 'mycred' )
173
+ )
174
+ );
175
+ }
176
+ else {
177
+ $buy_creds = $this->core->buy_creds;
178
+ }
179
+
180
+ $thankyou_use = $buy_creds['thankyou']['use'];
181
+ $cancelled_use = $buy_creds['cancelled']['use']; ?>
182
+
183
+ <h4 style="color:#BBD865;"><?php _e( 'buyCRED', 'mycred' ); ?></h4>
184
+ <div class="body" style="display:none;">
185
+ <label class="subheader"><?php echo $this->core->template_tags_general( __( 'Minimum %plural%', 'mycred' ) ); ?></label>
186
+ <ol id="mycred-buy-creds-minimum-amount">
187
+ <li>
188
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'minimum' ); ?>" id="<?php echo $this->field_id( 'minimum' ); ?>" value="<?php echo $buy_creds['minimum']; ?>" size="5" /></div>
189
+ <span class="description"><?php echo $this->core->template_tags_general( __( 'Minimum amount of %plural% a user must purchase. Will default to 1.', 'mycred' ) ); ?></span>
190
+ </li>
191
+ </ol>
192
+ <label class="subheader" for="<?php echo $this->field_id( 'login' ); ?>"><?php _e( 'Login Template', 'mycred' ); ?></label>
193
+ <ol id="mycred-buy-creds-default-log">
194
+ <li>
195
+ <textarea rows="10" cols="50" name="<?php echo $this->field_name( 'login' ); ?>" id="<?php echo $this->field_id( 'login' ); ?>" class="large-text code"><?php echo $buy_creds['login']; ?></textarea>
196
+ <span class="description"><?php _e( 'Content to show when a user is not logged in.', 'mycred' ); ?></span>
197
+ </li>
198
+ </ol>
199
+ <label class="subheader" for="<?php echo $this->field_id( 'log' ); ?>"><?php _e( 'Log Template', 'mycred' ); ?></label>
200
+ <ol id="mycred-buy-creds-default-log">
201
+ <li>
202
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'log' ); ?>" id="<?php echo $this->field_id( 'log' ); ?>" value="<?php echo $buy_creds['log']; ?>" class="long" /></div>
203
+ </li>
204
+ </ol>
205
+ <label class="subheader"><?php _e( 'Thank You Page', 'mycred' ); ?></label>
206
+ <ol id="mycred-buy-creds-thankyou-page">
207
+ <li class="option">
208
+ <input type="radio" name="<?php echo $this->field_name( array( 'thankyou' => 'use' ) ); ?>" <?php checked( $thankyou_use, 'custom' ); ?> id="<?php echo $this->field_id( array( 'thankyou' => 'use' ) ); ?>-custom" value="custom" /> <label for="<?php echo $this->field_id( array( 'thankyou' => 'custom' ) ); ?>"><?php _e( 'Custom URL', 'mycred' ); ?></label><br />
209
+ <div class="h2"><?php echo get_bloginfo( 'url' ) . '/'; ?> <input type="text" name="<?php echo $this->field_name( array( 'thankyou' => 'custom' ) ); ?>" id="<?php echo $this->field_id( array( 'thankyou' => 'custom' ) ); ?>" value="<?php echo $buy_creds['thankyou']['custom']; ?>" /></div>
210
+ </li>
211
+ <li class="empty">&nbsp;</li>
212
+ <li class="option">
213
+ <input type="radio" name="<?php echo $this->field_name( array( 'thankyou' => 'use' ) ); ?>" <?php checked( $thankyou_use, 'page' ); ?> id="<?php echo $this->field_id( array( 'thankyou' => 'use' ) ); ?>-page" value="page" /> <label for="mycred-buy-creds-thankyou-use-page"><?php _e( 'Page', 'mycred' ); ?></label><br />
214
+ <?php
215
+ // Thank you page dropdown
216
+ $thankyou_args = array(
217
+ 'name' => $this->field_name( array( 'thankyou' => 'page' ) ),
218
+ 'id' => $this->field_id( array( 'thankyou' => 'page' ) ) . '-id',
219
+ 'selected' => $buy_creds['thankyou']['page'],
220
+ 'show_option_none' => __( 'Select', 'mycred' )
221
+ );
222
+ wp_dropdown_pages( $thankyou_args ); ?>
223
+
224
+ </li>
225
+ </ol>
226
+ <label class="subheader"><?php _e( 'Cancellation Page', 'mycred' ); ?></label>
227
+ <ol id="mycred-buy-creds-cancel-page">
228
+ <li class="option">
229
+ <input type="radio" name="<?php echo $this->field_name( array( 'cancelled' => 'use' ) ); ?>" <?php checked( $cancelled_use, 'custom' ); ?> id="<?php echo $this->field_id( array( 'cancelled' => 'custom' ) ); ?>" value="custom" /> <label for="<?php echo $this->field_id( array( 'cancelled' => 'custom' ) ); ?>"><?php _e( 'Custom URL', 'mycred' ); ?></label><br />
230
+ <div class="h2"><?php echo get_bloginfo( 'url' ) . '/'; ?> <input type="text" name="mycred_pref_core[buy_creds][cancelled][custom]" id="mycred-buy-creds-cancelled-custom-url" value="<?php echo $buy_creds['cancelled']['custom']; ?>" /></div>
231
+ </li>
232
+ <li class="empty">&nbsp;</li>
233
+ <li class="option">
234
+ <input type="radio" name="<?php echo $this->field_name( array( 'cancelled' => 'use' ) ); ?>" <?php checked( $cancelled_use, 'page' ); ?> id="<?php echo $this->field_id( array( 'cancelled' => 'use' ) ); ?>-page" value="page" /> <label for="<?php echo $this->field_id( array( 'cancelled' => 'use' ) ); ?>-page"><?php _e( 'Page', 'mycred' ); ?></label><br />
235
+ <?php
236
+ // Cancelled page dropdown
237
+ $cancelled_args = array(
238
+ 'name' => $this->field_name( array( 'cancelled' => 'page' ) ),
239
+ 'id' => $this->field_id( array( 'cancelled' => 'page' ) ) . '-id',
240
+ 'selected' => $buy_creds['cancelled']['page'],
241
+ 'show_option_none' => __( 'Select', 'mycred' )
242
+ );
243
+ wp_dropdown_pages( $cancelled_args ); ?>
244
+
245
+ </li>
246
+ </ol>
247
+ <label class="subheader"><?php _e( 'Gifting', 'mycred' ); ?></label>
248
+ <ol id="mycred-buy-creds-gifting">
249
+ <li><input type="checkbox" name="<?php echo $this->field_name( array( 'gifting' => 'members' ) ); ?>" id="<?php echo $this->field_id( array( 'gifting' => 'members' ) ); ?>"<?php checked( $buy_creds['gifting']['members'], 1 ); ?> value="1" /><label for="<?php echo $this->field_id( array( 'gifting' => 'members' ) ); ?>"><?php echo $this->core->template_tags_general( __( 'Allow users to buy %_plural% for other users.', 'mycred' ) ); ?></label></li>
250
+ <li><input type="checkbox" name="<?php echo $this->field_name( array( 'gifting' => 'authors' ) ); ?>" id="<?php echo $this->field_id( array( 'gifting' => 'authors' ) ); ?>"<?php checked( $buy_creds['gifting']['authors'], 1 ); ?> value="1" /><label for="<?php echo $this->field_id( array( 'gifting' => 'authors' ) ); ?>"><?php echo $this->core->template_tags_general( __( 'Allow users to buy %_plural% for content authors.', 'mycred' ) ); ?></label></li>
251
+ <li class="empty">&nbsp;</li>
252
+ <li>
253
+ <label for="<?php echo $this->field_id( array( 'gifting' => 'log' ) ); ?>"><?php _e( 'Log Template', 'mycred' ); ?></label>
254
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'gifting' => 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'gifting' => 'log' ) ); ?>" value="<?php echo $buy_creds['gifting']['log']; ?>" class="long" /></div>
255
+ <div class="description"><?php _e( 'Available template tags: %singular%, %plural% and %display_name%' ); ?></div>
256
+ </li>
257
+ </ol>
258
+ </div>
259
+ <?php
260
+ }
261
+
262
+ /**
263
+ * Save Settings
264
+ * @since 0.1
265
+ * @version 1.0
266
+ */
267
+ public function sanitize_extra_settings( $new_data, $data, $core ) {
268
+ $settings = $data['buy_creds'];
269
+
270
+ $new_data['buy_creds']['minimum'] = abs( $settings['minimum'] );
271
+ $new_data['buy_creds']['log'] = sanitize_text_field( $settings['log'] );
272
+ $new_data['buy_creds']['login'] = trim( $settings['login'] );
273
+
274
+ $new_data['buy_creds']['thankyou']['use'] = sanitize_text_field( $settings['thankyou']['use'] );
275
+ $new_data['buy_creds']['thankyou']['custom'] = sanitize_text_field( $settings['thankyou']['custom'] );
276
+ $new_data['buy_creds']['thankyou']['page'] = abs( $settings['thankyou']['page'] );
277
+
278
+ $new_data['buy_creds']['cancelled']['use'] = sanitize_text_field( $settings['cancelled']['use'] );
279
+ $new_data['buy_creds']['cancelled']['custom'] = sanitize_text_field( $settings['cancelled']['custom'] );
280
+ $new_data['buy_creds']['cancelled']['page'] = abs( $settings['cancelled']['page'] );
281
+
282
+ $new_data['buy_creds']['gifting']['members'] = ( !isset( $settings['gifting']['members'] ) ) ? 0 : 1;
283
+ $new_data['buy_creds']['gifting']['authors'] = ( !isset( $settings['gifting']['authors'] ) ) ? 0 : 1;
284
+ $new_data['buy_creds']['gifting']['log'] = sanitize_text_field( $settings['gifting']['log'] );
285
+
286
+ return $new_data;
287
+ }
288
+
289
+ /**
290
+ * Payment Gateways Page
291
+ * @since 0.1
292
+ * @version 1.0
293
+ */
294
+ public function admin_page() {
295
+ $installed = $this->get();
296
+
297
+ // Updated settings
298
+ if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] == true ) {
299
+ echo '<div class="updated settings-error"><p>' . __( 'Settings Updated', 'mycred' ) . '</p></div>';
300
+ } ?>
301
+
302
+ <div class="wrap list" id="myCRED-wrap">
303
+ <div id="icon-myCRED" class="icon32"><br /></div>
304
+ <h2><?php echo '<strong>my</strong>CRED ' . __( 'Payment Gateways', 'mycred' ); ?></h2>
305
+ <p><?php echo $this->core->template_tags_general( __( 'Select the payment gateways you want to offer your users to buy %plural%.', 'mycred' ) ); ?></p>
306
+ <form method="post" action="options.php">
307
+ <?php settings_fields( 'myCRED-gateways' ); ?>
308
+
309
+ <?php do_action( 'mycred_before_buycreds_page', $this ); ?>
310
+
311
+ <div class="list-items expandable-li" id="accordion">
312
+ <?php
313
+ if ( !empty( $installed ) ) {
314
+ foreach ( $installed as $key => $data ) { ?>
315
+
316
+ <h4 class="<?php
317
+
318
+ // Mark
319
+ if ( $this->is_active( $key ) ) {
320
+ if ( isset( $this->gateway_prefs[$key]['sandbox'] ) && $this->gateway_prefs[$key]['sandbox'] == 1 )
321
+ echo 'sandbox';
322
+ else
323
+ echo 'active';
324
+ }
325
+ else
326
+ echo 'inactive'; ?>"><label><?php echo $this->core->template_tags_general( $data['title'] ); ?></label></h4>
327
+ <div class="body" style="display:none;">
328
+ <label class="subheader"><?php _e( 'Enable', 'mycred' ); ?></label>
329
+ <ol id="">
330
+ <li>
331
+ <input type="checkbox" name="mycred_pref_buycreds[active][]" id="mycred-gateway-<?php echo $key; ?>" value="<?php echo $key; ?>"<?php if ( $this->is_active( $key ) ) echo ' checked="checked"'; ?> />
332
+ </li>
333
+ </ol>
334
+ <?php
335
+ echo $this->call( 'preferences', $data['callback'] ); ?>
336
+
337
+ <input type="hidden" name="mycred_pref_buycreds[installed]" value="<?php echo $key; ?>" />
338
+ </div>
339
+ <?php
340
+ }
341
+ } ?>
342
+
343
+ </div>
344
+ <?php do_action( 'mycred_after_buycreds_page', $this ); ?>
345
+
346
+ <?php submit_button( __( 'Update Gateway Settings', 'mycred' ), 'primary large' ); ?>
347
+
348
+ </form>
349
+ <?php do_action( 'mycred_bottom_buycreds_page', $this ); ?>
350
+
351
+ </div>
352
+ <?php
353
+ unset( $this );
354
+ }
355
+
356
+ /**
357
+ * Sanititze Settings
358
+ * @since 0.1
359
+ * @version 1.0
360
+ */
361
+ public function sanitize_settings( $data ) {
362
+
363
+ $installed = $this->get();
364
+ if ( empty( $installed ) ) return $data;
365
+
366
+ foreach ( $installed as $id => $gdata ) {
367
+ $data['gateway_prefs'][$id] = $this->call( 'sanitise_preferences', $installed[$id]['callback'], $data['gateway_prefs'][$id] );
368
+ }
369
+ update_option( 'gabe_testing', $data );
370
+ unset( $installed );
371
+ return $data;
372
+ }
373
+
374
+ /**
375
+ * Register Widgets
376
+ * @since 0.1
377
+ * @version 1.0
378
+ */
379
+ public function module_widgets_init() {
380
+ //register_widget( 'myCRED_Buy_CREDs' );
381
+ }
382
+
383
+ /**
384
+ * Render Shortcode Basic
385
+ * This shortcode returns a link element to a specified payment gateway.
386
+ * @since 0.1
387
+ * @version 1.0
388
+ */
389
+ public function render_shortcode_basic( $atts, $title = '' ) {
390
+ extract( shortcode_atts( array(
391
+ 'gateway' => '',
392
+ 'amount' => '',
393
+ 'gift_to' => false,
394
+ 'login' => $this->core->template_tags_general( $this->core->buy_creds['login'] )
395
+ ), $atts ) );
396
+
397
+ // If we are not logged in
398
+ if ( !is_user_logged_in() ) return '<div class="mycred-buy login">' . $this->core->template_tags_general( $login ) . '</div>';
399
+
400
+ // Gateways
401
+ $installed = $this->get();
402
+ if ( empty( $installed ) ) return __( 'No gateways installed.', 'mycred' );
403
+ if ( !empty( $gateway ) && !array_key_exists( $gateway, $installed ) ) return __( 'Gateway does not exist.', 'mycred' );
404
+ if ( empty( $gateway ) || !array_key_exists( $gateway, $installed ) ) {
405
+ reset( $installed );
406
+ $gateway = key( $installed );
407
+ }
408
+
409
+ $buy_author = false;
410
+ $buy_member = false;
411
+ $buy_self = false;
412
+
413
+ // Gift to author (if allowed)
414
+ if ( $this->core->buy_creds['gifting']['authors'] == 1 && $gift_to == 'author' ) {
415
+ $user_id = $GLOBALS['post']->post_author;
416
+ $buy_author = true;
417
+ }
418
+
419
+ // Gift to member (if allowed)
420
+ elseif ( $this->core->buy_creds['gifting']['members'] == 1 && $gift_to !== false ) {
421
+ $user_id = abs( $gift_to );
422
+ $buy_member = true;
423
+ }
424
+
425
+ // Current user
426
+ else {
427
+ $user_id = get_current_user_id();
428
+ $buy_self = true;
429
+ }
430
+
431
+ // Adjust title
432
+ if ( $buy_self === false ) {
433
+ $user = get_userdata( (int) $user_id );
434
+ $username = $user->user_login;
435
+ $title = $this->core->template_tags_user( $title, $user );
436
+ unset( $user );
437
+ }
438
+ else {
439
+ $title = str_replace( '%display_name%', __( 'Yourself', 'mycred' ), $title );
440
+ }
441
+
442
+ // Amount
443
+ $amount = $this->prep_shortcode_amount( $amount );
444
+
445
+ // Title
446
+ $title = $this->prep_shortcode_title( $title );
447
+
448
+ // URL
449
+ $url = get_bloginfo( 'url' ) . '/';
450
+ $args = array(
451
+ 'mycred_buy' => $gateway,
452
+ 'amount' => $this->core->number( $amount ),
453
+ 'token' => wp_create_nonce( 'mycred-buy-creds' )
454
+ );
455
+ $classes = array( 'mycred-buy-link', $gateway, 'button large', 'custom' );
456
+
457
+ if ( $buy_author || $buy_member )
458
+ $args = array_merge_recursive( $args, array( 'gift_to' => $user_id ) );
459
+
460
+ // Element to return
461
+ $element = '<a href="' . add_query_arg( $args, $url ) . '" class="' . implode( ' ', $classes ) . '" title="' . $title . '">' . $title . '</a>';
462
+ unset( $this );
463
+ return $element;
464
+ }
465
+
466
+ /**
467
+ * Parse Attributes
468
+ * @since 0.1
469
+ * @version 1.0
470
+ */
471
+ public function parse_atts( $atts ) {
472
+ $defaults = array(
473
+ 'gateway' => '',
474
+ 'amount' => '',
475
+ 'gift_to' => false
476
+ );
477
+ $atts = wp_parse_args( $atts, $defaults );
478
+ $accepted = array();
479
+ foreach ( $atts as $attribute ) {
480
+ if ( in_array( $attribute, array( 'gateway', 'amount', 'gift_to', 'select' ) ) ) $accepted[] = $attribute;
481
+ }
482
+ return $accepted;
483
+ }
484
+
485
+ /**
486
+ * Render Shortcode Form
487
+ * Returns an advanced version allowing for further customizations.
488
+ * @since 0.1
489
+ * @version 1.0
490
+ */
491
+ public function render_shortcode_form( $atts, $content = '' ) {
492
+ extract( shortcode_atts( array(
493
+ 'gateway' => '',
494
+ 'amount' => '',
495
+ 'gift_to' => false,
496
+ 'login' => $this->core->template_tags_general( $this->core->buy_creds['login'] ),
497
+ ), $atts ) );
498
+
499
+ // If we are not logged in
500
+ if ( !is_user_logged_in() ) return '<p class="mycred-buy login">' . $login . '</p>';
501
+
502
+ // Catch errors
503
+ $installed = $this->get();
504
+ if ( empty( $installed ) ) return __( 'No gateways installed.', 'mycred' );
505
+ if ( !empty( $gateway ) && !array_key_exists( $gateway, $installed ) ) return __( 'Gateway does not exist.', 'mycred' );
506
+ if ( empty( $this->active ) ) return __( 'No active gateways found.', 'mycred' );
507
+ if ( !empty( $gateway ) && !$this->is_active( $gateway ) ) return __( 'The selected gateway is not active.', 'mycred' );
508
+
509
+ // Prep
510
+ $buy_author = false;
511
+ $buy_member = false;
512
+ $buy_others = false;
513
+ $buy_self = false;
514
+ $classes = array( 'myCRED-buy-form' );
515
+
516
+ // Gift to author (if allowed)
517
+ if ( $this->core->buy_creds['gifting']['authors'] == 1 && $gift_to == 'author' ) {
518
+ $post_id = $GLOBALS['post']->ID;
519
+ $user_id = $GLOBALS['post']->post_author;
520
+ $buy_author = true;
521
+ }
522
+
523
+ // Gift to specific member (if allowed)
524
+ elseif ( $this->core->buy_creds['gifting']['members'] == 1 && is_integer( $gift_to ) ) {
525
+ $user_id = abs( $gift_to );
526
+ $buy_member = true;
527
+ }
528
+
529
+ // Gift to other members (no member selected, user will select one for us)
530
+ elseif ( $this->core->buy_creds['gifting']['members'] == 1 && $gift_to !== false ) {
531
+ $user_id = get_current_user_id();
532
+ $buy_others = true;
533
+ }
534
+
535
+ // Current user
536
+ else {
537
+ $user_id = get_current_user_id();
538
+ $buy_self = true;
539
+ }
540
+
541
+ $user = get_userdata( (int) $user_id );
542
+ $username = $user->user_login;
543
+ $title = $this->core->template_tags_user( $title, $user );
544
+ unset( $user );
545
+
546
+ // Adjust title
547
+ if ( $buy_self === true ) {
548
+ $title = str_replace( '%display_name%', __( 'Yourself', 'mycred' ), $title );
549
+ }
550
+
551
+ // Button
552
+ if ( !empty( $gateway ) ) {
553
+ $gateway_title = $installed[$gateway]['title'];
554
+
555
+ $button = explode( ' ', $gateway_title );
556
+ $button = $button[0];
557
+ $button = __( 'Buy with', 'mycred' ) . ' ' . $button;
558
+ $classes[] = $gateway;
559
+ }
560
+ else {
561
+ $button = __( 'Buy Now', 'mycred' );
562
+ }
563
+
564
+ // Start constructing form with title and submit button
565
+ $form = '
566
+ <form method="post" action="" class="' . implode( ' ', $classes ) . '">
567
+ <input type="submit" name="submit" value="' . $button . '" class="mycred-buy button large" />';
568
+
569
+ // Gifting a specific user or post author
570
+ if ( $buy_author ) {
571
+ $form .= '
572
+ <input type="hidden" name="post_id" value="' . $post_id . '" />';
573
+ }
574
+
575
+ // Gift to a specific member
576
+ elseif ( $buy_member ) {
577
+ $form .= '
578
+ <input type="hidden" name="gift_to" value="' . $user_id . '" />';
579
+ }
580
+
581
+ // Gifting is allowed so we can select someone
582
+ elseif ( $buy_others ) {
583
+ // Select gift recipient from a drop-down
584
+ if ( $gift_to == 'select' ) {
585
+ $select = '<select name="gift_to">';
586
+ $blog_users = get_users();
587
+ if ( !empty( $blog_users ) ) {
588
+ foreach ( $blog_users as $blog_user ) {
589
+ if ( $this->core->exclude_user( $blog_user->ID ) || $blog_user->ID === get_current_user_id() ) continue;
590
+ $select .= '<option value="' . $blog_user->ID . '">' . $blog_user->display_name . '</option>';
591
+ }
592
+ unset( $blog_users );
593
+ }
594
+ else {
595
+ $select .= '<option value="">' . __( 'No users found', 'mycred' ) . '</option>';
596
+ }
597
+ $select .= '</select>';
598
+ }
599
+ // Nominate user
600
+ else {
601
+ $select = '<input type="text" name="gift_to" value="" class="pick-user" size="20" />';
602
+ }
603
+ $form .= '
604
+ <div class="select-to">
605
+ <label>' . __( 'To', 'mycred' ) . ':</label>
606
+ ' . $select . '
607
+ </div>';
608
+ }
609
+
610
+ // Amount
611
+ $no_of_amounts = 0;
612
+ $minimum = $this->core->number( $this->core->buy_creds['minimum'] );
613
+ if ( !empty( $amount ) )
614
+ $no_of_amounts = sizeof( array_filter( explode( ',', $amount ), create_function( '$a', 'return !empty($a);' ) ) );
615
+
616
+ // Multiple amounts set
617
+ if ( $no_of_amounts > 1 ) {
618
+ // Let user select from this list of amounts
619
+ $amount = explode( ',', $amount );
620
+ $form .= '
621
+ <div class="select-amount">
622
+ <label>' . __( 'Select Amount', 'mycred' ) . ':</label>
623
+ <select name="amount">';
624
+
625
+ foreach ( $amount as $number ) {
626
+ $form .= '<option value="' . $number . '">' . $number . '</option>';
627
+ }
628
+
629
+ $form .= '
630
+ </select>
631
+ </div>';
632
+ }
633
+
634
+ // One amount set
635
+ elseif ( (int) $no_of_amounts == 1 ) {
636
+ $form .= '
637
+ <input type="hidden" name="amount" value="' . $this->core->number( $amount ) . '" />';
638
+ }
639
+
640
+ // No amount set let user pick
641
+ else {
642
+ $form .= '
643
+ <div class="select-amount">
644
+ <label>' . __( 'Amount', 'mycred' ) . ':</label>
645
+ <input type="text" name="amount" value="' . $minimum . '" size="5" /><br />
646
+ <em>' . __( 'min.', 'mycred' ) . ' ' . $minimum . '</em>
647
+ </div>';
648
+ }
649
+
650
+ // Gateways
651
+ if ( empty( $gateway ) ) {
652
+ $form .= '
653
+ <div class="select-gateway">
654
+ <label>' . __( 'Select Gateway', 'mycred' ) . ':</label>
655
+ <select name="mycred_buy">';
656
+
657
+ foreach ( $installed as $gateway_id => $data ) {
658
+ if ( !$this->is_active( $gateway_id ) ) continue;
659
+ //if ( !$this->is_active( $gateway_id ) ) continue;
660
+ $form .= '<option value="' . $gateway_id . '">' . $data['title'] . '</option>';
661
+ }
662
+
663
+ $form .= '
664
+ </select>
665
+ </div>';
666
+ }
667
+ else {
668
+ $form .= '
669
+ <input type="hidden" name="mycred_buy" value="' . $gateway . '" />';
670
+ }
671
+
672
+ $form .= '
673
+ <input type="hidden" name="token" value="' . wp_create_nonce( 'mycred-buy-creds' ) . '" />
674
+ </form>';
675
+
676
+ return $form;
677
+ }
678
+
679
+ /**
680
+ * Prep Shortcode Title
681
+ * @since 0.1
682
+ * @version 1.0
683
+ */
684
+ public function prep_shortcode_title( $string = '' ) {
685
+ $string = $this->core->allowed_tags( $string, false );
686
+ $string = trim( $string );
687
+ $title = $this->core->template_tags_general( $string );
688
+ return $title;
689
+ }
690
+
691
+ /**
692
+ * Prep Shortcode Amount
693
+ * @since 0.1
694
+ * @version 1.0
695
+ */
696
+ public function prep_shortcode_amount( $amount = '' ) {
697
+ $amount = $this->core->number( $amount );
698
+ $minimum = $this->core->number( $this->core->buy_creds['minimum'] );
699
+ if ( empty( $amount ) || $amount < $minimum )
700
+ return $minimum;
701
+ else
702
+ return $amount;
703
+ }
704
+
705
+ /**
706
+ * Prep Shortcode Gifting
707
+ * @since 0.1
708
+ * @version 1.0
709
+ */
710
+ public function prep_shortcode_gifting( $gift_to = '' ) {
711
+ if ( empty( $gift_to ) ) return $gift_to;
712
+
713
+ if ( $this->core->buy_creds['gifting']['authors'] == 1 && $gift_to == 'author' && in_the_loop() ) {
714
+ return $GLOBALS['post']->post_author;
715
+ }
716
+
717
+ if ( $this->core->buy_creds['gifting']['members'] == 1 ) {
718
+ return abs( $gift_to );
719
+ }
720
+
721
+ return false;
722
+ }
723
+
724
+ /**
725
+ * Contextual Help
726
+ * @since 0.1
727
+ * @version 1.0
728
+ */
729
+ public function help( $screen_id, $screen ) {
730
+ if ( $screen_id == 'mycred_page_myCRED_page_settings' ) {
731
+ $screen->add_help_tab( array(
732
+ 'id' => 'mycred-buy-creds',
733
+ 'title' => __( 'Buy Creds', 'mycred' ),
734
+ 'content' => '
735
+ <p>' . $this->core->template_tags_general( __( 'This add-on lets your users buy %_plural% using a payment gateway.', 'mycred' ) ) . '</p>
736
+ <p><strong>' . __( 'Supported Gateways', 'mycred' ) . '</strong></p>
737
+ <p>' . __( 'myCRED supports purchases though: PayPal Payments Standard, Skrill (Moneybookers) and NETbilling. Let us know if you want to add other payment gateways.', 'mycred' ) . '</p>
738
+ <p><strong>' . __( 'Usage', 'mycred' ) . '</strong></p>
739
+ <p>' . __( 'Purchases can be made using one of the following shortcodes:', 'mycred' ) . '</p>
740
+ <ul>
741
+ <li><code>mycred_buy</code> ' . __( 'When you want to sell a pre-set amount, sell to a specific user or use a specific gateway.<br />For more information on how to use the shortcode, please visit the', 'mycred' ) . ' <a href="http://mycred.merovingi.com/shortcodes/mycred_buy/" target="_blank">myCRED Codex</a>.</li>
742
+ <li><code>mycred_buy_form</code> ' . __( 'When you want to give your users the option to select an amount, gateway or recipient.<br />For more information on how to use the shortcode, please visit the', 'mycred' ) . ' <a href="http://mycred.merovingi.com/shortcodes/mycred_buy_form/" target="_blank">myCRED Codex</a>.</li>
743
+ </ul>'
744
+ ) );
745
+ }
746
+ elseif ( $screen_id == 'mycred_page_myCRED_page_gateways' ) {
747
+ $screen->add_help_tab( array(
748
+ 'id' => 'mycred-paypal',
749
+ 'title' => __( 'PayPal Payments Standard', 'mycred' ),
750
+ 'content' => '
751
+ <p><strong>' . __( 'Currency', 'mycred' ) . '</strong></p>
752
+ <p>' . __( 'Make sure you select a currency that your PayPal account supports. Otherwise transactions will not be approved until you login to your PayPal account and Accept each transaction! Purchases made in a currency that is not supported will not be applied to the buyer until you have resolved the issue.', 'mycred' ) . '</p>
753
+ <p><strong>' . __( 'Instant Payment Notifications', 'mycred' ) . '</strong></p>
754
+ <p>' . __( 'For this gateway to work, you must login to your PayPal account and under "Profile" > "Selling Tools" enable "Instant Payment Notifications". Make sure the "Notification URL" is set to the above address and that you have selected "Receive IPN messages (Enabled)".', 'mycred' ) . '</p>'
755
+ ) );
756
+ $screen->add_help_tab( array(
757
+ 'id' => 'mycred-skrill',
758
+ 'title' => __( 'Skrill', 'mycred' ),
759
+ 'content' => '
760
+ <p><strong>' . __( 'Sandbox Mode', 'mycred' ) . '</strong></p>
761
+ <p>' . __( 'Transactions made while Sandbox mode is active are real transactions! Remember to use your "Test Merchant Account" when Sandbox mode is active!', 'mycred' ) . '</p>
762
+ <p><strong>' . __( 'Checkout Page', 'mycred' ) . '</strong></p>
763
+ <p>' . __( 'By default all Skrill Merchant account accept payments via Bank Transfers. When a user selects this option, no points are awarded! You will need to manually award these once the bank transfer is completed.', 'mycred' ) . '</p>
764
+ <p>' . __( 'By default purchases made using Skrill will result in users having to signup for a Skrill account (if they do not have one already). You can contact Skrill Merchant Services and request to disable this feature.', 'mycred' ) . '</p>'
765
+ ) );
766
+ }
767
+ }
768
+ }
769
+ $buy_creds = new myCRED_Buy_CREDs();
770
+ $buy_creds->load();
771
+ }
772
+ ?>
addons/gateway/carts/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/gateway/carts/mycred-woocommerce.php ADDED
@@ -0,0 +1,401 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * WooCommerce Payment Gateway
5
+ *
6
+ * Custom Payment Gateway for WooCommerce.
7
+ * @see http://docs.woothemes.com/document/payment-gateway-api/
8
+ * @since 0.1
9
+ * @version 1.0
10
+ */
11
+ if ( !function_exists( 'mycred_init_woo_gateway' ) ) {
12
+ /**
13
+ * Construct Gateway
14
+ * @since 0.1
15
+ * @version 1.0
16
+ */
17
+ add_action( 'plugins_loaded', 'mycred_init_woo_gateway' );
18
+ function mycred_init_woo_gateway()
19
+ {
20
+ if ( !class_exists( 'WC_Payment_Gateway' ) ) return;
21
+ class WC_Gateway_myCRED extends WC_Payment_Gateway {
22
+
23
+ protected $mycred;
24
+
25
+ /**
26
+ * Constructor
27
+ */
28
+ public function __construct() {
29
+ $this->mycred = mycred_get_settings();
30
+
31
+ $this->id = 'mycred';
32
+ $this->icon = '';
33
+ $this->has_fields = false;
34
+ $this->method_title = __( 'myCRED', 'mycred' );
35
+ $this->method_description = __( 'Let users pay using their myCRED balance.', 'mycred' );
36
+
37
+ // Load the settings.
38
+ $this->init_form_fields();
39
+ $this->init_settings();
40
+
41
+ // Define user set variables
42
+ $this->title = $this->get_option( 'title' );
43
+ $this->description = $this->get_option( 'description' );
44
+ $this->exchange_rate = ( $this->use_exchange() ) ? (float) $this->get_option( 'exchange_rate' ) : 1;
45
+ $this->log_template = $this->get_option( 'log_template' );
46
+
47
+ // Actions
48
+ add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
49
+ add_action( 'woocommerce_thankyou_mycred', array( $this, 'thankyou_page' ) );
50
+ }
51
+
52
+ /**
53
+ * Initialise Gateway Settings Form Fields
54
+ * @since 0.1
55
+ * @version 1.0
56
+ */
57
+ function init_form_fields() {
58
+ // Fields
59
+ $fields['enabled'] = array(
60
+ 'title' => __( 'Enable/Disable', 'mycred' ),
61
+ 'type' => 'checkbox',
62
+ 'label' => __( 'Enable myCRED Payment', 'mycred' ),
63
+ 'default' => 'no',
64
+ 'description' => __( 'Users who are not logged in or excluded from using myCRED will not have access to this gateway!', 'mycred' )
65
+ );
66
+ $fields['title'] = array(
67
+ 'title' => __( 'Title', 'mycred' ),
68
+ 'type' => 'text',
69
+ 'description' => __( 'Title to show for this payment option.', 'mycred' ),
70
+ 'default' => __( 'Pay with myCRED', 'mycred' ),
71
+ 'desc_tip' => true
72
+ );
73
+ $fields['description'] = array(
74
+ 'title' => __( 'Customer Message', 'mycred' ),
75
+ 'type' => 'textarea',
76
+ 'default' => $this->mycred->template_tags_general( __( 'Deduct the amount from your %_plural% balance.', 'mycred' ) )
77
+ );
78
+ $fields['log_template'] = array(
79
+ 'title' => __( 'Log Template', 'mycred' ),
80
+ 'type' => 'text',
81
+ 'description' => __( 'Log entry template for successful payments. Available template tags: %order_id%, %order_link%', 'mycred' ),
82
+ 'default' => __( 'Payment for Order: #%order_id%', 'mycred' )
83
+ );
84
+
85
+ // Only add exchange rate if the currecy is not set to mycred
86
+ if ( $this->use_exchange() ) {
87
+ $exchange_desc = __( 'How much is 1 %_singular% worth in %currency%?', 'mycred' );
88
+ $exchange_desc = $this->mycred->template_tags_general( $exchange_desc );
89
+ $exchange_desc = str_replace( '%currency%', get_woocommerce_currency(), $exchange_desc );
90
+
91
+ $fields['exchange_rate'] = array(
92
+ 'title' => __( 'Exchange Rate', 'mycred' ),
93
+ 'type' => 'text',
94
+ 'description' => $exchange_desc,
95
+ 'default' => 1,
96
+ 'desc_tip' => true
97
+ );
98
+ $fields['show_total'] = array(
99
+ 'title' => __( 'Show Total', 'mycred' ),
100
+ 'type' => 'select',
101
+ 'label' => $this->mycred->template_tags_general( __( 'Show the final price in %_plural% .', 'mycred' ) ),
102
+ 'options' => array(
103
+ '' => __( 'Do not show', 'mycred' ),
104
+ 'cart' => __( 'Show in Cart', 'mycred' ),
105
+ 'checkout' => __( 'Show on Checkout Page', 'mycred' ),
106
+ 'all' => __( 'Show in Cart and on Checkout Page', 'mycred' )
107
+ ),
108
+ 'default' => ''
109
+ );
110
+ $fields['total_label'] = array(
111
+ 'title' => __( 'Label', 'mycred' ),
112
+ 'type' => 'text',
113
+ 'default' => $this->mycred->template_tags_general( __( 'Order Total in %_plural%', 'mycred' ) ),
114
+ 'desc_tip' => true
115
+ );
116
+ }
117
+
118
+ $this->form_fields = apply_filters( 'mycred_woo_fields', $fields, $this );
119
+ }
120
+
121
+ /**
122
+ * Use Exchange
123
+ * Checks to see if exchange is needed.
124
+ * @since 0.1
125
+ * @version 1.0
126
+ */
127
+ function use_exchange() {
128
+ $currency = get_woocommerce_currency();
129
+ if ( $currency == 'MYC' ) return false;
130
+ return true;
131
+ }
132
+
133
+ /**
134
+ * Admin Panel Options
135
+ * @since 0.1
136
+ * @version 1.0
137
+ */
138
+ public function admin_options() { ?>
139
+
140
+ <h3><?php _e( 'myCRED Payment', 'mycred' ); ?></h3>
141
+ <p><?php echo $this->mycred->template_tags_general( __( 'Allows users to pay using their myCRED %_singular% balance. Please note that users with insufficient funds and users who are not logged in will not see this payment gateway on the checkout page.', 'mycred' ) ); ?></p>
142
+ <table class="form-table">
143
+ <?php
144
+ // Generate the HTML For the settings form.
145
+ $this->generate_settings_html(); ?>
146
+
147
+ </table><!--/.form-table-->
148
+ <?php
149
+ }
150
+
151
+ /**
152
+ * Process Payment
153
+ * @since 0.1
154
+ * @version 1.0
155
+ */
156
+ function process_payment( $order_id ) {
157
+ global $woocommerce;
158
+ $cui = get_current_user_id();
159
+
160
+ // Make sure we are still logged in
161
+ if ( !is_user_logged_in() ) {
162
+ $woocommerce->add_error( $this->mycred->template_tags_general( __( 'You must be logged in to pay with %_plural%', 'mycred' ) ) );
163
+ return;
164
+ }
165
+
166
+ // Make sure we have not been excluded
167
+ if ( $this->mycred->exclude_user( $cui ) ) {
168
+ $woocommerce->add_error( $this->mycred->template_tags_general( __( 'You can not use this gateway. Please try a different payment option.', 'mycred' ) ) );
169
+ return;
170
+ }
171
+
172
+ // Grab Order
173
+ $order = new WC_Order( $order_id );
174
+
175
+ // Cost
176
+ $cost = $this->mycred->apply_exchange_rate( $order->order_total, $this->exchange_rate );
177
+
178
+ // Check funds
179
+ if ( $this->mycred->get_users_cred( $cui ) < $cost ) {
180
+ $woocommerce->add_error( $this->mycred->template_tags_general( __( 'Insufficient funds. Please try a different payment option.', 'mycred' ) ) );
181
+ return;
182
+ }
183
+
184
+ // Charge
185
+ $this->mycred->add_creds( 'woocommerce_payment', $cui, '-' . $cost, $this->log_template, $order_id, array( 'ref_type' => 'post' ) );
186
+ $order->payment_complete();
187
+
188
+ // Return the good news
189
+ return array(
190
+ 'result' => 'success',
191
+ 'redirect' => $this->get_return_url( $order )
192
+ );
193
+ }
194
+
195
+ /**
196
+ * Thank You Page
197
+ * @since 0.1
198
+ * @version 1.0
199
+ */
200
+ function thankyou_page() {
201
+ echo __( 'Your account has successfully been charged.', 'mycred' );
202
+ }
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Log Entry
208
+ * @since 0.1
209
+ * @version 1.0
210
+ */
211
+ add_filter( 'mycred_parse_log_entry_woocommerce_payment', 'mycred_woo_log_entry', 90, 2 );
212
+ function mycred_woo_log_entry( $content, $log_entry )
213
+ {
214
+ // Prep
215
+ $mycred = mycred_get_settings();
216
+ $order = new WC_Order( $log_entry->ref_id );
217
+ $cui = get_current_user_id();
218
+
219
+ // Order ID
220
+ $content = str_replace( '%order_id%', $order->id, $content );
221
+
222
+ // Link to order if we can edit plugin or are the user who made the order
223
+ if ( $cui == $order->user_id || $mycred->can_edit_plugin( $cui ) ) {
224
+ $url = esc_url( add_query_arg( 'order', $order->id, get_permalink( woocommerce_get_page_id( 'view_order' ) ) ) );
225
+ $content = str_replace( '%order_link%', '<a href="' . $url . '">#' . $order->id . '</a>', $content );
226
+ }
227
+ else {
228
+ $content = str_replace( '%order_link%', '#' . $order->id, $content );
229
+ }
230
+
231
+ return $content;
232
+ }
233
+
234
+ /**
235
+ * Register Gateway
236
+ * @since 0.1
237
+ * @version 1.0
238
+ */
239
+ add_filter( 'woocommerce_payment_gateways', 'mycred_register_woo_gateway' );
240
+ function mycred_register_woo_gateway( $methods )
241
+ {
242
+ $methods[] = 'WC_Gateway_myCRED';
243
+ return $methods;
244
+ }
245
+
246
+ /**
247
+ * Available Gateways
248
+ * "Removes" this gateway as a payment option if:
249
+ * - User is not logged in
250
+ * - User is excluded
251
+ * - Users balance is too low
252
+ *
253
+ * @since 0.1
254
+ * @version 1.0
255
+ */
256
+ add_filter( 'woocommerce_available_payment_gateways', 'mycred_woo_available_gateways' );
257
+ function mycred_woo_available_gateways( $gateways )
258
+ {
259
+ if ( !isset( $gateways['mycred'] ) ) return $gateways;
260
+
261
+ // Check if we are logged in
262
+ if ( !is_user_logged_in() ) {
263
+ unset( $gateways['mycred'] );
264
+ return $gateways;
265
+ }
266
+
267
+ // Get myCRED
268
+ $mycred = mycred_get_settings();
269
+ $cui = get_current_user_id();
270
+
271
+ // Check if we are excluded from myCRED usage
272
+ if ( $mycred->exclude_user( $cui ) ) {
273
+ unset( $gateways['mycred'] );
274
+ unset( $mycred );
275
+ return $gateways;
276
+ }
277
+
278
+ global $woocommerce;
279
+
280
+ // Calculate cost in CREDs
281
+ $cost = $mycred->apply_exchange_rate( $mycred->number( $woocommerce->cart->total ), $gateways['mycred']->get_option( 'exchange_rate' ) );
282
+
283
+ // Check if we have enough points
284
+ if ( $mycred->get_users_cred( $cui ) < $cost ) {
285
+ $gateways['mycred']->enabled = 'no';
286
+ }
287
+
288
+ // Clean up and return
289
+ unset( $mycred );
290
+ return $gateways;
291
+ }
292
+
293
+ /**
294
+ * Add Currency
295
+ * Adds myCRED as one form of currency.
296
+ * @since 0.1
297
+ * @version 1.0
298
+ */
299
+ add_filter( 'woocommerce_currencies', 'mycred_woo_add_currency' );
300
+ function mycred_woo_add_currency( $currencies )
301
+ {
302
+ $mycred = mycred_get_settings();
303
+ $currencies['MYC'] = $mycred->plural();
304
+ unset( $mycred );
305
+ return $currencies;
306
+ }
307
+
308
+ /**
309
+ * Currency Symbol
310
+ * Appends the myCRED prefix or suffix to the amount.
311
+ * @since 0.1
312
+ * @version 1.0
313
+ */
314
+ add_filter( 'woocommerce_currency_symbol', 'mycred_woo_currency', 10, 2 );
315
+ function mycred_woo_currency( $currency_symbol, $currency )
316
+ {
317
+ switch ( $currency ) {
318
+ case 'MYC':
319
+ $mycred = mycred_get_settings();
320
+ if ( !empty( $mycred->before ) )
321
+ $currency_symbol = $mycred->before;
322
+ elseif ( !empty( $mycred->after ) )
323
+ $currency_symbol = $mycred->after;
324
+ break;
325
+ }
326
+ return $currency_symbol;
327
+ }
328
+
329
+ /**
330
+ * Add CRED Cost
331
+ * Appends the cost in myCRED format.
332
+ * @since 0.1
333
+ * @version 1.0
334
+ */
335
+ add_action( 'woocommerce_review_order_after_order_total', 'mycred_woo_after_order_total' );
336
+ add_action( 'woocommerce_cart_totals_after_order_total', 'mycred_woo_after_order_total' );
337
+ function mycred_woo_after_order_total()
338
+ {
339
+ if ( !is_user_logged_in() ) return;
340
+
341
+ $mycred = mycred_get_settings();
342
+ $cui = get_current_user_id();
343
+
344
+ if ( $mycred->exclude_user( $cui ) ) return;
345
+
346
+ // Only available for logged in non-excluded users
347
+ global $woocommerce;
348
+
349
+ $available_gateways = $woocommerce->payment_gateways->get_available_payment_gateways();
350
+ if ( !isset( $available_gateways['mycred'] ) ) return;
351
+
352
+ // Check if enabled
353
+ $show = $available_gateways['mycred']->get_option( 'show_total' );
354
+ if ( empty( $show ) ) return;
355
+ elseif ( $show === 'cart' && !is_cart() ) return;
356
+ elseif ( $show === 'checkout' && !is_checkout() ) return;
357
+
358
+ // Make sure myCRED is not the currency used
359
+ $currency = get_woocommerce_currency();
360
+ if ( $currency != 'MYC' ) {
361
+
362
+ // Apply Exchange Rate
363
+ $rate = $available_gateways['mycred']->get_option( 'exchange_rate' );
364
+ $mycred_cost = $mycred->apply_exchange_rate( $woocommerce->cart->total, $rate ); ?>
365
+
366
+ <tr class="total">
367
+ <th><strong><?php echo $mycred->template_tags_general( $available_gateways['mycred']->get_option( 'total_label' ) ); ?></strong></th>
368
+ <td>
369
+ <?php
370
+
371
+ // Balance
372
+ $balance = $mycred->get_users_cred( $cui );
373
+ $balance = $mycred->number( $balance );
374
+
375
+ // Insufficient Funds
376
+ if ( $balance < $mycred_cost ) { ?>
377
+
378
+ <strong class="mycred-low-funds" style="color:red;"><?php echo $mycred->format_creds( $mycred_cost ); ?></strong>
379
+ <?php
380
+ }
381
+ // Funds exist
382
+ else { ?>
383
+
384
+ <strong class="mycred-funds"><?php echo $mycred->format_creds( $mycred_cost ); ?></strong>
385
+ <?php
386
+ } ?>
387
+
388
+ <small class="mycred-current-balance"><?php
389
+
390
+ // Current balance
391
+ echo sprintf( '( %1s: %2s )', __( 'Your current balance', 'mycred' ), $mycred->format_creds( $balance ) ); ?></small>
392
+ </td>
393
+ </tr>
394
+ <?php
395
+ unset( $available_gateways );
396
+ }
397
+
398
+ unset( $mycred );
399
+ }
400
+ }
401
+ ?>
addons/gateway/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/gateway/myCRED-addon-gateway.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Addon: Gateway
4
+ * Addon URI: http://mycred.merovingi.com
5
+ * Version: 1.0
6
+ * Description: Let your users pay using their <strong>my</strong>CRED points balance. Supported Carts: WooCommerce.
7
+ * Author: Gabriel S Merovingi
8
+ * Author URI: http://www.merovingi.com
9
+ */
10
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
11
+ define( 'myCRED_GATE', __FILE__ );
12
+ define( 'myCRED_GATE_DIR', myCRED_ADDONS_DIR . 'gateway/' );
13
+ define( 'myCRED_GATE_ASSETS_DIR', myCRED_GATE_DIR . 'assets/' );
14
+ define( 'myCRED_GATE_CART_DIR', myCRED_GATE_DIR . 'carts/' );
15
+ /**
16
+ * WooCommerce
17
+ */
18
+ require_once( myCRED_GATE_CART_DIR . 'mycred-woocommerce.php' );
19
+ ?>
addons/import/includes/File-CSV-DataSource.php ADDED
@@ -0,0 +1,834 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
3
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
4
+ /**
5
+ * CSV Import Class
6
+ *
7
+ * LICENSE: The MIT License
8
+ *
9
+ * Copyright (c) <2008> <Kazuyoshi Tlacaelel>
10
+ *
11
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ * of this software and associated documentation files (the "Software"), to deal
13
+ * in the Software without restriction, including without limitation the rights
14
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ * copies of the Software, and to permit persons to whom the Software is
16
+ * furnished to do so, subject to the following conditions:
17
+ *
18
+ * The above copyright notice and this permission notice shall be included in
19
+ * all copies or substantial portions of the Software.
20
+ *
21
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27
+ * THE SOFTWARE.
28
+ *
29
+ * @author Kazuyoshi Tlacaelel <kazu.dev@gmail.com>
30
+ * @edited Gabriel Sebastian Merovingi
31
+ * @copyright 2008 Kazuyoshi Tlacaelel
32
+ * @license The MIT License
33
+ * @version 1.0.1
34
+ * @link http://code.google.com/p/php-csv-parser/
35
+ */
36
+ if ( !class_exists( 'File_CSV_DataSource' ) ) {
37
+ class File_CSV_DataSource {
38
+
39
+ /**
40
+ * CSV Parsing Default-settings
41
+ * @var array
42
+ * @access public
43
+ */
44
+ public $settings = array(
45
+ 'delimiter' => ',',
46
+ 'eol' => ";",
47
+ 'length' => 999999,
48
+ 'escape' => '"'
49
+ );
50
+
51
+ /**
52
+ * Imported Data from CSV
53
+ * @var array
54
+ * @access protected
55
+ */
56
+ protected $rows = array();
57
+
58
+ /**
59
+ * CSV File to parse
60
+ * @var string
61
+ * @access protected
62
+ */
63
+ protected $_filename = '';
64
+
65
+ /**
66
+ * CSV Headers to parse
67
+ * @var array
68
+ * @access protected
69
+ */
70
+ protected $headers = array();
71
+
72
+ /**
73
+ * Data Load Initialize
74
+ * @param mixed $filename please look at the load() method
75
+ * @access public
76
+ * @see load()
77
+ * @return void
78
+ */
79
+ public function __construct( $filename = null ) {
80
+ $this->load( $filename );
81
+ }
82
+
83
+ /**
84
+ * CSV File Loader
85
+ * Indicates the object which file is to be loaded
86
+ *
87
+ * @param string $filename the csv filename to load
88
+ * @access public
89
+ * @return boolean true if file was loaded successfully
90
+ * @see isSymmetric(), getAsymmetricRows(), symmetrize()
91
+ */
92
+ public function load( $filename ) {
93
+ $this->_filename = $filename;
94
+ $this->flush();
95
+ return $this->parse();
96
+ }
97
+
98
+ /**
99
+ * Settings Alterator
100
+ * Lets you define different settings for scanning given array will override the internal settings
101
+ *
102
+ * @param mixed $array containing settings to use
103
+ * @access public
104
+ * @return boolean true if changes where applyed successfully
105
+ * @see $settings
106
+ */
107
+ public function settings( $array ) {
108
+ $this->settings = array_merge( $this->settings, $array );
109
+ }
110
+
111
+ /**
112
+ * Header Fetcher
113
+ * Gets csv headers into an array
114
+ *
115
+ * @access public
116
+ * @return array
117
+ */
118
+ public function getHeaders() {
119
+ return $this->headers;
120
+ }
121
+
122
+ /**
123
+ * Header Counter
124
+ * Retrives the total number of loaded headers
125
+ *
126
+ * @access public
127
+ * @return integer gets the length of headers
128
+ */
129
+ public function countHeaders() {
130
+ return count( $this->headers );
131
+ }
132
+
133
+ /**
134
+ * Header and Row Relationship Builder
135
+ * Attempts to create a relationship for every single cell that was captured and its corresponding header.
136
+ * The sample below shows how a connection/relationship is built.
137
+ *
138
+ * @param array $columns the columns to connect, if nothing is given all headers will be used to create a connection
139
+ * @access public
140
+ * @return array If the data is not symmetric an empty array will be returned instead
141
+ * @see isSymmetric(), getAsymmetricRows(), symmetrize(), getHeaders()
142
+ */
143
+ public function connect( $columns = array() ) {
144
+ if ( !$this->isSymmetric() ) return array();
145
+
146
+ if ( !is_array( $columns ) ) return array();
147
+
148
+ if ( $columns === array() ) $columns = $this->headers;
149
+
150
+ $ret_arr = array();
151
+
152
+ foreach ( $this->rows as $record ) {
153
+ $item_array = array();
154
+ foreach ( $record as $column => $value ) {
155
+ $header = $this->headers[$column];
156
+ if ( in_array( $header, $columns ) ) {
157
+ $item_array[$header] = $value;
158
+ }
159
+ }
160
+
161
+ // do not append empty results
162
+ if ( $item_array !== array() )
163
+ array_push( $ret_arr, $item_array );
164
+ }
165
+
166
+ return $ret_arr;
167
+ }
168
+
169
+ /**
170
+ * Data Length/Symmetry Checker
171
+ * Tells if the headers and all of the contents length match.
172
+ *
173
+ * Note: there is a lot of methods that won't work if data is not symmetric this method is very important!
174
+ *
175
+ * @access public
176
+ * @return boolean
177
+ * @see symmetrize(), getAsymmetricRows(), isSymmetric()
178
+ */
179
+ public function isSymmetric() {
180
+ $hc = count( $this->headers );
181
+ foreach ( $this->rows as $row ) {
182
+ if ( count( $row ) != $hc ) {
183
+ return false;
184
+ }
185
+ }
186
+ return true;
187
+ }
188
+
189
+ /**
190
+ * Asymmetric Data Fetcher
191
+ * Finds the rows that do not match the headers length lets assume that we add one more row to our csv file.
192
+ * that has only two values. Something like
193
+ *
194
+ * @access public
195
+ * @return array filled with rows that do not match headers
196
+ * @see getHeaders(), symmetrize(), isSymmetric(),
197
+ * getAsymmetricRows()
198
+ */
199
+ public function getAsymmetricRows() {
200
+ $ret_arr = array();
201
+ $hc = count( $this->headers );
202
+ foreach ( $this->rows as $row ) {
203
+ if ( count( $row ) != $hc ) {
204
+ $ret_arr[] = $row;
205
+ }
206
+ }
207
+ return $ret_arr;
208
+ }
209
+
210
+ /**
211
+ * All Rows Length Equalizer
212
+ * Makes the length of all rows and headers the same. If no $value is given
213
+ * all unexistent cells will be filled with empty spaces
214
+ *
215
+ * @param mixed $value the value to fill the unexistent cells
216
+ * @access public
217
+ * @return array
218
+ * @see isSymmetric(), getAsymmetricRows(), symmetrize()
219
+ */
220
+ public function symmetrize( $value = '' ) {
221
+ $max_length = 0;
222
+ $headers_length = count( $this->headers );
223
+
224
+ foreach ( $this->rows as $row ) {
225
+ $row_length = count( $row );
226
+ if ( $max_length < $row_length ) {
227
+ $max_length = $row_length;
228
+ }
229
+ }
230
+
231
+ if ( $max_length < $headers_length ) $max_length = $headers_length;
232
+
233
+ foreach ( $this->rows as $key => $row ) {
234
+ $this->rows[$key] = array_pad( $row, $max_length, $value );
235
+ }
236
+
237
+ $this->headers = array_pad( $this->headers, $max_length, $value );
238
+ }
239
+
240
+ /**
241
+ * Grid Walker
242
+ * Travels through the whole dataset executing a callback per each cell
243
+ *
244
+ * Note: callback functions get the value of the cell as an argument, and whatever that
245
+ * callback returns will be used to replace the current value of that cell.
246
+ *
247
+ * @param string $callback the callback function to be called per each cell in the dataset.
248
+ * @access public
249
+ * @return void
250
+ * @see walkColumn(), walkRow(), fillColumn(), fillRow(), fillCell()
251
+ */
252
+ public function walkGrid( $callback ) {
253
+ foreach ( array_keys( $this->getRows() ) as $key ) {
254
+ if ( !$this->walkRow( $key, $callback ) ) {
255
+ return false;
256
+ }
257
+ }
258
+ return true;
259
+ }
260
+
261
+ /**
262
+ * Column Fetcher
263
+ * Gets all the data for a specific column identified by $name
264
+ *
265
+ * Note! $name is the same as the items returned by getHeaders()
266
+ *
267
+ * @param string $name the name of the column to fetch
268
+ * @access public
269
+ * @return array filled with values of a column
270
+ * @see getHeaders(), fillColumn(), appendColumn(), getCell(), getRows(),
271
+ * getRow(), hasColumn()
272
+ */
273
+ public function getColumn( $name ) {
274
+ if ( !in_array( $name, $this->headers ) ) return array();
275
+
276
+ $ret_arr = array();
277
+ $key = array_search( $name, $this->headers, true );
278
+ foreach ( $this->rows as $data ) {
279
+ $ret_arr[] = $data[$key];
280
+ }
281
+ return $ret_arr;
282
+ }
283
+
284
+ /**
285
+ * Column Existance Checker
286
+ * Checks if a column exists, columns are identified by their header name.
287
+ *
288
+ * @param string $string an item returned by getHeaders()
289
+ * @access public
290
+ * @return boolean
291
+ * @see getHeaders()
292
+ */
293
+ public function hasColumn( $string ) {
294
+ return in_array( $string, $this->headers );
295
+ }
296
+
297
+ /**
298
+ * Column Appender
299
+ * Appends a column and each or all values in it can be dinamically filled. Only when the $values argument is given.
300
+ *
301
+ * @param string $column an item returned by getHeaders()
302
+ * @param mixed $values same as fillColumn()
303
+ * @access public
304
+ * @return boolean
305
+ * @see getHeaders(), fillColumn(), fillCell(), createHeaders(),
306
+ * setHeaders()
307
+ */
308
+ public function appendColumn( $column, $values = null ) {
309
+ if ( $this->hasColumn( $column ) ) return false;
310
+
311
+ $this->headers[] = $column;
312
+ $length = $this->countHeaders();
313
+ $rows = array();
314
+
315
+ foreach ( $this->rows as $row ) {
316
+ $rows[] = array_pad( $row, $length, '' );
317
+ }
318
+
319
+ $this->rows = $rows;
320
+
321
+ if ( $values === null ) $values = '';
322
+
323
+ return $this->fillColumn( $column, $values );
324
+ }
325
+
326
+ /**
327
+ * Collumn Data Injector
328
+ * Fills alll the data in the given column with $values
329
+ *
330
+ * @param mixed $column the column identified by a string
331
+ * @param mixed $values ither one of the following
332
+ * - (Number) will fill the whole column with the value of number
333
+ * - (String) will fill the whole column with the value of string
334
+ * - (Array) will fill the while column with the values of array
335
+ * the array gets ignored if it does not match the length of rows
336
+ *
337
+ * @access public
338
+ * @return void
339
+ */
340
+ public function fillColumn( $column, $values = null ) {
341
+ if ( !$this->hasColumn( $column ) ) return false;
342
+
343
+ if ( $values === null ) return false;
344
+
345
+ if ( !$this->isSymmetric() ) return false;
346
+
347
+ $y = array_search( $column, $this->headers );
348
+
349
+ if ( is_numeric( $values ) || is_string( $values ) ) {
350
+ foreach ( range( 0, $this->countRows() -1 ) as $x ) {
351
+ $this->fillCell( $x, $y, $values );
352
+ }
353
+ return true;
354
+ }
355
+
356
+ if ( $values === array() ) return false;
357
+
358
+ $length = $this->countRows();
359
+ if ( is_array( $values ) && $length == count( $values ) ) {
360
+ for ( $x = 0; $x < $length; $x++ ) {
361
+ $this->fillCell( $x, $y, $values[$x] );
362
+ }
363
+ return true;
364
+ }
365
+
366
+ return false;
367
+ }
368
+
369
+ /**
370
+ * Column Remover
371
+ * Completly removes a whole column identified by $name
372
+ * Note: that this function will only work if data is symmetric.
373
+ *
374
+ * @param string $name same as the ones returned by getHeaders();
375
+ * @access public
376
+ * @return boolean
377
+ * @see hasColumn(), getHeaders(), createHeaders(), setHeaders(),
378
+ * isSymmetric(), getAsymmetricRows()
379
+ */
380
+ public function removeColumn( $name ) {
381
+ if ( !in_array( $name, $this->headers ) ) return false;
382
+
383
+ if ( !$this->isSymmetric() ) return false;
384
+
385
+ $key = array_search( $name, $this->headers );
386
+ unset( $this->headers[$key] );
387
+ $this->resetKeys( $this->headers );
388
+
389
+ foreach ( $this->rows as $target => $row ) {
390
+ unset( $this->rows[$target][$key] );
391
+ $this->resetKeys( $this->rows[$target] );
392
+ }
393
+
394
+ return $this->isSymmetric();
395
+ }
396
+
397
+ /**
398
+ * Column Walker
399
+ * Goes through the whole column and executes a callback for each
400
+ * one of the cells in it.
401
+ *
402
+ * Note: callback functions get the value of the cell as an
403
+ * argument, and whatever that callback returns will be used to
404
+ * replace the current value of that cell.
405
+ *
406
+ * @param string $name the header name used to identify the column
407
+ * @param string $callback the callback function to be called per
408
+ * each cell value
409
+ *
410
+ * @access public
411
+ * @return boolean
412
+ * @see getHeaders(), fillColumn(), appendColumn()
413
+ */
414
+ public function walkColumn( $name, $callback ) {
415
+ if ( !$this->isSymmetric() ) return false;
416
+
417
+ if ( !$this->hasColumn( $name ) ) return false;
418
+
419
+ if ( !function_exists( $callback ) ) return false;
420
+
421
+ $column = $this->getColumn( $name );
422
+ foreach ( $column as $key => $cell ) {
423
+ $column[$key] = $callback( $cell );
424
+ }
425
+ return $this->fillColumn( $name, $column );
426
+ }
427
+
428
+ /**
429
+ * Cell Fetcher
430
+ * Gets the value of a specific cell by given coordinates
431
+ *
432
+ * Note: That indexes start with zero, and headers are not
433
+ * searched.
434
+ *
435
+ * @access public
436
+ * @return mixed|false the value of the cell or false if the cell does not exist
437
+ * @see getHeaders(), hasCell(), getRow(), getRows(), getColumn()
438
+ */
439
+ public function getCell( $x, $y ) {
440
+ if ( $this->hasCell( $x, $y ) ) {
441
+ $row = $this->getRow( $x );
442
+ return $row[$y];
443
+ }
444
+ return false;
445
+ }
446
+
447
+ /**
448
+ * Cell Value Filler
449
+ * Replaces the value of a specific cell
450
+ *
451
+ * @param integer $x the row to fetch
452
+ * @param integer $y the column to fetch
453
+ * @param mixed $value the value to fill the cell with
454
+ * @access public
455
+ * @return boolean
456
+ * @see hasCell(), getRow(), getRows(), getColumn()
457
+ */
458
+ public function fillCell( $x, $y, $value ) {
459
+ if ( !$this->hasCell( $x, $y ) ) return false;
460
+
461
+ $row = $this->getRow( $x );
462
+ $row[$y] = $value;
463
+ $this->rows[$x] = $row;
464
+
465
+ return true;
466
+ }
467
+
468
+ /**
469
+ * Checks if a coordinate is valid
470
+ *
471
+ * @param mixed $x the row to fetch
472
+ * @param mixed $y the column to fetch
473
+ * @access public
474
+ * @return void
475
+ */
476
+ public function hasCell( $x, $y ) {
477
+ $has_x = array_key_exists( $x, $this->rows );
478
+ $has_y = array_key_exists( $y, $this->headers );
479
+ return ( $has_x && $has_y );
480
+ }
481
+
482
+ /**
483
+ * Row Fetcher
484
+ * Note: first row is zero
485
+ *
486
+ * @param integer $number the row number to fetch
487
+ * @access public
488
+ * @return array the row identified by number, if $number does
489
+ * not exist an empty array is returned instead
490
+ */
491
+ public function getRow( $number ) {
492
+ $raw = $this->rows;
493
+ if ( array_key_exists( $number, $raw ) ) {
494
+ return $raw[$number];
495
+ }
496
+ return array();
497
+ }
498
+
499
+ /**
500
+ * Multiple Row Fetcher
501
+ * Extracts a rows in the following fashion
502
+ * - all rows if no $range argument is given
503
+ * - a range of rows identified by their key
504
+ * - if rows in range are not found nothing is retrived instead
505
+ * - if no rows were found an empty array is returned
506
+ *
507
+ * @param array $range a list of rows to retrive
508
+ * @access public
509
+ * @return array
510
+ */
511
+ public function getRows( $range = array() ) {
512
+ if ( is_array( $range ) && ( $range === array() ) ) return $this->rows;
513
+
514
+ if ( !is_array( $range ) ) return $this->rows;
515
+
516
+ $ret_arr = array();
517
+ foreach ( $this->rows as $key => $row ) {
518
+ if ( in_array( $key, $range ) ) {
519
+ $ret_arr[] = $row;
520
+ }
521
+ }
522
+ return $ret_arr;
523
+ }
524
+
525
+ /**
526
+ * Row Counter
527
+ * This function will exclude the headers
528
+ *
529
+ * @access public
530
+ * @return integer
531
+ */
532
+ public function countRows() {
533
+ return count( $this->rows );
534
+ }
535
+
536
+ /**
537
+ * Row Appender
538
+ * Aggregates one more row to the currently loaded dataset
539
+ *
540
+ * @param array $values the values to be appended to the row
541
+ * @access public
542
+ * @return boolean
543
+ */
544
+ public function appendRow( $values ) {
545
+ $this->rows[] = array();
546
+ $this->symmetrize();
547
+ return $this->fillRow( $this->countRows() - 1, $values );
548
+ }
549
+
550
+ /**
551
+ * Fill Row
552
+ * Replaces the contents of cells in one given row with $values.
553
+ *
554
+ * @param integer $row the row to fill identified by its key
555
+ * @param mixed $values the value to use, if a string or number
556
+ * is given the whole row will be replaced with this value.
557
+ * if an array is given instead the values will be used to fill
558
+ * the row. Only when the currently loaded dataset is symmetric
559
+ * @access public
560
+ * @return boolean
561
+ * @see isSymmetric(), getAsymmetricRows(), symmetrize(), fillColumn(),
562
+ * fillCell(), appendRow()
563
+ */
564
+ public function fillRow( $row, $values ) {
565
+ if ( !$this->hasRow( $row ) ) return false;
566
+
567
+ if ( is_string( $values ) || is_numeric( $values ) ) {
568
+ foreach ( $this->rows[$row] as $key => $cell ) {
569
+ $this->rows[$row][$key] = $values;
570
+ }
571
+ return true;
572
+ }
573
+
574
+ $eql_to_headers = ( $this->countHeaders() == count( $values ) );
575
+ if ( is_array( $values ) && $this->isSymmetric() && $eql_to_headers ) {
576
+ $this->rows[$row] = $values;
577
+ return true;
578
+ }
579
+
580
+ return false;
581
+ }
582
+
583
+ /**
584
+ * Row Existance Checker
585
+ * Scans currently loaded dataset and checks if a given row identified by $number exists
586
+ *
587
+ * @param mixed $number a numeric value that identifies the row you are trying to fetch.
588
+ * @access public
589
+ * @return boolean
590
+ * @see getRow(), getRows(), appendRow(), fillRow()
591
+ */
592
+ public function hasRow( $number ) {
593
+ return ( in_array( $number, array_keys( $this->rows ) ) );
594
+ }
595
+
596
+ /**
597
+ * Row Remover
598
+ * Removes one row from the current data set.
599
+ *
600
+ * @param mixed $number the key that identifies that row
601
+ * @access public
602
+ * @return boolean
603
+ * @see hasColumn(), getHeaders(), createHeaders(), setHeaders(),
604
+ * isSymmetric(), getAsymmetricRows()
605
+ */
606
+ public function removeRow( $number ) {
607
+ $cnt = $this->countRows();
608
+ $row = $this->getRow( $number );
609
+ if ( is_array( $row ) && ( $row != array() ) ) {
610
+ unset( $this->rows[$number] );
611
+ } else {
612
+ return false;
613
+ }
614
+ $this->resetKeys( $this->rows );
615
+ return ( $cnt == ( $this->countRows() + 1 ) );
616
+ }
617
+
618
+ /**
619
+ * Row Walker
620
+ * Goes through one full row of data and executes a callback function per each cell in that row.
621
+ *
622
+ * Note: callback functions get the value of the cell as an argument, and whatever that callback
623
+ * returns will be used to replace the current value of that cell.
624
+ *
625
+ * @param string|integer $row anything that is numeric is a valid row identificator. As long as
626
+ * it is within the range of the currently loaded dataset
627
+ * @param string $callback the callback function to be executed per each cell in a row
628
+ * @access public
629
+ * @return boolean
630
+ * - false if callback does not exist
631
+ * - false if row does not exits
632
+ */
633
+ public function walkRow( $row, $callback ) {
634
+ if ( !function_exists( $callback ) ) return false;
635
+
636
+ if ( $this->hasRow( $row ) ) {
637
+ foreach ( $this->getRow( $row ) as $key => $value ) {
638
+ $this->rows[$row][$key] = $callback( $value );
639
+ }
640
+ return true;
641
+ }
642
+ return false;
643
+ }
644
+
645
+ /**
646
+ * Raw Data as array
647
+ * Gets the data that was retrived from the csv file as an array
648
+ *
649
+ * Note: that changes and alterations made to rows, columns and values will
650
+ * also reflect on what this function retrives.
651
+ *
652
+ * @access public
653
+ * @return array
654
+ * @see connect(), getHeaders(), getRows(), isSymmetric(), getAsymmetricRows(),
655
+ * symmetrize()
656
+ */
657
+ public function getRawArray() {
658
+ $ret_arr = array();
659
+ $ret_arr[] = $this->headers;
660
+ foreach ( $this->rows as $row ) {
661
+ $ret_arr[] = $row;
662
+ }
663
+ return $ret_arr;
664
+ }
665
+
666
+ /**
667
+ * Header Creator
668
+ * Uses prefix and creates a header for each column suffixed by a numeric value
669
+ * By default the first row is interpreted as headers but if we have a csv file with
670
+ * data only and no headers it becomes really annoying to work with the current loaded data.
671
+ * This function will create a set dinamically generated headers and make the current
672
+ * headers accessable with the row handling functions
673
+ *
674
+ * Note: that the csv file contains only data but no headers
675
+ *
676
+ * @param string $prefix string to use as prefix for each independent header
677
+ * @access public
678
+ * @return boolean fails if data is not symmetric
679
+ * @see isSymmetric(), getAsymmetricRows()
680
+ */
681
+ public function createHeaders( $prefix ) {
682
+ if ( !$this->isSymmetric() ) return false;
683
+
684
+ $length = count( $this->headers ) + 1;
685
+ $this->moveHeadersToRows();
686
+
687
+ $ret_arr = array();
688
+ for ( $i = 1; $i < $length; $i++ ) {
689
+ $ret_arr[] = $prefix . "_$i";
690
+ }
691
+ $this->headers = $ret_arr;
692
+ return $this->isSymmetric();
693
+ }
694
+
695
+ /**
696
+ * Header Injector
697
+ * Uses a $list of values which wil be used to replace current headers.
698
+ *
699
+ * Note: that given $list must match the length of all rows.
700
+ * Known as symmetric. see isSymmetric() and getAsymmetricRows() methods
701
+ * Also, that current headers will be used as first row of data
702
+ * and consecuently all rows order will change with this action.
703
+ *
704
+ * @param array $list a collection of names to use as headers,
705
+ * @access public
706
+ * @return boolean fails if data is not symmetric
707
+ * @see isSymmetric(), getAsymmetricRows(), getHeaders(), createHeaders()
708
+ */
709
+ public function setHeaders( $list ) {
710
+ if ( !$this->isSymmetric() ) return false;
711
+
712
+ if ( !is_array( $list ) ) return false;
713
+
714
+ if ( count( $list ) != count( $this->headers ) ) return false;
715
+
716
+ $this->moveHeadersToRows();
717
+ $this->headers = $list;
718
+ return true;
719
+ }
720
+
721
+ /**
722
+ * CSV Parser
723
+ * Reads csv data and transforms it into php-data
724
+ *
725
+ * @access protected
726
+ * @return boolean
727
+ */
728
+ protected function parse() {
729
+ if ( !$this->validates() ) return false;
730
+
731
+ $c = 0;
732
+ $d = $this->settings['delimiter'];
733
+ $e = $this->settings['escape'];
734
+ $l = $this->settings['length'];
735
+
736
+ $res = fopen( $this->_filename, 'r' );
737
+
738
+ while ( $keys = fgetcsv( $res, $l, $d, $e ) ) {
739
+
740
+ if ( $c == 0 ) {
741
+ $this->headers = $keys;
742
+ } else {
743
+ array_push( $this->rows, $keys );
744
+ }
745
+ $c ++;
746
+ }
747
+
748
+ fclose( $res );
749
+ $this->removeEmpty();
750
+ return true;
751
+ }
752
+
753
+ /**
754
+ * Empty row remover
755
+ * Removes all records that have been defined but have no data.
756
+ *
757
+ * @access protected
758
+ * @return array containing only the rows that have data
759
+ */
760
+ protected function removeEmpty() {
761
+ $ret_arr = array();
762
+ foreach ( $this->rows as $row ) {
763
+ $line = trim( join( '', $row ) );
764
+ if ( !empty( $line ) ) {
765
+ $ret_arr[] = $row;
766
+ }
767
+ }
768
+ $this->rows = $ret_arr;
769
+ }
770
+
771
+ /**
772
+ * CSV File Validator
773
+ * Checks wheather if the given csv file is valid or not
774
+ *
775
+ * @access protected
776
+ * @return boolean
777
+ */
778
+ protected function validates() {
779
+ // file existance
780
+ if ( !file_exists( $this->_filename ) ) return false;
781
+
782
+ // file readability
783
+ if ( !is_readable( $this->_filename ) ) return false;
784
+
785
+ return true;
786
+ }
787
+
788
+ /**
789
+ * Header Relocator
790
+ * @access protected
791
+ * @return void
792
+ */
793
+ protected function moveHeadersToRows() {
794
+ $arr = array();
795
+ $arr[] = $this->headers;
796
+ foreach ( $this->rows as $row ) {
797
+ $arr[] = $row;
798
+ }
799
+ $this->rows = $arr;
800
+ $this->headers = array();
801
+ }
802
+
803
+ /**
804
+ * Array Key Reseter
805
+ * Makes sure that an array's keys are setted in a correct numerical order
806
+ *
807
+ * Note: that this function does not return anything, all changes are made to
808
+ * the original array as a reference
809
+ *
810
+ * @param array &$array any array, if keys are strings they will be replaced with numeric values
811
+ * @access protected
812
+ * @return void
813
+ */
814
+ protected function resetKeys( &$array ) {
815
+ $arr = array();
816
+ foreach ( $array as $item ) {
817
+ $arr[] = $item;
818
+ }
819
+ $array = $arr;
820
+ }
821
+
822
+ /**
823
+ * Object Data Flusher
824
+ * Tells this object to forget all data loaded and start from scratch
825
+ * @access protected
826
+ * @return void
827
+ */
828
+ protected function flush() {
829
+ $this->rows = array();
830
+ $this->headers = array();
831
+ }
832
+ }
833
+ }
834
+ ?>
addons/import/includes/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/import/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/import/myCRED-addon-import.php ADDED
@@ -0,0 +1,774 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Addon: Import
4
+ * Addon URI: http://mycred.merovingi.com
5
+ * Version: 1.0
6
+ * Description: With the Import add-on you can import CSV files, CubePoints or existing points under any custom user meta values.
7
+ * Author: Gabriel S Merovingi
8
+ * Author URI: http://www.merovingi.com
9
+ */
10
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
11
+ define( 'myCRED_IMPORT', __FILE__ );
12
+ define( 'myCRED_IMPORT_VERSION', myCRED_VERSION . '.1' );
13
+ /**
14
+ * myCRED_Import class
15
+ *
16
+ * Manages all available imports.
17
+ * @since 0.1
18
+ * @version 1.0
19
+ */
20
+ if ( !class_exists( 'myCRED_Import' ) ) {
21
+ class myCRED_Import extends myCRED_Module {
22
+
23
+ public $errors = '';
24
+ public $import_ok = false;
25
+
26
+ /**
27
+ * Construct
28
+ */
29
+ function __construct() {
30
+ parent::__construct( 'myCRED_Import', array(
31
+ 'module_name' => 'import',
32
+ 'labels' => array(
33
+ 'menu' => __( 'Import', 'mycred' ),
34
+ 'page_title' => __( 'Import', 'mycred' ),
35
+ 'page_header' => __( 'Import', 'mycred' )
36
+ ),
37
+ 'screen_id' => 'myCRED_page_import',
38
+ 'accordion' => true,
39
+ 'register' => false,
40
+ 'menu_pos' => 90
41
+ ) );
42
+
43
+ add_action( 'mycred_help', array( $this, 'help' ), 10, 2 );
44
+ }
45
+
46
+ /**
47
+ * Module Init
48
+ * @since 0.1
49
+ * @version 1.0
50
+ */
51
+ public function module_init() {
52
+ $installed = $this->get();
53
+
54
+ // If an import is selected, run it
55
+ if ( empty( $installed ) || !isset( $_REQUEST['selected-import'] ) ) return;
56
+ if ( !array_key_exists( $_REQUEST['selected-import'], $installed ) ) return;
57
+
58
+ $call = 'import_' . $_REQUEST['selected-import'];
59
+ $this->$call();
60
+
61
+ // Open accordion for import
62
+ add_filter( 'mycred_localize_admin', array( $this, 'accordion' ) );
63
+ }
64
+
65
+ /**
66
+ * Adjust Accordion
67
+ * Marks the given import as active.
68
+ * @since 0.1
69
+ * @version 1.0
70
+ */
71
+ public function accordion() {
72
+ $key = array_search( trim( $_REQUEST['selected-import'] ), array_keys( $this->installed ) );
73
+ return array( 'active' => $key );
74
+ }
75
+
76
+ /**
77
+ * Get Imports
78
+ * @since 0.1
79
+ * @version 1.0
80
+ */
81
+ public function get( $save = false ) {
82
+ // Defaults
83
+ $installed['csv'] = array(
84
+ 'title' => __( 'CSV File' ),
85
+ 'description' => __( 'Import %_plural% from a comma-separated values (CSV) file.', 'mycred' )
86
+ );
87
+ $installed['cubepoints'] = array(
88
+ 'title' => __( 'CubePoints' ),
89
+ 'description' => __( 'Import CubePoints', 'mycred' )
90
+ );
91
+ $installed['custom'] = array(
92
+ 'title' => __( 'Custom User Meta' ),
93
+ 'description' => __( 'Import %_plural% from pre-existing custom user meta.', 'mycred' )
94
+ );
95
+ $installed = apply_filters( 'mycred_setup_imports', $installed );
96
+
97
+ $this->installed = $installed;
98
+ return $installed;
99
+ }
100
+
101
+ /**
102
+ * Update Users
103
+ * @param $data (array), required associative array of users and amounts to be added to their account.
104
+ * @since 0.1
105
+ * @version 1.0
106
+ */
107
+ public function update_users( $data = array(), $verify = true ) {
108
+ // Prep
109
+ $id_user_by = 'id';
110
+ if ( isset( $_POST['id_user_by'] ) )
111
+ $id_user_by = $_POST['id_user_by'];
112
+
113
+ $xrate = 1;
114
+ if ( isset( $_POST['xrate'] ) )
115
+ $xrate = $_POST['xrate'];
116
+
117
+ $round = false;
118
+ if ( isset( $_POST['round'] ) && $_POST['round'] != 'none' )
119
+ $round = $_POST['round'];
120
+
121
+ $precision = false;
122
+ if ( isset( $_POST['precision'] ) && $_POST['precision'] != 0 )
123
+ $precision = $_POST['precision'];
124
+
125
+ $log_template = '';
126
+ if ( isset( $_POST['log_template'] ) )
127
+ $log_template = $_POST['log_template'];
128
+
129
+ // Loop
130
+ $imports = $skipped = 0;
131
+ foreach ( $data as $row ) {
132
+ // mycred_user and mycred_amount are two mandatory columns!
133
+ if ( !isset( $row['mycred_user'] ) || empty( $row['mycred_user'] ) || !isset( $row['mycred_amount'] ) || empty( $row['mycred_amount'] ) ) {
134
+ $skipped = $skipped+1;
135
+ continue;
136
+ }
137
+
138
+ if ( $verify === true ) {
139
+ // Get User (and with that confirm user exists)
140
+ $user = get_user_by( $id_user_by, $row['mycred_user'] );
141
+
142
+ // User does not exist
143
+ if ( $user === false ) {
144
+ $skipped = $skipped+1;
145
+ continue;
146
+ }
147
+
148
+ // User ID
149
+ $user_id = $user->ID;
150
+ unset( $user );
151
+ }
152
+ else {
153
+ $user_id = $row['mycred_user'];
154
+ }
155
+
156
+ // Users is excluded
157
+ if ( $this->core->exclude_user( $user_id ) ) {
158
+ $skipped = $skipped+1;
159
+ continue;
160
+ }
161
+
162
+ // Amount (can not be zero)
163
+ $cred = $this->core->format_number( $row['mycred_amount'] );
164
+ if ( $cred == 0 ) {
165
+ $skipped = $skipped+1;
166
+ continue;
167
+ }
168
+
169
+ // If exchange rate is not 1 for 1
170
+ if ( $this->core->format_number( $xrate ) != $this->core->format_number( 1 ) ) {
171
+ // Cred = rate*amount
172
+ $amount = $this->core->format_number( $xrate ) * $this->core->format_number( $row['mycred_amount'] );
173
+ $cred = $this->core->round_value( $amount, $round, $precision );
174
+ }
175
+
176
+ // Adjust Balance
177
+ $new_balance = $this->core->update_users_cred( $user_id, $cred );
178
+
179
+ // Log (if requested with the import file having top priority)
180
+ if ( ( isset( $row['mycred_log'] ) && !empty( $row['mycred_log'] ) ) || !empty( $log_template ) ) {
181
+ if ( isset( $row['mycred_log'] ) )
182
+ $template = sanitize_text_field( $row['mycred_log'] );
183
+ else
184
+ $template = sanitize_text_field( $log_template );
185
+
186
+ if ( !empty( $template ) )
187
+ $this->core->add_to_log( 'import', $user_id, $cred, $template );
188
+ }
189
+
190
+ $imports = $imports+1;
191
+ }
192
+
193
+ // Pass on the news
194
+ $this->imports = $imports;
195
+ $this->skipped = $skipped;
196
+
197
+ unset( $data );
198
+ }
199
+
200
+ /**
201
+ * CSV Importer
202
+ * Based on the csv-importer plugin. Thanks for teaching me something new.
203
+ *
204
+ * @see http://wordpress.org/extend/plugins/csv-importer/
205
+ * @since 0.1
206
+ * @version 1.0
207
+ */
208
+ public function import_csv() {
209
+ // We need a file. or else...
210
+ if ( !isset( $_FILES['mycred_csv'] ) || empty( $_FILES['mycred_csv']['tmp_name'] ) ) {
211
+ $this->errors = __( 'No file selected. Please select your CSV file and try again.', 'mycred' );
212
+ return;
213
+ }
214
+
215
+ // Grab CSV Data Fetcher
216
+ require_once( myCRED_ADDONS_DIR . 'import/includes/File-CSV-DataSource.php' );
217
+
218
+ // Prep
219
+ $time_start = microtime( true );
220
+ $csv = new File_CSV_DataSource();
221
+ $file = $_FILES['mycred_csv']['tmp_name'];
222
+ $this->strip_BOM( $file );
223
+
224
+ // Failed to load file
225
+ if ( !$csv->load( $file ) ) {
226
+ $this->errors = __( 'Failed to load file.', 'mycred' );
227
+ return;
228
+ }
229
+
230
+ // Equality for all
231
+ $csv->symmetrize();
232
+
233
+ // Update
234
+ $this->update_users( $csv->connect() );
235
+
236
+ // Unlink
237
+ if ( file_exists( $file ) ) {
238
+ @unlink( $file );
239
+ }
240
+
241
+ // Time
242
+ $exec_time = microtime( true ) - $time_start;
243
+
244
+ // Throw an error if there were no imports just skipps
245
+ if ( $this->imports == 0 && $this->skipped != 0 ) {
246
+ $this->errors = sprintf(
247
+ __( 'Zero rows imported! Skipped %d entries. Import completed in %.2f seconds.', 'mycred' ),
248
+ $this->skipped,
249
+ $exec_time
250
+ );
251
+ return;
252
+ }
253
+
254
+ // Throw an error if there were no imports and no skipps
255
+ elseif ( $this->imports == 0 && $this->skipped == 0 ) {
256
+ $this->errors = __( 'No valid records found in file. Make sure you have selected the correct way to identify users in the mycred_user column!', 'mycred' );
257
+ return;
258
+ }
259
+
260
+ // The joy of success
261
+ $this->import_ok = sprintf(
262
+ __( 'Import successfully completed. A total of %d users were effected and %d entires were skipped. Import completed in %.2f seconds.', 'mycred' ),
263
+ $this->imports,
264
+ $this->skipped,
265
+ $exec_time
266
+ );
267
+
268
+ // Clean Up
269
+ unset( $_FILES );
270
+ unset( $csv );
271
+
272
+ // Close accordion
273
+ unset( $_POST );
274
+ }
275
+
276
+ /**
277
+ * Import CubePoints
278
+ * @since 0.1
279
+ * @version 1.0
280
+ */
281
+ public function import_cubepoints() {
282
+ $delete = false;
283
+ if ( isset( $_POST['delete'] ) ) $delete = true;
284
+
285
+ $meta_key = 'cpoints';
286
+ $time_start = microtime( true );
287
+
288
+ global $wpdb;
289
+
290
+ // DB Query
291
+ $SQL = "SELECT * FROM " . $wpdb->prefix . "usermeta WHERE meta_key = %s";
292
+ $search = $wpdb->get_results( $wpdb->prepare( $SQL, $meta_key ) );
293
+
294
+ // No results
295
+ if ( $wpdb->num_rows == 0 ) {
296
+ $this->errors = __( 'No CubePoints found.', 'mycred' );
297
+ return;
298
+ }
299
+
300
+ // Found something
301
+ else {
302
+ // Construct a new array for $this->update_users() to match the format used
303
+ // when importing CSV files. User ID goes under 'mycred_user' while 'mycred_amount' holds the value.
304
+ $data = array();
305
+ foreach ( $search as $result ) {
306
+ $data[] = array(
307
+ 'mycred_user' => $result->user_id,
308
+ 'mycred_amount' => $result->meta_value
309
+ );
310
+ }
311
+
312
+ // Update User without the need to verify the user
313
+ $this->update_users( $data, false );
314
+
315
+ // Delete old value if requested
316
+ if ( $delete === true ) {
317
+ foreach ( $search as $result ) {
318
+ delete_user_meta( $result->user_id, $meta_key );
319
+ }
320
+ }
321
+ }
322
+
323
+ // Time
324
+ $exec_time = microtime( true ) - $time_start;
325
+
326
+ // Throw an error if there were no imports just skipps
327
+ if ( $this->imports == 0 && $this->skipped != 0 ) {
328
+ $this->errors = sprintf(
329
+ __( 'Zero CubePoints imported! Skipped %d entries. Import completed in %.2f seconds.', 'mycred' ),
330
+ $this->skipped,
331
+ $exec_time
332
+ );
333
+ return;
334
+ }
335
+
336
+ // Throw an error if there were no imports and no skipps
337
+ elseif ( $this->imports == 0 && $this->skipped == 0 ) {
338
+ $this->errors = __( 'No valid CubePoints founds.', 'mycred' );
339
+ return;
340
+ }
341
+
342
+ // The joy of success
343
+ $this->import_ok = sprintf(
344
+ __( 'Import successfully completed. A total of %d users were effected and %d entires were skipped. Import completed in %.2f seconds.', 'mycred' ),
345
+ $this->imports,
346
+ $this->skipped,
347
+ $exec_time
348
+ );
349
+
350
+ // Clean Up
351
+ unset( $search );
352
+
353
+ // Close Accordion
354
+ unset( $_POST );
355
+ }
356
+
357
+ /**
358
+ * Import Custom User Meta
359
+ * @since 0.1
360
+ * @version 1.0
361
+ */
362
+ public function import_custom() {
363
+ if ( !isset( $_POST['meta_key'] ) || empty( $_POST['meta_key'] ) ) {
364
+ $this->errors = __( 'Missing meta key. Not sure what I should be looking for.', 'mycred' );
365
+ return;
366
+ }
367
+
368
+ // Prep
369
+ $delete = false;
370
+ if ( isset( $_POST['delete'] ) ) $delete = true;
371
+
372
+ $meta_key = $_POST['meta_key'];
373
+ $time_start = microtime( true );
374
+
375
+ global $wpdb;
376
+
377
+ // DB Query
378
+ $SQL = "SELECT * FROM " . $wpdb->prefix . "usermeta WHERE meta_key = %s";
379
+ $search = $wpdb->get_results( $wpdb->prepare( $SQL, $meta_key ) );
380
+
381
+ // No results
382
+ if ( $wpdb->num_rows == 0 ) {
383
+ $this->errors = sprintf( __( 'No rows found for the <strong>%s</strong> meta key.', 'mycred' ), $meta_key );
384
+ return;
385
+ }
386
+
387
+ // Found something
388
+ else {
389
+ // Construct a new array for $this->update_users() to match the format used
390
+ // when importing CSV files. User ID goes under 'mycred_user' while 'mycred_amount' holds the value.
391
+ $data = array();
392
+ foreach ( $search as $result ) {
393
+ $data[] = array(
394
+ 'mycred_user' => $result->user_id,
395
+ 'mycred_amount' => $result->meta_value
396
+ );
397
+ }
398
+
399
+ // Update User without the need to verify the user
400
+ $this->update_users( $data, false );
401
+
402
+ // Delete old value if requested
403
+ if ( $delete === true ) {
404
+ foreach ( $search as $result ) {
405
+ delete_user_meta( $result->user_id, $meta_key );
406
+ }
407
+ }
408
+ }
409
+
410
+ // Time
411
+ $exec_time = microtime( true ) - $time_start;
412
+
413
+ // Throw an error if there were no imports just skipps
414
+ if ( $this->imports == 0 && $this->skipped != 0 ) {
415
+ $this->errors = sprintf(
416
+ __( 'Zero rows imported! Skipped %d entries. Import completed in %.2f seconds.', 'mycred' ),
417
+ $this->skipped,
418
+ $exec_time
419
+ );
420
+ return;
421
+ }
422
+
423
+ // Throw an error if there were no imports and no skipps
424
+ elseif ( $this->imports == 0 && $this->skipped == 0 ) {
425
+ $this->errors = __( 'No valid records founds.', 'mycred' );
426
+ return;
427
+ }
428
+
429
+ // The joy of success
430
+ $this->import_ok = sprintf(
431
+ __( 'Import successfully completed. A total of %d users were effected and %d entires were skipped. Import completed in %.2f seconds.', 'mycred' ),
432
+ $this->imports,
433
+ $this->skipped,
434
+ $exec_time
435
+ );
436
+
437
+ // Clean Up
438
+ unset( $search );
439
+
440
+ // Close Accordion
441
+ unset( $_POST );
442
+ }
443
+
444
+ /**
445
+ * Admin Page
446
+ * @since 0.1
447
+ * @version 1.0
448
+ */
449
+ public function admin_page() {
450
+ // Security
451
+ if ( !$this->core->can_edit_plugin( get_current_user_id() ) ) wp_die( __( 'Access Denied', 'mycred' ) );
452
+
453
+ // Available Imports
454
+ if ( empty( $this->installed ) )
455
+ $this->get(); ?>
456
+
457
+ <div class="wrap list" id="myCRED-wrap">
458
+ <div id="icon-myCRED" class="icon32"><br /></div>
459
+ <h2><?php echo '<strong>my</strong>CRED ' . __( 'Import', 'mycred' ); ?></h2>
460
+ <?php
461
+ // Errors
462
+ if ( !empty( $this->errors ) ) {
463
+ echo '<div class="error"><p>' . $this->errors . '</p></div>';
464
+ }
465
+
466
+ // Success
467
+ elseif ( $this->import_ok !== false ) {
468
+ echo '<div class="updated"><p>' . $this->import_ok . '</p></div>';
469
+ } ?>
470
+
471
+ <p><?php _e( 'Remember to de-activate this add-on once you are done importing!', 'mycred' ); ?></p>
472
+ <div class="list-items expandable-li" id="accordion">
473
+ <?php
474
+ if ( !empty( $this->installed ) ) {
475
+ foreach ( $this->installed as $id => $data ) {
476
+ $call = $id . '_form';
477
+ $this->$call( $data );
478
+ }
479
+ } ?>
480
+
481
+ </div>
482
+ </div>
483
+ <?php
484
+ unset( $this );
485
+ }
486
+
487
+ /**
488
+ * CSV Import Form
489
+ * @since 0.1
490
+ * @version 1.0
491
+ */
492
+ public function csv_form( $data ) {
493
+ $max_upload = (int) ( ini_get( 'upload_max_filesize' ) );
494
+ $max_post = (int) ( ini_get( 'post_max_size' ) );
495
+ $memory_limit = (int) ( ini_get( 'memory_limit' ) );
496
+ $upload_mb = min( $max_upload, $max_post, $memory_limit ); ?>
497
+
498
+ <h4 class="active"><label><?php echo $data['title']; ?></label></h4>
499
+ <div class="body" style="display:none;">
500
+ <form class="add:the-list: validate" method="post" enctype="multipart/form-data">
501
+ <input type="hidden" name="selected-import" value="csv" />
502
+ <p><?php echo nl2br( $this->core->template_tags_general( $data['description'] ) ); ?></p>
503
+ <label class="subheader" for="mycred-csv-file"><?php _e( 'File', 'mycred' ); ?></label>
504
+ <ol>
505
+ <li>
506
+ <div><input type="file" name="mycred_csv" id="mycred-csv-file" value="" aria-required="true" /></div>
507
+ <span class="description"><?php echo __( 'Maximum allowed upload size is ', 'mycred' ) . $upload_mb . ' Mb<br />' . __( 'Required columns: <code>mycred_user</code> and <code>mycred_amount</code>. Optional columns: <code>mycred_log</code>.', 'mycred' ); ?></span>
508
+ </li>
509
+ </ol>
510
+ <label class="subheader"><?php _e( 'Identify Users By', 'mycred' ); ?></label>
511
+ <ol>
512
+ <li>
513
+ <input type="radio" name="id_user_by" id="mycred-csv-by-id" value="id" checked="checked" /><label for="mycred-csv-by-id"><?php _e( 'ID', 'mycred' ); ?></label><br />
514
+ <input type="radio" name="id_user_by" id="mycred-csv-by-login" value="login" /><label for="mycred-csv-by-login"><?php _e( 'Username', 'mycred' ); ?></label><br />
515
+ <input type="radio" name="id_user_by" id="mycred-csv-by-email" value="email" /><label for="mycred-csv-by-email"><?php _e( 'Email', 'mycred' ); ?></label>
516
+ </li>
517
+ </ol>
518
+ <label class="subheader" for="mycred-csv-xrate"><?php _e( 'Exchange Rate', 'mycred' ); ?></label>
519
+ <ol>
520
+ <li>
521
+ <div class="h2"><input type="text" name="xrate" id="mycred-csv-xrate" value="<?php echo $this->core->format_number( 1 ); ?>" class="short" /> = <?php echo $this->core->format_creds( 1 ); ?></div>
522
+ <span class="description"><?php _e( 'How much is 1 imported value worth?', 'mycred' ); ?></span>
523
+ </li>
524
+ </ol>
525
+ <ol class="inline">
526
+ <li>
527
+ <lable for=""><?php _e( 'Round', 'mycred' ); ?></label><br />
528
+ <input type="radio" name="round" id="mycred-csv-round-none" value="none" checked="checked" /> <label for="mycred-csv-round-none"><?php _e( 'None', 'mycred' ); ?></label><br />
529
+ <input type="radio" name="round" id="mycred-csv-round-up" value="up" /> <label for="mycred-csv-round-up"><?php _e( 'Round Up', 'mycred' ); ?></label><br />
530
+ <input type="radio" name="round" id="mycred-csv-round-down" value="down" /> <label for="mycred-csv-round-down"><?php _e( 'Round Down', 'mycred' ); ?></label>
531
+ </li>
532
+ <?php if ( $this->core->format['decimals'] > 0 ) { ?>
533
+
534
+ <li>
535
+ <lable for="mycred-csv-precision"><?php _e( 'Precision', 'mycred' ); ?></label>
536
+ <div class="h2"><input type="text" name="precision" id="mycred-csv-precision" value="1" class="short" /></div>
537
+ <span class="description"><?php echo __( 'The optional number of decimal digits to round to. Use zero to round the nearest whole number.', 'mycred' ); ?></span>
538
+ </li>
539
+ <?php } ?>
540
+
541
+ </ol>
542
+ <label class="subheader" for="mycred-csv-log-template"><?php _e( 'Log Entry', 'mycred' ); ?></label>
543
+ <ol>
544
+ <li>
545
+ <div class="h2"><input type="text" name="log_template" id="mycred-csv-log-template" value="" class="long" /></div>
546
+ <span class="description"><?php _e( 'See the help tab for available template tags. Leave blank to disable.', 'mycred' ); ?></span>
547
+ </li>
548
+ </ol>
549
+ <ol>
550
+ <li>
551
+ <input type="submit" name="submit" id="mycred-csv-submit" value="<?php _e( 'Run Import', 'mycred' ); ?>" class="button button-primary button-large" />
552
+ </li>
553
+ </ol>
554
+ </form>
555
+ </div>
556
+ <?php
557
+ }
558
+
559
+ /**
560
+ * CubePoints Import Form
561
+ * @since 0.1
562
+ * @version 1.0
563
+ */
564
+ public function cubepoints_form( $data ) {
565
+ $quick_check = get_users( array(
566
+ 'meta_key' => 'cpoints',
567
+ 'fields' => 'ID'
568
+ ) );
569
+ $cp_users = count( $quick_check ); ?>
570
+
571
+ <h4 class="<?php if ( $cp_users > 0 ) echo 'active'; else echo 'inactive'; ?>"><label><?php echo $data['title']; ?></label></h4>
572
+ <div class="body" style="display:none;">
573
+ <form class="add:the-list: validate" method="post" enctype="multipart/form-data">
574
+ <input type="hidden" name="selected-import" value="cubepoints" />
575
+ <p><?php
576
+
577
+ if ( $cp_users > 0 )
578
+ echo sprintf( __( 'Found %d users with CubePoints.', 'mycred' ), $cp_users );
579
+ else
580
+ _e( 'No CubePoints found.', 'mycred' ); ?></p>
581
+ <label class="subheader" for="mycred-cubepoints-user-meta-key"><?php _e( 'Meta Key', 'mycred' ); ?></label>
582
+ <ol>
583
+ <li>
584
+ <div class="h2"><input type="text" name="meta_key" id="mycred-cubepoints-user-meta-key" value="cpoints" class="disabled medium" disabled="disabled" /></div>
585
+ </li>
586
+ </ol>
587
+ <label class="subheader" for="mycred-cubepoints-xrate"><?php _e( 'Exchange Rate', 'mycred' ); ?></label>
588
+ <ol>
589
+ <li>
590
+ <div class="h2"><input type="text" name="xrate" id="mycred-cubepoints-xrate" value="<?php echo $this->core->format_number( 1 ); ?>" class="short" /><?php echo 'CubePoint'; ?> = <?php echo $this->core->format_creds( 1 ); ?></div>
591
+ </li>
592
+ </ol>
593
+ <ol class="inline">
594
+ <li>
595
+ <lable for=""><?php _e( 'Round', 'mycred' ); ?></label><br />
596
+ <input type="radio" name="round" id="mycred-cubepoints-round-none" value="none" checked="checked" /> <label for="mycred-cubepoints-round-none"><?php _e( 'Do not round', 'mycred' ); ?></label><br />
597
+ <input type="radio" name="round" id="mycred-cubepoints-round-up" value="up" /> <label for="mycred-cubepoints-round-up"><?php _e( 'Round Up', 'mycred' ); ?></label><br />
598
+ <input type="radio" name="round" id="mycred-cubepoints-round-down" value="down" /> <label for="mycred-cubepoints-round-down"><?php _e( 'Round Down', 'mycred' ); ?></label>
599
+ </li>
600
+ <?php if ( $this->core->format['decimals'] > 0 ) { ?>
601
+
602
+ <li>
603
+ <lable for="mycred-cubepoints-precision"><?php _e( 'Precision', 'mycred' ); ?></label>
604
+ <div class="h2"><input type="text" name="precision" id="mycred-cubepoints-precision" value="1" class="short" /></div>
605
+ <span class="description"><?php echo __( 'The optional number of decimal digits to round to. Use zero to round the nearest whole number.', 'mycred' ); ?></span>
606
+ </li>
607
+ <?php } ?>
608
+
609
+ </ol>
610
+ <label class="subheader" for="mycred-cubepoints-delete"><?php _e( 'After Import', 'mycred' ); ?></label>
611
+ <ol>
612
+ <li>
613
+ <input type="checkbox" name="delete" id="mycred-cubepoints-delete" value="no" /> <label for="mycred-cubepoints-delete"><?php _e( 'Delete users CubePoints balance.', 'mycred' ); ?></label>
614
+ </li>
615
+ </ol>
616
+ <label class="subheader" for="mycred-cubepoints-log-template"><?php _e( 'Log Entry', 'mycred' ); ?></label>
617
+ <ol>
618
+ <li>
619
+ <div class="h2"><input type="text" name="log_template" id="mycred-cubepoints-log-template" value="" class="long" /></div>
620
+ <span class="description"><?php _e( 'See the help tab for available template tags. Leave blank to disable.', 'mycred' ); ?></span>
621
+ </li>
622
+ </ol>
623
+ <ol>
624
+ <li>
625
+ <input type="submit" name="submit" id="mycred-cubepoints-submit" value="<?php _e( 'Run Import', 'mycred' ); ?>" class="button button-primary button-large" />
626
+ </li>
627
+ </ol>
628
+ </form>
629
+ </div>
630
+ <?php
631
+ }
632
+
633
+ /**
634
+ * Custom User Meta Import Form
635
+ * @since 0.1
636
+ * @version 1.0
637
+ */
638
+ public function custom_form( $data ) { ?>
639
+
640
+ <h4 class="active"><label><?php echo $data['title']; ?></label></h4>
641
+ <div class="body" style="display:none;">
642
+ <form class="add:the-list: validate" method="post" enctype="multipart/form-data">
643
+ <input type="hidden" name="selected-import" value="custom" />
644
+ <p><?php echo nl2br( $this->core->template_tags_general( $data['description'] ) ); ?></p>
645
+ <label class="subheader" for="mycred-custom-user-meta-key"><?php _e( 'Meta Key', 'mycred' ); ?></label>
646
+ <ol>
647
+ <li>
648
+ <div class="h2"><input type="text" name="meta_key" id="mycred-custom-user-meta-key" value="" class="medium" /></div>
649
+ </li>
650
+ </ol>
651
+ <label class="subheader" for="mycred-custom-xrate"><?php _e( 'Exchange Rate', 'mycred' ); ?></label>
652
+ <ol>
653
+ <li>
654
+ <div class="h2"><input type="text" name="xrate" id="mycred-custom-xrate" value="<?php echo $this->core->format_number( 1 ); ?>" class="short" /> = <?php echo $this->core->format_creds( 1 ); ?></div>
655
+ </li>
656
+ </ol>
657
+ <ol class="inline">
658
+ <li>
659
+ <lable for=""><?php _e( 'Round', 'mycred' ); ?></label><br />
660
+ <input type="radio" name="round" id="mycred-custom-round-none" value="none" checked="checked" /> <label for="mycred-custom-round-none"><?php _e( 'Do not round', 'mycred' ); ?></label><br />
661
+ <input type="radio" name="round" id="mycred-custom-round-up" value="up" /> <label for="mycred-custom-round-up"><?php _e( 'Round Up', 'mycred' ); ?></label><br />
662
+ <input type="radio" name="round" id="mycred-custom-round-down" value="down" /> <label for="mycred-custom-round-down"><?php _e( 'Round Down', 'mycred' ); ?></label>
663
+ </li>
664
+ <?php if ( $this->core->format['decimals'] > 0 ) { ?>
665
+
666
+ <li>
667
+ <lable for="mycred-custom-precision"><?php _e( 'Precision', 'mycred' ); ?></label>
668
+ <div class="h2"><input type="text" name="precision" id="mycred-custom-precision" value="1" class="short" /></div>
669
+ <span class="description"><?php echo __( 'The optional number of decimal digits to round to. Use zero to round the nearest whole number.', 'mycred' ); ?></span>
670
+ </li>
671
+ <?php } ?>
672
+
673
+ </ol>
674
+ <label class="subheader" for="mycred-custom-log-template"><?php _e( 'Log Entry', 'mycred' ); ?></label>
675
+ <ol>
676
+ <li>
677
+ <div class="h2"><input type="text" name="log_template" id="mycred-custom-log-template" value="" class="long" /></div>
678
+ <span class="description"><?php _e( 'See the help tab for available template tags. Leave blank to disable.', 'mycred' ); ?></span>
679
+ </li>
680
+ </ol>
681
+ <label class="subheader" for="mycred-custom-delete"><?php _e( 'After Import', 'mycred' ); ?></label>
682
+ <ol>
683
+ <li>
684
+ <input type="checkbox" name="delete" id="mycred-custom-delete" value="no" /> <label for="mycred-custom-delete"><?php _e( 'Delete the old value.', 'mycred' ); ?></label>
685
+ </li>
686
+ </ol>
687
+ <ol>
688
+ <li>
689
+ <input type="submit" name="submit" id="mycred-custom-submit" value="<?php _e( 'Run Import', 'mycred' ); ?>" class="button button-primary button-large" />
690
+ </li>
691
+ </ol>
692
+ </form>
693
+ </div>
694
+ <?php
695
+ }
696
+
697
+ /**
698
+ * Delete BOM from UTF-8 file.
699
+ * @see http://wordpress.org/extend/plugins/csv-importer/
700
+ * @param string $fname
701
+ * @return void
702
+ */
703
+ public function strip_BOM( $fname ) {
704
+ $res = fopen( $fname, 'rb' );
705
+ if ( false !== $res ) {
706
+ $bytes = fread( $res, 3 );
707
+ if ( $bytes == pack( 'CCC', 0xef, 0xbb, 0xbf ) ) {
708
+ fclose( $res );
709
+
710
+ $contents = file_get_contents( $fname );
711
+ if ( false === $contents ) {
712
+ trigger_error( 'Failed to get file contents.', E_USER_WARNING );
713
+ }
714
+ $contents = substr( $contents, 3 );
715
+ $success = file_put_contents( $fname, $contents );
716
+ if ( false === $success ) {
717
+ trigger_error( 'Failed to put file contents.', E_USER_WARNING );
718
+ }
719
+ } else {
720
+ fclose( $res );
721
+ }
722
+ }
723
+ }
724
+
725
+ /**
726
+ * Contextual Help
727
+ * @since 0.1
728
+ * @version 1.0
729
+ */
730
+ public function help( $screen_id, $screen ) {
731
+ if ( $screen_id != 'mycred_page_myCRED_page_import' ) return;
732
+
733
+ $screen->add_help_tab( array(
734
+ 'id' => 'mycred-import',
735
+ 'title' => __( 'Import', 'mycred' ),
736
+ 'content' => '
737
+ <p>' . $this->core->template_tags_general( __( 'This add-on lets you import %_plural% either though a CSV-file or from your database. Remember that the import can take time depending on your file size or the number of users being imported.', 'mycred' ) ) . '</p>'
738
+ ) );
739
+ $screen->add_help_tab( array(
740
+ 'id' => 'mycred-import-csv',
741
+ 'title' => __( 'CSV File', 'mycred' ),
742
+ 'content' => '
743
+ <p><strong>' . __( 'CSV Import', 'mycred' ) . '</strong></p>
744
+ <p>' . __( 'Imports using a comma-separated values file requires the following columns:', 'mycred' ) . '</p>
745
+ <p><code>mycred_user</code> ' . __( 'Column identifing the user. All rows must identify the user the same way, either using an ID, Username (user_login) or email. Users that can not be found will be ignored.', 'mycred' ) . '<br />
746
+ <code>mycred_amount</code> ' . __( 'Column with the amount to be imported. If set, an exchange rate is applied to this value before import.', 'mycred' ) . '</p>
747
+ <p>' . __( 'Optionally you can also use the <code>mycred_log</code> column to pre-define the log entry for each import.', 'mycred' ) . '</p>'
748
+ ) );
749
+ $screen->add_help_tab( array(
750
+ 'id' => 'mycred-import-cube',
751
+ 'title' => __( 'Cubepoints', 'mycred' ),
752
+ 'content' => '
753
+ <p><strong>' . __( 'Cubepoints Import', 'mycred' ) . '</strong></p>
754
+ <p>' . __( 'When this page loads, the importer will automatically check if you have been using Cubepoints. If you have, you can import these with the option to delete the original Cubepoints once completed to help keep your database clean.', 'mycred' ) . '</p>
755
+ <p>' . __( 'Before a value is imported, you can apply an exchange rate. To import without changing the value, use 1 as the exchange rate.', 'mycred' ) . '</p>
756
+ <p>' . __( 'You can select to add a log entry for each import or leave the template empty to skip.', 'mycred' ) . '</p>
757
+ <p>' . __( 'The Cubepoints importer will automatically disable itself if no Cubepoints installation exists.', 'mycred' ) . '</p>'
758
+ ) );
759
+ $screen->add_help_tab( array(
760
+ 'id' => 'mycred-import-custom',
761
+ 'title' => __( 'Custom User Meta', 'mycred' ),
762
+ 'content' => '
763
+ <p><strong>' . __( 'Custom User Meta Import', 'mycred' ) . '</strong></p>
764
+ <p>' . __( 'You can import any type of points that have previously been saved in your database. All you need is the meta key under which it has been saved.', 'mycred' ) . '</p>
765
+ <p>' . __( 'Before a value is imported, you can apply an exchange rate. To import without changing the value, use 1 as the exchange rate.', 'mycred' ) . '</p>
766
+ <p>' . __( 'You can select to add a log entry for each import or leave the template empty to skip.', 'mycred' ) . '</p>
767
+ <p>' . __( 'Please note that the meta key is case sensitive and can not contain whitespaces!', 'mycred' ) . '</p>'
768
+ ) );
769
+ }
770
+ }
771
+ $import = new myCRED_Import();
772
+ $import->load();
773
+ }
774
+ ?>
addons/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/sell-content/css/edit.css ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #mycred_sell_content { }
2
+ #mycred_sell_content .inside input[type="checkbox"] { margin-right: 12px; }
3
+
4
+ #mycred_sell_content .inside ul { }
5
+ #mycred_sell_content .inside ul li label { padding-right: 12px; }
6
+ #mycred_sell_content .inside ul li>input, #mycred_sell_content .inside ul li .formated { float: right; }
7
+
8
+ #mycred_sell_content .inside ul li { float: none; clear: both; line-height: 25px; }
9
+ #mycred_sell_content .inside ul li.long input { width: 100%; float: none; clear: both; }
10
+
11
+ p#mycred-submit { text-align: right; }
12
+ #mycred_sell_content .inside ul li input.disabled { background-color: #F8F8F8; border-color: #DFDFDF; }
addons/sell-content/css/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/sell-content/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/sell-content/myCRED-addon-sell-content.php ADDED
@@ -0,0 +1,700 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Addon: Sell Content
4
+ * Addon URI: http://mycred.merovingi.com
5
+ * Version: 1.0
6
+ * Description: This add-on allows you to sell posts, pages or any public post types on your website. You can either sell the entire content or using our shortcode, sell parts of your content allowing you to offer "teasers".
7
+ * Author: Gabriel S Merovingi
8
+ * Author URI: http://www.merovingi.com
9
+ */
10
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
11
+ define( 'myCRED_SELL', __FILE__ );
12
+ define( 'myCRED_SELL_VERSION', myCRED_VERSION . '.1' );
13
+ /**
14
+ * myCRED_Sell_Content class
15
+ *
16
+ *
17
+ * @since 0.1
18
+ * @version 1.0
19
+ */
20
+ if ( !class_exists( 'myCRED_Sell_Content' ) ) {
21
+ class myCRED_Sell_Content extends myCRED_Module {
22
+
23
+ /**
24
+ * Construct
25
+ */
26
+ function __construct() {
27
+ parent::__construct( 'myCRED_Sell_Content', array(
28
+ 'module_name' => 'sell_content',
29
+ 'register' => false,
30
+ 'defaults' => array(
31
+ 'post_types' => 'post,page',
32
+ 'pay' => 'none',
33
+ 'pay_percent' => 100,
34
+ 'templates' => array(
35
+ 'members' => __( '<p>Buy this %post_type% for only %price% %buy_button%</p>', 'mycred' ),
36
+ 'visitors' => __( '<p><a href="%login_url_here%">Login</a> to buy access to this %post_type%.</p>', 'mycred' ),
37
+ 'cantafford' => __( "<p>You do not have enough %plural% to buy access to this %post_type%.</p>\n<p><strong>Price</strong>: %price%</p>", 'mycred' )
38
+ ),
39
+ 'defaults' => array(
40
+ 'price' => 10,
41
+ 'overwrite_price' => 0,
42
+ 'button_label' => __( 'Buy Now', 'mycred' ),
43
+ 'overwrite_buttonlabel' => 0
44
+ ),
45
+ 'logs' => array(
46
+ 'buy' => __( 'Purchase of %link_with_title%', 'mycred' ),
47
+ 'sell' => __( 'Sale of %link_with_title%', 'mycred' )
48
+ )
49
+ ),
50
+ 'add_to_core' => true
51
+ ) );
52
+
53
+ add_action( 'mycred_help', array( $this, 'help' ), 10, 2 );
54
+ }
55
+
56
+ /**
57
+ * Load
58
+ * @since 0.1
59
+ * @version 1.0
60
+ */
61
+ public function module_init() {
62
+ $this->make_purchase();
63
+
64
+ add_filter( 'the_content', array( $this, 'the_content' ), 30 );
65
+ add_shortcode( 'mycred_sell_this', array( $this, 'render_shortcode' ) );
66
+
67
+ add_action( 'add_meta_boxes', array( $this, 'add_metabox' ) );
68
+ add_action( 'save_post', array( $this, 'save_metabox' ) );
69
+
70
+ add_action( 'mycred_admin_enqueue', array( $this, 'admin_enqueue' ) );
71
+ }
72
+
73
+ /**
74
+ * Make Purchase
75
+ * @since 0.1
76
+ * @version 1.0
77
+ */
78
+ public function make_purchase() {
79
+ global $mycred_content_purchase;
80
+
81
+ $mycred_content_purchase = false;
82
+ if ( !$this->is_installed() ) return;
83
+ if ( !isset( $_POST['mycred_purchase_token'] ) || !isset( $_POST['mycred_purchase'] ) || !isset( $_POST['mycred_purchase']['action'] ) || !isset( $_POST['mycred_purchase']['author'] ) || !isset( $_POST['mycred_purchase']['post_id'] ) || !isset( $_POST['mycred_purchase']['post_type'] ) || !isset( $_POST['mycred_purchase']['user_id'] ) ) return;
84
+ if ( !wp_verify_nonce( $_POST['mycred_purchase_token'], 'buy-content' ) ) return;
85
+
86
+ $action = $_POST['mycred_purchase']['action'];
87
+ $post_id = $_POST['mycred_purchase']['post_id'];
88
+ $post_type = $_POST['mycred_purchase']['post_type'];
89
+ $user_id = $_POST['mycred_purchase']['user_id'];
90
+ $author = $_POST['mycred_purchase']['author'];
91
+
92
+ $sell_content = $this->sell_content;
93
+ $prefs = $this->get_sale_prefs( $post_id );
94
+
95
+ $request = compact( 'action', 'post_id', 'user_id', 'author', 'post_type', 'settings', 'sales_preference' );
96
+ do_action( 'mycred_sell_content_purchase_request', $request );
97
+
98
+ if ( is_user_logged_in() && !$this->user_paid( $user_id, $post_id ) && $this->user_can_buy( $user_id, $prefs['price'] ) ) {
99
+ // Charge
100
+ $log = $sell_content['logs']['buy'];
101
+ $data = array(
102
+ 'post_type' => 'post',
103
+ 'purchase_id' => 'TXID' . date_i18n( 'U' ),
104
+ 'seller' => $author
105
+ );
106
+ $this->core->add_creds( 'buy_content', $user_id, '-' . $prefs['price'], $log, $post_id, $data );
107
+
108
+ do_action( 'mycred_sell_content_purchase_ready', $request );
109
+
110
+ // Pay
111
+ if ( $sell_content['pay'] == 'author' ) {
112
+ $content_price = $prefs['price'];
113
+ // If we are paying the author less then 100%
114
+ if ( (int) $sell_content['pay_percent'] != 100 ) {
115
+ $percent = (int) $sell_content['pay_percent']/100;
116
+ $price = $percent*$content_price;
117
+ $content_price = number_format( $price, $this->core->format['decimals'] );
118
+ }
119
+ $log = $sell_content['logs']['sell'];
120
+ $data = array(
121
+ 'post_type' => 'post',
122
+ 'purchase_id' => 'TXID' . date_i18n( 'U' ),
123
+ 'buyer' => $user_id
124
+ );
125
+ $this->core->add_creds( 'buy_content', $author, $content_price, $log, $post_id, $data );
126
+ }
127
+
128
+ $mycred_content_purchase = true;
129
+ do_action( 'mycred_sell_content_payment_complete', $request );
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Enqueue Admin
135
+ * @since 0.1
136
+ * @version 1.0
137
+ */
138
+ public function admin_enqueue() {
139
+ wp_register_style(
140
+ 'mycred-buy-edit',
141
+ plugins_url( 'css/edit.css', myCRED_SELL ),
142
+ false,
143
+ myCRED_SELL_VERSION . '.1',
144
+ 'all'
145
+ );
146
+
147
+ $screen = get_current_screen();
148
+ $sell_content = $this->sell_content;
149
+ $post_types = $sell_content['post_types'];
150
+ if ( !empty( $post_types ) ) {
151
+ $pts = explode( ',', $post_types );
152
+ if ( !in_array( $screen->id , $pts ) ) return;
153
+
154
+ wp_enqueue_style( 'mycred-buy-edit' );
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Settings Page
160
+ * @since 0.1
161
+ * @version 1.0
162
+ */
163
+ public function after_general_settings( $all ) {
164
+ $sell_content = $this->sell_content;
165
+
166
+ $before = $this->core->before;
167
+ $after = $this->core->after;
168
+
169
+ $payees = array(
170
+ 'none' => __( 'No Payout. Just charge.' ),
171
+ 'author' => __( 'Pay Content Author.' )
172
+ );
173
+ $available_payees = apply_filters( 'mycred_sell_content_payees', $payees, $sell_content ); ?>
174
+
175
+ <h4 style="color:#BBD865;"><?php _e( 'Sell Content', 'mycred' ); ?></h4>
176
+ <div class="body" style="display:none;">
177
+ <label class="subheader" for="<?php echo $this->field_id( 'post_types' ); ?>"><?php _e( 'Post Types', 'mycred' ); ?></label>
178
+ <ol id="myCRED-buy-postypes">
179
+ <li>
180
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'post_types' ); ?>" id="<?php echo $this->field_id( 'post_types' ); ?>" value="<?php echo $sell_content['post_types']; ?>" class="long" /></div>
181
+ <span class="description"><?php _e( 'Comma separated list of post types that can be sold.', 'mycred' ); ?></span>
182
+ </li>
183
+ </ol>
184
+ <label class="subheader"><?php _e( 'Payments', 'mycred' ); ?></label>
185
+ <ol id="myCRED-buy-payments">
186
+ <?php
187
+ if ( !empty( $available_payees ) ) {
188
+ foreach ( $available_payees as $key => $description ) { ?>
189
+
190
+ <li>
191
+ <input type="radio" name="<?php echo $this->field_name( 'pay' ); ?>" id="<?php echo $this->field_id( array( 'pay' => $key ) ); ?>" <?php checked( $sell_content['pay'], $key ); ?> value="<?php echo $key; ?>" />
192
+ <label for="<?php echo $this->field_id( array( 'pay' => $key ) ); ?>"><?php echo $description; ?></label>
193
+ </li>
194
+ <?php
195
+ if ( $key == 'author' ) { ?>
196
+
197
+ <li>
198
+ <label for="<?php echo $this->field_id( 'pay_percent' ); ?>"><?php _e( 'Percentage to pay Author', 'mycred' ); ?></label>
199
+ <div class="h2"><input type="text" size="5" maxlength="3" name="<?php echo $this->field_name( 'pay_percent' ); ?>" id="<?php echo $this->field_id( 'pay_percent' ); ?>" value="<?php echo $sell_content['pay_percent']; ?>" /> %</div>
200
+ <span class="description"><?php _e( 'Percentage of the price to pay the author. Can not be zero and is ignored if authors are not paid.', 'mycred' ); ?></span>
201
+ </li>
202
+ <?php
203
+ }
204
+ }
205
+ } ?>
206
+
207
+ </ol>
208
+ <label class="subheader"><?php _e( 'Defaults', 'mycred' ); ?></label>
209
+ <ol id="myCRED-buy-defaults">
210
+ <li>
211
+ <label for="<?php echo $this->field_id( array( 'defaults' => 'price' ) ); ?>"><?php _e( 'Price', 'mycred' ); ?></label>
212
+ <div class="h2"><?php echo $before; ?> <input type="text" name="<?php echo $this->field_name( array( 'defaults' => 'price' ) ); ?>" id="<?php echo $this->field_id( array( 'defaults' => 'price' ) ); ?>" value="<?php echo $sell_content['defaults']['price']; ?>" size="8" /> <?php echo $after; ?></div>
213
+ </li>
214
+ <li>
215
+ <input type="checkbox" name="<?php echo $this->field_name( array( 'defaults' => 'overwrite_price' ) ); ?>" id="<?php echo $this->field_id( array( 'defaults' => 'overwrite_price' ) ); ?>" <?php checked( $sell_content['defaults']['overwrite_price'], 1 ); ?> value="1" />
216
+ <label for="<?php echo $this->field_id( array( 'defaults' => 'overwrite_price' ) ); ?>"><?php _e( 'Allow authors to change price.', 'mycred' ); ?></label>
217
+ </li>
218
+ <li class="empty">&nbsp;</li>
219
+ <li>
220
+ <label for="<?php echo $this->field_id( array( 'defaults' => 'button_label' ) ); ?>"><?php _e( 'Button Label', 'mycred' ); ?></label>
221
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'defaults' => 'button_label' ) ); ?>" id="<?php echo $this->field_id( array( 'defaults' => 'button_label' ) ); ?>" value="<?php echo $sell_content['defaults']['button_label']; ?>" size="12" /></div>
222
+ </li>
223
+ <li>
224
+ <input type="checkbox" name="<?php echo $this->field_name( array( 'defaults' => 'overwrite_buttonlabel' ) ); ?>" id="<?php echo $this->field_id( array( 'defaults' => 'overwrite_buttonlabel' ) ); ?>" <?php checked( $sell_content['defaults']['overwrite_buttonlabel'], 1 ); ?> value="1" />
225
+ <label for="<?php echo $this->field_id( array( 'defaults' => 'overwrite_buttonlabel' ) ); ?>"><?php _e( 'Allow authors to change button label.', 'mycred' ); ?></label>
226
+ </li>
227
+ </ol>
228
+ <label class="subheader" for="<?php echo $this->field_id( array( 'templates' => 'visitors' ) ); ?>"><?php _e( 'Sale Template for non members', 'mycred' ); ?></label>
229
+ <ol id="myCRED-buy-template-visitors">
230
+ <li>
231
+ <textarea rows="10" cols="50" name="<?php echo $this->field_name( array( 'templates' => 'visitors' ) ); ?>" id="<?php echo $this->field_id( array( 'templates' => 'visitors' ) ); ?>" class="large-text code"><?php echo $sell_content['templates']['visitors']; ?></textarea>
232
+ <span class="description"><?php _e( 'Do <strong>not</strong> use the %buy_button% in this template as a user must be logged in to buy content!', 'mycred' ); ?><br />
233
+ <?php _e( 'Available template tags are: %singular%, %plural%, %post_title%, %post_url%, %link_with_title%, %price%', 'mycred' ); ?></span>
234
+ </li>
235
+ </ol>
236
+ <label class="subheader" for="<?php echo $this->field_id( array( 'templates' => 'members' ) ); ?>"><?php _e( 'Sale Template for members', 'mycred' ); ?></label>
237
+ <ol id="myCRED-buy-template-members">
238
+ <li>
239
+ <textarea rows="10" cols="50" name="<?php echo $this->field_name( array( 'templates' => 'members' ) ); ?>" id="<?php echo $this->field_id( array( 'templates' => 'members' ) ); ?>" class="large-text code"><?php echo $sell_content['templates']['members']; ?></textarea>
240
+ <span class="description"><?php _e( 'Your template must contain the %buy_button% tag for purchases to work!', 'mycred' ); ?><br />
241
+ <?php _e( 'Available template tags are: %singular%, %plural%, %post_title%, %post_url%, %link_with_title%, %buy_button%, %price%', 'mycred' ); ?></span>
242
+ </li>
243
+ </ol>
244
+ <label class="subheader" for="<?php echo $this->field_id( array( 'templates' => 'cantafford' ) ); ?>"><?php _e( 'Insufficient funds template', 'mycred' ); ?></label>
245
+ <ol id="myCRED-buy-template-insufficient">
246
+ <li>
247
+ <textarea rows="10" cols="50" name="<?php echo $this->field_name( array( 'templates' => 'cantafford' ) ); ?>" id="<?php echo $this->field_id( array( 'templates' => 'cantafford' ) ); ?>" class="large-text code"><?php echo $sell_content['templates']['cantafford']; ?></textarea>
248
+ <span class="description"><?php _e( 'Your template must contain the %buy_button% tag for purchases to work!', 'mycred' ); ?><br />
249
+ <?php _e( 'Available template tags are: %singular%, %plural%, %post_title%, %post_url%, %link_with_title%, %buy_button%, %price%', 'mycred' ); ?></span>
250
+ </li>
251
+ </ol>
252
+ <label class="subheader" for="<?php echo $this->field_id( array( 'logs' => 'buy' ) ); ?>"><?php _e( 'Log template for Purchases', 'mycred' ); ?></label>
253
+ <ol id="myCRED-buy-template-purchase">
254
+ <li>
255
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'logs' => 'buy' ) ); ?>" id="<?php echo $this->field_id( array( 'logs' => 'buy' ) ); ?>" value="<?php echo $sell_content['logs']['buy']; ?>" class="long" /></div>
256
+ <span class="description"><?php _e( 'Available template tags are: %singular%, %plural%, %post_title%, %post_url% or %link_with_title%', 'mycred' ); ?></span>
257
+ </li>
258
+ </ol>
259
+ <label class="subheader" for="<?php echo $this->field_id( array( 'logs' => 'sell' ) ); ?>"><?php _e( 'Log template for Sales', 'mycred' ); ?></label>
260
+ <ol id="myCRED-buy-template-sale">
261
+ <li>
262
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'logs' => 'sell' ) ); ?>" id="<?php echo $this->field_id( array( 'logs' => 'sell' ) ); ?>" value="<?php echo $sell_content['logs']['sell']; ?>" class="long" /></div>
263
+ <span class="description"><?php _e( 'Available template tags are: %singular%, %plural%, %post_title%, %post_url% or %link_with_title%', 'mycred' ); ?></span>
264
+ </li>
265
+ </ol>
266
+ </div>
267
+ <?php
268
+ }
269
+
270
+ /**
271
+ * Sanitize & Save Settings
272
+ * @since 0.1
273
+ * @version 1.0
274
+ */
275
+ public function sanitize_extra_settings( $new_data, $data, $general ) {
276
+ // Post Types
277
+ $settings = $data['sell_content'];
278
+
279
+ $new_data['sell_content']['post_types'] = sanitize_text_field( $settings['post_types'] );
280
+ $new_data['sell_content']['pay'] = sanitize_text_field( $settings['pay'] );
281
+ $new_data['sell_content']['pay_percent'] = abs( $settings['pay_percent'] );
282
+ if ( $new_data['sell_content']['pay_percent'] == 0 || $new_data['sell_content']['pay_percent'] > 100 )
283
+ $new_data['sell_content']['pay_percent'] = 100;
284
+
285
+ $new_data['sell_content']['defaults']['price'] = $this->core->number( $settings['defaults']['price'] );
286
+ $new_data['sell_content']['defaults']['overwrite_price'] = ( isset( $settings['defaults']['overwrite_price'] ) ) ? 1 : 0;
287
+ $new_data['sell_content']['defaults']['button_label'] = sanitize_text_field( $settings['defaults']['button_label'] );
288
+ $new_data['sell_content']['defaults']['overwrite_buttonlabel'] = ( isset( $settings['defaults']['overwrite_buttonlabel'] ) ) ? 1 : 0;
289
+
290
+ $new_data['sell_content']['templates']['members'] = trim( $settings['templates']['members'] );
291
+ $new_data['sell_content']['templates']['visitors'] = trim( $settings['templates']['visitors'] );
292
+ $new_data['sell_content']['templates']['cantafford'] = trim( $settings['templates']['cantafford'] );
293
+
294
+ $new_data['sell_content']['logs']['buy'] = sanitize_text_field( $settings['logs']['buy'] );
295
+ $new_data['sell_content']['logs']['sell'] = sanitize_text_field( $settings['logs']['sell'] );
296
+
297
+ unset( $settings );
298
+ return $new_data;
299
+ }
300
+
301
+ /**
302
+ * Add Meta Box to Content
303
+ * @since 0.1
304
+ * @version 1.0
305
+ */
306
+ public function add_metabox() {
307
+ $sell_content = $this->sell_content;
308
+ $post_types = explode( ',', $sell_content['post_types'] );
309
+ foreach ( (array) $post_types as $post_type ) {
310
+ $post_type = trim( $post_type );
311
+ add_meta_box(
312
+ 'mycred_sell_content',
313
+ __( 'myCRED Sell', 'mycred' ),
314
+ array( $this, 'metabox' ),
315
+ $post_type,
316
+ 'side',
317
+ 'high'
318
+ );
319
+ }
320
+ }
321
+
322
+ /**
323
+ * Sale Preference
324
+ * Returns a given posts sale preferences. If none exists a new one is buildt and returned.
325
+ *
326
+ * @return (array) sales settings
327
+ * @since 0.1
328
+ * @version 1.0
329
+ */
330
+ public function get_sale_prefs( $post_id ) {
331
+ $sell_content = $this->sell_content;
332
+ $prefs = get_post_meta( $post_id, 'myCRED_sell_content', true );
333
+ if ( empty( $prefs ) ) {
334
+ $sales_data = array(
335
+ 'status' => 'disabled',
336
+ 'price' => $sell_content['defaults']['price'],
337
+ 'button_label' => $sell_content['defaults']['button_label']
338
+ );
339
+ }
340
+ else {
341
+ $sales_data = $prefs;
342
+ }
343
+
344
+ return $sales_data;
345
+ }
346
+
347
+ /**
348
+ * Sell Meta Box
349
+ * @since 0.1
350
+ * @version 1.0
351
+ */
352
+ public function metabox( $post ) {
353
+ // Make sure add-on has been setup
354
+ if ( !$this->is_installed() ) {
355
+ echo __( '<strong>my</strong>CRED Sell Content needs to be setup before you can use this feature.', 'mycred' );
356
+ // Settings Link
357
+ if ( $this->core->can_edit_plugin( get_current_user_id() ) )
358
+ echo ' <a href="' . admin_url( 'admin.php?page=myCRED_page_settings' ) . '" title="' . __( 'Setup add-on', 'mycred' ) . '">' . __( 'Lets do it', 'mycred' ) . '</a>';
359
+
360
+ return;
361
+ }
362
+ $admin = false;
363
+ $post_id = $post->ID;
364
+ $post_type = $post->post_type;
365
+
366
+ $user_id = get_current_user_id();
367
+ $sell_content = $this->sell_content;
368
+ $sales_data = $this->get_sale_prefs( $post_id );
369
+
370
+ // Mark admins
371
+ if ( $this->core->can_edit_plugin( $user_id ) )
372
+ $admin = true;
373
+
374
+ // Empty $sales_data means disabled same if the status is actually set to "disabled"
375
+ if ( empty( $sales_data ) || ( isset( $sales_data['status'] ) && $sales_data['status'] == 'disabled' ) ) {
376
+ $style = 'display:none;';
377
+ $status = 'disabled';
378
+ }
379
+ else {
380
+ $style = 'display:block;';
381
+ $status = 'enabled';
382
+ }
383
+
384
+ $op = (bool) $sell_content['defaults']['overwrite_price'];
385
+ $ob = (bool) $sell_content['defaults']['overwrite_buttonlabel']; ?>
386
+
387
+ <p><input type="checkbox" name="mycred_sell_this" id="mycred-sell-this"<?php checked( $status, 'enabled' ); ?> value="enabled" /><label for="mycred-sell-this"><?php echo __( 'Enable sale of this ', 'mycred' ) . $post_type . '.'; ?></label></p>
388
+ <div id="mycred-sale-settings" style="<?php echo $style; ?>">
389
+ <input type="hidden" name="mycred-sell-this-token" value="<?php echo wp_create_nonce( 'mycred-sell-this' ); ?>" />
390
+ <input type="hidden" name="mycred-sell-this-status" value="<?php echo $status; ?>" />
391
+ <ul>
392
+ <li>
393
+ <label for="mycred-buy-prefs-"><?php _e( 'Price', 'mycred' ); ?></label>
394
+ <div class="formated"><?php echo $this->core->before; ?> <input type="text" name="myCRED_sell_content[price]" id="mycred-buy-prefs-price" value="<?php echo $sales_data['price']; ?>" <?php if ( $op === false && !$admin ) echo 'disabled="disabled" class="disabled"'; ?> size="5" /> <?php echo $this->core->after; ?></div>
395
+ </li>
396
+ <li>
397
+ <label for="mycred-buy-prefs-"><?php _e( 'Button Label', 'mycred' ); ?></label>
398
+ <input type="text" name="myCRED_sell_content[button_label]" id="mycred-buy-prefs-" value="<?php echo $sales_data['button_label']; ?>" <?php if ( $ob === false && !$admin ) echo 'disabled="disabled" class="disabled"'; ?> />
399
+ </li>
400
+ </ul>
401
+ </div>
402
+ <script type="text/javascript">//<![CDATA[
403
+ jQuery(function($) {
404
+ $('#mycred-sell-this').click(function(){
405
+ $('#mycred-sale-settings').toggle();
406
+ });
407
+ });//]]>
408
+ </script>
409
+ <?php
410
+ }
411
+
412
+ /**
413
+ * Save Sell Meta Box
414
+ * @since 0.1
415
+ * @version 1.0
416
+ */
417
+ public function save_metabox( $post_id ) {
418
+ // Make sure sale is enabled
419
+ if ( !isset( $_POST['mycred-sell-this-status'] ) || !isset( $_POST['mycred-sell-this-token'] ) ) return $post_id;
420
+
421
+ // Verify token
422
+ if ( wp_verify_nonce( $_POST['mycred-sell-this-token'], 'mycred-sell-this' ) === false ) return $post_id;
423
+
424
+ // Status
425
+ if ( !isset( $_POST['mycred_sell_this'] ) )
426
+ $status = 'disabled';
427
+ else
428
+ $status = 'enabled';
429
+
430
+ $prefs = get_post_meta( $post_id, 'myCRED_sell_content', true );
431
+ // If sale has never been set and is not enabled bail
432
+ if ( empty( $prefs ) && $status == 'disabled' ) return $post_id;
433
+
434
+ $sell_content = $this->sell_content;
435
+ $is_admin = $this->core->can_edit_plugin();
436
+
437
+ // Status
438
+ $prefs['status'] = $status;
439
+
440
+ // Prefs
441
+ $op = (bool) $sell_content['defaults']['overwrite_price'];
442
+ $prefs['price'] = ( $op === true || $is_admin === true ) ? $_POST['myCRED_sell_content']['price'] : $sell_content['defaults']['price'];
443
+
444
+ $ob = (bool) $sell_content['defaults']['overwrite_buttonlabel'];
445
+ $prefs['button_label'] = ( $ob === true || $is_admin === true ) ? $_POST['myCRED_sell_content']['button_label'] : $sell_content['defaults']['button_label'];
446
+
447
+ update_post_meta( $post_id, 'myCRED_sell_content', $prefs );
448
+ }
449
+
450
+ /**
451
+ * For Sale
452
+ * Checks if a given post is for sale.
453
+ *
454
+ * @param $post_id (int) required post id
455
+ * @returns (bool) true or false
456
+ * @since 0.1
457
+ * @version 1.0
458
+ */
459
+ public function for_sale( $post_id ) {
460
+ $prefs = get_post_meta( $post_id, 'myCRED_sell_content', true );
461
+ if ( !empty( $prefs ) && isset( $prefs['status'] ) && $prefs['status'] == 'enabled' ) return true;
462
+
463
+ return false;
464
+ }
465
+
466
+ /**
467
+ * User Paid
468
+ * Checks if a given user has paid for a specific post.
469
+ * Will return true if the user can edit this plugin or creds.
470
+ *
471
+ * @param $user_id (int) required user id
472
+ * @param $post_id (int) required post id
473
+ * @returns (bool) true or false
474
+ * @since 0.1
475
+ * @version 1.0
476
+ */
477
+ public function user_paid( $user_id, $post_id ) {
478
+ if ( $this->core->can_edit_plugin( $user_id ) || $this->core->can_edit_creds( $user_id ) ) return true;
479
+
480
+ global $wpdb;
481
+
482
+ $sql = "SELECT ID FROM " . $wpdb->prefix . 'myCRED_log' . " WHERE user_id = %d AND ref = %s AND ref_id = %d ";
483
+ $results = $wpdb->get_results( $wpdb->prepare( $sql, $user_id, 'buy_content', $post_id ) );
484
+ if ( $wpdb->num_rows == 1 ) return true;
485
+
486
+ return false;
487
+ }
488
+
489
+ /**
490
+ * User Can Buy
491
+ * Checks if a given user can afford the given price.
492
+ *
493
+ * @param $user_id (int) required user id
494
+ * @param $price (int|float) required price to check
495
+ * @returns (bool) true or false
496
+ * @since 0.1
497
+ * @version 1.0
498
+ */
499
+ public function user_can_buy( $user_id, $price ) {
500
+ $balance = $this->core->get_users_cred( $user_id );
501
+ if ( $balance-$price < 0 ) return false;
502
+ return true;
503
+ }
504
+
505
+ /**
506
+ * Get Button
507
+ * Replaces the %buy_button% template tag with the submit button along
508
+ * with the set button label. If no template tag is found one is inserted in the end of the given string.
509
+ *
510
+ * @param $text (string) text to check for template tag.
511
+ * @param $post (object) optional post object to allow post template tags.
512
+ * @returns (string) formated string.
513
+ * @since 0.1
514
+ * @version 1.0
515
+ */
516
+ public function get_button( $text, $post ) {
517
+ $sell_content = $this->sell_content;
518
+ $prefs = $this->get_sale_prefs( $post->ID );
519
+
520
+ // Button Label
521
+ if ( isset( $prefs['button_label'] ) )
522
+ $button_text = $prefs['button_label'];
523
+ else
524
+ $button_text = $sell_content['defaults']['button_label'];
525
+
526
+ // Button element
527
+ $button = '<input type="submit" name="mycred-buy-button" id="mycred-buy-button" value="' . $this->core->template_tags_post( $button_text, $post ) . '" class="button large" />';
528
+
529
+ // Make sure there is a button
530
+ if ( !preg_match( '/%buy_button%/', $text ) )
531
+ $text .= ' %buy_button% ';
532
+
533
+ $content = str_replace( '%buy_button%', $button, $text );
534
+
535
+ return $content;
536
+ }
537
+
538
+ /**
539
+ * The Content Overwrite
540
+ * If the current post is set for sale we apply the appropirate template.
541
+ * Uses 3 different templates. a) Visitors Template b) Members Template and c) Cant Afford Template
542
+ *
543
+ * @returns (string) content
544
+ * @since 0.1
545
+ * @version 1.0
546
+ */
547
+ public function the_content( $content ) {
548
+ global $mycred_content_purchase;
549
+
550
+ // If content is for sale
551
+ if ( isset( $GLOBALS['post']->ID ) && $this->for_sale( $GLOBALS['post']->ID ) ) {
552
+ // Prep
553
+ $post_id = $GLOBALS['post']->ID;
554
+ $user_id = get_current_user_id();
555
+ $sell_content = $this->sell_content;
556
+ $prefs = $this->get_sale_prefs( $post_id );
557
+
558
+ // Visitors
559
+ if ( !is_user_logged_in() ) {
560
+ $template = $sell_content['templates']['visitors'];
561
+
562
+ $template = str_replace( '%price%', $this->core->format_creds( $prefs['price'] ), $template );
563
+ $template = $this->core->template_tags_post( $template, $GLOBALS['post'] );
564
+ return '<div class="mycred-content-forsale">' . $template . '</div>';
565
+ }
566
+
567
+ // We are logged in, have not purchased this item and can make a purchase
568
+ elseif ( is_user_logged_in() && !$this->user_paid( $user_id, $post_id ) && $this->user_can_buy( $user_id, $prefs['price'] ) ) {
569
+ $template = $sell_content['templates']['members'];
570
+
571
+ $template = str_replace( '%price%', $this->core->format_creds( $prefs['price'] ), $template );
572
+ $template = $this->core->template_tags_post( $template, $GLOBALS['post'] );
573
+ $template = $this->get_button( $template, $GLOBALS['post'] );
574
+ return '
575
+ <form action="" method="post">
576
+ <input type="hidden" name="mycred_purchase[post_id]" id="" value="' . $post_id . '" />
577
+ <input type="hidden" name="mycred_purchase[post_type]" id="" value="' . $GLOBALS['post']->post_type . '" />
578
+ <input type="hidden" name="mycred_purchase[user_id]" id="" value="' . get_current_user_id() . '" />
579
+ <input type="hidden" name="mycred_purchase[author]" id="" value="' . $GLOBALS['post']->post_author . '" />
580
+ <input type="hidden" name="mycred_purchase_token" id="" value="' . wp_create_nonce( 'buy-content' ) . '" />
581
+ <input type="hidden" name="mycred_purchase[action]" id="" value="buy" />
582
+ <div class="mycred-content-forsale">' . $template . '</div>
583
+ </form>';
584
+ }
585
+ // We are logged in, have not purchased this item and can not afford to buy this
586
+ elseif ( is_user_logged_in() && !$this->user_paid( $user_id, $post_id ) && !$this->user_can_buy( $user_id, $prefs['price'] ) ) {
587
+ $template = $sell_content['templates']['cantafford'];
588
+
589
+ $template = str_replace( '%price%', $this->core->format_creds( $prefs['price'] ), $template );
590
+ $template = $this->core->template_tags_post( $template, $GLOBALS['post'] );
591
+ return '<div class="mycred-content-forsale">' . $template . '</div>';
592
+ }
593
+ }
594
+
595
+ // Mark purchases
596
+ if ( $mycred_content_purchase === true ) {
597
+ $thank_you = __( 'Thank you for your purchase!', 'mycred' );
598
+ $wrapper = '<div id="mycred-thank-you"><p>' . $thank_you . '</p></div>';
599
+ $content = $wrapper . $content;
600
+ }
601
+
602
+ return $content;
603
+ }
604
+
605
+ /**
606
+ * Render Shortcode
607
+ * Just as protecting the entire content, the sell_this_myCRED shortcode protects
608
+ * parts of the content.
609
+ *
610
+ * @returns (string) content
611
+ * @since 0.1
612
+ * @version 1.0
613
+ */
614
+ public function render_shortcode( $atts, $content ) {
615
+ $post_id = $GLOBALS['post']->ID;
616
+ $user_id = get_current_user_id();
617
+ $sell_content = $this->sell_content;
618
+
619
+ $prefs = shortcode_atts( array(
620
+ 'price' => $sell_content['defaults']['price'],
621
+ 'button_label' => $sell_content['defaults']['button_label']
622
+ ), $atts );
623
+ $sales_prefs = $this->get_sale_prefs( $post_id );
624
+
625
+ // If we are not using defaults save these settings.
626
+ if ( $sales_prefs['price'] != $prefs['price'] || $sales_prefs['button_label'] != $prefs['button_label'] ) {
627
+ update_post_meta( $post_id, 'myCRED_sell_content', array(
628
+ 'price' => $prefs['price'],
629
+ 'status' => $sales_prefs['status'],
630
+ 'button_label' => $prefs['button_label']
631
+ ) );
632
+ }
633
+
634
+ // Not logged in
635
+ if ( !is_user_logged_in() ) {
636
+ $template = $sell_content['templates']['visitors'];
637
+
638
+ $template = str_replace( '%price%', $this->core->format_creds( $prefs['price'] ), $template );
639
+ $template = $this->core->template_tags_post( $template, $GLOBALS['post'] );
640
+ unset( $content );
641
+ return '<div class="mycred-content-forsale">' . $template . '</div>';
642
+ }
643
+
644
+ // Can buy
645
+ elseif ( is_user_logged_in() && !$this->user_paid( $user_id, $post_id ) && $this->user_can_buy( $user_id, $prefs['price'] ) ) {
646
+ $template = $sell_content['templates']['members'];
647
+
648
+ $template = str_replace( '%price%', $this->core->format_creds( $prefs['price'] ), $template );
649
+ $template = $this->core->template_tags_post( $template, $GLOBALS['post'] );
650
+ $template = $this->get_button( $template, $GLOBALS['post'] );
651
+ unset( $content );
652
+ return '
653
+ <form action="" method="post">
654
+ <input type="hidden" name="mycred_purchase[post_id]" id="" value="' . $post_id . '" />
655
+ <input type="hidden" name="mycred_purchase[post_type]" id="" value="' . $GLOBALS['post']->post_type . '" />
656
+ <input type="hidden" name="mycred_purchase[user_id]" id="" value="' . get_current_user_id() . '" />
657
+ <input type="hidden" name="mycred_purchase[author]" id="" value="' . $GLOBALS['post']->post_author . '" />
658
+ <input type="hidden" name="mycred_purchase_token" id="" value="' . wp_create_nonce( 'buy-content' ) . '" />
659
+ <input type="hidden" name="mycred_purchase[action]" id="" value="buy" />
660
+ <div class="mycred-content-forsale">' . $template . '</div>
661
+ </form>';
662
+ }
663
+
664
+ // We are logged in, have not purchased this item and can not afford to buy this
665
+ elseif ( is_user_logged_in() && !$this->user_paid( $user_id, $post_id ) && !$this->user_can_buy( $user_id, $prefs['price'] ) ) {
666
+ $template = $sell_content['templates']['cantafford'];
667
+
668
+ $template = str_replace( '%price%', $this->core->format_creds( $prefs['price'] ), $template );
669
+ $template = $this->core->template_tags_post( $template, $GLOBALS['post'] );
670
+ unset( $content );
671
+ return '<div class="mycred-content-forsale">' . $template . '</div>';
672
+ }
673
+
674
+ return $content;
675
+ }
676
+
677
+ /**
678
+ * Contextual Help
679
+ * @since 0.1
680
+ * @version 1.0
681
+ */
682
+ public function help( $screen_id, $screen ) {
683
+ if ( $screen_id != 'mycred_page_myCRED_page_settings' ) return;
684
+
685
+ $screen->add_help_tab( array(
686
+ 'id' => 'mycred-sell-content',
687
+ 'title' => __( 'Sell Content', 'mycred' ),
688
+ 'content' => '
689
+ <p>' . $this->core->template_tags_general( __( 'This add-on lets you sell either entire contents or parts of it. You can select if you want to just charge users or share a percentage of the sale with the post author.', 'mycred' ) ) . '</p>
690
+ <p><strong>' . __( 'Defaults', 'mycred' ) . '</strong></p>
691
+ <p>' . __( 'The default price and button label is applied to all content that is set for sale. You can select if you want to enforce these settings or let the content authors set their own.', 'mycred' ) . '</p>
692
+ <p><strong>' . __( 'Usage', 'mycred' ) . '</strong></p>
693
+ <p>' . __( 'You can either sell entire posts via the Sell Content Meta Box or by using the <code>mycred_sell_this</code> shortcode.<br />For more information on how to use the shortcode, please visit the', 'mycred' ) . ' <a href="http://mycred.merovingi.com/shortcodes/mycred_sell_this/" target="_blank">myCRED Codex</a>.</p>'
694
+ ) );
695
+ }
696
+ }
697
+ $sell_content = new myCRED_Sell_Content();
698
+ $sell_content->load();
699
+ }
700
+ ?>
addons/transfer/css/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/transfer/css/transfer.css ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Transfer Styling
3
+ * @since 0.1
4
+ * @version 1.0
5
+ */
6
+ .mycred-transfer-cred-wrapper { display: block; float: none; clear: both; margin: 0; padding: 0; }
7
+ .mycred-transfer-cred-wrapper>p { margin-bottom: 12px; }
8
+ .mycred-transfer-cred-wrapper ol { margin: 0; padding: 0; float: none; clear: both; }
9
+ .mycred-transfer-cred-wrapper ol li { list-style-type: none; float: left; margin: 0; }
10
+ .widget .mycred-transfer-cred-wrapper ol li { float: none; }
11
+
12
+ .mycred-transfer-cred-wrapper ol li.mycred-send-to { width: 40%; }
13
+ .mycred-transfer-cred-wrapper ol li.mycred-send-to div.transfer-to { height: 100px; }
14
+ .widget .mycred-transfer-cred-wrapper ol li.mycred-send-to { width: 100%; }
15
+ .mycred-transfer-cred-wrapper ol li.mycred-send-to span.ui-helper-hidden-accessible { display: none !important; }
16
+
17
+ .mycred-transfer-cred-wrapper ol li.mycred-send-details { width: 58%; }
18
+ .mycred-transfer-cred-wrapper ol li.mycred-send-details input[type="button"] { margin-top: 0; }
19
+ .widget .mycred-transfer-cred-wrapper ol li.mycred-send-details { width: 100%; }
20
+ .mycred-transfer-cred-wrapper ol li.mycred-send-details span:empty { display: none; }
21
+
22
+ .mycred-transfer-cred-wrapper ol li label { display: block; }
23
+ .mycred-transfer-cred-wrapper ol li input[type="text"] { width: 90%; }
24
+ .mycred-transfer-cred-wrapper ol li input[type="text"].short { width: 40%; }
25
+ .mycred-transfer-cred-wrapper ol li input[type="button"] { margin-left: 12px; float: right; }
26
+
27
+ .mycred-transfer-info { margin: 0; padding: 6px 0; display: block; clear: both; float: none; }
28
+ .mycred-transfer-info p { font-size: smaller; line-height: 16px; margin: 0; padding: 0; }
29
+
30
+ ul.ui-autocomplete { border: none; margin: 0; padding: 6px 0 0 0; width: 100%; z-index: 10 !important; }
31
+ ul.ui-autocomplete li { background-color: white; padding: 0 4px; display: block; margin: 0; width: 90%; text-align: left; border-bottom: 1px solid silver; list-style-type: none; }
32
+ ul.ui-autocomplete li:first-child { border-top: 1px solid silver; }
33
+ ul.ui-autocomplete li:hover { background-color: #eee; }
34
+ ul.ui-autocomplete li a { display: block; cursor: pointer; width: 100%; margin: 0; padding: 8px 0; }
addons/transfer/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/transfer/js/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
addons/transfer/js/transfer.js ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * myCRED Transfer jQuery
3
+ * Handles transfer requests and autocomplete of user login names.
4
+ *
5
+ * @requires jQuery
6
+ * @requires jQuery UI
7
+ * @requires jQuery Autocomplete
8
+ * @since 0.1
9
+ * @version 1.0.21
10
+ */
11
+ jQuery(function($){
12
+ // Transfer function
13
+ var transfer_creds = function( to, creds ) {
14
+ $.ajax({
15
+ type : "POST",
16
+ data : {
17
+ action : 'mycred-transfer-creds',
18
+ sender : myCRED.user_id,
19
+ recipient : to,
20
+ amount : creds,
21
+ token : myCRED.token
22
+ },
23
+ dataType : "JSON",
24
+ url : myCRED.ajaxurl,
25
+ // Before we start
26
+ beforeSend : function() {},
27
+ // On Successful Communication
28
+ success : function( data ) {
29
+ // Security token could not be verified.
30
+ if ( data == 'error_1' ) {
31
+ alert( myCRED.error_1 );
32
+ }
33
+ // Communications error.
34
+ else if ( data == 'error_2' ) {
35
+ alert( myCRED.error_2 );
36
+ }
37
+ // Recipient not found.
38
+ else if ( data == 'error_3' ) {
39
+ alert( myCRED.error_3 );
40
+ }
41
+ // Trying to send to excluded user.
42
+ else if ( data == 'error_4' ) {
43
+ alert( myCRED.error_4 );
44
+ }
45
+ // Incorrect amount.
46
+ else if ( data == 'error_5' ) {
47
+ alert( myCRED.error_5 );
48
+ }
49
+ // This myCRED Add-on has not yet been setup!
50
+ else if ( data == 'error_6' ) {
51
+ alert( myCRED.error_6 );
52
+ }
53
+ // Insufficient funds.
54
+ else if ( data == 'error_7' ) {
55
+ alert( myCRED.error_7 );
56
+ }
57
+ // Transfer Limit exceeded.
58
+ else if ( data == 'error_8' ) {
59
+ alert( myCRED.error_8 );
60
+ }
61
+ // Requested Amount will exceed limit.
62
+ else if ( data == 'error_9' ) {
63
+ alert( myCRED.error_9 );
64
+ }
65
+ // Transfer Completed.
66
+ else if ( data == 'ok' ) {
67
+ alert( myCRED.completed );
68
+ location.reload();
69
+ }
70
+ },
71
+ // Error (sent to console)
72
+ error : function( jqXHR, textStatus, errorThrown ) {
73
+ alert( myCRED.error_2 );
74
+ location.reload();
75
+ // Debug - uncomment to use
76
+ //console.log( jqXHR );
77
+ }
78
+ });
79
+ };
80
+
81
+ // Autocomplete
82
+ // @api http://api.jqueryui.com/autocomplete/
83
+ var cache = {};
84
+ $('input.mycred-autofill').autocomplete({
85
+ minLength: 1,
86
+ source: function( request, response ) {
87
+ var term = request.term;
88
+ if ( term in cache ) {
89
+ response( cache[ term ] );
90
+ return;
91
+ }
92
+
93
+ var send = {
94
+ action : "mycred-autocomplete",
95
+ me : myCRED.user_id,
96
+ token : myCRED.atoken,
97
+ string : request
98
+ };
99
+ $.getJSON( myCRED.ajaxurl, send, function( data, status, xhr ) {
100
+ cache[ term ] = data;
101
+ // Debug - uncomment to use
102
+ //console.log( data );
103
+ //console.log( status );
104
+ response( data );
105
+ });
106
+ },
107
+ appendTo : 'div.transfer-to'
108
+ });
109
+
110
+ // Attempt Transfer
111
+ $('.mycred-click').click(function(){
112
+ // To:
113
+ var receipient = $(this).parent().prev().children( 'div' ).children( 'input' );
114
+ var to = $(receipient).val();
115
+ // Debug - uncomment to use
116
+ //console.log( to );
117
+
118
+ // Amount:
119
+ var amount = $(this).prev().prev();
120
+ var creds = $(amount).val();
121
+ // Debug - uncomment to use
122
+ //console.log( creds );
123
+
124
+ // If elements are not emepty attempt transfer
125
+ if ( to != '' && creds != '' ) {
126
+ transfer_creds( to, creds );
127
+ }
128
+ });
129
+ });
addons/transfer/myCRED-addon-transfer.php ADDED
@@ -0,0 +1,827 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Addon: Transfer
4
+ * Addon URI: http://mycred.merovingi.com
5
+ * Version: 1.0
6
+ * Description: Allow your users to send or "donate" points to other members by either using the mycred_transfer shortcode or the myCRED Transfer widget.
7
+ * Author: Gabriel S Merovingi
8
+ * Author URI: http://www.merovingi.com
9
+ */
10
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
11
+ define( 'myCRED_TRANSFER', __FILE__ );
12
+ define( 'myCRED_TRANSFER_VERSION', myCRED_VERSION . '.1' );
13
+ /**
14
+ * myCRED_Transfer_Creds class
15
+ *
16
+ * Manages this add-on by hooking into myCRED where needed. Regsiters our custom shortcode and widget
17
+ * along with scripts and styles needed. Also adds settings to the myCRED settings page.
18
+ * @since 0.1
19
+ * @version 1.0
20
+ */
21
+ if ( !class_exists( 'myCRED_Transfer_Creds' ) ) {
22
+ class myCRED_Transfer_Creds extends myCRED_Module {
23
+
24
+ /**
25
+ * Construct
26
+ */
27
+ function __construct() {
28
+ parent::__construct( 'myCRED_Transfer_Creds', array(
29
+ 'module_name' => 'transfers',
30
+ 'defaults' => array(
31
+ 'logs' => array(
32
+ 'sending' => 'Transfer of %plural% to %display_name%',
33
+ 'receiving' => 'Transfer of %plural% from %display_name%'
34
+ ),
35
+ 'errors' => array(
36
+ 'low' => __( 'You do not have enough %plural% to send.', 'mycred' ),
37
+ 'over' => __( 'You have exceeded your %limit% transfer limit.', 'mycred' )
38
+ ),
39
+ 'templates' => array(
40
+ 'login' => '',
41
+ 'balance' => 'Your current balance is %balance%',
42
+ 'limit' => 'Your current %limit% transfer limit is %left%',
43
+ 'button' => __( 'Transfer', 'mycred' )
44
+ ),
45
+ 'limit' => array(
46
+ 'amount' => 1000,
47
+ 'limit' => 'none'
48
+ )
49
+ ),
50
+ 'register' => false,
51
+ 'add_to_core' => true
52
+ ) );
53
+
54
+ add_action( 'mycred_help', array( $this, 'help' ), 10, 2 );
55
+ }
56
+
57
+ /**
58
+ * Init
59
+ * @since 0.1
60
+ * @version 1.0
61
+ */
62
+ public function module_init() {
63
+ // Call Scripts & Styles when needed
64
+ add_shortcode( 'mycred_transfer', 'mycred_transfer_render' );
65
+ add_action( 'wp_footer', array( $this, 'front_footer' ) );
66
+
67
+ // Register Scripts & Styles
68
+ add_action( 'mycred_front_enqueue', array( $this, 'front_enqueue' ) );
69
+
70
+ // Ajax Calls
71
+ add_action( 'wp_ajax_mycred-transfer-creds', array( $this, 'ajax_call_transfer' ) );
72
+ add_action( 'wp_ajax_mycred-autocomplete', array( $this, 'ajax_call_autocomplete' ) );
73
+ }
74
+
75
+ /**
76
+ * Register Widgets
77
+ * @since 0.1
78
+ * @version 1.0
79
+ */
80
+ public function module_widgets_init() {
81
+ register_widget( 'myCRED_Widget_Transfer' );
82
+ }
83
+
84
+ /**
85
+ * Enqueue Front
86
+ * @filter 'mycred_remove_transfer_css'
87
+ * @since 0.1
88
+ * @version 1.0
89
+ */
90
+ public function front_enqueue() {
91
+ // Register script
92
+ wp_register_script(
93
+ 'mycred-transfer-ajax',
94
+ plugins_url( 'js/transfer.js', myCRED_TRANSFER ),
95
+ array( 'jquery', 'jquery-ui-autocomplete' ),
96
+ myCRED_TRANSFER_VERSION . '.2'
97
+ );
98
+
99
+ // Register style (can be disabled)
100
+ if ( apply_filters( 'mycred_remove_transfer_css', false ) === false ) {
101
+ wp_register_style(
102
+ 'mycred-transfer-front',
103
+ plugins_url( 'css/transfer.css', myCRED_TRANSFER ),
104
+ false,
105
+ myCRED_TRANSFER_VERSION . '.2',
106
+ 'all'
107
+ );
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Front Footer
113
+ * @filter 'mycred_transfer_messages'
114
+ * @since 0.1
115
+ * @version 1.0
116
+ */
117
+ public function front_footer() {
118
+ global $mycred_load;
119
+
120
+ if ( !isset( $mycred_load ) || $mycred_load === false ) return;
121
+
122
+ wp_enqueue_style( 'mycred-transfer-front' );
123
+ wp_enqueue_script( 'mycred-transfer-ajax' );
124
+
125
+ $base = array(
126
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
127
+ 'user_id' => get_current_user_id(),
128
+ 'token' => wp_create_nonce( 'mycred-transfer-creds' ),
129
+ 'atoken' => wp_create_nonce( 'mycred-autocomplete' )
130
+ );
131
+
132
+ // Messages
133
+ $messages = apply_filters( 'mycred_transfer_messages', array(
134
+ 'completed' => __( 'Transaction completed.', 'mycred' ),
135
+ 'error_1' => __( 'Security token could not be verified. Please contact your site administrator!', 'mycred' ),
136
+ 'error_2' => __( 'Communications error. Please try again later.', 'mycred' ),
137
+ 'error_3' => __( 'Recipient not found. Please try again.', 'mycred' ),
138
+ 'error_4' => __( 'Transaction declined by recipient.', 'mycred' ),
139
+ 'error_5' => __( 'Incorrect amount. Please try again.', 'mycred' ),
140
+ 'error_6' => __( 'This myCRED Add-on has not yet been setup! No transfers are allowed until this has been done!', 'mycred' ),
141
+ 'error_7' => __( 'Insufficient funds. Please enter a lower amount.', 'mycred' ),
142
+ 'error_8' => __( 'Transfer Limit exceeded.', 'mycred' ),
143
+ 'error_9' => __( 'The request amount will exceed your transfer limit. Please try again with a lower amount!', 'mycred' )
144
+ ) );
145
+
146
+ wp_localize_script(
147
+ 'mycred-transfer-ajax',
148
+ 'myCRED',
149
+ array_merge_recursive( $base, $messages )
150
+ );
151
+ }
152
+
153
+ /**
154
+ * Settings Page
155
+ * @since 0.1
156
+ * @version 1.0
157
+ */
158
+ public function after_general_settings() {
159
+ // Settings
160
+ $settings = $this->transfers;
161
+
162
+ $before = $this->core->before;
163
+ $after = $this->core->after;
164
+
165
+ // Limits
166
+ $limit = $settings['limit']['limit'];
167
+ $limits = array(
168
+ 'none' => __( 'No limits.', 'mycred' ),
169
+ 'daily' => __( 'Impose daily limit.', 'mycred' ),
170
+ 'weekly' => __( 'Impose weekly limit.', 'mycred' )
171
+ );
172
+ $available_limits = apply_filters( 'mycred_transfer_limits', $limits, $settings ); ?>
173
+
174
+ <h4 style="color:#BBD865;"><?php _e( 'Transfer CREDs', 'mycred' ); ?></h4>
175
+ <div class="body" style="display:none;">
176
+ <label class="subheader"><?php _e( 'Log template for sending', 'mycred' ); ?></label>
177
+ <ol id="myCRED-transfer-logging-send">
178
+ <li>
179
+ <div class="h2"><input type="text" name="mycred_pref_core[transfers][logs][sending]" id="myCRED-transfer-log-sender" value="<?php echo $settings['logs']['sending']; ?>" class="long" /></div>
180
+ <span class="description"><?php _e( 'Available template tags: General, User', 'mycred' ); ?></span>
181
+ </li>
182
+ </ol>
183
+ <label class="subheader"><?php _e( 'Log template for receiving', 'mycred' ); ?></label>
184
+ <ol id="myCRED-transfer-logging-receive">
185
+ <li>
186
+ <div class="h2"><input type="text" name="mycred_pref_core[transfers][logs][receiving]" id="myCRED-transfer-log-receiver" value="<?php echo $settings['logs']['receiving']; ?>" class="long" /></div>
187
+ <span class="description"><?php _e( 'Available template tags: General, User', 'mycred' ); ?></span>
188
+ </li>
189
+ </ol>
190
+ <label class="subheader"><?php _e( 'Limits', 'mycred' ); ?></label>
191
+ <ol id="myCRED-transfer-limits">
192
+ <?php
193
+ // Loop though limits
194
+ if ( !empty( $limits ) ) {
195
+ foreach ( $limits as $key => $description ) { ?>
196
+
197
+ <li>
198
+ <input type="radio" name="mycred_pref_core[transfers][limit][limit]" id="myCRED-limit-<?php echo $key; ?>" <?php checked( $limit, $key ); ?> value="<?php echo $key; ?>" />
199
+ <label for="myCRED-limit-<?php echo $key; ?>"><?php echo $description; ?></label>
200
+ </li>
201
+ <?php
202
+ }
203
+ } ?>
204
+
205
+ <li class="empty">&nbsp;</li>
206
+ <li>
207
+ <label for="<?php echo $this->field_id( array( 'limit' => 'amount' ) ); ?>"><?php _e( 'Maximum Amount', 'mycred' ); ?></label>
208
+ <div class="h2"><?php echo $before; ?> <input type="text" name="<?php echo $this->field_name( array( 'limit' => 'amount' ) ); ?>" id="<?php echo $this->field_id( array( 'limit' => 'amount' ) ); ?>" value="<?php echo $this->core->number( $settings['limit']['amount'] ); ?>" size="8" /> <?php echo $after; ?></div>
209
+ <span class="description"><?php _e( 'This amount is ignored if no limits are imposed.', 'mycred' ); ?></span>
210
+ </li>
211
+ </ol>
212
+ <label class="subheader"><?php _e( 'Form Templates', 'mycred' ); ?></label>
213
+ <ol id="myCRED-transfer-form-templates">
214
+ <li>
215
+ <label for="<?php echo $this->field_id( array( 'templates' => 'login' ) ); ?>"><?php _e( 'Not logged in Template', 'mycred' ); ?></label>
216
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'templates' => 'login' ) ); ?>" id="<?php echo $this->field_id( array( 'templates' => 'login' ) ); ?>" value="<?php echo $settings['templates']['login']; ?>" class="long" /></div>
217
+ <span class="description"><?php _e( 'Text to show when users are not logged in. Leave empty to hide. No HTML elements allowed!', 'mycred' ); ?></span>
218
+ </li>
219
+ <li class="empty">&nbsp;</li>
220
+ <li>
221
+ <label for="<?php echo $this->field_id( array( 'templates' => 'balance' ) ); ?>"><?php _e( 'Balance Template', 'mycred' ); ?></label>
222
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'templates' => 'balance' ) ); ?>" id="<?php echo $this->field_id( array( 'templates' => 'balance' ) ); ?>" value="<?php echo $settings['templates']['balance']; ?>" class="long" /></div>
223
+ <span class="description"><?php _e( 'Template to use when displaying the users balance (if included). No HTML elements allowed!', 'mycred' ); ?></span>
224
+ </li>
225
+ <li class="empty">&nbsp;</li>
226
+ <li>
227
+ <label for="<?php echo $this->field_id( array( 'templates' => 'limit' ) ); ?>"><?php _e( 'Limit Template', 'mycred' ); ?></label>
228
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'templates' => 'limit' ) ); ?>" id="<?php echo $this->field_id( array( 'templates' => 'limit' ) ); ?>" value="<?php echo $settings['templates']['limit']; ?>" class="long" /></div>
229
+ <span class="description"><?php _e( 'Template to use when displaying limits (if used). No HTML elements allowed!', 'mycred' ); ?></span>
230
+ </li>
231
+ <li class="empty">&nbsp;</li>
232
+ <li>
233
+ <label for="<?php echo $this->field_id( array( 'templates' => 'button' ) ); ?>"><?php _e( 'Button Template', 'mycred' ); ?></label>
234
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'templates' => 'button' ) ); ?>" id="<?php echo $this->field_id( array( 'templates' => 'button' ) ); ?>" value="<?php echo $settings['templates']['button']; ?>" class="medium" /></div>
235
+ <span class="description"><?php _e( 'Send Transfer button template. No HTML elements allowed!', 'mycred' ); ?></span>
236
+ </li>
237
+ </ol>
238
+ <label class="subheader"><?php _e( 'Error Messages', 'mycred' ); ?></label>
239
+ <ol id="myCRED-transfer-form-errors">
240
+ <li>
241
+ <label for="<?php echo $this->field_id( array( 'errors' => 'low' ) ); ?>"><?php _e( 'Balance to low to send.', 'mycred' ); ?></label>
242
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'errors' => 'low' ) ); ?>" id="<?php echo $this->field_id( array( 'errors' => 'low' ) ); ?>" value="<?php echo $settings['errors']['low']; ?>" class="long" /></div>
243
+ <span class="description"><?php _e( 'Text to show when a users balance is to low for transfers. Leave empty to hide. No HTML elements allowed!', 'mycred' ); ?></span>
244
+ </li>
245
+ <li class="empty">&nbsp;</li>
246
+ <li>
247
+ <label for="<?php echo $this->field_id( array( 'errors' => 'over' ) ); ?>"><?php _e( 'Transfer Limit Reached.', 'mycred' ); ?></label>
248
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'errors' => 'over' ) ); ?>" id="<?php echo $this->field_id( array( 'errors' => 'over' ) ); ?>" value="<?php echo $settings['errors']['over']; ?>" class="long" /></div>
249
+ <span class="description"><?php _e( 'Text to show when a user has reached their transfer limit (if used). Leave empty to hide. No HTML elements allowed!', 'mycred' ); ?></span>
250
+ </li>
251
+ </ol>
252
+ </div>
253
+ <?php
254
+ }
255
+
256
+ /**
257
+ * Sanitize & Save Settings
258
+ * @since 0.1
259
+ * @version 1.0
260
+ */
261
+ public function sanitize_extra_settings( $new_data, $data, $general ) {
262
+ // Log
263
+ $new_data['transfers']['logs']['sending'] = sanitize_text_field( $data['transfers']['logs']['sending'] );
264
+ $new_data['transfers']['logs']['receiving'] = sanitize_text_field( $data['transfers']['logs']['receiving'] );
265
+
266
+ // Form Templates
267
+ $new_data['transfers']['templates']['login'] = sanitize_text_field( $data['transfers']['templates']['login'] );
268
+ $new_data['transfers']['templates']['balance'] = trim( $data['transfers']['templates']['balance'] );
269
+ $new_data['transfers']['templates']['limit'] = sanitize_text_field( $data['transfers']['templates']['limit'] );
270
+ $new_data['transfers']['templates']['button'] = sanitize_text_field( $data['transfers']['templates']['button'] );
271
+
272
+ // Error Messages
273
+ $new_data['transfers']['errors']['low'] = sanitize_text_field( $data['transfers']['errors']['low'] );
274
+ $new_data['transfers']['errors']['over'] = sanitize_text_field( $data['transfers']['errors']['over'] );
275
+
276
+ // Limits
277
+ $new_data['transfers']['limit']['limit'] = sanitize_text_field( $data['transfers']['limit']['limit'] );
278
+ $new_data['transfers']['limit']['amount'] = $data['transfers']['limit']['amount'];
279
+
280
+ return $new_data;
281
+ }
282
+
283
+ /**
284
+ * AJAX Transfer Creds
285
+ * @since 0.1
286
+ * @version 1.0
287
+ */
288
+ public function ajax_call_transfer() {
289
+ // Security
290
+ //check_ajax_referer( 'mycred-transfer-creds', 'token' );
291
+ if ( !isset( $_POST['token'] ) || ( isset( $_POST['token'] ) && !wp_verify_nonce( $_POST['token'], 'mycred-transfer-creds' ) ) )
292
+ die( json_encode( 'error_1' ) );
293
+
294
+ // Required
295
+ if ( !isset( $_POST['recipient'] ) || !isset( $_POST['sender'] ) || !isset( $_POST['amount'] ) )
296
+ die( json_encode( 'error_2' ) );
297
+
298
+ // Prep
299
+ $to = $_POST['recipient'];
300
+ $from = $_POST['sender'];
301
+ $amount = $_POST['amount'];
302
+
303
+ // Add-on has not been installed
304
+ if ( !isset( $this->transfers ) )
305
+ die( json_encode( 'error_6' ) );
306
+
307
+ $prefs = $this->transfers;
308
+ if ( !isset( $prefs['limit']['limit'] ) || !isset( $prefs['logs']['sending'] ) )
309
+ die( json_encode( 'error_6' ) );
310
+
311
+ // Get Recipient
312
+ $ruser = get_user_by( 'login', $to );
313
+ if ( $ruser === false ) die( json_encode( 'error_3' ) );
314
+ if ( $this->core->exclude_user( $ruser->ID ) ) die( json_encode( 'error_4' ) );
315
+ $recipient_id = $ruser->ID;
316
+
317
+ // Check amount
318
+ $amount = $this->core->number( $amount );
319
+ if ( $amount == $this->core->number( 0 ) ) die( json_encode( 'error_5' ) );
320
+
321
+ // Check funds
322
+ $senders_balance = $this->core->get_users_cred( $from );
323
+ if ( $amount > $senders_balance ) die( json_encode( 'error_7' ) );
324
+
325
+ $today = date_i18n( 'd' );
326
+ $this_week = date_i18n( 'W' );
327
+ $set_limit = $prefs['limit']['limit'];
328
+
329
+ // Check limits
330
+ if ( $prefs['limit']['limit'] != 'none' ) {
331
+ // Prep
332
+ $max = $this->core->number( $prefs['limit']['amount'] );
333
+
334
+ // Get users "limit log"
335
+ $history = get_user_meta( $from, 'mycred_transactions', true );
336
+ if ( empty( $history ) ) {
337
+ // Add new defaults
338
+ $history = array(
339
+ 'frame' => ( $prefs['limit']['limit'] == 'daily' ) ? $today : $this_week,
340
+ 'amount' => $this->core->number( 0 )
341
+ );
342
+ update_user_meta( $from, 'mycred_transactions', $history );
343
+ }
344
+
345
+ // Total amount so far
346
+ $current = $this->core->number( $history['amount'] );
347
+
348
+ // Daily limit
349
+ if ( $prefs['limit']['limit'] == 'daily' ) {
350
+ // New day, new limits
351
+ if ( $today != $history['frame'] ) {
352
+ $history = array(
353
+ 'frame' => $today,
354
+ 'amount' => $this->core->number( 0 )
355
+ );
356
+ update_user_meta( $from, 'mycred_transactions', $history );
357
+ }
358
+
359
+ // Make sure user has not reached or exceeded the transfer limit.
360
+ if ( $current >= $max ) die( json_encode( 'error_8' ) );
361
+ }
362
+
363
+ // Weekly limit
364
+ elseif ( $prefs['limit']['limit'] == 'weekly' ) {
365
+ // New week, new limits
366
+ if ( $this_week != $history['frame'] ) {
367
+ $history = array(
368
+ 'frame' => $this_week,
369
+ 'amount' => $this->core->number( 0 )
370
+ );
371
+ update_user_meta( $from, 'mycred_transactions', $history );
372
+ }
373
+
374
+ // Make sure user has not reached or exceeded the transfer limit.
375
+ if ( $current >= $max ) die( json_encode( 'error_8' ) );
376
+ }
377
+
378
+ // Make sure the requested amount will not take us over the limit.
379
+ $after_transfer = $amount+$current;
380
+ if ( $after_transfer > $max ) die( json_encode( 'error_9' ) );
381
+ }
382
+
383
+ // Let others play before we execute the transfer
384
+ do_action( 'mycred_transfer_ready', $this->core, $ruser );
385
+
386
+ // Generate Transaction ID for our records
387
+ $transaction_id = 'TXID' . date_i18n( 'U' );
388
+
389
+ // First take the amount from the sender
390
+ $this->core->add_creds(
391
+ 'transfer',
392
+ $from,
393
+ '-' . $amount,
394
+ $prefs['logs']['sending'],
395
+ $recipient_id,
396
+ array( 'ref_type' => 'user', 'tid' => $transaction_id )
397
+ );
398
+
399
+ // Update history if limits are imposed
400
+ if ( $prefs['limit']['limit'] != 'none' ) {
401
+ $history['amount'] = $after_transfer;
402
+ update_user_meta( $from, 'mycred_transactions', $history );
403
+ }
404
+
405
+ // Then add the amount to the receipient
406
+ $this->core->add_creds(
407
+ 'transfer',
408
+ $recipient_id,
409
+ $amount,
410
+ $prefs['logs']['receiving'],
411
+ $from,
412
+ array( 'ref_type' => 'user', 'tid' => $transaction_id )
413
+ );
414
+
415
+ // Let others play once transaction is completed
416
+ do_action( 'mycred_transfer_completed', $this->core );
417
+
418
+ // Clean up and die
419
+ unset( $this );
420
+ unset( $ruser );
421
+ die( json_encode( 'ok' ) );
422
+ }
423
+
424
+ /**
425
+ * AJAX Autocomplete
426
+ * @since 0.1
427
+ * @version 1.0
428
+ */
429
+ public function ajax_call_autocomplete() {
430
+ $results = array();
431
+
432
+ // Security
433
+ if ( isset( $_REQUEST['token'] ) && wp_verify_nonce( $_REQUEST['token'], 'mycred-autocomplete' ) ) {
434
+ global $wpdb;
435
+
436
+ // prep query
437
+ $sql = "SELECT user_login, ID FROM " . $wpdb->prefix . 'users' . " WHERE ID != %d AND user_login LIKE %s";
438
+ $search = $_REQUEST['string']['term'];
439
+ $me = $_REQUEST['me'];
440
+
441
+ // Query
442
+ $blog_users = $wpdb->get_results( $wpdb->prepare( $sql, $me, $search . '%' ) , 'ARRAY_N' );
443
+ if ( $wpdb->num_rows > 0 ) {
444
+ foreach ( $blog_users as $hit ) {
445
+ if ( $this->core->exclude_user( $hit[1] ) ) continue;
446
+ $results[] = $hit[0];
447
+ }
448
+ }
449
+ }
450
+
451
+ die( json_encode( $results ) );
452
+ }
453
+
454
+ /**
455
+ * Contextual Help
456
+ * @since 0.1
457
+ * @version 1.0
458
+ */
459
+ public function help( $screen_id, $screen ) {
460
+ if ( $screen_id != 'mycred_page_myCRED_page_settings' ) return;
461
+
462
+ $screen->add_help_tab( array(
463
+ 'id' => 'mycred-transfer',
464
+ 'title' => __( 'Transfer', 'mycred' ),
465
+ 'content' => '
466
+ <p>' . $this->core->template_tags_general( __( 'This add-on lets your users transfer %_plural% to each other. Members who are set to be excluded can neither send or receive %_plural%.', 'mycred' ) ) . '</p>
467
+ <p><strong>' . __( 'Transfer Limit', 'mycred' ) . '</strong></p>
468
+ <p>' . __( 'You can impose a daily-, weekly- or monthly transfer limit for each user. Note, that this transfer limit is imposed on everyone who are not excluded from using myCRED.', 'mycred' ) . '</p>
469
+ <p><strong>' . __( 'Usage', 'mycred' ) . '</strong></p>
470
+ <p>' . __( 'Transfers can be made by either using the <code>mycred_transfer</code> shortcode or via the myCRED Transfer Widget.<br />For more information on how to use the shortcode, please visit the', 'mycred' ) . ' <a href="http://mycred.merovingi.com/shortcodes/mycred_transfer/" target="_blank">myCRED Codex</a>.</p>'
471
+ ) );
472
+ }
473
+ }
474
+ $transfer = new myCRED_Transfer_Creds();
475
+ $transfer->load();
476
+ }
477
+
478
+ /**
479
+ * Widget: myCRED Balance
480
+ * @since 0.1
481
+ * @version 1.0
482
+ */
483
+ if ( !class_exists( 'myCRED_Widget_Transfer' ) ) {
484
+ class myCRED_Widget_Transfer extends WP_Widget {
485
+
486
+ /**
487
+ * Construct
488
+ */
489
+ function myCRED_Widget_Transfer() {
490
+ // Basic details about our widget
491
+ $widget_ops = array(
492
+ 'classname' => 'widget-my-cred-transfer',
493
+ 'description' => __( 'Allow cred transfers between users.', 'mycred' )
494
+ );
495
+ $this->WP_Widget( 'mycred_widget_transfer', __( 'myCRED Transfer', 'mycred' ), $widget_ops );
496
+ $this->alt_option_name = 'mycred_widget_transfer';
497
+ }
498
+
499
+ /**
500
+ * Widget Output
501
+ */
502
+ function widget( $args, $instance ) {
503
+ ob_start();
504
+ extract( $args, EXTR_SKIP );
505
+
506
+ // Prep
507
+ $title = $instance['title'];
508
+ $mycred = mycred_get_settings();
509
+ $pref = $mycred->transfers;
510
+
511
+ global $mycred_load;
512
+ // Members
513
+ if ( is_user_logged_in() ) {
514
+ // Excluded users
515
+ $user_id = get_current_user_id();
516
+ if ( $mycred->exclude_user( $user_id ) ) return;
517
+
518
+ echo $before_widget;
519
+ // Title
520
+ if ( !empty( $title ) ) {
521
+ echo $before_title;
522
+ echo $mycred->template_tags_general( $title );
523
+ echo $after_title;
524
+ }
525
+
526
+ // Prep shortcode
527
+ $attr = array(
528
+ 'show_balance' => $instance['show_balance'],
529
+ 'show_limit' => $instance['show_limit']
530
+ );
531
+ echo mycred_transfer_render( $attr, '' );
532
+
533
+ $mycred_load = true;
534
+ echo $after_widget;
535
+ }
536
+ // Visitors
537
+ else {
538
+ $mycred_load = false;
539
+ // If login message is set
540
+ if ( !empty( $pref['templates']['login'] ) ) {
541
+ echo $before_widget;
542
+ if ( !empty( $instance['title'] ) ) {
543
+ echo $before_title;
544
+ echo $mycred->template_tags_general( $title );
545
+ echo $after_title;
546
+ }
547
+
548
+ // Show login message
549
+ echo '<p>' . $mycred->template_tags_general( $pref['templates']['login'] ) . '</p>';
550
+ echo $after_widget;
551
+ }
552
+ return;
553
+ }
554
+ }
555
+
556
+ /**
557
+ * Outputs the options form on admin
558
+ */
559
+ function form( $instance ) {
560
+ // Defaults
561
+ $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : __( 'Transfer %plural%', 'mycred' );
562
+ $show_balance = isset( $instance['show_balance'] ) ? esc_attr( $instance['show_balance'] ) : false;
563
+ $show_limit = isset( $instance['show_limit'] ) ? esc_attr( $instance['show_limit'] ) : false; ?>
564
+
565
+ <!-- Widget Options -->
566
+ <p class="myCRED-widget-field">
567
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title', 'mycred' ); ?>:</label>
568
+ <input id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" class="widefat" />
569
+ </p>
570
+ <p class="myCRED-widget-field">
571
+ <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_balance' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_balance' ) ); ?>" value="1"<?php checked( $show_balance, true ); ?> class="checkbox" />
572
+ <label for="<?php echo esc_attr( $this->get_field_id( 'show_balance' ) ); ?>"><?php _e( 'Show users balance', 'mycred' ); ?></label>
573
+ </p>
574
+ <p class="myCRED-widget-field">
575
+ <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_limit' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_limit' ) ); ?>" value="1"<?php checked( $show_balance, true ); ?> class="checkbox" />
576
+ <label for="<?php echo esc_attr( $this->get_field_id( 'show_limit' ) ); ?>"><?php _e( 'Show users limit', 'mycred' ); ?></label>
577
+ </p>
578
+ <?php
579
+ }
580
+
581
+ /**
582
+ * Processes widget options to be saved
583
+ */
584
+ function update( $new_instance, $old_instance ) {
585
+ $instance = $old_instance;
586
+ $instance['title'] = trim( $new_instance['title'] );
587
+
588
+ $instance['show_balance'] = (bool) $new_instance['show_balance'];
589
+ $instance['show_limit'] = (bool) $new_instance['show_limit'];
590
+
591
+ mycred_flush_widget_cache( 'mycred_widget_transfer' );
592
+ return $instance;
593
+ }
594
+ }
595
+ }
596
+
597
+ /**
598
+ * Transfer Shortcode Render
599
+ * @see http://mycred.merovingi.com/functions/mycred_transfer_render/
600
+ * @attribute $charge_from (int) optional user ID from whom the points to be deducted, defaults to current user
601
+ * @attribute $pay_to (int) optional user ID to whom the transfer is made, if left empty the user will be able to search for a user
602
+ * @attribute $show_balance (bool) set to true to show current users balance, defaults to true
603
+ * @attribute $show_limit (bool) set to true to show current users limit. If limit is set to 'none' and $show_limit is set to true nothing will be returned
604
+ * @since 0.1
605
+ * @version 1.0
606
+ */
607
+ if ( !function_exists( 'mycred_transfer_render' ) ) {
608
+ function mycred_transfer_render( $atts, $content = NULL )
609
+ {
610
+ global $mycred_load;
611
+
612
+ // Get Attributes
613
+ extract( shortcode_atts( array(
614
+ 'charge_from' => NULL,
615
+ 'pay_to' => NULL,
616
+ 'show_balance' => 0,
617
+ 'show_limit' => 0
618
+ ), $atts ) );
619
+
620
+ // Settings
621
+ $mycred = mycred_get_settings();
622
+ $pref = $mycred->transfers;
623
+
624
+ $output = '';
625
+ $mycred_load = false;
626
+
627
+ // If we are not logged in
628
+ if ( !is_user_logged_in() ) {
629
+ if ( isset( $pref['templates']['login'] ) && !empty( $pref['templates']['login'] ) )
630
+ $output .= '<p class="mycred-transfer-login">' . $mycred->template_tags_general( $pref['templates']['login'] ) . '</p>';
631
+
632
+ return $output;
633
+ }
634
+
635
+ // Who to charge
636
+ if ( $charge_from === NULL ) $charge_from = get_current_user_id();
637
+
638
+ // Make sure user is not excluded
639
+ if ( $mycred->exclude_user( $charge_from ) ) return;
640
+
641
+ $status = mycred_user_can_transfer( $charge_from );
642
+ $my_balance = $mycred->get_users_cred( $charge_from );
643
+
644
+ // Error. Not enough creds
645
+ if ( $status == 'low' ) {
646
+ if ( isset( $pref['errors']['low'] ) && !empty( $pref['errors']['low'] ) ) {
647
+ $no_cred = str_replace( '%limit%', $pref['limit']['limit'], $pref['errors']['low'] );
648
+ $no_cred = str_replace( '%Limit%', ucwords( $pref['limit']['limit'] ), $no_cred );
649
+ $no_cred = str_replace( '%left%', $mycred->format_creds( $status ), $no_cred );
650
+ $output .= '<p class="mycred-transfer-low">' . $mycred->template_tags_general( $no_cred ) . '</p>';
651
+ }
652
+ return $output;
653
+ }
654
+
655
+ // Error. Over limit
656
+ if ( $status == 'limit' ) {
657
+ if ( isset( $pref['errors']['over'] ) && !empty( $pref['errors']['over'] ) ) {
658
+ $no_cred = str_replace( '%limit%', $pref['limit']['limit'], $pref['errors']['over'] );
659
+ $no_cred = str_replace( '%Limit%', ucwords( $pref['limit']['limit'] ), $no_cred );
660
+ $no_cred = str_replace( '%left%', $mycred->format_creds( $status ), $no_cred );
661
+ $output .= '<p class="mycred-transfer-over">' . $mycred->template_tags_general( $no_cred ) . '</p>';
662
+ }
663
+ return $output;
664
+ }
665
+
666
+ // Flag for scripts & styles
667
+ $mycred_load = true;
668
+
669
+ // If pay to is set
670
+ if ( $pay_to !== NULL ) {
671
+ $user = get_user_by( 'id', $pay_to );
672
+ if ( $user !== false )
673
+ $to_input = '<input type="text" name="mycred-transfer-to" value="' . $user->user_login . '" readonly="readonly" />';
674
+ else
675
+ $to_input = '<input type="text" name="mycred-transfer-to" value="" class="mycred-autofill" />';
676
+
677
+ unset( $user );
678
+ }
679
+ else $to_input = '<input type="text" name="mycred-transfer-to" value="" class="mycred-autofill" />';
680
+
681
+ // If content is passed on.
682
+ if ( $content !== NULL && !empty( $content ) )
683
+ $output .= '<p>' . nl2br( $content ) . '</p>';
684
+
685
+ // Main output
686
+ $output .= '
687
+ <ol>
688
+ <li class="mycred-send-to">
689
+ <label>' . __( 'To:', 'mycred' ) . '</label>
690
+ <div class="transfer-to">' . $to_input . '</div>
691
+ </li>
692
+ <li class="mycred-send-details">
693
+ <label>' . __( 'Amount:', 'mycred' ) . '</label>
694
+ <span class="mycred-before">' . $mycred->before . '</span>
695
+ <input type="text" class="short" name="mycred-transfer-amount" value="' . $mycred->format_number( 0 ) . '" size="8" />
696
+ <span class="mycred-after">' . $mycred->after . '</span>
697
+ <input type="button" class="button large button-large mycred-click" value="' . $pref['templates']['button'] . '" />';
698
+
699
+ $extras = array();
700
+
701
+ // Show Balance
702
+ if ( (bool) $show_balance === true && !empty( $pref['templates']['balance'] ) ) {
703
+ $balance_text = str_replace( '%balance%', $mycred->format_creds( $my_balance ), $pref['templates']['balance'] );
704
+ $extras[] = $mycred->template_tags_general( $balance_text );
705
+ }
706
+
707
+ // Show Limits
708
+ if ( (bool) $show_limit === true && !empty( $pref['templates']['limit'] ) && $pref['limit']['limit'] != 'none' ) {
709
+ $limit_text = str_replace( '%_limit%', $pref['limit']['limit'], $pref['templates']['limit'] );
710
+ $limit_text = str_replace( '%limit%', ucwords( $pref['limit']['limit'] ), $limit_text );
711
+ $limit_text = str_replace( '%left%', $mycred->format_creds( $status ), $limit_text );
712
+ $extras[] = $mycred->template_tags_general( $limit_text );
713
+ }
714
+
715
+ // No need to include this if extras is empty
716
+ if ( !empty( $extras ) ) {
717
+ $output .= '<br /><div class="mycred-transfer-info"><p>' . implode( '</p><p>', $extras ) . '</p></div>';
718
+ }
719
+
720
+ $output .= '
721
+ </li>
722
+ </ol>' . "\n";
723
+
724
+ // Return result
725
+ $result = '<div class="mycred-transfer-cred-wrapper">' . $output . '</div>';
726
+ $result = apply_filters( 'mycred_transfer_render', $result, $atts, $mycred );
727
+
728
+ unset( $mycred );
729
+ unset( $output );
730
+ return $result;
731
+ }
732
+ }
733
+
734
+ /**
735
+ * User Can Transfer
736
+ * @see http://mycred.merovingi.com/functions/mycred_user_can_transfer/
737
+ * @param $user_id (int) requred user id
738
+ * @returns true if no limit is set, 'limit' (string) if user is over limit else the amount of creds left
739
+ * @filter 'mycred_user_can_transfer'
740
+ * @since 0.1
741
+ * @version 1.0
742
+ */
743
+ if ( !function_exists( 'mycred_user_can_transfer' ) ) {
744
+ function mycred_user_can_transfer( $user_id )
745
+ {
746
+ if ( $user_id === NULL ) $user_id = get_current_user_id();
747
+
748
+ // Grab Settings
749
+ $mycred = mycred_get_settings();
750
+ $pref = $mycred->transfers;
751
+ $set_limit = $pref['limit']['limit'];
752
+ $balance = $mycred->get_users_cred( $user_id );
753
+
754
+ // To low balance
755
+ if ( $balance == 0 ) return 'low';
756
+
757
+ // No limits imposed
758
+ if ( $set_limit == 'none' ) return true;
759
+
760
+ // Else we have a limit to impose
761
+ $today = date_i18n( 'd' );
762
+ $this_week = date_i18n( 'W' );
763
+ $max = $mycred->number( $pref['limit']['amount'] );
764
+
765
+ // Get users "limit log"
766
+ $history = get_user_meta( $user_id, 'mycred_transactions', true );
767
+ if ( empty( $history ) ) {
768
+ // Apply defaults if not set
769
+ $history = array(
770
+ 'frame' => '',
771
+ 'amount' => $mycred->number( 0 )
772
+ );
773
+ }
774
+
775
+ // Daily limit
776
+ if ( $pref['limit']['limit'] == 'daily' ) {
777
+ // New day, new limits
778
+ if ( $today != $history['frame'] ) {
779
+ $new_data = array(
780
+ 'frame' => $today,
781
+ 'amount' => $mycred->number( 0 )
782
+ );
783
+ update_user_meta( $user_id, 'mycred_transactions', $new_data );
784
+ $current = $new_data['amount'];
785
+ }
786
+ // Same day, check limit
787
+ else {
788
+ $current = $mycred->number( $history['amount'] );
789
+ }
790
+
791
+ if ( $current >= $max ) return 'limit';
792
+ else {
793
+ $remaining = $max-$current;
794
+ return $mycred->number( $remaining );
795
+ }
796
+ }
797
+
798
+ // Weekly limit
799
+ elseif ( $pref['limit']['limit'] == 'weekly' ) {
800
+ // New week, new limits
801
+ if ( $this_week != $transfers['frame'] ) {
802
+ $new_data = array(
803
+ 'frame' => $this_week,
804
+ 'amount' => $mycred->number( 0 )
805
+ );
806
+ update_user_meta( $user_id, 'mycred_transactions', $new_data );
807
+ $current = $new_data['amount'];
808
+ }
809
+ // Same week, check limit
810
+ else {
811
+ $current = $mycred->number( $history['amount'] );
812
+ }
813
+
814
+ if ( $current >= $max ) return 'limit';
815
+ else {
816
+ $remaining = $max-$current;
817
+ return $mycred->number( $remaining );
818
+ }
819
+ }
820
+
821
+ // others limits
822
+ else {
823
+ return apply_filters( 'mycred_user_can_transfer', $mycred->number( $pref['limit']['amount'] ), $user_id, $balance, $transfers, $mycred );
824
+ }
825
+ }
826
+ }
827
+ ?>
assets/css/admin.css ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * myCRED Admin Styling
3
+ * @since 0.1
4
+ * @version 1.0
5
+ */
6
+ #myCRED-wrap table .column-username { width: 190px; }
7
+ #myCRED-wrap table .column-creds { width: 80px; }
8
+ #myCRED-wrap table .column-time { width: 160px; }
9
+ #myCRED-wrap table .alternate { background-color: white; }
10
+ #myCRED-wrap table tbody tr td { padding: 6px; }
11
+
12
+ /* Text Alignments */
13
+ .tl { text-align: left; }
14
+ .tc { text-align: center; }
15
+ .tr { text-align: right; }
16
+ .tj { text-align: justify; }
17
+
18
+ /* Specifics */
19
+ #icon-myCRED { background-image: url(../images/cred-icon32.png); background-repeat: no-repeat; background-position: 0 0; }
20
+ #myCRED-wrap p.submit { margin-top: 0; padding-top: 0; }
21
+
22
+ /* General */
23
+ #myCRED-wrap .h2 { font-family: "HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif; font-size: 22px; line-height: 29px; font-weight: normal; text-shadow: #fff 0 1px 0; }
24
+
25
+ /* Accordion */
26
+ #myCRED-wrap #accordion { margin: 24px 0; padding: 0; float: none; clear: both; border-top: 1px solid #ededed; border-bottom: 1px solid #ededed; }
27
+ #myCRED-wrap #accordion>h4 { font-size: 20px; line-height: 48px; font-weight: normal; color: #AAA; }
28
+ #myCRED-wrap #accordion>h4:focus { outline: none; }
29
+ #myCRED-wrap #accordion>h4:hover { cursor: pointer; }
30
+ #myCRED-wrap #accordion .ui-accordion-header { padding: 0 0 0 12px; margin: 0; border-top: 1px solid #ededed; }
31
+ #myCRED-wrap #accordion .ui-accordion-header input { vertical-align: middle; margin-right: 24px; }
32
+ #myCRED-wrap #accordion .ui-accordion-header:first-child { border-top: none; }
33
+ #myCRED-wrap #accordion .ui-state-active { font-weight: bold; letter-spacing: 1px; }
34
+ #myCRED-wrap #accordion h4.active { color: #BBD865; }
35
+ #myCRED-wrap #accordion h4.sandbox { color: #E3C22F; }
36
+ #myCRED-wrap #accordion h4.inactive { color: #B73030; }
37
+
38
+ #myCRED-wrap #accordion>div { margin: 0; padding: 24px 12px 12px 12px; }
39
+ #myCRED-wrap #accordion>div>p { margin-top: 0; }
40
+ #myCRED-wrap #accordion .ui-accordion-content { border-top: 1px dashed #ededed; float: none; clear: both; }
41
+ #myCRED-wrap #accordion .ui-accordion-content .wrapper:after { content: "."; height: 0; visibility: hidden; margin: 0; padding: 0; }
42
+
43
+ .ui-accordion-content { display: none; }
44
+ .ui-accordion-content>div.wrapper { display: block; margin: 0; padding: 0; float: none; clear: both; }
45
+ .ui-accordion-content>div.wrapper .clear { height: 0; visibility: hidden; display: block; float: none; clear: both; }
46
+ .ui-accordion-content>div.wrapper p { margin: 0; padding: 0; }
47
+ .ui-accordion-content>div.wrapper .description { float: right; clear: left; color: gray; font-style: italic; font-weight: normal; width: 50%; text-align: left; }
48
+ .ui-accordion-content>div.wrapper .links { margin-bottom: 6px; padding-bottom: 4px; }
49
+ .ui-accordion-content>form>p { margin: 0 0 24px 0; }
50
+
51
+ .ui-accordion-content .subheader { display: block; width: 20%; float: left; margin: 0; font-size: 14px; }
52
+ .ui-accordion-content input[type="file"] { line-height: 26px; }
53
+
54
+ /* Organized Lists */
55
+ #myCRED-wrap ol { list-style-type: none; display: block; padding: 0 0 24px 20%; margin: 0; float: none; clear: right; }
56
+ #myCRED-wrap ol:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
57
+ #myCRED-wrap ol.inline li { display: block; float: left; padding: 0 6px 6px 12px; }
58
+ #myCRED-wrap ol.inline li:first-child { padding-left: 0; }
59
+ #myCRED-wrap ol.inline li.block { float: none; padding: 0; clear: both; }
60
+ #myCRED-wrap ol li.empty { display: block; height: 1px; float: none; clear: both; }
61
+ #myCRED-wrap ol input.long { width: 50%; }
62
+ #myCRED-wrap ol input.short { width: 80px; }
63
+ #myCRED-wrap ol input[type="text"],
64
+ #myCRED-wrap ol input[type="checkbox"], #myCRED-wrap ol input[type="radio"] { margin-right: 12px; }
65
+ #myCRED-wrap ol li.option .h2, #myCRED-wrap ol li.option select, #myCRED-wrap ol li.option textarea { margin-left: 24px; }
66
+
67
+ /* Setup */
68
+ #myCRED-wrap>h2 { }
69
+ #myCRED-wrap form.setup { width: 70%; }
70
+ #myCRED-wrap form.setup ol { padding: 12px; }
71
+ #myCRED-wrap form.setup .action-row { text-align: right; }
72
+ #myCRED-wrap form.setup .action-row input { margin-right: 12px; }
73
+ #myCRED-wrap form.setup ol.center { text-align: center; }
74
+ #myCRED-wrap form.setup ol.center li { display: inline-block; min-width: 150px; padding: 0; margin: 0; text-align: center; }
75
+ #myCRED-wrap form.setup ol.center li.min { width: 49%; float: left; text-align: left; }
76
+ #myCRED-wrap form.setup .exchange-rate label { display: block; text-align: left; font-weight: bold; }
77
+ #myCRED-wrap form.setup .delete-cubes label { padding-right: 12px; text-align: left; }
78
+ #myCRED-wrap form.setup ol.regular li { text-align: left; float: left; padding: 6px; }
79
+ #myCRED-wrap form.setup ol.regular li.tl { width: auto; min-width: inherit; }
80
+ #myCRED-wrap form.setup ol li h2 { padding-right: 0; }
81
+
82
+ #myCRED-wrap form.setup ul { line-height: 24px; }
83
+ #myCRED-wrap form.setup ul li { padding: 6px 0; margin-bottom: 0; }
84
+ #myCRED-wrap form.setup ul li span { font-size: smaller; }
85
+ #myCRED-wrap form.setup ul li label { display: inline-block; width: 200px; max-width: 30%; font-weight: bold; }
86
+ #myCRED-wrap form.setup ul li input { margin-right: 12px; vertical-align: middle; }
assets/css/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
assets/css/widget.css ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * myCRED Widget Styling
3
+ * @since 0.1
4
+ * @version 1.0
5
+ */
6
+ .widget .myCRED-rank { float: right; }
7
+ .widget .myCRED-rank span { padding-right: 4px; color: gray; }
8
+
9
+ .widget .myCRED-balance { display: block; margin-bottom: 24px; text-align: center; font-size: larger; }
10
+
11
+ .widget .myCRED-leaderboard .cred { float: right; }
12
+ .widget .myCRED-leaderboard .first-item { font-size: 110%; }
13
+
14
+ .widget .myCRED-history { padding: 0; margin: 0; list-style-type: none; }
15
+ .widget .myCRED-history .creds { float: right; padding: 0 0 0 12px; clear: left; }
assets/images/cred-icon16.png ADDED
Binary file
assets/images/cred-icon32.png ADDED
Binary file
assets/images/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
assets/images/logo-menu.png ADDED
Binary file
assets/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
assets/js/accordion.js ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Accordion
3
+ * @since 0.1
4
+ * @version 1.0
5
+ */
6
+ jQuery(function($) {
7
+ if ( myCRED.active != '-1' ) {
8
+ var active_box = parseInt( myCRED.active, 10 );
9
+ }
10
+ else {
11
+ var active_box = false;
12
+ }
13
+ $( "#accordion" ).accordion({ collapsible: true, header: "h4", heightStyle: "content", active: active_box });
14
+ });
assets/js/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
assets/js/widget.js ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ /**
2
+ * myCRED Widgets jQuery Scripts
3
+ * @since 0.1
4
+ * @version 1.0
5
+ */
assets/screenshot-1.png ADDED
Binary file
assets/screenshot-2.png ADDED
Binary file
assets/screenshot-3.png ADDED
Binary file
assets/screenshot-4.png ADDED
Binary file
assets/screenshot-5.png ADDED
Binary file
includes/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
includes/mycred-admin.php ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Admin class
5
+ * Manages everything concerning the WordPress admin area.
6
+ * @since 0.1
7
+ * @version 1.0
8
+ */
9
+ if ( !class_exists( 'myCRED_Admin' ) ) {
10
+ class myCRED_Admin {
11
+
12
+ public $core;
13
+
14
+ /**
15
+ * Construct
16
+ * @since 0.1
17
+ * @version 1.0
18
+ */
19
+ function __construct( $settings = array() ) {
20
+ $this->core = mycred_get_settings();
21
+ }
22
+
23
+ /**
24
+ * Load
25
+ * @since 0.1
26
+ * @version 1.0
27
+ */
28
+ public function load() {
29
+ add_action( 'admin_head', array( $this, 'admin_header' ) );
30
+ add_filter( 'manage_users_columns', array( $this, 'custom_user_column' ) );
31
+ add_action( 'manage_users_custom_column', array( $this, 'custom_user_column_content' ), 10, 3 );
32
+ add_action( 'profile_personal_options', array( $this, 'show_my_balance' ), 1 );
33
+ add_action( 'personal_options', array( $this, 'adjust_users_balance' ), 1 );
34
+ add_action( 'personal_options_update', array( $this, 'adjust_points_manually' ) );
35
+ add_action( 'edit_user_profile_update', array( $this, 'adjust_points_manually' ) );
36
+ }
37
+
38
+ /**
39
+ * Admin Header
40
+ * @since 0.1
41
+ * @version 1.0
42
+ */
43
+ public function admin_header() {
44
+ $image = plugins_url( 'assets/images/logo-menu.png', myCRED_THIS );
45
+ echo '
46
+ <style type="text/css">
47
+ #adminmenu .toplevel_page_myCRED div.wp-menu-image { background-image: url(' . $image . '); background-position: 1px -28px; }
48
+ #adminmenu .toplevel_page_myCRED:hover div.wp-menu-image,
49
+ #adminmenu .toplevel_page_myCRED.current div.wp-menu-image,
50
+ #adminmenu .toplevel_page_myCRED .wp-menu-open div.wp-menu-image { background-position: 1px 0; }
51
+ </style>' . "\n";
52
+ }
53
+
54
+ /**
55
+ * Customize Users Column Headers
56
+ * @since 0.1
57
+ * @version 1.0
58
+ */
59
+ public function custom_user_column( $columns ) {
60
+ $user_id = get_current_user_id();
61
+ if ( !$this->core->can_edit_creds( $user_id ) || !$this->core->can_edit_plugin( $user_id ) ) return $columns;
62
+
63
+ $columns['mycred-balance'] = $this->core->plural();
64
+ return $columns;
65
+ }
66
+
67
+ /**
68
+ * Customize User Columns Content
69
+ * @filter 'mycred_user_row_actions'
70
+ * @since 0.1
71
+ * @version 1.0
72
+ */
73
+ public function custom_user_column_content( $value, $column_name, $user_id ) {
74
+ if ( 'mycred-balance' != $column_name ) return $value;
75
+
76
+ // User is excluded
77
+ if ( $this->core->exclude_user( $user_id ) === true ) return __( 'Excluded', 'mycred' );
78
+
79
+ $balance = $this->core->get_users_cred( $user_id );
80
+ $balance = $this->core->format_creds( $balance );
81
+
82
+ // Row actions
83
+ $row = array();
84
+ $row['history'] = '<a href="' . admin_url( 'admin.php?page=myCRED&user_id=' . $user_id ) . '">' . __( 'History', 'mycred' ) . '</a>';
85
+ if ( $this->core->can_edit_creds( get_current_user_id() ) )
86
+ $row['adjust'] = '<a href="' . admin_url( 'user-edit.php?user_id=' . $user_id ) . '">' . __( 'Adjust', 'mycred' ) . '</a>';
87
+
88
+ $rows = apply_filters( 'mycred_user_row_actions', $row, $user_id, $this->core );
89
+ $balance .= '<br /><div class="row-actions">' . $this->row_actions( $rows ) . '</div>';
90
+ return $balance;
91
+ }
92
+
93
+ /**
94
+ * Generate row actions div
95
+ *
96
+ * @since 3.1.0
97
+ * @access protected
98
+ *
99
+ * @param array $actions The list of actions
100
+ * @param bool $always_visible Whether the actions should be always visible
101
+ * @return string
102
+ */
103
+ protected function row_actions( $actions, $always_visible = false ) {
104
+ $action_count = count( $actions );
105
+ $i = 0;
106
+
107
+ if ( !$action_count )
108
+ return '';
109
+
110
+ $out = '<div class="' . ( $always_visible ? 'row-actions-visible' : 'row-actions' ) . '">';
111
+ foreach ( $actions as $action => $link ) {
112
+ ++$i;
113
+ ( $i == $action_count ) ? $sep = '' : $sep = ' | ';
114
+ $out .= "<span class='$action'>$link$sep</span>";
115
+ }
116
+ $out .= '</div>';
117
+
118
+ return $out;
119
+ }
120
+
121
+ /**
122
+ * Insert Ballance into Profile
123
+ * @since 0.1
124
+ * @version 1.0
125
+ */
126
+ public function show_my_balance( $user ) {
127
+ $user_id = $user->ID;
128
+ // Bail if this user is to be excluded
129
+ if ( $this->core->exclude_user( $user_id ) === true ) return;
130
+
131
+ // Users balance
132
+ $balance = $this->core->get_users_cred( $user_id );
133
+ $balance = $this->core->format_creds( $balance ); ?>
134
+
135
+ <table class="form-table">
136
+ <tr>
137
+ <th scope="row"><?php echo $this->core->template_tags_general( __( 'My current %singular% balance', 'mycred' ) ); ?></th>
138
+ <td>
139
+ <h2 style="margin:0;padding:0;"><?php echo $balance; ?></h2>
140
+ </td>
141
+ </tr>
142
+ </table>
143
+ <?php
144
+ }
145
+
146
+ /**
147
+ * Adjust Users Balance
148
+ * @since 0.1
149
+ * @version 1.0
150
+ */
151
+ public function adjust_users_balance( $user ) {
152
+ // Editors can not edit their own creds
153
+ if ( !$this->core->can_edit_creds() ) return;
154
+ // Make sure we do not want to exclude this user
155
+ if ( $this->core->exclude_user( $user->ID ) === true ) return;
156
+
157
+ // Label
158
+ if ( $user->ID == get_current_user_id() )
159
+ $label = __( 'Adjust Your Balance', 'mycred' );
160
+ else
161
+ $label = __( 'Adjust Users Balance', 'mycred' );
162
+
163
+ // Balance
164
+ $balance = $this->core->get_users_cred( $user->ID );
165
+ $balance = $this->core->format_creds( $balance ); ?>
166
+
167
+ <tr>
168
+ <th scope="row"><label for="myCRED-manual-add-points"><?php echo $label; ?></label></th>
169
+ <td id="myCRED-adjust-users-points">
170
+ <?php echo $this->core->plural(); ?>: <input type="text" name="myCRED-manual-add-points" id="myCRED-manual-add-points" value="<?php echo $this->core->number( 0 ); ?>" size="4" /><br /><br />
171
+ <label for="myCRED-manual-add-description"><?php _e( 'Log description for adjustment', 'mycred' ); ?> (<strong><?php _e( 'required', 'mycred' ); ?></strong>)</label><br />
172
+ <input type="text" name="myCRED-manual-add-description" id="myCRED-manual-add-description" value="" class="regular-text" /> <?php submit_button( __( 'Update', 'mycred' ), 'primary medium', 'myCRED_update', '' ); ?>
173
+ </td>
174
+ </tr>
175
+ <?php if ( IS_PROFILE_PAGE ) return; ?>
176
+ <tr>
177
+ <th scope="row"><?php _e( 'Users Current Balance', 'mycred' ); ?></th>
178
+ <td id="myCRED-users-balance">
179
+ <h2 style="margin:0;padding:0;"><?php echo $balance; ?></h2>
180
+ </td>
181
+ </tr>
182
+ <?php
183
+ }
184
+
185
+ /**
186
+ * Save Manual Adjustments
187
+ * @since 0.1
188
+ * @version 1.0
189
+ */
190
+ public function adjust_points_manually( $user_id ) {
191
+ // All the reasons we should bail
192
+ if ( !$this->core->can_edit_creds() ) return;
193
+ if ( $this->core->exclude_user( $user_id ) === true ) return;
194
+ if ( !isset( $_POST['myCRED-manual-add-points'] ) || !isset( $_POST['myCRED-manual-add-description'] ) ) return;
195
+ if ( empty( $_POST['myCRED-manual-add-description'] ) ) return;
196
+
197
+ // Add new creds
198
+ $cred = $_POST['myCRED-manual-add-points'];
199
+ $entry = $_POST['myCRED-manual-add-description'];
200
+ $data = apply_filters( 'mycred_manual_change', array( 'type' => 'user' ), $this );
201
+ $this->core->add_creds( 'manual', $user_id, $cred, $entry, get_current_user_id(), $data );
202
+ }
203
+ }
204
+ }
205
+ ?>
includes/mycred-functions.php ADDED
@@ -0,0 +1,941 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Settings class
5
+ * @see http://mycred.merovingi.com/classes/mycred_settings/
6
+ * @since 0.1
7
+ * @version 1.0
8
+ */
9
+ if ( !class_exists( 'myCRED_Settings' ) ) {
10
+ class myCRED_Settings {
11
+
12
+ public $core;
13
+
14
+ /**
15
+ * Construct
16
+ */
17
+ function __construct() {
18
+ if ( mycred_overwrite() === false )
19
+ $this->core = get_option( 'mycred_pref_core' );
20
+ else
21
+ $this->core = get_blog_option( 1, 'mycred_pref_core' );
22
+
23
+ if ( $this->core !== false ) {
24
+ foreach ( (array) $this->core as $key => $value ) {
25
+ $this->$key = $value;
26
+ }
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Singular myCRED name
32
+ * @since 0.1
33
+ * @version 1.0
34
+ */
35
+ public function singular() {
36
+ return $this->name['singular'];
37
+ }
38
+
39
+ /**
40
+ * Plural myCRED name
41
+ * @since 0.1
42
+ * @version 1.0
43
+ */
44
+ public function plural() {
45
+ return $this->name['plural'];
46
+ }
47
+
48
+ /**
49
+ * Number
50
+ * Returns a given creds formated either as a float with the set number of decimals or as a integer.
51
+ * This function should be used when you need to make sure the variable is returned in correct format
52
+ * but without any custom layout you might have given your creds.
53
+ *
54
+ * @param $number (int|float) the initial number
55
+ * @returns the given number formated either as an integer or float
56
+ * @since 0.1
57
+ * @version 1.0
58
+ */
59
+ public function number( $number = '' ) {
60
+ if ( empty( $number ) ) return $number;
61
+
62
+ if ( !isset( $this->format['decimals'] ) )
63
+ $decimals = $this->core['format']['decimals'];
64
+ else
65
+ $decimals = $this->format['decimals'];
66
+
67
+ if ( (int) $decimals > 0 ) {
68
+ return (float) number_format( (float) $number, (int) $decimals, '.', '' );
69
+ }
70
+ else {
71
+ return (int) $number;
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Format Number
77
+ * Returns a given creds formated with set decimal and thousands separator and either as a float with
78
+ * the set number of decimals or as a integer. This function should be used when you want to display creds
79
+ * formated according to your settings. Do not use this function when adding/removing points!
80
+ *
81
+ * @param $number (int|float) the initial number
82
+ * @returns the given number formated either as an integer or float
83
+ * @filter 'mycred_format_number'
84
+ * @since 0.1
85
+ * @version 1.0
86
+ */
87
+ public function format_number( $number = '' ) {
88
+ if ( empty( $number ) ) return $number;
89
+
90
+ $number = $this->number( $number );
91
+ $decimals = $this->format['decimals'];
92
+ $sep_dec = $this->format['separators']['decimal'];
93
+ $sep_tho = $this->format['separators']['thousand'];
94
+
95
+ // Format
96
+ $creds = number_format( $number, (int) $decimals, $sep_dec, $sep_tho );
97
+ $creds = apply_filters( 'mycred_format_number', $creds, $number, $this->core );
98
+
99
+ return $creds;
100
+ }
101
+
102
+ /**
103
+ * Format Creds
104
+ * Returns a given number formated with prefix and/or suffix along with any custom presentation set.
105
+ *
106
+ * @param $creds (int|float) number of creds
107
+ * @param $before (string) optional string to insert before the number
108
+ * @param $after (string) optional string to isnert after the number
109
+ * @param $force_in (boolean) option to force $before after prefix and $after before suffix
110
+ * @filter 'mycred_format_creds'
111
+ * @returns formated string
112
+ * @since 0.1
113
+ * @version 1.0
114
+ */
115
+ public function format_creds( $creds = 0, $before = '', $after = '', $force_in = false ) {
116
+ // Prefix
117
+ $prefix = '';
118
+ if ( !empty( $this->before ) )
119
+ $prefix = $this->before . ' ';
120
+
121
+ // Suffix
122
+ $suffix = '';
123
+ if ( !empty( $this->after ) )
124
+ $suffix = ' ' . $this->after;
125
+
126
+ // Format creds
127
+ $creds = $this->format_number( $creds );
128
+
129
+ // Optional extras to insert before and after
130
+ if ( $force_in )
131
+ $layout = $prefix . $before . $creds . $after . $suffix;
132
+ else
133
+ $layout = $before . $prefix . $creds . $suffix . $after;
134
+
135
+ // Let others play
136
+ $formated = apply_filters( 'mycred_format_creds', $layout, $creds, $this->core );
137
+
138
+ return $formated;
139
+ }
140
+
141
+ /**
142
+ * Round Value
143
+ * Will round a given value either up or down with the option to use precision.
144
+ *
145
+ * @param $amount (int|float) required amount to round
146
+ * @param $up_down (string|boolean) choice of rounding up or down. using false bypasses this function
147
+ * @param $precision (int) the optional number of decimal digits to round to. defaults to 0
148
+ * @returns rounded int or float
149
+ * @since 0.1
150
+ * @version 1.0
151
+ */
152
+ public function round_value( $amount = 0, $up_down = false, $precision = 0 ) {
153
+ if ( $amount == 0 || !$up_down ) return $amount;
154
+
155
+ // Use round() for precision
156
+ if ( $precision !== false ) {
157
+ if ( $up_down == 'up' )
158
+ $amount = round( $amount, (int) $precision, PHP_ROUND_HALF_UP );
159
+ elseif ( $up_down == 'down' )
160
+ $amount = round( $amount, (int) $precision, PHP_ROUND_HALF_DOWN );
161
+ }
162
+ // Use ceil() or floor() for everything else
163
+ else {
164
+ if ( $up_down == 'up' )
165
+ $amount = ceil( $amount );
166
+ elseif ( $up_down == 'down' )
167
+ $amount = floor( $amount );
168
+ }
169
+ return $amount;
170
+ }
171
+
172
+ /**
173
+ * Apply Exchange Rate
174
+ * Applies a given exchange rate to the given amount.
175
+ *
176
+ * @param $amount (int|float) the initial amount
177
+ * @param $rate (int|float) the exchange rate to devide by
178
+ * @param $round (bool) option to round values, defaults to yes.
179
+ * @since 0.1
180
+ * @version 1.0
181
+ */
182
+ public function apply_exchange_rate( $amount, $rate = 1, $round = true ) {
183
+ $amount = $this->number( $amount );
184
+ if ( $rate == 1 ) return $amount;
185
+
186
+ $exchange = $amount/(float) $rate;
187
+ if ( $round ) $exchange = round( $exchange );
188
+
189
+ return $this->format_number( $exchange );
190
+ }
191
+
192
+ /**
193
+ * Parse Template Tags
194
+ * Parses template tags in a given string by checking for the 'ref_type' array key under $log_entry->data.
195
+ * @since 0.1
196
+ * @version 1.0
197
+ */
198
+ public function parse_template_tags( $content, $log_entry ) {
199
+ // Prep
200
+ $reference = $log_entry->ref;
201
+ $ref_id = $log_entry->ref_id;
202
+ $data = $log_entry->data;
203
+
204
+ // Unserialize if serialized
205
+ $check = @unserialize( $data );
206
+ if ( $check !== false && $data !== 'b:0;' )
207
+ $data = unserialize( $data );
208
+
209
+ // Run basic template tags first
210
+ $content = $this->template_tags_general( $content );
211
+
212
+ // Start by allowing others to play
213
+ $content = apply_filters( 'mycred_parse_log_entry', $content, $log_entry );
214
+ $content = apply_filters( "mycred_parse_log_entry_{$reference}", $content, $log_entry );
215
+
216
+ // Get the reference type
217
+ if ( isset( $data['ref_type'] ) ) {
218
+ $type = $data['ref_type'];
219
+ if ( $type == 'post' )
220
+ $content = $this->template_tags_post( $content, $ref_id, $data );
221
+ elseif ( $type == 'user' )
222
+ $content = $this->template_tags_user( $content, $ref_id, $data );
223
+ elseif ( $type == 'comment' )
224
+ $content = $this->template_tags_comment( $content, $ref_id, $data );
225
+
226
+ $content = apply_filters( "mycred_parse_tags_{$type}", $content, $log_entry );
227
+ }
228
+
229
+ return $content;
230
+ }
231
+
232
+ /**
233
+ * General Template Tags
234
+ * Replaces the general template tags in a given string.
235
+ * @since 0.1
236
+ * @version 1.0
237
+ */
238
+ public function template_tags_general( $content ) {
239
+ $content = apply_filters( 'mycred_parse_tags_general', $content );
240
+
241
+ // Singular
242
+ $content = str_replace( '%singular%', $this->singular(), $content );
243
+ $content = str_replace( '%_singular%', strtolower( $this->singular() ), $content );
244
+
245
+ // Plural
246
+ $content = str_replace( '%plural%', $this->plural(), $content );
247
+ $content = str_replace( '%_plural%', strtolower( $this->plural() ), $content );
248
+
249
+ // Login URL
250
+ $content = str_replace( '%login_url%', wp_login_url(), $content );
251
+ $content = str_replace( '%login_url_here%', wp_login_url( get_permalink() ), $content );
252
+
253
+ // Logout URL
254
+ $content = str_replace( '%logout_url%', wp_logout_url(), $content );
255
+ $content = str_replace( '%logout_url_here%', wp_logout_url( get_permalink() ), $content );
256
+
257
+ //$content = str_replace( '', , $content );
258
+ return $content;
259
+ }
260
+
261
+ /**
262
+ * Amount Template Tags
263
+ * Replaces the amount template tags in a given string.
264
+ * @since 0.1
265
+ * @version 1.0
266
+ */
267
+ public function template_tags_amount( $content, $amount ) {
268
+ $content = str_replace( '%cred_f%', $this->format_creds( $amount ), $content );
269
+ $content = str_replace( '%cred%', $amount, $content );
270
+ return $content;
271
+ }
272
+
273
+ /**
274
+ * Post Related Template Tags
275
+ * Replaces the post related template tags in a given string.
276
+ *
277
+ * @param $content (string) string containing the template tags
278
+ * @param $ref_id (int) required post id as reference id
279
+ * @param $data (object) Log entry data object
280
+ * @return (string) parsed string
281
+ * @since 0.1
282
+ * @version 1.0
283
+ */
284
+ public function template_tags_post( $content, $ref_id = NULL, $data ) {
285
+ if ( $ref_id === NULL ) return $content;
286
+
287
+ // Get Post Object
288
+ $post = get_post( $ref_id );
289
+
290
+ // Post does not exist
291
+ if ( $post === NULL ) return $content;
292
+
293
+ // Let others play first
294
+ $content = apply_filters( 'mycred_parse_tags_post', $content, $data, $post );
295
+
296
+ // Replace template tags
297
+ $content = str_replace( '%post_title%', $post->post_title, $content );
298
+ $content = str_replace( '%post_url%', get_permalink( $post->ID ), $content );
299
+ $content = str_replace( '%link_with_title%', '<a href="' . get_permalink( $post->ID ) . '">' . $post->post_title . '</a>', $content );
300
+
301
+ $post_type = get_post_type_object( $post->post_type );
302
+ $content = str_replace( '%post_type%', $post_type->labels->singular_name, $content );
303
+ unset( $post_type );
304
+
305
+ //$content = str_replace( '', $post->, $content );
306
+ unset( $post );
307
+
308
+ return $content;
309
+ }
310
+
311
+ /**
312
+ * User Related Template Tags
313
+ * Replaces the user related template tags in the given string.
314
+ *
315
+ * @param $content (string) string containing the template tags
316
+ * @param $ref_id (int) required user id as reference id
317
+ * @param $data (object) Log entry data object
318
+ * @return (string) parsed string
319
+ * @since 0.1
320
+ * @version 1.0
321
+ */
322
+ public function template_tags_user( $content, $ref_id = NULL, $data ) {
323
+ if ( $ref_id === NULL ) return $content;
324
+
325
+ // Get User Object
326
+ $user = get_userdata( $ref_id );
327
+
328
+ // User does not exist
329
+ if ( $user === false ) return $content;
330
+
331
+ // Let others play first
332
+ $content = apply_filters( 'mycred_parse_tags_user', $content, $data, $user );
333
+
334
+ // Replace template tags
335
+ $content = str_replace( '%user_id%', $user->ID, $content );
336
+ $content = str_replace( '%user_name%', $user->user_login, $content );
337
+ $content = str_replace( '%user_name_en%', urlencode( $user->user_login ), $content );
338
+
339
+ // Get Profile URL
340
+ if ( function_exists( 'bp_core_get_user_domain' ) )
341
+ $url = bp_core_get_user_domain( $user->ID );
342
+ else {
343
+ global $wp_rewrite;
344
+ $url = get_bloginfo( 'url' ) . '/' . $wp_rewrite->author_base . '/' . urlencode( $user->user_login ) . '/';
345
+ }
346
+
347
+ $content = str_replace( '%display_name%', $user->display_name, $content );
348
+ $content = str_replace( '%user_profile_url%', $url, $content );
349
+ $content = str_replace( '%user_profile_link%', '<a href="' . $url . '">' . $user->display_name . '</a>', $content );
350
+
351
+ //$content = str_replace( '', $user->, $content );
352
+ unset( $user );
353
+
354
+ return $content;
355
+ }
356
+
357
+ /**
358
+ * Comment Related Template Tags
359
+ * Replaces the comment related template tags in a given string.
360
+ *
361
+ * @param $content (string) string containing the template tags
362
+ * @param $ref_id (int) required comment id as reference id
363
+ * @param $data (object) Log entry data object
364
+ * @return (string) parsed string
365
+ * @since 0.1
366
+ * @version 1.0
367
+ */
368
+ public function template_tags_comment( $content, $ref_id = NULL, $data ) {
369
+ if ( $ref_id === NULL ) return $content;
370
+
371
+ // Get Comment Object
372
+ $comment = get_comment( $ref_id );
373
+
374
+ // Comment does not exist
375
+ if ( $comment === NULL ) return $content;
376
+
377
+ // Let others play first
378
+ $content = apply_filters( 'mycred_parse_tags_comment', $content, $data, $comment );
379
+
380
+ $content = str_replace( '%comment_id%', $comment->comment_ID, $content );
381
+
382
+ $content = str_replace( '%c_post_id%', $comment->comment_post_ID, $content );
383
+ $content = str_replace( '%c_post_title%', get_the_title( $comment->comment_post_ID ), $content );
384
+
385
+ $content = str_replace( '%c_post_url%', get_permalink( $comment->comment_post_ID ), $content );
386
+ $content = str_replace( '%c_link_with_title%', '<a href="' . get_permalink( $comment->comment_post_ID ) . '">' . get_the_title( $comment->comment_post_ID ) . '</a>', $content );
387
+
388
+ //$content = str_replace( '', $comment->, $content );
389
+ unset( $comment );
390
+ return $content;
391
+ }
392
+
393
+ /**
394
+ * Allowed Tags
395
+ * Strips HTML tags from a given string.
396
+ *
397
+ * @param $data (string) to strip tags off
398
+ * @param $allow (string) allows you to overwrite the default filter with a custom set of tags to strip
399
+ * @filter 'mycred_allowed_tags'
400
+ * @returns (string) string stripped of tags
401
+ * @since 0.1
402
+ * @version 1.0
403
+ */
404
+ public function allowed_tags( $data, $allow = '' ) {
405
+ if ( $allow === false )
406
+ return strip_tags( $data );
407
+ elseif ( !empty( $allow ) )
408
+ return strip_tags( $data, $allow );
409
+ else
410
+ return strip_tags( $data, apply_filters( 'mycred_allowed_tags', '<a><br><em><strong><span>' ) );
411
+ }
412
+
413
+ /**
414
+ * Edit Creds Cap
415
+ * Returns the set edit creds capability.
416
+ *
417
+ * @returns capability (string)
418
+ * @since 0.1
419
+ * @version 1.0
420
+ */
421
+ public function edit_creds_cap() {
422
+ if ( !isset( $this->caps['creds'] ) || empty( $this->caps['creds'] ) )
423
+ $this->caps['creds'] = 'edit_users';
424
+
425
+ return $this->caps['creds'];
426
+ }
427
+
428
+ /**
429
+ * Can Edit Creds
430
+ * Check if user can edit other users creds. If no user id is given
431
+ * we will attempt to get the current users id.
432
+ *
433
+ * @param $user_id (int) user id
434
+ * @returns true or false
435
+ * @since 0.1
436
+ * @version 1.0
437
+ */
438
+ public function can_edit_creds( $user_id = '' ) {
439
+ if ( !function_exists( 'get_current_user_id' ) )
440
+ require_once( ABSPATH . WPINC . '/user.php' );
441
+
442
+ // Grab current user id
443
+ if ( empty( $user_id ) )
444
+ $user_id = get_current_user_id();
445
+
446
+ if ( !function_exists( 'user_can' ) )
447
+ require_once( ABSPATH . WPINC . '/capabilities.php' );
448
+
449
+ // Check if user can
450
+ if ( user_can( $user_id, $this->edit_creds_cap() ) ) return true;
451
+
452
+ return false;
453
+ }
454
+
455
+ /**
456
+ * Edit Plugin Cap
457
+ * Returns the set edit plugin capability.
458
+ *
459
+ * @returns capability (string)
460
+ * @since 0.1
461
+ * @version 1.0
462
+ */
463
+ public function edit_plugin_cap() {
464
+ if ( !isset( $this->caps['plugin'] ) || empty( $this->caps['plugin'] ) )
465
+ $this->caps['plugin'] = 'manage_options';
466
+
467
+ return $this->caps['plugin'];
468
+ }
469
+
470
+ /**
471
+ * Can Edit This Plugin
472
+ * Checks if a given user can edit this plugin. If no user id is given
473
+ * we will attempt to get the current users id.
474
+ *
475
+ * @param $user_id (int) user id
476
+ * @returns true or false
477
+ * @since 0.1
478
+ * @version 1.0
479
+ */
480
+ public function can_edit_plugin( $user_id = '' ) {
481
+ if ( !function_exists( 'get_current_user_id' ) )
482
+ require_once( ABSPATH . WPINC . '/user.php' );
483
+
484
+ // Grab current user id
485
+ if ( empty( $user_id ) )
486
+ $user_id = get_current_user_id();
487
+
488
+ if ( !function_exists( 'user_can' ) )
489
+ require_once( ABSPATH . WPINC . '/capabilities.php' );
490
+
491
+ // Check if user can
492
+ if ( user_can( $user_id, $this->edit_plugin_cap() ) ) return true;
493
+
494
+ return false;
495
+ }
496
+
497
+ /**
498
+ * Check if user id is in exclude list
499
+ * @return true or false
500
+ * @since 0.1
501
+ * @version 1.0
502
+ */
503
+ public function in_exclude_list( $user_id = '' ) {
504
+
505
+ // Grab current user id
506
+ if ( empty( $user_id ) )
507
+ $user_id = get_current_user_id();
508
+
509
+ if ( !isset( $this->exclude['list'] ) )
510
+ $this->exclude['list'] = '';
511
+
512
+ $list = explode( ',', $this->exclude['list'] );
513
+ if ( in_array( $user_id, $list ) ) return true;
514
+
515
+ return false;
516
+ }
517
+
518
+ /**
519
+ * Exclude Plugin Editors
520
+ * @return true or false
521
+ * @since 0.1
522
+ * @version 1.0
523
+ */
524
+ public function exclude_plugin_editors() {
525
+ return (bool) $this->exclude['plugin_editors'];
526
+ }
527
+
528
+ /**
529
+ * Exclude Cred Editors
530
+ * @return true or false
531
+ * @since 0.1
532
+ * @version 1.0
533
+ */
534
+ public function exclude_creds_editors() {
535
+ return (bool) $this->exclude['cred_editors'];
536
+ }
537
+
538
+ /**
539
+ * Exclude User
540
+ * Checks is the given user id should be excluded.
541
+ *
542
+ * @param $user_id (int), required user id
543
+ * @returns boolean true on user should be excluded else false
544
+ * @since 0.1
545
+ * @version 1.0
546
+ */
547
+ public function exclude_user( $user_id ) {
548
+ if ( $this->exclude_plugin_editors() == true && $this->can_edit_plugin( $user_id ) == true ) return true;
549
+ if ( $this->exclude_creds_editors() == true && $this->can_edit_creds( $user_id ) == true ) return true;
550
+ if ( $this->in_exclude_list( $user_id ) ) return true;
551
+
552
+ return false;
553
+ }
554
+
555
+ /**
556
+ * Get Cred ID
557
+ * Returns the default cred id.
558
+ * @since 0.1
559
+ * @version 1.0
560
+ */
561
+ public function get_cred_id() {
562
+ if ( !isset( $this->cred_id ) )
563
+ $this->cred_id = 'mycred_default';
564
+
565
+ return $this->cred_id;
566
+ }
567
+
568
+ /**
569
+ * Get users creds
570
+ * Returns the users creds unformated.
571
+ *
572
+ * @param $user_id (int), required user id
573
+ * @param $type (string), optional cred type to check for
574
+ * @returns empty if user id is not set or if no creds were found, else returns creds
575
+ * @since 0.1
576
+ * @version 1.0
577
+ */
578
+ public function get_users_cred( $user_id = '', $type = '' ) {
579
+ if ( empty( $user_id ) ) return $user_id;
580
+
581
+ if ( empty( $type ) ) $type = $this->get_cred_id();
582
+ $balance = get_user_meta( $user_id, $type, true );
583
+ if ( empty( $balance ) ) $balance = 0;
584
+
585
+ return $this->number( $balance );
586
+ }
587
+
588
+ /**
589
+ * Update users creds
590
+ * Returns the updated balance of the given user.
591
+ *
592
+ * @param $user_id (int), required user id
593
+ * @param $amount (int|float), amount to add/deduct from users balance. This value must be pre-formated.
594
+ * @returns the new balance.
595
+ * @since 0.1
596
+ * @version 1.0
597
+ */
598
+ public function update_users_cred( $user_id = NULL, $amount = NULL ) {
599
+ if ( $user_id === NULL || $amount === NULL ) return $amount;
600
+ if ( empty( $this->cred_id ) ) $this->cred_id = $this->get_cred_id();
601
+
602
+ // Adjust creds
603
+ $current_balance = $this->get_users_cred( $user_id );
604
+ $new_balance = $current_balance+$amount;
605
+
606
+ // Update creds
607
+ update_user_meta( $user_id, $this->cred_id, $new_balance );
608
+
609
+ // Rankings
610
+ if ( $this->frequency['rate'] == 'always' ) delete_transient( $this->cred_id . '_ranking' );
611
+
612
+ // Return the new balance
613
+ return $new_balance;
614
+ }
615
+
616
+ /**
617
+ * Add Creds
618
+ * Adds creds to a given user. A refernece ID, user id and number of creds must be given.
619
+ * Important! This function will not check if the user should be excluded from gaining points, this must
620
+ * be done before calling this function!
621
+ *
622
+ * @param $ref (string), required reference id
623
+ * @param $user_id (int), required id of the user who will get these points
624
+ * @param $cred (int|float), required number of creds to give or deduct from the given user.
625
+ * @param $ref_id (array), optional array of reference IDs allowing the use of content specific keywords in the log entry
626
+ * @param $data (object|array|string|int), optional extra data to save in the log. Note that arrays gets serialized!
627
+ * @param $type (string), optional point name, defaults to 'mycred_default'
628
+ * @returns boolean true on success or false on fail
629
+ * @since 0.1
630
+ * @version 1.0
631
+ */
632
+ public function add_creds( $ref = '', $user_id = '', $amount = '', $entry = '', $ref_id = '', $data = '', $type = 'mycred_default' ) {
633
+ // All the reasons we would fail
634
+ if ( empty( $ref ) || empty( $user_id ) || empty( $amount ) ) return false;
635
+ if ( $this->exclude_user( $user_id ) === true ) return false;
636
+ if ( !preg_match( '/mycred_/', $type ) ) return false;
637
+
638
+ // Format creds
639
+ $amount = $this->number( $amount );
640
+
641
+ // Adjust creds
642
+ $new_balance = $this->update_users_cred( $user_id, $amount );
643
+
644
+ // Let others play
645
+ $request = compact( 'ref', 'amount', 'entry', 'ref_id', 'data', 'type', 'user_id', 'current_balance', 'new_balance' );
646
+ do_action( 'mycred_add', $request, $this->core );
647
+
648
+ // Add log entry
649
+ $this->add_to_log( $ref, $user_id, $amount, $entry, $ref_id, $data, $type );
650
+ return true;
651
+ }
652
+
653
+ /**
654
+ * Add Log Entry
655
+ * Adds a new entry into the log. A reference id, user id and number of credits must be set.
656
+ *
657
+ * @param $ref (string), required reference id
658
+ * @param $user_id (int), required id of the user who will get these points
659
+ * @param $cred (int|float), required number of creds to give or deduct from the given user.
660
+ * @param $ref_id (array), optional array of reference IDs allowing the use of content specific keywords in the log entry
661
+ * @param $data (object|array|string|int), optional extra data to save in the log. Note that arrays gets serialized!
662
+ * @returns boolean true on success or false on fail
663
+ * @version 1.0
664
+ */
665
+ public function add_to_log( $ref = '', $user_id = '', $amount = '', $entry = '', $ref_id = '', $data = '', $type = '' ) {
666
+ // All the reasons we would fail
667
+ if ( empty( $ref ) || empty( $user_id ) || empty( $amount ) ) return false;
668
+ if ( !preg_match( '/mycred_/', $type ) ) return false;
669
+
670
+ global $wpdb;
671
+
672
+ // Strip HTML from log entry
673
+ $entry = $this->allowed_tags( $entry );
674
+
675
+ // Type
676
+ if ( empty( $type ) ) $type = $this->get_cred_id();
677
+
678
+ // Creds format
679
+ if ( $this->format['decimals'] > 0 )
680
+ $format = '%f';
681
+ elseif ( $this->format['decimals'] == 0 )
682
+ $format = '%d';
683
+ else
684
+ $format = '%s';
685
+
686
+ // Insert into DB
687
+ $new_entry = $wpdb->insert(
688
+ $wpdb->prefix . 'myCRED_log',
689
+ array(
690
+ 'ref' => $ref,
691
+ 'ref_id' => $ref_id,
692
+ 'user_id' => $user_id,
693
+ 'creds' => $amount,
694
+ 'ctype' => $type,
695
+ 'time' => date_i18n( 'U' ),
696
+ 'entry' => $entry,
697
+ 'data' => ( is_array( $data ) || is_object( $data ) ) ? serialize( $data ) : $data
698
+ ),
699
+ array(
700
+ '%s',
701
+ '%d',
702
+ '%d',
703
+ $format,
704
+ '%s',
705
+ '%d',
706
+ '%s',
707
+ ( is_numeric( $data ) ) ? '%d' : '%s'
708
+ )
709
+ );
710
+
711
+ // $wpdb->insert returns false on fail
712
+ if ( !$new_entry ) return false;
713
+ return true;
714
+ }
715
+ }
716
+ }
717
+
718
+ /**
719
+ * Get Settings
720
+ * Returns myCRED's general settings.
721
+ *
722
+ * @since 0.1
723
+ * @version 1.0
724
+ */
725
+ if ( !function_exists( 'mycred_get_settings' ) ) {
726
+ function mycred_get_settings()
727
+ {
728
+ global $mycred;
729
+ if ( !isset( $mycred ) || empty( $mycred ) ) $mycred = new myCRED_Settings();
730
+ return $mycred;
731
+ }
732
+ }
733
+
734
+ /**
735
+ * Get Network Settings
736
+ * Returns myCRED's network settings or false if multisite is not enabled.
737
+ *
738
+ * @since 0.1
739
+ * @version 1.0
740
+ */
741
+ if ( !function_exists( 'mycred_get_settings_network' ) ) {
742
+ function mycred_get_settings_network()
743
+ {
744
+ if ( !is_multisite() ) return false;
745
+
746
+ global $mycred_network;
747
+
748
+ if ( !isset( $mycred_network ) ) {
749
+ $defaults = array(
750
+ 'master' => 0,
751
+ 'block' => ''
752
+ );
753
+ $mycred_network = get_site_option( 'mycred_network', $defaults );
754
+ }
755
+
756
+ return $mycred_network;
757
+ }
758
+ }
759
+
760
+ /**
761
+ * Overwrite
762
+ * Checks if master template is used.
763
+ * Requires Multisite
764
+ *
765
+ * @since 0.1
766
+ * @version 1.0
767
+ */
768
+ if ( !function_exists( 'mycred_overwrite' ) ) {
769
+ function mycred_overwrite() {
770
+ // Not a multisite
771
+ if ( !is_multisite() ) return false;
772
+
773
+ $mycred_network = mycred_get_settings_network();
774
+ return (bool) $mycred_network['master'];
775
+ }
776
+ }
777
+
778
+ /**
779
+ * Get myCRED Name
780
+ * Returns the name given to creds.
781
+ *
782
+ * @param $signular (boolean) option to return the plural version, returns singular by default
783
+ * @since 0.1
784
+ * @version 1.0
785
+ */
786
+ if ( !function_exists( 'mycred_name' ) ) {
787
+ function mycred_name( $singular = true )
788
+ {
789
+ $mycred = mycred_get_settings();
790
+ if ( $singular )
791
+ return $mycred->singular();
792
+ else
793
+ return $mycred->plural();
794
+ }
795
+ }
796
+
797
+ /**
798
+ * Strip Tags
799
+ * Strippes HTML tags from a given string.
800
+ *
801
+ * @param $string (string) string to stip
802
+ * @param $overwrite (string), optional HTML tags to allow
803
+ * @since 0.1
804
+ * @version 1.0
805
+ */
806
+ if ( !function_exists( 'mycred_strip_tags' ) ) {
807
+ function mycred_strip_tags( $string, $overwride = '' )
808
+ {
809
+ $mycred = mycred_get_settings();
810
+ return $mycred->allowed_tags( $string, $overwrite );
811
+ }
812
+ }
813
+
814
+ /**
815
+ * Is Admin
816
+ * Conditional tag that checks if a given user or the current user
817
+ * can either edit the plugin or creds.
818
+ *
819
+ * @param $user_id (int), optional user id to check, defaults to current user
820
+ * @returns true or false
821
+ * @since 0.1
822
+ * @version 1.0
823
+ */
824
+ if ( !function_exists( 'mycred_is_admin' ) ) {
825
+ function mycred_is_admin( $user_id = NULL )
826
+ {
827
+ $mycred = mycred_get_settings();
828
+ if ( $user_id === NULL ) $user_id = get_current_user_id();
829
+
830
+ if ( $mycred->can_edit_creds( $user_id ) || $mycred->can_edit_plugin( $user_id ) ) return true;
831
+
832
+ return false;
833
+ }
834
+ }
835
+
836
+ /**
837
+ * Exclude User
838
+ * Checks if a given user is excluded from using myCRED.
839
+ *
840
+ * @see http://mycred.merovingi.com/functions/mycred_exclude_user/
841
+ * @param $user_id (int), optional user to check, defaults to current user
842
+ * @since 0.1
843
+ * @version 1.0
844
+ */
845
+ if ( !function_exists( 'mycred_exclude_user' ) ) {
846
+ function mycred_exclude_user( $user_id = NULL )
847
+ {
848
+ $mycred = mycred_get_settings();
849
+ if ( $user_id === NULL ) $user_id = get_current_user_id();
850
+ return $mycred->exclude_user( $user_id );
851
+ }
852
+ }
853
+
854
+ /**
855
+ * Get Users Creds
856
+ * Returns the given users current cred balance. If no user id is given this function
857
+ * will default to the current user!
858
+ *
859
+ * @param $user_id (int) user id
860
+ * @return users balance (int|float)
861
+ * @since 0.1
862
+ * @version 1.0
863
+ */
864
+ if ( !function_exists( 'mycred_get_users_cred' ) ) {
865
+ function mycred_get_users_cred( $user_id = NULL, $type = '' )
866
+ {
867
+ if ( $user_id === NULL ) $user_id = get_current_user_id();
868
+
869
+ $mycred = mycred_get_settings();
870
+ return $mycred->get_users_cred( $user_id, $type );
871
+ }
872
+ }
873
+
874
+ /**
875
+ * Get Users Creds Formated
876
+ * Returns the given users current cred balance formated. If no user id is given
877
+ * this function will return false!
878
+ *
879
+ * @param $user_id (int), required user id
880
+ * @return users balance (string) or false if no user id is given
881
+ * @since 0.1
882
+ * @version 1.0
883
+ */
884
+ if ( !function_exists( 'mycred_get_users_fcred' ) ) {
885
+ function mycred_get_users_fcred( $user_id = NULL, $type = '' )
886
+ {
887
+ if ( $user_id === NULL ) return false;
888
+
889
+ $mycred = mycred_get_settings();
890
+ $cred = $mycred->get_users_cred( $user_id, $type );
891
+ return $mycred->format_creds( $cred );
892
+ }
893
+ }
894
+
895
+ /**
896
+ * Add Creds
897
+ * Adds creds to a given user. A refernece ID, user id and amount must be given.
898
+ * Important! This function will not check if the user should be excluded from gaining points, this must
899
+ * be done before calling this function!
900
+ *
901
+ * @see http://mycred.merovingi.com/functions/mycred_add/
902
+ * @param $ref (string), required reference id
903
+ * @param $user_id (int), required id of the user who will get these points
904
+ * @param $amount (int|float), required number of creds to give or deduct from the given user.
905
+ * @param $ref_id (array), optional array of reference IDs allowing the use of content specific keywords in the log entry
906
+ * @param $data (object|array|string|int), optional extra data to save in the log. Note that arrays gets serialized!
907
+ * @returns boolean true on success or false on fail
908
+ * @since 0.1
909
+ * @version 1.0
910
+ */
911
+ if ( !function_exists( 'mycred_add' ) ) {
912
+ function mycred_add( $ref = '', $user_id = '', $amount = '', $entry = '', $ref_id = '', $data = '', $type = '' )
913
+ {
914
+ // $ref, $user_id and $cred is required
915
+ if ( empty( $ref ) || empty( $user_id ) || empty( $amount ) ) return false;
916
+
917
+ $mycred = mycred_get_settings();
918
+ if ( empty( $type ) ) $type = $mycred->get_cred_id();
919
+
920
+ // Add creds
921
+ return $mycred->add_creds( $pref, $user_id, $amount, $entry, $ref_id, $data, $type );
922
+ }
923
+ }
924
+
925
+ /**
926
+ * Subtract Creds
927
+ * Subtracts creds from a given user. Works just as mycred_add() but the creds are converted into a negative value.
928
+ * @see http://mycred.merovingi.com/functions/mycred_subtract/
929
+ * @uses mycred_add()
930
+ * @since 0.1
931
+ * @version 1.0
932
+ */
933
+ if ( !function_exists( 'mycred_subtract' ) ) {
934
+ function mycred_subtract( $ref = '', $user_id = '', $amount = '', $entry = '', $ref_id = '', $data = '', $type = '' )
935
+ {
936
+ if ( empty( $ref ) || empty( $user_id ) || empty( $amount ) ) return false;
937
+ if ( $amount > 0 ) $amount = '-' . $amount;
938
+ return mycred_add( $ref, $user_id, $amount, $entry, $ref_id, $data, $type );
939
+ }
940
+ }
941
+ ?>
includes/mycred-install.php ADDED
@@ -0,0 +1,647 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Install class
5
+ * Used when the plugin is activated/de-activated or deleted. Installs core settings and
6
+ * base templates, checks compatibility and uninstalls.
7
+ * @since 0.1
8
+ * @version 1.0
9
+ */
10
+ if ( !class_exists( 'myCRED_Install' ) ) {
11
+ class myCRED_Install {
12
+
13
+ public $ver;
14
+
15
+ /**
16
+ * Construct
17
+ */
18
+ function __construct() {
19
+ $this->ver = get_option( 'mycred_version' );
20
+ }
21
+
22
+ /**
23
+ * Compat
24
+ * Check to make sure we reach minimum requirements for this plugin to work propery.
25
+ * @since 0.1
26
+ * @version 1.0
27
+ */
28
+ public function compat() {
29
+ global $wpdb;
30
+
31
+ $message = array();
32
+ // WordPress check
33
+ $wp_version = $GLOBALS['wp_version'];
34
+ if ( version_compare( $wp_version, '3.1', '<' ) )
35
+ $message[] = 'myCRED requires WordPress 3.1 or higher. Version detected: ' . $wp_version;
36
+
37
+ // PHP check
38
+ $php_version = phpversion();
39
+ if ( version_compare( $php_version, '5.2.0', '<' ) )
40
+ $message[] = 'myCRED requires PHP 5.2.0 or higher. Version detected: ' . $php_version;
41
+
42
+ // SQL check
43
+ $sql_version = $wpdb->db_version();
44
+ if ( version_compare( $sql_version, '5.1', '<' ) )
45
+ $message[] = 'myCRED requires SQL 5.1 or higher. Version detected: ' . $sql_version;
46
+
47
+ // Not empty $message means there are issues
48
+ if ( !empty( $message ) ) {
49
+ $error_message = implode( "\n", $message );
50
+ die( __( 'Sorry but your WordPress installation does not reach the minimum requirements for running myCRED. The following errors were given:' . "\n" . $error_message, 'mycred' ) );
51
+ }
52
+ }
53
+
54
+ /**
55
+ * First time activation
56
+ * @since 0.1
57
+ * @version 1.0
58
+ */
59
+ public function activate() {
60
+ // Add general settings
61
+ $general = array(
62
+ 'cred_id' => 'mycred_default',
63
+ 'format' => array(
64
+ 'type' => '',
65
+ 'decimals' => 0,
66
+ 'separators' => array(
67
+ 'decimal' => '.',
68
+ 'thousand' => ','
69
+ )
70
+ ),
71
+ 'name' => array(
72
+ 'singular' => '',
73
+ 'plural' => ''
74
+ ),
75
+ 'before' => '',
76
+ 'after' => '',
77
+ 'caps' => array(
78
+ 'plugin' => 'manage_options',
79
+ 'creds' => 'edit_users'
80
+ ),
81
+ 'exclude' => array(
82
+ 'plugin_editors' => false,
83
+ 'cred_editors' => false,
84
+ 'list' => ''
85
+ ),
86
+ 'frequency' => array(
87
+ 'rate' => 'always',
88
+ 'date' => ''
89
+ )
90
+ );
91
+ add_option( 'mycred_pref_core', $general );
92
+
93
+ // Add add-ons settings
94
+ $addons = array(
95
+ 'installed' => array(),
96
+ 'active' => array()
97
+ );
98
+ add_option( 'mycred_pref_addons', $addons );
99
+
100
+ // Add hooks settings
101
+ $hooks = array(
102
+ 'installed' => array(),
103
+ 'active' => array(),
104
+ 'hook_prefs' => array()
105
+ );
106
+ add_option( 'mycred_pref_hooks', $hooks );
107
+
108
+ // Add version number making sure we never run this function again
109
+ add_option( 'mycred_version', myCRED_VERSION );
110
+ add_option( 'mycred_key', wp_generate_password( 12, true, true ), '', 'no' );
111
+ }
112
+
113
+ /**
114
+ * Re-activation
115
+ * @since 0.1
116
+ * @version 1.0
117
+ */
118
+ public function reactivate() {
119
+ do_action( 'mycred_reactivation' );
120
+ }
121
+
122
+ /**
123
+ * Uninstall
124
+ * @filter 'mycred_uninstall_this'
125
+ * @since 0.1
126
+ * @version 1.0
127
+ */
128
+ public function uninstall() {
129
+ // Everyone should use this filter to delete everything else they have created before returning the option ids.
130
+ $options = array( 'mycred_pref_core', 'mycred_pref_hooks', 'mycred_pref_addons' );
131
+ $installed = apply_filters( 'mycred_uninstall_this', $options );
132
+
133
+ // Delete each option
134
+ foreach ( $installed as $option_id ) {
135
+ delete_option( $option_id );
136
+ }
137
+
138
+ // Delete flags
139
+ delete_option( 'mycred_setup_completed' );
140
+ delete_option( 'mycred_version' );
141
+ delete_option( 'mycred_version_db' );
142
+ delete_option( 'mycred_key' );
143
+
144
+ // Delete widget options
145
+ delete_option( 'widget_mycred_widget_balance' );
146
+ delete_option( 'widget_mycred_widget_list' );
147
+ delete_option( 'widget_mycred_widget_transfer' );
148
+
149
+ delete_option( 'mycred_transients' );
150
+
151
+ // Clear Cron
152
+ wp_clear_scheduled_hook( 'mycred_reset_key' );
153
+
154
+ // Delete DB
155
+ global $wpdb;
156
+ $table_name = $wpdb->prefix . 'myCRED_log';
157
+ $wpdb->query( "DROP TABLE IF EXISTS " . $table_name . ";" );
158
+
159
+ // Multisite
160
+ if ( is_multisite() ) {
161
+ delete_site_option( 'mycred_network' );
162
+ }
163
+ // Good bye.
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * myCRED_Setup class
169
+ *
170
+ * Used when the plugin has been activated for the first time. Handles the setup
171
+ * wizard along with temporary admin menus.
172
+ * @since 0.1
173
+ * @version 1.0
174
+ */
175
+ if ( !class_exists( 'myCRED_Setup' ) ) {
176
+ class myCRED_Setup {
177
+
178
+ public $step;
179
+ public $status;
180
+
181
+ protected $core;
182
+
183
+ /**
184
+ * Construct
185
+ */
186
+ function __construct() {
187
+ // Status
188
+ $this->status = false;
189
+ $mycred = mycred_get_settings();
190
+ $this->core = $mycred->core;
191
+
192
+ // Setup Step
193
+ $this->step = false;
194
+ if ( isset( $_POST['step'] ) && isset( $_POST['token'] ) )
195
+ $this->step = $_POST['step'];
196
+
197
+ // Process choices
198
+ if ( isset( $_POST['step'] ) && isset( $_POST['token'] ) )
199
+ add_action( 'init', array( $this, 'process_choices' ) );
200
+
201
+ // Register Setup Nag and Admin menu
202
+ add_action( 'admin_notices', array( $this, 'admin_notice' ) );
203
+ add_action( 'admin_menu' , array( $this, 'setup_menu' ) );
204
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
205
+ }
206
+
207
+ /**
208
+ * Setup Setup Nag
209
+ * @since 0.1
210
+ * @version 1.0
211
+ */
212
+ public function admin_notice() {
213
+ $screen = get_current_screen();
214
+ if ( $screen->id == 'plugins_page_myCRED-setup' ) return;
215
+
216
+ $image_url = plugins_url( 'assets/images/cred-icon32.png', myCRED_THIS );
217
+ echo '
218
+ <div class="updated">
219
+ <p><strong>my</strong>' . __( 'CRED needs your attention.', 'mycred' ) . ' <a href="' . admin_url( 'plugins.php?page=myCRED-setup' ) . '">' . __( 'Run Setup', 'mycred' ) . '</a></p>
220
+ </div>';
221
+ }
222
+
223
+ /**
224
+ * Add Setup page under "Plugins"
225
+ * @since 0.1
226
+ * @version 1.0
227
+ */
228
+ public function setup_menu() {
229
+ $page = add_submenu_page(
230
+ 'plugins.php',
231
+ __( 'myCRED Setup', 'mycred' ),
232
+ __( 'myCRED Setup', 'mycred' ),
233
+ 'manage_options',
234
+ 'myCRED-setup',
235
+ array( &$this, 'setup_page' ) );
236
+
237
+ add_action( 'admin_print_styles-' . $page, array( $this, 'settings_header' ) );
238
+ }
239
+
240
+ /**
241
+ * Enqueue Admin
242
+ * @since 0.1
243
+ * @version 1.0
244
+ */
245
+ public function admin_enqueue() {
246
+ // Admin Style
247
+ wp_register_style(
248
+ 'mycred-setup',
249
+ plugins_url( 'assets/css/admin.css', myCRED_THIS ),
250
+ false,
251
+ myCRED_VERSION . '.1',
252
+ 'all'
253
+ );
254
+ }
255
+
256
+ /**
257
+ * Return setup status
258
+ * @since 0.1
259
+ * @version 1.0
260
+ */
261
+ public function status() {
262
+ return $this->status;
263
+ }
264
+
265
+ /**
266
+ * Process Setup Steps
267
+ * @since 0.1
268
+ * @version 1.0
269
+ */
270
+ public function process_choices() {
271
+ // Make sure that if we are re-loading the setup page we do not execute again
272
+ $singular = get_option( 'mycred_temp_singular' );
273
+ if ( $singular == $this->step ) return;
274
+
275
+ $step = $this->step;
276
+ $settings = $this->core;
277
+ $ok = false;
278
+
279
+ // Save step 1 formats.
280
+ if ( $step == 1 ) {
281
+ $ok = true;
282
+ }
283
+ // Step 2
284
+ elseif ( $step == 2 ) {
285
+ $settings['cred_id'] = 'mycred_default';
286
+ // Decimals
287
+ $settings['format']['decimals'] = (int) sanitize_text_field( $_POST['myCRED-format-dec'] );
288
+ if ( empty( $settings['format']['decimals'] ) ) $settings['format']['decimals'] = 0;
289
+
290
+ // Separators
291
+ $settings['format']['separators']['decimal'] = $_POST['myCRED-sep-dec'];
292
+ $settings['format']['separators']['thousand'] = $_POST['myCRED-sep-tho'];
293
+
294
+ // DB Format
295
+ if ( $settings['format']['decimals'] > 0 )
296
+ $settings['format']['type'] = 'decimal';
297
+ else
298
+ $settings['format']['type'] = 'bigint';
299
+
300
+ // Install database
301
+ $installation = $this->install_database( $settings['format']['decimals'] );
302
+
303
+ // Name
304
+ $settings['name']['singular'] = sanitize_text_field( $_POST['myCRED-name-singular'] );
305
+ $settings['name']['plural'] = sanitize_text_field( $_POST['myCRED-name-plural'] );
306
+
307
+ // Prefix & Suffix
308
+ $settings['before'] = sanitize_text_field( $_POST['myCRED-prefix'] );
309
+ $settings['after'] = sanitize_text_field( $_POST['myCRED-suffix'] );
310
+
311
+ update_option( 'mycred_pref_core', $settings );
312
+ $this->core = $settings;
313
+ $ok = true;
314
+ }
315
+ // Step 3
316
+ elseif ( $step == 3 ) {
317
+ // Capabilities
318
+ $settings['caps']['plugin'] = ( isset( $_POST['myCRED-cap-plugin'] ) ) ? trim( $_POST['myCRED-cap-plugin'] ) : 'manage_options';
319
+ $settings['caps']['creds'] = ( isset( $_POST['myCRED-cap-creds'] ) ) ? trim( $_POST['myCRED-cap-creds'] ) : 'edit_users';
320
+
321
+ // Excludes
322
+ $settings['exclude']['plugin_editors'] = ( isset( $_POST['myCRED-exclude-plugin-editors'] ) ) ? true : false;
323
+ $settings['exclude']['cred_editors'] = ( isset( $_POST['myCRED-exclude-cred-editors'] ) ) ? true : false;
324
+ $settings['exclude']['list'] = sanitize_text_field( $_POST['myCRED-exclude-list'] );
325
+
326
+ // Ranking
327
+ if ( isset( $_POST['myCRED-freq-rate'] ) )
328
+ $settings['frequency']['rate'] = sanitize_text_field( $_POST['myCRED-freq-rate'] );
329
+ else
330
+ $settings['frequency']['rate'] = 'always';
331
+
332
+ if ( empty( $settings['frequency']['rate'] ) )
333
+ $settings['frequency']['rate'] = 'always';
334
+
335
+ $settings['frequency']['date'] = sanitize_text_field( $_POST['myCRED-freq-date'] );
336
+
337
+ // Save
338
+ update_option( 'mycred_pref_core', $settings );
339
+ $this->core = $settings;
340
+ $ok = true;
341
+ }
342
+
343
+ if ( $ok )
344
+ update_option( 'mycred_temp_singular', $step );
345
+ }
346
+
347
+ /**
348
+ * Setup Header
349
+ * @since 0.1
350
+ * @version 1.0
351
+ */
352
+ public function settings_header() {
353
+ wp_enqueue_style( 'mycred-setup' );
354
+ }
355
+
356
+ /**
357
+ * Setup page
358
+ * Outputs the setup page.
359
+ *
360
+ * @since 0.1
361
+ * @version 1.0
362
+ */
363
+ public function setup_page() { ?>
364
+
365
+ <div class="wrap setup" id="myCRED-wrap">
366
+ <div id="icon-myCRED" class="icon32"><br /></div>
367
+ <h2><?php
368
+
369
+ echo '<strong>my</strong>CRED ' . __( 'Setup', 'mycred' );
370
+ if ( $this->step !== false )
371
+ echo ' <span>' . __( 'Step', 'mycred' ) . ' ' . $this->step . ' / 3'; ?></span></h2>
372
+ <?php // Get View
373
+ $this->get_view(); ?>
374
+
375
+ </div>
376
+ <?php
377
+ unset( $this );
378
+ }
379
+
380
+ /**
381
+ * Get View for current step
382
+ * Outputs the current setup step's page.
383
+ *
384
+ * @since 0.1
385
+ * @version 1.0
386
+ */
387
+ protected function get_view() {
388
+ // If step is not set we have not started the setup
389
+ if ( !$this->step ) { ?>
390
+
391
+ <form method="post" action="" class="setup step1">
392
+ <input type="hidden" name="step" value="1" />
393
+ <input type="hidden" name="token" value="<?php echo wp_create_nonce( 'myCRED-setup-step1' ); ?>" />
394
+ <p><?php _e( 'Click "Begin Setup" to install myCRED. You will be able to select your points format, layout and security settings.', 'mycred' ); ?></p>
395
+ <p class="action-row"><input type="submit" class="button button-primary button-large" name="being-setup" value="<?php _e( 'Begin Setup', 'mycred' ); ?>" /></p>
396
+ </form>
397
+ <?php
398
+ }
399
+ // Run setup by calling the current step's method
400
+ else {
401
+ $key = 'myCRED-setup-step' . $this->step;
402
+ // Verify token
403
+ if ( isset( $_POST['token'] ) && wp_verify_nonce( $_POST['token'], $key ) ) {
404
+ $step = (int) $this->step;
405
+ $step_mehod_name = 'setup_step' . $step;
406
+
407
+ // Check if method exists
408
+ if ( method_exists( get_class(), $step_mehod_name ) )
409
+ $this->$step_mehod_name();
410
+ }
411
+ }
412
+ }
413
+
414
+ /**
415
+ * Setup Step 1 - Format
416
+ * First we want to select the creds format we want to use. When submitting this step,
417
+ * the log database is installed.
418
+ *
419
+ * @since 0.1
420
+ * @version 1.0
421
+ */
422
+ protected function setup_step1() {
423
+ if ( !$this->step ) return;
424
+
425
+ $number = 10;
426
+ $decimals = $this->core['format']['decimals'];
427
+ if ( (int) $decimals > 0 ) {
428
+ $number = number_format( (float) $number, (int) $decimals, '.', '' );
429
+ }
430
+
431
+ // Default no. of decimals
432
+ if ( isset( $_POST['myCRED-format-dec'] ) )
433
+ $default_decimals = sanitize_text_field( abs( $_POST['myCRED-format-dec'] ) );
434
+ else
435
+ $default_decimals = 2;
436
+
437
+ // Default decimal separator
438
+ if ( isset( $_POST['myCRED-sep-dec'] ) )
439
+ $default_sep_decimal = strip_tags( $_POST['myCRED-sep-dec'] );
440
+ else
441
+ $default_sep_decimal = '.';
442
+
443
+ // Default thousand separator
444
+ if ( isset( $_POST['myCRED-sep-tho'] ) )
445
+ $default_sep_thousand = strip_tags( $_POST['myCRED-sep-tho'] );
446
+ else
447
+ $default_sep_thousand = ' '; ?>
448
+
449
+ <form method="post" action="" class="setup step2">
450
+ <input type="hidden" name="step" value="2" />
451
+ <input type="hidden" name="token" value="<?php echo wp_create_nonce( 'myCRED-setup-step2' ); ?>" />
452
+ <p><?php _e( 'Select the format you want to use for your points.', 'mycred' ); ?></p>
453
+ <h2><?php _e( 'Format', 'mycred' ); ?></h2>
454
+ <ol class="regular">
455
+ <li class="tl">
456
+ <label><?php _e( 'Separators', 'mycred' ); ?></label>
457
+ <h2>1 <input type="text" name="myCRED-sep-tho" id="myCRED-format-sep-thousand" value="<?php echo $default_sep_thousand; ?>" size="2" /></h2>
458
+ <span class="description">&nbsp;</span>
459
+ </li>
460
+ <li class="tl">
461
+ <label>&nbsp;</label>
462
+ <h2>000 <input type="text" name="myCRED-sep-dec" id="myCRED-format-sep-dec" value="<?php echo $default_sep_decimal; ?>" size="2" /></h2>
463
+ <span class="description">&nbsp;</span>
464
+ </li>
465
+ <li>
466
+ <label><?php _e( 'Decimals', 'mycred' ); ?></label>
467
+ <h2><input type="text" name="myCRED-format-dec" id="myCRED-format-dec" value="<?php echo $default_decimals; ?>" size="6" /></h2>
468
+ <span class="description"><?php _e( 'Use zero for no decimals.', 'mycred' ); ?></span>
469
+ </li>
470
+ </ol>
471
+ <h2 class="shadow"><?php _e( 'Presentation', 'mycred' ); ?></h2>
472
+ <ol class="inline">
473
+ <li>
474
+ <label><?php _e( 'Name (Singular)', 'mycred' ); ?></label>
475
+ <h2><input type="text" name="myCRED-name-singular" id="myCRED-name-singular" value="Point" /></h2>
476
+ </li>
477
+ <li>
478
+ <label><?php _e( 'Name (Plural)', 'mycred' ); ?></label>
479
+ <h2><input type="text" name="myCRED-name-plural" id="myCRED-name-plural" value="Points" /></h2>
480
+ </li>
481
+ </ol>
482
+ <ol class="inline">
483
+ <li>
484
+ <label><?php _e( 'Prefix', 'mycred' ); ?></label>
485
+ <h2><input type="text" size="5" name="myCRED-prefix" id="myCRED-prefix" value="" /></h2>
486
+ </li>
487
+ <li class="middle">
488
+ <label>&nbsp;</label>
489
+ <h2><?php echo $number; ?></h2>
490
+ </li>
491
+ <li>
492
+ <label><?php _e( 'Suffix', 'mycred' ); ?></label>
493
+ <h2><input type="text" size="5" name="myCRED-suffix" id="myCRED-suffix" value="" /></h2>
494
+ </li>
495
+
496
+ </ol>
497
+ <p class="action-row"><a href="<?php echo admin_url( 'plugins.php?page=myCRED-setup' ); ?>" title="<?php _e( 'Cancel Setup' ); ?>" class="button button-secondary button-large" style="margin-right:24px;"><?php _e( 'Cancel' ); ?></a> <input type="submit" class="button button-primary button-large" name="being-setup" id="mycred-next-button" value="<?php _e( 'Next', 'mycred' ); ?>" /></p>
498
+ </form>
499
+ <?php
500
+ }
501
+
502
+ /**
503
+ * Setup Step 2 - Presentation
504
+ * In this step we get to name our creds along with settup how creds are shown around
505
+ * the website.
506
+ *
507
+ * @since 0.1
508
+ * @version 1.0
509
+ */
510
+ protected function setup_step2() {
511
+ if ( !$this->step ) return;
512
+
513
+ // Capabilities
514
+ $edit_plugin = ( isset( $_POST['myCRED-cap-plugin'] ) ) ? sanitize_text_field( $_POST['myCRED-cap-plugin'] ) : 'manage_options';
515
+ $edit_creds = ( isset( $_POST['myCRED-cap-creds'] ) ) ? sanitize_text_field( $_POST['myCRED-cap-creds'] ) : 'edit_users';
516
+
517
+ // Excludes
518
+ $exclude_plugin_editors = ( isset( $_POST['myCRED-exclude-plugin-editors'] ) ) ? 1 : 0;
519
+ $exclude_cred_editors = ( isset( $_POST['myCRED-exclude-cred-editors'] ) ) ? 1 : 0;
520
+ $exclude_list = ( isset( $_POST['myCRED-exclude-list'] ) ) ? $_POST['myCRED-exclude-list'] : ''; ?>
521
+
522
+ <form method="post" action="" class="setup step3">
523
+ <input type="hidden" name="step" value="3" />
524
+ <input type="hidden" name="token" value="<?php echo wp_create_nonce( 'myCRED-setup-step3' ); ?>" />
525
+ <h2><?php _e( 'Security', 'mycred' ); ?></h2>
526
+ <ol class="inline">
527
+ <li>
528
+ <label for="myCRED-cap-plugin"><?php _e( 'Edit Settings Capability', 'mycred' ); ?></label>
529
+ <h2><input type="text" name="myCRED-cap-plugin" id="myCRED-cap-plugin" value="<?php echo $edit_plugin; ?>" /></h2>
530
+ </li>
531
+ <li>
532
+ <label for="myCRED-cap-creds"><?php echo $this->core->template_tags_general( __( 'Edit Users %plural% Capability', 'mycred' ) ); ?></label>
533
+ <h2><input type="text" name="myCRED-cap-creds" id="myCRED-cap-creds" value="<?php echo $edit_creds; ?>" /></h2>
534
+ </li>
535
+ </ol>
536
+ <h2><?php _e( 'Excludes', 'mycred' ); ?></h2>
537
+ <ol>
538
+ <li>
539
+ <input type="checkbox" name="myCRED-exclude-plugin-editors" id="myCRED-exclude-plugin"<?php checked( $exclude_plugin_editors, 1 ); ?> value="1" class="checkbox" />
540
+ <label for="myCRED-exclude-plugin"><?php _e( 'Exclude those who can "Edit Settings".', 'mycred' ); ?></label>
541
+ </li>
542
+ <li style="width: 100%;">
543
+ <input type="checkbox" name="myCRED-exclude-cred-editors" id="myCRED-exclude-caps"<?php checked( $exclude_cred_editors, 1 ); ?> value="1" class="checkbox" />
544
+ <label for="myCRED-exclude-caps"><?php echo $this->core->template_tags_general( __( 'Exclude those who can "Edit Users %plural%".', 'mycred' ) ); ?></label>
545
+ </li>
546
+ <li>
547
+ <label for="myCRED-exclude-list"><?php _e( 'Exclude the following user IDs:', 'mycred' ); ?></label>
548
+ <h2><input type="text" name="myCRED-exclude-list" id="myCRED-exclude-list" value="<?php echo $exclude_list; ?>" /></h2>
549
+ </li>
550
+ </ol>
551
+ <h2><?php _e( 'Rankings', 'mycred' ); ?></h2>
552
+ <ol>
553
+ <li>
554
+ <input type="radio" name="myCRED-freq-rate" id="myCRED-freq-always" checked="checked" value="always" />
555
+ <label for="myCRED-freq-always"><?php _e( 'Update rankings each time a users balance changes.', 'mycred' ); ?></label>
556
+ </li>
557
+ <li>
558
+ <input type="radio" name="myCRED-freq-rate" id="myCRED-freq-daily" value="daily" />
559
+ <label for="myCRED-freq-daily"><?php _e( 'Update rankings once a day.', 'mycred' ); ?></label>
560
+ </li>
561
+ <li>
562
+ <input type="radio" name="myCRED-freq-rate" id="myCRED-freq-weekly" value="weekly" />
563
+ <label for="myCRED-freq-weekly"><?php _e( 'Update rankings once a week.', 'mycred' ); ?></label>
564
+ </li>
565
+ <li>
566
+ <input type="radio" name="myCRED-freq-rate" id="myCRED-freq-date" value="date" />
567
+ <label for="myCRED-freq-date"><?php _e( 'Update rankings on a specific date.', 'mycred' ); ?></label>
568
+ </li>
569
+ <li class="empty">&nbsp;</li>
570
+ <li>
571
+ <label for="myCRED-freq-date"><?php _e( 'Date', 'mycred' ); ?></label>
572
+ <div class="h2"><input type="date" name="myCRED-freq-date" id="myCRED-freq-date" value="" class="medium" /></div>
573
+ </li>
574
+ </ol>
575
+
576
+ <p class="action-row"><input type="submit" class="button button-primary button-large" name="being-setup" value="<?php _e( 'Next', 'mycred' ); ?>" /></p>
577
+ </form>
578
+ <?php
579
+ }
580
+
581
+ /**
582
+ * Setup Step 3 - Final Page
583
+ *
584
+ * @since 0.1
585
+ * @version 1.0
586
+ */
587
+ protected function setup_step3() {
588
+ if ( !$this->step ) return;
589
+
590
+ // Once this is set the setup will no longer load
591
+ update_option( 'mycred_setup_completed', date_i18n( 'U' ) );
592
+ delete_option( 'mycred_temp_singular' ); ?>
593
+
594
+ <form method="post" action="" class="step4">
595
+ <h1><?php _e( 'Ready', 'mycred' ); ?></h1>
596
+ <h2 class="shadow"><?php _e( 'Almost done! Click the button below to finish this setup.', 'mycred' ); ?></h2>
597
+ <p class="action-row"><a href="<?php echo admin_url( '/admin.php?page=myCRED' ); ?>" class="button button-primary button-large"><?php _e( 'Install & Run', 'mycred' ); ?></a></p>
598
+ </form>
599
+ <?php
600
+ }
601
+
602
+ /**
603
+ * Install Database
604
+ * @since 0.1
605
+ * @version 1.0
606
+ */
607
+ protected function install_database( $decimals = 0 ) {
608
+ // If DB is already installed bail pretending that everything is fine
609
+ if ( get_option( 'mycred_version_db' ) !== false ) return true;
610
+
611
+ // Format
612
+ if ( $decimals > 0 ) {
613
+ if ( $decimals > 4 )
614
+ $cred_format = "decimal(32,$decimals)";
615
+ else
616
+ $cred_format = "decimal(22,$decimals)";
617
+ }
618
+ else {
619
+ $cred_format = 'bigint(22)';
620
+ }
621
+
622
+ global $wpdb;
623
+
624
+ // Table Name
625
+ $table_name = $wpdb->prefix . 'myCRED_log';
626
+ // Log structure
627
+ $sql = "id int(11) NOT NULL AUTO_INCREMENT,
628
+ ref VARCHAR(256) NOT NULL,
629
+ ref_id int(11) DEFAULT NULL,
630
+ user_id int(11) DEFAULT NULL,
631
+ creds $cred_format DEFAULT NULL,
632
+ ctype VARCHAR(64) DEFAULT 'mycred_default',
633
+ time bigint(20) DEFAULT NULL,
634
+ entry LONGTEXT DEFAULT NULL,
635
+ data LONGTEXT DEFAULT NULL,
636
+ PRIMARY KEY (id),
637
+ UNIQUE KEY id (id)";
638
+
639
+ // Insert table
640
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
641
+ dbDelta( "CREATE TABLE IF NOT EXISTS " . $table_name . " ( " . $sql . " ) DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci;" );
642
+ add_option( 'mycred_version_db', '1.0', '', 'no' );
643
+ return true;
644
+ }
645
+ }
646
+ }
647
+ ?>
includes/mycred-network.php ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) || !is_multisite() ) exit;
3
+ /**
4
+ * myCRED_Network class
5
+ * @since 0.1
6
+ * @version 1.0
7
+ */
8
+ if ( !class_exists( 'myCRED_Network' ) ) {
9
+ class myCRED_Network {
10
+
11
+ public $core;
12
+ public $plug;
13
+
14
+ /**
15
+ * Construct
16
+ */
17
+ function __construct() {
18
+ global $mycred_network;
19
+ $this->core = mycred_get_settings();
20
+ }
21
+
22
+ /**
23
+ * Load
24
+ * @since 0.1
25
+ * @version 1.0
26
+ */
27
+ public function load() {
28
+ add_action( 'init', array( $this, 'module_init' ) );
29
+ add_action( 'admin_head', array( $this, 'admin_menu_styling' ) );
30
+ }
31
+
32
+ /**
33
+ * Init
34
+ * @since 0.1
35
+ * @version 1.0
36
+ */
37
+ public function module_init() {
38
+ // Network Settings Update
39
+ if ( isset( $_POST['mycred_network'] ) && isset( $_POST['mycred-token'] ) )
40
+ $this->save_network_prefs();
41
+
42
+ // Add Menu
43
+ add_action( 'network_admin_menu', array( &$this, 'add_menu' ) );
44
+ }
45
+
46
+ /**
47
+ * Add Network Menu Items
48
+ * @since 0.1
49
+ * @version 1.0
50
+ */
51
+ public function add_menu() {
52
+ $pages[] = add_menu_page(
53
+ __( 'myCRED', 'mycred' ),
54
+ __( 'myCRED', 'mycred' ),
55
+ 'manage_network_options',
56
+ 'myCRED',
57
+ '',
58
+ ''
59
+ );
60
+ $pages[] = add_submenu_page(
61
+ 'myCRED',
62
+ __( 'Network Settings', 'mycred' ),
63
+ __( 'Network Settings', 'mycred' ),
64
+ 'manage_network_options',
65
+ 'myCRED',
66
+ array( $this, 'admin_page_settings' )
67
+ );
68
+
69
+ foreach ( $pages as $page )
70
+ add_action( 'admin_print_styles-' . $page, array( $this, 'admin_print_styles' ) );
71
+ }
72
+
73
+ /**
74
+ * Add Admin Menu Styling
75
+ * @since 0.1
76
+ * @version 1.0
77
+ */
78
+ public function admin_menu_styling() {
79
+ $image = plugins_url( 'images/logo-menu.png', myCRED_THIS );
80
+ echo '
81
+ <style type="text/css">
82
+ #adminmenu .toplevel_page_myCRED div.wp-menu-image { background-image: url(' . $image . '); background-position: 1px -28px; }
83
+ #adminmenu .toplevel_page_myCRED:hover div.wp-menu-image,
84
+ #adminmenu .toplevel_page_myCRED.current div.wp-menu-image,
85
+ #adminmenu .toplevel_page_myCRED .wp-menu-open div.wp-menu-image { background-position: 1px 0; }
86
+ </style>' . "\n";
87
+ }
88
+
89
+ /**
90
+ * Load Admin Page Styling
91
+ * @since 0.1
92
+ * @version 1.0
93
+ */
94
+ public function admin_print_styles() {
95
+ if ( !wp_style_is( 'mycred-admin', 'registered' ) ) {
96
+ wp_register_style(
97
+ 'mycred-admin',
98
+ plugins_url( 'css/admin.css', myCRED_THIS ),
99
+ false,
100
+ myCRED_VERSION . '.1',
101
+ 'all'
102
+ );
103
+ }
104
+
105
+ wp_enqueue_style( 'mycred-admin' );
106
+ }
107
+
108
+ /**
109
+ * Network Settings Page
110
+ * @since 0.1
111
+ * @version 1.0
112
+ */
113
+ public function admin_page_settings() {
114
+ // Security
115
+ if ( !current_user_can( 'manage_network_options' ) ) wp_die( __( 'Access Denied', 'mycred' ) );
116
+
117
+ global $mycred_network;
118
+
119
+ $defaults = array(
120
+ 'master' => 0,
121
+ 'block' => ''
122
+ );
123
+ $prefs = get_site_option( 'mycred_network', $defaults, false ); ?>
124
+
125
+ <div class="wrap" id="myCRED-wrap">
126
+ <div id="icon-myCRED" class="icon32"><br /></div>
127
+ <h2><strong>my</strong>CRED <?php _e( 'Network', 'mycred' ); ?></h2>
128
+ <?php
129
+
130
+ // Settings Updated
131
+ if ( isset( $mycred_network['update'] ) )
132
+ echo '<div class="updated"><p>' . __( 'Network Settings Updated', 'mycred' ) . '</p></div>'; ?>
133
+
134
+ <p><?php _e( 'Configure network settings for <strong>my</strong>CRED.', 'mycred' ); ?></p>
135
+ <form method="post" action="" class="">
136
+ <input type="hidden" name="mycred-token" value="<?php echo wp_create_nonce( 'mycred' ); ?>" />
137
+ <div class="list-items expandable-li" id="accordion">
138
+ <h4 style="color:#333;" class="ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-accordion-header-active ui-state-active ui-corner-top"><?php _e( 'Settings', 'mycred' ); ?></h4>
139
+ <div class="body ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="display:block;">
140
+ <label class="subheader"><?php _e( 'Master Template', 'mycred' ); ?></label>
141
+ <ol id="myCRED-network-">
142
+ <li>
143
+ <input type="radio" name="mycred_network[master]" id="myCRED-network-overwrite-" <?php checked( $prefs['master'], true ); ?> value="1" />
144
+ <label for="myCRED-network-"><?php _e( 'Yes', 'mycred' ); ?></label>
145
+ </li>
146
+ <li>
147
+ <input type="radio" name="mycred_network[master]" id="myCRED-network-overwrite-" <?php checked( $prefs['master'], false ); ?> value="0" />
148
+ <label for="myCRED-network-"><?php _e( 'No', 'mycred' ); ?></label>
149
+ </li>
150
+ <li>
151
+ <p class="description"><?php _e( 'If enabled, your main site\'s <strong>my</strong>CRED setup will be used for all other sites.', 'mycred' ); ?></p>
152
+ </li>
153
+ </ol>
154
+ <label class="subheader"><?php _e( 'Site Block', 'mycred' ); ?></label>
155
+ <ol id="myCRED-network-">
156
+ <li>
157
+ <div class="h2"><input type="text" name="mycred_network[block]" id="myCRED-network-block" value="<?php echo $prefs['block']; ?>" class="long" /></div>
158
+ <span class="description"><?php _e( 'Comma separated list of blog ids where <strong>my</strong>CRED is to be disabled.', 'mycred' ); ?></span>
159
+ </li>
160
+ </ol>
161
+ <?php do_action( 'mycred_network_prefs', $this ); ?>
162
+
163
+ </div>
164
+ <?php do_action( 'mycred_after_network_prefs', $this ); ?>
165
+
166
+ </div>
167
+ <p><?php submit_button( __( 'Save Network Settings', 'mycred' ) ); ?></p>
168
+ </form>
169
+ <?php do_action( 'mycred_bottom_network_page', $this ); ?>
170
+
171
+ </div>
172
+ <?php
173
+ }
174
+
175
+ /**
176
+ * Save Network Settings
177
+ * @since 0.1
178
+ * @version 1.0
179
+ */
180
+ protected function save_network_prefs() {
181
+ if ( !wp_verify_nonce( $_POST['mycred-token'], 'mycred' ) ) return;
182
+
183
+ global $mycred_network;
184
+
185
+ $new_settings['master'] = ( isset( $_POST['mycred_network']['master'] ) ) ? (bool) $_POST['mycred_network']['master'] : 0;
186
+ $new_settings['block'] = sanitize_text_field( $_POST['mycred_network']['block'] );
187
+
188
+ $new_settings = apply_filters( 'mycred_save_network_prefs', $new_settings, $_POST['mycred_network'], $this->core );
189
+
190
+ // Update Network Settings
191
+ update_site_option( 'mycred_network', $new_settings );
192
+
193
+ $mycred_network['update'] = true;
194
+ }
195
+ }
196
+ $network = new myCRED_Network();
197
+ $network->load();
198
+ }
199
+ ?>
includes/mycred-protect.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Protect class
5
+ * @since 0.1
6
+ * @version 1.0
7
+ */
8
+ class myCRED_Protect {
9
+
10
+ private $skey;
11
+
12
+ /**
13
+ * Construct
14
+ */
15
+ public function __construct( $new_key = '' ) {
16
+ if ( mycred_overwrite() === false )
17
+ $skey = get_option( 'mycred_key' );
18
+ else
19
+ $skey = get_blog_option( 1, 'mycred_key' );
20
+
21
+ if ( $skey === false || ( $new_key === true && function_exists( 'current_user_can' ) && current_user_can( 'update_core' ) ) ) {
22
+ $skey = $this->reset_key();
23
+ }
24
+ $this->skey = $skey;
25
+ }
26
+
27
+ /**
28
+ * Reset Key
29
+ */
30
+ public function reset_key() {
31
+ $skey = wp_generate_password( 12, true, true );
32
+ update_option( 'mycred_key', $skey );
33
+ $this->skey = $skey;
34
+ }
35
+
36
+ /**
37
+ * Encode
38
+ */
39
+ public function do_encode( $value ) {
40
+ if ( !$value ) { return false; }
41
+ $text = $value;
42
+ $iv_size = mcrypt_get_iv_size( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB );
43
+ $iv = mcrypt_create_iv( $iv_size, MCRYPT_RAND );
44
+ $crypttext = mcrypt_encrypt( MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv );
45
+ return trim( $this->do_safe_b64encode( $crypttext ) );
46
+ }
47
+
48
+ /**
49
+ * Decode
50
+ */
51
+ public function do_decode( $value ) {
52
+ if ( !$value ) { return false; }
53
+ $crypttext = $this->do_safe_b64decode( $value );
54
+ $iv_size = mcrypt_get_iv_size( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB );
55
+ $iv = mcrypt_create_iv( $iv_size, MCRYPT_RAND );
56
+ $decrypttext = mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv );
57
+ return trim( $decrypttext );
58
+ }
59
+
60
+ /**
61
+ * Retrieve
62
+ */
63
+ protected function do_retrieve( $value ) {
64
+ if ( !$value ) { return false; }
65
+ $crypttext = $this->do_safe_b64decode( $value );
66
+ $iv_size = mcrypt_get_iv_size( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB );
67
+ $iv = mcrypt_create_iv( $iv_size, MCRYPT_RAND );
68
+ $decrypttext = mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv );
69
+ $string = trim( $decrypttext );
70
+ parse_str( $string, $output );
71
+ return $output;
72
+ }
73
+
74
+ /**
75
+ * Safe Encode
76
+ */
77
+ protected function do_safe_b64encode( $string ) {
78
+ $data = base64_encode( $string );
79
+ $data = str_replace( array( '+', '/', '=' ), array( '-', '_', '' ), $data );
80
+ return $data;
81
+ }
82
+
83
+ /**
84
+ * Safe Decode
85
+ */
86
+ protected function do_safe_b64decode( $string ) {
87
+ $data = str_replace( array( '-', '_' ), array( '+', '/' ), $string );
88
+ $mod4 = strlen( $data ) % 4;
89
+ if ( $mod4 ) {
90
+ $data .= substr( '====', $mod4 );
91
+ }
92
+ return base64_decode( $data );
93
+ }
94
+ }
95
+ ?>
includes/mycred-rankings.php ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Rankings class
5
+ * @see http://mycred.merovingi.com/features/mycred_rankings/
6
+ * @since 0.1
7
+ * @version 1.0
8
+ */
9
+ if ( !class_exists( 'myCRED_Rankings' ) ) {
10
+ class myCRED_Rankings {
11
+
12
+ public $core;
13
+ public $args;
14
+ public $results;
15
+
16
+ private $frequency;
17
+
18
+ /**
19
+ * Constructor
20
+ */
21
+ public function __construct( $args = array(), $reload = false ) {
22
+ // Get settings
23
+ $mycred = mycred_get_settings();
24
+ $this->core = $mycred;
25
+
26
+ // Parse arguments
27
+ $this->args = wp_parse_args( $args, array(
28
+ 'number' => '-1',
29
+ 'offset' => 0,
30
+ 'order' => 'DESC',
31
+ 'allowed_tags' => '',
32
+ 'meta_key' => $mycred->get_cred_id(),
33
+ 'template' => '#%rank% %user_profile_link% %cred_f%'
34
+ ) );
35
+ $this->frequency = 12 * HOUR_IN_SECONDS;
36
+
37
+ // Delete transient forcing a new query.
38
+ $this->_transients( $reload );
39
+
40
+ // Get rankings
41
+ $this->get_rankings();
42
+ }
43
+
44
+ /**
45
+ * Transients
46
+ * Removes the transient if needed.
47
+ * @since 0.1
48
+ * @version 1.0
49
+ */
50
+ protected function _transients( $reload = false ) {
51
+ if ( $this->core->frequency['rate'] == 'always' ) return;
52
+
53
+ // Get history
54
+ $history = get_option( 'mycred_transients' );
55
+
56
+ // Rate
57
+ if ( $this->core->frequency['rate'] == 'daily' )
58
+ $today = date_i18n( 'd' );
59
+ elseif ( $this->core->frequency['rate'] == 'weekly' )
60
+ $today = date_i18n( 'W' );
61
+ else
62
+ $today = date_i18n( 'Y-m-d' );
63
+
64
+ // If history is missing create it now
65
+ if ( $history === false ) $history = array( $this->args['meta_key'] => '' );
66
+
67
+ // Reset on a specific date
68
+ if ( $this->core->frequency['rate'] == 'date' && $today == $this->core->frequency['date'] && empty( $history[$this->args['meta_key']] ) ) {
69
+ $reload = true;
70
+ }
71
+ // Reset on a regular basis
72
+ elseif ( $this->core->frequency['rate'] != 'date' && $today != $history[$this->args['meta_key']] ) {
73
+ $reload = true;
74
+ }
75
+
76
+ // "Reset" by deleting the transient forcing a new database query
77
+ if ( $reload === true ) {
78
+ delete_transient( $this->args['meta_key'] . '_ranking' );
79
+ $history[$this->args['meta_key']] = $today;
80
+ update_option( 'mycred_transients', $history );
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Get Rankings
86
+ * Returns either the transient copy of the current results or queries a new one.
87
+ * @since 0.1
88
+ * @version 1.0
89
+ */
90
+ protected function get_rankings() {
91
+ // Get any existing copies of our transient data
92
+ if ( false === ( $this->results = get_transient( $this->args['meta_key'] . '_ranking' ) ) ) {
93
+ global $wpdb;
94
+
95
+ // Transient missing, run new query
96
+ $wp = $wpdb->prefix;
97
+ $this->results = $wpdb->get_results( $wpdb->prepare( "SELECT {$wp}users.ID AS user_id, {$wp}users.display_name, {$wp}users.user_login, {$wp}usermeta.meta_value AS creds FROM {$wp}users LEFT JOIN {$wp}usermeta ON {$wp}users.ID = {$wp}usermeta.user_id AND {$wp}usermeta.meta_key= %s ORDER BY {$wp}usermeta.meta_value+1 DESC", ( empty( $this->args['meta_key'] ) ) ? 'mycred_default' : $this->args['meta_key'] ), 'ARRAY_A' );
98
+
99
+ // Excludes
100
+ foreach ( $this->results as $row_id => $row_data ) {
101
+ if ( $this->core->exclude_user( $row_data['user_id'] ) )
102
+ unset( $this->results[$row_id] );
103
+ }
104
+
105
+ // Save new transient
106
+ set_transient( $this->args['meta_key'] . '_ranking', $this->results, $this->frequency );
107
+ }
108
+
109
+ // Reverse order if requested
110
+ if ( $this->args['order'] == 'ASC' ) {
111
+ $this->results = array_reverse( $this->results, true );
112
+ }
113
+
114
+ // Limit result if requested
115
+ if ( $this->args['number'] != '-1' ) {
116
+ $this->results = array_slice( $this->results, (int) $this->args['offset'], (int) $this->args['number'] );
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Have Results
122
+ * @returns true or false
123
+ * @since 0.1
124
+ * @version 1.0
125
+ */
126
+ public function have_results() {
127
+ if ( !empty( $this->results ) ) return true;
128
+ return false;
129
+ }
130
+
131
+ /**
132
+ * Users Position
133
+ * @param $user_id (int) required user id
134
+ * @returns position (int)
135
+ * @since 0.1
136
+ * @version 1.0
137
+ */
138
+ public function users_position( $user_id = '' ) {
139
+ if ( $this->have_results() ) {
140
+ foreach ( $this->results as $row_id => $row_data ) {
141
+ if ( $row_data['user_id'] == $user_id ) return $row_id+1;
142
+ }
143
+ }
144
+ else return 1;
145
+ }
146
+
147
+ /**
148
+ * Users Creds
149
+ * @param $user_id (int) user id
150
+ * @returns position (int) or empty
151
+ * @since 0.1
152
+ * @version 1.0
153
+ */
154
+ public function users_creds( $user_id = NULL ) {
155
+ if ( $user_id === NULL ) $user_id = get_current_user_id();
156
+ if ( $this->have_results() ) {
157
+ foreach ( $this->results as $row_id => $row_data ) {
158
+ if ( $row_data['user_id'] == $user_id ) return $row_data['creds'];
159
+ }
160
+ }
161
+ else return '';
162
+ }
163
+
164
+ /**
165
+ * Display
166
+ * @since 0.1
167
+ * @version 1.0
168
+ */
169
+ public function display() {
170
+ echo $this->get_display();
171
+ }
172
+
173
+ /**
174
+ * Get Display
175
+ * Generates an organized list for our results.
176
+ *
177
+ * @since 0.1
178
+ * @version 1.0
179
+ */
180
+ public function get_display() {
181
+ // Default template
182
+ if ( empty( $this->args['template'] ) ) $this->args['template'] = '#%rank% %user_profile_link% %cred_f%';
183
+
184
+ // Organized list
185
+ $output = '<ol class="myCRED-leaderboard">';
186
+
187
+ // Loop
188
+ foreach ( $this->results as $position => $row ) {
189
+ // Prep
190
+ $class = array();
191
+ $url = get_author_posts_url( $row['user_id'] );
192
+
193
+ // Classes
194
+ $class[] = 'item-' . $position;
195
+ if ( $position == 0 )
196
+ $class[] = 'first-item';
197
+
198
+ if ( $position % 2 != 0 )
199
+ $class[] = 'alt';
200
+
201
+ // Template Tags
202
+ $layout = str_replace( '%rank%', $position+1, $this->args['template'] );
203
+
204
+ $layout = $this->core->template_tags_general( $layout );
205
+ $layout = $this->core->template_tags_amount( $layout, $row['creds'] );
206
+ $layout = $this->core->template_tags_user( $layout, $row['user_id'], $row );
207
+
208
+ $layout = apply_filters( 'mycred_ranking_row', $layout, $this->args['template'], $row, $position );
209
+ $output .= '<li class="' . implode( ' ', $class ) . '">' . $layout . '</li>';
210
+ }
211
+
212
+ // End
213
+ $output .= '</ol>';
214
+ return $output;
215
+ }
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Get myCRED Rankings
221
+ * Returns the myCRED_Rankings object containing results.
222
+ *
223
+ * @param $args (array) optional array of arguments for the ranking
224
+ * @var $number (int) number of results to return
225
+ * @var $order (string) ASC to return with lowest creds or DESC to return highest creds first
226
+ * @var $meta_key (string) optional cred meta key to check for
227
+ * @var $offset (int) optional number to start from when returning records. defaults to zero (first result)
228
+ * @var $allowed_tags (string) optional string containing all HTML elements that are allowed to used.
229
+ * @returns class object
230
+ * @since 0.1
231
+ * @version 1.0
232
+ */
233
+ if ( !function_exists( 'mycred_rankings' ) ) {
234
+ function mycred_rankings( $args = array() )
235
+ {
236
+ global $mycred_rankings;
237
+ if ( !isset( $mycred_rankings ) || !empty( $args ) ) {
238
+ $mycred_rankings = new myCRED_Rankings( $args );
239
+ }
240
+ return $mycred_rankings;
241
+ }
242
+ }
243
+
244
+ /**
245
+ * Get Users Position
246
+ * Returns a given users position in the ranking list.
247
+ *
248
+ * @param $user_id (int) required user id
249
+ * @param $args (array) optinal arguments to pass on for the db query
250
+ * @returns position (int) or empty if no record could be made
251
+ * @since 0.1
252
+ * @version 1.0
253
+ */
254
+ if ( !function_exists( 'mycred_rankings_position' ) ) {
255
+ function mycred_rankings_position( $user_id = '' )
256
+ {
257
+ $rankings = mycred_rankings();
258
+ if ( $rankings->have_results() ) {
259
+ foreach ( $rankings->results as $row_id => $row_data ) {
260
+ if ( $row_data['user_id'] == $user_id ) return $row_id+1;
261
+ }
262
+ }
263
+ return '';
264
+ }
265
+ }
266
+
267
+ /**
268
+ * Render Leaderboard Shortcode
269
+ * @since 0.1
270
+ * @version 1.0
271
+ */
272
+ if ( !function_exists( 'mycred_render_leaderboard' ) ) {
273
+ function mycred_render_leaderboard( $attr, $content ) {
274
+ if ( !isset( $attr['template'] ) ) $attr['template'] = $content;
275
+ $rankings = mycred_rankings( $attr );
276
+
277
+ // Have results
278
+ if ( $rankings->have_results() )
279
+ return $rankings->get_display();
280
+
281
+ // No result template is set
282
+ if ( isset( $attr['no-results'] ) && !empty( $attr['no-results'] ) )
283
+ return $rankings->core->template_tags_general( $attr['no-results'] );
284
+ }
285
+ }
286
+ ?>
includes/mycred-widgets.php ADDED
@@ -0,0 +1,375 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * Widget: myCRED Balance
5
+ * @since 0.1
6
+ * @version 1.0
7
+ */
8
+ if ( !class_exists( 'myCRED_Widget_Balance' ) ) {
9
+ class myCRED_Widget_Balance extends WP_Widget {
10
+
11
+ /**
12
+ * Construct
13
+ */
14
+ function myCRED_Widget_Balance() {
15
+ // Basic details about our widget
16
+ $widget_ops = array(
17
+ 'classname' => 'widget-my-cred',
18
+ 'description' => __( 'Show the current users myCRED balance', 'mycred' )
19
+ );
20
+ $this->WP_Widget( 'mycred_widget_balance', __( 'myCRED Balance', 'mycred' ), $widget_ops );
21
+ $this->alt_option_name = 'mycred_widget_balance';
22
+ }
23
+
24
+ /**
25
+ * Widget Output
26
+ */
27
+ function widget( $args, $instance ) {
28
+ ob_start();
29
+ extract( $args, EXTR_SKIP );
30
+
31
+ // If we are logged in
32
+ if ( is_user_logged_in() ) {
33
+ // Current user id
34
+ $user_id = get_current_user_id();
35
+
36
+ // Settings
37
+ $mycred = mycred_get_settings();
38
+
39
+ // If this is an excluded user we bail
40
+ if ( $mycred->exclude_user( $user_id ) ) return;
41
+
42
+ // Start
43
+ echo $before_widget;
44
+
45
+ // Title
46
+ if ( !empty( $instance['title'] ) ) {
47
+ echo $before_title;
48
+ echo $mycred->template_tags_general( $instance['title'] );
49
+ echo $after_title;
50
+ }
51
+
52
+ // Balance
53
+ $balance = $mycred->get_users_cred( $user_id );
54
+ if ( empty( $balance ) ) $balance = 0;
55
+
56
+ $layout = $mycred->template_tags_amount( $instance['cred_format'], $balance );
57
+
58
+ // Include Ranking
59
+ if ( $instance['show_rank'] ) {
60
+ $ranking = str_replace( '%rank%', mycred_rankings_position( $user_id ), $instance['rank_format'] );
61
+ $ranking = '<div class="myCRED-rank">' . $ranking . '</div>';
62
+ $layout .= $ranking;
63
+ }
64
+ echo '<div class="myCRED-balance">' . $layout . '</div>';
65
+
66
+ // If we want to include history
67
+ if ( $instance['show_history'] ) {
68
+ echo '<div class="myCRED-widget-history">';
69
+
70
+ // Query Log
71
+ $log = new myCRED_Query_Log( array(
72
+ 'user_id' => $user_id,
73
+ 'number' => $instance['number']
74
+ ) );
75
+
76
+ // Have results
77
+ if ( $log->have_entries() ) {
78
+ // Title
79
+ if ( !empty( $instance['history_title'] ) ) {
80
+ $history_title = $instance['history_title'];
81
+ echo '<h3 class="widget-title">' . $mycred->template_tags_general( $history_title ) . '</h3>';
82
+ }
83
+
84
+ // Organized List
85
+ echo '<ol class="myCRED-history">';
86
+ $alt = 0;
87
+ $date_format = get_option( 'date_format' );
88
+ foreach ( $log->results as $entry ) {
89
+ // Row Layout
90
+ $layout = $instance['history_format'];
91
+ $layout = str_replace( '%date%', '<span class="date">' . date_i18n( $date_format ) . '</span>', $layout );
92
+ $layout = str_replace( '%entry%', $mycred->parse_template_tags( $entry->entry, $entry ), $layout );
93
+
94
+ $layout = $mycred->allowed_tags( $layout );
95
+ $layout = $mycred->template_tags_general( $layout );
96
+ $layout = $mycred->template_tags_amount( $layout, $entry->creds );
97
+
98
+ // Alternating rows
99
+ $alt = $alt+1;
100
+ if ( $alt % 2 == 0 ) $class = 'row alternate';
101
+ else $class = 'row';
102
+
103
+ // Output list item
104
+ echo '<li class="' . $class . '">' . $layout . '</li>';
105
+ }
106
+ echo '</ol>';
107
+ }
108
+ echo '</div>';
109
+ }
110
+
111
+ // End
112
+ echo $after_widget;
113
+ }
114
+ // Visitor
115
+ else {
116
+ // If we want to show a message, then do so
117
+ if ( $instance['show_visitors'] ) {
118
+ echo $before_widget;
119
+
120
+ // Settings
121
+ $mycred = mycred_get_settings();
122
+
123
+ // Title
124
+ if ( !empty( $instance['title'] ) ) {
125
+ echo $before_title;
126
+ echo $mycred->template_tags_general( $instance['title'] );
127
+ echo $after_title;
128
+ }
129
+
130
+ $message = $instance['message'];
131
+ $message = $mycred->template_tags_general( $message );
132
+ $message = $mycred->allowed_tags( $message );
133
+
134
+ echo '<div class="myCRED-my-balance-message"><p>' . nl2br( $message ) . '</p></div>';
135
+ echo $after_widget;
136
+ }
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Outputs the options form on admin
142
+ */
143
+ function form( $instance ) {
144
+ // Defaults
145
+ $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : __( 'My Balance', 'mycred' );
146
+ $cred_format = isset( $instance['cred_format'] ) ? esc_attr( $instance['cred_format'] ) : '%cred_f%';
147
+
148
+ $show_history = isset( $instance['show_history'] ) ? $instance['show_history'] : 0;
149
+ $history_title = isset( $instance['history_title'] ) ? $instance['history_title'] : __( '%plural% History', 'mycred' );
150
+ $history_entry = isset( $instance['history_format'] ) ? esc_attr( $instance['history_format'] ) : '%entry% <span class="creds">%cred_f%</span>';
151
+ $history_length = isset( $instance['number'] ) ? abs( $instance['number'] ) : 5;
152
+
153
+ $show_rank = isset( $instance['show_rank'] ) ? $instance['show_rank'] : 0;
154
+ $rank_format = isset( $instance['rank_format'] ) ? $instance['rank_format'] : '#%rank%';
155
+ $show_visitors = isset( $instance['show_visitors'] ) ? $instance['show_visitors'] : 0;
156
+ $message = isset( $instance['message'] ) ? esc_attr( $instance['message'] ) : __( '<a href="%login_url_here%">Login</a> to view your balance.', 'mycred' );
157
+
158
+ // CSS to help with show/hide
159
+ $rank_format_class = $history_option_class = $visitor_option_class = '';
160
+ if ( $show_rank )
161
+ $rank_format_class = ' ex-field';
162
+ if ( $show_history )
163
+ $history_option_class = ' ex-field';
164
+ if ( $show_visitors )
165
+ $visitor_option_class = ' ex-field'; ?>
166
+
167
+ <!-- Widget Admin Styling -->
168
+ <style type="text/css">
169
+ p.myCRED-widget-field span { display: none; }
170
+ p.myCRED-widget-field span.ex-field { display: block; padding: 6px 0; }
171
+ p.myCRED-widget-field span textarea { width: 98%; min-height: 80px; }
172
+ </style>
173
+ <!-- Widget Options -->
174
+ <p class="myCRED-widget-field">
175
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title', 'mycred' ); ?>:</label>
176
+ <input id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" class="widefat" />
177
+ </p>
178
+ <!-- Balance layout -->
179
+ <p class="myCRED-widget-field">
180
+ <label for="<?php echo esc_attr( $this->get_field_id( 'cred_format' ) ); ?>"><?php _e( 'Layout', 'mycred' ); ?>:</label>
181
+ <input id="<?php echo esc_attr( $this->get_field_id( 'cred_format' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'cred_format' ) ); ?>" type="text" value="<?php echo esc_attr( $cred_format ); ?>" class="widefat" /><br />
182
+ <small><?php _e( 'See the help tab for available template tags.', 'mycred' ); ?></small>
183
+ </p>
184
+ <!-- Ranking -->
185
+ <p class="myCRED-widget-field">
186
+ <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_rank' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_rank' ) ); ?>" value="1"<?php checked( $show_rank, true ); ?> class="checkbox" />
187
+ <label for="<?php echo esc_attr( $this->get_field_id( 'show_rank' ) ); ?>"><?php _e( 'Include users ranking', 'mycred' ); ?></label><br />
188
+ <span class="mycred-hidden<?php echo $rank_format_class; ?>">
189
+ <label for="<?php echo esc_attr( $this->get_field_id( 'rank_format' ) ); ?>"><?php _e( 'Rank format', 'mycred' ); ?>:</label>
190
+ <input id="<?php echo esc_attr( $this->get_field_id( 'rank_format' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'rank_format' ) ); ?>" type="text" value="<?php echo $rank_format; ?>" class="widefat" /><br />
191
+ <small><?php _e( 'This will be appended after their balance. See the help tab for available template tags.', 'mycred' ); ?></small>
192
+ </span>
193
+ </p>
194
+ <!-- History -->
195
+ <p class="myCRED-widget-field">
196
+ <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_history' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_history' ) ); ?>" value="1"<?php checked( $show_history, true ); ?> class="checkbox" />
197
+ <label for="<?php echo esc_attr( $this->get_field_id( 'show_history' ) ); ?>"><?php _e( 'Include history', 'mycred' ); ?></label><br />
198
+ <span class="mycred-hidden<?php echo $history_option_class; ?>">
199
+ <label for="<?php echo esc_attr( $this->get_field_id( 'history_title' ) ); ?>"><?php _e( 'History Title', 'mycred' ); ?>:</label>
200
+ <input id="<?php echo esc_attr( $this->get_field_id( 'history_title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'history_title' ) ); ?>" type="text" value="<?php echo esc_attr( $history_title ); ?>" class="widefat" />
201
+ <label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>"><?php _e( 'Number of entires', 'mycred' ); ?>:</label>
202
+ <input id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="text" value="<?php echo $history_length; ?>" size="3" class="align-right" /><br />
203
+ <label for="<?php echo esc_attr( $this->get_field_id( 'history_format' ) ); ?>"><?php _e( 'Row layout', 'mycred' ); ?>:</label>
204
+ <textarea name="<?php echo esc_attr( $this->get_field_name( 'history_format' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'history_format' ) ); ?>" rows="3"><?php echo esc_attr( $history_entry ); ?></textarea>
205
+ <small><?php _e( 'See the help tab for available template tags.', 'mycred' ); ?></small>
206
+ </span>
207
+ </p>
208
+ <!-- Show to Visitors -->
209
+ <p class="myCRED-widget-field">
210
+ <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_visitors' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_visitors' ) ); ?>" value="1"<?php checked( $show_visitors, true ); ?> class="checkbox" />
211
+ <label for="<?php echo esc_attr( $this->get_field_id( 'show_visitors' ) ); ?>"><?php _e( 'Show message when not logged in', 'mycred' ); ?></label><br />
212
+ <span class="mycred-hidden<?php echo $visitor_option_class; ?>">
213
+ <label for="<?php echo esc_attr( $this->get_field_id( 'message' ) ); ?>"><?php _e( 'Message', 'mycred' ); ?>:</label><br />
214
+ <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'message' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'message' ) ); ?>"><?php echo $message; ?></textarea><br />
215
+ <small><?php _e( 'See the help tab for available template tags.', 'mycred' ); ?></small>
216
+ </span>
217
+ </p>
218
+ <!-- Widget Admin Scripting -->
219
+ <script type="text/javascript">//<![CDATA[
220
+ jQuery(function($) {
221
+ $(document).ready(function(){
222
+ $('#<?php echo esc_attr( $this->get_field_id( 'show_rank' ) ); ?>').click(function(){
223
+ // This > <label> > <br> > <span>
224
+ $(this).next().next().next().toggleClass( 'ex-field' );
225
+ });
226
+ $('#<?php echo esc_attr( $this->get_field_id( 'show_history' ) ); ?>').click(function(){
227
+ $(this).next().next().next().toggleClass( 'ex-field' );
228
+ });
229
+ $('#<?php echo esc_attr( $this->get_field_id( 'show_visitors' ) ); ?>').click(function(){
230
+ $(this).next().next().next().toggleClass( 'ex-field' );
231
+ });
232
+ });
233
+ });//]]>
234
+ </script>
235
+ <?php
236
+ }
237
+
238
+ /**
239
+ * Processes widget options to be saved
240
+ */
241
+ function update( $new_instance, $old_instance ) {
242
+ $mycred = mycred_get_settings();
243
+ $instance = $old_instance;
244
+
245
+ $instance['title'] = trim( $new_instance['title'] );
246
+ $instance['cred_format'] = trim( $new_instance['cred_format'] );
247
+
248
+ $instance['show_rank'] = (bool) $new_instance['show_rank'];
249
+ $instance['rank_format'] = trim( $new_instance['rank_format'] );
250
+
251
+ $instance['show_history'] = (bool) $new_instance['show_history'];
252
+ $instance['history_title'] = trim( $new_instance['history_title'] );
253
+ $instance['history_format'] = trim( $new_instance['history_format'] );
254
+ $instance['number'] = (int) $new_instance['number'];
255
+
256
+ $instance['show_visitors'] = (bool) $new_instance['show_visitors'];
257
+ $instance['message'] = $mycred->allowed_tags( trim( $new_instance['message'] ) );
258
+
259
+ mycred_flush_widget_cache( 'mycred_widget_list' );
260
+ return $instance;
261
+ }
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Widget: User List
267
+ * @since 0.1
268
+ * @version 1.0
269
+ */
270
+ if ( !class_exists( 'myCRED_Widget_List' ) ) {
271
+ class myCRED_Widget_List extends WP_Widget {
272
+
273
+ /**
274
+ * Construct
275
+ */
276
+ function myCRED_Widget_List() {
277
+ // Basic details about our widget
278
+ $widget_ops = array(
279
+ 'classname' => 'widget-mycred-list',
280
+ 'description' => __( 'Show a list of users sorted by their myCRED balance', 'mycred' )
281
+ );
282
+ $this->WP_Widget( 'mycred_widget_list', __( 'myCRED List', 'mycred' ), $widget_ops );
283
+ $this->alt_option_name = 'mycred_widget_list';
284
+ }
285
+
286
+ /**
287
+ * Widget Output
288
+ */
289
+ function widget( $args, $instance ) {
290
+ ob_start();
291
+ extract( $args, EXTR_SKIP );
292
+
293
+ // Check if we want to show this to visitors
294
+ if ( !$instance['show_visitors'] && !is_user_logged_in() ) return;
295
+
296
+ // Get Rankings
297
+ $rankings = mycred_rankings( array( 'number' => $instance['number'], 'template' => $instance['text'] ) );
298
+ if ( $rankings->have_results() ) {
299
+ // Settings
300
+ $mycred = mycred_get_settings();
301
+
302
+ // Header
303
+ echo $before_widget;
304
+
305
+ // Title
306
+ if ( !empty( $title ) ) {
307
+ echo $before_title;
308
+ echo $mycred->template_tags_general( $instance['title'] );
309
+ echo $after_title;
310
+ }
311
+
312
+ // Result
313
+ $rankings->display();
314
+
315
+ // Footer
316
+ echo $after_widget;
317
+ }
318
+ }
319
+
320
+ /**
321
+ * Outputs the options form on admin
322
+ */
323
+ function form( $instance ) {
324
+ // Defaults
325
+ $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : __( 'Leaderboard', 'mycred' );
326
+ $number = isset( $instance['number'] ) ? abs( $instance['number'] ) : 5;
327
+ $show_visitors = isset( $instance['show_visitors'] ) ? 1 : 0;
328
+ $text = isset( $instance['text'] ) ? esc_attr( $instance['text'] ) : '#%rank% %user_profile_link% %cred_f%'; ?>
329
+
330
+ <p class="myCRED-widget-field">
331
+ <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title', 'mycred' ); ?>:</label>
332
+ <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
333
+ </p>
334
+ <p class="myCRED-widget-field">
335
+ <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_visitors' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_visitors' ) ); ?>" value="1"<?php checked( $show_visitors, 1 ); ?> class="checkbox" />
336
+ <label for="<?php echo esc_attr( $this->get_field_id( 'show_visitors' ) ); ?>"><?php _e( 'Visible to non-members', 'mycred' ); ?></label>
337
+ </p>
338
+ <p class="myCRED-widget-field">
339
+ <label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>"><?php _e( 'Number of users', 'mycred' ); ?>:</label>
340
+ <input id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="text" value="<?php echo $number; ?>" size="3" class="align-right" />
341
+ </p>
342
+ <p class="myCRED-widget-field">
343
+ <label for="<?php echo esc_attr( $this->get_field_id( 'text' ) ); ?>"><?php _e( 'Row layout', 'mycred' ); ?>:</label>
344
+ <textarea class="widefat" name="<?php echo esc_attr( $this->get_field_name( 'text' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'text' ) ); ?>" rows="3"><?php echo esc_attr( $text ); ?></textarea>
345
+ <small><?php _e( 'See the help tab for available template tags.', 'mycred' ); ?></small>
346
+ </p>
347
+ <?php
348
+ }
349
+
350
+ /**
351
+ * Processes widget options to be saved
352
+ */
353
+ function update( $new_instance, $old_instance ) {
354
+ $instance = $old_instance;
355
+ $instance['number'] = (int) $new_instance['number'];
356
+ $instance['title'] = trim( $new_instance['title'] );
357
+ $instance['show_visitors'] = $new_instance['show_visitors'];
358
+ $instance['text'] = $new_instance['text'];
359
+
360
+ mycred_flush_widget_cache( 'mycred_widget_list' );
361
+ return $instance;
362
+ }
363
+ }
364
+ }
365
+ /**
366
+ * Flush Widget Cache
367
+ * @since 0.1
368
+ * @version 1.0
369
+ */
370
+ function mycred_flush_widget_cache( $id = NULL )
371
+ {
372
+ if ( $id === NULL ) return;
373
+ wp_cache_delete( $id, 'widget' );
374
+ }
375
+ ?>
index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
lang/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
lang/mycred-en_US.mo ADDED
Binary file
lang/mycred-en_US.po ADDED
@@ -0,0 +1,3425 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: myCRED v1.0\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: 2013-04-22 22:52:02+0000\n"
7
+ "Last-Translator: unimatrix0 <gabriel.s@merovingi.com>\n"
8
+ "Language-Team: \n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
+ "X-Generator: CSL v1.x\n"
14
+ "X-Poedit-Language: English\n"
15
+ "X-Poedit-Country: UNITED STATES\n"
16
+ "X-Poedit-SourceCharset: utf-8\n"
17
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
18
+ "X-Poedit-Basepath: \n"
19
+ "X-Poedit-Bookmarks: \n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+ "X-Textdomain-Support: yes"
22
+
23
+ #: addons/buddypress/hooks/bp-galleries.php:75
24
+ #, php-format
25
+ #@ mycred
26
+ msgid "%plural% for New Gallery"
27
+ msgstr ""
28
+
29
+ #: addons/buddypress/hooks/bp-galleries.php:82
30
+ #: addons/buddypress/hooks/bp-groups.php:463
31
+ #: addons/buddypress/hooks/bp-groups.php:476
32
+ #: addons/buddypress/hooks/bp-groups.php:489
33
+ #: addons/buddypress/hooks/bp-groups.php:502
34
+ #: addons/buddypress/hooks/bp-groups.php:515
35
+ #: addons/buddypress/hooks/bp-groups.php:528
36
+ #: addons/buddypress/hooks/bp-groups.php:542
37
+ #: addons/buddypress/hooks/bp-groups.php:555
38
+ #: addons/buddypress/hooks/bp-groups.php:568
39
+ #: addons/buddypress/hooks/bp-groups.php:581
40
+ #: addons/buddypress/hooks/bp-links.php:185
41
+ #: addons/buddypress/hooks/bp-links.php:198
42
+ #: addons/buddypress/hooks/bp-links.php:211
43
+ #: addons/buddypress/hooks/bp-links.php:224
44
+ #: addons/buddypress/hooks/bp-press.php:113
45
+ #: addons/buddypress/hooks/bp-press.php:126
46
+ #: addons/buddypress/hooks/bp-profile.php:322
47
+ #: addons/buddypress/hooks/bp-profile.php:335
48
+ #: addons/buddypress/hooks/bp-profile.php:348
49
+ #: addons/buddypress/hooks/bp-profile.php:361
50
+ #: addons/buddypress/hooks/bp-profile.php:374
51
+ #: addons/buddypress/hooks/bp-profile.php:387
52
+ #: addons/buddypress/hooks/bp-profile.php:400
53
+ #: addons/buddypress/hooks/bp-profile.php:413
54
+ #: modules/mycred-module-hooks.php:279
55
+ #: modules/mycred-module-hooks.php:509
56
+ #: modules/mycred-module-hooks.php:522
57
+ #: modules/mycred-module-hooks.php:557
58
+ #: modules/mycred-module-hooks.php:779
59
+ #: modules/mycred-module-hooks.php:791
60
+ #: modules/mycred-module-hooks.php:803
61
+ #: modules/mycred-module-hooks.php:938
62
+ #: modules/mycred-module-hooks.php:959
63
+ #: modules/mycred-module-hooks.php:1093
64
+ #@ mycred
65
+ msgid "Log template"
66
+ msgstr ""
67
+
68
+ #: addons/buddypress/hooks/bp-groups.php:449
69
+ #, php-format
70
+ #@ mycred
71
+ msgid "%plural% for Creating Groups"
72
+ msgstr ""
73
+
74
+ #: addons/buddypress/hooks/bp-groups.php:457
75
+ #@ mycred
76
+ msgid "Number of members before awarding %_plural%"
77
+ msgstr ""
78
+
79
+ #: addons/buddypress/hooks/bp-groups.php:459
80
+ #@ mycred
81
+ msgid "Use zero to award %_plural% when group is created."
82
+ msgstr ""
83
+
84
+ #: addons/buddypress/hooks/bp-groups.php:469
85
+ #, php-format
86
+ #@ mycred
87
+ msgid "%plural% for Deleting Groups"
88
+ msgstr ""
89
+
90
+ #: addons/buddypress/hooks/bp-groups.php:482
91
+ #, php-format
92
+ #@ mycred
93
+ msgid "%plural% for New Forum Topic"
94
+ msgstr ""
95
+
96
+ #: addons/buddypress/hooks/bp-groups.php:495
97
+ #, php-format
98
+ #@ mycred
99
+ msgid "%plural% for Editing Forum Topic"
100
+ msgstr ""
101
+
102
+ #: addons/buddypress/hooks/bp-groups.php:508
103
+ #, php-format
104
+ #@ mycred
105
+ msgid "%plural% for New Forum Post"
106
+ msgstr ""
107
+
108
+ #: addons/buddypress/hooks/bp-groups.php:521
109
+ #, php-format
110
+ #@ mycred
111
+ msgid "%plural% for Editing Forum Post"
112
+ msgstr ""
113
+
114
+ #: addons/buddypress/hooks/bp-groups.php:534
115
+ #, php-format
116
+ #@ mycred
117
+ msgid "%plural% for Joining Groups"
118
+ msgstr ""
119
+
120
+ #: addons/buddypress/hooks/bp-groups.php:548
121
+ #, php-format
122
+ #@ mycred
123
+ msgid "%plural% for Leaving Groups"
124
+ msgstr ""
125
+
126
+ #: addons/buddypress/hooks/bp-groups.php:561
127
+ #, php-format
128
+ #@ mycred
129
+ msgid "%plural% for New Group Avatar"
130
+ msgstr ""
131
+
132
+ #: addons/buddypress/hooks/bp-groups.php:574
133
+ #, php-format
134
+ #@ mycred
135
+ msgid "%plural% for New Group Comment"
136
+ msgstr ""
137
+
138
+ #: addons/buddypress/hooks/bp-links.php:178
139
+ #, php-format
140
+ #@ mycred
141
+ msgid "%plural% for New Links"
142
+ msgstr ""
143
+
144
+ #: addons/buddypress/hooks/bp-links.php:191
145
+ #, php-format
146
+ #@ mycred
147
+ msgid "%plural% for Vote on Link"
148
+ msgstr ""
149
+
150
+ #: addons/buddypress/hooks/bp-links.php:204
151
+ #, php-format
152
+ #@ mycred
153
+ msgid "%plural% for Updating Links"
154
+ msgstr ""
155
+
156
+ #: addons/buddypress/hooks/bp-links.php:217
157
+ #, php-format
158
+ #@ mycred
159
+ msgid "%plural% for Deleting Links"
160
+ msgstr ""
161
+
162
+ #: addons/buddypress/hooks/bp-press.php:106
163
+ #, php-format
164
+ #@ mycred
165
+ msgid "%plural% for New Topic"
166
+ msgstr ""
167
+
168
+ #: addons/buddypress/hooks/bp-press.php:119
169
+ #, php-format
170
+ #@ mycred
171
+ msgid "%plural% for New Reply"
172
+ msgstr ""
173
+
174
+ #: addons/buddypress/hooks/bp-profile.php:315
175
+ #, php-format
176
+ #@ mycred
177
+ msgid "%plural% for Profile Updates"
178
+ msgstr ""
179
+
180
+ #: addons/buddypress/hooks/bp-profile.php:328
181
+ #, php-format
182
+ #@ mycred
183
+ msgid "%plural% for New Avatar"
184
+ msgstr ""
185
+
186
+ #: addons/buddypress/hooks/bp-profile.php:341
187
+ #, php-format
188
+ #@ mycred
189
+ msgid "%plural% for New Friendships"
190
+ msgstr ""
191
+
192
+ #: addons/buddypress/hooks/bp-profile.php:354
193
+ #, php-format
194
+ #@ mycred
195
+ msgid "%plural% for Leaving Friendship"
196
+ msgstr ""
197
+
198
+ #: addons/buddypress/hooks/bp-profile.php:367
199
+ #, php-format
200
+ #@ mycred
201
+ msgid "%plural% for New Comment"
202
+ msgstr ""
203
+
204
+ #: addons/buddypress/hooks/bp-profile.php:380
205
+ #, php-format
206
+ #@ mycred
207
+ msgid "%plural% for Deleting Comment"
208
+ msgstr ""
209
+
210
+ #: addons/buddypress/hooks/bp-profile.php:393
211
+ #, php-format
212
+ #@ mycred
213
+ msgid "%plural% for New Messages"
214
+ msgstr ""
215
+
216
+ #: addons/buddypress/hooks/bp-profile.php:406
217
+ #, php-format
218
+ #@ mycred
219
+ msgid "%plural% for Sending Gift"
220
+ msgstr ""
221
+
222
+ #: addons/buddypress/myCRED-addon-buddypress.php:49
223
+ #: modules/mycred-module-log.php:60
224
+ #: modules/mycred-module-log.php:419
225
+ #@ mycred
226
+ msgid "My History"
227
+ msgstr ""
228
+
229
+ #: addons/buddypress/myCRED-addon-buddypress.php:50
230
+ #, php-format
231
+ #@ mycred
232
+ msgid "%s's History"
233
+ msgstr ""
234
+
235
+ #: addons/buddypress/myCRED-addon-buddypress.php:370
236
+ #, php-format
237
+ #@ mycred
238
+ msgid "%singular% Balance"
239
+ msgstr ""
240
+
241
+ #: addons/buddypress/myCRED-addon-buddypress.php:200
242
+ #: modules/mycred-module-log.php:202
243
+ #@ mycred
244
+ msgid "All"
245
+ msgstr ""
246
+
247
+ #: addons/buddypress/myCRED-addon-buddypress.php:201
248
+ #: modules/mycred-module-log.php:203
249
+ #@ mycred
250
+ msgid "Today"
251
+ msgstr ""
252
+
253
+ #: addons/buddypress/myCRED-addon-buddypress.php:202
254
+ #: modules/mycred-module-log.php:204
255
+ #@ mycred
256
+ msgid "Yesterday"
257
+ msgstr ""
258
+
259
+ #: addons/buddypress/myCRED-addon-buddypress.php:203
260
+ #: modules/mycred-module-log.php:205
261
+ #@ mycred
262
+ msgid "This Week"
263
+ msgstr ""
264
+
265
+ #: addons/buddypress/myCRED-addon-buddypress.php:204
266
+ #: modules/mycred-module-log.php:206
267
+ #@ mycred
268
+ msgid "This Month"
269
+ msgstr ""
270
+
271
+ #: addons/buddypress/myCRED-addon-buddypress.php:328
272
+ #@ default
273
+ msgid "bbPress 2.0"
274
+ msgstr ""
275
+
276
+ #: addons/buddypress/myCRED-addon-buddypress.php:329
277
+ #@ mycred
278
+ msgid "Awards %_plural% for bbPress actions."
279
+ msgstr ""
280
+
281
+ #: addons/buddypress/myCRED-addon-buddypress.php:300
282
+ #@ default
283
+ msgid "BuddyPress: Groups"
284
+ msgstr ""
285
+
286
+ #: addons/buddypress/myCRED-addon-buddypress.php:301
287
+ #@ mycred
288
+ msgid "Awards %_plural% for group related actions. Use minus to deduct %_plural% or zero to disable a specific hook."
289
+ msgstr ""
290
+
291
+ #: addons/buddypress/myCRED-addon-buddypress.php:305
292
+ #@ default
293
+ msgid "BuddyPress: Members"
294
+ msgstr ""
295
+
296
+ #: addons/buddypress/myCRED-addon-buddypress.php:306
297
+ #@ mycred
298
+ msgid "Awards %_plural% for profile related actions."
299
+ msgstr ""
300
+
301
+ #: addons/buddypress/myCRED-addon-buddypress.php:312
302
+ #@ default
303
+ msgid "BuddyPress: Links"
304
+ msgstr ""
305
+
306
+ #: addons/buddypress/myCRED-addon-buddypress.php:313
307
+ #@ mycred
308
+ msgid "Awards %_plural% for link related actions."
309
+ msgstr ""
310
+
311
+ #: addons/buddypress/myCRED-addon-buddypress.php:320
312
+ #@ default
313
+ msgid "BuddyPress: Gallery Actions"
314
+ msgstr ""
315
+
316
+ #: addons/buddypress/myCRED-addon-buddypress.php:321
317
+ #@ mycred
318
+ msgid "Awards %_plural% for creating a new gallery either using BP Album+ or BP Gallery."
319
+ msgstr ""
320
+
321
+ #: addons/buddypress/myCRED-addon-buddypress.php:349
322
+ #: addons/buddypress/myCRED-addon-buddypress.php:356
323
+ #@ mycred
324
+ msgid "Do not show."
325
+ msgstr ""
326
+
327
+ #: addons/buddypress/myCRED-addon-buddypress.php:350
328
+ #@ mycred
329
+ msgid "Include in Profile Header."
330
+ msgstr ""
331
+
332
+ #: addons/buddypress/myCRED-addon-buddypress.php:351
333
+ #@ mycred
334
+ msgid "Include under the \"Profile\" tab"
335
+ msgstr ""
336
+
337
+ #: addons/buddypress/myCRED-addon-buddypress.php:352
338
+ #@ mycred
339
+ msgid "Include under the \"Profile\" tab and Profile Header."
340
+ msgstr ""
341
+
342
+ #: addons/buddypress/myCRED-addon-buddypress.php:357
343
+ #@ mycred
344
+ msgid "Show in Profile"
345
+ msgstr ""
346
+
347
+ #: addons/buddypress/myCRED-addon-buddypress.php:368
348
+ #@ mycred
349
+ msgid "BuddyPress"
350
+ msgstr ""
351
+
352
+ #: addons/buddypress/myCRED-addon-buddypress.php:386
353
+ #@ mycred
354
+ msgid "Members can view each others %_singular% balance."
355
+ msgstr ""
356
+
357
+ #: addons/buddypress/myCRED-addon-buddypress.php:391
358
+ #@ mycred
359
+ msgid "Template"
360
+ msgstr ""
361
+
362
+ #: addons/buddypress/myCRED-addon-buddypress.php:396
363
+ #: includes/mycred-widgets.php:149
364
+ #: modules/mycred-module-log.php:61
365
+ #, php-format
366
+ #@ mycred
367
+ msgid "%plural% History"
368
+ msgstr ""
369
+
370
+ #: addons/buddypress/myCRED-addon-buddypress.php:412
371
+ #@ mycred
372
+ msgid "Members can view each others %_plural% history."
373
+ msgstr ""
374
+
375
+ #: addons/buddypress/myCRED-addon-buddypress.php:417
376
+ #@ mycred
377
+ msgid "Menu Title"
378
+ msgstr ""
379
+
380
+ #: addons/buddypress/myCRED-addon-buddypress.php:419
381
+ #@ mycred
382
+ msgid "Title shown to me"
383
+ msgstr ""
384
+
385
+ #: addons/buddypress/myCRED-addon-buddypress.php:424
386
+ #, php-format
387
+ #@ mycred
388
+ msgid "Title shown to others. Use %s to show the first name."
389
+ msgstr ""
390
+
391
+ #: addons/buddypress/myCRED-addon-buddypress.php:429
392
+ #@ mycred
393
+ msgid "Menu Position"
394
+ msgstr ""
395
+
396
+ #: addons/buddypress/myCRED-addon-buddypress.php:431
397
+ #@ mycred
398
+ msgid "Current menu positions:"
399
+ msgstr ""
400
+
401
+ #: addons/import/myCRED-addon-import.php:451
402
+ #: includes/mycred-network.php:115
403
+ #: modules/mycred-module-addons.php:227
404
+ #: modules/mycred-module-general.php:35
405
+ #: modules/mycred-module-hooks.php:144
406
+ #: modules/mycred-module-log.php:321
407
+ #: modules/mycred-module-log.php:397
408
+ #@ mycred
409
+ #@ default
410
+ msgid "Access Denied"
411
+ msgstr ""
412
+
413
+ #: addons/buy-creds/gateways/netbilling.php:26
414
+ #: addons/buy-creds/gateways/paypal-standard.php:23
415
+ #: addons/buy-creds/gateways/skrill.php:28
416
+ #, php-format
417
+ #@ mycred
418
+ msgid "Purchase of myCRED %plural%"
419
+ msgstr ""
420
+
421
+ #: addons/buy-creds/gateways/netbilling.php:55
422
+ #: addons/buy-creds/gateways/netbilling.php:318
423
+ #@ mycred
424
+ msgid "You have tried too many times. Please contact support."
425
+ msgstr ""
426
+
427
+ #: addons/buy-creds/gateways/netbilling.php:62
428
+ #@ mycred
429
+ msgid "This payment gateway has not yet been setup! Exiting."
430
+ msgstr ""
431
+
432
+ #: addons/buy-creds/gateways/netbilling.php:81
433
+ #@ mycred
434
+ msgid "First name can not be empty"
435
+ msgstr ""
436
+
437
+ #: addons/buy-creds/gateways/netbilling.php:87
438
+ #@ mycred
439
+ msgid "Last name can not be empty"
440
+ msgstr ""
441
+
442
+ #: addons/buy-creds/gateways/netbilling.php:93
443
+ #@ mycred
444
+ msgid "Street can not be empty"
445
+ msgstr ""
446
+
447
+ #: addons/buy-creds/gateways/netbilling.php:99
448
+ #@ mycred
449
+ msgid "City can not be empty"
450
+ msgstr ""
451
+
452
+ #: addons/buy-creds/gateways/netbilling.php:105
453
+ #@ mycred
454
+ msgid "Country can not be empty"
455
+ msgstr ""
456
+
457
+ #: addons/buy-creds/gateways/netbilling.php:113
458
+ #@ mycred
459
+ msgid "State can not be empty"
460
+ msgstr ""
461
+
462
+ #: addons/buy-creds/gateways/netbilling.php:121
463
+ #@ mycred
464
+ msgid "Zip / Post Code can not be empty"
465
+ msgstr ""
466
+
467
+ #: addons/buy-creds/gateways/netbilling.php:127
468
+ #@ mycred
469
+ msgid "Email can not be empty"
470
+ msgstr ""
471
+
472
+ #: addons/buy-creds/gateways/netbilling.php:143
473
+ #@ mycred
474
+ msgid "Please enter your credit card number"
475
+ msgstr ""
476
+
477
+ #: addons/buy-creds/gateways/netbilling.php:149
478
+ #@ mycred
479
+ msgid "Card Expiration Month must be selected"
480
+ msgstr ""
481
+
482
+ #: addons/buy-creds/gateways/netbilling.php:155
483
+ #@ mycred
484
+ msgid "Card Expiration Year must be set"
485
+ msgstr ""
486
+
487
+ #: addons/buy-creds/gateways/netbilling.php:161
488
+ #@ mycred
489
+ msgid "Please enter the CVV2 code from the back of your card"
490
+ msgstr ""
491
+
492
+ #: addons/buy-creds/gateways/netbilling.php:170
493
+ #@ mycred
494
+ msgid "Account Routing number missing"
495
+ msgstr ""
496
+
497
+ #: addons/buy-creds/gateways/netbilling.php:176
498
+ #@ mycred
499
+ msgid "Account Number missing"
500
+ msgstr ""
501
+
502
+ #: addons/buy-creds/gateways/netbilling.php:184
503
+ #@ mycred
504
+ msgid "Incorrect Credit Card number"
505
+ msgstr ""
506
+
507
+ #: addons/buy-creds/gateways/netbilling.php:190
508
+ #@ mycred
509
+ msgid "The credit card entered is past its expiration date."
510
+ msgstr ""
511
+
512
+ #: addons/buy-creds/gateways/netbilling.php:196
513
+ #@ mycred
514
+ msgid "The CVV2 number entered is not valid."
515
+ msgstr ""
516
+
517
+ #: addons/buy-creds/gateways/netbilling.php:202
518
+ #@ mycred
519
+ msgid "The bank routing number entered is not valid."
520
+ msgstr ""
521
+
522
+ #: addons/buy-creds/gateways/netbilling.php:205
523
+ #@ mycred
524
+ msgid "The bank account number entered is not valid."
525
+ msgstr ""
526
+
527
+ #: addons/buy-creds/gateways/netbilling.php:312
528
+ #: addons/buy-creds/gateways/netbilling.php:333
529
+ #@ mycred
530
+ msgid "Invalid Address"
531
+ msgstr ""
532
+
533
+ #: addons/buy-creds/gateways/netbilling.php:315
534
+ #@ mycred
535
+ msgid "Invalid CVV2"
536
+ msgstr ""
537
+
538
+ #: addons/buy-creds/gateways/netbilling.php:321
539
+ #: addons/buy-creds/gateways/netbilling.php:324
540
+ #@ mycred
541
+ msgid "Please contact support."
542
+ msgstr ""
543
+
544
+ #: addons/buy-creds/gateways/netbilling.php:327
545
+ #@ mycred
546
+ msgid "Your email address is invalid."
547
+ msgstr ""
548
+
549
+ #: addons/buy-creds/gateways/netbilling.php:330
550
+ #@ mycred
551
+ msgid "Your information is invalid. Please correct"
552
+ msgstr ""
553
+
554
+ #: addons/buy-creds/gateways/netbilling.php:336
555
+ #@ mycred
556
+ msgid "Your card was declined. Please try again."
557
+ msgstr ""
558
+
559
+ #: addons/buy-creds/gateways/netbilling.php:340
560
+ #: addons/buy-creds/gateways/netbilling.php:358
561
+ #@ mycred
562
+ msgid "Duplicate transaction. Please contact support"
563
+ msgstr ""
564
+
565
+ #: addons/buy-creds/gateways/netbilling.php:343
566
+ #@ mycred
567
+ msgid "Your transaction was approved"
568
+ msgstr ""
569
+
570
+ #: addons/buy-creds/gateways/netbilling.php:350
571
+ #@ mycred
572
+ msgid " error: "
573
+ msgstr ""
574
+
575
+ #: addons/buy-creds/gateways/netbilling.php:423
576
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:132
577
+ #@ mycred
578
+ #@ default
579
+ msgid "NETbilling"
580
+ msgstr ""
581
+
582
+ #: addons/buy-creds/gateways/netbilling.php:430
583
+ #@ mycred
584
+ msgid "Debug"
585
+ msgstr ""
586
+
587
+ #: addons/buy-creds/gateways/netbilling.php:439
588
+ #@ mycred
589
+ msgid "Error"
590
+ msgstr ""
591
+
592
+ #: addons/buy-creds/gateways/netbilling.php:440
593
+ #@ mycred
594
+ msgid "The following error/s were found: "
595
+ msgstr ""
596
+
597
+ #: addons/buy-creds/gateways/netbilling.php:448
598
+ #@ mycred
599
+ msgid "Please update and try again."
600
+ msgstr ""
601
+
602
+ #: addons/buy-creds/gateways/netbilling.php:454
603
+ #@ mycred
604
+ msgid "Transaction Approved"
605
+ msgstr ""
606
+
607
+ #: addons/buy-creds/gateways/netbilling.php:455
608
+ #@ mycred
609
+ msgid "Your have successfully purchased "
610
+ msgstr ""
611
+
612
+ #: addons/buy-creds/gateways/netbilling.php:456
613
+ #: addons/buy-creds/gateways/netbilling.php:466
614
+ #@ mycred
615
+ msgid "Click here to continue"
616
+ msgstr ""
617
+
618
+ #: addons/buy-creds/gateways/netbilling.php:464
619
+ #@ mycred
620
+ msgid "Transaction Declined"
621
+ msgstr ""
622
+
623
+ #: addons/buy-creds/gateways/netbilling.php:465
624
+ #@ mycred
625
+ msgid "I am sorry but your transaction could not be completed due to the following "
626
+ msgstr ""
627
+
628
+ #: addons/buy-creds/gateways/netbilling.php:474
629
+ #@ mycred
630
+ msgid "Transaction Error"
631
+ msgstr ""
632
+
633
+ #: addons/buy-creds/gateways/netbilling.php:475
634
+ #@ mycred
635
+ msgid "NETbilling returned the following error: "
636
+ msgstr ""
637
+
638
+ #: addons/buy-creds/gateways/netbilling.php:476
639
+ #@ mycred
640
+ msgid "Please try again."
641
+ msgstr ""
642
+
643
+ #: addons/buy-creds/gateways/netbilling.php:480
644
+ #@ mycred
645
+ msgid "Purchase of"
646
+ msgstr ""
647
+
648
+ #: addons/buy-creds/gateways/netbilling.php:480
649
+ #@ mycred
650
+ msgid "for"
651
+ msgstr ""
652
+
653
+ #: addons/buy-creds/gateways/netbilling.php:481
654
+ #@ mycred
655
+ msgid "Fields marked * are required!"
656
+ msgstr ""
657
+
658
+ #: addons/buy-creds/gateways/netbilling.php:491
659
+ #@ mycred
660
+ msgid "Billing Details"
661
+ msgstr ""
662
+
663
+ #: abstracts/mycred-abstract-hook.php:134
664
+ #: addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php:506
665
+ #: addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php:529
666
+ #: addons/buy-creds/gateways/netbilling.php:514
667
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:220
668
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:241
669
+ #@ mycred
670
+ msgid "Select"
671
+ msgstr ""
672
+
673
+ #: addons/buy-creds/gateways/netbilling.php:560
674
+ #@ mycred
675
+ msgid "Month"
676
+ msgstr ""
677
+
678
+ #: addons/buy-creds/gateways/netbilling.php:566
679
+ #@ mycred
680
+ msgid "Year"
681
+ msgstr ""
682
+
683
+ #: addons/buy-creds/gateways/netbilling.php:608
684
+ #: addons/buy-creds/gateways/paypal-standard.php:321
685
+ #: addons/buy-creds/gateways/skrill.php:295
686
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:760
687
+ #@ mycred
688
+ msgid "Sandbox Mode"
689
+ msgstr ""
690
+
691
+ #: addons/buy-creds/gateways/netbilling.php:614
692
+ #@ mycred
693
+ msgid "Account ID"
694
+ msgstr ""
695
+
696
+ #: addons/buy-creds/gateways/netbilling.php:620
697
+ #@ mycred
698
+ msgid "Site Tag"
699
+ msgstr ""
700
+
701
+ #: addons/buy-creds/gateways/netbilling.php:626
702
+ #@ mycred
703
+ msgid "Dynamic IP Security Code"
704
+ msgstr ""
705
+
706
+ #: addons/buy-creds/gateways/netbilling.php:632
707
+ #: addons/buy-creds/gateways/paypal-standard.php:341
708
+ #: addons/buy-creds/gateways/skrill.php:321
709
+ #@ mycred
710
+ msgid "Item Name"
711
+ msgstr ""
712
+
713
+ #: addons/buy-creds/gateways/netbilling.php:638
714
+ #: addons/buy-creds/gateways/paypal-standard.php:348
715
+ #: addons/buy-creds/gateways/skrill.php:328
716
+ #, php-format
717
+ #@ mycred
718
+ msgid "%plural% Exchange Rate"
719
+ msgstr ""
720
+
721
+ #: addons/buy-creds/gateways/netbilling.php:644
722
+ #@ mycred
723
+ msgid "Allowed Attempts"
724
+ msgstr ""
725
+
726
+ #: addons/buy-creds/gateways/netbilling.php:648
727
+ #@ mycred
728
+ msgid "Maximum number of attempts allowed for purchases."
729
+ msgstr ""
730
+
731
+ #: addons/buy-creds/gateways/netbilling.php:651
732
+ #@ mycred
733
+ msgid "Advanced"
734
+ msgstr ""
735
+
736
+ #: addons/buy-creds/gateways/paypal-standard.php:226
737
+ #: addons/buy-creds/gateways/skrill.php:169
738
+ #@ mycred
739
+ msgid "Success"
740
+ msgstr ""
741
+
742
+ #: addons/buy-creds/gateways/paypal-standard.php:227
743
+ #: addons/buy-creds/gateways/skrill.php:170
744
+ #@ mycred
745
+ msgid "Thank you for your purchase"
746
+ msgstr ""
747
+
748
+ #: addons/buy-creds/gateways/paypal-standard.php:240
749
+ #: addons/buy-creds/gateways/skrill.php:183
750
+ #@ mycred
751
+ msgid "Please setup this gateway before attempting to make a purchaase!"
752
+ msgstr ""
753
+
754
+ #: addons/buy-creds/gateways/paypal-standard.php:299
755
+ #: addons/buy-creds/gateways/skrill.php:224
756
+ #@ mycred
757
+ msgid "Return to "
758
+ msgstr ""
759
+
760
+ #: addons/buy-creds/gateways/paypal-standard.php:304
761
+ #: addons/buy-creds/gateways/skrill.php:278
762
+ #@ mycred
763
+ msgid "Processing payment &hellip;"
764
+ msgstr ""
765
+
766
+ #: addons/buy-creds/gateways/paypal-standard.php:327
767
+ #: addons/buy-creds/gateways/skrill.php:301
768
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:751
769
+ #@ mycred
770
+ msgid "Currency"
771
+ msgstr ""
772
+
773
+ #: addons/buy-creds/gateways/paypal-standard.php:332
774
+ #: addons/buy-creds/gateways/skrill.php:358
775
+ #@ mycred
776
+ msgid "Important!"
777
+ msgstr ""
778
+
779
+ #: addons/buy-creds/gateways/paypal-standard.php:332
780
+ #@ mycred
781
+ msgid "Make sure you select a currency that your PayPal account supports. Otherwise transactions will not be approved until you login to your PayPal account and Accept each transaction!"
782
+ msgstr ""
783
+
784
+ #: addons/buy-creds/gateways/paypal-standard.php:335
785
+ #@ mycred
786
+ msgid "Account Email"
787
+ msgstr ""
788
+
789
+ #: addons/buy-creds/gateways/paypal-standard.php:345
790
+ #: addons/buy-creds/gateways/skrill.php:325
791
+ #@ mycred
792
+ msgid "Description of the item being purchased by the user."
793
+ msgstr ""
794
+
795
+ #: addons/buy-creds/gateways/paypal-standard.php:351
796
+ #: addons/buy-creds/gateways/skrill.php:331
797
+ #@ mycred
798
+ msgid "Your selected currency"
799
+ msgstr ""
800
+
801
+ #: addons/buy-creds/gateways/paypal-standard.php:354
802
+ #@ mycred
803
+ msgid "IPN Address"
804
+ msgstr ""
805
+
806
+ #: addons/buy-creds/gateways/skrill.php:261
807
+ #@ mycred
808
+ msgid "Product:"
809
+ msgstr ""
810
+
811
+ #: addons/buy-creds/gateways/skrill.php:270
812
+ #@ mycred
813
+ msgid "Gift to:"
814
+ msgstr ""
815
+
816
+ #: addons/buy-creds/gateways/skrill.php:271
817
+ #@ mycred
818
+ msgid "(author)"
819
+ msgstr ""
820
+
821
+ #: addons/buy-creds/gateways/skrill.php:298
822
+ #@ mycred
823
+ msgid "Remember to use your Test Merchant Account when Sandbox mode is active!"
824
+ msgstr ""
825
+
826
+ #: addons/buy-creds/gateways/skrill.php:308
827
+ #@ mycred
828
+ msgid "Merchant Account Email"
829
+ msgstr ""
830
+
831
+ #: addons/buy-creds/gateways/skrill.php:314
832
+ #@ mycred
833
+ msgid "Secret Word"
834
+ msgstr ""
835
+
836
+ #: addons/buy-creds/gateways/skrill.php:318
837
+ #@ mycred
838
+ msgid "You can set your secret word under \"Merchant Tools\" in your Skrill Account."
839
+ msgstr ""
840
+
841
+ #: addons/buy-creds/gateways/skrill.php:334
842
+ #@ mycred
843
+ msgid "Confirmation Email"
844
+ msgstr ""
845
+
846
+ #: addons/buy-creds/gateways/skrill.php:337
847
+ #@ mycred
848
+ msgid "Ask Skrill to send me a confirmation email for each successful purchase."
849
+ msgstr ""
850
+
851
+ #: addons/buy-creds/gateways/skrill.php:340
852
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:762
853
+ #@ mycred
854
+ msgid "Checkout Page"
855
+ msgstr ""
856
+
857
+ #: addons/buy-creds/gateways/skrill.php:343
858
+ #: addons/gateway/carts/mycred-woocommerce.php:67
859
+ #: addons/transfer/myCRED-addon-transfer.php:567
860
+ #: includes/mycred-widgets.php:175
861
+ #: includes/mycred-widgets.php:331
862
+ #@ mycred
863
+ msgid "Title"
864
+ msgstr ""
865
+
866
+ #: addons/buy-creds/gateways/skrill.php:345
867
+ #@ mycred
868
+ msgid "If left empty, your account email is used as title on the Skill Payment Page."
869
+ msgstr ""
870
+
871
+ #: addons/buy-creds/gateways/skrill.php:348
872
+ #@ mycred
873
+ msgid "Logo URL"
874
+ msgstr ""
875
+
876
+ #: addons/buy-creds/gateways/skrill.php:350
877
+ #@ mycred
878
+ msgid "The URL to the image you want to use on the top of the gateway. For best integration results we recommend you use logos with dimensions up to 200px in width and 50px in height."
879
+ msgstr ""
880
+
881
+ #: addons/buy-creds/gateways/skrill.php:353
882
+ #@ mycred
883
+ msgid "Confirmation Note"
884
+ msgstr ""
885
+
886
+ #: addons/buy-creds/gateways/skrill.php:355
887
+ #@ mycred
888
+ msgid "Optional text to show user once a transaction has been successfully completed. This text is shown by Skrill."
889
+ msgstr ""
890
+
891
+ #: addons/buy-creds/gateways/skrill.php:359
892
+ #@ mycred
893
+ msgid "By default all Skrill Merchant account accept payments via Bank Transfers. When a user selects this option, no %_plural% are awarded! You will need to manually award these once the bank transfer is completed."
894
+ msgstr ""
895
+
896
+ #: addons/buy-creds/gateways/skrill.php:360
897
+ #@ mycred
898
+ msgid "By default purchases made using Skrill will result in users having to signup for a Skrill account (if they do not have one already). You can contact <a href=\"mailto:\">Skrill Merchant Services</a> and request to disable this feature."
899
+ msgstr ""
900
+
901
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:47
902
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:48
903
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:49
904
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:304
905
+ #@ mycred
906
+ msgid "Payment Gateways"
907
+ msgstr ""
908
+
909
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:128
910
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:749
911
+ #@ default
912
+ #@ mycred
913
+ msgid "PayPal Payments Standard"
914
+ msgstr ""
915
+
916
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:136
917
+ #@ default
918
+ msgid "Skrill (Moneybookers)"
919
+ msgstr ""
920
+
921
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:158
922
+ #@ mycred
923
+ msgid "Please login to purchase %_plural%"
924
+ msgstr ""
925
+
926
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:172
927
+ #, php-format
928
+ #@ mycred
929
+ msgid "Gift purchase from %display_name%."
930
+ msgstr ""
931
+
932
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:185
933
+ #, php-format
934
+ #@ mycred
935
+ msgid "Minimum %plural%"
936
+ msgstr ""
937
+
938
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:189
939
+ #, php-format
940
+ #@ mycred
941
+ msgid "Minimum amount of %plural% a user must purchase. Will default to 1."
942
+ msgstr ""
943
+
944
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:205
945
+ #@ mycred
946
+ msgid "Thank You Page"
947
+ msgstr ""
948
+
949
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:208
950
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:229
951
+ #@ mycred
952
+ msgid "Custom URL"
953
+ msgstr ""
954
+
955
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:213
956
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:234
957
+ #@ mycred
958
+ msgid "Page"
959
+ msgstr ""
960
+
961
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:226
962
+ #@ mycred
963
+ msgid "Cancellation Page"
964
+ msgstr ""
965
+
966
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:247
967
+ #@ mycred
968
+ msgid "Gifting"
969
+ msgstr ""
970
+
971
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:249
972
+ #@ mycred
973
+ msgid "Allow users to buy %_plural% for other users."
974
+ msgstr ""
975
+
976
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:250
977
+ #@ mycred
978
+ msgid "Allow users to buy %_plural% for content authors."
979
+ msgstr ""
980
+
981
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:199
982
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:253
983
+ #: addons/gateway/carts/mycred-woocommerce.php:79
984
+ #: modules/mycred-module-hooks.php:399
985
+ #@ mycred
986
+ msgid "Log Template"
987
+ msgstr ""
988
+
989
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:255
990
+ #, php-format
991
+ #@ default
992
+ msgid "Available template tags: %singular%, %plural% and %display_name%"
993
+ msgstr ""
994
+
995
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:299
996
+ #: modules/mycred-module-general.php:42
997
+ #: modules/mycred-module-hooks.php:151
998
+ #@ mycred
999
+ msgid "Settings Updated"
1000
+ msgstr ""
1001
+
1002
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:305
1003
+ #, php-format
1004
+ #@ mycred
1005
+ msgid "Select the payment gateways you want to offer your users to buy %plural%."
1006
+ msgstr ""
1007
+
1008
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:328
1009
+ #: modules/mycred-module-hooks.php:169
1010
+ #@ mycred
1011
+ msgid "Enable"
1012
+ msgstr ""
1013
+
1014
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:346
1015
+ #@ mycred
1016
+ msgid "Update Gateway Settings"
1017
+ msgstr ""
1018
+
1019
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:402
1020
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:504
1021
+ #@ mycred
1022
+ msgid "No gateways installed."
1023
+ msgstr ""
1024
+
1025
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:403
1026
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:505
1027
+ #@ mycred
1028
+ msgid "Gateway does not exist."
1029
+ msgstr ""
1030
+
1031
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:439
1032
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:548
1033
+ #@ mycred
1034
+ msgid "Yourself"
1035
+ msgstr ""
1036
+
1037
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:506
1038
+ #@ mycred
1039
+ msgid "No active gateways found."
1040
+ msgstr ""
1041
+
1042
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:507
1043
+ #@ mycred
1044
+ msgid "The selected gateway is not active."
1045
+ msgstr ""
1046
+
1047
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:557
1048
+ #@ mycred
1049
+ msgid "Buy with"
1050
+ msgstr ""
1051
+
1052
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:561
1053
+ #: addons/sell-content/myCRED-addon-sell-content.php:42
1054
+ #@ mycred
1055
+ msgid "Buy Now"
1056
+ msgstr ""
1057
+
1058
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:595
1059
+ #@ mycred
1060
+ msgid "No users found"
1061
+ msgstr ""
1062
+
1063
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:605
1064
+ #@ mycred
1065
+ msgid "To"
1066
+ msgstr ""
1067
+
1068
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:622
1069
+ #@ mycred
1070
+ msgid "Select Amount"
1071
+ msgstr ""
1072
+
1073
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:644
1074
+ #@ mycred
1075
+ msgid "Amount"
1076
+ msgstr ""
1077
+
1078
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:646
1079
+ #@ mycred
1080
+ msgid "min."
1081
+ msgstr ""
1082
+
1083
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:654
1084
+ #@ mycred
1085
+ msgid "Select Gateway"
1086
+ msgstr ""
1087
+
1088
+ #: addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php:86
1089
+ #@ default
1090
+ msgid "This Payment Gateway has no settings"
1091
+ msgstr ""
1092
+
1093
+ #: addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php:235
1094
+ #@ mycred
1095
+ msgid "Go to "
1096
+ msgstr ""
1097
+
1098
+ #: addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php:256
1099
+ #@ mycred
1100
+ msgid "Payment Gateway Logo"
1101
+ msgstr ""
1102
+
1103
+ #: addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php:269
1104
+ #@ mycred
1105
+ msgid "Click here if you are not automatically redirected"
1106
+ msgstr ""
1107
+
1108
+ #: addons/buy-creds/abstracts/mycred-abstract-payment-gateway.php:857
1109
+ #@ mycred
1110
+ msgid "Outside US"
1111
+ msgstr ""
1112
+
1113
+ #: addons/import/myCRED-addon-import.php:33
1114
+ #: addons/import/myCRED-addon-import.php:34
1115
+ #: addons/import/myCRED-addon-import.php:35
1116
+ #: addons/import/myCRED-addon-import.php:459
1117
+ #: addons/import/myCRED-addon-import.php:735
1118
+ #@ mycred
1119
+ msgid "Import"
1120
+ msgstr ""
1121
+
1122
+ #: addons/import/myCRED-addon-import.php:84
1123
+ #: addons/import/myCRED-addon-import.php:741
1124
+ #@ default
1125
+ #@ mycred
1126
+ msgid "CSV File"
1127
+ msgstr ""
1128
+
1129
+ #: addons/import/myCRED-addon-import.php:85
1130
+ #@ mycred
1131
+ msgid "Import %_plural% from a comma-separated values (CSV) file."
1132
+ msgstr ""
1133
+
1134
+ #: addons/import/myCRED-addon-import.php:88
1135
+ #@ default
1136
+ msgid "CubePoints"
1137
+ msgstr ""
1138
+
1139
+ #: addons/import/myCRED-addon-import.php:89
1140
+ #@ mycred
1141
+ msgid "Import CubePoints"
1142
+ msgstr ""
1143
+
1144
+ #: addons/import/myCRED-addon-import.php:92
1145
+ #: addons/import/myCRED-addon-import.php:761
1146
+ #@ default
1147
+ #@ mycred
1148
+ msgid "Custom User Meta"
1149
+ msgstr ""
1150
+
1151
+ #: addons/import/myCRED-addon-import.php:93
1152
+ #@ mycred
1153
+ msgid "Import %_plural% from pre-existing custom user meta."
1154
+ msgstr ""
1155
+
1156
+ #: addons/import/myCRED-addon-import.php:211
1157
+ #@ mycred
1158
+ msgid "No file selected. Please select your CSV file and try again."
1159
+ msgstr ""
1160
+
1161
+ #: addons/import/myCRED-addon-import.php:226
1162
+ #@ mycred
1163
+ msgid "Failed to load file."
1164
+ msgstr ""
1165
+
1166
+ #: addons/import/myCRED-addon-import.php:247
1167
+ #: addons/import/myCRED-addon-import.php:416
1168
+ #, php-format
1169
+ #@ mycred
1170
+ msgid "Zero rows imported! Skipped %d entries. Import completed in %.2f seconds."
1171
+ msgstr ""
1172
+
1173
+ #: addons/import/myCRED-addon-import.php:256
1174
+ #@ mycred
1175
+ msgid "No valid records found in file. Make sure you have selected the correct way to identify users in the mycred_user column!"
1176
+ msgstr ""
1177
+
1178
+ #: addons/import/myCRED-addon-import.php:262
1179
+ #: addons/import/myCRED-addon-import.php:344
1180
+ #: addons/import/myCRED-addon-import.php:431
1181
+ #, php-format
1182
+ #@ mycred
1183
+ msgid "Import successfully completed. A total of %d users were effected and %d entires were skipped. Import completed in %.2f seconds."
1184
+ msgstr ""
1185
+
1186
+ #: addons/import/myCRED-addon-import.php:296
1187
+ #: addons/import/myCRED-addon-import.php:580
1188
+ #@ mycred
1189
+ msgid "No CubePoints found."
1190
+ msgstr ""
1191
+
1192
+ #: addons/import/myCRED-addon-import.php:329
1193
+ #, php-format
1194
+ #@ mycred
1195
+ msgid "Zero CubePoints imported! Skipped %d entries. Import completed in %.2f seconds."
1196
+ msgstr ""
1197
+
1198
+ #: addons/import/myCRED-addon-import.php:338
1199
+ #@ mycred
1200
+ msgid "No valid CubePoints founds."
1201
+ msgstr ""
1202
+
1203
+ #: addons/import/myCRED-addon-import.php:364
1204
+ #@ mycred
1205
+ msgid "Missing meta key. Not sure what I should be looking for."
1206
+ msgstr ""
1207
+
1208
+ #: addons/import/myCRED-addon-import.php:383
1209
+ #, php-format
1210
+ #@ mycred
1211
+ msgid "No rows found for the <strong>%s</strong> meta key."
1212
+ msgstr ""
1213
+
1214
+ #: addons/import/myCRED-addon-import.php:425
1215
+ #@ mycred
1216
+ msgid "No valid records founds."
1217
+ msgstr ""
1218
+
1219
+ #: addons/import/myCRED-addon-import.php:471
1220
+ #@ mycred
1221
+ msgid "Remember to de-activate this add-on once you are done importing!"
1222
+ msgstr ""
1223
+
1224
+ #: addons/import/myCRED-addon-import.php:503
1225
+ #@ mycred
1226
+ msgid "File"
1227
+ msgstr ""
1228
+
1229
+ #: addons/import/myCRED-addon-import.php:507
1230
+ #@ mycred
1231
+ msgid "Maximum allowed upload size is "
1232
+ msgstr ""
1233
+
1234
+ #: addons/import/myCRED-addon-import.php:507
1235
+ #@ mycred
1236
+ msgid "Required columns: <code>mycred_user</code> and <code>mycred_amount</code>. Optional columns: <code>mycred_log</code>."
1237
+ msgstr ""
1238
+
1239
+ #: addons/import/myCRED-addon-import.php:510
1240
+ #@ mycred
1241
+ msgid "Identify Users By"
1242
+ msgstr ""
1243
+
1244
+ #: addons/import/myCRED-addon-import.php:513
1245
+ #@ mycred
1246
+ msgid "ID"
1247
+ msgstr ""
1248
+
1249
+ #: addons/import/myCRED-addon-import.php:514
1250
+ #@ mycred
1251
+ msgid "Username"
1252
+ msgstr ""
1253
+
1254
+ #: addons/import/myCRED-addon-import.php:515
1255
+ #@ mycred
1256
+ msgid "Email"
1257
+ msgstr ""
1258
+
1259
+ #: addons/gateway/carts/mycred-woocommerce.php:92
1260
+ #: addons/import/myCRED-addon-import.php:518
1261
+ #: addons/import/myCRED-addon-import.php:587
1262
+ #: addons/import/myCRED-addon-import.php:651
1263
+ #@ mycred
1264
+ msgid "Exchange Rate"
1265
+ msgstr ""
1266
+
1267
+ #: addons/import/myCRED-addon-import.php:522
1268
+ #@ mycred
1269
+ msgid "How much is 1 imported value worth?"
1270
+ msgstr ""
1271
+
1272
+ #: addons/import/myCRED-addon-import.php:527
1273
+ #: addons/import/myCRED-addon-import.php:595
1274
+ #: addons/import/myCRED-addon-import.php:659
1275
+ #@ mycred
1276
+ msgid "Round"
1277
+ msgstr ""
1278
+
1279
+ #: addons/import/myCRED-addon-import.php:528
1280
+ #@ mycred
1281
+ msgid "None"
1282
+ msgstr ""
1283
+
1284
+ #: addons/import/myCRED-addon-import.php:529
1285
+ #: addons/import/myCRED-addon-import.php:597
1286
+ #: addons/import/myCRED-addon-import.php:661
1287
+ #@ mycred
1288
+ msgid "Round Up"
1289
+ msgstr ""
1290
+
1291
+ #: addons/import/myCRED-addon-import.php:530
1292
+ #: addons/import/myCRED-addon-import.php:598
1293
+ #: addons/import/myCRED-addon-import.php:662
1294
+ #@ mycred
1295
+ msgid "Round Down"
1296
+ msgstr ""
1297
+
1298
+ #: addons/import/myCRED-addon-import.php:535
1299
+ #: addons/import/myCRED-addon-import.php:603
1300
+ #: addons/import/myCRED-addon-import.php:667
1301
+ #@ mycred
1302
+ msgid "Precision"
1303
+ msgstr ""
1304
+
1305
+ #: addons/import/myCRED-addon-import.php:537
1306
+ #: addons/import/myCRED-addon-import.php:605
1307
+ #: addons/import/myCRED-addon-import.php:669
1308
+ #@ mycred
1309
+ msgid "The optional number of decimal digits to round to. Use zero to round the nearest whole number."
1310
+ msgstr ""
1311
+
1312
+ #: addons/import/myCRED-addon-import.php:542
1313
+ #: addons/import/myCRED-addon-import.php:616
1314
+ #: addons/import/myCRED-addon-import.php:674
1315
+ #@ mycred
1316
+ msgid "Log Entry"
1317
+ msgstr ""
1318
+
1319
+ #: addons/import/myCRED-addon-import.php:551
1320
+ #: addons/import/myCRED-addon-import.php:625
1321
+ #: addons/import/myCRED-addon-import.php:689
1322
+ #@ mycred
1323
+ msgid "Run Import"
1324
+ msgstr ""
1325
+
1326
+ #: addons/import/myCRED-addon-import.php:578
1327
+ #, php-format
1328
+ #@ mycred
1329
+ msgid "Found %d users with CubePoints."
1330
+ msgstr ""
1331
+
1332
+ #: addons/import/myCRED-addon-import.php:581
1333
+ #: addons/import/myCRED-addon-import.php:645
1334
+ #@ mycred
1335
+ msgid "Meta Key"
1336
+ msgstr ""
1337
+
1338
+ #: addons/import/myCRED-addon-import.php:596
1339
+ #: addons/import/myCRED-addon-import.php:660
1340
+ #@ mycred
1341
+ msgid "Do not round"
1342
+ msgstr ""
1343
+
1344
+ #: addons/import/myCRED-addon-import.php:610
1345
+ #: addons/import/myCRED-addon-import.php:681
1346
+ #@ mycred
1347
+ msgid "After Import"
1348
+ msgstr ""
1349
+
1350
+ #: addons/import/myCRED-addon-import.php:613
1351
+ #@ mycred
1352
+ msgid "Delete users CubePoints balance."
1353
+ msgstr ""
1354
+
1355
+ #: addons/import/myCRED-addon-import.php:684
1356
+ #@ mycred
1357
+ msgid "Delete the old value."
1358
+ msgstr ""
1359
+
1360
+ #: addons/sell-content/myCRED-addon-sell-content.php:35
1361
+ #, php-format
1362
+ #@ mycred
1363
+ msgid "<p>Buy this %post_type% for only %price% %buy_button%</p>"
1364
+ msgstr ""
1365
+
1366
+ #: addons/sell-content/myCRED-addon-sell-content.php:36
1367
+ #, php-format
1368
+ #@ mycred
1369
+ msgid "<p><a href=\"%login_url_here%\">Login</a> to buy access to this %post_type%.</p>"
1370
+ msgstr ""
1371
+
1372
+ #: addons/sell-content/myCRED-addon-sell-content.php:37
1373
+ #, php-format
1374
+ #@ mycred
1375
+ msgid ""
1376
+ "<p>You do not have enough %plural% to buy access to this %post_type%.</p>\n"
1377
+ "<p><strong>Price</strong>: %price%</p>"
1378
+ msgstr ""
1379
+
1380
+ #: addons/sell-content/myCRED-addon-sell-content.php:46
1381
+ #, php-format
1382
+ #@ mycred
1383
+ msgid "Purchase of %link_with_title%"
1384
+ msgstr ""
1385
+
1386
+ #: addons/sell-content/myCRED-addon-sell-content.php:47
1387
+ #, php-format
1388
+ #@ mycred
1389
+ msgid "Sale of %link_with_title%"
1390
+ msgstr ""
1391
+
1392
+ #: addons/sell-content/myCRED-addon-sell-content.php:170
1393
+ #@ default
1394
+ msgid "No Payout. Just charge."
1395
+ msgstr ""
1396
+
1397
+ #: addons/sell-content/myCRED-addon-sell-content.php:171
1398
+ #@ default
1399
+ msgid "Pay Content Author."
1400
+ msgstr ""
1401
+
1402
+ #: addons/sell-content/myCRED-addon-sell-content.php:175
1403
+ #: addons/sell-content/myCRED-addon-sell-content.php:687
1404
+ #@ mycred
1405
+ msgid "Sell Content"
1406
+ msgstr ""
1407
+
1408
+ #: addons/sell-content/myCRED-addon-sell-content.php:177
1409
+ #@ mycred
1410
+ msgid "Post Types"
1411
+ msgstr ""
1412
+
1413
+ #: addons/sell-content/myCRED-addon-sell-content.php:181
1414
+ #@ mycred
1415
+ msgid "Comma separated list of post types that can be sold."
1416
+ msgstr ""
1417
+
1418
+ #: addons/sell-content/myCRED-addon-sell-content.php:184
1419
+ #@ mycred
1420
+ msgid "Payments"
1421
+ msgstr ""
1422
+
1423
+ #: addons/sell-content/myCRED-addon-sell-content.php:198
1424
+ #@ mycred
1425
+ msgid "Percentage to pay Author"
1426
+ msgstr ""
1427
+
1428
+ #: addons/sell-content/myCRED-addon-sell-content.php:200
1429
+ #@ mycred
1430
+ msgid "Percentage of the price to pay the author. Can not be zero and is ignored if authors are not paid."
1431
+ msgstr ""
1432
+
1433
+ #: addons/sell-content/myCRED-addon-sell-content.php:208
1434
+ #: addons/sell-content/myCRED-addon-sell-content.php:690
1435
+ #@ mycred
1436
+ msgid "Defaults"
1437
+ msgstr ""
1438
+
1439
+ #: addons/sell-content/myCRED-addon-sell-content.php:211
1440
+ #: addons/sell-content/myCRED-addon-sell-content.php:393
1441
+ #@ mycred
1442
+ msgid "Price"
1443
+ msgstr ""
1444
+
1445
+ #: addons/sell-content/myCRED-addon-sell-content.php:216
1446
+ #@ mycred
1447
+ msgid "Allow authors to change price."
1448
+ msgstr ""
1449
+
1450
+ #: addons/sell-content/myCRED-addon-sell-content.php:220
1451
+ #: addons/sell-content/myCRED-addon-sell-content.php:397
1452
+ #@ mycred
1453
+ msgid "Button Label"
1454
+ msgstr ""
1455
+
1456
+ #: addons/sell-content/myCRED-addon-sell-content.php:225
1457
+ #@ mycred
1458
+ msgid "Allow authors to change button label."
1459
+ msgstr ""
1460
+
1461
+ #: addons/sell-content/myCRED-addon-sell-content.php:228
1462
+ #@ mycred
1463
+ msgid "Sale Template for non members"
1464
+ msgstr ""
1465
+
1466
+ #: addons/sell-content/myCRED-addon-sell-content.php:232
1467
+ #, php-format
1468
+ #@ mycred
1469
+ msgid "Do <strong>not</strong> use the %buy_button% in this template as a user must be logged in to buy content!"
1470
+ msgstr ""
1471
+
1472
+ #: addons/sell-content/myCRED-addon-sell-content.php:233
1473
+ #, php-format
1474
+ #@ mycred
1475
+ msgid "Available template tags are: %singular%, %plural%, %post_title%, %post_url%, %link_with_title%, %price%"
1476
+ msgstr ""
1477
+
1478
+ #: addons/sell-content/myCRED-addon-sell-content.php:236
1479
+ #@ mycred
1480
+ msgid "Sale Template for members"
1481
+ msgstr ""
1482
+
1483
+ #: addons/sell-content/myCRED-addon-sell-content.php:240
1484
+ #: addons/sell-content/myCRED-addon-sell-content.php:248
1485
+ #, php-format
1486
+ #@ mycred
1487
+ msgid "Your template must contain the %buy_button% tag for purchases to work!"
1488
+ msgstr ""
1489
+
1490
+ #: addons/sell-content/myCRED-addon-sell-content.php:241
1491
+ #: addons/sell-content/myCRED-addon-sell-content.php:249
1492
+ #, php-format
1493
+ #@ mycred
1494
+ msgid "Available template tags are: %singular%, %plural%, %post_title%, %post_url%, %link_with_title%, %buy_button%, %price%"
1495
+ msgstr ""
1496
+
1497
+ #: addons/sell-content/myCRED-addon-sell-content.php:244
1498
+ #@ mycred
1499
+ msgid "Insufficient funds template"
1500
+ msgstr ""
1501
+
1502
+ #: addons/sell-content/myCRED-addon-sell-content.php:252
1503
+ #@ mycred
1504
+ msgid "Log template for Purchases"
1505
+ msgstr ""
1506
+
1507
+ #: addons/sell-content/myCRED-addon-sell-content.php:256
1508
+ #: addons/sell-content/myCRED-addon-sell-content.php:263
1509
+ #, php-format
1510
+ #@ mycred
1511
+ msgid "Available template tags are: %singular%, %plural%, %post_title%, %post_url% or %link_with_title%"
1512
+ msgstr ""
1513
+
1514
+ #: addons/sell-content/myCRED-addon-sell-content.php:259
1515
+ #@ mycred
1516
+ msgid "Log template for Sales"
1517
+ msgstr ""
1518
+
1519
+ #: addons/sell-content/myCRED-addon-sell-content.php:313
1520
+ #@ mycred
1521
+ msgid "myCRED Sell"
1522
+ msgstr ""
1523
+
1524
+ #: addons/sell-content/myCRED-addon-sell-content.php:355
1525
+ #@ mycred
1526
+ msgid "<strong>my</strong>CRED Sell Content needs to be setup before you can use this feature."
1527
+ msgstr ""
1528
+
1529
+ #: addons/sell-content/myCRED-addon-sell-content.php:358
1530
+ #@ mycred
1531
+ msgid "Setup add-on"
1532
+ msgstr ""
1533
+
1534
+ #: addons/sell-content/myCRED-addon-sell-content.php:358
1535
+ #@ mycred
1536
+ msgid "Lets do it"
1537
+ msgstr ""
1538
+
1539
+ #: addons/sell-content/myCRED-addon-sell-content.php:387
1540
+ #@ mycred
1541
+ msgid "Enable sale of this "
1542
+ msgstr ""
1543
+
1544
+ #: addons/sell-content/myCRED-addon-sell-content.php:597
1545
+ #@ mycred
1546
+ msgid "Thank you for your purchase!"
1547
+ msgstr ""
1548
+
1549
+ #: addons/transfer/myCRED-addon-transfer.php:36
1550
+ #, php-format
1551
+ #@ mycred
1552
+ msgid "You do not have enough %plural% to send."
1553
+ msgstr ""
1554
+
1555
+ #: addons/transfer/myCRED-addon-transfer.php:37
1556
+ #, php-format
1557
+ #@ mycred
1558
+ msgid "You have exceeded your %limit% transfer limit."
1559
+ msgstr ""
1560
+
1561
+ #: addons/transfer/myCRED-addon-transfer.php:43
1562
+ #: addons/transfer/myCRED-addon-transfer.php:464
1563
+ #@ mycred
1564
+ msgid "Transfer"
1565
+ msgstr ""
1566
+
1567
+ #: addons/transfer/myCRED-addon-transfer.php:134
1568
+ #@ mycred
1569
+ msgid "Transaction completed."
1570
+ msgstr ""
1571
+
1572
+ #: addons/transfer/myCRED-addon-transfer.php:135
1573
+ #@ mycred
1574
+ msgid "Security token could not be verified. Please contact your site administrator!"
1575
+ msgstr ""
1576
+
1577
+ #: addons/transfer/myCRED-addon-transfer.php:136
1578
+ #@ mycred
1579
+ msgid "Communications error. Please try again later."
1580
+ msgstr ""
1581
+
1582
+ #: addons/transfer/myCRED-addon-transfer.php:137
1583
+ #@ mycred
1584
+ msgid "Recipient not found. Please try again."
1585
+ msgstr ""
1586
+
1587
+ #: addons/transfer/myCRED-addon-transfer.php:138
1588
+ #@ mycred
1589
+ msgid "Transaction declined by recipient."
1590
+ msgstr ""
1591
+
1592
+ #: addons/transfer/myCRED-addon-transfer.php:139
1593
+ #@ mycred
1594
+ msgid "Incorrect amount. Please try again."
1595
+ msgstr ""
1596
+
1597
+ #: addons/transfer/myCRED-addon-transfer.php:140
1598
+ #@ mycred
1599
+ msgid "This myCRED Add-on has not yet been setup! No transfers are allowed until this has been done!"
1600
+ msgstr ""
1601
+
1602
+ #: addons/transfer/myCRED-addon-transfer.php:141
1603
+ #@ mycred
1604
+ msgid "Insufficient funds. Please enter a lower amount."
1605
+ msgstr ""
1606
+
1607
+ #: addons/transfer/myCRED-addon-transfer.php:142
1608
+ #@ mycred
1609
+ msgid "Transfer Limit exceeded."
1610
+ msgstr ""
1611
+
1612
+ #: addons/transfer/myCRED-addon-transfer.php:143
1613
+ #@ mycred
1614
+ msgid "The request amount will exceed your transfer limit. Please try again with a lower amount!"
1615
+ msgstr ""
1616
+
1617
+ #: addons/transfer/myCRED-addon-transfer.php:168
1618
+ #@ mycred
1619
+ msgid "No limits."
1620
+ msgstr ""
1621
+
1622
+ #: addons/transfer/myCRED-addon-transfer.php:169
1623
+ #@ mycred
1624
+ msgid "Impose daily limit."
1625
+ msgstr ""
1626
+
1627
+ #: addons/transfer/myCRED-addon-transfer.php:170
1628
+ #@ mycred
1629
+ msgid "Impose weekly limit."
1630
+ msgstr ""
1631
+
1632
+ #: addons/transfer/myCRED-addon-transfer.php:174
1633
+ #@ mycred
1634
+ msgid "Transfer CREDs"
1635
+ msgstr ""
1636
+
1637
+ #: addons/transfer/myCRED-addon-transfer.php:176
1638
+ #@ mycred
1639
+ msgid "Log template for sending"
1640
+ msgstr ""
1641
+
1642
+ #: addons/transfer/myCRED-addon-transfer.php:183
1643
+ #@ mycred
1644
+ msgid "Log template for receiving"
1645
+ msgstr ""
1646
+
1647
+ #: addons/transfer/myCRED-addon-transfer.php:190
1648
+ #@ mycred
1649
+ msgid "Limits"
1650
+ msgstr ""
1651
+
1652
+ #: addons/transfer/myCRED-addon-transfer.php:207
1653
+ #@ mycred
1654
+ msgid "Maximum Amount"
1655
+ msgstr ""
1656
+
1657
+ #: addons/transfer/myCRED-addon-transfer.php:209
1658
+ #@ mycred
1659
+ msgid "This amount is ignored if no limits are imposed."
1660
+ msgstr ""
1661
+
1662
+ #: addons/transfer/myCRED-addon-transfer.php:212
1663
+ #@ mycred
1664
+ msgid "Form Templates"
1665
+ msgstr ""
1666
+
1667
+ #: addons/transfer/myCRED-addon-transfer.php:215
1668
+ #@ mycred
1669
+ msgid "Not logged in Template"
1670
+ msgstr ""
1671
+
1672
+ #: addons/transfer/myCRED-addon-transfer.php:221
1673
+ #@ mycred
1674
+ msgid "Balance Template"
1675
+ msgstr ""
1676
+
1677
+ #: addons/transfer/myCRED-addon-transfer.php:227
1678
+ #@ mycred
1679
+ msgid "Limit Template"
1680
+ msgstr ""
1681
+
1682
+ #: addons/transfer/myCRED-addon-transfer.php:233
1683
+ #@ mycred
1684
+ msgid "Button Template"
1685
+ msgstr ""
1686
+
1687
+ #: addons/transfer/myCRED-addon-transfer.php:238
1688
+ #@ mycred
1689
+ msgid "Error Messages"
1690
+ msgstr ""
1691
+
1692
+ #: addons/transfer/myCRED-addon-transfer.php:241
1693
+ #@ mycred
1694
+ msgid "Balance to low to send."
1695
+ msgstr ""
1696
+
1697
+ #: addons/transfer/myCRED-addon-transfer.php:247
1698
+ #@ mycred
1699
+ msgid "Transfer Limit Reached."
1700
+ msgstr ""
1701
+
1702
+ #: addons/transfer/myCRED-addon-transfer.php:493
1703
+ #@ mycred
1704
+ msgid "Allow cred transfers between users."
1705
+ msgstr ""
1706
+
1707
+ #: addons/transfer/myCRED-addon-transfer.php:495
1708
+ #@ mycred
1709
+ msgid "myCRED Transfer"
1710
+ msgstr ""
1711
+
1712
+ #: addons/transfer/myCRED-addon-transfer.php:561
1713
+ #, php-format
1714
+ #@ mycred
1715
+ msgid "Transfer %plural%"
1716
+ msgstr ""
1717
+
1718
+ #: addons/transfer/myCRED-addon-transfer.php:572
1719
+ #@ mycred
1720
+ msgid "Show users balance"
1721
+ msgstr ""
1722
+
1723
+ #: addons/transfer/myCRED-addon-transfer.php:576
1724
+ #@ mycred
1725
+ msgid "Show users limit"
1726
+ msgstr ""
1727
+
1728
+ #: addons/transfer/myCRED-addon-transfer.php:689
1729
+ #@ mycred
1730
+ msgid "To:"
1731
+ msgstr ""
1732
+
1733
+ #: addons/transfer/myCRED-addon-transfer.php:693
1734
+ #@ mycred
1735
+ msgid "Amount:"
1736
+ msgstr ""
1737
+
1738
+ #: includes/mycred-admin.php:77
1739
+ #@ mycred
1740
+ msgid "Excluded"
1741
+ msgstr ""
1742
+
1743
+ #: includes/mycred-admin.php:84
1744
+ #@ mycred
1745
+ msgid "History"
1746
+ msgstr ""
1747
+
1748
+ #: includes/mycred-admin.php:86
1749
+ #@ mycred
1750
+ msgid "Adjust"
1751
+ msgstr ""
1752
+
1753
+ #: includes/mycred-admin.php:137
1754
+ #, php-format
1755
+ #@ mycred
1756
+ msgid "My current %singular% balance"
1757
+ msgstr ""
1758
+
1759
+ #: includes/mycred-admin.php:161
1760
+ #@ mycred
1761
+ msgid "Adjust Users Balance"
1762
+ msgstr ""
1763
+
1764
+ #: includes/mycred-admin.php:171
1765
+ #@ mycred
1766
+ msgid "Log description for adjustment"
1767
+ msgstr ""
1768
+
1769
+ #: includes/mycred-admin.php:171
1770
+ #@ mycred
1771
+ msgid "required"
1772
+ msgstr ""
1773
+
1774
+ #: includes/mycred-admin.php:172
1775
+ #@ mycred
1776
+ msgid "Update"
1777
+ msgstr ""
1778
+
1779
+ #: includes/mycred-admin.php:177
1780
+ #@ mycred
1781
+ msgid "Users Current Balance"
1782
+ msgstr ""
1783
+
1784
+ #: includes/mycred-install.php:50
1785
+ #@ mycred
1786
+ msgid "Sorry but your WordPress installation does not reach the minimum requirements for running myCRED. The following errors were given:\n"
1787
+ msgstr ""
1788
+
1789
+ #: includes/mycred-install.php:219
1790
+ #@ mycred
1791
+ msgid "CRED needs your attention."
1792
+ msgstr ""
1793
+
1794
+ #: includes/mycred-install.php:219
1795
+ #@ mycred
1796
+ msgid "Run Setup"
1797
+ msgstr ""
1798
+
1799
+ #: includes/mycred-install.php:231
1800
+ #: includes/mycred-install.php:232
1801
+ #@ mycred
1802
+ msgid "myCRED Setup"
1803
+ msgstr ""
1804
+
1805
+ #: includes/mycred-install.php:369
1806
+ #: mycred.php:97
1807
+ #@ mycred
1808
+ msgid "Setup"
1809
+ msgstr ""
1810
+
1811
+ #: includes/mycred-install.php:395
1812
+ #@ mycred
1813
+ msgid "Begin Setup"
1814
+ msgstr ""
1815
+
1816
+ #: includes/mycred-install.php:453
1817
+ #@ mycred
1818
+ msgid "Format"
1819
+ msgstr ""
1820
+
1821
+ #: includes/mycred-install.php:456
1822
+ #@ mycred
1823
+ msgid "Separators"
1824
+ msgstr ""
1825
+
1826
+ #: includes/mycred-install.php:466
1827
+ #@ mycred
1828
+ msgid "Decimals"
1829
+ msgstr ""
1830
+
1831
+ #: includes/mycred-install.php:468
1832
+ #@ mycred
1833
+ msgid "Use zero for no decimals."
1834
+ msgstr ""
1835
+
1836
+ #: includes/mycred-install.php:497
1837
+ #@ default
1838
+ msgid "Cancel Setup"
1839
+ msgstr ""
1840
+
1841
+ #: includes/mycred-install.php:497
1842
+ #@ default
1843
+ msgid "Cancel"
1844
+ msgstr ""
1845
+
1846
+ #: includes/mycred-install.php:497
1847
+ #: includes/mycred-install.php:576
1848
+ #@ mycred
1849
+ msgid "Next"
1850
+ msgstr ""
1851
+
1852
+ #: includes/mycred-install.php:474
1853
+ #: modules/mycred-module-general.php:58
1854
+ #@ mycred
1855
+ msgid "Name (Singular)"
1856
+ msgstr ""
1857
+
1858
+ #: includes/mycred-install.php:478
1859
+ #: modules/mycred-module-general.php:63
1860
+ #@ mycred
1861
+ msgid "Name (Plural)"
1862
+ msgstr ""
1863
+
1864
+ #: includes/mycred-install.php:484
1865
+ #: modules/mycred-module-general.php:74
1866
+ #@ mycred
1867
+ msgid "Prefix"
1868
+ msgstr ""
1869
+
1870
+ #: includes/mycred-install.php:492
1871
+ #: modules/mycred-module-general.php:82
1872
+ #@ mycred
1873
+ msgid "Suffix"
1874
+ msgstr ""
1875
+
1876
+ #: includes/mycred-install.php:525
1877
+ #: modules/mycred-module-general.php:90
1878
+ #@ mycred
1879
+ msgid "Security"
1880
+ msgstr ""
1881
+
1882
+ #: includes/mycred-install.php:528
1883
+ #@ mycred
1884
+ msgid "Edit Settings Capability"
1885
+ msgstr ""
1886
+
1887
+ #: includes/mycred-install.php:536
1888
+ #: modules/mycred-module-general.php:103
1889
+ #@ mycred
1890
+ msgid "Excludes"
1891
+ msgstr ""
1892
+
1893
+ #: includes/mycred-install.php:540
1894
+ #: modules/mycred-module-general.php:107
1895
+ #@ mycred
1896
+ msgid "Exclude those who can \"Edit Settings\"."
1897
+ msgstr ""
1898
+
1899
+ #: includes/mycred-install.php:547
1900
+ #: modules/mycred-module-general.php:115
1901
+ #@ mycred
1902
+ msgid "Exclude the following user IDs:"
1903
+ msgstr ""
1904
+
1905
+ #: includes/mycred-install.php:551
1906
+ #: modules/mycred-module-general.php:120
1907
+ #@ mycred
1908
+ msgid "Rankings"
1909
+ msgstr ""
1910
+
1911
+ #: includes/mycred-install.php:555
1912
+ #: modules/mycred-module-general.php:124
1913
+ #@ mycred
1914
+ msgid "Update rankings each time a users balance changes."
1915
+ msgstr ""
1916
+
1917
+ #: includes/mycred-install.php:559
1918
+ #: modules/mycred-module-general.php:128
1919
+ #@ mycred
1920
+ msgid "Update rankings once a day."
1921
+ msgstr ""
1922
+
1923
+ #: includes/mycred-install.php:563
1924
+ #: modules/mycred-module-general.php:132
1925
+ #@ mycred
1926
+ msgid "Update rankings once a week."
1927
+ msgstr ""
1928
+
1929
+ #: includes/mycred-install.php:567
1930
+ #: modules/mycred-module-general.php:136
1931
+ #@ mycred
1932
+ msgid "Update rankings on a specific date."
1933
+ msgstr ""
1934
+
1935
+ #: includes/mycred-install.php:571
1936
+ #: modules/mycred-module-general.php:140
1937
+ #: modules/mycred-module-log.php:701
1938
+ #@ mycred
1939
+ msgid "Date"
1940
+ msgstr ""
1941
+
1942
+ #: includes/mycred-network.php:148
1943
+ #@ mycred
1944
+ msgid "No"
1945
+ msgstr ""
1946
+
1947
+ #: includes/mycred-network.php:144
1948
+ #@ mycred
1949
+ msgid "Yes"
1950
+ msgstr ""
1951
+
1952
+ #: includes/mycred-install.php:595
1953
+ #@ mycred
1954
+ msgid "Ready"
1955
+ msgstr ""
1956
+
1957
+ #: includes/mycred-install.php:597
1958
+ #@ mycred
1959
+ msgid "Install & Run"
1960
+ msgstr ""
1961
+
1962
+ #: includes/mycred-widgets.php:18
1963
+ #@ mycred
1964
+ msgid "Show the current users myCRED balance"
1965
+ msgstr ""
1966
+
1967
+ #: includes/mycred-widgets.php:20
1968
+ #@ mycred
1969
+ msgid "myCRED Balance"
1970
+ msgstr ""
1971
+
1972
+ #: includes/mycred-widgets.php:145
1973
+ #@ mycred
1974
+ msgid "My Balance"
1975
+ msgstr ""
1976
+
1977
+ #: includes/mycred-widgets.php:156
1978
+ #, php-format
1979
+ #@ mycred
1980
+ msgid "<a href=\"%login_url_here%\">Login</a> to view your balance."
1981
+ msgstr ""
1982
+
1983
+ #: includes/mycred-widgets.php:180
1984
+ #@ mycred
1985
+ msgid "Layout"
1986
+ msgstr ""
1987
+
1988
+ #: includes/mycred-widgets.php:187
1989
+ #@ mycred
1990
+ msgid "Include users ranking"
1991
+ msgstr ""
1992
+
1993
+ #: includes/mycred-widgets.php:189
1994
+ #@ mycred
1995
+ msgid "Rank format"
1996
+ msgstr ""
1997
+
1998
+ #: includes/mycred-widgets.php:197
1999
+ #@ mycred
2000
+ msgid "Include history"
2001
+ msgstr ""
2002
+
2003
+ #: includes/mycred-widgets.php:201
2004
+ #@ mycred
2005
+ msgid "Number of entires"
2006
+ msgstr ""
2007
+
2008
+ #: includes/mycred-widgets.php:203
2009
+ #: includes/mycred-widgets.php:343
2010
+ #@ mycred
2011
+ msgid "Row layout"
2012
+ msgstr ""
2013
+
2014
+ #: includes/mycred-widgets.php:211
2015
+ #@ mycred
2016
+ msgid "Show message when not logged in"
2017
+ msgstr ""
2018
+
2019
+ #: includes/mycred-widgets.php:213
2020
+ #@ mycred
2021
+ msgid "Message"
2022
+ msgstr ""
2023
+
2024
+ #: includes/mycred-widgets.php:280
2025
+ #@ mycred
2026
+ msgid "Show a list of users sorted by their myCRED balance"
2027
+ msgstr ""
2028
+
2029
+ #: includes/mycred-widgets.php:282
2030
+ #@ mycred
2031
+ msgid "myCRED List"
2032
+ msgstr ""
2033
+
2034
+ #: includes/mycred-widgets.php:325
2035
+ #@ mycred
2036
+ msgid "Leaderboard"
2037
+ msgstr ""
2038
+
2039
+ #: includes/mycred-widgets.php:336
2040
+ #@ mycred
2041
+ msgid "Visible to non-members"
2042
+ msgstr ""
2043
+
2044
+ #: includes/mycred-widgets.php:339
2045
+ #@ mycred
2046
+ msgid "Number of users"
2047
+ msgstr ""
2048
+
2049
+ #: modules/mycred-module-help.php:179
2050
+ #@ mycred
2051
+ msgid "Users display name."
2052
+ msgstr ""
2053
+
2054
+ #: modules/mycred-module-help.php:180
2055
+ #@ mycred
2056
+ msgid "Users profile URL."
2057
+ msgstr ""
2058
+
2059
+ #: abstracts/mycred-abstract-hook.php:58
2060
+ #@ default
2061
+ msgid "This Hook does no settings"
2062
+ msgstr ""
2063
+
2064
+ #: abstracts/mycred-abstract-hook.php:125
2065
+ #@ mycred
2066
+ msgid "No limit"
2067
+ msgstr ""
2068
+
2069
+ #: abstracts/mycred-abstract-hook.php:126
2070
+ #@ mycred
2071
+ msgid "Once every 24 hours"
2072
+ msgstr ""
2073
+
2074
+ #: abstracts/mycred-abstract-hook.php:127
2075
+ #@ mycred
2076
+ msgid "Once every 12 hours"
2077
+ msgstr ""
2078
+
2079
+ #: abstracts/mycred-abstract-hook.php:128
2080
+ #@ mycred
2081
+ msgid "Once every 7 days"
2082
+ msgstr ""
2083
+
2084
+ #: abstracts/mycred-abstract-hook.php:129
2085
+ #@ mycred
2086
+ msgid "Once per day (reset at midnight)"
2087
+ msgstr ""
2088
+
2089
+ #: modules/mycred-module-addons.php:23
2090
+ #: modules/mycred-module-addons.php:24
2091
+ #: modules/mycred-module-addons.php:25
2092
+ #: modules/mycred-module-addons.php:242
2093
+ #@ mycred
2094
+ msgid "Add-ons"
2095
+ msgstr ""
2096
+
2097
+ #: modules/mycred-module-addons.php:235
2098
+ #@ mycred
2099
+ msgid "Add-on Activated"
2100
+ msgstr ""
2101
+
2102
+ #: modules/mycred-module-addons.php:237
2103
+ #@ mycred
2104
+ msgid "Add-on Deactivated"
2105
+ msgstr ""
2106
+
2107
+ #: modules/mycred-module-addons.php:243
2108
+ #@ mycred
2109
+ msgid "Add-ons can expand your current installation with further features."
2110
+ msgstr ""
2111
+
2112
+ #: modules/mycred-module-addons.php:281
2113
+ #@ mycred
2114
+ msgid "Deactivate Add-on"
2115
+ msgstr ""
2116
+
2117
+ #: modules/mycred-module-addons.php:282
2118
+ #@ mycred
2119
+ msgid "Deactivate"
2120
+ msgstr ""
2121
+
2122
+ #: modules/mycred-module-addons.php:287
2123
+ #@ mycred
2124
+ msgid "Activate Add-on"
2125
+ msgstr ""
2126
+
2127
+ #: modules/mycred-module-addons.php:288
2128
+ #@ mycred
2129
+ msgid "Activate"
2130
+ msgstr ""
2131
+
2132
+ #: modules/mycred-module-addons.php:305
2133
+ #: modules/mycred-module-general.php:48
2134
+ #@ mycred
2135
+ msgid "Version"
2136
+ msgstr ""
2137
+
2138
+ #: modules/mycred-module-addons.php:308
2139
+ #@ mycred
2140
+ msgid "By"
2141
+ msgstr ""
2142
+
2143
+ #: modules/mycred-module-addons.php:308
2144
+ #@ mycred
2145
+ msgid "View Authors Website"
2146
+ msgstr ""
2147
+
2148
+ #: modules/mycred-module-addons.php:311
2149
+ #@ mycred
2150
+ msgid "View Add-ons Website"
2151
+ msgstr ""
2152
+
2153
+ #: modules/mycred-module-addons.php:311
2154
+ #@ mycred
2155
+ msgid "Visit Website"
2156
+ msgstr ""
2157
+
2158
+ #: includes/mycred-network.php:138
2159
+ #: modules/mycred-module-general.php:19
2160
+ #: modules/mycred-module-general.php:20
2161
+ #: modules/mycred-module-general.php:21
2162
+ #: modules/mycred-module-general.php:47
2163
+ #: modules/mycred-module-log.php:301
2164
+ #: mycred.php:104
2165
+ #@ mycred
2166
+ msgid "Settings"
2167
+ msgstr ""
2168
+
2169
+ #: modules/mycred-module-general.php:53
2170
+ #: modules/mycred-module-help.php:213
2171
+ #@ mycred
2172
+ msgid "Core Settings"
2173
+ msgstr ""
2174
+
2175
+ #: modules/mycred-module-general.php:55
2176
+ #@ mycred
2177
+ msgid "Name"
2178
+ msgstr ""
2179
+
2180
+ #: modules/mycred-module-general.php:60
2181
+ #, php-format
2182
+ #@ default
2183
+ msgid "Accessible though the %singular% template tag."
2184
+ msgstr ""
2185
+
2186
+ #: modules/mycred-module-general.php:65
2187
+ #, php-format
2188
+ #@ default
2189
+ msgid "Accessible though the %plural% template tag."
2190
+ msgstr ""
2191
+
2192
+ #: modules/mycred-module-general.php:68
2193
+ #@ mycred
2194
+ msgid "Tip"
2195
+ msgstr ""
2196
+
2197
+ #: modules/mycred-module-general.php:68
2198
+ #@ mycred
2199
+ msgid "Adding an underscore at the beginning of template tag for names will return them in lowercase. i.e. %_singular%"
2200
+ msgstr ""
2201
+
2202
+ #: includes/mycred-install.php:471
2203
+ #: modules/mycred-module-general.php:71
2204
+ #@ mycred
2205
+ msgid "Presentation"
2206
+ msgstr ""
2207
+
2208
+ #: modules/mycred-module-general.php:86
2209
+ #@ mycred
2210
+ msgid "Separator"
2211
+ msgid_plural "Separators"
2212
+ msgstr[0] ""
2213
+ msgstr[1] ""
2214
+
2215
+ #: modules/mycred-module-general.php:93
2216
+ #@ mycred
2217
+ msgid "Edit Settings"
2218
+ msgstr ""
2219
+
2220
+ #: modules/mycred-module-general.php:95
2221
+ #: modules/mycred-module-general.php:100
2222
+ #@ default
2223
+ msgid "Capability to check for."
2224
+ msgstr ""
2225
+
2226
+ #: modules/mycred-module-general.php:117
2227
+ #@ default
2228
+ msgid "Comma separated list of user ids to exclude. No spaces allowed!"
2229
+ msgstr ""
2230
+
2231
+ #: modules/mycred-module-general.php:150
2232
+ #@ mycred
2233
+ msgid "Update Settings"
2234
+ msgstr ""
2235
+
2236
+ #: modules/mycred-module-help.php:88
2237
+ #: modules/mycred-module-hooks.php:24
2238
+ #: modules/mycred-module-hooks.php:25
2239
+ #: modules/mycred-module-hooks.php:26
2240
+ #: modules/mycred-module-hooks.php:156
2241
+ #@ mycred
2242
+ msgid "Hooks"
2243
+ msgstr ""
2244
+
2245
+ #: modules/mycred-module-hooks.php:84
2246
+ #, php-format
2247
+ #@ default
2248
+ msgid "%plural% for registrations"
2249
+ msgstr ""
2250
+
2251
+ #: modules/mycred-module-hooks.php:85
2252
+ #@ mycred
2253
+ msgid "Award %_plural% for users joining your website."
2254
+ msgstr ""
2255
+
2256
+ #: modules/mycred-module-hooks.php:89
2257
+ #, php-format
2258
+ #@ default
2259
+ msgid "%plural% for logins"
2260
+ msgstr ""
2261
+
2262
+ #: modules/mycred-module-hooks.php:90
2263
+ #@ mycred
2264
+ msgid "Award %_plural% for logging in to your website. You can also set an optional limit."
2265
+ msgstr ""
2266
+
2267
+ #: modules/mycred-module-hooks.php:94
2268
+ #, php-format
2269
+ #@ default
2270
+ msgid "%plural% for publishing content"
2271
+ msgstr ""
2272
+
2273
+ #: modules/mycred-module-hooks.php:95
2274
+ #@ mycred
2275
+ msgid "Award %_plural% for publishing content on your website. If your custom post type is not shown bellow, make sure it is set to \"Public\"."
2276
+ msgstr ""
2277
+
2278
+ #: modules/mycred-module-hooks.php:99
2279
+ #, php-format
2280
+ #@ default
2281
+ msgid "%plural% for comments"
2282
+ msgstr ""
2283
+
2284
+ #: modules/mycred-module-hooks.php:100
2285
+ #@ mycred
2286
+ msgid "Award %_plural% for making comments."
2287
+ msgstr ""
2288
+
2289
+ #: modules/mycred-module-hooks.php:107
2290
+ #@ default
2291
+ msgid "Invite Anyone Plugin"
2292
+ msgstr ""
2293
+
2294
+ #: modules/mycred-module-hooks.php:108
2295
+ #@ mycred
2296
+ msgid "Awards %_plural% for sending invitations and/or %_plural% if the invite is accepted."
2297
+ msgstr ""
2298
+
2299
+ #: modules/mycred-module-hooks.php:116
2300
+ #@ default
2301
+ msgid "Contact Form 7 Form Submissions"
2302
+ msgstr ""
2303
+
2304
+ #: modules/mycred-module-hooks.php:117
2305
+ #@ mycred
2306
+ msgid "Awards %_plural% for successful form submissions (by logged in users)."
2307
+ msgstr ""
2308
+
2309
+ #: modules/mycred-module-hooks.php:157
2310
+ #@ mycred
2311
+ msgid "Hooks are instances where %_plural% are awarded or deducted from a user, depending on their actions around your website."
2312
+ msgstr ""
2313
+
2314
+ #: modules/mycred-module-hooks.php:182
2315
+ #@ mycred
2316
+ msgid "Update Changes"
2317
+ msgstr ""
2318
+
2319
+ #: modules/mycred-module-hooks.php:406
2320
+ #: modules/mycred-module-hooks.php:943
2321
+ #: modules/mycred-module-hooks.php:964
2322
+ #@ mycred
2323
+ msgid "Limit"
2324
+ msgstr ""
2325
+
2326
+ #: modules/mycred-module-hooks.php:503
2327
+ #, php-format
2328
+ #@ mycred
2329
+ msgid "%plural% for Posts"
2330
+ msgstr ""
2331
+
2332
+ #: modules/mycred-module-hooks.php:516
2333
+ #, php-format
2334
+ #@ mycred
2335
+ msgid "%plural% for Pages"
2336
+ msgstr ""
2337
+
2338
+ #: modules/mycred-module-hooks.php:551
2339
+ #, php-format
2340
+ #@ mycred
2341
+ msgid "%plural% for %s"
2342
+ msgstr ""
2343
+
2344
+ #: modules/mycred-module-hooks.php:931
2345
+ #, php-format
2346
+ #@ mycred
2347
+ msgid "%plural% for Sending An Invite"
2348
+ msgstr ""
2349
+
2350
+ #: modules/mycred-module-hooks.php:947
2351
+ #@ mycred
2352
+ msgid "Maximum number of invites that grants %_plural%. User zero for unlimited."
2353
+ msgstr ""
2354
+
2355
+ #: modules/mycred-module-hooks.php:951
2356
+ #, php-format
2357
+ #@ mycred
2358
+ msgid "%plural% for Accepting An Invite"
2359
+ msgstr ""
2360
+
2361
+ #: modules/mycred-module-hooks.php:955
2362
+ #, php-format
2363
+ #@ mycred
2364
+ msgid "%plural% for each invited user that accepts an invitation."
2365
+ msgstr ""
2366
+
2367
+ #: modules/mycred-module-hooks.php:968
2368
+ #@ mycred
2369
+ msgid "Maximum number of accepted invitations that grants %_plural%. User zero for unlimited."
2370
+ msgstr ""
2371
+
2372
+ #: modules/mycred-module-hooks.php:1065
2373
+ #@ mycred
2374
+ msgid "No forms found."
2375
+ msgstr ""
2376
+
2377
+ #: modules/mycred-module-log.php:21
2378
+ #: modules/mycred-module-log.php:22
2379
+ #@ mycred
2380
+ msgid "Log"
2381
+ msgstr ""
2382
+
2383
+ #: modules/mycred-module-log.php:23
2384
+ #@ mycred
2385
+ msgid "Activity Log"
2386
+ msgstr ""
2387
+
2388
+ #: modules/mycred-module-log.php:83
2389
+ #@ mycred
2390
+ msgid "Entries"
2391
+ msgstr ""
2392
+
2393
+ #: modules/mycred-module-log.php:165
2394
+ #@ mycred
2395
+ msgid "Show all references"
2396
+ msgstr ""
2397
+
2398
+ #: modules/mycred-module-log.php:179
2399
+ #@ mycred
2400
+ msgid "Show all users"
2401
+ msgstr ""
2402
+
2403
+ #: modules/mycred-module-log.php:190
2404
+ #@ mycred
2405
+ msgid "Filter"
2406
+ msgstr ""
2407
+
2408
+ #: modules/mycred-module-log.php:259
2409
+ #: modules/mycred-module-log.php:261
2410
+ #@ mycred
2411
+ msgid "Search Log"
2412
+ msgstr ""
2413
+
2414
+ #: modules/mycred-module-log.php:288
2415
+ #@ mycred
2416
+ msgid "entry"
2417
+ msgid_plural "entries"
2418
+ msgstr[0] ""
2419
+ msgstr[1] ""
2420
+
2421
+ #: modules/mycred-module-log.php:307
2422
+ #@ mycred
2423
+ msgid "Search results for"
2424
+ msgstr ""
2425
+
2426
+ #: modules/mycred-module-log.php:311
2427
+ #@ mycred
2428
+ msgid "<strong>my</strong>CRED "
2429
+ msgstr ""
2430
+
2431
+ #: modules/mycred-module-log.php:700
2432
+ #@ mycred
2433
+ msgid "User"
2434
+ msgstr ""
2435
+
2436
+ #: modules/mycred-module-log.php:703
2437
+ #@ mycred
2438
+ msgid "Entry"
2439
+ msgstr ""
2440
+
2441
+ #: modules/mycred-module-log.php:837
2442
+ #@ mycred
2443
+ msgid "No log entries found"
2444
+ msgstr ""
2445
+
2446
+ #: abstracts/mycred-abstract-module.php:42
2447
+ #@ mycred
2448
+ msgid "myCRED_Module() Error. A Module ID is required!"
2449
+ msgstr ""
2450
+
2451
+ #: abstracts/mycred-abstract-module.php:283
2452
+ #: abstracts/mycred-abstract-module.php:291
2453
+ #@ mycred
2454
+ msgid "Surprise"
2455
+ msgstr ""
2456
+
2457
+ #: abstracts/mycred-abstract-module.php:339
2458
+ #@ mycred
2459
+ msgid "click to open"
2460
+ msgstr ""
2461
+
2462
+ #: abstracts/mycred-abstract-module.php:340
2463
+ #@ mycred
2464
+ msgid "click to close"
2465
+ msgstr ""
2466
+
2467
+ #: mycred.php:357
2468
+ #@ mycred
2469
+ msgid "My Balance: "
2470
+ msgstr ""
2471
+
2472
+ #: addons/gateway/carts/mycred-woocommerce.php:34
2473
+ #: includes/mycred-network.php:53
2474
+ #: includes/mycred-network.php:54
2475
+ #: mycred.php:374
2476
+ #: mycred.php:375
2477
+ #@ mycred
2478
+ msgid "myCRED"
2479
+ msgstr ""
2480
+
2481
+ #: addons/buddypress/hooks/bp-groups.php:453
2482
+ #@ mycred
2483
+ msgid "If you use a negative value and the user does not have enough %_plural% the \"Create Group\" button will be disabled."
2484
+ msgstr ""
2485
+
2486
+ #: addons/buddypress/hooks/bp-groups.php:538
2487
+ #@ mycred
2488
+ msgid "If you use a negative value and the user does not have enough %_plural% the \"Join Group\" button will be disabled."
2489
+ msgstr ""
2490
+
2491
+ #: addons/buy-creds/gateways/netbilling.php:655
2492
+ #@ mycred
2493
+ msgid "Disable AVS (Address Verification System) for credit card transactions."
2494
+ msgstr ""
2495
+
2496
+ #: addons/buy-creds/gateways/netbilling.php:659
2497
+ #@ mycred
2498
+ msgid "Disable CVV2 (Card Verification Value 2) for credit card transactions."
2499
+ msgstr ""
2500
+
2501
+ #: addons/buy-creds/gateways/netbilling.php:663
2502
+ #@ mycred
2503
+ msgid "Disable all fraud protection other than AVS/CVV2. (This implies disable_negative_db)"
2504
+ msgstr ""
2505
+
2506
+ #: addons/buy-creds/gateways/netbilling.php:667
2507
+ #@ mycred
2508
+ msgid "Disable only the negative database component of the fraud protection system."
2509
+ msgstr ""
2510
+
2511
+ #: addons/buy-creds/gateways/netbilling.php:671
2512
+ #@ mycred
2513
+ msgid "Disable automatic sending of both merchant and customer email receipts."
2514
+ msgstr ""
2515
+
2516
+ #: addons/buy-creds/gateways/netbilling.php:675
2517
+ #@ mycred
2518
+ msgid "Disable immediate rejection of expired cards."
2519
+ msgstr ""
2520
+
2521
+ #: addons/buy-creds/gateways/paypal-standard.php:358
2522
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:754
2523
+ #@ mycred
2524
+ msgid "For this gateway to work, you must login to your PayPal account and under \"Profile\" > \"Selling Tools\" enable \"Instant Payment Notifications\". Make sure the \"Notification URL\" is set to the above address and that you have selected \"Receive IPN messages (Enabled)\"."
2525
+ msgstr ""
2526
+
2527
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:183
2528
+ #@ mycred
2529
+ msgid "buyCRED"
2530
+ msgstr ""
2531
+
2532
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:192
2533
+ #@ mycred
2534
+ msgid "Login Template"
2535
+ msgstr ""
2536
+
2537
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:196
2538
+ #@ mycred
2539
+ msgid "Content to show when a user is not logged in."
2540
+ msgstr ""
2541
+
2542
+ #: addons/transfer/myCRED-addon-transfer.php:217
2543
+ #@ mycred
2544
+ msgid "Text to show when users are not logged in. Leave empty to hide. No HTML elements allowed!"
2545
+ msgstr ""
2546
+
2547
+ #: addons/transfer/myCRED-addon-transfer.php:223
2548
+ #@ mycred
2549
+ msgid "Template to use when displaying the users balance (if included). No HTML elements allowed!"
2550
+ msgstr ""
2551
+
2552
+ #: addons/transfer/myCRED-addon-transfer.php:229
2553
+ #@ mycred
2554
+ msgid "Template to use when displaying limits (if used). No HTML elements allowed!"
2555
+ msgstr ""
2556
+
2557
+ #: addons/transfer/myCRED-addon-transfer.php:235
2558
+ #@ mycred
2559
+ msgid "Send Transfer button template. No HTML elements allowed!"
2560
+ msgstr ""
2561
+
2562
+ #: addons/transfer/myCRED-addon-transfer.php:243
2563
+ #@ mycred
2564
+ msgid "Text to show when a users balance is to low for transfers. Leave empty to hide. No HTML elements allowed!"
2565
+ msgstr ""
2566
+
2567
+ #: addons/transfer/myCRED-addon-transfer.php:249
2568
+ #@ mycred
2569
+ msgid "Text to show when a user has reached their transfer limit (if used). Leave empty to hide. No HTML elements allowed!"
2570
+ msgstr ""
2571
+
2572
+ #: includes/mycred-install.php:371
2573
+ #@ mycred
2574
+ msgid "Step"
2575
+ msgstr ""
2576
+
2577
+ #: includes/mycred-install.php:394
2578
+ #@ mycred
2579
+ msgid "Click \"Begin Setup\" to install myCRED. You will be able to select your points format, layout and security settings."
2580
+ msgstr ""
2581
+
2582
+ #: includes/mycred-install.php:452
2583
+ #@ mycred
2584
+ msgid "Select the format you want to use for your points."
2585
+ msgstr ""
2586
+
2587
+ #: includes/mycred-network.php:62
2588
+ #: includes/mycred-network.php:63
2589
+ #@ mycred
2590
+ msgid "Network Settings"
2591
+ msgstr ""
2592
+
2593
+ #: includes/mycred-network.php:127
2594
+ #@ mycred
2595
+ msgid "Network"
2596
+ msgstr ""
2597
+
2598
+ #: includes/mycred-network.php:132
2599
+ #@ mycred
2600
+ msgid "Network Settings Updated"
2601
+ msgstr ""
2602
+
2603
+ #: includes/mycred-network.php:134
2604
+ #@ mycred
2605
+ msgid "Configure network settings for <strong>my</strong>CRED."
2606
+ msgstr ""
2607
+
2608
+ #: includes/mycred-network.php:140
2609
+ #@ mycred
2610
+ msgid "Master Template"
2611
+ msgstr ""
2612
+
2613
+ #: includes/mycred-network.php:151
2614
+ #@ mycred
2615
+ msgid "If enabled, your main site's <strong>my</strong>CRED setup will be used for all other sites."
2616
+ msgstr ""
2617
+
2618
+ #: includes/mycred-network.php:154
2619
+ #@ mycred
2620
+ msgid "Site Block"
2621
+ msgstr ""
2622
+
2623
+ #: includes/mycred-network.php:158
2624
+ #@ mycred
2625
+ msgid "Comma separated list of blog ids where <strong>my</strong>CRED is to be disabled."
2626
+ msgstr ""
2627
+
2628
+ #: includes/mycred-network.php:167
2629
+ #@ mycred
2630
+ msgid "Save Network Settings"
2631
+ msgstr ""
2632
+
2633
+ #: modules/mycred-module-help.php:106
2634
+ #@ mycred
2635
+ msgid "Template Tags"
2636
+ msgstr ""
2637
+
2638
+ #: mycred.php:117
2639
+ #@ mycred
2640
+ msgid "myCRED is blocked for this site. Please contact your network administrator for further details."
2641
+ msgstr ""
2642
+
2643
+ #: addons/buddypress/hooks/bp-galleries.php:84
2644
+ #: addons/buddypress/hooks/bp-groups.php:465
2645
+ #: addons/buddypress/hooks/bp-groups.php:478
2646
+ #: addons/buddypress/hooks/bp-groups.php:491
2647
+ #: addons/buddypress/hooks/bp-groups.php:504
2648
+ #: addons/buddypress/hooks/bp-groups.php:517
2649
+ #: addons/buddypress/hooks/bp-groups.php:530
2650
+ #: addons/buddypress/hooks/bp-groups.php:544
2651
+ #: addons/buddypress/hooks/bp-groups.php:557
2652
+ #: addons/buddypress/hooks/bp-groups.php:570
2653
+ #: addons/buddypress/hooks/bp-groups.php:583
2654
+ #: addons/buddypress/hooks/bp-links.php:187
2655
+ #: addons/buddypress/hooks/bp-links.php:200
2656
+ #: addons/buddypress/hooks/bp-links.php:213
2657
+ #: addons/buddypress/hooks/bp-links.php:226
2658
+ #: addons/buddypress/hooks/bp-profile.php:324
2659
+ #: addons/buddypress/hooks/bp-profile.php:337
2660
+ #: addons/buddypress/hooks/bp-profile.php:376
2661
+ #: addons/buddypress/hooks/bp-profile.php:389
2662
+ #: addons/buddypress/hooks/bp-profile.php:402
2663
+ #: addons/buddypress/hooks/bp-profile.php:415
2664
+ #: modules/mycred-module-hooks.php:403
2665
+ #: modules/mycred-module-hooks.php:940
2666
+ #: modules/mycred-module-hooks.php:961
2667
+ #@ mycred
2668
+ msgid "Available template tags: General"
2669
+ msgstr ""
2670
+
2671
+ #: addons/buddypress/hooks/bp-press.php:115
2672
+ #: addons/buddypress/hooks/bp-press.php:128
2673
+ #: modules/mycred-module-hooks.php:513
2674
+ #: modules/mycred-module-hooks.php:526
2675
+ #: modules/mycred-module-hooks.php:561
2676
+ #: modules/mycred-module-hooks.php:1095
2677
+ #@ mycred
2678
+ msgid "Available template tags: General, Post"
2679
+ msgstr ""
2680
+
2681
+ #: addons/buddypress/hooks/bp-profile.php:350
2682
+ #: addons/buddypress/hooks/bp-profile.php:363
2683
+ #: addons/transfer/myCRED-addon-transfer.php:180
2684
+ #: addons/transfer/myCRED-addon-transfer.php:187
2685
+ #: modules/mycred-module-hooks.php:283
2686
+ #@ mycred
2687
+ msgid "Available template tags: General, User"
2688
+ msgstr ""
2689
+
2690
+ #: addons/buddypress/myCRED-addon-buddypress.php:393
2691
+ #, php-format
2692
+ #@ mycred
2693
+ msgid "Available template tags are: %creds%, %number%, %rank%"
2694
+ msgstr ""
2695
+
2696
+ #: addons/gateway/carts/mycred-woocommerce.php:35
2697
+ #@ mycred
2698
+ msgid "Let users pay using their myCRED balance."
2699
+ msgstr ""
2700
+
2701
+ #: addons/gateway/carts/mycred-woocommerce.php:60
2702
+ #@ mycred
2703
+ msgid "Enable/Disable"
2704
+ msgstr ""
2705
+
2706
+ #: addons/gateway/carts/mycred-woocommerce.php:62
2707
+ #@ mycred
2708
+ msgid "Enable myCRED Payment"
2709
+ msgstr ""
2710
+
2711
+ #: addons/gateway/carts/mycred-woocommerce.php:64
2712
+ #@ mycred
2713
+ msgid "Users who are not logged in or excluded from using myCRED will not have access to this gateway!"
2714
+ msgstr ""
2715
+
2716
+ #: addons/gateway/carts/mycred-woocommerce.php:69
2717
+ #@ mycred
2718
+ msgid "Title to show for this payment option."
2719
+ msgstr ""
2720
+
2721
+ #: addons/gateway/carts/mycred-woocommerce.php:70
2722
+ #@ mycred
2723
+ msgid "Pay with myCRED"
2724
+ msgstr ""
2725
+
2726
+ #: addons/gateway/carts/mycred-woocommerce.php:74
2727
+ #@ mycred
2728
+ msgid "Customer Message"
2729
+ msgstr ""
2730
+
2731
+ #: addons/gateway/carts/mycred-woocommerce.php:76
2732
+ #@ mycred
2733
+ msgid "Deduct the amount from your %_plural% balance."
2734
+ msgstr ""
2735
+
2736
+ #: addons/gateway/carts/mycred-woocommerce.php:81
2737
+ #, php-format
2738
+ #@ mycred
2739
+ msgid "Log entry template for successful payments. Available template tags: %order_id%, %order_link%"
2740
+ msgstr ""
2741
+
2742
+ #: addons/gateway/carts/mycred-woocommerce.php:82
2743
+ #, php-format
2744
+ #@ mycred
2745
+ msgid "Payment for Order: #%order_id%"
2746
+ msgstr ""
2747
+
2748
+ #: addons/gateway/carts/mycred-woocommerce.php:87
2749
+ #, php-format
2750
+ #@ mycred
2751
+ msgid "How much is 1 %_singular% worth in %currency%?"
2752
+ msgstr ""
2753
+
2754
+ #: addons/gateway/carts/mycred-woocommerce.php:99
2755
+ #@ mycred
2756
+ msgid "Show Total"
2757
+ msgstr ""
2758
+
2759
+ #: addons/gateway/carts/mycred-woocommerce.php:101
2760
+ #@ mycred
2761
+ msgid "Show the final price in %_plural% ."
2762
+ msgstr ""
2763
+
2764
+ #: addons/gateway/carts/mycred-woocommerce.php:103
2765
+ #@ mycred
2766
+ msgid "Do not show"
2767
+ msgstr ""
2768
+
2769
+ #: addons/gateway/carts/mycred-woocommerce.php:104
2770
+ #@ mycred
2771
+ msgid "Show in Cart"
2772
+ msgstr ""
2773
+
2774
+ #: addons/gateway/carts/mycred-woocommerce.php:105
2775
+ #@ mycred
2776
+ msgid "Show on Checkout Page"
2777
+ msgstr ""
2778
+
2779
+ #: addons/gateway/carts/mycred-woocommerce.php:106
2780
+ #@ mycred
2781
+ msgid "Show in Cart and on Checkout Page"
2782
+ msgstr ""
2783
+
2784
+ #: addons/gateway/carts/mycred-woocommerce.php:111
2785
+ #@ mycred
2786
+ msgid "Label"
2787
+ msgstr ""
2788
+
2789
+ #: addons/gateway/carts/mycred-woocommerce.php:113
2790
+ #@ mycred
2791
+ msgid "Order Total in %_plural%"
2792
+ msgstr ""
2793
+
2794
+ #: addons/gateway/carts/mycred-woocommerce.php:140
2795
+ #@ mycred
2796
+ msgid "myCRED Payment"
2797
+ msgstr ""
2798
+
2799
+ #: addons/gateway/carts/mycred-woocommerce.php:141
2800
+ #@ mycred
2801
+ msgid "Allows users to pay using their myCRED %_singular% balance. Please note that users with insufficient funds and users who are not logged in will not see this payment gateway on the checkout page."
2802
+ msgstr ""
2803
+
2804
+ #: addons/gateway/carts/mycred-woocommerce.php:162
2805
+ #@ mycred
2806
+ msgid "You must be logged in to pay with %_plural%"
2807
+ msgstr ""
2808
+
2809
+ #: addons/gateway/carts/mycred-woocommerce.php:168
2810
+ #@ mycred
2811
+ msgid "You can not use this gateway. Please try a different payment option."
2812
+ msgstr ""
2813
+
2814
+ #: addons/gateway/carts/mycred-woocommerce.php:180
2815
+ #@ mycred
2816
+ msgid "Insufficient funds. Please try a different payment option."
2817
+ msgstr ""
2818
+
2819
+ #: addons/gateway/carts/mycred-woocommerce.php:201
2820
+ #@ mycred
2821
+ msgid "Your account has successfully been charged."
2822
+ msgstr ""
2823
+
2824
+ #: addons/gateway/carts/mycred-woocommerce.php:391
2825
+ #@ mycred
2826
+ msgid "Your current balance"
2827
+ msgstr ""
2828
+
2829
+ #: modules/mycred-module-hooks.php:781
2830
+ #: modules/mycred-module-hooks.php:793
2831
+ #: modules/mycred-module-hooks.php:805
2832
+ #@ mycred
2833
+ msgid "Available template tags: General, Comment"
2834
+ msgstr ""
2835
+
2836
+ #: modules/mycred-module-hooks.php:772
2837
+ #@ mycred
2838
+ msgid "Approved Comment"
2839
+ msgstr ""
2840
+
2841
+ #: modules/mycred-module-hooks.php:784
2842
+ #@ mycred
2843
+ msgid "Comment Marked SPAM"
2844
+ msgstr ""
2845
+
2846
+ #: modules/mycred-module-hooks.php:796
2847
+ #@ mycred
2848
+ msgid "Trashed / Unapproved Comments"
2849
+ msgstr ""
2850
+
2851
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:733
2852
+ #@ mycred
2853
+ msgid "Buy Creds"
2854
+ msgstr ""
2855
+
2856
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:735
2857
+ #@ mycred
2858
+ msgid "This add-on lets your users buy %_plural% using a payment gateway."
2859
+ msgstr ""
2860
+
2861
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:736
2862
+ #@ mycred
2863
+ msgid "Supported Gateways"
2864
+ msgstr ""
2865
+
2866
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:737
2867
+ #@ mycred
2868
+ msgid "myCRED supports purchases though: PayPal Payments Standard, Skrill (Moneybookers) and NETbilling. Let us know if you want to add other payment gateways."
2869
+ msgstr ""
2870
+
2871
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:738
2872
+ #: addons/sell-content/myCRED-addon-sell-content.php:692
2873
+ #: addons/transfer/myCRED-addon-transfer.php:469
2874
+ #@ mycred
2875
+ msgid "Usage"
2876
+ msgstr ""
2877
+
2878
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:739
2879
+ #@ mycred
2880
+ msgid "Purchases can be made using one of the following shortcodes:"
2881
+ msgstr ""
2882
+
2883
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:741
2884
+ #@ mycred
2885
+ msgid "When you want to sell a pre-set amount, sell to a specific user or use a specific gateway.<br />For more information on how to use the shortcode, please visit the"
2886
+ msgstr ""
2887
+
2888
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:742
2889
+ #@ mycred
2890
+ msgid "When you want to give your users the option to select an amount, gateway or recipient.<br />For more information on how to use the shortcode, please visit the"
2891
+ msgstr ""
2892
+
2893
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:752
2894
+ #@ mycred
2895
+ msgid "Make sure you select a currency that your PayPal account supports. Otherwise transactions will not be approved until you login to your PayPal account and Accept each transaction! Purchases made in a currency that is not supported will not be applied to the buyer until you have resolved the issue."
2896
+ msgstr ""
2897
+
2898
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:753
2899
+ #@ mycred
2900
+ msgid "Instant Payment Notifications"
2901
+ msgstr ""
2902
+
2903
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:758
2904
+ #@ mycred
2905
+ msgid "Skrill"
2906
+ msgstr ""
2907
+
2908
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:761
2909
+ #@ mycred
2910
+ msgid "Transactions made while Sandbox mode is active are real transactions! Remember to use your \"Test Merchant Account\" when Sandbox mode is active!"
2911
+ msgstr ""
2912
+
2913
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:763
2914
+ #@ mycred
2915
+ msgid "By default all Skrill Merchant account accept payments via Bank Transfers. When a user selects this option, no points are awarded! You will need to manually award these once the bank transfer is completed."
2916
+ msgstr ""
2917
+
2918
+ #: addons/buy-creds/myCRED-addon-buy-creds.php:764
2919
+ #@ mycred
2920
+ msgid "By default purchases made using Skrill will result in users having to signup for a Skrill account (if they do not have one already). You can contact Skrill Merchant Services and request to disable this feature."
2921
+ msgstr ""
2922
+
2923
+ #: addons/import/myCRED-addon-import.php:546
2924
+ #: addons/import/myCRED-addon-import.php:620
2925
+ #: addons/import/myCRED-addon-import.php:678
2926
+ #@ mycred
2927
+ msgid "See the help tab for available template tags. Leave blank to disable."
2928
+ msgstr ""
2929
+
2930
+ #: addons/import/myCRED-addon-import.php:737
2931
+ #@ mycred
2932
+ msgid "This add-on lets you import %_plural% either though a CSV-file or from your database. Remember that the import can take time depending on your file size or the number of users being imported."
2933
+ msgstr ""
2934
+
2935
+ #: addons/import/myCRED-addon-import.php:743
2936
+ #@ mycred
2937
+ msgid "CSV Import"
2938
+ msgstr ""
2939
+
2940
+ #: addons/import/myCRED-addon-import.php:744
2941
+ #@ mycred
2942
+ msgid "Imports using a comma-separated values file requires the following columns:"
2943
+ msgstr ""
2944
+
2945
+ #: addons/import/myCRED-addon-import.php:745
2946
+ #@ mycred
2947
+ msgid "Column identifing the user. All rows must identify the user the same way, either using an ID, Username (user_login) or email. Users that can not be found will be ignored."
2948
+ msgstr ""
2949
+
2950
+ #: addons/import/myCRED-addon-import.php:746
2951
+ #@ mycred
2952
+ msgid "Column with the amount to be imported. If set, an exchange rate is applied to this value before import."
2953
+ msgstr ""
2954
+
2955
+ #: addons/import/myCRED-addon-import.php:747
2956
+ #@ mycred
2957
+ msgid "Optionally you can also use the <code>mycred_log</code> column to pre-define the log entry for each import."
2958
+ msgstr ""
2959
+
2960
+ #: addons/import/myCRED-addon-import.php:751
2961
+ #@ mycred
2962
+ msgid "Cubepoints"
2963
+ msgstr ""
2964
+
2965
+ #: addons/import/myCRED-addon-import.php:753
2966
+ #@ mycred
2967
+ msgid "Cubepoints Import"
2968
+ msgstr ""
2969
+
2970
+ #: addons/import/myCRED-addon-import.php:754
2971
+ #@ mycred
2972
+ msgid "When this page loads, the importer will automatically check if you have been using Cubepoints. If you have, you can import these with the option to delete the original Cubepoints once completed to help keep your database clean."
2973
+ msgstr ""
2974
+
2975
+ #: addons/import/myCRED-addon-import.php:755
2976
+ #: addons/import/myCRED-addon-import.php:765
2977
+ #@ mycred
2978
+ msgid "Before a value is imported, you can apply an exchange rate. To import without changing the value, use 1 as the exchange rate."
2979
+ msgstr ""
2980
+
2981
+ #: addons/import/myCRED-addon-import.php:756
2982
+ #: addons/import/myCRED-addon-import.php:766
2983
+ #@ mycred
2984
+ msgid "You can select to add a log entry for each import or leave the template empty to skip."
2985
+ msgstr ""
2986
+
2987
+ #: addons/import/myCRED-addon-import.php:757
2988
+ #@ mycred
2989
+ msgid "The Cubepoints importer will automatically disable itself if no Cubepoints installation exists."
2990
+ msgstr ""
2991
+
2992
+ #: addons/import/myCRED-addon-import.php:763
2993
+ #@ mycred
2994
+ msgid "Custom User Meta Import"
2995
+ msgstr ""
2996
+
2997
+ #: addons/import/myCRED-addon-import.php:764
2998
+ #@ mycred
2999
+ msgid "You can import any type of points that have previously been saved in your database. All you need is the meta key under which it has been saved."
3000
+ msgstr ""
3001
+
3002
+ #: addons/import/myCRED-addon-import.php:767
3003
+ #@ mycred
3004
+ msgid "Please note that the meta key is case sensitive and can not contain whitespaces!"
3005
+ msgstr ""
3006
+
3007
+ #: addons/sell-content/myCRED-addon-sell-content.php:689
3008
+ #@ mycred
3009
+ msgid "This add-on lets you sell either entire contents or parts of it. You can select if you want to just charge users or share a percentage of the sale with the post author."
3010
+ msgstr ""
3011
+
3012
+ #: addons/sell-content/myCRED-addon-sell-content.php:691
3013
+ #@ mycred
3014
+ msgid "The default price and button label is applied to all content that is set for sale. You can select if you want to enforce these settings or let the content authors set their own."
3015
+ msgstr ""
3016
+
3017
+ #: addons/sell-content/myCRED-addon-sell-content.php:693
3018
+ #@ mycred
3019
+ msgid "You can either sell entire posts via the Sell Content Meta Box or by using the <code>mycred_sell_this</code> shortcode.<br />For more information on how to use the shortcode, please visit the"
3020
+ msgstr ""
3021
+
3022
+ #: addons/transfer/myCRED-addon-transfer.php:466
3023
+ #@ mycred
3024
+ msgid "This add-on lets your users transfer %_plural% to each other. Members who are set to be excluded can neither send or receive %_plural%."
3025
+ msgstr ""
3026
+
3027
+ #: addons/transfer/myCRED-addon-transfer.php:467
3028
+ #@ mycred
3029
+ msgid "Transfer Limit"
3030
+ msgstr ""
3031
+
3032
+ #: addons/transfer/myCRED-addon-transfer.php:468
3033
+ #@ mycred
3034
+ msgid "You can impose a daily-, weekly- or monthly transfer limit for each user. Note, that this transfer limit is imposed on everyone who are not excluded from using myCRED."
3035
+ msgstr ""
3036
+
3037
+ #: addons/transfer/myCRED-addon-transfer.php:470
3038
+ #@ mycred
3039
+ msgid "Transfers can be made by either using the <code>mycred_transfer</code> shortcode or via the myCRED Transfer Widget.<br />For more information on how to use the shortcode, please visit the"
3040
+ msgstr ""
3041
+
3042
+ #: includes/mycred-admin.php:159
3043
+ #@ mycred
3044
+ msgid "Adjust Your Balance"
3045
+ msgstr ""
3046
+
3047
+ #: includes/mycred-install.php:532
3048
+ #, php-format
3049
+ #@ mycred
3050
+ msgid "Edit Users %plural% Capability"
3051
+ msgstr ""
3052
+
3053
+ #: includes/mycred-install.php:544
3054
+ #: modules/mycred-module-general.php:111
3055
+ #, php-format
3056
+ #@ mycred
3057
+ msgid "Exclude those who can \"Edit Users %plural%\"."
3058
+ msgstr ""
3059
+
3060
+ #: includes/mycred-install.php:596
3061
+ #@ mycred
3062
+ msgid "Almost done! Click the button below to finish this setup."
3063
+ msgstr ""
3064
+
3065
+ #: includes/mycred-widgets.php:182
3066
+ #: includes/mycred-widgets.php:205
3067
+ #: includes/mycred-widgets.php:215
3068
+ #: includes/mycred-widgets.php:345
3069
+ #@ mycred
3070
+ msgid "See the help tab for available template tags."
3071
+ msgstr ""
3072
+
3073
+ #: includes/mycred-widgets.php:191
3074
+ #@ mycred
3075
+ msgid "This will be appended after their balance. See the help tab for available template tags."
3076
+ msgstr ""
3077
+
3078
+ #: includes/mycred-widgets.php:199
3079
+ #@ mycred
3080
+ msgid "History Title"
3081
+ msgstr ""
3082
+
3083
+ #: modules/mycred-module-general.php:98
3084
+ #, php-format
3085
+ #@ mycred
3086
+ msgid "Edit Users %plural%"
3087
+ msgstr ""
3088
+
3089
+ #: modules/mycred-module-help.php:67
3090
+ #@ mycred
3091
+ msgid "The Log"
3092
+ msgstr ""
3093
+
3094
+ #: modules/mycred-module-help.php:69
3095
+ #@ mycred
3096
+ msgid "myCRED logs everything giving you a complete overview of %_plural% awarded or deducted from your users. The Log page can be filtered by user, date or reference and we have included a search function for you."
3097
+ msgstr ""
3098
+
3099
+ #: modules/mycred-module-help.php:70
3100
+ #@ mycred
3101
+ msgid "You can select how many log entries you want to show under \"Screen Options\". By default you will be shown 10 entires."
3102
+ msgstr ""
3103
+
3104
+ #: modules/mycred-module-help.php:71
3105
+ #@ mycred
3106
+ msgid "Filter by Date"
3107
+ msgstr ""
3108
+
3109
+ #: modules/mycred-module-help.php:72
3110
+ #@ mycred
3111
+ msgid "You can select to show log entries for: Today, Yesterday, This Week or This Month."
3112
+ msgstr ""
3113
+
3114
+ #: modules/mycred-module-help.php:73
3115
+ #@ mycred
3116
+ msgid "Filter by Reference"
3117
+ msgstr ""
3118
+
3119
+ #: modules/mycred-module-help.php:74
3120
+ #@ mycred
3121
+ msgid "Each time a log entry is made a reference is used to identify where or why points were awarded or deducted."
3122
+ msgstr ""
3123
+
3124
+ #: modules/mycred-module-help.php:75
3125
+ #@ mycred
3126
+ msgid "Filter by User"
3127
+ msgstr ""
3128
+
3129
+ #: modules/mycred-module-help.php:76
3130
+ #@ mycred
3131
+ msgid "You can select to show log entries for a specific user. Users with no log entries are not included."
3132
+ msgstr ""
3133
+
3134
+ #: modules/mycred-module-help.php:90
3135
+ #@ mycred
3136
+ msgid "Each instance where users might gain or loose %_plural%, are called hooks. Hooks can relate to WordPress specific actions or any third party plugin action that myCRED supports."
3137
+ msgstr ""
3138
+
3139
+ #: modules/mycred-module-help.php:91
3140
+ #@ mycred
3141
+ msgid "A hook can relate to a specific instance or several instances. You can disable specific instances in a hook by awarding zero %_plural%."
3142
+ msgstr ""
3143
+
3144
+ #: modules/mycred-module-help.php:95
3145
+ #@ mycred
3146
+ msgid "Third Party Plugins"
3147
+ msgstr ""
3148
+
3149
+ #: modules/mycred-module-help.php:97
3150
+ #@ mycred
3151
+ msgid "myCRED supports several third party plugins by default. These hooks are only available / visible if the plugin has been installed and enabled."
3152
+ msgstr ""
3153
+
3154
+ #: modules/mycred-module-help.php:98
3155
+ #@ mycred
3156
+ msgid "Supported Plugins:"
3157
+ msgstr ""
3158
+
3159
+ #: modules/mycred-module-help.php:108
3160
+ #@ mycred
3161
+ msgid "General:"
3162
+ msgstr ""
3163
+
3164
+ #: modules/mycred-module-help.php:109
3165
+ #: modules/mycred-module-help.php:153
3166
+ #: modules/mycred-module-help.php:158
3167
+ #: modules/mycred-module-help.php:175
3168
+ #, php-format
3169
+ #@ mycred
3170
+ msgid "Singular %plural% Name."
3171
+ msgstr ""
3172
+
3173
+ #: modules/mycred-module-help.php:110
3174
+ #, php-format
3175
+ #@ mycred
3176
+ msgid "Singular %plural% Name in lowercase."
3177
+ msgstr ""
3178
+
3179
+ #: modules/mycred-module-help.php:111
3180
+ #: modules/mycred-module-help.php:154
3181
+ #: modules/mycred-module-help.php:159
3182
+ #: modules/mycred-module-help.php:176
3183
+ #, php-format
3184
+ #@ mycred
3185
+ msgid "Plural %plural% Name."
3186
+ msgstr ""
3187
+
3188
+ #: modules/mycred-module-help.php:112
3189
+ #, php-format
3190
+ #@ mycred
3191
+ msgid "Plural %plural% Name in lowercase."
3192
+ msgstr ""
3193
+
3194
+ #: modules/mycred-module-help.php:113
3195
+ #: modules/mycred-module-help.php:163
3196
+ #@ mycred
3197
+ msgid "The login URL without redirection."
3198
+ msgstr ""
3199
+
3200
+ #: modules/mycred-module-help.php:114
3201
+ #: modules/mycred-module-help.php:164
3202
+ #@ mycred
3203
+ msgid "The login URL with redirection to current page."
3204
+ msgstr ""
3205
+
3206
+ #: modules/mycred-module-help.php:115
3207
+ #@ mycred
3208
+ msgid "Post:"
3209
+ msgstr ""
3210
+
3211
+ #: modules/mycred-module-help.php:116
3212
+ #@ mycred
3213
+ msgid "The posts title."
3214
+ msgstr ""
3215
+
3216
+ #: modules/mycred-module-help.php:117
3217
+ #@ mycred
3218
+ msgid "The posts URL address."
3219
+ msgstr ""
3220
+
3221
+ #: modules/mycred-module-help.php:118
3222
+ #@ mycred
3223
+ msgid "The post type."
3224
+ msgstr ""
3225
+
3226
+ #: modules/mycred-module-help.php:119
3227
+ #@ mycred
3228
+ msgid "The posts permalink with the post title as title."
3229
+ msgstr ""
3230
+
3231
+ #: modules/mycred-module-help.php:120
3232
+ #@ mycred
3233
+ msgid "User:"
3234
+ msgstr ""
3235
+
3236
+ #: modules/mycred-module-help.php:121
3237
+ #@ mycred
3238
+ msgid "The users ID."
3239
+ msgstr ""
3240
+
3241
+ #: modules/mycred-module-help.php:122
3242
+ #@ mycred
3243
+ msgid "The users \"username\"."
3244
+ msgstr ""
3245
+
3246
+ #: modules/mycred-module-help.php:123
3247
+ #@ mycred
3248
+ msgid "The users \"username\" URL encoded."
3249
+ msgstr ""
3250
+
3251
+ #: modules/mycred-module-help.php:124
3252
+ #@ mycred
3253
+ msgid "The users display name."
3254
+ msgstr ""
3255
+
3256
+ #: modules/mycred-module-help.php:125
3257
+ #@ mycred
3258
+ msgid "The users profile URL."
3259
+ msgstr ""
3260
+
3261
+ #: modules/mycred-module-help.php:126
3262
+ #@ mycred
3263
+ msgid "The users profile link with the display name as title."
3264
+ msgstr ""
3265
+
3266
+ #: modules/mycred-module-help.php:127
3267
+ #@ mycred
3268
+ msgid "Comment:"
3269
+ msgstr ""
3270
+
3271
+ #: modules/mycred-module-help.php:128
3272
+ #@ mycred
3273
+ msgid "The comment ID."
3274
+ msgstr ""
3275
+
3276
+ #: modules/mycred-module-help.php:129
3277
+ #@ mycred
3278
+ msgid "The post id where the comment was made."
3279
+ msgstr ""
3280
+
3281
+ #: modules/mycred-module-help.php:130
3282
+ #@ mycred
3283
+ msgid "The post title where the comment was made."
3284
+ msgstr ""
3285
+
3286
+ #: modules/mycred-module-help.php:131
3287
+ #@ mycred
3288
+ msgid "The post URL address where the comment was made."
3289
+ msgstr ""
3290
+
3291
+ #: modules/mycred-module-help.php:132
3292
+ #@ mycred
3293
+ msgid "Link to the post where the comment was made."
3294
+ msgstr ""
3295
+
3296
+ #: modules/mycred-module-help.php:144
3297
+ #@ mycred
3298
+ msgid "myCRED Balance Template Tags"
3299
+ msgstr ""
3300
+
3301
+ #: modules/mycred-module-help.php:146
3302
+ #: modules/mycred-module-help.php:170
3303
+ #@ mycred
3304
+ msgid "Available Template Tags"
3305
+ msgstr ""
3306
+
3307
+ #: modules/mycred-module-help.php:147
3308
+ #@ mycred
3309
+ msgid "Layout:"
3310
+ msgstr ""
3311
+
3312
+ #: modules/mycred-module-help.php:148
3313
+ #: modules/mycred-module-help.php:156
3314
+ #: modules/mycred-module-help.php:173
3315
+ #@ mycred
3316
+ msgid "Balance amount in plain format."
3317
+ msgstr ""
3318
+
3319
+ #: modules/mycred-module-help.php:149
3320
+ #: modules/mycred-module-help.php:157
3321
+ #: modules/mycred-module-help.php:174
3322
+ #@ mycred
3323
+ msgid "Balance amount formatted with prefix and/or suffix."
3324
+ msgstr ""
3325
+
3326
+ #: modules/mycred-module-help.php:150
3327
+ #@ mycred
3328
+ msgid "Rank Format:"
3329
+ msgstr ""
3330
+
3331
+ #: modules/mycred-module-help.php:151
3332
+ #: modules/mycred-module-help.php:172
3333
+ #@ mycred
3334
+ msgid "The users ranking."
3335
+ msgstr ""
3336
+
3337
+ #: modules/mycred-module-help.php:152
3338
+ #@ mycred
3339
+ msgid "History Title:"
3340
+ msgstr ""
3341
+
3342
+ #: modules/mycred-module-help.php:153
3343
+ #: modules/mycred-module-help.php:154
3344
+ #: modules/mycred-module-help.php:158
3345
+ #: modules/mycred-module-help.php:159
3346
+ #: modules/mycred-module-help.php:175
3347
+ #: modules/mycred-module-help.php:176
3348
+ #@ mycred
3349
+ msgid "or"
3350
+ msgstr ""
3351
+
3352
+ #: modules/mycred-module-help.php:155
3353
+ #: modules/mycred-module-help.php:171
3354
+ #@ mycred
3355
+ msgid "Row Layout:"
3356
+ msgstr ""
3357
+
3358
+ #: modules/mycred-module-help.php:160
3359
+ #: modules/mycred-module-help.php:177
3360
+ #@ mycred
3361
+ msgid "Log entry date."
3362
+ msgstr ""
3363
+
3364
+ #: modules/mycred-module-help.php:161
3365
+ #: modules/mycred-module-help.php:178
3366
+ #@ mycred
3367
+ msgid "The log entry."
3368
+ msgstr ""
3369
+
3370
+ #: modules/mycred-module-help.php:162
3371
+ #@ mycred
3372
+ msgid "Message:"
3373
+ msgstr ""
3374
+
3375
+ #: modules/mycred-module-help.php:168
3376
+ #@ default
3377
+ msgid "myCRED List Template Tags"
3378
+ msgstr ""
3379
+
3380
+ #: modules/mycred-module-help.php:181
3381
+ #@ mycred
3382
+ msgid "Users \"username\"."
3383
+ msgstr ""
3384
+
3385
+ #: modules/mycred-module-help.php:182
3386
+ #@ mycred
3387
+ msgid "Users \"username\" URL encoded."
3388
+ msgstr ""
3389
+
3390
+ #: modules/mycred-module-help.php:183
3391
+ #@ mycred
3392
+ msgid "Link to users profile with their display name as title."
3393
+ msgstr ""
3394
+
3395
+ #: modules/mycred-module-help.php:195
3396
+ #, php-format
3397
+ #@ mycred
3398
+ msgid "Editing %plural%"
3399
+ msgstr ""
3400
+
3401
+ #: modules/mycred-module-help.php:197
3402
+ #@ mycred
3403
+ msgid "You can adjust this users %_plural% by giving a positive or negative amount and a log description. Remember that plugin and point editors will always be able to adjust their own balance."
3404
+ msgstr ""
3405
+
3406
+ #: modules/mycred-module-help.php:198
3407
+ #@ mycred
3408
+ msgid "If the option to edit a users balance is missing the user is set to be excluded from using myCRED."
3409
+ msgstr ""
3410
+
3411
+ #: modules/mycred-module-help.php:210
3412
+ #@ mycred
3413
+ msgid "Core"
3414
+ msgstr ""
3415
+
3416
+ #: modules/mycred-module-help.php:212
3417
+ #@ mycred
3418
+ msgid "On this page, you can edit all myCRED settings."
3419
+ msgstr ""
3420
+
3421
+ #: modules/mycred-module-help.php:214
3422
+ #@ mycred
3423
+ msgid "Here you can name your installation along with setting your layout and format. You can use any name as long as you set both the singular and plural format and you can change the name at any time."
3424
+ msgstr ""
3425
+
modules/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ // Silence is golden.
3
+ ?>
modules/mycred-module-addons.php ADDED
@@ -0,0 +1,336 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Addons class
5
+ * @since 0.1
6
+ * @version 1.0
7
+ */
8
+ if ( !class_exists( 'myCRED_Addons' ) ) {
9
+ class myCRED_Addons extends myCRED_Module {
10
+
11
+ /**
12
+ * Construct
13
+ */
14
+ function __construct() {
15
+ parent::__construct( 'myCRED_Addons', array(
16
+ 'module_name' => 'addons',
17
+ 'option_id' => 'mycred_pref_addons',
18
+ 'defaults' => array(
19
+ 'installed' => array(),
20
+ 'active' => array()
21
+ ),
22
+ 'labels' => array(
23
+ 'menu' => __( 'Add-ons', 'mycred' ),
24
+ 'page_title' => __( 'Add-ons', 'mycred' ),
25
+ 'page_header' => __( 'Add-ons', 'mycred' )
26
+ ),
27
+ 'screen_id' => 'myCRED_page_addons',
28
+ 'accordion' => true,
29
+ 'menu_pos' => 30
30
+ ) );
31
+ }
32
+
33
+ /**
34
+ * Run Addons
35
+ * Catches all add-on activations and deactivations and loads addons
36
+ * @since 0.1
37
+ * @version 1.0
38
+ */
39
+ public function module_pre_init() {
40
+ $addons = $this->addons;
41
+ $active = $addons['active'];
42
+ $installed = $this->get();
43
+ $num = 0;
44
+
45
+ // Make sure each active add-on still exists. If not delete.
46
+ if ( !empty( $active ) ) {
47
+ $active = array_unique( $active );
48
+ $_active = array();
49
+ foreach ( $active as $pos => $active_id ) {
50
+ if ( array_key_exists( $active_id, $installed ) ) {
51
+ $_active[] = $active_id;
52
+ $num = $num+1;
53
+ }
54
+ }
55
+ unset( $active );
56
+ $active = $_active;
57
+ $this->active = $active;
58
+ }
59
+
60
+ // Handle actions
61
+ if ( isset( $_GET['addon_action'] ) && isset( $_GET['addon_id'] ) ) {
62
+ $addon_id = $_GET['addon_id'];
63
+ $action = $_GET['addon_action'];
64
+
65
+ // Activation
66
+ if ( $action == 'activate' ) {
67
+ $active[$num] = $addon_id;
68
+ }
69
+
70
+ // Deactivation
71
+ if ( $action == 'deactivate' ) {
72
+ $index = array_search( $addon_id, $active );
73
+ if ( $index !== false ) {
74
+ unset( $active[$index] );
75
+ }
76
+
77
+ // Run deactivation now before the file is no longer included
78
+ do_action( 'mycred_addon_deactivation_' . $addon_id );
79
+ }
80
+
81
+ $new_settings = array(
82
+ 'installed' => $installed,
83
+ 'active' => $active
84
+ );
85
+
86
+ if ( !function_exists( 'update_option' ) )
87
+ include_once( ABSPATH . 'wp-includes/option.php' );
88
+
89
+ update_option( 'mycred_pref_addons', $new_settings );
90
+ $this->addons = $new_settings;
91
+ $this->installed = $installed;
92
+ $this->active = $active;
93
+ }
94
+
95
+ // Load addons
96
+ foreach ( $installed as $key => $data ) {
97
+ if ( $this->is_active( $key ) ) {
98
+ // Include
99
+ include_once( $this->get_path( $key ) );
100
+
101
+ // Check for activation
102
+ if ( $this->is_activation( $key ) ) do_action( 'mycred_addon_activation_' . $key );
103
+ }
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Is Activation
109
+ * @since 0.1
110
+ * @version 1.0
111
+ */
112
+ public function is_activation( $key ) {
113
+ if ( isset( $_GET['addon_action'] ) && isset( $_GET['addon_id'] ) && $_GET['addon_action'] == 'activate' && $_GET['addon_id'] == $key )
114
+ return true;
115
+
116
+ return false;
117
+ }
118
+
119
+ /**
120
+ * Is Deactivation
121
+ * @since 0.1
122
+ * @version 1.0
123
+ */
124
+ public function is_deactivation( $key ) {
125
+ if ( isset( $_GET['addon_action'] ) && isset( $_GET['addon_id'] ) && $_GET['addon_action'] == 'deactivate' && $_GET['addon_id'] == $key )
126
+ return true;
127
+
128
+ return false;
129
+ }
130
+
131
+ /**
132
+ * Get Addons
133
+ * @since 0.1
134
+ * @version 1.0
135
+ */
136
+ public function get( $save = false ) {
137
+ $prefix = 'myCRED-addon-';
138
+ $addon_location = myCRED_ADDONS_DIR;
139
+
140
+ $installed = array();
141
+ // Search for addons. should be in addons/*/myCRED-addon-*.php
142
+ $addon_search = glob( $addon_location . "*/$prefix*.php" );
143
+ if ( !empty( $addon_search ) && $addon_search !== false ) {
144
+ foreach ( $addon_search as $filename ) {
145
+ $sub_file = str_replace( ABSPATH, '', $filename );
146
+ // Get File Name
147
+ preg_match( '/(.{1,})\/(.{1,})/', $sub_file, $matches );
148
+ $sub_file_name = $matches[2];
149
+ // Prevent Duplicates
150
+ if ( !array_key_exists( $sub_file_name, $installed ) )
151
+ $installed[$this->make_id($sub_file_name)] = $this->get_addon_info( $filename, $matches[1], $sub_file_name );
152
+ }
153
+ }
154
+ unset( $addon_search );
155
+ $installed = apply_filters( 'mycred_setup_addons', $installed );
156
+
157
+ if ( $save === true && $this->core->can_edit_plugin() ) {
158
+ $new_data = array(
159
+ 'active' => $this->active,
160
+ 'installed' => $installed
161
+ );
162
+ update_option( 'mycred_pref_addons', $new_data );
163
+ }
164
+
165
+ $this->installed = $installed;
166
+ return $installed;
167
+ }
168
+
169
+ /**
170
+ * Make ID
171
+ * @since 0.1
172
+ * @version 1.0
173
+ */
174
+ public function make_id( $id ) {
175
+ $id = str_replace( 'myCRED-addon-', '', $id );
176
+ $id = str_replace( '.php', '', $id );
177
+ $id = str_replace( '_', '-', $id );
178
+ return $id;
179
+ }
180
+
181
+ /**
182
+ * Get Addon Info
183
+ */
184
+ public function get_addon_info( $file = false, $folder = false, $sub = '' ) {
185
+ if ( !$file ) return;
186
+ // Details we want
187
+ $addon_details = array(
188
+ 'name' => 'Addon',
189
+ 'addon_uri' => 'Addon URI',
190
+ 'version' => 'Version',
191
+ 'description' => 'Description',
192
+ 'author' => 'Author',
193
+ 'author_uri' => 'Author URI'
194
+ );
195
+ $addon_data = get_file_data( $file, $addon_details );
196
+
197
+ $addon_data['file'] = $sub;
198
+ if ( $folder )
199
+ $addon_data['folder'] = $folder . '/';
200
+ else
201
+ $addon_data['folder'] = '';
202
+
203
+ return $addon_data;
204
+ }
205
+
206
+ /**
207
+ * Get Path of Addon
208
+ * @since 0.1
209
+ * @version 1.0
210
+ */
211
+ public function get_path( $key ) {
212
+ $installed = $this->installed;
213
+ if ( array_key_exists( $key, $installed ) ) {
214
+ $file = $installed[$key]['file'];
215
+ return ABSPATH . $installed[$key]['folder'] . $file;
216
+ }
217
+ return '';
218
+ }
219
+
220
+ /**
221
+ * Admin Page
222
+ * @since 0.1
223
+ * @version 1.0
224
+ */
225
+ public function admin_page() {
226
+ // Security
227
+ if ( !$this->core->can_edit_plugin( get_current_user_id() ) ) wp_die( __( 'Access Denied' ) );
228
+
229
+ // Get installed
230
+ $installed = $this->get( true );
231
+
232
+ // Message
233
+ if ( isset( $_GET['addon_action'] ) && isset( $_GET['token'] ) ) {
234
+ if ( $_GET['addon_action'] == 'activate' && wp_verify_nonce( $_GET['token'], 'myCRED-activate-addon' ) )
235
+ echo '<div class="updated"><p>' . __( 'Add-on Activated', 'mycred' ) . '</p></div>';
236
+ elseif ( $_GET['addon_action'] == 'deactivate' && wp_verify_nonce( $_GET['token'], 'myCRED-deactivate-addon' ) )
237
+ echo '<div class="error"><p>' . __( 'Add-on Deactivated', 'mycred' ) . '</p></div>';
238
+ } ?>
239
+
240
+ <div class="wrap" id="myCRED-wrap">
241
+ <div id="icon-myCRED" class="icon32"><br /></div>
242
+ <h2><?php echo '<strong>my</strong>CRED ' . __( 'Add-ons', 'mycred' ); ?></h2>
243
+ <p><?php _e( 'Add-ons can expand your current installation with further features.', 'mycred' ); ?></p>
244
+ <div class="list-items expandable-li" id="accordion">
245
+ <?php
246
+ // Loop though installed
247
+ if ( !empty( $installed ) ) {
248
+ foreach ( $installed as $key => $data ) { ?>
249
+
250
+ <h4 class="<?php if ( $this->is_active( $key ) ) echo 'active'; else echo 'inactive'; ?>"><label><?php echo $this->core->template_tags_general( $data['name'] ); ?></label></h4>
251
+ <div class="body" style="display:none;">
252
+ <div class="wrapper">
253
+ <?php $this->present_addon( $key ); ?>
254
+
255
+ </div>
256
+ </div>
257
+ <?php
258
+ }
259
+ } ?>
260
+
261
+ </div>
262
+ </div>
263
+ <?php
264
+ unset( $this );
265
+ }
266
+
267
+ /**
268
+ * Activate / Deactivate Button
269
+ * @since 0.1
270
+ * @version 1.0
271
+ */
272
+ public function activate_deactivate( $key ) {
273
+ $url = admin_url( 'admin.php' );
274
+ $args = array(
275
+ 'page' => 'myCRED_page_addons',
276
+ 'addon_id' => $key
277
+ );
278
+ if ( $this->is_active( $key ) ) {
279
+ $args['addon_action'] = 'deactivate';
280
+
281
+ $link_title = __( 'Deactivate Add-on', 'mycred' );
282
+ $link_text = __( 'Deactivate', 'mycred' );
283
+ }
284
+ else {
285
+ $args['addon_action'] = 'activate';
286
+
287
+ $link_title = __( 'Activate Add-on', 'mycred' );
288
+ $link_text = __( 'Activate', 'mycred' );
289
+ }
290
+
291
+ return '<a href="' . add_query_arg( $args, $url ) . '" title="' . $link_title . '" class="button button-large button-primary mycred-action">' . $link_text . '</a>';
292
+ }
293
+
294
+ /**
295
+ * Add-on Details
296
+ * @since 0.1
297
+ * @version 1.0
298
+ */
299
+ public function addon_links( $key ) {
300
+ $data = $this->installed[$key];
301
+
302
+ // Add-on Details
303
+ $info = array();
304
+ if ( isset( $data['version'] ) )
305
+ $info[] = __( 'Version', 'mycred' ) . ' ' . $data['version'];
306
+
307
+ if ( isset( $data['author_uri'] ) && !empty( $data['author_uri'] ) && isset( $data['author'] ) && !empty( $data['author'] ) )
308
+ $info[] = __( 'By', 'mycred' ) . ' <a href="' . $data['author_uri'] . '" title="' . __( 'View Authors Website', 'mycred' ) . '">' . $data['author'] . '</a>';
309
+
310
+ if ( isset( $data['addon_uri'] ) && !empty( $data['addon_uri'] ) )
311
+ $info[] = ' <a href="' . $data['addon_uri'] . '" title="' . __( 'View Add-ons Website', 'mycred' ) . '">' . __( 'Visit Website', 'mycred' ) . '</a>';
312
+
313
+ unset( $data );
314
+ if ( !empty( $info ) )
315
+ return implode( ' | ', $info );
316
+ else
317
+ return $info;
318
+ }
319
+
320
+ /**
321
+ * Preset Add-on details
322
+ * @since 0.1
323
+ * @version 1.0
324
+ */
325
+ public function present_addon( $key ) {
326
+ $addon_data = $this->installed[$key]; ?>
327
+
328
+ <div class="description h2"><?php echo $this->core->template_tags_general( $addon_data['description'] ); ?></div>
329
+ <p class="links"><?php echo $this->addon_links( $key ); ?></p>
330
+ <p><?php echo $this->activate_deactivate( $key ); ?></p>
331
+ <div class="clear">&nbsp;</div>
332
+ <?php
333
+ }
334
+ }
335
+ }
336
+ ?>
modules/mycred-module-general.php ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_General class
5
+ * @since 0.1
6
+ * @version 1.0
7
+ */
8
+ if ( !class_exists( 'myCRED_General' ) ) {
9
+ class myCRED_General extends myCRED_Module {
10
+
11
+ /**
12
+ * Construct
13
+ */
14
+ function __construct() {
15
+ parent::__construct( 'myCRED_General', array(
16
+ 'module_name' => 'general',
17
+ 'option_id' => 'mycred_pref_core',
18
+ 'labels' => array(
19
+ 'menu' => __( 'Settings', 'mycred' ),
20
+ 'page_title' => __( 'Settings', 'mycred' ),
21
+ 'page_header' => __( 'Settings', 'mycred' )
22
+ ),
23
+ 'screen_id' => 'myCRED_page_settings',
24
+ 'accordion' => true,
25
+ 'menu_pos' => 99
26
+ ) );
27
+ }
28
+
29
+ /**
30
+ * Admin Page
31
+ * @since 0.1
32
+ * @version 1.0
33
+ */
34
+ public function admin_page() {
35
+ if ( !$this->core->can_edit_plugin( get_current_user_id() ) ) wp_die( __( 'Access Denied' ) );
36
+
37
+ // General Settings
38
+ $general = $this->general;
39
+
40
+ // Updated settings
41
+ if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] == true ) {
42
+ echo '<div class="updated settings-error"><p>' . __( 'Settings Updated', 'mycred' ) . '</p></div>';
43
+ } ?>
44
+
45
+ <div class="wrap list" id="myCRED-wrap">
46
+ <div id="icon-myCRED" class="icon32"><br /></div>
47
+ <h2><?php echo '<strong>my</strong>CRED ' . __( 'Settings', 'mycred' ); ?></h2>
48
+ <div class="tr"><?php echo __( 'Version', 'mycred' ) . ' ' . myCRED_VERSION; ?></div>
49
+ <form method="post" action="options.php">
50
+ <?php settings_fields( 'myCRED-general' ); ?>
51
+
52
+ <div class="list-items expandable-li" id="accordion">
53
+ <h4 style="color:#333;"><?php _e( 'Core Settings', 'mycred' ); ?></h4>
54
+ <div class="body" style="display:none;">
55
+ <label class="subheader"><?php _e( 'Name', 'mycred' ); ?></label>
56
+ <ol id="myCRED-settings-name" class="inline">
57
+ <li>
58
+ <label for="<?php echo $this->field_id( array( 'name' => 'singular' ) ); ?>"><?php _e( 'Name (Singular)', 'mycred' ); ?></label>
59
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'name' => 'singular' ) ); ?>" id="<?php echo $this->field_id( array( 'name' => 'singular' ) ); ?>" value="<?php echo $this->core->name['singular']; ?>" /></div>
60
+ <div class="description"><?php _e( 'Accessible though the %singular% template tag.' ); ?></div>
61
+ </li>
62
+ <li>
63
+ <label for="<?php echo $this->field_id( array( 'name' => 'plural' ) ); ?>"><?php _e( 'Name (Plural)', 'mycred' ); ?></label>
64
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'name' => 'plural' ) ); ?>" id="<?php echo $this->field_id( array( 'name' => 'plural' ) ); ?>" value="<?php echo $this->core->name['plural']; ?>" /></div>
65
+ <div class="description"><?php _e( 'Accessible though the %plural% template tag.' ); ?></div>
66
+ </li>
67
+ <li class="block">
68
+ <span class="description"><strong><?php _e( 'Tip', 'mycred' ); ?>:</strong> <?php _e( 'Adding an underscore at the beginning of template tag for names will return them in lowercase. i.e. %_singular%', 'mycred' ); ?></span>
69
+ </li>
70
+ </ol>
71
+ <label class="subheader"><?php _e( 'Presentation', 'mycred' ); ?></label>
72
+ <ol id="myCRED-settings-layout" class="inline">
73
+ <li>
74
+ <label for="<?php echo $this->field_id( 'before' ); ?>"><?php _e( 'Prefix', 'mycred' ); ?></label>
75
+ <div class="h2"><input type="text" size="5" name="<?php echo $this->field_name( 'before' ); ?>" id="<?php echo $this->field_id( 'before' ); ?>" value="<?php echo $this->core->before; ?>" /></div>
76
+ </li>
77
+ <li>
78
+ <label>&nbsp;</label>
79
+ <div class="h2"><?php echo $this->core->format_number( 1000 ); ?></div>
80
+ </li>
81
+ <li>
82
+ <label for="<?php echo $this->field_id( 'after' ); ?>"><?php _e( 'Suffix', 'mycred' ); ?></label>
83
+ <div class="h2"><input type="text" size="5" name="<?php echo $this->field_name( 'after' ); ?>" id="<?php echo $this->field_id( 'after' ); ?>" value="<?php echo $this->core->after; ?>" /></div>
84
+ </li>
85
+ <li class="block">
86
+ <label for="myCRED-prefix"><?php echo _n( 'Separator', 'Separators', ( (int) $this->core->format['decimals'] > 0 ) ? 2 : 1, 'mycred' ); ?></label>
87
+ <div class="h2">1 <input type="text" size="1" maxlength="1" name="<?php echo $this->field_name( array( 'format' => 'separators' ) ); ?>[thousand]" id="<?php echo $this->field_id( array( 'format' => 'separators' ) ); ?>-thousand" value="<?php echo $this->core->format['separators']['thousand']; ?>" /> 000 <input type="<?php if ( (int) $this->core->format['decimals'] > 0 ) echo 'text'; else echo 'hidden'; ?>" size="1" maxlength="1" name="<?php echo $this->field_name( array( 'format' => 'separators' ) ); ?>[decimal]" id="<?php echo $this->field_id( array( 'format' => 'separators' ) ); ?>-decimal" value="<?php echo $this->core->format['separators']['decimal']; ?>" /><?php if ( (int) $this->core->format['decimals'] > 0 ) echo ' ' . str_repeat( '0', $this->core->format['decimals'] ); ?></div>
88
+ </li>
89
+ </ol>
90
+ <label class="subheader"><?php _e( 'Security', 'mycred' ); ?></label>
91
+ <ol id="myCRED-settings-security" class="inline">
92
+ <li>
93
+ <label for="<?php echo $this->field_id( array( 'caps' => 'plugin' ) ); ?>"><?php _e( 'Edit Settings', 'mycred' ); ?></label>
94
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'caps' => 'plugin' ) ); ?>" id="<?php echo $this->field_id( array( 'caps' => 'plugin' ) ); ?>" value="<?php echo $this->core->caps['plugin']; ?>" /></div>
95
+ <div class="description"><?php _e( 'Capability to check for.' ); ?></div>
96
+ </li>
97
+ <li>
98
+ <label for="<?php echo $this->field_id( array( 'caps' => 'creds' ) ); ?>"><?php echo $this->core->template_tags_general( __( 'Edit Users %plural%', 'mycred' ) ); ?></label>
99
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'caps' => 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'caps' => 'creds' ) ); ?>" value="<?php echo $this->core->caps['creds']; ?>" /></div>
100
+ <div class="description"><?php _e( 'Capability to check for.' ); ?></div>
101
+ </li>
102
+ </ol>
103
+ <label class="subheader"><?php _e( 'Excludes', 'mycred' ); ?></label>
104
+ <ol id="myCRED-settings-excludes">
105
+ <li>
106
+ <input type="checkbox" name="<?php echo $this->field_name( array( 'exclude' => 'plugin_editors' ) ); ?>" id="<?php echo $this->field_id( array( 'exclude' => 'plugin_editors' ) ); ?>" <?php checked( $this->core->exclude['plugin_editors'], 1 ); ?> value="1" />
107
+ <label for="<?php echo $this->field_id( array( 'exclude' => 'plugin_editors' ) ); ?>"><?php _e( 'Exclude those who can "Edit Settings".', 'mycred' ); ?></label>
108
+ </li>
109
+ <li>
110
+ <input type="checkbox" name="<?php echo $this->field_name( array( 'exclude' => 'cred_editors' ) ); ?>" id="<?php echo $this->field_id( array( 'exclude' => 'cred_editors' ) ); ?>" <?php checked( $this->core->exclude['cred_editors'], 1 ); ?> value="1" />
111
+ <label for="<?php echo $this->field_id( array( 'exclude' => 'cred_editors' ) ); ?>"><?php echo $this->core->template_tags_general( __( 'Exclude those who can "Edit Users %plural%".', 'mycred' ) ); ?></label>
112
+ </li>
113
+ <li class="empty">&nbsp;</li>
114
+ <li>
115
+ <label for="<?php echo $this->field_id( array( 'exclude' => 'list' ) ); ?>"><?php _e( 'Exclude the following user IDs:', 'mycred' ); ?></label>
116
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'exclude' => 'list' ) ); ?>" id="<?php echo $this->field_id( array( 'exclude' => 'list' ) ); ?>" value="<?php echo $this->core->exclude['list']; ?>" class="long" /></div>
117
+ <div class="description"><?php _e( 'Comma separated list of user ids to exclude. No spaces allowed!' ); ?></div>
118
+ </li>
119
+ </ol>
120
+ <label class="subheader"><?php _e( 'Rankings', 'mycred' ); ?></label>
121
+ <ol id="myCRED-settings-excludes">
122
+ <li>
123
+ <input type="radio" name="<?php echo $this->field_name( array( 'frequency' => 'rate' ) ); ?>" id="<?php echo $this->field_id( array( 'frequency' => 'always' ) ); ?>" <?php checked( $this->core->frequency['rate'], 'always' ); ?> value="always" />
124
+ <label for="<?php echo $this->field_id( array( 'frequency' => 'always' ) ); ?>"><?php _e( 'Update rankings each time a users balance changes.', 'mycred' ); ?></label>
125
+ </li>
126
+ <li>
127
+ <input type="radio" name="<?php echo $this->field_name( array( 'frequency' => 'rate' ) ); ?>" id="<?php echo $this->field_id( array( 'frequency' => 'daily' ) ); ?>" <?php checked( $this->core->frequency['rate'], 'daily' ); ?> value="daily" />
128
+ <label for="<?php echo $this->field_id( array( 'frequency' => 'daily' ) ); ?>"><?php _e( 'Update rankings once a day.', 'mycred' ); ?></label>
129
+ </li>
130
+ <li>
131
+ <input type="radio" name="<?php echo $this->field_name( array( 'frequency' => 'rate' ) ); ?>" id="<?php echo $this->field_id( array( 'frequency' => 'weekly' ) ); ?>" <?php checked( $this->core->frequency['rate'], 'weekly' ); ?> value="weekly" />
132
+ <label for="<?php echo $this->field_id( array( 'frequency' => 'weekly' ) ); ?>"><?php _e( 'Update rankings once a week.', 'mycred' ); ?></label>
133
+ </li>
134
+ <li>
135
+ <input type="radio" name="<?php echo $this->field_name( array( 'frequency' => 'rate' ) ); ?>" id="<?php echo $this->field_id( array( 'frequency' => 'ondate' ) ); ?>" <?php checked( $this->core->frequency['rate'], 'date' ); ?> value="date" />
136
+ <label for="<?php echo $this->field_id( array( 'frequency' => 'ondate' ) ); ?>"><?php _e( 'Update rankings on a specific date.', 'mycred' ); ?></label>
137
+ </li>
138
+ <li class="empty">&nbsp;</li>
139
+ <li>
140
+ <label for="<?php echo $this->field_id( array( 'frequency' => 'date' ) ); ?>"><?php _e( 'Date', 'mycred' ); ?></label>
141
+ <div class="h2"><input type="date" name="<?php echo $this->field_name( array( 'frequency' => 'date' ) ); ?>" id="<?php echo $this->field_id( array( 'frequency' => 'date' ) ); ?>" value="<?php echo $this->core->frequency['date'] ?>" class="medium" /></div>
142
+ </li>
143
+ </ol>
144
+ <?php do_action( 'mycred_core_prefs', $this ); ?>
145
+
146
+ </div>
147
+ <?php do_action( 'mycred_after_core_prefs', $this ); ?>
148
+
149
+ </div>
150
+ <?php submit_button( __( 'Update Settings', 'mycred' ), 'primary large' ); ?>
151
+
152
+ </form>
153
+ <?php do_action( 'mycred_bottom_settings_page', $this ); ?>
154
+
155
+ </div>
156
+ <?php
157
+ }
158
+
159
+ /**
160
+ * Maybe Whitespace
161
+ * Since we want to allow a single whitespace in the string and sanitize_text_field() removes this whitespace
162
+ * this little method will make sure that whitespace is still there and that we still can sanitize the field.
163
+ * @since 0.1
164
+ * @version 1.0
165
+ */
166
+ public function maybe_whitespace( $string ) {
167
+ if ( strlen( $string ) > 1 )
168
+ return '';
169
+
170
+ return $string;
171
+ }
172
+
173
+ /**
174
+ * Sanititze Settings
175
+ * @filter 'mycred_save_core_prefs'
176
+ * @since 0.1
177
+ * @version 1.0
178
+ */
179
+ public function sanitize_settings( $post ) {
180
+ $new_data = array();
181
+
182
+ // Format
183
+ $new_data['cred_id'] = $this->core->cred_id;
184
+ $new_data['format'] = $this->core->format;
185
+
186
+ $new_data['format']['separators']['decimal'] = $this->maybe_whitespace( $post['format']['separators']['decimal'] );
187
+ $new_data['format']['separators']['thousand'] = $this->maybe_whitespace( $post['format']['separators']['thousand'] );
188
+
189
+ // Name
190
+ $new_data['name'] = array(
191
+ 'singular' => sanitize_text_field( $post['name']['singular'] ),
192
+ 'plural' => sanitize_text_field( $post['name']['plural'] )
193
+ );
194
+
195
+ // Look
196
+ $new_data['before'] = sanitize_text_field( $post['before'] );
197
+ $new_data['after'] = sanitize_text_field( $post['after'] );
198
+
199
+ // Capabilities
200
+ $new_data['caps'] = array(
201
+ 'plugin' => sanitize_text_field( $post['caps']['plugin'] ),
202
+ 'creds' => sanitize_text_field( $post['caps']['creds'] )
203
+ );
204
+
205
+ // Excludes
206
+ $new_data['exclude'] = array(
207
+ 'plugin_editors' => ( isset( $post['exclude']['plugin_editors'] ) ) ? true : false,
208
+ 'cred_editors' => ( isset( $post['exclude']['cred_editors'] ) ) ? true : false,
209
+ 'list' => sanitize_text_field( $post['exclude']['list'] )
210
+ );
211
+
212
+ // Frequency
213
+ $new_data['frequency'] = array(
214
+ 'rate' => sanitize_text_field( $post['frequency']['rate'] ),
215
+ 'date' => $post['frequency']['date']
216
+ );
217
+
218
+ $new_data = apply_filters( 'mycred_save_core_prefs', $new_data, $post, $this );
219
+ return $new_data;
220
+ }
221
+ }
222
+ }
223
+ ?>
modules/mycred-module-help.php ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Help class
5
+ * Adds contextual help for myCRED pages and features.
6
+ * @since 0.1
7
+ * @version 1.0
8
+ */
9
+ if ( !class_exists( 'myCRED_Help' ) ) {
10
+ class myCRED_Help {
11
+
12
+ public $is_admin;
13
+ public $core;
14
+
15
+ /**
16
+ * Construct
17
+ */
18
+ function __construct() {
19
+ if ( is_admin() )
20
+ $this->is_admin = true;
21
+
22
+ $this->is_admin = false;
23
+ }
24
+
25
+ /**
26
+ * Hook Into Contextual Help
27
+ * @since 0.1
28
+ * @version 1.0
29
+ */
30
+ public function load() {
31
+ if ( $this->is_admin ) return;
32
+
33
+ add_filter( 'contextual_help', array( $this, 'run' ), 10, 3 );
34
+ }
35
+
36
+ /**
37
+ * Run Appropriate Help
38
+ * @since 0.1
39
+ * @version 1.0
40
+ */
41
+ public function run( $contextual_help, $screen_id, $screen ) {
42
+ $this->core = mycred_get_settings();
43
+ if ( $screen_id == 'toplevel_page_myCRED' )
44
+ $this->log_page( $screen );
45
+ elseif ( $screen_id == 'mycred_page_myCRED_page_hooks' )
46
+ $this->hooks_page( $screen );
47
+ elseif ( $screen_id == 'widgets' )
48
+ $this->widgets( $screen );
49
+ elseif ( $screen_id == 'user-edit' || $screen_id == 'profile' )
50
+ $this->users( $screen );
51
+ elseif ( $screen_id == 'mycred_page_myCRED_page_settings' )
52
+ $this->settings_page( $screen );
53
+
54
+ do_action( 'mycred_help', $screen_id, $screen );
55
+
56
+ return $contextual_help;
57
+ }
58
+
59
+ /**
60
+ * Log Page Help
61
+ * @since 0.1
62
+ * @version 1.0
63
+ */
64
+ public function log_page( $screen ) {
65
+ $screen->add_help_tab( array(
66
+ 'id' => 'mycred-log',
67
+ 'title' => __( 'The Log', 'mycred' ),
68
+ 'content' => '
69
+ <p>' . $this->core->template_tags_general( __( 'myCRED logs everything giving you a complete overview of %_plural% awarded or deducted from your users. The Log page can be filtered by user, date or reference and we have included a search function for you.', 'mycred' ) ) . '</p>
70
+ <p>' . __( 'You can select how many log entries you want to show under "Screen Options". By default you will be shown 10 entires.', 'mycred' ) . '</p>
71
+ <p><strong>' . __( 'Filter by Date', 'mycred' ) . '</strong></p>
72
+ <p>' . __( 'You can select to show log entries for: Today, Yesterday, This Week or This Month.', 'mycred' ) . '</p>
73
+ <p><strong>' . __( 'Filter by Reference', 'mycred' ) . '</strong></p>
74
+ <p>' . __( 'Each time a log entry is made a reference is used to identify where or why points were awarded or deducted.', 'mycred' ) . '</p>
75
+ <p><strong>' . __( 'Filter by User', 'mycred' ) . '</strong></p>
76
+ <p>' . __( 'You can select to show log entries for a specific user. Users with no log entries are not included.', 'mycred' ) . '</p>'
77
+ ) );
78
+ }
79
+
80
+ /**
81
+ * Hook Page Help
82
+ * @since 0.1
83
+ * @version 1.0
84
+ */
85
+ public function hooks_page( $screen ) {
86
+ $screen->add_help_tab( array(
87
+ 'id' => 'mycred-hooks',
88
+ 'title' => __( 'Hooks', 'mycred' ),
89
+ 'content' => '
90
+ <p>' . $this->core->template_tags_general( __( 'Each instance where users might gain or loose %_plural%, are called hooks. Hooks can relate to WordPress specific actions or any third party plugin action that myCRED supports.', 'mycred' ) ) . '</p>
91
+ <p>' . $this->core->template_tags_general( __( 'A hook can relate to a specific instance or several instances. You can disable specific instances in a hook by awarding zero %_plural%.', 'mycred' ) ) . '</p>'
92
+ ) );
93
+ $screen->add_help_tab( array(
94
+ 'id' => 'mycred-hooks-others',
95
+ 'title' => __( 'Third Party Plugins', 'mycred' ),
96
+ 'content' => '
97
+ <p>' . __( 'myCRED supports several third party plugins by default. These hooks are only available / visible if the plugin has been installed and enabled.', 'mycred' ) . '</p>
98
+ <p><strong>' . __( 'Supported Plugins:', 'mycred' ) . '</strong></p>
99
+ <ul>
100
+ <li><a href="http://wordpress.org/extend/plugins/contact-form-7/" target="_blank">Contact Form 7</a></li>
101
+ <li><a href="http://wordpress.org/extend/plugins/invite-anyone/" target="_blank">Invite Anyone Plugin</a></li>
102
+ </ul>'
103
+ ) );
104
+ $screen->add_help_tab( array(
105
+ 'id' => 'mycred-hooks-template-tags',
106
+ 'title' => __( 'Template Tags', 'mycred' ),
107
+ 'content' => '
108
+ <p><strong>' . __( 'General:', 'mycred' ) . '</strong></p>
109
+ <p><code>%singular%</code> ' . $this->core->template_tags_general( __( 'Singular %plural% Name.', 'mycred' ) ) . '<br />
110
+ <code>%_singular%</code> ' . $this->core->template_tags_general( __( 'Singular %plural% Name in lowercase.', 'mycred' ) ) . '<br />
111
+ <code>%plural%</code> ' . $this->core->template_tags_general( __( 'Plural %plural% Name.', 'mycred' ) ) . '<br />
112
+ <code>%_plural%</code> ' . $this->core->template_tags_general( __( 'Plural %plural% Name in lowercase.', 'mycred' ) ) . '<br />
113
+ <code>%login_url%</code> ' . __( 'The login URL without redirection.', 'mycred' ) . '<br />
114
+ <code>%login_url_here%</code> ' . __( 'The login URL with redirection to current page.', 'mycred' ) . '</p>
115
+ <p><strong>' . __( 'Post:', 'mycred' ) . '</strong></p>
116
+ <p><code>%post_title%</code> ' . __( 'The posts title.', 'mycred' ) . '<br />
117
+ <code>%post_url%</code> ' . __( 'The posts URL address.', 'mycred' ) . '<br />
118
+ <code>%post_type%</code> ' . __( 'The post type.', 'mycred' ) . '<br />
119
+ <code>%link_with_title%</code> ' . __( 'The posts permalink with the post title as title.', 'mycred' ) . '</p>
120
+ <p><strong>' . __( 'User:', 'mycred' ) . '</strong></p>
121
+ <p><code>%user_id%</code> ' . __( 'The users ID.', 'mycred' ) . '<br />
122
+ <code>%user_name%</code> ' . __( 'The users "username".', 'mycred' ) . '<br />
123
+ <code>%user_name_en%</code> ' . __( 'The users "username" URL encoded.', 'mycred' ) . '<br />
124
+ <code>%display_name%</code> ' . __( 'The users display name.', 'mycred' ) . '<br />
125
+ <code>%user_profile_url%</code> ' . __( 'The users profile URL.', 'mycred' ) . '<br />
126
+ <code>%user_profile_link%</code> ' . __( 'The users profile link with the display name as title.', 'mycred' ) . '</p>
127
+ <p><strong>' . __( 'Comment:', 'mycred' ) . '</strong></p>
128
+ <p><code>%comment_id%</code> ' . __( 'The comment ID.', 'mycred' ) . '<br />
129
+ <code>%c_post_id%</code> ' . __( 'The post id where the comment was made.', 'mycred' ) . '<br />
130
+ <code>%c_post_title%</code> ' . __( 'The post title where the comment was made.', 'mycred' ) . '<br />
131
+ <code>%c_post_url%</code> ' . __( 'The post URL address where the comment was made.', 'mycred' ) . '<br />
132
+ <code>%c_link_with_title%</code> ' . __( 'Link to the post where the comment was made.', 'mycred' ) . '</p>'
133
+ ) );
134
+ }
135
+
136
+ /**
137
+ * Widgets Help
138
+ * @since 0.1
139
+ * @version 1.0
140
+ */
141
+ public function widgets( $screen ) {
142
+ $screen->add_help_tab( array(
143
+ 'id' => 'mycred-balance',
144
+ 'title' => __( 'myCRED Balance Template Tags', 'mycred' ),
145
+ 'content' => '
146
+ <h3>' . __( 'Available Template Tags', 'mycred' ) . '</h3>
147
+ <p><strong>' . __( 'Layout:', 'mycred' ) . '</strong></p>
148
+ <p><code>%cred%</code> ' . __( 'Balance amount in plain format.', 'mycred' ) . '<br />
149
+ <code>%cred_f%</code> ' . __( 'Balance amount formatted with prefix and/or suffix.', 'mycred' ) . '</p>
150
+ <p><strong>' . __( 'Rank Format:', 'mycred' ) . '</strong></p>
151
+ <p><code>%rank%</code> ' . __( 'The users ranking.', 'mycred' ) . '</p>
152
+ <p><strong>' . __( 'History Title:', 'mycred' ) . '</strong></p>
153
+ <p><code>%singular%</code> ' . __( 'or', 'mycred' ) . ' <code>%_singular%</code> ' . $this->core->template_tags_general( __( 'Singular %plural% Name.', 'mycred' ) ) . '<br />
154
+ <code>%plural%</code> ' . __( 'or', 'mycred' ) . ' <code>%_plural%</code> ' . $this->core->template_tags_general( __( 'Plural %plural% Name.', 'mycred' ) ) . '</p>
155
+ <p><strong>' . __( 'Row Layout:', 'mycred' ) . '</strong></p>
156
+ <p><code>%cred%</code> ' . __( 'Balance amount in plain format.', 'mycred' ) . '<br />
157
+ <code>%cred_f%</code> ' . __( 'Balance amount formatted with prefix and/or suffix.', 'mycred' ) . '<br />
158
+ <code>%singular%</code> ' . __( 'or', 'mycred' ) . ' <code>%_singular%</code> ' . $this->core->template_tags_general(__( 'Singular %plural% Name.', 'mycred' ) ) . '<br />
159
+ <code>%plural%</code> ' . __( 'or', 'mycred' ) . ' <code>%_plural%</code> ' . $this->core->template_tags_general(__( 'Plural %plural% Name.', 'mycred' ) ) . '<br />
160
+ <code>%date%</code> ' . __( 'Log entry date.', 'mycred' ) . '<br />
161
+ <code>%entry%</code> ' . __( 'The log entry.', 'mycred' ) . '</p>
162
+ <p><strong>' . __( 'Message:', 'mycred' ) . '</strong></p>
163
+ <p><code>%login_url%</code> ' . __( 'The login URL without redirection.', 'mycred' ) . '<br />
164
+ <code>%login_url_here%</code> ' . __( 'The login URL with redirection to current page.', 'mycred' ) . '</p>'
165
+ ) );
166
+ $screen->add_help_tab( array(
167
+ 'id' => 'mycred-list',
168
+ 'title' => __('myCRED List Template Tags'),
169
+ 'content' => '
170
+ <h3>' . __( 'Available Template Tags', 'mycred' ) . '</h3>
171
+ <p><strong>' . __( 'Row Layout:', 'mycred' ) . '</strong></p>
172
+ <p><code>%rank%</code> ' . __( 'The users ranking.', 'mycred' ) . '<br />
173
+ <code>%cred%</code> ' . __( 'Balance amount in plain format.', 'mycred' ) . '<br />
174
+ <code>%cred_f%</code> ' . __( 'Balance amount formatted with prefix and/or suffix.', 'mycred' ) . '<br />
175
+ <code>%singular%</code> ' . __( 'or', 'mycred' ) . ' <code>%_singular%</code> ' . $this->core->template_tags_general( __( 'Singular %plural% Name.', 'mycred' ) ) . '<br />
176
+ <code>%plural%</code> ' . __( 'or', 'mycred' ) . ' <code>%_plural%</code> ' . $this->core->template_tags_general( __( 'Plural %plural% Name.', 'mycred' ) ) . '<br />
177
+ <code>%date%</code> ' . __( 'Log entry date.', 'mycred' ) . '<br />
178
+ <code>%entry%</code> ' . __( 'The log entry.', 'mycred' ) . '<br />
179
+ <code>%display_name%</code> ' . __( 'Users display name.', 'mycred' ) . '<br />
180
+ <code>%user_profile_url%</code> ' . __( 'Users profile URL.', 'mycred' ) . '<br />
181
+ <code>%user_name%</code> ' . __( 'Users "username".', 'mycred' ) . '<br />
182
+ <code>%user_name_en%</code> ' . __( 'Users "username" URL encoded.', 'mycred' ) . '<br />
183
+ <code>%user_profile_link%</code> ' . __( 'Link to users profile with their display name as title.', 'mycred' ) . '</p>'
184
+ ) );
185
+ }
186
+
187
+ /**
188
+ * Edit Users / Profile Help
189
+ * @since 0.1
190
+ * @version 1.0
191
+ */
192
+ public function users( $screen ) {
193
+ $screen->add_help_tab( array(
194
+ 'id' => 'mycred-users',
195
+ 'title' => $this->core->template_tags_general( __( 'Editing %plural%', 'mycred' ) ),
196
+ 'content' => '
197
+ <p>' . $this->core->template_tags_general( __( 'You can adjust this users %_plural% by giving a positive or negative amount and a log description. Remember that plugin and point editors will always be able to adjust their own balance.', 'mycred' ) ) . '</p>
198
+ <p>' . __( 'If the option to edit a users balance is missing the user is set to be excluded from using myCRED.', 'mycred' ) . '</p>'
199
+ ) );
200
+ }
201
+
202
+ /**
203
+ * myCRED Settings Page Help
204
+ * @since 0.1
205
+ * @version 1.0
206
+ */
207
+ public function settings_page( $screen ) {
208
+ $screen->add_help_tab( array(
209
+ 'id' => 'mycred-settings',
210
+ 'title' => __( 'Core', 'mycred' ),
211
+ 'content' => '
212
+ <p>' . $this->core->template_tags_general( __( 'On this page, you can edit all myCRED settings.', 'mycred' ) ) . '</p>
213
+ <p><strong>' . __( 'Core Settings', 'mycred' ) . '</strong></p>
214
+ <p>' . __( 'Here you can name your installation along with setting your layout and format. You can use any name as long as you set both the singular and plural format and you can change the name at any time.', 'mycred' ) . '</p>'
215
+ ) );
216
+ }
217
+ }
218
+ }
219
+
220
+ ?>
modules/mycred-module-hooks.php ADDED
@@ -0,0 +1,1103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Hooks class
5
+ * @since 0.1
6
+ * @version 1.0
7
+ */
8
+ if ( !class_exists( 'myCRED_Hooks' ) ) {
9
+ class myCRED_Hooks extends myCRED_Module {
10
+
11
+ /**
12
+ * Construct
13
+ */
14
+ function __construct() {
15
+ parent::__construct( 'myCRED_Hooks', array(
16
+ 'module_name' => 'hooks',
17
+ 'option_id' => 'mycred_pref_hooks',
18
+ 'defaults' => array(
19
+ 'installed' => array(),
20
+ 'active' => array(),
21
+ 'hook_prefs' => array()
22
+ ),
23
+ 'labels' => array(
24
+ 'menu' => __( 'Hooks', 'mycred' ),
25
+ 'page_title' => __( 'Hooks', 'mycred' ),
26
+ 'page_header' => __( 'Hooks', 'mycred' )
27
+ ),
28
+ 'screen_id' => 'myCRED_page_hooks',
29
+ 'accordion' => true,
30
+ 'menu_pos' => 20
31
+ ) );
32
+ }
33
+
34
+ /**
35
+ * Load Hooks
36
+ * @since 0.1
37
+ * @version 1.0
38
+ */
39
+ public function module_init() {
40
+ if ( !empty( $this->installed ) ) {
41
+ foreach ( $this->installed as $key => $gdata ) {
42
+ if ( $this->is_active( $key ) && isset( $gdata['callback'] ) ) {
43
+ $this->call( 'run', $gdata['callback'] );
44
+ }
45
+ }
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Call
51
+ * Either runs a given class method or function.
52
+ * @since 0.1
53
+ * @version 1.0
54
+ */
55
+ public function call( $call, $callback, $return = NULL ) {
56
+ // Class
57
+ if ( is_array( $callback ) && class_exists( $callback[0] ) ) {
58
+ $class = $callback[0];
59
+ $methods = get_class_methods( $class );
60
+ if ( in_array( $call, $methods ) ) {
61
+ $new = new $class( ( isset( $this->hook_prefs ) ) ? $this->hook_prefs : $this );
62
+ return $new->$call( $return );
63
+ }
64
+ }
65
+ // Function
66
+ if ( !is_array( $callback ) ) {
67
+ if ( function_exists( $callback ) ) {
68
+ if ( $return !== NULL )
69
+ return call_user_func( $callback, $return, $this );
70
+ else
71
+ return call_user_func( $callback, $this );
72
+ }
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Get Hooks
78
+ * @since 0.1
79
+ * @version 1.0
80
+ */
81
+ public function get( $save = false ) {
82
+ // Defaults
83
+ $installed['registration'] = array(
84
+ 'title' => __( '%plural% for registrations' ),
85
+ 'description' => __( 'Award %_plural% for users joining your website.', 'mycred' ),
86
+ 'callback' => array( 'myCRED_Hook_Registration' )
87
+ );
88
+ $installed['logging_in'] = array(
89
+ 'title' => __( '%plural% for logins' ),
90
+ 'description' => __( 'Award %_plural% for logging in to your website. You can also set an optional limit.', 'mycred' ),
91
+ 'callback' => array( 'myCRED_Hook_Logging_In' )
92
+ );
93
+ $installed['publishing_content'] = array(
94
+ 'title' => __( '%plural% for publishing content' ),
95
+ 'description' => __( 'Award %_plural% for publishing content on your website. If your custom post type is not shown bellow, make sure it is set to "Public".', 'mycred' ),
96
+ 'callback' => array( 'myCRED_Hook_Publishing_Content' )
97
+ );
98
+ $installed['comments'] = array(
99
+ 'title' => __( '%plural% for comments' ),
100
+ 'description' => __( 'Award %_plural% for making comments.', 'mycred' ),
101
+ 'callback' => array( 'myCRED_Hook_Comments' )
102
+ );
103
+
104
+ // Prep for Invite Anyone Plugin
105
+ if ( function_exists( 'invite_anyone_init' ) ) {
106
+ $installed['invite_anyone'] = array(
107
+ 'title' => __( 'Invite Anyone Plugin' ),
108
+ 'description' => __( 'Awards %_plural% for sending invitations and/or %_plural% if the invite is accepted.', 'mycred' ),
109
+ 'callback' => array( 'myCRED_Invite_Anyone' )
110
+ );
111
+ }
112
+
113
+ // Prep for Contact Form 7
114
+ if ( function_exists( 'wpcf7' ) ) {
115
+ $installed['contact_form7'] = array(
116
+ 'title' => __( 'Contact Form 7 Form Submissions' ),
117
+ 'description' => __( 'Awards %_plural% for successful form submissions (by logged in users).', 'mycred' ),
118
+ 'callback' => array( 'myCRED_Contact_Form7' )
119
+ );
120
+ }
121
+
122
+ $installed = apply_filters( 'mycred_setup_hooks', $installed );
123
+
124
+ if ( $save === true && $this->core->can_edit_plugin() ) {
125
+ $new_data = array(
126
+ 'active' => $this->active,
127
+ 'installed' => $installed,
128
+ 'hook_prefs' => $this->hook_prefs
129
+ );
130
+ update_option( 'mycred_pref_hooks', $new_data );
131
+ }
132
+
133
+ $this->installed = $installed;
134
+ return $installed;
135
+ }
136
+
137
+ /**
138
+ * Admin Page
139
+ * @since 0.1
140
+ * @version 1.0
141
+ */
142
+ public function admin_page() {
143
+ // Security
144
+ if ( !$this->core->can_edit_plugin( get_current_user_id() ) ) wp_die( __( 'Access Denied' ) );
145
+
146
+ // Get installed
147
+ $installed = $this->get( true );
148
+
149
+ // Message
150
+ if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] == true ) {
151
+ echo '<div class="updated settings-error"><p>' . __( 'Settings Updated', 'mycred' ) . '</p></div>';
152
+ } ?>
153
+
154
+ <div class="wrap" id="myCRED-wrap">
155
+ <div id="icon-myCRED" class="icon32"><br /></div>
156
+ <h2><?php echo '<strong>my</strong>CRED ' . __( 'Hooks', 'mycred' ); ?></h2>
157
+ <p><?php echo $this->core->template_tags_general( __( 'Hooks are instances where %_plural% are awarded or deducted from a user, depending on their actions around your website.', 'mycred' ) ); ?></p>
158
+ <form method="post" action="options.php">
159
+ <?php settings_fields( 'myCRED-hooks' ); ?>
160
+
161
+ <!-- Loop though Hooks -->
162
+ <div class="list-items expandable-li" id="accordion">
163
+ <?php if ( !empty( $installed ) ) {
164
+ foreach ( $installed as $key => $data ) { ?>
165
+
166
+ <h4 class="<?php if ( $this->is_active( $key ) ) echo 'active'; else echo 'inactive'; ?>"><label><?php echo $this->core->template_tags_general( $data['title'] ); ?></label></h4>
167
+ <div class="body" style="display:none;">
168
+ <p><?php echo nl2br( $this->core->template_tags_general( $data['description'] ) ); ?></p>
169
+ <label class="subheader"><?php _e( 'Enable', 'mycred' ); ?></label>
170
+ <ol>
171
+ <li>
172
+ <input type="checkbox" name="mycred_pref_hooks[active][]" id="mycred-hook-<?php echo $key; ?>" value="<?php echo $key; ?>"<?php if ( $this->is_active( $key ) ) echo ' checked="checked"'; ?> />
173
+ </li>
174
+ </ol>
175
+ <?php echo $this->call( 'preferences', $data['callback'] ); ?>
176
+
177
+ </div>
178
+ <?php }
179
+ } ?>
180
+
181
+ </div>
182
+ <?php submit_button( __( 'Update Changes', 'mycred' ), 'primary large' ); ?>
183
+
184
+ </form>
185
+ </div>
186
+ <?php
187
+ unset( $installed );
188
+ unset( $this );
189
+ }
190
+
191
+ /**
192
+ * Sanititze Settings
193
+ * @since 0.1
194
+ * @version 1.0
195
+ */
196
+ public function sanitize_settings( $data ) {
197
+ $installed = $this->get();
198
+ if ( !empty( $installed ) ) {
199
+ foreach ( $installed as $key => $gdata ) {
200
+ if ( isset( $gdata['callback'] ) && isset( $data['hook_prefs'][$key] ) ) {
201
+ $data['hook_prefs'][$key] = $this->call( 'sanitise_preferences', $gdata['callback'], $data['hook_prefs'][$key] );
202
+ }
203
+ }
204
+ }
205
+ unset( $installed );
206
+ return $data;
207
+ }
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Hook for registrations
213
+ * @since 0.1
214
+ * @version 1.0
215
+ */
216
+ if ( !class_exists( 'myCRED_Hook_Registration' ) ) {
217
+ class myCRED_Hook_Registration extends myCRED_Hook {
218
+
219
+ /**
220
+ * Construct
221
+ */
222
+ function __construct( $hook_prefs ) {
223
+ parent::__construct( array(
224
+ 'id' => 'registration',
225
+ 'defaults' => array(
226
+ 'creds' => 10,
227
+ 'log' => '%plural% for becoming a member'
228
+ )
229
+ ), $hook_prefs );
230
+ }
231
+
232
+ /**
233
+ * Run
234
+ * @since 0.1
235
+ * @version 1.0
236
+ */
237
+ public function run() {
238
+ if ( $this->prefs['creds'] != 0 )
239
+ add_action( 'user_register', array( $this, 'registration' ) );
240
+ }
241
+
242
+ /**
243
+ * Registration Hook
244
+ * @since 0.1
245
+ * @version 1.0
246
+ */
247
+ public function registration( $user_id ) {
248
+ // Make sure user is not excluded
249
+ if ( $this->core->exclude_user( $user_id ) === true ) return;
250
+
251
+ // Execute
252
+ $this->core->add_creds(
253
+ 'registration',
254
+ $user_id,
255
+ $this->prefs['creds'],
256
+ $this->prefs['log'],
257
+ $user_id,
258
+ array( 'ref_type' => 'user' )
259
+ );
260
+
261
+ // Clean up
262
+ unset( $this );
263
+ }
264
+
265
+ /**
266
+ * Preference for Registration Hook
267
+ * @since 0.1
268
+ * @version 1.0
269
+ */
270
+ public function preferences() {
271
+ $prefs = $this->prefs; ?>
272
+
273
+ <label class="subheader"><?php echo $this->core->plural(); ?></label>
274
+ <ol>
275
+ <li>
276
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'creds' ); ?>" id="<?php echo $this->field_id( 'creds' ); ?>" value="<?php echo $this->core->format_number( $prefs['creds'] ); ?>" size="8" /></div>
277
+ </li>
278
+ </ol>
279
+ <label class="subheader"><?php _e( 'Log template', 'mycred' ); ?></label>
280
+ <ol>
281
+ <li>
282
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'log' ); ?>" id="<?php echo $this->field_id( 'log' ); ?>" value="<?php echo $prefs['log']; ?>" class="long" /></div>
283
+ <span class="description"><?php _e( 'Available template tags: General, User', 'mycred' ); ?></span>
284
+ </li>
285
+ </ol>
286
+ <?php
287
+ unset( $this );
288
+ }
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Hook for loggins
294
+ * @since 0.1
295
+ * @version 1.0
296
+ */
297
+ if ( !class_exists( 'myCRED_Hook_Logging_In' ) ) {
298
+ class myCRED_Hook_Logging_In extends myCRED_Hook {
299
+
300
+ /**
301
+ * Construct
302
+ */
303
+ function __construct( $hook_prefs ) {
304
+ parent::__construct( array(
305
+ 'id' => 'logging_in',
306
+ 'defaults' => array(
307
+ 'creds' => 1,
308
+ 'log' => '%plural% for logging in',
309
+ 'limit' => 'daily'
310
+ )
311
+ ), $hook_prefs );
312
+ }
313
+
314
+ /**
315
+ * Run
316
+ * @since 0.1
317
+ * @version 1.0
318
+ */
319
+ public function run() {
320
+ if ( $this->prefs['creds'] != 0 )
321
+ add_action( 'wp_login', array( $this, 'logging_in' ), 10, 2 );
322
+ }
323
+
324
+ /**
325
+ * Login Hook
326
+ * @since 0.1
327
+ * @version 1.0
328
+ */
329
+ public function logging_in( $user_login, $user ) {
330
+ if ( $this->core->exclude_user( $user->ID ) === true ) return;
331
+
332
+ $user_id = $user->ID;
333
+ $limit = $this->prefs['limit'];
334
+ // If limit is set
335
+ if ( !empty( $limit ) ) {
336
+ $now = date_i18n( 'U' );
337
+ $today = date_i18n( 'Y-m-d' );
338
+
339
+ // Get last login
340
+ $past = get_user_meta( $user_id, 'mycred_last_login', true );
341
+ // If logged in before
342
+ if ( !empty( $past ) ) {
343
+ if ( $limit == 'twentyfour' ) {
344
+ $mark = 86400;
345
+ $next = $past+$mark;
346
+ // Check if next time we can get points is in future; if thats the case, bail
347
+ if ( $next > $now ) return;
348
+ }
349
+ elseif ( $limit == 'twelve' ) {
350
+ $mark = 43200;
351
+ $next = $past+$mark;
352
+ // Check if next time we can get points is in future; if thats the case, bail
353
+ if ( $next > $now ) return;
354
+ }
355
+ elseif ( $limit == 'sevendays' ) {
356
+ $mark = 604800;
357
+ $next = $past+$mark;
358
+ // Check if next time we can get points is in future; if thats the case, bail
359
+ if ( $next > $now ) return;
360
+ }
361
+ elseif ( $limit == 'daily' ) {
362
+ if ( $today == $past ) return;
363
+ }
364
+ }
365
+
366
+ // Update new login time
367
+ if ( $limit == 'daily' )
368
+ update_user_meta( $user_id, 'mycred_last_login', $today );
369
+ else
370
+ update_user_meta( $user_id, 'mycred_last_login', $now );
371
+ }
372
+
373
+ // Execute
374
+ $this->core->add_creds(
375
+ 'logging_in',
376
+ $user_id,
377
+ $this->prefs['creds'],
378
+ $this->prefs['log']
379
+ );
380
+
381
+ // Clean up
382
+ unset( $this );
383
+ }
384
+
385
+ /**
386
+ * Preference for Login Hook
387
+ * @since 0.1
388
+ * @version 1.0
389
+ */
390
+ public function preferences() {
391
+ $prefs = $this->prefs; ?>
392
+
393
+ <label class="subheader"><?php echo $this->core->plural(); ?></label>
394
+ <ol>
395
+ <li>
396
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'creds' ); ?>" id="<?php echo $this->field_id( 'creds' ); ?>" value="<?php echo $this->core->format_number( $prefs['creds'] ); ?>" size="8" /></div>
397
+ </li>
398
+ </ol>
399
+ <label class="subheader"><?php _e( 'Log Template', 'mycred' ); ?></label>
400
+ <ol>
401
+ <li>
402
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( 'log' ); ?>" id="<?php echo $this->field_id( 'log' ); ?>" value="<?php echo $prefs['log']; ?>" class="long" /></div>
403
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
404
+ </li>
405
+ </ol>
406
+ <label class="subheader"><?php _e( 'Limit', 'mycred' ); ?></label>
407
+ <ol>
408
+ <li>
409
+ <?php $this->impose_limits_dropdown( 'limit' ); ?>
410
+
411
+ </li>
412
+ </ol>
413
+ <?php
414
+ unset( $this );
415
+ }
416
+ }
417
+ }
418
+
419
+ /**
420
+ * Hook for publishing content
421
+ * @since 0.1
422
+ * @version 1.0
423
+ */
424
+ if ( !class_exists( 'myCRED_Hook_Publishing_Content' ) ) {
425
+ class myCRED_Hook_Publishing_Content extends myCRED_Hook {
426
+
427
+ /**
428
+ * Construct
429
+ */
430
+ function __construct( $hook_prefs ) {
431
+ parent::__construct( array(
432
+ 'id' => 'publishing_content',
433
+ 'defaults' => array(
434
+ 'post' => array(
435
+ 'creds' => 1,
436
+ 'log' => '%plural% for new Post'
437
+ ),
438
+ 'page' => array(
439
+ 'creds' => 1,
440
+ 'log' => '%plural% for new Page'
441
+ )
442
+ )
443
+ ), $hook_prefs );
444
+ }
445
+
446
+ /**
447
+ * Run
448
+ * @since 0.1
449
+ * @version 1.0
450
+ */
451
+ public function run() {
452
+ add_action( 'transition_post_status', array( $this, 'publishing_content' ), 10, 3 );
453
+ }
454
+
455
+ /**
456
+ * Publish Content Hook
457
+ * @since 0.1
458
+ * @version 1.0
459
+ */
460
+ public function publishing_content( $new_status, $old_status, $post ) {
461
+ $user_id = $post->post_author;
462
+ if ( $this->core->exclude_user( $user_id ) === true ) return;
463
+
464
+ $post_id = $post->ID;
465
+ $post_type = $post->post_type;
466
+ if ( !isset( $this->prefs[$post_type]['creds'] ) ) return;
467
+ if ( empty( $this->prefs[$post_type]['creds'] ) || $this->prefs[$post_type]['creds'] == 0 ) return;
468
+
469
+ // We want to fire when content get published or when it gets privatly published
470
+ if (
471
+ ( $old_status == 'auto-draft' && $new_status == 'publish' && array_key_exists( $post_type, $this->prefs ) ) ||
472
+ ( $old_status == 'draft' && $new_status == 'publish' && array_key_exists( $post_type, $this->prefs ) ) ||
473
+ ( $old_status == 'private' && $new_status == 'publish' && array_key_exists( $post_type, $this->prefs ) ) ) {
474
+
475
+ // Make sure this is unique
476
+ if ( $this->has_entry( 'publishing_content', $post_id, $user_id ) ) return;
477
+
478
+ // Prep
479
+ $entry = $this->prefs[$post_type]['log'];
480
+ $data = array( 'ref_type' => 'post' ) ;
481
+
482
+ // Add Creds
483
+ $this->core->add_creds(
484
+ 'publishing_content',
485
+ $user_id,
486
+ $this->prefs[$post_type]['creds'],
487
+ $entry,
488
+ $post_id,
489
+ $data
490
+ );
491
+ }
492
+ unset( $this );
493
+ }
494
+
495
+ /**
496
+ * Preference for Publish Content Hook
497
+ * @since 0.1
498
+ * @version 1.0
499
+ */
500
+ public function preferences() {
501
+ $prefs = $this->prefs; ?>
502
+
503
+ <label class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Posts', 'mycred' ) ); ?></label>
504
+ <ol>
505
+ <li>
506
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'post' => 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'post' => 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['post']['creds'] ); ?>" size="8" /></div>
507
+ </li>
508
+ </ol>
509
+ <label class="subheader"><?php _e( 'Log template', 'mycred' ); ?></label>
510
+ <ol>
511
+ <li>
512
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'post' => 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'post' => 'log' ) ); ?>" value="<?php echo $prefs['post']['log']; ?>" class="long" /></div>
513
+ <span class="description"><?php _e( 'Available template tags: General, Post', 'mycred' ); ?></span>
514
+ </li>
515
+ </ol>
516
+ <label class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Pages', 'mycred' ) ); ?></label>
517
+ <ol>
518
+ <li>
519
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'page' => 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'page' => 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['page']['creds'] ); ?>" size="8" /></div>
520
+ </li>
521
+ </ol>
522
+ <label class="subheader"><?php _e( 'Log template', 'mycred' ); ?></label>
523
+ <ol>
524
+ <li>
525
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'page' => 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'page' => 'log' ) ); ?>" value="<?php echo $prefs['page']['log']; ?>" class="long" /></div>
526
+ <span class="description"><?php _e( 'Available template tags: General, Post', 'mycred' ); ?></span>
527
+ </li>
528
+ </ol>
529
+ <?php // Get all not built-in post types (excludes posts, pages, media)
530
+ $post_type_args = array(
531
+ 'public' => true,
532
+ '_builtin' => false
533
+ );
534
+ $post_types = get_post_types( $post_type_args, 'objects', 'and' );
535
+ foreach ( $post_types as $post_type ) {
536
+ // Start by checking if this post type should be excluded
537
+ if ( !$this->include_post_type( $post_type->name ) ) continue;
538
+
539
+ // Points to award/deduct
540
+ if ( isset( $prefs[$post_type->name]['creds'] ) )
541
+ $_creds = $prefs[$post_type->name]['creds'];
542
+ else
543
+ $_creds = 0;
544
+
545
+ // Log template
546
+ if ( isset( $prefs[$post_type->name]['log'] ) )
547
+ $_log = $prefs[$post_type->name]['log'];
548
+ else
549
+ $_log = ''; ?>
550
+
551
+ <label class="subheader"><?php echo sprintf( $this->core->template_tags_general( __( '%plural% for %s', 'mycred' ) ), $post_type->labels->name ); ?></label>
552
+ <ol>
553
+ <li>
554
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( $post_type->name => 'creds' ) ); ?>" id="<?php echo $this->field_id( array( $post_type->name => 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $_creds ); ?>" size="8" /></div>
555
+ </li>
556
+ </ol>
557
+ <label class="subheader"><?php _e( 'Log template', 'mycred' ); ?></label>
558
+ <ol>
559
+ <li>
560
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( $post_type->name => 'log' ) ); ?>" id="<?php echo $this->field_id( array( $post_type->name => 'log' ) ); ?>" value="<?php echo $_log; ?>" class="long" /></div>
561
+ <span class="description"><?php _e( 'Available template tags: General, Post', 'mycred' ); ?></span>
562
+ </li>
563
+ </ol>
564
+ <?php }
565
+ unset( $this );
566
+ }
567
+
568
+ /**
569
+ * Include Post Type
570
+ * Checks if a given post type should be excluded
571
+ * @since 0.1
572
+ * @version 1.0
573
+ */
574
+ protected function include_post_type( $post_type ) {
575
+ if ( in_array( $post_type, apply_filters( 'mycred_post_type_excludes', array( 'post', 'page' ) ) ) ) return false;
576
+
577
+ return true;
578
+ }
579
+ }
580
+ }
581
+
582
+ /**
583
+ * Hook for comments
584
+ * @since 0.1
585
+ * @version 1.0
586
+ */
587
+ if ( !class_exists( 'myCRED_Hook_Comments' ) ) {
588
+ class myCRED_Hook_Comments extends myCRED_Hook {
589
+
590
+ /**
591
+ * Construct
592
+ */
593
+ function __construct( $hook_prefs ) {
594
+ parent::__construct( array(
595
+ 'id' => 'comments',
596
+ 'defaults' => array(
597
+ 'approved' => array(
598
+ 'creds' => 1,
599
+ 'log' => '%plural% for Approved Comment'
600
+ ),
601
+ 'spam' => array(
602
+ 'creds' => '-5',
603
+ 'log' => '%plural% deduction for Comment marked as SPAM'
604
+ ),
605
+ 'trash' => array(
606
+ 'creds' => '-1',
607
+ 'log' => '%plural% deduction for deleted / unapproved Comment'
608
+ )
609
+ )
610
+ ), $hook_prefs );
611
+ }
612
+
613
+ /**
614
+ * Run
615
+ * @since 0.1
616
+ * @version 1.0
617
+ */
618
+ public function run() {
619
+ add_action( 'comment_post', array( $this, 'new_comment' ), 10, 2 );
620
+
621
+ if ( $this->prefs['approved'] != 0 ) {
622
+ add_action( 'comment_unapproved_to_approved', array( $this, 'approved_comments' ) );
623
+ add_action( 'comment_trash_to_approved', array( $this, 'approved_comments' ) );
624
+ add_action( 'comment_spam_to_approved', array( $this, 'approved_comments' ) );
625
+ }
626
+
627
+ if ( $this->prefs['spam'] != 0 ) {
628
+ add_action( 'comment_approved_to_spam', array( $this, 'spam_comments' ) );
629
+ add_action( 'comment_unapproved_to_spam', array( $this, 'spam_comments' ) );
630
+ }
631
+
632
+ if ( $this->prefs['trash'] != 0 ) {
633
+ add_action( 'comment_approved_to_unapproved', array( $this, 'trash_comments' ) );
634
+ add_action( 'comment_approved_to_trash', array( $this, 'trash_comments' ) );
635
+ add_action( 'comment_unapproved_to_trash', array( $this, 'trash_comments' ) );
636
+ }
637
+ }
638
+
639
+ /**
640
+ * New Comment
641
+ * If comments are approved without moderation, we apply the corresponding method
642
+ * or else we will wait till the appropriate instance.
643
+ *
644
+ * @since 0.1
645
+ * @version 1.0
646
+ */
647
+ public function new_comment( $comment_id, $comment_status ) {
648
+ // Marked SPAM
649
+ if ( $comment_status === 'spam' && $this->prefs['spam'] != 0 )
650
+ $this->spam_comments( $comment_id );
651
+ // Approved comment
652
+ elseif ( $comment_status == '1' && $this->prefs['approved'] != 0 )
653
+ $this->approved_comments( $comment_id );
654
+
655
+ // All else comments are moderated and we will award / deduct points in a different instance
656
+ return;
657
+ }
658
+
659
+ /**
660
+ * Approved Comments
661
+ * Validate and execute our settings for approved comments.
662
+ *
663
+ * @since 0.1
664
+ * @version 1.0
665
+ */
666
+ public function approved_comments( $comment ) {
667
+ // Passing an integer instead of an object means we need to grab the comment object ourselves
668
+ if ( !is_object( $comment ) )
669
+ $comment = get_comment( $comment );
670
+
671
+ // Logged out users miss out
672
+ if ( $comment->user_id == 0 ) return;
673
+
674
+ // Check if user should be excluded
675
+ if ( $this->core->exclude_user( $comment->user_id ) === true ) return;
676
+
677
+ // Make sure this is unique event
678
+ if ( $this->has_entry( 'approved_comment', $comment->comment_ID, $comment->user_id ) ) return;
679
+
680
+ // Execute
681
+ $this->core->add_creds(
682
+ 'approved_comment',
683
+ $comment->user_id,
684
+ $this->prefs['approved']['creds'],
685
+ $this->prefs['approved']['log'],
686
+ $comment->comment_ID,
687
+ array( 'ref_type' => 'comment' )
688
+ );
689
+
690
+ // Clean up
691
+ unset( $this );
692
+ }
693
+
694
+ /**
695
+ * SPAM Comments
696
+ * Validate and execute our settings for comments marked as SPAM.
697
+ *
698
+ * @since 0.1
699
+ * @version 1.0
700
+ */
701
+ public function spam_comments( $comment ) {
702
+ // Passing an integer instead of an object means we need to grab the comment object ourselves
703
+ if ( !is_object( $comment ) )
704
+ $comment = get_comment( $comment );
705
+
706
+ // Logged out users miss out
707
+ if ( $comment->user_id == 0 ) return;
708
+
709
+ // Check if user should be excluded
710
+ if ( $this->core->exclude_user( $comment->user_id ) === true ) return;
711
+
712
+ // Make sure this is unique event
713
+ if ( $this->has_entry( 'spam_comment', $comment->comment_ID, $comment->user_id ) ) return;
714
+
715
+ // Execute
716
+ $this->core->add_creds(
717
+ 'spam_comment',
718
+ $comment->user_id,
719
+ $this->prefs['spam']['creds'],
720
+ $this->prefs['spam']['log'],
721
+ $comment->comment_ID,
722
+ array( 'ref_type' => 'comment' )
723
+ );
724
+
725
+ // Clean up
726
+ unset( $this );
727
+ }
728
+
729
+ /**
730
+ * Trashed Comments
731
+ * Validate and execute our settings for trashed or unapproved comments.
732
+ *
733
+ * @since 0.1
734
+ * @version 1.0
735
+ */
736
+ public function trash_comments( $comment ) {
737
+ // Passing an integer instead of an object means we need to grab the comment object ourselves
738
+ if ( !is_object( $comment ) )
739
+ $comment = get_comment( $comment );
740
+
741
+ // Logged out users miss out
742
+ if ( $comment->user_id == 0 ) return;
743
+
744
+ // Check if user should be excluded
745
+ if ( $this->core->exclude_user( $comment->user_id ) === true ) return;
746
+
747
+ // Make sure this is unique event
748
+ if ( $this->has_entry( 'deleted_comment', $comment->comment_ID, $comment->user_id ) ) return;
749
+
750
+ // Execute
751
+ $this->core->add_creds(
752
+ 'deleted_comment',
753
+ $comment->user_id,
754
+ $this->prefs['trash']['creds'],
755
+ $this->prefs['trash']['log'],
756
+ $comment->comment_ID,
757
+ array( 'ref_type' => 'comment' )
758
+ );
759
+
760
+ // Clean up
761
+ unset( $this );
762
+ }
763
+
764
+ /**
765
+ * Preferences for Commenting Hook
766
+ * @since 0.1
767
+ * @version 1.0
768
+ */
769
+ public function preferences() {
770
+ $prefs = $this->prefs; ?>
771
+
772
+ <label class="subheader" for="<?php echo $this->field_id( array( 'approved' => 'creds' ) ); ?>"><?php _e( 'Approved Comment', 'mycred' ); ?></label>
773
+ <ol>
774
+ <li>
775
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'approved' => 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'approved' => 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['approved']['creds'] ); ?>" size="8" /></div>
776
+ </li>
777
+ <li class="empty">&nbsp;</li>
778
+ <li>
779
+ <label for="<?php echo $this->field_id( array( 'approved' => 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
780
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'approved' => 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'approved' => 'log' ) ); ?>" value="<?php echo $prefs['approved']['log']; ?>" class="long" /></div>
781
+ <span class="description"><?php _e( 'Available template tags: General, Comment', 'mycred' ); ?></span>
782
+ </li>
783
+ </ol>
784
+ <label class="subheader" for="<?php echo $this->field_id( array( 'spam' => 'creds' ) ); ?>"><?php _e( 'Comment Marked SPAM', 'mycred' ); ?></label>
785
+ <ol>
786
+ <li>
787
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'spam' => 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'spam' => 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['spam']['creds'] ); ?>" size="8" /></div>
788
+ </li>
789
+ <li class="empty">&nbsp;</li>
790
+ <li>
791
+ <label for="<?php echo $this->field_id( array( 'spam' => 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
792
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'spam' => 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'spam' => 'log' ) ); ?>" value="<?php echo $prefs['spam']['log']; ?>" class="long" /></div>
793
+ <span class="description"><?php _e( 'Available template tags: General, Comment', 'mycred' ); ?></span>
794
+ </li>
795
+ </ol>
796
+ <label class="subheader" for="<?php echo $this->field_id( array( 'trash' => 'creds' ) ); ?>"><?php _e( 'Trashed / Unapproved Comments', 'mycred' ); ?></label>
797
+ <ol>
798
+ <li>
799
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'trash' => 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'trash' => 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['trash']['creds'] ); ?>" size="8" /></div>
800
+ </li>
801
+ <li class="empty">&nbsp;</li>
802
+ <li>
803
+ <label for="<?php echo $this->field_id( array( 'trash' => 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
804
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'trash' => 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'trash' => 'log' ) ); ?>" value="<?php echo $prefs['trash']['log']; ?>" class="long" /></div>
805
+ <span class="description"><?php _e( 'Available template tags: General, Comment', 'mycred' ); ?></span>
806
+ </li>
807
+ </ol>
808
+ <?php unset( $this );
809
+ }
810
+ }
811
+ }
812
+ /**
813
+ * Hooks for Invite Anyone Plugin
814
+ * @since 0.1
815
+ * @version 1.0
816
+ */
817
+ if ( !class_exists( 'myCRED_Invite_Anyone' ) && function_exists( 'invite_anyone_init' ) ) {
818
+ class myCRED_Invite_Anyone extends myCRED_Hook {
819
+
820
+ /**
821
+ * Construct
822
+ */
823
+ function __construct( $hook_prefs ) {
824
+ parent::__construct( array(
825
+ 'id' => 'invite_anyone',
826
+ 'defaults' => array(
827
+ 'send_invite' => array(
828
+ 'creds' => 1,
829
+ 'log' => '%plural% for sending an invitation',
830
+ 'limit' => 0
831
+ ),
832
+ 'accept_invite' => array(
833
+ 'creds' => 1,
834
+ 'log' => '%plural% for accepted invitation',
835
+ 'limit' => 0
836
+ )
837
+ )
838
+ ), $hook_prefs );
839
+ }
840
+
841
+ /**
842
+ * Run
843
+ * @since 0.1
844
+ * @version 1.0
845
+ */
846
+ public function run() {
847
+ if ( $this->prefs['send_invite']['creds'] != 0 ) {
848
+ add_action( 'sent_email_invite', array( $this, 'send_invite' ), 10, 3 );
849
+ }
850
+ if ( $this->prefs['accept_invite']['creds'] != 0 ) {
851
+ add_action( 'accepted_email_invite', array( $this, 'accept_invite' ), 10, 2 );
852
+ }
853
+ }
854
+
855
+ /**
856
+ * Sending Invites
857
+ * @since 0.1
858
+ * @version 1.0
859
+ */
860
+ public function send_invite( $user_id, $email, $group ) {
861
+ // Limit Check
862
+ if ( $this->prefs['send_invite']['limit'] != 0 ) {
863
+ $user_log = get_user_meta( $user_id, 'mycred_invite_anyone', true );
864
+ if ( empty( $user_log['sent'] ) ) $user_log['sent'] = 0;
865
+ // Return if limit is reached
866
+ if ( $user_log['sent'] >= $this->prefs['send_invite']['limit'] ) return;
867
+ }
868
+
869
+ // Award Points
870
+ $this->core->add_creds(
871
+ 'sending_an_invite',
872
+ $user_id,
873
+ $this->prefs['send_invite']['creds'],
874
+ $this->prefs['send_invite']['log']
875
+ );
876
+
877
+ // Update limit
878
+ if ( $this->prefs['send_invite']['limit'] != 0 ) {
879
+ $user_log['sent'] = $user_log['sent']+1;
880
+ update_user_meta( $user_id, 'mycred_invite_anyone', $user_log );
881
+ }
882
+
883
+ // Clean up
884
+ unset( $this );
885
+ }
886
+
887
+ /**
888
+ * Accepting Invites
889
+ * @since 0.1
890
+ * @version 1.0
891
+ */
892
+ public function accept_invite( $invited_user_id, $inviters ) {
893
+ // Invite Anyone will pass on an array of user IDs of those who have invited this user which we need to loop though
894
+ foreach ( $inviters as $inviter_id ) {
895
+ // Limit Check
896
+ if ( $this->prefs['accept_invite']['limit'] != 0 ) {
897
+ $user_log = get_user_meta( $inviter_id, 'mycred_invite_anyone', true );
898
+ if ( empty( $user_log['accepted'] ) ) $user_log['accepted'] = 0;
899
+ // Continue to next inviter if limit is reached
900
+ if ( $user_log['accepted'] >= $this->prefs['accept_invite']['limit'] ) continue;
901
+ }
902
+
903
+ // Award Points
904
+ $this->core->add_creds(
905
+ 'accepting_an_invite',
906
+ $inviter_id,
907
+ $this->prefs['accept_invite']['creds'],
908
+ $this->prefs['accept_invite']['log']
909
+ );
910
+
911
+ // Update Limit
912
+ if ( $this->prefs['accept_invite']['limit'] != 0 ) {
913
+ $user_log['accepted'] = $user_log['accepted']+1;
914
+ update_user_meta( $inviter_id, 'mycred_invite_anyone', $user_log );
915
+ }
916
+ }
917
+
918
+ // Clean up
919
+ unset( $this );
920
+ }
921
+
922
+ /**
923
+ * Preferences
924
+ * @since 0.1
925
+ * @version 1.0
926
+ */
927
+ public function preferences() {
928
+ $prefs = $this->prefs; ?>
929
+
930
+ <!-- Creds for Sending Invites -->
931
+ <label for="<?php echo $this->field_id( array( 'send_invite', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Sending An Invite', 'mycred' ) ); ?></label>
932
+ <ol>
933
+ <li>
934
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'send_invite', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'send_invite', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['send_invite']['creds'] ); ?>" size="8" /></div>
935
+ </li>
936
+ <li class="empty">&nbsp;</li>
937
+ <li>
938
+ <label for="<?php echo $this->field_id( array( 'send_invite', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
939
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'send_invite', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'send_invite', 'log' ) ); ?>" value="<?php echo $prefs['send_invite']['log']; ?>" class="long" /></div>
940
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
941
+ </li>
942
+ </ol>
943
+ <label for="<?php echo $this->field_id( array( 'send_invite', 'limit' ) ); ?>" class="subheader"><?php _e( 'Limit', 'mycred' ); ?></label>
944
+ <ol>
945
+ <li>
946
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'send_invite', 'limit' ) ); ?>" id="<?php echo $this->field_id( array( 'send_invite', 'limit' ) ); ?>" value="<?php echo $prefs['send_invite']['limit']; ?>" size="8" /></div>
947
+ <span class="description"><?php echo $this->core->template_tags_general( __( 'Maximum number of invites that grants %_plural%. User zero for unlimited.', 'mycred' ) ); ?></span>
948
+ </li>
949
+ </ol>
950
+ <!-- Creds for Accepting Invites -->
951
+ <label for="<?php echo $this->field_id( array( 'accept_invite', 'creds' ) ); ?>" class="subheader"><?php echo $this->core->template_tags_general( __( '%plural% for Accepting An Invite', 'mycred' ) ); ?></label>
952
+ <ol>
953
+ <li>
954
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'accept_invite', 'creds' ) ); ?>" id="<?php echo $this->field_id( array( 'accept_invite', 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs['accept_invite']['creds'] ); ?>" size="8" /></div>
955
+ <span class="description"><?php echo $this->core->template_tags_general( __( '%plural% for each invited user that accepts an invitation.', 'mycred' ) ); ?></span>
956
+ </li>
957
+ <li class="empty">&nbsp;</li>
958
+ <li>
959
+ <label for="<?php echo $this->field_id( array( 'accept_invite', 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
960
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'accept_invite', 'log' ) ); ?>" id="<?php echo $this->field_id( array( 'accept_invite', 'log' ) ); ?>" value="<?php echo $prefs['accept_invite']['log']; ?>" class="long" /></div>
961
+ <span class="description"><?php _e( 'Available template tags: General', 'mycred' ); ?></span>
962
+ </li>
963
+ </ol>
964
+ <label for="<?php echo $this->field_id( array( 'accept_invite', 'limit' ) ); ?>" class="subheader"><?php _e( 'Limit', 'mycred' ); ?></label>
965
+ <ol>
966
+ <li>
967
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( 'accept_invite', 'limit' ) ); ?>" id="<?php echo $this->field_id( array( 'accept_invite', 'limit' ) ); ?>" value="<?php echo $prefs['accept_invite']['limit']; ?>" size="8" /></div>
968
+ <span class="description"><?php echo $this->core->template_tags_general( __( 'Maximum number of accepted invitations that grants %_plural%. User zero for unlimited.', 'mycred' ) ); ?></span>
969
+ </li>
970
+ </ol>
971
+ <?php unset( $this );
972
+ }
973
+ }
974
+ }
975
+ /**
976
+ * Hook for Contact Form 7 Plugin
977
+ * @since 0.1
978
+ * @version 1.0
979
+ */
980
+ if ( !class_exists( 'myCRED_Contact_Form7' ) && function_exists( 'wpcf7' ) ) {
981
+ class myCRED_Contact_Form7 extends myCRED_Hook {
982
+
983
+ /**
984
+ * Construct
985
+ */
986
+ function __construct( $hook_prefs ) {
987
+ parent::__construct( array(
988
+ 'id' => 'contact_form7',
989
+ 'defaults' => ''
990
+ ), $hook_prefs );
991
+ }
992
+
993
+ /**
994
+ * Run
995
+ * @since 0.1
996
+ * @version 1.0
997
+ */
998
+ public function run() {
999
+ add_action( 'wpcf7_mail_sent', array( $this, 'form_submission' ) );
1000
+ }
1001
+
1002
+ /**
1003
+ * Get Forms
1004
+ * Queries all Contact Form 7 forms.
1005
+ * @uses WP_Query()
1006
+ * @since 0.1
1007
+ * @version 1.0
1008
+ */
1009
+ public function get_forms() {
1010
+ $forms = new WP_Query( array(
1011
+ 'post_type' => 'wpcf7_contact_form',
1012
+ 'post_status' => 'any',
1013
+ 'posts_per_page' => '-1',
1014
+ 'orderby' => 'ID',
1015
+ 'order' => 'ASC'
1016
+ ) );
1017
+
1018
+ $result = array();
1019
+ if ( $forms->have_posts() ) {
1020
+ while ( $forms->have_posts() ) : $forms->the_post();
1021
+ $result[get_the_ID()] = get_the_title();
1022
+ endwhile;
1023
+ }
1024
+ wp_reset_postdata();
1025
+
1026
+ return $result;
1027
+ }
1028
+
1029
+ /**
1030
+ * Successful Form Submission
1031
+ * @since 0.1
1032
+ * @version 1.0
1033
+ */
1034
+ public function form_submission( $cf7_form ) {
1035
+ // Login is required
1036
+ if ( !is_user_logged_in() ) return;
1037
+
1038
+ $form_id = $cf7_form->id;
1039
+ if ( isset( $this->prefs[$form_id] ) && $this->prefs[$form_id]['creds'] != 0 ) {
1040
+ $this->core->add_creds(
1041
+ 'contact_form_submission',
1042
+ get_current_user_id(),
1043
+ $this->prefs[$form_id]['creds'],
1044
+ $this->prefs[$form_id]['log'],
1045
+ $form_id,
1046
+ array( 'ref_type' => 'post' )
1047
+ );
1048
+ }
1049
+
1050
+ // Clean up
1051
+ unset( $this );
1052
+ }
1053
+
1054
+ /**
1055
+ * Preferences for Commenting Hook
1056
+ * @since 0.1
1057
+ * @version 1.0
1058
+ */
1059
+ public function preferences() {
1060
+ $prefs = $this->prefs;
1061
+ $forms = $this->get_forms();
1062
+
1063
+ // No forms found
1064
+ if ( empty( $forms ) ) {
1065
+ echo '<p>' . __( 'No forms found.', 'mycred' ) . '</p>';
1066
+ return;
1067
+ }
1068
+
1069
+ // Loop though prefs to make sure we always have a default settings (happens when a new form has been created)
1070
+ foreach ( $forms as $form_id => $form_title ) {
1071
+ if ( !isset( $prefs[$form_id] ) ) {
1072
+ $prefs[$form_id] = array(
1073
+ 'creds' => 1,
1074
+ 'log' => ''
1075
+ );
1076
+ }
1077
+ }
1078
+
1079
+ // Set pref if empty
1080
+ if ( empty( $prefs ) ) $this->prefs = $prefs;
1081
+
1082
+ // Loop for settings
1083
+ foreach ( $forms as $form_id => $form_title ) { ?>
1084
+
1085
+ <!-- Creds for -->
1086
+ <label for="<?php echo $this->field_id( array( $form_id, 'creds' ) ); ?>" class="subheader"><?php echo $form_title; ?></label>
1087
+ <ol>
1088
+ <li>
1089
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( $form_id, 'creds' ) ); ?>" id="<?php echo $this->field_id( array( $form_id, 'creds' ) ); ?>" value="<?php echo $this->core->format_number( $prefs[$form_id]['creds'] ); ?>" size="8" /></div>
1090
+ </li>
1091
+ <li class="empty">&nbsp;</li>
1092
+ <li>
1093
+ <label for="<?php echo $this->field_id( array( $form_id, 'log' ) ); ?>"><?php _e( 'Log template', 'mycred' ); ?></label>
1094
+ <div class="h2"><input type="text" name="<?php echo $this->field_name( array( $form_id, 'log' ) ); ?>" id="<?php echo $this->field_id( array( $form_id, 'log' ) ); ?>" value="<?php echo $prefs[$form_id]['log']; ?>" class="long" /></div>
1095
+ <span class="description"><?php _e( 'Available template tags: General, Post', 'mycred' ); ?></span>
1096
+ </li>
1097
+ </ol>
1098
+ <?php }
1099
+ unset( $this );
1100
+ }
1101
+ }
1102
+ }
1103
+ ?>
modules/mycred-module-log.php ADDED
@@ -0,0 +1,841 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'myCRED_VERSION' ) ) exit;
3
+ /**
4
+ * myCRED_Log class
5
+ * @since 0.1
6
+ * @version 1.0
7
+ */
8
+ if ( !class_exists( 'myCRED_Log' ) ) {
9
+ class myCRED_Log extends myCRED_Module {
10
+
11
+ public $user;
12
+ public $screen;
13
+
14
+ /**
15
+ * Construct
16
+ */
17
+ function __construct() {
18
+ parent::__construct( 'myCRED_Log', array(
19
+ 'module_name' => 'log',
20
+ 'labels' => array(
21
+ 'menu' => __( 'Log', 'mycred' ),
22
+ 'page_title' => __( 'Log', 'mycred' ),
23
+ 'page_header' => __( 'Activity Log', 'mycred' )
24
+ ),
25
+ 'screen_id' => 'myCRED',
26
+ 'cap' => 'editor',
27
+ 'accordion' => true,
28
+ 'register' => false,
29
+ 'menu_pos' => 10
30
+ ) );
31
+ }
32
+
33
+ /**
34
+ * Init
35
+ * @since 0.1
36
+ * @version 1.0
37
+ */
38
+ public function module_init() {
39
+ add_filter( 'set-screen-option', array( $this, 'set_entries_per_page' ), 10, 3 );
40
+ add_action( 'mycred_add_menu', array( $this, 'my_history_menu' ) );
41
+ add_shortcode( 'mycred_history', array( $this, 'render_my_history' ) );
42
+ }
43
+
44
+ /**
45
+ * Save Log Entries per page
46
+ * @since 0.1
47
+ * @version 1.0
48
+ */
49
+ public function set_entries_per_page( $status, $option, $value ) {
50
+ if ( 'mycred_entries_per_page' == $option ) return $value;
51
+ }
52
+
53
+ /**
54
+ * Add "Creds History" to menu
55
+ * @since 0.1
56
+ * @version 1.0
57
+ */
58
+ public function my_history_menu() {
59
+ $page = add_users_page(
60
+ __( 'My History', 'mycred' ),
61
+ $this->core->template_tags_general( __( '%plural% History', 'mycred' ) ),
62
+ 'read',
63
+ 'mycred_my_history',
64
+ array( $this, 'my_history_page' )
65
+ );
66
+ add_action( 'admin_print_styles-' . $page, array( $this, 'settings_header' ) );
67
+ }
68
+
69
+ /**
70
+ * Log Header
71
+ * @since 0.1
72
+ * @version 1.0
73
+ */
74
+ public function settings_header() {
75
+ // Since we are overwriting the myCRED_Module::settings_header() we need to enqueue admin styles
76
+ wp_enqueue_style( 'mycred-admin' );
77
+
78
+ $user_id = get_current_user_id();
79
+ $screen = get_current_screen();
80
+
81
+ // Prep Per Page
82
+ $args = array(
83
+ 'label' => __( 'Entries', 'mycred' ),
84
+ 'default' => 10,
85
+ 'option' => 'mycred_entries_per_page'
86
+ );
87
+ add_screen_option( 'per_page', $args );
88
+ $per_page = get_user_meta( $user_id, $args['option'], true );
89
+ if ( empty( $per_page ) || $per_page < 1 )
90
+ $per_page = $args['default'];
91
+
92
+ $this->per_page = $per_page;
93
+ unset( $screen );
94
+ }
95
+
96
+ /**
97
+ * Count Records
98
+ * Returns the total number of rows from log
99
+ * @since 0.1
100
+ * @version 1.0
101
+ */
102
+ public function count_records() {
103
+ global $wpdb;
104
+
105
+ $sql = "SELECT COUNT(*) AS %s FROM " . $wpdb->prefix . 'myCRED_log' . " ";
106
+ return $wpdb->get_var( $wpdb->prepare( $sql, 'records' ) );
107
+ }
108
+
109
+ /**
110
+ * Get References
111
+ * Returns all available references in the database.
112
+ * @since 0.1
113
+ * @version 1.0
114
+ */
115
+ protected function get_refs() {
116
+ $refs = wp_cache_get( 'mycred_references' );
117
+ if ( false === $refs ) {
118
+ global $wpdb;
119
+
120
+ $sql = "SELECT log.ref FROM " . $wpdb->prefix . 'myCRED_log' . " log WHERE %s <> '' ";
121
+ $refs = $wpdb->get_col( $wpdb->prepare( $sql, 'ref' ) );
122
+
123
+ if ( $refs ) {
124
+ $refs = array_unique( $refs );
125
+ wp_cache_set( 'mycred_references', $refs );
126
+ }
127
+ }
128
+
129
+ return $refs;
130
+ }
131
+
132
+ /**
133
+ * Get Users
134
+ * Returns an array of user id's and display names.
135
+ * @since 0.1
136
+ * @version 1.0
137
+ */
138
+ protected function get_users() {
139
+ $users = wp_cache_get( 'mycred_users' );
140
+ if ( false === $users ) {
141
+ $users = array();
142
+ $blog_users = get_users( array( 'orderby' => 'display_name' ) );
143
+ foreach ( $blog_users as $user ) {
144
+ if ( false === $this->core->exclude_user( $user->ID ) )
145
+ $users[$user->ID] = $user->display_name;
146
+ }
147
+ wp_cache_set( 'mycred_users', $users );
148
+ }
149
+
150
+ return $users;
151
+ }
152
+
153
+ /**
154
+ * Filter Log options
155
+ * @since 0.1
156
+ * @version 1.0
157
+ */
158
+ public function filter_options( $is_profile = false ) {
159
+ echo '<div class="alignleft actions">';
160
+ $show = false;
161
+
162
+ // Filter by reference
163
+ $references = $this->get_refs();
164
+ if ( !empty( $references ) ) {
165
+ echo '<select name="ref" id="myCRED-reference-filter"><option value="">' . __( 'Show all references', 'mycred' ) . '</option>';
166
+ foreach ( $references as $ref_id ) {
167
+ $name = str_replace( array( '_', '-' ), ' ', $ref_id );
168
+ echo '<option value="' . $ref_id . '"';
169
+ if ( isset( $_GET['ref'] ) && $_GET['ref'] == $ref_id ) echo ' selected="selected"';
170
+ echo '>' . ucwords( $name ) . '</option>';
171
+ }
172
+ echo '</select>';
173
+ $show = true;
174
+ }
175
+
176
+ // Filter by user
177
+ if ( $this->core->can_edit_creds() && !$is_profile && $this->count_records() > 0 ) {
178
+ $users = $this->get_users();
179
+ echo '<select name="user_id" id="myCRED-user-filter"><option value="">' . __( 'Show all users', 'mycred' ) . '</option>';
180
+ foreach ( $users as $user_id => $display_name ) {
181
+ echo '<option value="' . $user_id . '"';
182
+ if ( isset( $_GET['user_id'] ) && $_GET['user_id'] == $user_id ) echo ' selected="selected"';
183
+ echo '>' . $display_name . '</option>';
184
+ }
185
+ echo '</select>';
186
+ $show = true;
187
+ }
188
+
189
+ if ( $show === true )
190
+ echo '<input type="submit" class="button medium" value="' . __( 'Filter', 'mycred' ) . '" />';
191
+
192
+ echo '</div>';
193
+ }
194
+
195
+ /**
196
+ * Filter by Dates
197
+ * @since 0.1
198
+ * @version 1.0
199
+ */
200
+ public function filter_dates( $url = '' ) {
201
+ $date_sorting = apply_filters( 'mycred_sort_by_time', array(
202
+ '' => __( 'All', 'mycred' ),
203
+ 'today' => __( 'Today', 'mycred' ),
204
+ 'yesterday' => __( 'Yesterday', 'mycred' ),
205
+ 'thisweek' => __( 'This Week', 'mycred' ),
206
+ 'thismonth' => __( 'This Month', 'mycred' )
207
+ ) );
208
+
209
+ if ( !empty( $date_sorting ) ) {
210
+ $total = count( $date_sorting );
211
+ $count = 0;
212
+ echo '<ul class="subsubsub">';
213
+ foreach ( $date_sorting as $sorting_id => $sorting_name ) {
214
+ $count = $count+1;
215
+ echo '<li class="' . $sorting_id . '"><a href="';
216
+
217
+ // Build Query Args
218
+ $url_args = array();
219
+ if ( isset( $_GET['user_id'] ) && !empty( $_GET['user_id'] ) )
220
+ $url_args['user_id'] = $_GET['user_id'];
221
+ if ( isset( $_GET['ref'] ) && !empty( $_GET['ref'] ) )
222
+ $url_args['ref'] = $_GET['ref'];
223
+ if ( isset( $_GET['s'] ) && !empty( $_GET['s'] ) )
224
+ $url_args['s'] = $_GET['s'];
225
+ if ( !empty( $sorting_id ) )
226
+ $url_args['show'] = $sorting_id;
227
+
228
+ // Build URL
229
+ if ( !empty( $url_args ) )
230
+ echo add_query_arg( $url_args, $url );
231
+ else
232
+ echo $url;
233
+
234
+ echo '"';
235
+
236
+ if ( isset( $_GET['show'] ) && $_GET['show'] == $sorting_id ) echo ' class="current"';
237
+ elseif ( !isset( $_GET['show'] ) && empty( $sorting_id ) ) echo ' class="current"';
238
+
239
+ echo '>' . $sorting_name . '</a>';
240
+ if ( $count != $total ) echo ' | ';
241
+ echo '</li>';
242
+ }
243
+ echo '</ul>';
244
+ }
245
+ }
246
+
247
+ /**
248
+ * Log Search
249
+ * @since 0.1
250
+ * @version 1.0
251
+ */
252
+ public function search() {
253
+ if ( isset( $_GET['s'] ) && !empty( $_GET['s'] ) )
254
+ $serarch_string = $_GET['s'];
255
+ else
256
+ $serarch_string = ''; ?>
257
+
258
+ <p class="search-box">
259
+ <label class="screen-reader-text" for=""><?php _e( 'Search Log', 'mycred' ); ?>:</label>
260
+ <input type="search" name="s" value="<?php echo $serarch_string; ?>" />
261
+ <input type="submit" name="mycred-search-log" id="search-submit" class="button" value="<?php _e( 'Search Log', 'mycred' ); ?>" />
262
+ </p>
263
+ <?php
264
+ }
265
+
266
+ /**
267
+ * Table Nav
268
+ * @since 0.1
269
+ * @version 1.0
270
+ */
271
+ public function table_nav( $location = 'top', $is_profile = false, $amount = '' ) {
272
+ if ( $location == 'top' ) {
273
+ $this->filter_options( $is_profile );
274
+ $this->item_count( $amount );
275
+ }
276
+ else {
277
+ $this->item_count( $amount );
278
+ }
279
+ }
280
+
281
+ /**
282
+ * Item Count
283
+ * @since 0.1
284
+ * @version 1.0
285
+ */
286
+ public function item_count( $amount ) { ?>
287
+ <div class="tablenav-pages one-page">
288
+ <span class="displaying-num"><?php echo $amount; echo ' ' . _n( 'entry', 'entries', $amount, 'mycred' ); ?></span>
289
+ </div>
290
+ <?php
291
+ }
292
+
293
+ /**
294
+ * Page Title
295
+ * @since 0.1
296
+ * @version 1.0
297
+ */
298
+ public function page_title( $title = 'Log' ) {
299
+ // Settings Link
300
+ if ( $this->core->can_edit_plugin() )
301
+ $link = '<a href="' . admin_url( 'admin.php?page=myCRED_page_settings' ) . '" class="add-new-h2">' . __( 'Settings', 'mycred' ) . '</a>';
302
+ else
303
+ $link = '';
304
+
305
+ // Search Results
306
+ if ( isset( $_GET['s'] ) && !empty( $_GET['s'] ) )
307
+ $search_for = ' <span class="subtitle">' . __( 'Search results for', 'mycred' ) . ' "' . $_GET['s'] . '"</span>';
308
+ else
309
+ $search_for = '';
310
+
311
+ echo __( '<strong>my</strong>CRED ', 'mycred' ) . $title . ' ' . $link . $search_for;
312
+ }
313
+
314
+ /**
315
+ * Admin Page
316
+ * @since 0.1
317
+ * @version 1.0
318
+ */
319
+ public function admin_page() {
320
+ // Security
321
+ if ( !$this->core->can_edit_creds( get_current_user_id() ) ) wp_die( __( 'Access Denied', 'mycred' ) );
322
+
323
+ // Prep
324
+ $args = array(
325
+ 'number' => $this->per_page
326
+ );
327
+
328
+ if ( isset( $_GET['user_id'] ) && !empty( $_GET['user_id'] ) )
329
+ $args['user_id'] = $_GET['user_id'];
330
+
331
+ if ( isset( $_GET['s'] ) && !empty( $_GET['s'] ) )
332
+ $args['s'] = $_GET['s'];
333
+
334
+ if ( isset( $_GET['ref'] ) && !empty( $_GET['ref'] ) )
335
+ $args['ref'] = $_GET['ref'];
336
+
337
+ if ( isset( $_GET['show'] ) && !empty( $_GET['show'] ) )
338
+ $args['time'] = $_GET['show'];
339
+
340
+ $log = new myCRED_Query_Log( $args );
341
+ $this->results = $log->results; ?>
342
+
343
+ <div class="wrap" id="myCRED-wrap">
344
+ <div id="icon-myCRED" class="icon32"><br /></div>
345
+ <h2><?php $this->page_title(); ?></h2>
346
+ <?php $this->filter_dates( admin_url( 'admin.php?page=myCRED' ) ); ?>
347
+
348
+ <?php do_action( 'mycred_top_log_page', $this ); ?>
349
+
350
+ <form method="get" action="">
351
+ <?php
352
+
353
+ if ( isset( $_GET['user_id'] ) && !empty( $_GET['user_id'] ) )
354
+ echo '<input type="hidden" name="user_id" value="' . $_GET['user_id'] . '" />';
355
+
356
+ if ( isset( $_GET['s'] ) && !empty( $_GET['s'] ) )
357
+ echo '<input type="hidden" name="s" value="' . $_GET['s'] . '" />';
358
+
359
+ if ( isset( $_GET['ref'] ) && !empty( $_GET['ref'] ) )
360
+ echo '<input type="hidden" name="ref" value="' . $_GET['ref'] . '" />';
361
+
362
+ if ( isset( $_GET['show'] ) && !empty( $_GET['show'] ) )
363
+ echo '<input type="hidden" name="show" value="' . $_GET['show'] . '" />';
364
+
365
+ $this->search(); ?>
366
+
367
+ <input type="hidden" name="page" value="myCRED" />
368
+ <?php do_action( 'mycred_above_log_table', $this ); ?>
369
+
370
+ <div class="tablenav top">
371
+ <?php $this->table_nav( 'top', false, $log->num_rows ); ?>
372
+
373
+ </div>
374
+ <?php $log->display(); ?>
375
+
376
+ <div class="tablenav bottom">
377
+ <?php $this->table_nav( 'bottom', false, $log->num_rows ); ?>
378
+
379
+ </div>
380
+ <?php do_action( 'mycred_bellow_log_table', $this ); ?>
381
+
382
+ </form>
383
+ <?php do_action( 'mycred_bottom_log_page', $this ); ?>
384
+
385
+ </div>
386
+ <?php
387
+ unset( $log );
388
+ unset( $this );
389
+ }
390
+
391
+ /**
392
+ * My History Page
393
+ * @since 0.1
394
+ * @version 1.0
395
+ */
396
+ public function my_history_page() {
397
+ if ( !is_user_logged_in() ) wp_die( __( 'Access Denied', 'mycred' ) );
398
+
399
+ $args = array(
400
+ 'user_id' => get_current_user_id(),
401
+ 'number' => $this->per_page
402
+ );
403
+
404
+ if ( isset( $_GET['s'] ) && !empty( $_GET['s'] ) )
405
+ $args['s'] = $_GET['s'];
406
+
407
+ if ( isset( $_GET['ref'] ) && !empty( $_GET['ref'] ) )
408
+ $args['ref'] = $_GET['ref'];
409
+
410
+ if ( isset( $_GET['show'] ) && !empty( $_GET['show'] ) )
411
+ $args['time'] = $_GET['show'];
412
+
413
+ $log = new myCRED_Query_Log( $args );
414
+ $this->results = $log->results;
415
+ unset( $log->headers['column-username'] ); ?>
416
+
417
+ <div class="wrap" id="myCRED-wrap">
418
+ <div id="icon-myCRED" class="icon32"><br /></div>
419
+ <h2><?php $this->page_title( __( 'My History', 'mycred' ) ); ?></h2>
420
+ <?php $this->filter_dates( admin_url( 'users.php?page=mycred_my_history' ) ); ?>
421
+
422
+ <?php do_action( 'mycred_top_my_log_page', $this ); ?>
423
+
424
+ <form method="get" action="">
425
+ <?php $this->search(); ?>
426
+
427
+ <input type="hidden" name="page" value="mycred_my_history" />
428
+ <?php do_action( 'mycred_above_my_log_table', $this ); ?>
429
+
430
+ <div class="tablenav top">
431
+ <?php $this->table_nav( 'top', true, $log->num_rows ); ?>
432
+
433
+ </div>
434
+ <?php $log->display(); ?>
435
+
436
+ <div class="tablenav bottom">
437
+ <?php $this->table_nav( 'bottom', true, $log->num_rows ); ?>
438
+
439
+ </div>
440
+ <?php do_action( 'mycred_bellow_my_log_table', $this ); ?>
441
+
442
+ </form>
443
+ <?php do_action( 'mycred_bottom_my_log_page', $this ); ?>
444
+
445
+ </div>
446
+ <?php
447
+ unset( $log );
448
+ }
449
+
450
+ /**
451
+ * My History Shortcode render
452
+ * @since 0.1
453
+ * @version 1.0
454
+ */
455
+ public function render_my_history( $atts ) {
456
+ extract( shortcode_atts( array(
457
+ 'user_id' => NULL,
458
+ 'number' => NULL,
459
+ 'time' => NULL,
460
+ 'show_user' => false,
461
+ 'login' => ''
462
+ ), $atts ) );
463
+
464
+ // If we are not logged in
465
+ if ( !is_user_logged_in() ) return '<p class="mycred-history login">' . $login . '</p>';
466
+
467
+ if ( $user_id === NULL )
468
+ $user_id = get_current_user_id();
469
+
470
+ $args = array();
471
+ $args['user_id'] = $user_id;
472
+
473
+ if ( $number !== NULL )
474
+ $args['number'] = $number;
475
+
476
+ if ( $time !== NULL )
477
+ $args['time'] = $time;
478
+
479
+ if ( $ref !== NULL )
480
+ $args['ref'] = $ref;
481
+
482
+ $log = new myCRED_Query_Log( $args );
483
+ $this->results = $log->results;
484
+
485
+ if ( $show_user !== true )
486
+ unset( $log->headers['column-username'] );
487
+
488
+ $output .= $log->get_display();
489
+
490
+ return $output;
491
+ }
492
+ }
493
+ }
494
+ /**
495
+ * Query Log
496
+ * @see http://mycred.merovingi.com/classes/mycred_query_log/
497
+ * @since 0.1
498
+ * @version 1.0
499
+ */
500
+ if ( !class_exists( 'myCRED_Query_Log' ) ) {
501
+ class myCRED_Query_Log {
502
+
503
+ public $args;
504
+ public $request;
505
+ public $prep;
506
+ public $result;
507
+ public $num_rows;
508
+ public $headers;
509
+
510
+ /**
511
+ * Construct
512
+ */
513
+ public function __construct( $args = array() ) {
514
+ if ( empty( $args ) ) return false;
515
+
516
+ global $wpdb;
517
+
518
+ $select = $where = $sortby = $limits = '';
519
+ $prep = $wheres = array();
520
+
521
+ // Load General Settings
522
+ $this->core = mycred_get_settings();
523
+ if ( $this->core->format['decimals'] > 0 )
524
+ $format = '%f';
525
+ else
526
+ $format = '%d';
527
+
528
+ // Prep Defaults
529
+ $this->args = wp_parse_args( $args, array(
530
+ 'user_id' => NULL,
531
+ 'ctype' => $this->core->get_cred_id(),
532
+ 'number' => 25,
533
+ 'time' => NULL,
534
+ 'ref' => NULL,
535
+ 'ref_id' => NULL,
536
+ 'amount' => NULL,
537
+ 's' => NULL,
538
+ 'orderby' => 'time',
539
+ 'order' => 'DESC',
540
+ 'ids' => false
541
+ ) );
542
+
543
+ // Prep return
544
+ if ( $this->args['ids'] === true )
545
+ $select = 'SELECT id';
546
+ else
547
+ $select = 'SELECT *';
548
+
549
+ $wheres[] = 'ctype = %s';
550
+ $prep[] = $this->args['ctype'];
551
+
552
+ // User ID
553
+ if ( $this->args['user_id'] !== NULL ) {
554
+ $wheres[] = 'user_id = %d';
555
+ $prep[] = abs( $this->args['user_id'] );
556
+ }
557
+
558
+ // Reference
559
+ if ( $this->args['ref'] !== NULL ) {
560
+ $wheres[] = 'ref = %s';
561
+ $prep[] = sanitize_text_field( $this->args['ref'] );
562
+ }
563
+
564
+ // Reference ID
565
+ if ( $this->args['ref_id'] !== NULL ) {
566
+ $wheres[] = 'ref_id = %d';
567
+ $prep[] = sanitize_text_field( $this->args['ref_id'] );
568
+ }
569
+
570
+ // Amount
571
+ if ( $this->args['amount'] !== NULL ) {
572
+ // Range
573
+ if ( is_array( $this->args['amount'] ) && array_key_exists( 'start', $this->args['amount'] ) && array_key_exists( 'end', $this->args['amount'] ) ) {
574
+ $wheres[] = 'creds BETWEEN ' . $format . ' AND ' . $format;
575
+ $prep[] = $this->core->format_number( sanitize_text_field( $this->args['amount']['start'] ) );
576
+ $prep[] = $this->core->format_number( sanitize_text_field( $this->args['amount']['end'] ) );
577
+ }
578
+ // Compare
579
+ elseif ( is_array( $this->args['amount'] ) && array_key_exists( 'num', $this->args['amount'] ) && array_key_exists( 'compare', $this->args['amount'] ) ) {
580
+ $wheres[] = 'creds' . sanitize_text_field( $this->args['amount']['compare'] ) . ' ' . $format;
581
+ $prep[] = $this->core->format_number( sanitize_text_field( $this->args['amount']['num'] ) );
582
+ }
583
+ // Specific amount
584
+ else {
585
+ $wheres[] = 'creds = ' . $format;
586
+ $prep[] = $this->core->format_number( sanitize_text_field( $this->args['amount'] ) );
587
+ }
588
+ }
589
+
590
+ // Time
591
+ if ( $this->args['time'] !== NULL ) {
592
+ $today = strtotime( date_i18n( 'Y/m/d' ) );
593
+ $todays_date = date_i18n( 'd' );
594
+ $tomorrow = strtotime( date_i18n( 'Y/m/d', date_i18n( 'U' )+86400 ) );
595
+ $now = date_i18n( 'U' );
596
+
597
+ // Show todays entries
598
+ if ( $this->args['time'] == 'today' ) {
599
+ $wheres[] = "time BETWEEN $today AND $now";
600
+ }
601
+ // Show yesterdays entries
602
+ elseif ( $this->args['time'] == 'yesterday' ) {
603
+ $yesterday = strtotime( date_i18n( 'Y/m/d', date_i18n( 'U' )-86400 ) );
604
+ $wheres[] = "time BETWEEN $yesterday AND $today";
605
+ }
606
+ // Show this weeks entries
607
+ elseif ( $this->args['time'] == 'thisweek' ) {
608
+ $start_of_week = get_option( 'start_of_week' );
609
+ $weekday = date_i18n( 'w' );
610
+ // New week started today so show only todays
611
+ if ( $start_of_week == $weekday ) {
612
+ $wheres[] = "time BETWEEN $today AND $now";
613
+ }
614
+ // Show rest of this week
615
+ else {
616
+ $no_days_since_start_of_week = $weekday-$start_of_week;
617
+ $weekstart = $no_days_since_start_of_week*86400;
618
+ $weekstart = $today-$weekstart;
619
+ $wheres[] = "time BETWEEN $weekstart AND $now";
620
+ }
621
+ }
622
+ // Show this months entries
623
+ elseif ( $this->args['time'] == 'thismonth' ) {
624
+ $start_of_month = strtotime( date_i18n( 'Y/m/01' ) );
625
+ $wheres[] = "time BETWEEN $start_of_month AND $now";
626
+ }
627
+ }
628
+
629
+ // Search
630
+ if ( $this->args['s'] !== NULL ) {
631
+ $search_query = sanitize_text_field( $this->args['s'] );
632
+ if ( is_int( $search_query ) )
633
+ $search_query = (string) $search_query;
634
+
635
+ if ( $this->args['user_id'] !== NULL ) {
636
+ $user_id = $this->args['user_id'];
637
+ $wheres[] = "entry LIKE '%$search_query%' OR user_id = $user_id AND data LIKE '%$search_query%' OR user_id = $user_id AND ref LIKE '%$search_query%'";
638
+ }
639
+ else
640
+ $wheres[] = "entry LIKE '%$search_query%' OR data LIKE '%$search_query%' OR ref LIKE '%$search_query%'";
641
+ }
642
+
643
+ // Order by
644
+ if ( !empty( $this->args['orderby'] ) ) {
645
+ // Make sure $sortby is valid
646
+ $sortbys = array( 'id', 'ref', 'ref_id', 'user_id', 'creds', 'ctype', 'entry', 'data', 'time' );
647
+ $allowed = apply_filters( 'mycred_allowed_sortby', $sortbys );
648
+ if ( in_array( $this->args['orderby'], $allowed ) ) {
649
+ $sortby = "ORDER BY " . $this->args['orderby'] . " " . $this->args['order'];
650
+ }
651
+ }
652
+
653
+ // Limits
654
+ if ( $this->args['number'] == '-1' )
655
+ $limits = '';
656
+ elseif ( $this->args['number'] > 1 )
657
+ $limits = 'LIMIT 0,' . absint( $this->args['number'] );
658
+
659
+ // Filter
660
+ $select = apply_filters( 'mycred_query_log_select', $select, $this->args, $this->core );
661
+ $sortby = apply_filters( 'mycred_query_log_sortby', $sortby, $this->args, $this->core );
662
+ $limits = apply_filters( 'mycred_query_log_limits', $limits, $this->args, $this->core );
663
+ $wheres = apply_filters( 'mycred_query_log_wheres', $wheres, $this->args, $this->core );
664
+
665
+ $prep = apply_filters( 'mycred_query_log_prep', $prep, $this->args, $this->core );
666
+
667
+ $where = 'WHERE ' . implode( ' AND ', $wheres );
668
+
669
+ // Run
670
+ $this->request = "$select FROM " . $wpdb->prefix . 'myCRED_log' . " $where $sortby $limits";
671
+ $this->results = $wpdb->get_results( $wpdb->prepare( $this->request, $prep ) );
672
+ $this->prep = $prep;
673
+
674
+ // Counts
675
+ $this->num_rows = $wpdb->num_rows;
676
+ $this->headers = $this->table_headers();
677
+ }
678
+
679
+ /**
680
+ * Has Entries
681
+ * @returns true or false
682
+ * @since 0.1
683
+ * @version 1.0
684
+ */
685
+ public function have_entries() {
686
+ if ( !empty( $this->results ) ) return true;
687
+ return false;
688
+ }
689
+
690
+ /**
691
+ * Table Headers
692
+ * Returns all table column headers.
693
+ *
694
+ * @filter mycred_log_column_headers
695
+ * @since 0.1
696
+ * @version 1.0
697
+ */
698
+ public function table_headers() {
699
+ return apply_filters( 'mycred_log_column_headers', array(
700
+ 'column-username' => __( 'User', 'mycred' ),
701
+ 'column-time' => __( 'Date', 'mycred' ),
702
+ 'column-creds' => $this->core->plural(),
703
+ 'column-entry' => __( 'Entry', 'mycred' )
704
+ ), $this );
705
+ }
706
+
707
+ /**
708
+ * Display
709
+ * @since 0.1
710
+ * @version 1.0
711
+ */
712
+ public function display() {
713
+ echo $this->get_display();
714
+ }
715
+
716
+ /**
717
+ * Get Display
718
+ * Generates a table for our results.
719
+ *
720
+ * @since 0.1
721
+ * @version 1.0
722
+ */
723
+ public function get_display() {
724
+ $output = '
725
+ <table class="wp-list-table widefat fixed log-entries" cellspacing="0">
726
+ <thead>
727
+ <tr>';
728
+
729
+ // Table header
730
+ foreach ( $this->headers as $col_id => $col_title ) {
731
+ $output .= '<th scope="col" id="' . str_replace( 'column-', '', $col_id ) . '" class="manage-column ' . $col_id . '">' . $col_title . '</th>';
732
+ }
733
+
734
+ $output .= '
735
+ </tr>
736
+ </thead>
737
+ <tfoot>';
738
+
739
+ // Table footer
740
+ foreach ( $this->headers as $col_id => $col_title ) {
741
+ $output .= '<th scope="col" class="manage-column ' . $col_id . '">' . $col_title . '</th>';
742
+ }
743
+
744
+ $output .= '
745
+ </tfoot>
746
+ <tbody id="the-list">';
747
+
748
+ // Loop
749
+ if ( $this->have_entries() ) {
750
+ $alt = 0;
751
+ foreach ( $this->results as $log_entry ) {
752
+ $alt = $alt+1;
753
+ if ( $alt % 2 == 0 )
754
+ $class = ' alternate';
755
+ else
756
+ $class = '';
757
+
758
+ $output .= '<tr class="myCRED-log-row' . $class . '">';
759
+ $output .= $this->get_the_entry( $log_entry );
760
+ $output .= '</tr>';
761
+ }
762
+ }
763
+ // No log entry
764
+ else {
765
+ $output .= '<tr><td colspan="' . count( $this->headers ) . '" class="no-entries">' . $this->get_no_entries() . '</td></tr>';
766
+ }
767
+
768
+ $output .= '
769
+ </tbody>
770
+ </table>' . "\n";
771
+
772
+ return $output;
773
+ }
774
+
775
+ /**
776
+ * The Entry
777
+ * @since 0.1
778
+ * @version 1.0
779
+ */
780
+ public function the_entry( $log_entry ) {
781
+ echo $this->get_the_entry( $log_entry );
782
+ }
783
+
784
+ /**
785
+ * Get The Entry
786
+ * Generated a single entry row depending on the columns used / requested.
787
+ *
788
+ * @since 0.1
789
+ * @version 1.0
790
+ */
791
+ public function get_the_entry( $log_entry ) {
792
+ $date = get_option( 'date_format' ) . ' ' . get_option( 'time_format' );
793
+ $entry_data = '';
794
+
795
+ // Run though columns
796
+ foreach ( $this->headers as $column_id => $column_name ) {
797
+ switch ( $column_id ) {
798
+ // Username Column
799
+ case 'column-username':
800
+ $user = get_userdata( $log_entry->user_id );
801
+ $content = '<span>' . $user->display_name . '</span>';
802
+ unset( $user );
803
+ break;
804
+ // Date & Time Column
805
+ case 'column-time' :
806
+ $content = date_i18n( $date, $log_entry->time );
807
+ break;
808
+ // Amount Column
809
+ case 'column-creds' :
810
+ $content = $this->core->format_creds( $log_entry->creds );
811
+ break;
812
+ // Log Entry Column
813
+ case 'column-entry' :
814
+ $content = $this->core->parse_template_tags( $log_entry->entry, $log_entry );
815
+ break;
816
+ }
817
+ $entry_data .= '<td class="' . $column_id . '">' . $content . '</td>';
818
+ }
819
+ return $entry_data;
820
+ }
821
+
822
+ /**
823
+ * No Entries
824
+ * @since 0.1
825
+ * @version 1.0
826
+ */
827
+ public function no_entries() {
828
+ echo $this->get_no_entries();
829
+ }
830
+
831
+ /**
832
+ * Get No Entries
833
+ * @since 0.1
834
+ * @version 1.0
835
+ */
836
+ public function get_no_entries() {
837
+ return __( 'No log entries found', 'mycred' );
838
+ }
839
+ }
840
+ }
841
+ ?>
mycred.php ADDED
@@ -0,0 +1,536 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: myCRED
4
+ Plugin URI: http://mycred.merovingi.com
5
+ Description: <strong>my</strong>CRED is an adaptive points management system for WordPress powered websites, giving you full control on how points are gained, used, traded, managed, logged or presented.
6
+ Version: 1.0
7
+ Tags: points, tokens, credit, management, reward, charge
8
+ Author: Gabriel S Merovingi
9
+ Author URI: http://www.merovingi.com
10
+ Author Email: mycred@merovingi.com
11
+ Requires at least: WP 3.1
12
+ Tested up to: WP 3.5.1
13
+ Stable tag: 1.0
14
+ License: GPLv2 or later
15
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
16
+ */
17
+ define( 'myCRED_VERSION', '1.0' );
18
+ define( 'myCRED_SLUG', 'mycred' );
19
+
20
+ define( 'myCRED_THIS', __FILE__ );
21
+ define( 'myCRED_ROOT_DIR', plugin_dir_path( myCRED_THIS ) );
22
+ define( 'myCRED_ABSTRACTS_DIR', myCRED_ROOT_DIR . 'abstracts/' );
23
+ define( 'myCRED_ADDONS_DIR', myCRED_ROOT_DIR . 'addons/' );
24
+ define( 'myCRED_ASSETS_DIR', myCRED_ROOT_DIR . 'assets/' );
25
+ define( 'myCRED_INCLUDES_DIR', myCRED_ROOT_DIR . 'includes/' );
26
+ define( 'myCRED_LANG_DIR', myCRED_ROOT_DIR . 'lang/' );
27
+ define( 'myCRED_MODULES_DIR', myCRED_ROOT_DIR . 'modules/' );
28
+
29
+ /**
30
+ * myCRED_Core class
31
+ * @see http://mycred.merovingi.com/classes/mycred_core/
32
+ * @since 0.1
33
+ * @version 1.0
34
+ */
35
+ if ( !class_exists( 'myCRED_Core' ) ) {
36
+ class myCRED_Core {
37
+
38
+ public $plug;
39
+
40
+ /**
41
+ * Construct
42
+ */
43
+ function __construct() {
44
+ // Core functions
45
+ require_once( myCRED_INCLUDES_DIR . 'mycred-functions.php' );
46
+ if ( !$this->enabled() ) return;
47
+
48
+ // Plugin related
49
+ $this->plug = plugin_basename( myCRED_THIS );
50
+ add_filter( 'plugin_action_links_' . $this->plug, array( $this, 'plugin_links' ), 99, 4 );
51
+
52
+ // Introduce ourselves to WordPress
53
+ register_uninstall_hook( myCRED_THIS, array( __CLASS__, 'uninstall_mycred' ) );
54
+ register_activation_hook( myCRED_THIS, array( $this, 'activate_mycred' ) );
55
+ register_deactivation_hook( myCRED_THIS, array( $this, 'deactivate_mycred' ) );
56
+
57
+ // Network Settings
58
+ if ( is_multisite() && is_admin() )
59
+ require_once( myCRED_INCLUDES_DIR . 'mycred-network.php' );
60
+
61
+ // Make sure we are ready
62
+ if ( !$this->ready() ) return;
63
+
64
+ // Load these only when ready
65
+ require_once( myCRED_INCLUDES_DIR . 'mycred-rankings.php' );
66
+
67
+ // Load
68
+ $this->load();
69
+
70
+ // Localization
71
+ add_action( 'plugins_loaded', array( $this, 'language' ) );
72
+
73
+ // Inits
74
+ add_action( 'init', array( $this, 'init_mycred' ) );
75
+
76
+ if ( is_admin() )
77
+ add_action( 'admin_init', array( $this, 'admin_init_mycred' ) );
78
+
79
+ add_action( 'widgets_init', array( $this, 'widgets_init_mycred' ) );
80
+ add_action( 'mycred_reset_key', array( $this, 'reset_key' ) );
81
+
82
+ // Pre Init
83
+ do_action( 'mycred_pre_init' );
84
+
85
+ // Clean up
86
+ $this->clean_up();
87
+ }
88
+
89
+ /**
90
+ * Plugin Links
91
+ * @since 0.1
92
+ * @version 1.0
93
+ */
94
+ function plugin_links( $actions, $plugin_file, $plugin_data, $context ) {
95
+ // Link to Setup
96
+ if ( !$this->ready() ) {
97
+ $actions['setup'] = '<a href="' . admin_url( 'plugins.php?page=myCRED-setup' ) . '">' . __( 'Setup', 'mycred' ) . '</a>';
98
+ return $actions;
99
+ }
100
+
101
+ // Link to Settings
102
+ $mycred = mycred_get_settings();
103
+ if ( $mycred->can_edit_plugin() )
104
+ $actions['settings'] = '<a href="' . admin_url( 'admin.php?page=myCRED_page_settings' ) . '">' . __( 'Settings', 'mycred' ) . '</a>';
105
+
106
+ return $actions;
107
+ }
108
+
109
+ /**
110
+ * Runs when the plugin is activated
111
+ * @since 0.1
112
+ * @version 1.0
113
+ */
114
+ function activate_mycred() {
115
+ // Check if blocked
116
+ if ( !$this->enabled() )
117
+ die( __( 'myCRED is blocked for this site. Please contact your network administrator for further details.', 'mycred' ) );
118
+
119
+ // Load Installer
120
+ require_once( myCRED_INCLUDES_DIR . 'mycred-install.php' );
121
+ $install = new myCRED_Install();
122
+
123
+ // Compatibility check
124
+ $install->compat();
125
+
126
+ // First time activation
127
+ if ( $install->ver === false )
128
+ $install->activate();
129
+ // Re-activation
130
+ else
131
+ $install->reactivate();
132
+
133
+ // Add Cron Schedule
134
+ if ( !wp_next_scheduled( 'mycred_reset_key' ) ) {
135
+ $frequency = apply_filters( 'mycred_cron_reset_key', 'daily' );
136
+ wp_schedule_event( date_i18n( 'U' ), $frequency, 'mycred_reset_key' );
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Runs when the plugin is deactivated
142
+ * @since 0.1
143
+ * @version 1.0
144
+ */
145
+ function deactivate_mycred() {
146
+ do_action( 'mycred_deactivation' );
147
+ }
148
+
149
+ /**
150
+ * Reset Key
151
+ * @since 0.1
152
+ * @version 1.0
153
+ */
154
+ function reset_key() {
155
+ require_once( myCRED_INCLUDES_DIR . 'mycred-protect.php' );
156
+ $protect = new myCRED_Protect();
157
+ $protect->reset_key();
158
+ }
159
+
160
+ /**
161
+ * Runs when the plugin is deleted
162
+ * @since 0.1
163
+ * @version 1.0
164
+ */
165
+ function uninstall_mycred() {
166
+ // Load Installer
167
+ require_once( myCRED_INCLUDES_DIR . 'mycred-install.php' );
168
+ $install = new myCRED_Install();
169
+
170
+ do_action( 'mycred_before_deletion', $install );
171
+
172
+ // Run uninstaller
173
+ $install->uninstall();
174
+
175
+ do_action( 'mycred_after_deletion', $install );
176
+ unset( $install );
177
+ }
178
+
179
+ /**
180
+ * Check if Ready
181
+ * @since 0.1
182
+ * @version 1.0
183
+ */
184
+ function ready() {
185
+ global $mycred;
186
+ $mycred = new myCRED_Settings();
187
+
188
+ // Multisite Ready Check
189
+ if ( is_multisite() ) {
190
+ $mycred_network = mycred_get_settings_network();
191
+
192
+ // Check if setup is done
193
+ if ( $mycred_network['master'] == true && $GLOBALS['blog_id'] != 1 )
194
+ $setup = get_blog_option( 1, 'mycred_setup_completed_' . $GLOBALS['blog_id'] );
195
+ else
196
+ $setup = get_option( 'mycred_setup_completed' );
197
+
198
+ if ( $setup !== false ) return true;
199
+
200
+ // Install local database if needed
201
+ if ( $mycred_network['master'] == true && $GLOBALS['blog_id'] != 1 ) {
202
+ return $this->install_log();
203
+ }
204
+ }
205
+
206
+ // Regular Ready Check
207
+ if ( !is_multisite() ) {
208
+ $setup = get_option( 'mycred_setup_completed' );
209
+ if ( $setup !== false ) return true;
210
+ }
211
+
212
+ // If we have come this far we need to load the setup
213
+ require_once( myCRED_INCLUDES_DIR . 'mycred-install.php' );
214
+ $setup = new myCRED_Setup();
215
+ return $setup->status();
216
+ }
217
+
218
+ /**
219
+ * Load
220
+ * @since 0.1
221
+ * @version 2.0
222
+ */
223
+ function load() {
224
+ // Load Modules
225
+ $modules = apply_filters( 'mycred_modules', array(
226
+ 'addons' => array( 'class' => 'myCRED_Addons' ),
227
+ 'general' => array( 'class' => 'myCRED_General' ),
228
+ 'hooks' => array( 'class' => 'myCRED_Hooks' ),
229
+ 'log' => array( 'class' => 'myCRED_Log' ),
230
+ 'help' => array( 'class' => 'myCRED_Help' )
231
+ ) );
232
+
233
+ if ( !empty( $modules ) ) {
234
+
235
+ // Load Abstracts
236
+ require_once( myCRED_ABSTRACTS_DIR . 'mycred-abstract-module.php' );
237
+ require_once( myCRED_ABSTRACTS_DIR . 'mycred-abstract-hook.php' );
238
+
239
+ // Include, init and load each module
240
+ foreach ( $modules as $id => $data ) {
241
+ // If a file is not specified we assume it is our own and load from the default locaiton
242
+ if ( !isset( $data['file'] ) )
243
+ require_once( myCRED_MODULES_DIR . 'mycred-module-' . $id . '.php' );
244
+ // Load the custom file
245
+ else
246
+ require_once( $data['file'] );
247
+
248
+ // Load class
249
+ if ( isset( $data['class'] ) ) {
250
+ $class = $data['class'];
251
+ $module = new $class();
252
+ $module->load();
253
+ }
254
+ }
255
+ // Clean up
256
+ unset( $modules );
257
+ }
258
+ }
259
+
260
+ /**
261
+ * Load Textdomain
262
+ * @since 0.1
263
+ * @version 2.0
264
+ */
265
+ function language() {
266
+ load_plugin_textdomain( 'mycred', false, myCRED_LANG_DIR );
267
+ do_action( 'mycred_plugin_loaded' );
268
+ }
269
+
270
+ /**
271
+ * Initialize
272
+ * @since 0.1
273
+ * @version 2.0
274
+ */
275
+ function init_mycred() {
276
+ // Enqueue scripts & styles
277
+ add_action( 'wp_enqueue_scripts', array( $this, 'front_enqueue' ) );
278
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) );
279
+
280
+ // Admin Menu
281
+ add_action( 'admin_menu', array( $this, 'add_menu' ) );
282
+
283
+ // Admin Bar / Tool Bar
284
+ add_action( 'admin_bar_menu', array( $this, 'tool_bar' ) );
285
+
286
+ // Ranking shortcode
287
+ add_shortcode( 'mycred_leaderboard', 'mycred_render_leaderboard' );
288
+
289
+ // Let others play
290
+ do_action( 'mycred_init' );
291
+ }
292
+
293
+ /**
294
+ * Init Admin
295
+ * @since 0.1
296
+ * @version 2.0
297
+ */
298
+ function admin_init_mycred() {
299
+ // Load admin
300
+ require_once( myCRED_INCLUDES_DIR . 'mycred-admin.php' );
301
+ $admin = new myCRED_Admin();
302
+ $admin->load();
303
+
304
+ // Let others play
305
+ do_action( 'mycred_admin_init' );
306
+ }
307
+
308
+ /**
309
+ * Runs when widgets initialize
310
+ * Grabs the plugin widgets and registers them.
311
+ *
312
+ * @uses register_widget()
313
+ * @since 0.1
314
+ * @version 1.0
315
+ */
316
+ function widgets_init_mycred() {
317
+ // Load widgets
318
+ require_once( myCRED_INCLUDES_DIR . 'mycred-widgets.php' );
319
+
320
+ // Register Widgets
321
+ register_widget( 'myCRED_Widget_Balance' );
322
+ register_widget( 'myCRED_Widget_List' );
323
+
324
+ do_action( 'mycred_widgets_init' );
325
+ }
326
+
327
+ /**
328
+ * Adjust the Tool Bar
329
+ * @since 0.1
330
+ * @version 1.0
331
+ */
332
+ function tool_bar( $wp_admin_bar ) {
333
+ global $bp;
334
+
335
+ if ( isset( $bp ) ) return;
336
+
337
+ $mycred = mycred_get_settings();
338
+ $user_id = get_current_user_id();
339
+ if ( $mycred->exclude_user( $user_id ) ) return;
340
+
341
+ $cred = $mycred->get_users_cred( $user_id );
342
+ $creds_formated = $mycred->format_creds( $cred );
343
+
344
+ $wp_admin_bar->add_group( array(
345
+ 'parent' => 'my-account',
346
+ 'id' => 'mycred-actions',
347
+ ) );
348
+
349
+ if ( $mycred->can_edit_plugin() )
350
+ $url = 'users.php?page=mycred_my_history';
351
+ else
352
+ $url = 'profile.php?page=mycred_my_history';
353
+
354
+ $wp_admin_bar->add_menu( array(
355
+ 'parent' => 'mycred-actions',
356
+ 'id' => 'user-creds',
357
+ 'title' => __( 'My Balance: ', 'mycred' ) . $creds_formated,
358
+ 'href' => admin_url( $url )
359
+ ) );
360
+
361
+ // Let others play
362
+ do_action( 'mycred_tool_bar', $mycred );
363
+ }
364
+
365
+ /**
366
+ * Add myCRED Admin Menu
367
+ * @uses add_menu_page()
368
+ * @since 0.1
369
+ * @version 1.0
370
+ */
371
+ function add_menu() {
372
+ $mycred = mycred_get_settings();
373
+ $page = add_menu_page(
374
+ __( 'myCRED', 'mycred' ),
375
+ __( 'myCRED', 'mycred' ),
376
+ $mycred->edit_creds_cap(),
377
+ 'myCRED',
378
+ '',
379
+ ''
380
+ );
381
+ add_action( 'admin_print_styles-' . $page, array( $this, 'admin_print_styles' ) );
382
+
383
+ // Let others play
384
+ do_action( 'mycred_add_menu', $mycred );
385
+ }
386
+
387
+ /**
388
+ * Enqueue Front
389
+ * @filter 'mycred_remove_widget_css'
390
+ * @since 0.1
391
+ * @version 1.0
392
+ */
393
+ function front_enqueue() {
394
+ // Widget Scripts
395
+ wp_register_script(
396
+ 'mycred-widget',
397
+ plugins_url( 'assets/js/widget.js', myCRED_THIS ),
398
+ array( 'jquery' ),
399
+ myCRED_VERSION . '.1'
400
+ );
401
+ wp_enqueue_script( 'mycred-widget' );
402
+
403
+ // Widget Style (can be disabled)
404
+ if ( apply_filters( 'mycred_remove_widget_css', false ) === false ) {
405
+ wp_register_style(
406
+ 'mycred-widget',
407
+ plugins_url( 'assets/css/widget.css', myCRED_THIS ),
408
+ false,
409
+ myCRED_VERSION . '.1',
410
+ 'all'
411
+ );
412
+ wp_enqueue_style( 'mycred-widget' );
413
+ }
414
+
415
+ // Let others play
416
+ do_action( 'mycred_front_enqueue' );
417
+ }
418
+
419
+ /**
420
+ * Enqueue Admin
421
+ * @since 0.1
422
+ * @version 1.0
423
+ */
424
+ function admin_enqueue() {
425
+ // Admin Scripts
426
+ wp_register_script(
427
+ 'mycred-admin',
428
+ plugins_url( 'assets/js/accordion.js', myCRED_THIS ),
429
+ array( 'jquery', 'jquery-ui-core', 'jquery-ui-accordion' ),
430
+ myCRED_VERSION . '.1'
431
+ );
432
+ wp_localize_script( 'mycred-admin', 'myCRED', apply_filters( 'mycred_localize_admin', array( 'active' => '-1' ) ) );
433
+
434
+ // Admin Style
435
+ wp_register_style(
436
+ 'mycred-admin',
437
+ plugins_url( 'assets/css/admin.css', myCRED_THIS ),
438
+ false,
439
+ myCRED_VERSION . '.1',
440
+ 'all'
441
+ );
442
+
443
+ // Let others play
444
+ do_action( 'mycred_admin_enqueue' );
445
+ }
446
+
447
+ /**
448
+ * Enqueue Admin Styling
449
+ * @since 0.1
450
+ * @version 1.0
451
+ */
452
+ function admin_print_styles() {
453
+ wp_enqueue_style( 'mycred-admin' );
454
+ }
455
+
456
+ /**
457
+ * Clear up
458
+ * @since 0.1
459
+ * @version 1.0
460
+ */
461
+ private function clean_up() {
462
+ unset( $this );
463
+ }
464
+
465
+ /**
466
+ * Enabled
467
+ * Check if plugin is enabled.
468
+ * Requires Multisite
469
+ * @since 0.1
470
+ * @version 1.0
471
+ */
472
+ private function enabled() {
473
+ // Not a multisite = enabled
474
+ if ( !is_multisite() ) return true;
475
+
476
+ $prefs = mycred_get_settings_network();
477
+
478
+ // Disable list is empty = enabled
479
+ if ( empty( $prefs['block'] ) ) return true;
480
+
481
+ // Not in disable list = enabled
482
+ $blog_ids = explode( ',', $prefs['block'] );
483
+ if ( !in_array( $GLOBALS['blog_id'], $blog_ids ) ) return true;
484
+
485
+ // All else = disabled
486
+ return false;
487
+ }
488
+
489
+ /**
490
+ * Install Log
491
+ * Installs the log for a site.
492
+ * Requires Multisite
493
+ * @since 0.1
494
+ * @version 1.0
495
+ */
496
+ private function install_log() {
497
+ if ( get_blog_option( $GLOBALS['blog_id'], 'mycred_version_db', false ) !== false ) return true;
498
+
499
+ global $wpdb;
500
+
501
+ $mycred = mycred_get_settings();
502
+ $decimals = (int) $mycred->format['decimals'];
503
+ if ( $decimals > 0 ) {
504
+ if ( $decimals > 4 )
505
+ $cred_format = "decimal(32,$decimals)";
506
+ else
507
+ $cred_format = "decimal(22,$decimals)";
508
+ }
509
+ else {
510
+ $cred_format = 'bigint(22)';
511
+ }
512
+
513
+ $table_name = $wpdb->prefix . 'myCRED_log';
514
+ // Log structure
515
+ $sql = "id int(11) NOT NULL AUTO_INCREMENT,
516
+ ref VARCHAR(256) NOT NULL,
517
+ ref_id int(11) DEFAULT NULL,
518
+ user_id int(11) DEFAULT NULL,
519
+ creds $cred_format DEFAULT NULL,
520
+ ctype VARCHAR(64) DEFAULT 'mycred_default',
521
+ time bigint(20) DEFAULT NULL,
522
+ entry LONGTEXT DEFAULT NULL,
523
+ data LONGTEXT DEFAULT NULL,
524
+ PRIMARY KEY (id),
525
+ UNIQUE KEY id (id)";
526
+
527
+ // Insert table
528
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
529
+ dbDelta( "CREATE TABLE IF NOT EXISTS " . $table_name . " ( " . $sql . " ) DEFAULT CHARSET = utf8 COLLATE = utf8_general_ci;" );
530
+ add_blog_option( 'mycred_version_db', '1.0', '', 'no' );
531
+ return true;
532
+ }
533
+ }
534
+ new myCRED_Core();
535
+ }
536
+ ?>
readme.txt ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === myCRED ===
2
+ Contributors: designbymerovingi
3
+ Donate Link: http://mycred.merovingi.com/donate/
4
+ Tags:points, tokens, credit, management, reward, charge, community
5
+ Requires at least: 3.1
6
+ Tested up to: 3.5.1
7
+ Stable tag: 1.0
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ myCRED is an adaptive points management system for WordPress powered websites.
12
+
13
+ == Description ==
14
+
15
+ We feel that todays WordPress community lacks a flexible points management system. Existing system often feel restrictive, stale or to restrictive in their function.
16
+
17
+ So we built an adaptive plugin which gives it’s users full control on how points are awarded, used, traded, managed, logged and presented.
18
+
19
+ myCRED is an adaptive points management system for WordPress powered websites, giving you full control on how points are gained, used, traded, managed, logged or presented.
20
+
21
+ **Core Features:**
22
+
23
+ * Logging of all events
24
+ * Log entry templates and template tags
25
+ * Easy User Points editing
26
+ * Easy to manage Hooks for each instance where users gain/loose points
27
+ * Supports any point format
28
+ * Ranking
29
+ * Custom My Balance Widget
30
+ * Custom Leader board Widget
31
+ * Minimum CSS Styling
32
+
33
+ **Add-ons:**
34
+
35
+ Add-ons are custom features that can be enabled individually.
36
+
37
+ * Transfer - Allows your users to send points to other members with an option to impose a daily-, weekly- or monthly transfer limit.
38
+ * Import - Import points from a CSV-file, Cubepoints or points stored under any custom user meta key.
39
+ * Sell Content - Sell access to entire contents or parts of it with the option to share a percentage of the sale with the content author.
40
+ * Buy Creds - Let your users buy points via PayPal, Skrill or NETbilling.
41
+ * Gateway - Allow your users to pay for items in their WooCommerce shopping cart using their point balance.
42
+ * BuddyPress - Extend myCRED to support BuddyPress, bbPress, BuddyPress Gifts, BuddyPress Links, BP Album+ and BP Gallery.
43
+
44
+ **Multisites**
45
+
46
+ myCRED supports Multisite installations and offers you the following features:
47
+
48
+ * Master Template - Force your main sites myCRED installation upon all other sites. Each site will have it's own log but have no access to any settings, hooks or add-ons.
49
+ * Block List - Allows you to block specific sites from using myCRED.
50
+
51
+ **Supported Third-party Plugins:**
52
+
53
+ The following third party plugins are supported by default:
54
+
55
+ * [Contact Form 7](http://wordpress.org/extend/plugins/contact-form-7/) - Award users points for submitting forms.
56
+ * [Invite Anyone Plugin](http://wordpress.org/extend/plugins/invite-anyone/) - Award users for sending invitations and for each time an invited user accepts and signs up.
57
+
58
+ **Further Details**
59
+
60
+ * [myCRED Features](http://mycred.merovingi.com/about/features/)
61
+ * [myCRED Hooks](http://mycred.merovingi.com/about/hooks/)
62
+ * [myCRED F.A.Q.](http://mycred.merovingi.com/about/faq/)
63
+ * [myCRED Add-ons](http://mycred.merovingi.com/add-ons/)
64
+ * [myCRED Tutorials](http://mycred.merovingi.com/support/tutorials/)
65
+ * [myCRED Codex](http://mycred.merovingi.com/support/codex/)
66
+
67
+ **Contact**
68
+
69
+ * [General Inquiries](http://mycred.merovingi.com/contact/)
70
+ * [Bug Report](http://mycred.merovingi.com/contact/report-bug/)
71
+ * [Request Feature](http://mycred.merovingi.com/contact/request-feature/)
72
+
73
+
74
+ == Installation ==
75
+
76
+ 1. Upload `mycred` to the `/wp-content/plugins/` directory
77
+ 2. Activate the plugin through the 'Plugins' menu in WordPress
78
+ 3. Run the myCRED Setup which will allow you to configure your myCRED installation
79
+ 4. Activate the Add-ons you wish to use under the 'myCRED' menu in WordPress
80
+ 5. Configure and Enable the hooks you wish to use though the 'Hooks' sub menu in WordPress
81
+ 6. Configure any other Add-on settings you might be using i.e. BuddyPress though the 'Settings' sub menu in WordPress
82
+
83
+ == Frequently Asked Questions ==
84
+
85
+ = Does myCRED support Multisite Installations? =
86
+
87
+ Yes, myCRED supports Multisite installations.
88
+
89
+ = Can my "Points" use decimals? =
90
+
91
+ Yes. When you run the myCRED Setup, you will be asked if you want to use whole numbers or decimals. However it should be noted that once the setup is completed, this can not be changed without first deleting myCRED though the 'Delete Plugin' function in WordPress (in other words, DO NOT delete the files using FTP).
92
+
93
+ = I want to charge a user for creating a group, can I disable group creation for users who does not have enough points? =
94
+
95
+ Yes. You can set a negative value for either "Creating Group" or "Joining Group" which will restrict a user from creating or joining any group unless they have enough points without going minus on their account.
96
+
97
+ = Some Hooks contain several instances where points might be given to users. Can I disable parts of them or do I have to use every instance? =
98
+
99
+ You can always disable parts of a hook by awarding zero points. Hooks that have zero points are ignored.
100
+
101
+ == Screenshots ==
102
+
103
+ 1. **Multisites** - The myCRED Network Settings Page gives you access to the Master Template feature and the Block List.
104
+ 2. **Gateway Add-on** - Using myCRED as a Payment Gateway in your WooCommerce Shopping Cart plugin.
105
+ 3. **The Log** - with the option to search or filter results. Each user will also get their own Log page under the "Users" menu.
106
+ 4. **Editing Users Balance** - You can edit each users point balance directly under "Edit User".
107
+ 5. **Import Add-on** - The Import Add-on allows you to import points using a CSV file or by importing existing points from your database.
108
+
109
+ == Changelog ==
110
+
111
+ = 1.0 =
112
+ * Official release.