Restaurant Reservations - Version 2.1.18

Version Description

(2020-08-06) = - Correcting issue that sometimes allowed overbooking when there was one place left for a time slot, but the minimum party size was set to two or more. - Correcting issue where there would be no action or submit message after a customer cancelled their order on the front end. - Adds a blank/empty option for the Location dropdown in the booking form. - CSS/styling updates for the admin. - Dashboard updates for the the ultimate version. - Enhanced upgrade process. - A trial of the ultimate version is now available.

Download this release

Release Info

Developer Rustaurius
Plugin Icon 128x128 Restaurant Reservations
Version 2.1.18
Comparing to
See all releases

Code changes from version 2.2.12 to 2.1.18

Files changed (180) hide show
  1. assets/css/admin.css +69 -134
  2. assets/css/booking-form.css +19 -87
  3. assets/css/columns.css +2 -14
  4. assets/css/contemporary.css +7 -23
  5. assets/js/admin.js +2 -48
  6. assets/js/booking-form.js +22 -118
  7. assets/js/dashboard-review-ask.js +6 -4
  8. assets/js/plugin-deactivation.js +1 -1
  9. assets/js/stripe-payment.js +14 -162
  10. assets/js/stripe.js +3 -0
  11. includes/AdminBookings.class.php +27 -21
  12. includes/Ajax.class.php +182 -480
  13. includes/Booking.class.php +22 -272
  14. includes/CustomPostTypes.class.php +0 -12
  15. includes/Dashboard.class.php +3 -4
  16. includes/Export.CSV.class.php +2 -87
  17. includes/Export.PDF.class.php +1 -23
  18. includes/Field.class.php +2 -13
  19. includes/Import.class.php +17 -17
  20. includes/InstallationWalkthrough.class.php +18 -21
  21. includes/MailChimp.class.php +2 -6
  22. includes/Migration.class.php +0 -45
  23. includes/MultipleLocations.class.php +1 -7
  24. includes/Notification.Email.class.php +2 -20
  25. includes/Notifications.class.php +3 -3
  26. includes/Permissions.class.php +1 -2
  27. includes/Query.class.php +2 -8
  28. includes/Settings.class.php +18 -64
  29. includes/WP_List_Table.BookingsTable.class.php +24 -65
  30. includes/class-designer.php +0 -22
  31. includes/integrations/business-profile.php +0 -32
  32. includes/load-customizer.php +0 -148
  33. includes/load-notifications.php +0 -10
  34. includes/template-functions.php +70 -121
  35. languages/restaurant-reservations-nl_NL.mo +0 -0
  36. languages/restaurant-reservations-nl_NL.po +3 -3
  37. languages/restaurant-reservations.pot +1018 -2478
  38. lib/simple-admin-pages/classes/AdminPageSetting.Toggle.class.php +3 -2
  39. lib/simple-admin-pages/lib/pickadate/picker.date.js +1 -1
  40. lib/simple-admin-pages/lib/pickadate/picker.js +2 -2
  41. lib/simple-admin-pages/lib/pickadate/picker.time.js +1 -1
  42. lib/simple-admin-pages/lib/pickadate/translations/ge_GEO.js +0 -1
  43. lib/simple-admin-pages/lib/pickadate/translations/ja_JP.js +1 -1
  44. lib/simple-admin-pages/lib/pickadate/translations/km_KH.js +0 -1
  45. lib/simple-admin-pages/lib/pickadate/translations/sr_RS_cy.js +0 -1
  46. lib/simple-admin-pages/lib/pickadate/translations/sr_RS_lt.js +0 -1
  47. lib/stripe/.coveralls.yml +4 -0
  48. lib/stripe/.gitignore +14 -0
  49. lib/stripe/.travis.yml +17 -0
  50. lib/stripe/CHANGELOG.md +364 -0
  51. lib/stripe/LICENSE +1 -1
  52. lib/stripe/README.md +129 -0
  53. lib/stripe/VERSION +1 -0
  54. lib/stripe/build.php +36 -0
  55. lib/stripe/composer.json +36 -0
  56. lib/stripe/data/ca-certificates.crt +1283 -840
  57. lib/stripe/data/test.png +0 -0
  58. lib/stripe/init.php +55 -228
  59. lib/stripe/lib-version +0 -1
  60. lib/stripe/lib/Account.php +67 -367
  61. lib/stripe/lib/AccountLink.php +0 -26
  62. lib/stripe/lib/AlipayAccount.php +3 -65
  63. lib/stripe/lib/ApiOperations/All.php +0 -37
  64. lib/stripe/lib/ApiOperations/Create.php +0 -31
  65. lib/stripe/lib/ApiOperations/Delete.php +0 -30
  66. lib/stripe/lib/ApiOperations/NestedResource.php +0 -135
  67. lib/stripe/lib/ApiOperations/Request.php +0 -68
  68. lib/stripe/lib/ApiOperations/Retrieve.php +0 -30
  69. lib/stripe/lib/ApiOperations/Update.php +0 -52
  70. lib/stripe/lib/ApiRequestor.php +90 -372
  71. lib/stripe/lib/ApiResource.php +148 -63
  72. lib/stripe/lib/ApiResponse.php +8 -21
  73. lib/stripe/lib/ApplePayDomain.php +0 -31
  74. lib/stripe/lib/ApplicationFee.php +36 -57
  75. lib/stripe/lib/ApplicationFeeRefund.php +11 -33
  76. lib/stripe/lib/AttachedObject.php +31 -0
  77. lib/stripe/lib/Balance.php +8 -27
  78. lib/stripe/lib/BalanceTransaction.php +44 -58
  79. lib/stripe/lib/BankAccount.php +8 -115
  80. lib/stripe/lib/BaseStripeClient.php +0 -269
  81. lib/stripe/lib/BillingPortal/Configuration.php +0 -31
  82. lib/stripe/lib/BillingPortal/Session.php +0 -42
  83. lib/stripe/lib/BitcoinReceiver.php +58 -44
  84. lib/stripe/lib/BitcoinTransaction.php +4 -10
  85. lib/stripe/lib/Capability.php +0 -87
  86. lib/stripe/lib/Card.php +3 -132
  87. lib/stripe/lib/Charge.php +155 -117
  88. lib/stripe/lib/Checkout/Session.php +0 -90
  89. lib/stripe/lib/Collection.php +27 -221
  90. lib/stripe/lib/CountrySpec.php +33 -19
  91. lib/stripe/lib/Coupon.php +66 -30
  92. lib/stripe/lib/CreditNote.php +0 -111
  93. lib/stripe/lib/CreditNoteLineItem.php +0 -26
  94. lib/stripe/lib/Customer.php +103 -189
  95. lib/stripe/lib/CustomerBalanceTransaction.php +0 -103
  96. lib/stripe/lib/Discount.php +0 -23
  97. lib/stripe/lib/Dispute.php +60 -59
  98. lib/stripe/lib/EphemeralKey.php +0 -43
  99. lib/stripe/lib/Error/Api.php +7 -0
  100. lib/stripe/lib/Error/ApiConnection.php +7 -0
  101. lib/stripe/lib/Error/Authentication.php +7 -0
  102. lib/stripe/lib/Error/Base.php +60 -0
  103. lib/stripe/lib/Error/Card.php +41 -0
  104. lib/stripe/lib/Error/InvalidRequest.php +23 -0
  105. lib/stripe/lib/Error/RateLimit.php +7 -0
  106. lib/stripe/lib/ErrorObject.php +0 -164
  107. lib/stripe/lib/Event.php +28 -216
  108. lib/stripe/lib/Exception/ApiConnectionException.php +0 -12
  109. lib/stripe/lib/Exception/ApiErrorException.php +0 -219
  110. lib/stripe/lib/Exception/AuthenticationException.php +0 -11
  111. lib/stripe/lib/Exception/BadMethodCallException.php +0 -7
  112. lib/stripe/lib/Exception/CardException.php +0 -84
  113. lib/stripe/lib/Exception/ExceptionInterface.php +0 -22
  114. lib/stripe/lib/Exception/IdempotencyException.php +0 -11
  115. lib/stripe/lib/Exception/InvalidArgumentException.php +0 -7
  116. lib/stripe/lib/Exception/InvalidRequestException.php +0 -60
  117. lib/stripe/lib/Exception/OAuth/ExceptionInterface.php +0 -10
  118. lib/stripe/lib/Exception/OAuth/InvalidClientException.php +0 -12
  119. lib/stripe/lib/Exception/OAuth/InvalidGrantException.php +0 -13
  120. lib/stripe/lib/Exception/OAuth/InvalidRequestException.php +0 -11
  121. lib/stripe/lib/Exception/OAuth/InvalidScopeException.php +0 -10
  122. lib/stripe/lib/Exception/OAuth/OAuthErrorException.php +0 -19
  123. lib/stripe/lib/Exception/OAuth/UnknownOAuthErrorException.php +0 -12
  124. lib/stripe/lib/Exception/OAuth/UnsupportedGrantTypeException.php +0 -11
  125. lib/stripe/lib/Exception/OAuth/UnsupportedResponseTypeException.php +0 -11
  126. lib/stripe/lib/Exception/PermissionException.php +0 -11
  127. lib/stripe/lib/Exception/RateLimitException.php +0 -12
  128. lib/stripe/lib/Exception/SignatureVerificationException.php +0 -74
  129. lib/stripe/lib/Exception/UnexpectedValueException.php +0 -7
  130. lib/stripe/lib/Exception/UnknownApiErrorException.php +0 -12
  131. lib/stripe/lib/ExchangeRate.php +0 -30
  132. lib/stripe/lib/ExternalAccount.php +89 -0
  133. lib/stripe/lib/File.php +0 -82
  134. lib/stripe/lib/FileLink.php +0 -30
  135. lib/stripe/lib/FileUpload.php +61 -0
  136. lib/stripe/lib/HttpClient/ClientInterface.php +4 -8
  137. lib/stripe/lib/HttpClient/CurlClient.php +156 -409
  138. lib/stripe/lib/Invoice.php +40 -209
  139. lib/stripe/lib/InvoiceItem.php +66 -38
  140. lib/stripe/lib/InvoiceLineItem.php +0 -33
  141. lib/stripe/lib/Issuing/Authorization.php +0 -81
  142. lib/stripe/lib/Issuing/Card.php +0 -59
  143. lib/stripe/lib/Issuing/CardDetails.php +0 -19
  144. lib/stripe/lib/Issuing/Cardholder.php +0 -39
  145. lib/stripe/lib/Issuing/Dispute.php +0 -53
  146. lib/stripe/lib/Issuing/Transaction.php +0 -43
  147. lib/stripe/lib/JsonSerializable.php +18 -0
  148. lib/stripe/lib/LineItem.php +0 -26
  149. lib/stripe/lib/LoginLink.php +0 -15
  150. lib/stripe/lib/Mandate.php +0 -27
  151. lib/stripe/lib/OAuth.php +0 -101
  152. lib/stripe/lib/OAuthErrorObject.php +0 -31
  153. lib/stripe/lib/Order.php +58 -52
  154. lib/stripe/lib/OrderItem.php +0 -19
  155. lib/stripe/lib/OrderReturn.php +22 -21
  156. lib/stripe/lib/PaymentIntent.php +0 -125
  157. lib/stripe/lib/PaymentMethod.php +0 -88
  158. lib/stripe/lib/Payout.php +0 -108
  159. lib/stripe/lib/Person.php +0 -120
  160. lib/stripe/lib/Plan.php +66 -46
  161. lib/stripe/lib/Price.php +0 -62
  162. lib/stripe/lib/Product.php +65 -41
  163. lib/stripe/lib/PromotionCode.php +0 -33
  164. lib/stripe/lib/Radar/EarlyFraudWarning.php +0 -38
  165. lib/stripe/lib/Radar/ValueList.php +0 -35
  166. lib/stripe/lib/Radar/ValueListItem.php +0 -31
  167. lib/stripe/lib/Recipient.php +81 -33
  168. lib/stripe/lib/RecipientTransfer.php +0 -36
  169. lib/stripe/lib/Refund.php +61 -40
  170. lib/stripe/lib/Reporting/ReportRun.php +0 -37
  171. lib/stripe/lib/Reporting/ReportType.php +0 -34
  172. lib/stripe/lib/RequestTelemetry.php +0 -26
  173. lib/stripe/lib/Review.php +0 -66
  174. lib/stripe/lib/SKU.php +66 -33
  175. lib/stripe/lib/Service/AbstractService.php +0 -79
  176. lib/stripe/lib/Service/AbstractServiceFactory.php +0 -59
  177. lib/stripe/lib/Service/AccountLinkService.php +0 -25
  178. lib/stripe/lib/Service/AccountService.php +0 -381
  179. lib/stripe/lib/Service/ApplePayDomainService.php +0 -70
  180. lib/stripe/lib/Service/ApplicationFeeService.php +0 -34
assets/css/admin.css CHANGED
@@ -42,9 +42,8 @@
42
  top: -9999px;
43
  left: -9999px;
44
  display: inline-block;
45
- padding: 12px;
46
- background: #fff;
47
- box-sizing: border-box;
48
  -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
49
  box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
50
  }
@@ -52,8 +51,7 @@
52
  #rtb-filters.date-filters-visible .date-filters {
53
  position: relative;
54
  top: auto;
55
- left: 0;
56
- width: 300px;
57
  }
58
 
59
  #rtb-filters .date-filters .datepicker {
@@ -190,51 +188,25 @@
190
  filter: opacity(alpha=100);
191
  }
192
 
193
- #rtb-bookings-table .striped tr {
194
- background-color: #eaeaeac7;
195
- }
196
-
197
- #rtb-bookings-table .striped tr.alternate {
198
- background-color: #f6f7f7;
199
- }
200
-
201
  #rtb-bookings-table tr.pending .check-column {
202
- border-left: 4px solid #dd3d36;
203
  }
204
 
205
- #rtb-bookings-table .striped>tbody>tr.pending {
206
- background-color: rgba(255,0,0,0.35);
207
- }
208
- #rtb-bookings-table .striped>tbody>tr.pending.alternate {
209
- background-color: rgba(255,0,0,0.25);
210
  }
211
-
212
- #rtb-bookings-table tr:is(.pending, .payment_pending, .payment_failed) .check-column input[type=checkbox] {
213
- margin-left: 4px;
214
  }
215
 
216
- #rtb-bookings-table tr:is(.payment_pending, .payment_failed) .check-column {
217
- border-left: 4px solid #cca322;
218
  }
219
 
220
- #rtb-bookings-table .striped>tbody>tr:is(.payment_pending, .payment_failed) {
221
- background-color: rgba(255,197,7,0.55);
222
- }
223
- #rtb-bookings-table .striped>tbody>tr:is(.payment_pending, .payment_failed).alternate {
224
- background-color: rgba(255,197,7,0.35);
225
- }
226
-
227
- #rtb-bookings-table .striped > tbody > tr.payment_failed .column-status::before {
228
- content: "\f14c";
229
- font-family: dashicons;
230
- padding: 0 5px 0 0;
231
- vertical-align: sub;
232
- }
233
-
234
- #rtb-bookings-table .striped>tbody>tr.confirmed {
235
  background-color: rgba(46,162,204,0.35);
236
  }
237
- #rtb-bookings-table .striped>tbody>tr.confirmed.alternate {
238
  background-color: rgba(46,162,204,0.25);
239
  }
240
 
@@ -420,7 +392,6 @@
420
  .rtb-admin-modal.is-visible {
421
  visibility: visible;
422
  opacity: 1;
423
- float: none;
424
  -webkit-transition: opacity 0.3s 0, visibility 0 0;
425
  -moz-transition: opacity 0.3s 0, visibility 0 0;
426
  transition: opacity 0.3s 0, visibility 0 0;
@@ -795,10 +766,10 @@ NEW DASHBOARD
795
 
796
  /*** WRAP ***/
797
 
798
- body[class*="_rtb-dashboard"] #wpcontent {
799
  padding-left: 0;
800
  }
801
- body[class*="_rtb-dashboard"] .wrap {
802
  margin: 10px 0 0;
803
  }
804
 
@@ -986,9 +957,9 @@ body[class*="_rtb-dashboard"] .wrap {
986
  float: left;
987
  width: 100%;
988
  }
989
- body[class*="_rtb-settings"] .rtb-admin-header-menu,
990
- body[class*="_cffrtb-editor"] .rtb-admin-header-menu,
991
- body[class*="_rtb-bookings"] .rtb-admin-header-menu {
992
  margin-left: -20px;
993
  width: calc(100% + 20px);
994
  }
@@ -1833,7 +1804,7 @@ body[class*="_rtb-bookings"] .rtb-admin-header-menu {
1833
  /************************/
1834
 
1835
  /* Side Menu */
1836
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper {
1837
  position: relative;
1838
  float: left;
1839
  border: none;
@@ -1843,7 +1814,7 @@ body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper {
1843
  padding-top: 0;
1844
  margin-top: 20px;
1845
  }
1846
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper a {
1847
  clear: both;
1848
  display: block;
1849
  position: relative;
@@ -1861,29 +1832,29 @@ body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper a {
1861
  line-height: 34px;
1862
  font-size: 13px;
1863
  }
1864
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper a:last-of-type {
1865
  border-bottom: none;
1866
  }
1867
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper a.nav-tab-active {
1868
  box-shadow: none;
1869
  background-color: #fff !important;
1870
  color: #1b335f;
1871
  border-left: 4px solid #1b335f;
1872
  }
1873
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper a:hover {
1874
  color: #29324e;
1875
  background-color: rgba(199,199,199, 0.5);
1876
  box-shadow: none;
1877
  border-left: 4px solid #29324e;
1878
  }
1879
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper a.nav-tab-active:hover {
1880
  color: #1b335f;
1881
  background-color: #fff;
1882
  border-left: 4px solid #1b335f;
1883
  }
1884
 
1885
  /* Right side */
1886
- body[class*="_rtb-settings"] .wrap form {
1887
  display: block;
1888
  position: relative;
1889
  float: left;
@@ -1896,13 +1867,13 @@ body[class*="_rtb-settings"] .wrap form {
1896
  border: none;
1897
  }
1898
 
1899
- body[class*="_rtb-settings"] .wrap form h2:first-of-type {
1900
  font-size: 18px;
1901
  color: #1b335f;
1902
  margin: 0 0 32px !important;
1903
  }
1904
 
1905
- body[class*="_rtb-settings"] .wrap form h2:nth-of-type(1n+2) {
1906
  position: relative;
1907
  float: left;
1908
  background: #1b335f;
@@ -1915,7 +1886,7 @@ body[class*="_rtb-settings"] .wrap form h2:nth-of-type(1n+2) {
1915
  text-transform: uppercase;
1916
  z-index: 2;
1917
  }
1918
- body[class*="_rtb-settings"] .wrap form .form-table {
1919
  width: 100%;
1920
  box-sizing: border-box;
1921
  margin: 0 auto 16px;
@@ -1924,13 +1895,13 @@ body[class*="_rtb-settings"] .wrap form .form-table {
1924
  padding: 11px 5%;
1925
  }
1926
 
1927
- body[class*="_rtb-settings"] .wrap form p.description {
1928
  display: none;
1929
  }
1930
- body[class*="_rtb-settings"] .wrap form .form-table p.description {
1931
  display: block;
1932
  }
1933
- body[class*="_rtb-settings"] .wrap form .form-table p.description.disabled {
1934
  color: #b5b5b5;
1935
  }
1936
 
@@ -2012,7 +1983,7 @@ input:checked + .rtb-admin-switch-slider:before {
2012
 
2013
 
2014
  /* RADIO BUTTON AND CHECKBOX */
2015
- body[class*="_rtb-settings"] .wrap form .form-table fieldset label {
2016
  line-height: 1.4em;
2017
  margin: .25em 0 .5em;
2018
  display: inline-block;
@@ -2098,23 +2069,23 @@ body[class*="_rtb-settings"] .wrap form .form-table fieldset label {
2098
  }
2099
 
2100
  /* Textbox and Text Area and Select boxes */
2101
- body[class*="_rtb-settings"] .wrap form .form-table input[type=text],
2102
- body[class*="_rtb-settings"] .wrap form .form-table input[type=search],
2103
- body[class*="_rtb-settings"] .wrap form .form-table input[type=tel],
2104
- body[class*="_rtb-settings"] .wrap form .form-table input[type=url],
2105
- body[class*="_rtb-settings"] .wrap form .form-table input[type=week],
2106
- body[class*="_rtb-settings"] .wrap form .form-table input[type=password],
2107
- body[class*="_rtb-settings"] .wrap form .form-table input[type=color],
2108
- body[class*="_rtb-settings"] .wrap form .form-table input[type=email],
2109
- body[class*="_rtb-settings"] .wrap form .form-table input[type=number],
2110
- body[class*="_rtb-settings"] .wrap form .form-table textarea,
2111
- body[class*="_rtb-settings"] .wrap form .form-table select {
2112
  border: 2px solid #ccc;
2113
  border-radius: 5px;
2114
  box-shadow: none;
2115
  }
2116
- body[class*="_rtb-settings"] .wrap form .form-table select,
2117
- body[class*="_rtb-settings"] .wrap form .form-table textarea {
2118
  width: auto !important;
2119
  min-width: 50%;
2120
  max-width: 100% !important;
@@ -2124,11 +2095,11 @@ body[class*="_rtb-settings"] .wrap form .form-table textarea {
2124
  min-width: 0;
2125
  }
2126
 
2127
- body[class*="_rtb-settings"] .wrap form .form-table textarea {
2128
  min-width: 300px;
2129
  min-height: 200px;
2130
  }
2131
- body[class*="_rtb-settings"] .wrap form .form-table .wp-editor-wrap textarea {
2132
  border: none;
2133
  border-radius: 0;
2134
  min-width: 0;
@@ -2206,43 +2177,43 @@ OTHER OPTION PAGE STYLING
2206
  RESPONSIVE
2207
  *************/
2208
  @media screen and (max-width: 1099px) {
2209
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper {
2210
  clear: both;
2211
  width: 100%;
2212
  }
2213
- body[class*="_rtb-settings"] .wrap form {
2214
  clear: both;
2215
  width: calc(100% - 96px);
2216
  }
2217
  }
2218
  @media screen and (max-width: 782px) {
2219
- body[class*="_rtb-settings"] .wrap h2.nav-tab-wrapper {
2220
  margin: 0 0 20px 0;
2221
  }
2222
- body[class*="_rtb-settings"] .wrap form {
2223
  width: calc(100% - 96px);
2224
  }
2225
  .rtb-admin-section-heading {
2226
  text-align: center;
2227
  }
2228
- body[class*="_rtb-settings"] .wrap form .form-table,
2229
  .ufaq-styling-set .form-table {
2230
  box-shadow: none;
2231
  }
2232
- body[class*="_rtb-settings"] .wrap form .form-table,
2233
  .ufaq-styling-set .form-table,
2234
- body[class*="_rtb-settings"] .wrap form .form-table tbody,
2235
- body[class*="_rtb-settings"] .wrap form .form-table tr,
2236
- body[class*="_rtb-settings"] .wrap form .form-table th,
2237
- body[class*="_rtb-settings"] .wrap form .form-table td {
2238
  clear: both;
2239
  float: left;
2240
  width: 100%;
2241
  }
2242
- body[class*="_rtb-settings"] .wrap form .form-table {
2243
  padding: 11px 0;
2244
  }
2245
- body[class*="_rtb-settings"] .wrap form .form-table th {
2246
  padding: 20px 5% 8px;
2247
  width: 90%;
2248
  height: auto;
@@ -2253,26 +2224,26 @@ RESPONSIVE
2253
  background-repeat: no-repeat;
2254
  cursor: pointer;
2255
  }
2256
- body[class*="_rtb-settings"] .wrap form .form-table td {
2257
  padding-top: 4px;
2258
  }
2259
- body[class*="_rtb-settings"] .wrap form .form-table td fieldset {
2260
  position: relative;
2261
  }
2262
- body[class*="_rtb-settings"] .wrap form .form-table td label {
2263
  position: relative;
2264
  clear: both;
2265
  float: left;
2266
  width: 90%;
2267
  margin-left: 5% !important;
2268
  }
2269
- body[class*="_rtb-settings"] .wrap form .form-table td label.rtb-admin-switch {
2270
  position: absolute;
2271
  width: 40px;
2272
  top: -35px;
2273
  right: 5%;
2274
  }
2275
- body[class*="_rtb-settings"] .wrap form .form-table td p {
2276
  display: none;
2277
  position: relative;
2278
  float: left;
@@ -2282,7 +2253,7 @@ RESPONSIVE
2282
  border-bottom: 1px solid #ccc;
2283
  font-size: 13px;
2284
  }
2285
- body[class*="_rtb-settings"] .wrap form .form-table td input[type="button"] {
2286
  display: block;
2287
  margin: 10px auto 4px;
2288
  }
@@ -2538,8 +2509,8 @@ RESPONSIVE
2538
  margin: 0.5em 2px;
2539
  }
2540
 
2541
- body[class*="_rtb-settings"] .description,
2542
- body[class*="_rtb-settings"] .form-table th {
2543
  margin-left: 2px;
2544
  }
2545
 
@@ -2625,8 +2596,8 @@ NEW STYLING FOR ADD/DELETE AREAS LIKE CUSTOM FIELDS
2625
  cursor: pointer;
2626
  }
2627
 
2628
- body[class*="_rtb-settings"] .wrap form .form-table .sap-infinite-table input[type="number"],
2629
- body[class*="_rtb-settings"] .wrap form .form-table .sap-infinite-table input[type="text"] {
2630
  width: 64px;
2631
  }
2632
 
@@ -2670,40 +2641,4 @@ body[class*="_rtb-settings"] .wrap form .form-table .sap-infinite-table input[ty
2670
  }
2671
  .rtb-trial-version-select-modal-submit:hover {
2672
  background: #91B5CE;
2673
- }
2674
-
2675
-
2676
- /*********************************
2677
- CUSTOM FIELDS
2678
- *********************************/
2679
- #cffrtb-field-editor.rtb-admin-modal .button {
2680
- margin-top: 0;
2681
- }
2682
-
2683
-
2684
- /*********************************
2685
- NEW DATE SELETION FILTERS
2686
- *********************************/
2687
- .rtb-admin-bookings-filters-start,
2688
- .rtb-admin-bookings-filters-end {
2689
- position: relative;
2690
- float: left;
2691
- width: 100%;
2692
- margin: 0 0 4px;
2693
- }
2694
- .rtb-admin-bookings-filters-start input,
2695
- .rtb-admin-bookings-filters-end input {
2696
- position: relative;
2697
- float: left;
2698
- width: calc(50% - 4px);
2699
- margin: 0 2px 4px;
2700
- border: 1px solid #ddd;
2701
- background: #f5f5f5;
2702
- color: #555;
2703
- border-radius: 2px;
2704
- }
2705
- .rtb-admin-bookings-filters-start input::placeholder,
2706
- .rtb-admin-bookings-filters-end input::placeholder {
2707
- color: #555;
2708
- }
2709
-
42
  top: -9999px;
43
  left: -9999px;
44
  display: inline-block;
45
+ padding: 1em;
46
+ background: #fff;
 
47
  -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
48
  box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
49
  }
51
  #rtb-filters.date-filters-visible .date-filters {
52
  position: relative;
53
  top: auto;
54
+ left: 0;
 
55
  }
56
 
57
  #rtb-filters .date-filters .datepicker {
188
  filter: opacity(alpha=100);
189
  }
190
 
 
 
 
 
 
 
 
 
191
  #rtb-bookings-table tr.pending .check-column {
192
+ border-left: 4px solid #dd3d36;
193
  }
194
 
195
+ #rtb-bookings-table .striped>tbody>tr.pending:nth-of-type(odd) {
196
+ background-color: rgba(255,0,0,0.35);
 
 
 
197
  }
198
+ #rtb-bookings-table .striped>tbody>tr.pending:nth-of-type(even) {
199
+ background-color: rgba(255,0,0,0.25);
 
200
  }
201
 
202
+ #rtb-bookings-table tr.pending .check-column input[type=checkbox] {
203
+ margin-left: 4px;
204
  }
205
 
206
+ #rtb-bookings-table .striped>tbody>tr.confirmed:nth-of-type(odd) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  background-color: rgba(46,162,204,0.35);
208
  }
209
+ #rtb-bookings-table .striped>tbody>tr.confirmed:nth-of-type(even) {
210
  background-color: rgba(46,162,204,0.25);
211
  }
212
 
392
  .rtb-admin-modal.is-visible {
393
  visibility: visible;
394
  opacity: 1;
 
395
  -webkit-transition: opacity 0.3s 0, visibility 0 0;
396
  -moz-transition: opacity 0.3s 0, visibility 0 0;
397
  transition: opacity 0.3s 0, visibility 0 0;
766
 
767
  /*** WRAP ***/
768
 
769
+ .bookings_page_rtb-dashboard #wpcontent {
770
  padding-left: 0;
771
  }
772
+ .bookings_page_rtb-dashboard .wrap {
773
  margin: 10px 0 0;
774
  }
775
 
957
  float: left;
958
  width: 100%;
959
  }
960
+ body.bookings_page_rtb-settings .rtb-admin-header-menu,
961
+ body.bookings_page_cffrtb-editor .rtb-admin-header-menu,
962
+ body.toplevel_page_rtb-bookings .rtb-admin-header-menu {
963
  margin-left: -20px;
964
  width: calc(100% + 20px);
965
  }
1804
  /************************/
1805
 
1806
  /* Side Menu */
1807
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper {
1808
  position: relative;
1809
  float: left;
1810
  border: none;
1814
  padding-top: 0;
1815
  margin-top: 20px;
1816
  }
1817
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper a {
1818
  clear: both;
1819
  display: block;
1820
  position: relative;
1832
  line-height: 34px;
1833
  font-size: 13px;
1834
  }
1835
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper a:last-of-type {
1836
  border-bottom: none;
1837
  }
1838
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper a.nav-tab-active {
1839
  box-shadow: none;
1840
  background-color: #fff !important;
1841
  color: #1b335f;
1842
  border-left: 4px solid #1b335f;
1843
  }
1844
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper a:hover {
1845
  color: #29324e;
1846
  background-color: rgba(199,199,199, 0.5);
1847
  box-shadow: none;
1848
  border-left: 4px solid #29324e;
1849
  }
1850
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper a.nav-tab-active:hover {
1851
  color: #1b335f;
1852
  background-color: #fff;
1853
  border-left: 4px solid #1b335f;
1854
  }
1855
 
1856
  /* Right side */
1857
+ .bookings_page_rtb-settings .wrap form {
1858
  display: block;
1859
  position: relative;
1860
  float: left;
1867
  border: none;
1868
  }
1869
 
1870
+ .bookings_page_rtb-settings .wrap form h2:first-of-type {
1871
  font-size: 18px;
1872
  color: #1b335f;
1873
  margin: 0 0 32px !important;
1874
  }
1875
 
1876
+ .bookings_page_rtb-settings .wrap form h2:nth-of-type(1n+2) {
1877
  position: relative;
1878
  float: left;
1879
  background: #1b335f;
1886
  text-transform: uppercase;
1887
  z-index: 2;
1888
  }
1889
+ .bookings_page_rtb-settings .wrap form .form-table {
1890
  width: 100%;
1891
  box-sizing: border-box;
1892
  margin: 0 auto 16px;
1895
  padding: 11px 5%;
1896
  }
1897
 
1898
+ .bookings_page_rtb-settings .wrap form p.description {
1899
  display: none;
1900
  }
1901
+ .bookings_page_rtb-settings .wrap form .form-table p.description {
1902
  display: block;
1903
  }
1904
+ .bookings_page_rtb-settings .wrap form .form-table p.description.disabled {
1905
  color: #b5b5b5;
1906
  }
1907
 
1983
 
1984
 
1985
  /* RADIO BUTTON AND CHECKBOX */
1986
+ .bookings_page_rtb-settings .wrap form .form-table fieldset label {
1987
  line-height: 1.4em;
1988
  margin: .25em 0 .5em;
1989
  display: inline-block;
2069
  }
2070
 
2071
  /* Textbox and Text Area and Select boxes */
2072
+ .bookings_page_rtb-settings .wrap form .form-table input[type=text],
2073
+ .bookings_page_rtb-settings .wrap form .form-table input[type=search],
2074
+ .bookings_page_rtb-settings .wrap form .form-table input[type=tel],
2075
+ .bookings_page_rtb-settings .wrap form .form-table input[type=url],
2076
+ .bookings_page_rtb-settings .wrap form .form-table input[type=week],
2077
+ .bookings_page_rtb-settings .wrap form .form-table input[type=password],
2078
+ .bookings_page_rtb-settings .wrap form .form-table input[type=color],
2079
+ .bookings_page_rtb-settings .wrap form .form-table input[type=email],
2080
+ .bookings_page_rtb-settings .wrap form .form-table input[type=number],
2081
+ .bookings_page_rtb-settings .wrap form .form-table textarea,
2082
+ .bookings_page_rtb-settings .wrap form .form-table select {
2083
  border: 2px solid #ccc;
2084
  border-radius: 5px;
2085
  box-shadow: none;
2086
  }
2087
+ .bookings_page_rtb-settings .wrap form .form-table select,
2088
+ .bookings_page_rtb-settings .wrap form .form-table textarea {
2089
  width: auto !important;
2090
  min-width: 50%;
2091
  max-width: 100% !important;
2095
  min-width: 0;
2096
  }
2097
 
2098
+ .bookings_page_rtb-settings .wrap form .form-table textarea {
2099
  min-width: 300px;
2100
  min-height: 200px;
2101
  }
2102
+ .bookings_page_rtb-settings .wrap form .form-table .wp-editor-wrap textarea {
2103
  border: none;
2104
  border-radius: 0;
2105
  min-width: 0;
2177
  RESPONSIVE
2178
  *************/
2179
  @media screen and (max-width: 1099px) {
2180
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper {
2181
  clear: both;
2182
  width: 100%;
2183
  }
2184
+ .bookings_page_rtb-settings .wrap form {
2185
  clear: both;
2186
  width: calc(100% - 96px);
2187
  }
2188
  }
2189
  @media screen and (max-width: 782px) {
2190
+ .bookings_page_rtb-settings .wrap h2.nav-tab-wrapper {
2191
  margin: 0 0 20px 0;
2192
  }
2193
+ .bookings_page_rtb-settings .wrap form {
2194
  width: calc(100% - 96px);
2195
  }
2196
  .rtb-admin-section-heading {
2197
  text-align: center;
2198
  }
2199
+ .bookings_page_rtb-settings .wrap form .form-table,
2200
  .ufaq-styling-set .form-table {
2201
  box-shadow: none;
2202
  }
2203
+ .bookings_page_rtb-settings .wrap form .form-table,
2204
  .ufaq-styling-set .form-table,
2205
+ .bookings_page_rtb-settings .wrap form .form-table tbody,
2206
+ .bookings_page_rtb-settings .wrap form .form-table tr,
2207
+ .bookings_page_rtb-settings .wrap form .form-table th,
2208
+ .bookings_page_rtb-settings .wrap form .form-table td {
2209
  clear: both;
2210
  float: left;
2211
  width: 100%;
2212
  }
2213
+ .bookings_page_rtb-settings .wrap form .form-table {
2214
  padding: 11px 0;
2215
  }
2216
+ .bookings_page_rtb-settings .wrap form .form-table th {
2217
  padding: 20px 5% 8px;
2218
  width: 90%;
2219
  height: auto;
2224
  background-repeat: no-repeat;
2225
  cursor: pointer;
2226
  }
2227
+ .bookings_page_rtb-settings .wrap form .form-table td {
2228
  padding-top: 4px;
2229
  }
2230
+ .bookings_page_rtb-settings .wrap form .form-table td fieldset {
2231
  position: relative;
2232
  }
2233
+ .bookings_page_rtb-settings .wrap form .form-table td label {
2234
  position: relative;
2235
  clear: both;
2236
  float: left;
2237
  width: 90%;
2238
  margin-left: 5% !important;
2239
  }
2240
+ .bookings_page_rtb-settings .wrap form .form-table td label.rtb-admin-switch {
2241
  position: absolute;
2242
  width: 40px;
2243
  top: -35px;
2244
  right: 5%;
2245
  }
2246
+ .bookings_page_rtb-settings .wrap form .form-table td p {
2247
  display: none;
2248
  position: relative;
2249
  float: left;
2253
  border-bottom: 1px solid #ccc;
2254
  font-size: 13px;
2255
  }
2256
+ .bookings_page_rtb-settings .wrap form .form-table td input[type="button"] {
2257
  display: block;
2258
  margin: 10px auto 4px;
2259
  }
2509
  margin: 0.5em 2px;
2510
  }
2511
 
2512
+ .bookings_page_rtb-settings .description,
2513
+ .bookings_page_rtb-settings .form-table th {
2514
  margin-left: 2px;
2515
  }
2516
 
2596
  cursor: pointer;
2597
  }
2598
 
2599
+ .bookings_page_rtb-settings .wrap form .form-table .sap-infinite-table input[type="number"],
2600
+ .bookings_page_rtb-settings .wrap form .form-table .sap-infinite-table input[type="text"] {
2601
  width: 64px;
2602
  }
2603
 
2641
  }
2642
  .rtb-trial-version-select-modal-submit:hover {
2643
  background: #91B5CE;
2644
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/booking-form.css CHANGED
@@ -6,13 +6,6 @@
6
  .rtb-hidden {
7
  display: none;
8
  }
9
- .rtb-booking-form {
10
- position: relative;
11
- /*float: left;*/
12
- width: 100%;
13
- clear: both;
14
- margin-bottom: 48px;
15
- }
16
  .rtb-booking-form fieldset {
17
  padding-bottom: 1em;
18
  margin-bottom: 1em;
@@ -29,22 +22,10 @@
29
  .rtb-booking-form label {
30
  display: block;
31
  }
32
- .rtb-booking-form input,
33
- #stripe-payment-form #cardElement {
34
  width: 100%;
35
  max-width: 15em;
36
  }
37
- #stripe-payment-form #cardElement {
38
- max-width: 500px;
39
- width: 100%;
40
- display: block;
41
- border: 1px solid #ccc;
42
- border-radius: 0;
43
- background-color: white;
44
- color: #777;
45
- padding: 12px 21px;
46
- margin: 18px 0;
47
- }
48
  .rtb-booking-form input[type="checkbox"],
49
  .rtb-booking-form input[type="radio"] {
50
  width: auto;
@@ -92,15 +73,14 @@
92
  outline: 0;
93
  }
94
  #rtb-date_root .picker__button--clear,
95
- #rtb-date_root .picker__button--today,
96
- #rtb-date_root .picker__button--close {
97
  /* don't adopt the theme's button text color */
98
  color: #000;
99
  }
100
  #rtb-date_root .picker__nav--next,
101
  #rtb-date_root .picker__nav--prev {
102
  /* next/prev calendar arrows button areas sometimes don't cover the arrows */
103
- min-height: 1em;
104
  }
105
  #rtb-time_root .picker__list,
106
  #rtb-time_root .picker__list li {
@@ -196,7 +176,7 @@
196
 
197
 
198
  /*CANCEL LINK*/
199
- .rtb-modification-toggle {
200
  position: relative;
201
  float: left;
202
  padding: 10px 15px;
@@ -206,15 +186,15 @@
206
  border-radius: 3px;
207
  cursor: pointer;
208
  }
209
- label[for="rtb-modification-email"],
210
- input[name="modification"] {
211
  float: left;
212
  margin-top: 20px;
213
  }
214
- label[for="rtb-modification-email"] {
215
  margin-right: 12px;
216
  }
217
- .rtb-find-reservation-button {
218
  position: relative;
219
  float: left;
220
  padding: 10px 15px;
@@ -225,85 +205,37 @@ label[for="rtb-modification-email"] {
225
  cursor: pointer;
226
  }
227
 
228
- .rtb-bookings-results {
 
229
  position: relative;
230
  float: left;
231
  width: 100%;
232
  margin-top: 16px;
233
  }
234
  .rtb-cancel-booking-div {
 
 
 
235
  border: 1px solid #ddd;
236
- margin-bottom: 8px;
237
- }
238
- .rtb-cancel-booking-div + .alert {
239
- margin: 0;
240
  }
241
- .rtb-cancel-booking-div + .alert.error {
242
- color: #f24a4d;
243
- background: #f24a4d47;
244
- }
245
- .rtb-cancel-booking-div *:not(:first-child) {
246
- margin-left: -5px;
247
- }
248
-
249
  .rtb-cancel-booking {
 
 
 
250
  text-align: center;
251
  padding: 10px 0;
252
  background: #fe4e4e;
253
  color: #fff;
254
  cursor: pointer;
255
- display: inline-block;
256
- max-width: 100px;
257
- min-width: 100px;
258
- width: 100%;
259
  }
260
  .rtb-cancel-booking:hover {
261
  background: #ff6b6b;
262
  color: #fff;
263
  }
264
- .rtb-cancel-booking.cancelled {
265
- background: #24b124;
266
- }
267
-
268
- .rtb-deposit-booking {
269
- text-align: center;
270
- padding: 10px 0;
271
- background: green;
272
- color: #fff;
273
- cursor: pointer;
274
- display: inline-block;
275
- max-width: 100px;
276
- min-width: 100px;
277
- width: 100%;
278
- }
279
- .rtb-deposit-booking:hover {
280
- background: #008000cf;
281
- color: #fff;
282
- }
283
-
284
  .rtb-booking-information {
285
- padding-left: 5px;
286
- display: inline-block;
287
- }
288
-
289
- #rtb_recaptcha {
290
  position: relative;
291
  float: left;
292
- width: 100%;
293
- margin: 16px 0;
294
- }
295
-
296
- .stripe-payment-help-text {
297
- display: none;
298
- }
299
- .payment-errors {
300
- margin: 32px 0;
301
- border-left: 4px solid #000;
302
- padding-left: 16px;
303
- }
304
- :is(.rtb-booking-form, #stripe-booking-form) button:disabled {
305
- background-color: gray;
306
- }
307
- :is(.rtb-booking-form, #stripe-booking-form) button:disabled:hover {
308
- text-decoration: none;
309
  }
6
  .rtb-hidden {
7
  display: none;
8
  }
 
 
 
 
 
 
 
9
  .rtb-booking-form fieldset {
10
  padding-bottom: 1em;
11
  margin-bottom: 1em;
22
  .rtb-booking-form label {
23
  display: block;
24
  }
25
+ .rtb-booking-form input {
 
26
  width: 100%;
27
  max-width: 15em;
28
  }
 
 
 
 
 
 
 
 
 
 
 
29
  .rtb-booking-form input[type="checkbox"],
30
  .rtb-booking-form input[type="radio"] {
31
  width: auto;
73
  outline: 0;
74
  }
75
  #rtb-date_root .picker__button--clear,
76
+ #rtb-date_root .picker__button--today {
 
77
  /* don't adopt the theme's button text color */
78
  color: #000;
79
  }
80
  #rtb-date_root .picker__nav--next,
81
  #rtb-date_root .picker__nav--prev {
82
  /* next/prev calendar arrows button areas sometimes don't cover the arrows */
83
+ min-height: 2em;
84
  }
85
  #rtb-time_root .picker__list,
86
  #rtb-time_root .picker__list li {
176
 
177
 
178
  /*CANCEL LINK*/
179
+ .rtb-cancellation-toggle {
180
  position: relative;
181
  float: left;
182
  padding: 10px 15px;
186
  border-radius: 3px;
187
  cursor: pointer;
188
  }
189
+ label[for="rtb-cancellation-email"],
190
+ input[name="rtb_cancellation_email"] {
191
  float: left;
192
  margin-top: 20px;
193
  }
194
+ label[for="rtb-cancellation-email"] {
195
  margin-right: 12px;
196
  }
197
+ .rtb-cancel-button {
198
  position: relative;
199
  float: left;
200
  padding: 10px 15px;
205
  cursor: pointer;
206
  }
207
 
208
+ .rtb-bookings-results,
209
+ .rtb-cancel-booking-div {
210
  position: relative;
211
  float: left;
212
  width: 100%;
213
  margin-top: 16px;
214
  }
215
  .rtb-cancel-booking-div {
216
+ position: relative;
217
+ float: left;
218
+ width: calc(100% - 2px);
219
  border: 1px solid #ddd;
 
 
 
 
220
  }
 
 
 
 
 
 
 
 
221
  .rtb-cancel-booking {
222
+ position: relative;
223
+ float: left;
224
+ width: 200px;
225
  text-align: center;
226
  padding: 10px 0;
227
  background: #fe4e4e;
228
  color: #fff;
229
  cursor: pointer;
 
 
 
 
230
  }
231
  .rtb-cancel-booking:hover {
232
  background: #ff6b6b;
233
  color: #fff;
234
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  .rtb-booking-information {
 
 
 
 
 
236
  position: relative;
237
  float: left;
238
+ margin-left: 32px;
239
+ width: calc(100% - 232px);
240
+ padding: 10px 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
  }
assets/css/columns.css CHANGED
@@ -59,8 +59,7 @@
59
 
60
  .rtb-booking-form form select,
61
  .rtb-booking-form form textarea,
62
- .rtb-booking-form form input,
63
- #stripe-payment-form #cardElement {
64
  border: 1px solid #ddd;
65
  border-top-color: #f1f1f1;
66
  border-radius: 0;
@@ -70,15 +69,10 @@
70
  max-width: 100%;
71
  }
72
  .rtb-booking-form form select,
73
- .rtb-booking-form form input,
74
- #stripe-payment-form #cardElement {
75
  height: 48px;
76
  width: 100%;
77
  }
78
- #stripe-payment-form #cardElement {
79
- margin: 18px 0;
80
- }
81
-
82
  .rtb-booking-form form input::webkit-input-placeholder,
83
  .rtb-booking-form form input:ms--input-placeholder,
84
  .rtb-booking-form form input::placeholder {
@@ -115,12 +109,6 @@
115
  align-items: stretch;
116
  text-decoration: none;
117
  }
118
- :is(.rtb-booking-form, #stripe-booking-form) button:disabled {
119
- background-color: gray;
120
- }
121
- :is(.rtb-booking-form, #stripe-booking-form) button:disabled:hover {
122
- text-decoration: none;
123
- }
124
 
125
  .rtb-booking-form fieldset.optin input[type="checkbox"] {
126
  vertical-align: top;
59
 
60
  .rtb-booking-form form select,
61
  .rtb-booking-form form textarea,
62
+ .rtb-booking-form form input {
 
63
  border: 1px solid #ddd;
64
  border-top-color: #f1f1f1;
65
  border-radius: 0;
69
  max-width: 100%;
70
  }
71
  .rtb-booking-form form select,
72
+ .rtb-booking-form form input {
 
73
  height: 48px;
74
  width: 100%;
75
  }
 
 
 
 
76
  .rtb-booking-form form input::webkit-input-placeholder,
77
  .rtb-booking-form form input:ms--input-placeholder,
78
  .rtb-booking-form form input::placeholder {
109
  align-items: stretch;
110
  text-decoration: none;
111
  }
 
 
 
 
 
 
112
 
113
  .rtb-booking-form fieldset.optin input[type="checkbox"] {
114
  vertical-align: top;
assets/css/contemporary.css CHANGED
@@ -11,8 +11,7 @@
11
 
12
  .rtb-booking-form form select,
13
  .rtb-booking-form form textarea,
14
- .rtb-booking-form form input,
15
- #stripe-payment-form #cardElement {
16
  border: 1px solid #ccc;
17
  border-radius: 0;
18
  background-color: white;
@@ -20,12 +19,6 @@
20
  padding: 12px 21px;
21
  max-width: 100%;
22
  }
23
- #stripe-payment-form #cardElement {
24
- max-width: 500px;
25
- width: 100%;
26
- display: block;
27
- margin: 18px 0;
28
- }
29
  .rtb-booking-form form select,
30
  .rtb-booking-form form input {
31
  height: 48px;
@@ -35,15 +28,6 @@
35
  .rtb-booking-form form input::placeholder {
36
  color: #aaa;
37
  }
38
- :is(.rtb-booking-form, #stripe-booking-form) button {
39
- margin: 20px 0;
40
- }
41
- :is(.rtb-booking-form, #stripe-booking-form) button:disabled {
42
- background-color: gray;
43
- }
44
- :is(.rtb-booking-form, #stripe-booking-form) button:disabled:hover {
45
- text-decoration: none;
46
- }
47
 
48
 
49
  .rtb-booking-form fieldset.reservation {
@@ -146,24 +130,24 @@
146
  }
147
 
148
 
149
- .rtb-booking-form fieldset.rtb-contact {
150
  margin-bottom: 60px;
151
  }
152
- .rtb-booking-form fieldset.rtb-contact label {
153
  margin-left: 21px;
154
  color: #666;
155
  font-weight: bold;
156
  }
157
- .rtb-booking-form fieldset.rtb-contact .rtb-text {
158
  position: relative;
159
  float: left;
160
  display: block;
161
  width: 300px;
162
  }
163
 
164
- .rtb-booking-form form fieldset.rtb-contact select,
165
- .rtb-booking-form form fieldset.rtb-contact textarea,
166
- .rtb-booking-form form fieldset.rtb-contact input {
167
  width: 300px;
168
  }
169
 
11
 
12
  .rtb-booking-form form select,
13
  .rtb-booking-form form textarea,
14
+ .rtb-booking-form form input {
 
15
  border: 1px solid #ccc;
16
  border-radius: 0;
17
  background-color: white;
19
  padding: 12px 21px;
20
  max-width: 100%;
21
  }
 
 
 
 
 
 
22
  .rtb-booking-form form select,
23
  .rtb-booking-form form input {
24
  height: 48px;
28
  .rtb-booking-form form input::placeholder {
29
  color: #aaa;
30
  }
 
 
 
 
 
 
 
 
 
31
 
32
 
33
  .rtb-booking-form fieldset.reservation {
130
  }
131
 
132
 
133
+ .rtb-booking-form fieldset.contact {
134
  margin-bottom: 60px;
135
  }
136
+ .rtb-booking-form fieldset.contact label {
137
  margin-left: 21px;
138
  color: #666;
139
  font-weight: bold;
140
  }
141
+ .rtb-booking-form fieldset.contact .rtb-text {
142
  position: relative;
143
  float: left;
144
  display: block;
145
  width: 300px;
146
  }
147
 
148
+ .rtb-booking-form form fieldset.contact select,
149
+ .rtb-booking-form form fieldset.contact textarea,
150
+ .rtb-booking-form form fieldset.contact input {
151
  width: 300px;
152
  }
153
 
assets/js/admin.js CHANGED
@@ -26,32 +26,6 @@ jQuery(document).ready(function ($) {
26
  });
27
  });
28
 
29
- // Add a time picker for filtering in admin
30
- $ ( '#start-time, #end-time' ).each( function() {
31
- var $time_input = $( this );
32
-
33
- $time_input.pickatime({
34
- format: rtb_pickadate.time_format,
35
- formatSubmit: 'h:i A',
36
- hiddenName: true,
37
- interval: parseInt( rtb_pickadate.time_interval, 10 ),
38
- container: 'body',
39
-
40
- // Select the value when loaded if a value has been set
41
- onStart: function() {
42
- if ( $time_input.val() !== '' ) {
43
- var today = new Date();
44
- var today_date = today.getFullYear() + '/' + ( today.getMonth() + 1 ) + '/' + today.getDate();
45
- var time = new Date( today_date + ' ' + $time_input.val() );
46
- if ( Object.prototype.toString.call( time ) === "[object Date]" ) {
47
- this.set( 'select', time );
48
- }
49
-
50
- }
51
- }
52
- });
53
- });
54
-
55
  // Show or hide extra booking details in the bookings table
56
  $( '.rtb-show-details' ).click( function (e) {
57
  e.preventDefault();
@@ -93,26 +67,6 @@ jQuery(document).ready(function ($) {
93
  e.preventDefault();
94
  });
95
 
96
- // Register clicks on the 'Send Email' bulk action
97
- $( '#rtb-bookings-table .bulkactions #doaction' ).on( 'click', function(e) {
98
-
99
- var target = $( e.target );
100
- var select = target.parent().find( 'select' ).first();
101
-
102
- if ( select.val() != 'send-email' ) { return; }
103
-
104
- e.stopPropagation();
105
- e.preventDefault();
106
-
107
- var booking_ids = [];
108
-
109
- $( 'input[name="bookings[]"]:checked' ).each( function() {
110
- booking_ids.push( $( this ).val() );
111
- });
112
-
113
- rtb_toggle_email_modal( true, booking_ids.join(','), 'multiple-emails', 'Multiple Bookings' );
114
- });
115
-
116
  // Show booking form modal
117
  $( '.add-booking' ).click( function( e ) {
118
  e.preventDefault();
@@ -1070,12 +1024,12 @@ jQuery(document).ready(function($){
1070
  /*LOCK BOXES*/
1071
  jQuery( document ).ready( function() {
1072
 
1073
- setTimeout( resizeLockdownBoxes, 3000 );
1074
 
1075
  jQuery( window ).on( 'resize', resizeLockdownBoxes );
1076
 
1077
  jQuery( '.mcfrtb-list-select select' ).on( 'click.resizeLockdownBoxes', function() {
1078
- setTimeout( resizeLockdownBoxes, 3000 );
1079
  } );
1080
 
1081
  });
26
  });
27
  });
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  // Show or hide extra booking details in the bookings table
30
  $( '.rtb-show-details' ).click( function (e) {
31
  e.preventDefault();
67
  e.preventDefault();
68
  });
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  // Show booking form modal
71
  $( '.add-booking' ).click( function( e ) {
72
  e.preventDefault();
1024
  /*LOCK BOXES*/
1025
  jQuery( document ).ready( function() {
1026
 
1027
+ setTimeout( resizeLockdownBoxes, 1500 );
1028
 
1029
  jQuery( window ).on( 'resize', resizeLockdownBoxes );
1030
 
1031
  jQuery( '.mcfrtb-list-select select' ).on( 'click.resizeLockdownBoxes', function() {
1032
+ setTimeout( resizeLockdownBoxes, 1500 );
1033
  } );
1034
 
1035
  });
assets/js/booking-form.js CHANGED
@@ -159,20 +159,7 @@ jQuery(document).ready(function ($) {
159
  // Update timepicker on pageload and whenever the datepicker is closed
160
  rtb_booking_form.update_timepicker_range();
161
  rtb_booking_form.datepicker.on( {
162
- open: function () {
163
-
164
- rtb_booking_form.before_change_value = rtb_booking_form.datepicker.get();
165
- },
166
-
167
  close: function() {
168
-
169
- rtb_booking_form.after_change_value = rtb_booking_form.datepicker.get();
170
-
171
- if(rtb_booking_form.before_change_value != rtb_booking_form.after_change_value) {
172
- // clear time value if date changed
173
- rtb_booking_form.timepicker.clear();
174
- }
175
-
176
  rtb_booking_form.update_timepicker_range();
177
  rtb_booking_form.update_party_size_select();
178
  rtb_booking_form.update_possible_tables();
@@ -593,141 +580,58 @@ jQuery(document).ready(function ($) {
593
  rtb_booking_form.init();
594
  });
595
 
596
- //Handle reservation modification
597
  jQuery(document).ready(function() {
598
- jQuery('.rtb-modification-toggle').on('click', function() {
599
- jQuery('.rtb-modification-form, .rtb-booking-form-form').toggleClass('rtb-hidden');
600
 
601
- if (jQuery('.rtb-modification-form').hasClass('rtb-hidden')) {
602
- jQuery('.rtb-modification-toggle').html(rtb_booking_form_js_localize.want_to_modify);
603
  }
604
  else {
605
- jQuery('.rtb-modification-toggle').html(rtb_booking_form_js_localize.make);
606
  }
607
  });
608
 
609
- var modify_booking = function(ev) {
610
- var booking_email = jQuery('input[name="rtb_modification_email"]').val();
611
 
612
  var data = 'booking_email=' + booking_email + '&action=rtb_find_reservations';
613
- jQuery.post(ajaxurl, data, function(response) {
614
 
615
  if (response.success) {
616
  var booking_html = '';
617
- var guest_txt = '';
618
- var pay_btn = '';
619
 
620
  jQuery(response.data.bookings).each(function( index, val) {
621
- pay_btn = '';
622
- guest_txt = val.party > 1 ? rtb_booking_form_js_localize.guests : rtb_booking_form_js_localize.guest;
623
-
624
- if('payment_pending' == val.status || 'payment_failed' == val.status) {
625
- pay_btn = `
626
- <div class="rtb-deposit-booking" data-bookingid="${val.ID}" data-bookingemail="${val.email}">
627
- ${rtb_booking_form_js_localize.deposit}
628
- </div>
629
- `;
630
- }
631
-
632
- booking_html += `
633
- <div class="rtb-cancel-booking-div">
634
- <div class="rtb-cancel-booking" data-bookingid="${val.ID}" data-bookingemail="${val.email}">
635
- ${rtb_booking_form_js_localize.cancel}
636
- </div>
637
- ${pay_btn}
638
- <div class="rtb-booking-information">${val.datetime} - ${val.party} ${guest_txt} (${val.status_lbl})</div>
639
- </div>
640
- `;
641
  });
642
 
643
  jQuery('.rtb-bookings-results').html(booking_html);
644
 
645
  cancellationHandler();
646
- delayedPaymentHandler();
647
  }
648
  else {jQuery('.rtb-bookings-results').html(response.data.msg);}
649
  });
650
- };
651
-
652
- jQuery(document).on('click', '.rtb-find-reservation-button', modify_booking);
653
- jQuery(document).on('keypress', '.rtb-modification-form input', function (ev) {
654
- // Capture enter key
655
- if(13 == ev.which) {
656
- ev.preventDefault();
657
- modify_booking(ev);
658
- }
659
  });
660
  });
661
 
662
  function cancellationHandler() {
663
- jQuery('.rtb-cancel-booking:not(.cancelled)').off('click');
664
- jQuery('.rtb-cancel-booking:not(.cancelled)').on('click', function() {
665
- var btn = jQuery(this);
666
-
667
- if(btn.hasClass('processing')) {
668
- return;
669
- }
670
-
671
- btn.addClass('processing');
672
-
673
- var booking_id = btn.data('bookingid');
674
- var booking_email = btn.data('bookingemail');
675
-
676
- var data = {
677
- 'booking_id': booking_id,
678
- 'booking_email': booking_email,
679
- 'action': 'rtb_cancel_reservations'
680
- };
681
-
682
- jQuery.post(ajaxurl, data, function(response) {
683
- if (response.success) {
684
- if (response.data.hasOwnProperty('cancelled_redirect')) {
685
- window.location.href = response.data.cancelled_redirect;
686
- }
687
- else {
688
- btn.off('click');
689
- btn.addClass('cancelled');
690
- btn.text(rtb_booking_form_js_localize.cancelled);
691
- }
692
- }
693
- else {
694
- btn.parent().after(`<p class="alert error">${response.data.msg}</p>`);
695
- }
696
-
697
- btn.removeClass('processing');
698
  });
699
  });
700
  }
701
 
702
- function delayedPaymentHandler() {
703
- jQuery('.rtb-deposit-booking').off('click');
704
- jQuery('.rtb-deposit-booking').on('click', function() {
705
- var btn = jQuery(this);
706
-
707
- if(btn.hasClass('processing')) {
708
- return;
709
- }
710
-
711
- btn.addClass('processing');
712
-
713
- var booking_id = btn.data('bookingid');
714
- var booking_email = btn.data('bookingemail');
715
-
716
- var data = {
717
- 'booking_id': booking_id,
718
- 'booking_email': booking_email,
719
- 'payment': 'rtb-delayed-deposit'
720
- };
721
-
722
- let current_loc = window.location;
723
- let params = new URLSearchParams();
724
- Object.keys( data ).map( function( param ) { params.append( param, data[ param ] ) } );
725
-
726
- window.location = current_loc.origin + current_loc.pathname + '?' + params.toString();
727
-
728
- });
729
- }
730
-
731
  // Functions for the 'View Bookings' shortcode
732
  jQuery(document).ready(function ($) {
733
  jQuery('.rtb-view-bookings-form-date-selector').on('change', function() {
159
  // Update timepicker on pageload and whenever the datepicker is closed
160
  rtb_booking_form.update_timepicker_range();
161
  rtb_booking_form.datepicker.on( {
 
 
 
 
 
162
  close: function() {
 
 
 
 
 
 
 
 
163
  rtb_booking_form.update_timepicker_range();
164
  rtb_booking_form.update_party_size_select();
165
  rtb_booking_form.update_possible_tables();
580
  rtb_booking_form.init();
581
  });
582
 
583
+ //Handle reservation cancellations
584
  jQuery(document).ready(function() {
585
+ jQuery('.rtb-cancellation-toggle').on('click', function() {
586
+ jQuery('.rtb-cancellation-form, .rtb-booking-form-form').toggleClass('rtb-hidden');
587
 
588
+ if (jQuery('.rtb-cancellation-form').hasClass('rtb-hidden')) {
589
+ jQuery('.rtb-cancellation-toggle').html('Want to cancel your reservation?');
590
  }
591
  else {
592
+ jQuery('.rtb-cancellation-toggle').html('Make a reservation');
593
  }
594
  });
595
 
596
+ jQuery('.rtb-cancel-button').on('click', function() {
597
+ var booking_email = jQuery('input[name="rtb_cancellation_email"]').val();
598
 
599
  var data = 'booking_email=' + booking_email + '&action=rtb_find_reservations';
600
+ jQuery.post(ajaxurl, data, function(response) { console.log(response);
601
 
602
  if (response.success) {
603
  var booking_html = '';
 
 
604
 
605
  jQuery(response.data.bookings).each(function( index, val) {
606
+ booking_html += '<div class="rtb-cancel-booking-div">';
607
+ booking_html += '<div class="rtb-cancel-booking" data-bookingid="' + val.ID + '" data-bookingemail="' + val.email + '">Cancel</div>';
608
+ booking_html += '<div class="rtb-booking-information">' + val.datetime + ' - ' + val.party + ' guest' + (val.party > 1 ? 's' : '') + '</div>'
609
+ booking_html += '</div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
610
  });
611
 
612
  jQuery('.rtb-bookings-results').html(booking_html);
613
 
614
  cancellationHandler();
 
615
  }
616
  else {jQuery('.rtb-bookings-results').html(response.data.msg);}
617
  });
 
 
 
 
 
 
 
 
 
618
  });
619
  });
620
 
621
  function cancellationHandler() {
622
+ jQuery('.rtb-cancel-booking').off('click');
623
+ jQuery('.rtb-cancel-booking').on('click', function() {
624
+ var booking_id = jQuery(this).data('bookingid');
625
+ var booking_email = jQuery(this).data('bookingemail');
626
+
627
+ var data = 'booking_id=' + booking_id + '&booking_email=' + booking_email + '&action=rtb_cancel_reservations'; console.log(data);
628
+ jQuery.post(ajaxurl, data, function(response) { console.log(response);
629
+ if (response.success) {window.location.href = replaceUrlParam(window.location.href, 'bookingCancelled', 'success');}
630
+ else {jQuery('.rtb-bookings-results').html(response.data.msg);}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
631
  });
632
  });
633
  }
634
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
635
  // Functions for the 'View Bookings' shortcode
636
  jQuery(document).ready(function ($) {
637
  jQuery('.rtb-view-bookings-form-date-selector').on('change', function() {
assets/js/dashboard-review-ask.js CHANGED
@@ -1,10 +1,12 @@
1
  jQuery(document).ready(function($) {
2
  jQuery('.rtb-main-dashboard-review-ask').css('display', 'block');
3
 
4
- jQuery(document).on('click', '.rtb-main-dashboard-review-ask .notice-dismiss', function(event) {
5
- var data = 'ask_review_time=7&action=rtb_hide_review_ask';
6
- jQuery.post(ajaxurl, data, function() {});
7
- });
 
 
8
 
9
  jQuery('.rtb-review-ask-yes').on('click', function() {
10
  jQuery('.rtb-review-ask-feedback-text').removeClass('rtb-hidden');
1
  jQuery(document).ready(function($) {
2
  jQuery('.rtb-main-dashboard-review-ask').css('display', 'block');
3
 
4
+ jQuery('.rtb-main-dashboard-review-ask').on('click', function(event) {
5
+ if (jQuery(event.srcElement).hasClass('notice-dismiss')) {
6
+ var data = 'ask_review_time=3&action=rtb_hide_review_ask';
7
+ jQuery.post(ajaxurl, data, function() {});
8
+ }
9
+ });
10
 
11
  jQuery('.rtb-review-ask-yes').on('click', function() {
12
  jQuery('.rtb-review-ask-feedback-text').removeClass('rtb-hidden');
assets/js/plugin-deactivation.js CHANGED
@@ -34,7 +34,7 @@ jQuery(function($){
34
  install_time: $form.data('installtime'),
35
  reason: $form.find('.selected .rtb-deactivate-survey-option-reason').text(),
36
  details: $form.find('.selected input[type=text]').val(),
37
- site: rtb_deactivation_data.site_url,
38
  plugin: 'Five-Star Restaurant Reservations'
39
  }
40
  var submitSurvey = $.post('https://www.fivestarplugins.com/key-check/Deactivation_Surveys.php', data);
34
  install_time: $form.data('installtime'),
35
  reason: $form.find('.selected .rtb-deactivate-survey-option-reason').text(),
36
  details: $form.find('.selected input[type=text]').val(),
37
+ site: grfwp_deactivation_data.site_url,
38
  plugin: 'Five-Star Restaurant Reservations'
39
  }
40
  var submitSurvey = $.post('https://www.fivestarplugins.com/key-check/Deactivation_Surveys.php', data);
assets/js/stripe-payment.js CHANGED
@@ -1,18 +1,5 @@
1
- var key = null;
2
-
3
- if ( rtb_stripe_payment.stripe_mode == 'test' ) {
4
- key = rtb_stripe_payment.test_publishable_key;
5
- }
6
- else {
7
- key = rtb_stripe_payment.live_publishable_key;
8
- }
9
-
10
- if( rtb_stripe_payment.stripe_sca ) {
11
- var _stripe = Stripe(key);
12
- }
13
- else {
14
- Stripe.setPublishableKey(key);
15
- }
16
 
17
  function stripeResponseHandler(status, response) {
18
  if (response.error) {
@@ -20,8 +7,7 @@ function stripeResponseHandler(status, response) {
20
  jQuery(".payment-errors").html(response.error.message);
21
  // re-enable the submit button
22
  jQuery('#stripe-submit').attr("disabled", false);
23
- }
24
- else {
25
  var form$ = jQuery("#stripe-payment-form");
26
  // token contains id, last4, and card type
27
  var token = response['id'];
@@ -31,154 +17,20 @@ function stripeResponseHandler(status, response) {
31
  form$.get(0).submit();
32
  }
33
  }
34
-
35
- function error_handler(msg = '') {
36
- jQuery('.payment-errors').html(msg);
37
- enable_payment_form();
38
- }
39
-
40
- function disable_payment_form() {
41
- jQuery('.payment-errors').html('');
42
- rtb_stripe_payment.stripe_sca && jQuery('.stripe-payment-help-text').slideDown();
43
- jQuery('#stripe-submit').prop('disabled', true);
44
- }
45
- function enable_payment_form() {
46
- rtb_stripe_payment.stripe_sca && jQuery('.stripe-payment-help-text').slideUp();
47
- jQuery('#stripe-submit').prop('disabled', false);
48
- }
49
-
50
  jQuery(document).ready(function($) {
51
-
52
- var cardElement = null;
53
-
54
- // setup card element
55
- if( rtb_stripe_payment.stripe_sca ) {
56
- var stripeElement = _stripe.elements();
57
- cardElement = stripeElement.create('card', { hidePostalCode: true });
58
- cardElement.mount('#cardElement');
59
-
60
- cardElement.on('change', function(ev) {
61
- if (ev.complete) {
62
- // enable payment button
63
- enable_payment_form();
64
- }
65
- else {
66
- if (ev.error) {
67
- error_handler(ev.error.message);
68
- }
69
- }
70
- });
71
- }
72
-
73
- $('#stripe-payment-form .single-masked').on('keyup', function (ev) {
74
- let value = $(this).val();
75
-
76
- if ( /\//.test(value) ) {
77
- value = value.replace( /(\/)+/, '/' );
78
- }
79
-
80
- if(value.length > 2 && !/\//.test(value)) {
81
- value = value.split('');
82
- value.splice(2, 0, '/');
83
- value = value.join('');
84
- }
85
-
86
- $(this).val(value);
87
- });
88
-
89
  $("#stripe-payment-form").submit(function(event) {
90
  // disable the submit button to prevent repeated clicks
91
- disable_payment_form();
92
-
93
- // send the card details to Stripe
94
- if( rtb_stripe_payment.stripe_sca ) {
95
-
96
- var booking_id = $(this).data( 'booking_id' );
97
- // Call your backend to create the Checkout Session
98
- var params = {
99
- 'action': 'rtb_stripe_get_intent',
100
- 'booking_id': booking_id
101
- };
102
-
103
- $.post(ajaxurl, params, function(result) {
104
- result = JSON.parse(result);
105
- if( result.success ) {
106
-
107
- _stripe.confirmCardPayment(result.clientSecret, {
108
- payment_method: {
109
- card: cardElement,
110
- billing_details: {
111
- name: result.name,
112
- email: result.email
113
- }
114
- }
115
- }).then(function(result) {
116
- params = {
117
- action: 'rtb_stripe_pmt_succeed',
118
- booking_id: booking_id
119
- };
120
-
121
- if (result.error) {
122
- // Show error to your customer (e.g., insufficient funds)
123
- params['success'] = false;
124
- params['message'] = result.error.message;
125
- error_handler(result.error.message);
126
- }
127
- else {
128
- var pi = result.paymentIntent;
129
-
130
- // The payment has been processed!
131
- if (pi.status === 'succeeded') {
132
- params['success'] = true;
133
- params['payment_amount'] = pi.amount;
134
- params['payment_id'] = pi.id;
135
- // params['payment_intent'] = pi;
136
- }
137
- else {
138
- params['success'] = false;
139
- params['message'] = 'Unknown error';
140
- }
141
- }
142
-
143
- $.post(ajaxurl, params, function (result) {
144
- result = JSON.parse(result);
145
-
146
- if(true == result.success) {
147
- window.location = window.location.origin + window.location.pathname + result.urlParams;
148
- }
149
- });
150
- });
151
- }
152
- else {
153
- error_handler(result.message);
154
- console.log('RTB-Stripe error: ', result.message);
155
- }
156
- });
157
- }
158
- else {
159
-
160
- let exp_month, exp_year;
161
-
162
- let single_field = $('#stripe-payment-form .single-masked').length;
163
- if(single_field) {
164
- let data = $('#stripe-payment-form .single-masked').val().split('/');
165
- exp_month = data[0];
166
- exp_year = data[1];
167
- }
168
- else {
169
- exp_month = $('input[data-stripe="exp_month"]').val();
170
- exp_year = $('input[data-stripe="exp_year"]').val();
171
- }
172
-
173
- Stripe.createToken({
174
- number: $('input[data-stripe="card_number"]').val(),
175
- cvc: $('input[data-stripe="card_cvc"]').val(),
176
- exp_month: exp_month,
177
- exp_year: exp_year,
178
- currency: $('input[data-stripe="currency"]').val()
179
- }, stripeResponseHandler);
180
- }
181
-
182
  // prevent the form from submitting with the default action
183
  return false;
184
  });
1
+ if ( rtb_stripe_payment.stripe_mode == 'test' ) { Stripe.setPublishableKey(rtb_stripe_payment.test_publishable_key); }
2
+ else { Stripe.setPublishableKey(rtb_stripe_payment.live_publishable_key); }
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
  function stripeResponseHandler(status, response) {
5
  if (response.error) {
7
  jQuery(".payment-errors").html(response.error.message);
8
  // re-enable the submit button
9
  jQuery('#stripe-submit').attr("disabled", false);
10
+ } else {
 
11
  var form$ = jQuery("#stripe-payment-form");
12
  // token contains id, last4, and card type
13
  var token = response['id'];
17
  form$.get(0).submit();
18
  }
19
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  jQuery(document).ready(function($) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  $("#stripe-payment-form").submit(function(event) {
22
  // disable the submit button to prevent repeated clicks
23
+ $('#stripe-submit').attr("disabled", "disabled");
24
+
25
+ // send the card details to Stripe
26
+ Stripe.createToken({
27
+ number: $('input[data-stripe="card_number"]').val(),
28
+ cvc: $('input[data-stripe="card_cvc"]').val(),
29
+ exp_month: $('input[data-stripe="exp_month"]').val(),
30
+ exp_year: $('input[data-stripe="exp_year"]').val(),
31
+ currency: $('input[data-stripe="currency"]').val()
32
+ }, stripeResponseHandler);
33
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  // prevent the form from submitting with the default action
35
  return false;
36
  });
assets/js/stripe.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! stripe-js 17-08-2016 */
2
+ (function(){var a,b,c,d,e,f,g,h,i,j={}.hasOwnProperty,k=function(a,b){function c(){this.constructor=a}for(var d in b)j.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a};if(g="https://js.stripe.com",c="https://js.stripe.com",d=!!/stripe\.com$/.test("undefined"!=typeof window&&null!==window?window.location.host:void 0),b="console"in window&&"warn"in window.console,!d&&"querySelectorAll"in document&&b&&(f=document.querySelectorAll('script[src^="'+g+'"]'),f.length||console.warn("It looks like Stripe.js is not being loaded from https://js.stripe.com. Stripe does not support serving Stripe.js from your own domain.")),this.Stripe)return!b||this.Stripe.isDoubleLoaded||this.Stripe.earlyError||console.warn("It looks like Stripe.js was loaded more than one time. Please only load it once per page."),void(this.Stripe.isDoubleLoaded=!0);this.Stripe=function(){function a(){}return a.version=2,a.endpoint="https://api.stripe.com/v1",a.setPublishableKey=function(b){return a.key=b,a.utils.validateProtocol(a.key)},a._language="en-US",a.setLanguage=function(b){return a._language=b},a._allowedCustomHeaders=["X-Stripe-Livemode","Authorization"],a._customHeaders={},a._setCustomHeader=function(a,b){var c,d,e,f,g;for(d=!1,g=this._allowedCustomHeaders,e=0,f=g.length;e<f;e++)if(c=g[e],c===a){this._customHeaders[a]=b,d=!0;break}return d},a.trackPerf=!1,a._isChannel="#__stripe_transport__"===("undefined"!=typeof window&&null!==window?window.location.hash:void 0),a._isSafeStripeDomain=d,a._iframeOnAmount=1,a._isSafeDomain=function(){return"#__forcedss3__"!==window.location.hash&&(!(!a._isSafeStripeDomain&&!window.StripeTemporaryNoDSS3)||a._iframeOnAmount<Math.random())}(),a._finalTransport="undefined"!=typeof window&&null!==window&&"XMLHttpRequest"in window&&"withCredentials"in new XMLHttpRequest?"cors":"jsonp",a._transport=a._isChannel||a._isSafeDomain?a._finalTransport:"iframe",a._fallBackToOldStripeJsTechniques=function(){return this._transport="jsonp",this._finalTransport="jsonp",this._isSafeDomain="true"},a._iframeRequestQueue=[],a._iframePendingRequests={},a._iframeChannelStatus="pending",a._iframeChannelComplete=function(b){var c,d,e,f;for(this._iframeChannelStatus=b?"success":"failure","failure"===this._iframeChannelStatus&&this._fallBackToOldStripeJsTechniques(),d=this._iframeRequestQueue,delete this._iframeRequestQueue,this._iframeRequestQueue=[],e=0,f=d.length;e<f;e++)c=d[e],this.request(c,!0);this._iframeChannelComplete=function(){return a.reportError("CompleteDuplicationError")}},a.request=function(a,b){return this.trackPerf&&a.tokenType?this._instrumentedRequest(a,b):this._rawRequest(a,b)},a._rawRequest=function(b,c){var d,e,f;if(b.data||(b.data={}),e="POST"===b.method&&"object"==typeof(null!=(f=b.data)?f.card:void 0),c||(null!=b.data.payment_user_agent?this._isChannel||(b.data.payment_user_agent=""+b.data.payment_user_agent+" ("+a.stripejs_ua+")"):b.data.payment_user_agent=a.stripejs_ua),"iframe"===this._transport){if(e)return"pending"===this._iframeChannelStatus?this._iframeRequestQueue.push(b):"failure"===this._iframeChannelStatus?this.ajaxJSONP(b):this.iframe(b);if("cors"===this._finalTransport)try{return this.xhr(b)}catch(g){return d=g,this._transport="jsonp",this.request(b,!0)}return this.ajaxJSONP(b)}if("cors"===this._transport)try{return this.xhr(b)}catch(g){return d=g,a.reportError("XhrThrewError"),this._transport="jsonp",this.request(b,!0)}return this.ajaxJSONP(b)},a.reportError=function(b,c){var d;return"console"in window&&"warn"in window.console,1,d=Math.round((new Date).getTime()/1e3),(new Image).src="https://q.stripe.com?event=stripejs-error&type="+encodeURIComponent(b)+(c?"&timing="+c:"")+"&key="+a.key+"&timestamp="+d+"&payment_user_agent="+encodeURIComponent(a.stripejs_ua)},a._instrumentedRequest=function(b,c){var d,e;return d=(new Date).getTime(),e=function(c){return function(e,f){var g,h,i,j,k;return j=null!=(k=b.tokenType)?k:"unknown",g=(new Date).getTime(),h=c._getResourceTiming(null!=e?e.responseURL:void 0),i={event:"rum.stripejs",tokenType:j,url:b.url,status:f,start:d,end:g,resourceTiming:h},a.logRUM(i)}}(this),b.success=function(a){return function(b,c,d){return e(d,c),a.apply(this,arguments)}}(b.success),b.complete=function(a){return function(b,c,d){return"success"!==b&&e(c,b),a.apply(this,arguments)}}(b.complete),this._rawRequest(b,c)},a._getResourceTiming=function(a){var b;switch(b="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.getEntriesByName?performance.getEntriesByName(a):void 0,!1){case 1!==(null!=b?b.length:void 0):return this._sanitizeResourceTiming(b[0]);case 0!==(null!=b?b.length:void 0):return{errorMsg:"No resource timing entries found"};case null==(null!=b?b.length:void 0):return{errorMsg:"More than one resource timing entry"};default:return null}},a._resourceTimingWhitelist=["connectEnd","connectStart","domainLookupEnd","domainLookupStart","duration","fetchStart","redirectEnd","redirectStart","requestStart","responseEnd","responseStart","secureConnectionStart","startTime"],a._sanitizeResourceTiming=function(a){var b,c,d,e,f;for(c={},f=this._resourceTimingWhitelist,d=0,e=f.length;d<e;d++)b=f[d],a[b]&&(c[b]=a[b]);return c},a.logRUM=function(b){return(new Image).src="https://q.stripe.com/?"+a.utils.serialize(b)},a.complete=function(b,c){return function(d,e,f){if("success"!==d)return a.reportError("Complete500-"+d),"function"==typeof b?b(500,{error:{code:d,type:d,message:c}}):void 0}},a._iframeBaseUrl=c,a._stripejsBaseUrl=g,a._relayResponse=function(b,c,d){return a._socket.postMessage(a.JSON.stringify({code:c,resp:d,requestId:b}))},a._callCount=0,a._callCache={},a._receiveChannelRelay=function(b,c){var d,e,f,g;if(f=a._iframeBaseUrl.replace(/^https?:\/\//,"").replace(/\/.*$/,""),g=c.replace(/^https?:\/\//,"").replace(/\/.*$/,""),g===f&&"string"==typeof b){try{e=a.JSON.parse(b)}catch(h){throw d=h,a.reportError("InvalidJSON-ChannelRelay"),new Error("Stripe.js received invalid JSON")}if("function"==typeof a._callCache[e.requestId])return a._callCache[e.requestId](e.resp,e.code),delete a._callCache[e.requestId]}},a._channelListener=function(b,c){var d,e,f,g;if("string"==typeof b){try{g=a.JSON.parse(b)}catch(h){throw e=h,a.reportError("InvalidJSON-ChannelListener"),new Error("Stripe.js received invalid JSON")}if(d=g.data.card,delete g.data.card,f=g.headers["Accept-Language"],d)return a.setPublishableKey(g.data.key),f&&a.setLanguage(f),null!=g.endpoint&&(a.endpoint=g.endpoint),null!=g.trackPerf&&(a.trackPerf=g.trackPerf),a.card.createToken(d,g.data,function(b,c){return a._relayResponse(g.requestId,b,c)});throw a.reportError("InvalidChannelUse-NonCard"),new Error("Stripe.js iframe transport used for non-card request")}},a}(),this.Stripe.token=function(){function a(){}return a.validate=function(a,b){if(!a)throw b+" required";if("object"!=typeof a)throw b+" invalid"},a.formatData=function(a,b){var c,d,e;Stripe.utils.isElement(a)&&(a=Stripe.utils.paramsFromForm(a,b));for(c in a)d=a[c],null==d&&delete a[c];if(Stripe.utils.underscoreKeys(a),"string"==typeof a.exp){try{e=Stripe.utils.parseExpString(a.exp),a.exp_month=e[0],a.exp_year=e[1]}catch(f){a.exp_month=0,a.exp_year=0}delete a.exp}return a},a.create=function(a,b){var c,d;return a.key||(a.key=Stripe.key||Stripe.publishableKey),Stripe.utils.validateKey(a.key),d=function(){switch(!1){case null==a.card:return"card";case null==a.bank_account:return"bank_account";case null==a.pii:return"pii";case null==a.apple_pay:return"apple_pay";default:return"unknown"}}(),delete a.apple_pay,c={url:""+Stripe.endpoint+"/tokens",data:a,method:"POST",headers:{},success:function(a,c){return"function"==typeof b?b(c,a):void 0},complete:Stripe.complete(b,"A network error has occurred, and you have not been charged. Please try again."),timeout:4e4,tokenType:d},Stripe._language&&(c.headers["Accept-Language"]=Stripe._language),Stripe.request(c)},a.get=function(a,b){if(!a)throw new Error("token required");return Stripe.utils.validateKey(Stripe.key),Stripe.request({url:""+Stripe.endpoint+"/tokens/"+a,data:{key:Stripe.key},success:function(a,c){return"function"==typeof b?b(c,a):void 0},complete:Stripe.complete(b,"A network error has occurred loading data from Stripe. Please try again."),timeout:4e4})},a}(),this.Stripe.card=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return k(b,a),b.tokenName="card",b.whitelistedAttrs=["number","cvc","exp","exp_month","exp_year","name","address_line1","address_line2","address_city","address_state","address_zip","address_country","currency"],b.createToken=function(a,c,d){var e;return null==c&&(c={}),Stripe.token.validate(a,"card"),"function"==typeof c?(d=c,c={}):"object"!=typeof c&&(e=parseInt(c,10),c={},e>0&&(c.amount=e)),c[b.tokenName]=Stripe.token.formatData(a,b.whitelistedAttrs),Stripe.token.create(c,d)},b.getToken=function(a,b){return Stripe.token.get(a,b)},b.validateCardNumber=function(a){return a=(a+"").replace(/\s+|-/g,""),a.length>=10&&a.length<=16&&b.luhnCheck(a)},b.validateCVC=function(a){return a=Stripe.utils.trim(a),/^\d+$/.test(a)&&a.length>=3&&a.length<=4},b.validateExpiry=function(a,b){var c,d,e,f;if(null!=b)e=Stripe.utils.trim(a),b=Stripe.utils.trim(b);else{try{f=Stripe.utils.parseExpString(a),e=f[0],b=f[1]}catch(g){return!1}e+="",b+=""}return!!/^\d+$/.test(e)&&(!!/^\d+$/.test(b)&&(1<=e&&e<=12&&(2===b.length&&(b=b<70?"20"+b:"19"+b),4===b.length&&(d=new Date(b,e),c=new Date,d.setMonth(d.getMonth()-1),d.setMonth(d.getMonth()+1,1),d>c))))},b.luhnCheck=function(a){var b,c,d,e,f,g;for(d=!0,e=0,c=(a+"").split("").reverse(),f=0,g=c.length;f<g;f++)b=c[f],b=parseInt(b,10),(d=!d)&&(b*=2),b>9&&(b-=9),e+=b;return e%10===0},b.cardType=function(a){return b.cardTypes[a.slice(0,2)]||"Unknown"},b.cardBrand=function(a){return b.cardType(a)},b.cardTypes=function(){var a,b,c,d;for(b={},a=c=40;c<=49;a=++c)b[a]="Visa";for(a=d=50;d<=59;a=++d)b[a]="MasterCard";return b[34]=b[37]="American Express",b[60]=b[62]=b[64]=b[65]="Discover",b[35]="JCB",b[30]=b[36]=b[38]=b[39]="Diners Club",b}(),b}(this.Stripe.token),this.Stripe.bankAccount=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return k(b,a),b.tokenName="bank_account",b.whitelistedAttrs=["country","currency","routing_number","account_number","name","account_holder_type","account_holder_name"],b.createToken=function(a,c,d){return null==c&&(c={}),Stripe.token.validate(a,"bank account"),"function"==typeof c&&(d=c,c={}),c[b.tokenName]=Stripe.token.formatData(a,b.whitelistedAttrs),Stripe.token.create(c,d)},b.getToken=function(a,b){return Stripe.token.get(a,b)},b.validateRoutingNumber=function(a,c){switch(a=Stripe.utils.trim(a),c){case"US":return/^\d+$/.test(a)&&9===a.length&&b.routingChecksum(a);case"CA":return/\d{5}\-\d{3}/.test(a)&&9===a.length;default:return!0}},b.validateAccountNumber=function(a,b){switch(a=Stripe.utils.trim(a),b){case"US":return/^\d+$/.test(a)&&a.length>=1&&a.length<=17;default:return!0}},b.routingChecksum=function(a){var b,c,d,e,f,g;for(d=0,b=(a+"").split(""),g=[0,3,6],e=0,f=g.length;e<f;e++)c=g[e],d+=3*parseInt(b[c]),d+=7*parseInt(b[c+1]),d+=parseInt(b[c+2]);return 0!==d&&d%10===0},b}(this.Stripe.token),this.Stripe.piiData=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return k(b,a),b.tokenName="pii",b.whitelistedAttrs=["personal_id_number"],b.createToken=function(a,c,d){return null==c&&(c={}),Stripe.token.validate(a,"pii data"),"function"==typeof c&&(d=c,c={}),c[b.tokenName]=Stripe.token.formatData(a,b.whitelistedAttrs),Stripe.token.create(c,d)},b.getToken=function(a,b){return Stripe.token.get(a,b)},b}(this.Stripe.token),this.Stripe._poller=function(){function a(){}return a._activePolls={},a._clearPoll=function(b){return delete a._activePolls[b]},a._defaultPollInterval=1500,a._maxPollInterval=24e3,a._initPoll=function(b){if(null!=a._activePolls[b])throw new Error("You are already polling "+b+". Please cancel that poll before polling it again.");return a._activePolls[b]={}},a._poll=function(b,c,d,e,f){c(b,function(g,h){var i;if(null!=a._activePolls[b])return g>=400&&g<500?(a._clearPoll(b),"function"==typeof f?f(g,h):void 0):200===g&&e(b,h)?(a._clearPoll(b),"function"==typeof f?f(g,h):void 0):(200===g&&d(b,h)&&"function"==typeof f&&f(g,h),500===g&&2*a._activePolls[b].interval<=a._maxPollInterval?a._activePolls[b].interval*=2:g>=200&&g<500&&(a._activePolls[b].interval=a._defaultPollInterval),i=setTimeout(function(){return a._poll(b,c,d,e,f)},a._activePolls[b].interval),a._activePolls[b].timeoutId=i)})},a._cancelPoll=function(b){var c;if(c=a._activePolls[b],null==c)throw new Error("You are not polling "+b+".");null!=c.timeoutId&&clearTimeout(c.timeoutId),a._clearPoll(b)},a}(),this.Stripe.bitcoinReceiver=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return k(b,a),b._whitelistedAttrs=["amount","currency","email","description"],b.createReceiver=function(a,b){var c;return Stripe.token.validate(a,"bitcoin_receiver data"),c=Stripe.token.formatData(a,this._whitelistedAttrs),c.key=Stripe.key||Stripe.publishableKey,Stripe.utils.validateKey(c.key),Stripe.request({url:""+Stripe.endpoint+"/bitcoin/receivers",data:c,method:"POST",success:function(a,c){return"function"==typeof b?b(c,a):void 0},complete:Stripe.complete(b,"A network error has occurred while creating a Bitcoin address. Please try again."),timeout:4e4})},b.getReceiver=function(a,b){var c;if(!a)throw new Error("receiver id required");return c=Stripe.key||Stripe.publishableKey,Stripe.utils.validateKey(c),Stripe.request({url:""+Stripe.endpoint+"/bitcoin/receivers/"+a,data:{key:c},success:function(a,c){return"function"==typeof b?b(c,a):void 0},complete:Stripe.complete(b,"A network error has occurred loading data from Stripe. Please try again."),timeout:4e4})},b.pollReceiver=function(a,b){return this._initPoll(a),this._poll(a,function(a){return function(b,c){return a.getReceiver(b,c)}}(this),function(a,b){return!1},function(a,b){return b.filled},b)},b.cancelReceiverPoll=function(a){return b._cancelPoll(a)},b}(this.Stripe._poller),this.Stripe.source=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return k(b,a),b.get=function(a,b,c){var d,e;if(!a)throw new Error("sourceId required");if(!b)throw new Error("clientSecret required");return d=Stripe.key||Stripe.publishableKey,Stripe.utils.validateKey(d),e={},e.key=d,e.client_secret=b,Stripe.request({url:""+Stripe.endpoint+"/sources/"+a,data:e,success:function(a,b){return"function"==typeof c?c(b,a):void 0},complete:Stripe.complete(c,"A network error has occurred loading data from Stripe. Please try again."),timeout:4e4})},b.poll=function(a,b,c){return this._initPoll(a),this._poll(a,function(a){return function(c,d){return a.get(c,b,d)}}(this),function(a){return function(b,c){return a._activePolls[b].source_status!==c.status&&(a._activePolls[b].source_status=c.status,!0)}}(this),function(a,b){return!1},c)},b.cancelPoll=function(a){return this._cancelPoll(a)},b}(this.Stripe._poller),this.Stripe.threeDSecure=function(){function a(){}return a.create=function(a,b){var c;if("object"!=typeof a)throw new Error("params must be an object.");if("function"!=typeof b)throw new Error("callback must be a function.");return a.key||(a.key=Stripe.key||Stripe.publishableKey),a.return_url||(a.return_url="_callback"),Stripe.utils.validateKey(a.key),c={url:""+Stripe.endpoint+"/3d_secure",data:a,method:"POST",headers:{},success:function(a,c){return"function"==typeof b?b(c,a):void 0},complete:Stripe.complete(b,"A network error has occurred, and you have not been charged. Please try again."),timeout:4e4,tokenType:"three_d_secure"},Stripe._language&&(c.headers["Accept-Language"]=Stripe._language),Stripe.request(c),null},a.createIframe=function(a,b,c){var d,e;if(e=null,!Stripe.validator.isUrl(a))throw new Error("redirectUrl must be a valid URL.");if(!Stripe.validator.isElementOrId(b))throw new Error("parentElement must be a DOM Element, or the ID of a DOM element.");if("function"!=typeof c)throw new Error("callback must be a function.");return d=function(a,b){var d,f;try{f=Stripe.JSON.parse(a)}catch(g){throw d=g,Stripe.reportError("InvalidJSON-3DSecureCallback"),new Error("Stripe.js received invalid JSON")}return e.destroy(),c(f)},e=new Stripe.easyXDM.Socket({swf:""+Stripe._iframeBaseUrl+"/v2/stripexdm.swf",remote:a,onMessage:d,container:b}),null},a}(),this.Stripe.applePay=function(){function a(){}return a.checkAvailability=function(a){var b;if(null==a)throw new Error("This function executes asynchronously; please pass it a callback function.");return(null!=(b=window.ApplePaySession)?b.canMakePayments():void 0)?ApplePaySession.canMakePaymentsWithActiveCard("merchant."+window.location.hostname+".stripe").then(function(b){return a(b)}):void a(!1)},a.buildSession=function(a,b,c){var d,e,f,g;if(null==window.ApplePaySession)throw new Error("Apple Pay is not supported in this browser. You should check the result of Stripe.applePay.checkAvailability before calling this method");return a.supportedNetworks=["amex","discover","masterCard","visa"],a.merchantCapabilities||(a.merchantCapabilities=["supports3DS"]),e=null!=(g=a.shippingMethods)?g[0]:void 0,f=new ApplePaySession(1,a),d=function(a){var b;return b=(null!=a?a.error:void 0)||{message:"Something went wrong validating your Apple Pay Session."},null!=b.message&&console.warn(b.message),f.abort(),"function"==typeof c?c(b):void 0},f.addEventListener("shippingmethodselected",function(a){return e=a.shippingMethod}),f.addEventListener("validatemerchant",function(b){var c;return c={method:"POST",url:""+Stripe.endpoint+"/apple_pay/sessions",data:{key:Stripe.key||Stripe.publishableKey,validation_url:b.validationURL,domain_name:window.location.hostname,display_name:a.total.label},success:function(a,b){var c;return null!=a.session?(c=Stripe.JSON.parse(a.session),f.completeMerchantValidation(c)):d(a)},complete:function(a,b,c){if("success"!==a)return d(b)},timeout:4e4},Stripe.request(c)}),f.addEventListener("paymentauthorized",function(a){return Stripe.applePay.createToken(a.payment,function(d,g){var h;return null!=g.error?(f.completePayment(ApplePaySession.STATUS_FAILURE),"function"==typeof c?c(g.error):void 0):(h={token:g},null!=e&&(h.shippingMethod=e),null!=a.payment.shippingContact&&(h.shippingContact=a.payment.shippingContact),b(h,function(a){return a?f.completePayment(ApplePaySession.STATUS_SUCCESS):f.completePayment(ApplePaySession.STATUS_FAILURE)}))})}),f},a.createToken=function(a,b){var c,d,e;return c={apple_pay:!0,pk_token:Stripe.JSON.stringify(a.token.paymentData),pk_token_transaction_id:a.token.transactionIdentifier,pk_token_payment_network:a.token.paymentMethod.network,pk_token_instrument_name:a.token.paymentMethod.displayName},null!=a.billingContact&&(c.card={name:[a.billingContact.givenName,a.billingContact.familyName].join(" ").trim(),address_line1:null!=(d=a.billingContact.addressLines)?d[0]:void 0,address_line2:null!=(e=a.billingContact.addressLines)?e[1]:void 0,address_city:a.billingContact.locality,address_state:a.billingContact.administrativeArea,address_zip:a.billingContact.postalCode,address_country:a.billingContact.countryCode}),Stripe.token.create(c,b)},a}(),a=["createToken","getToken","cardType","validateExpiry","validateCVC","validateCardNumber"];for(h=0,i=a.length;h<i;h++)e=a[h],this.Stripe[e]=this.Stripe.card[e];this.Stripe.stripejs_ua="stripe.js/47e2c03","undefined"!=typeof module&&null!==module&&(module.exports=this.Stripe),"function"==typeof define&&define("stripe",[],function(a){return function(){return a.Stripe}}(this))}).call(this),function(){this.Stripe.isDoubleLoaded||function(a){function b(a,e){function f(a){if(f[a]!==q)return f[a];var b;if("bug-string-char-index"==a)b="a"!="a"[0];else if("json"==a)b=f("json-stringify")&&f("json-parse");else{var c,d='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==a){var i=e.stringify,k="function"==typeof i&&t;if(k){(c=function(){return 1}).toJSON=c;try{k="0"===i(0)&&"0"===i(new g)&&'""'==i(new h)&&i(s)===q&&i(q)===q&&i()===q&&"1"===i(c)&&"[1]"==i([c])&&"[null]"==i([q])&&"null"==i(null)&&"[null,null,null]"==i([q,s,null])&&i({a:[c,!0,!1,null,"\0\b\n\f\r\t"]})==d&&"1"===i(null,c)&&"[\n 1,\n 2\n]"==i([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==i(new j((-864e13)))&&'"+275760-09-13T00:00:00.000Z"'==i(new j(864e13))&&'"-000001-01-01T00:00:00.000Z"'==i(new j((-621987552e5)))&&'"1969-12-31T23:59:59.999Z"'==i(new j((-1)))}catch(l){k=!1}}b=k}if("json-parse"==a){var m=e.parse;if("function"==typeof m)try{if(0===m("0")&&!m(!1)){c=m(d);var n=5==c.a.length&&1===c.a[0];if(n){try{n=!m('"\t"')}catch(l){}if(n)try{n=1!==m("01")}catch(l){}if(n)try{n=1!==m("1.")}catch(l){}}}}catch(l){n=!1}b=n}}return f[a]=!!b}a||(a=d.Object()),e||(e=d.Object());var g=a.Number||d.Number,h=a.String||d.String,i=a.Object||d.Object,j=a.Date||d.Date,k=a.SyntaxError||d.SyntaxError,l=a.TypeError||d.TypeError,m=a.Math||d.Math,n=a.JSON||d.JSON;"object"==typeof n&&n&&(e.stringify=n.stringify,e.parse=n.parse);var o,p,q,r=i.prototype,s=r.toString,t=new j((-0xc782b5b800cec));try{t=t.getUTCFullYear()==-109252&&0===t.getUTCMonth()&&1===t.getUTCDate()&&10==t.getUTCHours()&&37==t.getUTCMinutes()&&6==t.getUTCSeconds()&&708==t.getUTCMilliseconds()}catch(u){}if(!f("json")){var v="[object Function]",w="[object Date]",x="[object Number]",y="[object String]",z="[object Array]",A="[object Boolean]",B=f("bug-string-char-index");if(!t)var C=m.floor,D=[0,31,59,90,120,151,181,212,243,273,304,334],E=function(a,b){return D[b]+365*(a-1970)+C((a-1969+(b=+(b>1)))/4)-C((a-1901+b)/100)+C((a-1601+b)/400)};if((o=r.hasOwnProperty)||(o=function(a){var b,c={};return(c.__proto__=null,c.__proto__={toString:1},c).toString!=s?o=function(a){var b=this.__proto__,c=a in(this.__proto__=null,this);return this.__proto__=b,c}:(b=c.constructor,o=function(a){var c=(this.constructor||b).prototype;return a in this&&!(a in c&&this[a]===c[a])}),c=null,o.call(this,a)}),p=function(a,b){var d,e,f,g=0;(d=function(){this.valueOf=0}).prototype.valueOf=0,e=new d;for(f in e)o.call(e,f)&&g++;return d=e=null,g?p=2==g?function(a,b){var c,d={},e=s.call(a)==v;for(c in a)e&&"prototype"==c||o.call(d,c)||!(d[c]=1)||!o.call(a,c)||b(c)}:function(a,b){var c,d,e=s.call(a)==v;for(c in a)e&&"prototype"==c||!o.call(a,c)||(d="constructor"===c)||b(c);(d||o.call(a,c="constructor"))&&b(c)}:(e=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],p=function(a,b){var d,f,g=s.call(a)==v,h=!g&&"function"!=typeof a.constructor&&c[typeof a.hasOwnProperty]&&a.hasOwnProperty||o;for(d in a)g&&"prototype"==d||!h.call(a,d)||b(d);for(f=e.length;d=e[--f];h.call(a,d)&&b(d));}),p(a,b)},!f("json-stringify")){var F={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},G="000000",H=function(a,b){return(G+(b||0)).slice(-a)},I="\\u00",J=function(a){for(var b='"',c=0,d=a.length,e=!B||d>10,f=e&&(B?a.split(""):a);c<d;c++){var g=a.charCodeAt(c);switch(g){case 8:case 9:case 10:case 12:case 13:case 34:case 92:b+=F[g];break;default:if(g<32){b+=I+H(2,g.toString(16));break}b+=e?f[c]:a.charAt(c)}}return b+'"'},K=function(a,b,c,d,e,f,g){var h,i,j,k,m,n,r,t,u,v,B,D,F,G,I,L;try{h=b[a]}catch(M){}if("object"==typeof h&&h)if(i=s.call(h),i!=w||o.call(h,"toJSON"))"function"==typeof h.toJSON&&(i!=x&&i!=y&&i!=z||o.call(h,"toJSON"))&&(h=h.toJSON(a));else if(h>-1/0&&h<1/0){if(E){for(m=C(h/864e5),j=C(m/365.2425)+1970-1;E(j+1,0)<=m;j++);for(k=C((m-E(j,0))/30.42);E(j,k+1)<=m;k++);m=1+m-E(j,k),n=(h%864e5+864e5)%864e5,r=C(n/36e5)%24,t=C(n/6e4)%60,u=C(n/1e3)%60,v=n%1e3}else j=h.getUTCFullYear(),k=h.getUTCMonth(),m=h.getUTCDate(),r=h.getUTCHours(),t=h.getUTCMinutes(),u=h.getUTCSeconds(),v=h.getUTCMilliseconds();h=(j<=0||j>=1e4?(j<0?"-":"+")+H(6,j<0?-j:j):H(4,j))+"-"+H(2,k+1)+"-"+H(2,m)+"T"+H(2,r)+":"+H(2,t)+":"+H(2,u)+"."+H(3,v)+"Z"}else h=null;if(c&&(h=c.call(b,a,h)),null===h)return"null";if(i=s.call(h),i==A)return""+h;if(i==x)return h>-1/0&&h<1/0?""+h:"null";if(i==y)return J(""+h);if("object"==typeof h){for(G=g.length;G--;)if(g[G]===h)throw l();if(g.push(h),B=[],I=f,f+=e,i==z){for(F=0,G=h.length;F<G;F++)D=K(F,h,c,d,e,f,g),B.push(D===q?"null":D);L=B.length?e?"[\n"+f+B.join(",\n"+f)+"\n"+I+"]":"["+B.join(",")+"]":"[]"}else p(d||h,function(a){var b=K(a,h,c,d,e,f,g);b!==q&&B.push(J(a)+":"+(e?" ":"")+b)}),L=B.length?e?"{\n"+f+B.join(",\n"+f)+"\n"+I+"}":"{"+B.join(",")+"}":"{}";return g.pop(),L}};e.stringify=function(a,b,d){var e,f,g,h;if(c[typeof b]&&b)if((h=s.call(b))==v)f=b;else if(h==z){g={};for(var i,j=0,k=b.length;j<k;i=b[j++],h=s.call(i),(h==y||h==x)&&(g[i]=1));}if(d)if((h=s.call(d))==x){if((d-=d%1)>0)for(e="",d>10&&(d=10);e.length<d;e+=" ");}else h==y&&(e=d.length<=10?d:d.slice(0,10));return K("",(i={},i[""]=a,i),f,g,e,"",[])}}if(!f("json-parse")){var L,M,N=h.fromCharCode,O={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"},P=function(){throw L=M=null,k()},Q=function(){for(var a,b,c,d,e,f=M,g=f.length;L<g;)switch(e=f.charCodeAt(L)){case 9:case 10:case 13:case 32:L++;break;case 123:case 125:case 91:case 93:case 58:case 44:return a=B?f.charAt(L):f[L],L++,a;case 34:for(a="@",L++;L<g;)if(e=f.charCodeAt(L),e<32)P();else if(92==e)switch(e=f.charCodeAt(++L)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:a+=O[e],L++;break;case 117:for(b=++L,c=L+4;L<c;L++)e=f.charCodeAt(L),e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70||P();a+=N("0x"+f.slice(b,L));break;default:P()}else{if(34==e)break;for(e=f.charCodeAt(L),b=L;e>=32&&92!=e&&34!=e;)e=f.charCodeAt(++L);a+=f.slice(b,L)}if(34==f.charCodeAt(L))return L++,a;P();default:if(b=L,45==e&&(d=!0,e=f.charCodeAt(++L)),e>=48&&e<=57){for(48==e&&(e=f.charCodeAt(L+1),e>=48&&e<=57)&&P(),d=!1;L<g&&(e=f.charCodeAt(L),e>=48&&e<=57);L++);if(46==f.charCodeAt(L)){for(c=++L;c<g&&(e=f.charCodeAt(c),e>=48&&e<=57);c++);c==L&&P(),L=c}if(e=f.charCodeAt(L),101==e||69==e){for(e=f.charCodeAt(++L),43!=e&&45!=e||L++,c=L;c<g&&(e=f.charCodeAt(c),e>=48&&e<=57);c++);c==L&&P(),L=c}return+f.slice(b,L)}if(d&&P(),"true"==f.slice(L,L+4))return L+=4,!0;if("false"==f.slice(L,L+5))return L+=5,!1;if("null"==f.slice(L,L+4))return L+=4,null;P()}return"$"},R=function(a){var b,c;if("$"==a&&P(),"string"==typeof a){if("@"==(B?a.charAt(0):a[0]))return a.slice(1);if("["==a){for(b=[];a=Q(),"]"!=a;c||(c=!0))c&&(","==a?(a=Q(),"]"==a&&P()):P()),","==a&&P(),b.push(R(a));return b}if("{"==a){for(b={};a=Q(),"}"!=a;c||(c=!0))c&&(","==a?(a=Q(),"}"==a&&P()):P()),","!=a&&"string"==typeof a&&"@"==(B?a.charAt(0):a[0])&&":"==Q()||P(),b[a.slice(1)]=R(Q());return b}P()}return a},S=function(a,b,c){var d=T(a,b,c);d===q?delete a[b]:a[b]=d},T=function(a,b,c){var d,e=a[b];if("object"==typeof e&&e)if(s.call(e)==z)for(d=e.length;d--;)S(e,d,c);else p(e,function(a){S(e,a,c)});return c.call(a,b,e)};e.parse=function(a,b){var c,d;return L=0,M=""+a,c=R(Q()),"$"!=Q()&&P(),L=M=null,b&&s.call(b)==v?T((d={},d[""]=c,d),"",b):c}}}return e.runInContext=b,e}var c={"function":!0,object:!0},d=this,e=b(a,d);d.JSON={parse:e.parse,stringify:e.stringify}}.call(Stripe,this)}.call(this),function(){this.Stripe.isDoubleLoaded||!function(a,b,c,d,e,f){function g(a,b){var c=typeof a[b];return"function"==c||!("object"!=c||!a[b])||"unknown"==c}function h(){var a="Shockwave Flash",b="application/x-shockwave-flash";if(!p(navigator.plugins)&&"object"==typeof navigator.plugins[a]){var c=navigator.plugins[a].description;c&&!p(navigator.mimeTypes)&&navigator.mimeTypes[b]&&navigator.mimeTypes[b].enabledPlugin&&(x=c.match(/\d+/g))}if(!x){var d;try{d=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"),x=Array.prototype.slice.call(d.GetVariable("$version").match(/(\d+),(\d+),(\d+),(\d+)/),1),d=null}catch(e){}}if(!x)return!1;var f=parseInt(x[0],10),g=parseInt(x[1],10);return y=f>9&&g>0,!0}function i(){if(!L){L=!0;for(var a=0;a<M.length;a++)M[a]();M.length=0}}function j(a,b){return L?void a.call(b):void M.push(function(){a.call(b)})}function k(a){return a.match(D)[3]}function l(a){return a.match(D)[4]||""}function m(a){var b,c,d=a.toLowerCase().match(D),e="",f="";try{b=d[2],c=d[3],e=d[4]||"",("http:"==b&&":80"==e||"https:"==b&&":443"==e)&&(e=""),f=b+"//"+c+e}catch(g){f=a}return f}function n(a){if(a=a.replace(F,"$1/"),!a.match(/^(http||https):\/\//)){var b="/"===a.substring(0,1)?"":c.pathname;"/"!==b.substring(b.length-1)&&(b=b.substring(0,b.lastIndexOf("/")+1)),a=c.protocol+"//"+c.host+b+a}for(;E.test(a);)a=a.replace(E,"");return a}function o(a,b){var c="",d=a.indexOf("#");d!==-1&&(c=a.substring(d),a=a.substring(0,d));var e,g=[];for(var h in b)b.hasOwnProperty(h)&&(e="stripe_"+h,g.push(e+"="+f(b[h])));return a+(J?"#":a.indexOf("?")==-1?"?":"&")+g.join("&")+c}function p(a){return"undefined"==typeof a}function q(a,b,c){var d;for(var e in b)b.hasOwnProperty(e)&&(e in a?(d=b[e],"object"==typeof d?q(a[e],d,c):c||(a[e]=b[e])):a[e]=b[e]);return a}function r(){var a=b.body.appendChild(b.createElement("form")),c=a.appendChild(b.createElement("input"));c.name=I+"TEST"+C,w=c!==a.elements[c.name],b.body.removeChild(a)}function s(c){p(w)&&r();var e;w?e=b.createElement('<iframe name="'+c.props.name+'"/>'):(e=b.createElement("IFRAME"),e.name=c.props.name),e.id=e.name=c.props.name,delete c.props.name,"string"==typeof c.container&&(c.container=b.getElementById(c.container)),c.container||(q(e.style,{position:"absolute",top:"-2000px",left:"0px"}),c.container=b.body);var f=c.props.src;c.props.src="about:blank",q(e,c.props),e.border=e.frameBorder=0,e.allowTransparency=!0;var g=!1;return c.onFrameAck&&"postMessage"in a&&a.addEventListener?a.addEventListener("message",function(a){var b=Stripe._iframeBaseUrl.replace(/^https?:\/\//,"").replace(/\/.*$/,""),d=a.origin.replace(/^https?:\/\//,"").replace(/\/.*$/,"");b===d&&"stripe:ack"===a.data&&c.onFrameAck(!0)},!1):g=!0,c.container.appendChild(e),c.onLoad&&z(e,"load",function(){c.onLoad.apply(c,arguments),g&&c.onFrameAck(!1)}),c.onError&&z(e,"error",function(){c.onError.apply(c,arguments)}),e.src=f,c.onAsyncInject&&d(function(){c.onAsyncInject.call(c,e)},5e3),c.props.src=f,e}function t(c){var d,e=c.protocol;if(c.isHost=c.isHost||p(O.xdm_p),J=c.hash||!1,c.props||(c.props={}),c.isHost){if(c.remote=n(c.remote),c.channel=c.channel||"default"+C++,c.secret=Math.random().toString(16).substring(2),p(e))if(g(a,"postMessage")||g(b,"postMessage"))e="1";else{if(!(c.swf&&g(a,"ActiveXObject")&&h()))throw new Error("No suitable transport protocol for Stripe.js");e="6"}}else c.channel=O.xdm_c.replace(/["'<>\\]/g,""),c.secret=O.xdm_s,c.remote=O.xdm_e.replace(/["'<>\\]/g,""),e=O.xdm_p;switch(c.protocol=e,e){case"1":d=[new H.stack.PostMessageTransport(c)];break;case"6":x||h(),d=[new H.stack.FlashTransport(c)]}return d?(d.push(new H.stack.QueueBehavior({lazy:c.lazy,remove:!0})),d):void c.onInternalError.call(c,"BadXDMProtocol")}function u(a){for(var b,c={incoming:function(a,b){this.up.incoming(a,b)},outgoing:function(a,b){this.down.outgoing(a,b)},callback:function(a){this.up.callback(a)},init:function(){this.down.init()},destroy:function(){this.down.destroy()}},d=0,e=a.length;d<e;d++)b=a[d],q(b,c,!0),0!==d&&(b.down=a[d-1]),d!==e-1&&(b.up=a[d+1]);return b}function v(a){a.up.down=a.down,a.down.up=a.up,a.up=a.down=null}var w,x,y,z,A,B=this,C=Math.floor(1e6*Math.random()),D=(Function.prototype,/^((http:|https:|file:|chrome\-extension:|chrome:)\/\/([^:\/\s]+)(:\d+)*)/),E=/[\-\w]+\/\.\.\//,F=/([^:])\/\//g,G="Stripe",H={},I="stripeXDM_",J=!1;if(g(a,"addEventListener"))z=function(a,b,c){a.addEventListener(b,c,!1)},A=function(a,b,c){a.removeEventListener(b,c,!1)};else{if(!g(a,"attachEvent"))throw new Error("Browser not supported");z=function(a,b,c){a.attachEvent("on"+b,c)},A=function(a,b,c){a.detachEvent("on"+b,c)}}var K,L=!1,M=[];if("readyState"in b?(K=b.readyState,L="complete"==K||~navigator.userAgent.indexOf("AppleWebKit/")&&("loaded"==K||"interactive"==K)):L=!!b.body,!L){if(g(a,"addEventListener"))z(b,"DOMContentLoaded",i);else if(z(b,"readystatechange",function(){"complete"==b.readyState&&i()}),b.documentElement.doScroll&&a===top){var N=function(){if(!L){try{b.documentElement.doScroll("left");
3
+ }catch(a){return void d(N,1)}i()}};N()}z(a,"load",i)}var O=function(a){a=a.substring(1).split("&");for(var b,c={},d=a.length;d--;)b=a[d].split("="),c[b[0].replace(/^stripe_/,"")]=e(b[1]);return c}(/stripe_xdm_e=/.test(c.search)?c.search:c.hash),P=function(){return Stripe.JSON};q(H,{version:"2.4.19.3",query:O,stack:{},apply:q,getJSONObject:P,whenReady:j}),H.DomHelper={on:z,un:A},function(){var a={};H.Fn={set:function(b,c){a[b]=c},get:function(b,c){if(a.hasOwnProperty(b)){var d=a[b];return c&&delete a[b],d}}}}(),H.Socket=function(a){var b=u(t(a).concat([{incoming:function(b,c){a.onMessage(b,c)},callback:function(b){a.onReady&&a.onReady(b)}}])),c=m(a.remote);this.origin=m(a.remote),this.destroy=function(){b.destroy()},this.postMessage=function(a){b.outgoing(a,c)},b.init()},H.stack.FlashTransport=function(a){function e(a,b){d(function(){h.up.incoming(a,p)},0)}function g(c){var d=a.swf+"?host="+a.isHost,e="easyXDM_swf_"+Math.floor(1e4*Math.random());H.Fn.set("flash_loaded"+c.replace(/[\-.]/g,"_"),function(){H.stack.FlashTransport[c].swf=r=t.firstChild;for(var a=H.stack.FlashTransport[c].queue,b=0;b<a.length;b++)a[b]();a.length=0}),a.swfContainer?t="string"==typeof a.swfContainer?b.getElementById(a.swfContainer):a.swfContainer:(t=b.createElement("div"),q(t.style,y&&a.swfNoThrottle?{height:"20px",width:"20px",position:"fixed",right:0,top:0}:{height:"1px",width:"1px",position:"absolute",overflow:"hidden",right:0,top:0}),b.body.appendChild(t));var g="callback=flash_loaded"+f(c.replace(/[\-.]/g,"_"))+"&proto="+B.location.protocol+"&domain="+f(k(B.location.href))+"&port="+f(l(B.location.href))+"&ns="+f(G);t.innerHTML="<object height='20' width='20' type='application/x-shockwave-flash' id='"+e+"' data='"+d+"'><param name='allowScriptAccess' value='always'></param><param name='wmode' value='transparent'><param name='movie' value='"+d+"'></param><param name='flashvars' value='"+g+"'></param><embed type='application/x-shockwave-flash' FlashVars='"+g+"' allowScriptAccess='always' wmode='transparent' src='"+d+"' height='1' width='1'></embed></object>"}var h,i,p,r,t;return h={outgoing:function(b,c,d){r.postMessage(a.channel,b.toString()),d&&d()},destroy:function(){try{r.destroyChannel(a.channel)}catch(b){}r=null,i&&(i.parentNode.removeChild(i),i=null)},onDOMReady:function(){p=a.remote,H.Fn.set("flash_"+a.channel+"_init",function(){d(function(){h.up.callback(!0)})}),H.Fn.set("flash_"+a.channel+"_onMessage",e),a.swf=n(a.swf);var b=k(a.swf),f=function(){H.stack.FlashTransport[b].init=!0,r=H.stack.FlashTransport[b].swf,r.createChannel(a.channel,a.secret,m(a.remote),a.isHost),a.isHost&&(y&&a.swfNoThrottle&&q(a.props,{position:"fixed",right:0,top:0,height:"20px",width:"20px"}),q(a.props,{src:o(a.remote,{xdm_e:m(c.href),xdm_c:a.channel,xdm_p:6,xdm_s:a.secret}),name:I+a.channel+"_provider"}),i=s(a))};H.stack.FlashTransport[b]&&H.stack.FlashTransport[b].init?f():H.stack.FlashTransport[b]?H.stack.FlashTransport[b].queue.push(f):(H.stack.FlashTransport[b]={queue:[f]},g(b))},init:function(){j(h.onDOMReady,h)}}},H.stack.PostMessageTransport=function(b){function e(a){if(a.origin)return m(a.origin);if(a.uri)return m(a.uri);if(a.domain)return c.protocol+"//"+a.domain;throw new Error("Unable to retrieve the origin of the event")}function f(a){var c=e(a);c==k&&"string"==typeof a.data&&a.data.substring(0,b.channel.length+1)==b.channel+" "&&g.up.incoming(a.data.substring(b.channel.length+1),c)}var g,h,i,k;return g={outgoing:function(a,c,d){try{i.postMessage(b.channel+" "+a,c||k),d&&d()}catch(e){b.onInternalError&&b.onInternalError.call(b,"CallerWindowError")}},destroy:function(){A(a,"message",f),h&&(i=null,h.parentNode.removeChild(h),h=null)},onDOMReady:function(){if(k=m(b.remote),b.isHost){var e=function(c){c.data==b.channel+"-ready"&&(i="postMessage"in h.contentWindow?h.contentWindow:h.contentWindow.document,A(a,"message",e),z(a,"message",f),d(function(){g.up.callback(!0)},0))};z(a,"message",e),q(b.props,{src:o(b.remote,{xdm_e:m(c.href),xdm_c:b.channel,xdm_p:1}),name:I+b.channel+"_provider"}),h=s(b)}else z(a,"message",f),i="postMessage"in a.parent?a.parent:a.parent.document,i.postMessage(b.channel+"-ready",k),d(function(){g.up.callback(!0)},0)},init:function(){j(g.onDOMReady,g)}}},H.stack.QueueBehavior=function(a){function b(){if(a.remove&&0===h.length)return void v(c);if(!i&&0!==h.length&&!g){i=!0;var e=h.shift();c.down.outgoing(e.data,e.origin,function(a){i=!1,e.callback&&d(function(){e.callback(a)},0),b()})}}var c,g,h=[],i=!0,j="",k=0,l=!1,m=!1;return c={init:function(){p(a)&&(a={}),a.maxLength&&(k=a.maxLength,m=!0),a.lazy?l=!0:c.down.init()},callback:function(a){i=!1;var d=c.up;b(),d.callback(a)},incoming:function(b,d){if(m){var f=b.indexOf("_"),g=parseInt(b.substring(0,f),10);j+=b.substring(f+1),0===g&&(a.encode&&(j=e(j)),c.up.incoming(j,d),j="")}else c.up.incoming(b,d)},outgoing:function(d,e,g){a.encode&&(d=f(d));var i,j=[];if(m){for(;0!==d.length;)i=d.substring(0,k),d=d.substring(i.length),j.push(i);for(;i=j.shift();)h.push({data:j.length+"_"+i,origin:e,callback:0===j.length?g:null})}else h.push({data:d,origin:e,callback:g});l?c.down.init():b()},destroy:function(){g=!0,c.down.destroy()}}},Stripe.easyXDM=H}(window,document,location,window.setTimeout,decodeURIComponent,encodeURIComponent)}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1};this.Stripe.isDoubleLoaded||(this.Stripe.utils=function(){function b(){}var c;return c=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,b.trim=function(a){return null===a?"":(a+"").replace(c,"")},b.serialize=function(a,b,c){var d,e,f;null==b&&(b=[]);try{for(e in a)f=a[e],c&&(e=""+c+"["+e+"]"),"object"==typeof f?this.serialize(f,b,e):b.push(""+e+"="+encodeURIComponent(f));return b.join("&").replace(/%20/g,"+")}catch(g){throw d=g,new Error("Unable to serialize: "+a)}},b.underscore=function(a){return(a+"").replace(/([A-Z])/g,function(a){return"_"+a.toLowerCase()}).replace(/-/g,"_")},b.underscoreKeys=function(a){var b,c,d;d=[];for(b in a)c=a[b],delete a[b],d.push(a[this.underscore(b)]=c);return d},b.isElement=function(a){return"object"==typeof a&&(!!a.jquery||1===a.nodeType)},b.paramsFromForm=function(b,c){var d,e,f,g,h,i,j,k,l,m;for(null==c&&(c=[]),b.jquery&&(b=b[0]),f=b.getElementsByTagName("input"),h=b.getElementsByTagName("select"),i={},j=0,l=f.length;j<l;j++)e=f[j],d=this.underscore(e.getAttribute("data-stripe")),a.call(c,d)<0||(i[d]=e.value);for(k=0,m=h.length;k<m;k++)g=h[k],d=this.underscore(g.getAttribute("data-stripe")),a.call(c,d)<0||null!=g.selectedIndex&&(i[d]=g.options[g.selectedIndex].value);return i},b.validateProtocol=function(a){var b;if(a&&"string"==typeof a)return/_live_/g.test(a)&&"https:"!==window.location.protocol&&null!=(null!=(b=window.console)?b.warn:void 0)?window.console.warn("You are using Stripe.js in live mode over an insecure connection. This is considered unsafe. Please conduct live requests only on sites served over https. For more info, see https://stripe.com/help/ssl"):void 0},b.validateKey=function(a){if(!a||"string"!=typeof a)throw new Error("You did not set a valid publishable key. Call Stripe.setPublishableKey() with your publishable key. For more info, see https://stripe.com/docs/stripe.js");if(/\s/g.test(a))throw new Error("Your key is invalid, as it contains whitespace. For more info, see https://stripe.com/docs/stripe.js");if(/^sk_/.test(a))throw new Error("You are using a secret key with Stripe.js, instead of the publishable one. For more info, see https://stripe.com/docs/stripe.js")},b.parseExpString=function(a){var b,c,d,e,f,g,h,i,j;for(g=function(b){throw new Error("You passed an invalid expiration date `"+a+"`. "+(b||"")+"Please pass a string containing a numeric month and year such as `01-17` or `2015 / 05` For more info, see https://stripe.com/docs/stripe.js")},"string"!=typeof a&&g(),f=a.split(/[\.\-\/\s]+/g),2!==f.length&&g(),b=i=0,j=f.length;i<j;b=++i)e=f[b],d=parseInt(e),isNaN(d)&&g(""+f+" is not a number. "),d<1&&g(""+d+" is less than one. "),f[b]=d;return f[0]>12?(h=f[0],c=f[1]):(c=f[0],h=f[1]),c>12&&g("Month must be a number 1-12, not "+c+". "),h<100&&(h+=2e3),[c,h]},b}())}.call(this),function(){var a,b=[].slice;a=(new Date).getTime(),this.Stripe.isDoubleLoaded||(this.Stripe.ajaxJSONP=function(c){var d,e,f,g,h,i,j;return null==c&&(c={}),f="sjsonp"+ ++a,i=document.createElement("script"),e=null,d=function(a){var b;return null==a&&(a="abort"),clearTimeout(e),null!=(b=i.parentNode)&&b.removeChild(i),f in window&&(window[f]=function(){}),"function"==typeof c.complete?c.complete(a,j,c):void 0},j={abort:d},i.onerror=function(){return j.abort(),"function"==typeof c.error?c.error(j,c):void 0},window[f]=function(){var a,d;a=1<=arguments.length?b.call(arguments,0):[],clearTimeout(e),i.parentNode.removeChild(i);try{delete window[f]}catch(g){d=g,window[f]=void 0}return"function"==typeof c.success&&c.success.apply(c,b.call(a).concat([j])),"function"==typeof c.complete?c.complete("success",j,c):void 0},h=(c.headers||{})["Accept-Language"],c.data||(c.data={}),c.data.callback=f,c.method&&(c.data._method=c.method),h&&(c.data._accept_language=h),i.src=c.url+"?"+Stripe.utils.serialize(c.data),g=document.getElementsByTagName("head")[0],g.appendChild(i),c.timeout>0&&(e=setTimeout(function(){return j.abort("timeout")},c.timeout)),j})}.call(this),function(){var a,b,c,d,e,f,g,h,i,j={}.hasOwnProperty;this.Stripe.isDoubleLoaded||(b={contentType:"application/x-www-form-urlencoded",accept:{json:"application/json"}},g=/^(20\d|1223)$/,f="invalid_json_response",d=function(a,b,c){return function(){return a._aborted?c(a.request,"abort"):a.request&&4===a.request.readyState?(a.request.onreadystatechange=function(){},0===a.request.status?c(a.request,"empty_response"):g.test(a.request.status)?b(a.request,a.request.status):b(a.request,a.request.status)):void 0}},h=function(a,c){var d,e,f,g,h;f=c.headers||{},f.Accept||(f.Accept=b.accept.json),f["Content-Type"]||(f["Content-Type"]=b.contentType),g=c._globalCustomHeaders;for(d in g)j.call(g,d)&&"setRequestHeader"in a&&a.setRequestHeader(d,c._globalCustomHeaders[d]);h=[];for(e in f)j.call(f,e)&&("setRequestHeader"in a?h.push(a.setRequestHeader(e,f[e])):h.push(void 0));return h},i=function(a,b){return/\?/.test(a)?a+"&"+b:a+"?"+b},c=function(a,b){var c,e,f,g,j,k,l,m,n;k=this.o,j=(k.method||"GET").toUpperCase(),l=k.url,g=null!=(m=k.data)?m.key:void 0,c=Stripe.utils.serialize(k.data),f=void 0,"GET"===j&&c&&(l=i(l,c),c=null),n=new XMLHttpRequest,n.open(j,l,!0),h(n,k),n.onreadystatechange=d(this,a,b);try{n.send(c)}catch(o){e=o,Stripe.reportError("XHR-"+e.toString()),b(n,"xhr_send_failure")}return n},a=function(a){return this.o=a,e.apply(this,arguments)},e=function(a){var b,d,e;return this.url=a.url,this.timeout=null,this._successHandler=function(){},this._errorHandlers=[],this._completeHandlers=[],a.timeout&&(this.timeout=setTimeout(function(a){return function(){return a.abort()}}(this),a.timeout)),a.success&&(this._successHandler=function(){return a.success.apply(a,arguments)}),a.error&&this._errorHandlers.push(function(){return a.error.apply(a,arguments)}),a.complete&&this._completeHandlers.push(function(){return a.complete.apply(a,arguments)}),b=function(b){return function(c,d){var e;for(a.timeout&&clearTimeout(b.timeout),b.timeout=null,e=[];b._completeHandlers.length>0;)e.push(b._completeHandlers.shift()(d,c,a));return e}}(this),e=function(a){return function(c,e){var g,h,i;if(i=c.responseText,!i||!i.length)return d(c,"empty_response");try{return h=Stripe.JSON.parse(i),a._successHandler(h,e,c),b(h,"success")}catch(j){return g=j,d(c,f)}}}(this),d=function(a){return function(b,c){var d,e,g;if(g=b.responseText,e=void 0,g&&g.length&&c!==f)try{e=Stripe.JSON.parse(g)}catch(h){d=h,c=c+"_AND_"+f}for(;a._errorHandlers.length>0;)a._errorHandlers.shift()(e||b,c);return Stripe.reportError(c),Stripe._fallBackToOldStripeJsTechniques(),Stripe.request(a.o,!0)}}(this),this.request=c.call(this,e,d)},a.prototype={abort:function(){var a;return this._aborted=!0,null!=(a=this.request)?a.abort():void 0}},this.Stripe.xhr=function(b){return b._globalCustomHeaders=this._customHeaders,new a(b)})}.call(this),function(){var a,b,c,d={}.hasOwnProperty;this.Stripe.isDoubleLoaded||(a=function(a){return this.options=a,a.requestId=Stripe._callCount,a.endpoint=Stripe.endpoint,a.trackPerf=Stripe.trackPerf,this.iframeTimeout=setTimeout(function(){return Stripe._fallBackToOldStripeJsTechniques(),Stripe._iframePendingRequests[a.requestId]&&(Stripe.request(Stripe._iframePendingRequests[a.requestId],!0),delete Stripe._iframePendingRequests[a.requestId]),Stripe._callCache[a.requestId]=function(){return Stripe.reportError("TimeoutEventualReturnError")}},1e4),Stripe._iframePendingRequests[a.requestId]=a,Stripe._callCache[a.requestId]=function(b){return function(){return clearTimeout(b.iframeTimeout),delete Stripe._iframePendingRequests[a.requestId],a.success.apply(a,arguments),"function"==typeof a.complete?a.complete("success",null,a):void 0}}(this),Stripe._callCount+=1,Stripe._socket.postMessage(Stripe.JSON.stringify(a))},this.Stripe.iframe=function(b){return new a(b)},b=Stripe.easyXDM,this.Stripe._isChannel?Stripe._socket=new b.Socket({swf:""+Stripe._iframeBaseUrl+"/v2/stripexdm.swf",onMessage:Stripe._channelListener}):Stripe._isSafeDomain||(c=function(a){var b,d,e;"console"in window&&"warn"in window.console,1,Stripe._iframeChannelComplete.call(Stripe,!1),Stripe._callCache={},Stripe.reportError("FB-"+a),d=document.createElement("script"),e=Math.round((new Date).getTime()/1e3),d.src=""+Stripe._iframeBaseUrl+"/v2/cspblocked.js?domain="+encodeURIComponent(document.location.href)+"&timestamp="+e+"&info="+encodeURIComponent(a)+"&payment_user_agent="+encodeURIComponent(Stripe.stripejs_ua),b=document.getElementsByTagName("script")[0],b.parentNode.insertBefore(d,b),c=function(){}},Stripe._socket=new b.Socket({swf:""+Stripe._iframeBaseUrl+"/v2/stripexdm.swf",remote:""+Stripe._iframeBaseUrl+"/v2/channel"+(Stripe.accountDetails?"-provisioning":"")+".html#__stripe_transport__",onMessage:Stripe._receiveChannelRelay,ackTimeoutDuration:1e4,onLoad:function(){return this._socketLoadTime=+new Date,this.onError=function(){},this.onAsyncInject=function(){},clearTimeout(this.injectTimeout),this._socketAckTime?this.loadTimeout?(clearTimeout(this.loadTimeout),Stripe._iframeChannelComplete.call(Stripe,!0)):Stripe.reportError("LoadDelayError",this._socketLoadTime-this._socketAckTime):this.ackTimeout=setTimeout(function(a){return function(){return a.onFrameAck=function(){},clearTimeout(a.loadTimeout),c("AckTimeoutError")}}(this),this.ackTimeoutDuration)},onError:function(){return this.onLoad=function(){},this.onAsyncInject=function(){},this.onFrameAck=function(){},clearTimeout(this.ackTimeout),clearTimeout(this.injectTimeout),clearTimeout(this.loadTimeout),c("IframeOnError")},onInternalError:function(a){var b,c,e;this.onError=function(){},this.onLoad=function(){},this.onFrameAck=function(){},this.onAsyncInject=function(){},clearTimeout(this.ackTimeout),clearTimeout(this.loadTimeout),clearTimeout(this.injectTimeout),Stripe.reportError("FB-XDM-"+a),Stripe._fallBackToOldStripeJsTechniques(),e=Stripe._iframePendingRequests;for(b in e)d.call(e,b)&&(c=e[b],Stripe._callCache[c.requestId]=function(){},delete Stripe._iframePendingRequests[c.requestId],Stripe.request(c,!0))},onAsyncInject:function(a){return this.injectTimeout=setTimeout(function(a){return function(){return a.onError=function(){},a.onLoad=function(){},a.onFrameAck=function(){},clearTimeout(a.ackTimeout),clearTimeout(a.loadTimeout),c("InjectTimeoutError")}}(this),this.ackTimeoutDuration)},onFrameAck:function(a){return this._socketAckTime=+new Date,clearTimeout(this.ackTimeout),clearTimeout(this.injectTimeout),this.onAsyncInject=function(){},this.onError=function(){},this.ackTimeout?Stripe._iframeChannelComplete.call(Stripe,!0):this._socketLoadTime?(this.onLoad=function(){},Stripe.reportError("AckDelayError",this._socketAckTime-this._socketLoadTime)):this.loadTimeout=setTimeout(function(a){return function(){return c("LoadTimeoutError"),a.onLoad=function(){}}}(this),this.ackTimeoutDuration)}})))}.call(this),function(){var a=[].indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1};this.Stripe.isDoubleLoaded||(this.Stripe.validator={"boolean":function(a,b){if("true"!==b&&"false"!==b)return"Enter a boolean string (true or false)"},integer:function(a,b){if(!/^\d+$/.test(b))return"Enter an integer"},positive:function(a,b){if(this.integer(a,b)||!(parseInt(b,10)>0))return"Enter a positive value"},range:function(b,c){var d;if(d=parseInt(c,10),a.call(b,d)<0)return"Needs to be between "+b[0]+" and "+b[b.length-1]},required:function(a,b){if(a&&(null==b||""===b))return"Required"},year:function(a,b){if(!/^\d{4}$/.test(b))return"Enter a 4-digit year"},birthYear:function(a,b){var c;return c=this.year(a,b),c?c:parseInt(b,10)>2e3?"You must be over 18":parseInt(b,10)<1900?"Enter your birth year":void 0},month:function(a,b){return this.integer(a,b)?"Please enter a month":this.range([1,2,3,4,5,6,7,8,9,10,11,12],b)?"Needs to be between 1 and 12":void 0},choices:function(b,c){if(a.call(b,c)<0)return"Not an acceptable value for this field"},email:function(a,b){if(!/^[^@<\s>]+@[^@<\s>]+$/.test(b))return"That doesn't look like an email address"},url:function(a,b){if(!/^https?:\/\/.+\..+/.test(b))return"Not a valid url"},usTaxID:function(a,b){if(!/^\d{2}-?\d{1}-?\d{2}-?\d{4}$/.test(b))return"Not a valid tax ID"},ein:function(a,b){if(!/^\d{2}-?\d{7}$/.test(b))return"Not a valid EIN"},ssnLast4:function(a,b){if(!/^\d{4}$/.test(b))return"Not a valid last 4 digits for an SSN"},ownerPersonalID:function(a,b){var c;if(c=function(){switch(a){case"CA":return/^\d{3}-?\d{3}-?\d{3}$/.test(b);case"US":return!0}}(),!c)return"Not a valid ID"},bizTaxID:function(a,b){var c,d,e,f,g,h,i,j;if(h={CA:["Tax ID",[/^\d{9}$/]],US:["EIN",[/^\d{2}-?\d{7}$/]]},g=h[a],null!=g){for(c=g[0],f=g[1],d=!1,i=0,j=f.length;i<j;i++)if(e=f[i],e.test(b)){d=!0;break}if(!d)return"Not a valid "+c}},zip:function(a,b){var c;if(c=function(){switch(a.toUpperCase()){case"CA":return/^[\d\w]{6}$/.test(null!=b?b.replace(/\s+/g,""):void 0);case"US":return/^\d{5}$/.test(b)||/^\d{9}$/.test(b)}}(),!c)return"Not a valid zip"},bankAccountNumber:function(a,b){if(!/^\d{1,17}$/.test(b))return"Invalid bank account number"},usRoutingNumber:function(a){var b,c,d,e,f,g,h;if(!/^\d{9}$/.test(a))return"Routing number must have 9 digits";for(f=0,b=g=0,h=a.length-1;g<=h;b=g+=3)c=3*parseInt(a.charAt(b),10),d=7*parseInt(a.charAt(b+1),10),e=parseInt(a.charAt(b+2),10),f+=c+d+e;return 0===f||f%10!==0?"Invalid routing number":void 0},caRoutingNumber:function(a){if(!/^\d{5}\-\d{3}$/.test(a))return"Invalid transit number"},routingNumber:function(a,b){switch(a.toUpperCase()){case"CA":return this.caRoutingNumber(b);case"US":return this.usRoutingNumber(b)}},phoneNumber:function(a,b){var c;if(c=b.replace(/[^0-9]/g,""),10!==c.length)return"Invalid phone number"},bizDBA:function(a,b){if(!/^.{1,23}$/.test(b))return"Statement descriptors can only have up to 23 characters"},nameLength:function(a,b){if(1===b.length)return"Names need to be longer than one character"},isUrl:function(a){return"string"==typeof a&&!this.url(null,a)},isElementOrId:function(a){return"object"==typeof a&&null!=a.appendChild||"string"==typeof a}})}.call(this);
includes/AdminBookings.class.php CHANGED
@@ -575,7 +575,7 @@ class rtbAdminBookings {
575
  // Disable notifications
576
  $this->maybe_disable_notifications();
577
 
578
- $result = $rtb_controller->request->insert_booking($by_admin = true);
579
 
580
  if ( $result ) {
581
  wp_send_json_success(
@@ -651,7 +651,9 @@ class rtbAdminBookings {
651
  $_POST[ $field['name'] ] = $field['value'];
652
  }
653
 
654
- $ids = ( isset( $_POST['ID'] ) and $_POST['ID'] != '' ) ? explode( ',', $_POST['ID'] ) : array();
 
 
655
  $subject = stripcslashes( sanitize_text_field( $_POST['rtb-email-subject'] ) );
656
  $message = stripcslashes( wp_kses_post( $_POST['rtb-email-message'] ) );
657
 
@@ -664,7 +666,7 @@ class rtbAdminBookings {
664
  );
665
  }
666
 
667
- if ( empty( $ids ) ) {
668
  wp_send_json_error(
669
  array(
670
  'error' => 'email_missing_data',
@@ -674,27 +676,31 @@ class rtbAdminBookings {
674
  }
675
 
676
  require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
677
-
678
- foreach ( $ids as $id ) {
679
-
680
- $booking = new rtbBooking();
681
- $booking->load_post( $id );
682
-
683
- $email = new rtbNotificationEmail( 'admin_email_notice', 'user' );
684
- $email->subject = empty( $subject ) ? $rtb_controller->settings->get_setting( 'subject-admin-notice' ) : $subject;
685
- $email->message = $message;
686
- $email->set_booking( $booking );
687
- if ( $email->prepare_notification() ) {
688
- do_action( 'rtb_send_notification_before', $email );
689
- $email->send_notification();
690
- do_action( 'rtb_send_notification_after', $email );
691
- }
692
 
693
- // Store email in postmeta for log
694
- $booking->add_log( 'email', $email->subject, $email->message );
695
- $booking->insert_post_data();
 
 
 
 
 
696
  }
697
 
 
 
 
 
698
  wp_send_json_success();
699
  }
700
 
575
  // Disable notifications
576
  $this->maybe_disable_notifications();
577
 
578
+ $result = $rtb_controller->request->insert_booking();
579
 
580
  if ( $result ) {
581
  wp_send_json_success(
651
  $_POST[ $field['name'] ] = $field['value'];
652
  }
653
 
654
+ $id = (int) $_POST['ID'];
655
+ $name = sanitize_text_field( $_POST['name'] );
656
+ $email = sanitize_text_field( $_POST['email'] );
657
  $subject = stripcslashes( sanitize_text_field( $_POST['rtb-email-subject'] ) );
658
  $message = stripcslashes( wp_kses_post( $_POST['rtb-email-message'] ) );
659
 
666
  );
667
  }
668
 
669
+ if ( empty( $id ) || empty( $name ) || empty( $email ) ) {
670
  wp_send_json_error(
671
  array(
672
  'error' => 'email_missing_data',
676
  }
677
 
678
  require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
679
+ $booking = new rtbBooking();
680
+
681
+ if ( !$booking->load_post( $id ) ) {
682
+ wp_send_json_error(
683
+ array(
684
+ 'error' => 'email_missing_booking',
685
+ 'msg' => __( 'There was an error loading the booking and the email was not sent.', 'restaurant-reservations' ),
686
+ )
687
+ );
688
+ }
 
 
 
 
 
689
 
690
+ $email = new rtbNotificationEmail( 'admin_email_notice', 'user' );
691
+ $email->subject = empty( $subject ) ? $rtb_controller->settings->get_setting( 'subject-admin-notice' ) : $subject;
692
+ $email->message = $message;
693
+ $email->set_booking( $booking );
694
+ if ( $email->prepare_notification() ) {
695
+ do_action( 'rtb_send_notification_before', $email );
696
+ $email->send_notification();
697
+ do_action( 'rtb_send_notification_after', $email );
698
  }
699
 
700
+ // Store email in postmeta for log
701
+ $booking->add_log( 'email', $email->subject, $email->message );
702
+ $booking->insert_post_data();
703
+
704
  wp_send_json_success();
705
  }
706
 
includes/Ajax.class.php CHANGED
@@ -56,11 +56,7 @@ if ( !class_exists( 'rtbAJAX' ) ) {
56
  add_action( 'wp_ajax_rtb_get_available_tables', array( $this, 'get_available_tables' ) );
57
  add_action( 'wp_ajax_nopriv_rtb_get_available_tables', array( $this, 'get_available_tables' ) );
58
 
59
- add_action( 'wp_ajax_rtb_stripe_get_intent', array( $this, 'create_stripe_pmtIntnt' ) );
60
- add_action( 'wp_ajax_nopriv_rtb_stripe_get_intent', array( $this, 'create_stripe_pmtIntnt' ) );
61
-
62
- add_action( 'wp_ajax_rtb_stripe_pmt_succeed', array( $this, 'stripe_sca_succeed' ) );
63
- add_action( 'wp_ajax_nopriv_rtb_stripe_pmt_succeed', array( $this, 'stripe_sca_succeed' ) );
64
  }
65
 
66
  /**
@@ -68,7 +64,7 @@ if ( !class_exists( 'rtbAJAX' ) ) {
68
  * @since 2.1.0
69
  */
70
  public function get_reservations() {
71
- global $wpdb, $rtb_controller;
72
 
73
  $email = isset($_POST['booking_email']) ? sanitize_email( $_POST['booking_email'] ) : '';
74
 
@@ -81,30 +77,19 @@ if ( !class_exists( 'rtbAJAX' ) ) {
81
  );
82
  }
83
 
84
- $booking_status_lbls = $rtb_controller->cpts->booking_statuses;
85
-
86
  require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
87
 
88
  $bookings = array();
89
- $booking_ids = $wpdb->get_results(
90
- $wpdb->prepare("
91
- SELECT `post_id` FROM `{$wpdb->postmeta}` WHERE `meta_key` = 'rtb' AND `meta_value` LIKE %s",
92
- '%' . sanitize_email( $email ) . '%'
93
- )
94
- );
95
-
96
  foreach ( $booking_ids as $booking_id ) {
97
  $booking = new rtbBooking();
98
  if ( $booking->load_post( $booking_id->post_id ) ) {
99
- $booking_date = (new DateTime($booking->date, wp_timezone()))->format('U');
100
- if ( in_array($booking->post_status, ['pending', 'payment_pending', 'payment_failed', 'confirmed'] ) and time() < $booking_date ) {
101
  $bookings[] = array(
102
- 'ID' => $booking->ID,
103
- 'email' => $booking->email,
104
- 'datetime' => $booking->format_date( $booking->date ),
105
- 'party' => $booking->party,
106
- 'status' => $booking->post_status,
107
- 'status_lbl' => $booking_status_lbls[$booking->post_status]['label']
108
  );
109
  }
110
  }
@@ -136,8 +121,6 @@ if ( !class_exists( 'rtbAJAX' ) ) {
136
  public function cancel_reservation( $ajax = true ) {
137
  global $rtb_controller;
138
 
139
- $cancelled_redirect = $rtb_controller->settings->get_setting( 'cancelled-redirect-page' );
140
-
141
  $booking_id = isset($_REQUEST['booking_id']) ? absint( $_REQUEST['booking_id'] ) : '';
142
  $booking_email = isset($_REQUEST['booking_email']) ? sanitize_email( $_REQUEST['booking_email'] ) : '';
143
 
@@ -172,44 +155,27 @@ if ( !class_exists( 'rtbAJAX' ) ) {
172
 
173
  if ( $ajax ) {
174
  if ( $success ) {
175
-
176
- $response = array( 'booking_id' => $booking_id );
177
-
178
- if( '' != $cancelled_redirect ) {
179
- $response['cancelled_redirect'] = $cancelled_redirect;
180
- }
181
-
182
- wp_send_json_success( $response );
183
- }
184
- else {
185
- wp_send_json_error(
186
  array(
187
- 'error' => 'unknown',
188
- 'msg' => __( 'Unkown error. Please try again', 'restaurant-reservations' ),
189
  )
190
  );
191
  }
192
  }
193
- else {
194
- $redirect_url = '';
 
195
 
196
- if( '' != $cancelled_redirect && $success ) {
197
- $redirect_url = $cancelled_redirect;
198
- }
199
- else {
200
- $booking_page_id = $rtb_controller->settings->get_setting( 'booking-page' );
201
- $booking_page_url = get_permalink( $booking_page_id );
202
-
203
- $redirect_url = add_query_arg(
204
- array(
205
- 'bookingCancelled' => $success ? 'success' : 'fail'
206
- ),
207
- $booking_page_url
208
- );
209
- }
210
 
211
- header( 'location:' . $redirect_url );
212
  }
 
213
  }
214
 
215
  /**
@@ -219,217 +185,142 @@ if ( !class_exists( 'rtbAJAX' ) ) {
219
  public function get_time_slots() {
220
  global $rtb_controller;
221
 
222
- $max_reservations_enabled = $rtb_controller->settings->get_setting( 'rtb-enable-max-tables' );
 
 
 
223
 
224
- // proessing request for this date
 
 
225
  $this->year = sanitize_text_field( $_POST['year'] );
226
  $this->month = sanitize_text_field( $_POST['month'] );
227
  $this->day = sanitize_text_field( $_POST['day'] );
228
-
229
- $finalize_response = function ( $open_close_pair_list = []) {
230
-
231
- $valid_times = [];
232
-
233
- if( ! empty( $open_close_pair_list ) ) {
234
- foreach ($open_close_pair_list as $pair) {
235
- $valid_times[] = [
236
- 'from' => $this->format_pickadate_time( $pair['from'] ),
237
- 'to' => $this->format_pickadate_time( $pair['to'] ),
238
- 'inverted' => true
239
- ];
240
- }
241
- }
242
-
243
- echo json_encode( $valid_times );
244
- die();
245
- };
246
-
247
  // Get opening/closing times for this particular day
248
  $hours = $this->get_opening_hours();
249
 
250
- // If the restaurant is closed that day
251
- // If Enabel Max Reservation not set
252
- if ( ! $hours || ! $max_reservations_enabled ) {
253
- $finalize_response( $hours );
254
- }
255
-
256
- $interval = $rtb_controller->settings->get_setting( 'time-interval' ) * 60;
257
-
258
- $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
259
- $dining_block = (int) substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
260
- $dining_block_seconds = $dining_block * 60;
261
-
262
- $min_party_size = (int) $rtb_controller->settings->get_setting( 'party-size-min' );
263
-
264
- $max_reservations_setting = $rtb_controller->settings->get_setting( 'rtb-max-tables-count' );
265
- $max_reservations = (int) substr( $max_reservations_setting, 0, strpos( $max_reservations_setting, '_' ) );
266
-
267
- $max_people_setting = $rtb_controller->settings->get_setting( 'rtb-max-people-count' );
268
- $max_people = (int) substr( $max_people_setting, 0, strpos( $max_people_setting, '_' ) );
269
-
270
- $all_possible_slots = [];
271
- foreach ( $hours as $pair ) {
272
- $all_possible_slots[] = $pair['from'];
273
- $next = $pair['from'] + $interval;
274
- while ( $next <= $pair['to'] ) {
275
- $all_possible_slots[] = $next;
276
- $next += $interval;
277
- }
278
- }
279
-
280
- // Get all current bookings sorted by date
281
  $args = array(
282
  'posts_per_page' => -1,
283
- 'date_range' => 'dates',
284
- 'start_date' => $this->year . '-' . $this->month . '-' . $this->day,
285
- 'end_date' => $this->year . '-' . $this->month . '-' . $this->day,
286
- 'post_status' => ['pending', 'payment_pending', 'confirmed', 'arrived']
287
  );
288
-
 
289
  $query = new rtbQuery( $args );
290
  $query->prepare_args();
 
 
291
  $bookings = $query->get_bookings();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
 
293
- // This array holds bookings for all slots by expanding the booking by
294
- // dining block length to help finding the overlapped bookings for time-slots
295
- $all_bookings_by_slots = [];
296
- foreach ( $bookings as $key => $booking ) {
297
- // Convert booking date to seconds from UNIX
298
- $booking_time = strtotime($booking->date);
299
- if( ! array_key_exists( $booking_time, $all_bookings_by_slots ) ) {
300
- $all_bookings_by_slots[$booking_time] = [
301
- 'total_bookings' => 0,
302
- 'total_guest' => 0,
303
- 'overlapped' => false
304
- ];
305
- }
306
- $all_bookings_by_slots[$booking_time]['total_bookings']++;
307
- $all_bookings_by_slots[$booking_time]['total_guest'] += $booking->party;
308
-
309
- /**
310
- * Expanding bookings
311
- * Example: If I have someone booked at 1pm who will be in the restaurant for 120 minutes,
312
- * that means they will be in the restaurant until 3pm. There is another booking at 2pm.
313
- * That means, from 2pm to 3pm, there are already two separate reservations in the restaurant.
314
- */
315
- $end = $booking_time + $dining_block_seconds;
316
- $next = $booking_time + $interval;
317
- while($next < $end) {
318
- if( ! array_key_exists( $next, $all_bookings_by_slots ) ) {
319
- $all_bookings_by_slots[$next] = [
320
- 'total_bookings' => 0,
321
- 'total_guest' => 0,
322
- 'overlapped' => false
323
- ];
324
  }
325
- $all_bookings_by_slots[$next]['overlapped'] = true;
326
- $all_bookings_by_slots[$next]['total_bookings']++;
327
- $all_bookings_by_slots[$next]['total_guest'] += $booking->party;
328
- $next += $interval;
 
 
329
  }
330
- }
 
 
 
 
 
 
 
 
 
331
 
332
- $all_blocked_slots = [];
 
 
333
 
334
- // Go through all bookings and figure out when we're at or above the
335
- // max reservation or max people and mark that slot as blocked
336
- if ( isset( $max_reservations ) and $max_reservations > 0 ) {
337
- foreach ( $all_bookings_by_slots as $slot => $data ) {
338
- if( $max_reservations <= $data['total_bookings'] ) {
339
- $all_blocked_slots[] = $slot;
340
  }
 
 
 
 
 
 
341
  }
342
  }
343
- else if ( isset( $max_people ) and $max_people > 0 ) {
344
- /**
345
- * min_party_size = 10, max_people = 100, 6 bookings of total 91 guests
346
- * Now, if anybody wants to book for at least 10 people, it is not possible
347
- * because the total will surpass the max_epopel (100)
348
- * thus reducing min_party_size from max_people
349
- *
350
- * $max_people can be zero when min_party_size is same as max_people
351
- */
352
- $max_people = $max_people - $min_party_size;
353
-
354
- foreach ( $all_bookings_by_slots as $slot => $data ) {
355
- if( $max_people < $data['total_guest'] ) {
356
- $all_blocked_slots[] = $slot;
 
 
 
 
 
 
 
357
  }
358
  }
359
- }
360
-
361
- // Mark slots unavailable, due to dinning block length
362
- $additional_blocked_slots = [];
363
- foreach ($all_blocked_slots as $slot) {
364
- // blocking before this slot
365
- $begin = $slot - $dining_block_seconds;
366
- /**
367
- * interval 30 minutes, dinning_length 120 minutes, slot 10:00am
368
- * additional blockings before shall be 8:30am,9:00am and 9:30am
369
- * thus skipping 8:00am which is valid
370
- *
371
- * @var unix timestamp
372
- */
373
- $next = $begin + $interval;
374
- while($next < $slot) {
375
- $additional_blocked_slots[] = $next;
376
- $next += $interval;
377
- }
378
-
379
- // block after this slot only when this slot is not overlapped
380
- // Overlapped slots should block only backwards, but not afterward
381
- if( $all_bookings_by_slots[$slot]['overlapped'] ) {
382
- continue;
383
- }
384
-
385
- // blocking after this slot
386
- $end = $slot + $dining_block_seconds;
387
- /**
388
- * interval 30 minutes, dinning_length 120 minutes, slot 10:00am
389
- * additional blockings after shall be 10:30am,11:00am and 1130am
390
- * thus skipping 12:00pm which is valid
391
- *
392
- * @var unix timestamp
393
- */
394
- $next = $slot + $interval;
395
- while($next < $end) {
396
- $additional_blocked_slots[] = $next;
397
- $next += $interval;
398
- }
399
- }
400
-
401
- $all_blocked_slots = array_unique(
402
- array_merge( $all_blocked_slots, $additional_blocked_slots ),
403
- SORT_NUMERIC
404
- );
405
-
406
- sort( $all_blocked_slots, SORT_NUMERIC );
407
-
408
- // remove blocked slots from available slots
409
- $available_slots = array_diff( $all_possible_slots, $all_blocked_slots );
410
- sort( $available_slots, SORT_NUMERIC );
411
-
412
- // consolidating timeslots to timeframes
413
- $timeframe = [];
414
- $available_slots_count = count( $available_slots );
415
- if( 1 < $available_slots_count ) {
416
-
417
- $current_pair = [ 'from' => $available_slots[ 0 ] ];
418
-
419
- for ( $i = 1; $i < $available_slots_count; $i++) {
420
- if( $available_slots[ $i ] - $available_slots[ $i - 1 ] !== $interval ) {
421
- $current_pair[ 'to' ] = $available_slots[ $i - 1 ];
422
- $timeframe[] = $current_pair;
423
-
424
- $current_pair = [ 'from' => $available_slots[ $i ] ];
425
  }
426
  }
427
-
428
- $current_pair[ 'to' ] = $available_slots[ $i - 1 ];
429
- $timeframe[] = $current_pair;
430
  }
431
-
432
- $finalize_response( $timeframe );
 
 
433
  }
434
 
435
  public function get_opening_hours() {
@@ -470,7 +361,11 @@ if ( !class_exists( 'rtbAJAX' ) ) {
470
  $open_time = $this->get_earliest_time( $open_time );
471
 
472
  if ( $open_time <= $close_time ) {
473
- $valid_times[] = ['from' => $open_time, 'to' => $close_time];
 
 
 
 
474
  }
475
  }
476
  }
@@ -486,45 +381,39 @@ if ( !class_exists( 'rtbAJAX' ) ) {
486
  // Get any rules which apply to this weekday
487
  if ( $schedule_open != 'undefined' ) {
488
 
489
- $day_of_week = strtolower(
490
- date( 'l', strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' 1:00:00' ) )
491
- );
 
 
 
 
492
 
493
- foreach ( $schedule_open as $opening )
494
- {
495
- if ( $opening['weekdays'] !== 'undefined' )
496
- {
497
- foreach ( $opening['weekdays'] as $weekday => $value )
498
- {
499
- if ( $weekday == $day_of_week )
500
- {
501
  // Closed all day
502
- if ( $opening['time'] == 'undefined' )
503
- {
504
  return false;
505
  }
506
 
507
- if ( $opening['time']['start'] !== 'undefined' )
508
- {
509
  $open_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' ' . $opening['time']['start'] );
510
- }
511
- else {
512
  $open_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day );
513
  }
514
 
515
  if ( $opening['time']['end'] !== 'undefined' ) {
516
  $close_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' ' . $opening['time']['end'] );
517
- }
518
- else {
519
- // End of the day
520
- $close_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' 23:59:59' );
521
  }
522
 
523
  $open_time = $this->get_earliest_time( $open_time );
524
 
525
- if ( $open_time <= $close_time )
526
- {
527
- $valid_times[] = ['from' => $open_time, 'to' => $close_time];
 
 
 
528
  }
529
  }
530
  }
@@ -549,30 +438,20 @@ if ( !class_exists( 'rtbAJAX' ) ) {
549
  }
550
 
551
  $late_bookings = ( is_admin() && current_user_can( 'manage_bookings' ) ) ? '' : $rtb_controller->settings->get_setting( 'late-bookings' );
552
-
553
- $interval = $rtb_controller->settings->get_setting( 'time-interval' ) * 60;
554
 
555
  $timezone = wp_timezone();
556
  $offset = $timezone->getOffset( new DateTime );
557
 
558
- // adjust open time with respect to the current time of the day for upcoming timeslots
559
- $current_time = time() + $offset;
560
- if( $current_time > $open_time ) {
561
- while( $current_time > $open_time ) {
562
- $open_time += $interval;
563
- }
564
- }
565
 
566
- // adjust the open time for the Late Bookings option
567
- if ( is_numeric($late_bookings) && $late_bookings % 1 === 0 ) {
568
- $time_calc = time() + $offset + $late_bookings * 60;
569
- while ($time_calc > $open_time) {
570
- $open_time = $open_time + $interval;
571
  }
572
  }
573
 
574
  return $open_time;
575
- }
576
 
577
  /**
578
  * Get number of seats remaining avilable to be booked
@@ -609,6 +488,7 @@ if ( !class_exists( 'rtbAJAX' ) ) {
609
  'end_date' => $this->year . '-' . $this->month . '-' . $this->day
610
  );
611
 
 
612
  $query = new rtbQuery( $args );
613
  $query->prepare_args();
614
 
@@ -698,7 +578,7 @@ if ( !class_exists( 'rtbAJAX' ) ) {
698
  if ( $current_booking->table ) { $valid_tables = array_merge( $valid_tables, $current_booking->table ); }
699
  }
700
 
701
- if ( isset( $this->party ) ) {
702
 
703
  $possible_combinations = array();
704
  foreach ( $valid_tables as $valid_table ) {
@@ -713,9 +593,7 @@ if ( !class_exists( 'rtbAJAX' ) ) {
713
 
714
  $combination = $this->get_combinations_chain( $tables, $valid_tables, $valid_table, $tables[ $valid_table ]->max_people, $this->party );
715
 
716
- if ( $combination ) {
717
- $possible_combinations[] = $combination;
718
- }
719
  }
720
 
721
  $return_tables = $this->format_tables( $possible_combinations );
@@ -738,44 +616,39 @@ if ( !class_exists( 'rtbAJAX' ) ) {
738
  * Recursively go through table combinations to find one that has enough seats
739
  * @since 2.1.7
740
  */
741
- public function get_combinations_chain(
742
- $tables,
743
- $valid_tables,
744
- $current_table,
745
- $current_size,
746
- $needed_size
747
- ) {
748
- $table_chain[] = $current_table;
749
-
750
- // No combination specified
751
- if ( ! $tables[ $current_table ]->combinations ) {
752
- return false;
753
- }
754
 
755
  $possible_tables = explode( ',', $tables[ $current_table ]->combinations );
756
 
757
  foreach ( $possible_tables as $possible_table ) {
758
 
 
 
 
759
  // If the table has already been booked, continue
760
- if ( !in_array( $possible_table, $valid_tables) ) {
761
- continue;
762
- }
763
 
764
  // If the table can hold the group on its own, continue
765
- if ( $tables[ $possible_table ]->max_people >= $needed_size ) {
766
- continue;
767
- }
768
 
769
  $current_size += $tables[ $possible_table ]->max_people;
770
- $table_chain[] = $possible_table;
771
 
772
- if ( $current_size >= $needed_size ) {
773
- return implode(',', $table_chain);
 
 
 
 
774
  }
775
- }
776
 
777
  //no viable combination found
778
- return false;
779
  }
780
 
781
  /**
@@ -805,188 +678,17 @@ if ( !class_exists( 'rtbAJAX' ) ) {
805
  $table_values['numbers'] .= ( strlen( $table_values['numbers'] ) ? ', ' : '' ) . $table->number;
806
  $table_values['min_people'] += $table->min_people;
807
  $table_values['max_people'] += $table->max_people;
808
-
809
- if ( ! isset( $section_name ) ) { $section_name = $this->get_section_name( $table->section ); }
810
  }
811
  }
812
 
813
- $formatted_tables[ $table_values['numbers'] ] = $table_values['numbers'] . ' - ' . $section_name . ' (min. ' . $table_values['min_people'] . '/max. ' . $table_values['max_people'] . ')';
814
-
815
- unset( $section_name );
816
  }
817
 
818
  return $formatted_tables;
819
  }
820
 
821
- public function get_section_name( $section_id ) {
822
- global $rtb_controller;
823
-
824
- $sections = json_decode( html_entity_decode( $rtb_controller->settings->get_setting( 'rtb-table-sections' ) ) );
825
- $sections = is_array( $sections ) ? $sections : array();
826
-
827
- foreach ( $sections as $section ) {
828
-
829
- if ( $section->section_id == $section_id ) { return $section->name; }
830
- }
831
-
832
- return false;
833
- }
834
-
835
  public function format_pickadate_time( $time ) {
836
  return array( date( 'G', $time ), date( 'i', $time ) );
837
  }
838
-
839
- /**
840
- * Create Stripe payment intent for reservation deposits
841
- * @since 2.2.8
842
- */
843
- function create_stripe_pmtIntnt()
844
- {
845
- global $rtb_controller;
846
-
847
- $response = function ($success, $msg, $data = []) {
848
- echo json_encode(
849
- array_merge(
850
- [
851
- 'success' => $success,
852
- 'message' => $msg
853
- ],
854
- $data
855
- )
856
- );
857
-
858
- exit(0);
859
- };
860
-
861
- if( ! array_key_exists('booking_id', $_POST) ) {
862
- $response(false, 'Invalid booking.');
863
- }
864
-
865
- require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
866
- $booking = new rtbBooking();
867
- $booking->load_post( $_POST['booking_id'] );
868
-
869
- $payment_amount = "JPY" != $rtb_controller->settings->get_setting( 'rtb-currency' )
870
- ? $booking->calculate_deposit() * 100
871
- : $booking->calculate_deposit();
872
-
873
- // load the stripe libraries
874
- require_once(RTB_PLUGIN_DIR . '/lib/stripe/init.php');
875
-
876
- $stripe_secret = 'test' == $rtb_controller->settings->get_setting( 'rtb-stripe-mode' )
877
- ? $rtb_controller->settings->get_setting( 'rtb-stripe-test-secret' )
878
- : $rtb_controller->settings->get_setting( 'rtb-stripe-live-secret' );
879
-
880
- try {
881
- \Stripe\Stripe::setApiKey( $stripe_secret );
882
-
883
- // $customer = \Stripe\Customer::create([
884
- // 'email' => $booking->email,
885
- // 'name' => $booking->name
886
- // ]);
887
-
888
- // $booking->stripe_customer_id = $customer->id;
889
- // $booking->insert_post_data();
890
-
891
- $metadata = array_filter([
892
- 'Booking ID' => $booking->ID,
893
- 'Email' => $booking->email,
894
- 'Name' => $booking->name,
895
- 'Date' => $booking->date,
896
- 'Party' => $booking->party
897
- ]);
898
-
899
- if( is_array( $booking->table ) && ! empty( $booking->table ) ) {
900
- $metadata['Table'] = implode('+', $booking->table);
901
- }
902
-
903
- $desc = implode(', ', $metadata );
904
- $stmt_desc = substr( implode( ';', $metadata ), 0, 22 );
905
-
906
- $intent = \Stripe\PaymentIntent::create([
907
- 'amount' => $payment_amount,
908
- 'currency' => $rtb_controller->settings->get_setting( 'rtb-currency' ),
909
- 'payment_method_types' => ['card'],
910
- 'receipt_email' => $booking->email,
911
- 'description' => apply_filters( 'rtb-stripe-payment-desc', $desc ),
912
- 'statement_descriptor' => apply_filters( 'rtb-stripe-payment-stmnt-desc', $stmt_desc ),
913
- 'metadata' => $metadata
914
- ]);
915
-
916
- $response(
917
- true,
918
- 'Payment Intent generated succsssfully',
919
- [
920
- 'clientSecret' => $intent->client_secret,
921
- 'name' => $booking->name,
922
- 'email' => $booking->email,
923
- ]
924
- );
925
- }
926
- catch(Exception $ex) {
927
- $response( false, 'Please try again.', ['error' => $ex->getError()] );
928
- }
929
- }
930
-
931
- /**
932
- * Stripe SCA payment success for reservation deposits
933
- * @since 2.2.8
934
- */
935
- public function stripe_sca_succeed()
936
- {
937
- global $rtb_controller;
938
-
939
- $response = function ($success = false, $urlParams = '') {
940
- echo json_encode([
941
- 'success' => $success,
942
- 'urlParams' => $urlParams
943
- ]);
944
-
945
- exit(0);
946
- };
947
-
948
- $success = false;
949
- $urlParams = '';
950
-
951
- if( ! array_key_exists('booking_id', $_POST) ) {
952
- $response();
953
- }
954
-
955
- require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
956
- $booking = new rtbBooking();
957
- $booking->load_post( $_POST['booking_id'] );
958
-
959
- if( array_key_exists('success', $_POST) && 'false' != $_POST['success'] ) {
960
-
961
- $booking->deposit = "JPY" != $rtb_controller->settings->get_setting( 'rtb-currency' )
962
- ? $_POST['payment_amount'] / 100
963
- : $_POST['payment_amount'];
964
-
965
- $booking->receipt_id = $_POST['payment_id'];
966
- $booking->determine_status( true );
967
-
968
- do_action( 'rtb_booking_paid', $booking );
969
-
970
- // urlParams on successful payment
971
- $success = true;
972
- $urlParams = add_query_arg(
973
- array(
974
- 'payment' => 'paid',
975
- 'booking_id' => $booking->ID
976
- ),
977
- $booking_page
978
- );
979
-
980
- }
981
- else {
982
- $booking->post_status = 'payment_failed';
983
- $booking->payment_failure_message = ! empty( $_POST['message'] )
984
- ? $_POST['message'] : '';
985
- }
986
-
987
- $booking->insert_post_data();
988
-
989
- $response($success, $urlParams);
990
- }
991
  }
992
  }
56
  add_action( 'wp_ajax_rtb_get_available_tables', array( $this, 'get_available_tables' ) );
57
  add_action( 'wp_ajax_nopriv_rtb_get_available_tables', array( $this, 'get_available_tables' ) );
58
 
59
+ // add_action( 'admin_init', array( $this, 'get_available_tables' ) );
 
 
 
 
60
  }
61
 
62
  /**
64
  * @since 2.1.0
65
  */
66
  public function get_reservations() {
67
+ global $wpdb;
68
 
69
  $email = isset($_POST['booking_email']) ? sanitize_email( $_POST['booking_email'] ) : '';
70
 
77
  );
78
  }
79
 
 
 
80
  require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
81
 
82
  $bookings = array();
83
+ $booking_ids = $wpdb->get_results($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key='rtb' AND meta_value LIKE %s", '%' . sanitize_email( $email ) . '%'));
 
 
 
 
 
 
84
  foreach ( $booking_ids as $booking_id ) {
85
  $booking = new rtbBooking();
86
  if ( $booking->load_post( $booking_id->post_id ) ) {
87
+ if ( ( $booking->post_status == 'pending' or $booking->post_status == 'confirmed' ) and time() < strtotime( $booking->date ) ) {
 
88
  $bookings[] = array(
89
+ 'ID' => $booking->ID,
90
+ 'email' => $booking->email,
91
+ 'datetime' => $booking->format_date( $booking->date ),
92
+ 'party' => $booking->party
 
 
93
  );
94
  }
95
  }
121
  public function cancel_reservation( $ajax = true ) {
122
  global $rtb_controller;
123
 
 
 
124
  $booking_id = isset($_REQUEST['booking_id']) ? absint( $_REQUEST['booking_id'] ) : '';
125
  $booking_email = isset($_REQUEST['booking_email']) ? sanitize_email( $_REQUEST['booking_email'] ) : '';
126
 
155
 
156
  if ( $ajax ) {
157
  if ( $success ) {
158
+ wp_send_json_success(
 
 
 
 
 
 
 
 
 
 
159
  array(
160
+ 'booking_id' => $booking_id
 
161
  )
162
  );
163
  }
164
  }
165
+ elseif ( $success ) {
166
+ $booking_page_id = $rtb_controller->settings->get_setting( 'booking-page' );
167
+ $booking_page_url = get_permalink( $booking_page_id );
168
 
169
+ $cancelled_url = add_query_arg(
170
+ array(
171
+ 'bookingCancelled' => 'success'
172
+ ),
173
+ $booking_page_url
174
+ );
 
 
 
 
 
 
 
 
175
 
176
+ header( 'location:' . $cancelled_url );
177
  }
178
+
179
  }
180
 
181
  /**
185
  public function get_time_slots() {
186
  global $rtb_controller;
187
 
188
+ $min_party_size = $rtb_controller->settings->get_setting( 'party-size-min' );
189
+
190
+ $max_reservations_setting = $rtb_controller->settings->get_setting( 'rtb-max-tables-count' );
191
+ $max_reservations = substr( $max_reservations_setting, 0, strpos( $max_reservations_setting, '_' ) );
192
 
193
+ $max_people_setting = $rtb_controller->settings->get_setting( 'rtb-max-people-count' );
194
+ $max_people = substr( $max_people_setting, 0, strpos( $max_people_setting, '_' ) );
195
+
196
  $this->year = sanitize_text_field( $_POST['year'] );
197
  $this->month = sanitize_text_field( $_POST['month'] );
198
  $this->day = sanitize_text_field( $_POST['day'] );
199
+
200
+ $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
201
+ $dining_block = substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
202
+ $dining_block_seconds = ( $dining_block * 60 - 1 ); // Take 1 second off, to avoid bookings that start or end exactly at the beginning of a booking block
203
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  // Get opening/closing times for this particular day
205
  $hours = $this->get_opening_hours();
206
 
207
+ // var_dump($hours);
208
+
209
+ // If the restaurant is closed that day, return false
210
+ if ( ! $hours ) { echo $hours; die(); }
211
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
212
  $args = array(
213
  'posts_per_page' => -1,
214
+ 'date_range' => 'dates',
215
+ 'start_date' => $this->year . '-' . $this->month . '-' . $this->day,
216
+ 'end_date' => $this->year . '-' . $this->month . '-' . $this->day
 
217
  );
218
+
219
+ require_once( RTB_PLUGIN_DIR . '/includes/Query.class.php' );
220
  $query = new rtbQuery( $args );
221
  $query->prepare_args();
222
+
223
+ // Get all current bookings sorted by date
224
  $bookings = $query->get_bookings();
225
+
226
+ // Go through all current booking times and figure out when we're at or above the max
227
+ $blocked = false;
228
+ $blocked_times = array();
229
+ $current_times = array();
230
+ $party_sizes = array();
231
+ if ($max_reservations != 'undefined' and $max_reservations != 0) {
232
+ foreach ( $bookings as $key => $booking ) {
233
+ // Convert booking date to seconds from UNIX
234
+ $booking_time = strtotime($booking->date);
235
+ $current_times[] = $booking_time;
236
+
237
+ while ( sizeOf( $current_times ) > 0 and reset( $current_times ) < $booking_time - $dining_block_seconds ) {
238
+ //save the time to know when the blocking potentially ends
239
+ $removed_time = reset( $current_times );
240
 
241
+ // remove the expired time
242
+ array_shift( $current_times );
243
+
244
+ // remove the block if we've dropped below the max reservation
245
+ if ( $blocked and sizeOf( $current_times ) < $max_reservations ) {
246
+ $blocked = false;
247
+ $blocked_times[] = $removed_time + $dining_block_seconds;
248
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  }
250
+
251
+ // Check if we're at or above the maximum number of reservations
252
+ if ( ! $blocked and sizeOf( $current_times ) >= $max_reservations ) {
253
+ $blocked = true;
254
+ $blocked_times[] = $booking_time - $dining_block_seconds;
255
+ }
256
  }
257
+ } else if ( $max_people != 'undefined' and $max_people != 0 ) {
258
+ foreach ( $bookings as $key => $booking ) {
259
+ // Convert booking date to seconds from UNIX
260
+ $booking_time = strtotime($booking->date);
261
+ $current_times[] = $booking_time;
262
+ $party_sizes[] = (int) $booking->party;
263
+
264
+ while ( sizeOf( $current_times ) > 0 and reset( $current_times ) < ( $booking_time - $dining_block_seconds ) ) {
265
+ //save the time to know when the blocking potentially ends
266
+ $removed_time = reset( $current_times );
267
 
268
+ // remove the expired time and party size
269
+ array_shift( $current_times );
270
+ array_shift( $party_sizes );
271
 
272
+ // remove the block if we've dropped below the max people count - min party size
273
+ if ( $blocked and array_sum($party_sizes) <= ( $max_people - $min_party_size ) ) {
274
+ $blocked = false;
275
+ $blocked_times[] = $removed_time + $dining_block_seconds;
276
+ }
 
277
  }
278
+
279
+ // Check if we're above the maximum number of people - min party size
280
+ if ( ! $blocked and array_sum($party_sizes) > ( $max_people - $min_party_size ) ) {
281
+ $blocked = true;
282
+ $blocked_times[] = $booking_time - $dining_block_seconds;
283
+ }
284
  }
285
  }
286
+
287
+ if ( $blocked ) { $blocked_times[] = end( $current_times ) + $dining_block_seconds; }
288
+
289
+ $combined_times = array_merge( $blocked_times, $hours );
290
+ sort( $combined_times );
291
+
292
+ //Go through all of times to determine when the restaurant is open and not blocked
293
+ $open = false;
294
+ $blocked = false;
295
+ $valid_times = array();
296
+ foreach ( $combined_times as $time ) {
297
+ if ( in_array( $time, $blocked_times ) ) {
298
+ if ( ! $blocked ) {
299
+ $blocked = true;
300
+ if ( $open ) {
301
+ $valid_times[] = (object) array( 'from' => $this->format_pickadate_time( $open_time ), 'to' => $this->format_pickadate_time( $time ), 'inverted' => true );
302
+ }
303
+ }
304
+ else {
305
+ $blocked = false;
306
+ if ( $open ) { $open_time = $time; }
307
  }
308
  }
309
+ else {
310
+ if ( ! $open ) {
311
+ $open = true;
312
+ if ( ! $blocked ) { $open_time = $time; }
313
+ }
314
+ else {
315
+ $open = false;
316
+ if ( ! $blocked ) { $valid_times[] = (object) array( 'from' => $this->format_pickadate_time( $open_time ), 'to' => $this->format_pickadate_time( $time ), 'inverted' => true ); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
317
  }
318
  }
 
 
 
319
  }
320
+
321
+ echo json_encode( $valid_times );
322
+
323
+ die();
324
  }
325
 
326
  public function get_opening_hours() {
361
  $open_time = $this->get_earliest_time( $open_time );
362
 
363
  if ( $open_time <= $close_time ) {
364
+ $valid_times[] = $open_time;
365
+ $valid_times[] = $close_time;
366
+ }
367
+ else {
368
+ return false;
369
  }
370
  }
371
  }
381
  // Get any rules which apply to this weekday
382
  if ( $schedule_open != 'undefined' ) {
383
 
384
+ $day_of_week = strtolower( date( 'l', strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' 1:00:00' ) ) );
385
+
386
+ foreach ( $schedule_open as $opening ) {
387
+
388
+ if ( $opening['weekdays'] !== 'undefined' ) {
389
+ foreach ( $opening['weekdays'] as $weekday => $value ) {
390
+ if ( $weekday == $day_of_week ) {
391
 
 
 
 
 
 
 
 
 
392
  // Closed all day
393
+ if ( $opening->time == 'undefined' ) {
 
394
  return false;
395
  }
396
 
397
+ if ( $opening['time']['start'] !== 'undefined' ) {
 
398
  $open_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' ' . $opening['time']['start'] );
399
+ } else {
 
400
  $open_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day );
401
  }
402
 
403
  if ( $opening['time']['end'] !== 'undefined' ) {
404
  $close_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' ' . $opening['time']['end'] );
405
+ } else {
406
+ $close_time = strtotime( $this->year . '-' . $this->month . '-' . $this->day . ' 23:59:59' ); // End of the day
 
 
407
  }
408
 
409
  $open_time = $this->get_earliest_time( $open_time );
410
 
411
+ if ( $open_time <= $close_time ) {
412
+ $valid_times[] = $open_time;
413
+ $valid_times[] = $close_time;
414
+ }
415
+ else {
416
+ return false;
417
  }
418
  }
419
  }
438
  }
439
 
440
  $late_bookings = ( is_admin() && current_user_can( 'manage_bookings' ) ) ? '' : $rtb_controller->settings->get_setting( 'late-bookings' );
 
 
441
 
442
  $timezone = wp_timezone();
443
  $offset = $timezone->getOffset( new DateTime );
444
 
445
+ $open_time = time() + $offset > $open_time ? time() + $offset : $open_time;
 
 
 
 
 
 
446
 
447
+ if ( $late_bookings === 'number' && $late_bookings % 1 === 0 ) {
448
+ if ( time() + $late_bookings * 60 > $open_time ) {
449
+ $open_time = time() + $late_bookings;
 
 
450
  }
451
  }
452
 
453
  return $open_time;
454
+ }
455
 
456
  /**
457
  * Get number of seats remaining avilable to be booked
488
  'end_date' => $this->year . '-' . $this->month . '-' . $this->day
489
  );
490
 
491
+ require_once( RTB_PLUGIN_DIR . '/includes/Query.class.php' );
492
  $query = new rtbQuery( $args );
493
  $query->prepare_args();
494
 
578
  if ( $current_booking->table ) { $valid_tables = array_merge( $valid_tables, $current_booking->table ); }
579
  }
580
 
581
+ if ( isset( $this->party ) ) {
582
 
583
  $possible_combinations = array();
584
  foreach ( $valid_tables as $valid_table ) {
593
 
594
  $combination = $this->get_combinations_chain( $tables, $valid_tables, $valid_table, $tables[ $valid_table ]->max_people, $this->party );
595
 
596
+ if ( $combination ) { $possible_combinations[] = $combination; }
 
 
597
  }
598
 
599
  $return_tables = $this->format_tables( $possible_combinations );
616
  * Recursively go through table combinations to find one that has enough seats
617
  * @since 2.1.7
618
  */
619
+ public function get_combinations_chain( $tables, $valid_tables, $table_chain, $current_size, $needed_size ) {
620
+
621
+ $current_table = substr( $table_chain, strrpos($table_chain, ',') ? strrpos($table_chain, ',') + 1 : 0 );
622
+
623
+ if ( ! $tables[ $current_table ]->combinations ) { return false; }
 
 
 
 
 
 
 
 
624
 
625
  $possible_tables = explode( ',', $tables[ $current_table ]->combinations );
626
 
627
  foreach ( $possible_tables as $possible_table ) {
628
 
629
+ // Only search larger table numbers to avoid going over the same combinations multiple times
630
+ if ( $possible_table < $current_table ) { continue; }
631
+
632
  // If the table has already been booked, continue
633
+ if ( !in_array( $possible_table, $valid_tables) ) { continue; }
 
 
634
 
635
  // If the table can hold the group on its own, continue
636
+ if ( $tables[ $possible_table ]->max_people >= $needed_size ) { continue; }
 
 
637
 
638
  $current_size += $tables[ $possible_table ]->max_people;
639
+ $table_chain .= ',' . $possible_table;
640
 
641
+ if ( $current_size >= $needed_size ) { return $table_chain; }
642
+ else {
643
+ // Keep going to see if we can add more tables to make it work
644
+ $table_chain = $this->get_combinations_chain( $tables, $valid_tables, $table_chain, $current_size, $needed_size );
645
+
646
+ if ( $table_chain ) { return $table_chain; }
647
  }
648
+ }
649
 
650
  //no viable combination found
651
+ return false;
652
  }
653
 
654
  /**
678
  $table_values['numbers'] .= ( strlen( $table_values['numbers'] ) ? ', ' : '' ) . $table->number;
679
  $table_values['min_people'] += $table->min_people;
680
  $table_values['max_people'] += $table->max_people;
 
 
681
  }
682
  }
683
 
684
+ $formatted_tables[ $table_values['numbers'] ] = $table_values['numbers'] . ' - (min. ' . $table_values['min_people'] . '/max. ' . $table_values['max_people'] . ')';
 
 
685
  }
686
 
687
  return $formatted_tables;
688
  }
689
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
690
  public function format_pickadate_time( $time ) {
691
  return array( date( 'G', $time ), date( 'i', $time ) );
692
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
693
  }
694
  }
includes/Booking.class.php CHANGED
@@ -86,7 +86,6 @@ class rtbBooking {
86
  'table' => array(),
87
  'payment_failure_message' => '',
88
  'receipt_id' => '',
89
- 'stripe_customer_id' => '',
90
  'reminder_sent' => false,
91
  'late_arrival_sent' => false,
92
  );
@@ -110,7 +109,6 @@ class rtbBooking {
110
  $this->table = $meta['table'];
111
  $this->payment_failure_message = $meta['payment_failure_message'];
112
  $this->receipt_id = $meta['receipt_id'];
113
- $this->stripe_customer_id = $meta['stripe_customer_id'];
114
  $this->late_arrival_sent = $meta['late_arrival_sent'];
115
  $this->reminder_sent = $meta['reminder_sent'];
116
  }
@@ -172,7 +170,7 @@ class rtbBooking {
172
  * Validates the data, adds it to the database and executes notifications
173
  * @since 0.0.1
174
  */
175
- public function insert_booking($by_admin = false) {
176
 
177
  // Check if this request has already been processed. If multiple forms
178
  // exist on the same page, this prevents a single submission from
@@ -189,7 +187,7 @@ class rtbBooking {
189
  $action = 'update';
190
  }
191
 
192
- $this->validate_submission($action, $by_admin);
193
  if ( $this->is_valid_submission() === false ) {
194
  return false;
195
  }
@@ -209,7 +207,7 @@ class rtbBooking {
209
  * Validate submission data. Expects to find data in $_POST.
210
  * @since 0.0.1
211
  */
212
- public function validate_submission($action = null, $by_admin = false) {
213
 
214
  global $rtb_controller;
215
 
@@ -522,27 +520,13 @@ class rtbBooking {
522
 
523
  $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secret_key) . '&response=' . urlencode($captcha);
524
  $json_response = file_get_contents( $url );
525
- $response = json_decode( $json_response );
526
-
527
- $reCaptcha_error = false;
528
- if(json_last_error() != JSON_ERROR_NONE) {
529
- $response = new stdClass();
530
- $response->success = false;
531
- $reCaptcha_error = true;
532
- if(defined('WP_DEBUG') && WP_DEBUG) {
533
- error_log('RTB reCAPTCHA error. Raw respose: '.print_r([$json_response], true));
534
- }
535
- }
536
 
537
  if ( ! $response->success ) {
538
- $message = __( 'Please fill out the reCAPTCHA box again and re-submit.', 'restaurant-reservations' );
539
- if($reCaptcha_error) {
540
- $message .= __( ' If you encounter reCAPTCHA error multiple times, please contact us.', 'restaurant-reservations' );
541
- }
542
  $this->validation_errors[] = array(
543
  'field' => 'recaptcha',
544
  'error_msg' => 'Invalid reCAPTCHA code',
545
- 'message' => $message,
546
  );
547
  }
548
  }
@@ -583,41 +567,14 @@ class rtbBooking {
583
  $this->validation_errors[] = array(
584
  'field' => 'date',
585
  'post_variable' => $ip,
586
- 'message' => __( 'Your booking has been rejected. Please call us if you would like to make a booking.', 'restaurant-reservations' ),
587
  );
588
- } elseif ( empty( $this->ip ) and ! $rtb_controller->settings->get_setting( 'disable-ip-capture' ) ) {
589
  $this->ip = sanitize_text_field( $ip );
590
  }
591
- } elseif ( empty( $this->ip ) and ! $rtb_controller->settings->get_setting( 'disable-ip-capture' ) ) {
592
  $this->ip = sanitize_text_field( $_SERVER['REMOTE_ADDR'] );
593
  }
594
-
595
- // Check to make sure that the maximum number of reservations has not already been made
596
- if ( ! $this->is_under_max_reservations() ){
597
- $this->validation_errors[] = array(
598
- 'field' => 'time',
599
- 'error_msg' => 'maximum reservations exceeded',
600
- 'message' => __( 'The maximum number of reservations for that timeslot has been reached. Please select a different timeslot.', 'restaurant-reservations' ),
601
- );
602
- }
603
-
604
- // Check to make sure that the maximum number of seats has not already been made
605
- if ( ! $this->is_under_max_seats() ){
606
- $this->validation_errors[] = array(
607
- 'field' => 'time',
608
- 'error_msg' => 'maximum seats exceeded',
609
- 'message' => __( 'With your party, the maximum number of seats for that timeslot would be exceeded. Please select a different timeslot or reduce your party size.', 'restaurant-reservations' ),
610
- );
611
- }
612
-
613
- // Check if there is a booking already made with the exact same information, to prevent double bookings on refresh
614
- if ( (!$by_admin || $by_admin && $action !== 'update') && $this->is_duplicate_booking() ) {
615
- $this->validation_errors[] = array(
616
- 'field' => 'date',
617
- 'error_msg' => 'duplicate booking',
618
- 'message' => __( 'Your booking and personal information exactly matches another booking. If this was not caused by refreshing the page, please call us to make a booking.', 'restaurant-reservations' ),
619
- );
620
- }
621
 
622
  do_action( 'rtb_validate_booking_submission', $this );
623
 
@@ -742,206 +699,10 @@ class rtbBooking {
742
  if ( ! $this->table or ! is_array( $this->table ) ) { return false; }
743
 
744
  $valid_tables = rtb_get_valid_tables( $this->date );
745
-
746
- if ( isset( $this->ID ) ) {
747
-
748
- $post_meta = get_post_meta( $this->ID, 'rtb', true );
749
-
750
- if ( isset( $post_meta['table'] ) and is_array( $post_meta['table'] ) ) { $valid_tables = array_merge( $valid_tables, $post_meta['table'] ); }
751
- }
752
 
753
  return $this->table == array_intersect( $this->table, $valid_tables );
754
  }
755
 
756
- /**
757
- * Check if this booking would put the restaurant over the maximum, if set
758
- *
759
- * @return bool
760
- * @since 2.1.20
761
- */
762
- public function is_under_max_reservations() {
763
- global $rtb_controller;
764
-
765
- $max_reservations_enabled = $rtb_controller->settings->get_setting( 'rtb-enable-max-tables' );
766
-
767
- if ( ! $max_reservations_enabled ) { return true; }
768
-
769
- $max_reservations_setting = $rtb_controller->settings->get_setting( 'rtb-max-tables-count' );
770
- $max_reservations = substr( $max_reservations_setting, 0, strpos( $max_reservations_setting, '_' ) );
771
-
772
- if ($max_reservations == 'undefined' or ! $max_reservations ) { return true; }
773
-
774
- $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
775
- $dining_block = substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
776
- $dining_block_seconds = ( $dining_block * 60 - 1 ); // Take 1 second off, to avoid bookings that start or end exactly at the beginning of a booking block
777
-
778
- $after_time = strtotime($this->date) - $dining_block_seconds - (3600 * get_option( 'gmt_offset' ) );
779
- $before_time = strtotime($this->date) + $dining_block_seconds - (3600 * get_option( 'gmt_offset' ) );
780
-
781
- $args = array(
782
- 'posts_per_page' => -1,
783
- 'post_status' => ['pending', 'payment_pending', 'confirmed', 'arrived'],
784
- 'date_query' => array(
785
- 'before' => date( 'c', $before_time ),
786
- 'after' => date( 'c', $after_time )
787
- )
788
- );
789
-
790
- require_once( RTB_PLUGIN_DIR . '/includes/Query.class.php' );
791
- $query = new rtbQuery( $args );
792
- $query->prepare_args();
793
-
794
- $times = array();
795
- foreach ( $query->get_bookings() as $booking ) {
796
-
797
- if ( isset( $this->ID ) and $booking->ID == $this->ID ) { continue; }
798
-
799
- $times[] = strtotime( $booking->date );
800
- }
801
-
802
- sort( $times );
803
-
804
- $accept_reservation = true;
805
- $current_times = array();
806
- foreach ( $times as $time ) {
807
-
808
- $current_times[] = $time;
809
-
810
- if ( reset( $current_times ) < ($time - $dining_block_seconds) ) { array_shift( $current_times ); }
811
-
812
- // Check if we go above the max confirmation number
813
- if ( sizeOf( $current_times ) + 1 > $max_reservations ) { $accept_reservation = false; break; }
814
- }
815
-
816
- return $accept_reservation;
817
- }
818
-
819
- /**
820
- * Check if this booking would put the restaurant over the maximum number of people, if set
821
- *
822
- * @return bool
823
- * @since 2.1.20
824
- */
825
- public function is_under_max_seats() {
826
- global $rtb_controller;
827
-
828
- $max_reservations_enabled = $rtb_controller->settings->get_setting( 'rtb-enable-max-tables' );
829
-
830
- if ( ! $max_reservations_enabled ) { return true; }
831
-
832
- $max_seats_setting = $rtb_controller->settings->get_setting( 'rtb-max-people-count' );
833
- $max_seats = (int) substr( $max_seats_setting, 0, strpos( $max_seats_setting, '_' ) );
834
-
835
- if ( $max_seats == 'undefined' or ! $max_seats ) { return true; }
836
- if ( $this->party > $max_seats ) { return false; }
837
-
838
- $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
839
- $dining_block = substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
840
- $dining_block_seconds = ( $dining_block * 60 - 1 ); // Take 1 second off, to avoid bookings that start or end exactly at the beginning of a booking block
841
-
842
- $after_time = strtotime($this->date) - $dining_block_seconds - (3600 * get_option( 'gmt_offset' ) );
843
- $before_time = strtotime($this->date) + $dining_block_seconds - (3600 * get_option( 'gmt_offset' ) );
844
-
845
- $args = array(
846
- 'posts_per_page' => -1,
847
- 'post_status' => ['pending', 'payment_pending', 'confirmed', 'arrived'],
848
- 'date_query' => array(
849
- 'before' => date( 'c', $before_time ),
850
- 'after' => date( 'c', $after_time )
851
- )
852
- );
853
-
854
- require_once( RTB_PLUGIN_DIR . '/includes/Query.class.php' );
855
- $query = new rtbQuery( $args );
856
-
857
- $times = array();
858
- foreach ( $query->get_bookings() as $booking ) {
859
-
860
- if ( isset( $this->ID ) and $booking->ID == $this->ID ) { continue; }
861
-
862
- $booking_time = strtotime( $booking->date );
863
- if ( isset( $times[$booking_time] ) ) { $times[$booking_time] += $booking->party; }
864
- else { $times[$booking_time] = (int) $booking->party; }
865
- }
866
-
867
- ksort( $times );
868
-
869
- $accept_reservation = true;
870
- $current_seats = array();
871
- foreach ( $times as $time => $seats ) {
872
-
873
- $current_seats[$time] = $seats;
874
-
875
- reset( $current_seats );
876
-
877
- if ( key ( $current_seats ) < $time - $dining_block_seconds ) { array_shift( $current_seats ); }
878
-
879
- // Check if adding the current party puts us above the max confirmation number
880
- if ( array_sum( $current_seats ) + $this->party > $max_seats ) { $accept_reservation = false; break; }
881
- }
882
-
883
- return $accept_reservation;
884
-
885
- }
886
-
887
- /**
888
- * Check if the information in a booking exactly matches another booking
889
- *
890
- * @return bool
891
- * @since 2.1.20
892
- */
893
- public function is_duplicate_booking() {
894
- global $wpdb, $rtb_controller;
895
-
896
- if( 0 < count($this->validation_errors) ) {
897
- /**
898
- * Do not run this check if there is an error already
899
- * There could abe a moment when someminfo could be missing, which is required
900
- * for this qurey to function.
901
- */
902
- return null;
903
- }
904
-
905
- $valid_status = ['confirmed', 'pending'];
906
-
907
- // This is an intermediate status when payment is pending
908
- if ( $rtb_controller->settings->get_setting( 'require-deposit' ) ) {
909
- $valid_status = array_merge($valid_status, ['payment_pending']);
910
- }
911
-
912
- $args = array_merge(
913
- array(
914
- RTB_BOOKING_POST_TYPE,
915
- $this->date,
916
- $this->name
917
- ),
918
- $valid_status
919
- );
920
-
921
- $status_placeholder = implode( ',', array_fill( 0, count( $valid_status ), '%s' ) );
922
-
923
- $sql = "SELECT ID FROM {$wpdb->posts} WHERE post_type=%s AND post_date=%s AND post_title=%s AND post_status IN ({$status_placeholder})";
924
-
925
- if ( isset( $this->ID ) ) {
926
- $sql .= ' AND ID!=%d';
927
- $args[] = $this->ID;
928
- }
929
-
930
- $booking_result = $wpdb->get_row( $wpdb->prepare( $sql, $args ) );
931
-
932
- if ( $booking_result ) {
933
- $meta = get_post_meta( $booking_result->ID, 'rtb', true );
934
- $meta = is_array( $meta ) ? $meta : array();
935
-
936
- if ( $this->party == $meta['party'] and $this->email == $meta['email'] and $this->phone == $meta['phone'] ) {
937
-
938
- return true;
939
- }
940
- }
941
-
942
- return false;
943
- }
944
-
945
  /**
946
  * Check whether the number of reservations occurring at the same time is below the threshold
947
  * where reservations get automatically confirmed
@@ -954,7 +715,7 @@ class rtbBooking {
954
  $max_reservations_setting = $rtb_controller->settings->get_setting( 'auto-confirm-max-reservations' );
955
  $max_reservations = substr( $max_reservations_setting, 0, strpos( $max_reservations_setting, '_' ) );
956
 
957
- if ( $max_reservations == 'undefined' or $max_reservations <= 1 ) { return false; }
958
 
959
  $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
960
  $dining_block = substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
@@ -965,10 +726,9 @@ class rtbBooking {
965
 
966
  $args = array(
967
  'posts_per_page' => -1,
968
- 'post_status' => ['confirmed', 'arrived'],
969
- 'date_query' => array(
970
  'before' => date( 'c', $before_time ),
971
- 'after' => date( 'c', $after_time )
972
  )
973
  );
974
 
@@ -1009,7 +769,7 @@ class rtbBooking {
1009
  $max_seats_setting = $rtb_controller->settings->get_setting( 'auto-confirm-max-seats' );
1010
  $max_seats = substr( $max_seats_setting, 0, strpos( $max_seats_setting, '_' ) );
1011
 
1012
- if ( $max_seats == 'undefined' or $max_seats < 2 or $this->party >= $max_seats ) { return false; }
1013
 
1014
  $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
1015
  $dining_block = substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
@@ -1020,10 +780,9 @@ class rtbBooking {
1020
 
1021
  $args = array(
1022
  'posts_per_page' => -1,
1023
- 'post_status' => ['confirmed', 'arrived'],
1024
- 'date_query' => array(
1025
  'before' => date( 'c', $before_time ),
1026
- 'after' => date( 'c', $after_time )
1027
  )
1028
  );
1029
 
@@ -1049,7 +808,7 @@ class rtbBooking {
1049
  if ( key ( $current_seats ) < $time - $dining_block_seconds ) { array_shift( $current_seats ); }
1050
 
1051
  // Check if adding the current party puts us at or above the max confirmation number
1052
- if ( array_sum( $current_seats ) + $this->party >= $max_seats ) { $auto_confirm = false; break; }
1053
  }
1054
 
1055
  return $auto_confirm;
@@ -1064,20 +823,18 @@ class rtbBooking {
1064
  global $rtb_controller;
1065
 
1066
  if ( !empty( $_POST['rtb-post-status'] ) && array_key_exists( $_POST['rtb-post-status'], $rtb_controller->cpts->booking_statuses ) ) {
1067
- $post_status = sanitize_text_field( stripslashes_deep( $_POST['rtb-post-status'] ) );
1068
  } elseif ( $rtb_controller->settings->get_setting( 'require-deposit' ) and ! $payment_made ) {
1069
- $post_status = 'payment_pending';
1070
  } elseif ( $this->party < $rtb_controller->settings->get_setting( 'auto-confirm-max-party-size' ) ) {
1071
- $post_status = 'confirmed';
1072
  } elseif ($rtb_controller->settings->get_setting( 'auto-confirm-max-reservations' ) and $this->under_max_confirm_reservations() ) {
1073
- $post_status = 'confirmed';
1074
  } elseif ( $rtb_controller->settings->get_setting( 'auto-confirm-max-seats' ) and $this->under_max_confirm_seats() ) {
1075
- $post_status = 'confirmed';
1076
  } else {
1077
- $post_status = 'pending';
1078
  }
1079
-
1080
- $this->post_status = apply_filters( 'rtb_determine_booking_status', $post_status, $this );
1081
  }
1082
 
1083
  /**
@@ -1147,12 +904,9 @@ class rtbBooking {
1147
  'party' => $this->party,
1148
  'email' => $this->email,
1149
  'phone' => $this->phone,
 
1150
  );
1151
 
1152
- if ( !empty( $this->ip ) ) {
1153
- $meta['ip'] = $this->ip;
1154
- }
1155
-
1156
  if ( empty( $this->date_submission ) ) {
1157
  $meta['date_submission'] = current_time( 'timestamp' );
1158
  } else {
@@ -1183,10 +937,6 @@ class rtbBooking {
1183
  $meta['receipt_id'] = $this->receipt_id;
1184
  }
1185
 
1186
- if ( !empty( $this->stripe_customer_id ) ) {
1187
- $meta['stripe_customer_id'] = $this->stripe_customer_id;
1188
- }
1189
-
1190
  if ( !empty( $this->reminder_sent ) ) {
1191
  $meta['reminder_sent'] = $this->reminder_sent;
1192
  }
86
  'table' => array(),
87
  'payment_failure_message' => '',
88
  'receipt_id' => '',
 
89
  'reminder_sent' => false,
90
  'late_arrival_sent' => false,
91
  );
109
  $this->table = $meta['table'];
110
  $this->payment_failure_message = $meta['payment_failure_message'];
111
  $this->receipt_id = $meta['receipt_id'];
 
112
  $this->late_arrival_sent = $meta['late_arrival_sent'];
113
  $this->reminder_sent = $meta['reminder_sent'];
114
  }
170
  * Validates the data, adds it to the database and executes notifications
171
  * @since 0.0.1
172
  */
173
+ public function insert_booking() {
174
 
175
  // Check if this request has already been processed. If multiple forms
176
  // exist on the same page, this prevents a single submission from
187
  $action = 'update';
188
  }
189
 
190
+ $this->validate_submission();
191
  if ( $this->is_valid_submission() === false ) {
192
  return false;
193
  }
207
  * Validate submission data. Expects to find data in $_POST.
208
  * @since 0.0.1
209
  */
210
+ public function validate_submission() {
211
 
212
  global $rtb_controller;
213
 
520
 
521
  $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secret_key) . '&response=' . urlencode($captcha);
522
  $json_response = file_get_contents( $url );
523
+ $response = json_decode( $json_response );
 
 
 
 
 
 
 
 
 
 
524
 
525
  if ( ! $response->success ) {
 
 
 
 
526
  $this->validation_errors[] = array(
527
  'field' => 'recaptcha',
528
  'error_msg' => 'Invalid reCAPTCHA code',
529
+ 'message' => __( 'Please fill out the reCAPTCHA box again and re-submit.', 'restaurant-reservations' ),
530
  );
531
  }
532
  }
567
  $this->validation_errors[] = array(
568
  'field' => 'date',
569
  'post_variable' => $ip,
570
+ 'message' => __( 'Your booking has been rejected. Please call us if you would like to make a booking.', 'restaurant-reservations' ),
571
  );
572
+ } elseif ( empty( $this->ip ) ) {
573
  $this->ip = sanitize_text_field( $ip );
574
  }
575
+ } elseif ( empty( $this->ip ) ) {
576
  $this->ip = sanitize_text_field( $_SERVER['REMOTE_ADDR'] );
577
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
578
 
579
  do_action( 'rtb_validate_booking_submission', $this );
580
 
699
  if ( ! $this->table or ! is_array( $this->table ) ) { return false; }
700
 
701
  $valid_tables = rtb_get_valid_tables( $this->date );
 
 
 
 
 
 
 
702
 
703
  return $this->table == array_intersect( $this->table, $valid_tables );
704
  }
705
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
706
  /**
707
  * Check whether the number of reservations occurring at the same time is below the threshold
708
  * where reservations get automatically confirmed
715
  $max_reservations_setting = $rtb_controller->settings->get_setting( 'auto-confirm-max-reservations' );
716
  $max_reservations = substr( $max_reservations_setting, 0, strpos( $max_reservations_setting, '_' ) );
717
 
718
+ if ($max_reservations == 'undefined' or $max_reservations <= 1) { return false; }
719
 
720
  $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
721
  $dining_block = substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
726
 
727
  $args = array(
728
  'posts_per_page' => -1,
729
+ 'date_query' => array(
 
730
  'before' => date( 'c', $before_time ),
731
+ 'after' => date( 'c', $after_time )
732
  )
733
  );
734
 
769
  $max_seats_setting = $rtb_controller->settings->get_setting( 'auto-confirm-max-seats' );
770
  $max_seats = substr( $max_seats_setting, 0, strpos( $max_seats_setting, '_' ) );
771
 
772
+ if ($max_seats == 'undefined' or $max_seats <= 1 or $this->party >= $max_seats) { return false; }
773
 
774
  $dining_block_setting = $rtb_controller->settings->get_setting( 'rtb-dining-block-length' );
775
  $dining_block = substr( $dining_block_setting, 0, strpos( $dining_block_setting, '_' ) );
780
 
781
  $args = array(
782
  'posts_per_page' => -1,
783
+ 'date_query' => array(
 
784
  'before' => date( 'c', $before_time ),
785
+ 'after' => date( 'c', $after_time )
786
  )
787
  );
788
 
808
  if ( key ( $current_seats ) < $time - $dining_block_seconds ) { array_shift( $current_seats ); }
809
 
810
  // Check if adding the current party puts us at or above the max confirmation number
811
+ if ( array_sum( $current_seats ) + $this->party >= $max_seats ) { $auto_confirm = false; break; }
812
  }
813
 
814
  return $auto_confirm;
823
  global $rtb_controller;
824
 
825
  if ( !empty( $_POST['rtb-post-status'] ) && array_key_exists( $_POST['rtb-post-status'], $rtb_controller->cpts->booking_statuses ) ) {
826
+ $this->post_status = sanitize_text_field( stripslashes_deep( $_POST['rtb-post-status'] ) );
827
  } elseif ( $rtb_controller->settings->get_setting( 'require-deposit' ) and ! $payment_made ) {
828
+ $this->post_status = 'draft';
829
  } elseif ( $this->party < $rtb_controller->settings->get_setting( 'auto-confirm-max-party-size' ) ) {
830
+ $this->post_status = 'confirmed';
831
  } elseif ($rtb_controller->settings->get_setting( 'auto-confirm-max-reservations' ) and $this->under_max_confirm_reservations() ) {
832
+ $this->post_status = 'confirmed';
833
  } elseif ( $rtb_controller->settings->get_setting( 'auto-confirm-max-seats' ) and $this->under_max_confirm_seats() ) {
834
+ $this->post_status = 'confirmed';
835
  } else {
836
+ $this->post_status = 'pending';
837
  }
 
 
838
  }
839
 
840
  /**
904
  'party' => $this->party,
905
  'email' => $this->email,
906
  'phone' => $this->phone,
907
+ 'ip' => $this->ip,
908
  );
909
 
 
 
 
 
910
  if ( empty( $this->date_submission ) ) {
911
  $meta['date_submission'] = current_time( 'timestamp' );
912
  } else {
937
  $meta['receipt_id'] = $this->receipt_id;
938
  }
939
 
 
 
 
 
940
  if ( !empty( $this->reminder_sent ) ) {
941
  $meta['reminder_sent'] = $this->reminder_sent;
942
  }
includes/CustomPostTypes.class.php CHANGED
@@ -223,18 +223,6 @@ class rtbCustomPostTypes {
223
  'show_in_admin_status_list' => true,
224
  'label_count' => _n_noop( 'Payment Failed <span class="count">(%s)</span>', 'Payment Failed <span class="count">(%s)</span>', 'restaurant-reservations' )
225
  );
226
-
227
- // This is an intermediate status when payment is pending
228
- $booking_statuses['payment_pending'] = array(
229
- 'label' => _x( 'Payment Pending', 'The guest has booked but payment is pending', 'restaurant-reservations' ),
230
- 'default' => false, // Whether or not this status is part of WP Core
231
- 'user_selectable' => false, // Whether or not a user can set a booking to this status
232
- 'public' => false,
233
- 'exclude_from_search' => true,
234
- 'show_in_admin_all_list' => true,
235
- 'show_in_admin_status_list' => true,
236
- 'label_count' => _n_noop( 'Payment Pending <span class="count">(%s)</span>', 'Payment Pending <span class="count">(%s)</span>', 'restaurant-reservations' )
237
- );
238
  }
239
 
240
  return $booking_statuses;
223
  'show_in_admin_status_list' => true,
224
  'label_count' => _n_noop( 'Payment Failed <span class="count">(%s)</span>', 'Payment Failed <span class="count">(%s)</span>', 'restaurant-reservations' )
225
  );
 
 
 
 
 
 
 
 
 
 
 
 
226
  }
227
 
228
  return $booking_statuses;
includes/Dashboard.class.php CHANGED
@@ -134,7 +134,7 @@ class rtbDashboard {
134
  </div>
135
 
136
  <div class="rtb-dashboard-new-widget-box ewd-widget-box-full" id="rtb-dashboard-optional-table">
137
- <div class="rtb-dashboard-new-widget-box-top"><?php _e('Bookings Summary', 'restaurant-reservations'); ?><span id="rtb-dash-optional-table-down-caret">&nbsp;&nbsp;&#9660;</span><span id="rtb-dash-optional-table-up-caret">&nbsp;&nbsp;&#9650;</span></div>
138
  <div class="rtb-dashboard-new-widget-box-bottom">
139
  <table class='rtb-overview-table wp-list-table widefat fixed striped posts'>
140
  <thead>
@@ -152,8 +152,7 @@ class rtbDashboard {
152
  $query->prepare_args();
153
 
154
  $bookings = $query->get_bookings();
155
- $booking_statuses = $rtb_controller->cpts->booking_statuses;
156
-
157
  if (sizeOf($bookings) == 0) {echo "<tr><td colspan='4'>" . __("No bookings to display yet. Create a booking for it to be displayed here.", 'restaurant-reservations') . "</td></tr>";}
158
  else {
159
  foreach ($bookings as $booking) {
@@ -163,7 +162,7 @@ class rtbDashboard {
163
  <td><?php echo $booking->date; ?></td>
164
  <td><?php echo $booking->party; ?></td>
165
  <td><?php echo $booking->name; ?></td>
166
- <td><?php echo $booking_statuses[$booking->post_status]['label']; ?></td>
167
  </tr>
168
  <?php }
169
  }
134
  </div>
135
 
136
  <div class="rtb-dashboard-new-widget-box ewd-widget-box-full" id="rtb-dashboard-optional-table">
137
+ <div class="rtb-dashboard-new-widget-box-top">Bookings Summary<span id="rtb-dash-optional-table-down-caret">&nbsp;&nbsp;&#9660;</span><span id="rtb-dash-optional-table-up-caret">&nbsp;&nbsp;&#9650;</span></div>
138
  <div class="rtb-dashboard-new-widget-box-bottom">
139
  <table class='rtb-overview-table wp-list-table widefat fixed striped posts'>
140
  <thead>
152
  $query->prepare_args();
153
 
154
  $bookings = $query->get_bookings();
155
+
 
156
  if (sizeOf($bookings) == 0) {echo "<tr><td colspan='4'>" . __("No bookings to display yet. Create a booking for it to be displayed here.", 'restaurant-reservations') . "</td></tr>";}
157
  else {
158
  foreach ($bookings as $booking) {
162
  <td><?php echo $booking->date; ?></td>
163
  <td><?php echo $booking->party; ?></td>
164
  <td><?php echo $booking->name; ?></td>
165
+ <td><?php echo $booking->post_status; ?></td>
166
  </tr>
167
  <?php }
168
  }
includes/Export.CSV.class.php CHANGED
@@ -42,21 +42,12 @@ class ebfrtbExportCSV extends ebfrtbExport {
42
  }
43
 
44
  // Privacy consent
45
- if ( $rtb_controller->settings->get_setting( 'require-consent' ) ) {
 
46
  add_filter( 'ebfrtb_export_csv_booking_headers', array( $this, 'add_privacy_header' ) );
47
  add_filter( 'ebfrtb_export_csv_booking', array( $this, 'add_privacy' ), 10, 2 );
48
  }
49
 
50
- if ( $rtb_controller->settings->get_setting( 'enable-tables' ) ) {
51
- add_filter( 'ebfrtb_export_csv_booking_headers', array( $this, 'add_table_header' ), 9 );
52
- add_filter( 'ebfrtb_export_csv_booking', array( $this, 'add_table' ), 9, 2 );
53
- }
54
-
55
- if ( $rtb_controller->settings->get_setting( 'require-deposit' ) ) {
56
- add_filter( 'ebfrtb_export_csv_booking_headers', array( $this, 'add_deposit_header' ) );
57
- add_filter( 'ebfrtb_export_csv_booking', array( $this, 'add_deposit' ), 10, 2 );
58
- }
59
-
60
  add_filter( 'ebfrtb_export_csv_booking_headers', array( $this, 'add_custom_fields_header' ) );
61
  add_filter( 'ebfrtb_export_csv_booking', array( $this, 'add_custom_fields' ), 10, 2 );
62
  }
@@ -216,82 +207,6 @@ class ebfrtbExportCSV extends ebfrtbExport {
216
  return $arr;
217
  }
218
 
219
- /**
220
- * Add a header for the table(s) feature if it's active
221
- *
222
- * @param array $headers Key/value of spreadsheet header rows id/label
223
- * @since 2.2.0
224
- */
225
- public function add_table_header( $headers ) {
226
-
227
- $headers[0] = array_merge(
228
- $headers[0],
229
- array( 'table' => __( 'Table(s)', 'restaurant-reservations' ) )
230
- );
231
-
232
- return $headers;
233
- }
234
-
235
- /**
236
- * Add the selected table(s) to the array for conversion to csv
237
- *
238
- * @param array $arr Assoc array of booking data compiled for conversion to
239
- * csv
240
- * @param rtbBooking $booking Original booking object
241
- * @since 2.2.0
242
- */
243
- public function add_table( $arr, $booking ) {
244
-
245
- $arr = array_merge(
246
- $arr,
247
- array( 'table' => implode( ',', $booking->table ) )
248
- );
249
-
250
- return $arr;
251
- }
252
-
253
- /**
254
- * Add a header for the payment(s) feature if it's active
255
- *
256
- * @param array $headers Key/value of spreadsheet header rows id/label
257
- * @since 2.2.8
258
- */
259
- public function add_deposit_header( $headers ) {
260
-
261
- $headers[0] = array_merge(
262
- $headers[0],
263
- array(
264
- 'deposit' => __( 'Deposit', 'restaurant-reservations' ),
265
- 'receipt_id' => __( 'Receipt ID', 'restaurant-reservations' )
266
- )
267
- );
268
-
269
- return $headers;
270
- }
271
-
272
- /**
273
- * Add the deposit(s) to the array for conversion to csv
274
- *
275
- * @param array $arr Assoc array of booking data compiled for conversion to
276
- * csv
277
- * @param rtbBooking $booking Original booking object
278
- * @since 2.2.0
279
- */
280
- public function add_deposit( $arr, $booking ) {
281
-
282
- global $rtb_controller;
283
-
284
- $arr = array_merge(
285
- $arr,
286
- array(
287
- 'deposit' => $rtb_controller->settings->get_setting( 'rtb-currency' ) .' '. $booking->deposit,
288
- 'receipt_id' => $booking->receipt_id
289
- )
290
- );
291
-
292
- return $arr;
293
- }
294
-
295
  /**
296
  * Add custom fields to CSV headers
297
  *
42
  }
43
 
44
  // Privacy consent
45
+ $require_consent = $rtb_controller->settings->get_setting( 'require-consent' );
46
+ if ( !empty( $require_consent ) ) {
47
  add_filter( 'ebfrtb_export_csv_booking_headers', array( $this, 'add_privacy_header' ) );
48
  add_filter( 'ebfrtb_export_csv_booking', array( $this, 'add_privacy' ), 10, 2 );
49
  }
50
 
 
 
 
 
 
 
 
 
 
 
51
  add_filter( 'ebfrtb_export_csv_booking_headers', array( $this, 'add_custom_fields_header' ) );
52
  add_filter( 'ebfrtb_export_csv_booking', array( $this, 'add_custom_fields' ), 10, 2 );
53
  }
207
  return $arr;
208
  }
209
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  /**
211
  * Add custom fields to CSV headers
212
  *
includes/Export.PDF.class.php CHANGED
@@ -64,11 +64,7 @@ class ebfrtbExportPDF extends ebfrtbExport {
64
  $this->query_args = $args['query_args'];
65
  }
66
 
67
- // Maybe add table hooks
68
- add_filter( 'ebfrtb_mpdf_after_details', array($this, 'add_booking_table_to_pdf' ) );
69
- add_filter( 'ebfrtb_tcpdf_after_details', array($this, 'add_booking_table_to_pdf' ) );
70
-
71
- // Add custom field hooks
72
  add_filter( 'ebfrtb_mpdf_after_details', array($this, 'add_custom_fields_to_mpdf' ) );
73
  add_filter( 'ebfrtb_tcpdf_after_details', array($this, 'add_custom_fields_to_tcpdf' ) );
74
  }
@@ -209,24 +205,6 @@ class ebfrtbExportPDF extends ebfrtbExport {
209
  return $this->export;
210
  }
211
 
212
- /**
213
- *Maybe add the table for a booking to PDF output
214
- *
215
- * @since 2.2
216
- */
217
- public function add_booking_table_to_pdf( $booking ) {
218
- global $rtb_controller;
219
-
220
- if ( $rtb_controller->settings->get_setting( 'enable-tables' ) ) { ?>
221
-
222
- <p class="booking-table">
223
- <span class="label"><?php echo __( 'Table(s)' ) . esc_html_x( ': ', 'Appears after table label in PDF exports', 'custom-fields-for-rtb' ); ?></span>
224
- <?php echo implode( ',', $booking->table ); ?>
225
- </p>
226
-
227
- <?php }
228
- }
229
-
230
  /**
231
  * Add custom fields to TCPDF output
232
  *
64
  $this->query_args = $args['query_args'];
65
  }
66
 
67
+ //Add custom field hooks
 
 
 
 
68
  add_filter( 'ebfrtb_mpdf_after_details', array($this, 'add_custom_fields_to_mpdf' ) );
69
  add_filter( 'ebfrtb_tcpdf_after_details', array($this, 'add_custom_fields_to_tcpdf' ) );
70
  }
205
  return $this->export;
206
  }
207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  /**
209
  * Add custom fields to TCPDF output
210
  *
includes/Field.class.php CHANGED
@@ -541,22 +541,11 @@ class cffrtbField {
541
 
542
  $input = isset( $_POST['rtb-' . $this->slug ] ) ? $_POST['rtb-' . $this->slug] : '';
543
 
544
- // Skip empty fields but do not skip checkboxes.
545
  // required checks are performed by base plugin validation
546
-
547
- $checkbox = 'options' === $this->type && 'checkbox' === $this->subtype;
548
-
549
  if ( ( is_string( $input ) && trim( $input ) == '' ) ||
550
  ( is_array( $input ) && empty( $input ) ) ) {
551
-
552
- // When a checkbox is unselected, it will not override the previously selected
553
- // value because HTML Form will not submit empty checkboxes
554
- if($checkbox) {
555
- $input = [];
556
- }
557
- else {
558
- return;
559
- }
560
  }
561
 
562
  // Option fields
541
 
542
  $input = isset( $_POST['rtb-' . $this->slug ] ) ? $_POST['rtb-' . $this->slug] : '';
543
 
544
+ // Skip empty fields
545
  // required checks are performed by base plugin validation
 
 
 
546
  if ( ( is_string( $input ) && trim( $input ) == '' ) ||
547
  ( is_array( $input ) && empty( $input ) ) ) {
548
+ return;
 
 
 
 
 
 
 
 
549
  }
550
 
551
  // Option fields
includes/Import.class.php CHANGED
@@ -7,7 +7,7 @@
7
  if ( !defined( 'ABSPATH' ) )
8
  exit;
9
 
10
- if (!class_exists('ComposerAutoloaderInit4618f5c41cf5e27cc7908556f031e4d4')) {require_once RTB_PLUGIN_DIR . '/lib/PHPSpreadsheet/vendor/autoload.php';}
11
  use PhpOffice\PhpSpreadsheet\Spreadsheet;
12
  class rtbImport {
13
 
@@ -149,7 +149,7 @@ class rtbImport {
149
  if ($post['post_title'] == '') {continue;}
150
 
151
  $post['post_status'] = 'publish';
152
- $post['post_type'] = RTB_BOOKING_POST_TYPE;
153
 
154
  if ( isset( $post['ID'] ) and $post['ID'] != '') { $post_id = wp_update_post($post); }
155
  else { $post_id = wp_insert_post($post); }
@@ -181,7 +181,7 @@ class rtbImport {
181
  }
182
 
183
  $this->status = true;
184
- $this->message = __("Reservations added successfully.", 'restaurant-reservations');
185
 
186
  add_action( 'admin_notices', array( $this, 'display_notice' ) );
187
  }
@@ -194,40 +194,40 @@ class rtbImport {
194
  {
195
 
196
  case '1':
197
- $error = __('The uploaded file exceeds the upload_max_filesize directive in php.ini', 'restaurant-reservations');
198
  break;
199
  case '2':
200
- $error = __('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', 'restaurant-reservations');
201
  break;
202
  case '3':
203
- $error = __('The uploaded file was only partially uploaded', 'restaurant-reservations');
204
  break;
205
  case '4':
206
- $error = __('No file was uploaded.', 'restaurant-reservations');
207
  break;
208
 
209
  case '6':
210
- $error = __('Missing a temporary folder', 'restaurant-reservations');
211
  break;
212
  case '7':
213
- $error = __('Failed to write file to disk', 'restaurant-reservations');
214
  break;
215
  case '8':
216
- $error = __('File upload stopped by extension', 'restaurant-reservations');
217
  break;
218
  case '999':
219
  default:
220
- $error = __('No error code avaiable', 'restaurant-reservations');
221
  }
222
  }
223
  /* Make sure that the file exists */
224
  elseif (empty($_FILES['fdm_menu_items_spreadsheet']['tmp_name']) || $_FILES['fdm_menu_items_spreadsheet']['tmp_name'] == 'none') {
225
- $error = __('No file was uploaded here..', 'restaurant-reservations');
226
  }
227
  /* Move the file and store the URL to pass it onwards*/
228
  /* Check that it is a .xls or .xlsx file */
229
  if(!isset($_FILES['fdm_menu_items_spreadsheet']['name']) or (!preg_match("/\.(xls.?)$/", $_FILES['fdm_menu_items_spreadsheet']['name']) and !preg_match("/\.(csv.?)$/", $_FILES['fdm_menu_items_spreadsheet']['name']))) {
230
- $error = __('File must be .csv, .xls or .xlsx', 'restaurant-reservations');
231
  }
232
  else {
233
  $filename = basename( $_FILES['fdm_menu_items_spreadsheet']['name']);
@@ -235,7 +235,7 @@ class rtbImport {
235
  $filename = mb_ereg_replace("([\.]{2,})", '', $filename);
236
 
237
  //for security reason, we force to remove all uploaded file
238
- $target_path = RTB_PLUGIN_DIR . "/user-sheets/";
239
 
240
  $target_path = $target_path . $filename;
241
 
@@ -259,9 +259,9 @@ class rtbImport {
259
 
260
  public function enqueue_import_scripts() {
261
  $screen = get_current_screen();
262
- if($screen->id == 'rtb-menu_page_rtb-import'){
263
- wp_enqueue_style( 'rtb-admin-css', RTB_PLUGIN_URL . '/assets/css/admin.css', array(), RTB_VERSION );
264
- wp_enqueue_script( 'rtb-admin-js', RTB_PLUGIN_URL . '/assets/js/admin.js', array( 'jquery' ), RTB_VERSION, true );
265
  }
266
  }
267
 
7
  if ( !defined( 'ABSPATH' ) )
8
  exit;
9
 
10
+ if (!class_exists('ComposerAutoloaderInit4618f5c41cf5e27cc7908556f031e4d4')) {require_once FDM_PLUGIN_DIR . '/lib/PHPSpreadsheet/vendor/autoload.php';}
11
  use PhpOffice\PhpSpreadsheet\Spreadsheet;
12
  class rtbImport {
13
 
149
  if ($post['post_title'] == '') {continue;}
150
 
151
  $post['post_status'] = 'publish';
152
+ $post['post_type'] = 'fdm-menu-item';
153
 
154
  if ( isset( $post['ID'] ) and $post['ID'] != '') { $post_id = wp_update_post($post); }
155
  else { $post_id = wp_insert_post($post); }
181
  }
182
 
183
  $this->status = true;
184
+ $this->message = __("Menu items added successfully.", 'food-and-drink-menu');
185
 
186
  add_action( 'admin_notices', array( $this, 'display_notice' ) );
187
  }
194
  {
195
 
196
  case '1':
197
+ $error = __('The uploaded file exceeds the upload_max_filesize directive in php.ini', 'food-and-drink-menu');
198
  break;
199
  case '2':
200
+ $error = __('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', 'food-and-drink-menu');
201
  break;
202
  case '3':
203
+ $error = __('The uploaded file was only partially uploaded', 'food-and-drink-menu');
204
  break;
205
  case '4':
206
+ $error = __('No file was uploaded.', 'food-and-drink-menu');
207
  break;
208
 
209
  case '6':
210
+ $error = __('Missing a temporary folder', 'food-and-drink-menu');
211
  break;
212
  case '7':
213
+ $error = __('Failed to write file to disk', 'food-and-drink-menu');
214
  break;
215
  case '8':
216
+ $error = __('File upload stopped by extension', 'food-and-drink-menu');
217
  break;
218
  case '999':
219
  default:
220
+ $error = __('No error code avaiable', 'food-and-drink-menu');
221
  }
222
  }
223
  /* Make sure that the file exists */
224
  elseif (empty($_FILES['fdm_menu_items_spreadsheet']['tmp_name']) || $_FILES['fdm_menu_items_spreadsheet']['tmp_name'] == 'none') {
225
+ $error = __('No file was uploaded here..', 'food-and-drink-menu');
226
  }
227
  /* Move the file and store the URL to pass it onwards*/
228
  /* Check that it is a .xls or .xlsx file */
229
  if(!isset($_FILES['fdm_menu_items_spreadsheet']['name']) or (!preg_match("/\.(xls.?)$/", $_FILES['fdm_menu_items_spreadsheet']['name']) and !preg_match("/\.(csv.?)$/", $_FILES['fdm_menu_items_spreadsheet']['name']))) {
230
+ $error = __('File must be .csv, .xls or .xlsx', 'food-and-drink-menu');
231
  }
232
  else {
233
  $filename = basename( $_FILES['fdm_menu_items_spreadsheet']['name']);
235
  $filename = mb_ereg_replace("([\.]{2,})", '', $filename);
236
 
237
  //for security reason, we force to remove all uploaded file
238
+ $target_path = FDM_PLUGIN_DIR . "/user-sheets/";
239
 
240
  $target_path = $target_path . $filename;
241
 
259
 
260
  public function enqueue_import_scripts() {
261
  $screen = get_current_screen();
262
+ if($screen->id == 'fdm-menu_page_fdm-import'){
263
+ wp_enqueue_style( 'fdm-admin', FDM_PLUGIN_URL . '/assets/css/admin.css', array(), RTB_VERSION );
264
+ wp_enqueue_script( 'fdm-admin-js', FDM_PLUGIN_URL . '/assets/js/admin.js', array( 'jquery' ), RTB_VERSION, true );
265
  }
266
  }
267
 
includes/InstallationWalkthrough.class.php CHANGED
@@ -10,15 +10,15 @@ if ( !defined( 'ABSPATH' ) )
10
  class rtbInstallationWalkthrough {
11
 
12
  public function __construct() {
13
- add_action( 'admin_menu', array( $this, 'register_install_screen' ) );
14
- add_action( 'admin_head', array( $this, 'hide_install_screen_menu_item' ) );
15
- add_action( 'admin_init', array( $this, 'redirect' ), 9999 );
16
 
17
- add_action( 'admin_head', array( $this, 'admin_enqueue') );
18
 
19
- add_action( 'wp_ajax_rtb_welcome_add_menu_page', array( $this, 'add_reservations_page' ) );
20
- add_action( 'wp_ajax_rtb_welcome_set_schedule', array( $this, 'set_schedule' ) );
21
- add_action( 'wp_ajax_rtb_welcome_set_options', array( $this, 'set_options' ) );
22
  }
23
 
24
  public function redirect() {
@@ -92,21 +92,18 @@ class rtbInstallationWalkthrough {
92
  }
93
 
94
  function admin_enqueue() {
95
-
96
- if ( ! isset( $_GET['page'] ) or $_GET['page'] != 'rtb-getting-started' ) { return; }
97
-
98
- wp_enqueue_style( 'rtb-admin-css', RTB_PLUGIN_URL . '/lib/simple-admin-pages/css/admin.css', array(), RTB_VERSION );
99
- wp_enqueue_style( 'rtb-welcome-screen', RTB_PLUGIN_URL . '/assets/css/admin-rtb-welcome-screen.css', array(), RTB_VERSION );
100
- wp_enqueue_style( 'pickadate-default', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.css', array(), RTB_VERSION );
101
- wp_enqueue_style( 'pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.date.css', array(), RTB_VERSION );
102
- wp_enqueue_style( 'pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.time.css', array(), RTB_VERSION );
103
 
104
- wp_enqueue_script( 'rtb-getting-started', RTB_PLUGIN_URL . '/assets/js/admin-rtb-welcome-screen.js', array('jquery'), RTB_VERSION );
105
- wp_enqueue_script( 'pickadate', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.js', array('jquery'), RTB_VERSION, true );
106
- wp_enqueue_script( 'pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.date.js', array('jquery'), RTB_VERSION, true );
107
- wp_enqueue_script( 'pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.time.js', array('jquery'), RTB_VERSION, true );
108
- wp_enqueue_script( 'pickadate-legacy', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/legacy.js', array('jquery'), RTB_VERSION, true );
109
- wp_enqueue_script( 'sap-scheduler', RTB_PLUGIN_URL . '/lib/simple-admin-pages/js/scheduler.js', array('jquery'), RTB_VERSION, true );
110
 
111
  $sap_scheduler_settings[ 'schedule-open' ] = array(
112
  'time_interval' => 15,
10
  class rtbInstallationWalkthrough {
11
 
12
  public function __construct() {
13
+ add_action( 'admin_menu', array($this, 'register_install_screen' ));
14
+ add_action( 'admin_head', array($this, 'hide_install_screen_menu_item' ));
15
+ add_action( 'admin_init', array($this, 'redirect'), 9999);
16
 
17
+ add_action('admin_head', array($this, 'admin_enqueue'));
18
 
19
+ add_action('wp_ajax_rtb_welcome_add_menu_page', array($this, 'add_reservations_page'));
20
+ add_action('wp_ajax_rtb_welcome_set_schedule', array($this, 'set_schedule'));
21
+ add_action('wp_ajax_rtb_welcome_set_options', array($this, 'set_options'));
22
  }
23
 
24
  public function redirect() {
92
  }
93
 
94
  function admin_enqueue() {
95
+ wp_enqueue_style('rtb-admin-css', RTB_PLUGIN_URL . '/lib/simple-admin-pages/css/admin.css', array(), RTB_VERSION);
96
+ wp_enqueue_style('rtb-welcome-screen', RTB_PLUGIN_URL . '/assets/css/admin-rtb-welcome-screen.css', array(), RTB_VERSION);
97
+ wp_enqueue_style('pickadate-default', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.css', array(), RTB_VERSION);
98
+ wp_enqueue_style('pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.date.css', array(), RTB_VERSION);
99
+ wp_enqueue_style('pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/themes/default.time.css', array(), RTB_VERSION);
 
 
 
100
 
101
+ wp_enqueue_script('rtb-getting-started', RTB_PLUGIN_URL . '/assets/js/admin-rtb-welcome-screen.js', array('jquery'), RTB_VERSION);
102
+ wp_enqueue_script('pickadate', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.js', array('jquery'), RTB_VERSION, true);
103
+ wp_enqueue_script('pickadate-date', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.date.js', array('jquery'), RTB_VERSION, true);
104
+ wp_enqueue_script('pickadate-time', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/picker.time.js', array('jquery'), RTB_VERSION, true);
105
+ wp_enqueue_script('pickadate-legacy', RTB_PLUGIN_URL . '/lib/simple-admin-pages/lib/pickadate/legacy.js', array('jquery'), RTB_VERSION, true);
106
+ wp_enqueue_script('sap-scheduler', RTB_PLUGIN_URL . '/lib/simple-admin-pages/js/scheduler.js', array('jquery'), RTB_VERSION, true);
107
 
108
  $sap_scheduler_settings[ 'schedule-open' ] = array(
109
  'time_interval' => 15,
includes/MailChimp.class.php CHANGED
@@ -72,12 +72,8 @@ class mcfrtbInit {
72
  global $rtb_controller;
73
  $api_key = $rtb_controller->settings->get_setting( 'mc-apikey' );
74
 
75
- if( ! is_array( $api_key ) ) {
76
- $api_key = [];
77
- }
78
-
79
- $this->api_key = array_key_exists('api_key', $api_key) ? $api_key['api_key'] : '';
80
- $this->status = array_key_exists('status', $api_key) ? $api_key['status'] : '';
81
 
82
  $this->merge_fields = apply_filters(
83
  'mcfrtb_list_merge_fields',
72
  global $rtb_controller;
73
  $api_key = $rtb_controller->settings->get_setting( 'mc-apikey' );
74
 
75
+ $this->api_key = $api_key['api_key'];
76
+ $this->status = $api_key['status'];
 
 
 
 
77
 
78
  $this->merge_fields = apply_filters(
79
  'mcfrtb_list_merge_fields',
includes/Migration.class.php DELETED
@@ -1,45 +0,0 @@
1
- <?php
2
- if ( !defined( 'ABSPATH' ) ) exit;
3
-
4
- if ( !class_exists( 'rtbMigrationManager' ) ) {
5
- /**
6
- * Class to handle post update migrations for Restaurant Reservations
7
- *
8
- * @since 2.2.4
9
- */
10
- class rtbMigrationManager {
11
-
12
- public function __construct() {
13
-
14
- $this->convert_draft_status_to_payment_pending_status();
15
- }
16
-
17
-
18
-
19
- /************************* Migration callback ahead *************************/
20
-
21
- /**
22
- * Changes rtb-booking post status from draft to payment_pending while a booking has been created but
23
- * the payment is yet to be paid. Update all existing rtb-booking posts with status draft to
24
- * payment_pending. This change will let admins check and process/delete the existing bookings
25
- * without payment, and also let the use pay if they have accidently move elsewhere before
26
- * the payment is completed.
27
- * Currently users or admins can not do anything with bookings with the status draft. If the same
28
- * booking needs to be made again, at least name or phone number or email needs to be cahgned
29
- * for the same slot otherwise validation will fail stating there is a duplicate booking
30
- */
31
- public function convert_draft_status_to_payment_pending_status() {
32
- global $wpdb;
33
-
34
- $wpdb->query("
35
- UPDATE
36
- {$wpdb->posts}
37
- SET
38
- `post_status` = 'payment_pending'
39
- WHERE
40
- `post_status` = 'draft' AND `post_type` = 'rtb-booking'
41
- ");
42
- }
43
- }
44
-
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/MultipleLocations.class.php CHANGED
@@ -667,14 +667,8 @@ if ( ! class_exists( 'rtbMultipleLocations', false ) ) {
667
  $term = empty( $notification->booking->location ) ? null : get_term( $notification->booking->location, $this->location_taxonomy );
668
  $location_name = is_null( $term ) || is_wp_error( $term ) ? '' : $term->name;
669
 
670
- $table_number = empty( $notification->booking->table ) ? '' : $notification->booking->table;
671
- $table_number = is_array($table_number) ? implode(',', $table_number ) : $table_number;
672
-
673
  return array_merge(
674
- array(
675
- '{location}' => $location_name,
676
- '{table}' => $table_number,
677
- ),
678
  $template_tags
679
  );
680
  }
667
  $term = empty( $notification->booking->location ) ? null : get_term( $notification->booking->location, $this->location_taxonomy );
668
  $location_name = is_null( $term ) || is_wp_error( $term ) ? '' : $term->name;
669
 
 
 
 
670
  return array_merge(
671
+ array( '{location}' => $location_name ),
 
 
 
672
  $template_tags
673
  );
674
  }
includes/Notification.Email.class.php CHANGED
@@ -171,26 +171,8 @@ class rtbNotificationEmail extends rtbNotification {
171
 
172
  $fromEmail = apply_filters( 'rtb_notification_email_header_from_email', $rtb_controller->settings->get_setting( 'from-email-address' ) );
173
 
174
- $headers = "From: =?UTF-8?Q?" .
175
- quoted_printable_encode(
176
- html_entity_decode(
177
- $rtb_controller->settings->get_setting( 'reply-to-name' ),
178
- ENT_QUOTES,
179
- 'UTF-8'
180
- )
181
- ) .
182
- "?= <" . $fromEmail . ">\r\n";
183
-
184
- $headers .= "Reply-To: =?UTF-8?Q?" .
185
- quoted_printable_encode(
186
- html_entity_decode(
187
- $this->from_name,
188
- ENT_QUOTES,
189
- 'UTF-8'
190
- )
191
- ) .
192
- "?= <" . $this->from_email . ">\r\n";
193
-
194
  $headers .= "Content-Type: text/html; charset=utf-8\r\n";
195
 
196
  $this->headers = apply_filters( 'rtb_notification_email_headers', $headers, $this );
171
 
172
  $fromEmail = apply_filters( 'rtb_notification_email_header_from_email', $rtb_controller->settings->get_setting( 'from-email-address' ) );
173
 
174
+ $headers = "From: " . stripslashes_deep( html_entity_decode( $rtb_controller->settings->get_setting( 'reply-to-name' ), ENT_COMPAT, 'UTF-8' ) ) . " <" . $fromEmail . ">\r\n";
175
+ $headers .= "Reply-To: =?utf-8?Q?" . quoted_printable_encode( $this->from_name ) . "?= <" . $this->from_email . ">\r\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  $headers .= "Content-Type: text/html; charset=utf-8\r\n";
177
 
178
  $this->headers = apply_filters( 'rtb_notification_email_headers', $headers, $this );
includes/Notifications.class.php CHANGED
@@ -117,7 +117,7 @@ class rtbNotifications {
117
 
118
  // If the post status is not pending, trigger a post status
119
  // transition as though it's gone from pending_to_{status}
120
- if ( $booking->post_status != 'pending' and $booking->post_status != 'draft' ) {
121
  do_action( 'pending_to_' . $booking->post_status, get_post( $booking->ID ) );
122
 
123
  // Otherwise proceed with the new_submission event
@@ -218,9 +218,9 @@ class rtbNotifications {
218
 
219
  if ( $event == $notification->event ) {
220
  $notification->set_booking( $this->booking );
221
- if ( $notification->prepare_notification() ) {
222
  do_action( 'rtb_send_notification_before', $notification );
223
- $notification->send_notification();
224
  do_action( 'rtb_send_notification_after', $notification );
225
  }
226
  }
117
 
118
  // If the post status is not pending, trigger a post status
119
  // transition as though it's gone from pending_to_{status}
120
+ if ( $booking->post_status != 'pending' ) {
121
  do_action( 'pending_to_' . $booking->post_status, get_post( $booking->ID ) );
122
 
123
  // Otherwise proceed with the new_submission event
218
 
219
  if ( $event == $notification->event ) {
220
  $notification->set_booking( $this->booking );
221
+ if ( $notification->prepare_notification() ) {
222
  do_action( 'rtb_send_notification_before', $notification );
223
+ $notification->send_notification();
224
  do_action( 'rtb_send_notification_after', $notification );
225
  }
226
  }
includes/Permissions.class.php CHANGED
@@ -25,8 +25,7 @@ class rtbPermissions {
25
  "premium_seat_restrictions" => 2,
26
  "payments" => 3,
27
  "reminders" => 3,
28
- "premium_table_restrictions" => 3,
29
- "api_usage" => 3
30
  );
31
  }
32
 
25
  "premium_seat_restrictions" => 2,
26
  "payments" => 3,
27
  "reminders" => 3,
28
+ "premium_table_restrictions" => 3
 
29
  );
30
  }
31
 
includes/Query.class.php CHANGED
@@ -103,11 +103,11 @@ class rtbQuery {
103
  $date_query = array( 'inclusive' => true );
104
 
105
  if ( !empty( $args['start_date'] ) ) {
106
- $date_query['after'] = sanitize_text_field( $args['start_date'] ) . ( ( isset( $args['start_time'] ) and $args['start_time'] ) ? $args['start_time'] : '' );
107
  }
108
 
109
  if ( !empty( $args['end_date'] ) ) {
110
- $date_query['before'] = sanitize_text_field( $args['end_date'] ) . ( ( isset( $args['end_time'] ) and $args['end_time'] ) ? $args['end_time'] : ' 23:59' );
111
  }
112
 
113
  if ( count( $date_query ) ) {
@@ -185,7 +185,6 @@ class rtbQuery {
185
  if ( !empty( $_REQUEST['orderby'] ) ) {
186
  $args['orderby'] = sanitize_key( $_REQUEST['orderby'] );
187
  if ( $args['orderby'] === 'id' ) { $args['orderby'] = 'ID'; }
188
- if ( $args['orderby'] === 'status' ) { add_filter( 'posts_orderby', array( $this, 'orderby_status' ) ); }
189
  }
190
 
191
  if ( !empty( $_REQUEST['order'] ) && $_REQUEST['order'] === 'desc' ) {
@@ -244,10 +243,5 @@ class rtbQuery {
244
  return $this->bookings;
245
  }
246
 
247
- public function orderby_status() {
248
-
249
- return 'post_status ' . ( ( isset( $_REQUEST['order'] ) and $_REQUEST['order'] == 'desc' ) ? 'DESC' : 'ASC' );
250
- }
251
-
252
  }
253
  } // endif
103
  $date_query = array( 'inclusive' => true );
104
 
105
  if ( !empty( $args['start_date'] ) ) {
106
+ $date_query['after'] = sanitize_text_field( $args['start_date'] );
107
  }
108
 
109
  if ( !empty( $args['end_date'] ) ) {
110
+ $date_query['before'] = sanitize_text_field( $args['end_date'] ) . ' 23:59'; // end of day
111
  }
112
 
113
  if ( count( $date_query ) ) {
185
  if ( !empty( $_REQUEST['orderby'] ) ) {
186
  $args['orderby'] = sanitize_key( $_REQUEST['orderby'] );
187
  if ( $args['orderby'] === 'id' ) { $args['orderby'] = 'ID'; }
 
188
  }
189
 
190
  if ( !empty( $_REQUEST['order'] ) && $_REQUEST['order'] === 'desc' ) {
243
  return $this->bookings;
244
  }
245
 
 
 
 
 
 
246
  }
247
  } // endif
includes/Settings.class.php CHANGED
@@ -749,16 +749,15 @@ If you were not the one to cancel this booking, please contact us.
749
  'title' => __( 'Late Bookings', 'restaurant-reservations' ),
750
  'description' => __( 'Select how late customers can make their booking. (Administrators and Booking Managers are not restricted by this setting.)', 'restaurant-reservations' ),
751
  'blank_option' => false,
752
- 'options' => apply_filters( 'rtb_setting_late_booking_options', array(
753
- '' => __( 'Up to the last minute', 'restaurant-reservations' ),
754
- '15' => __( 'At least 15 minutes in advance', 'restaurant-reservations' ),
755
- '30' => __( 'At least 30 minutes in advance', 'restaurant-reservations' ),
756
- '45' => __( 'At least 45 minutes in advance', 'restaurant-reservations' ),
757
- '60' => __( 'At least 1 hour in advance', 'restaurant-reservations' ),
758
- '240' => __( 'At least 4 hours in advance', 'restaurant-reservations' ),
759
- '1440' => __( 'At least 24 hours in advance', 'restaurant-reservations' ),
760
- 'same_day' => __( 'Block same-day bookings', 'restaurant-reservations' ),
761
- )
762
  )
763
  )
764
  );
@@ -966,17 +965,6 @@ If you were not the one to cancel this booking, please contact us.
966
  )
967
  );
968
 
969
- $sap->add_setting(
970
- 'rtb-settings',
971
- 'rtb-general',
972
- 'text',
973
- array(
974
- 'id' => 'cancelled-redirect-page',
975
- 'title' => __( 'Cancellation Redirect Page', 'restaurant-reservations' ),
976
- 'description' => __( 'Input the URL of the page you want the cancellation form to redirect to when someone cancels their reservation. Only applicable if the "Allow Cancellations" option above is enabled. If left blank, it will display a success message instead of redirecting.', 'restaurant-reservations' ),
977
- )
978
- );
979
-
980
  $sap->add_section(
981
  'rtb-settings',
982
  array(
@@ -1103,18 +1091,7 @@ If you were not the one to cancel this booking, please contact us.
1103
  array(
1104
  'id' => 'rtb-privacy',
1105
  'title' => __( 'Privacy', 'restaurant-reservations' ),
1106
- 'tab' => 'rtb-basic',
1107
- )
1108
- );
1109
-
1110
- $sap->add_setting(
1111
- 'rtb-settings',
1112
- 'rtb-privacy',
1113
- 'toggle',
1114
- array(
1115
- 'id' => 'disable-ip-capture',
1116
- 'title' => __( 'Disable IP Capture', 'restaurant-reservations' ),
1117
- 'description' => __( 'This turns off the feature that captures the IP address of the device making the booking.', 'restaurant-reservations' )
1118
  )
1119
  );
1120
 
@@ -1125,7 +1102,7 @@ If you were not the one to cancel this booking, please contact us.
1125
  array(
1126
  'id' => 'require-consent',
1127
  'title' => __( 'Require Consent', 'restaurant-reservations' ),
1128
- 'description' => __( 'Require customers to consent to the collection of their details when making a booking. This may be required to comply with privacy laws in your country.', 'restaurant-reservations' )
1129
  )
1130
  );
1131
 
@@ -1365,7 +1342,7 @@ If you were not the one to cancel this booking, please contact us.
1365
  'title' => __( 'Max Reservations', 'restaurant-reservations' ),
1366
  'description' => __( 'How many reservations, if enabled above, should be allowed at the same time? Set dining block length setting above to change how long a meal typically lasts.', 'restaurant-reservations' ),
1367
  'min_value' => 1,
1368
- 'max_value' => apply_filters( 'rtb-max-reservations-upper-limit', 100 ),
1369
  'increment' => 1
1370
  )
1371
  );
@@ -1377,9 +1354,9 @@ If you were not the one to cancel this booking, please contact us.
1377
  array(
1378
  'id' => 'rtb-max-people-count',
1379
  'title' => __( 'Max People', 'restaurant-reservations' ),
1380
- 'description' => __( 'How many people, if enabled above, should be allowed to be present in the restaurant at the same time? Set dining block length setting above to change how long a meal typically lasts. May not work correctly if max reservations is set.', 'restaurant-reservations' ),
1381
  'min_value' => 1,
1382
- 'max_value' => apply_filters( 'rtb-max-people-upper-limit', 100 ),
1383
  'increment' => 1
1384
  )
1385
  );
@@ -1393,7 +1370,7 @@ If you were not the one to cancel this booking, please contact us.
1393
  'title' => __( 'Automatically Confirm Below Reservation Number', 'restaurant-reservations' ),
1394
  'description' => __( 'Set a maximum number of reservations at one time below which all bookings will be automatically confirmed.', 'restaurant-reservations' ),
1395
  'min_value' => 1,
1396
- 'max_value' => apply_filters( 'rtb-auto-confirm-reservations-upper-limit', 100 ),
1397
  'increment' => 1
1398
  )
1399
  );
@@ -1407,7 +1384,7 @@ If you were not the one to cancel this booking, please contact us.
1407
  'title' => __( 'Automatically Confirm Below Seats Number', 'restaurant-reservations' ),
1408
  'description' => __( 'Set a maximum number of seats at one time below which all bookings will be automatically confirmed.', 'restaurant-reservations' ),
1409
  'min_value' => 1,
1410
- 'max_value' => apply_filters( 'rtb-auto-confirm-seats-upper-limit', 400 ),
1411
  'increment' => 1
1412
  )
1413
  );
@@ -2126,7 +2103,7 @@ If you were not the one to cancel this booking, please contact us.
2126
  array(
2127
  'id' => 'rtb-deposit-amount',
2128
  'title' => __( 'Deposit Amount', 'restaurant-reservations' ),
2129
- 'description' => __( 'What deposit amount is required (either per reservation or per guest, depending on the setting above)? Minimum is $0.50 in most currencies.', 'restaurant-reservations' )
2130
  )
2131
  );
2132
  $sap->add_setting(
@@ -2176,16 +2153,6 @@ If you were not the one to cancel this booking, please contact us.
2176
  $payment_permissions
2177
  )
2178
  );
2179
- $sap->add_setting(
2180
- 'rtb-settings',
2181
- 'rtb-stripe-payment',
2182
- 'toggle',
2183
- array(
2184
- 'id' => 'rtb-stripe-sca',
2185
- 'title' => __( 'Strong Customer Authorization (SCA)', 'restaurant-reservations' ),
2186
- 'description' => __( 'User will be redirected to Stripe and presented with 3D secure or bank redirect for payment authentication. (May be necessary for certain EU compliance.)', 'restaurant-reservations' )
2187
- )
2188
- );
2189
  $sap->add_setting(
2190
  'rtb-settings',
2191
  'rtb-stripe-payment',
@@ -2197,16 +2164,6 @@ If you were not the one to cancel this booking, please contact us.
2197
  'placeholder' => $this->defaults['rtb-stripe-currency-symbol']
2198
  )
2199
  );
2200
- $sap->add_setting(
2201
- 'rtb-settings',
2202
- 'rtb-stripe-payment',
2203
- 'toggle',
2204
- array(
2205
- 'id' => 'rtb-expiration-field-single',
2206
- 'title' => __( 'CC Expiration Single Field', 'restaurant-reservations' ),
2207
- 'description' => __( 'Should the field for card expiry details be a single field with a mask or two separate fields for month and year?', 'restaurant-reservations' )
2208
- )
2209
- );
2210
  $sap->add_setting(
2211
  'rtb-settings',
2212
  'rtb-stripe-payment',
@@ -2847,7 +2804,7 @@ If you were not the one to cancel this booking, please contact us.
2847
  ),
2848
 
2849
  // Contact details fieldset
2850
- 'rtb-contact' => array(
2851
  'legend' => __( 'Contact Details', 'restaurant-reservations' ),
2852
  'fields' => array(
2853
  'name' => array(
@@ -2927,8 +2884,6 @@ If you were not the one to cancel this booking, please contact us.
2927
  'required' => $require_table,
2928
  'order' => 999
2929
  );
2930
- } elseif ( array_key_exists( 'table', $fields['reservation']['fields'] ) ) {
2931
- unset( $fields['reservation']['fields']['table'] );
2932
  }
2933
 
2934
  return apply_filters( 'rtb_booking_form_fields', $fields, $request, $args );
@@ -2981,7 +2936,6 @@ If you were not the one to cancel this booking, please contact us.
2981
  '{site_name}' => __( 'The name of this website', 'restaurant-reservations' ),
2982
  '{site_link}' => __( 'A link to this website', 'restaurant-reservations' ),
2983
  '{current_time}' => __( 'Current date and time', 'restaurant-reservations' ),
2984
- '{table}' => __( 'The table(s) for the booking', 'restaurant-reservations' ),
2985
  )
2986
  );
2987
 
749
  'title' => __( 'Late Bookings', 'restaurant-reservations' ),
750
  'description' => __( 'Select how late customers can make their booking. (Administrators and Booking Managers are not restricted by this setting.)', 'restaurant-reservations' ),
751
  'blank_option' => false,
752
+ 'options' => array(
753
+ '' => __( 'Up to the last minute', 'restaurant-reservations' ),
754
+ '15' => __( 'At least 15 minutes in advance', 'restaurant-reservations' ),
755
+ '30' => __( 'At least 30 minutes in advance', 'restaurant-reservations' ),
756
+ '45' => __( 'At least 45 minutes in advance', 'restaurant-reservations' ),
757
+ '60' => __( 'At least 1 hour in advance', 'restaurant-reservations' ),
758
+ '240' => __( 'At least 4 hours in advance', 'restaurant-reservations' ),
759
+ '1440' => __( 'At least 24 hours in advance', 'restaurant-reservations' ),
760
+ 'same_day' => __( 'Block same-day bookings', 'restaurant-reservations' ),
 
761
  )
762
  )
763
  );
965
  )
966
  );
967
 
 
 
 
 
 
 
 
 
 
 
 
968
  $sap->add_section(
969
  'rtb-settings',
970
  array(
1091
  array(
1092
  'id' => 'rtb-privacy',
1093
  'title' => __( 'Privacy', 'restaurant-reservations' ),
1094
+ 'tab' => 'rtb-basic',
 
 
 
 
 
 
 
 
 
 
 
1095
  )
1096
  );
1097
 
1102
  array(
1103
  'id' => 'require-consent',
1104
  'title' => __( 'Require Consent', 'restaurant-reservations' ),
1105
+ 'description' => __( 'Require customers to consent to the collection of their details when making a booking. This may be required to comply with privacy laws in your country.', 'restaurant-reservations' )
1106
  )
1107
  );
1108
 
1342
  'title' => __( 'Max Reservations', 'restaurant-reservations' ),
1343
  'description' => __( 'How many reservations, if enabled above, should be allowed at the same time? Set dining block length setting above to change how long a meal typically lasts.', 'restaurant-reservations' ),
1344
  'min_value' => 1,
1345
+ 'max_value' => 100,
1346
  'increment' => 1
1347
  )
1348
  );
1354
  array(
1355
  'id' => 'rtb-max-people-count',
1356
  'title' => __( 'Max People', 'restaurant-reservations' ),
1357
+ 'description' => __( 'How many people, if enabled above, should be allowed to be present in the restaurant at the same time? Set dining block length setting above to change how long a meal typically lasts. Will be ignored if max reservations is set.', 'restaurant-reservations' ),
1358
  'min_value' => 1,
1359
+ 'max_value' => 100,
1360
  'increment' => 1
1361
  )
1362
  );
1370
  'title' => __( 'Automatically Confirm Below Reservation Number', 'restaurant-reservations' ),
1371
  'description' => __( 'Set a maximum number of reservations at one time below which all bookings will be automatically confirmed.', 'restaurant-reservations' ),
1372
  'min_value' => 1,
1373
+ 'max_value' => 100,
1374
  'increment' => 1
1375
  )
1376
  );
1384
  'title' => __( 'Automatically Confirm Below Seats Number', 'restaurant-reservations' ),
1385
  'description' => __( 'Set a maximum number of seats at one time below which all bookings will be automatically confirmed.', 'restaurant-reservations' ),
1386
  'min_value' => 1,
1387
+ 'max_value' => 400,
1388
  'increment' => 1
1389
  )
1390
  );
2103
  array(
2104
  'id' => 'rtb-deposit-amount',
2105
  'title' => __( 'Deposit Amount', 'restaurant-reservations' ),
2106
+ 'description' => __( 'What deposit amount is required (either per reservation or per guest, depending on the setting above).', 'restaurant-reservations' )
2107
  )
2108
  );
2109
  $sap->add_setting(
2153
  $payment_permissions
2154
  )
2155
  );
 
 
 
 
 
 
 
 
 
 
2156
  $sap->add_setting(
2157
  'rtb-settings',
2158
  'rtb-stripe-payment',
2164
  'placeholder' => $this->defaults['rtb-stripe-currency-symbol']
2165
  )
2166
  );
 
 
 
 
 
 
 
 
 
 
2167
  $sap->add_setting(
2168
  'rtb-settings',
2169
  'rtb-stripe-payment',
2804
  ),
2805
 
2806
  // Contact details fieldset
2807
+ 'contact' => array(
2808
  'legend' => __( 'Contact Details', 'restaurant-reservations' ),
2809
  'fields' => array(
2810
  'name' => array(
2884
  'required' => $require_table,
2885
  'order' => 999
2886
  );
 
 
2887
  }
2888
 
2889
  return apply_filters( 'rtb_booking_form_fields', $fields, $request, $args );
2936
  '{site_name}' => __( 'The name of this website', 'restaurant-reservations' ),
2937
  '{site_link}' => __( 'A link to this website', 'restaurant-reservations' ),
2938
  '{current_time}' => __( 'Current date and time', 'restaurant-reservations' ),
 
2939
  )
2940
  );
2941
 
includes/WP_List_Table.BookingsTable.class.php CHANGED
@@ -58,15 +58,6 @@ class rtbBookingsTable extends WP_List_Table {
58
  public $filter_start_date = null;
59
  public $filter_end_date = null;
60
 
61
- /**
62
- * Current time filters
63
- *
64
- * @var string
65
- * @since 2.2.0
66
- */
67
- public $filter_start_time = null;
68
- public $filter_end_time = null;
69
-
70
  /**
71
  * Current location filter
72
  *
@@ -145,7 +136,7 @@ class rtbBookingsTable extends WP_List_Table {
145
  $this->base_url = admin_url( 'admin.php?page=' . RTB_BOOKING_POST_TYPE );
146
 
147
  // Add default items to the details column if they've been hidden
148
- add_filter( 'rtb_bookings_table_column_details', array( $this, 'add_details_column_items' ), 10, 2 );
149
  }
150
 
151
  /**
@@ -155,19 +146,15 @@ class rtbBookingsTable extends WP_List_Table {
155
  *
156
  * @since 0.0.1
157
  */
158
- public function set_date_filter( $start_date = null, $end_date = null, $start_time = null, $end_time = null ) {
159
 
160
  if ( !empty( $_GET['action'] ) && $_GET['action'] == 'clear_date_filters' ) {
161
- $this->filter_start_date = null;
162
- $this->filter_end_date = null;
163
- $this->filter_start_time = null;
164
- $this->filter_end_time = null;
165
  }
166
 
167
- $this->filter_start_date = $start_date;
168
- $this->filter_end_date = $end_date;
169
- $this->filter_start_time = $start_time;
170
- $this->filter_end_time = $end_time;
171
 
172
  if ( $start_date === null ) {
173
  $this->filter_start_date = !empty( $_GET['start_date'] ) ? sanitize_text_field( $_GET['start_date'] ) : null;
@@ -178,16 +165,6 @@ class rtbBookingsTable extends WP_List_Table {
178
  $this->filter_end_date = !empty( $_GET['end_date'] ) ? sanitize_text_field( $_GET['end_date'] ) : null;
179
  $this->filter_end_date = !empty( $_POST['end_date'] ) ? sanitize_text_field( $_POST['end_date'] ) : $this->filter_end_date;
180
  }
181
-
182
- if ( $start_time === null ) {
183
- $this->filter_start_time = !empty( $_GET['start_time'] ) ? sanitize_text_field( $_GET['start_time'] ) : null;
184
- $this->filter_start_time = !empty( $_POST['start_time'] ) ? sanitize_text_field( $_POST['start_time'] ) : $this->filter_start_time;
185
- }
186
-
187
- if ( $end_time === null ) {
188
- $this->filter_end_time = !empty( $_GET['end_time'] ) ? sanitize_text_field( $_GET['end_time'] ) : null;
189
- $this->filter_end_time = !empty( $_POST['end_time'] ) ? sanitize_text_field( $_POST['end_time'] ) : $this->filter_end_time;
190
- }
191
  }
192
 
193
  /**
@@ -222,14 +199,6 @@ class rtbBookingsTable extends WP_List_Table {
222
  $this->query_string = add_query_arg( array( 'end_date' => $this->filter_end_date ), $this->query_string );
223
  }
224
 
225
- if ( $this->filter_start_time !== null ) {
226
- $this->query_string = add_query_arg( array( 'start_time' => $this->filter_start_time ), $this->query_string );
227
- }
228
-
229
- if ( $this->filter_end_time !== null ) {
230
- $this->query_string = add_query_arg( array( 'end_time' => $this->filter_end_time ), $this->query_string );
231
- }
232
-
233
  $this->filter_location = ! isset( $_GET['location'] ) ? 0 : intval( $_GET['location'] );
234
  $this->filter_location = ! isset( $_POST['location'] ) ? $this->filter_location : intval( $_POST['location'] );
235
  $this->query_string = remove_query_arg( 'location', $this->query_string );
@@ -271,7 +240,7 @@ class rtbBookingsTable extends WP_List_Table {
271
  $views['date'] = '<span class="date-filter-range current">' . $this->get_current_date_range() . '</span>';
272
  $views['date'] .= '<a id="rtb-date-filter-link" href="#"><span class="dashicons dashicons-calendar"></span> <span class="rtb-date-filter-label">Change date range</span></a>';
273
  } else {
274
- $views['date'] = '<a id="rtb-date-filter-link" href="#">' . esc_html__( 'Specific Date(s)/Time', 'restaurant-reservations' ) . '</a>';
275
  }
276
 
277
  $views = apply_filters( 'rtb_bookings_table_views_date_range', $views );
@@ -283,18 +252,12 @@ class rtbBookingsTable extends WP_List_Table {
283
  </ul>
284
 
285
  <div class="date-filters">
286
- <div class="rtb-admin-bookings-filters-start">
287
- <label for="start-date" class="screen-reader-text"><?php _e( 'Start Date:', 'restaurant-reservations' ); ?></label>
288
- <input type="text" id="start-date" name="start_date" class="datepicker" value="<?php echo esc_attr( $this->filter_start_date ); ?>" placeholder="<?php _e( 'Start Date', 'restaurant-reservations' ); ?>" />
289
- <input type="text" id="start-time" name="start_time" class="timepicker" value="<?php echo esc_attr( $this->filter_start_time ); ?>" placeholder="<?php _e( 'Start Time', 'restaurant-reservations' ); ?>" />
290
- </div>
291
- <div class="rtb-admin-bookings-filters-end">
292
- <label for="end-date" class="screen-reader-text"><?php _e( 'End Date:', 'restaurant-reservations' ); ?></label>
293
- <input type="text" id="end-date" name="end_date" class="datepicker" value="<?php echo esc_attr( $this->filter_end_date ); ?>" placeholder="<?php _e( 'End Date', 'restaurant-reservations' ); ?>" />
294
- <input type="text" id="end-time" name="end_time" class="timepicker" value="<?php echo esc_attr( $this->filter_end_time ); ?>" placeholder="<?php _e( 'End Time', 'restaurant-reservations' ); ?>" />
295
- </div>
296
  <input type="submit" class="button button-secondary" value="<?php _e( 'Apply', 'restaurant-reservations' ); ?>"/>
297
- <?php if( !empty( $this->filter_start_date ) || !empty( $this->filter_end_date ) || !empty( $this->filter_start_time ) || !empty( $this->filter_end_time ) ) : ?>
298
  <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'clear_date_filters' ) ) ); ?>" class="button button-secondary"><?php _e( 'Clear Filter', 'restaurant-reservations' ); ?></a>
299
  <?php endif; ?>
300
  </div>
@@ -318,7 +281,6 @@ class rtbBookingsTable extends WP_List_Table {
318
  $views = array(
319
  'all' => sprintf( '<a href="%s"%s>%s</a>', esc_url( remove_query_arg( array( 'status', 'paged' ), $this->query_string ) ), $current === 'all' || $current == '' ? ' class="current"' : '', __( 'All', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['total'] . ')</span>' ),
320
  'pending' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'pending', 'paged' => FALSE ), $this->query_string ) ), $current === 'pending' ? ' class="current"' : '', __( 'Pending', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['pending'] . ')</span>' ),
321
- 'payment_pending' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'payment_pending', 'paged' => FALSE ), $this->query_string ) ), $current === 'payment_pending' ? ' class="current"' : '', __( 'Payment Pending', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['payment_pending'] . ')</span>' ),
322
  'confirmed' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'confirmed', 'paged' => FALSE ), $this->query_string ) ), $current === 'confirmed' ? ' class="current"' : '', __( 'Confirmed', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['confirmed'] . ')</span>' ),
323
  'closed' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'closed', 'paged' => FALSE ), $this->query_string ) ), $current === 'closed' ? ' class="current"' : '', __( 'Closed', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['closed'] . ')</span>' ),
324
  'trash' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'trash', 'paged' => FALSE ), $this->query_string ) ), $current === 'trash' ? ' class="current"' : '', __( 'Trash', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['trash'] . ')</span>' ),
@@ -336,8 +298,8 @@ class rtbBookingsTable extends WP_List_Table {
336
  * @since 0.0.1
337
  */
338
  public function single_row( $item ) {
339
- static $row_alternate_class = 'alternate';
340
- $row_alternate_class = ( $row_alternate_class == 'alternate' ? '' : 'alternate' );
341
 
342
  $row_classes = array( esc_attr( $item->post_status ) );
343
 
@@ -440,8 +402,7 @@ class rtbBookingsTable extends WP_List_Table {
440
  $columns = array(
441
  'id' => array( 'ID', true ),
442
  'date' => array( 'date', true ),
443
- 'name' => array( 'title', true ),
444
- 'status' => array( 'status', true ),
445
  );
446
  return apply_filters( 'rtb_bookings_table_sortable_columns', $columns );
447
  }
@@ -621,11 +582,10 @@ class rtbBookingsTable extends WP_List_Table {
621
  */
622
  public function get_bulk_actions() {
623
  $actions = array(
624
- 'delete' => __( 'Delete', 'restaurant-reservations' ),
625
- 'set-status-confirmed' => __( 'Set To Confirmed', 'restaurant-reservations' ),
626
- 'set-status-pending' => __( 'Set To Pending Review', 'restaurant-reservations' ),
627
- 'set-status-closed' => __( 'Set To Closed', 'restaurant-reservations' ),
628
- 'send-email' => __( 'Send Email', 'restaurant-reservations' )
629
  );
630
 
631
  return apply_filters( 'rtb_bookings_table_bulk_actions', $actions );
@@ -798,7 +758,7 @@ class rtbBookingsTable extends WP_List_Table {
798
  ?>
799
 
800
  <div class="tablenav top rtb-top-actions-wrapper">
801
- <?php wp_nonce_field( 'bulk-' . $this->_args['plural'] ); ?>
802
  <?php $this->extra_tablenav( $which ); ?>
803
  </div>
804
 
@@ -916,17 +876,17 @@ class rtbBookingsTable extends WP_List_Table {
916
 
917
  global $wpdb;
918
 
919
- $where = "WHERE p.post_type = '" . RTB_BOOKING_POST_TYPE . "'";
920
 
921
  if ( $this->filter_start_date !== null || $this->filter_end_date !== null ) {
922
 
923
  if ( $this->filter_start_date !== null ) {
924
- $start_date = new DateTime( $this->filter_start_date . ' ' . $this->filter_start_time );
925
  $where .= " AND p.post_date >= '" . $start_date->format( 'Y-m-d H:i:s' ) . "'";
926
  }
927
 
928
  if ( $this->filter_end_date !== null ) {
929
- $end_date = new DateTime( $this->filter_end_date . ' ' . $this->filter_end_time );
930
  $where .= " AND p.post_date <= '" . $end_date->format( 'Y-m-d H:i:s' ) . "'";
931
  }
932
 
@@ -966,6 +926,7 @@ class rtbBookingsTable extends WP_List_Table {
966
  $this->booking_counts[$row['post_status']] = $row['num_posts'];
967
  $this->booking_counts['total'] += $row['num_posts'];
968
  }
 
969
  }
970
 
971
  /**
@@ -980,12 +941,10 @@ class rtbBookingsTable extends WP_List_Table {
980
 
981
  if ( !empty( $this->filter_start_date ) ) {
982
  $args['start_date'] = $this->filter_start_date;
983
- $args['start_time'] = $this->filter_start_time;
984
  }
985
 
986
  if ( !empty( $this->filter_end_date ) ) {
987
  $args['end_date'] = $this->filter_end_date;
988
- $args['end_time'] = $this->filter_end_time;
989
  }
990
 
991
  $query = new rtbQuery( $args, 'bookings-table' );
58
  public $filter_start_date = null;
59
  public $filter_end_date = null;
60
 
 
 
 
 
 
 
 
 
 
61
  /**
62
  * Current location filter
63
  *
136
  $this->base_url = admin_url( 'admin.php?page=' . RTB_BOOKING_POST_TYPE );
137
 
138
  // Add default items to the details column if they've been hidden
139
+ add_filter( 'rtb_bookings_table_column_details', array( $this, 'add_details_column_items' ), 10, 2 );
140
  }
141
 
142
  /**
146
  *
147
  * @since 0.0.1
148
  */
149
+ public function set_date_filter( $start_date = null, $end_date = null) {
150
 
151
  if ( !empty( $_GET['action'] ) && $_GET['action'] == 'clear_date_filters' ) {
152
+ $this->filter_start_date = null;
153
+ $this->filter_end_date = null;
 
 
154
  }
155
 
156
+ $this->filter_start_date = $start_date;
157
+ $this->filter_end_date = $end_date;
 
 
158
 
159
  if ( $start_date === null ) {
160
  $this->filter_start_date = !empty( $_GET['start_date'] ) ? sanitize_text_field( $_GET['start_date'] ) : null;
165
  $this->filter_end_date = !empty( $_GET['end_date'] ) ? sanitize_text_field( $_GET['end_date'] ) : null;
166
  $this->filter_end_date = !empty( $_POST['end_date'] ) ? sanitize_text_field( $_POST['end_date'] ) : $this->filter_end_date;
167
  }
 
 
 
 
 
 
 
 
 
 
168
  }
169
 
170
  /**
199
  $this->query_string = add_query_arg( array( 'end_date' => $this->filter_end_date ), $this->query_string );
200
  }
201
 
 
 
 
 
 
 
 
 
202
  $this->filter_location = ! isset( $_GET['location'] ) ? 0 : intval( $_GET['location'] );
203
  $this->filter_location = ! isset( $_POST['location'] ) ? $this->filter_location : intval( $_POST['location'] );
204
  $this->query_string = remove_query_arg( 'location', $this->query_string );
240
  $views['date'] = '<span class="date-filter-range current">' . $this->get_current_date_range() . '</span>';
241
  $views['date'] .= '<a id="rtb-date-filter-link" href="#"><span class="dashicons dashicons-calendar"></span> <span class="rtb-date-filter-label">Change date range</span></a>';
242
  } else {
243
+ $views['date'] = '<a id="rtb-date-filter-link" href="#">' . esc_html__( 'Between dates', 'restaurant-reservations' ) . '</a>';
244
  }
245
 
246
  $views = apply_filters( 'rtb_bookings_table_views_date_range', $views );
252
  </ul>
253
 
254
  <div class="date-filters">
255
+ <label for="start-date" class="screen-reader-text"><?php _e( 'Start Date:', 'restaurant-reservations' ); ?></label>
256
+ <input type="text" id="start-date" name="start_date" class="datepicker" value="<?php echo esc_attr( $this->filter_start_date ); ?>" placeholder="<?php _e( 'Start Date', 'restaurant-reservations' ); ?>" />
257
+ <label for="end-date" class="screen-reader-text"><?php _e( 'End Date:', 'restaurant-reservations' ); ?></label>
258
+ <input type="text" id="end-date" name="end_date" class="datepicker" value="<?php echo esc_attr( $this->filter_end_date ); ?>" placeholder="<?php _e( 'End Date', 'restaurant-reservations' ); ?>" />
 
 
 
 
 
 
259
  <input type="submit" class="button button-secondary" value="<?php _e( 'Apply', 'restaurant-reservations' ); ?>"/>
260
+ <?php if( !empty( $this->filter_start_date ) || !empty( $this->filter_end_date ) ) : ?>
261
  <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'clear_date_filters' ) ) ); ?>" class="button button-secondary"><?php _e( 'Clear Filter', 'restaurant-reservations' ); ?></a>
262
  <?php endif; ?>
263
  </div>
281
  $views = array(
282
  'all' => sprintf( '<a href="%s"%s>%s</a>', esc_url( remove_query_arg( array( 'status', 'paged' ), $this->query_string ) ), $current === 'all' || $current == '' ? ' class="current"' : '', __( 'All', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['total'] . ')</span>' ),
283
  'pending' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'pending', 'paged' => FALSE ), $this->query_string ) ), $current === 'pending' ? ' class="current"' : '', __( 'Pending', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['pending'] . ')</span>' ),
 
284
  'confirmed' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'confirmed', 'paged' => FALSE ), $this->query_string ) ), $current === 'confirmed' ? ' class="current"' : '', __( 'Confirmed', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['confirmed'] . ')</span>' ),
285
  'closed' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'closed', 'paged' => FALSE ), $this->query_string ) ), $current === 'closed' ? ' class="current"' : '', __( 'Closed', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['closed'] . ')</span>' ),
286
  'trash' => sprintf( '<a href="%s"%s>%s</a>', esc_url( add_query_arg( array( 'status' => 'trash', 'paged' => FALSE ), $this->query_string ) ), $current === 'trash' ? ' class="current"' : '', __( 'Trash', 'restaurant-reservations' ) . ' <span class="count">(' . $this->booking_counts['trash'] . ')</span>' ),
298
  * @since 0.0.1
299
  */
300
  public function single_row( $item ) {
301
+ static $row_alternate_class = '';
302
+ $row_alternate_class = ( $row_alternate_class == '' ? 'alternate' : '' );
303
 
304
  $row_classes = array( esc_attr( $item->post_status ) );
305
 
402
  $columns = array(
403
  'id' => array( 'ID', true ),
404
  'date' => array( 'date', true ),
405
+ 'name' => array( 'title', true )
 
406
  );
407
  return apply_filters( 'rtb_bookings_table_sortable_columns', $columns );
408
  }
582
  */
583
  public function get_bulk_actions() {
584
  $actions = array(
585
+ 'delete' => __( 'Delete', 'restaurant-reservations' ),
586
+ 'set-status-confirmed' => __( 'Set To Confirmed', 'restaurant-reservations' ),
587
+ 'set-status-pending' => __( 'Set To Pending Review', 'restaurant-reservations' ),
588
+ 'set-status-closed' => __( 'Set To Closed', 'restaurant-reservations' )
 
589
  );
590
 
591
  return apply_filters( 'rtb_bookings_table_bulk_actions', $actions );
758
  ?>
759
 
760
  <div class="tablenav top rtb-top-actions-wrapper">
761
+ <?php wp_nonce_field( 'bulk-' . $this->args['plural'] ); ?>
762
  <?php $this->extra_tablenav( $which ); ?>
763
  </div>
764
 
876
 
877
  global $wpdb;
878
 
879
+ $where = "WHERE p.post_type = '" . RTB_BOOKING_POST_TYPE . "' AND p.post_status != 'draft'";
880
 
881
  if ( $this->filter_start_date !== null || $this->filter_end_date !== null ) {
882
 
883
  if ( $this->filter_start_date !== null ) {
884
+ $start_date = new DateTime( $this->filter_start_date );
885
  $where .= " AND p.post_date >= '" . $start_date->format( 'Y-m-d H:i:s' ) . "'";
886
  }
887
 
888
  if ( $this->filter_end_date !== null ) {
889
+ $end_date = new DateTime( $this->filter_end_date );
890
  $where .= " AND p.post_date <= '" . $end_date->format( 'Y-m-d H:i:s' ) . "'";
891
  }
892
 
926
  $this->booking_counts[$row['post_status']] = $row['num_posts'];
927
  $this->booking_counts['total'] += $row['num_posts'];
928
  }
929
+
930
  }
931
 
932
  /**
941
 
942
  if ( !empty( $this->filter_start_date ) ) {
943
  $args['start_date'] = $this->filter_start_date;
 
944
  }
945
 
946
  if ( !empty( $this->filter_end_date ) ) {
947
  $args['end_date'] = $this->filter_end_date;
 
948
  }
949
 
950
  $query = new rtbQuery( $args, 'bookings-table' );
includes/class-designer.php CHANGED
@@ -188,18 +188,6 @@ class etfrtbDesigner {
188
  $this->set( 'lead', get_option( 'etfrtb_admin_notice_headline', $rtb_controller->settings->get_setting( 'subject-admin-notice' ) ) );
189
  $this->set( 'footer_message', get_option( 'etfrtb_admin_notice_footer_message', '' ) );
190
  break;
191
-
192
- case 'reminder-user' :
193
- $this->set( 'template', get_option( 'etfrtb_reminder_user_template', 'conversations.php' ) );
194
- $this->set( 'lead', get_option( 'etfrtb_reminder_user_headline', $rtb_controller->settings->get_setting( 'subject-reminder-user' ) ) );
195
- $this->set( 'footer_message', get_option( 'etfrtb_reminder_user_footer_message', '' ) );
196
- break;
197
-
198
- case 'late-user' :
199
- $this->set( 'template', get_option( 'etfrtb_late_user_template', 'conversations.php' ) );
200
- $this->set( 'lead', get_option( 'etfrtb_late_user_headline', $rtb_controller->settings->get_setting( 'subject-late-user' ) ) );
201
- $this->set( 'footer_message', get_option( 'etfrtb_late_user_footer_message', '' ) );
202
- break;
203
  }
204
 
205
  // Set up default notification templates when no actual notification
@@ -235,16 +223,6 @@ class etfrtbDesigner {
235
  $this->set( 'subject', $rtb_controller->settings->get_setting( 'subject-admin-notice' ) );
236
  $this->set( 'content', __( "This is an example of an Admin Update email. You can send a message to a customer from the list of bookings in your admin panel." ) );
237
  break;
238
-
239
- case 'reminder-user' :
240
- $this->set( 'subject', $rtb_controller->settings->get_setting( 'subject-reminder-user' ) );
241
- $this->set( 'content', wpautop( $rtb_controller->settings->get_setting( 'template-reminder-user' ) ) );
242
- break;
243
-
244
- case 'late-user' :
245
- $this->set( 'subject', $rtb_controller->settings->get_setting( 'subject-late-user' ) );
246
- $this->set( 'content', wpautop( $rtb_controller->settings->get_setting( 'template-late-user' ) ) );
247
- break;
248
  }
249
  }
250
  }
188
  $this->set( 'lead', get_option( 'etfrtb_admin_notice_headline', $rtb_controller->settings->get_setting( 'subject-admin-notice' ) ) );
189
  $this->set( 'footer_message', get_option( 'etfrtb_admin_notice_footer_message', '' ) );
190
  break;
 
 
 
 
 
 
 
 
 
 
 
 
191
  }
192
 
193
  // Set up default notification templates when no actual notification
223
  $this->set( 'subject', $rtb_controller->settings->get_setting( 'subject-admin-notice' ) );
224
  $this->set( 'content', __( "This is an example of an Admin Update email. You can send a message to a customer from the list of bookings in your admin panel." ) );
225
  break;
 
 
 
 
 
 
 
 
 
 
226
  }
227
  }
228
  }
includes/integrations/business-profile.php CHANGED
@@ -257,14 +257,6 @@ function etfrtb_bp_designer_setup( $designer ) {
257
  case 'admin-notice' :
258
  $designer->set( 'show_contact', get_option( 'etfrtb_admin_notice_footer_contact', 1 ) );
259
  break;
260
-
261
- case 'reminder-user' :
262
- $designer->set( 'show_contact', get_option( 'etfrtb_reminder_user_footer_contact', 1 ) );
263
- break;
264
-
265
- case 'late-user' :
266
- $designer->set( 'show_contact', get_option( 'etfrtb_late_user_footer_contact', 1 ) );
267
- break;
268
  }
269
  }
270
  add_filter( 'etfrtb_designer_setup', 'etfrtb_bp_designer_setup' );
@@ -348,28 +340,6 @@ function etfrtb_bp_customize_register( $wp_customize ) {
348
  )
349
  )
350
  );
351
-
352
- $wp_customize->add_control(
353
- 'etfrtb_reminder_user_footer_contact',
354
- array_merge(
355
- $footer_contact_settings,
356
- array(
357
- 'section' => 'etfrtb-content-reminder-user',
358
- 'settings' => 'etfrtb_reminder_user_footer_contact',
359
- )
360
- )
361
- );
362
-
363
- $wp_customize->add_control(
364
- 'etfrtb_late_user_footer_contact',
365
- array_merge(
366
- $footer_contact_settings,
367
- array(
368
- 'section' => 'etfrtb-content-late-user',
369
- 'settings' => 'etfrtb_late_user_footer_contact',
370
- )
371
- )
372
- );
373
  }
374
  add_action( 'customize_register_email_designer' , 'etfrtb_bp_customize_register', 20 );
375
 
@@ -402,7 +372,5 @@ function etfrtb_bp_customize_register_settings( $wp_customize ) {
402
  $wp_customize->add_setting( 'etfrtb_confirmed_user_footer_contact', $footer_contact_settings );
403
  $wp_customize->add_setting( 'etfrtb_rejected_user_footer_contact', $footer_contact_settings );
404
  $wp_customize->add_setting( 'etfrtb_admin_notice_footer_contact', $footer_contact_settings );
405
- $wp_customize->add_setting( 'etfrtb_reminder_user_footer_contact', $footer_contact_settings );
406
- $wp_customize->add_setting( 'etfrtb_late_user_footer_contact', $footer_contact_settings );
407
  }
408
  add_action( 'customize_register', 'etfrtb_bp_customize_register_settings' );
257
  case 'admin-notice' :
258
  $designer->set( 'show_contact', get_option( 'etfrtb_admin_notice_footer_contact', 1 ) );
259
  break;
 
 
 
 
 
 
 
 
260
  }
261
  }
262
  add_filter( 'etfrtb_designer_setup', 'etfrtb_bp_designer_setup' );
340
  )
341
  )
342
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  }
344
  add_action( 'customize_register_email_designer' , 'etfrtb_bp_customize_register', 20 );
345
 
372
  $wp_customize->add_setting( 'etfrtb_confirmed_user_footer_contact', $footer_contact_settings );
373
  $wp_customize->add_setting( 'etfrtb_rejected_user_footer_contact', $footer_contact_settings );
374
  $wp_customize->add_setting( 'etfrtb_admin_notice_footer_contact', $footer_contact_settings );
 
 
375
  }
376
  add_action( 'customize_register', 'etfrtb_bp_customize_register_settings' );
includes/load-customizer.php CHANGED
@@ -375,86 +375,6 @@ function etfrtb_customize_register( $wp_customize ) {
375
  'description' => 'Add a short message to the footer.',
376
  )
377
  );
378
-
379
- // User reminder email
380
- $wp_customize->add_section(
381
- 'etfrtb-content-reminder-user',
382
- array(
383
- 'title' => __( 'User Reminder', 'email-templates-for-rtb' ),
384
- 'description' => __( 'The email a user receives as a reminder of the reservation.', 'email-templates-for-rtb' ),
385
- )
386
- );
387
-
388
- $wp_customize->add_control(
389
- 'etfrtb_reminder_user_template',
390
- array(
391
- 'section' => 'etfrtb-content-reminder-user',
392
- 'settings' => 'etfrtb_reminder_user_template',
393
- 'label' => __( 'Template', 'email-templates-for-rtb' ),
394
- 'type' => 'select',
395
- 'choices' => $template_selection,
396
- )
397
- );
398
-
399
- $wp_customize->add_control(
400
- 'etfrtb_reminder_user_headline',
401
- array(
402
- 'section' => 'etfrtb-content-reminder-user',
403
- 'settings' => 'etfrtb_reminder_user_headline',
404
- 'label' => __( 'Lead Sentence', 'email-templates-for-rtb' ),
405
- 'description' => 'Add an attention-grabbing headline to this email.',
406
- )
407
- );
408
-
409
- $wp_customize->add_control(
410
- 'etfrtb_reminder_user_footer_message',
411
- array(
412
- 'section' => 'etfrtb-content-reminder-user',
413
- 'settings' => 'etfrtb_reminder_user_footer_message',
414
- 'label' => __( 'Footer Message', 'email-templates-for-rtb' ),
415
- 'description' => 'Add a short message to the footer.',
416
- )
417
- );
418
-
419
- // User late email
420
- $wp_customize->add_section(
421
- 'etfrtb-content-late-user',
422
- array(
423
- 'title' => __( 'User Late', 'email-templates-for-rtb' ),
424
- 'description' => __( 'The email a user receives when they are late for their reservation.', 'email-templates-for-rtb' ),
425
- )
426
- );
427
-
428
- $wp_customize->add_control(
429
- 'etfrtb_late_user_template',
430
- array(
431
- 'section' => 'etfrtb-content-late-user',
432
- 'settings' => 'etfrtb_late_user_template',
433
- 'label' => __( 'Template', 'email-templates-for-rtb' ),
434
- 'type' => 'select',
435
- 'choices' => $template_selection,
436
- )
437
- );
438
-
439
- $wp_customize->add_control(
440
- 'etfrtb_late_user_headline',
441
- array(
442
- 'section' => 'etfrtb-content-late-user',
443
- 'settings' => 'etfrtb_late_user_headline',
444
- 'label' => __( 'Lead Sentence', 'email-templates-for-rtb' ),
445
- 'description' => 'Add an attention-grabbing headline to this email.',
446
- )
447
- );
448
-
449
- $wp_customize->add_control(
450
- 'etfrtb_late_user_footer_message',
451
- array(
452
- 'section' => 'etfrtb-content-late-user',
453
- 'settings' => 'etfrtb_late_user_footer_message',
454
- 'label' => __( 'Footer Message', 'email-templates-for-rtb' ),
455
- 'description' => 'Add a short message to the footer.',
456
- )
457
- );
458
  }
459
  }
460
 
@@ -719,74 +639,6 @@ function etfrtb_customize_register_settings( $wp_customize ) {
719
  'autoload' => false,
720
  )
721
  );
722
-
723
- // User Reminder email
724
- $wp_customize->add_setting(
725
- 'etfrtb_reminder_user_template',
726
- array(
727
- 'default' => 'conversations.php',
728
- 'sanitize_callback' => 'sanitize_file_name',
729
- 'capability' => 'manage_options',
730
- 'type' => 'option',
731
- 'autoload' => false,
732
- )
733
- );
734
-
735
- $wp_customize->add_setting(
736
- 'etfrtb_reminder_user_headline',
737
- array(
738
- 'default' => $rtb_controller->settings->get_setting( 'subject-reminder-user' ),
739
- 'sanitize_callback' => 'sanitize_text_field',
740
- 'capability' => 'manage_options',
741
- 'type' => 'option',
742
- 'autoload' => false,
743
- )
744
- );
745
-
746
- $wp_customize->add_setting(
747
- 'etfrtb_reminder_user_footer_message',
748
- array(
749
- 'default' => '',
750
- 'sanitize_callback' => 'sanitize_text_field',
751
- 'capability' => 'manage_options',
752
- 'type' => 'option',
753
- 'autoload' => false,
754
- )
755
- );
756
-
757
- // User Late email
758
- $wp_customize->add_setting(
759
- 'etfrtb_late_user_template',
760
- array(
761
- 'default' => 'conversations.php',
762
- 'sanitize_callback' => 'sanitize_file_name',
763
- 'capability' => 'manage_options',
764
- 'type' => 'option',
765
- 'autoload' => false,
766
- )
767
- );
768
-
769
- $wp_customize->add_setting(
770
- 'etfrtb_late_user_headline',
771
- array(
772
- 'default' => $rtb_controller->settings->get_setting( 'subject-late-user' ),
773
- 'sanitize_callback' => 'sanitize_text_field',
774
- 'capability' => 'manage_options',
775
- 'type' => 'option',
776
- 'autoload' => false,
777
- )
778
- );
779
-
780
- $wp_customize->add_setting(
781
- 'etfrtb_late_user_footer_message',
782
- array(
783
- 'default' => '',
784
- 'sanitize_callback' => 'sanitize_text_field',
785
- 'capability' => 'manage_options',
786
- 'type' => 'option',
787
- 'autoload' => false,
788
- )
789
- );
790
  }
791
  }
792
  add_action( 'customize_register', 'etfrtb_customize_register_settings' );
375
  'description' => 'Add a short message to the footer.',
376
  )
377
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
378
  }
379
  }
380
 
639
  'autoload' => false,
640
  )
641
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
642
  }
643
  }
644
  add_action( 'customize_register', 'etfrtb_customize_register_settings' );
includes/load-notifications.php CHANGED
@@ -52,16 +52,6 @@ function etfrtb_notification_email_template( $notification ) {
52
  $designer->setup( 'admin-notice', $notification );
53
  $notification->message = $designer->render();
54
  break;
55
-
56
- case 'reminder' :
57
- $designer->setup( 'reminder-user', $notification );
58
- $notification->message = $designer->render();
59
- break;
60
-
61
- case 'late_user' :
62
- $designer->setup( 'late-user', $notification );
63
- $notification->message = $designer->render();
64
- break;
65
  }
66
  }
67
  }
52
  $designer->setup( 'admin-notice', $notification );
53
  $notification->message = $designer->render();
54
  break;
 
 
 
 
 
 
 
 
 
 
55
  }
56
  }
57
  }
includes/template-functions.php CHANGED
@@ -102,73 +102,56 @@ function rtb_print_booking_form( $args = array() ) {
102
  <?php $post_status = isset( $_GET['booking_id'] ) ? get_post_status( intval( $_GET['booking_id'] ) ) : $rtb_controller->request->post_status; ?>
103
 
104
  <?php
105
-
106
- $success_redirect_location = '';
107
- $success_message = '';
108
-
109
- if ( 'confirmed' == $post_status ) {
110
- if( '' != $rtb_controller->settings->get_setting('confirmed-redirect-page') ) {
111
- $success_redirect_location = $rtb_controller->settings->get_setting('confirmed-redirect-page');
112
  }
113
- else {
114
- $success_message = $rtb_controller->settings->get_setting('confirmed-message');
 
 
 
 
115
  }
116
  }
117
  else {
118
- if( '' != $rtb_controller->settings->get_setting('pending-redirect-page') ) {
119
- $success_redirect_location = $rtb_controller->settings->get_setting('pending-redirect-page');
120
  }
121
- else {
122
- $success_message = $rtb_controller->settings->get_setting('success-message');
 
 
 
 
123
  }
124
  }
 
125
 
126
- if( ! empty($success_redirect_location) ) {
127
- $success_redirect_location = apply_filters(
128
- 'rtb_booking_submit_success_redirect',
129
- $success_redirect_location,
130
- $post_status,
131
- $rtb_controller->request
132
- );
133
-
134
- header( 'Location:' . $success_redirect_location );
135
- }
136
- else {
137
- ?>
138
- <div class="rtb-message">
139
- <p><?php echo $success_message; ?></p>
140
- </div>
141
- <?php
142
- }
143
-
144
-
145
- elseif ( isset($_POST['stripeToken']) ) :
146
- rtb_process_stripe_payment();
147
-
148
- elseif ( $rtb_controller->request->request_inserted === true or isset($_GET['payment']) ) :
149
- if ( isset($_GET['payment']) && 'rtb-delayed-deposit' != $_GET['payment'] ) { ?>
150
  <div class="rtb-message">
151
  <p><?php printf( __( 'Your reservation deposit payment has failed with the following message "%s" Please contact the site administrator for assistance.', 'restaurant-reservations' ), isset( $_GET['error_code'] ) ? esc_html( urldecode( $_GET['error_code'] ) ) : ' unknown error.' ); ?></p>
152
  </div>
153
- <?php }
154
-
155
- rtb_print_payment_form();
156
-
157
- elseif ( isset($_GET['bookingCancelled']) and $_GET['bookingCancelled'] == 'success') : ?>
158
  <div class="rtb-message">
159
  <p><?php _e( 'Your reservation has been successfully cancelled.', 'restaurant-reservations' ) ?></p>
160
  </div>
161
  <?php else : ?>
162
 
163
  <?php if ( $rtb_controller->settings->get_setting( 'allow-cancellations' ) ) : ?>
164
- <div class="rtb-modification-toggle"><?php _e( 'Want to modify your reservation?', 'restaurant-reservations' ); ?></div>
165
  <div class="rtb-clear"></div>
166
- <form class="rtb-modification-form rtb-hidden">
167
- <div><?php _e( 'Use the form below to modify your reservation', 'restaurant-reservations' ); ?></div>
168
- <label for="rtb-modification-email"><?php _e( 'Email:', 'restaurant-reservations' ); ?></label>
169
- <input type="email" name="rtb_modification_email" />
170
  <div class="rtb-clear"></div>
171
- <div class="rtb-find-reservation-button"><?php _e( 'Find Reservations', 'restaurant-reservations' ); ?></div>
172
  <div class="rtb-clear"></div>
173
  <div class="rtb-bookings-results"></div>
174
  </form>
@@ -260,36 +243,22 @@ function rtb_print_payment_form( $args = array() ) {
260
  $booking_page = get_permalink( $booking_page );
261
  }
262
 
263
- require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
264
- $booking = new rtbBooking();
265
- $booking->load_post( isset( $_GET['booking_id'] ) ? intval( $_GET['booking_id'] ) : $rtb_controller->request->ID );
266
-
267
  if ( $rtb_controller->settings->get_setting( 'rtb-payment-gateway' ) == "paypal" ) { ?>
268
  <form action='https://www.paypal.com/cgi-bin/webscr' method='post' class='standard-form'>
269
  <input type='hidden' name='item_name_1' value='<?php echo substr(get_bloginfo('name'), 0, 100); ?> Reservation Deposit' />
270
- <input type='hidden' name='custom' value='booking_id=<?php echo $booking->ID; ?>' />
271
  <input type='hidden' name='quantity_1' value='1' />
272
- <input type='hidden' name='amount_1' value='<?php echo $booking->calculate_deposit(); ?>' />
273
  <input type='hidden' name='cmd' value='_cart' />
274
  <input type='hidden' name='upload' value='1' />
275
  <input type='hidden' name='business' value='<?php echo $rtb_controller->settings->get_setting( 'rtb-paypal-email' ); ?>' />
276
  <input type='hidden' name='currency_code' value='<?php echo $rtb_controller->settings->get_setting( 'rtb-currency' ); ?>' />
277
  <input type='hidden' name='return' value='<?php $booking_page; ?>' />
278
- <input type='hidden' name='notify_url' value='<?php echo get_site_url(); ?>' />
279
  <input type='submit' class='submit-button' value='Pay via PayPal' />
280
  </form>
281
- <?php
282
- }
283
- else {
284
- $btn_disabled = '';
285
- if( $rtb_controller->settings->get_setting( 'rtb-stripe-sca' ) ) {
286
- $btn_disabled = "disabled='disabled'";
287
- wp_enqueue_script( 'rtb-stripe', 'https://js.stripe.com/v3/', array( 'jquery' ), RTB_VERSION, true );
288
- }
289
- else {
290
- wp_enqueue_script( 'rtb-stripe', 'https://js.stripe.com/v2/', array( 'jquery' ), RTB_VERSION, true );
291
- }
292
-
293
  wp_enqueue_script( 'rtb-stripe-payment', RTB_PLUGIN_URL . '/assets/js/stripe-payment.js', array( 'jquery', 'rtb-stripe' ), RTB_VERSION, true );
294
 
295
  wp_localize_script(
@@ -297,35 +266,23 @@ function rtb_print_payment_form( $args = array() ) {
297
  'rtb_stripe_payment',
298
  array(
299
  'stripe_mode' => $rtb_controller->settings->get_setting( 'rtb-stripe-mode' ),
300
- 'stripe_sca' => $rtb_controller->settings->get_setting( 'rtb-stripe-sca' ),
301
  'live_publishable_key' => $rtb_controller->settings->get_setting( 'rtb-stripe-live-publishable' ),
302
  'test_publishable_key' => $rtb_controller->settings->get_setting( 'rtb-stripe-test-publishable' ),
303
  )
304
  );
305
 
306
- $payment_amount = $rtb_controller->settings->get_setting( 'rtb-currency-symbol-location' ) == 'before'
307
- ? $rtb_controller->settings->get_setting( 'rtb-stripe-currency-symbol' ) . $booking->calculate_deposit()
308
- : $booking->calculate_deposit() . $rtb_controller->settings->get_setting( 'rtb-stripe-currency-symbol' );
309
-
310
- $cc_exp_single_field = null != $rtb_controller->settings->get_setting( 'rtb-expiration-field-single' )
311
- ? "<input type='text' data-stripe='exp_month_year' class='single-masked'>"
312
- : "<input type='text' size='2' data-stripe='exp_month'>
313
- <span> / </span>
314
- <input type='text' size='4' data-stripe='exp_year'>";
315
  ?>
316
-
317
  <h2><?php echo __('Deposit Required: ', 'restaurant-reservations' ) . $payment_amount; ?></h2>
318
 
319
  <div class='payment-errors'></div>
320
 
321
- <form action='#' method='POST' id='stripe-payment-form' data-booking_id='<?php echo $booking->ID ;?>'>
322
-
323
- <?php if( $rtb_controller->settings->get_setting( 'rtb-stripe-sca' ) ) { ?>
324
- <div class='form-row'>
325
- <label><?php _e('Card Detail', 'restaurant-reservations'); ?></label>
326
- <span id="cardElement"></span>
327
- </div>
328
- <?php } else { ?>
329
  <div class='form-row'>
330
  <label><?php _e('Card Number', 'restaurant-reservations'); ?></label>
331
  <input type='text' size='20' autocomplete='off' data-stripe='card_number'/>
@@ -336,17 +293,15 @@ function rtb_print_payment_form( $args = array() ) {
336
  </div>
337
  <div class='form-row'>
338
  <label><?php _e('Expiration (MM/YYYY)', 'restaurant-reservations'); ?></label>
339
- <?php echo $cc_exp_single_field; ?>
 
 
340
  </div>
341
  <input type='hidden' name='action' value='rtb_stripe_booking_payment'/>
342
  <input type='hidden' name='currency' value='<?php echo $rtb_controller->settings->get_setting( 'rtb-currency' ); ?>' data-stripe='currency' />
343
  <input type='hidden' name='payment_amount' value='<?php echo $booking->calculate_deposit(); ?>' />
344
  <input type='hidden' name='booking_id' value='<?php echo $booking->ID; ?>' />
345
- <?php } ?>
346
- <p class="stripe-payment-help-text">
347
- <?php _e( 'Please wait. Do not refresh until the button enables or the page reloads.', 'restaurant-reservations' ); ?>
348
- </p>
349
- <button type='submit' id='stripe-submit' <?php echo $btn_disabled; ?>><?php _e( 'Make Deposit', 'restaurant-reservations'); ?></button>
350
  </form>
351
  <?php }
352
  }
@@ -441,7 +396,7 @@ add_action( 'init', 'rtb_add_ob_start' );
441
  add_action( 'shutdown', 'rtb_flush_ob_end' );
442
 
443
  // If there's an IPN request, add our setup function to potentially handle it
444
- if ( isset($_POST['ipn_track_id']) ) { add_action( 'init', 'rtb_setup_paypal_ipn', 11 ); }
445
 
446
  /**
447
  * Sets up the PayPal IPN process
@@ -467,11 +422,10 @@ function rtb_handle_paypal_ipn() {
467
  // CONFIG: Enable debug mode. This means we'll log requests into 'ipn.log' in the same directory.
468
  // Especially useful if you encounter network errors or other intermittent problems with IPN (validation).
469
  // Set this to 0 once you go live or don't require logging.
470
- $debug = get_option( 'rtb_enable_payment_debugging' );
471
-
472
  // Set to 0 once you're ready to go live
473
- define("RTB_USE_SANDBOX", 0);
474
- define("RTB_LOG_FILE", "ipn.log");
475
  // Read POST data
476
  // reading posted data directly from $_POST causes serialization
477
  // issues with array data in POST. Reading raw POST data from input stream instead.
@@ -498,7 +452,7 @@ function rtb_handle_paypal_ipn() {
498
  }
499
  // Post IPN data back to PayPal to validate the IPN data is genuine
500
  // Without this step anyone can fake IPN data
501
- if(RTB_USE_SANDBOX == true) {
502
  $paypal_url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
503
  } else {
504
  $paypal_url = "https://www.paypal.com/cgi-bin/webscr";
@@ -509,18 +463,13 @@ function rtb_handle_paypal_ipn() {
509
  'body' => $req,
510
  'timeout' => 30
511
  ));
512
-
513
  // Inspect IPN validation result and act accordingly
514
  // Split response headers and payload, a better way for strcmp
515
- $tokens = explode("\r\n\r\n", trim($response['body']));
516
  $res = trim(end($tokens));
517
-
518
- if ( $debug ) {
519
- update_option( 'rtb_debugging', get_option( 'rtb_debugging' ) . print_r( date('[Y-m-d H:i e] '). "IPN response: $res - $req ". PHP_EOL, true ) );
520
- }
521
-
522
  if (strcmp ($res, "VERIFIED") == 0) {
523
-
524
  $paypal_receipt_number = $_POST['txn_id'];
525
  $payment_amount = $_POST['mc_gross'];
526
 
@@ -528,12 +477,12 @@ function rtb_handle_paypal_ipn() {
528
  $booking_id = intval( $custom_vars['booking_id'] );
529
 
530
  require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
531
-
532
  $booking = new rtbBooking();
533
  $booking->load_post( $booking_id );
534
 
535
  if ( ! $booking ) { return; }
536
-
537
  $booking->deposit = sanitize_text_field( $payment_amount );
538
  $booking->receipt_id = sanitize_text_field( $paypal_receipt_number );
539
 
@@ -542,6 +491,10 @@ function rtb_handle_paypal_ipn() {
542
  $booking->insert_post_data();
543
 
544
  do_action( 'rtb_booking_paid', $booking );
 
 
 
 
545
  }
546
  }
547
  } // endif;
@@ -640,8 +593,6 @@ function rtb_print_view_bookings_form( $args = array() ) {
640
 
641
  $query = new WP_Query( $params );
642
 
643
- $display_table = $rtb_controller->permissions->check_permission( 'premium_table_restrictions' ) && $rtb_controller->settings->get_setting( 'enable-tables' );
644
-
645
  ob_start();
646
 
647
  ?>
@@ -675,7 +626,7 @@ function rtb_print_view_bookings_form( $args = array() ) {
675
  </div>
676
  <div class='rtb-view-bookings-form-confirmation-background-div rtb-hidden'></div>
677
 
678
- <table class='rtb-view-bookings-table'>
679
  <thead>
680
  <tr>
681
  <?php if ( $rtb_controller->settings->get_setting( 'view-bookings-arrivals' ) ) {?> <th><?php _e('Arrived', 'restaurant-reservations'); ?></th><?php } ?>
@@ -684,7 +635,6 @@ function rtb_print_view_bookings_form( $args = array() ) {
684
  <th><?php _e('Name', 'restaurant-reservations'); ?></th>
685
  <th><?php _e('Email', 'restaurant-reservations'); ?></th>
686
  <th><?php _e('Phone', 'restaurant-reservations'); ?></th>
687
- <?php if ( $display_table ) {?> <th><?php _e('Table', 'restaurant-reservations'); ?></th><?php } ?>
688
  <th><?php _e('Status', 'restaurant-reservations'); ?></th>
689
  <th><?php _e('Details', 'restaurant-reservations'); ?></th>
690
  </tr>
@@ -704,7 +654,6 @@ function rtb_print_view_bookings_form( $args = array() ) {
704
  <td><?php echo $booking_object->name; ?></td>
705
  <td><?php echo $booking_object->email; ?></td>
706
  <td><?php echo $booking_object->phone; ?></td>
707
- <?php if ( $display_table ) { $table = implode(', ', $booking_object->table ); echo "<td>{$table}</td>"; } ?>
708
  <td><?php echo $rtb_controller->cpts->booking_statuses[$booking_object->post_status]['label'] ?></td>
709
  <td><?php echo apply_filters( 'rtb_bookings_table_column_details', $booking_object->message, $booking_object ); ?></td>
710
  </tr>
@@ -1195,14 +1144,14 @@ if ( !function_exists( 'rtb_add_custom_styling' ) ) {
1195
  if ( $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-background-hover-color') != '' ) { $styling .= '.rtb-booking-form form button:hover { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-background-hover-color') . ' !important; border-color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-background-hover-color') . ' !important; }'; }
1196
  if ( $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-color') != '' ) { $styling .= '.rtb-booking-form form button { color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-color') . ' !important; }'; }
1197
  if ( $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-hover-color') != '' ) { $styling .= '.rtb-booking-form form button:hover { color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-hover-color') . ' !important; }'; }
1198
- if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-color') != '' ) { $styling .= '.rtb-modification-toggle { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-color') . ' !important; }'; }
1199
- if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-hover-color') != '' ) { $styling .= '.rtb-modification-toggle:hover { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-hover-color') . ' !important; }'; }
1200
- if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-color') != '' ) { $styling .= '.rtb-modification-toggle { color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-color') . ' !important; }'; }
1201
- if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-hover-color') != '' ) { $styling .= '.rtb-modification-toggle:hover { color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-hover-color') . ' !important; }'; }
1202
- if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-color') != '' ) { $styling .= '.rtb-find-reservation-button { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-color') . ' !important; }'; }
1203
- if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-hover-color') != '' ) { $styling .= '.rtb-find-reservation-button:hover { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-hover-color') . ' !important; }'; }
1204
- if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-color') != '' ) { $styling .= '.rtb-find-reservation-button { color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-color') . ' !important; }'; }
1205
- if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-hover-color') != '' ) { $styling .= '.rtb-find-reservation-button:hover { color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-hover-color') . ' !important; }'; }
1206
  $styling .= '</style>';
1207
  return $styling;
1208
  }
102
  <?php $post_status = isset( $_GET['booking_id'] ) ? get_post_status( intval( $_GET['booking_id'] ) ) : $rtb_controller->request->post_status; ?>
103
 
104
  <?php
105
+ if ( $post_status == 'confirmed' ) {
106
+ if( $rtb_controller->settings->get_setting('confirmed-redirect-page') != '' ){
107
+ header( 'Location:' . $rtb_controller->settings->get_setting('confirmed-redirect-page') );
 
 
 
 
108
  }
109
+ else{
110
+ ?>
111
+ <div class="rtb-message">
112
+ <p><?php echo $rtb_controller->settings->get_setting('confirmed-message'); ?></p>
113
+ </div>
114
+ <?php
115
  }
116
  }
117
  else {
118
+ if( $rtb_controller->settings->get_setting('pending-redirect-page') != '' ) {
119
+ header( 'Location:' . $rtb_controller->settings->get_setting('pending-redirect-page') );
120
  }
121
+ else{
122
+ ?>
123
+ <div class="rtb-message">
124
+ <p><?php echo $rtb_controller->settings->get_setting('success-message'); ?></p>
125
+ </div>
126
+ <?php
127
  }
128
  }
129
+ ?>
130
 
131
+ <?php elseif ( isset($_POST['stripeToken']) ) : ?>
132
+ <?php rtb_process_stripe_payment(); ?>
133
+ <?php elseif ( $rtb_controller->request->request_inserted === true or isset($_GET['payment']) ) : ?>
134
+ <?php if ( isset($_GET['payment']) ) { ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  <div class="rtb-message">
136
  <p><?php printf( __( 'Your reservation deposit payment has failed with the following message "%s" Please contact the site administrator for assistance.', 'restaurant-reservations' ), isset( $_GET['error_code'] ) ? esc_html( urldecode( $_GET['error_code'] ) ) : ' unknown error.' ); ?></p>
137
  </div>
138
+ <?php } ?>
139
+ <?php rtb_print_payment_form(); ?>
140
+ <?php elseif ( isset($_GET['bookingCancelled']) and $_GET['bookingCancelled'] == 'success') : ?>
 
 
141
  <div class="rtb-message">
142
  <p><?php _e( 'Your reservation has been successfully cancelled.', 'restaurant-reservations' ) ?></p>
143
  </div>
144
  <?php else : ?>
145
 
146
  <?php if ( $rtb_controller->settings->get_setting( 'allow-cancellations' ) ) : ?>
147
+ <div class="rtb-cancellation-toggle"><?php _e( 'Want to cancel your reservation?', 'restaurant-reservations' ); ?></div>
148
  <div class="rtb-clear"></div>
149
+ <form class="rtb-cancellation-form rtb-hidden">
150
+ <div><?php _e( 'Use the form below to cancel your reservation', 'restaurant-reservations' ); ?></div>
151
+ <label for="rtb-cancellation-email"><?php _e( 'Email:', 'restaurant-reservations' ); ?></label>
152
+ <input type="email" name="rtb_cancellation_email" />
153
  <div class="rtb-clear"></div>
154
+ <div class="rtb-cancel-button"><?php _e( 'Find Reservations', 'restaurant-reservations' ); ?></div>
155
  <div class="rtb-clear"></div>
156
  <div class="rtb-bookings-results"></div>
157
  </form>
243
  $booking_page = get_permalink( $booking_page );
244
  }
245
 
 
 
 
 
246
  if ( $rtb_controller->settings->get_setting( 'rtb-payment-gateway' ) == "paypal" ) { ?>
247
  <form action='https://www.paypal.com/cgi-bin/webscr' method='post' class='standard-form'>
248
  <input type='hidden' name='item_name_1' value='<?php echo substr(get_bloginfo('name'), 0, 100); ?> Reservation Deposit' />
249
+ <input type='hidden' name='custom' value='booking_id=<?php echo $rtb_controller->request->ID; ?>' />
250
  <input type='hidden' name='quantity_1' value='1' />
251
+ <input type='hidden' name='amount_1' value='<?php echo $rtb_controller->request->calculate_deposit(); ?>' />
252
  <input type='hidden' name='cmd' value='_cart' />
253
  <input type='hidden' name='upload' value='1' />
254
  <input type='hidden' name='business' value='<?php echo $rtb_controller->settings->get_setting( 'rtb-paypal-email' ); ?>' />
255
  <input type='hidden' name='currency_code' value='<?php echo $rtb_controller->settings->get_setting( 'rtb-currency' ); ?>' />
256
  <input type='hidden' name='return' value='<?php $booking_page; ?>' />
257
+ <input type='hidden' name='notify_url' value='<?php echo get_site_url(); ?>' />
258
  <input type='submit' class='submit-button' value='Pay via PayPal' />
259
  </form>
260
+ <?php } else {
261
+ wp_enqueue_script( 'rtb-stripe', 'https://js.stripe.com/v2/', array( 'jquery' ), RTB_VERSION, true );
 
 
 
 
 
 
 
 
 
 
262
  wp_enqueue_script( 'rtb-stripe-payment', RTB_PLUGIN_URL . '/assets/js/stripe-payment.js', array( 'jquery', 'rtb-stripe' ), RTB_VERSION, true );
263
 
264
  wp_localize_script(
266
  'rtb_stripe_payment',
267
  array(
268
  'stripe_mode' => $rtb_controller->settings->get_setting( 'rtb-stripe-mode' ),
 
269
  'live_publishable_key' => $rtb_controller->settings->get_setting( 'rtb-stripe-live-publishable' ),
270
  'test_publishable_key' => $rtb_controller->settings->get_setting( 'rtb-stripe-test-publishable' ),
271
  )
272
  );
273
 
274
+ require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
275
+ $booking = new rtbBooking();
276
+ $booking->load_post( isset( $_GET['booking_id'] ) ? intval( $_GET['booking_id'] ) : $rtb_controller->request->ID );
277
+
278
+ $payment_amount = $rtb_controller->settings->get_setting( 'rtb-currency-symbol-location' ) == 'before' ? $rtb_controller->settings->get_setting( 'rtb-stripe-currency-symbol' ) . $booking->calculate_deposit() : $booking->calculate_deposit() . $rtb_controller->settings->get_setting( 'rtb-stripe-currency-symbol' );
 
 
 
 
279
  ?>
280
+
281
  <h2><?php echo __('Deposit Required: ', 'restaurant-reservations' ) . $payment_amount; ?></h2>
282
 
283
  <div class='payment-errors'></div>
284
 
285
+ <form action='#' method='POST' id='stripe-payment-form'>
 
 
 
 
 
 
 
286
  <div class='form-row'>
287
  <label><?php _e('Card Number', 'restaurant-reservations'); ?></label>
288
  <input type='text' size='20' autocomplete='off' data-stripe='card_number'/>
293
  </div>
294
  <div class='form-row'>
295
  <label><?php _e('Expiration (MM/YYYY)', 'restaurant-reservations'); ?></label>
296
+ <input type='text' size='2' data-stripe='exp_month'/>
297
+ <span> / </span>
298
+ <input type='text' size='4' data-stripe='exp_year'/>
299
  </div>
300
  <input type='hidden' name='action' value='rtb_stripe_booking_payment'/>
301
  <input type='hidden' name='currency' value='<?php echo $rtb_controller->settings->get_setting( 'rtb-currency' ); ?>' data-stripe='currency' />
302
  <input type='hidden' name='payment_amount' value='<?php echo $booking->calculate_deposit(); ?>' />
303
  <input type='hidden' name='booking_id' value='<?php echo $booking->ID; ?>' />
304
+ <button type='submit' id='stripe-submit'><?php _e( 'Make Deposit', 'restaurant-reservations'); ?></button>
 
 
 
 
305
  </form>
306
  <?php }
307
  }
396
  add_action( 'shutdown', 'rtb_flush_ob_end' );
397
 
398
  // If there's an IPN request, add our setup function to potentially handle it
399
+ if ( isset($_POST['ipn_track_id']) ) { add_action( 'init', 'rtb_setup_paypal_ipn', 1); }
400
 
401
  /**
402
  * Sets up the PayPal IPN process
422
  // CONFIG: Enable debug mode. This means we'll log requests into 'ipn.log' in the same directory.
423
  // Especially useful if you encounter network errors or other intermittent problems with IPN (validation).
424
  // Set this to 0 once you go live or don't require logging.
425
+ define("DEBUG", 0);
 
426
  // Set to 0 once you're ready to go live
427
+ define("USE_SANDBOX", 0);
428
+ define("LOG_FILE", "./ipn.log");
429
  // Read POST data
430
  // reading posted data directly from $_POST causes serialization
431
  // issues with array data in POST. Reading raw POST data from input stream instead.
452
  }
453
  // Post IPN data back to PayPal to validate the IPN data is genuine
454
  // Without this step anyone can fake IPN data
455
+ if(USE_SANDBOX == true) {
456
  $paypal_url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
457
  } else {
458
  $paypal_url = "https://www.paypal.com/cgi-bin/webscr";
463
  'body' => $req,
464
  'timeout' => 30
465
  ));
466
+
467
  // Inspect IPN validation result and act accordingly
468
  // Split response headers and payload, a better way for strcmp
469
+ $tokens = explode("\r\n\r\n", trim($response['body']));
470
  $res = trim(end($tokens));
 
 
 
 
 
471
  if (strcmp ($res, "VERIFIED") == 0) {
472
+
473
  $paypal_receipt_number = $_POST['txn_id'];
474
  $payment_amount = $_POST['mc_gross'];
475
 
477
  $booking_id = intval( $custom_vars['booking_id'] );
478
 
479
  require_once( RTB_PLUGIN_DIR . '/includes/Booking.class.php' );
480
+
481
  $booking = new rtbBooking();
482
  $booking->load_post( $booking_id );
483
 
484
  if ( ! $booking ) { return; }
485
+
486
  $booking->deposit = sanitize_text_field( $payment_amount );
487
  $booking->receipt_id = sanitize_text_field( $paypal_receipt_number );
488
 
491
  $booking->insert_post_data();
492
 
493
  do_action( 'rtb_booking_paid', $booking );
494
+
495
+ if ( DEBUG == true ) {
496
+ error_log(date('[Y-m-d H:i e] '). "Verified IPN: $req ". PHP_EOL, 3, LOG_FILE);
497
+ }
498
  }
499
  }
500
  } // endif;
593
 
594
  $query = new WP_Query( $params );
595
 
 
 
596
  ob_start();
597
 
598
  ?>
626
  </div>
627
  <div class='rtb-view-bookings-form-confirmation-background-div rtb-hidden'></div>
628
 
629
+ <table class='rtb-view-bookings-table'>
630
  <thead>
631
  <tr>
632
  <?php if ( $rtb_controller->settings->get_setting( 'view-bookings-arrivals' ) ) {?> <th><?php _e('Arrived', 'restaurant-reservations'); ?></th><?php } ?>
635
  <th><?php _e('Name', 'restaurant-reservations'); ?></th>
636
  <th><?php _e('Email', 'restaurant-reservations'); ?></th>
637
  <th><?php _e('Phone', 'restaurant-reservations'); ?></th>
 
638
  <th><?php _e('Status', 'restaurant-reservations'); ?></th>
639
  <th><?php _e('Details', 'restaurant-reservations'); ?></th>
640
  </tr>
654
  <td><?php echo $booking_object->name; ?></td>
655
  <td><?php echo $booking_object->email; ?></td>
656
  <td><?php echo $booking_object->phone; ?></td>
 
657
  <td><?php echo $rtb_controller->cpts->booking_statuses[$booking_object->post_status]['label'] ?></td>
658
  <td><?php echo apply_filters( 'rtb_bookings_table_column_details', $booking_object->message, $booking_object ); ?></td>
659
  </tr>
1144
  if ( $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-background-hover-color') != '' ) { $styling .= '.rtb-booking-form form button:hover { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-background-hover-color') . ' !important; border-color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-background-hover-color') . ' !important; }'; }
1145
  if ( $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-color') != '' ) { $styling .= '.rtb-booking-form form button { color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-color') . ' !important; }'; }
1146
  if ( $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-hover-color') != '' ) { $styling .= '.rtb-booking-form form button:hover { color: ' . $rtb_controller->settings->get_setting('rtb-styling-request-booking-button-text-hover-color') . ' !important; }'; }
1147
+ if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-color') != '' ) { $styling .= '.rtb-cancellation-toggle { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-color') . ' !important; }'; }
1148
+ if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-hover-color') != '' ) { $styling .= '.rtb-cancellation-toggle:hover { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-background-hover-color') . ' !important; }'; }
1149
+ if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-color') != '' ) { $styling .= '.rtb-cancellation-toggle { color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-color') . ' !important; }'; }
1150
+ if ( $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-hover-color') != '' ) { $styling .= '.rtb-cancellation-toggle:hover { color: ' . $rtb_controller->settings->get_setting('rtb-styling-cancel-button-text-hover-color') . ' !important; }'; }
1151
+ if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-color') != '' ) { $styling .= '.rtb-cancel-button { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-color') . ' !important; }'; }
1152
+ if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-hover-color') != '' ) { $styling .= '.rtb-cancel-button:hover { background-color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-background-hover-color') . ' !important; }'; }
1153
+ if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-color') != '' ) { $styling .= '.rtb-cancel-button { color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-color') . ' !important; }'; }
1154
+ if ( $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-hover-color') != '' ) { $styling .= '.rtb-cancel-button:hover { color: ' . $rtb_controller->settings->get_setting('rtb-styling-find-reservations-button-text-hover-color') . ' !important; }'; }
1155
  $styling .= '</style>';
1156
  return $styling;
1157
  }
languages/restaurant-reservations-nl_NL.mo CHANGED
Binary file
languages/restaurant-reservations-nl_NL.po CHANGED
@@ -3,7 +3,7 @@ msgstr ""
3
  "Project-Id-Version: Restaurant Reservations\n"
4
  "Report-Msgid-Bugs-To: https://themeofthecrop.com\n"
5
  "POT-Creation-Date: 2017-06-24 21:55+0200\n"
6
- "PO-Revision-Date: 2021-04-01 13:31-0400\n"
7
  "Last-Translator: Dennis Heeren <dennis.heeren+po@gmail.com>\n"
8
  "Language-Team: \n"
9
  "Language: nl\n"
@@ -18,7 +18,7 @@ msgstr ""
18
  "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
19
  "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
20
  "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
21
- "X-Generator: Poedit 2.4.1\n"
22
  "X-Loco-Target-Locale: nl_NL\n"
23
  "X-Poedit-SearchPath-0: ..\n"
24
 
@@ -1087,7 +1087,7 @@ msgstr "Aantal"
1087
 
1088
  #: includes/Settings.class.php:871
1089
  msgid "Contact Details"
1090
- msgstr "Contactgegevens"
1091
 
1092
  #: includes/Settings.class.php:874
1093
  #: includes/WP_List_Table.BookingsTable.class.php:360
3
  "Project-Id-Version: Restaurant Reservations\n"
4
  "Report-Msgid-Bugs-To: https://themeofthecrop.com\n"
5
  "POT-Creation-Date: 2017-06-24 21:55+0200\n"
6
+ "PO-Revision-Date: 2017-06-25 15:39+0200\n"
7
  "Last-Translator: Dennis Heeren <dennis.heeren+po@gmail.com>\n"
8
  "Language-Team: \n"
9
  "Language: nl\n"
18
  "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
19
  "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
20
  "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
21
+ "X-Generator: Poedit 2.0.2\n"
22
  "X-Loco-Target-Locale: nl_NL\n"
23
  "X-Poedit-SearchPath-0: ..\n"
24
 
1087
 
1088
  #: includes/Settings.class.php:871
1089
  msgid "Contact Details"
1090
+ msgstr "Contact Gegevens"
1091
 
1092
  #: includes/Settings.class.php:874
1093
  #: includes/WP_List_Table.BookingsTable.class.php:360
languages/restaurant-reservations.pot CHANGED
@@ -1,2946 +1,1311 @@
1
- #, fuzzy
 
2
  msgid ""
3
  msgstr ""
4
- "Project-Id-Version: Five Star Restaurant Reservations\n"
5
- "POT-Creation-Date: 2021-06-17 09:19-0400\n"
6
- "PO-Revision-Date: 2020-08-20 11:03-0400\n"
7
- "Last-Translator: \n"
8
- "Language-Team: Five Star Plugins\n"
9
- "Language: en\n"
10
  "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
- "X-Generator: Poedit 2.4.3\n"
14
- "X-Poedit-Basepath: ..\n"
15
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
- "X-Poedit-KeywordsList: __;_e\n"
17
- "X-Poedit-SearchPath-0: .\n"
18
-
19
- #: assets/js/block-booking-form.js:8 includes/Settings.class.php:984
20
- #: includes/WP_Widget.BookingFormWidget.class.php:25
21
- msgid "Booking Form"
22
- msgstr ""
23
-
24
- #: assets/js/block-booking-form.js:31 includes/Export.CSV.class.php:151
25
- #: includes/MailChimp.class.php:106 includes/MultipleLocations.class.php:304
26
- #: includes/MultipleLocations.class.php:408
27
- msgid "Location"
28
- msgstr ""
29
 
30
  #: includes/Addons.class.php:47
31
- msgid "Addons for Restaurant Reservations"
32
- msgstr ""
33
-
34
- #: includes/AdminBookings.class.php:91
35
- msgid "Restaurant Bookings"
36
- msgstr ""
37
-
38
- #: includes/AdminBookings.class.php:92 includes/CustomPostTypes.class.php:54
39
- #: includes/Editor.class.php:181
40
- msgid "Add New"
41
- msgstr ""
42
-
43
- #: includes/AdminBookings.class.php:170 restaurant-reservations.php:356
44
- msgid "Add Booking"
45
- msgstr ""
46
-
47
- #: includes/AdminBookings.class.php:173 includes/AdminBookings.class.php:214
48
- #: includes/AdminBookings.class.php:259 includes/Editor.class.php:448
49
- #: restaurant-reservations.php:412
50
- msgid "Cancel"
51
- msgstr ""
52
-
53
- #: includes/AdminBookings.class.php:194 includes/AdminBookings.class.php:211
54
- #: includes/WP_List_Table.BookingsTable.class.php:485
55
- #: includes/WP_List_Table.BookingsTable.class.php:628
56
- msgid "Send Email"
57
- msgstr ""
58
-
59
- #: includes/AdminBookings.class.php:201
60
- msgid "Subject"
61
- msgstr ""
62
-
63
- #: includes/AdminBookings.class.php:205 includes/Export.CSV.class.php:83
64
- #: includes/MailChimp.class.php:89 includes/Settings.class.php:2882
65
- #: includes/WP_List_Table.BookingsTable.class.php:520
66
- msgid "Message"
67
- msgstr ""
68
-
69
- #: includes/AdminBookings.class.php:256
70
- msgid "Update"
71
- msgstr ""
72
-
73
- #: includes/AdminBookings.class.php:275 includes/AdminBookings.class.php:301
74
- #: includes/AdminBookings.class.php:331 includes/AdminBookings.class.php:344
75
- #: includes/Editor.class.php:481
76
- msgid "Close"
77
- msgstr ""
78
-
79
- #: includes/AdminBookings.class.php:287
80
- #, php-format
81
- msgid "Ban future bookings from the email address %s or the IP address %s?"
82
- msgstr ""
83
-
84
- #: includes/AdminBookings.class.php:319
85
- #, php-format
86
- msgid ""
87
- "Delete all booking records related to email address %s? This action can not "
88
- "be undone."
89
- msgstr ""
90
-
91
- #: includes/AdminBookings.class.php:410 includes/Export.CSV.class.php:85
92
- msgid "Booking Status"
93
- msgstr ""
94
-
95
- #: includes/AdminBookings.class.php:418
96
- msgid "Send notifications"
97
- msgstr ""
98
-
99
- #: includes/AdminBookings.class.php:423 includes/Editor.class.php:231
100
- msgid "Learn more"
101
- msgstr ""
102
-
103
- #: includes/AdminBookings.class.php:424
104
- msgid ""
105
- "When adding a booking or changing a booking's status with this form, no "
106
- "email notifications will be sent. Check this option if you want to send "
107
- "email notifications."
108
- msgstr ""
109
-
110
- #: includes/AdminBookings.class.php:478 includes/AdminBookings.class.php:860
111
- #: includes/Editor.class.php:497
112
- #, php-format
113
- msgid "You have been logged out. Please %slogin again%s."
114
- msgstr ""
115
-
116
- #: includes/AdminBookings.class.php:514
117
- #, php-format
118
- msgid ""
119
- "This booking has been sent to the %sTrash%s where it can not be edited. Set "
120
- "the booking to Pending or Confirmed to edit it."
121
- msgstr ""
122
-
123
- #: includes/AdminBookings.class.php:531
124
- msgid ""
125
- "The booking could not be retrieved. Please reload the page and try again."
126
- msgstr ""
127
-
128
- #: includes/AdminBookings.class.php:622
129
- msgid ""
130
- "Unable to trash this post. Please try again. If you continue to have "
131
- "trouble, please refresh the page."
132
- msgstr ""
133
-
134
- #: includes/AdminBookings.class.php:662
135
- msgid "Please enter a message before sending the email."
136
- msgstr ""
137
-
138
- #: includes/AdminBookings.class.php:671
139
- msgid ""
140
- "The email could not be sent because some critical information was missing."
141
- msgstr ""
142
-
143
- #: includes/AdminBookings.class.php:719
144
- msgid "You must select at least one column to display."
145
- msgstr ""
146
-
147
- #: includes/AdminBookings.class.php:775
148
- msgid "No IP or email address could be found for this ban request."
149
- msgstr ""
150
-
151
- #: includes/AdminBookings.class.php:836
152
- msgid "No email address could be found for this delete request."
153
- msgstr ""
154
-
155
- #: includes/AdminPageSettingLicenseKey.class.php:193
156
- msgid "Invalid"
157
- msgstr ""
158
-
159
- #: includes/Ajax.class.php:79
160
- msgid "The email you entered is not valid."
161
- msgstr ""
162
-
163
- #: includes/Ajax.class.php:124
164
- msgid "No bookings were found for the email address you entered."
165
- msgstr ""
166
-
167
- #: includes/Ajax.class.php:159 includes/Ajax.class.php:168
168
- msgid "No booking matches the information that was sent."
169
- msgstr ""
170
-
171
- #: includes/Ajax.class.php:188
172
- msgid "Unkown error. Please try again"
173
- msgstr ""
174
-
175
- #: includes/Blocks.class.php:62
176
- msgid "Ask the customer to select a location"
177
- msgstr ""
178
-
179
- #: includes/Booking.class.php:224
180
- msgid "Please enter the date you would like to book."
181
- msgstr ""
182
-
183
- #: includes/Booking.class.php:234
184
- msgid ""
185
- "The date you entered is not valid. Please select from one of the dates in "
186
- "the calendar."
187
- msgstr ""
188
-
189
- #: includes/Booking.class.php:245
190
- msgid "Please enter the time you would like to book."
191
- msgstr ""
192
-
193
- #: includes/Booking.class.php:255
194
- msgid ""
195
- "The time you entered is not valid. Please select from one of the times "
196
- "provided."
197
- msgstr ""
198
-
199
- #: includes/Booking.class.php:275
200
- #, php-format
201
- msgid "Sorry, bookings can not be made more than %s days in advance."
202
- msgstr ""
203
-
204
- #: includes/Booking.class.php:286
205
- msgid "Sorry, bookings can not be made in the past."
206
- msgstr ""
207
-
208
- #: includes/Booking.class.php:295
209
- msgid "Sorry, bookings can not be made for the same day."
210
- msgstr ""
211
-
212
- #: includes/Booking.class.php:303
213
- #, php-format
214
- msgid "Sorry, bookings must be made more than %s days in advance."
215
- msgstr ""
216
-
217
- #: includes/Booking.class.php:305
218
- #, php-format
219
- msgid "Sorry, bookings must be made more than %s hours in advance."
220
- msgstr ""
221
-
222
- #: includes/Booking.class.php:307
223
- #, php-format
224
- msgid "Sorry, bookings must be made more than %s minutes in advance."
225
- msgstr ""
226
-
227
- #: includes/Booking.class.php:347
228
- msgid "Sorry, no bookings are being accepted then."
229
- msgstr ""
230
-
231
- #: includes/Booking.class.php:399
232
- msgid "Sorry, no bookings are being accepted on that date."
233
- msgstr ""
234
-
235
- #: includes/Booking.class.php:405
236
- msgid "Sorry, no bookings are being accepted at that time."
237
- msgstr ""
238
-
239
- #: includes/Booking.class.php:427
240
- msgid "Please enter a name for this booking."
241
- msgstr ""
242
-
243
- #: includes/Booking.class.php:437
244
- msgid "Please let us know how many people will be in your party."
245
- msgstr ""
246
-
247
- #: includes/Booking.class.php:447
248
- #, php-format
249
- msgid "We only accept bookings for parties of up to %d people."
250
- msgstr ""
251
-
252
- #: includes/Booking.class.php:455
253
- #, php-format
254
- msgid "We only accept bookings for parties of more than %d people."
255
- msgstr ""
256
-
257
- #: includes/Booking.class.php:466
258
- msgid "Please enter an email address so we can confirm your booking."
259
- msgstr ""
260
-
261
- #: includes/Booking.class.php:472
262
- msgid "Please enter a valid email address so we can confirm your booking."
263
- msgstr ""
264
-
265
- #: includes/Booking.class.php:483
266
- msgid "Please provide a phone number so we can confirm your booking."
267
- msgstr ""
268
-
269
- #: includes/Booking.class.php:496
270
- msgid "Please select a table for your booking."
271
- msgstr ""
272
-
273
- #: includes/Booking.class.php:506
274
- msgid "Please select a valid table for your booking."
275
- msgstr ""
276
-
277
- #: includes/Booking.class.php:516
278
- msgid "Please fill out the reCAPTCHA box before submitting."
279
- msgstr ""
280
-
281
- #: includes/Booking.class.php:538
282
- msgid "Please fill out the reCAPTCHA box again and re-submit."
283
- msgstr ""
284
-
285
- #: includes/Booking.class.php:540
286
- msgid " If you encounter reCAPTCHA error multiple times, please contact us."
287
- msgstr ""
288
-
289
- #: includes/Booking.class.php:574
290
- msgid "Please complete this field to request a booking."
291
- msgstr ""
292
-
293
- #: includes/Booking.class.php:586
294
- msgid ""
295
- "Your booking has been rejected. Please call us if you would like to make a "
296
- "booking."
297
- msgstr ""
298
-
299
- #: includes/Booking.class.php:600
300
- msgid ""
301
- "The maximum number of reservations for that timeslot has been reached. "
302
- "Please select a different timeslot."
303
- msgstr ""
304
-
305
- #: includes/Booking.class.php:609
306
- msgid ""
307
- "With your party, the maximum number of seats for that timeslot would be "
308
- "exceeded. Please select a different timeslot or reduce your party size."
309
- msgstr ""
310
-
311
- #: includes/Booking.class.php:618
312
- msgid ""
313
- "Your booking and personal information exactly matches another booking. If "
314
- "this was not caused by refreshing the page, please call us to make a booking."
315
- msgstr ""
316
-
317
- #: includes/CustomPostTypes.class.php:50 includes/CustomPostTypes.class.php:52
318
- #: includes/CustomPostTypes.class.php:53
319
- #: includes/WP_List_Table.BookingsTable.class.php:122
320
- #: restaurant-reservations.php:318
321
- msgid "Bookings"
322
- msgstr ""
323
-
324
- #: includes/CustomPostTypes.class.php:51
325
- #: includes/WP_List_Table.BookingsTable.class.php:121
326
- msgid "Booking"
327
- msgstr ""
328
-
329
- #: includes/CustomPostTypes.class.php:55
330
- msgid "Add New Booking"
331
- msgstr ""
332
-
333
- #: includes/CustomPostTypes.class.php:56 restaurant-reservations.php:357
334
- msgid "Edit Booking"
335
- msgstr ""
336
-
337
- #: includes/CustomPostTypes.class.php:57
338
- msgid "New Booking"
339
- msgstr ""
340
-
341
- #: includes/CustomPostTypes.class.php:58
342
- msgid "View Booking"
343
- msgstr ""
344
-
345
- #: includes/CustomPostTypes.class.php:59
346
- msgid "Search Bookings"
347
- msgstr ""
348
-
349
- #: includes/CustomPostTypes.class.php:60
350
- msgid "No bookings found"
351
- msgstr ""
352
-
353
- #: includes/CustomPostTypes.class.php:61
354
- msgid "No bookings found in trash"
355
- msgstr ""
356
-
357
- #: includes/CustomPostTypes.class.php:62
358
- msgid "All Bookings"
359
- msgstr ""
360
-
361
- #: includes/CustomPostTypes.class.php:88 includes/CustomPostTypes.class.php:89
362
- #: includes/Field.Controller.class.php:147
363
- msgid "Field"
364
- msgstr ""
365
-
366
- #: includes/CustomPostTypes.class.php:90 includes/CustomPostTypes.class.php:91
367
- msgid "Fields"
368
- msgstr ""
369
-
370
- #: includes/CustomPostTypes.class.php:92 includes/Editor.class.php:105
371
- #: includes/Editor.class.php:374 includes/Editor.class.php:445
372
- #: includes/Editor.class.php:461
373
- msgid "Add Field"
374
- msgstr ""
375
-
376
- #: includes/CustomPostTypes.class.php:93
377
- msgid "Add New Field"
378
- msgstr ""
379
-
380
- #: includes/CustomPostTypes.class.php:94 includes/Editor.class.php:106
381
- msgid "Edit Field"
382
- msgstr ""
383
-
384
- #: includes/CustomPostTypes.class.php:95
385
- msgid "New Field"
386
- msgstr ""
387
-
388
- #: includes/CustomPostTypes.class.php:96
389
- msgid "View Field"
390
- msgstr ""
391
-
392
- #: includes/CustomPostTypes.class.php:97
393
- msgid "Search Fields"
394
- msgstr ""
395
-
396
- #: includes/CustomPostTypes.class.php:98
397
- msgid "No fields found"
398
- msgstr ""
399
-
400
- #: includes/CustomPostTypes.class.php:99
401
- msgid "No fields found in trash"
402
- msgstr ""
403
-
404
- #: includes/CustomPostTypes.class.php:100
405
- msgid "All Fields"
406
- msgstr ""
407
-
408
- #: includes/Dashboard.class.php:86
409
- #, php-format
410
- msgid ""
411
- "<a href=\"%s\" target=\"_blank\">Visit our website</a> to learn how to "
412
- "upgrade to premium."
413
- msgstr ""
414
-
415
- #: includes/Dashboard.class.php:94
416
- msgid ""
417
- "Thanks for being a premium user! <strong>If you're looking to upgrade to our "
418
- "ultimate version, enter your new product key below.</strong>"
419
- msgstr ""
420
-
421
- #: includes/Dashboard.class.php:137
422
- msgid "Bookings Summary"
423
- msgstr ""
424
-
425
- #: includes/Dashboard.class.php:142 includes/Export.CSV.class.php:78
426
- #: includes/Settings.class.php:2826
427
- #: includes/WP_List_Table.BookingsTable.class.php:403
428
- msgid "Date"
429
- msgstr ""
430
-
431
- #: includes/Dashboard.class.php:143 includes/Export.CSV.class.php:80
432
- #: includes/Settings.class.php:2838
433
- #: includes/WP_List_Table.BookingsTable.class.php:405
434
- #: includes/template-functions.php:683
435
- msgid "Party"
436
- msgstr ""
437
-
438
- #: includes/Dashboard.class.php:144 includes/Export.CSV.class.php:79
439
- #: includes/MailChimp.class.php:86 includes/Settings.class.php:2854
440
- #: includes/WP_List_Table.BookingsTable.class.php:406
441
- #: includes/template-functions.php:684
442
- msgid "Name"
443
- msgstr ""
444
-
445
- #: includes/Dashboard.class.php:145
446
- #: includes/WP_List_Table.BookingsTable.class.php:409
447
- #: includes/template-functions.php:688
448
- msgid "Status"
449
- msgstr ""
450
-
451
- #: includes/Dashboard.class.php:157
452
- msgid ""
453
- "No bookings to display yet. Create a booking for it to be displayed here."
454
- msgstr ""
455
-
456
- #: includes/Dashboard.class.php:260
457
- #, php-format
458
- msgid ""
459
- "<a href=\"%s\" target=\"_blank\">Visit our website</a> to learn how to get a "
460
- "free 7-day trial of the premium plugin."
461
- msgstr ""
462
-
463
- #: includes/Dashboard.class.php:264
464
- msgid "Select version to trial"
465
- msgstr ""
466
-
467
- #: includes/Dashboard.class.php:265
468
- msgid "Premium"
469
- msgstr ""
470
-
471
- #: includes/Dashboard.class.php:266
472
- msgid "Ultimate"
473
- msgstr ""
474
-
475
- #: includes/Dashboard.class.php:267
476
- msgid "SMS messaging will not work in the ultimate version trial."
477
- msgstr ""
478
-
479
- #: includes/Dashboard.class.php:268
480
- msgid "Select"
481
- msgstr ""
482
-
483
- #: includes/DeactivationSurvey.class.php:58
484
- msgid "Quick Feedback"
485
- msgstr ""
486
-
487
- #: includes/DeactivationSurvey.class.php:59
488
- msgid ""
489
- "If you have a moment, please share why you are deactivating Five-Star "
490
- "Restaurant Reservations:"
491
- msgstr ""
492
-
493
- #: includes/DeactivationSurvey.class.php:74
494
- msgid "Submit and Deactivate"
495
- msgstr ""
496
-
497
- #: includes/DeactivationSurvey.class.php:75
498
- msgid "Skip and Deactivate"
499
- msgstr ""
500
-
501
- #: includes/Editor.class.php:104 includes/Editor.class.php:304
502
- msgid "Save"
503
- msgstr ""
504
-
505
- #: includes/Editor.class.php:107
506
- msgid "Save Field"
507
- msgstr ""
508
-
509
- #: includes/Editor.class.php:108 includes/Editor.class.php:469
510
- msgid "Add Fieldset"
511
- msgstr ""
512
-
513
- #: includes/Editor.class.php:109
514
- msgid "Save Fieldset"
515
- msgstr ""
516
-
517
- #: includes/Editor.class.php:110
518
- msgid "Please enter a label for this field."
519
- msgstr ""
520
-
521
- #: includes/Editor.class.php:111
522
- msgid "To add an Option field you must add at least one option below."
523
- msgstr ""
524
-
525
- #: includes/Editor.class.php:112
526
- msgid ""
527
- "This fieldset can not be deleted until all of its attached fields are "
528
- "removed or assigned to another fieldset."
529
- msgstr ""
530
-
531
- #: includes/Editor.class.php:113
532
- msgid ""
533
- "Are you sure you want to reset the booking form? All of your changes and "
534
- "custom fields will be removed. This action can not be undone."
535
- msgstr ""
536
-
537
- #: includes/Editor.class.php:114 restaurant-reservations.php:358
538
- msgid ""
539
- "An unspecified error occurred. Please try again. If the problem persists, "
540
- "try logging out and logging back in."
541
- msgstr ""
542
-
543
- #: includes/Editor.class.php:134
544
- msgid "Custom Fields Editor"
545
- msgstr ""
546
-
547
- #: includes/Editor.class.php:188
548
- msgid "Disabled Fields"
549
- msgstr ""
550
-
551
- #: includes/Editor.class.php:219
552
- msgid "You have not disabled any default fields yet."
553
- msgstr ""
554
-
555
- #: includes/Editor.class.php:228
556
- msgid "Revert to default"
557
- msgstr ""
558
-
559
- #: includes/Editor.class.php:234
560
- msgid ""
561
- "All of your changes and custom fields will be discarded if you revert to "
562
- "default. This is not advised unless you want to remove all of your changes "
563
- "and restore the default booking form."
564
- msgstr ""
565
-
566
- #: includes/Editor.class.php:277
567
- msgid "Edit title"
568
- msgstr ""
569
-
570
- #: includes/Editor.class.php:282
571
- msgid "Enable field"
572
- msgstr ""
573
-
574
- #: includes/Editor.class.php:287
575
- msgid "Edit field"
576
- msgstr ""
577
-
578
- #: includes/Editor.class.php:291
579
- msgid "Delete field"
580
- msgstr ""
581
-
582
- #: includes/Editor.class.php:343 includes/Editor.class.php:410
583
- msgid "Label"
584
- msgstr ""
585
-
586
- #: includes/Editor.class.php:379
587
- msgid "Field Type"
588
- msgstr ""
589
-
590
- #: includes/Editor.class.php:418 includes/Field.Controller.class.php:183
591
- msgid "Options"
592
- msgstr ""
593
-
594
- #: includes/Editor.class.php:424
595
- msgid "Add"
596
- msgstr ""
597
-
598
- #: includes/Editor.class.php:439
599
- msgid "Required"
600
- msgstr ""
601
-
602
- #: includes/Editor.class.php:464
603
- msgid "Fields prompt the user to enter information or select from options."
604
- msgstr ""
605
-
606
- #: includes/Editor.class.php:472
607
- msgid "Fieldsets group other fields under a common label."
608
- msgstr ""
609
-
610
- #: includes/Editor.class.php:520
611
- msgid "No field data was received with your request."
612
- msgstr ""
613
-
614
- #: includes/Editor.class.php:530
615
- msgid ""
616
- "Internal data that was supposed to be passed with your request was not "
617
- "received."
618
- msgstr ""
619
-
620
- #: includes/Editor.class.php:549 includes/Editor.class.php:636
621
- msgid "An unknown error has occurred."
622
- msgstr ""
623
-
624
- #: includes/Editor.class.php:572
625
- msgid "No fields data was received with your request."
626
- msgstr ""
627
-
628
- #: includes/Editor.class.php:626
629
- msgid "An error occurred while saving the new field order. Please try again."
630
- msgstr ""
631
-
632
- #: includes/Editor.class.php:659
633
- msgid ""
634
- "The requested field could not be loaded because no ID was received with your "
635
- "request."
636
- msgstr ""
637
-
638
- #: includes/Editor.class.php:691
639
- msgid ""
640
- "The requested field could not be deleted because no ID or slug was received "
641
- "with your request."
642
- msgstr ""
643
-
644
- #: includes/Editor.class.php:703
645
- msgid "An error occurred while deleting this field."
646
- msgstr ""
647
-
648
- #: includes/Editor.class.php:751
649
- msgid ""
650
- "The requested field could not be enabled because no identifying slug was "
651
- "received with your request."
652
- msgstr ""
653
-
654
- #: includes/Editor.class.php:763
655
- msgid ""
656
- "The requested field could not be enabled because it did not appear to be "
657
- "disabled."
658
- msgstr ""
659
-
660
- #: includes/EmailTemplates.class.php:46
661
- msgid "Conversations"
662
- msgstr ""
663
-
664
- #: includes/EmailTemplates.class.php:47
665
- msgid ""
666
- "A clean, simple email template for talking to directly to your customer."
667
- msgstr ""
668
-
669
- #: includes/EmailTemplates.class.php:50
670
- msgid "Impressions"
671
- msgstr ""
672
-
673
- #: includes/EmailTemplates.class.php:51
674
- msgid "A small email template that is great for making a quick impression."
675
- msgstr ""
676
-
677
- #: includes/EmailTemplates.class.php:54
678
- msgid "Statement"
679
- msgstr ""
680
-
681
- #: includes/EmailTemplates.class.php:55
682
- msgid "A plain template for delivering a direct message."
683
- msgstr ""
684
-
685
- #: includes/EmailTemplates.class.php:58
686
- msgid "Stationary"
687
- msgstr ""
688
-
689
- #: includes/EmailTemplates.class.php:59
690
- msgid ""
691
- "An elegant template for sending a message with an air of sophistication."
692
- msgstr ""
693
-
694
- #: includes/Export.CSV.class.php:77
695
- msgid "Booking ID"
696
- msgstr ""
697
-
698
- #: includes/Export.CSV.class.php:81 includes/MailChimp.class.php:163
699
- #: includes/Settings.class.php:2860
700
- #: includes/WP_List_Table.BookingsTable.class.php:407
701
- #: includes/template-functions.php:685
702
- msgid "Email"
703
- msgstr ""
704
-
705
- #: includes/Export.CSV.class.php:82 includes/Settings.class.php:2869
706
- #: includes/WP_List_Table.BookingsTable.class.php:408
707
- #: includes/template-functions.php:686
708
- msgid "Phone"
709
- msgstr ""
710
-
711
- #: includes/Export.CSV.class.php:84
712
- msgid "Date the request was made"
713
- msgstr ""
714
-
715
- #: includes/Export.CSV.class.php:194
716
- msgid "Data Privacy Consent"
717
- msgstr ""
718
-
719
- #: includes/Export.CSV.class.php:210 includes/Settings.class.php:918
720
- #: includes/integrations/business-profile.php:291
721
- #: includes/template-functions.php:672
722
- msgid "Yes"
723
- msgstr ""
724
-
725
- #: includes/Export.CSV.class.php:210 includes/Settings.class.php:917
726
- #: includes/integrations/business-profile.php:292
727
- #: includes/template-functions.php:673
728
- msgid "No"
729
- msgstr ""
730
-
731
- #: includes/Export.CSV.class.php:229 includes/Export.PDF.class.php:223
732
- #: includes/Settings.class.php:2919
733
- msgid "Table(s)"
734
- msgstr ""
735
-
736
- #: includes/Export.CSV.class.php:264
737
- #: includes/WP_List_Table.BookingsTable.class.php:412
738
- #: restaurant-reservations.php:414
739
- msgid "Deposit"
740
- msgstr ""
741
-
742
- #: includes/Export.CSV.class.php:265
743
- msgid "Receipt ID"
744
- msgstr ""
745
-
746
- #: includes/Export.PDF.class.php:144
747
- msgid ""
748
- "An unexpected error occurred and your export request could not be fulfilled."
749
- msgstr ""
750
-
751
- #: includes/Export.PDF.class.php:270
752
- #, php-format
753
- msgid ""
754
- "Your server has not loaded the mbstring PHP extension, or has disabled the "
755
- "mbregex PHP extension. mPDF requires both to output a PDF file. Please "
756
- "contact your website host and ask them to enable these PHP extensions. Or "
757
- "switch to the TCPDF library, which has fewer server requirements. You can "
758
- "change the PDF Renderer in the %s."
759
- msgstr ""
760
-
761
- #: includes/ExportHandler.class.php:66
762
- #, php-format
763
- msgid ""
764
- "Warning from Export Bookings for Restaurant Reservations: The server is not "
765
- "able to write to the font directory for the mPDF generator. Your PDF exports "
766
- "may not work properly until you change the file permissions for the "
767
- "directory /wp-content/plugins/export-for-rtb/lib/mpdf/ttfontdata/. Your web "
768
- "host can help you change the file permissions to be compatible. Or you can "
769
- "switch to the TCPDF renderer in the %s."
770
- msgstr ""
771
-
772
- #: includes/ExportHandler.class.php:92
773
- msgid "PDF"
774
- msgstr ""
775
-
776
- #: includes/ExportHandler.class.php:96
777
- msgid "Excel/CSV"
778
- msgstr ""
779
-
780
- #: includes/ExportHandler.class.php:119
781
- msgid "You do not have the required permissions to export bookings."
782
- msgstr ""
783
-
784
- #: includes/ExportHandler.class.php:127
785
- msgid "Unable to create export to match your request."
786
- msgstr ""
787
-
788
- #: includes/ExportHandler.class.php:138
789
- msgid ""
790
- "You selected a date range but didn't enter a start or end date. Please "
791
- "return and enter a start or end date."
792
- msgstr ""
793
-
794
- #: includes/ExportHandler.class.php:145
795
- msgid "There are no bookings which match your export request."
796
- msgstr ""
797
-
798
- #: includes/Field.Controller.class.php:170
799
- msgid "Text"
800
- msgstr ""
801
-
802
- #: includes/Field.Controller.class.php:173
803
- msgid "Small"
804
- msgstr ""
805
-
806
- #: includes/Field.Controller.class.php:177
807
- msgid "Large"
808
- msgstr ""
809
-
810
- #: includes/Field.Controller.class.php:186
811
- msgid "Dropdown"
812
- msgstr ""
813
-
814
- #: includes/Field.Controller.class.php:190
815
- msgid "Checkbox"
816
- msgstr ""
817
-
818
- #: includes/Field.Controller.class.php:194
819
- msgid "Radio"
820
- msgstr ""
821
-
822
- #: includes/Field.Controller.class.php:200
823
- #: includes/Field.Controller.class.php:203
824
- msgid "Confirm"
825
- msgstr ""
826
-
827
- #: includes/Field.Controller.class.php:534
828
- #, php-format
829
- msgid "%s Checked"
830
- msgstr ""
831
-
832
- #: includes/Field.class.php:337
833
- msgid "No field slug was sent with this request to update a default field."
834
- msgstr ""
835
-
836
- #: includes/Field.class.php:402
837
- msgid ""
838
- "An error occurred while updating the label for this default field. Please "
839
- "try again."
840
- msgstr ""
841
-
842
- #: includes/Field.class.php:431
843
- msgid ""
844
- "An error occurred while updating the label for this custom field. Please try "
845
- "again."
846
- msgstr ""
847
-
848
- #: includes/Field.class.php:452
849
- msgid "This field could not be saved because required data was missing."
850
- msgstr ""
851
-
852
- #: includes/Field.class.php:475
853
- msgid ""
854
- "An error occurred while saving this field. Please try again. If the problem "
855
- "persists, please refresh the page."
856
- msgstr ""
857
-
858
- #: includes/Field.class.php:574
859
- msgid "The option you selected is not valid. Please make another choice."
860
- msgstr ""
861
-
862
- #: includes/Import.class.php:67
863
- msgid "Spreadsheet Containing Bookings"
864
- msgstr ""
865
-
866
- #: includes/Import.class.php:184
867
- msgid "Reservations added successfully."
868
- msgstr ""
869
-
870
- #: includes/Import.class.php:197
871
- msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
872
- msgstr ""
873
-
874
- #: includes/Import.class.php:200
875
- msgid ""
876
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
877
- "the HTML form"
878
- msgstr ""
879
-
880
- #: includes/Import.class.php:203
881
- msgid "The uploaded file was only partially uploaded"
882
- msgstr ""
883
-
884
- #: includes/Import.class.php:206
885
- msgid "No file was uploaded."
886
- msgstr ""
887
-
888
- #: includes/Import.class.php:210
889
- msgid "Missing a temporary folder"
890
- msgstr ""
891
-
892
- #: includes/Import.class.php:213
893
- msgid "Failed to write file to disk"
894
- msgstr ""
895
-
896
- #: includes/Import.class.php:216
897
- msgid "File upload stopped by extension"
898
- msgstr ""
899
-
900
- #: includes/Import.class.php:220
901
- msgid "No error code avaiable"
902
- msgstr ""
903
-
904
- #: includes/Import.class.php:225
905
- msgid "No file was uploaded here.."
906
- msgstr ""
907
-
908
- #: includes/Import.class.php:230
909
- msgid "File must be .csv, .xls or .xlsx"
910
- msgstr ""
911
-
912
- #: includes/InstallationWalkthrough.class.php:138
913
- msgid "Never"
914
- msgstr ""
915
-
916
- #: includes/InstallationWalkthrough.class.php:139
917
- msgid "Every day"
918
- msgstr ""
919
-
920
- #: includes/InstallationWalkthrough.class.php:140
921
- #, php-format
922
- msgid "%s on the %s week of the month"
923
- msgstr ""
924
-
925
- #: includes/InstallationWalkthrough.class.php:141
926
- #, php-format
927
- msgid "%s week of the month"
928
- msgstr ""
929
-
930
- #: includes/InstallationWalkthrough.class.php:142
931
- #: includes/InstallationWalkthrough.class.php:331
932
- msgid "All day"
933
- msgstr ""
934
-
935
- #: includes/InstallationWalkthrough.class.php:143
936
- msgid "Ends at"
937
- msgstr ""
938
-
939
- #: includes/InstallationWalkthrough.class.php:144
940
- msgid "Starts at"
941
- msgstr ""
942
-
943
- #: includes/InstallationWalkthrough.class.php:145
944
- msgid "&mdash"
945
- msgstr ""
946
-
947
- #: includes/InstallationWalkthrough.class.php:164
948
- msgid "Welcome to the Five-Star Restaurant Reservations Plugin"
949
- msgstr ""
950
-
951
- #: includes/InstallationWalkthrough.class.php:165
952
- msgid ""
953
- "Thanks for choosing the Five-Star Restaurant Reservations! The following "
954
- "will help you get started with the setup of your reservations system by "
955
- "creating your reservations page, setting times when bookings are allowed as "
956
- "well as configuring a few key options."
957
- msgstr ""
958
-
959
- #: includes/InstallationWalkthrough.class.php:170
960
- msgid "Add a Reservations Page"
961
- msgstr ""
962
-
963
- #: includes/InstallationWalkthrough.class.php:172
964
- msgid ""
965
- "You can create a dedicated reservations booking page below, or skip this "
966
- "step and add your reservations to a page you've already created manually."
967
- msgstr ""
968
-
969
- #: includes/InstallationWalkthrough.class.php:174
970
- msgid "Page Title:"
971
- msgstr ""
972
-
973
- #: includes/InstallationWalkthrough.class.php:175
974
- msgid "Create Page"
975
- msgstr ""
976
-
977
- #: includes/InstallationWalkthrough.class.php:177
978
- #: includes/InstallationWalkthrough.class.php:196
979
- msgid "Next Step"
980
- msgstr ""
981
-
982
- #: includes/InstallationWalkthrough.class.php:183
983
- msgid " Create Booking Schedule"
984
- msgstr ""
985
-
986
- #: includes/InstallationWalkthrough.class.php:185
987
- msgid ""
988
- "Choose what times each week your restaurant is available to book "
989
- "reservations."
990
- msgstr ""
991
-
992
- #: includes/InstallationWalkthrough.class.php:190
993
- #: includes/Settings.class.php:655
994
- msgid "Add new scheduling rule"
995
- msgstr ""
996
-
997
- #: includes/InstallationWalkthrough.class.php:194
998
- msgid "Save Schedule"
999
- msgstr ""
1000
-
1001
- #: includes/InstallationWalkthrough.class.php:197
1002
- #: includes/InstallationWalkthrough.class.php:258
1003
- msgid "Previous Step"
1004
- msgstr ""
1005
-
1006
- #: includes/InstallationWalkthrough.class.php:203
1007
- msgid " Set Key Options"
1008
- msgstr ""
1009
-
1010
- #: includes/InstallationWalkthrough.class.php:205
1011
- msgid ""
1012
- "Set a min/max party size for bookings, choose how early and late bookings "
1013
- "can be made, and pick the time interval between different booking options."
1014
- msgstr ""
1015
-
1016
- #: includes/InstallationWalkthrough.class.php:207
1017
- msgid "Min Party Size:"
1018
- msgstr ""
1019
-
1020
- #: includes/InstallationWalkthrough.class.php:215
1021
- msgid "Max Party Size:"
1022
- msgstr ""
1023
-
1024
- #: includes/InstallationWalkthrough.class.php:217
1025
- msgid "Any Size"
1026
- msgstr ""
1027
-
1028
- #: includes/InstallationWalkthrough.class.php:224
1029
- msgid "Early Bookings:"
1030
- msgstr ""
1031
-
1032
- #: includes/InstallationWalkthrough.class.php:226
1033
- msgid "Any Time"
1034
- msgstr ""
1035
-
1036
- #: includes/InstallationWalkthrough.class.php:227
1037
- #: includes/Settings.class.php:733
1038
- msgid "From 1 day in advance"
1039
- msgstr ""
1040
-
1041
- #: includes/InstallationWalkthrough.class.php:228
1042
- #: includes/Settings.class.php:734
1043
- msgid "From 1 week in advance"
1044
- msgstr ""
1045
-
1046
- #: includes/InstallationWalkthrough.class.php:229
1047
- #: includes/Settings.class.php:735
1048
- msgid "From 2 weeks in advance"
1049
- msgstr ""
1050
-
1051
- #: includes/InstallationWalkthrough.class.php:230
1052
- #: includes/Settings.class.php:736
1053
- msgid "From 30 days in advance"
1054
- msgstr ""
1055
-
1056
- #: includes/InstallationWalkthrough.class.php:231
1057
- #: includes/Settings.class.php:738
1058
- msgid "From 90 days in advance"
1059
- msgstr ""
1060
-
1061
- #: includes/InstallationWalkthrough.class.php:235
1062
- msgid "Late Bookings:"
1063
- msgstr ""
1064
-
1065
- #: includes/InstallationWalkthrough.class.php:237
1066
- #: includes/Settings.class.php:753
1067
- msgid "Up to the last minute"
1068
- msgstr ""
1069
-
1070
- #: includes/InstallationWalkthrough.class.php:238
1071
- #: includes/Settings.class.php:754
1072
- msgid "At least 15 minutes in advance"
1073
- msgstr ""
1074
-
1075
- #: includes/InstallationWalkthrough.class.php:239
1076
- #: includes/Settings.class.php:755
1077
- msgid "At least 30 minutes in advance"
1078
- msgstr ""
1079
-
1080
- #: includes/InstallationWalkthrough.class.php:240
1081
- #: includes/Settings.class.php:756
1082
- msgid "At least 45 minutes in advance"
1083
- msgstr ""
1084
-
1085
- #: includes/InstallationWalkthrough.class.php:241
1086
- #: includes/Settings.class.php:757
1087
- msgid "At least 1 hour in advance"
1088
- msgstr ""
1089
-
1090
- #: includes/InstallationWalkthrough.class.php:242
1091
- #: includes/Settings.class.php:758
1092
- msgid "At least 4 hours in advance"
1093
- msgstr ""
1094
-
1095
- #: includes/InstallationWalkthrough.class.php:243
1096
- #: includes/Settings.class.php:759
1097
- msgid "At least 24 hours in advance"
1098
- msgstr ""
1099
-
1100
- #: includes/InstallationWalkthrough.class.php:244
1101
- msgid "Block same-day-bookings"
1102
- msgstr ""
1103
-
1104
- #: includes/InstallationWalkthrough.class.php:248
1105
- msgid "Time Interval:"
1106
- msgstr ""
1107
-
1108
- #: includes/InstallationWalkthrough.class.php:250
1109
- #: includes/Settings.class.php:797
1110
- msgid "Every 30 minutes"
1111
- msgstr ""
1112
-
1113
- #: includes/InstallationWalkthrough.class.php:251
1114
- #: includes/Settings.class.php:798
1115
- msgid "Every 15 minutes"
1116
- msgstr ""
1117
-
1118
- #: includes/InstallationWalkthrough.class.php:252
1119
- #: includes/Settings.class.php:799
1120
- msgid "Every 10 minutes"
1121
- msgstr ""
1122
-
1123
- #: includes/InstallationWalkthrough.class.php:253
1124
- #: includes/Settings.class.php:800
1125
- msgid "Every 5 minutes"
1126
- msgstr ""
1127
-
1128
- #: includes/InstallationWalkthrough.class.php:256
1129
- msgid "Save Options"
1130
- msgstr ""
1131
-
1132
- #: includes/InstallationWalkthrough.class.php:259
1133
- msgid "Finish"
1134
- msgstr ""
1135
-
1136
- #: includes/InstallationWalkthrough.class.php:265
1137
- msgid "Skip Setup"
1138
- msgstr ""
1139
-
1140
- #: includes/InstallationWalkthrough.class.php:299
1141
- msgid "Weekly"
1142
- msgstr ""
1143
-
1144
- #: includes/InstallationWalkthrough.class.php:306
1145
- msgid "Days of the week"
1146
- msgstr ""
1147
-
1148
- #: includes/InstallationWalkthrough.class.php:326
1149
- #: includes/Settings.class.php:2832 includes/template-functions.php:682
1150
- msgid "Time"
1151
- msgstr ""
1152
-
1153
- #: includes/InstallationWalkthrough.class.php:340
1154
- msgid "Start"
1155
- msgstr ""
1156
-
1157
- #: includes/InstallationWalkthrough.class.php:347
1158
- msgid "End"
1159
- msgstr ""
1160
-
1161
- #: includes/InstallationWalkthrough.class.php:355
1162
- #, php-format
1163
- msgid "All day long. Want to %sset a time slot%s?"
1164
- msgstr ""
1165
-
1166
- #: includes/InstallationWalkthrough.class.php:371
1167
- #: includes/InstallationWalkthrough.class.php:374
1168
- msgid "Open and close this rule"
1169
- msgstr ""
1170
-
1171
- #: includes/InstallationWalkthrough.class.php:377
1172
- msgid "Delete rule"
1173
- msgstr ""
1174
-
1175
- #: includes/InstallationWalkthrough.class.php:380
1176
- #: includes/Settings.class.php:669
1177
- msgid "Delete scheduling rule"
1178
- msgstr ""
1179
-
1180
- #: includes/Licenses.class.php:119
1181
- msgid "Licenses"
1182
- msgstr ""
1183
-
1184
- #: includes/Licenses.class.php:121
1185
- #, php-format
1186
- msgid ""
1187
- "Activate license keys for any commercial addons you have purchased. %sView "
1188
- "all addons%s."
1189
- msgstr ""
1190
-
1191
- #: includes/Licenses.class.php:205
1192
- msgid ""
1193
- "Your attempt to deactivate a license key failed. Please try again later or "
1194
- "contact support for help."
1195
- msgstr ""
1196
-
1197
- #: includes/Licenses.class.php:209
1198
- #, php-format
1199
- msgid ""
1200
- "You have reached the activation limit for this license. If you have the "
1201
- "license activated on other sites you will need to deactivate them or "
1202
- "purchase more license keys from %sTheme of the Crop%s."
1203
- msgstr ""
1204
-
1205
- #: includes/Licenses.class.php:211
1206
- msgid ""
1207
- "Your attempt to activate a license key failed. Please check the license key "
1208
- "and try again."
1209
- msgstr ""
1210
-
1211
- #: includes/MailChimp.class.php:85
1212
- msgid "Date/Time of Booking"
1213
- msgstr ""
1214
-
1215
- #: includes/MailChimp.class.php:87
1216
- msgid "Party Size"
1217
- msgstr ""
1218
-
1219
- #: includes/MailChimp.class.php:88
1220
- msgid "Phone Number"
1221
- msgstr ""
1222
-
1223
- #: includes/MailChimp.class.php:159
1224
- msgid "Booking Form Data"
1225
- msgstr ""
1226
-
1227
- #: includes/MailChimp.class.php:160
1228
- msgid "MailChimp List Field"
1229
- msgstr ""
1230
-
1231
- #: includes/MailChimp.class.php:161
1232
- msgid ""
1233
- "Connect information from the booking request to <a href=\"http://kb."
1234
- "mailchimp.com/article/getting-started-with-merge-tags\" target=\"_blank"
1235
- "\">merge fields</a> in your MailChimp list."
1236
- msgstr ""
1237
-
1238
- #: includes/MailChimp.class.php:162
1239
- msgid ""
1240
- "There was an unexpected error when trying to retrieve the list's merge "
1241
- "fields."
1242
- msgstr ""
1243
-
1244
- #: includes/MailChimp.class.php:164
1245
- msgid "The email field is automatically merged."
1246
- msgstr ""
1247
-
1248
- #: includes/MailChimp.class.php:180
1249
- msgid ""
1250
- "You have been logged out. Please login again to retrieve the mailing lists."
1251
- msgstr ""
1252
-
1253
- #: includes/MailChimp.class.php:194
1254
- msgid ""
1255
- "You do not have permission to retrieve the mailing lists. Please login to an "
1256
- "administrator account if you have one."
1257
- msgstr ""
1258
-
1259
- #: includes/MailChimp.class.php:212
1260
- msgid ""
1261
- "You have been logged out. Please login again to retrieve the merge fields "
1262
- "for this list."
1263
- msgstr ""
1264
-
1265
- #: includes/MailChimp.class.php:226
1266
- msgid ""
1267
- "You do not have permission to modify the merge field settings. Please login "
1268
- "to an administrator account if you have one."
1269
- msgstr ""
1270
-
1271
- #: includes/MailChimp.class.php:407
1272
- msgid ""
1273
- "The subscription request has been rejected because it does not appear to "
1274
- "have come from this site."
1275
- msgstr ""
1276
-
1277
- #: includes/MultipleLocations.class.php:360
1278
- msgid "Please select a location for your booking."
1279
- msgstr ""
1280
-
1281
- #: includes/MultipleLocations.class.php:367
1282
- msgid "The location you selected is not valid. Please select another location."
1283
- msgstr ""
1284
-
1285
- #: includes/MultipleLocations.class.php:476
1286
- msgid "Reservations"
1287
- msgstr ""
1288
-
1289
- #: includes/MultipleLocations.class.php:689
1290
- msgid "Location for which this booking was made."
1291
- msgstr ""
1292
-
1293
- #: includes/Notification.class.php:102
1294
- msgid "View pending bookings"
1295
- msgstr ""
1296
-
1297
- #: includes/Notification.class.php:103
1298
- msgid "Cancel booking"
1299
- msgstr ""
1300
-
1301
- #: includes/Notification.class.php:104
1302
- msgid "Confirm this booking"
1303
- msgstr ""
1304
-
1305
- #: includes/Notification.class.php:105
1306
- msgid "Reject this booking"
1307
- msgstr ""
1308
-
1309
- #: includes/ReviewAsk.class.php:55
1310
- msgid "Email Address"
1311
- msgstr ""
1312
-
1313
- #: includes/Settings.class.php:379
1314
- msgid "Sign up for our mailing list."
1315
- msgstr ""
1316
-
1317
- #: includes/Settings.class.php:626 includes/Settings.class.php:627
1318
- #: includes/Settings.class.php:2303 restaurant-reservations.php:319
1319
- msgid "Settings"
1320
- msgstr ""
1321
-
1322
- #: includes/Settings.class.php:639
1323
- msgid "Booking Schedule"
1324
- msgstr ""
1325
-
1326
- #: includes/Settings.class.php:648
1327
- msgid "Scheduling Options"
1328
- msgstr ""
1329
-
1330
- #: includes/Settings.class.php:686
1331
- msgid "Schedule"
1332
- msgstr ""
1333
-
1334
- #: includes/Settings.class.php:687
1335
- msgid "Define the weekly schedule during which you accept bookings."
1336
- msgstr ""
1337
-
1338
- #: includes/Settings.class.php:712
1339
- msgid "Exceptions"
1340
- msgstr ""
1341
-
1342
- #: includes/Settings.class.php:713
1343
- msgid ""
1344
- "Define special opening hours for holidays, events or other needs. Leave the "
1345
- "time empty if you're closed all day."
1346
- msgstr ""
1347
-
1348
- #: includes/Settings.class.php:728
1349
- msgid "Early Bookings"
1350
- msgstr ""
1351
-
1352
- #: includes/Settings.class.php:729
1353
- msgid ""
1354
- "Select how early customers can make their booking. (Administrators and "
1355
- "Booking Managers are not restricted by this setting.)"
1356
- msgstr ""
1357
-
1358
- #: includes/Settings.class.php:732
1359
- msgid "Any time"
1360
- msgstr ""
1361
-
1362
- #: includes/Settings.class.php:737
1363
- msgid "From 60 days in advance"
1364
- msgstr ""
1365
-
1366
- #: includes/Settings.class.php:749
1367
- msgid "Late Bookings"
1368
- msgstr ""
1369
-
1370
- #: includes/Settings.class.php:750
1371
- msgid ""
1372
- "Select how late customers can make their booking. (Administrators and "
1373
- "Booking Managers are not restricted by this setting.)"
1374
- msgstr ""
1375
-
1376
- #: includes/Settings.class.php:760
1377
- msgid "Block same-day bookings"
1378
- msgstr ""
1379
-
1380
- #: includes/Settings.class.php:772
1381
- msgid "Date Pre-selection"
1382
- msgstr ""
1383
-
1384
- #: includes/Settings.class.php:773
1385
- msgid ""
1386
- "When the booking form is loaded, should it automatically attempt to select a "
1387
- "valid date?"
1388
- msgstr ""
1389
-
1390
- #: includes/Settings.class.php:776
1391
- msgid "Select today if valid"
1392
- msgstr ""
1393
-
1394
- #: includes/Settings.class.php:777
1395
- msgid "Select today or next valid date"
1396
- msgstr ""
1397
-
1398
- #: includes/Settings.class.php:778
1399
- msgid "Leave empty"
1400
- msgstr ""
1401
-
1402
- #: includes/Settings.class.php:789
1403
- msgid "Time Interval"
1404
- msgstr ""
1405
-
1406
- #: includes/Settings.class.php:790
1407
- msgid "Select the number of minutes between each available time."
1408
- msgstr ""
1409
-
1410
- #: includes/Settings.class.php:793
1411
- msgid "Every 180 minutes"
1412
- msgstr ""
1413
-
1414
- #: includes/Settings.class.php:794
1415
- msgid "Every 120 minutes"
1416
- msgstr ""
1417
-
1418
- #: includes/Settings.class.php:795
1419
- msgid "Every 90 minutes"
1420
- msgstr ""
1421
-
1422
- #: includes/Settings.class.php:796
1423
- msgid "Every 60 minutes"
1424
- msgstr ""
1425
-
1426
- #: includes/Settings.class.php:811
1427
- msgid "Week Starts On"
1428
- msgstr ""
1429
-
1430
- #: includes/Settings.class.php:812
1431
- msgid "Select the first day of the week"
1432
- msgstr ""
1433
-
1434
- #: includes/Settings.class.php:815
1435
- msgid "Sunday"
1436
- msgstr ""
1437
-
1438
- #: includes/Settings.class.php:816
1439
- msgid "Monday"
1440
- msgstr ""
1441
-
1442
- #: includes/Settings.class.php:825
1443
- msgid "Basic"
1444
- msgstr ""
1445
-
1446
- #: includes/Settings.class.php:834 includes/Settings.class.php:1579
1447
- #: includes/Settings.class.php:2078
1448
- msgid "General"
1449
- msgstr ""
1450
-
1451
- #: includes/Settings.class.php:845
1452
- msgid "Booking Page"
1453
- msgstr ""
1454
-
1455
- #: includes/Settings.class.php:846
1456
- msgid ""
1457
- "Select a page on your site to automatically display the booking form and "
1458
- "confirmation message."
1459
- msgstr ""
1460
-
1461
- #: includes/Settings.class.php:862
1462
- msgid "Min Party Size"
1463
- msgstr ""
1464
-
1465
- #: includes/Settings.class.php:863
1466
- msgid "Set a minimum allowed party size for bookings."
1467
- msgstr ""
1468
-
1469
- #: includes/Settings.class.php:875
1470
- msgid "Max Party Size"
1471
- msgstr ""
1472
-
1473
- #: includes/Settings.class.php:876
1474
- msgid "Set a maximum allowed party size for bookings."
1475
- msgstr ""
1476
-
1477
- #: includes/Settings.class.php:888
1478
- msgid "Automatically Confirm Below Party Size"
1479
- msgstr ""
1480
-
1481
- #: includes/Settings.class.php:889
1482
- msgid ""
1483
- "Set a maximum party size below which all bookings will be automatically "
1484
- "confirmed."
1485
- msgstr ""
1486
-
1487
- #: includes/Settings.class.php:902
1488
- msgid "Allow Cancellations"
1489
- msgstr ""
1490
-
1491
- #: includes/Settings.class.php:903
1492
- msgid ""
1493
- "Adds a cancellation option to your booking form, so that customers are able "
1494
- "to cancel their reservations."
1495
- msgstr ""
1496
-
1497
- #: includes/Settings.class.php:913
1498
- msgid "Require Phone"
1499
- msgstr ""
1500
-
1501
- #: includes/Settings.class.php:914
1502
- msgid "Don't accept booking requests without a phone number."
1503
- msgstr ""
1504
-
1505
- #: includes/Settings.class.php:929
1506
- msgid "Pending Confirmation Message"
1507
- msgstr ""
1508
-
1509
- #: includes/Settings.class.php:930
1510
- msgid ""
1511
- "Enter the message to display when a booking request is made and is set to "
1512
- "pending confirmation."
1513
- msgstr ""
1514
-
1515
- #: includes/Settings.class.php:941
1516
- msgid "Confirmed Booking Message"
1517
- msgstr ""
1518
-
1519
- #: includes/Settings.class.php:942
1520
- msgid ""
1521
- "Enter the message to display when a booking is made that has been "
1522
- "automatically confirmed."
1523
- msgstr ""
1524
-
1525
- #: includes/Settings.class.php:953
1526
- msgid "Pending Redirect Page"
1527
- msgstr ""
1528
-
1529
- #: includes/Settings.class.php:954
1530
- msgid ""
1531
- "Input the URL of the page you want the booking form to redirect to after a "
1532
- "reservation is made that is set to pending. This overrides the \"Pending "
1533
- "Confirmation Message\" text/option."
1534
- msgstr ""
1535
-
1536
- #: includes/Settings.class.php:964
1537
- msgid "Confirmed Redirect Page"
1538
- msgstr ""
1539
-
1540
- #: includes/Settings.class.php:965
1541
- msgid ""
1542
- "Input the URL of the page you want the booking form to redirect to after a "
1543
- "reservation is made that is automatically confirmed. This overrides the "
1544
- "\"Confirmed Booking Message\" text/option."
1545
- msgstr ""
1546
-
1547
- #: includes/Settings.class.php:975
1548
- msgid "Cancellation Redirect Page"
1549
- msgstr ""
1550
-
1551
- #: includes/Settings.class.php:976
1552
- msgid ""
1553
- "Input the URL of the page you want the cancellation form to redirect to when "
1554
- "someone cancels their reservation. Only applicable if the \"Allow "
1555
- "Cancellations\" option above is enabled. If left blank, it will display a "
1556
- "success message instead of redirecting."
1557
- msgstr ""
1558
-
1559
- #: includes/Settings.class.php:995
1560
- msgid "Date Format"
1561
- msgstr ""
1562
-
1563
- #: includes/Settings.class.php:996
1564
- #, php-format
1565
- msgid ""
1566
- "Define how the date is formatted on the booking form. %sFormatting rules%s. "
1567
- "This only changes the format on the booking form. To change the date format "
1568
- "in notification messages, modify your general %sWordPress Settings%s."
1569
- msgstr ""
1570
-
1571
- #: includes/Settings.class.php:1007
1572
- msgid "Time Format"
1573
- msgstr ""
1574
-
1575
- #: includes/Settings.class.php:1008
1576
- #, php-format
1577
- msgid ""
1578
- "Define how the time is formatted on the booking form. %sFormatting rules%s. "
1579
- "This only changes the format on the booking form. To change the time format "
1580
- "in notification messages, modify your general %sWordPress Settings%s."
1581
- msgstr ""
1582
-
1583
- #: includes/Settings.class.php:1021
1584
- msgid "Language"
1585
- msgstr ""
1586
-
1587
- #: includes/Settings.class.php:1022
1588
- msgid ""
1589
- "Select a language to use for the booking form datepicker if it is different "
1590
- "than your WordPress language setting."
1591
- msgstr ""
1592
-
1593
- #: includes/Settings.class.php:1032
1594
- msgid "Security"
1595
- msgstr ""
1596
-
1597
- #: includes/Settings.class.php:1043
1598
- msgid "Banned Email Addresses"
1599
- msgstr ""
1600
-
1601
- #: includes/Settings.class.php:1044
1602
- msgid ""
1603
- "You can block bookings from specific email addresses. Enter each email "
1604
- "address on a separate line."
1605
- msgstr ""
1606
-
1607
- #: includes/Settings.class.php:1054
1608
- msgid "Banned IP Addresses"
1609
- msgstr ""
1610
-
1611
- #: includes/Settings.class.php:1055
1612
- msgid ""
1613
- "You can block bookings from specific IP addresses. Enter each IP address on "
1614
- "a separate line. Be aware that many internet providers rotate their IP "
1615
- "address assignments, so an IP address may accidentally refer to a different "
1616
- "user. Also, if you block an IP address used by a public connection, such as "
1617
- "cafe WIFI, a public library, or a university network, you may inadvertantly "
1618
- "block several people."
1619
- msgstr ""
1620
-
1621
- #: includes/Settings.class.php:1063
1622
- msgid "Captcha"
1623
  msgstr ""
1624
 
1625
- #: includes/Settings.class.php:1074
1626
- msgid "Enable Google reCAPTCHA v2"
1627
  msgstr ""
1628
 
1629
- #: includes/Settings.class.php:1075
1630
- #, php-format
1631
  msgid ""
1632
- "Adds Google's reCAPTCHA code to your form, to verify guests before they can "
1633
- "book. Please check %s our documentation %s for more information on how to "
1634
- "configure this feature."
1635
- msgstr ""
1636
-
1637
- #: includes/Settings.class.php:1085
1638
- msgid "Google Site Key"
1639
- msgstr ""
1640
-
1641
- #: includes/Settings.class.php:1086
1642
- msgid "The site key provided to you by Google"
1643
  msgstr ""
1644
 
1645
- #: includes/Settings.class.php:1096
1646
- msgid "Google Secret Key"
 
1647
  msgstr ""
1648
 
1649
- #: includes/Settings.class.php:1097
1650
- msgid "The secret key provided to you by Google"
1651
  msgstr ""
1652
 
1653
- #: includes/Settings.class.php:1105
1654
- msgid "Privacy"
1655
- msgstr ""
1656
-
1657
- #: includes/Settings.class.php:1116
1658
- msgid "Disable IP Capture"
1659
- msgstr ""
1660
-
1661
- #: includes/Settings.class.php:1117
1662
  msgid ""
1663
- "This turns off the feature that captures the IP address of the device making "
1664
- "the booking."
 
1665
  msgstr ""
1666
 
1667
- #: includes/Settings.class.php:1127
1668
- msgid "Require Consent"
1669
  msgstr ""
1670
 
1671
- #: includes/Settings.class.php:1128
1672
  msgid ""
1673
- "Require customers to consent to the collection of their details when making "
1674
- "a booking. This may be required to comply with privacy laws in your country."
1675
  msgstr ""
1676
 
1677
- #: includes/Settings.class.php:1138
1678
- msgid "Consent Statement"
1679
  msgstr ""
1680
 
1681
- #: includes/Settings.class.php:1139
1682
  msgid ""
1683
- "Enter the statement you would like customers to confirm when making a "
1684
- "booking."
1685
  msgstr ""
1686
 
1687
- #: includes/Settings.class.php:1149
1688
- msgid "Privacy Statement Page"
1689
  msgstr ""
1690
 
1691
- #: includes/Settings.class.php:1150
1692
  msgid ""
1693
- "Select a page on your site which contains a privacy statement. If selected, "
1694
- "it will be linked to in your consent statement."
1695
  msgstr ""
1696
 
1697
- #: includes/Settings.class.php:1173 includes/Settings.class.php:2026
1698
- #: includes/Settings.class.php:2036
1699
- msgid "Advanced"
1700
- msgstr ""
1701
-
1702
- #: includes/Settings.class.php:1183
1703
- msgid "View Bookings Form"
1704
  msgstr ""
1705
 
1706
- #: includes/Settings.class.php:1195
1707
- msgid "View Bookings Page"
1708
  msgstr ""
1709
 
1710
- #: includes/Settings.class.php:1196
1711
  msgid ""
1712
- "Select a page on your site to automatically display the view bookings form. "
1713
- "Useful for restaurant staff checking guests in as they arrive."
1714
  msgstr ""
1715
 
1716
- #: includes/Settings.class.php:1211
1717
- msgid "Keep View Bookings Private"
1718
  msgstr ""
1719
 
1720
- #: includes/Settings.class.php:1212
1721
  msgid ""
1722
- "Only display the view bookings form to visitors who are logged in to your "
1723
- "site."
1724
  msgstr ""
1725
 
1726
- #: includes/Settings.class.php:1221
1727
- msgid "Check In Arrivals"
1728
  msgstr ""
1729
 
1730
- #: includes/Settings.class.php:1222
1731
  msgid ""
1732
- "Allow guests to be checked in as they arrive. This is necessary for late "
1733
- "arrival reminders to work correctly."
1734
- msgstr ""
1735
-
1736
- #: includes/Settings.class.php:1240
1737
- msgid "MailChimp"
1738
  msgstr ""
1739
 
1740
- #: includes/Settings.class.php:1254
1741
- msgid "MailChimp API Key"
1742
  msgstr ""
1743
 
1744
- #: includes/Settings.class.php:1255
1745
- msgid "Retrieve or create an API key for your MailChimp account"
 
 
1746
  msgstr ""
1747
 
1748
- #: includes/Settings.class.php:1256
1749
- msgid "API Key"
1750
  msgstr ""
1751
 
1752
- #: includes/Settings.class.php:1257
1753
- msgid "Connected"
 
 
1754
  msgstr ""
1755
 
1756
- #: includes/Settings.class.php:1258
1757
- msgid "Invalid Key"
1758
  msgstr ""
1759
 
1760
- #: includes/Settings.class.php:1272
1761
- msgid "Subscribe List"
 
 
1762
  msgstr ""
1763
 
1764
- #: includes/Settings.class.php:1273
1765
- msgid "New booking requests will be subscribed to this list."
1766
  msgstr ""
1767
 
1768
- #: includes/Settings.class.php:1275
1769
- msgid "Loading..."
 
 
1770
  msgstr ""
1771
 
1772
- #: includes/Settings.class.php:1286
1773
- msgid "Opt-in"
1774
  msgstr ""
1775
 
1776
- #: includes/Settings.class.php:1287
1777
  msgid ""
1778
- "Whether to show an option for users to opt-in to being signed up for your "
1779
- "mailing list when making a reservation."
1780
  msgstr ""
1781
 
1782
- #: includes/Settings.class.php:1290
1783
- msgid "Show opt-in prompt"
1784
  msgstr ""
1785
 
1786
- #: includes/Settings.class.php:1291
1787
- msgid "Show pre-checked opt-in prompt"
 
 
1788
  msgstr ""
1789
 
1790
- #: includes/Settings.class.php:1292
1791
- msgid "Don't show opt-in prompt"
1792
  msgstr ""
1793
 
1794
- #: includes/Settings.class.php:1304
1795
- msgid "Opt-in Prompt"
 
 
1796
  msgstr ""
1797
 
1798
- #: includes/Settings.class.php:1305
1799
- msgid "Text to display with the opt-in option."
1800
  msgstr ""
1801
 
1802
- #: includes/Settings.class.php:1325
1803
- msgid "Seat Restrictions"
1804
  msgstr ""
1805
 
1806
- #: includes/Settings.class.php:1337
1807
- msgid "Dining Block Length"
1808
  msgstr ""
1809
 
1810
- #: includes/Settings.class.php:1338
1811
- msgid ""
1812
- "How long does a meal generally last? This setting affects a how long a slot "
1813
- "and/or seat unavailable for after someone makes a reservation."
1814
  msgstr ""
1815
 
1816
- #: includes/Settings.class.php:1354
1817
- msgid "Enable Max Reservations"
 
1818
  msgstr ""
1819
 
1820
- #: includes/Settings.class.php:1355
1821
- msgid ""
1822
- "Only allow a certain number of reservations (set below) during a specific "
1823
- "time. Once the maximum number of reservations has been reached, visitors "
1824
- "will only be able to select other reservation times."
1825
  msgstr ""
1826
 
1827
- #: includes/Settings.class.php:1365
1828
- msgid "Max Reservations"
1829
  msgstr ""
1830
 
1831
- #: includes/Settings.class.php:1366
1832
- msgid ""
1833
- "How many reservations, if enabled above, should be allowed at the same time? "
1834
- "Set dining block length setting above to change how long a meal typically "
1835
- "lasts."
1836
  msgstr ""
1837
 
1838
- #: includes/Settings.class.php:1379
1839
- msgid "Max People"
1840
  msgstr ""
1841
 
1842
- #: includes/Settings.class.php:1380
1843
- msgid ""
1844
- "How many people, if enabled above, should be allowed to be present in the "
1845
- "restaurant at the same time? Set dining block length setting above to change "
1846
- "how long a meal typically lasts. May not work correctly if max reservations "
1847
- "is set."
1848
  msgstr ""
1849
 
1850
- #: includes/Settings.class.php:1393
1851
- msgid "Automatically Confirm Below Reservation Number"
1852
  msgstr ""
1853
 
1854
- #: includes/Settings.class.php:1394
1855
  msgid ""
1856
- "Set a maximum number of reservations at one time below which all bookings "
1857
- "will be automatically confirmed."
 
1858
  msgstr ""
1859
 
1860
- #: includes/Settings.class.php:1407
1861
- msgid "Automatically Confirm Below Seats Number"
1862
  msgstr ""
1863
 
1864
- #: includes/Settings.class.php:1408
1865
  msgid ""
1866
- "Set a maximum number of seats at one time below which all bookings will be "
1867
- "automatically confirmed."
1868
- msgstr ""
1869
-
1870
- #: includes/Settings.class.php:1430
1871
- msgid "Table Restrictions"
1872
  msgstr ""
1873
 
1874
- #: includes/Settings.class.php:1442
1875
- msgid "Enable Table Selection"
1876
  msgstr ""
1877
 
1878
- #: includes/Settings.class.php:1443
1879
- msgid ""
1880
- "Allow guests to select a table that they'd like to sit at during their visit."
1881
  msgstr ""
1882
 
1883
- #: includes/Settings.class.php:1452
1884
- msgid "Require Table Selection"
1885
  msgstr ""
1886
 
1887
- #: includes/Settings.class.php:1453
1888
  msgid ""
1889
- "Don't allow a reservation to be made without a valid table selected, even if "
1890
- "all other booking criteria are met (acceptable party size, below max "
1891
- "reservations/seats)."
1892
- msgstr ""
1893
-
1894
- #: includes/Settings.class.php:1462
1895
- msgid "Sections"
1896
  msgstr ""
1897
 
1898
- #: includes/Settings.class.php:1463
1899
- msgid "Add Section"
1900
  msgstr ""
1901
 
1902
- #: includes/Settings.class.php:1465
1903
  msgid ""
1904
- "Use this area to sections for your tables. These can help your guests to "
1905
- "book a table in their preferred area."
1906
- msgstr ""
1907
-
1908
- #: includes/Settings.class.php:1469
1909
- msgid "Section ID"
1910
- msgstr ""
1911
-
1912
- #: includes/Settings.class.php:1474
1913
- msgid "Section Name"
1914
- msgstr ""
1915
-
1916
- #: includes/Settings.class.php:1479
1917
- msgid "Description"
1918
- msgstr ""
1919
-
1920
- #: includes/Settings.class.php:1496
1921
- msgid "Tables"
1922
  msgstr ""
1923
 
1924
- #: includes/Settings.class.php:1497
1925
- msgid "Add Table"
1926
  msgstr ""
1927
 
1928
- #: includes/Settings.class.php:1498
1929
  msgid ""
1930
- "Use this area to create tables that can each be customized. This information "
1931
- "will be used to let customers select a table that meets their requirements "
1932
- "(party size, date/time available)."
1933
- msgstr ""
1934
-
1935
- #: includes/Settings.class.php:1502
1936
- msgid "Table Number"
1937
  msgstr ""
1938
 
1939
- #: includes/Settings.class.php:1507
1940
- msgid "Min. People"
1941
  msgstr ""
1942
 
1943
- #: includes/Settings.class.php:1512
1944
- msgid "Max. People"
1945
  msgstr ""
1946
 
1947
- #: includes/Settings.class.php:1517
1948
- msgid "Section"
1949
  msgstr ""
1950
 
1951
- #: includes/Settings.class.php:1523
1952
- msgid "Combines With"
1953
  msgstr ""
1954
 
1955
- #: includes/Settings.class.php:1543
1956
- msgid "Notifications"
1957
  msgstr ""
1958
 
1959
- #: includes/Settings.class.php:1553
1960
- msgid "Email Templates"
1961
  msgstr ""
1962
 
1963
- #: includes/Settings.class.php:1569
1964
- msgid "Email Designer"
1965
  msgstr ""
1966
 
1967
- #: includes/Settings.class.php:1570
1968
- msgid "Launch Email Designer"
1969
  msgstr ""
1970
 
1971
- #: includes/Settings.class.php:1590
1972
- msgid "Reply-To Name"
1973
  msgstr ""
1974
 
1975
- #: includes/Settings.class.php:1591
1976
  msgid ""
1977
- "The name which should appear in the Reply-To field of a user notification "
1978
- "email"
1979
  msgstr ""
1980
 
1981
- #: includes/Settings.class.php:1602
1982
- msgid "Reply-To Email Address"
1983
  msgstr ""
1984
 
1985
- #: includes/Settings.class.php:1603
1986
  msgid ""
1987
- "The email address which should appear in the Reply-To field of a user "
1988
- "notification email."
1989
  msgstr ""
1990
 
1991
- #: includes/Settings.class.php:1614
1992
- msgid "Admin Notification"
1993
  msgstr ""
1994
 
1995
- #: includes/Settings.class.php:1615
1996
- msgid ""
1997
- "Send an email notification to an administrator when a new booking is "
1998
- "requested."
1999
  msgstr ""
2000
 
2001
- #: includes/Settings.class.php:1625
2002
- msgid "Admin New Confirmed Notification"
2003
  msgstr ""
2004
 
2005
- #: includes/Settings.class.php:1626
2006
- msgid ""
2007
- "Send an email notification to an administrator when a new confirmed booking "
2008
- "is made."
2009
  msgstr ""
2010
 
2011
- #: includes/Settings.class.php:1636
2012
- msgid "Admin Cancellation Notification"
2013
  msgstr ""
2014
 
2015
- #: includes/Settings.class.php:1637
2016
- msgid ""
2017
- "Send an email notification to an administrator when a booking is cancelled."
2018
  msgstr ""
2019
 
2020
- #: includes/Settings.class.php:1647
2021
- msgid "Admin Email Address"
2022
  msgstr ""
2023
 
2024
- #: includes/Settings.class.php:1648
2025
- msgid "The email address where admin notifications should be sent."
2026
  msgstr ""
2027
 
2028
- #: includes/Settings.class.php:1657
2029
- msgid "Notification Emails"
2030
  msgstr ""
2031
 
2032
- #: includes/Settings.class.php:1659
2033
- msgid ""
2034
- "Adjust the messages that are emailed to users and admins during the booking "
2035
- "process."
2036
  msgstr ""
2037
 
2038
- #: includes/Settings.class.php:1669
2039
- msgid "Template Tags"
2040
  msgstr ""
2041
 
2042
- #: includes/Settings.class.php:1671
2043
- msgid ""
2044
- "Use the following tags to automatically add booking information to the "
2045
- "emails. Tags labeled with an asterisk (*) can be used in the email subject "
2046
- "as well."
2047
  msgstr ""
2048
 
2049
- #: includes/Settings.class.php:1682
2050
- msgid "Admin Notification Subject (Pending Booking)"
2051
  msgstr ""
2052
 
2053
- #: includes/Settings.class.php:1683
2054
- msgid "The email subject for admin notifications."
2055
  msgstr ""
2056
 
2057
- #: includes/Settings.class.php:1694
2058
- msgid "Admin Notification Email (Pending Booking)"
2059
  msgstr ""
2060
 
2061
- #: includes/Settings.class.php:1695
2062
- msgid ""
2063
- "Enter the email an admin should receive when an initial booking request is "
2064
- "made."
2065
  msgstr ""
2066
 
2067
- #: includes/Settings.class.php:1706
2068
- msgid "Admin Notification Subject (Auto Confirmed Booking)"
2069
  msgstr ""
2070
 
2071
- #: includes/Settings.class.php:1707
2072
  msgid ""
2073
- "The email subject for admin notifications for automatically-confirmed "
2074
- "bookings."
2075
  msgstr ""
2076
 
2077
- #: includes/Settings.class.php:1718
2078
- msgid "Admin Notification Email (Auto Confirmed Booking)"
 
 
2079
  msgstr ""
2080
 
2081
- #: includes/Settings.class.php:1719
2082
- msgid ""
2083
- "Enter the email an admin should receive when an automatically-confirmed "
2084
- "booking is made."
2085
  msgstr ""
2086
 
2087
- #: includes/Settings.class.php:1730
2088
- msgid "Admin Booking Cancelled Subject"
2089
  msgstr ""
2090
 
2091
- #: includes/Settings.class.php:1731
2092
- msgid "The email subject for admin notifications when a booking is cancelled."
2093
  msgstr ""
2094
 
2095
- #: includes/Settings.class.php:1742
2096
- msgid "Admin Booking Cancelled Email"
2097
  msgstr ""
2098
 
2099
- #: includes/Settings.class.php:1743
2100
- msgid "Enter the email an admin should receive when a booking is cancelled."
2101
  msgstr ""
2102
 
2103
- #: includes/Settings.class.php:1754
2104
- msgid "New Request Email Subject"
2105
  msgstr ""
2106
 
2107
- #: includes/Settings.class.php:1755
2108
- msgid ""
2109
- "The email subject a user should receive when they make an initial booking "
2110
- "request."
2111
  msgstr ""
2112
 
2113
- #: includes/Settings.class.php:1766 includes/load-customizer.php:209
2114
- msgid "New Request Email"
2115
  msgstr ""
2116
 
2117
- #: includes/Settings.class.php:1767
2118
- msgid ""
2119
- "Enter the email a user should receive when they make an initial booking "
2120
- "request."
2121
  msgstr ""
2122
 
2123
- #: includes/Settings.class.php:1778
2124
- msgid "Confirmed Email Subject"
2125
- msgstr ""
 
 
2126
 
2127
- #: includes/Settings.class.php:1779
2128
- msgid ""
2129
- "The email subject a user should receive when their booking has been "
2130
- "confirmed."
2131
- msgstr ""
2132
 
2133
- #: includes/Settings.class.php:1790 includes/load-customizer.php:249
2134
- msgid "Confirmed Email"
2135
  msgstr ""
2136
 
2137
- #: includes/Settings.class.php:1791
2138
  msgid ""
2139
- "Enter the email a user should receive when their booking has been confirmed."
 
2140
  msgstr ""
2141
 
2142
- #: includes/Settings.class.php:1802
2143
- msgid "Rejected Email Subject"
 
 
2144
  msgstr ""
2145
 
2146
- #: includes/Settings.class.php:1803
2147
  msgid ""
2148
- "The email subject a user should receive when their booking has been rejected."
 
 
2149
  msgstr ""
2150
 
2151
- #: includes/Settings.class.php:1814 includes/load-customizer.php:289
2152
- msgid "Rejected Email"
 
 
2153
  msgstr ""
2154
 
2155
- #: includes/Settings.class.php:1815
2156
- msgid ""
2157
- "Enter the email a user should receive when their booking has been rejected."
2158
  msgstr ""
2159
 
2160
- #: includes/Settings.class.php:1826
2161
- msgid "Booking Cancelled Email Subject"
2162
  msgstr ""
2163
 
2164
- #: includes/Settings.class.php:1827
2165
- msgid ""
2166
- "The email subject a user should receive when they have cancelled their "
2167
- "booking."
2168
  msgstr ""
2169
 
2170
- #: includes/Settings.class.php:1838
2171
- msgid "Booking Cancelled Email"
2172
  msgstr ""
2173
 
2174
- #: includes/Settings.class.php:1839
2175
- msgid "Enter the email a user should receive when they cancel their booking."
2176
  msgstr ""
2177
 
2178
- #: includes/Settings.class.php:1850
2179
- msgid "Admin Update Subject"
2180
  msgstr ""
2181
 
2182
- #: includes/Settings.class.php:1851
2183
- #, php-format
2184
  msgid ""
2185
- "The email subject a user should receive when an admin sends them a custom "
2186
- "email message from the %sbookings panel%s."
2187
  msgstr ""
2188
 
2189
- #: includes/Settings.class.php:1871
2190
- msgid "Reservation Reminders"
2191
  msgstr ""
2192
 
2193
- #: includes/Settings.class.php:1873
2194
- msgid "Set up reservation and late arrival reminders."
 
 
2195
  msgstr ""
2196
 
2197
- #: includes/Settings.class.php:1885
2198
- msgid "Ultimate Plan Purchase Email"
2199
  msgstr ""
2200
 
2201
- #: includes/Settings.class.php:1886
2202
  msgid ""
2203
- "The email used to purchase your 'Ultimate' plan subscription. Used to verify "
2204
- "SMS requests are actually being sent from your site."
2205
  msgstr ""
2206
 
2207
- #: includes/Settings.class.php:1900
2208
- msgid "Country Code"
2209
  msgstr ""
2210
 
2211
- #: includes/Settings.class.php:1901
2212
- msgid ""
2213
- "What country code should be added to SMS reminders? If no country is "
2214
- "specified, phone numbers for reservations should start with +XXX (a plus "
2215
- "sign followed by the country code), followed by a space or dash, or else the "
2216
- "number the phone number will be assumed to be North American."
2217
  msgstr ""
2218
 
2219
- #: includes/Settings.class.php:1913
2220
- msgid "Reminder Format"
2221
  msgstr ""
2222
 
2223
- #: includes/Settings.class.php:1914
2224
- msgid ""
2225
- "Should reminders be sent via email or text (SMS) message. SMS requires a "
2226
- "positive credit balance on your account."
2227
  msgstr ""
2228
 
2229
- #: includes/Settings.class.php:1928
2230
- msgid "Late Notification Format"
2231
  msgstr ""
2232
 
2233
- #: includes/Settings.class.php:1929
2234
- msgid ""
2235
- "Should late notifications be sent via email or text (SMS) message. SMS "
2236
- "requires a positive credit balance on your account."
2237
  msgstr ""
2238
 
2239
- #: includes/Settings.class.php:1943
2240
- msgid "Reservation Reminder Before Time"
2241
  msgstr ""
2242
 
2243
- #: includes/Settings.class.php:1944
2244
  msgid ""
2245
- "How long before a reservation should a reminder email be sent? Leave blank "
2246
- "to not send a reservation reminder."
2247
  msgstr ""
2248
 
2249
- #: includes/Settings.class.php:1962
2250
- msgid "Reservation Reminder Email Subject"
2251
  msgstr ""
2252
 
2253
- #: includes/Settings.class.php:1963
2254
- msgid ""
2255
- "The email subject a user should receive as a reminder about their "
2256
- "reservation."
2257
  msgstr ""
2258
 
2259
- #: includes/Settings.class.php:1974
2260
- msgid "Reservation Reminder Email"
2261
  msgstr ""
2262
 
2263
- #: includes/Settings.class.php:1975
2264
- msgid ""
2265
- "Enter the email a user should receive as a reminder about their reservation."
2266
  msgstr ""
2267
 
2268
- #: includes/Settings.class.php:1986
2269
- msgid "Late for Reservation Time"
2270
  msgstr ""
2271
 
2272
- #: includes/Settings.class.php:1987
2273
- msgid ""
2274
- "How long after being late for a reservation should a late arrival email be "
2275
- "sent? Leave blank to not send a late arrival email."
2276
  msgstr ""
2277
 
2278
- #: includes/Settings.class.php:2004
2279
- msgid "Late for Reservation Email Subject"
2280
  msgstr ""
2281
 
2282
- #: includes/Settings.class.php:2005
2283
- msgid ""
2284
- "The email subject a user should receive when they are late for their "
2285
- "reservation."
2286
  msgstr ""
2287
 
2288
- #: includes/Settings.class.php:2016
2289
- msgid "Late for Reservation Email"
2290
  msgstr ""
2291
 
2292
- #: includes/Settings.class.php:2017
2293
- msgid ""
2294
- "Enter the email a user should receive when they are late for their "
2295
- "reservation."
2296
  msgstr ""
2297
 
2298
- #: includes/Settings.class.php:2027 includes/Settings.class.php:2037
2299
- msgid ""
2300
- "Modifying the settings below can prevent your emails from being delivered. "
2301
- "Do not make changes unless you know what you're doing."
2302
  msgstr ""
2303
 
2304
- #: includes/Settings.class.php:2048
2305
- msgid "FROM Email Address Header"
2306
  msgstr ""
2307
 
2308
- #: includes/Settings.class.php:2049
2309
- #, php-format
2310
  msgid ""
2311
- "Change the email address used in the FROM header of all emails sent by this "
2312
- "plugin. In most cases you should not change this. Modifying this can prevent "
2313
- "your emails from being delivered. %sLearn more%s."
2314
  msgstr ""
2315
 
2316
- #: includes/Settings.class.php:2068
2317
- msgid "Payments"
2318
  msgstr ""
2319
 
2320
- #: includes/Settings.class.php:2090
2321
- msgid "Require Deposit"
 
 
 
2322
  msgstr ""
2323
 
2324
- #: includes/Settings.class.php:2091
2325
- msgid "Require guests to make a deposit when making a reservation."
2326
  msgstr ""
2327
 
2328
- #: includes/Settings.class.php:2100
2329
- msgid "Payment Gateway"
 
 
2330
  msgstr ""
2331
 
2332
- #: includes/Settings.class.php:2101
2333
- msgid "Which payment gateway should be used to accept deposits."
2334
  msgstr ""
2335
 
2336
- #: includes/Settings.class.php:2114
2337
- msgid "Deposit Type"
2338
  msgstr ""
2339
 
2340
- #: includes/Settings.class.php:2115
2341
- msgid "What type of deposit should be required, per reservation or per guest?"
 
 
2342
  msgstr ""
2343
 
2344
- #: includes/Settings.class.php:2128
2345
- msgid "Deposit Amount"
2346
  msgstr ""
2347
 
2348
- #: includes/Settings.class.php:2129
2349
  msgid ""
2350
- "What deposit amount is required (either per reservation or per guest, "
2351
- "depending on the setting above)? Minimum is $0.50 in most currencies."
 
 
 
 
2352
  msgstr ""
2353
 
2354
- #: includes/Settings.class.php:2138
2355
- msgid "Currency"
2356
  msgstr ""
2357
 
2358
- #: includes/Settings.class.php:2139
2359
- msgid "Select the currency you accept for your deposits."
2360
  msgstr ""
2361
 
2362
- #: includes/Settings.class.php:2150
2363
- msgid "PayPal"
 
 
2364
  msgstr ""
2365
 
2366
- #: includes/Settings.class.php:2162
2367
- msgid "PayPal Email Address"
2368
  msgstr ""
2369
 
2370
- #: includes/Settings.class.php:2163
2371
- msgid "The email address you'll be using to accept PayPal payments."
 
 
2372
  msgstr ""
2373
 
2374
- #: includes/Settings.class.php:2173
2375
- msgid "Stripe"
2376
  msgstr ""
2377
 
2378
- #: includes/Settings.class.php:2185
2379
- msgid "Strong Customer Authorization (SCA)"
 
 
2380
  msgstr ""
2381
 
2382
- #: includes/Settings.class.php:2186
2383
- msgid ""
2384
- "User will be redirected to Stripe and presented with 3D secure or bank "
2385
- "redirect for payment authentication. (May be necessary for certain EU "
2386
- "compliance.)"
2387
  msgstr ""
2388
 
2389
- #: includes/Settings.class.php:2195
2390
- msgid "Stripe Currency Symbol"
2391
  msgstr ""
2392
 
2393
- #: includes/Settings.class.php:2196
2394
- msgid ""
2395
- "The currency symbol you'd like displayed before or after the required "
2396
- "deposit amount."
2397
  msgstr ""
2398
 
2399
- #: includes/Settings.class.php:2206
2400
- msgid "CC Expiration Single Field"
2401
  msgstr ""
2402
 
2403
- #: includes/Settings.class.php:2207
2404
- msgid ""
2405
- "Should the field for card expiry details be a single field with a mask or "
2406
- "two separate fields for month and year?"
2407
  msgstr ""
2408
 
2409
- #: includes/Settings.class.php:2216
2410
- msgid "Currency Symbol Location"
2411
  msgstr ""
2412
 
2413
- #: includes/Settings.class.php:2217
2414
  msgid ""
2415
- "Should the currency symbol be placed before or after the deposit amount?"
 
2416
  msgstr ""
2417
 
2418
- #: includes/Settings.class.php:2230
2419
- msgid "Test/Live Mode"
2420
  msgstr ""
2421
 
2422
- #: includes/Settings.class.php:2231
2423
  msgid ""
2424
- "Should the system use test or live mode? Test mode should only be used for "
2425
- "testing, no deposits will actually be processed while turned on."
2426
  msgstr ""
2427
 
2428
- #: includes/Settings.class.php:2244
2429
- msgid "Stripe Live Secret"
2430
  msgstr ""
2431
 
2432
- #: includes/Settings.class.php:2245
2433
- msgid "The live secret that you have set up for your Stripe account."
2434
  msgstr ""
2435
 
2436
- #: includes/Settings.class.php:2254
2437
- msgid "Stripe Live Publishable"
2438
  msgstr ""
2439
 
2440
- #: includes/Settings.class.php:2255
2441
- msgid "The live publishable that you have set up for your Stripe account."
2442
  msgstr ""
2443
 
2444
- #: includes/Settings.class.php:2264
2445
- msgid "Stripe Test Secret"
2446
  msgstr ""
2447
 
2448
- #: includes/Settings.class.php:2265
2449
- msgid ""
2450
- "The test secret that you have set up for your Stripe account. Only needed "
2451
- "for testing payments."
2452
  msgstr ""
2453
 
2454
- #: includes/Settings.class.php:2274
2455
- msgid "Stripe Test Publishable"
2456
  msgstr ""
2457
 
2458
- #: includes/Settings.class.php:2275
2459
  msgid ""
2460
- "The test publishable that you have set up for your Stripe account. Only "
2461
- "needed for testing payments."
2462
  msgstr ""
2463
 
2464
- #: includes/Settings.class.php:2316
2465
- msgid "Paper Size"
2466
  msgstr ""
2467
 
2468
- #: includes/Settings.class.php:2317
2469
- msgid "Select your preferred paper size."
2470
  msgstr ""
2471
 
2472
- #: includes/Settings.class.php:2332
2473
- msgid "PDF Renderer"
2474
  msgstr ""
2475
 
2476
- #: includes/Settings.class.php:2333
2477
- msgid ""
2478
- "mPDF looks nicer but is not compatible with all servers. Select TCPDF only "
2479
- "if you get errors when trying to export a PDF."
2480
  msgstr ""
2481
 
2482
- #: includes/Settings.class.php:2348
2483
- msgid "Excel/CSV Date Format"
2484
  msgstr ""
2485
 
2486
- #: includes/Settings.class.php:2349
2487
- msgid ""
2488
- "Enter a custom date format to be used when generating Excel/CSV exports if "
2489
- "you want the format to be different than your WordPress setting. This is "
2490
- "useful if you need the date in a machine-readable format."
2491
  msgstr ""
2492
 
2493
- #: includes/Settings.class.php:2368
2494
- msgid "Styling"
2495
  msgstr ""
2496
 
2497
- #: includes/Settings.class.php:2378
2498
- msgid "Reservation Form"
2499
  msgstr ""
2500
 
2501
- #: includes/Settings.class.php:2391
2502
- msgid "Layout"
2503
  msgstr ""
2504
 
2505
- #: includes/Settings.class.php:2392
2506
- msgid "Choose which layout you want to use for your reservation form"
 
 
2507
  msgstr ""
2508
 
2509
- #: includes/Settings.class.php:2407
2510
- msgid "Section Title Font Family"
2511
  msgstr ""
2512
 
2513
- #: includes/Settings.class.php:2408
2514
- msgid ""
2515
- "Choose the font family for the section titles. (Please note that the font "
2516
- "family must already be loaded on the site. This does not load it.)"
 
 
2517
  msgstr ""
2518
 
2519
- #: includes/Settings.class.php:2417
2520
- msgid "Section Title Font Size"
2521
  msgstr ""
2522
 
2523
- #: includes/Settings.class.php:2418
2524
- msgid ""
2525
- "Choose the font size for the section titles. Include the unit (e.g. 20px or "
2526
- "2em)."
2527
  msgstr ""
2528
 
2529
- #: includes/Settings.class.php:2427
2530
- msgid "Section Title Color"
2531
  msgstr ""
2532
 
2533
- #: includes/Settings.class.php:2428
2534
- msgid "Choose the color for the section titles."
2535
  msgstr ""
2536
 
2537
- #: includes/Settings.class.php:2438
2538
- msgid "Section Background Color"
2539
  msgstr ""
2540
 
2541
- #: includes/Settings.class.php:2439
2542
- msgid "Choose the background color for the form sections."
2543
  msgstr ""
2544
 
2545
- #: includes/Settings.class.php:2448
2546
- msgid "Section Border Size"
2547
  msgstr ""
2548
 
2549
- #: includes/Settings.class.php:2449
2550
- msgid ""
2551
- "Choose the border size for the form sections (in the default layout). "
2552
- "Include the unit (e.g. 2px)."
2553
  msgstr ""
2554
 
2555
- #: includes/Settings.class.php:2458
2556
- msgid "Section Border Color"
2557
  msgstr ""
2558
 
2559
- #: includes/Settings.class.php:2459
2560
- msgid "Choose the color for the section border (in the default layout)."
2561
  msgstr ""
2562
 
2563
- #: includes/Settings.class.php:2469
2564
- msgid "Label Font Family"
2565
  msgstr ""
2566
 
2567
- #: includes/Settings.class.php:2470
2568
  msgid ""
2569
- "Choose the font family for the form field labels. (Please note that the font "
2570
- "family must already be loaded on the site. This does not load it.)"
2571
  msgstr ""
2572
 
2573
- #: includes/Settings.class.php:2479
2574
- msgid "Label Font Size"
2575
  msgstr ""
2576
 
2577
- #: includes/Settings.class.php:2480
2578
  msgid ""
2579
- "Choose the font size for the form field labels. Include the unit (e.g. 20px "
2580
- "or 2em)."
2581
- msgstr ""
2582
-
2583
- #: includes/Settings.class.php:2489
2584
- msgid "Label Color"
2585
  msgstr ""
2586
 
2587
- #: includes/Settings.class.php:2490
2588
- msgid "Choose the color for the form field labels."
2589
  msgstr ""
2590
 
2591
- #: includes/Settings.class.php:2500
2592
- msgid "\"Add a Message\" Button Background Color"
2593
  msgstr ""
2594
 
2595
- #: includes/Settings.class.php:2501
2596
- msgid "Choose the background color for the \"Add a Message\" button."
 
 
2597
  msgstr ""
2598
 
2599
- #: includes/Settings.class.php:2510
2600
- msgid "\"Add a Message\" Button Background Hover Color"
2601
  msgstr ""
2602
 
2603
- #: includes/Settings.class.php:2511
2604
- msgid "Choose the background color for the \"Add a Message\" button on hover."
 
 
 
2605
  msgstr ""
2606
 
2607
- #: includes/Settings.class.php:2520
2608
- msgid "\"Add a Message\" Button Text Color"
2609
  msgstr ""
2610
 
2611
- #: includes/Settings.class.php:2521
2612
- msgid "Choose the text color for the \"Add a Message\" button."
2613
  msgstr ""
2614
 
2615
- #: includes/Settings.class.php:2530
2616
- msgid "\"Add a Message\" Button Text Hover Color"
2617
  msgstr ""
2618
 
2619
- #: includes/Settings.class.php:2531
2620
- msgid "Choose the text color for the \"Add a Message\" button on hover."
 
 
2621
  msgstr ""
2622
 
2623
- #: includes/Settings.class.php:2541
2624
- msgid "\"Request Booking\" Button Background Color"
2625
  msgstr ""
2626
 
2627
- #: includes/Settings.class.php:2542
2628
- msgid "Choose the background color for the \"Request Booking\" button."
 
 
2629
  msgstr ""
2630
 
2631
- #: includes/Settings.class.php:2551
2632
- msgid "\"Request Booking\" Button Background Hover Color"
2633
  msgstr ""
2634
 
2635
- #: includes/Settings.class.php:2552
2636
  msgid ""
2637
- "Choose the background color for the \"Request Booking\" button on hover."
 
2638
  msgstr ""
2639
 
2640
- #: includes/Settings.class.php:2561
2641
- msgid "\"Request Booking\" Button Text Color"
2642
  msgstr ""
2643
 
2644
- #: includes/Settings.class.php:2562
2645
- msgid "Choose the text color for the \"Request Booking\" button."
 
 
2646
  msgstr ""
2647
 
2648
- #: includes/Settings.class.php:2571
2649
- msgid "\"Request Booking\" Button Text Hover Color"
2650
  msgstr ""
2651
 
2652
- #: includes/Settings.class.php:2572
2653
- msgid "Choose the text color for the \"Request Booking\" button on hover."
2654
  msgstr ""
2655
 
2656
- #: includes/Settings.class.php:2582
2657
- msgid "Cancel Reservation Button Background Color"
2658
  msgstr ""
2659
 
2660
- #: includes/Settings.class.php:2583
2661
  msgid ""
2662
- "Choose the background color for the cancel reservation toggle button button."
 
2663
  msgstr ""
2664
 
2665
- #: includes/Settings.class.php:2592
2666
- msgid "Cancel Reservation Button Background Hover Color"
2667
  msgstr ""
2668
 
2669
- #: includes/Settings.class.php:2593
2670
- msgid ""
2671
- "Choose the background color for the cancel reservation toggle button on "
2672
- "hover."
2673
  msgstr ""
2674
 
2675
- #: includes/Settings.class.php:2602
2676
- msgid "Cancel Reservation Text Color"
2677
  msgstr ""
2678
 
2679
- #: includes/Settings.class.php:2603
2680
- msgid "Choose the text color for the cancel reservation toggle button."
 
 
2681
  msgstr ""
2682
 
2683
- #: includes/Settings.class.php:2612
2684
- msgid "Cancel Reservation Text Hover Color"
2685
  msgstr ""
2686
 
2687
- #: includes/Settings.class.php:2613
2688
  msgid ""
2689
- "Choose the text color for the cancel reservation toggle button on hover."
 
2690
  msgstr ""
2691
 
2692
- #: includes/Settings.class.php:2623
2693
- msgid "\"Find Reservations\" Button Background Color"
2694
  msgstr ""
2695
 
2696
- #: includes/Settings.class.php:2624
2697
- msgid "Choose the background color for the \"Find Reservations\" button."
 
 
 
2698
  msgstr ""
2699
 
2700
- #: includes/Settings.class.php:2633
2701
- msgid "\"Find Reservations\" Button Background Hover Color"
2702
  msgstr ""
2703
 
2704
- #: includes/Settings.class.php:2634
2705
- msgid ""
2706
- "Choose the background color for the \"Find Reservations\" button on hover."
2707
  msgstr ""
2708
 
2709
- #: includes/Settings.class.php:2643
2710
- msgid "\"Find Reservations\" Button Text Color"
 
2711
  msgstr ""
2712
 
2713
- #: includes/Settings.class.php:2644
2714
- msgid "Choose the text color for the \"Find Reservations\" button."
2715
  msgstr ""
2716
 
2717
- #: includes/Settings.class.php:2653
2718
- msgid "\"Find Reservations\" Button Text Hover Color"
 
2719
  msgstr ""
2720
 
2721
- #: includes/Settings.class.php:2654
2722
- msgid "Choose the text color for the \"Find Reservations\" button on hover."
2723
  msgstr ""
2724
 
2725
- #: includes/Settings.class.php:2673
2726
- msgid "Any size"
 
2727
  msgstr ""
2728
 
2729
- #: includes/Settings.class.php:2823
2730
- #: includes/integrations/business-profile.php:100
2731
- msgid "Book a table"
2732
  msgstr ""
2733
 
2734
- #: includes/Settings.class.php:2851
2735
- msgid "Contact Details"
 
2736
  msgstr ""
2737
 
2738
- #: includes/Settings.class.php:2877
2739
  msgid "Add a Message"
2740
  msgstr ""
2741
 
2742
- #: includes/Settings.class.php:2971
2743
  msgid "Email of the user who made the booking"
2744
  msgstr ""
2745
 
2746
- #: includes/Settings.class.php:2972
2747
  msgid "* Name of the user who made the booking"
2748
  msgstr ""
2749
 
2750
- #: includes/Settings.class.php:2973
2751
  msgid "* Number of people booked"
2752
  msgstr ""
2753
 
2754
- #: includes/Settings.class.php:2974
2755
  msgid "* Date and time of the booking"
2756
  msgstr ""
2757
 
2758
- #: includes/Settings.class.php:2975
2759
  msgid "Phone number if supplied with the request"
2760
  msgstr ""
2761
 
2762
- #: includes/Settings.class.php:2976
2763
  msgid "Message added to the request"
2764
  msgstr ""
2765
 
2766
- #: includes/Settings.class.php:2977
2767
  msgid "A link to the admin panel showing pending bookings"
2768
  msgstr ""
2769
 
2770
- #: includes/Settings.class.php:2978
2771
- msgid ""
2772
- "A link that a guest can use to cancel their booking if cancellations are "
2773
- "enabled"
2774
- msgstr ""
2775
-
2776
- #: includes/Settings.class.php:2979
2777
- msgid ""
2778
- "A link to confirm this booking. Only include this in admin notifications"
2779
  msgstr ""
2780
 
2781
- #: includes/Settings.class.php:2980
2782
  msgid "A link to reject this booking. Only include this in admin notifications"
2783
  msgstr ""
2784
 
2785
- #: includes/Settings.class.php:2981
2786
  msgid "The name of this website"
2787
  msgstr ""
2788
 
2789
- #: includes/Settings.class.php:2982
2790
  msgid "A link to this website"
2791
  msgstr ""
2792
 
2793
- #: includes/Settings.class.php:2983
2794
  msgid "Current date and time"
2795
  msgstr ""
2796
 
2797
- #: includes/Settings.class.php:2984
2798
- msgid "The table(s) for the booking"
2799
- msgstr ""
2800
-
2801
- #: includes/WP_List_Table.BookingsTable.class.php:264
2802
  msgid "Upcoming"
2803
  msgstr ""
2804
 
2805
- #: includes/WP_List_Table.BookingsTable.class.php:265
2806
  msgid "Today"
2807
  msgstr ""
2808
 
2809
- #: includes/WP_List_Table.BookingsTable.class.php:266
2810
- msgid "Past"
 
2811
  msgstr ""
2812
 
2813
- #: includes/WP_List_Table.BookingsTable.class.php:267
2814
- #: includes/WP_List_Table.BookingsTable.class.php:319
2815
- msgid "All"
2816
  msgstr ""
2817
 
2818
- #: includes/WP_List_Table.BookingsTable.class.php:287
2819
  msgid "Start Date:"
2820
  msgstr ""
2821
 
2822
- #: includes/WP_List_Table.BookingsTable.class.php:288
2823
  msgid "Start Date"
2824
  msgstr ""
2825
 
2826
- #: includes/WP_List_Table.BookingsTable.class.php:289
2827
- msgid "Start Time"
2828
- msgstr ""
2829
-
2830
- #: includes/WP_List_Table.BookingsTable.class.php:292
2831
  msgid "End Date:"
2832
  msgstr ""
2833
 
2834
- #: includes/WP_List_Table.BookingsTable.class.php:293
2835
  msgid "End Date"
2836
  msgstr ""
2837
 
2838
- #: includes/WP_List_Table.BookingsTable.class.php:294
2839
- msgid "End Time"
2840
- msgstr ""
2841
-
2842
- #: includes/WP_List_Table.BookingsTable.class.php:296
2843
  msgid "Apply"
2844
  msgstr ""
2845
 
2846
- #: includes/WP_List_Table.BookingsTable.class.php:298
2847
  msgid "Clear Filter"
2848
  msgstr ""
2849
 
2850
- #: includes/WP_List_Table.BookingsTable.class.php:320
2851
  msgid "Pending"
2852
  msgstr ""
2853
 
2854
- #: includes/WP_List_Table.BookingsTable.class.php:321
2855
- msgid "Payment Pending"
2856
- msgstr ""
2857
-
2858
- #: includes/WP_List_Table.BookingsTable.class.php:322
2859
  msgid "Confirmed"
2860
  msgstr ""
2861
 
2862
- #: includes/WP_List_Table.BookingsTable.class.php:323
2863
  msgid "Closed"
2864
  msgstr ""
2865
 
2866
- #: includes/WP_List_Table.BookingsTable.class.php:324
2867
- #: includes/WP_List_Table.BookingsTable.class.php:464
2868
  msgid "Trash"
2869
  msgstr ""
2870
 
2871
- #: includes/WP_List_Table.BookingsTable.class.php:328
2872
- msgid "Payment Failed"
2873
- msgstr ""
2874
-
2875
- #: includes/WP_List_Table.BookingsTable.class.php:404
2876
- msgid "ID"
2877
- msgstr ""
2878
-
2879
- #: includes/WP_List_Table.BookingsTable.class.php:413
2880
- #: includes/template-functions.php:687
2881
- msgid "Table"
2882
  msgstr ""
2883
 
2884
- #: includes/WP_List_Table.BookingsTable.class.php:416
2885
- #: includes/template-functions.php:689
2886
  msgid "Details"
2887
  msgstr ""
2888
 
2889
- #: includes/WP_List_Table.BookingsTable.class.php:431
2890
  msgid "Submitted By"
2891
  msgstr ""
2892
 
2893
- #: includes/WP_List_Table.BookingsTable.class.php:459
2894
  msgid "Loading"
2895
  msgstr ""
2896
 
2897
- #: includes/WP_List_Table.BookingsTable.class.php:463
2898
  msgid "Edit"
2899
  msgstr ""
2900
 
2901
- #: includes/WP_List_Table.BookingsTable.class.php:546
2902
  msgid "Unknown IP"
2903
  msgstr ""
2904
 
2905
- #: includes/WP_List_Table.BookingsTable.class.php:547
2906
  msgid "Unknown Date"
2907
  msgstr ""
2908
 
2909
- #: includes/WP_List_Table.BookingsTable.class.php:558
 
 
 
 
 
 
 
 
 
 
 
 
2910
  msgid "Ban"
2911
  msgstr ""
2912
 
2913
- #: includes/WP_List_Table.BookingsTable.class.php:561
2914
  msgid "Delete Customer"
2915
  msgstr ""
2916
 
2917
- #: includes/WP_List_Table.BookingsTable.class.php:624
2918
- #: lib/simple-admin-pages/classes/AdminPageSetting.InfiniteTable.class.php:117
2919
- #: lib/simple-admin-pages/classes/AdminPageSetting.InfiniteTable.class.php:147
2920
  msgid "Delete"
2921
  msgstr ""
2922
 
2923
- #: includes/WP_List_Table.BookingsTable.class.php:625
2924
  msgid "Set To Confirmed"
2925
  msgstr ""
2926
 
2927
- #: includes/WP_List_Table.BookingsTable.class.php:626
2928
  msgid "Set To Pending Review"
2929
  msgstr ""
2930
 
2931
- #: includes/WP_List_Table.BookingsTable.class.php:627
2932
  msgid "Set To Closed"
2933
  msgstr ""
2934
 
2935
- #: includes/WP_List_Table.BookingsTable.class.php:884
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2936
  msgid "You're viewing bookings that have been moved to the trash."
2937
  msgstr ""
2938
 
2939
- #: includes/WP_List_Table.BookingsTable.class.php:893
2940
  msgid "Only today's bookings are being shown."
2941
  msgstr ""
2942
 
2943
- #: includes/WP_List_Table.BookingsTable.class.php:895
2944
  msgid "Only upcoming bookings are being shown."
2945
  msgstr ""
2946
 
@@ -2952,22 +1317,6 @@ msgstr ""
2952
  msgid "Title"
2953
  msgstr ""
2954
 
2955
- #: includes/class-designer.php:64 includes/load-customizer.php:534
2956
- msgid ""
2957
- "This message was sent by {site_link} on {current_time}. You are receiving "
2958
- "this email because we received a booking request from this email address."
2959
- msgstr ""
2960
-
2961
- #: includes/class-designer.php:182 includes/load-customizer.php:670
2962
- msgid "Book Another Time"
2963
- msgstr ""
2964
-
2965
- #: includes/class-designer.php:236
2966
- msgid ""
2967
- "This is an example of an Admin Update email. You can send a message to a "
2968
- "customer from the list of bookings in your admin panel."
2969
- msgstr ""
2970
-
2971
  #: includes/integrations/business-profile.php:126
2972
  #: includes/integrations/business-profile.php:129
2973
  msgid "Show book a table link"
@@ -3005,247 +1354,438 @@ msgstr ""
3005
  msgid "--- Winery"
3006
  msgstr ""
3007
 
3008
- #: includes/integrations/business-profile.php:289
3009
- msgid "Footer Contact Details"
3010
  msgstr ""
3011
 
3012
- #: includes/load-customizer.php:79
3013
- msgid "No Email Template"
3014
  msgstr ""
3015
 
3016
- #: includes/load-customizer.php:87
3017
- msgid "Logo & Colors"
3018
  msgstr ""
3019
 
3020
- #: includes/load-customizer.php:97
3021
- msgid "Logo"
 
 
3022
  msgstr ""
3023
 
3024
- #: includes/load-customizer.php:110
3025
- msgid "Primary Color"
3026
  msgstr ""
3027
 
3028
- #: includes/load-customizer.php:122
3029
- msgid "Primary Text Color"
3030
  msgstr ""
3031
 
3032
- #: includes/load-customizer.php:123
3033
- msgid ""
3034
- "Some templates display text on a background of the Primary Color. Adjust the "
3035
- "text color in these cases to make sure it can be read easily."
3036
  msgstr ""
3037
 
3038
- #: includes/load-customizer.php:135
3039
- msgid "Button Color"
3040
  msgstr ""
3041
 
3042
- #: includes/load-customizer.php:136
3043
- msgid ""
3044
- "Some emails include a button. Select a background color for these buttons."
3045
  msgstr ""
3046
 
3047
- #: includes/load-customizer.php:148
3048
- msgid "Button Text Color"
3049
  msgstr ""
3050
 
3051
- #: includes/load-customizer.php:149
3052
- msgid "Some templates include a button. Select a text color for these buttons"
 
3053
  msgstr ""
3054
 
3055
- #: includes/load-customizer.php:159
3056
- msgid "Email Acknowledgement"
 
3057
  msgstr ""
3058
 
3059
- #: includes/load-customizer.php:161
 
3060
  msgid ""
3061
- "Display a brief acknowledgement of why the user is receiving this message at "
3062
- "the bottom of the email."
3063
- msgstr ""
3064
-
3065
- #: includes/load-customizer.php:169
3066
- msgid "Admin Notification Email"
3067
  msgstr ""
3068
 
3069
- #: includes/load-customizer.php:170
3070
- msgid "The email sent to the admin when a new booking is made."
 
 
 
3071
  msgstr ""
3072
 
3073
- #: includes/load-customizer.php:180 includes/load-customizer.php:220
3074
- #: includes/load-customizer.php:260 includes/load-customizer.php:300
3075
- #: includes/load-customizer.php:354 includes/load-customizer.php:393
3076
- #: includes/load-customizer.php:433
3077
- msgid "Template"
3078
  msgstr ""
3079
 
3080
- #: includes/load-customizer.php:189 includes/load-customizer.php:229
3081
- #: includes/load-customizer.php:269 includes/load-customizer.php:309
3082
- #: includes/load-customizer.php:363 includes/load-customizer.php:404
3083
- #: includes/load-customizer.php:444
3084
- msgid "Lead Sentence"
3085
  msgstr ""
3086
 
3087
- #: includes/load-customizer.php:199 includes/load-customizer.php:239
3088
- #: includes/load-customizer.php:279 includes/load-customizer.php:329
3089
- #: includes/load-customizer.php:373 includes/load-customizer.php:414
3090
- #: includes/load-customizer.php:454
3091
- msgid "Footer Message"
3092
  msgstr ""
3093
 
3094
- #: includes/load-customizer.php:210
3095
- msgid "The email a user receives when they make an initial booking request."
 
3096
  msgstr ""
3097
 
3098
- #: includes/load-customizer.php:250
3099
- msgid "The email a user receives when their booking is confirmed."
 
3100
  msgstr ""
3101
 
3102
- #: includes/load-customizer.php:290
3103
- msgid "The email a user receives when their booking has been rejected."
 
3104
  msgstr ""
3105
 
3106
- #: includes/load-customizer.php:319
3107
- msgid "Book Again Label"
 
3108
  msgstr ""
3109
 
3110
- #: includes/load-customizer.php:339
3111
- msgid "Admin Update"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3112
  msgstr ""
3113
 
3114
- #: includes/load-customizer.php:341
3115
- #, php-format
3116
- msgid ""
3117
- "The email a user receives when an admin sends them a custom email message "
3118
- "from the %sbookings panel%s."
3119
  msgstr ""
3120
 
3121
- #: includes/load-customizer.php:383
3122
- msgid "User Reminder"
 
3123
  msgstr ""
3124
 
3125
- #: includes/load-customizer.php:384
3126
- msgid "The email a user receives as a reminder of the reservation."
 
3127
  msgstr ""
3128
 
3129
- #: includes/load-customizer.php:423
3130
- msgid "User Late"
 
3131
  msgstr ""
3132
 
3133
- #: includes/load-customizer.php:424
3134
- msgid "The email a user receives when they are late for their reservation."
 
3135
  msgstr ""
3136
 
3137
- #: includes/template-functions.php:151
3138
- #, php-format
3139
- msgid ""
3140
- "Your reservation deposit payment has failed with the following message \"%s"
3141
- "\" Please contact the site administrator for assistance."
3142
  msgstr ""
3143
 
3144
- #: includes/template-functions.php:159
3145
- msgid "Your reservation has been successfully cancelled."
 
3146
  msgstr ""
3147
 
3148
- #: includes/template-functions.php:164 restaurant-reservations.php:408
3149
- msgid "Want to modify your reservation?"
 
3150
  msgstr ""
3151
 
3152
- #: includes/template-functions.php:167
3153
- msgid "Use the form below to modify your reservation"
 
3154
  msgstr ""
3155
 
3156
- #: includes/template-functions.php:168
3157
- msgid "Email:"
 
3158
  msgstr ""
3159
 
3160
- #: includes/template-functions.php:171
3161
- msgid "Find Reservations"
 
3162
  msgstr ""
3163
 
3164
- #: includes/template-functions.php:223
3165
- msgid "Proceed to Deposit"
 
3166
  msgstr ""
3167
 
3168
- #: includes/template-functions.php:223
3169
- msgid "Request Booking"
 
 
 
3170
  msgstr ""
3171
 
3172
- #: includes/template-functions.php:317
3173
- msgid "Deposit Required: "
 
 
 
3174
  msgstr ""
3175
 
3176
- #: includes/template-functions.php:325
3177
- msgid "Card Detail"
 
 
 
 
 
3178
  msgstr ""
3179
 
3180
- #: includes/template-functions.php:330
3181
- msgid "Card Number"
 
 
 
 
 
3182
  msgstr ""
3183
 
3184
- #: includes/template-functions.php:334
3185
- msgid "CVC"
 
3186
  msgstr ""
3187
 
3188
- #: includes/template-functions.php:338
3189
- msgid "Expiration (MM/YYYY)"
 
 
 
3190
  msgstr ""
3191
 
3192
- #: includes/template-functions.php:347
3193
- msgid ""
3194
- "Please wait. Do not refresh until the button enables or the page reloads."
 
 
3195
  msgstr ""
3196
 
3197
- #: includes/template-functions.php:349
3198
- msgid "Make Deposit"
 
3199
  msgstr ""
3200
 
3201
- #: includes/template-functions.php:670
3202
- msgid "Set reservation status to 'Arrived'?"
 
3203
  msgstr ""
3204
 
3205
- #: includes/template-functions.php:681
3206
- msgid "Arrived"
 
3207
  msgstr ""
3208
 
3209
- #: lib/simple-admin-pages/classes/AdminPage.class.php:173
3210
- msgid "You do not have sufficient permissions to access this page."
 
3211
  msgstr ""
3212
 
3213
- #: restaurant-reservations.php:225
3214
- msgid "Booking Manager"
 
3215
  msgstr ""
3216
 
3217
- #: restaurant-reservations.php:316
3218
- msgid "MENU"
 
3219
  msgstr ""
3220
 
3221
- #: restaurant-reservations.php:317
3222
- msgid "Dashboard"
 
3223
  msgstr ""
3224
 
3225
- #: restaurant-reservations.php:320
3226
- msgid "Custom Fields"
 
3227
  msgstr ""
3228
 
3229
- #: restaurant-reservations.php:409
3230
- msgid "Make a reservation"
 
3231
  msgstr ""
3232
 
3233
- #: restaurant-reservations.php:410
3234
- msgid "guest"
 
 
 
 
3235
  msgstr ""
3236
 
3237
- #: restaurant-reservations.php:411
3238
- msgid "guests"
 
3239
  msgstr ""
3240
 
3241
- #: restaurant-reservations.php:413
3242
- msgid "Cancelled"
 
3243
  msgstr ""
3244
 
3245
- #: restaurant-reservations.php:436
3246
- msgid "View the help documentation for Restaurant Reservations"
 
 
 
3247
  msgstr ""
3248
 
3249
- #: restaurant-reservations.php:436
3250
- msgid "Help"
3251
- msgstr ""
 
1
+ # Copyright (C) 2019 Theme of the Crop
2
+ # This file is distributed under the GNU General Public License v2.0 or later.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Restaurant Reservations 1.8.2\n"
6
+ "Report-Msgid-Bugs-To: https://themeofthecrop.com\n"
7
+ "POT-Creation-Date: 2019-03-18 10:23:40+00:00\n"
 
 
 
8
  "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+ "X-Generator: grunt-wp-i18n 0.5.4\n"
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  #: includes/Addons.class.php:47
17
+ msgid "Addons for Restaurant Reservations"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  msgstr ""
19
 
20
+ #: includes/Addons.class.php:54
21
+ msgid "Custom Fields"
22
  msgstr ""
23
 
24
+ #: includes/Addons.class.php:57
 
25
  msgid ""
26
+ "Plan your dinner service better by asking for special seating requests, "
27
+ "dietary needs and more when customers book online."
 
 
 
 
 
 
 
 
 
28
  msgstr ""
29
 
30
+ #: includes/Addons.class.php:61 includes/Addons.class.php:77
31
+ #: includes/Addons.class.php:93 includes/Addons.class.php:109
32
+ msgid "Learn More"
33
  msgstr ""
34
 
35
+ #: includes/Addons.class.php:70
36
+ msgid "Export Bookings"
37
  msgstr ""
38
 
39
+ #: includes/Addons.class.php:73
 
 
 
 
 
 
 
 
40
  msgid ""
41
+ "Easily print your bookings in a PDF or export them to an Excel/CSV file so "
42
+ "you can analyze patterns, cull customer data and import bookings into other "
43
+ "services."
44
  msgstr ""
45
 
46
+ #: includes/Addons.class.php:86 includes/Settings.class.php:680
47
+ msgid "Email Templates"
48
  msgstr ""
49
 
50
+ #: includes/Addons.class.php:89
51
  msgid ""
52
+ "Send beautiful email notifications with your own logo and brand colors when "
53
+ "your customers make a reservation."
54
  msgstr ""
55
 
56
+ #: includes/Addons.class.php:102
57
+ msgid "MailChimp"
58
  msgstr ""
59
 
60
+ #: includes/Addons.class.php:105
61
  msgid ""
62
+ "Subscribe requests to your MailChimp mailing list and watch your "
63
+ "subscription rates grow effortlessly."
64
  msgstr ""
65
 
66
+ #: includes/Addons.class.php:122
67
+ msgid "Augustan"
68
  msgstr ""
69
 
70
+ #: includes/Addons.class.php:125
71
  msgid ""
72
+ "A traditionally elegant theme for high-class restaurants, with simple setup "
73
+ "and powerful features."
74
  msgstr ""
75
 
76
+ #: includes/Addons.class.php:129 includes/Addons.class.php:148
77
+ #: includes/Addons.class.php:167 includes/Addons.class.php:186
78
+ #: includes/Addons.class.php:205 includes/Addons.class.php:224
79
+ #: includes/Addons.class.php:243 includes/Addons.class.php:262
80
+ #: includes/Addons.class.php:281 includes/Addons.class.php:300
81
+ #: includes/Addons.class.php:319
82
+ msgid "View Theme"
83
  msgstr ""
84
 
85
+ #: includes/Addons.class.php:141
86
+ msgid "Luigi"
87
  msgstr ""
88
 
89
+ #: includes/Addons.class.php:144
90
  msgid ""
91
+ "A smart theme for upscale bistros and fine Italian restaurants. Get up and "
92
+ "running quickly."
93
  msgstr ""
94
 
95
+ #: includes/Addons.class.php:160
96
+ msgid "The Spot"
97
  msgstr ""
98
 
99
+ #: includes/Addons.class.php:163
100
  msgid ""
101
+ "A vibrant theme for bars, pubs and destination restaurants with an "
102
+ "attention-grabbing homepage."
103
  msgstr ""
104
 
105
+ #: includes/Addons.class.php:179
106
+ msgid "Plate Up"
107
  msgstr ""
108
 
109
+ #: includes/Addons.class.php:182
110
  msgid ""
111
+ "A refined theme for sophisticated, modern restaurants to drive customers to "
112
+ "your booking form."
 
 
 
 
113
  msgstr ""
114
 
115
+ #: includes/Addons.class.php:198
116
+ msgid "Plate"
117
  msgstr ""
118
 
119
+ #: includes/Addons.class.php:201
120
+ msgid ""
121
+ "A delightfully beautiful WordPress theme designed to help you build a "
122
+ "stunning restaurant website."
123
  msgstr ""
124
 
125
+ #: includes/Addons.class.php:217
126
+ msgid "Auberge"
127
  msgstr ""
128
 
129
+ #: includes/Addons.class.php:220
130
+ msgid ""
131
+ "Display a menu of your restaurant, café or bar stylishly with this free "
132
+ "mobile-friendly WordPress theme."
133
  msgstr ""
134
 
135
+ #: includes/Addons.class.php:236
136
+ msgid "Liber"
137
  msgstr ""
138
 
139
+ #: includes/Addons.class.php:239
140
+ msgid ""
141
+ "A responsive theme optimized for restaurants and bars supporting features "
142
+ "these websites need."
143
  msgstr ""
144
 
145
+ #: includes/Addons.class.php:255
146
+ msgid "Brasserie"
147
  msgstr ""
148
 
149
+ #: includes/Addons.class.php:258
150
+ msgid ""
151
+ "A delightfully simple to use and beautifully crafted free theme for any "
152
+ "food establishment."
153
  msgstr ""
154
 
155
+ #: includes/Addons.class.php:274
156
+ msgid "Veggie"
157
  msgstr ""
158
 
159
+ #: includes/Addons.class.php:277
160
  msgid ""
161
+ "A food blogging and restaurant theme with modern, easy-to-read typography "
162
+ "and minimalist design."
163
  msgstr ""
164
 
165
+ #: includes/Addons.class.php:293
166
+ msgid "Good Ol' Wine"
167
  msgstr ""
168
 
169
+ #: includes/Addons.class.php:296
170
+ msgid ""
171
+ "A beautiful responsive theme that is suitable for wine enthusiasts, "
172
+ "wineries and wine bars."
173
  msgstr ""
174
 
175
+ #: includes/Addons.class.php:312
176
+ msgid "Healthy Living"
177
  msgstr ""
178
 
179
+ #: includes/Addons.class.php:315
180
+ msgid ""
181
+ "A modern, clean healthy food blogging theme that can be used for a "
182
+ "restaurant as well."
183
  msgstr ""
184
 
185
+ #: includes/AdminBookings.class.php:88
186
+ msgid "Restaurant Bookings"
187
  msgstr ""
188
 
189
+ #: includes/AdminBookings.class.php:89 includes/CustomPostTypes.class.php:50
190
+ msgid "Add New"
191
  msgstr ""
192
 
193
+ #: includes/AdminBookings.class.php:127 includes/AdminBookings.class.php:229
194
+ msgid "Columns"
195
  msgstr ""
196
 
197
+ #: includes/AdminBookings.class.php:167 restaurant-reservations.php:235
198
+ msgid "Add Booking"
 
 
199
  msgstr ""
200
 
201
+ #: includes/AdminBookings.class.php:170 includes/AdminBookings.class.php:211
202
+ #: includes/AdminBookings.class.php:256
203
+ msgid "Cancel"
204
  msgstr ""
205
 
206
+ #: includes/AdminBookings.class.php:191 includes/AdminBookings.class.php:208
207
+ #: includes/WP_List_Table.BookingsTable.class.php:425
208
+ msgid "Send Email"
 
 
209
  msgstr ""
210
 
211
+ #: includes/AdminBookings.class.php:198
212
+ msgid "Subject"
213
  msgstr ""
214
 
215
+ #: includes/AdminBookings.class.php:202 includes/Settings.class.php:996
216
+ #: includes/WP_List_Table.BookingsTable.class.php:450
217
+ msgid "Message"
 
 
218
  msgstr ""
219
 
220
+ #: includes/AdminBookings.class.php:253
221
+ msgid "Update"
222
  msgstr ""
223
 
224
+ #: includes/AdminBookings.class.php:272 includes/AdminBookings.class.php:298
225
+ #: includes/AdminBookings.class.php:328 includes/AdminBookings.class.php:341
226
+ msgid "Close"
 
 
 
227
  msgstr ""
228
 
229
+ #: includes/AdminBookings.class.php:284
230
+ msgid "Ban future bookings from the email address %s or the IP address %s?"
231
  msgstr ""
232
 
233
+ #: includes/AdminBookings.class.php:292
234
  msgid ""
235
+ "It is recommended to ban by email address instead of IP. Only ban by IP "
236
+ "address to block a malicious user who is using different email addresses to "
237
+ "avoid a previous ban."
238
  msgstr ""
239
 
240
+ #: includes/AdminBookings.class.php:300
241
+ msgid "View all bans"
242
  msgstr ""
243
 
244
+ #: includes/AdminBookings.class.php:316
245
  msgid ""
246
+ "Delete all booking records related to email address %s? This action can not "
247
+ "be undone."
 
 
 
 
248
  msgstr ""
249
 
250
+ #: includes/AdminBookings.class.php:407
251
+ msgid "Booking Status"
252
  msgstr ""
253
 
254
+ #: includes/AdminBookings.class.php:415
255
+ msgid "Send notifications"
 
256
  msgstr ""
257
 
258
+ #: includes/AdminBookings.class.php:420
259
+ msgid "Learn more"
260
  msgstr ""
261
 
262
+ #: includes/AdminBookings.class.php:421
263
  msgid ""
264
+ "When adding a booking or changing a booking's status with this form, no "
265
+ "email notifications will be sent. Check this option if you want to send "
266
+ "email notifications."
 
 
 
 
267
  msgstr ""
268
 
269
+ #: includes/AdminBookings.class.php:475
270
+ msgid "You have been logged out. Please %slogin again%s."
271
  msgstr ""
272
 
273
+ #: includes/AdminBookings.class.php:511
274
  msgid ""
275
+ "This booking has been sent to the %sTrash%s where it can not be edited. Set "
276
+ "the booking to Pending or Confirmed to edit it."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
277
  msgstr ""
278
 
279
+ #: includes/AdminBookings.class.php:528
280
+ msgid "The booking could not be retrieved. Please reload the page and try again."
281
  msgstr ""
282
 
283
+ #: includes/AdminBookings.class.php:619
284
  msgid ""
285
+ "Unable to trash this post. Please try again. If you continue to have "
286
+ "trouble, please refresh the page."
 
 
 
 
 
287
  msgstr ""
288
 
289
+ #: includes/AdminBookings.class.php:661
290
+ msgid "Please enter a message before sending the email."
291
  msgstr ""
292
 
293
+ #: includes/AdminBookings.class.php:670
294
+ msgid "The email could not be sent because some critical information was missing."
295
  msgstr ""
296
 
297
+ #: includes/AdminBookings.class.php:682
298
+ msgid "There was an error loading the booking and the email was not sent."
299
  msgstr ""
300
 
301
+ #: includes/AdminBookings.class.php:722
302
+ msgid "You must select at least one column to display."
303
  msgstr ""
304
 
305
+ #: includes/AdminBookings.class.php:778
306
+ msgid "No IP or email address could be found for this ban request."
307
  msgstr ""
308
 
309
+ #: includes/AdminBookings.class.php:839
310
+ msgid "No email address could be found for this delete request."
311
  msgstr ""
312
 
313
+ #: includes/AdminPageSettingLicenseKey.class.php:193
314
+ msgid "Invalid"
315
  msgstr ""
316
 
317
+ #: includes/Blocks.class.php:62
318
+ msgid "Ask the customer to select a location"
319
  msgstr ""
320
 
321
+ #: includes/Booking.class.php:194
322
+ msgid "Please enter the date you would like to book."
323
  msgstr ""
324
 
325
+ #: includes/Booking.class.php:204
326
  msgid ""
327
+ "The date you entered is not valid. Please select from one of the dates in "
328
+ "the calendar."
329
  msgstr ""
330
 
331
+ #: includes/Booking.class.php:215
332
+ msgid "Please enter the time you would like to book."
333
  msgstr ""
334
 
335
+ #: includes/Booking.class.php:225
336
  msgid ""
337
+ "The time you entered is not valid. Please select from one of the times "
338
+ "provided."
339
  msgstr ""
340
 
341
+ #: includes/Booking.class.php:245
342
+ msgid "Sorry, bookings can not be made more than %s days in advance."
343
  msgstr ""
344
 
345
+ #: includes/Booking.class.php:256
346
+ msgid "Sorry, bookings can not be made in the past."
 
 
347
  msgstr ""
348
 
349
+ #: includes/Booking.class.php:265
350
+ msgid "Sorry, bookings can not be made for the same day."
351
  msgstr ""
352
 
353
+ #: includes/Booking.class.php:273
354
+ msgid "Sorry, bookings must be made more than %s days in advance."
 
 
355
  msgstr ""
356
 
357
+ #: includes/Booking.class.php:275
358
+ msgid "Sorry, bookings must be made more than %s hours in advance."
359
  msgstr ""
360
 
361
+ #: includes/Booking.class.php:277
362
+ msgid "Sorry, bookings must be made more than %s minutes in advance."
 
363
  msgstr ""
364
 
365
+ #: includes/Booking.class.php:317
366
+ msgid "Sorry, no bookings are being accepted then."
367
  msgstr ""
368
 
369
+ #: includes/Booking.class.php:369
370
+ msgid "Sorry, no bookings are being accepted on that date."
371
  msgstr ""
372
 
373
+ #: includes/Booking.class.php:375
374
+ msgid "Sorry, no bookings are being accepted at that time."
375
  msgstr ""
376
 
377
+ #: includes/Booking.class.php:397
378
+ msgid "Please enter a name for this booking."
 
 
379
  msgstr ""
380
 
381
+ #: includes/Booking.class.php:407
382
+ msgid "Please let us know how many people will be in your party."
383
  msgstr ""
384
 
385
+ #: includes/Booking.class.php:417
386
+ msgid "We only accept bookings for parties of up to %d people."
 
 
 
387
  msgstr ""
388
 
389
+ #: includes/Booking.class.php:425
390
+ msgid "We only accept bookings for parties of more than %d people."
391
  msgstr ""
392
 
393
+ #: includes/Booking.class.php:436
394
+ msgid "Please enter an email address so we can confirm your booking."
395
  msgstr ""
396
 
397
+ #: includes/Booking.class.php:442
398
+ msgid "Please enter a valid email address so we can confirm your booking."
399
  msgstr ""
400
 
401
+ #: includes/Booking.class.php:453
402
+ msgid "Please provide a phone number so we can confirm your booking."
 
 
403
  msgstr ""
404
 
405
+ #: includes/Booking.class.php:484
406
+ msgid "Please complete this field to request a booking."
407
  msgstr ""
408
 
409
+ #: includes/Booking.class.php:496
410
  msgid ""
411
+ "Your booking has been rejected. Please call us if you would like to make a "
412
+ "booking."
413
  msgstr ""
414
 
415
+ #: includes/CustomPostTypes.class.php:46 includes/CustomPostTypes.class.php:48
416
+ #: includes/CustomPostTypes.class.php:49
417
+ #: includes/WP_List_Table.BookingsTable.class.php:113
418
+ msgid "Bookings"
419
  msgstr ""
420
 
421
+ #: includes/CustomPostTypes.class.php:47
422
+ #: includes/WP_List_Table.BookingsTable.class.php:112
423
+ msgid "Booking"
 
424
  msgstr ""
425
 
426
+ #: includes/CustomPostTypes.class.php:51
427
+ msgid "Add New Booking"
428
  msgstr ""
429
 
430
+ #: includes/CustomPostTypes.class.php:52 restaurant-reservations.php:236
431
+ msgid "Edit Booking"
432
  msgstr ""
433
 
434
+ #: includes/CustomPostTypes.class.php:53
435
+ msgid "New Booking"
436
  msgstr ""
437
 
438
+ #: includes/CustomPostTypes.class.php:54
439
+ msgid "View Booking"
440
  msgstr ""
441
 
442
+ #: includes/CustomPostTypes.class.php:55
443
+ msgid "Search Bookings"
444
  msgstr ""
445
 
446
+ #: includes/CustomPostTypes.class.php:56
447
+ msgid "No bookings found"
 
 
448
  msgstr ""
449
 
450
+ #: includes/CustomPostTypes.class.php:57
451
+ msgid "No bookings found in trash"
452
  msgstr ""
453
 
454
+ #: includes/CustomPostTypes.class.php:58
455
+ msgid "All Bookings"
 
 
456
  msgstr ""
457
 
458
+ #: includes/CustomPostTypes.class.php:103
459
+ msgid "Confirmed <span class=\"count\">(%s)</span>"
460
+ msgid_plural "Confirmed <span class=\"count\">(%s)</span>"
461
+ msgstr[0] ""
462
+ msgstr[1] ""
463
 
464
+ #: includes/CustomPostTypes.class.php:114
465
+ msgid "Closed <span class=\"count\">(%s)</span>"
466
+ msgid_plural "Closed <span class=\"count\">(%s)</span>"
467
+ msgstr[0] ""
468
+ msgstr[1] ""
469
 
470
+ #: includes/Licenses.class.php:119
471
+ msgid "Licenses"
472
  msgstr ""
473
 
474
+ #: includes/Licenses.class.php:121
475
  msgid ""
476
+ "Activate license keys for any commercial addons you have purchased. %sView "
477
+ "all addons%s."
478
  msgstr ""
479
 
480
+ #: includes/Licenses.class.php:205
481
+ msgid ""
482
+ "Your attempt to deactivate a license key failed. Please try again later or "
483
+ "contact support for help."
484
  msgstr ""
485
 
486
+ #: includes/Licenses.class.php:209
487
  msgid ""
488
+ "You have reached the activation limit for this license. If you have the "
489
+ "license activated on other sites you will need to deactivate them or "
490
+ "purchase more license keys from %sTheme of the Crop%s."
491
  msgstr ""
492
 
493
+ #: includes/Licenses.class.php:211
494
+ msgid ""
495
+ "Your attempt to activate a license key failed. Please check the license key "
496
+ "and try again."
497
  msgstr ""
498
 
499
+ #: includes/MultipleLocations.class.php:304
500
+ #: includes/MultipleLocations.class.php:407
501
+ msgid "Location"
502
  msgstr ""
503
 
504
+ #: includes/MultipleLocations.class.php:359
505
+ msgid "Please select a location for your booking."
506
  msgstr ""
507
 
508
+ #: includes/MultipleLocations.class.php:366
509
+ msgid "The location you selected is not valid. Please select another location."
 
 
510
  msgstr ""
511
 
512
+ #: includes/MultipleLocations.class.php:475
513
+ msgid "Reservations"
514
  msgstr ""
515
 
516
+ #: includes/MultipleLocations.class.php:542
517
+ msgid "Automatically add the booking form to this page."
518
  msgstr ""
519
 
520
+ #: includes/MultipleLocations.class.php:548 includes/Settings.class.php:635
521
+ msgid "Reply-To Name"
522
  msgstr ""
523
 
524
+ #: includes/MultipleLocations.class.php:552
 
525
  msgid ""
526
+ "The name which should appear in the Reply-To field of a user notification "
527
+ "email."
528
  msgstr ""
529
 
530
+ #: includes/MultipleLocations.class.php:558 includes/Settings.class.php:647
531
+ msgid "Reply-To Email Address"
532
  msgstr ""
533
 
534
+ #: includes/MultipleLocations.class.php:562 includes/Settings.class.php:648
535
+ msgid ""
536
+ "The email address which should appear in the Reply-To field of a user "
537
+ "notification email."
538
  msgstr ""
539
 
540
+ #: includes/MultipleLocations.class.php:569
541
+ msgid "Admin Notification Email Address"
542
  msgstr ""
543
 
544
+ #: includes/MultipleLocations.class.php:573
545
  msgid ""
546
+ "The email address where admin notifications for bookings at this location "
547
+ "should be sent."
548
  msgstr ""
549
 
550
+ #: includes/MultipleLocations.class.php:682
551
+ msgid "Location for which this booking was made."
552
  msgstr ""
553
 
554
+ #: includes/Notification.class.php:88
555
+ msgid "View pending bookings"
 
 
 
 
556
  msgstr ""
557
 
558
+ #: includes/Notification.class.php:89
559
+ msgid "Confirm this booking"
560
  msgstr ""
561
 
562
+ #: includes/Notification.class.php:90
563
+ msgid "Reject this booking"
 
 
564
  msgstr ""
565
 
566
+ #: includes/Settings.class.php:233 includes/Settings.class.php:234
567
+ msgid "Settings"
568
  msgstr ""
569
 
570
+ #: includes/Settings.class.php:246
571
+ msgid "General"
 
 
572
  msgstr ""
573
 
574
+ #: includes/Settings.class.php:257
575
+ msgid "Booking Page"
576
  msgstr ""
577
 
578
+ #: includes/Settings.class.php:258
579
  msgid ""
580
+ "Select a page on your site to automatically display the booking form and "
581
+ "confirmation message."
582
  msgstr ""
583
 
584
+ #: includes/Settings.class.php:274
585
+ msgid "Min Party Size"
586
  msgstr ""
587
 
588
+ #: includes/Settings.class.php:275
589
+ msgid "Set a minimum allowed party size for bookings."
 
 
590
  msgstr ""
591
 
592
+ #: includes/Settings.class.php:287
593
+ msgid "Max Party Size"
594
  msgstr ""
595
 
596
+ #: includes/Settings.class.php:288
597
+ msgid "Set a maximum allowed party size for bookings."
 
598
  msgstr ""
599
 
600
+ #: includes/Settings.class.php:300
601
+ msgid "Require Phone"
602
  msgstr ""
603
 
604
+ #: includes/Settings.class.php:301
605
+ msgid "Don't accept booking requests without a phone number."
 
 
606
  msgstr ""
607
 
608
+ #: includes/Settings.class.php:304
609
+ msgid "No"
610
  msgstr ""
611
 
612
+ #: includes/Settings.class.php:305
613
+ msgid "Yes"
 
 
614
  msgstr ""
615
 
616
+ #: includes/Settings.class.php:316
617
+ msgid "Success Message"
618
  msgstr ""
619
 
620
+ #: includes/Settings.class.php:317
621
+ msgid "Enter the message to display when a booking request is made."
 
 
622
  msgstr ""
623
 
624
+ #: includes/Settings.class.php:326
625
+ #: includes/WP_Widget.BookingFormWidget.class.php:25
626
+ msgid "Booking Form"
 
627
  msgstr ""
628
 
629
+ #: includes/Settings.class.php:337
630
+ msgid "Date Format"
631
  msgstr ""
632
 
633
+ #: includes/Settings.class.php:338
 
634
  msgid ""
635
+ "Define how the date is formatted on the booking form. %sFormatting rules%s. "
636
+ "This only changes the format on the booking form. To change the date format "
637
+ "in notification messages, modify your general %sWordPress Settings%s."
638
  msgstr ""
639
 
640
+ #: includes/Settings.class.php:349
641
+ msgid "Time Format"
642
  msgstr ""
643
 
644
+ #: includes/Settings.class.php:350
645
+ msgid ""
646
+ "Define how the time is formatted on the booking form. %sFormatting rules%s. "
647
+ "This only changes the format on the booking form. To change the time format "
648
+ "in notification messages, modify your general %sWordPress Settings%s."
649
  msgstr ""
650
 
651
+ #: includes/Settings.class.php:363
652
+ msgid "Language"
653
  msgstr ""
654
 
655
+ #: includes/Settings.class.php:364
656
+ msgid ""
657
+ "Select a language to use for the booking form datepicker if it is different "
658
+ "than your WordPress language setting."
659
  msgstr ""
660
 
661
+ #: includes/Settings.class.php:374
662
+ msgid "Security"
663
  msgstr ""
664
 
665
+ #: includes/Settings.class.php:385
666
+ msgid "Banned Email Addresses"
667
  msgstr ""
668
 
669
+ #: includes/Settings.class.php:386
670
+ msgid ""
671
+ "You can block bookings from specific email addresses. Enter each email "
672
+ "address on a separate line."
673
  msgstr ""
674
 
675
+ #: includes/Settings.class.php:396
676
+ msgid "Banned IP Addresses"
677
  msgstr ""
678
 
679
+ #: includes/Settings.class.php:397
680
  msgid ""
681
+ "You can block bookings from specific IP addresses. Enter each IP address on "
682
+ "a separate line. Be aware that many internet providers rotate their IP "
683
+ "address assignments, so an IP address may accidentally refer to a different "
684
+ "user. Also, if you block an IP address used by a public connection, such as "
685
+ "cafe WIFI, a public library, or a university network, you may inadvertantly "
686
+ "block several people."
687
  msgstr ""
688
 
689
+ #: includes/Settings.class.php:405
690
+ msgid "Privacy"
691
  msgstr ""
692
 
693
+ #: includes/Settings.class.php:416
694
+ msgid "Require Consent"
695
  msgstr ""
696
 
697
+ #: includes/Settings.class.php:417
698
+ msgid ""
699
+ "Require customers to consent to the collection of their details when making "
700
+ "a booking. This may be required to comply with privacy laws in your country."
701
  msgstr ""
702
 
703
+ #: includes/Settings.class.php:427
704
+ msgid "Consent Statement"
705
  msgstr ""
706
 
707
+ #: includes/Settings.class.php:428
708
+ msgid ""
709
+ "Enter the statement you would like customers to confirm when making a "
710
+ "booking."
711
  msgstr ""
712
 
713
+ #: includes/Settings.class.php:438
714
+ msgid "Privacy Statement Page"
715
  msgstr ""
716
 
717
+ #: includes/Settings.class.php:439
718
+ msgid ""
719
+ "Select a page on your site which contains a privacy statement. If selected, "
720
+ "it will be linked to in your consent statement."
721
  msgstr ""
722
 
723
+ #: includes/Settings.class.php:453
724
+ msgid "Booking Schedule"
 
 
 
725
  msgstr ""
726
 
727
+ #: includes/Settings.class.php:460
728
+ msgid "Add new scheduling rule"
729
  msgstr ""
730
 
731
+ #: includes/Settings.class.php:474
732
+ msgid "Delete scheduling rule"
 
 
733
  msgstr ""
734
 
735
+ #: includes/Settings.class.php:491
736
+ msgid "Schedule"
737
  msgstr ""
738
 
739
+ #: includes/Settings.class.php:492
740
+ msgid "Define the weekly schedule during which you accept bookings."
 
 
741
  msgstr ""
742
 
743
+ #: includes/Settings.class.php:517
744
+ msgid "Exceptions"
745
  msgstr ""
746
 
747
+ #: includes/Settings.class.php:518
748
  msgid ""
749
+ "Define special opening hours for holidays, events or other needs. Leave the "
750
+ "time empty if you're closed all day."
751
  msgstr ""
752
 
753
+ #: includes/Settings.class.php:533
754
+ msgid "Early Bookings"
755
  msgstr ""
756
 
757
+ #: includes/Settings.class.php:534
758
  msgid ""
759
+ "Select how early customers can make their booking. (Administrators and "
760
+ "Booking Managers are not restricted by this setting.)"
761
  msgstr ""
762
 
763
+ #: includes/Settings.class.php:537
764
+ msgid "Any time"
765
  msgstr ""
766
 
767
+ #: includes/Settings.class.php:538
768
+ msgid "From 1 day in advance"
769
  msgstr ""
770
 
771
+ #: includes/Settings.class.php:539
772
+ msgid "From 1 week in advance"
773
  msgstr ""
774
 
775
+ #: includes/Settings.class.php:540
776
+ msgid "From 2 weeks in advance"
777
  msgstr ""
778
 
779
+ #: includes/Settings.class.php:541
780
+ msgid "From 30 days in advance"
781
  msgstr ""
782
 
783
+ #: includes/Settings.class.php:542
784
+ msgid "From 90 days in advance"
 
 
785
  msgstr ""
786
 
787
+ #: includes/Settings.class.php:553
788
+ msgid "Late Bookings"
789
  msgstr ""
790
 
791
+ #: includes/Settings.class.php:554
792
  msgid ""
793
+ "Select how late customers can make their booking. (Administrators and "
794
+ "Booking Managers are not restricted by this setting.)"
795
  msgstr ""
796
 
797
+ #: includes/Settings.class.php:557
798
+ msgid "Up to the last minute"
799
  msgstr ""
800
 
801
+ #: includes/Settings.class.php:558
802
+ msgid "At least 15 minutes in advance"
803
  msgstr ""
804
 
805
+ #: includes/Settings.class.php:559
806
+ msgid "At least 30 minutes in advance"
807
  msgstr ""
808
 
809
+ #: includes/Settings.class.php:560
810
+ msgid "At least 45 minutes in advance"
 
 
811
  msgstr ""
812
 
813
+ #: includes/Settings.class.php:561
814
+ msgid "At least 1 hour in advance"
815
  msgstr ""
816
 
817
+ #: includes/Settings.class.php:562
818
+ msgid "At least 4 hours in advance"
 
 
 
819
  msgstr ""
820
 
821
+ #: includes/Settings.class.php:563
822
+ msgid "At least 24 hours in advance"
823
  msgstr ""
824
 
825
+ #: includes/Settings.class.php:564
826
+ msgid "Block same-day bookings"
827
  msgstr ""
828
 
829
+ #: includes/Settings.class.php:575
830
+ msgid "Date Pre-selection"
831
  msgstr ""
832
 
833
+ #: includes/Settings.class.php:576
834
+ msgid ""
835
+ "When the booking form is loaded, should it automatically attempt to select "
836
+ "a valid date?"
837
  msgstr ""
838
 
839
+ #: includes/Settings.class.php:579
840
+ msgid "Select today if valid"
841
  msgstr ""
842
 
843
+ #: includes/Settings.class.php:580
844
+ msgid "Select today or next valid date"
845
+ msgstr ""
846
+
847
+ #: includes/Settings.class.php:581
848
+ msgid "Leave empty"
849
  msgstr ""
850
 
851
+ #: includes/Settings.class.php:592
852
+ msgid "Time Interval"
853
  msgstr ""
854
 
855
+ #: includes/Settings.class.php:593
856
+ msgid "Select the number of minutes between each available time."
 
 
857
  msgstr ""
858
 
859
+ #: includes/Settings.class.php:596
860
+ msgid "Every 30 minutes"
861
  msgstr ""
862
 
863
+ #: includes/Settings.class.php:597
864
+ msgid "Every 15 minutes"
865
  msgstr ""
866
 
867
+ #: includes/Settings.class.php:598
868
+ msgid "Every 10 minutes"
869
  msgstr ""
870
 
871
+ #: includes/Settings.class.php:599
872
+ msgid "Every 5 minutes"
873
  msgstr ""
874
 
875
+ #: includes/Settings.class.php:610
876
+ msgid "Week Starts On"
877
  msgstr ""
878
 
879
+ #: includes/Settings.class.php:611
880
+ msgid "Select the first day of the week"
 
 
881
  msgstr ""
882
 
883
+ #: includes/Settings.class.php:614
884
+ msgid "Sunday"
885
  msgstr ""
886
 
887
+ #: includes/Settings.class.php:615
888
+ msgid "Monday"
889
  msgstr ""
890
 
891
+ #: includes/Settings.class.php:624
892
+ msgid "Notifications"
893
  msgstr ""
894
 
895
+ #: includes/Settings.class.php:636
896
  msgid ""
897
+ "The name which should appear in the Reply-To field of a user notification "
898
+ "email"
899
  msgstr ""
900
 
901
+ #: includes/Settings.class.php:659
902
+ msgid "Admin Notification"
903
  msgstr ""
904
 
905
+ #: includes/Settings.class.php:660
906
  msgid ""
907
+ "Send an email notification to an administrator when a new booking is "
908
+ "requested."
 
 
 
 
909
  msgstr ""
910
 
911
+ #: includes/Settings.class.php:670
912
+ msgid "Admin Email Address"
913
  msgstr ""
914
 
915
+ #: includes/Settings.class.php:671
916
+ msgid "The email address where admin notifications should be sent."
917
  msgstr ""
918
 
919
+ #: includes/Settings.class.php:682
920
+ msgid ""
921
+ "Adjust the messages that are emailed to users and admins during the booking "
922
+ "process."
923
  msgstr ""
924
 
925
+ #: includes/Settings.class.php:692
926
+ msgid "Template Tags"
927
  msgstr ""
928
 
929
+ #: includes/Settings.class.php:694
930
+ msgid ""
931
+ "Use the following tags to automatically add booking information to the "
932
+ "emails. Tags labeled with an asterisk (*) can be used in the email subject "
933
+ "as well."
934
  msgstr ""
935
 
936
+ #: includes/Settings.class.php:705
937
+ msgid "Admin Notification Subject"
938
  msgstr ""
939
 
940
+ #: includes/Settings.class.php:706
941
+ msgid "The email subject for admin notifications."
942
  msgstr ""
943
 
944
+ #: includes/Settings.class.php:717
945
+ msgid "Admin Notification Email"
946
  msgstr ""
947
 
948
+ #: includes/Settings.class.php:718
949
+ msgid ""
950
+ "Enter the email an admin should receive when an initial booking request is "
951
+ "made."
952
  msgstr ""
953
 
954
+ #: includes/Settings.class.php:729
955
+ msgid "New Request Email Subject"
956
  msgstr ""
957
 
958
+ #: includes/Settings.class.php:730
959
+ msgid ""
960
+ "The email subject a user should receive when they make an initial booking "
961
+ "request."
962
  msgstr ""
963
 
964
+ #: includes/Settings.class.php:741
965
+ msgid "New Request Email"
966
  msgstr ""
967
 
968
+ #: includes/Settings.class.php:742
969
  msgid ""
970
+ "Enter the email a user should receive when they make an initial booking "
971
+ "request."
972
  msgstr ""
973
 
974
+ #: includes/Settings.class.php:753
975
+ msgid "Confirmed Email Subject"
976
  msgstr ""
977
 
978
+ #: includes/Settings.class.php:754
979
+ msgid ""
980
+ "The email subject a user should receive when their booking has been "
981
+ "confirmed."
982
  msgstr ""
983
 
984
+ #: includes/Settings.class.php:765
985
+ msgid "Confirmed Email"
986
  msgstr ""
987
 
988
+ #: includes/Settings.class.php:766
989
+ msgid "Enter the email a user should receive when their booking has been confirmed."
990
  msgstr ""
991
 
992
+ #: includes/Settings.class.php:777
993
+ msgid "Rejected Email Subject"
994
  msgstr ""
995
 
996
+ #: includes/Settings.class.php:778
997
  msgid ""
998
+ "The email subject a user should receive when their booking has been "
999
+ "rejected."
1000
  msgstr ""
1001
 
1002
+ #: includes/Settings.class.php:789
1003
+ msgid "Rejected Email"
1004
  msgstr ""
1005
 
1006
+ #: includes/Settings.class.php:790
1007
+ msgid "Enter the email a user should receive when their booking has been rejected."
 
 
1008
  msgstr ""
1009
 
1010
+ #: includes/Settings.class.php:801
1011
+ msgid "Admin Update Subject"
1012
  msgstr ""
1013
 
1014
+ #: includes/Settings.class.php:802
1015
+ msgid ""
1016
+ "The email subject a user should receive when an admin sends them a custom "
1017
+ "email message from the %sbookings panel%s."
1018
  msgstr ""
1019
 
1020
+ #: includes/Settings.class.php:811
1021
+ msgid "Advanced"
1022
  msgstr ""
1023
 
1024
+ #: includes/Settings.class.php:812
1025
  msgid ""
1026
+ "Modifying the settings below can prevent your emails from being delivered. "
1027
+ "Do not make changes unless you know what you're doing."
1028
  msgstr ""
1029
 
1030
+ #: includes/Settings.class.php:823
1031
+ msgid "FROM Email Address Header"
1032
  msgstr ""
1033
 
1034
+ #: includes/Settings.class.php:824
1035
+ msgid ""
1036
+ "Change the email address used in the FROM header of all emails sent by this "
1037
+ "plugin. In most cases you should not change this. Modifying this can "
1038
+ "prevent your emails from being delivered. %sLearn more%s."
1039
  msgstr ""
1040
 
1041
+ #: includes/Settings.class.php:844
1042
+ msgid "Any size"
1043
  msgstr ""
1044
 
1045
+ #: includes/Settings.class.php:937
1046
+ #: includes/integrations/business-profile.php:100
1047
+ msgid "Book a table"
1048
  msgstr ""
1049
 
1050
+ #: includes/Settings.class.php:940
1051
+ #: includes/WP_List_Table.BookingsTable.class.php:358
1052
+ msgid "Date"
1053
  msgstr ""
1054
 
1055
+ #: includes/Settings.class.php:946
1056
+ msgid "Time"
1057
  msgstr ""
1058
 
1059
+ #: includes/Settings.class.php:952
1060
+ #: includes/WP_List_Table.BookingsTable.class.php:359
1061
+ msgid "Party"
1062
  msgstr ""
1063
 
1064
+ #: includes/Settings.class.php:965
1065
+ msgid "Contact Details"
1066
  msgstr ""
1067
 
1068
+ #: includes/Settings.class.php:968
1069
+ #: includes/WP_List_Table.BookingsTable.class.php:360
1070
+ msgid "Name"
1071
  msgstr ""
1072
 
1073
+ #: includes/Settings.class.php:974
1074
+ #: includes/WP_List_Table.BookingsTable.class.php:361
1075
+ msgid "Email"
1076
  msgstr ""
1077
 
1078
+ #: includes/Settings.class.php:983
1079
+ #: includes/WP_List_Table.BookingsTable.class.php:362
1080
+ msgid "Phone"
1081
  msgstr ""
1082
 
1083
+ #: includes/Settings.class.php:991
1084
  msgid "Add a Message"
1085
  msgstr ""
1086
 
1087
+ #: includes/Settings.class.php:1064
1088
  msgid "Email of the user who made the booking"
1089
  msgstr ""
1090
 
1091
+ #: includes/Settings.class.php:1065
1092
  msgid "* Name of the user who made the booking"
1093
  msgstr ""
1094
 
1095
+ #: includes/Settings.class.php:1066
1096
  msgid "* Number of people booked"
1097
  msgstr ""
1098
 
1099
+ #: includes/Settings.class.php:1067
1100
  msgid "* Date and time of the booking"
1101
  msgstr ""
1102
 
1103
+ #: includes/Settings.class.php:1068
1104
  msgid "Phone number if supplied with the request"
1105
  msgstr ""
1106
 
1107
+ #: includes/Settings.class.php:1069
1108
  msgid "Message added to the request"
1109
  msgstr ""
1110
 
1111
+ #: includes/Settings.class.php:1070
1112
  msgid "A link to the admin panel showing pending bookings"
1113
  msgstr ""
1114
 
1115
+ #: includes/Settings.class.php:1071
1116
+ msgid "A link to confirm this booking. Only include this in admin notifications"
 
 
 
 
 
 
 
1117
  msgstr ""
1118
 
1119
+ #: includes/Settings.class.php:1072
1120
  msgid "A link to reject this booking. Only include this in admin notifications"
1121
  msgstr ""
1122
 
1123
+ #: includes/Settings.class.php:1073
1124
  msgid "The name of this website"
1125
  msgstr ""
1126
 
1127
+ #: includes/Settings.class.php:1074
1128
  msgid "A link to this website"
1129
  msgstr ""
1130
 
1131
+ #: includes/Settings.class.php:1075
1132
  msgid "Current date and time"
1133
  msgstr ""
1134
 
1135
+ #: includes/WP_List_Table.BookingsTable.class.php:233
 
 
 
 
1136
  msgid "Upcoming"
1137
  msgstr ""
1138
 
1139
+ #: includes/WP_List_Table.BookingsTable.class.php:234
1140
  msgid "Today"
1141
  msgstr ""
1142
 
1143
+ #: includes/WP_List_Table.BookingsTable.class.php:235
1144
+ #: includes/WP_List_Table.BookingsTable.class.php:281
1145
+ msgid "All"
1146
  msgstr ""
1147
 
1148
+ #: includes/WP_List_Table.BookingsTable.class.php:242
1149
+ msgid "Between dates"
 
1150
  msgstr ""
1151
 
1152
+ #: includes/WP_List_Table.BookingsTable.class.php:254
1153
  msgid "Start Date:"
1154
  msgstr ""
1155
 
1156
+ #: includes/WP_List_Table.BookingsTable.class.php:255
1157
  msgid "Start Date"
1158
  msgstr ""
1159
 
1160
+ #: includes/WP_List_Table.BookingsTable.class.php:256
 
 
 
 
1161
  msgid "End Date:"
1162
  msgstr ""
1163
 
1164
+ #: includes/WP_List_Table.BookingsTable.class.php:257
1165
  msgid "End Date"
1166
  msgstr ""
1167
 
1168
+ #: includes/WP_List_Table.BookingsTable.class.php:258
 
 
 
 
1169
  msgid "Apply"
1170
  msgstr ""
1171
 
1172
+ #: includes/WP_List_Table.BookingsTable.class.php:260
1173
  msgid "Clear Filter"
1174
  msgstr ""
1175
 
1176
+ #: includes/WP_List_Table.BookingsTable.class.php:282
1177
  msgid "Pending"
1178
  msgstr ""
1179
 
1180
+ #: includes/WP_List_Table.BookingsTable.class.php:283
 
 
 
 
1181
  msgid "Confirmed"
1182
  msgstr ""
1183
 
1184
+ #: includes/WP_List_Table.BookingsTable.class.php:284
1185
  msgid "Closed"
1186
  msgstr ""
1187
 
1188
+ #: includes/WP_List_Table.BookingsTable.class.php:285
1189
+ #: includes/WP_List_Table.BookingsTable.class.php:408
1190
  msgid "Trash"
1191
  msgstr ""
1192
 
1193
+ #: includes/WP_List_Table.BookingsTable.class.php:363
1194
+ msgid "Status"
 
 
 
 
 
 
 
 
 
1195
  msgstr ""
1196
 
1197
+ #: includes/WP_List_Table.BookingsTable.class.php:364
 
1198
  msgid "Details"
1199
  msgstr ""
1200
 
1201
+ #: includes/WP_List_Table.BookingsTable.class.php:378
1202
  msgid "Submitted By"
1203
  msgstr ""
1204
 
1205
+ #: includes/WP_List_Table.BookingsTable.class.php:403
1206
  msgid "Loading"
1207
  msgstr ""
1208
 
1209
+ #: includes/WP_List_Table.BookingsTable.class.php:407
1210
  msgid "Edit"
1211
  msgstr ""
1212
 
1213
+ #: includes/WP_List_Table.BookingsTable.class.php:469
1214
  msgid "Unknown IP"
1215
  msgstr ""
1216
 
1217
+ #: includes/WP_List_Table.BookingsTable.class.php:470
1218
  msgid "Unknown Date"
1219
  msgstr ""
1220
 
1221
+ #: includes/WP_List_Table.BookingsTable.class.php:471
1222
+ msgid "Request from %s on %s."
1223
+ msgstr ""
1224
+
1225
+ #: includes/WP_List_Table.BookingsTable.class.php:474
1226
+ msgid "✓ Consent acquired"
1227
+ msgstr ""
1228
+
1229
+ #: includes/WP_List_Table.BookingsTable.class.php:476
1230
+ msgid "✘ Consent not acquired"
1231
+ msgstr ""
1232
+
1233
+ #: includes/WP_List_Table.BookingsTable.class.php:481
1234
  msgid "Ban"
1235
  msgstr ""
1236
 
1237
+ #: includes/WP_List_Table.BookingsTable.class.php:484
1238
  msgid "Delete Customer"
1239
  msgstr ""
1240
 
1241
+ #: includes/WP_List_Table.BookingsTable.class.php:547
 
 
1242
  msgid "Delete"
1243
  msgstr ""
1244
 
1245
+ #: includes/WP_List_Table.BookingsTable.class.php:548
1246
  msgid "Set To Confirmed"
1247
  msgstr ""
1248
 
1249
+ #: includes/WP_List_Table.BookingsTable.class.php:549
1250
  msgid "Set To Pending Review"
1251
  msgstr ""
1252
 
1253
+ #: includes/WP_List_Table.BookingsTable.class.php:550
1254
  msgid "Set To Closed"
1255
  msgstr ""
1256
 
1257
+ #: includes/WP_List_Table.BookingsTable.class.php:664
1258
+ msgid "%d booking deleted successfully."
1259
+ msgid_plural "%d bookings deleted successfully."
1260
+ msgstr[0] ""
1261
+ msgstr[1] ""
1262
+
1263
+ #: includes/WP_List_Table.BookingsTable.class.php:667
1264
+ msgid "%d booking confirmed."
1265
+ msgid_plural "%d bookings confirmed."
1266
+ msgstr[0] ""
1267
+ msgstr[1] ""
1268
+
1269
+ #: includes/WP_List_Table.BookingsTable.class.php:670
1270
+ msgid "%d booking set to pending."
1271
+ msgid_plural "%d bookings set to pending."
1272
+ msgstr[0] ""
1273
+ msgstr[1] ""
1274
+
1275
+ #: includes/WP_List_Table.BookingsTable.class.php:673
1276
+ msgid "%d booking closed."
1277
+ msgid_plural "%d bookings closed."
1278
+ msgstr[0] ""
1279
+ msgstr[1] ""
1280
+
1281
+ #: includes/WP_List_Table.BookingsTable.class.php:685
1282
+ msgid "%d booking had errors and could not be processed."
1283
+ msgid_plural "%d bookings had errors and could not be processed."
1284
+ msgstr[0] ""
1285
+ msgstr[1] ""
1286
+
1287
+ #: includes/WP_List_Table.BookingsTable.class.php:737
1288
+ #: includes/WP_List_Table.BookingsTable.class.php:758
1289
+ msgid "All Locations"
1290
+ msgstr ""
1291
+
1292
+ #: includes/WP_List_Table.BookingsTable.class.php:765
1293
+ msgid "Inactive Locations"
1294
+ msgstr ""
1295
+
1296
+ #: includes/WP_List_Table.BookingsTable.class.php:774
1297
+ msgid "Switch"
1298
+ msgstr ""
1299
+
1300
+ #: includes/WP_List_Table.BookingsTable.class.php:806
1301
  msgid "You're viewing bookings that have been moved to the trash."
1302
  msgstr ""
1303
 
1304
+ #: includes/WP_List_Table.BookingsTable.class.php:815
1305
  msgid "Only today's bookings are being shown."
1306
  msgstr ""
1307
 
1308
+ #: includes/WP_List_Table.BookingsTable.class.php:817
1309
  msgid "Only upcoming bookings are being shown."
1310
  msgstr ""
1311
 
1317
  msgid "Title"
1318
  msgstr ""
1319
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1320
  #: includes/integrations/business-profile.php:126
1321
  #: includes/integrations/business-profile.php:129
1322
  msgid "Show book a table link"
1354
  msgid "--- Winery"
1355
  msgstr ""
1356
 
1357
+ #: includes/template-functions.php:130
1358
+ msgid "Request Booking"
1359
  msgstr ""
1360
 
1361
+ #: lib/simple-admin-pages/classes/AdminPage.class.php:173
1362
+ msgid "You do not have sufficient permissions to access this page."
1363
  msgstr ""
1364
 
1365
+ #: restaurant-reservations.php:164
1366
+ msgid "Booking Manager"
1367
  msgstr ""
1368
 
1369
+ #: restaurant-reservations.php:237
1370
+ msgid ""
1371
+ "An unspecified error occurred. Please try again. If the problem persists, "
1372
+ "try logging out and logging back in."
1373
  msgstr ""
1374
 
1375
+ #: restaurant-reservations.php:301
1376
+ msgid "View the help documentation for Restaurant Reservations"
1377
  msgstr ""
1378
 
1379
+ #: restaurant-reservations.php:301
1380
+ msgid "Help"
1381
  msgstr ""
1382
 
1383
+ #. Plugin Name of the plugin/theme
1384
+ msgid "Restaurant Reservations"
 
 
1385
  msgstr ""
1386
 
1387
+ #. Author URI of the plugin/theme
1388
+ msgid "http://themeofthecrop.com"
1389
  msgstr ""
1390
 
1391
+ #. Description of the plugin/theme
1392
+ msgid "Accept restaurant reservations and bookings online."
 
1393
  msgstr ""
1394
 
1395
+ #. Author of the plugin/theme
1396
+ msgid "Theme of the Crop"
1397
  msgstr ""
1398
 
1399
+ #: includes/Addons.class.php:28
1400
+ msgctxt "Title of addons page"
1401
+ msgid "Addons"
1402
  msgstr ""
1403
 
1404
+ #: includes/Addons.class.php:29
1405
+ msgctxt "Title of addons page in the admin menu"
1406
+ msgid "Addons"
1407
  msgstr ""
1408
 
1409
+ #: includes/Addons.class.php:347
1410
+ msgctxt "restaurant-reservations"
1411
  msgid ""
1412
+ "Find out when new addons are available by subscribing to the %smonthly "
1413
+ "newsletter%s, liking %sTheme of the Crop%s on Facebook, or following "
1414
+ "%sTheme of the Crop%s on Twitter."
 
 
 
1415
  msgstr ""
1416
 
1417
+ #: includes/Settings.class.php:92
1418
+ msgctxt "restaurant-reservations"
1419
+ msgid ""
1420
+ "Thanks, your booking request is waiting to be confirmed. Updates will be "
1421
+ "sent to the email address you provided."
1422
  msgstr ""
1423
 
1424
+ #: includes/AdminBookings.class.php:64
1425
+ msgctxt "Title of admin page that lists bookings"
1426
+ msgid "Bookings"
 
 
1427
  msgstr ""
1428
 
1429
+ #: includes/AdminBookings.class.php:65
1430
+ msgctxt "Title of bookings admin menu item"
1431
+ msgid "Bookings"
 
 
1432
  msgstr ""
1433
 
1434
+ #: includes/AdminBookings.class.php:194
1435
+ msgctxt "Label next to the email address to which an email will be sent"
1436
+ msgid "To"
 
 
1437
  msgstr ""
1438
 
1439
+ #: includes/CustomPostTypes.class.php:90
1440
+ msgctxt "Booking status when it is pending review"
1441
+ msgid "Pending"
1442
  msgstr ""
1443
 
1444
+ #: includes/CustomPostTypes.class.php:96
1445
+ msgctxt "Booking status for a confirmed booking"
1446
+ msgid "Confirmed"
1447
  msgstr ""
1448
 
1449
+ #: includes/CustomPostTypes.class.php:107
1450
+ msgctxt "Booking status for a closed booking"
1451
+ msgid "Closed"
1452
  msgstr ""
1453
 
1454
+ #: includes/MultipleLocations.class.php:103
1455
+ msgctxt "Name for grouping bookings"
1456
+ msgid "Location"
1457
  msgstr ""
1458
 
1459
+ #: includes/Settings.class.php:93
1460
+ msgctxt ""
1461
+ "Default date format for display. Must match formatting rules at "
1462
+ "http://amsul.ca/pickadate.js/date/#formats"
1463
+ msgid "mmmm d, yyyy"
1464
+ msgstr ""
1465
+
1466
+ #: includes/Settings.class.php:94
1467
+ msgctxt ""
1468
+ "Default time format for display. Must match formatting rules at "
1469
+ "http://amsul.ca/pickadate.js/time/#formats"
1470
+ msgid "h:i A"
1471
+ msgstr ""
1472
+
1473
+ #: includes/Settings.class.php:95
1474
+ msgctxt "Default interval in minutes when selecting a time."
1475
+ msgid "30"
1476
+ msgstr ""
1477
+
1478
+ #: includes/Settings.class.php:105
1479
+ msgctxt "Default email subject for admin notifications of new bookings"
1480
+ msgid "New Booking Request"
1481
+ msgstr ""
1482
+
1483
+ #: includes/Settings.class.php:106
1484
+ msgctxt ""
1485
+ "Default email sent to the admin when a new booking request is made. The "
1486
+ "tags in {brackets} will be replaced by the appropriate content and should "
1487
+ "be left in place. HTML is allowed, but be aware that many email clients do "
1488
+ "not handle HTML very well."
1489
+ msgid ""
1490
+ "A new booking request has been made at {site_name}:\n"
1491
+ "\n"
1492
+ "{user_name}\n"
1493
+ "{party} people\n"
1494
+ "{date}\n"
1495
+ "\n"
1496
+ "{bookings_link}\n"
1497
+ "{confirm_link}\n"
1498
+ "{close_link}\n"
1499
+ "\n"
1500
+ "&nbsp;\n"
1501
+ "\n"
1502
+ "<em>This message was sent by {site_link} on {current_time}.</em>"
1503
+ msgstr ""
1504
+
1505
+ #: includes/Settings.class.php:124
1506
+ msgctxt ""
1507
+ "Default email subject sent to user when they request a booking. %s will be "
1508
+ "replaced by the website name"
1509
+ msgid "Your booking at %s is pending"
1510
+ msgstr ""
1511
+
1512
+ #: includes/Settings.class.php:125
1513
+ msgctxt ""
1514
+ "Default email sent to users when they make a new booking request. The tags "
1515
+ "in {brackets} will be replaced by the appropriate content and should be "
1516
+ "left in place. HTML is allowed, but be aware that many email clients do not "
1517
+ "handle HTML very well."
1518
+ msgid ""
1519
+ "Thanks {user_name},\n"
1520
+ "\n"
1521
+ "Your booking request is <strong>waiting to be confirmed</strong>.\n"
1522
+ "\n"
1523
+ "Give us a few moments to make sure that we've got space for you. You will "
1524
+ "receive another email from us soon. If this request was made outside of our "
1525
+ "normal working hours, we may not be able to confirm it until we're open "
1526
+ "again.\n"
1527
+ "\n"
1528
+ "<strong>Your request details:</strong>\n"
1529
+ "{user_name}\n"
1530
+ "{party} people\n"
1531
+ "{date}\n"
1532
+ "\n"
1533
+ "&nbsp;\n"
1534
+ "\n"
1535
+ "<em>This message was sent by {site_link} on {current_time}.</em>"
1536
+ msgstr ""
1537
+
1538
+ #: includes/Settings.class.php:145
1539
+ msgctxt ""
1540
+ "Default email sent to users when they make a new booking request. The tags "
1541
+ "in {brackets} will be replaced by the appropriate content and should be "
1542
+ "left in place. HTML is allowed, but be aware that many email clients do not "
1543
+ "handle HTML very well."
1544
+ msgid ""
1545
+ "Hi {user_name},\n"
1546
+ "\n"
1547
+ "Your booking request has been <strong>confirmed</strong>. We look forward "
1548
+ "to seeing you soon.\n"
1549
+ "\n"
1550
+ "<strong>Your booking:</strong>\n"
1551
+ "{user_name}\n"
1552
+ "{party} people\n"
1553
+ "{date}\n"
1554
+ "\n"
1555
+ "&nbsp;\n"
1556
+ "\n"
1557
+ "<em>This message was sent by {site_link} on {current_time}.</em>"
1558
+ msgstr ""
1559
+
1560
+ #: includes/Settings.class.php:163
1561
+ msgctxt ""
1562
+ "Default email sent to users when they make a new booking request. The tags "
1563
+ "in {brackets} will be replaced by the appropriate content and should be "
1564
+ "left in place. HTML is allowed, but be aware that many email clients do not "
1565
+ "handle HTML very well."
1566
+ msgid ""
1567
+ "Hi {user_name},\n"
1568
+ "\n"
1569
+ "Sorry, we could not accomodate your booking request. We're full or not open "
1570
+ "at the time you requested:\n"
1571
+ "\n"
1572
+ "{user_name}\n"
1573
+ "{party} people\n"
1574
+ "{date}\n"
1575
+ "\n"
1576
+ "&nbsp;\n"
1577
+ "\n"
1578
+ "<em>This message was sent by {site_link} on {current_time}.</em>"
1579
+ msgstr ""
1580
+
1581
+ #: includes/Settings.class.php:144
1582
+ msgctxt ""
1583
+ "Default email subject sent to user when their booking is confirmed. %s will "
1584
+ "be replaced by the website name"
1585
+ msgid "Your booking at %s is confirmed"
1586
+ msgstr ""
1587
+
1588
+ #: includes/Settings.class.php:162
1589
+ msgctxt ""
1590
+ "Default email subject sent to user when their booking is rejected. %s will "
1591
+ "be replaced by the website name"
1592
+ msgid "Your booking at %s was not accepted"
1593
+ msgstr ""
1594
+
1595
+ #: includes/Settings.class.php:179
1596
+ msgctxt ""
1597
+ "Default email subject sent to users when the admin sends a custom notice "
1598
+ "email from the bookings panel."
1599
+ msgid "Update regarding your booking at %s"
1600
+ msgstr ""
1601
+
1602
+ #: includes/Settings.class.php:461
1603
+ msgctxt "Format of a scheduling rule"
1604
+ msgid "Weekly"
1605
  msgstr ""
1606
 
1607
+ #: includes/Settings.class.php:462
1608
+ msgctxt "Format of a scheduling rule"
1609
+ msgid "Monthly"
 
 
1610
  msgstr ""
1611
 
1612
+ #: includes/Settings.class.php:463
1613
+ msgctxt "Format of a scheduling rule"
1614
+ msgid "Date"
1615
  msgstr ""
1616
 
1617
+ #: includes/Settings.class.php:464
1618
+ msgctxt "Label for selecting days of the week in a scheduling rule"
1619
+ msgid "Days of the week"
1620
  msgstr ""
1621
 
1622
+ #: includes/Settings.class.php:465
1623
+ msgctxt "Label for selecting weeks of the month in a scheduling rule"
1624
+ msgid "Weeks of the month"
1625
  msgstr ""
1626
 
1627
+ #: includes/Settings.class.php:466
1628
+ msgctxt "Label to select a date for a scheduling rule"
1629
+ msgid "Date"
1630
  msgstr ""
1631
 
1632
+ #: includes/Settings.class.php:467
1633
+ msgctxt "Label to select a time slot for a scheduling rule"
1634
+ msgid "Time"
 
 
1635
  msgstr ""
1636
 
1637
+ #: includes/Settings.class.php:468
1638
+ msgctxt "Label to set a scheduling rule to last all day"
1639
+ msgid "All day"
1640
  msgstr ""
1641
 
1642
+ #: includes/Settings.class.php:469
1643
+ msgctxt "Label for the starting time of a scheduling rule"
1644
+ msgid "Start"
1645
  msgstr ""
1646
 
1647
+ #: includes/Settings.class.php:470
1648
+ msgctxt "Label for the ending time of a scheduling rule"
1649
+ msgid "End"
1650
  msgstr ""
1651
 
1652
+ #: includes/Settings.class.php:471
1653
+ msgctxt "Prompt displayed when a scheduling rule is set without any time restrictions"
1654
+ msgid "All day long. Want to %sset a time slot%s?"
1655
  msgstr ""
1656
 
1657
+ #: includes/Settings.class.php:472
1658
+ msgctxt "Toggle a scheduling rule open and closed"
1659
+ msgid "Open and close this rule"
1660
  msgstr ""
1661
 
1662
+ #: includes/Settings.class.php:473
1663
+ msgctxt "Delete a scheduling rule"
1664
+ msgid "Delete rule"
1665
  msgstr ""
1666
 
1667
+ #: includes/Settings.class.php:475
1668
+ msgctxt ""
1669
+ "Brief default description of a scheduling rule when no weekdays or weeks "
1670
+ "are included in the rule"
1671
+ msgid "Never"
1672
  msgstr ""
1673
 
1674
+ #: includes/Settings.class.php:476
1675
+ msgctxt ""
1676
+ "Brief default description of a scheduling rule when all the weekdays/weeks "
1677
+ "are included in the rule"
1678
+ msgid "Every day"
1679
  msgstr ""
1680
 
1681
+ #: includes/Settings.class.php:477
1682
+ msgctxt ""
1683
+ "Brief default description of a scheduling rule when some weekdays are "
1684
+ "included on only some weeks of the month. %s should be left alone and will "
1685
+ "be replaced by a comma-separated list of days and weeks in the following "
1686
+ "format: M, T, W on the first, second week of the month"
1687
+ msgid "%s on the %s week of the month"
1688
  msgstr ""
1689
 
1690
+ #: includes/Settings.class.php:478
1691
+ msgctxt ""
1692
+ "Brief default description of a scheduling rule when some weeks of the month "
1693
+ "are included but all or no weekdays are selected. %s should be left alone "
1694
+ "and will be replaced by a comma-separated list of weeks in the following "
1695
+ "format: First, second week of the month"
1696
+ msgid "%s week of the month"
1697
  msgstr ""
1698
 
1699
+ #: includes/Settings.class.php:479
1700
+ msgctxt "Brief default description of a scheduling rule when no times are set"
1701
+ msgid "All day"
1702
  msgstr ""
1703
 
1704
+ #: includes/Settings.class.php:480
1705
+ msgctxt ""
1706
+ "Brief default description of a scheduling rule when an end time is set but "
1707
+ "no start time. If the end time is 6pm, it will read: Ends at 6pm"
1708
+ msgid "Ends at"
1709
  msgstr ""
1710
 
1711
+ #: includes/Settings.class.php:481
1712
+ msgctxt ""
1713
+ "Brief default description of a scheduling rule when a start time is set but "
1714
+ "no end time. If the start time is 6pm, it will read: Starts at 6pm"
1715
+ msgid "Starts at"
1716
  msgstr ""
1717
 
1718
+ #: includes/Settings.class.php:482
1719
+ msgctxt "Separator between times of a scheduling rule"
1720
+ msgid "&mdash;"
1721
  msgstr ""
1722
 
1723
+ #: includes/Settings.class.php:494
1724
+ msgctxt "Monday abbreviation"
1725
+ msgid "Mo"
1726
  msgstr ""
1727
 
1728
+ #: includes/Settings.class.php:495
1729
+ msgctxt "Tuesday abbreviation"
1730
+ msgid "Tu"
1731
  msgstr ""
1732
 
1733
+ #: includes/Settings.class.php:496
1734
+ msgctxt "Wednesday abbreviation"
1735
+ msgid "We"
1736
  msgstr ""
1737
 
1738
+ #: includes/Settings.class.php:497
1739
+ msgctxt "Thursday abbreviation"
1740
+ msgid "Th"
1741
  msgstr ""
1742
 
1743
+ #: includes/Settings.class.php:498
1744
+ msgctxt "Friday abbreviation"
1745
+ msgid "Fr"
1746
  msgstr ""
1747
 
1748
+ #: includes/Settings.class.php:499
1749
+ msgctxt "Saturday abbreviation"
1750
+ msgid "Sa"
1751
  msgstr ""
1752
 
1753
+ #: includes/Settings.class.php:500
1754
+ msgctxt "Sunday abbreviation"
1755
+ msgid "Su"
1756
  msgstr ""
1757
 
1758
+ #: includes/Settings.class.php:510
1759
+ msgctxt "Brief default description of a scheduling exception when no times are set"
1760
+ msgid "Closed all day"
1761
  msgstr ""
1762
 
1763
+ #: includes/WP_List_Table.BookingsTable.class.php:177
1764
+ #: includes/WP_List_Table.BookingsTable.class.php:179
1765
+ msgctxt ""
1766
+ "No date limit in a date range, eg 2014-* would mean any date from 2014 or "
1767
+ "after"
1768
+ msgid "*"
1769
  msgstr ""
1770
 
1771
+ #: includes/WP_List_Table.BookingsTable.class.php:178
1772
+ msgctxt "Separator between two dates in a date range"
1773
+ msgid "&mdash;"
1774
  msgstr ""
1775
 
1776
+ #: includes/WP_List_Table.BookingsTable.class.php:438
1777
+ msgctxt "Status label for bookings put in the trash"
1778
+ msgid "Trash"
1779
  msgstr ""
1780
 
1781
+ #: includes/WP_List_Table.BookingsTable.class.php:808
1782
+ msgctxt ""
1783
+ "Indicates which booking status is currently being filtered in the list of "
1784
+ "bookings."
1785
+ msgid "You're viewing bookings that have been marked as %s."
1786
  msgstr ""
1787
 
1788
+ #: includes/WP_List_Table.BookingsTable.class.php:813
1789
+ msgctxt "Notification of booking date range, eg - bookings from 2014-12-02-2014-12-05"
1790
+ msgid "Only bookings from %s are being shown."
1791
+ msgstr ""
lib/simple-admin-pages/classes/AdminPageSetting.Toggle.class.php CHANGED
@@ -9,6 +9,7 @@
9
  * 'id' => 'setting_id', // Unique id
10
  * 'title' => 'My Setting', // Title or label for the setting
11
  * 'description' => 'Description', // Help text description
 
12
  * );
13
  * );
14
  *
@@ -33,13 +34,13 @@ class sapAdminPageSettingToggle_2_2_0 extends sapAdminPageSetting_2_2_0 {
33
  <fieldset>
34
  <div class="rtb-admin-hide-radios">
35
  <input type="checkbox" name="<?php echo $input_name; ?>" id="<?php echo $input_name; ?>" value="1"<?php if( $this->value == '1' ) : ?> checked="checked"<?php endif; ?> <?php echo ( $this->disabled ? 'disabled' : ''); ?>>
36
- <label for="<?php echo $input_name; ?>"><?php echo $this->title; ?></label>
37
  </div>
38
  <label class="rtb-admin-switch">
39
  <input type="checkbox" class="rtb-admin-option-toggle" data-inputname="<?php echo $input_name; ?>" <?php if($this->value == '1') {echo "checked='checked'";} ?> <?php echo ( $this->disabled ? 'disabled' : ''); ?>>
40
  <span class="rtb-admin-switch-slider round"></span>
41
  </label>
42
- <?php $this->display_disabled(); ?>
43
  </fieldset>
44
 
45
  <?php
9
  * 'id' => 'setting_id', // Unique id
10
  * 'title' => 'My Setting', // Title or label for the setting
11
  * 'description' => 'Description', // Help text description
12
+ * 'label' => 'Label', // Checkbox label text
13
  * );
14
  * );
15
  *
34
  <fieldset>
35
  <div class="rtb-admin-hide-radios">
36
  <input type="checkbox" name="<?php echo $input_name; ?>" id="<?php echo $input_name; ?>" value="1"<?php if( $this->value == '1' ) : ?> checked="checked"<?php endif; ?> <?php echo ( $this->disabled ? 'disabled' : ''); ?>>
37
+ <label for="<?php echo $input_name; ?>"><?php echo $this->label; ?></label>
38
  </div>
39
  <label class="rtb-admin-switch">
40
  <input type="checkbox" class="rtb-admin-option-toggle" data-inputname="<?php echo $input_name; ?>" <?php if($this->value == '1') {echo "checked='checked'";} ?> <?php echo ( $this->disabled ? 'disabled' : ''); ?>>
41
  <span class="rtb-admin-switch-slider round"></span>
42
  </label>
43
+ <?php $this->display_disabled(); ?>
44
  </fieldset>
45
 
46
  <?php
lib/simple-admin-pages/lib/pickadate/picker.date.js CHANGED
@@ -1,5 +1,5 @@
1
  /*!
2
- * Date picker for pickadate.js v3.6.4
3
  * http://amsul.github.io/pickadate.js/date.htm
4
  */
5
  !function(a){"function"==typeof define&&define.amd?define(["./picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h,defaultValue:!0}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var f,g=this;return c=void 0===c?a:c,c==-1/0||c==1/0?f=c:b.isPlainObject(c)&&e.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=e.isDate(c)?c:g.create().obj):c=e.isInteger(c)||e.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:f||c.getFullYear(),month:f||c.getMonth(),date:f||c.getDate(),day:f||c.getDay(),obj:f||c,pick:f||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,f=function(a){return!0===a||b.isArray(a)||e.isDate(a)?d.create(a):a};return e.isInteger(a)||(a=f(a)),e.isInteger(c)||(c=f(c)),e.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:e.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:f(a),to:f(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return e.isInteger(b)?b=c.now(a,b,{rel:b}):b?"string"==typeof b&&(b=c.parse(a,b)):b="min"==a?-1/0:1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var f,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d<c.pick?f=!0:d>c.pick&&(g=!0)}return e.isInteger(a)}).length;if((!d||!d.nav&&!d.defaultValue)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||f||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!f&&l<0)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.month<k.month||c.month>k.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return e.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||e.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,f={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?e.trigger(c,d,[b,f]):a.replace(/^!/,"").length;c&&(f[a]=b.substr(0,g)),b=b.substr(g)}),[f.yyyy||f.yy,+(f.mm||f.m)-1,f.dd||f.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/[^\x00-\x7F]+|\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?e.digits(a):b.date},dd:function(a,b){return a?2:e.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?e.digits(a):b.month+1},mm:function(a,b){return a?2:e.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return e.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return e.isInteger(a)&&e.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(e.isDate(a)||b.isArray(a))&&(e.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to)},c.prototype.isDateOverlap=function(a,c){var d=this,f=d.settings.firstDay?1:0;return e.isInteger(a)&&(e.isDate(c)||b.isArray(c))?(a=a%7+f)===d.create(c).day+1:e.isInteger(c)&&(e.isDate(a)||b.isArray(a))?(c=c%7+f)===d.create(a).day+1:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,f=d.item.disable.slice(0);return"flip"==c?d.flipEnable():!1===c?(d.flipEnable(1),f=[]):!0===c?(d.flipEnable(-1),f=[]):c.map(function(a){for(var c,g=0;g<f.length;g+=1)if(d.isDateExact(a,f[g])){c=!0;break}c||(e.isInteger(a)||e.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&f.push(a)}),f},c.prototype.activate=function(a,c){var d=this,f=d.item.disable,g=f.length;return"flip"==c?d.flipEnable():!0===c?(d.flipEnable(1),f=[]):!1===c?(d.flipEnable(-1),f=[]):c.map(function(a){var c,h,i,j;for(i=0;i<g;i+=1){if(h=f[i],d.isDateExact(h,a)){c=f[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):e.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;i<g;i+=1)if(d.isDateExact(f[i],a)){f[i]=null;break}if(j)for(i=0;i<g;i+=1)if(d.isDateOverlap(f[i],a)){f[i]=null;break}c&&f.push(c)}),f.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,f=b.item,g=f.now,h=f.select,i=f.highlight,j=f.view,k=f.disable,l=f.min,m=f.max,n=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),e.node("thead",e.node("tr",e.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysShort).slice(0),c.weekdaysFull.slice(0)),o=function(a){return e.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&j.year>=m.year&&j.month>=m.month||!a&&j.year<=l.year&&j.month<=l.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+e.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},p=function(){var d=c.showMonthsShort?c.monthsShort:c.monthsFull;return c.selectMonths?e.node("select",e.group({min:0,max:11,i:1,node:"option",item:function(a){return[d[a],0,"value="+a+(j.month==a?" selected":"")+(j.year==l.year&&a<l.month||j.year==m.year&&a>m.month?" disabled":"")]}}),c.klass.selectMonth,(a?"":"disabled")+" "+e.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):e.node("div",d[j.month],c.klass.month)},q=function(){var d=j.year,f=!0===c.selectYears?5:~~(c.selectYears/2);if(f){var g=l.year,h=m.year,i=d-f,k=d+f;if(g>i&&(k+=g-i,i=g),h<k){var n=i-g,o=k-h;i-=n>o?o:n,k=h}return e.node("select",e.group({min:i,max:k,i:1,node:"option",item:function(a){return[a,0,"value="+a+(d==a?" selected":"")]}}),c.klass.selectYear,(a?"":"disabled")+" "+e.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return e.node("div",d,c.klass.year)};return e.node("div",(c.selectYears?q()+p():p()+q())+o()+o(1),c.klass.header)+e.node("table",n+e.node("tbody",e.group({min:0,max:5,i:1,node:"tr",item:function(a){var f=c.firstDay&&0===b.create([j.year,j.month,1]).day?-7:0;return[e.group({min:d*a-j.day+f+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([j.year,j.month,a+(c.firstDay?1:0)]);var d=h&&h.pick==a.pick,f=i&&i.pick==a.pick,n=k&&b.disabled(a)||a.pick<l.pick||a.pick>m.pick,o=e.trigger(b.formats.toString,b,[c.format,a]);return[e.node("div",a.date,function(b){return b.push(j.month==a.month?c.klass.infocus:c.klass.outfocus),g.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),f&&b.push(c.klass.highlighted),n&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+e.ariaAttr({role:"gridcell",label:o,selected:!(!d||b.$node.val()!==o)||null,activedescendant:!!f||null,disabled:!!n||null})),"",e.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+e.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0}))+e.node("div",e.node("button",c.today,c.klass.buttonToday,"type=button data-pick="+g.pick+(a&&!b.disabled(g)?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id}))+e.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id}))+e.node("button",c.close,c.klass.buttonClose,"type=button data-close=true "+(a?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],today:"Today",clear:"Clear",close:"Close",closeOnSelect:!0,closeOnClear:!0,updateInput:!0,format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)});
1
  /*!
2
+ * Date picker for pickadate.js v3.6.1
3
  * http://amsul.github.io/pickadate.js/date.htm
4
  */
5
  !function(a){"function"==typeof define&&define.amd?define(["./picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h,defaultValue:!0}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var f,g=this;return c=void 0===c?a:c,c==-1/0||c==1/0?f=c:b.isPlainObject(c)&&e.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=e.isDate(c)?c:g.create().obj):c=e.isInteger(c)||e.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:f||c.getFullYear(),month:f||c.getMonth(),date:f||c.getDate(),day:f||c.getDay(),obj:f||c,pick:f||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,f=function(a){return!0===a||b.isArray(a)||e.isDate(a)?d.create(a):a};return e.isInteger(a)||(a=f(a)),e.isInteger(c)||(c=f(c)),e.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:e.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:f(a),to:f(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return e.isInteger(b)?b=c.now(a,b,{rel:b}):b?"string"==typeof b&&(b=c.parse(a,b)):b="min"==a?-1/0:1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var f,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d<c.pick?f=!0:d>c.pick&&(g=!0)}return e.isInteger(a)}).length;if((!d||!d.nav&&!d.defaultValue)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||f||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!f&&l<0)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.month<k.month||c.month>k.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return e.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||e.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,f={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?e.trigger(c,d,[b,f]):a.replace(/^!/,"").length;c&&(f[a]=b.substr(0,g)),b=b.substr(g)}),[f.yyyy||f.yy,+(f.mm||f.m)-1,f.dd||f.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/[^\x00-\x7F]+|\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?e.digits(a):b.date},dd:function(a,b){return a?2:e.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?e.digits(a):b.month+1},mm:function(a,b){return a?2:e.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return e.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return e.isInteger(a)&&e.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(e.isDate(a)||b.isArray(a))&&(e.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to)},c.prototype.isDateOverlap=function(a,c){var d=this,f=d.settings.firstDay?1:0;return e.isInteger(a)&&(e.isDate(c)||b.isArray(c))?(a=a%7+f)===d.create(c).day+1:e.isInteger(c)&&(e.isDate(a)||b.isArray(a))?(c=c%7+f)===d.create(a).day+1:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,f=d.item.disable.slice(0);return"flip"==c?d.flipEnable():!1===c?(d.flipEnable(1),f=[]):!0===c?(d.flipEnable(-1),f=[]):c.map(function(a){for(var c,g=0;g<f.length;g+=1)if(d.isDateExact(a,f[g])){c=!0;break}c||(e.isInteger(a)||e.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&f.push(a)}),f},c.prototype.activate=function(a,c){var d=this,f=d.item.disable,g=f.length;return"flip"==c?d.flipEnable():!0===c?(d.flipEnable(1),f=[]):!1===c?(d.flipEnable(-1),f=[]):c.map(function(a){var c,h,i,j;for(i=0;i<g;i+=1){if(h=f[i],d.isDateExact(h,a)){c=f[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):e.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;i<g;i+=1)if(d.isDateExact(f[i],a)){f[i]=null;break}if(j)for(i=0;i<g;i+=1)if(d.isDateOverlap(f[i],a)){f[i]=null;break}c&&f.push(c)}),f.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,f=b.item,g=f.now,h=f.select,i=f.highlight,j=f.view,k=f.disable,l=f.min,m=f.max,n=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),e.node("thead",e.node("tr",e.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysShort).slice(0),c.weekdaysFull.slice(0)),o=function(a){return e.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&j.year>=m.year&&j.month>=m.month||!a&&j.year<=l.year&&j.month<=l.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+e.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},p=function(){var d=c.showMonthsShort?c.monthsShort:c.monthsFull;return c.selectMonths?e.node("select",e.group({min:0,max:11,i:1,node:"option",item:function(a){return[d[a],0,"value="+a+(j.month==a?" selected":"")+(j.year==l.year&&a<l.month||j.year==m.year&&a>m.month?" disabled":"")]}}),c.klass.selectMonth,(a?"":"disabled")+" "+e.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):e.node("div",d[j.month],c.klass.month)},q=function(){var d=j.year,f=!0===c.selectYears?5:~~(c.selectYears/2);if(f){var g=l.year,h=m.year,i=d-f,k=d+f;if(g>i&&(k+=g-i,i=g),h<k){var n=i-g,o=k-h;i-=n>o?o:n,k=h}return e.node("select",e.group({min:i,max:k,i:1,node:"option",item:function(a){return[a,0,"value="+a+(d==a?" selected":"")]}}),c.klass.selectYear,(a?"":"disabled")+" "+e.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return e.node("div",d,c.klass.year)};return e.node("div",(c.selectYears?q()+p():p()+q())+o()+o(1),c.klass.header)+e.node("table",n+e.node("tbody",e.group({min:0,max:5,i:1,node:"tr",item:function(a){var f=c.firstDay&&0===b.create([j.year,j.month,1]).day?-7:0;return[e.group({min:d*a-j.day+f+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([j.year,j.month,a+(c.firstDay?1:0)]);var d=h&&h.pick==a.pick,f=i&&i.pick==a.pick,n=k&&b.disabled(a)||a.pick<l.pick||a.pick>m.pick,o=e.trigger(b.formats.toString,b,[c.format,a]);return[e.node("div",a.date,function(b){return b.push(j.month==a.month?c.klass.infocus:c.klass.outfocus),g.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),f&&b.push(c.klass.highlighted),n&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+e.ariaAttr({role:"gridcell",label:o,selected:!(!d||b.$node.val()!==o)||null,activedescendant:!!f||null,disabled:!!n||null})),"",e.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+e.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0}))+e.node("div",e.node("button",c.today,c.klass.buttonToday,"type=button data-pick="+g.pick+(a&&!b.disabled(g)?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id}))+e.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id}))+e.node("button",c.close,c.klass.buttonClose,"type=button data-close=true "+(a?"":" disabled")+" "+e.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],today:"Today",clear:"Clear",close:"Close",closeOnSelect:!0,closeOnClear:!0,updateInput:!0,format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)});
lib/simple-admin-pages/lib/pickadate/picker.js CHANGED
@@ -1,7 +1,7 @@
1
  /*!
2
- * pickadate.js v3.6.4, 2019/05/25
3
  * By Amsul, http://amsul.ca
4
  * Hosted on http://amsul.github.io/pickadate.js
5
  * Licensed under MIT
6
  */
7
- !function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):"object"==typeof window?window.Picker=a(jQuery):this.Picker=a(jQuery)}(function(a){function b(g,h,j,l){function n(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",B.component.nodes(w.open),y.box),y.wrap),y.frame),y.holder,'tabindex="-1"')}function o(){z.data(h,B).addClass(y.input).val(z.data("value")?B.get("select",x.format):g.value).on("focus."+w.id+" click."+w.id,function(a){a.preventDefault(),B.open()}).on("mousedown",function(){w.handlingOpen=!0;var b=function(){setTimeout(function(){a(document).off("mouseup",b),w.handlingOpen=!1},0)};a(document).on("mouseup",b)}),x.editable||z.on("keydown."+w.id,u),f(g,{haspopup:!0,expanded:!1,readonly:!1,owns:g.id+"_root"})}function p(){f(B.$root[0],"hidden",!0)}function q(){B.$holder.on({keydown:u,"focus.toOpen":t,blur:function(){z.removeClass(y.target)},focusin:function(a){B.$root.removeClass(y.focused),a.stopPropagation()},"mousedown click":function(b){var c=e(b,g);c!=B.$holder[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),B.$holder.eq(0).focus()))}}).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(y.navDisabled)||b.hasClass(y.disabled),e=i();e=e&&(e.type||e.href?e:null),(d||e&&!a.contains(B.$root[0],e))&&B.$holder.eq(0).focus(),!d&&c.nav?B.set("highlight",B.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?(B.set("select",c.pick),x.closeOnSelect&&B.close(!0)):c.clear?(B.clear(),x.closeOnClear&&B.close(!0)):c.close&&B.close(!0)})}function r(){var b;!0===x.hiddenName?(b=g.name,g.name=""):(b=["string"==typeof x.hiddenPrefix?x.hiddenPrefix:"","string"==typeof x.hiddenSuffix?x.hiddenSuffix:"_submit"],b=b[0]+g.name+b[1]),B._hidden=a('<input type=hidden name="'+b+'"'+(z.data("value")||g.value?' value="'+B.get("select",x.formatSubmit)+'"':"")+">")[0],z.on("change."+w.id,function(){B._hidden.value=g.value?B.get("select",x.formatSubmit):""})}function s(){v&&m?B.$holder.find("."+y.frame).one("transitionend",function(){B.$holder.eq(0).focus()}):setTimeout(function(){B.$holder.eq(0).focus()},0)}function t(a){a.stopPropagation(),z.addClass(y.target),B.$root.addClass(y.focused),B.open()}function u(a){var b=a.keyCode,c=/^(8|46)$/.test(b);if(27==b)return B.close(!0),!1;(32==b||c||!w.open&&B.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?B.clear().close():B.open())}if(!g)return b;var v=!1,w={id:g.id||"P"+Math.abs(~~(Math.random()*new Date)),handlingOpen:!1},x=j?a.extend(!0,{},j.defaults,l):l||{},y=a.extend({},b.klasses(),x.klass),z=a(g),A=function(){return this.start()},B=A.prototype={constructor:A,$node:z,start:function(){return w&&w.start?B:(w.methods={},w.start=!0,w.open=!1,w.type=g.type,g.autofocus=g==i(),g.readOnly=!x.editable,g.id=g.id||w.id,"text"!=g.type&&(g.type="text"),B.component=new j(B,x),B.$root=a('<div class="'+y.picker+'" id="'+g.id+'_root" />'),p(),B.$holder=a(n()).appendTo(B.$root),q(),x.formatSubmit&&r(),o(),x.containerHidden?a(x.containerHidden).append(B._hidden):z.after(B._hidden),x.container?a(x.container).append(B.$root):z.after(B.$root),B.on({start:B.component.onStart,render:B.component.onRender,stop:B.component.onStop,open:B.component.onOpen,close:B.component.onClose,set:B.component.onSet}).on({start:x.onStart,render:x.onRender,stop:x.onStop,open:x.onOpen,close:x.onClose,set:x.onSet}),v=c(B.$holder[0]),g.autofocus&&B.open(),B.trigger("start").trigger("render"))},render:function(b){return b?(B.$holder=a(n()),q(),B.$root.html(B.$holder)):B.$root.find("."+y.box).html(B.component.nodes(w.open)),B.trigger("render")},stop:function(){return w.start?(B.close(),B._hidden&&B._hidden.parentNode.removeChild(B._hidden),B.$root.remove(),z.removeClass(y.input).removeData(h),setTimeout(function(){z.off("."+w.id)},0),g.type=w.type,g.readOnly=!1,B.trigger("stop"),w.methods={},w.start=!1,B):B},open:function(c){return w.open?B:(z.addClass(y.active),f(g,"expanded",!0),setTimeout(function(){B.$root.addClass(y.opened),f(B.$root[0],"hidden",!1)},0),!1!==c&&(w.open=!0,v&&a("body").css("overflow","hidden").css("padding-right","+="+d()),s(),k.on("click."+w.id+" focusin."+w.id,function(a){if(!w.handlingOpen){var b=e(a,g);a.isSimulated||b==g||b==document||3==a.which||B.close(b===B.$holder[0])}}).on("keydown."+w.id,function(c){var d=c.keyCode,f=B.component.key[d],h=e(c,g);27==d?B.close(!0):h!=B.$holder[0]||!f&&13!=d?a.contains(B.$root[0],h)&&13==d&&(c.preventDefault(),h.click()):(c.preventDefault(),f?b._.trigger(B.component.key.go,B,[b._.trigger(f)]):B.$root.find("."+y.highlighted).hasClass(y.disabled)||(B.set("select",B.component.item.highlight),x.closeOnSelect&&B.close(!0)))})),B.trigger("open"))},close:function(b){return b&&(x.editable?g.focus():(B.$holder.off("focus.toOpen").focus(),setTimeout(function(){B.$holder.on("focus.toOpen",t)},0))),z.removeClass(y.active),f(g,"expanded",!1),setTimeout(function(){B.$root.removeClass(y.opened+" "+y.focused),f(B.$root[0],"hidden",!0)},0),w.open?(w.open=!1,v&&a("body").css("overflow","").css("padding-right","-="+d()),k.off("."+w.id),B.trigger("close")):B},clear:function(a){return B.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in B.component.item&&(void 0===f&&(f=null),B.component.set(e,f,d)),"select"!=e&&"clear"!=e||!x.updateInput||z.val("clear"==e?"":B.get(e,x.format)).trigger("change");B.render()}return d.muted?B:B.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=w[a])return w[a];if("valueSubmit"==a){if(B._hidden)return B._hidden.value;a="value"}if("value"==a)return g.value;if(a in B.component.item){if("string"==typeof c){var d=B.component.get(a);return d?b._.trigger(B.component.formats.toString,B.component,[c,d]):""}return B.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),w.methods[e]=w.methods[e]||[],w.methods[e].push(f)}return B},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a<namesCount;a+=1)(b=c[a])in w.methods&&delete w.methods[b];return B},trigger:function(a,c){var d=function(a){var d=w.methods[a];d&&d.map(function(a){b._.trigger(a,B,[c])})};return d("_"+a),d(a),B}};return new A}function c(a){var b,c="position";return a.currentStyle?b=a.currentStyle[c]:window.getComputedStyle&&(b=getComputedStyle(a)[c]),"fixed"==b}function d(){if(l.height()<=j.height())return 0;var b=a('<div style="visibility:hidden;width:100px" />').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('<div style="width:100%" />').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(a,b){var c=[];return a.path&&(c=a.path),a.originalEvent&&a.originalEvent.path&&(c=a.originalEvent.path),c&&c.length>0?b&&c.indexOf(b)>=0?b:c[0]:a.target}function f(b,c,d){if(a.isPlainObject(c))for(var e in c)g(b,e,c[e]);else g(b,c,d)}function g(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function h(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d;c+=null==b[d]?"":e+'="'+b[d]+'"'}return c}function i(){try{return document.activeElement}catch(a){}}var j=a(window),k=a(document),l=a(document.documentElement),m=null!=document.documentElement.style.transition;return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+"</"+b+">"):""},lead:function(a){return(a<10?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1==0},ariaAttr:h},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){a(this).data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b});
1
  /*!
2
+ * pickadate.js v3.6.1, 2019/03/15
3
  * By Amsul, http://amsul.ca
4
  * Hosted on http://amsul.github.io/pickadate.js
5
  * Licensed under MIT
6
  */
7
+ !function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):this.Picker=a(jQuery)}(function(a){function b(h,i,k,m){function o(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",C.component.nodes(x.open),z.box),z.wrap),z.frame),z.holder,'tabindex="-1"')}function p(){A.data(i,C).addClass(z.input).val(A.data("value")?C.get("select",y.format):h.value).on("focus."+x.id+" click."+x.id,f(function(a){a.preventDefault(),C.open()},50)),y.editable||A.on("keydown."+x.id,v),g(h,{haspopup:!0,expanded:!1,readonly:!1,owns:h.id+"_root"})}function q(){g(C.$root[0],"hidden",!0)}function r(){C.$holder.on({keydown:v,"focus.toOpen":u,blur:function(){A.removeClass(z.target)},focusin:function(a){C.$root.removeClass(z.focused),a.stopPropagation()},"mousedown click":function(b){var c=e(b,h);c!=C.$holder[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),C.$holder.eq(0).focus()))}}).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(z.navDisabled)||b.hasClass(z.disabled),e=j();e=e&&(e.type||e.href?e:null),(d||e&&!a.contains(C.$root[0],e))&&C.$holder.eq(0).focus(),!d&&c.nav?C.set("highlight",C.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?(C.set("select",c.pick),y.closeOnSelect&&C.close(!0)):c.clear?(C.clear(),y.closeOnClear&&C.close(!0)):c.close&&C.close(!0)})}function s(){var b;!0===y.hiddenName?(b=h.name,h.name=""):(b=["string"==typeof y.hiddenPrefix?y.hiddenPrefix:"","string"==typeof y.hiddenSuffix?y.hiddenSuffix:"_submit"],b=b[0]+h.name+b[1]),C._hidden=a('<input type=hidden name="'+b+'"'+(A.data("value")||h.value?' value="'+C.get("select",y.formatSubmit)+'"':"")+">")[0],A.on("change."+x.id,function(){C._hidden.value=h.value?C.get("select",y.formatSubmit):""})}function t(){w&&n?C.$holder.find("."+z.frame).one("transitionend",function(){C.$holder.eq(0).focus()}):setTimeout(function(){C.$holder.eq(0).focus()},0)}function u(a){a.stopPropagation(),A.addClass(z.target),C.$root.addClass(z.focused),C.open()}function v(a){var b=a.keyCode,c=/^(8|46)$/.test(b);if(27==b)return C.close(!0),!1;(32==b||c||!x.open&&C.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?C.clear().close():C.open())}if(!h)return b;var w=!1,x={id:h.id||"P"+Math.abs(~~(Math.random()*new Date))},y=k?a.extend(!0,{},k.defaults,m):m||{},z=a.extend({},b.klasses(),y.klass),A=a(h),B=function(){return this.start()},C=B.prototype={constructor:B,$node:A,start:function(){return x&&x.start?C:(x.methods={},x.start=!0,x.open=!1,x.type=h.type,h.autofocus=h==j(),h.readOnly=!y.editable,h.id=h.id||x.id,"text"!=h.type&&(h.type="text"),C.component=new k(C,y),C.$root=a('<div class="'+z.picker+'" id="'+h.id+'_root" />'),q(),C.$holder=a(o()).appendTo(C.$root),r(),y.formatSubmit&&s(),p(),y.containerHidden?a(y.containerHidden).append(C._hidden):A.after(C._hidden),y.container?a(y.container).append(C.$root):A.after(C.$root),C.on({start:C.component.onStart,render:C.component.onRender,stop:C.component.onStop,open:C.component.onOpen,close:C.component.onClose,set:C.component.onSet}).on({start:y.onStart,render:y.onRender,stop:y.onStop,open:y.onOpen,close:y.onClose,set:y.onSet}),w=c(C.$holder[0]),h.autofocus&&C.open(),C.trigger("start").trigger("render"))},render:function(b){return b?(C.$holder=a(o()),r(),C.$root.html(C.$holder)):C.$root.find("."+z.box).html(C.component.nodes(x.open)),C.trigger("render")},stop:function(){return x.start?(C.close(),C._hidden&&C._hidden.parentNode.removeChild(C._hidden),C.$root.remove(),A.removeClass(z.input).removeData(i),setTimeout(function(){A.off("."+x.id)},0),h.type=x.type,h.readOnly=!1,C.trigger("stop"),x.methods={},x.start=!1,C):C},open:function(c){return x.open?C:(A.addClass(z.active),g(h,"expanded",!0),setTimeout(function(){C.$root.addClass(z.opened),g(C.$root[0],"hidden",!1)},0),!1!==c&&(x.open=!0,w&&a("body").css("overflow","hidden").css("padding-right","+="+d()),t(),l.on("click."+x.id+" focusin."+x.id,function(a){var b=e(a,h);a.isSimulated||b==h||b==document||3==a.which||C.close(b===C.$holder[0])}).on("keydown."+x.id,function(c){var d=c.keyCode,f=C.component.key[d],g=e(c,h);27==d?C.close(!0):g!=C.$holder[0]||!f&&13!=d?a.contains(C.$root[0],g)&&13==d&&(c.preventDefault(),g.click()):(c.preventDefault(),f?b._.trigger(C.component.key.go,C,[b._.trigger(f)]):C.$root.find("."+z.highlighted).hasClass(z.disabled)||(C.set("select",C.component.item.highlight),y.closeOnSelect&&C.close(!0)))})),C.trigger("open"))},close:function(b){return b&&(y.editable?h.focus():(C.$holder.off("focus.toOpen").focus(),setTimeout(function(){C.$holder.on("focus.toOpen",u)},0))),A.removeClass(z.active),g(h,"expanded",!1),setTimeout(function(){C.$root.removeClass(z.opened+" "+z.focused),g(C.$root[0],"hidden",!0)},0),x.open?(x.open=!1,w&&a("body").css("overflow","").css("padding-right","-="+d()),l.off("."+x.id),C.trigger("close")):C},clear:function(a){return C.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in C.component.item&&(void 0===f&&(f=null),C.component.set(e,f,d)),"select"!=e&&"clear"!=e||!y.updateInput||A.val("clear"==e?"":C.get(e,y.format)).trigger("change");C.render()}return d.muted?C:C.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=x[a])return x[a];if("valueSubmit"==a){if(C._hidden)return C._hidden.value;a="value"}if("value"==a)return h.value;if(a in C.component.item){if("string"==typeof c){var d=C.component.get(a);return d?b._.trigger(C.component.formats.toString,C.component,[c,d]):""}return C.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),x.methods[e]=x.methods[e]||[],x.methods[e].push(f)}return C},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a<namesCount;a+=1)(b=c[a])in x.methods&&delete x.methods[b];return C},trigger:function(a,c){var d=function(a){var d=x.methods[a];d&&d.map(function(a){b._.trigger(a,C,[c])})};return d("_"+a),d(a),C}};return new B}function c(a){var b,c="position";return a.currentStyle?b=a.currentStyle[c]:window.getComputedStyle&&(b=getComputedStyle(a)[c]),"fixed"==b}function d(){if(m.height()<=k.height())return 0;var b=a('<div style="visibility:hidden;width:100px" />').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('<div style="width:100%" />').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(a,b){var c=[];return a.path&&(c=a.path),a.originalEvent&&a.originalEvent.path&&(c=a.originalEvent.path),c&&c.length>0?b&&c.indexOf(b)>=0?b:c[0]:a.target}function f(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,c||a.apply(e,f)},h=c&&!d;clearTimeout(d),d=setTimeout(g,b),h&&a.apply(e,f)}}function g(b,c,d){if(a.isPlainObject(c))for(var e in c)h(b,e,c[e]);else h(b,c,d)}function h(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function i(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d;c+=null==b[d]?"":e+'="'+b[d]+'"'}return c}function j(){try{return document.activeElement}catch(a){}}var k=a(window),l=a(document),m=a(document.documentElement),n=null!=document.documentElement.style.transition;return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+"</"+b+">"):""},lead:function(a){return(a<10?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1==0},ariaAttr:i},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){a(this).data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b});
lib/simple-admin-pages/lib/pickadate/picker.time.js CHANGED
@@ -1,5 +1,5 @@
1
  /*!
2
- * Time picker for pickadate.js v3.6.4
3
  * http://amsul.github.io/pickadate.js/time.htm
4
  */
5
  !function(a){"function"==typeof define&&define.amd?define(["./picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0].value,e=a.$node.data("value"),f=e||d,g=e?b.formatSubmit:b.format;c.settings=b,c.$node=a.$node,c.queue={interval:"i",min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse create validate",view:"parse create validate",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.interval=b.interval||30,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),f?c.set("select",f,{format:g}):c.set("select",null).set("highlight",c.item.now),c.key={40:1,38:-1,39:1,37:-1,go:function(a){c.set("highlight",c.item.highlight.pick+a*c.item.interval,{interval:a*c.item.interval}),this.render()}},a.on("render",function(){var c=a.$root.children(),d=c.find("."+b.klass.viewset),e=function(a){return["webkit","moz","ms","o",""].map(function(b){return(b?"-"+b+"-":"")+a})},f=function(a,b){e("transform").map(function(c){a.css(c,b)}),e("transition").map(function(c){a.css(c,b)})};d.length&&(f(c,"none"),c[0].scrollTop=~~d.position().top-2*d[0].clientHeight,f(c,""))},1).on("open",function(){a.$root.find("button").attr("disabled",!1)},1).on("close",function(){a.$root.find("button").attr("disabled",!0)},1)}var d=24,e=60,f=12,g=d*e,h=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):"interval"==a?d.set("min",e.min,c).set("max",e.max,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",b,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",b,c),"min"==a&&d.set("max",e.max,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,f){var i=this;return c=void 0===c?a:c,h.isDate(c)&&(c=[c.getHours(),c.getMinutes()]),b.isPlainObject(c)&&h.isInteger(c.pick)?c=c.pick:b.isArray(c)?c=+c[0]*e+ +c[1]:h.isInteger(c)||(c=i.now(a,c,f)),"max"==a&&c<i.item.min.pick&&(c+=g),"min"!=a&&"max"!=a&&(c-i.item.min.pick)%i.item.interval!=0&&(c+=i.item.interval),c=i.normalize(a,c,f),{hour:~~(d+c/e)%d,mins:(e+c%e)%e,time:(g+c)%g,pick:c%g}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return!0===a||b.isArray(a)||h.isDate(a)?d.create(a):a};return h.isInteger(a)||(a=e(a)),h.isInteger(c)||(c=e(c)),h.isInteger(a)&&b.isPlainObject(c)?a=[c.hour,c.mins+a*d.settings.interval]:h.isInteger(c)&&b.isPlainObject(a)&&(c=[a.hour,a.mins+c*d.settings.interval]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b){var c,d=this.item.interval,f=new Date,g=f.getHours()*e+f.getMinutes(),i=h.isInteger(b);return g-=g%d,c=b<0&&d*b+g<=-d,g+="min"==a&&c?0:d,i&&(g+=d*(c&&"max"!=a?b+1:b)),g},c.prototype.normalize=function(a,b){var c=this.item.interval,d=this.item.min&&this.item.min.pick||0;return b-="min"==a?0:(b-d)%c},c.prototype.measure=function(a,c,f){var g=this;return c||(c="min"==a?[0,0]:[d-1,e-1]),"string"==typeof c?c=g.parse(a,c):!0===c||h.isInteger(c)?c=g.now(a,c,f):b.isPlainObject(c)&&h.isInteger(c.pick)&&(c=g.normalize(a,c.pick,f)),c},c.prototype.validate=function(a,b,c){var d=this,e=c&&c.interval?c.interval:d.item.interval;return d.disabled(b)&&(b=d.shift(b,e)),b=d.scope(b),d.disabled(b)&&(b=d.shift(b,-1*e)),b},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return h.isInteger(d)?a.hour==d:b.isArray(d)||h.isDate(d)?a.pick==c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[2]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.shift=function(a,b){var c=this,d=c.item.min.pick,e=c.item.max.pick;for(b=b||c.item.interval;c.disabled(a)&&(a=c.create(a.pick+=b),!(a.pick<=d||a.pick>=e)););return a},c.prototype.scope=function(a){var b=this.item.min.pick,c=this.item.max.pick;return this.create(a.pick>c?c:a.pick<b?b:a)},c.prototype.parse=function(a,b,c){var d,f,g,i,j,k=this,l={};if(!b||"string"!=typeof b)return b;c&&c.format||(c=c||{},c.format=k.settings.format),k.formats.toArray(c.format).map(function(a){var c,d=k.formats[a],e=d?h.trigger(d,k,[b,l]):a.replace(/^!/,"").length;d&&(c=b.substr(0,e),l[a]=c.match(/^\d+$/)?+c:c),b=b.substr(e)});for(i in l)j=l[i],h.isInteger(j)?i.match(/^(h|hh)$/i)?(d=j,"h"!=i&&"hh"!=i||(d%=12)):"i"==i&&(f=j):i.match(/^a$/i)&&j.match(/^p/i)&&("h"in l||"hh"in l)&&(g=!0);return(g?d+12:d)*e+f},c.prototype.formats={h:function(a,b){return a?h.digits(a):b.hour%f||f},hh:function(a,b){return a?2:h.lead(b.hour%f||f)},H:function(a,b){return a?h.digits(a):""+b.hour%24},HH:function(a,b){return a?h.digits(a):h.lead(b.hour%24)},i:function(a,b){return a?2:h.lead(b.mins)},a:function(a,b){return a?4:g/2>b.time%g?"a.m.":"p.m."},A:function(a,b){return a?2:g/2>b.time%g?"AM":"PM"},toArray:function(a){return a.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return h.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}},c.prototype.isTimeExact=function(a,c){var d=this;return h.isInteger(a)&&h.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(h.isDate(a)||b.isArray(a))&&(h.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&(d.isTimeExact(a.from,c.from)&&d.isTimeExact(a.to,c.to))},c.prototype.isTimeOverlap=function(a,c){var d=this;return h.isInteger(a)&&(h.isDate(c)||b.isArray(c))?a===d.create(c).hour:h.isInteger(c)&&(h.isDate(a)||b.isArray(a))?c===d.create(a).hour:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():!1===c?(d.flipEnable(1),e=[]):!0===c?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,f=0;f<e.length;f+=1)if(d.isTimeExact(a,e[f])){c=!0;break}c||(h.isInteger(a)||h.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,f=e.length;return"flip"==c?d.flipEnable():!0===c?(d.flipEnable(1),e=[]):!1===c?(d.flipEnable(-1),e=[]):c.map(function(a){var c,g,i,j;for(i=0;i<f;i+=1){if(g=e[i],d.isTimeExact(g,a)){c=e[i]=null,j=!0;break}if(d.isTimeOverlap(g,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[2]||c.push("inverted")):h.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;i<f;i+=1)if(d.isTimeExact(e[i],a)){e[i]=null;break}if(j)for(i=0;i<f;i+=1)if(d.isTimeOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.i=function(a,b){return h.isInteger(b)&&b>0?b:this.item.interval},c.prototype.nodes=function(a){var b=this,c=b.settings,d=b.item.select,e=b.item.highlight,f=b.item.view,g=b.item.disable;return h.node("ul",h.group({min:b.item.min.pick,max:b.item.max.pick,i:b.item.interval,node:"li",item:function(a){a=b.create(a);var i=a.pick,j=d&&d.pick==i,k=e&&e.pick==i,l=g&&b.disabled(a),m=h.trigger(b.formats.toString,b,[c.format,a]);return[h.trigger(b.formats.toString,b,[h.trigger(c.formatLabel,b,[a])||c.format,a]),function(a){return j&&a.push(c.klass.selected),k&&a.push(c.klass.highlighted),f&&f.pick==i&&a.push(c.klass.viewset),l&&a.push(c.klass.disabled),a.join(" ")}([c.klass.listItem]),"data-pick="+a.pick+" "+h.ariaAttr({role:"option",label:m,selected:!(!j||b.$node.val()!==m)||null,activedescendant:!!k||null,disabled:!!l||null})]}})+h.node("li",h.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+h.ariaAttr({controls:b.$node[0].id})),"",h.ariaAttr({role:"presentation"})),c.klass.list,h.ariaAttr({role:"listbox",controls:b.$node[0].id}))},c.defaults=function(a){return{clear:"Clear",format:"h:i A",interval:30,closeOnSelect:!0,closeOnClear:!0,updateInput:!0,klass:{picker:a+" "+a+"--time",holder:a+"__holder",list:a+"__list",listItem:a+"__list-item",disabled:a+"__list-item--disabled",selected:a+"__list-item--selected",highlighted:a+"__list-item--highlighted",viewset:a+"__list-item--viewset",now:a+"__list-item--now",buttonClear:a+"__button--clear"}}}(a.klasses().picker),a.extend("pickatime",c)});
1
  /*!
2
+ * Time picker for pickadate.js v3.6.1
3
  * http://amsul.github.io/pickadate.js/time.htm
4
  */
5
  !function(a){"function"==typeof define&&define.amd?define(["./picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0].value,e=a.$node.data("value"),f=e||d,g=e?b.formatSubmit:b.format;c.settings=b,c.$node=a.$node,c.queue={interval:"i",min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse create validate",view:"parse create validate",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.interval=b.interval||30,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),f?c.set("select",f,{format:g}):c.set("select",null).set("highlight",c.item.now),c.key={40:1,38:-1,39:1,37:-1,go:function(a){c.set("highlight",c.item.highlight.pick+a*c.item.interval,{interval:a*c.item.interval}),this.render()}},a.on("render",function(){var c=a.$root.children(),d=c.find("."+b.klass.viewset),e=function(a){return["webkit","moz","ms","o",""].map(function(b){return(b?"-"+b+"-":"")+a})},f=function(a,b){e("transform").map(function(c){a.css(c,b)}),e("transition").map(function(c){a.css(c,b)})};d.length&&(f(c,"none"),c[0].scrollTop=~~d.position().top-2*d[0].clientHeight,f(c,""))},1).on("open",function(){a.$root.find("button").attr("disabled",!1)},1).on("close",function(){a.$root.find("button").attr("disabled",!0)},1)}var d=24,e=60,f=12,g=d*e,h=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):"interval"==a?d.set("min",e.min,c).set("max",e.max,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",b,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",b,c),"min"==a&&d.set("max",e.max,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,f){var i=this;return c=void 0===c?a:c,h.isDate(c)&&(c=[c.getHours(),c.getMinutes()]),b.isPlainObject(c)&&h.isInteger(c.pick)?c=c.pick:b.isArray(c)?c=+c[0]*e+ +c[1]:h.isInteger(c)||(c=i.now(a,c,f)),"max"==a&&c<i.item.min.pick&&(c+=g),"min"!=a&&"max"!=a&&(c-i.item.min.pick)%i.item.interval!=0&&(c+=i.item.interval),c=i.normalize(a,c,f),{hour:~~(d+c/e)%d,mins:(e+c%e)%e,time:(g+c)%g,pick:c%g}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return!0===a||b.isArray(a)||h.isDate(a)?d.create(a):a};return h.isInteger(a)||(a=e(a)),h.isInteger(c)||(c=e(c)),h.isInteger(a)&&b.isPlainObject(c)?a=[c.hour,c.mins+a*d.settings.interval]:h.isInteger(c)&&b.isPlainObject(a)&&(c=[a.hour,a.mins+c*d.settings.interval]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b){var c,d=this.item.interval,f=new Date,g=f.getHours()*e+f.getMinutes(),i=h.isInteger(b);return g-=g%d,c=b<0&&d*b+g<=-d,g+="min"==a&&c?0:d,i&&(g+=d*(c&&"max"!=a?b+1:b)),g},c.prototype.normalize=function(a,b){var c=this.item.interval,d=this.item.min&&this.item.min.pick||0;return b-="min"==a?0:(b-d)%c},c.prototype.measure=function(a,c,f){var g=this;return c||(c="min"==a?[0,0]:[d-1,e-1]),"string"==typeof c?c=g.parse(a,c):!0===c||h.isInteger(c)?c=g.now(a,c,f):b.isPlainObject(c)&&h.isInteger(c.pick)&&(c=g.normalize(a,c.pick,f)),c},c.prototype.validate=function(a,b,c){var d=this,e=c&&c.interval?c.interval:d.item.interval;return d.disabled(b)&&(b=d.shift(b,e)),b=d.scope(b),d.disabled(b)&&(b=d.shift(b,-1*e)),b},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return h.isInteger(d)?a.hour==d:b.isArray(d)||h.isDate(d)?a.pick==c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[2]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.shift=function(a,b){var c=this,d=c.item.min.pick,e=c.item.max.pick;for(b=b||c.item.interval;c.disabled(a)&&(a=c.create(a.pick+=b),!(a.pick<=d||a.pick>=e)););return a},c.prototype.scope=function(a){var b=this.item.min.pick,c=this.item.max.pick;return this.create(a.pick>c?c:a.pick<b?b:a)},c.prototype.parse=function(a,b,c){var d,f,g,i,j,k=this,l={};if(!b||"string"!=typeof b)return b;c&&c.format||(c=c||{},c.format=k.settings.format),k.formats.toArray(c.format).map(function(a){var c,d=k.formats[a],e=d?h.trigger(d,k,[b,l]):a.replace(/^!/,"").length;d&&(c=b.substr(0,e),l[a]=c.match(/^\d+$/)?+c:c),b=b.substr(e)});for(i in l)j=l[i],h.isInteger(j)?i.match(/^(h|hh)$/i)?(d=j,"h"!=i&&"hh"!=i||(d%=12)):"i"==i&&(f=j):i.match(/^a$/i)&&j.match(/^p/i)&&("h"in l||"hh"in l)&&(g=!0);return(g?d+12:d)*e+f},c.prototype.formats={h:function(a,b){return a?h.digits(a):b.hour%f||f},hh:function(a,b){return a?2:h.lead(b.hour%f||f)},H:function(a,b){return a?h.digits(a):""+b.hour%24},HH:function(a,b){return a?h.digits(a):h.lead(b.hour%24)},i:function(a,b){return a?2:h.lead(b.mins)},a:function(a,b){return a?4:g/2>b.time%g?"a.m.":"p.m."},A:function(a,b){return a?2:g/2>b.time%g?"AM":"PM"},toArray:function(a){return a.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return h.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}},c.prototype.isTimeExact=function(a,c){var d=this;return h.isInteger(a)&&h.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(h.isDate(a)||b.isArray(a))&&(h.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&(d.isTimeExact(a.from,c.from)&&d.isTimeExact(a.to,c.to))},c.prototype.isTimeOverlap=function(a,c){var d=this;return h.isInteger(a)&&(h.isDate(c)||b.isArray(c))?a===d.create(c).hour:h.isInteger(c)&&(h.isDate(a)||b.isArray(a))?c===d.create(a).hour:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():!1===c?(d.flipEnable(1),e=[]):!0===c?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,f=0;f<e.length;f+=1)if(d.isTimeExact(a,e[f])){c=!0;break}c||(h.isInteger(a)||h.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,f=e.length;return"flip"==c?d.flipEnable():!0===c?(d.flipEnable(1),e=[]):!1===c?(d.flipEnable(-1),e=[]):c.map(function(a){var c,g,i,j;for(i=0;i<f;i+=1){if(g=e[i],d.isTimeExact(g,a)){c=e[i]=null,j=!0;break}if(d.isTimeOverlap(g,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[2]||c.push("inverted")):h.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;i<f;i+=1)if(d.isTimeExact(e[i],a)){e[i]=null;break}if(j)for(i=0;i<f;i+=1)if(d.isTimeOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.i=function(a,b){return h.isInteger(b)&&b>0?b:this.item.interval},c.prototype.nodes=function(a){var b=this,c=b.settings,d=b.item.select,e=b.item.highlight,f=b.item.view,g=b.item.disable;return h.node("ul",h.group({min:b.item.min.pick,max:b.item.max.pick,i:b.item.interval,node:"li",item:function(a){a=b.create(a);var i=a.pick,j=d&&d.pick==i,k=e&&e.pick==i,l=g&&b.disabled(a),m=h.trigger(b.formats.toString,b,[c.format,a]);return[h.trigger(b.formats.toString,b,[h.trigger(c.formatLabel,b,[a])||c.format,a]),function(a){return j&&a.push(c.klass.selected),k&&a.push(c.klass.highlighted),f&&f.pick==i&&a.push(c.klass.viewset),l&&a.push(c.klass.disabled),a.join(" ")}([c.klass.listItem]),"data-pick="+a.pick+" "+h.ariaAttr({role:"option",label:m,selected:!(!j||b.$node.val()!==m)||null,activedescendant:!!k||null,disabled:!!l||null})]}})+h.node("li",h.node("button",c.clear,c.klass.buttonClear,"type=button data-clear=1"+(a?"":" disabled")+" "+h.ariaAttr({controls:b.$node[0].id})),"",h.ariaAttr({role:"presentation"})),c.klass.list,h.ariaAttr({role:"listbox",controls:b.$node[0].id}))},c.defaults=function(a){return{clear:"Clear",format:"h:i A",interval:30,closeOnSelect:!0,closeOnClear:!0,updateInput:!0,klass:{picker:a+" "+a+"--time",holder:a+"__holder",list:a+"__list",listItem:a+"__list-item",disabled:a+"__list-item--disabled",selected:a+"__list-item--selected",highlighted:a+"__list-item--highlighted",viewset:a+"__list-item--viewset",now:a+"__list-item--now",buttonClear:a+"__button--clear"}}}(a.klasses().picker),a.extend("pickatime",c)});
lib/simple-admin-pages/lib/pickadate/translations/ge_GEO.js DELETED
@@ -1 +0,0 @@
1
- jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthsShort:["იან","თებ","მარტ","აპრ","მაი","ივნ","ივლ","აგვ","სექტ","ოქტ","ნოემ","დეკ"],weekdaysFull:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუშაბათი","პარასკევი","შაბათი"],weekdaysShort:["კვ","ორ","სამ","ოთხ","ხუთ","პარ","შაბ"],today:"დღეს",clear:"გასუფთავება",firstDay:1,format:"d mmmm yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"გასუფთავება"});
 
lib/simple-admin-pages/lib/pickadate/translations/ja_JP.js CHANGED
@@ -1 +1 @@
1
- jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],weekdaysFull:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],weekdaysShort:["日","月","火","水","木","金","土"],today:"今日",clear:"消去",close:"閉じる",firstDay:1,format:"yyyymmdd",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"消去"});
1
+ jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],weekdaysFull:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],weekdaysShort:["日","月","火","水","木","金","土"],today:"今日",clear:"消去",firstDay:1,format:"yyyy mm dd",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"消去"});
lib/simple-admin-pages/lib/pickadate/translations/km_KH.js DELETED
@@ -1 +0,0 @@
1
- jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthsShort:["មក.","កុ.","មី.","មេ.","ឧស.","មិថុ.","កក្ក.","សី.","កញ.","តុ.","វិច្ឆ.","ធ."],weekdaysFull:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],weekdaysShort:["អា.","ច.","អ.","ព.","ព្រ.","សុ.","ស."],today:"ថ្ងៃនេះ",clear:"លុប",close:"បិទ",labelMonthNext:"ខែបន្ទាប់",labelMonthPrev:"ខែមុន",labelMonthSelect:"ជ្រើសរើសខែ",labelYearSelect:"ជ្រើសរើសឆ្នាំ",firstDay:1,showMonthsShort:!1,showWeekdaysFull:!0,format:"ថ្ងៃទី d ខែmmmm ឆ្នាំ yyyy",formatSubmit:"yyyy/mm/dd"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"លុប"});
 
lib/simple-admin-pages/lib/pickadate/translations/sr_RS_cy.js DELETED
@@ -1 +0,0 @@
1
- jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["јануар","фебруар","март","април","мај","јун","јул","август","септембар","октобар","новембар","децембар"],monthsShort:["јан.","феб.","март","апр.","мај","јун","јул","авг.","септ.","окт.","нов.","дец."],weekdaysFull:["недеља","понедељак","уторак","среда","четвртак","петак","субота"],weekdaysShort:["нед.","пон.","ут.","ср.","чет.","пет.","суб."],today:"данас",clear:"избриши",close:"затвори",firstDay:1,format:"d. MMMM yyyy.",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Следећи месец",labelMonthPrev:"Претходни месец",labelMonthSelect:"Изаберите месец",labelYearSelect:"Изаберите годину"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"избриши"});
 
lib/simple-admin-pages/lib/pickadate/translations/sr_RS_lt.js DELETED
@@ -1 +0,0 @@
1
- jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:["januar","februar","mart","april","maj","jun","juli","avgust","septembar","oktobar","novembar","decembar"],monthsShort:["jan.","feb.","mart","apr.","maj","jun","jul","avg.","sept.","okt.","nov.","dec."],weekdaysFull:["nedelja","ponedeljak","utorak","sreda","četvrtak","petak","subota"],weekdaysShort:["ned.","pon.","ut.","sr.","čet.","pet.","sub."],today:"danas",clear:"izbriši",close:"zatvori",firstDay:1,format:"d. MMMM yyyy.",formatSubmit:"yyyy/mm/dd",labelMonthNext:"Sledeći mesec",labelMonthPrev:"Prethodni mesec",labelMonthSelect:"Izaberite mesec",labelYearSelect:"Izaberite godinu"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:"izbriši"});
 
lib/stripe/.coveralls.yml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ service_name: travis-ci
2
+ src_dir: .
3
+ coverage_clover: clover.xml
4
+ json_path: coveralls-upload.json
lib/stripe/.gitignore ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Mac OS X dumps these all over the place.
2
+ .DS_Store
3
+
4
+ # Ignore the SimpleTest library if it is installed to /test/.
5
+ /test/simpletest/
6
+
7
+ # Ignore the /vendor/ directory for people using composer
8
+ /vendor/
9
+
10
+ # If the vendor directory isn't being commited the composer.lock file should also be ignored
11
+ composer.lock
12
+
13
+ # Ignore PHPUnit coverage file
14
+ clover.xml
lib/stripe/.travis.yml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: php
2
+
3
+ php:
4
+ - 5.3
5
+ - 5.4
6
+ - 5.5
7
+ - 5.6
8
+ - 7.0
9
+ - hhvm
10
+
11
+ env:
12
+ - AUTOLOAD=1
13
+ - AUTOLOAD=0
14
+
15
+ script: ./build.php ${AUTOLOAD}
16
+ after_script: ./vendor/bin/coveralls -v
17
+ sudo: false
lib/stripe/CHANGELOG.md ADDED
@@ -0,0 +1,364 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### 3.20.0 2016-08-08
2
+
3
+ * Add `getDeclineCode` to card errors
4
+
5
+ ### 3.19.0 2016-07-29
6
+
7
+ * Opt requests directly into TLS 1.2 where OpenSSL >= 1.0.1 (see #277 for context)
8
+
9
+ ### 3.18.0 2016-07-28
10
+
11
+ * Add new `STATUS_` constants for subscriptions
12
+
13
+ ### 3.17.1 2016-07-28
14
+
15
+ * Fix auto-paging iterator so that it plays nicely with `iterator_to_array`
16
+
17
+ ### 3.17.0 2016-07-14
18
+
19
+ * Add field annotations to model classes for better editor hinting
20
+
21
+ ### 3.16.0 2016-07-12
22
+
23
+ * Add `ThreeDSecure` model for 3-D secure payments
24
+
25
+ ### 3.15.0 2016-06-29
26
+
27
+ * Add static `update` method to all resources that can be changed.
28
+
29
+ ### 3.14.3 2016-06-20
30
+
31
+ * Make sure that cURL never sends `Expects: 100-continue`, even on large request bodies
32
+
33
+ ### 3.14.2 2016-06-03
34
+
35
+ * Add `inventory` under `SKU` to list of keys that have nested data and can be updated
36
+
37
+ ### 3.14.1 2016-05-27
38
+
39
+ * Fix some inconsistencies in PHPDoc
40
+
41
+ ### 3.14.0 2016-05-25
42
+
43
+ * Add support for returning Relay orders
44
+
45
+ ### 3.13.0 2016-05-04
46
+
47
+ * Add `list`, `create`, `update`, `retrieve`, and `delete` methods to the Subscription class
48
+
49
+ ### 3.12.1 2016-04-07
50
+
51
+ * Additional check on value arrays for some extra safety
52
+
53
+ ### 3.12.0 2016-03-31
54
+
55
+ * Fix bug `refreshFrom` on `StripeObject` would not take an `$opts` array
56
+ * Fix bug where `$opts` not passed to parent `save` method in `Account`
57
+ * Fix bug where non-existent variable was referenced in `reverse` in `Transfer`
58
+ * Update CA cert bundle for compatibility with OpenSSL versions below 1.0.1
59
+
60
+ ### 3.11.0 2016-03-22
61
+
62
+ * Allow `CurlClient` to be initialized with default `CURLOPT_*` options
63
+
64
+ ### 3.10.1 2016-03-22
65
+
66
+ * Fix bug where request params and options were ignored in `ApplicationFee`'s `refund.`
67
+
68
+ ### 3.10.0 2016-03-15
69
+
70
+ * Add `reject` on `Account` to support the new API feature
71
+
72
+ ### 3.9.2 2016-03-04
73
+
74
+ * Fix error when an object's metadata is set more than once
75
+
76
+ ### 3.9.1 2016-02-24
77
+
78
+ * Fix encoding behavior of nested arrays for requests (see #227)
79
+
80
+ ### 3.9.0 2016-02-09
81
+
82
+ * Add automatic pagination mechanism with `autoPagingIterator()`
83
+ * Allow global account ID to be set with `Stripe::setAccountId()`
84
+
85
+ ### 3.8.0 2016-02-08
86
+
87
+ * Add `CountrySpec` model for looking up country payment information
88
+
89
+ ### 3.7.1 2016-02-01
90
+
91
+ * Update bundled CA certs
92
+
93
+ ### 3.7.0 2016-01-27
94
+
95
+ * Support deleting Relay products and SKUs
96
+
97
+ ### 3.6.0 2016-01-05
98
+
99
+ * Allow configuration of HTTP client timeouts
100
+
101
+ ### 3.5.0 2015-12-01
102
+
103
+ * Add a verification routine for external accounts
104
+
105
+ ### 3.4.0 2015-09-14
106
+
107
+ * Products, SKUs, and Orders -- https://stripe.com/relay
108
+
109
+ ### 3.3.0 2015-09-11
110
+
111
+ * Add support for 429 Rate Limit response
112
+
113
+ ### 3.2.0 2015-08-17
114
+
115
+ * Add refund listing and retrieval without an associated charge
116
+
117
+ ### 3.1.0 2015-08-03
118
+
119
+ * Add dispute listing and retrieval
120
+ * Add support for manage account deletion
121
+
122
+ ### 3.0.0 2015-07-28
123
+
124
+ * Rename `\Stripe\Object` to `\Stripe\StripeObject` (PHP 7 compatibility)
125
+ * Rename `getCode` and `getParam` in exceptions to `getStripeCode` and `getStripeParam`
126
+ * Add support for calling `json_encode` on Stripe objects in PHP 5.4+
127
+ * Start supporting/testing PHP 7
128
+
129
+ ### 2.3.0 2015-07-06
130
+
131
+ * Add request ID to all Stripe exceptions
132
+
133
+ ### 2.2.0 2015-06-01
134
+
135
+ * Add support for Alipay accounts as sources
136
+ * Add support for bank accounts as sources (private beta)
137
+ * Add support for bank accounts and cards as external_accounts on Account objects
138
+
139
+ ### 2.1.4 2015-05-13
140
+
141
+ * Fix CA certificate file path (thanks @lphilps & @matthewarkin)
142
+
143
+ ### 2.1.3 2015-05-12
144
+
145
+ * Fix to account updating to permit `tos_acceptance` and `personal_address` to be set properly
146
+ * Fix to Transfer reversal creation (thanks @neatness!)
147
+ * Network requests are now done through a swappable class for easier mocking
148
+
149
+ ### 2.1.2 2015-04-10
150
+
151
+ * Remove SSL cert revokation checking (all pre-Heartbleed certs have expired)
152
+ * Bug fixes to account updating
153
+
154
+ ### 2.1.1 2015-02-27
155
+ * Support transfer reversals
156
+
157
+ ### 2.1.0 2015-02-19
158
+
159
+ * Support new API version (2015-02-18)
160
+ * Added Bitcoin Receiever update and delete actions
161
+ * Edited tests to prefer "source" over "card" as per new API version
162
+
163
+ ### 2.0.1 2015-02-16
164
+
165
+ * Fix to fetching endpoints that use a non-default baseUrl (`FileUpload`)
166
+
167
+ ### 2.0.0 2015-02-14
168
+
169
+ * Bumped minimum version to 5.3.3
170
+ * Switched to Stripe namespace instead of Stripe_ class name prefiexes (thanks @chadicus!)
171
+ * Switched tests to PHPUnit (thanks @chadicus!)
172
+ * Switched style guide to PSR2 (thanks @chadicus!)
173
+ * Added $opts hash to the end of most methods: this permits passing 'idempotency_key', 'stripe_account', or 'stripe_version'. The last 2 will persist across multiple object loads.
174
+ * Added support for retrieving Account by ID
175
+
176
+ ### 1.18.0 2015-01-21
177
+
178
+ * Support making bitcoin charges through BitcoinReceiver source object
179
+
180
+ ### 1.17.5 2014-12-23
181
+
182
+ * Adding support for creating file uploads.
183
+
184
+ ### 1.17.4 2014-12-15
185
+
186
+ * Saving objects fetched with a custom key now works (thanks @JustinHook & @jpasilan)
187
+ * Added methods for reporting charges as safe or fraudulent and for specifying the reason for refunds
188
+
189
+ ### 1.17.3 2014-11-06
190
+
191
+ * Better handling of HHVM support for SSL certificate blacklist checking.
192
+
193
+ ### 1.17.2 2014-09-23
194
+
195
+ * Coupons now are backed by a `Stripe_Coupon` instead of `Stripe_Object`, and support updating metadata
196
+ * Running operations (`create`, `retrieve`, `all`) on upcoming invoice items now works
197
+
198
+ ### 1.17.1 2014-07-31
199
+
200
+ * Requests now send Content-Type header
201
+
202
+ ### 1.17.0 2014-07-29
203
+
204
+ * Application Fee refunds now a list instead of array
205
+ * HHVM now works
206
+ * Small bug fixes (thanks @bencromwell & @fastest963)
207
+ * __toString now returns the name of the object in addition to its JSON representation
208
+
209
+ ### 1.16.0 2014-06-17
210
+
211
+ * Add metadata for refunds and disputes
212
+
213
+ ### 1.15.0 2014-05-28
214
+
215
+ * Support canceling transfers
216
+
217
+ ### 1.14.1 2014-05-21
218
+
219
+ * Support cards for recipients.
220
+
221
+ ### 1.13.1 2014-05-15
222
+
223
+ * Fix bug in account resource where `id` wasn't in the result
224
+
225
+ ### 1.13.0 2014-04-10
226
+
227
+ * Add support for certificate blacklisting
228
+ * Update ca bundle
229
+ * Drop support for HHVM (Temporarily)
230
+
231
+ ### 1.12.0 2014-04-01
232
+
233
+ * Add Stripe_RateLimitError for catching rate limit errors.
234
+ * Update to Zend coding style (thanks, @jpiasetz)
235
+
236
+ ### 1.11.0 2014-01-29
237
+
238
+ * Add support for multiple subscriptions per customer
239
+
240
+ ### 1.10.1 2013-12-02
241
+
242
+ * Add new ApplicationFee
243
+
244
+ ### 1.9.1 2013-11-08
245
+
246
+ * Fix a bug where a null nestable object causes warnings to fire.
247
+
248
+ ### 1.9.0 2013-10-16
249
+
250
+ * Add support for metadata API.
251
+
252
+ ### 1.8.4 2013-09-18
253
+
254
+ * Add support for closing disputes.
255
+
256
+ ### 1.8.3 2013-08-13
257
+
258
+ * Add new Balance and BalanceTransaction
259
+
260
+ ### 1.8.2 2013-08-12
261
+
262
+ * Add support for unsetting attributes by updating to NULL.
263
+ Setting properties to a blank string is now an error.
264
+
265
+ ### 1.8.1 2013-07-12
266
+
267
+ * Add support for multiple cards API (Stripe API version 2013-07-12: https://stripe.com/docs/upgrades#2013-07-05)
268
+
269
+ ### 1.8.0 2013-04-11
270
+
271
+ * Allow Transfers to be creatable
272
+ * Add new Recipient resource
273
+
274
+ ### 1.7.15 2013-02-21
275
+
276
+ * Add 'id' to the list of permanent object attributes
277
+
278
+ ### 1.7.14 2013-02-20
279
+
280
+ * Don't re-encode strings that are already encoded in UTF-8. If you
281
+ were previously using plan or coupon objects with UTF-8 IDs, they
282
+ may have been treated as ISO-8859-1 (Latin-1) and encoded to UTF-8 a
283
+ 2nd time. You may now need to pass the IDs to utf8_encode before
284
+ passing them to Stripe_Plan::retrieve or Stripe_Coupon::retrieve.
285
+ * Ensure that all input is encoded in UTF-8 before submitting it to
286
+ Stripe's servers. (github issue #27)
287
+
288
+ ### 1.7.13 2013-02-01
289
+
290
+ * Add support for passing options when retrieving Stripe objects
291
+ e.g., Stripe_Charge::retrieve(array("id"=>"foo", "expand" => array("customer")))
292
+ Stripe_Charge::retrieve("foo") will continue to work
293
+
294
+ ### 1.7.12 2013-01-15
295
+
296
+ * Add support for setting a Stripe API version override
297
+
298
+ ### 1.7.11 2012-12-30
299
+
300
+ * Version bump to cleanup constants and such (github issue #26)
301
+
302
+ ### 1.7.10 2012-11-08
303
+
304
+ * Add support for updating charge disputes.
305
+ * Fix bug preventing retrieval of null attributes
306
+
307
+ ### 1.7.9 2012-11-08
308
+
309
+ * Fix usage under autoloaders such as the one generated by composer
310
+ (github issue #22)
311
+
312
+ ### 1.7.8 2012-10-30
313
+ * Add support for creating invoices.
314
+ * Add support for new invoice lines return format
315
+ * Add support for new list objects
316
+
317
+ ### 1.7.7 2012-09-14
318
+
319
+ * Get all of the various version numbers in the repo in sync (no other
320
+ changes)
321
+
322
+ ### 1.7.6 2012-08-31
323
+
324
+ * Add update and pay methods to Invoice resource
325
+
326
+ ### 1.7.5 2012-08-23
327
+
328
+ * Change internal function names so that Stripe_SingletonApiRequest is
329
+ E_STRICT-clean (github issue #16)
330
+
331
+ ### 1.7.4 2012-08-21
332
+
333
+ * Bugfix so that Stripe objects (e.g. Customer, Charge objects) used
334
+ in API calls are transparently converted to their object IDs
335
+
336
+ ### 1.7.3 2012-08-15
337
+
338
+ * Add new Account resource
339
+
340
+ ### 1.7.2 2012-06-26
341
+
342
+ * Make clearer that you should be including lib/Stripe.php, not
343
+ test/Stripe.php (github issue #14)
344
+
345
+ ### 1.7.1 2012-05-24
346
+
347
+ * Add missing argument to Stripe_InvalidRequestError constructor in
348
+ Stripe_ApiResource::instanceUrl. Fixes a warning when
349
+ Stripe_ApiResource::instanceUrl is called on a resource with no ID
350
+ (github issue #12)
351
+
352
+ ### 1.7.0 2012-05-17
353
+
354
+ * Support Composer and Packagist (github issue #9)
355
+
356
+ * Add new deleteDiscount method to Stripe_Customer
357
+
358
+ * Add new Transfer resource
359
+
360
+ * Switch from using HTTP Basic auth to Bearer auth. (Note: Stripe will
361
+ support Basic auth for the indefinite future, but recommends Bearer
362
+ auth when possible going forward)
363
+
364
+ * Numerous test suite improvements
lib/stripe/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
  The MIT License
2
 
3
- Copyright (c) 2010-2019 Stripe, Inc. (https://stripe.com)
4
 
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
  of this software and associated documentation files (the "Software"), to deal
1
  The MIT License
2
 
3
+ Copyright (c) 2010-2015 Stripe
4
 
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
  of this software and associated documentation files (the "Software"), to deal
lib/stripe/README.md ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Stripe PHP bindings
2
+
3
+ [![Build Status](https://travis-ci.org/stripe/stripe-php.svg?branch=master)](https://travis-ci.org/stripe/stripe-php)
4
+ [![Latest Stable Version](https://poser.pugx.org/stripe/stripe-php/v/stable.svg)](https://packagist.org/packages/stripe/stripe-php)
5
+ [![Total Downloads](https://poser.pugx.org/stripe/stripe-php/downloads.svg)](https://packagist.org/packages/stripe/stripe-php)
6
+ [![License](https://poser.pugx.org/stripe/stripe-php/license.svg)](https://packagist.org/packages/stripe/stripe-php)
7
+ [![Code Coverage](https://coveralls.io/repos/stripe/stripe-php/badge.svg?branch=master)](https://coveralls.io/r/stripe/stripe-php?branch=master)
8
+
9
+ You can sign up for a Stripe account at https://stripe.com.
10
+
11
+ ## Requirements
12
+
13
+ PHP 5.3.3 and later.
14
+
15
+ ## Composer
16
+
17
+ You can install the bindings via [Composer](http://getcomposer.org/). Run the following command:
18
+
19
+ ```bash
20
+ composer require stripe/stripe-php
21
+ ```
22
+
23
+ To use the bindings, use Composer's [autoload](https://getcomposer.org/doc/00-intro.md#autoloading):
24
+
25
+ ```php
26
+ require_once('vendor/autoload.php');
27
+ ```
28
+
29
+ ## Manual Installation
30
+
31
+ If you do not wish to use Composer, you can download the [latest release](https://github.com/stripe/stripe-php/releases). Then, to use the bindings, include the `init.php` file.
32
+
33
+ ```php
34
+ require_once('/path/to/stripe-php/init.php');
35
+ ```
36
+
37
+ ## Dependencies
38
+
39
+ The bindings require the following extension in order to work properly:
40
+
41
+ - [`curl`](https://secure.php.net/manual/en/book.curl.php), although you can use your own non-cURL client if you prefer
42
+ - [`json`](https://secure.php.net/manual/en/book.json.php)
43
+ - [`mbstring`](https://secure.php.net/manual/en/book.mbstring.php) (Multibyte String)
44
+
45
+ If you use Composer, these dependencies should be handled automatically. If you install manually, you'll want to make sure that these extensions are available.
46
+
47
+ ## Getting Started
48
+
49
+ Simple usage looks like:
50
+
51
+ ```php
52
+ \Stripe\Stripe::setApiKey('d8e8fca2dc0f896fd7cb4cb0031ba249');
53
+ $myCard = array('number' => '4242424242424242', 'exp_month' => 8, 'exp_year' => 2018);
54
+ $charge = \Stripe\Charge::create(array('card' => $myCard, 'amount' => 2000, 'currency' => 'usd'));
55
+ echo $charge;
56
+ ```
57
+
58
+ ## Documentation
59
+
60
+ Please see https://stripe.com/docs/api for up-to-date documentation.
61
+
62
+ ## Legacy Version Support
63
+
64
+ If you are using PHP 5.2, you can download v1.18.0 ([zip](https://github.com/stripe/stripe-php/archive/v1.18.0.zip), [tar.gz](https://github.com/stripe/stripe-php/archive/v1.18.0.tar.gz)) from our [releases page](https://github.com/stripe/stripe-php/releases). This version will continue to work with new versions of the Stripe API for all common uses.
65
+
66
+ This legacy version may be included via `require_once("/path/to/stripe-php/lib/Stripe.php");`, and used like:
67
+
68
+ ```php
69
+ Stripe::setApiKey('d8e8fca2dc0f896fd7cb4cb0031ba249');
70
+ $myCard = array('number' => '4242424242424242', 'exp_month' => 8, 'exp_year' => 2018);
71
+ $charge = Stripe_Charge::create(array('card' => $myCard, 'amount' => 2000, 'currency' => 'usd'));
72
+ echo $charge;
73
+ ```
74
+
75
+ ## Custom Request Timeouts
76
+
77
+ *NOTE:* We do not recommend decreasing the timeout for non-read-only calls (e.g. charge creation), since even if you locally timeout, the request on Stripe's side can still complete. If you are decreasing timeouts on these calls, make sure to use [idempotency tokens](https://stripe.com/docs/api/php#idempotent_requests) to avoid executing the same transaction twice as a result of timeout retry logic.
78
+
79
+ To modify request timeouts (connect or total, in seconds) you'll need to tell the API client to use a CurlClient other than its default. You'll set the timeouts in that CurlClient.
80
+
81
+ ```php
82
+ // set up your tweaked Curl client
83
+ $curl = new \Stripe\HttpClient\CurlClient();
84
+ $curl->setTimeout(10); // default is \Stripe\HttpClient\CurlClient::DEFAULT_TIMEOUT
85
+ $curl->setConnectTimeout(5); // default is \Stripe\HttpClient\CurlClient::DEFAULT_CONNECT_TIMEOUT
86
+
87
+ echo $curl->getTimeout(); // 10
88
+ echo $curl->getConnectTimeout(); // 5
89
+
90
+ // tell Stripe to use the tweaked client
91
+ \Stripe\ApiRequestor::setHttpClient($curl);
92
+
93
+ // use the Stripe API client as you normally would
94
+ ```
95
+
96
+ ## Custom cURL Options (e.g. proxies)
97
+
98
+ Need to set a proxy for your requests? Pass in the requisite `CURLOPT_*` array to the CurlClient constructor, using the same syntax as `curl_stopt_array()`. This will set the default cURL options for each HTTP request made by the SDK, though many more common options (e.g. timeouts; see above on how to set those) will be overridden by the client even if set here.
99
+
100
+ ```php
101
+ // set up your tweaked Curl client
102
+ $curl = new \Stripe\HttpClient\CurlClient(array(CURLOPT_PROXY => 'proxy.local:80'));
103
+ // tell Stripe to use the tweaked client
104
+ \Stripe\ApiRequestor::setHttpClient($curl);
105
+ ```
106
+
107
+ Alternately, a callable can be passed to the CurlClient constructor that returns the above array based on request inputs. See `testDefaultOptions()` in `tests/CurlClientTest.php` for an example of this behavior. Note that the callable is called at the beginning of every API request, before the request is sent.
108
+
109
+ ## Development
110
+
111
+ Install dependencies:
112
+
113
+ ``` bash
114
+ composer install
115
+ ```
116
+
117
+ ## Tests
118
+
119
+ Install dependencies as mentioned above (which will resolve [PHPUnit](http://packagist.org/packages/phpunit/phpunit)), then you can run the test suite:
120
+
121
+ ```bash
122
+ ./vendor/bin/phpunit
123
+ ```
124
+
125
+ Or to run an individual test file:
126
+
127
+ ```bash
128
+ ./vendor/bin/phpunit tests/UtilTest.php
129
+ ```
lib/stripe/VERSION ADDED
@@ -0,0 +1 @@
 
1
+ 3.20.0
lib/stripe/build.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+ chdir(dirname(__FILE__));
4
+
5
+ $autoload = (int)$argv[1];
6
+ $returnStatus = null;
7
+
8
+ if (!$autoload) {
9
+ // Modify composer to not autoload Stripe
10
+ $composer = json_decode(file_get_contents('composer.json'), true);
11
+ unset($composer['autoload']);
12
+ unset($composer['require-dev']['squizlabs/php_codesniffer']);
13
+ file_put_contents('composer.json', json_encode($composer));
14
+ }
15
+
16
+ passthru('composer install', $returnStatus);
17
+ if ($returnStatus !== 0) {
18
+ exit(1);
19
+ }
20
+
21
+ if ($autoload) {
22
+ // Only run CS on 1 of the 2 environments
23
+ passthru(
24
+ './vendor/bin/phpcs --standard=PSR2 -n lib tests *.php',
25
+ $returnStatus
26
+ );
27
+ if ($returnStatus !== 0) {
28
+ exit(1);
29
+ }
30
+ }
31
+
32
+ $config = $autoload ? 'phpunit.xml' : 'phpunit.no_autoload.xml';
33
+ passthru("./vendor/bin/phpunit -c $config", $returnStatus);
34
+ if ($returnStatus !== 0) {
35
+ exit(1);
36
+ }
lib/stripe/composer.json ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "stripe/stripe-php",
3
+ "description": "Stripe PHP Library",
4
+ "keywords": [
5
+ "stripe",
6
+ "payment processing",
7
+ "api"
8
+ ],
9
+ "homepage": "https://stripe.com/",
10
+ "license": "MIT",
11
+ "authors": [
12
+ {
13
+ "name": "Stripe and contributors",
14
+ "homepage": "https://github.com/stripe/stripe-php/contributors"
15
+ }
16
+ ],
17
+ "require": {
18
+ "php": ">=5.3.3",
19
+ "ext-curl": "*",
20
+ "ext-json": "*",
21
+ "ext-mbstring": "*"
22
+ },
23
+ "require-dev": {
24
+ "phpunit/phpunit": "~4.0",
25
+ "satooshi/php-coveralls": "~0.6.1",
26
+ "squizlabs/php_codesniffer": "~2.0"
27
+ },
28
+ "autoload": {
29
+ "psr-4": { "Stripe\\" : "lib/" }
30
+ },
31
+ "extra": {
32
+ "branch-alias": {
33
+ "dev-master": "2.0-dev"
34
+ }
35
+ }
36
+ }
lib/stripe/data/ca-certificates.crt CHANGED
@@ -1,20 +1,20 @@
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
- ## Certificate data from Mozilla as of: Wed Aug 28 03:12:10 2019 GMT
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
- ## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
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
- ## Conversion done with mk-ca-bundle.pl version 1.27.
17
- ## SHA256: fffa309937c3be940649293f749b8207fabc6eb224e50e4bb3f2c5e44e0d6a6b
18
  ##
19
 
20
 
@@ -130,6 +130,30 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
130
  RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
131
  -----END CERTIFICATE-----
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  AddTrust External Root
134
  ======================
135
  -----BEGIN CERTIFICATE-----
@@ -154,6 +178,54 @@ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
154
  G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
155
  -----END CERTIFICATE-----
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  Entrust Root Certification Authority
158
  ====================================
159
  -----BEGIN CERTIFICATE-----
@@ -180,6 +252,27 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
180
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
181
  -----END CERTIFICATE-----
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  GeoTrust Global CA
184
  ==================
185
  -----BEGIN CERTIFICATE-----
@@ -201,6 +294,27 @@ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
201
  Mw==
202
  -----END CERTIFICATE-----
203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  GeoTrust Universal CA
205
  =====================
206
  -----BEGIN CERTIFICATE-----
@@ -261,6 +375,47 @@ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
261
  X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
262
  -----END CERTIFICATE-----
263
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  Comodo AAA Services root
265
  ========================
266
  -----BEGIN CERTIFICATE-----
@@ -285,6 +440,56 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
285
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
286
  -----END CERTIFICATE-----
287
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288
  QuoVadis Root CA
289
  ================
290
  -----BEGIN CERTIFICATE-----
@@ -424,6 +629,143 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
424
  llpwrN9M
425
  -----END CERTIFICATE-----
426
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  XRamp Global CA Root
428
  ====================
429
  -----BEGIN CERTIFICATE-----
@@ -496,6 +838,47 @@ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
496
  QBFGmh95DmK/D5fs4C8fF5Q=
497
  -----END CERTIFICATE-----
498
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  Taiwan GRCA
500
  ===========
501
  -----BEGIN CERTIFICATE-----
@@ -526,6 +909,38 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
526
  +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
527
  -----END CERTIFICATE-----
528
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
529
  DigiCert Assured ID Root CA
530
  ===========================
531
  -----BEGIN CERTIFICATE-----
@@ -634,6 +1049,30 @@ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
634
  fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
635
  -----END CERTIFICATE-----
636
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
637
  SwissSign Gold CA - G2
638
  ======================
639
  -----BEGIN CERTIFICATE-----
@@ -859,6 +1298,33 @@ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
859
  ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
860
  -----END CERTIFICATE-----
861
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
862
  COMODO ECC Certification Authority
863
  ==================================
864
  -----BEGIN CERTIFICATE-----
@@ -876,6 +1342,51 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
876
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
877
  -----END CERTIFICATE-----
878
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
879
  OISTE WISeKey Global Root GA CA
880
  ===============================
881
  -----BEGIN CERTIFICATE-----
@@ -899,6 +1410,46 @@ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
899
  okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
900
  -----END CERTIFICATE-----
901
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
902
  Certigna
903
  ========
904
  -----BEGIN CERTIFICATE-----
@@ -996,6 +1547,86 @@ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
996
  BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
997
  -----END CERTIFICATE-----
998
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
999
  certSIGN ROOT CA
1000
  ================
1001
  -----BEGIN CERTIFICATE-----
@@ -1016,6 +1647,49 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
1016
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
1017
  -----END CERTIFICATE-----
1018
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1019
  GeoTrust Primary Certification Authority - G3
1020
  =============================================
1021
  -----BEGIN CERTIFICATE-----
@@ -1147,7 +1821,7 @@ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1147
  -----END CERTIFICATE-----
1148
 
1149
  NetLock Arany (Class Gold) Főtanúsítvány
1150
- ========================================
1151
  -----BEGIN CERTIFICATE-----
1152
  MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1153
  A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
@@ -1202,6 +1876,58 @@ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
1202
  66+KAQ==
1203
  -----END CERTIFICATE-----
1204
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1205
  Hongkong Post Root CA 1
1206
  =======================
1207
  -----BEGIN CERTIFICATE-----
@@ -1243,6 +1969,37 @@ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
1243
  lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
1244
  -----END CERTIFICATE-----
1245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1246
  Microsec e-Szigno Root CA 2009
1247
  ==============================
1248
  -----BEGIN CERTIFICATE-----
@@ -1603,6 +2360,72 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
1603
  03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
1604
  -----END CERTIFICATE-----
1605
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1606
  TWCA Root Certification Authority
1607
  =================================
1608
  -----BEGIN CERTIFICATE-----
@@ -1751,6 +2574,75 @@ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
1751
  iB6XzCGcKQENZetX2fNXlrtIzYE=
1752
  -----END CERTIFICATE-----
1753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1754
  Buypass Class 2 Root CA
1755
  =======================
1756
  -----BEGIN CERTIFICATE-----
@@ -1857,6 +2749,31 @@ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
1857
  dcGWxZ0=
1858
  -----END CERTIFICATE-----
1859
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1860
  D-TRUST Root Class 3 CA 2 2009
1861
  ==============================
1862
  -----BEGIN CERTIFICATE-----
@@ -1906,6 +2823,171 @@ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
1906
  w9y4AyHqnxbxLFS1
1907
  -----END CERTIFICATE-----
1908
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1909
  CA Disig Root R2
1910
  ================
1911
  -----BEGIN CERTIFICATE-----
@@ -2309,6 +3391,66 @@ G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
2309
  82Z+
2310
  -----END CERTIFICATE-----
2311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2312
  COMODO RSA Certification Authority
2313
  ==================================
2314
  -----BEGIN CERTIFICATE-----
@@ -2613,6 +3755,85 @@ kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C
2613
  ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
2614
  -----END CERTIFICATE-----
2615
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2616
  OISTE WISeKey Global Root GB CA
2617
  ===============================
2618
  -----BEGIN CERTIFICATE-----
@@ -2635,842 +3856,64 @@ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
2635
  Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
2636
  -----END CERTIFICATE-----
2637
 
2638
- SZAFIR ROOT CA2
2639
- ===============
2640
- -----BEGIN CERTIFICATE-----
2641
- MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
2642
- A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
2643
- BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
2644
- BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
2645
- VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
2646
- qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
2647
- DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
2648
- 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
2649
- ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
2650
- ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
2651
- AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
2652
- AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
2653
- O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
2654
- oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
2655
- 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
2656
- +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
2657
- -----END CERTIFICATE-----
2658
-
2659
- Certum Trusted Network CA 2
2660
- ===========================
2661
- -----BEGIN CERTIFICATE-----
2662
- MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
2663
- BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
2664
- bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
2665
- ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
2666
- TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
2667
- cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
2668
- IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
2669
- 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
2670
- CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
2671
- Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
2672
- uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
2673
- GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
2674
- 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
2675
- Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
2676
- hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
2677
- BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2678
- AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
2679
- hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
2680
- Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
2681
- L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
2682
- clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
2683
- pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
2684
- w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
2685
- J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
2686
- ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
2687
- is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
2688
- zAYspsbiDrW5viSP
2689
- -----END CERTIFICATE-----
2690
-
2691
- Hellenic Academic and Research Institutions RootCA 2015
2692
- =======================================================
2693
- -----BEGIN CERTIFICATE-----
2694
- MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
2695
- BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
2696
- aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
2697
- YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
2698
- MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
2699
- QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
2700
- BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
2701
- MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
2702
- bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
2703
- iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
2704
- 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
2705
- FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
2706
- i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
2707
- GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
2708
- fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
2709
- iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
2710
- Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
2711
- AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
2712
- hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
2713
- D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
2714
- d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
2715
- d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
2716
- 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
2717
- davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
2718
- Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
2719
- J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
2720
- JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
2721
- p/UsQu0yrbYhnr68
2722
- -----END CERTIFICATE-----
2723
-
2724
- Hellenic Academic and Research Institutions ECC RootCA 2015
2725
- ===========================================================
2726
- -----BEGIN CERTIFICATE-----
2727
- MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
2728
- aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
2729
- cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
2730
- aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
2731
- MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
2732
- IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
2733
- VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
2734
- Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
2735
- dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
2736
- Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
2737
- BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
2738
- GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
2739
- dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
2740
- -----END CERTIFICATE-----
2741
-
2742
- ISRG Root X1
2743
- ============
2744
- -----BEGIN CERTIFICATE-----
2745
- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
2746
- BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
2747
- EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
2748
- EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
2749
- DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
2750
- Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
2751
- 3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
2752
- b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
2753
- Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
2754
- 4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
2755
- 1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
2756
- hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
2757
- usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
2758
- OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
2759
- A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
2760
- 9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
2761
- ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
2762
- 0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
2763
- hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
2764
- TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
2765
- e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
2766
- JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
2767
- YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
2768
- JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
2769
- m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
2770
- -----END CERTIFICATE-----
2771
-
2772
- AC RAIZ FNMT-RCM
2773
- ================
2774
- -----BEGIN CERTIFICATE-----
2775
- MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT
2776
- AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw
2777
- MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD
2778
- TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
2779
- ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf
2780
- qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr
2781
- btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL
2782
- j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou
2783
- 08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw
2784
- WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT
2785
- tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ
2786
- 47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC
2787
- ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa
2788
- i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
2789
- FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o
2790
- dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD
2791
- nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s
2792
- D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ
2793
- j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT
2794
- Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW
2795
- +YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7
2796
- Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d
2797
- 8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm
2798
- 5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG
2799
- rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=
2800
- -----END CERTIFICATE-----
2801
-
2802
- Amazon Root CA 1
2803
- ================
2804
- -----BEGIN CERTIFICATE-----
2805
- MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
2806
- VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
2807
- MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
2808
- bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2809
- ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
2810
- FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
2811
- gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
2812
- dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
2813
- VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
2814
- /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
2815
- DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
2816
- CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
2817
- 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
2818
- 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
2819
- xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
2820
- -----END CERTIFICATE-----
2821
-
2822
- Amazon Root CA 2
2823
- ================
2824
- -----BEGIN CERTIFICATE-----
2825
- MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
2826
- VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
2827
- MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
2828
- bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
2829
- ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
2830
- kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
2831
- N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
2832
- AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
2833
- fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
2834
- kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
2835
- btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
2836
- Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
2837
- c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
2838
- 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
2839
- DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
2840
- A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
2841
- +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
2842
- YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
2843
- xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
2844
- gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
2845
- aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
2846
- Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
2847
- KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
2848
- JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
2849
- -----END CERTIFICATE-----
2850
-
2851
- Amazon Root CA 3
2852
- ================
2853
- -----BEGIN CERTIFICATE-----
2854
- MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
2855
- EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
2856
- NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
2857
- MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
2858
- f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
2859
- Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
2860
- rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
2861
- eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
2862
- -----END CERTIFICATE-----
2863
-
2864
- Amazon Root CA 4
2865
- ================
2866
- -----BEGIN CERTIFICATE-----
2867
- MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
2868
- EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
2869
- NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
2870
- MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
2871
- /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
2872
- 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
2873
- HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
2874
- MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
2875
- AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
2876
- -----END CERTIFICATE-----
2877
-
2878
- LuxTrust Global Root 2
2879
- ======================
2880
- -----BEGIN CERTIFICATE-----
2881
- MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG
2882
- A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh
2883
- bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW
2884
- MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC
2885
- AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm
2886
- Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2
2887
- xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC
2888
- wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm
2889
- 1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm
2890
- FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF
2891
- wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/
2892
- a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U
2893
- ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ
2894
- MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB
2895
- /zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5
2896
- Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT
2897
- +Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ
2898
- FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN
2899
- H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW
2900
- 7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu
2901
- ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA
2902
- VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR
2903
- TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt
2904
- /f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc
2905
- 7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I
2906
- iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
2907
- -----END CERTIFICATE-----
2908
-
2909
- TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
2910
- =============================================
2911
- -----BEGIN CERTIFICATE-----
2912
- MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
2913
- D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
2914
- IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
2915
- TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
2916
- ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
2917
- VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
2918
- c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
2919
- bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
2920
- IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2921
- MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
2922
- 6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
2923
- wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
2924
- 3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
2925
- WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
2926
- ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
2927
- KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
2928
- AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
2929
- lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
2930
- e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
2931
- q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
2932
- -----END CERTIFICATE-----
2933
-
2934
- GDCA TrustAUTH R5 ROOT
2935
- ======================
2936
- -----BEGIN CERTIFICATE-----
2937
- MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw
2938
- BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD
2939
- DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow
2940
- YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ
2941
- IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B
2942
- AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs
2943
- AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p
2944
- OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr
2945
- pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ
2946
- 9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ
2947
- xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM
2948
- R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ
2949
- D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4
2950
- oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx
2951
- 9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR
2952
- MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg
2953
- p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9
2954
- H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35
2955
- 6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd
2956
- +PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ
2957
- HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD
2958
- F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ
2959
- 8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv
2960
- /EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT
2961
- aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g==
2962
- -----END CERTIFICATE-----
2963
-
2964
- TrustCor RootCert CA-1
2965
- ======================
2966
- -----BEGIN CERTIFICATE-----
2967
- MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP
2968
- MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
2969
- U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
2970
- dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx
2971
- MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu
2972
- YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe
2973
- VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy
2974
- dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq
2975
- jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4
2976
- pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0
2977
- JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h
2978
- gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw
2979
- /Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j
2980
- BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2981
- AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5
2982
- mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
2983
- ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C
2984
- qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P
2985
- 3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk=
2986
- -----END CERTIFICATE-----
2987
-
2988
- TrustCor RootCert CA-2
2989
- ======================
2990
- -----BEGIN CERTIFICATE-----
2991
- MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w
2992
- DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT
2993
- eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0
2994
- eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy
2995
- MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h
2996
- bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
2997
- cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0
2998
- IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb
2999
- ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk
3000
- RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1
3001
- oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb
3002
- XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1
3003
- /p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q
3004
- jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP
3005
- eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg
3006
- rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
3007
- 8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU
3008
- 2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD
3009
- VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h
3010
- Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp
3011
- kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv
3012
- 2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3
3013
- S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw
3014
- PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv
3015
- DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU
3016
- RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE
3017
- xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX
3018
- RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ
3019
- -----END CERTIFICATE-----
3020
-
3021
- TrustCor ECA-1
3022
- ==============
3023
- -----BEGIN CERTIFICATE-----
3024
- MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP
3025
- MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
3026
- U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
3027
- dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw
3028
- N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5
3029
- MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y
3030
- IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG
3031
- SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR
3032
- MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23
3033
- xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc
3034
- p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+
3035
- fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj
3036
- YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL
3037
- f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
3038
- AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u
3039
- /ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
3040
- hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs
3041
- J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC
3042
- jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g==
3043
- -----END CERTIFICATE-----
3044
-
3045
- SSL.com Root Certification Authority RSA
3046
- ========================================
3047
- -----BEGIN CERTIFICATE-----
3048
- MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM
3049
- BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x
3050
- MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw
3051
- MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
3052
- EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM
3053
- LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD
3054
- ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C
3055
- Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8
3056
- P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge
3057
- oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp
3058
- k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z
3059
- fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ
3060
- gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2
3061
- UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8
3062
- 1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s
3063
- bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV
3064
- HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE
3065
- AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr
3066
- dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf
3067
- ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl
3068
- u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq
3069
- erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj
3070
- MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ
3071
- vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI
3072
- Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y
3073
- wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI
3074
- WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k=
3075
- -----END CERTIFICATE-----
3076
-
3077
- SSL.com Root Certification Authority ECC
3078
- ========================================
3079
- -----BEGIN CERTIFICATE-----
3080
- MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV
3081
- BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv
3082
- BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy
3083
- MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
3084
- BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv
3085
- bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
3086
- BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+
3087
- 8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR
3088
- hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT
3089
- jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW
3090
- e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z
3091
- 5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl
3092
- -----END CERTIFICATE-----
3093
-
3094
- SSL.com EV Root Certification Authority RSA R2
3095
- ==============================================
3096
- -----BEGIN CERTIFICATE-----
3097
- MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w
3098
- DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u
3099
- MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy
3100
- MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
3101
- DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD
3102
- VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN
3103
- BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh
3104
- hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w
3105
- cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO
3106
- Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+
3107
- B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh
3108
- CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim
3109
- 9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto
3110
- RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm
3111
- JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48
3112
- +qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV
3113
- HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp
3114
- qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1
3115
- ++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx
3116
- Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G
3117
- guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz
3118
- OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7
3119
- CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq
3120
- lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR
3121
- rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1
3122
- hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX
3123
- 9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w==
3124
- -----END CERTIFICATE-----
3125
-
3126
- SSL.com EV Root Certification Authority ECC
3127
- ===========================================
3128
- -----BEGIN CERTIFICATE-----
3129
- MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV
3130
- BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy
3131
- BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw
3132
- MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
3133
- EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM
3134
- LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB
3135
- BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy
3136
- 3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O
3137
- BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe
3138
- 5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ
3139
- N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm
3140
- m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==
3141
- -----END CERTIFICATE-----
3142
-
3143
- GlobalSign Root CA - R6
3144
- =======================
3145
- -----BEGIN CERTIFICATE-----
3146
- MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX
3147
- R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds
3148
- b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i
3149
- YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs
3150
- U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss
3151
- grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE
3152
- 3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF
3153
- vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM
3154
- PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+
3155
- azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O
3156
- WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy
3157
- CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP
3158
- 0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN
3159
- b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE
3160
- AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV
3161
- HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN
3162
- nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0
3163
- lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY
3164
- BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym
3165
- Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr
3166
- 3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1
3167
- 0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T
3168
- uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK
3169
- oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t
3170
- JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA=
3171
- -----END CERTIFICATE-----
3172
-
3173
- OISTE WISeKey Global Root GC CA
3174
- ===============================
3175
- -----BEGIN CERTIFICATE-----
3176
- MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD
3177
- SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo
3178
- MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa
3179
- Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL
3180
- ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh
3181
- bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr
3182
- VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab
3183
- NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
3184
- BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E
3185
- AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk
3186
- AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9
3187
- -----END CERTIFICATE-----
3188
-
3189
- GTS Root R1
3190
- ===========
3191
- -----BEGIN CERTIFICATE-----
3192
- MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG
3193
- EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv
3194
- b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG
3195
- A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi
3196
- MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx
3197
- 9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r
3198
- aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW
3199
- r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM
3200
- LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly
3201
- 4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr
3202
- 06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92
3203
- wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om
3204
- 3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu
3205
- JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
3206
- VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM
3207
- BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1
3208
- d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv
3209
- fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm
3210
- ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b
3211
- gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq
3212
- 4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr
3213
- tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo
3214
- pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0
3215
- sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql
3216
- CFF1pkgl
3217
- -----END CERTIFICATE-----
3218
-
3219
- GTS Root R2
3220
- ===========
3221
- -----BEGIN CERTIFICATE-----
3222
- MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG
3223
- EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv
3224
- b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG
3225
- A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi
3226
- MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk
3227
- k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo
3228
- 7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI
3229
- m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm
3230
- dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu
3231
- ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz
3232
- cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW
3233
- Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl
3234
- aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy
3235
- 5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
3236
- VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM
3237
- BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT
3238
- vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ
3239
- +YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw
3240
- c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da
3241
- WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r
3242
- n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu
3243
- Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ
3244
- 7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs
3245
- gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld
3246
- o/DUhgkC
3247
- -----END CERTIFICATE-----
3248
-
3249
- GTS Root R3
3250
- ===========
3251
- -----BEGIN CERTIFICATE-----
3252
- MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
3253
- UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
3254
- UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
3255
- ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq
3256
- hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU
3257
- Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej
3258
- QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP
3259
- 0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0
3260
- glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa
3261
- KaqW04MjyaR7YbPMAuhd
3262
- -----END CERTIFICATE-----
3263
-
3264
- GTS Root R4
3265
- ===========
3266
  -----BEGIN CERTIFICATE-----
3267
- MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV
3268
- UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
3269
- UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
3270
- ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq
3271
- hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa
3272
- 6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj
3273
- QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV
3274
- 2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI
3275
- N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x
3276
- zPKwTdb+mciUqXWi4w==
3277
- -----END CERTIFICATE-----
3278
-
3279
- UCA Global G2 Root
 
 
 
 
 
 
3280
  ==================
3281
  -----BEGIN CERTIFICATE-----
3282
- MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG
3283
- EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x
3284
- NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU
3285
- cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
3286
- MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT
3287
- oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV
3288
- 8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS
3289
- h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o
3290
- LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/
3291
- R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe
3292
- KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa
3293
- 4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc
3294
- OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97
3295
- 8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
3296
- BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo
3297
- 5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5
3298
- 1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A
3299
- Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9
3300
- yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX
3301
- c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo
3302
- jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk
3303
- bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x
3304
- ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn
3305
- RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A==
3306
- -----END CERTIFICATE-----
3307
-
3308
- UCA Extended Validation Root
3309
- ============================
3310
- -----BEGIN CERTIFICATE-----
3311
- MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG
3312
- EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u
3313
- IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G
3314
- A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi
3315
- MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs
3316
- iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF
3317
- Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu
3318
- eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR
3319
- 59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH
3320
- 0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR
3321
- el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv
3322
- B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth
3323
- WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS
3324
- NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS
3325
- 3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL
3326
- BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR
3327
- ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM
3328
- aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4
3329
- dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb
3330
- +7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW
3331
- F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi
3332
- GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc
3333
- GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi
3334
- djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr
3335
- dhh2n1ax
3336
- -----END CERTIFICATE-----
3337
-
3338
- Certigna Root CA
3339
- ================
3340
- -----BEGIN CERTIFICATE-----
3341
- MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE
3342
- BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ
3343
- MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda
3344
- MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz
3345
- MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC
3346
- DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX
3347
- stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz
3348
- KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8
3349
- JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16
3350
- XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq
3351
- 4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej
3352
- wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ
3353
- lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI
3354
- jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/
3355
- /TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
3356
- HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of
3357
- 1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy
3358
- dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h
3359
- LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl
3360
- cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt
3361
- OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP
3362
- TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq
3363
- 7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3
3364
- 4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd
3365
- 8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS
3366
- 6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY
3367
- tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS
3368
- aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde
3369
- E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0=
3370
- -----END CERTIFICATE-----
3371
-
3372
- emSign Root CA - G1
3373
- ===================
3374
- -----BEGIN CERTIFICATE-----
3375
- MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET
3376
- MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl
3377
- ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx
3378
- ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk
3379
- aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB
3380
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN
3381
- LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1
3382
- cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW
3383
- DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ
3384
- 6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH
3385
- hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG
3386
- MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2
3387
- vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q
3388
- NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q
3389
- +Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih
3390
- U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx
3391
- iN66zB+Afko=
3392
- -----END CERTIFICATE-----
3393
-
3394
- emSign ECC Root CA - G3
3395
- =======================
3396
- -----BEGIN CERTIFICATE-----
3397
- MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG
3398
- A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg
3399
- MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4
3400
- MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11
3401
- ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g
3402
- RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc
3403
- 58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr
3404
- MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC
3405
- AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D
3406
- CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7
3407
- jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj
3408
- -----END CERTIFICATE-----
3409
-
3410
- emSign Root CA - C1
3411
- ===================
3412
- -----BEGIN CERTIFICATE-----
3413
- MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx
3414
- EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp
3415
- Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE
3416
- BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD
3417
- ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up
3418
- ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/
3419
- Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX
3420
- OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V
3421
- I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms
3422
- lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+
3423
- XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD
3424
- ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp
3425
- /6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1
3426
- NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9
3427
- wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ
3428
- BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
3429
- -----END CERTIFICATE-----
3430
-
3431
- emSign ECC Root CA - C3
3432
- =======================
3433
- -----BEGIN CERTIFICATE-----
3434
- MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG
3435
- A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF
3436
- Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE
3437
- BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD
3438
- ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd
3439
- 6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9
3440
- SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA
3441
- B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA
3442
- MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU
3443
- ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
3444
- -----END CERTIFICATE-----
3445
-
3446
- Hongkong Post Root CA 3
3447
- =======================
3448
- -----BEGIN CERTIFICATE-----
3449
- MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG
3450
- A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK
3451
- Ew1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2
3452
- MDMwMjI5NDZaFw00MjA2MDMwMjI5NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtv
3453
- bmcxEjAQBgNVBAcTCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMX
3454
- SG9uZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz
3455
- iNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFOdem1p+/l6TWZ5Mwc50tf
3456
- jTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mIVoBc+L0sPOFMV4i707mV78vH9toxdCim
3457
- 5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOe
3458
- sL4jpNrcyCse2m5FHomY2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj
3459
- 0mRiikKYvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+TtbNe/
3460
- JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZbx39ri1UbSsUgYT2u
3461
- y1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+l2oBlKN8W4UdKjk60FSh0Tlxnf0h
3462
- +bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YKTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsG
3463
- xVd7GYYKecsAyVKvQv83j+GjHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwID
3464
- AQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e
3465
- i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEwDQYJKoZIhvcN
3466
- AQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG7BJ8dNVI0lkUmcDrudHr9Egw
3467
- W62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCkMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWld
3468
- y8joRTnU+kLBEUx3XZL7av9YROXrgZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov
3469
- +BS5gLNdTaqX4fnkGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDc
3470
- eqFS3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJmOzj/2ZQw
3471
- 9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+l6mc1X5VTMbeRRAc6uk7
3472
- nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6cJfTzPV4e0hz5sy229zdcxsshTrD3mUcY
3473
- hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
3474
- 60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq
3475
- dBb9HxEGmpv0
3476
  -----END CERTIFICATE-----
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
+ ## Certificate data from Mozilla as of: Fri Jan 22 20:39:57 2016
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://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
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
+ ## Conversion done with mk-ca-bundle.pl version 1.25.
17
+ ## SHA1: 0ab47e2f41518f8d223eab517cb799e5b071231e
18
  ##
19
 
20
 
130
  RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
131
  -----END CERTIFICATE-----
132
 
133
+ AddTrust Low-Value Services Root
134
+ ================================
135
+ -----BEGIN CERTIFICATE-----
136
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
137
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
138
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
139
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
140
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
141
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
142
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
143
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
144
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
145
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
146
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
147
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
148
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
149
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
150
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
151
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
152
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
153
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
154
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
155
+ -----END CERTIFICATE-----
156
+
157
  AddTrust External Root
158
  ======================
159
  -----BEGIN CERTIFICATE-----
178
  G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
179
  -----END CERTIFICATE-----
180
 
181
+ AddTrust Public Services Root
182
+ =============================
183
+ -----BEGIN CERTIFICATE-----
184
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
185
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
186
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
187
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
188
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
189
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
190
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
191
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
192
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
193
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
194
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
195
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
196
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
197
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
198
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
199
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
200
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
201
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
202
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
203
+ -----END CERTIFICATE-----
204
+
205
+ AddTrust Qualified Certificates Root
206
+ ====================================
207
+ -----BEGIN CERTIFICATE-----
208
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
209
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
210
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
211
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
212
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
213
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
214
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
215
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
216
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
217
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
218
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
219
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
220
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
221
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
222
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
223
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
224
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
225
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
226
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
227
+ -----END CERTIFICATE-----
228
+
229
  Entrust Root Certification Authority
230
  ====================================
231
  -----BEGIN CERTIFICATE-----
252
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
253
  -----END CERTIFICATE-----
254
 
255
+ RSA Security 2048 v3
256
+ ====================
257
+ -----BEGIN CERTIFICATE-----
258
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
259
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
260
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
261
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
262
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
263
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
264
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
265
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
266
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
267
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
268
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
269
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
270
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
271
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
272
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
273
+ pKnXwiJPZ9d37CAFYd4=
274
+ -----END CERTIFICATE-----
275
+
276
  GeoTrust Global CA
277
  ==================
278
  -----BEGIN CERTIFICATE-----
294
  Mw==
295
  -----END CERTIFICATE-----
296
 
297
+ GeoTrust Global CA 2
298
+ ====================
299
+ -----BEGIN CERTIFICATE-----
300
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
301
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
302
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
303
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
304
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
305
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
306
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
307
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
308
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
309
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
310
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
311
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
312
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
313
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
314
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
315
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
316
+ -----END CERTIFICATE-----
317
+
318
  GeoTrust Universal CA
319
  =====================
320
  -----BEGIN CERTIFICATE-----
375
  X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
376
  -----END CERTIFICATE-----
377
 
378
+ Visa eCommerce Root
379
+ ===================
380
+ -----BEGIN CERTIFICATE-----
381
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
382
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
383
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
384
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
385
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
386
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
387
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
388
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
389
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
390
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
391
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
392
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
393
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
394
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
395
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
396
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
397
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
398
+ -----END CERTIFICATE-----
399
+
400
+ Certum Root CA
401
+ ==============
402
+ -----BEGIN CERTIFICATE-----
403
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
404
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
405
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
406
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
407
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
408
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
409
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
410
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
411
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
412
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
413
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
414
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
415
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
416
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
417
+ -----END CERTIFICATE-----
418
+
419
  Comodo AAA Services root
420
  ========================
421
  -----BEGIN CERTIFICATE-----
440
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
441
  -----END CERTIFICATE-----
442
 
443
+ Comodo Secure Services root
444
+ ===========================
445
+ -----BEGIN CERTIFICATE-----
446
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
447
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
448
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
449
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
450
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
451
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
452
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
453
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
454
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
455
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
456
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
457
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
458
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
459
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
460
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
461
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
462
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
463
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
464
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
465
+ RR3B7Hzs/Sk=
466
+ -----END CERTIFICATE-----
467
+
468
+ Comodo Trusted Services root
469
+ ============================
470
+ -----BEGIN CERTIFICATE-----
471
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
472
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
473
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
474
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
475
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
476
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
477
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
478
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
479
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
480
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
481
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
482
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
483
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
484
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
485
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
486
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
487
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
488
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
489
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
490
+ 9y5Xt5hwXsjEeLBi
491
+ -----END CERTIFICATE-----
492
+
493
  QuoVadis Root CA
494
  ================
495
  -----BEGIN CERTIFICATE-----
629
  llpwrN9M
630
  -----END CERTIFICATE-----
631
 
632
+ Staat der Nederlanden Root CA
633
+ =============================
634
+ -----BEGIN CERTIFICATE-----
635
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
636
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
637
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
638
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
639
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
640
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
641
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
642
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
643
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
644
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
645
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
646
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
647
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
648
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
649
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
650
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
651
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
652
+ -----END CERTIFICATE-----
653
+
654
+ UTN USERFirst Hardware Root CA
655
+ ==============================
656
+ -----BEGIN CERTIFICATE-----
657
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
658
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
659
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
660
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
661
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
662
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
663
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
664
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
665
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
666
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
667
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
668
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
669
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
670
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
671
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
672
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
673
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
674
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
675
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
676
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
677
+ nfhmqA==
678
+ -----END CERTIFICATE-----
679
+
680
+ Camerfirma Chambers of Commerce Root
681
+ ====================================
682
+ -----BEGIN CERTIFICATE-----
683
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
684
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
685
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
686
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
687
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
688
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
689
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
690
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
691
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
692
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
693
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
694
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
695
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
696
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
697
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
698
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
699
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
700
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
701
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
702
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
703
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
704
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
705
+ -----END CERTIFICATE-----
706
+
707
+ Camerfirma Global Chambersign Root
708
+ ==================================
709
+ -----BEGIN CERTIFICATE-----
710
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
711
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
712
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
713
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
714
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
715
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
716
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
717
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
718
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
719
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
720
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
721
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
722
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
723
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
724
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
725
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
726
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
727
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
728
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
729
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
730
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
731
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
732
+ -----END CERTIFICATE-----
733
+
734
+ NetLock Notary (Class A) Root
735
+ =============================
736
+ -----BEGIN CERTIFICATE-----
737
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
738
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
739
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
740
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
741
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
742
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
743
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
744
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
745
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
746
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
747
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
748
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
749
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
750
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
751
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
752
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
753
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
754
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
755
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
756
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
757
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
758
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
759
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
760
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
761
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
762
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
763
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
764
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
765
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
766
+ 8CgHrTwXZoi1/baI
767
+ -----END CERTIFICATE-----
768
+
769
  XRamp Global CA Root
770
  ====================
771
  -----BEGIN CERTIFICATE-----
838
  QBFGmh95DmK/D5fs4C8fF5Q=
839
  -----END CERTIFICATE-----
840
 
841
+ StartCom Certification Authority
842
+ ================================
843
+ -----BEGIN CERTIFICATE-----
844
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
845
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
846
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
847
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
848
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
849
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
850
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
851
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
852
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
853
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
854
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
855
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
856
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
857
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
858
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
859
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
860
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
861
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
862
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
863
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
864
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
865
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
866
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
867
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
868
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
869
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
870
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
871
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
872
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
873
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
874
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
875
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
876
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
877
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
878
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
879
+ g14=
880
+ -----END CERTIFICATE-----
881
+
882
  Taiwan GRCA
883
  ===========
884
  -----BEGIN CERTIFICATE-----
909
  +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
910
  -----END CERTIFICATE-----
911
 
912
+ Swisscom Root CA 1
913
+ ==================
914
+ -----BEGIN CERTIFICATE-----
915
+ MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
916
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
917
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
918
+ MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
919
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
920
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
921
+ MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
922
+ NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
923
+ AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
924
+ b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
925
+ 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
926
+ cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
927
+ WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
928
+ haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
929
+ MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
930
+ HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
931
+ BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
932
+ MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
933
+ jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
934
+ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
935
+ VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
936
+ vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
937
+ OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
938
+ 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
939
+ nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
940
+ x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
941
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
942
+ -----END CERTIFICATE-----
943
+
944
  DigiCert Assured ID Root CA
945
  ===========================
946
  -----BEGIN CERTIFICATE-----
1049
  fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1050
  -----END CERTIFICATE-----
1051
 
1052
+ DST ACES CA X6
1053
+ ==============
1054
+ -----BEGIN CERTIFICATE-----
1055
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1056
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1057
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1058
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1059
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1060
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1061
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1062
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1063
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1064
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1065
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1066
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1067
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1068
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1069
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1070
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1071
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1072
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1073
+ oKfN5XozNmr6mis=
1074
+ -----END CERTIFICATE-----
1075
+
1076
  SwissSign Gold CA - G2
1077
  ======================
1078
  -----BEGIN CERTIFICATE-----
1298
  ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1299
  -----END CERTIFICATE-----
1300
 
1301
+ WellsSecure Public Root Certificate Authority
1302
+ =============================================
1303
+ -----BEGIN CERTIFICATE-----
1304
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
1305
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
1306
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1307
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
1308
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
1309
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1310
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
1311
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
1312
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
1313
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
1314
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
1315
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
1316
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
1317
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
1318
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
1319
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
1320
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
1321
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
1322
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
1323
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
1324
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
1325
+ tylv2G0xffX8oRAHh84vWdw+WNs=
1326
+ -----END CERTIFICATE-----
1327
+
1328
  COMODO ECC Certification Authority
1329
  ==================================
1330
  -----BEGIN CERTIFICATE-----
1342
  U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1343
  -----END CERTIFICATE-----
1344
 
1345
+ IGC/A
1346
+ =====
1347
+ -----BEGIN CERTIFICATE-----
1348
+ MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
1349
+ VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
1350
+ Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
1351
+ MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
1352
+ EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
1353
+ STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
1354
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
1355
+ TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
1356
+ So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
1357
+ HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
1358
+ frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
1359
+ tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
1360
+ egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
1361
+ iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
1362
+ q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
1363
+ MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
1364
+ Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
1365
+ lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
1366
+ 0mBWWg==
1367
+ -----END CERTIFICATE-----
1368
+
1369
+ Security Communication EV RootCA1
1370
+ =================================
1371
+ -----BEGIN CERTIFICATE-----
1372
+ MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1373
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
1374
+ dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
1375
+ BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
1376
+ Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1377
+ AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
1378
+ /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
1379
+ WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
1380
+ ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
1381
+ bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
1382
+ 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
1383
+ SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
1384
+ iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
1385
+ Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
1386
+ mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
1387
+ T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
1388
+ -----END CERTIFICATE-----
1389
+
1390
  OISTE WISeKey Global Root GA CA
1391
  ===============================
1392
  -----BEGIN CERTIFICATE-----
1410
  okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
1411
  -----END CERTIFICATE-----
1412
 
1413
+ Microsec e-Szigno Root CA
1414
+ =========================
1415
+ -----BEGIN CERTIFICATE-----
1416
+ MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
1417
+ BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
1418
+ EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
1419
+ MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
1420
+ dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
1421
+ GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
1422
+ AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
1423
+ d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
1424
+ oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
1425
+ QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
1426
+ PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
1427
+ MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
1428
+ IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
1429
+ VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
1430
+ LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
1431
+ dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
1432
+ AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
1433
+ 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
1434
+ AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
1435
+ egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
1436
+ Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
1437
+ PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
1438
+ c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
1439
+ cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
1440
+ IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
1441
+ WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
1442
+ MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
1443
+ MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
1444
+ Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
1445
+ HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
1446
+ nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
1447
+ aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
1448
+ 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
1449
+ yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
1450
+ S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
1451
+ -----END CERTIFICATE-----
1452
+
1453
  Certigna
1454
  ========
1455
  -----BEGIN CERTIFICATE-----
1547
  BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
1548
  -----END CERTIFICATE-----
1549
 
1550
+ 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
1551
+ =============================================================================================================================
1552
+ -----BEGIN CERTIFICATE-----
1553
+ MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
1554
+ DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
1555
+ aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
1556
+ b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
1557
+ BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
1558
+ S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
1559
+ MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
1560
+ IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
1561
+ n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
1562
+ IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
1563
+ dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
1564
+ cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
1565
+ AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
1566
+ Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
1567
+ xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
1568
+ 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
1569
+ hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
1570
+ BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
1571
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
1572
+ N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
1573
+ y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
1574
+ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
1575
+ dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1576
+ -----END CERTIFICATE-----
1577
+
1578
+ Buypass Class 2 CA 1
1579
+ ====================
1580
+ -----BEGIN CERTIFICATE-----
1581
+ MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
1582
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
1583
+ MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
1584
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
1585
+ hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
1586
+ cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
1587
+ 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
1588
+ 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
1589
+ uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
1590
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
1591
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
1592
+ 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
1593
+ 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
1594
+ fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
1595
+ wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
1596
+ -----END CERTIFICATE-----
1597
+
1598
+ EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
1599
+ ==========================================================================
1600
+ -----BEGIN CERTIFICATE-----
1601
+ MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
1602
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
1603
+ QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
1604
+ Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
1605
+ ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
1606
+ IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
1607
+ SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
1608
+ X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
1609
+ gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
1610
+ eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
1611
+ TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
1612
+ Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
1613
+ uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
1614
+ qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
1615
+ ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
1616
+ Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
1617
+ /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
1618
+ Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
1619
+ FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
1620
+ zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
1621
+ XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
1622
+ bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
1623
+ RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
1624
+ 1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
1625
+ 2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
1626
+ Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
1627
+ AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
1628
+ -----END CERTIFICATE-----
1629
+
1630
  certSIGN ROOT CA
1631
  ================
1632
  -----BEGIN CERTIFICATE-----
1647
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
1648
  -----END CERTIFICATE-----
1649
 
1650
+ CNNIC ROOT
1651
+ ==========
1652
+ -----BEGIN CERTIFICATE-----
1653
+ MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
1654
+ ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
1655
+ OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
1656
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
1657
+ o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
1658
+ VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
1659
+ VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
1660
+ czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
1661
+ y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
1662
+ wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
1663
+ lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
1664
+ Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
1665
+ O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
1666
+ BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
1667
+ G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
1668
+ mxE=
1669
+ -----END CERTIFICATE-----
1670
+
1671
+ ApplicationCA - Japanese Government
1672
+ ===================================
1673
+ -----BEGIN CERTIFICATE-----
1674
+ MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
1675
+ SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
1676
+ MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
1677
+ cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1678
+ CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
1679
+ fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
1680
+ wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
1681
+ jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
1682
+ nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
1683
+ WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
1684
+ BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
1685
+ vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
1686
+ o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
1687
+ /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
1688
+ io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
1689
+ dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
1690
+ rosot4LKGAfmt1t06SAZf7IbiVQ=
1691
+ -----END CERTIFICATE-----
1692
+
1693
  GeoTrust Primary Certification Authority - G3
1694
  =============================================
1695
  -----BEGIN CERTIFICATE-----
1821
  -----END CERTIFICATE-----
1822
 
1823
  NetLock Arany (Class Gold) Főtanúsítvány
1824
+ ============================================
1825
  -----BEGIN CERTIFICATE-----
1826
  MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1827
  A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
1876
  66+KAQ==
1877
  -----END CERTIFICATE-----
1878
 
1879
+ CA Disig
1880
+ ========
1881
+ -----BEGIN CERTIFICATE-----
1882
+ MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
1883
+ QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
1884
+ MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
1885
+ bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
1886
+ DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
1887
+ GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
1888
+ Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
1889
+ hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
1890
+ ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
1891
+ gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
1892
+ AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
1893
+ aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
1894
+ ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
1895
+ BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
1896
+ WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
1897
+ mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
1898
+ CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
1899
+ ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
1900
+ 4Z7CRneC9VkGjCFMhwnN5ag=
1901
+ -----END CERTIFICATE-----
1902
+
1903
+ Juur-SK
1904
+ =======
1905
+ -----BEGIN CERTIFICATE-----
1906
+ MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
1907
+ c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
1908
+ DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
1909
+ SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
1910
+ aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
1911
+ ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
1912
+ TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
1913
+ +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
1914
+ UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
1915
+ Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
1916
+ MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
1917
+ HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
1918
+ AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
1919
+ cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
1920
+ AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
1921
+ cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
1922
+ FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
1923
+ A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
1924
+ ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
1925
+ abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
1926
+ IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
1927
+ Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
1928
+ yyqcjg==
1929
+ -----END CERTIFICATE-----
1930
+
1931
  Hongkong Post Root CA 1
1932
  =======================
1933
  -----BEGIN CERTIFICATE-----
1969
  lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
1970
  -----END CERTIFICATE-----
1971
 
1972
+ ACEDICOM Root
1973
+ =============
1974
+ -----BEGIN CERTIFICATE-----
1975
+ MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
1976
+ T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
1977
+ MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
1978
+ A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
1979
+ AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
1980
+ WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
1981
+ YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
1982
+ MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
1983
+ m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
1984
+ HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
1985
+ xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
1986
+ 3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
1987
+ 2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
1988
+ TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
1989
+ 4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
1990
+ 9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
1991
+ bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
1992
+ aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
1993
+ eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
1994
+ zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
1995
+ ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
1996
+ KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
1997
+ nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
1998
+ I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
1999
+ MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
2000
+ tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
2001
+ -----END CERTIFICATE-----
2002
+
2003
  Microsec e-Szigno Root CA 2009
2004
  ==============================
2005
  -----BEGIN CERTIFICATE-----
2360
  03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
2361
  -----END CERTIFICATE-----
2362
 
2363
+ Certinomis - Autorité Racine
2364
+ =============================
2365
+ -----BEGIN CERTIFICATE-----
2366
+ MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
2367
+ Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
2368
+ LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
2369
+ A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
2370
+ JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
2371
+ ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
2372
+ wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
2373
+ Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
2374
+ 2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
2375
+ jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
2376
+ c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
2377
+ lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
2378
+ xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
2379
+ 530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
2380
+ 4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
2381
+ A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
2382
+ KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
2383
+ WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
2384
+ R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
2385
+ nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
2386
+ CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
2387
+ JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
2388
+ qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
2389
+ WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
2390
+ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
2391
+ vgt2Fl43N+bYdJeimUV5
2392
+ -----END CERTIFICATE-----
2393
+
2394
+ Root CA Generalitat Valenciana
2395
+ ==============================
2396
+ -----BEGIN CERTIFICATE-----
2397
+ MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
2398
+ ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
2399
+ IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
2400
+ WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
2401
+ CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
2402
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
2403
+ F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
2404
+ ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
2405
+ D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
2406
+ JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
2407
+ AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
2408
+ dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
2409
+ ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
2410
+ AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
2411
+ YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
2412
+ AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
2413
+ aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
2414
+ AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
2415
+ YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
2416
+ AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
2417
+ OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
2418
+ dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
2419
+ BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
2420
+ A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
2421
+ b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
2422
+ TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
2423
+ Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
2424
+ NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
2425
+ iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
2426
+ +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
2427
+ -----END CERTIFICATE-----
2428
+
2429
  TWCA Root Certification Authority
2430
  =================================
2431
  -----BEGIN CERTIFICATE-----
2574
  iB6XzCGcKQENZetX2fNXlrtIzYE=
2575
  -----END CERTIFICATE-----
2576
 
2577
+ StartCom Certification Authority
2578
+ ================================
2579
+ -----BEGIN CERTIFICATE-----
2580
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
2581
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
2582
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
2583
+ NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
2584
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
2585
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
2586
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
2587
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
2588
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
2589
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
2590
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
2591
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
2592
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
2593
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
2594
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
2595
+ 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
2596
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
2597
+ Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
2598
+ dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
2599
+ c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
2600
+ bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
2601
+ aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
2602
+ aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
2603
+ L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
2604
+ cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
2605
+ fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
2606
+ N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
2607
+ Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
2608
+ tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
2609
+ e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
2610
+ 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
2611
+ HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
2612
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
2613
+ D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
2614
+ -----END CERTIFICATE-----
2615
+
2616
+ StartCom Certification Authority G2
2617
+ ===================================
2618
+ -----BEGIN CERTIFICATE-----
2619
+ MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
2620
+ U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
2621
+ RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
2622
+ ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
2623
+ dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
2624
+ o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
2625
+ 4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
2626
+ Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
2627
+ Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
2628
+ O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
2629
+ vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
2630
+ nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
2631
+ FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
2632
+ z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
2633
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
2634
+ KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
2635
+ 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
2636
+ J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
2637
+ JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
2638
+ /+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
2639
+ nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
2640
+ blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
2641
+ l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
2642
+ 7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
2643
+ obp573PYtlNXLfbQ4ddI
2644
+ -----END CERTIFICATE-----
2645
+
2646
  Buypass Class 2 Root CA
2647
  =======================
2648
  -----BEGIN CERTIFICATE-----
2749
  dcGWxZ0=
2750
  -----END CERTIFICATE-----
2751
 
2752
+ TURKTRUST Certificate Services Provider Root 2007
2753
+ =================================================
2754
+ -----BEGIN CERTIFICATE-----
2755
+ MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2756
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
2757
+ MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
2758
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
2759
+ DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
2760
+ a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
2761
+ BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
2762
+ bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
2763
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
2764
+ YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
2765
+ KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
2766
+ KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
2767
+ rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
2768
+ AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
2769
+ BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
2770
+ Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
2771
+ aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
2772
+ Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
2773
+ BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
2774
+ poRq0Tl9
2775
+ -----END CERTIFICATE-----
2776
+
2777
  D-TRUST Root Class 3 CA 2 2009
2778
  ==============================
2779
  -----BEGIN CERTIFICATE-----
2823
  w9y4AyHqnxbxLFS1
2824
  -----END CERTIFICATE-----
2825
 
2826
+ PSCProcert
2827
+ ==========
2828
+ -----BEGIN CERTIFICATE-----
2829
+ MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
2830
+ ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
2831
+ MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
2832
+ dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
2833
+ cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
2834
+ IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
2835
+ MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
2836
+ DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
2837
+ ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
2838
+ Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
2839
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
2840
+ wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
2841
+ 3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
2842
+ RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
2843
+ EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
2844
+ 0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
2845
+ 0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
2846
+ td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
2847
+ Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
2848
+ r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
2849
+ AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
2850
+ Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
2851
+ xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
2852
+ ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
2853
+ EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
2854
+ Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
2855
+ ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
2856
+ 9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
2857
+ MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
2858
+ LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
2859
+ ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
2860
+ YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
2861
+ Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
2862
+ dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
2863
+ T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
2864
+ g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
2865
+ uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
2866
+ n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
2867
+ FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
2868
+ 5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
2869
+ 3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
2870
+ poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
2871
+ eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
2872
+ -----END CERTIFICATE-----
2873
+
2874
+ China Internet Network Information Center EV Certificates Root
2875
+ ==============================================================
2876
+ -----BEGIN CERTIFICATE-----
2877
+ MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
2878
+ BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
2879
+ aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
2880
+ Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
2881
+ A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
2882
+ PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
2883
+ cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
2884
+ jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
2885
+ 98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
2886
+ klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
2887
+ KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
2888
+ 7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
2889
+ HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
2890
+ glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
2891
+ 0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
2892
+ 7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
2893
+ ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
2894
+ 5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
2895
+ -----END CERTIFICATE-----
2896
+
2897
+ Swisscom Root CA 2
2898
+ ==================
2899
+ -----BEGIN CERTIFICATE-----
2900
+ MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
2901
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
2902
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
2903
+ MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
2904
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
2905
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
2906
+ LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
2907
+ ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
2908
+ wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
2909
+ Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
2910
+ SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
2911
+ NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
2912
+ mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
2913
+ Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
2914
+ qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
2915
+ HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
2916
+ BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
2917
+ MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
2918
+ v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
2919
+ 82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
2920
+ o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
2921
+ a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
2922
+ OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
2923
+ mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
2924
+ +sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
2925
+ rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
2926
+ 5OfNeOI5wSsSnqaeG8XmDtkx2Q==
2927
+ -----END CERTIFICATE-----
2928
+
2929
+ Swisscom Root EV CA 2
2930
+ =====================
2931
+ -----BEGIN CERTIFICATE-----
2932
+ MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
2933
+ BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
2934
+ cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
2935
+ MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
2936
+ HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
2937
+ Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
2938
+ o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
2939
+ Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
2940
+ GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
2941
+ qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
2942
+ Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
2943
+ alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
2944
+ m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
2945
+ bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
2946
+ xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
2947
+ BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
2948
+ MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
2949
+ bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
2950
+ j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
2951
+ wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
2952
+ XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
2953
+ 59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
2954
+ 23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
2955
+ J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
2956
+ HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
2957
+ uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
2958
+ l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
2959
+ -----END CERTIFICATE-----
2960
+
2961
+ CA Disig Root R1
2962
+ ================
2963
+ -----BEGIN CERTIFICATE-----
2964
+ MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
2965
+ EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
2966
+ ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
2967
+ EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
2968
+ c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
2969
+ 3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
2970
+ u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
2971
+ m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
2972
+ CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
2973
+ YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
2974
+ vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
2975
+ LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
2976
+ ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
2977
+ XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
2978
+ HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
2979
+ 04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
2980
+ xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
2981
+ LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
2982
+ CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
2983
+ VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
2984
+ YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
2985
+ ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
2986
+ lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
2987
+ UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
2988
+ a7+h89n07eLw4+1knj0vllJPgFOL
2989
+ -----END CERTIFICATE-----
2990
+
2991
  CA Disig Root R2
2992
  ================
2993
  -----BEGIN CERTIFICATE-----
3391
  82Z+
3392
  -----END CERTIFICATE-----
3393
 
3394
+ WoSign
3395
+ ======
3396
+ -----BEGIN CERTIFICATE-----
3397
+ MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
3398
+ EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g
3399
+ QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ
3400
+ BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh
3401
+ dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
3402
+ vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO
3403
+ CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX
3404
+ 2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5
3405
+ KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR
3406
+ +ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez
3407
+ EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk
3408
+ lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2
3409
+ 8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY
3410
+ yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C
3411
+ AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R
3412
+ 8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1
3413
+ LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq
3414
+ T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj
3415
+ y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC
3416
+ 2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes
3417
+ 5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
3418
+ EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh
3419
+ mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx
3420
+ kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi
3421
+ kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w==
3422
+ -----END CERTIFICATE-----
3423
+
3424
+ WoSign China
3425
+ ============
3426
+ -----BEGIN CERTIFICATE-----
3427
+ MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG
3428
+ EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv
3429
+ geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD
3430
+ VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN
3431
+ BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k
3432
+ 8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5
3433
+ uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85
3434
+ dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5
3435
+ Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy
3436
+ b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc
3437
+ 76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m
3438
+ +Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6
3439
+ yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX
3440
+ GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
3441
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA
3442
+ A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6
3443
+ yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY
3444
+ r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115
3445
+ j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A
3446
+ kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97
3447
+ qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y
3448
+ jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB
3449
+ ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv
3450
+ T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO
3451
+ kI26oQ==
3452
+ -----END CERTIFICATE-----
3453
+
3454
  COMODO RSA Certification Authority
3455
  ==================================
3456
  -----BEGIN CERTIFICATE-----
3755
  ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
3756
  -----END CERTIFICATE-----
3757
 
3758
+ TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
3759
+ =========================================================
3760
+ -----BEGIN CERTIFICATE-----
3761
+ MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
3762
+ BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
3763
+ bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
3764
+ RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
3765
+ ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
3766
+ SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
3767
+ n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
3768
+ ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3769
+ CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
3770
+ jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
3771
+ ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
3772
+ 9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
3773
+ 4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
3774
+ HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
3775
+ hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
3776
+ BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
3777
+ URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
3778
+ lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
3779
+ B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
3780
+ -----END CERTIFICATE-----
3781
+
3782
+ TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
3783
+ =========================================================
3784
+ -----BEGIN CERTIFICATE-----
3785
+ MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
3786
+ A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
3787
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
3788
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5
3789
+ MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL
3790
+ BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf
3791
+ aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm
3792
+ aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3793
+ AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a
3794
+ 2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED
3795
+ wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb
3796
+ HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV
3797
+ +DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT
3798
+ 9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
3799
+ 9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R
3800
+ fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
3801
+ o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW
3802
+ hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1
3803
+ O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw==
3804
+ -----END CERTIFICATE-----
3805
+
3806
+ Certinomis - Root CA
3807
+ ====================
3808
+ -----BEGIN CERTIFICATE-----
3809
+ MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
3810
+ Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg
3811
+ LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx
3812
+ EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD
3813
+ ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos
3814
+ P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo
3815
+ d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap
3816
+ z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00
3817
+ 8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x
3818
+ RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE
3819
+ 6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t
3820
+ FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV
3821
+ PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH
3822
+ i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj
3823
+ YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I
3824
+ 6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF
3825
+ AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV
3826
+ WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw
3827
+ Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX
3828
+ lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ
3829
+ y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9
3830
+ Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng
3831
+ DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi
3832
+ I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM
3833
+ cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr
3834
+ hkIGuUE=
3835
+ -----END CERTIFICATE-----
3836
+
3837
  OISTE WISeKey Global Root GB CA
3838
  ===============================
3839
  -----BEGIN CERTIFICATE-----
3856
  Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
3857
  -----END CERTIFICATE-----
3858
 
3859
+ Certification Authority of WoSign G2
3860
+ ====================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3861
  -----BEGIN CERTIFICATE-----
3862
+ MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
3863
+ EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
3864
+ QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
3865
+ CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
3866
+ aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3867
+ CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
3868
+ XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
3869
+ W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
3870
+ 5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
3871
+ v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
3872
+ AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
3873
+ hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
3874
+ P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
3875
+ TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
3876
+ +sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
3877
+ 7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
3878
+ -----END CERTIFICATE-----
3879
+
3880
+ CA WoSign ECC Root
3881
  ==================
3882
  -----BEGIN CERTIFICATE-----
3883
+ MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
3884
+ TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
3885
+ dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
3886
+ ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
3887
+ zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
3888
+ t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
3889
+ QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
3890
+ MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
3891
+ Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
3892
+ a/GRspBl9JrmkO5K
3893
+ -----END CERTIFICATE-----
3894
+
3895
+ ================================================================
3896
+ C: US
3897
+ O: GTE Corporation
3898
+ OU: GTE CyberTrust Solutions, Inc.
3899
+ CN: GTE CyberTrust Global Root
3900
+ --
3901
+ Not Before: 1998-08-13
3902
+ Not After: 2018-08-13
3903
+ Signature: md5WithRSAEncryption
3904
+ Key: RSA:1024
3905
+ -----BEGIN CERTIFICATE-----
3906
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
3907
+ VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
3908
+ bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
3909
+ b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
3910
+ UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
3911
+ cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
3912
+ b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
3913
+ iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
3914
+ r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
3915
+ 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
3916
+ GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
3917
+ 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
3918
+ lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3919
  -----END CERTIFICATE-----
lib/stripe/data/test.png ADDED
Binary file
lib/stripe/init.php CHANGED
@@ -1,240 +1,67 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  // Stripe singleton
6
- require __DIR__ . '/lib/Stripe.php';
7
 
8
  // Utilities
9
- require __DIR__ . '/lib/Util/CaseInsensitiveArray.php';
10
- require __DIR__ . '/lib/Util/LoggerInterface.php';
11
- require __DIR__ . '/lib/Util/DefaultLogger.php';
12
- require __DIR__ . '/lib/Util/RandomGenerator.php';
13
- require __DIR__ . '/lib/Util/RequestOptions.php';
14
- require __DIR__ . '/lib/Util/Set.php';
15
- require __DIR__ . '/lib/Util/Util.php';
16
- require __DIR__ . '/lib/Util/ObjectTypes.php';
17
 
18
  // HttpClient
19
- require __DIR__ . '/lib/HttpClient/ClientInterface.php';
20
- require __DIR__ . '/lib/HttpClient/CurlClient.php';
21
-
22
- // Exceptions
23
- require __DIR__ . '/lib/Exception/ExceptionInterface.php';
24
- require __DIR__ . '/lib/Exception/ApiErrorException.php';
25
- require __DIR__ . '/lib/Exception/ApiConnectionException.php';
26
- require __DIR__ . '/lib/Exception/AuthenticationException.php';
27
- require __DIR__ . '/lib/Exception/BadMethodCallException.php';
28
- require __DIR__ . '/lib/Exception/CardException.php';
29
- require __DIR__ . '/lib/Exception/IdempotencyException.php';
30
- require __DIR__ . '/lib/Exception/InvalidArgumentException.php';
31
- require __DIR__ . '/lib/Exception/InvalidRequestException.php';
32
- require __DIR__ . '/lib/Exception/PermissionException.php';
33
- require __DIR__ . '/lib/Exception/RateLimitException.php';
34
- require __DIR__ . '/lib/Exception/SignatureVerificationException.php';
35
- require __DIR__ . '/lib/Exception/UnexpectedValueException.php';
36
- require __DIR__ . '/lib/Exception/UnknownApiErrorException.php';
37
 
38
- // OAuth exceptions
39
- require __DIR__ . '/lib/Exception/OAuth/ExceptionInterface.php';
40
- require __DIR__ . '/lib/Exception/OAuth/OAuthErrorException.php';
41
- require __DIR__ . '/lib/Exception/OAuth/InvalidClientException.php';
42
- require __DIR__ . '/lib/Exception/OAuth/InvalidGrantException.php';
43
- require __DIR__ . '/lib/Exception/OAuth/InvalidRequestException.php';
44
- require __DIR__ . '/lib/Exception/OAuth/InvalidScopeException.php';
45
- require __DIR__ . '/lib/Exception/OAuth/UnknownOAuthErrorException.php';
46
- require __DIR__ . '/lib/Exception/OAuth/UnsupportedGrantTypeException.php';
47
- require __DIR__ . '/lib/Exception/OAuth/UnsupportedResponseTypeException.php';
48
-
49
- // API operations
50
- require __DIR__ . '/lib/ApiOperations/All.php';
51
- require __DIR__ . '/lib/ApiOperations/Create.php';
52
- require __DIR__ . '/lib/ApiOperations/Delete.php';
53
- require __DIR__ . '/lib/ApiOperations/NestedResource.php';
54
- require __DIR__ . '/lib/ApiOperations/Request.php';
55
- require __DIR__ . '/lib/ApiOperations/Retrieve.php';
56
- require __DIR__ . '/lib/ApiOperations/Update.php';
57
 
58
  // Plumbing
59
- require __DIR__ . '/lib/ApiResponse.php';
60
- require __DIR__ . '/lib/RequestTelemetry.php';
61
- require __DIR__ . '/lib/StripeObject.php';
62
- require __DIR__ . '/lib/ApiRequestor.php';
63
- require __DIR__ . '/lib/ApiResource.php';
64
- require __DIR__ . '/lib/SingletonApiResource.php';
65
- require __DIR__ . '/lib/Service/AbstractService.php';
66
- require __DIR__ . '/lib/Service/AbstractServiceFactory.php';
67
-
68
- // StripeClient
69
- require __DIR__ . '/lib/StripeClientInterface.php';
70
- require __DIR__ . '/lib/BaseStripeClient.php';
71
- require __DIR__ . '/lib/StripeClient.php';
72
 
73
  // Stripe API Resources
74
- require __DIR__ . '/lib/Account.php';
75
- require __DIR__ . '/lib/AccountLink.php';
76
- require __DIR__ . '/lib/AlipayAccount.php';
77
- require __DIR__ . '/lib/ApplePayDomain.php';
78
- require __DIR__ . '/lib/ApplicationFee.php';
79
- require __DIR__ . '/lib/ApplicationFeeRefund.php';
80
- require __DIR__ . '/lib/Balance.php';
81
- require __DIR__ . '/lib/BalanceTransaction.php';
82
- require __DIR__ . '/lib/BankAccount.php';
83
- require __DIR__ . '/lib/BillingPortal/Configuration.php';
84
- require __DIR__ . '/lib/BillingPortal/Session.php';
85
- require __DIR__ . '/lib/BitcoinReceiver.php';
86
- require __DIR__ . '/lib/BitcoinTransaction.php';
87
- require __DIR__ . '/lib/Capability.php';
88
- require __DIR__ . '/lib/Card.php';
89
- require __DIR__ . '/lib/Charge.php';
90
- require __DIR__ . '/lib/Checkout/Session.php';
91
- require __DIR__ . '/lib/Collection.php';
92
- require __DIR__ . '/lib/CountrySpec.php';
93
- require __DIR__ . '/lib/Coupon.php';
94
- require __DIR__ . '/lib/CreditNote.php';
95
- require __DIR__ . '/lib/CreditNoteLineItem.php';
96
- require __DIR__ . '/lib/Customer.php';
97
- require __DIR__ . '/lib/CustomerBalanceTransaction.php';
98
- require __DIR__ . '/lib/Discount.php';
99
- require __DIR__ . '/lib/Dispute.php';
100
- require __DIR__ . '/lib/EphemeralKey.php';
101
- require __DIR__ . '/lib/ErrorObject.php';
102
- require __DIR__ . '/lib/Event.php';
103
- require __DIR__ . '/lib/ExchangeRate.php';
104
- require __DIR__ . '/lib/File.php';
105
- require __DIR__ . '/lib/FileLink.php';
106
- require __DIR__ . '/lib/Invoice.php';
107
- require __DIR__ . '/lib/InvoiceItem.php';
108
- require __DIR__ . '/lib/InvoiceLineItem.php';
109
- require __DIR__ . '/lib/Issuing/Authorization.php';
110
- require __DIR__ . '/lib/Issuing/Card.php';
111
- require __DIR__ . '/lib/Issuing/CardDetails.php';
112
- require __DIR__ . '/lib/Issuing/Cardholder.php';
113
- require __DIR__ . '/lib/Issuing/Dispute.php';
114
- require __DIR__ . '/lib/Issuing/Transaction.php';
115
- require __DIR__ . '/lib/LineItem.php';
116
- require __DIR__ . '/lib/LoginLink.php';
117
- require __DIR__ . '/lib/Mandate.php';
118
- require __DIR__ . '/lib/Order.php';
119
- require __DIR__ . '/lib/OrderItem.php';
120
- require __DIR__ . '/lib/OrderReturn.php';
121
- require __DIR__ . '/lib/PaymentIntent.php';
122
- require __DIR__ . '/lib/PaymentMethod.php';
123
- require __DIR__ . '/lib/Payout.php';
124
- require __DIR__ . '/lib/Person.php';
125
- require __DIR__ . '/lib/Plan.php';
126
- require __DIR__ . '/lib/Price.php';
127
- require __DIR__ . '/lib/Product.php';
128
- require __DIR__ . '/lib/PromotionCode.php';
129
- require __DIR__ . '/lib/Radar/EarlyFraudWarning.php';
130
- require __DIR__ . '/lib/Radar/ValueList.php';
131
- require __DIR__ . '/lib/Radar/ValueListItem.php';
132
- require __DIR__ . '/lib/Recipient.php';
133
- require __DIR__ . '/lib/RecipientTransfer.php';
134
- require __DIR__ . '/lib/Refund.php';
135
- require __DIR__ . '/lib/Reporting/ReportRun.php';
136
- require __DIR__ . '/lib/Reporting/ReportType.php';
137
- require __DIR__ . '/lib/Review.php';
138
- require __DIR__ . '/lib/SetupAttempt.php';
139
- require __DIR__ . '/lib/SetupIntent.php';
140
- require __DIR__ . '/lib/Sigma/ScheduledQueryRun.php';
141
- require __DIR__ . '/lib/SKU.php';
142
- require __DIR__ . '/lib/Source.php';
143
- require __DIR__ . '/lib/SourceTransaction.php';
144
- require __DIR__ . '/lib/Subscription.php';
145
- require __DIR__ . '/lib/SubscriptionItem.php';
146
- require __DIR__ . '/lib/SubscriptionSchedule.php';
147
- require __DIR__ . '/lib/TaxId.php';
148
- require __DIR__ . '/lib/TaxRate.php';
149
- require __DIR__ . '/lib/Terminal/ConnectionToken.php';
150
- require __DIR__ . '/lib/Terminal/Location.php';
151
- require __DIR__ . '/lib/Terminal/Reader.php';
152
- require __DIR__ . '/lib/ThreeDSecure.php';
153
- require __DIR__ . '/lib/Token.php';
154
- require __DIR__ . '/lib/Topup.php';
155
- require __DIR__ . '/lib/Transfer.php';
156
- require __DIR__ . '/lib/TransferReversal.php';
157
- require __DIR__ . '/lib/UsageRecord.php';
158
- require __DIR__ . '/lib/UsageRecordSummary.php';
159
- require __DIR__ . '/lib/WebhookEndpoint.php';
160
-
161
- // Services
162
- require __DIR__ . '/lib/Service/AccountService.php';
163
- require __DIR__ . '/lib/Service/AccountLinkService.php';
164
- require __DIR__ . '/lib/Service/ApplePayDomainService.php';
165
- require __DIR__ . '/lib/Service/ApplicationFeeService.php';
166
- require __DIR__ . '/lib/Service/BalanceService.php';
167
- require __DIR__ . '/lib/Service/BalanceTransactionService.php';
168
- require __DIR__ . '/lib/Service/BillingPortal/ConfigurationService.php';
169
- require __DIR__ . '/lib/Service/BillingPortal/SessionService.php';
170
- require __DIR__ . '/lib/Service/ChargeService.php';
171
- require __DIR__ . '/lib/Service/Checkout/SessionService.php';
172
- require __DIR__ . '/lib/Service/CountrySpecService.php';
173
- require __DIR__ . '/lib/Service/CouponService.php';
174
- require __DIR__ . '/lib/Service/CreditNoteService.php';
175
- require __DIR__ . '/lib/Service/CustomerService.php';
176
- require __DIR__ . '/lib/Service/DisputeService.php';
177
- require __DIR__ . '/lib/Service/EphemeralKeyService.php';
178
- require __DIR__ . '/lib/Service/EventService.php';
179
- require __DIR__ . '/lib/Service/ExchangeRateService.php';
180
- require __DIR__ . '/lib/Service/FileService.php';
181
- require __DIR__ . '/lib/Service/FileLinkService.php';
182
- require __DIR__ . '/lib/Service/InvoiceService.php';
183
- require __DIR__ . '/lib/Service/InvoiceItemService.php';
184
- require __DIR__ . '/lib/Service/Issuing/AuthorizationService.php';
185
- require __DIR__ . '/lib/Service/Issuing/CardService.php';
186
- require __DIR__ . '/lib/Service/Issuing/CardholderService.php';
187
- require __DIR__ . '/lib/Service/Issuing/DisputeService.php';
188
- require __DIR__ . '/lib/Service/Issuing/TransactionService.php';
189
- require __DIR__ . '/lib/Service/MandateService.php';
190
- require __DIR__ . '/lib/Service/OrderService.php';
191
- require __DIR__ . '/lib/Service/OrderReturnService.php';
192
- require __DIR__ . '/lib/Service/PaymentIntentService.php';
193
- require __DIR__ . '/lib/Service/PaymentMethodService.php';
194
- require __DIR__ . '/lib/Service/PayoutService.php';
195
- require __DIR__ . '/lib/Service/PlanService.php';
196
- require __DIR__ . '/lib/Service/PriceService.php';
197
- require __DIR__ . '/lib/Service/ProductService.php';
198
- require __DIR__ . '/lib/Service/PromotionCodeService.php';
199
- require __DIR__ . '/lib/Service/Radar/EarlyFraudWarningService.php';
200
- require __DIR__ . '/lib/Service/Radar/ValueListService.php';
201
- require __DIR__ . '/lib/Service/Radar/ValueListItemService.php';
202
- require __DIR__ . '/lib/Service/RefundService.php';
203
- require __DIR__ . '/lib/Service/Reporting/ReportRunService.php';
204
- require __DIR__ . '/lib/Service/Reporting/ReportTypeService.php';
205
- require __DIR__ . '/lib/Service/ReviewService.php';
206
- require __DIR__ . '/lib/Service/SetupAttemptService.php';
207
- require __DIR__ . '/lib/Service/SetupIntentService.php';
208
- require __DIR__ . '/lib/Service/Sigma/ScheduledQueryRunService.php';
209
- require __DIR__ . '/lib/Service/SkuService.php';
210
- require __DIR__ . '/lib/Service/SourceService.php';
211
- require __DIR__ . '/lib/Service/SubscriptionService.php';
212
- require __DIR__ . '/lib/Service/SubscriptionItemService.php';
213
- require __DIR__ . '/lib/Service/SubscriptionScheduleService.php';
214
- require __DIR__ . '/lib/Service/TaxRateService.php';
215
- require __DIR__ . '/lib/Service/Terminal/ConnectionTokenService.php';
216
- require __DIR__ . '/lib/Service/Terminal/LocationService.php';
217
- require __DIR__ . '/lib/Service/Terminal/ReaderService.php';
218
- require __DIR__ . '/lib/Service/TokenService.php';
219
- require __DIR__ . '/lib/Service/TopupService.php';
220
- require __DIR__ . '/lib/Service/TransferService.php';
221
- require __DIR__ . '/lib/Service/WebhookEndpointService.php';
222
-
223
- // Service factories
224
- require __DIR__ . '/lib/Service/CoreServiceFactory.php';
225
- require __DIR__ . '/lib/Service/BillingPortal/BillingPortalServiceFactory.php';
226
- require __DIR__ . '/lib/Service/Checkout/CheckoutServiceFactory.php';
227
- require __DIR__ . '/lib/Service/Issuing/IssuingServiceFactory.php';
228
- require __DIR__ . '/lib/Service/Radar/RadarServiceFactory.php';
229
- require __DIR__ . '/lib/Service/Reporting/ReportingServiceFactory.php';
230
- require __DIR__ . '/lib/Service/Sigma/SigmaServiceFactory.php';
231
- require __DIR__ . '/lib/Service/Terminal/TerminalServiceFactory.php';
232
-
233
- // OAuth
234
- require __DIR__ . '/lib/OAuth.php';
235
- require __DIR__ . '/lib/OAuthErrorObject.php';
236
- require __DIR__ . '/lib/Service/OAuthService.php';
237
-
238
- // Webhooks
239
- require __DIR__ . '/lib/Webhook.php';
240
- require __DIR__ . '/lib/WebhookSignature.php';
1
  <?php
2
 
 
 
3
  // Stripe singleton
4
+ require(dirname(__FILE__) . '/lib/Stripe.php');
5
 
6
  // Utilities
7
+ require(dirname(__FILE__) . '/lib/Util/AutoPagingIterator.php');
8
+ require(dirname(__FILE__) . '/lib/Util/RequestOptions.php');
9
+ require(dirname(__FILE__) . '/lib/Util/Set.php');
10
+ require(dirname(__FILE__) . '/lib/Util/Util.php');
 
 
 
 
11
 
12
  // HttpClient
13
+ require(dirname(__FILE__) . '/lib/HttpClient/ClientInterface.php');
14
+ require(dirname(__FILE__) . '/lib/HttpClient/CurlClient.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
+ // Errors
17
+ require(dirname(__FILE__) . '/lib/Error/Base.php');
18
+ require(dirname(__FILE__) . '/lib/Error/Api.php');
19
+ require(dirname(__FILE__) . '/lib/Error/ApiConnection.php');
20
+ require(dirname(__FILE__) . '/lib/Error/Authentication.php');
21
+ require(dirname(__FILE__) . '/lib/Error/Card.php');
22
+ require(dirname(__FILE__) . '/lib/Error/InvalidRequest.php');
23
+ require(dirname(__FILE__) . '/lib/Error/RateLimit.php');
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  // Plumbing
26
+ require(dirname(__FILE__) . '/lib/ApiResponse.php');
27
+ require(dirname(__FILE__) . '/lib/JsonSerializable.php');
28
+ require(dirname(__FILE__) . '/lib/StripeObject.php');
29
+ require(dirname(__FILE__) . '/lib/ApiRequestor.php');
30
+ require(dirname(__FILE__) . '/lib/ApiResource.php');
31
+ require(dirname(__FILE__) . '/lib/SingletonApiResource.php');
32
+ require(dirname(__FILE__) . '/lib/AttachedObject.php');
33
+ require(dirname(__FILE__) . '/lib/ExternalAccount.php');
 
 
 
 
 
34
 
35
  // Stripe API Resources
36
+ require(dirname(__FILE__) . '/lib/Account.php');
37
+ require(dirname(__FILE__) . '/lib/AlipayAccount.php');
38
+ require(dirname(__FILE__) . '/lib/ApplicationFee.php');
39
+ require(dirname(__FILE__) . '/lib/ApplicationFeeRefund.php');
40
+ require(dirname(__FILE__) . '/lib/Balance.php');
41
+ require(dirname(__FILE__) . '/lib/BalanceTransaction.php');
42
+ require(dirname(__FILE__) . '/lib/BankAccount.php');
43
+ require(dirname(__FILE__) . '/lib/BitcoinReceiver.php');
44
+ require(dirname(__FILE__) . '/lib/BitcoinTransaction.php');
45
+ require(dirname(__FILE__) . '/lib/Card.php');
46
+ require(dirname(__FILE__) . '/lib/Charge.php');
47
+ require(dirname(__FILE__) . '/lib/Collection.php');
48
+ require(dirname(__FILE__) . '/lib/CountrySpec.php');
49
+ require(dirname(__FILE__) . '/lib/Coupon.php');
50
+ require(dirname(__FILE__) . '/lib/Customer.php');
51
+ require(dirname(__FILE__) . '/lib/Dispute.php');
52
+ require(dirname(__FILE__) . '/lib/Event.php');
53
+ require(dirname(__FILE__) . '/lib/FileUpload.php');
54
+ require(dirname(__FILE__) . '/lib/Invoice.php');
55
+ require(dirname(__FILE__) . '/lib/InvoiceItem.php');
56
+ require(dirname(__FILE__) . '/lib/Order.php');
57
+ require(dirname(__FILE__) . '/lib/OrderReturn.php');
58
+ require(dirname(__FILE__) . '/lib/Plan.php');
59
+ require(dirname(__FILE__) . '/lib/Product.php');
60
+ require(dirname(__FILE__) . '/lib/Recipient.php');
61
+ require(dirname(__FILE__) . '/lib/Refund.php');
62
+ require(dirname(__FILE__) . '/lib/SKU.php');
63
+ require(dirname(__FILE__) . '/lib/Subscription.php');
64
+ require(dirname(__FILE__) . '/lib/ThreeDSecure.php');
65
+ require(dirname(__FILE__) . '/lib/Token.php');
66
+ require(dirname(__FILE__) . '/lib/Transfer.php');
67
+ require(dirname(__FILE__) . '/lib/TransferReversal.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib-version DELETED
@@ -1 +0,0 @@
1
- 7.78.0
 
lib/stripe/lib/Account.php CHANGED
@@ -1,431 +1,131 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * This is an object representing a Stripe account. You can retrieve it to see
9
- * properties on the account like its current e-mail address or if the account is
10
- * enabled yet to make live charges.
11
  *
12
- * Some properties, marked below, are available only to platforms that want to <a
13
- * href="https://stripe.com/docs/connect/accounts">create and manage Express or
14
- * Custom accounts</a>.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  *
16
- * @property string $id Unique identifier for the object.
17
- * @property string $object String representing the object's type. Objects of the same type share the same value.
18
- * @property null|\Stripe\StripeObject $business_profile Business information about the account.
19
- * @property null|string $business_type The business type.
20
- * @property \Stripe\StripeObject $capabilities
21
- * @property bool $charges_enabled Whether the account can create live charges.
22
- * @property \Stripe\StripeObject $company
23
- * @property string $country The account's country.
24
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
25
- * @property string $default_currency Three-letter ISO currency code representing the default currency for the account. This must be a currency that <a href="https://stripe.com/docs/payouts">Stripe supports in the account's country</a>.
26
- * @property bool $details_submitted Whether account details have been submitted. Standard accounts cannot receive payouts before this is true.
27
- * @property null|string $email An email address associated with the account. You can treat this as metadata: it is not used for authentication or messaging account holders.
28
- * @property \Stripe\Collection $external_accounts External accounts (bank accounts and debit cards) currently attached to this account
29
- * @property \Stripe\Person $individual <p>This is an object representing a person associated with a Stripe account.</p><p>A platform cannot access a Standard or Express account's persons after the account starts onboarding, such as after generating an account link for the account. See the <a href="https://stripe.com/docs/connect/standard-accounts">Standard onboarding</a> or <a href="https://stripe.com/docs/connect/express-accounts">Express onboarding documentation</a> for information about platform pre-filling and account onboarding steps.</p><p>Related guide: <a href="https://stripe.com/docs/connect/identity-verification-api#person-information">Handling Identity Verification with the API</a>.</p>
30
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
31
- * @property bool $payouts_enabled Whether Stripe can send payouts to this account.
32
- * @property \Stripe\StripeObject $requirements
33
- * @property null|\Stripe\StripeObject $settings Options for customizing how the account functions within Stripe.
34
- * @property \Stripe\StripeObject $tos_acceptance
35
- * @property string $type The Stripe account type. Can be <code>standard</code>, <code>express</code>, or <code>custom</code>.
36
  */
37
  class Account extends ApiResource
38
  {
39
- const OBJECT_NAME = 'account';
40
-
41
- use ApiOperations\All;
42
- use ApiOperations\Create;
43
- use ApiOperations\Delete;
44
- use ApiOperations\NestedResource;
45
- use ApiOperations\Update;
46
-
47
- const BUSINESS_TYPE_COMPANY = 'company';
48
- const BUSINESS_TYPE_GOVERNMENT_ENTITY = 'government_entity';
49
- const BUSINESS_TYPE_INDIVIDUAL = 'individual';
50
- const BUSINESS_TYPE_NON_PROFIT = 'non_profit';
51
-
52
- const CAPABILITY_CARD_PAYMENTS = 'card_payments';
53
- const CAPABILITY_LEGACY_PAYMENTS = 'legacy_payments';
54
- const CAPABILITY_PLATFORM_PAYMENTS = 'platform_payments';
55
- const CAPABILITY_TRANSFERS = 'transfers';
56
-
57
- const CAPABILITY_STATUS_ACTIVE = 'active';
58
- const CAPABILITY_STATUS_INACTIVE = 'inactive';
59
- const CAPABILITY_STATUS_PENDING = 'pending';
60
-
61
- const TYPE_CUSTOM = 'custom';
62
- const TYPE_EXPRESS = 'express';
63
- const TYPE_STANDARD = 'standard';
64
-
65
- use ApiOperations\Retrieve {
66
- retrieve as protected _retrieve;
67
- }
68
-
69
- public static function getSavedNestedResources()
70
- {
71
- static $savedNestedResources = null;
72
- if (null === $savedNestedResources) {
73
- $savedNestedResources = new Util\Set([
74
- 'external_account',
75
- 'bank_account',
76
- ]);
77
- }
78
-
79
- return $savedNestedResources;
80
- }
81
-
82
  public function instanceUrl()
83
  {
84
- if (null === $this['id']) {
85
  return '/v1/account';
86
- }
87
-
88
- return parent::instanceUrl();
89
- }
90
-
91
- public function serializeParameters($force = false)
92
- {
93
- $update = parent::serializeParameters($force);
94
- if (isset($this->_values['legal_entity'])) {
95
- $entity = $this['legal_entity'];
96
- if (isset($entity->_values['additional_owners'])) {
97
- $owners = $entity['additional_owners'];
98
- $entityUpdate = isset($update['legal_entity']) ? $update['legal_entity'] : [];
99
- $entityUpdate['additional_owners'] = $this->serializeAdditionalOwners($entity, $owners);
100
- $update['legal_entity'] = $entityUpdate;
101
- }
102
- }
103
- if (isset($this->_values['individual'])) {
104
- $individual = $this['individual'];
105
- if (($individual instanceof Person) && !isset($update['individual'])) {
106
- $update['individual'] = $individual->serializeParameters($force);
107
- }
108
- }
109
-
110
- return $update;
111
- }
112
-
113
- private function serializeAdditionalOwners($legalEntity, $additionalOwners)
114
- {
115
- if (isset($legalEntity->_originalValues['additional_owners'])) {
116
- $originalValue = $legalEntity->_originalValues['additional_owners'];
117
  } else {
118
- $originalValue = [];
119
- }
120
- if (($originalValue) && (\count($originalValue) > \count($additionalOwners))) {
121
- throw new Exception\InvalidArgumentException(
122
- 'You cannot delete an item from an array, you must instead set a new array'
123
- );
124
  }
125
-
126
- $updateArr = [];
127
- foreach ($additionalOwners as $i => $v) {
128
- $update = ($v instanceof StripeObject) ? $v->serializeParameters() : $v;
129
-
130
- if ([] !== $update) {
131
- if (!$originalValue
132
- || !\array_key_exists($i, $originalValue)
133
- || ($update !== $legalEntity->serializeParamsValue($originalValue[$i], null, false, true))) {
134
- $updateArr[$i] = $update;
135
- }
136
- }
137
- }
138
-
139
- return $updateArr;
140
  }
141
 
142
  /**
143
- * @param null|array|string $id the ID of the account to retrieve, or an
144
- * options array containing an `id` key
145
- * @param null|array|string $opts
146
  *
147
- * @throws \Stripe\Exception\ApiErrorException if the request fails
148
- *
149
- * @return \Stripe\Account
150
  */
151
  public static function retrieve($id = null, $opts = null)
152
  {
153
- if (!$opts && \is_string($id) && 'sk_' === \substr($id, 0, 3)) {
154
  $opts = $id;
155
  $id = null;
156
  }
157
-
158
  return self::_retrieve($id, $opts);
159
  }
160
 
161
  /**
162
- * @param null|array $clientId
163
- * @param null|array|string $opts
164
- *
165
- * @throws \Stripe\Exception\ApiErrorException if the request fails
166
- *
167
- * @return \Stripe\StripeObject object containing the response from the API
168
- */
169
- public function deauthorize($clientId = null, $opts = null)
170
- {
171
- $params = [
172
- 'client_id' => $clientId,
173
- 'stripe_user_id' => $this->id,
174
- ];
175
-
176
- return OAuth::deauthorize($params, $opts);
177
- }
178
-
179
- /**
180
- * @param null|array $params
181
- * @param null|array|string $opts
182
- *
183
- * @throws \Stripe\Exception\ApiErrorException if the request fails
184
- *
185
- * @return \Stripe\Collection the list of persons
186
- */
187
- public function persons($params = null, $opts = null)
188
- {
189
- $url = $this->instanceUrl() . '/persons';
190
- list($response, $opts) = $this->_request('get', $url, $params, $opts);
191
- $obj = Util\Util::convertToStripeObject($response, $opts);
192
- $obj->setLastResponse($response);
193
-
194
- return $obj;
195
- }
196
-
197
- /**
198
- * @param null|array $params
199
- * @param null|array|string $opts
200
- *
201
- * @throws \Stripe\Exception\ApiErrorException if the request fails
202
- *
203
- * @return Account the rejected account
204
- */
205
- public function reject($params = null, $opts = null)
206
- {
207
- $url = $this->instanceUrl() . '/reject';
208
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
209
- $this->refreshFrom($response, $opts);
210
-
211
- return $this;
212
- }
213
-
214
- /*
215
- * Capabilities methods
216
- * We can not add the capabilities() method today as the Account object already has a
217
- * capabilities property which is a hash and not the sub-list of capabilities.
218
- */
219
-
220
- const PATH_CAPABILITIES = '/capabilities';
221
-
222
- /**
223
- * @param string $id the ID of the account on which to retrieve the capabilities
224
- * @param null|array $params
225
- * @param null|array|string $opts
226
- *
227
- * @throws \Stripe\Exception\ApiErrorException if the request fails
228
- *
229
- * @return \Stripe\Collection the list of capabilities
230
- */
231
- public static function allCapabilities($id, $params = null, $opts = null)
232
- {
233
- return self::_allNestedResources($id, static::PATH_CAPABILITIES, $params, $opts);
234
- }
235
-
236
- /**
237
- * @param string $id the ID of the account to which the capability belongs
238
- * @param string $capabilityId the ID of the capability to retrieve
239
- * @param null|array $params
240
- * @param null|array|string $opts
241
- *
242
- * @throws \Stripe\Exception\ApiErrorException if the request fails
243
- *
244
- * @return \Stripe\Capability
245
- */
246
- public static function retrieveCapability($id, $capabilityId, $params = null, $opts = null)
247
- {
248
- return self::_retrieveNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts);
249
- }
250
-
251
- /**
252
- * @param string $id the ID of the account to which the capability belongs
253
- * @param string $capabilityId the ID of the capability to update
254
- * @param null|array $params
255
- * @param null|array|string $opts
256
- *
257
- * @throws \Stripe\Exception\ApiErrorException if the request fails
258
- *
259
- * @return \Stripe\Capability
260
- */
261
- public static function updateCapability($id, $capabilityId, $params = null, $opts = null)
262
- {
263
- return self::_updateNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts);
264
- }
265
-
266
- const PATH_EXTERNAL_ACCOUNTS = '/external_accounts';
267
-
268
- /**
269
- * @param string $id the ID of the account on which to retrieve the external accounts
270
- * @param null|array $params
271
- * @param null|array|string $opts
272
- *
273
- * @throws \Stripe\Exception\ApiErrorException if the request fails
274
  *
275
- * @return \Stripe\Collection the list of external accounts (BankAccount or Card)
276
  */
277
- public static function allExternalAccounts($id, $params = null, $opts = null)
278
  {
279
- return self::_allNestedResources($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts);
280
  }
281
 
282
  /**
283
- * @param string $id the ID of the account on which to create the external account
284
- * @param null|array $params
285
- * @param null|array|string $opts
286
  *
287
- * @throws \Stripe\Exception\ApiErrorException if the request fails
288
- *
289
- * @return \Stripe\BankAccount|\Stripe\Card
290
  */
291
- public static function createExternalAccount($id, $params = null, $opts = null)
292
  {
293
- return self::_createNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts);
294
  }
295
 
296
  /**
297
- * @param string $id the ID of the account to which the external account belongs
298
- * @param string $externalAccountId the ID of the external account to delete
299
- * @param null|array $params
300
- * @param null|array|string $opts
301
- *
302
- * @throws \Stripe\Exception\ApiErrorException if the request fails
303
  *
304
- * @return \Stripe\BankAccount|\Stripe\Card
305
  */
306
- public static function deleteExternalAccount($id, $externalAccountId, $params = null, $opts = null)
307
  {
308
- return self::_deleteNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
309
  }
310
 
311
  /**
312
- * @param string $id the ID of the account to which the external account belongs
313
- * @param string $externalAccountId the ID of the external account to retrieve
314
- * @param null|array $params
315
- * @param null|array|string $opts
316
  *
317
- * @throws \Stripe\Exception\ApiErrorException if the request fails
318
- *
319
- * @return \Stripe\BankAccount|\Stripe\Card
320
  */
321
- public static function retrieveExternalAccount($id, $externalAccountId, $params = null, $opts = null)
322
  {
323
- return self::_retrieveNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
324
  }
325
 
326
  /**
327
- * @param string $id the ID of the account to which the external account belongs
328
- * @param string $externalAccountId the ID of the external account to update
329
- * @param null|array $params
330
- * @param null|array|string $opts
331
- *
332
- * @throws \Stripe\Exception\ApiErrorException if the request fails
333
  *
334
- * @return \Stripe\BankAccount|\Stripe\Card
335
  */
336
- public static function updateExternalAccount($id, $externalAccountId, $params = null, $opts = null)
337
- {
338
- return self::_updateNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
339
- }
340
-
341
- const PATH_LOGIN_LINKS = '/login_links';
342
-
343
- /**
344
- * @param string $id the ID of the account on which to create the login link
345
- * @param null|array $params
346
- * @param null|array|string $opts
347
- *
348
- * @throws \Stripe\Exception\ApiErrorException if the request fails
349
- *
350
- * @return \Stripe\LoginLink
351
- */
352
- public static function createLoginLink($id, $params = null, $opts = null)
353
- {
354
- return self::_createNestedResource($id, static::PATH_LOGIN_LINKS, $params, $opts);
355
- }
356
-
357
- const PATH_PERSONS = '/persons';
358
-
359
- /**
360
- * @param string $id the ID of the account on which to retrieve the persons
361
- * @param null|array $params
362
- * @param null|array|string $opts
363
- *
364
- * @throws \Stripe\Exception\ApiErrorException if the request fails
365
- *
366
- * @return \Stripe\Collection the list of persons
367
- */
368
- public static function allPersons($id, $params = null, $opts = null)
369
- {
370
- return self::_allNestedResources($id, static::PATH_PERSONS, $params, $opts);
371
- }
372
-
373
- /**
374
- * @param string $id the ID of the account on which to create the person
375
- * @param null|array $params
376
- * @param null|array|string $opts
377
- *
378
- * @throws \Stripe\Exception\ApiErrorException if the request fails
379
- *
380
- * @return \Stripe\Person
381
- */
382
- public static function createPerson($id, $params = null, $opts = null)
383
- {
384
- return self::_createNestedResource($id, static::PATH_PERSONS, $params, $opts);
385
- }
386
-
387
- /**
388
- * @param string $id the ID of the account to which the person belongs
389
- * @param string $personId the ID of the person to delete
390
- * @param null|array $params
391
- * @param null|array|string $opts
392
- *
393
- * @throws \Stripe\Exception\ApiErrorException if the request fails
394
- *
395
- * @return \Stripe\Person
396
- */
397
- public static function deletePerson($id, $personId, $params = null, $opts = null)
398
- {
399
- return self::_deleteNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
400
- }
401
-
402
- /**
403
- * @param string $id the ID of the account to which the person belongs
404
- * @param string $personId the ID of the person to retrieve
405
- * @param null|array $params
406
- * @param null|array|string $opts
407
- *
408
- * @throws \Stripe\Exception\ApiErrorException if the request fails
409
- *
410
- * @return \Stripe\Person
411
- */
412
- public static function retrievePerson($id, $personId, $params = null, $opts = null)
413
  {
414
- return self::_retrieveNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
 
 
 
415
  }
416
 
417
  /**
418
- * @param string $id the ID of the account to which the person belongs
419
- * @param string $personId the ID of the person to update
420
- * @param null|array $params
421
- * @param null|array|string $opts
422
- *
423
- * @throws \Stripe\Exception\ApiErrorException if the request fails
424
  *
425
- * @return \Stripe\Person
426
  */
427
- public static function updatePerson($id, $personId, $params = null, $opts = null)
428
  {
429
- return self::_updateNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
430
  }
431
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Account
 
 
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $business_logo
11
+ * @property string $business_name
12
+ * @property mixed $business_url
13
+ * @property bool $charges_enabled
14
+ * @property string $country
15
+ * @property bool $debit_negative_balances
16
+ * @property mixed $decline_charge_on
17
+ * @property string $default_currency
18
+ * @property bool $details_submitted
19
+ * @property string $display_name
20
+ * @property string $email
21
+ * @property mixed $external_accounts
22
+ * @property mixed $legal_entity
23
+ * @property bool $managed
24
+ * @property mixed $product_description
25
+ * @property mixed $statement_descriptor
26
+ * @property mixed $support_email
27
+ * @property mixed $support_phone
28
+ * @property string $timezone
29
+ * @property mixed $tos_acceptance
30
+ * @property mixed $transfer_schedule
31
+ * @property bool $transfers_enabled
32
+ * @property mixed $verification
33
+ * @property mixed $keys
34
  *
35
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  */
37
  class Account extends ApiResource
38
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  public function instanceUrl()
40
  {
41
+ if ($this['id'] === null) {
42
  return '/v1/account';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  } else {
44
+ return parent::instanceUrl();
 
 
 
 
 
45
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
47
 
48
  /**
49
+ * @param string|null $id
50
+ * @param array|string|null $opts
 
51
  *
52
+ * @return Account
 
 
53
  */
54
  public static function retrieve($id = null, $opts = null)
55
  {
56
+ if (!$opts && is_string($id) && substr($id, 0, 3) === 'sk_') {
57
  $opts = $id;
58
  $id = null;
59
  }
 
60
  return self::_retrieve($id, $opts);
61
  }
62
 
63
  /**
64
+ * @param array|null $params
65
+ * @param array|string|null $opts
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  *
67
+ * @return Account
68
  */
69
+ public static function create($params = null, $opts = null)
70
  {
71
+ return self::_create($params, $opts);
72
  }
73
 
74
  /**
75
+ * @param string $id The ID of the account to update.
76
+ * @param array|null $params
77
+ * @param array|string|null $options
78
  *
79
+ * @return Account The updated account.
 
 
80
  */
81
+ public static function update($id, $params = null, $options = null)
82
  {
83
+ return self::_update($id, $params, $options);
84
  }
85
 
86
  /**
87
+ * @param array|string|null $opts
 
 
 
 
 
88
  *
89
+ * @return Account
90
  */
91
+ public function save($opts = null)
92
  {
93
+ return $this->_save($opts);
94
  }
95
 
96
  /**
97
+ * @param array|null $params
98
+ * @param array|string|null $opts
 
 
99
  *
100
+ * @return Account The deleted account.
 
 
101
  */
102
+ public function delete($params = null, $opts = null)
103
  {
104
+ return $this->_delete($params, $opts);
105
  }
106
 
107
  /**
108
+ * @param array|null $params
109
+ * @param array|string|null $opts
 
 
 
 
110
  *
111
+ * @return Account The rejected account.
112
  */
113
+ public function reject($params = null, $opts = null)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  {
115
+ $url = $this->instanceUrl() . '/reject';
116
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
117
+ $this->refreshFrom($response, $opts);
118
+ return $this;
119
  }
120
 
121
  /**
122
+ * @param array|null $params
123
+ * @param array|string|null $opts
 
 
 
 
124
  *
125
+ * @return Collection of Accounts
126
  */
127
+ public static function all($params = null, $opts = null)
128
  {
129
+ return self::_all($params, $opts);
130
  }
131
  }
lib/stripe/lib/AccountLink.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * Account Links are the means by which a Connect platform grants a connected
9
- * account permission to access Stripe-hosted applications, such as Connect
10
- * Onboarding.
11
- *
12
- * Related guide: <a
13
- * href="https://stripe.com/docs/connect/connect-onboarding">Connect
14
- * Onboarding</a>.
15
- *
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
18
- * @property int $expires_at The timestamp at which this account link will expire.
19
- * @property string $url The URL for the account link.
20
- */
21
- class AccountLink extends ApiResource
22
- {
23
- const OBJECT_NAME = 'account_link';
24
-
25
- use ApiOperations\Create;
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/AlipayAccount.php CHANGED
@@ -3,73 +3,11 @@
3
  namespace Stripe;
4
 
5
  /**
6
- * Class AlipayAccount.
7
  *
8
- * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
9
- * @see https://stripe.com/docs/sources/alipay
10
  */
11
- class AlipayAccount extends ApiResource
12
  {
13
- const OBJECT_NAME = 'alipay_account';
14
 
15
- use ApiOperations\Delete;
16
- use ApiOperations\Update;
17
-
18
- /**
19
- * @return string The instance URL for this resource. It needs to be special
20
- * cased because it doesn't fit into the standard resource pattern.
21
- */
22
- public function instanceUrl()
23
- {
24
- if ($this['customer']) {
25
- $base = Customer::classUrl();
26
- $parent = $this['customer'];
27
- $path = 'sources';
28
- } else {
29
- $msg = 'Alipay accounts cannot be accessed without a customer ID.';
30
-
31
- throw new Exception\UnexpectedValueException($msg);
32
- }
33
- $parentExtn = \urlencode(Util\Util::utf8($parent));
34
- $extn = \urlencode(Util\Util::utf8($this['id']));
35
-
36
- return "{$base}/{$parentExtn}/{$path}/{$extn}";
37
- }
38
-
39
- /**
40
- * @param array|string $_id
41
- * @param null|array|string $_opts
42
- *
43
- * @throws \Stripe\Exception\BadMethodCallException
44
- *
45
- * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
46
- * @see https://stripe.com/docs/sources/alipay
47
- */
48
- public static function retrieve($_id, $_opts = null)
49
- {
50
- $msg = 'Alipay accounts cannot be retrieved without a customer ID. ' .
51
- 'Retrieve an Alipay account using `Customer::retrieveSource(' .
52
- "'customer_id', 'alipay_account_id')`.";
53
-
54
- throw new Exception\BadMethodCallException($msg);
55
- }
56
-
57
- /**
58
- * @param string $_id
59
- * @param null|array $_params
60
- * @param null|array|string $_options
61
- *
62
- * @throws \Stripe\Exception\BadMethodCallException
63
- *
64
- * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
65
- * @see https://stripe.com/docs/sources/alipay
66
- */
67
- public static function update($_id, $_params = null, $_options = null)
68
- {
69
- $msg = 'Alipay accounts cannot be updated without a customer ID. ' .
70
- 'Update an Alipay account using `Customer::updateSource(' .
71
- "'customer_id', 'alipay_account_id', \$updateParams)`.";
72
-
73
- throw new Exception\BadMethodCallException($msg);
74
- }
75
  }
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class AlipayAccount
7
  *
8
+ * @package Stripe
 
9
  */
10
+ class AlipayAccount extends ExternalAccount
11
  {
 
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  }
lib/stripe/lib/ApiOperations/All.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\ApiOperations;
4
-
5
- /**
6
- * Trait for listable resources. Adds a `all()` static method to the class.
7
- *
8
- * This trait should only be applied to classes that derive from StripeObject.
9
- */
10
- trait All
11
- {
12
- /**
13
- * @param null|array $params
14
- * @param null|array|string $opts
15
- *
16
- * @throws \Stripe\Exception\ApiErrorException if the request fails
17
- *
18
- * @return \Stripe\Collection of ApiResources
19
- */
20
- public static function all($params = null, $opts = null)
21
- {
22
- self::_validateParams($params);
23
- $url = static::classUrl();
24
-
25
- list($response, $opts) = static::_staticRequest('get', $url, $params, $opts);
26
- $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
27
- if (!($obj instanceof \Stripe\Collection)) {
28
- throw new \Stripe\Exception\UnexpectedValueException(
29
- 'Expected type ' . \Stripe\Collection::class . ', got "' . \get_class($obj) . '" instead.'
30
- );
31
- }
32
- $obj->setLastResponse($response);
33
- $obj->setFilters($params);
34
-
35
- return $obj;
36
- }
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApiOperations/Create.php DELETED
@@ -1,31 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\ApiOperations;
4
-
5
- /**
6
- * Trait for creatable resources. Adds a `create()` static method to the class.
7
- *
8
- * This trait should only be applied to classes that derive from StripeObject.
9
- */
10
- trait Create
11
- {
12
- /**
13
- * @param null|array $params
14
- * @param null|array|string $options
15
- *
16
- * @throws \Stripe\Exception\ApiErrorException if the request fails
17
- *
18
- * @return static the created resource
19
- */
20
- public static function create($params = null, $options = null)
21
- {
22
- self::_validateParams($params);
23
- $url = static::classUrl();
24
-
25
- list($response, $opts) = static::_staticRequest('post', $url, $params, $options);
26
- $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
27
- $obj->setLastResponse($response);
28
-
29
- return $obj;
30
- }
31
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApiOperations/Delete.php DELETED
@@ -1,30 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\ApiOperations;
4
-
5
- /**
6
- * Trait for deletable resources. Adds a `delete()` method to the class.
7
- *
8
- * This trait should only be applied to classes that derive from StripeObject.
9
- */
10
- trait Delete
11
- {
12
- /**
13
- * @param null|array $params
14
- * @param null|array|string $opts
15
- *
16
- * @throws \Stripe\Exception\ApiErrorException if the request fails
17
- *
18
- * @return static the deleted resource
19
- */
20
- public function delete($params = null, $opts = null)
21
- {
22
- self::_validateParams($params);
23
-
24
- $url = $this->instanceUrl();
25
- list($response, $opts) = $this->_request('delete', $url, $params, $opts);
26
- $this->refreshFrom($response, $opts);
27
-
28
- return $this;
29
- }
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApiOperations/NestedResource.php DELETED
@@ -1,135 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\ApiOperations;
4
-
5
- /**
6
- * Trait for resources that have nested resources.
7
- *
8
- * This trait should only be applied to classes that derive from StripeObject.
9
- */
10
- trait NestedResource
11
- {
12
- /**
13
- * @param string $method
14
- * @param string $url
15
- * @param null|array $params
16
- * @param null|array|string $options
17
- *
18
- * @return \Stripe\StripeObject
19
- */
20
- protected static function _nestedResourceOperation($method, $url, $params = null, $options = null)
21
- {
22
- self::_validateParams($params);
23
-
24
- list($response, $opts) = static::_staticRequest($method, $url, $params, $options);
25
- $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
26
- $obj->setLastResponse($response);
27
-
28
- return $obj;
29
- }
30
-
31
- /**
32
- * @param string $id
33
- * @param string $nestedPath
34
- * @param null|string $nestedId
35
- *
36
- * @return string
37
- */
38
- protected static function _nestedResourceUrl($id, $nestedPath, $nestedId = null)
39
- {
40
- $url = static::resourceUrl($id) . $nestedPath;
41
- if (null !== $nestedId) {
42
- $url .= "/{$nestedId}";
43
- }
44
-
45
- return $url;
46
- }
47
-
48
- /**
49
- * @param string $id
50
- * @param string $nestedPath
51
- * @param null|array $params
52
- * @param null|array|string $options
53
- *
54
- * @throws \Stripe\Exception\ApiErrorException if the request fails
55
- *
56
- * @return \Stripe\StripeObject
57
- */
58
- protected static function _createNestedResource($id, $nestedPath, $params = null, $options = null)
59
- {
60
- $url = static::_nestedResourceUrl($id, $nestedPath);
61
-
62
- return self::_nestedResourceOperation('post', $url, $params, $options);
63
- }
64
-
65
- /**
66
- * @param string $id
67
- * @param string $nestedPath
68
- * @param null|string $nestedId
69
- * @param null|array $params
70
- * @param null|array|string $options
71
- *
72
- * @throws \Stripe\Exception\ApiErrorException if the request fails
73
- *
74
- * @return \Stripe\StripeObject
75
- */
76
- protected static function _retrieveNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
77
- {
78
- $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
79
-
80
- return self::_nestedResourceOperation('get', $url, $params, $options);
81
- }
82
-
83
- /**
84
- * @param string $id
85
- * @param string $nestedPath
86
- * @param null|string $nestedId
87
- * @param null|array $params
88
- * @param null|array|string $options
89
- *
90
- * @throws \Stripe\Exception\ApiErrorException if the request fails
91
- *
92
- * @return \Stripe\StripeObject
93
- */
94
- protected static function _updateNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
95
- {
96
- $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
97
-
98
- return self::_nestedResourceOperation('post', $url, $params, $options);
99
- }
100
-
101
- /**
102
- * @param string $id
103
- * @param string $nestedPath
104
- * @param null|string $nestedId
105
- * @param null|array $params
106
- * @param null|array|string $options
107
- *
108
- * @throws \Stripe\Exception\ApiErrorException if the request fails
109
- *
110
- * @return \Stripe\StripeObject
111
- */
112
- protected static function _deleteNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
113
- {
114
- $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
115
-
116
- return self::_nestedResourceOperation('delete', $url, $params, $options);
117
- }
118
-
119
- /**
120
- * @param string $id
121
- * @param string $nestedPath
122
- * @param null|array $params
123
- * @param null|array|string $options
124
- *
125
- * @throws \Stripe\Exception\ApiErrorException if the request fails
126
- *
127
- * @return \Stripe\StripeObject
128
- */
129
- protected static function _allNestedResources($id, $nestedPath, $params = null, $options = null)
130
- {
131
- $url = static::_nestedResourceUrl($id, $nestedPath);
132
-
133
- return self::_nestedResourceOperation('get', $url, $params, $options);
134
- }
135
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApiOperations/Request.php DELETED
@@ -1,68 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\ApiOperations;
4
-
5
- /**
6
- * Trait for resources that need to make API requests.
7
- *
8
- * This trait should only be applied to classes that derive from StripeObject.
9
- */
10
- trait Request
11
- {
12
- /**
13
- * @param null|array|mixed $params The list of parameters to validate
14
- *
15
- * @throws \Stripe\Exception\InvalidArgumentException if $params exists and is not an array
16
- */
17
- protected static function _validateParams($params = null)
18
- {
19
- if ($params && !\is_array($params)) {
20
- $message = 'You must pass an array as the first argument to Stripe API '
21
- . 'method calls. (HINT: an example call to create a charge '
22
- . "would be: \"Stripe\\Charge::create(['amount' => 100, "
23
- . "'currency' => 'usd', 'source' => 'tok_1234'])\")";
24
-
25
- throw new \Stripe\Exception\InvalidArgumentException($message);
26
- }
27
- }
28
-
29
- /**
30
- * @param string $method HTTP method ('get', 'post', etc.)
31
- * @param string $url URL for the request
32
- * @param array $params list of parameters for the request
33
- * @param null|array|string $options
34
- *
35
- * @throws \Stripe\Exception\ApiErrorException if the request fails
36
- *
37
- * @return array tuple containing (the JSON response, $options)
38
- */
39
- protected function _request($method, $url, $params = [], $options = null)
40
- {
41
- $opts = $this->_opts->merge($options);
42
- list($resp, $options) = static::_staticRequest($method, $url, $params, $opts);
43
- $this->setLastResponse($resp);
44
-
45
- return [$resp->json, $options];
46
- }
47
-
48
- /**
49
- * @param string $method HTTP method ('get', 'post', etc.)
50
- * @param string $url URL for the request
51
- * @param array $params list of parameters for the request
52
- * @param null|array|string $options
53
- *
54
- * @throws \Stripe\Exception\ApiErrorException if the request fails
55
- *
56
- * @return array tuple containing (the JSON response, $options)
57
- */
58
- protected static function _staticRequest($method, $url, $params, $options)
59
- {
60
- $opts = \Stripe\Util\RequestOptions::parse($options);
61
- $baseUrl = isset($opts->apiBase) ? $opts->apiBase : static::baseUrl();
62
- $requestor = new \Stripe\ApiRequestor($opts->apiKey, $baseUrl);
63
- list($response, $opts->apiKey) = $requestor->request($method, $url, $params, $opts->headers);
64
- $opts->discardNonPersistentHeaders();
65
-
66
- return [$response, $opts];
67
- }
68
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApiOperations/Retrieve.php DELETED
@@ -1,30 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\ApiOperations;
4
-
5
- /**
6
- * Trait for retrievable resources. Adds a `retrieve()` static method to the
7
- * class.
8
- *
9
- * This trait should only be applied to classes that derive from StripeObject.
10
- */
11
- trait Retrieve
12
- {
13
- /**
14
- * @param array|string $id the ID of the API resource to retrieve,
15
- * or an options array containing an `id` key
16
- * @param null|array|string $opts
17
- *
18
- * @throws \Stripe\Exception\ApiErrorException if the request fails
19
- *
20
- * @return static
21
- */
22
- public static function retrieve($id, $opts = null)
23
- {
24
- $opts = \Stripe\Util\RequestOptions::parse($opts);
25
- $instance = new static($id, $opts);
26
- $instance->refresh();
27
-
28
- return $instance;
29
- }
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApiOperations/Update.php DELETED
@@ -1,52 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\ApiOperations;
4
-
5
- /**
6
- * Trait for updatable resources. Adds an `update()` static method and a
7
- * `save()` method to the class.
8
- *
9
- * This trait should only be applied to classes that derive from StripeObject.
10
- */
11
- trait Update
12
- {
13
- /**
14
- * @param string $id the ID of the resource to update
15
- * @param null|array $params
16
- * @param null|array|string $opts
17
- *
18
- * @throws \Stripe\Exception\ApiErrorException if the request fails
19
- *
20
- * @return static the updated resource
21
- */
22
- public static function update($id, $params = null, $opts = null)
23
- {
24
- self::_validateParams($params);
25
- $url = static::resourceUrl($id);
26
-
27
- list($response, $opts) = static::_staticRequest('post', $url, $params, $opts);
28
- $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
29
- $obj->setLastResponse($response);
30
-
31
- return $obj;
32
- }
33
-
34
- /**
35
- * @param null|array|string $opts
36
- *
37
- * @throws \Stripe\Exception\ApiErrorException if the request fails
38
- *
39
- * @return static the saved resource
40
- */
41
- public function save($opts = null)
42
- {
43
- $params = $this->serializeParameters();
44
- if (\count($params) > 0) {
45
- $url = $this->instanceUrl();
46
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
47
- $this->refreshFrom($response, $opts);
48
- }
49
-
50
- return $this;
51
- }
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApiRequestor.php CHANGED
@@ -3,38 +3,18 @@
3
  namespace Stripe;
4
 
5
  /**
6
- * Class ApiRequestor.
 
 
7
  */
8
  class ApiRequestor
9
  {
10
- /**
11
- * @var null|string
12
- */
13
  private $_apiKey;
14
 
15
- /**
16
- * @var string
17
- */
18
  private $_apiBase;
19
 
20
- /**
21
- * @var HttpClient\ClientInterface
22
- */
23
  private static $_httpClient;
24
 
25
- /**
26
- * @var RequestTelemetry
27
- */
28
- private static $requestTelemetry;
29
-
30
- private static $OPTIONS_KEYS = ['api_key', 'idempotency_key', 'stripe_account', 'stripe_version', 'api_base'];
31
-
32
- /**
33
- * ApiRequestor constructor.
34
- *
35
- * @param null|string $apiKey
36
- * @param null|string $apiBase
37
- */
38
  public function __construct($apiKey = null, $apiBase = null)
39
  {
40
  $this->_apiKey = $apiKey;
@@ -44,301 +24,99 @@ class ApiRequestor
44
  $this->_apiBase = $apiBase;
45
  }
46
 
47
- /**
48
- * Creates a telemetry json blob for use in 'X-Stripe-Client-Telemetry' headers.
49
- *
50
- * @static
51
- *
52
- * @param RequestTelemetry $requestTelemetry
53
- *
54
- * @return string
55
- */
56
- private static function _telemetryJson($requestTelemetry)
57
- {
58
- $payload = [
59
- 'last_request_metrics' => [
60
- 'request_id' => $requestTelemetry->requestId,
61
- 'request_duration_ms' => $requestTelemetry->requestDuration,
62
- ],
63
- ];
64
-
65
- $result = \json_encode($payload);
66
- if (false !== $result) {
67
- return $result;
68
- }
69
- Stripe::getLogger()->error('Serializing telemetry payload failed!');
70
-
71
- return '{}';
72
- }
73
-
74
- /**
75
- * @static
76
- *
77
- * @param ApiResource|array|bool|mixed $d
78
- *
79
- * @return ApiResource|array|mixed|string
80
- */
81
  private static function _encodeObjects($d)
82
  {
83
  if ($d instanceof ApiResource) {
84
  return Util\Util::utf8($d->id);
85
- }
86
- if (true === $d) {
87
  return 'true';
88
- }
89
- if (false === $d) {
90
  return 'false';
91
- }
92
- if (\is_array($d)) {
93
- $res = [];
94
  foreach ($d as $k => $v) {
95
  $res[$k] = self::_encodeObjects($v);
96
  }
97
-
98
  return $res;
 
 
99
  }
100
-
101
- return Util\Util::utf8($d);
102
  }
103
 
104
  /**
105
- * @param string $method
106
- * @param string $url
107
- * @param null|array $params
108
- * @param null|array $headers
109
- *
110
- * @throws Exception\ApiErrorException
111
  *
112
- * @return array tuple containing (ApiReponse, API key)
 
113
  */
114
  public function request($method, $url, $params = null, $headers = null)
115
  {
116
- $params = $params ?: [];
117
- $headers = $headers ?: [];
 
 
 
 
118
  list($rbody, $rcode, $rheaders, $myApiKey) =
119
  $this->_requestRaw($method, $url, $params, $headers);
120
  $json = $this->_interpretResponse($rbody, $rcode, $rheaders);
121
  $resp = new ApiResponse($rbody, $rcode, $rheaders, $json);
122
-
123
- return [$resp, $myApiKey];
124
  }
125
 
126
  /**
127
- * @param string $rbody a JSON string
128
  * @param int $rcode
129
  * @param array $rheaders
130
  * @param array $resp
131
  *
132
- * @throws Exception\UnexpectedValueException
133
- * @throws Exception\ApiErrorException
 
 
 
 
 
 
134
  */
135
- public function handleErrorResponse($rbody, $rcode, $rheaders, $resp)
136
  {
137
- if (!\is_array($resp) || !isset($resp['error'])) {
138
- $msg = "Invalid response object from API: {$rbody} "
139
- . "(HTTP response code was {$rcode})";
140
-
141
- throw new Exception\UnexpectedValueException($msg);
142
  }
143
 
144
- $errorData = $resp['error'];
145
-
146
- $error = null;
147
- if (\is_string($errorData)) {
148
- $error = self::_specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorData);
149
- }
150
- if (!$error) {
151
- $error = self::_specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData);
152
- }
153
-
154
- throw $error;
155
- }
156
-
157
- /**
158
- * @static
159
- *
160
- * @param string $rbody
161
- * @param int $rcode
162
- * @param array $rheaders
163
- * @param array $resp
164
- * @param array $errorData
165
- *
166
- * @return Exception\ApiErrorException
167
- */
168
- private static function _specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData)
169
- {
170
- $msg = isset($errorData['message']) ? $errorData['message'] : null;
171
- $param = isset($errorData['param']) ? $errorData['param'] : null;
172
- $code = isset($errorData['code']) ? $errorData['code'] : null;
173
- $type = isset($errorData['type']) ? $errorData['type'] : null;
174
- $declineCode = isset($errorData['decline_code']) ? $errorData['decline_code'] : null;
175
 
176
  switch ($rcode) {
177
  case 400:
178
  // 'rate_limit' code is deprecated, but left here for backwards compatibility
179
  // for API versions earlier than 2015-09-08
180
- if ('rate_limit' === $code) {
181
- return Exception\RateLimitException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $param);
182
- }
183
- if ('idempotency_error' === $type) {
184
- return Exception\IdempotencyException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code);
185
  }
186
 
187
- // no break
188
  case 404:
189
- return Exception\InvalidRequestException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $param);
190
-
191
  case 401:
192
- return Exception\AuthenticationException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code);
193
-
194
  case 402:
195
- return Exception\CardException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $declineCode, $param);
196
-
197
- case 403:
198
- return Exception\PermissionException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code);
199
-
200
  case 429:
201
- return Exception\RateLimitException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code, $param);
202
-
203
  default:
204
- return Exception\UnknownApiErrorException::factory($msg, $rcode, $rbody, $resp, $rheaders, $code);
205
  }
206
  }
207
 
208
- /**
209
- * @static
210
- *
211
- * @param bool|string $rbody
212
- * @param int $rcode
213
- * @param array $rheaders
214
- * @param array $resp
215
- * @param string $errorCode
216
- *
217
- * @return Exception\OAuth\OAuthErrorException
218
- */
219
- private static function _specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorCode)
220
- {
221
- $description = isset($resp['error_description']) ? $resp['error_description'] : $errorCode;
222
-
223
- switch ($errorCode) {
224
- case 'invalid_client':
225
- return Exception\OAuth\InvalidClientException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode);
226
-
227
- case 'invalid_grant':
228
- return Exception\OAuth\InvalidGrantException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode);
229
-
230
- case 'invalid_request':
231
- return Exception\OAuth\InvalidRequestException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode);
232
-
233
- case 'invalid_scope':
234
- return Exception\OAuth\InvalidScopeException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode);
235
-
236
- case 'unsupported_grant_type':
237
- return Exception\OAuth\UnsupportedGrantTypeException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode);
238
-
239
- case 'unsupported_response_type':
240
- return Exception\OAuth\UnsupportedResponseTypeException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode);
241
-
242
- default:
243
- return Exception\OAuth\UnknownOAuthErrorException::factory($description, $rcode, $rbody, $resp, $rheaders, $errorCode);
244
- }
245
- }
246
-
247
- /**
248
- * @static
249
- *
250
- * @param null|array $appInfo
251
- *
252
- * @return null|string
253
- */
254
- private static function _formatAppInfo($appInfo)
255
- {
256
- if (null !== $appInfo) {
257
- $string = $appInfo['name'];
258
- if (null !== $appInfo['version']) {
259
- $string .= '/' . $appInfo['version'];
260
- }
261
- if (null !== $appInfo['url']) {
262
- $string .= ' (' . $appInfo['url'] . ')';
263
- }
264
-
265
- return $string;
266
- }
267
-
268
- return null;
269
- }
270
-
271
- /**
272
- * @static
273
- *
274
- * @param string $disabledFunctionsOutput - String value of the 'disable_function' setting, as output by \ini_get('disable_functions')
275
- * @param string $functionName - Name of the function we are interesting in seeing whether or not it is disabled
276
- * @param mixed $disableFunctionsOutput
277
- *
278
- * @return bool
279
- */
280
- private static function _isDisabled($disableFunctionsOutput, $functionName)
281
- {
282
- $disabledFunctions = \explode(',', $disableFunctionsOutput);
283
- foreach ($disabledFunctions as $disabledFunction) {
284
- if (\trim($disabledFunction) === $functionName) {
285
- return true;
286
- }
287
- }
288
-
289
- return false;
290
- }
291
-
292
- /**
293
- * @static
294
- *
295
- * @param string $apiKey
296
- * @param null $clientInfo
297
- *
298
- * @return array
299
- */
300
- private static function _defaultHeaders($apiKey, $clientInfo = null)
301
- {
302
- $uaString = 'Stripe/v1 PhpBindings/' . Stripe::VERSION;
303
-
304
- $langVersion = \PHP_VERSION;
305
- $uname_disabled = static::_isDisabled(\ini_get('disable_functions'), 'php_uname');
306
- $uname = $uname_disabled ? '(disabled)' : \php_uname();
307
-
308
- $appInfo = Stripe::getAppInfo();
309
- $ua = [
310
- 'bindings_version' => Stripe::VERSION,
311
- 'lang' => 'php',
312
- 'lang_version' => $langVersion,
313
- 'publisher' => 'stripe',
314
- 'uname' => $uname,
315
- ];
316
- if ($clientInfo) {
317
- $ua = \array_merge($clientInfo, $ua);
318
- }
319
- if (null !== $appInfo) {
320
- $uaString .= ' ' . self::_formatAppInfo($appInfo);
321
- $ua['application'] = $appInfo;
322
- }
323
-
324
- return [
325
- 'X-Stripe-Client-User-Agent' => \json_encode($ua),
326
- 'User-Agent' => $uaString,
327
- 'Authorization' => 'Bearer ' . $apiKey,
328
- ];
329
- }
330
-
331
- /**
332
- * @param string $method
333
- * @param string $url
334
- * @param array $params
335
- * @param array $headers
336
- *
337
- * @throws Exception\AuthenticationException
338
- * @throws Exception\ApiConnectionException
339
- *
340
- * @return array
341
- */
342
  private function _requestRaw($method, $url, $params, $headers)
343
  {
344
  $myApiKey = $this->_apiKey;
@@ -351,36 +129,25 @@ class ApiRequestor
351
  . '"Stripe::setApiKey(<API-KEY>)". You can generate API keys from '
352
  . 'the Stripe web interface. See https://stripe.com/api for '
353
  . 'details, or email support@stripe.com if you have any questions.';
354
-
355
- throw new Exception\AuthenticationException($msg);
356
- }
357
-
358
- // Clients can supply arbitrary additional keys to be included in the
359
- // X-Stripe-Client-User-Agent header via the optional getUserAgentInfo()
360
- // method
361
- $clientUAInfo = null;
362
- if (\method_exists($this->httpClient(), 'getUserAgentInfo')) {
363
- $clientUAInfo = $this->httpClient()->getUserAgentInfo();
364
- }
365
-
366
- if ($params && \is_array($params)) {
367
- $optionKeysInParams = \array_filter(
368
- static::$OPTIONS_KEYS,
369
- function ($key) use ($params) {
370
- return \array_key_exists($key, $params);
371
- }
372
- );
373
- if (\count($optionKeysInParams) > 0) {
374
- $message = \sprintf('Options found in $params: %s. Options should '
375
- . 'be passed in their own array after $params. (HINT: pass an '
376
- . 'empty array to $params if you do not have any.)', \implode(', ', $optionKeysInParams));
377
- \trigger_error($message, \E_USER_WARNING);
378
- }
379
  }
380
 
381
- $absUrl = $this->_apiBase . $url;
382
  $params = self::_encodeObjects($params);
383
- $defaultHeaders = $this->_defaultHeaders($myApiKey, $clientUAInfo);
 
 
 
 
 
 
 
 
 
 
 
 
 
384
  if (Stripe::$apiVersion) {
385
  $defaultHeaders['Stripe-Version'] = Stripe::$apiVersion;
386
  }
@@ -389,16 +156,13 @@ class ApiRequestor
389
  $defaultHeaders['Stripe-Account'] = Stripe::$accountId;
390
  }
391
 
392
- if (Stripe::$enableTelemetry && null !== self::$requestTelemetry) {
393
- $defaultHeaders['X-Stripe-Client-Telemetry'] = self::_telemetryJson(self::$requestTelemetry);
394
- }
395
-
396
  $hasFile = false;
 
397
  foreach ($params as $k => $v) {
398
- if (\is_resource($v)) {
399
  $hasFile = true;
400
- $params[$k] = self::_processResourceParam($v);
401
- } elseif ($v instanceof \CURLFile) {
402
  $hasFile = true;
403
  }
404
  }
@@ -409,15 +173,13 @@ class ApiRequestor
409
  $defaultHeaders['Content-Type'] = 'application/x-www-form-urlencoded';
410
  }
411
 
412
- $combinedHeaders = \array_merge($defaultHeaders, $headers);
413
- $rawHeaders = [];
414
 
415
  foreach ($combinedHeaders as $header => $value) {
416
  $rawHeaders[] = $header . ': ' . $value;
417
  }
418
 
419
- $requestStartMs = Util\Util::currentTimeMillis();
420
-
421
  list($rbody, $rcode, $rheaders) = $this->httpClient()->request(
422
  $method,
423
  $absUrl,
@@ -425,102 +187,58 @@ class ApiRequestor
425
  $params,
426
  $hasFile
427
  );
428
-
429
- if (isset($rheaders['request-id'])
430
- && \is_string($rheaders['request-id'])
431
- && \strlen($rheaders['request-id']) > 0) {
432
- self::$requestTelemetry = new RequestTelemetry(
433
- $rheaders['request-id'],
434
- Util\Util::currentTimeMillis() - $requestStartMs
435
- );
436
- }
437
-
438
- return [$rbody, $rcode, $rheaders, $myApiKey];
439
  }
440
 
441
- /**
442
- * @param resource $resource
443
- *
444
- * @throws Exception\InvalidArgumentException
445
- *
446
- * @return \CURLFile|string
447
- */
448
- private function _processResourceParam($resource)
449
  {
450
- if ('stream' !== \get_resource_type($resource)) {
451
- throw new Exception\InvalidArgumentException(
452
  'Attempted to upload a resource that is not a stream'
453
  );
454
  }
455
 
456
- $metaData = \stream_get_meta_data($resource);
457
- if ('plainfile' !== $metaData['wrapper_type']) {
458
- throw new Exception\InvalidArgumentException(
459
  'Only plainfile resource streams are supported'
460
  );
461
  }
462
 
463
- // We don't have the filename or mimetype, but the API doesn't care
464
- return new \CURLFile($metaData['uri']);
 
 
 
 
465
  }
466
 
467
- /**
468
- * @param string $rbody
469
- * @param int $rcode
470
- * @param array $rheaders
471
- *
472
- * @throws Exception\UnexpectedValueException
473
- * @throws Exception\ApiErrorException
474
- *
475
- * @return array
476
- */
477
  private function _interpretResponse($rbody, $rcode, $rheaders)
478
  {
479
- $resp = \json_decode($rbody, true);
480
- $jsonError = \json_last_error();
481
- if (null === $resp && \JSON_ERROR_NONE !== $jsonError) {
482
- $msg = "Invalid response body from API: {$rbody} "
483
- . "(HTTP response code was {$rcode}, json_last_error() was {$jsonError})";
484
-
485
- throw new Exception\UnexpectedValueException($msg, $rcode);
486
  }
487
 
488
  if ($rcode < 200 || $rcode >= 300) {
489
- $this->handleErrorResponse($rbody, $rcode, $rheaders, $resp);
490
  }
491
-
492
  return $resp;
493
  }
494
 
495
- /**
496
- * @static
497
- *
498
- * @param HttpClient\ClientInterface $client
499
- */
500
  public static function setHttpClient($client)
501
  {
502
  self::$_httpClient = $client;
503
  }
504
 
505
- /**
506
- * @static
507
- *
508
- * Resets any stateful telemetry data
509
- */
510
- public static function resetTelemetry()
511
- {
512
- self::$requestTelemetry = null;
513
- }
514
-
515
- /**
516
- * @return HttpClient\ClientInterface
517
- */
518
  private function httpClient()
519
  {
520
  if (!self::$_httpClient) {
521
  self::$_httpClient = HttpClient\CurlClient::instance();
522
  }
523
-
524
  return self::$_httpClient;
525
  }
526
  }
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class ApiRequestor
7
+ *
8
+ * @package Stripe
9
  */
10
  class ApiRequestor
11
  {
 
 
 
12
  private $_apiKey;
13
 
 
 
 
14
  private $_apiBase;
15
 
 
 
 
16
  private static $_httpClient;
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  public function __construct($apiKey = null, $apiBase = null)
19
  {
20
  $this->_apiKey = $apiKey;
24
  $this->_apiBase = $apiBase;
25
  }
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  private static function _encodeObjects($d)
28
  {
29
  if ($d instanceof ApiResource) {
30
  return Util\Util::utf8($d->id);
31
+ } elseif ($d === true) {
 
32
  return 'true';
33
+ } elseif ($d === false) {
 
34
  return 'false';
35
+ } elseif (is_array($d)) {
36
+ $res = array();
 
37
  foreach ($d as $k => $v) {
38
  $res[$k] = self::_encodeObjects($v);
39
  }
 
40
  return $res;
41
+ } else {
42
+ return Util\Util::utf8($d);
43
  }
 
 
44
  }
45
 
46
  /**
47
+ * @param string $method
48
+ * @param string $url
49
+ * @param array|null $params
50
+ * @param array|null $headers
 
 
51
  *
52
+ * @return array An array whose first element is an API response and second
53
+ * element is the API key used to make the request.
54
  */
55
  public function request($method, $url, $params = null, $headers = null)
56
  {
57
+ if (!$params) {
58
+ $params = array();
59
+ }
60
+ if (!$headers) {
61
+ $headers = array();
62
+ }
63
  list($rbody, $rcode, $rheaders, $myApiKey) =
64
  $this->_requestRaw($method, $url, $params, $headers);
65
  $json = $this->_interpretResponse($rbody, $rcode, $rheaders);
66
  $resp = new ApiResponse($rbody, $rcode, $rheaders, $json);
67
+ return array($resp, $myApiKey);
 
68
  }
69
 
70
  /**
71
+ * @param string $rbody A JSON string.
72
  * @param int $rcode
73
  * @param array $rheaders
74
  * @param array $resp
75
  *
76
+ * @throws Error\InvalidRequest if the error is caused by the user.
77
+ * @throws Error\Authentication if the error is caused by a lack of
78
+ * permissions.
79
+ * @throws Error\Card if the error is the error code is 402 (payment
80
+ * required)
81
+ * @throws Error\RateLimit if the error is caused by too many requests
82
+ * hitting the API.
83
+ * @throws Error\Api otherwise.
84
  */
85
+ public function handleApiError($rbody, $rcode, $rheaders, $resp)
86
  {
87
+ if (!is_array($resp) || !isset($resp['error'])) {
88
+ $msg = "Invalid response object from API: $rbody "
89
+ . "(HTTP response code was $rcode)";
90
+ throw new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
 
91
  }
92
 
93
+ $error = $resp['error'];
94
+ $msg = isset($error['message']) ? $error['message'] : null;
95
+ $param = isset($error['param']) ? $error['param'] : null;
96
+ $code = isset($error['code']) ? $error['code'] : null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
  switch ($rcode) {
99
  case 400:
100
  // 'rate_limit' code is deprecated, but left here for backwards compatibility
101
  // for API versions earlier than 2015-09-08
102
+ if ($code == 'rate_limit') {
103
+ throw new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
 
 
 
104
  }
105
 
106
+ // intentional fall-through
107
  case 404:
108
+ throw new Error\InvalidRequest($msg, $param, $rcode, $rbody, $resp, $rheaders);
 
109
  case 401:
110
+ throw new Error\Authentication($msg, $rcode, $rbody, $resp, $rheaders);
 
111
  case 402:
112
+ throw new Error\Card($msg, $param, $code, $rcode, $rbody, $resp, $rheaders);
 
 
 
 
113
  case 429:
114
+ throw new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
 
115
  default:
116
+ throw new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
117
  }
118
  }
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  private function _requestRaw($method, $url, $params, $headers)
121
  {
122
  $myApiKey = $this->_apiKey;
129
  . '"Stripe::setApiKey(<API-KEY>)". You can generate API keys from '
130
  . 'the Stripe web interface. See https://stripe.com/api for '
131
  . 'details, or email support@stripe.com if you have any questions.';
132
+ throw new Error\Authentication($msg);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  }
134
 
135
+ $absUrl = $this->_apiBase.$url;
136
  $params = self::_encodeObjects($params);
137
+ $langVersion = phpversion();
138
+ $uname = php_uname();
139
+ $ua = array(
140
+ 'bindings_version' => Stripe::VERSION,
141
+ 'lang' => 'php',
142
+ 'lang_version' => $langVersion,
143
+ 'publisher' => 'stripe',
144
+ 'uname' => $uname,
145
+ );
146
+ $defaultHeaders = array(
147
+ 'X-Stripe-Client-User-Agent' => json_encode($ua),
148
+ 'User-Agent' => 'Stripe/v1 PhpBindings/' . Stripe::VERSION,
149
+ 'Authorization' => 'Bearer ' . $myApiKey,
150
+ );
151
  if (Stripe::$apiVersion) {
152
  $defaultHeaders['Stripe-Version'] = Stripe::$apiVersion;
153
  }
156
  $defaultHeaders['Stripe-Account'] = Stripe::$accountId;
157
  }
158
 
 
 
 
 
159
  $hasFile = false;
160
+ $hasCurlFile = class_exists('\CURLFile', false);
161
  foreach ($params as $k => $v) {
162
+ if (is_resource($v)) {
163
  $hasFile = true;
164
+ $params[$k] = self::_processResourceParam($v, $hasCurlFile);
165
+ } elseif ($hasCurlFile && $v instanceof \CURLFile) {
166
  $hasFile = true;
167
  }
168
  }
173
  $defaultHeaders['Content-Type'] = 'application/x-www-form-urlencoded';
174
  }
175
 
176
+ $combinedHeaders = array_merge($defaultHeaders, $headers);
177
+ $rawHeaders = array();
178
 
179
  foreach ($combinedHeaders as $header => $value) {
180
  $rawHeaders[] = $header . ': ' . $value;
181
  }
182
 
 
 
183
  list($rbody, $rcode, $rheaders) = $this->httpClient()->request(
184
  $method,
185
  $absUrl,
187
  $params,
188
  $hasFile
189
  );
190
+ return array($rbody, $rcode, $rheaders, $myApiKey);
 
 
 
 
 
 
 
 
 
 
191
  }
192
 
193
+ private function _processResourceParam($resource, $hasCurlFile)
 
 
 
 
 
 
 
194
  {
195
+ if (get_resource_type($resource) !== 'stream') {
196
+ throw new Error\Api(
197
  'Attempted to upload a resource that is not a stream'
198
  );
199
  }
200
 
201
+ $metaData = stream_get_meta_data($resource);
202
+ if ($metaData['wrapper_type'] !== 'plainfile') {
203
+ throw new Error\Api(
204
  'Only plainfile resource streams are supported'
205
  );
206
  }
207
 
208
+ if ($hasCurlFile) {
209
+ // We don't have the filename or mimetype, but the API doesn't care
210
+ return new \CURLFile($metaData['uri']);
211
+ } else {
212
+ return '@'.$metaData['uri'];
213
+ }
214
  }
215
 
 
 
 
 
 
 
 
 
 
 
216
  private function _interpretResponse($rbody, $rcode, $rheaders)
217
  {
218
+ try {
219
+ $resp = json_decode($rbody, true);
220
+ } catch (Exception $e) {
221
+ $msg = "Invalid response body from API: $rbody "
222
+ . "(HTTP response code was $rcode)";
223
+ throw new Error\Api($msg, $rcode, $rbody);
 
224
  }
225
 
226
  if ($rcode < 200 || $rcode >= 300) {
227
+ $this->handleApiError($rbody, $rcode, $rheaders, $resp);
228
  }
 
229
  return $resp;
230
  }
231
 
 
 
 
 
 
232
  public static function setHttpClient($client)
233
  {
234
  self::$_httpClient = $client;
235
  }
236
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  private function httpClient()
238
  {
239
  if (!self::$_httpClient) {
240
  self::$_httpClient = HttpClient\CurlClient::instance();
241
  }
 
242
  return self::$_httpClient;
243
  }
244
  }
lib/stripe/lib/ApiResource.php CHANGED
@@ -3,52 +3,21 @@
3
  namespace Stripe;
4
 
5
  /**
6
- * Class ApiResource.
 
 
7
  */
8
  abstract class ApiResource extends StripeObject
9
  {
10
- use ApiOperations\Request;
11
 
12
- /**
13
- * @return \Stripe\Util\Set A list of fields that can be their own type of
14
- * API resource (say a nested card under an account for example), and if
15
- * that resource is set, it should be transmitted to the API on a create or
16
- * update. Doing so is not the default behavior because API resources
17
- * should normally be persisted on their own RESTful endpoints.
18
- */
19
- public static function getSavedNestedResources()
20
- {
21
- static $savedNestedResources = null;
22
- if (null === $savedNestedResources) {
23
- $savedNestedResources = new Util\Set();
24
- }
25
-
26
- return $savedNestedResources;
27
- }
28
-
29
- /**
30
- * @var bool A flag that can be set a behavior that will cause this
31
- * resource to be encoded and sent up along with an update of its parent
32
- * resource. This is usually not desirable because resources are updated
33
- * individually on their own endpoints, but there are certain cases,
34
- * replacing a customer's source for example, where this is allowed.
35
- */
36
- public $saveWithParent = false;
37
-
38
- public function __set($k, $v)
39
  {
40
- parent::__set($k, $v);
41
- $v = $this->{$k};
42
- if ((static::getSavedNestedResources()->includes($k))
43
- && ($v instanceof ApiResource)) {
44
- $v->saveWithParent = true;
45
- }
46
  }
47
 
48
  /**
49
- * @throws Exception\ApiErrorException
50
- *
51
- * @return ApiResource the refreshed resource
52
  */
53
  public function refresh()
54
  {
@@ -63,58 +32,174 @@ abstract class ApiResource extends StripeObject
63
  );
64
  $this->setLastResponse($response);
65
  $this->refreshFrom($response->json, $this->_opts);
66
-
67
  return $this;
68
  }
69
 
70
  /**
71
- * @return string the base URL for the given class
 
72
  */
73
- public static function baseUrl()
74
  {
75
- return Stripe::$apiBase;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  }
77
 
78
  /**
79
- * @return string the endpoint URL for the given class
80
  */
81
  public static function classUrl()
82
  {
83
- // Replace dots with slashes for namespaced resources, e.g. if the object's name is
84
- // "foo.bar", then its URL will be "/v1/foo/bars".
85
- $base = \str_replace('.', '/', static::OBJECT_NAME);
86
-
87
- return "/v1/{$base}s";
88
  }
89
 
90
  /**
91
- * @param null|string $id the ID of the resource
92
- *
93
- * @throws Exception\UnexpectedValueException if $id is null
94
- *
95
- * @return string the instance endpoint URL for the given class
96
  */
97
  public static function resourceUrl($id)
98
  {
99
- if (null === $id) {
100
- $class = static::class;
101
- $message = 'Could not determine which URL to request: '
102
- . "{$class} instance has invalid ID: {$id}";
103
-
104
- throw new Exception\UnexpectedValueException($message);
105
  }
106
  $id = Util\Util::utf8($id);
107
  $base = static::classUrl();
108
- $extn = \urlencode($id);
109
-
110
- return "{$base}/{$extn}";
111
  }
112
 
113
  /**
114
- * @return string the full API URL for this API resource
115
  */
116
  public function instanceUrl()
117
  {
118
  return static::resourceUrl($this['id']);
119
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class ApiResource
7
+ *
8
+ * @package Stripe
9
  */
10
  abstract class ApiResource extends StripeObject
11
  {
12
+ private static $HEADERS_TO_PERSIST = array('Stripe-Account' => true, 'Stripe-Version' => true);
13
 
14
+ public static function baseUrl()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  {
16
+ return Stripe::$apiBase;
 
 
 
 
 
17
  }
18
 
19
  /**
20
+ * @return ApiResource The refreshed resource.
 
 
21
  */
22
  public function refresh()
23
  {
32
  );
33
  $this->setLastResponse($response);
34
  $this->refreshFrom($response->json, $this->_opts);
 
35
  return $this;
36
  }
37
 
38
  /**
39
+ * @return string The name of the class, with namespacing and underscores
40
+ * stripped.
41
  */
42
+ public static function className()
43
  {
44
+ $class = get_called_class();
45
+ // Useful for namespaces: Foo\Charge
46
+ if ($postfixNamespaces = strrchr($class, '\\')) {
47
+ $class = substr($postfixNamespaces, 1);
48
+ }
49
+ // Useful for underscored 'namespaces': Foo_Charge
50
+ if ($postfixFakeNamespaces = strrchr($class, '')) {
51
+ $class = $postfixFakeNamespaces;
52
+ }
53
+ if (substr($class, 0, strlen('Stripe')) == 'Stripe') {
54
+ $class = substr($class, strlen('Stripe'));
55
+ }
56
+ $class = str_replace('_', '', $class);
57
+ $name = urlencode($class);
58
+ $name = strtolower($name);
59
+ return $name;
60
  }
61
 
62
  /**
63
+ * @return string The endpoint URL for the given class.
64
  */
65
  public static function classUrl()
66
  {
67
+ $base = static::className();
68
+ return "/v1/${base}s";
 
 
 
69
  }
70
 
71
  /**
72
+ * @return string The instance endpoint URL for the given class.
 
 
 
 
73
  */
74
  public static function resourceUrl($id)
75
  {
76
+ if ($id === null) {
77
+ $class = get_called_class();
78
+ $message = "Could not determine which URL to request: "
79
+ . "$class instance has invalid ID: $id";
80
+ throw new Error\InvalidRequest($message, null);
 
81
  }
82
  $id = Util\Util::utf8($id);
83
  $base = static::classUrl();
84
+ $extn = urlencode($id);
85
+ return "$base/$extn";
 
86
  }
87
 
88
  /**
89
+ * @return string The full API URL for this API resource.
90
  */
91
  public function instanceUrl()
92
  {
93
  return static::resourceUrl($this['id']);
94
  }
95
+
96
+ private static function _validateParams($params = null)
97
+ {
98
+ if ($params && !is_array($params)) {
99
+ $message = "You must pass an array as the first argument to Stripe API "
100
+ . "method calls. (HINT: an example call to create a charge "
101
+ . "would be: \"Stripe\\Charge::create(array('amount' => 100, "
102
+ . "'currency' => 'usd', 'card' => array('number' => "
103
+ . "4242424242424242, 'exp_month' => 5, 'exp_year' => 2015)))\")";
104
+ throw new Error\Api($message);
105
+ }
106
+ }
107
+
108
+ protected function _request($method, $url, $params = array(), $options = null)
109
+ {
110
+ $opts = $this->_opts->merge($options);
111
+ list($resp, $options) = static::_staticRequest($method, $url, $params, $opts);
112
+ $this->setLastResponse($resp);
113
+ return array($resp->json, $options);
114
+ }
115
+
116
+ protected static function _staticRequest($method, $url, $params, $options)
117
+ {
118
+ $opts = Util\RequestOptions::parse($options);
119
+ $requestor = new ApiRequestor($opts->apiKey, static::baseUrl());
120
+ list($response, $opts->apiKey) = $requestor->request($method, $url, $params, $opts->headers);
121
+ foreach ($opts->headers as $k => $v) {
122
+ if (!array_key_exists($k, self::$HEADERS_TO_PERSIST)) {
123
+ unset($opts->headers[$k]);
124
+ }
125
+ }
126
+ return array($response, $opts);
127
+ }
128
+
129
+ protected static function _retrieve($id, $options = null)
130
+ {
131
+ $opts = Util\RequestOptions::parse($options);
132
+ $instance = new static($id, $opts);
133
+ $instance->refresh();
134
+ return $instance;
135
+ }
136
+
137
+ protected static function _all($params = null, $options = null)
138
+ {
139
+ self::_validateParams($params);
140
+ $url = static::classUrl();
141
+
142
+ list($response, $opts) = static::_staticRequest('get', $url, $params, $options);
143
+ $obj = Util\Util::convertToStripeObject($response->json, $opts);
144
+ if (!is_a($obj, 'Stripe\\Collection')) {
145
+ $class = get_class($obj);
146
+ $message = "Expected type \"Stripe\\Collection\", got \"$class\" instead";
147
+ throw new Error\Api($message);
148
+ }
149
+ $obj->setLastResponse($response);
150
+ $obj->setRequestParams($params);
151
+ return $obj;
152
+ }
153
+
154
+ protected static function _create($params = null, $options = null)
155
+ {
156
+ self::_validateParams($params);
157
+ $base = static::baseUrl();
158
+ $url = static::classUrl();
159
+
160
+ list($response, $opts) = static::_staticRequest('post', $url, $params, $options);
161
+ $obj = Util\Util::convertToStripeObject($response->json, $opts);
162
+ $obj->setLastResponse($response);
163
+ return $obj;
164
+ }
165
+
166
+ /**
167
+ * @param string $id The ID of the API resource to update.
168
+ * @param array|null $params
169
+ * @param array|string|null $opts
170
+ *
171
+ * @return ApiResource the updated API resource
172
+ */
173
+ protected static function _update($id, $params = null, $options = null)
174
+ {
175
+ self::_validateParams($params);
176
+ $base = static::baseUrl();
177
+ $url = static::resourceUrl($id);
178
+
179
+ list($response, $opts) = static::_staticRequest('post', $url, $params, $options);
180
+ $obj = Util\Util::convertToStripeObject($response->json, $opts);
181
+ $obj->setLastResponse($response);
182
+ return $obj;
183
+ }
184
+
185
+ protected function _save($options = null)
186
+ {
187
+ $params = $this->serializeParameters();
188
+ if (count($params) > 0) {
189
+ $url = $this->instanceUrl();
190
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
191
+ $this->refreshFrom($response, $opts);
192
+ }
193
+ return $this;
194
+ }
195
+
196
+ protected function _delete($params = null, $options = null)
197
+ {
198
+ self::_validateParams($params);
199
+
200
+ $url = $this->instanceUrl();
201
+ list($response, $opts) = $this->_request('delete', $url, $params, $options);
202
+ $this->refreshFrom($response, $opts);
203
+ return $this;
204
+ }
205
  }
lib/stripe/lib/ApiResponse.php CHANGED
@@ -2,38 +2,25 @@
2
 
3
  namespace Stripe;
4
 
5
- use Stripe\Util\CaseInsensitiveArray;
6
-
7
  /**
8
- * Class ApiResponse.
 
 
9
  */
10
  class ApiResponse
11
  {
12
- /**
13
- * @var null|array|CaseInsensitiveArray
14
- */
15
  public $headers;
16
-
17
- /**
18
- * @var string
19
- */
20
  public $body;
21
-
22
- /**
23
- * @var null|array
24
- */
25
  public $json;
26
-
27
- /**
28
- * @var int
29
- */
30
  public $code;
31
 
32
  /**
33
  * @param string $body
34
- * @param int $code
35
- * @param null|array|CaseInsensitiveArray $headers
36
- * @param null|array $json
 
 
37
  */
38
  public function __construct($body, $code, $headers, $json)
39
  {
2
 
3
  namespace Stripe;
4
 
 
 
5
  /**
6
+ * Class ApiResponse
7
+ *
8
+ * @package Stripe
9
  */
10
  class ApiResponse
11
  {
 
 
 
12
  public $headers;
 
 
 
 
13
  public $body;
 
 
 
 
14
  public $json;
 
 
 
 
15
  public $code;
16
 
17
  /**
18
  * @param string $body
19
+ * @param integer $code
20
+ * @param array|null $headers
21
+ * @param array|null $json
22
+ *
23
+ * @return obj An APIResponse
24
  */
25
  public function __construct($body, $code, $headers, $json)
26
  {
lib/stripe/lib/ApplePayDomain.php DELETED
@@ -1,31 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * @property string $id Unique identifier for the object.
9
- * @property string $object String representing the object's type. Objects of the same type share the same value.
10
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
11
- * @property string $domain_name
12
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
13
- */
14
- class ApplePayDomain extends ApiResource
15
- {
16
- const OBJECT_NAME = 'apple_pay_domain';
17
-
18
- use ApiOperations\All;
19
- use ApiOperations\Create;
20
- use ApiOperations\Delete;
21
- use ApiOperations\Retrieve;
22
-
23
- /**
24
- * @return string The class URL for this resource. It needs to be special
25
- * cased because it doesn't fit into the standard resource pattern.
26
- */
27
- public static function classUrl()
28
- {
29
- return '/v1/apple_pay/domains';
30
- }
31
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ApplicationFee.php CHANGED
@@ -1,90 +1,69 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * @property string $id Unique identifier for the object.
9
- * @property string $object String representing the object's type. Objects of the same type share the same value.
10
- * @property string|\Stripe\Account $account ID of the Stripe account this fee was taken from.
11
- * @property int $amount Amount earned, in %s.
12
- * @property int $amount_refunded Amount in %s refunded (can be less than the amount attribute on the fee if a partial refund was issued)
13
- * @property string|\Stripe\StripeObject $application ID of the Connect application that earned the fee.
14
- * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact of this collected application fee on your account balance (not including refunds).
15
- * @property string|\Stripe\Charge $charge ID of the charge that the application fee was taken from.
16
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
17
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
18
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
19
- * @property null|string|\Stripe\Charge $originating_transaction ID of the corresponding charge on the platform account, if this fee was the result of a charge using the <code>destination</code> parameter.
20
- * @property bool $refunded Whether the fee has been fully refunded. If the fee is only partially refunded, this attribute will still be false.
21
- * @property \Stripe\Collection $refunds A list of refunds that have been applied to the fee.
22
  */
23
  class ApplicationFee extends ApiResource
24
  {
25
- const OBJECT_NAME = 'application_fee';
26
-
27
- use ApiOperations\All;
28
- use ApiOperations\NestedResource;
29
- use ApiOperations\Retrieve;
30
-
31
- const PATH_REFUNDS = '/refunds';
32
-
33
  /**
34
- * @param string $id the ID of the application fee on which to retrieve the fee refunds
35
- * @param null|array $params
36
- * @param null|array|string $opts
37
- *
38
- * @throws \Stripe\Exception\ApiErrorException if the request fails
39
  *
40
- * @return \Stripe\Collection the list of fee refunds
41
  */
42
- public static function allRefunds($id, $params = null, $opts = null)
43
  {
44
- return self::_allNestedResources($id, static::PATH_REFUNDS, $params, $opts);
45
  }
46
 
47
  /**
48
- * @param string $id the ID of the application fee on which to create the fee refund
49
- * @param null|array $params
50
- * @param null|array|string $opts
51
- *
52
- * @throws \Stripe\Exception\ApiErrorException if the request fails
53
  *
54
- * @return \Stripe\ApplicationFeeRefund
55
  */
56
- public static function createRefund($id, $params = null, $opts = null)
57
  {
58
- return self::_createNestedResource($id, static::PATH_REFUNDS, $params, $opts);
59
  }
60
 
61
  /**
62
- * @param string $id the ID of the application fee to which the fee refund belongs
63
- * @param string $refundId the ID of the fee refund to retrieve
64
- * @param null|array $params
65
- * @param null|array|string $opts
66
  *
67
- * @throws \Stripe\Exception\ApiErrorException if the request fails
68
- *
69
- * @return \Stripe\ApplicationFeeRefund
70
  */
71
- public static function retrieveRefund($id, $refundId, $params = null, $opts = null)
72
  {
73
- return self::_retrieveNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts);
74
  }
75
 
76
  /**
77
- * @param string $id the ID of the application fee to which the fee refund belongs
78
- * @param string $refundId the ID of the fee refund to update
79
- * @param null|array $params
80
- * @param null|array|string $opts
81
  *
82
- * @throws \Stripe\Exception\ApiErrorException if the request fails
 
 
 
 
 
 
 
 
 
83
  *
84
- * @return \Stripe\ApplicationFeeRefund
85
  */
86
- public static function updateRefund($id, $refundId, $params = null, $opts = null)
87
  {
88
- return self::_updateNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts);
 
 
89
  }
90
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class ApplicationFee
7
+ *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class ApplicationFee extends ApiResource
11
  {
 
 
 
 
 
 
 
 
12
  /**
13
+ * This is a special case because the application fee endpoint has an
14
+ * underscore in it. The parent `className` function strips underscores.
 
 
 
15
  *
16
+ * @return string The name of the class.
17
  */
18
+ public static function className()
19
  {
20
+ return 'application_fee';
21
  }
22
 
23
  /**
24
+ * @param string $id The ID of the application fee to retrieve.
25
+ * @param array|string|null $opts
 
 
 
26
  *
27
+ * @return ApplicationFee
28
  */
29
+ public static function retrieve($id, $opts = null)
30
  {
31
+ return self::_retrieve($id, $opts);
32
  }
33
 
34
  /**
35
+ * @param string $id The ID of the application fee to update.
36
+ * @param array|null $params
37
+ * @param array|string|null $options
 
38
  *
39
+ * @return ApplicationFee The updated application fee.
 
 
40
  */
41
+ public static function update($id, $params = null, $options = null)
42
  {
43
+ return self::_update($id, $params, $options);
44
  }
45
 
46
  /**
47
+ * @param array|null $params
48
+ * @param array|string|null $opts
 
 
49
  *
50
+ * @return Collection of ApplicationFees
51
+ */
52
+ public static function all($params = null, $opts = null)
53
+ {
54
+ return self::_all($params, $opts);
55
+ }
56
+
57
+ /**
58
+ * @param array|null $params
59
+ * @param array|string|null $opts
60
  *
61
+ * @return ApplicationFee The refunded application fee.
62
  */
63
+ public function refund($params = null, $opts = null)
64
  {
65
+ $this->refunds->create($params, $opts);
66
+ $this->refresh();
67
+ return $this;
68
  }
69
  }
lib/stripe/lib/ApplicationFeeRefund.php CHANGED
@@ -1,46 +1,25 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * <code>Application Fee Refund</code> objects allow you to refund an application
9
- * fee that has previously been created but not yet refunded. Funds will be
10
- * refunded to the Stripe account from which the fee was originally collected.
11
- *
12
- * Related guide: <a
13
- * href="https://stripe.com/docs/connect/destination-charges#refunding-app-fee">Refunding
14
- * Application Fees</a>.
15
  *
16
- * @property string $id Unique identifier for the object.
17
- * @property string $object String representing the object's type. Objects of the same type share the same value.
18
- * @property int $amount Amount, in %s.
19
- * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact on your account balance.
20
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
21
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
22
- * @property string|\Stripe\ApplicationFee $fee ID of the application fee that was refunded.
23
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
24
  */
25
  class ApplicationFeeRefund extends ApiResource
26
  {
27
- const OBJECT_NAME = 'fee_refund';
28
-
29
- use ApiOperations\Update {
30
- save as protected _save;
31
- }
32
-
33
  /**
34
- * @return string the API URL for this Stripe refund
35
  */
36
  public function instanceUrl()
37
  {
38
  $id = $this['id'];
39
  $fee = $this['fee'];
40
  if (!$id) {
41
- throw new Exception\UnexpectedValueException(
42
- 'Could not determine which URL to request: ' .
43
- "class instance has invalid ID: {$id}",
44
  null
45
  );
46
  }
@@ -48,16 +27,15 @@ class ApplicationFeeRefund extends ApiResource
48
  $fee = Util\Util::utf8($fee);
49
 
50
  $base = ApplicationFee::classUrl();
51
- $feeExtn = \urlencode($fee);
52
- $extn = \urlencode($id);
53
-
54
- return "{$base}/{$feeExtn}/refunds/{$extn}";
55
  }
56
 
57
  /**
58
- * @param null|array|string $opts
59
  *
60
- * @return ApplicationFeeRefund the saved refund
61
  */
62
  public function save($opts = null)
63
  {
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class ApplicationFeeRefund
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
9
  */
10
  class ApplicationFeeRefund extends ApiResource
11
  {
 
 
 
 
 
 
12
  /**
13
+ * @return string The API URL for this Stripe refund.
14
  */
15
  public function instanceUrl()
16
  {
17
  $id = $this['id'];
18
  $fee = $this['fee'];
19
  if (!$id) {
20
+ throw new Error\InvalidRequest(
21
+ "Could not determine which URL to request: " .
22
+ "class instance has invalid ID: $id",
23
  null
24
  );
25
  }
27
  $fee = Util\Util::utf8($fee);
28
 
29
  $base = ApplicationFee::classUrl();
30
+ $feeExtn = urlencode($fee);
31
+ $extn = urlencode($id);
32
+ return "$base/$feeExtn/refunds/$extn";
 
33
  }
34
 
35
  /**
36
+ * @param array|string|null $opts
37
  *
38
+ * @return ApplicationFeeRefund The saved refund.
39
  */
40
  public function save($opts = null)
41
  {
lib/stripe/lib/AttachedObject.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class AttachedObject
7
+ *
8
+ * e.g. metadata on Stripe objects.
9
+ *
10
+ * @package Stripe
11
+ */
12
+ class AttachedObject extends StripeObject
13
+ {
14
+ /**
15
+ * Updates this object.
16
+ *
17
+ * @param array $properties A mapping of properties to update on this object.
18
+ */
19
+ public function replaceWith($properties)
20
+ {
21
+ $removed = array_diff(array_keys($this->_values), array_keys($properties));
22
+ // Don't unset, but rather set to null so we send up '' for deletion.
23
+ foreach ($removed as $k) {
24
+ $this->$k = null;
25
+ }
26
+
27
+ foreach ($properties as $k => $v) {
28
+ $this->$k = $v;
29
+ }
30
+ }
31
+ }
lib/stripe/lib/Balance.php CHANGED
@@ -1,42 +1,23 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * This is an object representing your Stripe balance. You can retrieve it to see
9
- * the balance currently on your Stripe account.
10
- *
11
- * You can also retrieve the balance history, which contains a list of <a
12
- * href="https://stripe.com/docs/reporting/balance-transaction-types">transactions</a>
13
- * that contributed to the balance (charges, payouts, and so forth).
14
- *
15
- * The available and pending amounts for each currency are broken down further by
16
- * payment source types.
17
  *
18
- * Related guide: <a
19
- * href="https://stripe.com/docs/connect/account-balances">Understanding Connect
20
- * Account Balances</a>.
 
21
  *
22
- * @property string $object String representing the object's type. Objects of the same type share the same value.
23
- * @property \Stripe\StripeObject[] $available Funds that are available to be transferred or paid out, whether automatically by Stripe or explicitly via the <a href="https://stripe.com/docs/api#transfers">Transfers API</a> or <a href="https://stripe.com/docs/api#payouts">Payouts API</a>. The available balance for each currency and payment type can be found in the <code>source_types</code> property.
24
- * @property \Stripe\StripeObject[] $connect_reserved Funds held due to negative balances on connected Custom accounts. The connect reserve balance for each currency and payment type can be found in the <code>source_types</code> property.
25
- * @property \Stripe\StripeObject[] $instant_available Funds that can be paid out using Instant Payouts.
26
- * @property \Stripe\StripeObject $issuing
27
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
28
- * @property \Stripe\StripeObject[] $pending Funds that are not yet available in the balance, due to the 7-day rolling pay cycle. The pending balance for each currency, and for each payment type, can be found in the <code>source_types</code> property.
29
  */
30
  class Balance extends SingletonApiResource
31
  {
32
- const OBJECT_NAME = 'balance';
33
-
34
  /**
35
- * @param null|array|string $opts
36
- *
37
- * @throws \Stripe\Exception\ApiErrorException if the request fails
38
  *
39
- * @return \Stripe\Balance
40
  */
41
  public static function retrieve($opts = null)
42
  {
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Balance
 
 
 
 
 
 
 
 
7
  *
8
+ * @param string $object
9
+ * @param mixed $available
10
+ * @param bool $livedmode
11
+ * @param mixed $pending
12
  *
13
+ * @package Stripe
 
 
 
 
 
 
14
  */
15
  class Balance extends SingletonApiResource
16
  {
 
 
17
  /**
18
+ * @param array|string|null $opts
 
 
19
  *
20
+ * @return Balance
21
  */
22
  public static function retrieve($opts = null)
23
  {
lib/stripe/lib/BalanceTransaction.php CHANGED
@@ -1,71 +1,57 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Balance transactions represent funds moving through your Stripe account. They're
9
- * created for every type of transaction that comes into or flows out of your
10
- * Stripe account balance.
11
  *
12
- * Related guide: <a
13
- * href="https://stripe.com/docs/reports/balance-transaction-types">Balance
14
- * Transaction Types</a>.
 
 
 
 
 
 
 
 
 
 
 
15
  *
16
- * @property string $id Unique identifier for the object.
17
- * @property string $object String representing the object's type. Objects of the same type share the same value.
18
- * @property int $amount Gross amount of the transaction, in %s.
19
- * @property int $available_on The date the transaction's net funds will become available in the Stripe balance.
20
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
21
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
22
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
23
- * @property null|float $exchange_rate The exchange rate used, if applicable, for this transaction. Specifically, if money was converted from currency A to currency B, then the <code>amount</code> in currency A, times <code>exchange_rate</code>, would be the <code>amount</code> in currency B. For example, suppose you charged a customer 10.00 EUR. Then the PaymentIntent's <code>amount</code> would be <code>1000</code> and <code>currency</code> would be <code>eur</code>. Suppose this was converted into 12.34 USD in your Stripe account. Then the BalanceTransaction's <code>amount</code> would be <code>1234</code>, <code>currency</code> would be <code>usd</code>, and <code>exchange_rate</code> would be <code>1.234</code>.
24
- * @property int $fee Fees (in %s) paid for this transaction.
25
- * @property \Stripe\StripeObject[] $fee_details Detailed breakdown of fees (in %s) paid for this transaction.
26
- * @property int $net Net amount of the transaction, in %s.
27
- * @property string $reporting_category <a href="https://stripe.com/docs/reports/reporting-categories">Learn more</a> about how reporting categories can help you understand balance transactions from an accounting perspective.
28
- * @property null|string|\Stripe\StripeObject $source The Stripe object to which this transaction is related.
29
- * @property string $status If the transaction's net funds are available in the Stripe balance yet. Either <code>available</code> or <code>pending</code>.
30
- * @property string $type Transaction type: <code>adjustment</code>, <code>advance</code>, <code>advance_funding</code>, <code>anticipation_repayment</code>, <code>application_fee</code>, <code>application_fee_refund</code>, <code>charge</code>, <code>connect_collection_transfer</code>, <code>contribution</code>, <code>issuing_authorization_hold</code>, <code>issuing_authorization_release</code>, <code>issuing_dispute</code>, <code>issuing_transaction</code>, <code>payment</code>, <code>payment_failure_refund</code>, <code>payment_refund</code>, <code>payout</code>, <code>payout_cancel</code>, <code>payout_failure</code>, <code>refund</code>, <code>refund_failure</code>, <code>reserve_transaction</code>, <code>reserved_funds</code>, <code>stripe_fee</code>, <code>stripe_fx_fee</code>, <code>tax_fee</code>, <code>topup</code>, <code>topup_reversal</code>, <code>transfer</code>, <code>transfer_cancel</code>, <code>transfer_failure</code>, or <code>transfer_refund</code>. <a href="https://stripe.com/docs/reports/balance-transaction-types">Learn more</a> about balance transaction types and what they represent. If you are looking to classify transactions for accounting purposes, you might want to consider <code>reporting_category</code> instead.
31
  */
32
  class BalanceTransaction extends ApiResource
33
  {
34
- const OBJECT_NAME = 'balance_transaction';
 
 
 
 
 
 
 
35
 
36
- use ApiOperations\All;
37
- use ApiOperations\Retrieve;
 
 
 
 
 
 
 
 
38
 
39
- const TYPE_ADJUSTMENT = 'adjustment';
40
- const TYPE_ADVANCE = 'advance';
41
- const TYPE_ADVANCE_FUNDING = 'advance_funding';
42
- const TYPE_ANTICIPATION_REPAYMENT = 'anticipation_repayment';
43
- const TYPE_APPLICATION_FEE = 'application_fee';
44
- const TYPE_APPLICATION_FEE_REFUND = 'application_fee_refund';
45
- const TYPE_CHARGE = 'charge';
46
- const TYPE_CONNECT_COLLECTION_TRANSFER = 'connect_collection_transfer';
47
- const TYPE_CONTRIBUTION = 'contribution';
48
- const TYPE_ISSUING_AUTHORIZATION_HOLD = 'issuing_authorization_hold';
49
- const TYPE_ISSUING_AUTHORIZATION_RELEASE = 'issuing_authorization_release';
50
- const TYPE_ISSUING_DISPUTE = 'issuing_dispute';
51
- const TYPE_ISSUING_TRANSACTION = 'issuing_transaction';
52
- const TYPE_PAYMENT = 'payment';
53
- const TYPE_PAYMENT_FAILURE_REFUND = 'payment_failure_refund';
54
- const TYPE_PAYMENT_REFUND = 'payment_refund';
55
- const TYPE_PAYOUT = 'payout';
56
- const TYPE_PAYOUT_CANCEL = 'payout_cancel';
57
- const TYPE_PAYOUT_FAILURE = 'payout_failure';
58
- const TYPE_REFUND = 'refund';
59
- const TYPE_REFUND_FAILURE = 'refund_failure';
60
- const TYPE_RESERVE_TRANSACTION = 'reserve_transaction';
61
- const TYPE_RESERVED_FUNDS = 'reserved_funds';
62
- const TYPE_STRIPE_FEE = 'stripe_fee';
63
- const TYPE_STRIPE_FX_FEE = 'stripe_fx_fee';
64
- const TYPE_TAX_FEE = 'tax_fee';
65
- const TYPE_TOPUP = 'topup';
66
- const TYPE_TOPUP_REVERSAL = 'topup_reversal';
67
- const TYPE_TRANSFER = 'transfer';
68
- const TYPE_TRANSFER_CANCEL = 'transfer_cancel';
69
- const TYPE_TRANSFER_FAILURE = 'transfer_failure';
70
- const TYPE_TRANSFER_REFUND = 'transfer_refund';
71
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class BalanceTransaction
 
 
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $available_on
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $description
15
+ * @property int $fee
16
+ * @property mixed $fee_details
17
+ * @property int $net
18
+ * @property string $source
19
+ * @property mixed $sourced_transfers
20
+ * @property string $status
21
+ * @property string $type
22
  *
23
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  */
25
  class BalanceTransaction extends ApiResource
26
  {
27
+ /**
28
+ * @return string The class URL for this resource. It needs to be special
29
+ * cased because it doesn't fit into the standard resource pattern.
30
+ */
31
+ public static function classUrl()
32
+ {
33
+ return "/v1/balance/history";
34
+ }
35
 
36
+ /**
37
+ * @param string $id The ID of the balance transaction to retrieve.
38
+ * @param array|string|null $opts
39
+ *
40
+ * @return BalanceTransaction
41
+ */
42
+ public static function retrieve($id, $opts = null)
43
+ {
44
+ return self::_retrieve($id, $opts);
45
+ }
46
 
47
+ /**
48
+ * @param array|null $params
49
+ * @param array|string|null $opts
50
+ *
51
+ * @return Collection of BalanceTransactions
52
+ */
53
+ public static function all($params = null, $opts = null)
54
+ {
55
+ return self::_all($params, $opts);
56
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
lib/stripe/lib/BankAccount.php CHANGED
@@ -1,132 +1,25 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * These bank accounts are payment methods on <code>Customer</code> objects.
9
- *
10
- * On the other hand <a
11
- * href="https://stripe.com/docs/api#external_accounts">External Accounts</a> are
12
- * transfer destinations on <code>Account</code> objects for <a
13
- * href="https://stripe.com/docs/connect/custom-accounts">Custom accounts</a>. They
14
- * can be bank accounts or debit cards as well, and are documented in the links
15
- * above.
16
  *
17
- * Related guide: <a
18
- * href="https://stripe.com/docs/payments/bank-debits-transfers">Bank Debits and
19
- * Transfers</a>.
20
- *
21
- * @property string $id Unique identifier for the object.
22
- * @property string $object String representing the object's type. Objects of the same type share the same value.
23
- * @property null|string|\Stripe\Account $account The ID of the account that the bank account is associated with.
24
- * @property null|string $account_holder_name The name of the person or business that owns the bank account.
25
- * @property null|string $account_holder_type The type of entity that holds the account. This can be either <code>individual</code> or <code>company</code>.
26
- * @property null|string[] $available_payout_methods A set of available payout methods for this bank account. Only values from this set should be passed as the <code>method</code> when creating a payout.
27
- * @property null|string $bank_name Name of the bank associated with the routing number (e.g., <code>WELLS FARGO</code>).
28
- * @property string $country Two-letter ISO code representing the country the bank account is located in.
29
- * @property string $currency Three-letter <a href="https://stripe.com/docs/payouts">ISO code for the currency</a> paid out to the bank account.
30
- * @property null|string|\Stripe\Customer $customer The ID of the customer that the bank account is associated with.
31
- * @property null|bool $default_for_currency Whether this bank account is the default external account for its currency.
32
- * @property null|string $fingerprint Uniquely identifies this particular bank account. You can use this attribute to check whether two bank accounts are the same.
33
- * @property string $last4 The last four digits of the bank account number.
34
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
35
- * @property null|string $routing_number The routing transit number for the bank account.
36
- * @property string $status <p>For bank accounts, possible values are <code>new</code>, <code>validated</code>, <code>verified</code>, <code>verification_failed</code>, or <code>errored</code>. A bank account that hasn't had any activity or validation performed is <code>new</code>. If Stripe can determine that the bank account exists, its status will be <code>validated</code>. Note that there often isn’t enough information to know (e.g., for smaller credit unions), and the validation is not always run. If customer bank account verification has succeeded, the bank account status will be <code>verified</code>. If the verification failed for any reason, such as microdeposit failure, the status will be <code>verification_failed</code>. If a transfer sent to this bank account fails, we'll set the status to <code>errored</code> and will not continue to send transfers until the bank details are updated.</p><p>For external accounts, possible values are <code>new</code> and <code>errored</code>. Validations aren't run against external accounts because they're only used for payouts. This means the other statuses don't apply. If a transfer fails, the status is set to <code>errored</code> and transfers are stopped until account details are updated.</p>
37
  */
38
- class BankAccount extends ApiResource
39
  {
40
- const OBJECT_NAME = 'bank_account';
41
-
42
- use ApiOperations\Delete;
43
- use ApiOperations\Update;
44
-
45
- /**
46
- * Possible string representations of the bank verification status.
47
- *
48
- * @see https://stripe.com/docs/api/external_account_bank_accounts/object#account_bank_account_object-status
49
- */
50
- const STATUS_NEW = 'new';
51
- const STATUS_VALIDATED = 'validated';
52
- const STATUS_VERIFIED = 'verified';
53
- const STATUS_VERIFICATION_FAILED = 'verification_failed';
54
- const STATUS_ERRORED = 'errored';
55
-
56
- /**
57
- * @return string The instance URL for this resource. It needs to be special
58
- * cased because it doesn't fit into the standard resource pattern.
59
- */
60
- public function instanceUrl()
61
- {
62
- if ($this['customer']) {
63
- $base = Customer::classUrl();
64
- $parent = $this['customer'];
65
- $path = 'sources';
66
- } elseif ($this['account']) {
67
- $base = Account::classUrl();
68
- $parent = $this['account'];
69
- $path = 'external_accounts';
70
- } else {
71
- $msg = 'Bank accounts cannot be accessed without a customer ID or account ID.';
72
-
73
- throw new Exception\UnexpectedValueException($msg, null);
74
- }
75
- $parentExtn = \urlencode(Util\Util::utf8($parent));
76
- $extn = \urlencode(Util\Util::utf8($this['id']));
77
-
78
- return "{$base}/{$parentExtn}/{$path}/{$extn}";
79
- }
80
-
81
  /**
82
- * @param array|string $_id
83
- * @param null|array|string $_opts
84
  *
85
- * @throws \Stripe\Exception\BadMethodCallException
86
  */
87
- public static function retrieve($_id, $_opts = null)
88
- {
89
- $msg = 'Bank accounts cannot be retrieved without a customer ID or ' .
90
- 'an account ID. Retrieve a bank account using ' .
91
- "`Customer::retrieveSource('customer_id', " .
92
- "'bank_account_id')` or `Account::retrieveExternalAccount(" .
93
- "'account_id', 'bank_account_id')`.";
94
-
95
- throw new Exception\BadMethodCallException($msg);
96
- }
97
-
98
- /**
99
- * @param string $_id
100
- * @param null|array $_params
101
- * @param null|array|string $_options
102
- *
103
- * @throws \Stripe\Exception\BadMethodCallException
104
- */
105
- public static function update($_id, $_params = null, $_options = null)
106
- {
107
- $msg = 'Bank accounts cannot be updated without a customer ID or an ' .
108
- 'account ID. Update a bank account using ' .
109
- "`Customer::updateSource('customer_id', 'bank_account_id', " .
110
- '$updateParams)` or `Account::updateExternalAccount(' .
111
- "'account_id', 'bank_account_id', \$updateParams)`.";
112
-
113
- throw new Exception\BadMethodCallException($msg);
114
- }
115
-
116
- /**
117
- * @param null|array $params
118
- * @param null|array|string $opts
119
- *
120
- * @throws \Stripe\Exception\ApiErrorException if the request fails
121
- *
122
- * @return BankAccount the verified bank account
123
- */
124
- public function verify($params = null, $opts = null)
125
  {
126
  $url = $this->instanceUrl() . '/verify';
127
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
128
  $this->refreshFrom($response, $opts);
129
-
130
  return $this;
131
  }
132
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class BankAccount
 
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
+ class BankAccount extends ExternalAccount
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  /**
13
+ * @param array|null $params
14
+ * @param array|string|null $options
15
  *
16
+ * @return BankAccount The verified bank account.
17
  */
18
+ public function verify($params = null, $options = null)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  {
20
  $url = $this->instanceUrl() . '/verify';
21
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
22
  $this->refreshFrom($response, $opts);
 
23
  return $this;
24
  }
25
  }
lib/stripe/lib/BaseStripeClient.php DELETED
@@ -1,269 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- class BaseStripeClient implements StripeClientInterface
6
- {
7
- /** @var string default base URL for Stripe's API */
8
- const DEFAULT_API_BASE = 'https://api.stripe.com';
9
-
10
- /** @var string default base URL for Stripe's OAuth API */
11
- const DEFAULT_CONNECT_BASE = 'https://connect.stripe.com';
12
-
13
- /** @var string default base URL for Stripe's Files API */
14
- const DEFAULT_FILES_BASE = 'https://files.stripe.com';
15
-
16
- /** @var array<string, mixed> */
17
- private $config;
18
-
19
- /** @var \Stripe\Util\RequestOptions */
20
- private $defaultOpts;
21
-
22
- /**
23
- * Initializes a new instance of the {@link BaseStripeClient} class.
24
- *
25
- * The constructor takes a single argument. The argument can be a string, in which case it
26
- * should be the API key. It can also be an array with various configuration settings.
27
- *
28
- * Configuration settings include the following options:
29
- *
30
- * - api_key (null|string): the Stripe API key, to be used in regular API requests.
31
- * - client_id (null|string): the Stripe client ID, to be used in OAuth requests.
32
- * - stripe_account (null|string): a Stripe account ID. If set, all requests sent by the client
33
- * will automatically use the {@code Stripe-Account} header with that account ID.
34
- * - stripe_version (null|string): a Stripe API verion. If set, all requests sent by the client
35
- * will include the {@code Stripe-Version} header with that API version.
36
- *
37
- * The following configuration settings are also available, though setting these should rarely be necessary
38
- * (only useful if you want to send requests to a mock server like stripe-mock):
39
- *
40
- * - api_base (string): the base URL for regular API requests. Defaults to
41
- * {@link DEFAULT_API_BASE}.
42
- * - connect_base (string): the base URL for OAuth requests. Defaults to
43
- * {@link DEFAULT_CONNECT_BASE}.
44
- * - files_base (string): the base URL for file creation requests. Defaults to
45
- * {@link DEFAULT_FILES_BASE}.
46
- *
47
- * @param array<string, mixed>|string $config the API key as a string, or an array containing
48
- * the client configuration settings
49
- */
50
- public function __construct($config = [])
51
- {
52
- if (\is_string($config)) {
53
- $config = ['api_key' => $config];
54
- } elseif (!\is_array($config)) {
55
- throw new \Stripe\Exception\InvalidArgumentException('$config must be a string or an array');
56
- }
57
-
58
- $config = \array_merge($this->getDefaultConfig(), $config);
59
- $this->validateConfig($config);
60
-
61
- $this->config = $config;
62
-
63
- $this->defaultOpts = \Stripe\Util\RequestOptions::parse([
64
- 'stripe_account' => $config['stripe_account'],
65
- 'stripe_version' => $config['stripe_version'],
66
- ]);
67
- }
68
-
69
- /**
70
- * Gets the API key used by the client to send requests.
71
- *
72
- * @return null|string the API key used by the client to send requests
73
- */
74
- public function getApiKey()
75
- {
76
- return $this->config['api_key'];
77
- }
78
-
79
- /**
80
- * Gets the client ID used by the client in OAuth requests.
81
- *
82
- * @return null|string the client ID used by the client in OAuth requests
83
- */
84
- public function getClientId()
85
- {
86
- return $this->config['client_id'];
87
- }
88
-
89
- /**
90
- * Gets the base URL for Stripe's API.
91
- *
92
- * @return string the base URL for Stripe's API
93
- */
94
- public function getApiBase()
95
- {
96
- return $this->config['api_base'];
97
- }
98
-
99
- /**
100
- * Gets the base URL for Stripe's OAuth API.
101
- *
102
- * @return string the base URL for Stripe's OAuth API
103
- */
104
- public function getConnectBase()
105
- {
106
- return $this->config['connect_base'];
107
- }
108
-
109
- /**
110
- * Gets the base URL for Stripe's Files API.
111
- *
112
- * @return string the base URL for Stripe's Files API
113
- */
114
- public function getFilesBase()
115
- {
116
- return $this->config['files_base'];
117
- }
118
-
119
- /**
120
- * Sends a request to Stripe's API.
121
- *
122
- * @param string $method the HTTP method
123
- * @param string $path the path of the request
124
- * @param array $params the parameters of the request
125
- * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request
126
- *
127
- * @return \Stripe\StripeObject the object returned by Stripe's API
128
- */
129
- public function request($method, $path, $params, $opts)
130
- {
131
- $opts = $this->defaultOpts->merge($opts, true);
132
- $baseUrl = $opts->apiBase ?: $this->getApiBase();
133
- $requestor = new \Stripe\ApiRequestor($this->apiKeyForRequest($opts), $baseUrl);
134
- list($response, $opts->apiKey) = $requestor->request($method, $path, $params, $opts->headers);
135
- $opts->discardNonPersistentHeaders();
136
- $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
137
- $obj->setLastResponse($response);
138
-
139
- return $obj;
140
- }
141
-
142
- /**
143
- * Sends a request to Stripe's API.
144
- *
145
- * @param string $method the HTTP method
146
- * @param string $path the path of the request
147
- * @param array $params the parameters of the request
148
- * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request
149
- *
150
- * @return \Stripe\Collection of ApiResources
151
- */
152
- public function requestCollection($method, $path, $params, $opts)
153
- {
154
- $obj = $this->request($method, $path, $params, $opts);
155
- if (!($obj instanceof \Stripe\Collection)) {
156
- $received_class = \get_class($obj);
157
- $msg = "Expected to receive `Stripe\\Collection` object from Stripe API. Instead received `{$received_class}`.";
158
-
159
- throw new \Stripe\Exception\UnexpectedValueException($msg);
160
- }
161
- $obj->setFilters($params);
162
-
163
- return $obj;
164
- }
165
-
166
- /**
167
- * @param \Stripe\Util\RequestOptions $opts
168
- *
169
- * @throws \Stripe\Exception\AuthenticationException
170
- *
171
- * @return string
172
- */
173
- private function apiKeyForRequest($opts)
174
- {
175
- $apiKey = $opts->apiKey ?: $this->getApiKey();
176
-
177
- if (null === $apiKey) {
178
- $msg = 'No API key provided. Set your API key when constructing the '
179
- . 'StripeClient instance, or provide it on a per-request basis '
180
- . 'using the `api_key` key in the $opts argument.';
181
-
182
- throw new \Stripe\Exception\AuthenticationException($msg);
183
- }
184
-
185
- return $apiKey;
186
- }
187
-
188
- /**
189
- * TODO: replace this with a private constant when we drop support for PHP < 5.
190
- *
191
- * @return array<string, mixed>
192
- */
193
- private function getDefaultConfig()
194
- {
195
- return [
196
- 'api_key' => null,
197
- 'client_id' => null,
198
- 'stripe_account' => null,
199
- 'stripe_version' => null,
200
- 'api_base' => self::DEFAULT_API_BASE,
201
- 'connect_base' => self::DEFAULT_CONNECT_BASE,
202
- 'files_base' => self::DEFAULT_FILES_BASE,
203
- ];
204
- }
205
-
206
- /**
207
- * @param array<string, mixed> $config
208
- *
209
- * @throws \Stripe\Exception\InvalidArgumentException
210
- */
211
- private function validateConfig($config)
212
- {
213
- // api_key
214
- if (null !== $config['api_key'] && !\is_string($config['api_key'])) {
215
- throw new \Stripe\Exception\InvalidArgumentException('api_key must be null or a string');
216
- }
217
-
218
- if (null !== $config['api_key'] && ('' === $config['api_key'])) {
219
- $msg = 'api_key cannot be the empty string';
220
-
221
- throw new \Stripe\Exception\InvalidArgumentException($msg);
222
- }
223
-
224
- if (null !== $config['api_key'] && (\preg_match('/\s/', $config['api_key']))) {
225
- $msg = 'api_key cannot contain whitespace';
226
-
227
- throw new \Stripe\Exception\InvalidArgumentException($msg);
228
- }
229
-
230
- // client_id
231
- if (null !== $config['client_id'] && !\is_string($config['client_id'])) {
232
- throw new \Stripe\Exception\InvalidArgumentException('client_id must be null or a string');
233
- }
234
-
235
- // stripe_account
236
- if (null !== $config['stripe_account'] && !\is_string($config['stripe_account'])) {
237
- throw new \Stripe\Exception\InvalidArgumentException('stripe_account must be null or a string');
238
- }
239
-
240
- // stripe_version
241
- if (null !== $config['stripe_version'] && !\is_string($config['stripe_version'])) {
242
- throw new \Stripe\Exception\InvalidArgumentException('stripe_version must be null or a string');
243
- }
244
-
245
- // api_base
246
- if (!\is_string($config['api_base'])) {
247
- throw new \Stripe\Exception\InvalidArgumentException('api_base must be a string');
248
- }
249
-
250
- // connect_base
251
- if (!\is_string($config['connect_base'])) {
252
- throw new \Stripe\Exception\InvalidArgumentException('connect_base must be a string');
253
- }
254
-
255
- // files_base
256
- if (!\is_string($config['files_base'])) {
257
- throw new \Stripe\Exception\InvalidArgumentException('files_base must be a string');
258
- }
259
-
260
- // check absence of extra keys
261
- $extraConfigKeys = \array_diff(\array_keys($config), \array_keys($this->getDefaultConfig()));
262
- if (!empty($extraConfigKeys)) {
263
- // Wrap in single quote to more easily catch trailing spaces errors
264
- $invalidKeys = "'" . \implode("', '", $extraConfigKeys) . "'";
265
-
266
- throw new \Stripe\Exception\InvalidArgumentException('Found unknown key(s) in configuration array: ' . $invalidKeys);
267
- }
268
- }
269
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/BillingPortal/Configuration.php DELETED
@@ -1,31 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\BillingPortal;
6
-
7
- /**
8
- * A portal configuration describes the functionality and behavior of a portal
9
- * session.
10
- *
11
- * @property string $id Unique identifier for the object.
12
- * @property string $object String representing the object's type. Objects of the same type share the same value.
13
- * @property bool $active Whether the configuration is active and can be used to create portal sessions.
14
- * @property null|string $application ID of the Connect Application that created the configuration.
15
- * @property \Stripe\StripeObject $business_profile
16
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
17
- * @property null|string $default_return_url The default URL to redirect customers to when they click on the portal's link to return to your website. This can be <a href="https://stripe.com/docs/api/customer_portal/sessions/create#create_portal_session-return_url">overriden</a> when creating the session.
18
- * @property \Stripe\StripeObject $features
19
- * @property bool $is_default Whether the configuration is the default. If <code>true</code>, this configuration can be managed in the Dashboard and portal sessions will use this configuration unless it is overriden when creating the session.
20
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
21
- * @property int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch.
22
- */
23
- class Configuration extends \Stripe\ApiResource
24
- {
25
- const OBJECT_NAME = 'billing_portal.configuration';
26
-
27
- use \Stripe\ApiOperations\All;
28
- use \Stripe\ApiOperations\Create;
29
- use \Stripe\ApiOperations\Retrieve;
30
- use \Stripe\ApiOperations\Update;
31
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/BillingPortal/Session.php DELETED
@@ -1,42 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\BillingPortal;
6
-
7
- /**
8
- * The Billing customer portal is a Stripe-hosted UI for subscription and billing
9
- * management.
10
- *
11
- * A portal configuration describes the functionality and features that you want to
12
- * provide to your customers through the portal.
13
- *
14
- * A portal session describes the instantiation of the customer portal for a
15
- * particular customer. By visiting the session's URL, the customer can manage
16
- * their subscriptions and billing details. For security reasons, sessions are
17
- * short-lived and will expire if the customer does not visit the URL. Create
18
- * sessions on-demand when customers intend to manage their subscriptions and
19
- * billing details.
20
- *
21
- * Learn more in the <a
22
- * href="https://stripe.com/docs/billing/subscriptions/customer-portal">product
23
- * overview</a> and <a
24
- * href="https://stripe.com/docs/billing/subscriptions/integrating-customer-portal">integration
25
- * guide</a>.
26
- *
27
- * @property string $id Unique identifier for the object.
28
- * @property string $object String representing the object's type. Objects of the same type share the same value.
29
- * @property string|\Stripe\BillingPortal\Configuration $configuration The configuration used by this session, describing the features available.
30
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
31
- * @property string $customer The ID of the customer for this session.
32
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
33
- * @property null|string $on_behalf_of The account for which the session was created on behalf of. When specified, only subscriptions and invoices with this <code>on_behalf_of</code> account appear in the portal. For more information, see the <a href="https://stripe.com/docs/connect/charges-transfers#on-behalf-of">docs</a>. Use the <a href="https://stripe.com/docs/api/accounts/object#account_object-settings-branding">Accounts API</a> to modify the <code>on_behalf_of</code> account's branding settings, which the portal displays.
34
- * @property string $return_url The URL to redirect customers to when they click on the portal's link to return to your website.
35
- * @property string $url The short-lived URL of the session that gives customers access to the customer portal.
36
- */
37
- class Session extends \Stripe\ApiResource
38
- {
39
- const OBJECT_NAME = 'billing_portal.session';
40
-
41
- use \Stripe\ApiOperations\Create;
42
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/BitcoinReceiver.php CHANGED
@@ -1,50 +1,21 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * @deprecated Bitcoin receivers are deprecated. Please use the sources API instead.
9
- * @see https://stripe.com/docs/sources/bitcoin
10
  *
11
- * @property string $id Unique identifier for the object.
12
- * @property string $object String representing the object's type. Objects of the same type share the same value.
13
- * @property bool $active True when this bitcoin receiver has received a non-zero amount of bitcoin.
14
- * @property int $amount The amount of <code>currency</code> that you are collecting as payment.
15
- * @property int $amount_received The amount of <code>currency</code> to which <code>bitcoin_amount_received</code> has been converted.
16
- * @property int $bitcoin_amount The amount of bitcoin that the customer should send to fill the receiver. The <code>bitcoin_amount</code> is denominated in Satoshi: there are 10^8 Satoshi in one bitcoin.
17
- * @property int $bitcoin_amount_received The amount of bitcoin that has been sent by the customer to this receiver.
18
- * @property string $bitcoin_uri This URI can be displayed to the customer as a clickable link (to activate their bitcoin client) or as a QR code (for mobile wallets).
19
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
20
- * @property string $currency Three-letter <a href="https://stripe.com/docs/currencies">ISO code for the currency</a> to which the bitcoin will be converted.
21
- * @property null|string $customer The customer ID of the bitcoin receiver.
22
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
23
- * @property null|string $email The customer's email address, set by the API call that creates the receiver.
24
- * @property bool $filled This flag is initially false and updates to true when the customer sends the <code>bitcoin_amount</code> to this receiver.
25
- * @property string $inbound_address A bitcoin address that is specific to this receiver. The customer can send bitcoin to this address to fill the receiver.
26
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
27
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
28
- * @property null|string $payment The ID of the payment created from the receiver, if any. Hidden when viewing the receiver with a publishable key.
29
- * @property null|string $refund_address The refund address of this bitcoin receiver.
30
- * @property \Stripe\Collection $transactions A list with one entry for each time that the customer sent bitcoin to the receiver. Hidden when viewing the receiver with a publishable key.
31
- * @property bool $uncaptured_funds This receiver contains uncaptured funds that can be used for a payment or refunded.
32
- * @property null|bool $used_for_payment Indicate if this source is used for payment.
33
  */
34
- class BitcoinReceiver extends ApiResource
35
  {
36
- const OBJECT_NAME = 'bitcoin_receiver';
37
-
38
- use ApiOperations\All;
39
- use ApiOperations\Retrieve;
40
-
41
  /**
42
  * @return string The class URL for this resource. It needs to be special
43
  * cased because it doesn't fit into the standard resource pattern.
44
  */
45
  public static function classUrl()
46
  {
47
- return '/v1/bitcoin/receivers';
48
  }
49
 
50
  /**
@@ -53,19 +24,62 @@ class BitcoinReceiver extends ApiResource
53
  */
54
  public function instanceUrl()
55
  {
56
- if ($this['customer']) {
57
- $base = Customer::classUrl();
58
- $parent = $this['customer'];
59
- $path = 'sources';
60
- $parentExtn = \urlencode(Util\Util::utf8($parent));
61
- $extn = \urlencode(Util\Util::utf8($this['id']));
62
-
63
- return "{$base}/{$parentExtn}/{$path}/{$extn}";
 
64
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- $base = BitcoinReceiver::classUrl();
67
- $extn = \urlencode(Util\Util::utf8($this['id']));
 
 
 
 
 
 
 
 
68
 
69
- return "{$base}/{$extn}";
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class BitcoinReceiver
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
+ class BitcoinReceiver extends ExternalAccount
11
  {
 
 
 
 
 
12
  /**
13
  * @return string The class URL for this resource. It needs to be special
14
  * cased because it doesn't fit into the standard resource pattern.
15
  */
16
  public static function classUrl()
17
  {
18
+ return "/v1/bitcoin/receivers";
19
  }
20
 
21
  /**
24
  */
25
  public function instanceUrl()
26
  {
27
+ $result = parent::instanceUrl();
28
+ if ($result) {
29
+ return $result;
30
+ } else {
31
+ $id = $this['id'];
32
+ $id = Util\Util::utf8($id);
33
+ $extn = urlencode($id);
34
+ $base = BitcoinReceiver::classUrl();
35
+ return "$base/$extn";
36
  }
37
+ }
38
+
39
+ /**
40
+ * @param string $id The ID of the Bitcoin Receiver to retrieve.
41
+ * @param array|string|null $opts
42
+ *
43
+ * @return BitcoinReceiver
44
+ */
45
+ public static function retrieve($id, $opts = null)
46
+ {
47
+ return self::_retrieve($id, $opts);
48
+ }
49
+
50
+ /**
51
+ * @param array|null $params
52
+ * @param array|string|null $opts
53
+ *
54
+ * @return Collection of BitcoinReceivers
55
+ */
56
+ public static function all($params = null, $opts = null)
57
+ {
58
+ return self::_all($params, $opts);
59
+ }
60
 
61
+ /**
62
+ * @param array|null $params
63
+ * @param array|string|null $opts
64
+ *
65
+ * @return BitcoinReceiver The created Bitcoin Receiver item.
66
+ */
67
+ public static function create($params = null, $opts = null)
68
+ {
69
+ return self::_create($params, $opts);
70
+ }
71
 
72
+ /**
73
+ * @param array|null $params
74
+ * @param array|string|null $options
75
+ *
76
+ * @return BitcoinReceiver The refunded Bitcoin Receiver item.
77
+ */
78
+ public function refund($params = null, $options = null)
79
+ {
80
+ $url = $this->instanceUrl() . '/refund';
81
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
82
+ $this->refreshFrom($response, $opts);
83
+ return $this;
84
  }
85
  }
lib/stripe/lib/BitcoinTransaction.php CHANGED
@@ -1,19 +1,13 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * @property string $id Unique identifier for the object.
9
- * @property string $object String representing the object's type. Objects of the same type share the same value.
10
- * @property int $amount The amount of <code>currency</code> that the transaction was converted to in real-time.
11
- * @property int $bitcoin_amount The amount of bitcoin contained in the transaction.
12
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
13
- * @property string $currency Three-letter <a href="https://stripe.com/docs/currencies">ISO code for the currency</a> to which this transaction was converted.
14
- * @property string $receiver The receiver to which this transaction was sent.
15
  */
16
  class BitcoinTransaction extends ApiResource
17
  {
18
- const OBJECT_NAME = 'bitcoin_transaction';
19
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class BitcoinTransaction
7
+ *
8
+ * @package Stripe
 
 
 
 
9
  */
10
  class BitcoinTransaction extends ApiResource
11
  {
12
+
13
  }
lib/stripe/lib/Capability.php DELETED
@@ -1,87 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * This is an object representing a capability for a Stripe account.
9
- *
10
- * Related guide: <a
11
- * href="https://stripe.com/docs/connect/account-capabilities">Account
12
- * capabilities</a>.
13
- *
14
- * @property string $id The identifier for the capability.
15
- * @property string $object String representing the object's type. Objects of the same type share the same value.
16
- * @property string|\Stripe\Account $account The account for which the capability enables functionality.
17
- * @property bool $requested Whether the capability has been requested.
18
- * @property null|int $requested_at Time at which the capability was requested. Measured in seconds since the Unix epoch.
19
- * @property \Stripe\StripeObject $requirements
20
- * @property string $status The status of the capability. Can be <code>active</code>, <code>inactive</code>, <code>pending</code>, or <code>unrequested</code>.
21
- */
22
- class Capability extends ApiResource
23
- {
24
- const OBJECT_NAME = 'capability';
25
-
26
- use ApiOperations\Update;
27
-
28
- const STATUS_ACTIVE = 'active';
29
- const STATUS_INACTIVE = 'inactive';
30
- const STATUS_PENDING = 'pending';
31
- const STATUS_UNREQUESTED = 'unrequested';
32
-
33
- /**
34
- * @return string the API URL for this Stripe account reversal
35
- */
36
- public function instanceUrl()
37
- {
38
- $id = $this['id'];
39
- $account = $this['account'];
40
- if (!$id) {
41
- throw new Exception\UnexpectedValueException(
42
- 'Could not determine which URL to request: ' .
43
- "class instance has invalid ID: {$id}",
44
- null
45
- );
46
- }
47
- $id = Util\Util::utf8($id);
48
- $account = Util\Util::utf8($account);
49
-
50
- $base = Account::classUrl();
51
- $accountExtn = \urlencode($account);
52
- $extn = \urlencode($id);
53
-
54
- return "{$base}/{$accountExtn}/capabilities/{$extn}";
55
- }
56
-
57
- /**
58
- * @param array|string $_id
59
- * @param null|array|string $_opts
60
- *
61
- * @throws \Stripe\Exception\BadMethodCallException
62
- */
63
- public static function retrieve($_id, $_opts = null)
64
- {
65
- $msg = 'Capabilities cannot be retrieved without an account ID. ' .
66
- 'Retrieve a capability using `Account::retrieveCapability(' .
67
- "'account_id', 'capability_id')`.";
68
-
69
- throw new Exception\BadMethodCallException($msg);
70
- }
71
-
72
- /**
73
- * @param string $_id
74
- * @param null|array $_params
75
- * @param null|array|string $_options
76
- *
77
- * @throws \Stripe\Exception\BadMethodCallException
78
- */
79
- public static function update($_id, $_params = null, $_options = null)
80
- {
81
- $msg = 'Capabilities cannot be updated without an account ID. ' .
82
- 'Update a capability using `Account::updateCapability(' .
83
- "'account_id', 'capability_id', \$updateParams)`.";
84
-
85
- throw new Exception\BadMethodCallException($msg);
86
- }
87
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Card.php CHANGED
@@ -1,142 +1,13 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * You can store multiple cards on a customer in order to charge the customer
9
- * later. You can also store multiple debit cards on a recipient in order to
10
- * transfer to those cards later.
11
- *
12
- * Related guide: <a href="https://stripe.com/docs/sources/cards">Card Payments
13
- * with Sources</a>.
14
  *
15
- * @property string $id Unique identifier for the object.
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property null|string|\Stripe\Account $account The account this card belongs to. This attribute will not be in the card object if the card belongs to a customer or recipient instead.
18
- * @property null|string $address_city City/District/Suburb/Town/Village.
19
- * @property null|string $address_country Billing address country, if provided when creating card.
20
- * @property null|string $address_line1 Address line 1 (Street address/PO Box/Company name).
21
- * @property null|string $address_line1_check If <code>address_line1</code> was provided, results of the check: <code>pass</code>, <code>fail</code>, <code>unavailable</code>, or <code>unchecked</code>.
22
- * @property null|string $address_line2 Address line 2 (Apartment/Suite/Unit/Building).
23
- * @property null|string $address_state State/County/Province/Region.
24
- * @property null|string $address_zip ZIP or postal code.
25
- * @property null|string $address_zip_check If <code>address_zip</code> was provided, results of the check: <code>pass</code>, <code>fail</code>, <code>unavailable</code>, or <code>unchecked</code>.
26
- * @property null|string[] $available_payout_methods A set of available payout methods for this card. Only values from this set should be passed as the <code>method</code> when creating a payout.
27
- * @property string $brand Card brand. Can be <code>American Express</code>, <code>Diners Club</code>, <code>Discover</code>, <code>JCB</code>, <code>MasterCard</code>, <code>UnionPay</code>, <code>Visa</code>, or <code>Unknown</code>.
28
- * @property null|string $country Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you've collected.
29
- * @property null|string $currency Three-letter <a href="https://stripe.com/docs/payouts">ISO code for currency</a>. Only applicable on accounts (not customers or recipients). The card can be used as a transfer destination for funds in this currency.
30
- * @property null|string|\Stripe\Customer $customer The customer that this card belongs to. This attribute will not be in the card object if the card belongs to an account or recipient instead.
31
- * @property null|string $cvc_check If a CVC was provided, results of the check: <code>pass</code>, <code>fail</code>, <code>unavailable</code>, or <code>unchecked</code>. A result of unchecked indicates that CVC was provided but hasn't been checked yet. Checks are typically performed when attaching a card to a Customer object, or when creating a charge. For more details, see <a href="https://support.stripe.com/questions/check-if-a-card-is-valid-without-a-charge">Check if a card is valid without a charge</a>.
32
- * @property null|bool $default_for_currency Whether this card is the default external account for its currency.
33
- * @property null|string $dynamic_last4 (For tokenized numbers only.) The last four digits of the device account number.
34
- * @property int $exp_month Two-digit number representing the card's expiration month.
35
- * @property int $exp_year Four-digit number representing the card's expiration year.
36
- * @property null|string $fingerprint <p>Uniquely identifies this particular card number. You can use this attribute to check whether two customers who’ve signed up with you are using the same card number, for example. For payment methods that tokenize card information (Apple Pay, Google Pay), the tokenized number might be provided instead of the underlying card number.</p><p><em>Starting May 1, 2021, card fingerprint in India for Connect will change to allow two fingerprints for the same card --- one for India and one for the rest of the world.</em></p>
37
- * @property string $funding Card funding type. Can be <code>credit</code>, <code>debit</code>, <code>prepaid</code>, or <code>unknown</code>.
38
- * @property string $last4 The last four digits of the card.
39
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
40
- * @property null|string $name Cardholder name.
41
- * @property null|string|\Stripe\Recipient $recipient The recipient that this card belongs to. This attribute will not be in the card object if the card belongs to a customer or account instead.
42
- * @property null|string $tokenization_method If the card number is tokenized, this is the method that was used. Can be <code>android_pay</code> (includes Google Pay), <code>apple_pay</code>, <code>masterpass</code>, <code>visa_checkout</code>, or null.
43
  */
44
- class Card extends ApiResource
45
  {
46
- const OBJECT_NAME = 'card';
47
-
48
- use ApiOperations\Delete;
49
- use ApiOperations\Update;
50
-
51
- /**
52
- * Possible string representations of the CVC check status.
53
- *
54
- * @see https://stripe.com/docs/api/cards/object#card_object-cvc_check
55
- */
56
- const CVC_CHECK_FAIL = 'fail';
57
- const CVC_CHECK_PASS = 'pass';
58
- const CVC_CHECK_UNAVAILABLE = 'unavailable';
59
- const CVC_CHECK_UNCHECKED = 'unchecked';
60
-
61
- /**
62
- * Possible string representations of the funding of the card.
63
- *
64
- * @see https://stripe.com/docs/api/cards/object#card_object-funding
65
- */
66
- const FUNDING_CREDIT = 'credit';
67
- const FUNDING_DEBIT = 'debit';
68
- const FUNDING_PREPAID = 'prepaid';
69
- const FUNDING_UNKNOWN = 'unknown';
70
-
71
- /**
72
- * Possible string representations of the tokenization method when using Apple Pay or Google Pay.
73
- *
74
- * @see https://stripe.com/docs/api/cards/object#card_object-tokenization_method
75
- */
76
- const TOKENIZATION_METHOD_APPLE_PAY = 'apple_pay';
77
- const TOKENIZATION_METHOD_GOOGLE_PAY = 'google_pay';
78
-
79
- /**
80
- * @return string The instance URL for this resource. It needs to be special
81
- * cased because cards are nested resources that may belong to different
82
- * top-level resources.
83
- */
84
- public function instanceUrl()
85
- {
86
- if ($this['customer']) {
87
- $base = Customer::classUrl();
88
- $parent = $this['customer'];
89
- $path = 'sources';
90
- } elseif ($this['account']) {
91
- $base = Account::classUrl();
92
- $parent = $this['account'];
93
- $path = 'external_accounts';
94
- } elseif ($this['recipient']) {
95
- $base = Recipient::classUrl();
96
- $parent = $this['recipient'];
97
- $path = 'cards';
98
- } else {
99
- $msg = 'Cards cannot be accessed without a customer ID, account ID or recipient ID.';
100
-
101
- throw new Exception\UnexpectedValueException($msg);
102
- }
103
- $parentExtn = \urlencode(Util\Util::utf8($parent));
104
- $extn = \urlencode(Util\Util::utf8($this['id']));
105
-
106
- return "{$base}/{$parentExtn}/{$path}/{$extn}";
107
- }
108
-
109
- /**
110
- * @param array|string $_id
111
- * @param null|array|string $_opts
112
- *
113
- * @throws \Stripe\Exception\BadMethodCallException
114
- */
115
- public static function retrieve($_id, $_opts = null)
116
- {
117
- $msg = 'Cards cannot be retrieved without a customer ID or an ' .
118
- 'account ID. Retrieve a card using ' .
119
- "`Customer::retrieveSource('customer_id', 'card_id')` or " .
120
- "`Account::retrieveExternalAccount('account_id', 'card_id')`.";
121
-
122
- throw new Exception\BadMethodCallException($msg);
123
- }
124
-
125
- /**
126
- * @param string $_id
127
- * @param null|array $_params
128
- * @param null|array|string $_options
129
- *
130
- * @throws \Stripe\Exception\BadMethodCallException
131
- */
132
- public static function update($_id, $_params = null, $_options = null)
133
- {
134
- $msg = 'Cards cannot be updated without a customer ID or an ' .
135
- 'account ID. Update a card using ' .
136
- "`Customer::updateSource('customer_id', 'card_id', " .
137
- '$updateParams)` or `Account::updateExternalAccount(' .
138
- "'account_id', 'card_id', \$updateParams)`.";
139
 
140
- throw new Exception\BadMethodCallException($msg);
141
- }
142
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Card
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
+ class Card extends ExternalAccount
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
 
 
13
  }
lib/stripe/lib/Charge.php CHANGED
@@ -1,146 +1,184 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * To charge a credit or a debit card, you create a <code>Charge</code> object. You
9
- * can retrieve and refund individual charges as well as list all charges. Charges
10
- * are identified by a unique, random ID.
11
  *
12
- * Related guide: <a
13
- * href="https://stripe.com/docs/payments/accept-a-payment-charges">Accept a
14
- * payment with the Charges API</a>.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  *
16
- * @property string $id Unique identifier for the object.
17
- * @property string $object String representing the object's type. Objects of the same type share the same value.
18
- * @property int $amount Amount intended to be collected by this payment. A positive integer representing how much to charge in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a> (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or <a href="https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts">equivalent in charge currency</a>. The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
19
- * @property int $amount_captured Amount in %s captured (can be less than the amount attribute on the charge if a partial capture was made).
20
- * @property int $amount_refunded Amount in %s refunded (can be less than the amount attribute on the charge if a partial refund was issued).
21
- * @property null|string|\Stripe\StripeObject $application ID of the Connect application that created the charge.
22
- * @property null|string|\Stripe\ApplicationFee $application_fee The application fee (if any) for the charge. <a href="https://stripe.com/docs/connect/direct-charges#collecting-fees">See the Connect documentation</a> for details.
23
- * @property null|int $application_fee_amount The amount of the application fee (if any) requested for the charge. <a href="https://stripe.com/docs/connect/direct-charges#collecting-fees">See the Connect documentation</a> for details.
24
- * @property null|string|\Stripe\BalanceTransaction $balance_transaction ID of the balance transaction that describes the impact of this charge on your account balance (not including refunds or disputes).
25
- * @property \Stripe\StripeObject $billing_details
26
- * @property null|string $calculated_statement_descriptor The full statement descriptor that is passed to card networks, and that is displayed on your customers' credit card and bank statements. Allows you to see what the statement descriptor looks like after the static and dynamic portions are combined.
27
- * @property bool $captured If the charge was created without capturing, this Boolean represents whether it is still uncaptured or has since been captured.
28
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
29
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
30
- * @property null|string|\Stripe\Customer $customer ID of the customer this charge is for if one exists.
31
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
32
- * @property null|string|\Stripe\Account $destination ID of an existing, connected Stripe account to transfer funds to if <code>transfer_data</code> was specified in the charge request.
33
- * @property null|string|\Stripe\Dispute $dispute Details about the dispute if the charge has been disputed.
34
- * @property bool $disputed Whether the charge has been disputed.
35
- * @property null|string $failure_code Error code explaining reason for charge failure if available (see <a href="https://stripe.com/docs/api#errors">the errors section</a> for a list of codes).
36
- * @property null|string $failure_message Message to user further explaining reason for charge failure if available.
37
- * @property null|\Stripe\StripeObject $fraud_details Information on fraud assessments for the charge.
38
- * @property null|string|\Stripe\Invoice $invoice ID of the invoice this charge is for if one exists.
39
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
40
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
41
- * @property null|string|\Stripe\Account $on_behalf_of The account (if any) the charge was made on behalf of without triggering an automatic transfer. See the <a href="https://stripe.com/docs/connect/charges-transfers">Connect documentation</a> for details.
42
- * @property null|string|\Stripe\Order $order ID of the order this charge is for if one exists.
43
- * @property null|\Stripe\StripeObject $outcome Details about whether the payment was accepted, and why. See <a href="https://stripe.com/docs/declines">understanding declines</a> for details.
44
- * @property bool $paid <code>true</code> if the charge succeeded, or was successfully authorized for later capture.
45
- * @property null|string|\Stripe\PaymentIntent $payment_intent ID of the PaymentIntent associated with this charge, if one exists.
46
- * @property null|string $payment_method ID of the payment method used in this charge.
47
- * @property null|\Stripe\StripeObject $payment_method_details Details about the payment method at the time of the transaction.
48
- * @property null|string $receipt_email This is the email address that the receipt for this charge was sent to.
49
- * @property null|string $receipt_number This is the transaction number that appears on email receipts sent for this charge. This attribute will be <code>null</code> until a receipt has been sent.
50
- * @property null|string $receipt_url This is the URL to view the receipt for this charge. The receipt is kept up-to-date to the latest state of the charge, including any refunds. If the charge is for an Invoice, the receipt will be stylized as an Invoice receipt.
51
- * @property bool $refunded Whether the charge has been fully refunded. If the charge is only partially refunded, this attribute will still be false.
52
- * @property \Stripe\Collection $refunds A list of refunds that have been applied to the charge.
53
- * @property null|string|\Stripe\Review $review ID of the review associated with this charge if one exists.
54
- * @property null|\Stripe\StripeObject $shipping Shipping information for the charge.
55
- * @property null|\Stripe\Account|\Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source $source This is a legacy field that will be removed in the future. It contains the Source, Card, or BankAccount object used for the charge. For details about the payment method used for this charge, refer to <code>payment_method</code> or <code>payment_method_details</code> instead.
56
- * @property null|string|\Stripe\Transfer $source_transfer The transfer ID which created this charge. Only present if the charge came from another Stripe account. <a href="https://stripe.com/docs/connect/destination-charges">See the Connect documentation</a> for details.
57
- * @property null|string $statement_descriptor For card charges, use <code>statement_descriptor_suffix</code> instead. Otherwise, you can use this value as the complete description of a charge on your customers’ statements. Must contain at least one letter, maximum 22 characters.
58
- * @property null|string $statement_descriptor_suffix Provides information about the charge that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor.
59
- * @property string $status The status of the payment is either <code>succeeded</code>, <code>pending</code>, or <code>failed</code>.
60
- * @property string|\Stripe\Transfer $transfer ID of the transfer to the <code>destination</code> account (only applicable if the charge was created using the <code>destination</code> parameter).
61
- * @property null|\Stripe\StripeObject $transfer_data An optional dictionary including the account to automatically transfer to as part of a destination charge. <a href="https://stripe.com/docs/connect/destination-charges">See the Connect documentation</a> for details.
62
- * @property null|string $transfer_group A string that identifies this transaction as part of a group. See the <a href="https://stripe.com/docs/connect/charges-transfers#transfer-options">Connect documentation</a> for details.
63
  */
64
  class Charge extends ApiResource
65
  {
66
- const OBJECT_NAME = 'charge';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
- use ApiOperations\All;
69
- use ApiOperations\Create;
70
- use ApiOperations\Retrieve;
71
- use ApiOperations\Update;
 
 
 
 
 
 
72
 
73
- const STATUS_FAILED = 'failed';
74
- const STATUS_PENDING = 'pending';
75
- const STATUS_SUCCEEDED = 'succeeded';
 
 
 
 
 
 
 
 
76
 
77
  /**
78
- * Possible string representations of decline codes.
79
- * These strings are applicable to the decline_code property of the \Stripe\Exception\CardException exception.
80
  *
81
- * @see https://stripe.com/docs/declines/codes
82
  */
83
- const DECLINED_AUTHENTICATION_REQUIRED = 'authentication_required';
84
- const DECLINED_APPROVE_WITH_ID = 'approve_with_id';
85
- const DECLINED_CALL_ISSUER = 'call_issuer';
86
- const DECLINED_CARD_NOT_SUPPORTED = 'card_not_supported';
87
- const DECLINED_CARD_VELOCITY_EXCEEDED = 'card_velocity_exceeded';
88
- const DECLINED_CURRENCY_NOT_SUPPORTED = 'currency_not_supported';
89
- const DECLINED_DO_NOT_HONOR = 'do_not_honor';
90
- const DECLINED_DO_NOT_TRY_AGAIN = 'do_not_try_again';
91
- const DECLINED_DUPLICATED_TRANSACTION = 'duplicate_transaction';
92
- const DECLINED_EXPIRED_CARD = 'expired_card';
93
- const DECLINED_FRAUDULENT = 'fraudulent';
94
- const DECLINED_GENERIC_DECLINE = 'generic_decline';
95
- const DECLINED_INCORRECT_NUMBER = 'incorrect_number';
96
- const DECLINED_INCORRECT_CVC = 'incorrect_cvc';
97
- const DECLINED_INCORRECT_PIN = 'incorrect_pin';
98
- const DECLINED_INCORRECT_ZIP = 'incorrect_zip';
99
- const DECLINED_INSUFFICIENT_FUNDS = 'insufficient_funds';
100
- const DECLINED_INVALID_ACCOUNT = 'invalid_account';
101
- const DECLINED_INVALID_AMOUNT = 'invalid_amount';
102
- const DECLINED_INVALID_CVC = 'invalid_cvc';
103
- const DECLINED_INVALID_EXPIRY_YEAR = 'invalid_expiry_year';
104
- const DECLINED_INVALID_NUMBER = 'invalid_number';
105
- const DECLINED_INVALID_PIN = 'invalid_pin';
106
- const DECLINED_ISSUER_NOT_AVAILABLE = 'issuer_not_available';
107
- const DECLINED_LOST_CARD = 'lost_card';
108
- const DECLINED_MERCHANT_BLACKLIST = 'merchant_blacklist';
109
- const DECLINED_NEW_ACCOUNT_INFORMATION_AVAILABLE = 'new_account_information_available';
110
- const DECLINED_NO_ACTION_TAKEN = 'no_action_taken';
111
- const DECLINED_NOT_PERMITTED = 'not_permitted';
112
- const DECLINED_OFFLINE_PIN_REQUIRED = 'offline_pin_required';
113
- const DECLINED_ONLINE_OR_OFFLINE_PIN_REQUIRED = 'online_or_offline_pin_required';
114
- const DECLINED_PICKUP_CARD = 'pickup_card';
115
- const DECLINED_PIN_TRY_EXCEEDED = 'pin_try_exceeded';
116
- const DECLINED_PROCESSING_ERROR = 'processing_error';
117
- const DECLINED_REENTER_TRANSACTION = 'reenter_transaction';
118
- const DECLINED_RESTRICTED_CARD = 'restricted_card';
119
- const DECLINED_REVOCATION_OF_ALL_AUTHORIZATIONS = 'revocation_of_all_authorizations';
120
- const DECLINED_REVOCATION_OF_AUTHORIZATION = 'revocation_of_authorization';
121
- const DECLINED_SECURITY_VIOLATION = 'security_violation';
122
- const DECLINED_SERVICE_NOT_ALLOWED = 'service_not_allowed';
123
- const DECLINED_STOLEN_CARD = 'stolen_card';
124
- const DECLINED_STOP_PAYMENT_ORDER = 'stop_payment_order';
125
- const DECLINED_TESTMODE_DECLINE = 'testmode_decline';
126
- const DECLINED_TRANSACTION_NOT_ALLOWED = 'transaction_not_allowed';
127
- const DECLINED_TRY_AGAIN_LATER = 'try_again_later';
128
- const DECLINED_WITHDRAWAL_COUNT_LIMIT_EXCEEDED = 'withdrawal_count_limit_exceeded';
129
 
130
  /**
131
- * @param null|array $params
132
- * @param null|array|string $opts
133
  *
134
- * @throws \Stripe\Exception\ApiErrorException if the request fails
 
 
 
 
 
 
 
 
 
 
 
 
135
  *
136
- * @return Charge the captured charge
137
  */
138
- public function capture($params = null, $opts = null)
139
  {
140
  $url = $this->instanceUrl() . '/capture';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
142
  $this->refreshFrom($response, $opts);
 
 
143
 
 
 
 
 
 
 
 
 
 
 
 
144
  return $this;
145
  }
146
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Charge
 
 
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $amount_refunded
12
+ * @property mixed $application_fee
13
+ * @property string $balance_transaction
14
+ * @property bool $captured
15
+ * @property int $created
16
+ * @property string $currency
17
+ * @property string $customer
18
+ * @property mixed $description
19
+ * @property mixed $destination
20
+ * @property mixed $dispute
21
+ * @property mixed $failure_code
22
+ * @property mixed $failure_message
23
+ * @property mixed $fraud_details
24
+ * @property mixed $invoice
25
+ * @property bool $livemode
26
+ * @property mixed $metadata
27
+ * @property mixed $order
28
+ * @property bool $paid
29
+ * @property mixed $receipt_email
30
+ * @property mixed $receipt_number
31
+ * @property bool $refunded
32
+ * @property mixed $refunds
33
+ * @property mixed $shipping
34
+ * @property mixed $source
35
+ * @property mixed $source_transfer
36
+ * @property mixed $statement_descriptor
37
+ * @property string $status
38
  *
39
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  */
41
  class Charge extends ApiResource
42
  {
43
+ /**
44
+ * @param string $id The ID of the charge to retrieve.
45
+ * @param array|string|null $options
46
+ *
47
+ * @return Charge
48
+ */
49
+ public static function retrieve($id, $options = null)
50
+ {
51
+ return self::_retrieve($id, $options);
52
+ }
53
+
54
+ /**
55
+ * @param array|null $params
56
+ * @param array|string|null $options
57
+ *
58
+ * @return Collection of Charges
59
+ */
60
+ public static function all($params = null, $options = null)
61
+ {
62
+ return self::_all($params, $options);
63
+ }
64
 
65
+ /**
66
+ * @param array|null $params
67
+ * @param array|string|null $options
68
+ *
69
+ * @return Charge The created charge.
70
+ */
71
+ public static function create($params = null, $options = null)
72
+ {
73
+ return self::_create($params, $options);
74
+ }
75
 
76
+ /**
77
+ * @param string $id The ID of the charge to update.
78
+ * @param array|null $params
79
+ * @param array|string|null $options
80
+ *
81
+ * @return Charge The updated charge.
82
+ */
83
+ public static function update($id, $params = null, $options = null)
84
+ {
85
+ return self::_update($id, $params, $options);
86
+ }
87
 
88
  /**
89
+ * @param array|string|null $options
 
90
  *
91
+ * @return Charge The saved charge.
92
  */
93
+ public function save($options = null)
94
+ {
95
+ return $this->_save($options);
96
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
  /**
99
+ * @param array|null $params
100
+ * @param array|string|null $options
101
  *
102
+ * @return Charge The refunded charge.
103
+ */
104
+ public function refund($params = null, $options = null)
105
+ {
106
+ $url = $this->instanceUrl() . '/refund';
107
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
108
+ $this->refreshFrom($response, $opts);
109
+ return $this;
110
+ }
111
+
112
+ /**
113
+ * @param array|null $params
114
+ * @param array|string|null $options
115
  *
116
+ * @return Charge The captured charge.
117
  */
118
+ public function capture($params = null, $options = null)
119
  {
120
  $url = $this->instanceUrl() . '/capture';
121
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
122
+ $this->refreshFrom($response, $opts);
123
+ return $this;
124
+ }
125
+
126
+ /**
127
+ * @param array|null $params
128
+ * @param array|string|null $options
129
+ *
130
+ * @deprecated Use the `save` method on the Dispute object
131
+ *
132
+ * @return array The updated dispute.
133
+ */
134
+ public function updateDispute($params = null, $options = null)
135
+ {
136
+ $url = $this->instanceUrl() . '/dispute';
137
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
138
+ $this->refreshFrom(array('dispute' => $response), $opts, true);
139
+ return $this->dispute;
140
+ }
141
+
142
+ /**
143
+ * @param array|string|null $options
144
+ *
145
+ * @deprecated Use the `close` method on the Dispute object
146
+ *
147
+ * @return Charge The updated charge.
148
+ */
149
+ public function closeDispute($options = null)
150
+ {
151
+ $url = $this->instanceUrl() . '/dispute/close';
152
+ list($response, $opts) = $this->_request('post', $url, null, $options);
153
+ $this->refreshFrom($response, $opts);
154
+ return $this;
155
+ }
156
+
157
+ /**
158
+ * @param array|string|null $opts
159
+ *
160
+ * @return Charge The updated charge.
161
+ */
162
+ public function markAsFraudulent($opts = null)
163
+ {
164
+ $params = array('fraud_details' => array('user_report' => 'fraudulent'));
165
+ $url = $this->instanceUrl();
166
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
167
  $this->refreshFrom($response, $opts);
168
+ return $this;
169
+ }
170
 
171
+ /**
172
+ * @param array|string|null $opts
173
+ *
174
+ * @return Charge The updated charge.
175
+ */
176
+ public function markAsSafe($opts = null)
177
+ {
178
+ $params = array('fraud_details' => array('user_report' => 'safe'));
179
+ $url = $this->instanceUrl();
180
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
181
+ $this->refreshFrom($response, $opts);
182
  return $this;
183
  }
184
  }
lib/stripe/lib/Checkout/Session.php DELETED
@@ -1,90 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Checkout;
6
-
7
- /**
8
- * A Checkout Session represents your customer's session as they pay for one-time
9
- * purchases or subscriptions through <a
10
- * href="https://stripe.com/docs/payments/checkout">Checkout</a>. We recommend
11
- * creating a new Session each time your customer attempts to pay.
12
- *
13
- * Once payment is successful, the Checkout Session will contain a reference to the
14
- * <a href="https://stripe.com/docs/api/customers">Customer</a>, and either the
15
- * successful <a
16
- * href="https://stripe.com/docs/api/payment_intents">PaymentIntent</a> or an
17
- * active <a href="https://stripe.com/docs/api/subscriptions">Subscription</a>.
18
- *
19
- * You can create a Checkout Session on your server and pass its ID to the client
20
- * to begin Checkout.
21
- *
22
- * Related guide: <a href="https://stripe.com/docs/payments/checkout/api">Checkout
23
- * Server Quickstart</a>.
24
- *
25
- * @property string $id Unique identifier for the object. Used to pass to <code>redirectToCheckout</code> in Stripe.js.
26
- * @property string $object String representing the object's type. Objects of the same type share the same value.
27
- * @property null|bool $allow_promotion_codes Enables user redeemable promotion codes.
28
- * @property null|int $amount_subtotal Total of all items before discounts or taxes are applied.
29
- * @property null|int $amount_total Total of all items after discounts and taxes are applied.
30
- * @property null|string $billing_address_collection Describes whether Checkout should collect the customer's billing address.
31
- * @property string $cancel_url The URL the customer will be directed to if they decide to cancel payment and return to your website.
32
- * @property null|string $client_reference_id A unique string to reference the Checkout Session. This can be a customer ID, a cart ID, or similar, and can be used to reconcile the Session with your internal systems.
33
- * @property null|string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
34
- * @property null|string|\Stripe\Customer $customer The ID of the customer for this Session. For Checkout Sessions in <code>payment</code> or <code>subscription</code> mode, Checkout will create a new customer object based on information provided during the payment flow unless an existing customer was provided when the Session was created.
35
- * @property null|\Stripe\StripeObject $customer_details The customer details including the customer's tax exempt status and the customer's tax IDs.
36
- * @property null|string $customer_email If provided, this value will be used when the Customer object is created. If not provided, customers will be asked to enter their email address. Use this parameter to prefill customer data if you already have an email on file. To access information about the customer once the payment flow is complete, use the <code>customer</code> attribute.
37
- * @property \Stripe\Collection $line_items The line items purchased by the customer.
38
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
39
- * @property null|string $locale The IETF language tag of the locale Checkout is displayed in. If blank or <code>auto</code>, the browser's locale is used.
40
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
41
- * @property string $mode The mode of the Checkout Session.
42
- * @property null|string|\Stripe\PaymentIntent $payment_intent The ID of the PaymentIntent for Checkout Sessions in <code>payment</code> mode.
43
- * @property null|\Stripe\StripeObject $payment_method_options Payment-method-specific configuration for the PaymentIntent or SetupIntent of this CheckoutSession.
44
- * @property string[] $payment_method_types A list of the types of payment methods (e.g. card) this Checkout Session is allowed to accept.
45
- * @property string $payment_status The payment status of the Checkout Session, one of <code>paid</code>, <code>unpaid</code>, or <code>no_payment_required</code>. You can use this value to decide when to fulfill your customer's order.
46
- * @property null|string|\Stripe\SetupIntent $setup_intent The ID of the SetupIntent for Checkout Sessions in <code>setup</code> mode.
47
- * @property null|\Stripe\StripeObject $shipping Shipping information for this Checkout Session.
48
- * @property null|\Stripe\StripeObject $shipping_address_collection When set, provides configuration for Checkout to collect a shipping address from a customer.
49
- * @property null|string $submit_type Describes the type of transaction being performed by Checkout in order to customize relevant text on the page, such as the submit button. <code>submit_type</code> can only be specified on Checkout Sessions in <code>payment</code> mode, but not Checkout Sessions in <code>subscription</code> or <code>setup</code> mode.
50
- * @property null|string|\Stripe\Subscription $subscription The ID of the subscription for Checkout Sessions in <code>subscription</code> mode.
51
- * @property string $success_url The URL the customer will be directed to after the payment or subscription creation is successful.
52
- * @property null|\Stripe\StripeObject $total_details Tax and discount details for the computed total amount.
53
- */
54
- class Session extends \Stripe\ApiResource
55
- {
56
- const OBJECT_NAME = 'checkout.session';
57
-
58
- use \Stripe\ApiOperations\All;
59
- use \Stripe\ApiOperations\Create;
60
- use \Stripe\ApiOperations\NestedResource;
61
- use \Stripe\ApiOperations\Retrieve;
62
-
63
- const BILLING_ADDRESS_COLLECTION_AUTO = 'auto';
64
- const BILLING_ADDRESS_COLLECTION_REQUIRED = 'required';
65
-
66
- const PAYMENT_STATUS_NO_PAYMENT_REQUIRED = 'no_payment_required';
67
- const PAYMENT_STATUS_PAID = 'paid';
68
- const PAYMENT_STATUS_UNPAID = 'unpaid';
69
-
70
- const SUBMIT_TYPE_AUTO = 'auto';
71
- const SUBMIT_TYPE_BOOK = 'book';
72
- const SUBMIT_TYPE_DONATE = 'donate';
73
- const SUBMIT_TYPE_PAY = 'pay';
74
-
75
- const PATH_LINE_ITEMS = '/line_items';
76
-
77
- /**
78
- * @param string $id the ID of the session on which to retrieve the items
79
- * @param null|array $params
80
- * @param null|array|string $opts
81
- *
82
- * @throws \Stripe\Exception\ApiErrorException if the request fails
83
- *
84
- * @return \Stripe\Collection the list of items
85
- */
86
- public static function allLineItems($id, $params = null, $opts = null)
87
- {
88
- return self::_allNestedResources($id, static::PATH_LINE_ITEMS, $params, $opts);
89
- }
90
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Collection.php CHANGED
@@ -3,279 +3,85 @@
3
  namespace Stripe;
4
 
5
  /**
6
- * Class Collection.
7
  *
8
- * @property string $object
9
- * @property string $url
10
- * @property bool $has_more
11
- * @property \Stripe\StripeObject[] $data
 
 
12
  */
13
- class Collection extends StripeObject implements \Countable, \IteratorAggregate
14
  {
15
- const OBJECT_NAME = 'list';
16
-
17
- use ApiOperations\Request;
18
-
19
- /** @var array */
20
- protected $filters = [];
21
 
22
- /**
23
- * @return string the base URL for the given class
24
- */
25
- public static function baseUrl()
26
  {
27
- return Stripe::$apiBase;
28
- }
29
-
30
- /**
31
- * Returns the filters.
32
- *
33
- * @return array the filters
34
- */
35
- public function getFilters()
36
- {
37
- return $this->filters;
38
- }
39
-
40
- /**
41
- * Sets the filters, removing paging options.
42
- *
43
- * @param array $filters the filters
44
- */
45
- public function setFilters($filters)
46
- {
47
- $this->filters = $filters;
48
- }
49
-
50
- public function offsetGet($k)
51
- {
52
- if (\is_string($k)) {
53
- return parent::offsetGet($k);
54
- }
55
- $msg = "You tried to access the {$k} index, but Collection " .
56
- 'types only support string keys. (HINT: List calls ' .
57
- 'return an object with a `data` (which is the data ' .
58
- "array). You likely want to call ->data[{$k}])";
59
-
60
- throw new Exception\InvalidArgumentException($msg);
61
  }
62
 
63
  public function all($params = null, $opts = null)
64
  {
65
- self::_validateParams($params);
66
  list($url, $params) = $this->extractPathAndUpdateParams($params);
67
 
68
  list($response, $opts) = $this->_request('get', $url, $params, $opts);
69
- $obj = Util\Util::convertToStripeObject($response, $opts);
70
- if (!($obj instanceof \Stripe\Collection)) {
71
- throw new \Stripe\Exception\UnexpectedValueException(
72
- 'Expected type ' . \Stripe\Collection::class . ', got "' . \get_class($obj) . '" instead.'
73
- );
74
- }
75
- $obj->setFilters($params);
76
-
77
- return $obj;
78
  }
79
 
80
  public function create($params = null, $opts = null)
81
  {
82
- self::_validateParams($params);
83
  list($url, $params) = $this->extractPathAndUpdateParams($params);
84
 
85
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
86
-
87
  return Util\Util::convertToStripeObject($response, $opts);
88
  }
89
 
90
  public function retrieve($id, $params = null, $opts = null)
91
  {
92
- self::_validateParams($params);
93
  list($url, $params) = $this->extractPathAndUpdateParams($params);
94
 
95
  $id = Util\Util::utf8($id);
96
- $extn = \urlencode($id);
97
  list($response, $opts) = $this->_request(
98
  'get',
99
- "{$url}/{$extn}",
100
  $params,
101
  $opts
102
  );
103
-
104
  return Util\Util::convertToStripeObject($response, $opts);
105
  }
106
 
107
  /**
108
- * @return int the number of objects in the current page
109
- */
110
- public function count()
111
- {
112
- return \count($this->data);
113
- }
114
-
115
- /**
116
- * @return \ArrayIterator an iterator that can be used to iterate
117
- * across objects in the current page
118
- */
119
- public function getIterator()
120
- {
121
- return new \ArrayIterator($this->data);
122
- }
123
-
124
- /**
125
- * @return \ArrayIterator an iterator that can be used to iterate
126
- * backwards across objects in the current page
127
- */
128
- public function getReverseIterator()
129
- {
130
- return new \ArrayIterator(\array_reverse($this->data));
131
- }
132
-
133
- /**
134
- * @return \Generator|StripeObject[] A generator that can be used to
135
- * iterate across all objects across all pages. As page boundaries are
136
  * encountered, the next page will be fetched automatically for
137
  * continued iteration.
138
  */
139
  public function autoPagingIterator()
140
  {
141
- $page = $this;
142
-
143
- while (true) {
144
- $filters = $this->filters ?: [];
145
- if (\array_key_exists('ending_before', $filters)
146
- && !\array_key_exists('starting_after', $filters)) {
147
- foreach ($page->getReverseIterator() as $item) {
148
- yield $item;
149
- }
150
- $page = $page->previousPage();
151
- } else {
152
- foreach ($page as $item) {
153
- yield $item;
154
- }
155
- $page = $page->nextPage();
156
- }
157
-
158
- if ($page->isEmpty()) {
159
- break;
160
- }
161
- }
162
- }
163
-
164
- /**
165
- * Returns an empty collection. This is returned from {@see nextPage()}
166
- * when we know that there isn't a next page in order to replicate the
167
- * behavior of the API when it attempts to return a page beyond the last.
168
- *
169
- * @param null|array|string $opts
170
- *
171
- * @return Collection
172
- */
173
- public static function emptyCollection($opts = null)
174
- {
175
- return Collection::constructFrom(['data' => []], $opts);
176
- }
177
-
178
- /**
179
- * Returns true if the page object contains no element.
180
- *
181
- * @return bool
182
- */
183
- public function isEmpty()
184
- {
185
- return empty($this->data);
186
- }
187
-
188
- /**
189
- * Fetches the next page in the resource list (if there is one).
190
- *
191
- * This method will try to respect the limit of the current page. If none
192
- * was given, the default limit will be fetched again.
193
- *
194
- * @param null|array $params
195
- * @param null|array|string $opts
196
- *
197
- * @return Collection
198
- */
199
- public function nextPage($params = null, $opts = null)
200
- {
201
- if (!$this->has_more) {
202
- return static::emptyCollection($opts);
203
- }
204
-
205
- $lastId = \end($this->data)->id;
206
-
207
- $params = \array_merge(
208
- $this->filters ?: [],
209
- ['starting_after' => $lastId],
210
- $params ?: []
211
- );
212
-
213
- return $this->all($params, $opts);
214
- }
215
-
216
- /**
217
- * Fetches the previous page in the resource list (if there is one).
218
- *
219
- * This method will try to respect the limit of the current page. If none
220
- * was given, the default limit will be fetched again.
221
- *
222
- * @param null|array $params
223
- * @param null|array|string $opts
224
- *
225
- * @return Collection
226
- */
227
- public function previousPage($params = null, $opts = null)
228
- {
229
- if (!$this->has_more) {
230
- return static::emptyCollection($opts);
231
- }
232
-
233
- $firstId = $this->data[0]->id;
234
-
235
- $params = \array_merge(
236
- $this->filters ?: [],
237
- ['ending_before' => $firstId],
238
- $params ?: []
239
- );
240
-
241
- return $this->all($params, $opts);
242
- }
243
-
244
- /**
245
- * Gets the first item from the current page. Returns `null` if the current page is empty.
246
- *
247
- * @return null|\Stripe\StripeObject
248
- */
249
- public function first()
250
- {
251
- return \count($this->data) > 0 ? $this->data[0] : null;
252
- }
253
-
254
- /**
255
- * Gets the last item from the current page. Returns `null` if the current page is empty.
256
- *
257
- * @return null|\Stripe\StripeObject
258
- */
259
- public function last()
260
- {
261
- return \count($this->data) > 0 ? $this->data[\count($this->data) - 1] : null;
262
  }
263
 
264
  private function extractPathAndUpdateParams($params)
265
  {
266
- $url = \parse_url($this->url);
267
  if (!isset($url['path'])) {
268
- throw new Exception\UnexpectedValueException("Could not parse list url into parts: {$url}");
269
  }
270
 
271
  if (isset($url['query'])) {
272
  // If the URL contains a query param, parse it out into $params so they
273
  // don't interact weirdly with each other.
274
- $query = [];
275
- \parse_str($url['query'], $query);
276
- $params = \array_merge($params ?: [], $query);
 
277
  }
278
 
279
- return [$url['path'], $params];
280
  }
281
  }
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Collection
7
  *
8
+ * @param string $object
9
+ * @param string $url
10
+ * @param bool $has_more
11
+ * @param mixed $data
12
+ *
13
+ * @package Stripe
14
  */
15
+ class Collection extends ApiResource
16
  {
17
+ protected $_requestParams = array();
 
 
 
 
 
18
 
19
+ public function setRequestParams($params)
 
 
 
20
  {
21
+ $this->_requestParams = $params;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  }
23
 
24
  public function all($params = null, $opts = null)
25
  {
 
26
  list($url, $params) = $this->extractPathAndUpdateParams($params);
27
 
28
  list($response, $opts) = $this->_request('get', $url, $params, $opts);
29
+ $this->_requestParams = $params;
30
+ return Util\Util::convertToStripeObject($response, $opts);
 
 
 
 
 
 
 
31
  }
32
 
33
  public function create($params = null, $opts = null)
34
  {
 
35
  list($url, $params) = $this->extractPathAndUpdateParams($params);
36
 
37
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
38
+ $this->_requestParams = $params;
39
  return Util\Util::convertToStripeObject($response, $opts);
40
  }
41
 
42
  public function retrieve($id, $params = null, $opts = null)
43
  {
 
44
  list($url, $params) = $this->extractPathAndUpdateParams($params);
45
 
46
  $id = Util\Util::utf8($id);
47
+ $extn = urlencode($id);
48
  list($response, $opts) = $this->_request(
49
  'get',
50
+ "$url/$extn",
51
  $params,
52
  $opts
53
  );
54
+ $this->_requestParams = $params;
55
  return Util\Util::convertToStripeObject($response, $opts);
56
  }
57
 
58
  /**
59
+ * @return AutoPagingIterator An iterator that can be used to iterate
60
+ * across all objects across all pages. As page boundaries are
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  * encountered, the next page will be fetched automatically for
62
  * continued iteration.
63
  */
64
  public function autoPagingIterator()
65
  {
66
+ return new Util\AutoPagingIterator($this, $this->_requestParams);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
69
  private function extractPathAndUpdateParams($params)
70
  {
71
+ $url = parse_url($this->url);
72
  if (!isset($url['path'])) {
73
+ throw new Error\Api("Could not parse list url into parts: $url");
74
  }
75
 
76
  if (isset($url['query'])) {
77
  // If the URL contains a query param, parse it out into $params so they
78
  // don't interact weirdly with each other.
79
+ $query = array();
80
+ parse_str($url['query'], $query);
81
+ // PHP 5.2 doesn't support the ?: operator :(
82
+ $params = array_merge($params ? $params : array(), $query);
83
  }
84
 
85
+ return array($url['path'], $params);
86
  }
87
  }
lib/stripe/lib/CountrySpec.php CHANGED
@@ -1,30 +1,44 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Stripe needs to collect certain pieces of information about each account
9
- * created. These requirements can differ depending on the account's country. The
10
- * Country Specs API makes these rules available to your integration.
11
- *
12
- * You can also view the information from this API call as <a
13
- * href="/docs/connect/required-verification-information">an online guide</a>.
14
  *
15
- * @property string $id Unique identifier for the object. Represented as the ISO country code for this country.
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property string $default_currency The default currency for this country. This applies to both payment methods and bank accounts.
18
- * @property \Stripe\StripeObject $supported_bank_account_currencies Currencies that can be accepted in the specific country (for transfers).
19
- * @property string[] $supported_payment_currencies Currencies that can be accepted in the specified country (for payments).
20
- * @property string[] $supported_payment_methods Payment methods available in the specified country. You may need to enable some payment methods (e.g., <a href="https://stripe.com/docs/ach">ACH</a>) on your account before they appear in this list. The <code>stripe</code> payment method refers to <a href="https://stripe.com/docs/connect/destination-charges">charging through your platform</a>.
21
- * @property string[] $supported_transfer_countries Countries that can accept transfers from the specified country.
22
- * @property \Stripe\StripeObject $verification_fields
23
  */
24
  class CountrySpec extends ApiResource
25
  {
26
- const OBJECT_NAME = 'country_spec';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- use ApiOperations\All;
29
- use ApiOperations\Retrieve;
 
 
 
 
 
 
 
 
30
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class CountrySpec
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
9
  */
10
  class CountrySpec extends ApiResource
11
  {
12
+ /**
13
+ * This is a special case because the country specs endpoint has an
14
+ * underscore in it. The parent `className` function strips underscores.
15
+ *
16
+ * @return string The name of the class.
17
+ */
18
+ public static function className()
19
+ {
20
+ return 'country_spec';
21
+ }
22
+
23
+ /**
24
+ * @param string $country The ISO country code of the country we retrieve the CountrySpec for.
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return CountrySpec
28
+ */
29
+ public static function retrieve($country, $opts = null)
30
+ {
31
+ return self::_retrieve($country, $opts);
32
+ }
33
 
34
+ /**
35
+ * @param array|null $params
36
+ * @param array|string|null $opts
37
+ *
38
+ * @return Collection of CountrySpecs
39
+ */
40
+ public static function all($params = null, $opts = null)
41
+ {
42
+ return self::_all($params, $opts);
43
+ }
44
  }
lib/stripe/lib/Coupon.php CHANGED
@@ -1,41 +1,77 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * A coupon contains information about a percent-off or amount-off discount you
9
- * might want to apply to a customer. Coupons may be applied to <a
10
- * href="https://stripe.com/docs/api#invoices">invoices</a> or <a
11
- * href="https://stripe.com/docs/api#create_order-coupon">orders</a>. Coupons do
12
- * not work with conventional one-off <a
13
- * href="https://stripe.com/docs/api#create_charge">charges</a>.
14
  *
15
- * @property string $id Unique identifier for the object.
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property null|int $amount_off Amount (in the <code>currency</code> specified) that will be taken off the subtotal of any invoices for this customer.
18
- * @property \Stripe\StripeObject $applies_to
19
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
20
- * @property null|string $currency If <code>amount_off</code> has been set, the three-letter <a href="https://stripe.com/docs/currencies">ISO code for the currency</a> of the amount to take off.
21
- * @property string $duration One of <code>forever</code>, <code>once</code>, and <code>repeating</code>. Describes how long a customer who applies this coupon will get the discount.
22
- * @property null|int $duration_in_months If <code>duration</code> is <code>repeating</code>, the number of months the coupon applies. Null if coupon <code>duration</code> is <code>forever</code> or <code>once</code>.
23
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
24
- * @property null|int $max_redemptions Maximum number of times this coupon can be redeemed, in total, across all customers, before it is no longer valid.
25
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
26
- * @property null|string $name Name of the coupon displayed to customers on for instance invoices or receipts.
27
- * @property null|float $percent_off Percent that will be taken off the subtotal of any invoices for this customer for the duration of the coupon. For example, a coupon with percent_off of 50 will make a %s100 invoice %s50 instead.
28
- * @property null|int $redeem_by Date after which the coupon can no longer be redeemed.
29
- * @property int $times_redeemed Number of times this coupon has been applied to a customer.
30
- * @property bool $valid Taking account of the above properties, whether this coupon can still be applied to a customer.
31
  */
32
  class Coupon extends ApiResource
33
  {
34
- const OBJECT_NAME = 'coupon';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
- use ApiOperations\All;
37
- use ApiOperations\Create;
38
- use ApiOperations\Delete;
39
- use ApiOperations\Retrieve;
40
- use ApiOperations\Update;
 
 
 
 
 
41
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Coupon
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Coupon extends ApiResource
11
  {
12
+ /**
13
+ * @param string $id The ID of the coupon to retrieve.
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return Coupon
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
+
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return Coupon The created coupon.
28
+ */
29
+ public static function create($params = null, $opts = null)
30
+ {
31
+ return self::_create($params, $opts);
32
+ }
33
+
34
+ /**
35
+ * @param string $id The ID of the coupon to update.
36
+ * @param array|null $params
37
+ * @param array|string|null $options
38
+ *
39
+ * @return Coupon The updated coupon.
40
+ */
41
+ public static function update($id, $params = null, $options = null)
42
+ {
43
+ return self::_update($id, $params, $options);
44
+ }
45
+
46
+ /**
47
+ * @param array|null $params
48
+ * @param array|string|null $opts
49
+ *
50
+ * @return Coupon The deleted coupon.
51
+ */
52
+ public function delete($params = null, $opts = null)
53
+ {
54
+ return $this->_delete($params, $opts);
55
+ }
56
+
57
+ /**
58
+ * @param array|string|null $opts
59
+ *
60
+ * @return Coupon The saved coupon.
61
+ */
62
+ public function save($opts = null)
63
+ {
64
+ return $this->_save($opts);
65
+ }
66
 
67
+ /**
68
+ * @param array|null $params
69
+ * @param array|string|null $opts
70
+ *
71
+ * @return Collection of Coupons
72
+ */
73
+ public static function all($params = null, $opts = null)
74
+ {
75
+ return self::_all($params, $opts);
76
+ }
77
  }
lib/stripe/lib/CreditNote.php DELETED
@@ -1,111 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * Issue a credit note to adjust an invoice's amount after the invoice is
9
- * finalized.
10
- *
11
- * Related guide: <a
12
- * href="https://stripe.com/docs/billing/invoices/credit-notes">Credit Notes</a>.
13
- *
14
- * @property string $id Unique identifier for the object.
15
- * @property string $object String representing the object's type. Objects of the same type share the same value.
16
- * @property int $amount The integer amount in %s representing the total amount of the credit note, including tax.
17
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
18
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
19
- * @property string|\Stripe\Customer $customer ID of the customer.
20
- * @property null|string|\Stripe\CustomerBalanceTransaction $customer_balance_transaction Customer balance transaction related to this credit note.
21
- * @property int $discount_amount The integer amount in %s representing the total amount of discount that was credited.
22
- * @property \Stripe\StripeObject[] $discount_amounts The aggregate amounts calculated per discount for all line items.
23
- * @property string|\Stripe\Invoice $invoice ID of the invoice.
24
- * @property \Stripe\Collection $lines Line items that make up the credit note
25
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
26
- * @property null|string $memo Customer-facing text that appears on the credit note PDF.
27
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
28
- * @property string $number A unique number that identifies this particular credit note and appears on the PDF of the credit note and its associated invoice.
29
- * @property null|int $out_of_band_amount Amount that was credited outside of Stripe.
30
- * @property string $pdf The link to download the PDF of the credit note.
31
- * @property null|string $reason Reason for issuing this credit note, one of <code>duplicate</code>, <code>fraudulent</code>, <code>order_change</code>, or <code>product_unsatisfactory</code>
32
- * @property null|string|\Stripe\Refund $refund Refund related to this credit note.
33
- * @property string $status Status of this credit note, one of <code>issued</code> or <code>void</code>. Learn more about <a href="https://stripe.com/docs/billing/invoices/credit-notes#voiding">voiding credit notes</a>.
34
- * @property int $subtotal The integer amount in %s representing the amount of the credit note, excluding tax and invoice level discounts.
35
- * @property \Stripe\StripeObject[] $tax_amounts The aggregate amounts calculated per tax rate for all line items.
36
- * @property int $total The integer amount in %s representing the total amount of the credit note, including tax and all discount.
37
- * @property string $type Type of this credit note, one of <code>pre_payment</code> or <code>post_payment</code>. A <code>pre_payment</code> credit note means it was issued when the invoice was open. A <code>post_payment</code> credit note means it was issued when the invoice was paid.
38
- * @property null|int $voided_at The time that the credit note was voided.
39
- */
40
- class CreditNote extends ApiResource
41
- {
42
- const OBJECT_NAME = 'credit_note';
43
-
44
- use ApiOperations\All;
45
- use ApiOperations\Create;
46
- use ApiOperations\NestedResource;
47
- use ApiOperations\Retrieve;
48
- use ApiOperations\Update;
49
-
50
- const REASON_DUPLICATE = 'duplicate';
51
- const REASON_FRAUDULENT = 'fraudulent';
52
- const REASON_ORDER_CHANGE = 'order_change';
53
- const REASON_PRODUCT_UNSATISFACTORY = 'product_unsatisfactory';
54
-
55
- const STATUS_ISSUED = 'issued';
56
- const STATUS_VOID = 'void';
57
-
58
- const TYPE_POST_PAYMENT = 'post_payment';
59
- const TYPE_PRE_PAYMENT = 'pre_payment';
60
-
61
- /**
62
- * @param null|array $params
63
- * @param null|array|string $opts
64
- *
65
- * @throws \Stripe\Exception\ApiErrorException if the request fails
66
- *
67
- * @return \Stripe\CreditNote the previewed credit note
68
- */
69
- public static function preview($params = null, $opts = null)
70
- {
71
- $url = static::classUrl() . '/preview';
72
- list($response, $opts) = static::_staticRequest('get', $url, $params, $opts);
73
- $obj = Util\Util::convertToStripeObject($response->json, $opts);
74
- $obj->setLastResponse($response);
75
-
76
- return $obj;
77
- }
78
-
79
- /**
80
- * @param null|array $params
81
- * @param null|array|string $opts
82
- *
83
- * @throws \Stripe\Exception\ApiErrorException if the request fails
84
- *
85
- * @return CreditNote the voided credit note
86
- */
87
- public function voidCreditNote($params = null, $opts = null)
88
- {
89
- $url = $this->instanceUrl() . '/void';
90
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
91
- $this->refreshFrom($response, $opts);
92
-
93
- return $this;
94
- }
95
-
96
- const PATH_LINES = '/lines';
97
-
98
- /**
99
- * @param string $id the ID of the credit note on which to retrieve the credit note line items
100
- * @param null|array $params
101
- * @param null|array|string $opts
102
- *
103
- * @throws \Stripe\Exception\ApiErrorException if the request fails
104
- *
105
- * @return \Stripe\Collection the list of credit note line items
106
- */
107
- public static function allLines($id, $params = null, $opts = null)
108
- {
109
- return self::_allNestedResources($id, static::PATH_LINES, $params, $opts);
110
- }
111
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/CreditNoteLineItem.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * @property string $id Unique identifier for the object.
9
- * @property string $object String representing the object's type. Objects of the same type share the same value.
10
- * @property int $amount The integer amount in %s representing the gross amount being credited for this line item, excluding (exclusive) tax and discounts.
11
- * @property null|string $description Description of the item being credited.
12
- * @property int $discount_amount The integer amount in %s representing the discount being credited for this line item.
13
- * @property \Stripe\StripeObject[] $discount_amounts The amount of discount calculated per discount for this line item
14
- * @property string $invoice_line_item ID of the invoice line item being credited
15
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
16
- * @property null|int $quantity The number of units of product being credited.
17
- * @property \Stripe\StripeObject[] $tax_amounts The amount of tax calculated per tax rate for this line item
18
- * @property \Stripe\TaxRate[] $tax_rates The tax rates which apply to the line item.
19
- * @property string $type The type of the credit note line item, one of <code>invoice_line_item</code> or <code>custom_line_item</code>. When the type is <code>invoice_line_item</code> there is an additional <code>invoice_line_item</code> property on the resource the value of which is the id of the credited line item on the invoice.
20
- * @property null|int $unit_amount The cost of each unit of product being credited.
21
- * @property null|string $unit_amount_decimal Same as <code>unit_amount</code>, but contains a decimal value with at most 12 decimal places.
22
- */
23
- class CreditNoteLineItem extends ApiResource
24
- {
25
- const OBJECT_NAME = 'credit_note_line_item';
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Customer.php CHANGED
@@ -1,276 +1,190 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * <code>Customer</code> objects allow you to perform recurring charges, and to
9
- * track multiple charges, that are associated with the same customer. The API
10
- * allows you to create, delete, and update your customers. You can retrieve
11
- * individual customers as well as a list of all your customers.
12
  *
13
- * Related guide: <a
14
- * href="https://stripe.com/docs/payments/save-during-payment">Save a card during
15
- * payment</a>.
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  *
17
- * @property string $id Unique identifier for the object.
18
- * @property string $object String representing the object's type. Objects of the same type share the same value.
19
- * @property null|\Stripe\StripeObject $address The customer's address.
20
- * @property int $balance Current balance, if any, being stored on the customer. If negative, the customer has credit to apply to their next invoice. If positive, the customer has an amount owed that will be added to their next invoice. The balance does not refer to any unpaid invoices; it solely takes into account amounts that have yet to be successfully applied to any invoice. This balance is only taken into account as invoices are finalized.
21
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
22
- * @property null|string $currency Three-letter <a href="https://stripe.com/docs/currencies">ISO code for the currency</a> the customer can be charged in for recurring billing purposes.
23
- * @property null|string|\Stripe\Account|\Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source $default_source <p>ID of the default payment source for the customer.</p><p>If you are using payment methods created via the PaymentMethods API, see the <a href="https://stripe.com/docs/api/customers/object#customer_object-invoice_settings-default_payment_method">invoice_settings.default_payment_method</a> field instead.</p>
24
- * @property null|bool $delinquent <p>When the customer's latest invoice is billed by charging automatically, <code>delinquent</code> is <code>true</code> if the invoice's latest charge failed. When the customer's latest invoice is billed by sending an invoice, <code>delinquent</code> is <code>true</code> if the invoice isn't paid by its due date.</p><p>If an invoice is marked uncollectible by <a href="https://stripe.com/docs/billing/automatic-collection">dunning</a>, <code>delinquent</code> doesn't get reset to <code>false</code>.</p>
25
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
26
- * @property null|\Stripe\Discount $discount Describes the current discount active on the customer, if there is one.
27
- * @property null|string $email The customer's email address.
28
- * @property null|string $invoice_prefix The prefix for the customer used to generate unique invoice numbers.
29
- * @property \Stripe\StripeObject $invoice_settings
30
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
31
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
32
- * @property null|string $name The customer's full name or business name.
33
- * @property int $next_invoice_sequence The suffix of the customer's next invoice number, e.g., 0001.
34
- * @property null|string $phone The customer's phone number.
35
- * @property null|string[] $preferred_locales The customer's preferred locales (languages), ordered by preference.
36
- * @property null|\Stripe\StripeObject $shipping Mailing and shipping address for the customer. Appears on invoices emailed to this customer.
37
- * @property \Stripe\Collection $sources The customer's payment sources, if any.
38
- * @property \Stripe\Collection $subscriptions The customer's current subscriptions, if any.
39
- * @property null|string $tax_exempt Describes the customer's tax exemption status. One of <code>none</code>, <code>exempt</code>, or <code>reverse</code>. When set to <code>reverse</code>, invoice and receipt PDFs include the text <strong>&quot;Reverse charge&quot;</strong>.
40
- * @property \Stripe\Collection $tax_ids The customer's tax IDs.
41
  */
42
  class Customer extends ApiResource
43
  {
44
- const OBJECT_NAME = 'customer';
45
-
46
- use ApiOperations\All;
47
- use ApiOperations\Create;
48
- use ApiOperations\Delete;
49
- use ApiOperations\NestedResource;
50
- use ApiOperations\Retrieve;
51
- use ApiOperations\Update;
52
-
53
- const TAX_EXEMPT_EXEMPT = 'exempt';
54
- const TAX_EXEMPT_NONE = 'none';
55
- const TAX_EXEMPT_REVERSE = 'reverse';
56
-
57
- public static function getSavedNestedResources()
58
- {
59
- static $savedNestedResources = null;
60
- if (null === $savedNestedResources) {
61
- $savedNestedResources = new Util\Set([
62
- 'source',
63
- ]);
64
- }
65
-
66
- return $savedNestedResources;
67
- }
68
-
69
  /**
70
- * @param null|array $params
71
- * @param null|array|string $opts
72
  *
73
- * @return \Stripe\Customer the updated customer
74
  */
75
- public function deleteDiscount($params = null, $opts = null)
76
  {
77
- $url = $this->instanceUrl() . '/discount';
78
- list($response, $opts) = $this->_request('delete', $url, $params, $opts);
79
- $this->refreshFrom(['discount' => null], $opts, true);
80
  }
81
 
82
- const PATH_BALANCE_TRANSACTIONS = '/balance_transactions';
83
-
84
  /**
85
- * @param string $id the ID of the customer on which to retrieve the customer balance transactions
86
- * @param null|array $params
87
- * @param null|array|string $opts
88
- *
89
- * @throws \Stripe\Exception\ApiErrorException if the request fails
90
- *
91
- * @return \Stripe\Collection the list of customer balance transactions
92
- */
93
- public static function allBalanceTransactions($id, $params = null, $opts = null)
94
- {
95
- return self::_allNestedResources($id, static::PATH_BALANCE_TRANSACTIONS, $params, $opts);
96
- }
97
-
98
- /**
99
- * @param string $id the ID of the customer on which to create the customer balance transaction
100
- * @param null|array $params
101
- * @param null|array|string $opts
102
- *
103
- * @throws \Stripe\Exception\ApiErrorException if the request fails
104
  *
105
- * @return \Stripe\CustomerBalanceTransaction
106
  */
107
- public static function createBalanceTransaction($id, $params = null, $opts = null)
108
  {
109
- return self::_createNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $params, $opts);
110
  }
111
 
112
  /**
113
- * @param string $id the ID of the customer to which the customer balance transaction belongs
114
- * @param string $balanceTransactionId the ID of the customer balance transaction to retrieve
115
- * @param null|array $params
116
- * @param null|array|string $opts
117
  *
118
- * @throws \Stripe\Exception\ApiErrorException if the request fails
119
- *
120
- * @return \Stripe\CustomerBalanceTransaction
121
  */
122
- public static function retrieveBalanceTransaction($id, $balanceTransactionId, $params = null, $opts = null)
123
  {
124
- return self::_retrieveNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $balanceTransactionId, $params, $opts);
125
  }
126
 
127
  /**
128
- * @param string $id the ID of the customer to which the customer balance transaction belongs
129
- * @param string $balanceTransactionId the ID of the customer balance transaction to update
130
- * @param null|array $params
131
- * @param null|array|string $opts
132
- *
133
- * @throws \Stripe\Exception\ApiErrorException if the request fails
134
  *
135
- * @return \Stripe\CustomerBalanceTransaction
136
  */
137
- public static function updateBalanceTransaction($id, $balanceTransactionId, $params = null, $opts = null)
138
  {
139
- return self::_updateNestedResource($id, static::PATH_BALANCE_TRANSACTIONS, $balanceTransactionId, $params, $opts);
140
  }
141
 
142
- const PATH_SOURCES = '/sources';
143
-
144
  /**
145
- * @param string $id the ID of the customer on which to retrieve the payment sources
146
- * @param null|array $params
147
- * @param null|array|string $opts
148
  *
149
- * @throws \Stripe\Exception\ApiErrorException if the request fails
150
- *
151
- * @return \Stripe\Collection the list of payment sources (AlipayAccount, BankAccount, BitcoinReceiver, Card or Source)
152
  */
153
- public static function allSources($id, $params = null, $opts = null)
154
  {
155
- return self::_allNestedResources($id, static::PATH_SOURCES, $params, $opts);
156
  }
157
 
158
  /**
159
- * @param string $id the ID of the customer on which to create the payment source
160
- * @param null|array $params
161
- * @param null|array|string $opts
162
- *
163
- * @throws \Stripe\Exception\ApiErrorException if the request fails
164
  *
165
- * @return \Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source
166
  */
167
- public static function createSource($id, $params = null, $opts = null)
168
  {
169
- return self::_createNestedResource($id, static::PATH_SOURCES, $params, $opts);
170
  }
171
 
172
  /**
173
- * @param string $id the ID of the customer to which the payment source belongs
174
- * @param string $sourceId the ID of the payment source to delete
175
- * @param null|array $params
176
- * @param null|array|string $opts
177
  *
178
- * @throws \Stripe\Exception\ApiErrorException if the request fails
179
- *
180
- * @return \Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source
181
  */
182
- public static function deleteSource($id, $sourceId, $params = null, $opts = null)
183
  {
184
- return self::_deleteNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
 
 
 
 
 
185
  }
186
 
187
  /**
188
- * @param string $id the ID of the customer to which the payment source belongs
189
- * @param string $sourceId the ID of the payment source to retrieve
190
- * @param null|array $params
191
- * @param null|array|string $opts
192
- *
193
- * @throws \Stripe\Exception\ApiErrorException if the request fails
194
  *
195
- * @return \Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source
196
  */
197
- public static function retrieveSource($id, $sourceId, $params = null, $opts = null)
198
  {
199
- return self::_retrieveNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
 
 
 
 
 
200
  }
201
 
202
  /**
203
- * @param string $id the ID of the customer to which the payment source belongs
204
- * @param string $sourceId the ID of the payment source to update
205
- * @param null|array $params
206
- * @param null|array|string $opts
207
- *
208
- * @throws \Stripe\Exception\ApiErrorException if the request fails
209
  *
210
- * @return \Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source
211
  */
212
- public static function updateSource($id, $sourceId, $params = null, $opts = null)
213
  {
214
- return self::_updateNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
 
 
 
 
 
215
  }
216
 
217
- const PATH_TAX_IDS = '/tax_ids';
218
-
219
  /**
220
- * @param string $id the ID of the customer on which to retrieve the tax ids
221
- * @param null|array $params
222
- * @param null|array|string $opts
223
- *
224
- * @throws \Stripe\Exception\ApiErrorException if the request fails
225
  *
226
- * @return \Stripe\Collection the list of tax ids
227
  */
228
- public static function allTaxIds($id, $params = null, $opts = null)
229
  {
230
- return self::_allNestedResources($id, static::PATH_TAX_IDS, $params, $opts);
 
 
 
 
 
231
  }
232
 
233
  /**
234
- * @param string $id the ID of the customer on which to create the tax id
235
- * @param null|array $params
236
- * @param null|array|string $opts
237
- *
238
- * @throws \Stripe\Exception\ApiErrorException if the request fails
239
  *
240
- * @return \Stripe\TaxId
241
  */
242
- public static function createTaxId($id, $params = null, $opts = null)
243
  {
244
- return self::_createNestedResource($id, static::PATH_TAX_IDS, $params, $opts);
 
 
 
245
  }
246
 
247
  /**
248
- * @param string $id the ID of the customer to which the tax id belongs
249
- * @param string $taxIdId the ID of the tax id to delete
250
- * @param null|array $params
251
- * @param null|array|string $opts
252
  *
253
- * @throws \Stripe\Exception\ApiErrorException if the request fails
254
- *
255
- * @return \Stripe\TaxId
256
  */
257
- public static function deleteTaxId($id, $taxIdId, $params = null, $opts = null)
258
  {
259
- return self::_deleteNestedResource($id, static::PATH_TAX_IDS, $taxIdId, $params, $opts);
 
 
 
260
  }
261
 
262
  /**
263
- * @param string $id the ID of the customer to which the tax id belongs
264
- * @param string $taxIdId the ID of the tax id to retrieve
265
- * @param null|array $params
266
- * @param null|array|string $opts
267
- *
268
- * @throws \Stripe\Exception\ApiErrorException if the request fails
269
- *
270
- * @return \Stripe\TaxId
271
  */
272
- public static function retrieveTaxId($id, $taxIdId, $params = null, $opts = null)
273
  {
274
- return self::_retrieveNestedResource($id, static::PATH_TAX_IDS, $taxIdId, $params, $opts);
 
 
275
  }
276
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Customer
 
 
 
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $account_balance
11
+ * @property string $business_vat_id
12
+ * @property string $created
13
+ * @property string $currency
14
+ * @property string $default_source
15
+ * @property bool $delinquent
16
+ * @property string $description
17
+ * @property mixed $discount
18
+ * @property string $email
19
+ * @property bool $livemode
20
+ * @property array $metadata
21
+ * @property mixed $shipping
22
+ * @property Collection $sources
23
+ * @property Collection $subscriptions
24
  *
25
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  */
27
  class Customer extends ApiResource
28
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  /**
30
+ * @param string $id The ID of the customer to retrieve.
31
+ * @param array|string|null $opts
32
  *
33
+ * @return Customer
34
  */
35
+ public static function retrieve($id, $opts = null)
36
  {
37
+ return self::_retrieve($id, $opts);
 
 
38
  }
39
 
 
 
40
  /**
41
+ * @param array|null $params
42
+ * @param array|string|null $opts
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  *
44
+ * @return Collection of Customers
45
  */
46
+ public static function all($params = null, $opts = null)
47
  {
48
+ return self::_all($params, $opts);
49
  }
50
 
51
  /**
52
+ * @param array|null $params
53
+ * @param array|string|null $opts
 
 
54
  *
55
+ * @return Customer The created customer.
 
 
56
  */
57
+ public static function create($params = null, $opts = null)
58
  {
59
+ return self::_create($params, $opts);
60
  }
61
 
62
  /**
63
+ * @param string $id The ID of the customer to update.
64
+ * @param array|null $params
65
+ * @param array|string|null $options
 
 
 
66
  *
67
+ * @return Customer The updated customer.
68
  */
69
+ public static function update($id, $params = null, $options = null)
70
  {
71
+ return self::_update($id, $params, $options);
72
  }
73
 
 
 
74
  /**
75
+ * @param array|string|null $opts
 
 
76
  *
77
+ * @return Customer The saved customer.
 
 
78
  */
79
+ public function save($opts = null)
80
  {
81
+ return $this->_save($opts);
82
  }
83
 
84
  /**
85
+ * @param array|null $params
86
+ * @param array|string|null $opts
 
 
 
87
  *
88
+ * @return Customer The deleted customer.
89
  */
90
+ public function delete($params = null, $opts = null)
91
  {
92
+ return $this->_delete($params, $opts);
93
  }
94
 
95
  /**
96
+ * @param array|null $params
 
 
 
97
  *
98
+ * @return InvoiceItem The resulting invoice item.
 
 
99
  */
100
+ public function addInvoiceItem($params = null)
101
  {
102
+ if (!$params) {
103
+ $params = array();
104
+ }
105
+ $params['customer'] = $this->id;
106
+ $ii = InvoiceItem::create($params, $this->_opts);
107
+ return $ii;
108
  }
109
 
110
  /**
111
+ * @param array|null $params
 
 
 
 
 
112
  *
113
+ * @return array An array of the customer's Invoices.
114
  */
115
+ public function invoices($params = null)
116
  {
117
+ if (!$params) {
118
+ $params = array();
119
+ }
120
+ $params['customer'] = $this->id;
121
+ $invoices = Invoice::all($params, $this->_opts);
122
+ return $invoices;
123
  }
124
 
125
  /**
126
+ * @param array|null $params
 
 
 
 
 
127
  *
128
+ * @return array An array of the customer's InvoiceItems.
129
  */
130
+ public function invoiceItems($params = null)
131
  {
132
+ if (!$params) {
133
+ $params = array();
134
+ }
135
+ $params['customer'] = $this->id;
136
+ $iis = InvoiceItem::all($params, $this->_opts);
137
+ return $iis;
138
  }
139
 
 
 
140
  /**
141
+ * @param array|null $params
 
 
 
 
142
  *
143
+ * @return array An array of the customer's Charges.
144
  */
145
+ public function charges($params = null)
146
  {
147
+ if (!$params) {
148
+ $params = array();
149
+ }
150
+ $params['customer'] = $this->id;
151
+ $charges = Charge::all($params, $this->_opts);
152
+ return $charges;
153
  }
154
 
155
  /**
156
+ * @param array|null $params
 
 
 
 
157
  *
158
+ * @return Subscription The updated subscription.
159
  */
160
+ public function updateSubscription($params = null)
161
  {
162
+ $url = $this->instanceUrl() . '/subscription';
163
+ list($response, $opts) = $this->_request('post', $url, $params);
164
+ $this->refreshFrom(array('subscription' => $response), $opts, true);
165
+ return $this->subscription;
166
  }
167
 
168
  /**
169
+ * @param array|null $params
 
 
 
170
  *
171
+ * @return Subscription The cancelled subscription.
 
 
172
  */
173
+ public function cancelSubscription($params = null)
174
  {
175
+ $url = $this->instanceUrl() . '/subscription';
176
+ list($response, $opts) = $this->_request('delete', $url, $params);
177
+ $this->refreshFrom(array('subscription' => $response), $opts, true);
178
+ return $this->subscription;
179
  }
180
 
181
  /**
182
+ * @return Customer The updated customer.
 
 
 
 
 
 
 
183
  */
184
+ public function deleteDiscount()
185
  {
186
+ $url = $this->instanceUrl() . '/discount';
187
+ list($response, $opts) = $this->_request('delete', $url);
188
+ $this->refreshFrom(array('discount' => null), $opts, true);
189
  }
190
  }
lib/stripe/lib/CustomerBalanceTransaction.php DELETED
@@ -1,103 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * Each customer has a <a
9
- * href="https://stripe.com/docs/api/customers/object#customer_object-balance"><code>balance</code></a>
10
- * value, which denotes a debit or credit that's automatically applied to their
11
- * next invoice upon finalization. You may modify the value directly by using the
12
- * <a href="https://stripe.com/docs/api/customers/update">update customer API</a>,
13
- * or by creating a Customer Balance Transaction, which increments or decrements
14
- * the customer's <code>balance</code> by the specified <code>amount</code>.
15
- *
16
- * Related guide: <a
17
- * href="https://stripe.com/docs/billing/customer/balance">Customer Balance</a> to
18
- * learn more.
19
- *
20
- * @property string $id Unique identifier for the object.
21
- * @property string $object String representing the object's type. Objects of the same type share the same value.
22
- * @property int $amount The amount of the transaction. A negative value is a credit for the customer's balance, and a positive value is a debit to the customer's <code>balance</code>.
23
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
24
- * @property null|string|\Stripe\CreditNote $credit_note The ID of the credit note (if any) related to the transaction.
25
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
26
- * @property string|\Stripe\Customer $customer The ID of the customer the transaction belongs to.
27
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
28
- * @property int $ending_balance The customer's <code>balance</code> after the transaction was applied. A negative value decreases the amount due on the customer's next invoice. A positive value increases the amount due on the customer's next invoice.
29
- * @property null|string|\Stripe\Invoice $invoice The ID of the invoice (if any) related to the transaction.
30
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
31
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
32
- * @property string $type Transaction type: <code>adjustment</code>, <code>applied_to_invoice</code>, <code>credit_note</code>, <code>initial</code>, <code>invoice_too_large</code>, <code>invoice_too_small</code>, <code>unspent_receiver_credit</code>, or <code>unapplied_from_invoice</code>. See the <a href="https://stripe.com/docs/billing/customer/balance#types">Customer Balance page</a> to learn more about transaction types.
33
- */
34
- class CustomerBalanceTransaction extends ApiResource
35
- {
36
- const OBJECT_NAME = 'customer_balance_transaction';
37
-
38
- const TYPE_ADJUSTMENT = 'adjustment';
39
- const TYPE_APPLIED_TO_INVOICE = 'applied_to_invoice';
40
- const TYPE_CREDIT_NOTE = 'credit_note';
41
- const TYPE_INITIAL = 'initial';
42
- const TYPE_INVOICE_TOO_LARGE = 'invoice_too_large';
43
- const TYPE_INVOICE_TOO_SMALL = 'invoice_too_small';
44
- const TYPE_UNSPENT_RECEIVER_CREDIT = 'unspent_receiver_credit';
45
-
46
- const TYPE_ADJUSTEMENT = 'adjustment';
47
-
48
- /**
49
- * @return string the API URL for this balance transaction
50
- */
51
- public function instanceUrl()
52
- {
53
- $id = $this['id'];
54
- $customer = $this['customer'];
55
- if (!$id) {
56
- throw new Exception\UnexpectedValueException(
57
- "Could not determine which URL to request: class instance has invalid ID: {$id}",
58
- null
59
- );
60
- }
61
- $id = Util\Util::utf8($id);
62
- $customer = Util\Util::utf8($customer);
63
-
64
- $base = Customer::classUrl();
65
- $customerExtn = \urlencode($customer);
66
- $extn = \urlencode($id);
67
-
68
- return "{$base}/{$customerExtn}/balance_transactions/{$extn}";
69
- }
70
-
71
- /**
72
- * @param array|string $_id
73
- * @param null|array|string $_opts
74
- *
75
- * @throws \Stripe\Exception\BadMethodCallException
76
- */
77
- public static function retrieve($_id, $_opts = null)
78
- {
79
- $msg = 'Customer Balance Transactions cannot be retrieved without a ' .
80
- 'customer ID. Retrieve a Customer Balance Transaction using ' .
81
- "`Customer::retrieveBalanceTransaction('customer_id', " .
82
- "'balance_transaction_id')`.";
83
-
84
- throw new Exception\BadMethodCallException($msg);
85
- }
86
-
87
- /**
88
- * @param string $_id
89
- * @param null|array $_params
90
- * @param null|array|string $_options
91
- *
92
- * @throws \Stripe\Exception\BadMethodCallException
93
- */
94
- public static function update($_id, $_params = null, $_options = null)
95
- {
96
- $msg = 'Customer Balance Transactions cannot be updated without a ' .
97
- 'customer ID. Update a Customer Balance Transaction using ' .
98
- "`Customer::updateBalanceTransaction('customer_id', " .
99
- "'balance_transaction_id', \$updateParams)`.";
100
-
101
- throw new Exception\BadMethodCallException($msg);
102
- }
103
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Discount.php DELETED
@@ -1,23 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- /**
6
- * Class Discount.
7
- *
8
- * @property string $checkout_session The Checkout session that this coupon is applied to, if it is applied to a particular session in payment mode. Will not be present for subscription mode.
9
- * @property \Stripe\Coupon $coupon Hash describing the coupon applied to create this discount.
10
- * @property string|\Stripe\Customer $customer The ID of the customer associated with this discount.
11
- * @property int $end If the coupon has a duration of repeating, the date that this discount will end. If the coupon has a duration of once or forever, this attribute will be null.
12
- * @property string $id The ID of the discount object.
13
- * @property string $invoice The invoice that the discount’s coupon was applied to, if it was applied directly to a particular invoice.
14
- * @property string $invoice_item The invoice item id (or invoice line item id for invoice line items of type=‘subscription’) that the discount’s coupon was applied to, if it was applied directly to a particular invoice item or invoice line item.
15
- * @property string $object String representing the object’s type. Objects of the same type share the same value.
16
- * @property string $promotion_code The promotion code applied to create this discount.
17
- * @property int $start Date that the coupon was applied.
18
- * @property string $subscription The subscription that this coupon is applied to, if it is applied to a particular subscription.
19
- */
20
- class Discount extends StripeObject
21
- {
22
- const OBJECT_NAME = 'discount';
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Dispute.php CHANGED
@@ -1,82 +1,83 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * A dispute occurs when a customer questions your charge with their card issuer.
9
- * When this happens, you're given the opportunity to respond to the dispute with
10
- * evidence that shows that the charge is legitimate. You can find more information
11
- * about the dispute process in our <a href="/docs/disputes">Disputes and Fraud</a>
12
- * documentation.
13
  *
14
- * Related guide: <a href="https://stripe.com/docs/disputes">Disputes and
15
- * Fraud</a>.
 
 
 
 
 
 
 
 
 
 
 
 
16
  *
17
- * @property string $id Unique identifier for the object.
18
- * @property string $object String representing the object's type. Objects of the same type share the same value.
19
- * @property int $amount Disputed amount. Usually the amount of the charge, but can differ (usually because of currency fluctuation or because only part of the order is disputed).
20
- * @property \Stripe\BalanceTransaction[] $balance_transactions List of zero, one, or two balance transactions that show funds withdrawn and reinstated to your Stripe account as a result of this dispute.
21
- * @property string|\Stripe\Charge $charge ID of the charge that was disputed.
22
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
23
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
24
- * @property \Stripe\StripeObject $evidence
25
- * @property \Stripe\StripeObject $evidence_details
26
- * @property bool $is_charge_refundable If true, it is still possible to refund the disputed payment. Once the payment has been fully refunded, no further funds will be withdrawn from your Stripe account as a result of this dispute.
27
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
28
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
29
- * @property null|string $network_reason_code Network-dependent reason code for the dispute.
30
- * @property null|string|\Stripe\PaymentIntent $payment_intent ID of the PaymentIntent that was disputed.
31
- * @property string $reason Reason given by cardholder for dispute. Possible values are <code>bank_cannot_process</code>, <code>check_returned</code>, <code>credit_not_processed</code>, <code>customer_initiated</code>, <code>debit_not_authorized</code>, <code>duplicate</code>, <code>fraudulent</code>, <code>general</code>, <code>incorrect_account_details</code>, <code>insufficient_funds</code>, <code>product_not_received</code>, <code>product_unacceptable</code>, <code>subscription_canceled</code>, or <code>unrecognized</code>. Read more about <a href="https://stripe.com/docs/disputes/categories">dispute reasons</a>.
32
- * @property string $status Current status of dispute. Possible values are <code>warning_needs_response</code>, <code>warning_under_review</code>, <code>warning_closed</code>, <code>needs_response</code>, <code>under_review</code>, <code>charge_refunded</code>, <code>won</code>, or <code>lost</code>.
33
  */
34
  class Dispute extends ApiResource
35
  {
36
- const OBJECT_NAME = 'dispute';
37
-
38
- use ApiOperations\All;
39
- use ApiOperations\Retrieve;
40
- use ApiOperations\Update;
 
 
 
 
 
41
 
42
- const REASON_BANK_CANNOT_PROCESS = 'bank_cannot_process';
43
- const REASON_CHECK_RETURNED = 'check_returned';
44
- const REASON_CREDIT_NOT_PROCESSED = 'credit_not_processed';
45
- const REASON_CUSTOMER_INITIATED = 'customer_initiated';
46
- const REASON_DEBIT_NOT_AUTHORIZED = 'debit_not_authorized';
47
- const REASON_DUPLICATE = 'duplicate';
48
- const REASON_FRAUDULENT = 'fraudulent';
49
- const REASON_GENERAL = 'general';
50
- const REASON_INCORRECT_ACCOUNT_DETAILS = 'incorrect_account_details';
51
- const REASON_INSUFFICIENT_FUNDS = 'insufficient_funds';
52
- const REASON_PRODUCT_NOT_RECEIVED = 'product_not_received';
53
- const REASON_PRODUCT_UNACCEPTABLE = 'product_unacceptable';
54
- const REASON_SUBSCRIPTION_CANCELED = 'subscription_canceled';
55
- const REASON_UNRECOGNIZED = 'unrecognized';
56
 
57
- const STATUS_CHARGE_REFUNDED = 'charge_refunded';
58
- const STATUS_LOST = 'lost';
59
- const STATUS_NEEDS_RESPONSE = 'needs_response';
60
- const STATUS_UNDER_REVIEW = 'under_review';
61
- const STATUS_WARNING_CLOSED = 'warning_closed';
62
- const STATUS_WARNING_NEEDS_RESPONSE = 'warning_needs_response';
63
- const STATUS_WARNING_UNDER_REVIEW = 'warning_under_review';
64
- const STATUS_WON = 'won';
 
 
 
65
 
66
  /**
67
- * @param null|array|string $opts
68
  *
69
- * @throws \Stripe\Exception\ApiErrorException if the request fails
 
 
 
 
 
 
 
 
70
  *
71
- * @return \Stripe\Dispute the closed dispute
72
  */
73
- // TODO: add $params to standardize signature
74
- public function close($opts = null)
75
  {
76
  $url = $this->instanceUrl() . '/close';
77
- list($response, $opts) = $this->_request('post', $url, null, $opts);
78
  $this->refreshFrom($response, $opts);
79
-
80
  return $this;
81
  }
82
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Dispute
 
 
 
 
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property mixed $balance_transactions
12
+ * @property string $charge
13
+ * @property int $created
14
+ * @property string $currency
15
+ * @property mixed $evidence
16
+ * @property mixed $evidence_details
17
+ * @property bool $is_charge_refundable
18
+ * @property bool $livemode
19
+ * @property mixed $metadata
20
+ * @property string $reason
21
+ * @property string $status
22
  *
23
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  */
25
  class Dispute extends ApiResource
26
  {
27
+ /**
28
+ * @param string $id The ID of the dispute to retrieve.
29
+ * @param array|string|null $options
30
+ *
31
+ * @return Dispute
32
+ */
33
+ public static function retrieve($id, $options = null)
34
+ {
35
+ return self::_retrieve($id, $options);
36
+ }
37
 
38
+ /**
39
+ * @param array|null $params
40
+ * @param array|string|null $options
41
+ *
42
+ * @return array An array of Disputes.
43
+ */
44
+ public static function all($params = null, $options = null)
45
+ {
46
+ return self::_all($params, $options);
47
+ }
 
 
 
 
48
 
49
+ /**
50
+ * @param string $id The ID of the dispute to update.
51
+ * @param array|null $params
52
+ * @param array|string|null $options
53
+ *
54
+ * @return Dispute The updated dispute.
55
+ */
56
+ public static function update($id, $params = null, $options = null)
57
+ {
58
+ return self::_update($id, $params, $options);
59
+ }
60
 
61
  /**
62
+ * @param array|string|null $options
63
  *
64
+ * @return Dispute The saved charge.
65
+ */
66
+ public function save($options = null)
67
+ {
68
+ return $this->_save($options);
69
+ }
70
+
71
+ /**
72
+ * @param array|string|null $options
73
  *
74
+ * @return Dispute The closed dispute.
75
  */
76
+ public function close($options = null)
 
77
  {
78
  $url = $this->instanceUrl() . '/close';
79
+ list($response, $opts) = $this->_request('post', $url, null, $options);
80
  $this->refreshFrom($response, $opts);
 
81
  return $this;
82
  }
83
  }
lib/stripe/lib/EphemeralKey.php DELETED
@@ -1,43 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * @property string $id Unique identifier for the object.
9
- * @property string $object String representing the object's type. Objects of the same type share the same value.
10
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
11
- * @property int $expires Time at which the key will expire. Measured in seconds since the Unix epoch.
12
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
13
- * @property string $secret The key's secret. You can use this value to make authorized requests to the Stripe API.
14
- * @property array $associated_objects
15
- */
16
- class EphemeralKey extends ApiResource
17
- {
18
- const OBJECT_NAME = 'ephemeral_key';
19
-
20
- use ApiOperations\Create {
21
- create as protected _create;
22
- }
23
-
24
- use ApiOperations\Delete;
25
-
26
- /**
27
- * @param null|array $params
28
- * @param null|array|string $opts
29
- *
30
- * @throws \Stripe\Exception\InvalidArgumentException if stripe_version is missing
31
- * @throws \Stripe\Exception\ApiErrorException if the request fails
32
- *
33
- * @return \Stripe\EphemeralKey the created key
34
- */
35
- public static function create($params = null, $opts = null)
36
- {
37
- if (!$opts || !isset($opts['stripe_version'])) {
38
- throw new Exception\InvalidArgumentException('stripe_version must be specified to create an ephemeral key');
39
- }
40
-
41
- return self::_create($params, $opts);
42
- }
43
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Error/Api.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class Api extends Base
6
+ {
7
+ }
lib/stripe/lib/Error/ApiConnection.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class ApiConnection extends Base
6
+ {
7
+ }
lib/stripe/lib/Error/Authentication.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class Authentication extends Base
6
+ {
7
+ }
lib/stripe/lib/Error/Base.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ use Exception;
6
+
7
+ abstract class Base extends Exception
8
+ {
9
+ public function __construct(
10
+ $message,
11
+ $httpStatus = null,
12
+ $httpBody = null,
13
+ $jsonBody = null,
14
+ $httpHeaders = null
15
+ ) {
16
+ parent::__construct($message);
17
+ $this->httpStatus = $httpStatus;
18
+ $this->httpBody = $httpBody;
19
+ $this->jsonBody = $jsonBody;
20
+ $this->httpHeaders = $httpHeaders;
21
+ $this->requestId = null;
22
+
23
+ if ($httpHeaders && isset($httpHeaders['Request-Id'])) {
24
+ $this->requestId = $httpHeaders['Request-Id'];
25
+ }
26
+ }
27
+
28
+ public function getHttpStatus()
29
+ {
30
+ return $this->httpStatus;
31
+ }
32
+
33
+ public function getHttpBody()
34
+ {
35
+ return $this->httpBody;
36
+ }
37
+
38
+ public function getJsonBody()
39
+ {
40
+ return $this->jsonBody;
41
+ }
42
+
43
+ public function getHttpHeaders()
44
+ {
45
+ return $this->httpHeaders;
46
+ }
47
+
48
+ public function getRequestId()
49
+ {
50
+ return $this->requestId;
51
+ }
52
+
53
+ public function __toString()
54
+ {
55
+ $id = $this->requestId ? " from API request '{$this->requestId}'": "";
56
+ $message = explode("\n", parent::__toString());
57
+ $message[0] .= $id;
58
+ return implode("\n", $message);
59
+ }
60
+ }
lib/stripe/lib/Error/Card.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class Card extends Base
6
+ {
7
+ public function __construct(
8
+ $message,
9
+ $stripeParam,
10
+ $stripeCode,
11
+ $httpStatus,
12
+ $httpBody,
13
+ $jsonBody,
14
+ $httpHeaders = null
15
+ ) {
16
+ parent::__construct($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders);
17
+ $this->stripeParam = $stripeParam;
18
+ $this->stripeCode = $stripeCode;
19
+
20
+ // This one is not like the others because it was added later and we're
21
+ // trying to do our best not to change the public interface of this class'
22
+ // constructor. We should consider changing its implementation on the
23
+ // next major version bump of this library.
24
+ $this->declineCode = isset($jsonBody["error"]["decline_code"]) ? $jsonBody["error"]["decline_code"] : null;
25
+ }
26
+
27
+ public function getDeclineCode()
28
+ {
29
+ return $this->declineCode;
30
+ }
31
+
32
+ public function getStripeCode()
33
+ {
34
+ return $this->stripeCode;
35
+ }
36
+
37
+ public function getStripeParam()
38
+ {
39
+ return $this->stripeParam;
40
+ }
41
+ }
lib/stripe/lib/Error/InvalidRequest.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class InvalidRequest extends Base
6
+ {
7
+ public function __construct(
8
+ $message,
9
+ $stripeParam,
10
+ $httpStatus = null,
11
+ $httpBody = null,
12
+ $jsonBody = null,
13
+ $httpHeaders = null
14
+ ) {
15
+ parent::__construct($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders);
16
+ $this->stripeParam = $stripeParam;
17
+ }
18
+
19
+ public function getStripeParam()
20
+ {
21
+ return $this->stripeParam;
22
+ }
23
+ }
lib/stripe/lib/Error/RateLimit.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Error;
4
+
5
+ class RateLimit extends InvalidRequest
6
+ {
7
+ }
lib/stripe/lib/ErrorObject.php DELETED
@@ -1,164 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- /**
6
- * Class ErrorObject.
7
- *
8
- * @property string $charge For card errors, the ID of the failed charge.
9
- * @property string $code For some errors that could be handled
10
- * programmatically, a short string indicating the error code reported.
11
- * @property string $decline_code For card errors resulting from a card issuer
12
- * decline, a short string indicating the card issuer's reason for the
13
- * decline if they provide one.
14
- * @property string $doc_url A URL to more information about the error code
15
- * reported.
16
- * @property string $message A human-readable message providing more details
17
- * about the error. For card errors, these messages can be shown to your
18
- * users.
19
- * @property string $param If the error is parameter-specific, the parameter
20
- * related to the error. For example, you can use this to display a message
21
- * near the correct form field.
22
- * @property PaymentIntent $payment_intent The PaymentIntent object for errors
23
- * returned on a request involving a PaymentIntent.
24
- * @property PaymentMethod $payment_method The PaymentMethod object for errors
25
- * returned on a request involving a PaymentMethod.
26
- * @property string $payment_method_type If the error is specific to the type
27
- * of payment method, the payment method type that had a problem. This
28
- * field is only populated for invoice-related errors.
29
- * @property SetupIntent $setup_intent The SetupIntent object for errors
30
- * returned on a request involving a SetupIntent.
31
- * @property StripeObject $source The source object for errors returned on a
32
- * request involving a source.
33
- * @property string $type The type of error returned. One of
34
- * `api_connection_error`, `api_error`, `authentication_error`,
35
- * `card_error`, `idempotency_error`, `invalid_request_error`, or
36
- * `rate_limit_error`.
37
- */
38
- class ErrorObject extends StripeObject
39
- {
40
- /**
41
- * Possible string representations of an error's code.
42
- *
43
- * @see https://stripe.com/docs/error-codes
44
- */
45
- const CODE_ACCOUNT_ALREADY_EXISTS = 'account_already_exists';
46
- const CODE_ACCOUNT_COUNTRY_INVALID_ADDRESS = 'account_country_invalid_address';
47
- const CODE_ACCOUNT_INVALID = 'account_invalid';
48
- const CODE_ACCOUNT_NUMBER_INVALID = 'account_number_invalid';
49
- const CODE_ALIPAY_UPGRADE_REQUIRED = 'alipay_upgrade_required';
50
- const CODE_AMOUNT_TOO_LARGE = 'amount_too_large';
51
- const CODE_AMOUNT_TOO_SMALL = 'amount_too_small';
52
- const CODE_API_KEY_EXPIRED = 'api_key_expired';
53
- const CODE_BALANCE_INSUFFICIENT = 'balance_insufficient';
54
- const CODE_BANK_ACCOUNT_EXISTS = 'bank_account_exists';
55
- const CODE_BANK_ACCOUNT_UNUSABLE = 'bank_account_unusable';
56
- const CODE_BANK_ACCOUNT_UNVERIFIED = 'bank_account_unverified';
57
- const CODE_BITCOIN_UPGRADE_REQUIRED = 'bitcoin_upgrade_required';
58
- const CODE_CARD_DECLINED = 'card_declined';
59
- const CODE_CHARGE_ALREADY_CAPTURED = 'charge_already_captured';
60
- const CODE_CHARGE_ALREADY_REFUNDED = 'charge_already_refunded';
61
- const CODE_CHARGE_DISPUTED = 'charge_disputed';
62
- const CODE_CHARGE_EXCEEDS_SOURCE_LIMIT = 'charge_exceeds_source_limit';
63
- const CODE_CHARGE_EXPIRED_FOR_CAPTURE = 'charge_expired_for_capture';
64
- const CODE_COUNTRY_UNSUPPORTED = 'country_unsupported';
65
- const CODE_COUPON_EXPIRED = 'coupon_expired';
66
- const CODE_CUSTOMER_MAX_SUBSCRIPTIONS = 'customer_max_subscriptions';
67
- const CODE_EMAIL_INVALID = 'email_invalid';
68
- const CODE_EXPIRED_CARD = 'expired_card';
69
- const CODE_IDEMPOTENCY_KEY_IN_USE = 'idempotency_key_in_use';
70
- const CODE_INCORRECT_ADDRESS = 'incorrect_address';
71
- const CODE_INCORRECT_CVC = 'incorrect_cvc';
72
- const CODE_INCORRECT_NUMBER = 'incorrect_number';
73
- const CODE_INCORRECT_ZIP = 'incorrect_zip';
74
- const CODE_INSTANT_PAYOUTS_UNSUPPORTED = 'instant_payouts_unsupported';
75
- const CODE_INVALID_CARD_TYPE = 'invalid_card_type';
76
- const CODE_INVALID_CHARGE_AMOUNT = 'invalid_charge_amount';
77
- const CODE_INVALID_CVC = 'invalid_cvc';
78
- const CODE_INVALID_EXPIRY_MONTH = 'invalid_expiry_month';
79
- const CODE_INVALID_EXPIRY_YEAR = 'invalid_expiry_year';
80
- const CODE_INVALID_NUMBER = 'invalid_number';
81
- const CODE_INVALID_SOURCE_USAGE = 'invalid_source_usage';
82
- const CODE_INVOICE_NO_CUSTOMER_LINE_ITEMS = 'invoice_no_customer_line_items';
83
- const CODE_INVOICE_NO_SUBSCRIPTION_LINE_ITEMS = 'invoice_no_subscription_line_items';
84
- const CODE_INVOICE_NOT_EDITABLE = 'invoice_not_editable';
85
- const CODE_INVOICE_PAYMENT_INTENT_REQUIRES_ACTION = 'invoice_payment_intent_requires_action';
86
- const CODE_INVOICE_UPCOMING_NONE = 'invoice_upcoming_none';
87
- const CODE_LIVEMODE_MISMATCH = 'livemode_mismatch';
88
- const CODE_LOCK_TIMEOUT = 'lock_timeout';
89
- const CODE_MISSING = 'missing';
90
- const CODE_NOT_ALLOWED_ON_STANDARD_ACCOUNT = 'not_allowed_on_standard_account';
91
- const CODE_ORDER_CREATION_FAILED = 'order_creation_failed';
92
- const CODE_ORDER_REQUIRED_SETTINGS = 'order_required_settings';
93
- const CODE_ORDER_STATUS_INVALID = 'order_status_invalid';
94
- const CODE_ORDER_UPSTREAM_TIMEOUT = 'order_upstream_timeout';
95
- const CODE_OUT_OF_INVENTORY = 'out_of_inventory';
96
- const CODE_PARAMETER_INVALID_EMPTY = 'parameter_invalid_empty';
97
- const CODE_PARAMETER_INVALID_INTEGER = 'parameter_invalid_integer';
98
- const CODE_PARAMETER_INVALID_STRING_BLANK = 'parameter_invalid_string_blank';
99
- const CODE_PARAMETER_INVALID_STRING_EMPTY = 'parameter_invalid_string_empty';
100
- const CODE_PARAMETER_MISSING = 'parameter_missing';
101
- const CODE_PARAMETER_UNKNOWN = 'parameter_unknown';
102
- const CODE_PARAMETERS_EXCLUSIVE = 'parameters_exclusive';
103
- const CODE_PAYMENT_INTENT_AUTHENTICATION_FAILURE = 'payment_intent_authentication_failure';
104
- const CODE_PAYMENT_INTENT_INCOMPATIBLE_PAYMENT_METHOD = 'payment_intent_incompatible_payment_method';
105
- const CODE_PAYMENT_INTENT_INVALID_PARAMETER = 'payment_intent_invalid_parameter';
106
- const CODE_PAYMENT_INTENT_PAYMENT_ATTEMPT_FAILED = 'payment_intent_payment_attempt_failed';
107
- const CODE_PAYMENT_INTENT_UNEXPECTED_STATE = 'payment_intent_unexpected_state';
108
- const CODE_PAYMENT_METHOD_UNACTIVATED = 'payment_method_unactivated';
109
- const CODE_PAYMENT_METHOD_UNEXPECTED_STATE = 'payment_method_unexpected_state';
110
- const CODE_PAYOUTS_NOT_ALLOWED = 'payouts_not_allowed';
111
- const CODE_PLATFORM_API_KEY_EXPIRED = 'platform_api_key_expired';
112
- const CODE_POSTAL_CODE_INVALID = 'postal_code_invalid';
113
- const CODE_PROCESSING_ERROR = 'processing_error';
114
- const CODE_PRODUCT_INACTIVE = 'product_inactive';
115
- const CODE_RATE_LIMIT = 'rate_limit';
116
- const CODE_RESOURCE_ALREADY_EXISTS = 'resource_already_exists';
117
- const CODE_RESOURCE_MISSING = 'resource_missing';
118
- const CODE_ROUTING_NUMBER_INVALID = 'routing_number_invalid';
119
- const CODE_SECRET_KEY_REQUIRED = 'secret_key_required';
120
- const CODE_SEPA_UNSUPPORTED_ACCOUNT = 'sepa_unsupported_account';
121
- const CODE_SETUP_ATTEMPT_FAILED = 'setup_attempt_failed';
122
- const CODE_SETUP_INTENT_AUTHENTICATION_FAILURE = 'setup_intent_authentication_failure';
123
- const CODE_SETUP_INTENT_UNEXPECTED_STATE = 'setup_intent_unexpected_state';
124
- const CODE_SHIPPING_CALCULATION_FAILED = 'shipping_calculation_failed';
125
- const CODE_SKU_INACTIVE = 'sku_inactive';
126
- const CODE_STATE_UNSUPPORTED = 'state_unsupported';
127
- const CODE_TAX_ID_INVALID = 'tax_id_invalid';
128
- const CODE_TAXES_CALCULATION_FAILED = 'taxes_calculation_failed';
129
- const CODE_TESTMODE_CHARGES_ONLY = 'testmode_charges_only';
130
- const CODE_TLS_VERSION_UNSUPPORTED = 'tls_version_unsupported';
131
- const CODE_TOKEN_ALREADY_USED = 'token_already_used';
132
- const CODE_TOKEN_IN_USE = 'token_in_use';
133
- const CODE_TRANSFERS_NOT_ALLOWED = 'transfers_not_allowed';
134
- const CODE_UPSTREAM_ORDER_CREATION_FAILED = 'upstream_order_creation_failed';
135
- const CODE_URL_INVALID = 'url_invalid';
136
-
137
- /**
138
- * Refreshes this object using the provided values.
139
- *
140
- * @param array $values
141
- * @param null|array|string|Util\RequestOptions $opts
142
- * @param bool $partial defaults to false
143
- */
144
- public function refreshFrom($values, $opts, $partial = false)
145
- {
146
- // Unlike most other API resources, the API will omit attributes in
147
- // error objects when they have a null value. We manually set default
148
- // values here to facilitate generic error handling.
149
- $values = \array_merge([
150
- 'charge' => null,
151
- 'code' => null,
152
- 'decline_code' => null,
153
- 'doc_url' => null,
154
- 'message' => null,
155
- 'param' => null,
156
- 'payment_intent' => null,
157
- 'payment_method' => null,
158
- 'setup_intent' => null,
159
- 'source' => null,
160
- 'type' => null,
161
- ], $values);
162
- parent::refreshFrom($values, $opts, $partial);
163
- }
164
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Event.php CHANGED
@@ -1,231 +1,43 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Events are our way of letting you know when something interesting happens in
9
- * your account. When an interesting event occurs, we create a new
10
- * <code>Event</code> object. For example, when a charge succeeds, we create a
11
- * <code>charge.succeeded</code> event; and when an invoice payment attempt fails,
12
- * we create an <code>invoice.payment_failed</code> event. Note that many API
13
- * requests may cause multiple events to be created. For example, if you create a
14
- * new subscription for a customer, you will receive both a
15
- * <code>customer.subscription.created</code> event and a
16
- * <code>charge.succeeded</code> event.
17
- *
18
- * Events occur when the state of another API resource changes. The state of that
19
- * resource at the time of the change is embedded in the event's data field. For
20
- * example, a <code>charge.succeeded</code> event will contain a charge, and an
21
- * <code>invoice.payment_failed</code> event will contain an invoice.
22
- *
23
- * As with other API resources, you can use endpoints to retrieve an <a
24
- * href="https://stripe.com/docs/api#retrieve_event">individual event</a> or a <a
25
- * href="https://stripe.com/docs/api#list_events">list of events</a> from the API.
26
- * We also have a separate <a
27
- * href="http://en.wikipedia.org/wiki/Webhook">webhooks</a> system for sending the
28
- * <code>Event</code> objects directly to an endpoint on your server. Webhooks are
29
- * managed in your <a href="https://dashboard.stripe.com/account/webhooks">account
30
- * settings</a>, and our <a href="https://stripe.com/docs/webhooks">Using
31
- * Webhooks</a> guide will help you get set up.
32
- *
33
- * When using <a href="https://stripe.com/docs/connect">Connect</a>, you can also
34
- * receive notifications of events that occur in connected accounts. For these
35
- * events, there will be an additional <code>account</code> attribute in the
36
- * received <code>Event</code> object.
37
  *
38
- * <strong>NOTE:</strong> Right now, access to events through the <a
39
- * href="https://stripe.com/docs/api#retrieve_event">Retrieve Event API</a> is
40
- * guaranteed only for 30 days.
 
 
 
 
 
 
41
  *
42
- * @property string $id Unique identifier for the object.
43
- * @property string $object String representing the object's type. Objects of the same type share the same value.
44
- * @property string $account The connected account that originated the event.
45
- * @property null|string $api_version The Stripe API version used to render <code>data</code>. <em>Note: This property is populated only for events on or after October 31, 2014</em>.
46
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
47
- * @property \Stripe\StripeObject $data
48
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
49
- * @property int $pending_webhooks Number of webhooks that have yet to be successfully delivered (i.e., to return a 20x response) to the URLs you've specified.
50
- * @property null|\Stripe\StripeObject $request Information on the API request that instigated the event.
51
- * @property string $type Description of the event (e.g., <code>invoice.created</code> or <code>charge.refunded</code>).
52
  */
53
  class Event extends ApiResource
54
  {
55
- const OBJECT_NAME = 'event';
56
-
57
- use ApiOperations\All;
58
- use ApiOperations\Retrieve;
 
 
 
 
 
 
59
 
60
  /**
61
- * Possible string representations of event types.
 
62
  *
63
- * @see https://stripe.com/docs/api#event_types
64
  */
65
- const ACCOUNT_UPDATED = 'account.updated';
66
- const ACCOUNT_APPLICATION_AUTHORIZED = 'account.application.authorized';
67
- const ACCOUNT_APPLICATION_DEAUTHORIZED = 'account.application.deauthorized';
68
- const ACCOUNT_EXTERNAL_ACCOUNT_CREATED = 'account.external_account.created';
69
- const ACCOUNT_EXTERNAL_ACCOUNT_DELETED = 'account.external_account.deleted';
70
- const ACCOUNT_EXTERNAL_ACCOUNT_UPDATED = 'account.external_account.updated';
71
- const APPLICATION_FEE_CREATED = 'application_fee.created';
72
- const APPLICATION_FEE_REFUNDED = 'application_fee.refunded';
73
- const APPLICATION_FEE_REFUND_UPDATED = 'application_fee.refund.updated';
74
- const BALANCE_AVAILABLE = 'balance.available';
75
- const CAPABILITY_UPDATED = 'capability.updated';
76
- const CHARGE_CAPTURED = 'charge.captured';
77
- const CHARGE_EXPIRED = 'charge.expired';
78
- const CHARGE_FAILED = 'charge.failed';
79
- const CHARGE_PENDING = 'charge.pending';
80
- const CHARGE_REFUNDED = 'charge.refunded';
81
- const CHARGE_SUCCEEDED = 'charge.succeeded';
82
- const CHARGE_UPDATED = 'charge.updated';
83
- const CHARGE_DISPUTE_CLOSED = 'charge.dispute.closed';
84
- const CHARGE_DISPUTE_CREATED = 'charge.dispute.created';
85
- const CHARGE_DISPUTE_FUNDS_REINSTATED = 'charge.dispute.funds_reinstated';
86
- const CHARGE_DISPUTE_FUNDS_WITHDRAWN = 'charge.dispute.funds_withdrawn';
87
- const CHARGE_DISPUTE_UPDATED = 'charge.dispute.updated';
88
- const CHARGE_REFUND_UPDATED = 'charge.refund.updated';
89
- const CHECKOUT_SESSION_ASYNC_PAYMENT_FAILED = 'checkout.session.async_payment_failed';
90
- const CHECKOUT_SESSION_ASYNC_PAYMENT_SUCCEEDED = 'checkout.session.async_payment_succeeded';
91
- const CHECKOUT_SESSION_COMPLETED = 'checkout.session.completed';
92
- const COUPON_CREATED = 'coupon.created';
93
- const COUPON_DELETED = 'coupon.deleted';
94
- const COUPON_UPDATED = 'coupon.updated';
95
- const CREDIT_NOTE_CREATED = 'credit_note.created';
96
- const CREDIT_NOTE_UPDATED = 'credit_note.updated';
97
- const CREDIT_NOTE_VOIDED = 'credit_note.voided';
98
- const CUSTOMER_CREATED = 'customer.created';
99
- const CUSTOMER_DELETED = 'customer.deleted';
100
- const CUSTOMER_UPDATED = 'customer.updated';
101
- const CUSTOMER_DISCOUNT_CREATED = 'customer.discount.created';
102
- const CUSTOMER_DISCOUNT_DELETED = 'customer.discount.deleted';
103
- const CUSTOMER_DISCOUNT_UPDATED = 'customer.discount.updated';
104
- const CUSTOMER_SOURCE_CREATED = 'customer.source.created';
105
- const CUSTOMER_SOURCE_DELETED = 'customer.source.deleted';
106
- const CUSTOMER_SOURCE_EXPIRING = 'customer.source.expiring';
107
- const CUSTOMER_SOURCE_UPDATED = 'customer.source.updated';
108
- const CUSTOMER_SUBSCRIPTION_CREATED = 'customer.subscription.created';
109
- const CUSTOMER_SUBSCRIPTION_DELETED = 'customer.subscription.deleted';
110
- const CUSTOMER_SUBSCRIPTION_PENDING_UPDATE_APPLIED = 'customer.subscription.pending_update_applied';
111
- const CUSTOMER_SUBSCRIPTION_PENDING_UPDATE_EXPIRED = 'customer.subscription.pending_update_expired';
112
- const CUSTOMER_SUBSCRIPTION_TRIAL_WILL_END = 'customer.subscription.trial_will_end';
113
- const CUSTOMER_SUBSCRIPTION_UPDATED = 'customer.subscription.updated';
114
- const CUSTOMER_TAX_ID_CREATED = 'customer.tax_id.created';
115
- const CUSTOMER_TAX_ID_DELETED = 'customer.tax_id.deleted';
116
- const CUSTOMER_TAX_ID_UPDATED = 'customer.tax_id.updated';
117
- const FILE_CREATED = 'file.created';
118
- const INVOICE_CREATED = 'invoice.created';
119
- const INVOICE_DELETED = 'invoice.deleted';
120
- const INVOICE_FINALIZATION_FAILED = 'invoice.finalization_failed';
121
- const INVOICE_FINALIZED = 'invoice.finalized';
122
- const INVOICE_MARKED_UNCOLLECTIBLE = 'invoice.marked_uncollectible';
123
- const INVOICE_PAID = 'invoice.paid';
124
- const INVOICE_PAYMENT_ACTION_REQUIRED = 'invoice.payment_action_required';
125
- const INVOICE_PAYMENT_FAILED = 'invoice.payment_failed';
126
- const INVOICE_PAYMENT_SUCCEEDED = 'invoice.payment_succeeded';
127
- const INVOICE_SENT = 'invoice.sent';
128
- const INVOICE_UPCOMING = 'invoice.upcoming';
129
- const INVOICE_UPDATED = 'invoice.updated';
130
- const INVOICE_VOIDED = 'invoice.voided';
131
- const INVOICEITEM_CREATED = 'invoiceitem.created';
132
- const INVOICEITEM_DELETED = 'invoiceitem.deleted';
133
- const INVOICEITEM_UPDATED = 'invoiceitem.updated';
134
- const ISSUER_FRAUD_RECORD_CREATED = 'issuer_fraud_record.created';
135
- const ISSUING_AUTHORIZATION_CREATED = 'issuing_authorization.created';
136
- const ISSUING_AUTHORIZATION_REQUEST = 'issuing_authorization.request';
137
- const ISSUING_AUTHORIZATION_UPDATED = 'issuing_authorization.updated';
138
- const ISSUING_CARD_CREATED = 'issuing_card.created';
139
- const ISSUING_CARD_UPDATED = 'issuing_card.updated';
140
- const ISSUING_CARDHOLDER_CREATED = 'issuing_cardholder.created';
141
- const ISSUING_CARDHOLDER_UPDATED = 'issuing_cardholder.updated';
142
- const ISSUING_DISPUTE_CLOSED = 'issuing_dispute.closed';
143
- const ISSUING_DISPUTE_CREATED = 'issuing_dispute.created';
144
- const ISSUING_DISPUTE_FUNDS_REINSTATED = 'issuing_dispute.funds_reinstated';
145
- const ISSUING_DISPUTE_SUBMITTED = 'issuing_dispute.submitted';
146
- const ISSUING_DISPUTE_UPDATED = 'issuing_dispute.updated';
147
- const ISSUING_TRANSACTION_CREATED = 'issuing_transaction.created';
148
- const ISSUING_TRANSACTION_UPDATED = 'issuing_transaction.updated';
149
- const MANDATE_UPDATED = 'mandate.updated';
150
- const ORDER_CREATED = 'order.created';
151
- const ORDER_PAYMENT_FAILED = 'order.payment_failed';
152
- const ORDER_PAYMENT_SUCCEEDED = 'order.payment_succeeded';
153
- const ORDER_UPDATED = 'order.updated';
154
- const ORDER_RETURN_CREATED = 'order_return.created';
155
- const PAYMENT_INTENT_AMOUNT_CAPTURABLE_UPDATED = 'payment_intent.amount_capturable_updated';
156
- const PAYMENT_INTENT_CANCELED = 'payment_intent.canceled';
157
- const PAYMENT_INTENT_CREATED = 'payment_intent.created';
158
- const PAYMENT_INTENT_PAYMENT_FAILED = 'payment_intent.payment_failed';
159
- const PAYMENT_INTENT_PROCESSING = 'payment_intent.processing';
160
- const PAYMENT_INTENT_REQUIRES_ACTION = 'payment_intent.requires_action';
161
- const PAYMENT_INTENT_SUCCEEDED = 'payment_intent.succeeded';
162
- const PAYMENT_METHOD_ATTACHED = 'payment_method.attached';
163
- const PAYMENT_METHOD_AUTOMATICALLY_UPDATED = 'payment_method.automatically_updated';
164
- const PAYMENT_METHOD_CARD_AUTOMATICALLY_UPDATED = 'payment_method.card_automatically_updated';
165
- const PAYMENT_METHOD_DETACHED = 'payment_method.detached';
166
- const PAYMENT_METHOD_UPDATED = 'payment_method.updated';
167
- const PAYOUT_CANCELED = 'payout.canceled';
168
- const PAYOUT_CREATED = 'payout.created';
169
- const PAYOUT_FAILED = 'payout.failed';
170
- const PAYOUT_PAID = 'payout.paid';
171
- const PAYOUT_UPDATED = 'payout.updated';
172
- const PERSON_CREATED = 'person.created';
173
- const PERSON_DELETED = 'person.deleted';
174
- const PERSON_UPDATED = 'person.updated';
175
- const PING = 'ping';
176
- const PLAN_CREATED = 'plan.created';
177
- const PLAN_DELETED = 'plan.deleted';
178
- const PLAN_UPDATED = 'plan.updated';
179
- const PRICE_CREATED = 'price.created';
180
- const PRICE_DELETED = 'price.deleted';
181
- const PRICE_UPDATED = 'price.updated';
182
- const PRODUCT_CREATED = 'product.created';
183
- const PRODUCT_DELETED = 'product.deleted';
184
- const PRODUCT_UPDATED = 'product.updated';
185
- const PROMOTION_CODE_CREATED = 'promotion_code.created';
186
- const PROMOTION_CODE_DELETED = 'promotion_code.deleted';
187
- const PROMOTION_CODE_UPDATED = 'promotion_code.updated';
188
- const RADAR_EARLY_FRAUD_WARNING_CREATED = 'radar.early_fraud_warning.created';
189
- const RADAR_EARLY_FRAUD_WARNING_UPDATED = 'radar.early_fraud_warning.updated';
190
- const RECIPIENT_CREATED = 'recipient.created';
191
- const RECIPIENT_DELETED = 'recipient.deleted';
192
- const RECIPIENT_UPDATED = 'recipient.updated';
193
- const REPORTING_REPORT_RUN_FAILED = 'reporting.report_run.failed';
194
- const REPORTING_REPORT_RUN_SUCCEEDED = 'reporting.report_run.succeeded';
195
- const REPORTING_REPORT_TYPE_UPDATED = 'reporting.report_type.updated';
196
- const REVIEW_CLOSED = 'review.closed';
197
- const REVIEW_OPENED = 'review.opened';
198
- const SETUP_INTENT_CANCELED = 'setup_intent.canceled';
199
- const SETUP_INTENT_CREATED = 'setup_intent.created';
200
- const SETUP_INTENT_REQUIRES_ACTION = 'setup_intent.requires_action';
201
- const SETUP_INTENT_SETUP_FAILED = 'setup_intent.setup_failed';
202
- const SETUP_INTENT_SUCCEEDED = 'setup_intent.succeeded';
203
- const SIGMA_SCHEDULED_QUERY_RUN_CREATED = 'sigma.scheduled_query_run.created';
204
- const SKU_CREATED = 'sku.created';
205
- const SKU_DELETED = 'sku.deleted';
206
- const SKU_UPDATED = 'sku.updated';
207
- const SOURCE_CANCELED = 'source.canceled';
208
- const SOURCE_CHARGEABLE = 'source.chargeable';
209
- const SOURCE_FAILED = 'source.failed';
210
- const SOURCE_MANDATE_NOTIFICATION = 'source.mandate_notification';
211
- const SOURCE_REFUND_ATTRIBUTES_REQUIRED = 'source.refund_attributes_required';
212
- const SOURCE_TRANSACTION_CREATED = 'source.transaction.created';
213
- const SOURCE_TRANSACTION_UPDATED = 'source.transaction.updated';
214
- const SUBSCRIPTION_SCHEDULE_ABORTED = 'subscription_schedule.aborted';
215
- const SUBSCRIPTION_SCHEDULE_CANCELED = 'subscription_schedule.canceled';
216
- const SUBSCRIPTION_SCHEDULE_COMPLETED = 'subscription_schedule.completed';
217
- const SUBSCRIPTION_SCHEDULE_CREATED = 'subscription_schedule.created';
218
- const SUBSCRIPTION_SCHEDULE_EXPIRING = 'subscription_schedule.expiring';
219
- const SUBSCRIPTION_SCHEDULE_RELEASED = 'subscription_schedule.released';
220
- const SUBSCRIPTION_SCHEDULE_UPDATED = 'subscription_schedule.updated';
221
- const TAX_RATE_CREATED = 'tax_rate.created';
222
- const TAX_RATE_UPDATED = 'tax_rate.updated';
223
- const TOPUP_CANCELED = 'topup.canceled';
224
- const TOPUP_CREATED = 'topup.created';
225
- const TOPUP_FAILED = 'topup.failed';
226
- const TOPUP_REVERSED = 'topup.reversed';
227
- const TOPUP_SUCCEEDED = 'topup.succeeded';
228
- const TRANSFER_CREATED = 'transfer.created';
229
- const TRANSFER_REVERSED = 'transfer.reversed';
230
- const TRANSFER_UPDATED = 'transfer.updated';
231
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Event
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $api_version
11
+ * @property int $created
12
+ * @property mixed $data
13
+ * @property bool $livemode
14
+ * @property int $pending_webhooks
15
+ * @property string $request
16
+ * @property string $type
17
  *
18
+ * @package Stripe
 
 
 
 
 
 
 
 
 
19
  */
20
  class Event extends ApiResource
21
  {
22
+ /**
23
+ * @param string $id The ID of the event to retrieve.
24
+ * @param array|string|null $opts
25
+ *
26
+ * @return Event
27
+ */
28
+ public static function retrieve($id, $opts = null)
29
+ {
30
+ return self::_retrieve($id, $opts);
31
+ }
32
 
33
  /**
34
+ * @param array|null $params
35
+ * @param array|string|null $opts
36
  *
37
+ * @return Collection of Events
38
  */
39
+ public static function all($params = null, $opts = null)
40
+ {
41
+ return self::_all($params, $opts);
42
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
lib/stripe/lib/Exception/ApiConnectionException.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * ApiConnection is thrown in the event that the SDK can't connect to Stripe's
7
- * servers. That can be for a variety of different reasons from a downed
8
- * network to a bad TLS certificate.
9
- */
10
- class ApiConnectionException extends ApiErrorException
11
- {
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/ApiErrorException.php DELETED
@@ -1,219 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * Implements properties and methods common to all (non-SPL) Stripe exceptions.
7
- */
8
- abstract class ApiErrorException extends \Exception implements ExceptionInterface
9
- {
10
- protected $error;
11
- protected $httpBody;
12
- protected $httpHeaders;
13
- protected $httpStatus;
14
- protected $jsonBody;
15
- protected $requestId;
16
- protected $stripeCode;
17
-
18
- /**
19
- * Creates a new API error exception.
20
- *
21
- * @param string $message the exception message
22
- * @param null|int $httpStatus the HTTP status code
23
- * @param null|string $httpBody the HTTP body as a string
24
- * @param null|array $jsonBody the JSON deserialized body
25
- * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders the HTTP headers array
26
- * @param null|string $stripeCode the Stripe error code
27
- *
28
- * @return static
29
- */
30
- public static function factory(
31
- $message,
32
- $httpStatus = null,
33
- $httpBody = null,
34
- $jsonBody = null,
35
- $httpHeaders = null,
36
- $stripeCode = null
37
- ) {
38
- $instance = new static($message);
39
- $instance->setHttpStatus($httpStatus);
40
- $instance->setHttpBody($httpBody);
41
- $instance->setJsonBody($jsonBody);
42
- $instance->setHttpHeaders($httpHeaders);
43
- $instance->setStripeCode($stripeCode);
44
-
45
- $instance->setRequestId(null);
46
- if ($httpHeaders && isset($httpHeaders['Request-Id'])) {
47
- $instance->setRequestId($httpHeaders['Request-Id']);
48
- }
49
-
50
- $instance->setError($instance->constructErrorObject());
51
-
52
- return $instance;
53
- }
54
-
55
- /**
56
- * Gets the Stripe error object.
57
- *
58
- * @return null|\Stripe\ErrorObject
59
- */
60
- public function getError()
61
- {
62
- return $this->error;
63
- }
64
-
65
- /**
66
- * Sets the Stripe error object.
67
- *
68
- * @param null|\Stripe\ErrorObject $error
69
- */
70
- public function setError($error)
71
- {
72
- $this->error = $error;
73
- }
74
-
75
- /**
76
- * Gets the HTTP body as a string.
77
- *
78
- * @return null|string
79
- */
80
- public function getHttpBody()
81
- {
82
- return $this->httpBody;
83
- }
84
-
85
- /**
86
- * Sets the HTTP body as a string.
87
- *
88
- * @param null|string $httpBody
89
- */
90
- public function setHttpBody($httpBody)
91
- {
92
- $this->httpBody = $httpBody;
93
- }
94
-
95
- /**
96
- * Gets the HTTP headers array.
97
- *
98
- * @return null|array|\Stripe\Util\CaseInsensitiveArray
99
- */
100
- public function getHttpHeaders()
101
- {
102
- return $this->httpHeaders;
103
- }
104
-
105
- /**
106
- * Sets the HTTP headers array.
107
- *
108
- * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders
109
- */
110
- public function setHttpHeaders($httpHeaders)
111
- {
112
- $this->httpHeaders = $httpHeaders;
113
- }
114
-
115
- /**
116
- * Gets the HTTP status code.
117
- *
118
- * @return null|int
119
- */
120
- public function getHttpStatus()
121
- {
122
- return $this->httpStatus;
123
- }
124
-
125
- /**
126
- * Sets the HTTP status code.
127
- *
128
- * @param null|int $httpStatus
129
- */
130
- public function setHttpStatus($httpStatus)
131
- {
132
- $this->httpStatus = $httpStatus;
133
- }
134
-
135
- /**
136
- * Gets the JSON deserialized body.
137
- *
138
- * @return null|array<string, mixed>
139
- */
140
- public function getJsonBody()
141
- {
142
- return $this->jsonBody;
143
- }
144
-
145
- /**
146
- * Sets the JSON deserialized body.
147
- *
148
- * @param null|array<string, mixed> $jsonBody
149
- */
150
- public function setJsonBody($jsonBody)
151
- {
152
- $this->jsonBody = $jsonBody;
153
- }
154
-
155
- /**
156
- * Gets the Stripe request ID.
157
- *
158
- * @return null|string
159
- */
160
- public function getRequestId()
161
- {
162
- return $this->requestId;
163
- }
164
-
165
- /**
166
- * Sets the Stripe request ID.
167
- *
168
- * @param null|string $requestId
169
- */
170
- public function setRequestId($requestId)
171
- {
172
- $this->requestId = $requestId;
173
- }
174
-
175
- /**
176
- * Gets the Stripe error code.
177
- *
178
- * Cf. the `CODE_*` constants on {@see \Stripe\ErrorObject} for possible
179
- * values.
180
- *
181
- * @return null|string
182
- */
183
- public function getStripeCode()
184
- {
185
- return $this->stripeCode;
186
- }
187
-
188
- /**
189
- * Sets the Stripe error code.
190
- *
191
- * @param null|string $stripeCode
192
- */
193
- public function setStripeCode($stripeCode)
194
- {
195
- $this->stripeCode = $stripeCode;
196
- }
197
-
198
- /**
199
- * Returns the string representation of the exception.
200
- *
201
- * @return string
202
- */
203
- public function __toString()
204
- {
205
- $statusStr = (null === $this->getHttpStatus()) ? '' : "(Status {$this->getHttpStatus()}) ";
206
- $idStr = (null === $this->getRequestId()) ? '' : "(Request {$this->getRequestId()}) ";
207
-
208
- return "{$statusStr}{$idStr}{$this->getMessage()}";
209
- }
210
-
211
- protected function constructErrorObject()
212
- {
213
- if (null === $this->jsonBody || !\array_key_exists('error', $this->jsonBody)) {
214
- return null;
215
- }
216
-
217
- return \Stripe\ErrorObject::constructFrom($this->jsonBody['error']);
218
- }
219
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/AuthenticationException.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * AuthenticationException is thrown when invalid credentials are used to
7
- * connect to Stripe's servers.
8
- */
9
- class AuthenticationException extends ApiErrorException
10
- {
11
- }
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/BadMethodCallException.php DELETED
@@ -1,7 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
6
- {
7
- }
 
 
 
 
 
 
 
lib/stripe/lib/Exception/CardException.php DELETED
@@ -1,84 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * CardException is thrown when a user enters a card that can't be charged for
7
- * some reason.
8
- */
9
- class CardException extends ApiErrorException
10
- {
11
- protected $declineCode;
12
- protected $stripeParam;
13
-
14
- /**
15
- * Creates a new CardException exception.
16
- *
17
- * @param string $message the exception message
18
- * @param null|int $httpStatus the HTTP status code
19
- * @param null|string $httpBody the HTTP body as a string
20
- * @param null|array $jsonBody the JSON deserialized body
21
- * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders the HTTP headers array
22
- * @param null|string $stripeCode the Stripe error code
23
- * @param null|string $declineCode the decline code
24
- * @param null|string $stripeParam the parameter related to the error
25
- *
26
- * @return CardException
27
- */
28
- public static function factory(
29
- $message,
30
- $httpStatus = null,
31
- $httpBody = null,
32
- $jsonBody = null,
33
- $httpHeaders = null,
34
- $stripeCode = null,
35
- $declineCode = null,
36
- $stripeParam = null
37
- ) {
38
- $instance = parent::factory($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders, $stripeCode);
39
- $instance->setDeclineCode($declineCode);
40
- $instance->setStripeParam($stripeParam);
41
-
42
- return $instance;
43
- }
44
-
45
- /**
46
- * Gets the decline code.
47
- *
48
- * @return null|string
49
- */
50
- public function getDeclineCode()
51
- {
52
- return $this->declineCode;
53
- }
54
-
55
- /**
56
- * Sets the decline code.
57
- *
58
- * @param null|string $declineCode
59
- */
60
- public function setDeclineCode($declineCode)
61
- {
62
- $this->declineCode = $declineCode;
63
- }
64
-
65
- /**
66
- * Gets the parameter related to the error.
67
- *
68
- * @return null|string
69
- */
70
- public function getStripeParam()
71
- {
72
- return $this->stripeParam;
73
- }
74
-
75
- /**
76
- * Sets the parameter related to the error.
77
- *
78
- * @param null|string $stripeParam
79
- */
80
- public function setStripeParam($stripeParam)
81
- {
82
- $this->stripeParam = $stripeParam;
83
- }
84
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/ExceptionInterface.php DELETED
@@ -1,22 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- // TODO: remove this check once we drop support for PHP 5
6
- if (\interface_exists(\Throwable::class, false)) {
7
- /**
8
- * The base interface for all Stripe exceptions.
9
- */
10
- interface ExceptionInterface extends \Throwable
11
- {
12
- }
13
- } else {
14
- /**
15
- * The base interface for all Stripe exceptions.
16
- */
17
- // phpcs:disable PSR1.Classes.ClassDeclaration.MultipleClasses
18
- interface ExceptionInterface
19
- {
20
- }
21
- // phpcs:enable
22
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/IdempotencyException.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * IdempotencyException is thrown in cases where an idempotency key was used
7
- * improperly.
8
- */
9
- class IdempotencyException extends ApiErrorException
10
- {
11
- }
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/InvalidArgumentException.php DELETED
@@ -1,7 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
6
- {
7
- }
 
 
 
 
 
 
 
lib/stripe/lib/Exception/InvalidRequestException.php DELETED
@@ -1,60 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * InvalidRequestException is thrown when a request is initiated with invalid
7
- * parameters.
8
- */
9
- class InvalidRequestException extends ApiErrorException
10
- {
11
- protected $stripeParam;
12
-
13
- /**
14
- * Creates a new InvalidRequestException exception.
15
- *
16
- * @param string $message the exception message
17
- * @param null|int $httpStatus the HTTP status code
18
- * @param null|string $httpBody the HTTP body as a string
19
- * @param null|array $jsonBody the JSON deserialized body
20
- * @param null|array|\Stripe\Util\CaseInsensitiveArray $httpHeaders the HTTP headers array
21
- * @param null|string $stripeCode the Stripe error code
22
- * @param null|string $stripeParam the parameter related to the error
23
- *
24
- * @return InvalidRequestException
25
- */
26
- public static function factory(
27
- $message,
28
- $httpStatus = null,
29
- $httpBody = null,
30
- $jsonBody = null,
31
- $httpHeaders = null,
32
- $stripeCode = null,
33
- $stripeParam = null
34
- ) {
35
- $instance = parent::factory($message, $httpStatus, $httpBody, $jsonBody, $httpHeaders, $stripeCode);
36
- $instance->setStripeParam($stripeParam);
37
-
38
- return $instance;
39
- }
40
-
41
- /**
42
- * Gets the parameter related to the error.
43
- *
44
- * @return null|string
45
- */
46
- public function getStripeParam()
47
- {
48
- return $this->stripeParam;
49
- }
50
-
51
- /**
52
- * Sets the parameter related to the error.
53
- *
54
- * @param null|string $stripeParam
55
- */
56
- public function setStripeParam($stripeParam)
57
- {
58
- $this->stripeParam = $stripeParam;
59
- }
60
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/ExceptionInterface.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * The base interface for all Stripe OAuth exceptions.
7
- */
8
- interface ExceptionInterface extends \Stripe\Exception\ExceptionInterface
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/InvalidClientException.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * InvalidClientException is thrown when the client_id does not belong to you,
7
- * the stripe_user_id does not exist or is not connected to your application,
8
- * or the API key mode (live or test mode) does not match the client_id mode.
9
- */
10
- class InvalidClientException extends OAuthErrorException
11
- {
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/InvalidGrantException.php DELETED
@@ -1,13 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * InvalidGrantException is thrown when a specified code doesn't exist, is
7
- * expired, has been used, or doesn't belong to you; a refresh token doesn't
8
- * exist, or doesn't belong to you; or if an API key's mode (live or test)
9
- * doesn't match the mode of a code or refresh token.
10
- */
11
- class InvalidGrantException extends OAuthErrorException
12
- {
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/InvalidRequestException.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * InvalidRequestException is thrown when a code, refresh token, or grant
7
- * type parameter is not provided, but was required.
8
- */
9
- class InvalidRequestException extends OAuthErrorException
10
- {
11
- }
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/InvalidScopeException.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * InvalidScopeException is thrown when an invalid scope parameter is provided.
7
- */
8
- class InvalidScopeException extends OAuthErrorException
9
- {
10
- }
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/OAuthErrorException.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * Implements properties and methods common to all (non-SPL) Stripe OAuth
7
- * exceptions.
8
- */
9
- abstract class OAuthErrorException extends \Stripe\Exception\ApiErrorException
10
- {
11
- protected function constructErrorObject()
12
- {
13
- if (null === $this->jsonBody) {
14
- return null;
15
- }
16
-
17
- return \Stripe\OAuthErrorObject::constructFrom($this->jsonBody);
18
- }
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/UnknownOAuthErrorException.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * UnknownApiErrorException is thrown when the client library receives an
7
- * error from the OAuth API it doesn't know about. Receiving this error usually
8
- * means that your client library is outdated and should be upgraded.
9
- */
10
- class UnknownOAuthErrorException extends OAuthErrorException
11
- {
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/UnsupportedGrantTypeException.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * UnsupportedGrantTypeException is thrown when an unuspported grant type
7
- * parameter is specified.
8
- */
9
- class UnsupportedGrantTypeException extends OAuthErrorException
10
- {
11
- }
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/OAuth/UnsupportedResponseTypeException.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception\OAuth;
4
-
5
- /**
6
- * UnsupportedResponseTypeException is thrown when an unsupported response type
7
- * parameter is specified.
8
- */
9
- class UnsupportedResponseTypeException extends OAuthErrorException
10
- {
11
- }
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/PermissionException.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * PermissionException is thrown in cases where access was attempted on a
7
- * resource that wasn't allowed.
8
- */
9
- class PermissionException extends ApiErrorException
10
- {
11
- }
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/RateLimitException.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * RateLimitException is thrown in cases where an account is putting too much
7
- * load on Stripe's API servers (usually by performing too many requests).
8
- * Please back off on request rate.
9
- */
10
- class RateLimitException extends InvalidRequestException
11
- {
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/SignatureVerificationException.php DELETED
@@ -1,74 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * SignatureVerificationException is thrown when the signature verification for
7
- * a webhook fails.
8
- */
9
- class SignatureVerificationException extends \Exception implements ExceptionInterface
10
- {
11
- protected $httpBody;
12
- protected $sigHeader;
13
-
14
- /**
15
- * Creates a new SignatureVerificationException exception.
16
- *
17
- * @param string $message the exception message
18
- * @param null|string $httpBody the HTTP body as a string
19
- * @param null|string $sigHeader the `Stripe-Signature` HTTP header
20
- *
21
- * @return SignatureVerificationException
22
- */
23
- public static function factory(
24
- $message,
25
- $httpBody = null,
26
- $sigHeader = null
27
- ) {
28
- $instance = new static($message);
29
- $instance->setHttpBody($httpBody);
30
- $instance->setSigHeader($sigHeader);
31
-
32
- return $instance;
33
- }
34
-
35
- /**
36
- * Gets the HTTP body as a string.
37
- *
38
- * @return null|string
39
- */
40
- public function getHttpBody()
41
- {
42
- return $this->httpBody;
43
- }
44
-
45
- /**
46
- * Sets the HTTP body as a string.
47
- *
48
- * @param null|string $httpBody
49
- */
50
- public function setHttpBody($httpBody)
51
- {
52
- $this->httpBody = $httpBody;
53
- }
54
-
55
- /**
56
- * Gets the `Stripe-Signature` HTTP header.
57
- *
58
- * @return null|string
59
- */
60
- public function getSigHeader()
61
- {
62
- return $this->sigHeader;
63
- }
64
-
65
- /**
66
- * Sets the `Stripe-Signature` HTTP header.
67
- *
68
- * @param null|string $sigHeader
69
- */
70
- public function setSigHeader($sigHeader)
71
- {
72
- $this->sigHeader = $sigHeader;
73
- }
74
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Exception/UnexpectedValueException.php DELETED
@@ -1,7 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- class UnexpectedValueException extends \UnexpectedValueException implements ExceptionInterface
6
- {
7
- }
 
 
 
 
 
 
 
lib/stripe/lib/Exception/UnknownApiErrorException.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Exception;
4
-
5
- /**
6
- * UnknownApiErrorException is thrown when the client library receives an
7
- * error from the API it doesn't know about. Receiving this error usually
8
- * means that your client library is outdated and should be upgraded.
9
- */
10
- class UnknownApiErrorException extends ApiErrorException
11
- {
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ExchangeRate.php DELETED
@@ -1,30 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * <code>Exchange Rate</code> objects allow you to determine the rates that Stripe
9
- * is currently using to convert from one currency to another. Since this number is
10
- * variable throughout the day, there are various reasons why you might want to
11
- * know the current rate (for example, to dynamically price an item for a user with
12
- * a default payment in a foreign currency).
13
- *
14
- * If you want a guarantee that the charge is made with a certain exchange rate you
15
- * expect is current, you can pass in <code>exchange_rate</code> to charges
16
- * endpoints. If the value is no longer up to date, the charge won't go through.
17
- * Please refer to our <a href="https://stripe.com/docs/exchange-rates">Exchange
18
- * Rates API</a> guide for more details.
19
- *
20
- * @property string $id Unique identifier for the object. Represented as the three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a> in lowercase.
21
- * @property string $object String representing the object's type. Objects of the same type share the same value.
22
- * @property \Stripe\StripeObject $rates Hash where the keys are supported currencies and the values are the exchange rate at which the base id currency converts to the key currency.
23
- */
24
- class ExchangeRate extends ApiResource
25
- {
26
- const OBJECT_NAME = 'exchange_rate';
27
-
28
- use ApiOperations\All;
29
- use ApiOperations\Retrieve;
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/ExternalAccount.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ExternalAccount
7
+ *
8
+ * @package Stripe
9
+ */
10
+ abstract class ExternalAccount extends ApiResource
11
+ {
12
+ /**
13
+ * @return string The instance URL for this resource. It needs to be special
14
+ * cased because it doesn't fit into the standard resource pattern.
15
+ */
16
+ public function instanceUrl()
17
+ {
18
+ $id = $this['id'];
19
+ if (!$id) {
20
+ $class = get_class($this);
21
+ $msg = "Could not determine which URL to request: $class instance "
22
+ . "has invalid ID: $id";
23
+ throw new Error\InvalidRequest($msg, null);
24
+ }
25
+
26
+ if ($this['customer']) {
27
+ $parent = $this['customer'];
28
+ $base = Customer::classUrl();
29
+ $path = 'sources';
30
+ } elseif ($this['account']) {
31
+ $parent = $this['account'];
32
+ $base = Account::classUrl();
33
+ $path = 'external_accounts';
34
+ } elseif ($this['recipient']) {
35
+ $parent = $this['recipient'];
36
+ $base = Recipient::classUrl();
37
+ $path = 'cards';
38
+ } else {
39
+ return null;
40
+ }
41
+
42
+ $parent = Util\Util::utf8($parent);
43
+ $id = Util\Util::utf8($id);
44
+
45
+ $parentExtn = urlencode($parent);
46
+ $extn = urlencode($id);
47
+ return "$base/$parentExtn/$path/$extn";
48
+ }
49
+
50
+ /**
51
+ * @param array|null $params
52
+ * @param array|string|null $opts
53
+ *
54
+ * @return ExternalAccount The deleted external account.
55
+ */
56
+ public function delete($params = null, $opts = null)
57
+ {
58
+ return $this->_delete($params, $opts);
59
+ }
60
+
61
+ /**
62
+ * @param array|string|null $opts
63
+ *
64
+ * @return ExternalAccount The saved external account.
65
+ */
66
+ public function save($opts = null)
67
+ {
68
+ return $this->_save($opts);
69
+ }
70
+
71
+ /**
72
+ * @param array|null $params
73
+ * @param array|string|null $opts
74
+ *
75
+ * @return ExternalAccount The verified (or not) external account.
76
+ */
77
+ public function verify($params = null, $opts = null)
78
+ {
79
+ if ($this['customer']) {
80
+ $url = $this->instanceUrl() . '/verify';
81
+ list($response, $options) = $this->_request('post', $url, $params, $opts);
82
+ $this->refreshFrom($response, $options);
83
+ return $this;
84
+ } else {
85
+ $message = 'Only customer external accounts can be verified in this manner.';
86
+ throw new Error\Api($message);
87
+ }
88
+ }
89
+ }
lib/stripe/lib/File.php DELETED
@@ -1,82 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * This is an object representing a file hosted on Stripe's servers. The file may
9
- * have been uploaded by yourself using the <a
10
- * href="https://stripe.com/docs/api#create_file">create file</a> request (for
11
- * example, when uploading dispute evidence) or it may have been created by Stripe
12
- * (for example, the results of a <a href="#scheduled_queries">Sigma scheduled
13
- * query</a>).
14
- *
15
- * Related guide: <a href="https://stripe.com/docs/file-upload">File Upload
16
- * Guide</a>.
17
- *
18
- * @property string $id Unique identifier for the object.
19
- * @property string $object String representing the object's type. Objects of the same type share the same value.
20
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
21
- * @property null|int $expires_at The time at which the file expires and is no longer available in epoch seconds.
22
- * @property null|string $filename A filename for the file, suitable for saving to a filesystem.
23
- * @property null|\Stripe\Collection $links A list of <a href="https://stripe.com/docs/api#file_links">file links</a> that point at this file.
24
- * @property string $purpose The <a href="https://stripe.com/docs/file-upload#uploading-a-file">purpose</a> of the uploaded file.
25
- * @property int $size The size in bytes of the file object.
26
- * @property null|string $title A user friendly title for the document.
27
- * @property null|string $type The type of the file returned (e.g., <code>csv</code>, <code>pdf</code>, <code>jpg</code>, or <code>png</code>).
28
- * @property null|string $url The URL from which the file can be downloaded using your live secret API key.
29
- */
30
- class File extends ApiResource
31
- {
32
- const OBJECT_NAME = 'file';
33
-
34
- use ApiOperations\All;
35
- use ApiOperations\Retrieve;
36
-
37
- const PURPOSE_ACCOUNT_REQUIREMENT = 'account_requirement';
38
- const PURPOSE_ADDITIONAL_VERIFICATION = 'additional_verification';
39
- const PURPOSE_BUSINESS_ICON = 'business_icon';
40
- const PURPOSE_BUSINESS_LOGO = 'business_logo';
41
- const PURPOSE_CUSTOMER_SIGNATURE = 'customer_signature';
42
- const PURPOSE_DISPUTE_EVIDENCE = 'dispute_evidence';
43
- const PURPOSE_IDENTITY_DOCUMENT = 'identity_document';
44
- const PURPOSE_PCI_DOCUMENT = 'pci_document';
45
- const PURPOSE_TAX_DOCUMENT_USER_UPLOAD = 'tax_document_user_upload';
46
-
47
- // This resource can have two different object names. In latter API
48
- // versions, only `file` is used, but since stripe-php may be used with
49
- // any API version, we need to support deserializing the older
50
- // `file_upload` object into the same class.
51
- const OBJECT_NAME_ALT = 'file_upload';
52
-
53
- use ApiOperations\Create {
54
- create as protected _create;
55
- }
56
-
57
- public static function classUrl()
58
- {
59
- return '/v1/files';
60
- }
61
-
62
- /**
63
- * @param null|array $params
64
- * @param null|array|string $opts
65
- *
66
- * @throws \Stripe\Exception\ApiErrorException if the request fails
67
- *
68
- * @return \Stripe\File the created file
69
- */
70
- public static function create($params = null, $opts = null)
71
- {
72
- $opts = \Stripe\Util\RequestOptions::parse($opts);
73
- if (null === $opts->apiBase) {
74
- $opts->apiBase = Stripe::$apiUploadBase;
75
- }
76
- // Manually flatten params, otherwise curl's multipart encoder will
77
- // choke on nested arrays.
78
- $flatParams = \array_column(\Stripe\Util\Util::flattenParams($params), 1, 0);
79
-
80
- return static::_create($flatParams, $opts);
81
- }
82
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/FileLink.php DELETED
@@ -1,30 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * To share the contents of a <code>File</code> object with non-Stripe users, you
9
- * can create a <code>FileLink</code>. <code>FileLink</code>s contain a URL that
10
- * can be used to retrieve the contents of the file without authentication.
11
- *
12
- * @property string $id Unique identifier for the object.
13
- * @property string $object String representing the object's type. Objects of the same type share the same value.
14
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
15
- * @property bool $expired Whether this link is already expired.
16
- * @property null|int $expires_at Time at which the link expires.
17
- * @property string|\Stripe\File $file The file object this link points to.
18
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
19
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
20
- * @property null|string $url The publicly accessible URL to download the file.
21
- */
22
- class FileLink extends ApiResource
23
- {
24
- const OBJECT_NAME = 'file_link';
25
-
26
- use ApiOperations\All;
27
- use ApiOperations\Create;
28
- use ApiOperations\Retrieve;
29
- use ApiOperations\Update;
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/FileUpload.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class FileUpload
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $created
11
+ * @property string $purpose
12
+ * @property int $size
13
+ * @property string $type
14
+ *
15
+ * @package Stripe
16
+ */
17
+ class FileUpload extends ApiResource
18
+ {
19
+ public static function baseUrl()
20
+ {
21
+ return Stripe::$apiUploadBase;
22
+ }
23
+
24
+ public static function className()
25
+ {
26
+ return 'file';
27
+ }
28
+
29
+ /**
30
+ * @param string $id The ID of the file upload to retrieve.
31
+ * @param array|string|null $opts
32
+ *
33
+ * @return FileUpload
34
+ */
35
+ public static function retrieve($id, $opts = null)
36
+ {
37
+ return self::_retrieve($id, $opts);
38
+ }
39
+
40
+ /**
41
+ * @param array|null $params
42
+ * @param array|string|null $opts
43
+ *
44
+ * @return FileUpload The created file upload.
45
+ */
46
+ public static function create($params = null, $opts = null)
47
+ {
48
+ return self::_create($params, $opts);
49
+ }
50
+
51
+ /**
52
+ * @param array|null $params
53
+ * @param array|string|null $opts
54
+ *
55
+ * @return Collection of FileUploads
56
+ */
57
+ public static function all($params = null, $opts = null)
58
+ {
59
+ return self::_all($params, $opts);
60
+ }
61
+ }
lib/stripe/lib/HttpClient/ClientInterface.php CHANGED
@@ -9,14 +9,10 @@ interface ClientInterface
9
  * @param string $absUrl The URL being requested, including domain and protocol
10
  * @param array $headers Headers to be used in the request (full strings, not KV pairs)
11
  * @param array $params KV pairs for parameters. Can be nested for arrays and hashes
12
- * @param bool $hasFile Whether or not $params references a file (via an @ prefix or
13
- * CURLFile)
14
- *
15
- * @throws \Stripe\Exception\ApiConnectionException
16
- * @throws \Stripe\Exception\UnexpectedValueException
17
- *
18
- * @return array an array whose first element is raw request body, second
19
- * element is HTTP status code and third array of HTTP headers
20
  */
21
  public function request($method, $absUrl, $headers, $params, $hasFile);
22
  }
9
  * @param string $absUrl The URL being requested, including domain and protocol
10
  * @param array $headers Headers to be used in the request (full strings, not KV pairs)
11
  * @param array $params KV pairs for parameters. Can be nested for arrays and hashes
12
+ * @param boolean $hasFile Whether or not $params references a file (via an @ prefix or
13
+ * CurlFile)
14
+ * @throws Error\Api & Error\ApiConnection
15
+ * @return array($rawBody, $httpStatusCode, $httpHeader)
 
 
 
 
16
  */
17
  public function request($method, $absUrl, $headers, $params, $hasFile);
18
  }
lib/stripe/lib/HttpClient/CurlClient.php CHANGED
@@ -2,56 +2,24 @@
2
 
3
  namespace Stripe\HttpClient;
4
 
5
- use Stripe\Exception;
6
  use Stripe\Stripe;
 
7
  use Stripe\Util;
8
 
9
- // @codingStandardsIgnoreStart
10
- // PSR2 requires all constants be upper case. Sadly, the CURL_SSLVERSION
11
- // constants do not abide by those rules.
12
-
13
- // Note the values come from their position in the enums that
14
- // defines them in cURL's source code.
15
-
16
- // Available since PHP 5.5.19 and 5.6.3
17
- if (!\defined('CURL_SSLVERSION_TLSv1_2')) {
18
- \define('CURL_SSLVERSION_TLSv1_2', 6);
19
- }
20
- // @codingStandardsIgnoreEnd
21
-
22
- // Available since PHP 7.0.7 and cURL 7.47.0
23
- if (!\defined('CURL_HTTP_VERSION_2TLS')) {
24
- \define('CURL_HTTP_VERSION_2TLS', 4);
25
- }
26
-
27
  class CurlClient implements ClientInterface
28
  {
29
- protected static $instance;
30
 
31
  public static function instance()
32
  {
33
- if (!static::$instance) {
34
- static::$instance = new static();
35
  }
36
-
37
- return static::$instance;
38
  }
39
 
40
  protected $defaultOptions;
41
 
42
- /** @var \Stripe\Util\RandomGenerator */
43
- protected $randomGenerator;
44
-
45
- protected $userAgentInfo;
46
-
47
- protected $enablePersistentConnections = true;
48
-
49
- protected $enableHttp2;
50
-
51
- protected $curlHandle;
52
-
53
- protected $requestStatusCallback;
54
-
55
  /**
56
  * CurlClient constructor.
57
  *
@@ -63,30 +31,11 @@ class CurlClient implements ClientInterface
63
  * Note that request() will silently ignore a non-callable, non-array $defaultOptions, and will
64
  * throw an exception if $defaultOptions returns a non-array value.
65
  *
66
- * @param null|array|callable $defaultOptions
67
- * @param null|\Stripe\Util\RandomGenerator $randomGenerator
68
  */
69
- public function __construct($defaultOptions = null, $randomGenerator = null)
70
  {
71
  $this->defaultOptions = $defaultOptions;
72
- $this->randomGenerator = $randomGenerator ?: new Util\RandomGenerator();
73
- $this->initUserAgentInfo();
74
-
75
- $this->enableHttp2 = $this->canSafelyUseHttp2();
76
- }
77
-
78
- public function __destruct()
79
- {
80
- $this->closeCurlHandle();
81
- }
82
-
83
- public function initUserAgentInfo()
84
- {
85
- $curlVersion = \curl_version();
86
- $this->userAgentInfo = [
87
- 'httplib' => 'curl ' . $curlVersion['version'],
88
- 'ssllib' => $curlVersion['ssl_version'],
89
- ];
90
  }
91
 
92
  public function getDefaultOptions()
@@ -94,71 +43,6 @@ class CurlClient implements ClientInterface
94
  return $this->defaultOptions;
95
  }
96
 
97
- public function getUserAgentInfo()
98
- {
99
- return $this->userAgentInfo;
100
- }
101
-
102
- /**
103
- * @return bool
104
- */
105
- public function getEnablePersistentConnections()
106
- {
107
- return $this->enablePersistentConnections;
108
- }
109
-
110
- /**
111
- * @param bool $enable
112
- */
113
- public function setEnablePersistentConnections($enable)
114
- {
115
- $this->enablePersistentConnections = $enable;
116
- }
117
-
118
- /**
119
- * @return bool
120
- */
121
- public function getEnableHttp2()
122
- {
123
- return $this->enableHttp2;
124
- }
125
-
126
- /**
127
- * @param bool $enable
128
- */
129
- public function setEnableHttp2($enable)
130
- {
131
- $this->enableHttp2 = $enable;
132
- }
133
-
134
- /**
135
- * @return null|callable
136
- */
137
- public function getRequestStatusCallback()
138
- {
139
- return $this->requestStatusCallback;
140
- }
141
-
142
- /**
143
- * Sets a callback that is called after each request. The callback will
144
- * receive the following parameters:
145
- * <ol>
146
- * <li>string $rbody The response body</li>
147
- * <li>integer $rcode The response status code</li>
148
- * <li>\Stripe\Util\CaseInsensitiveArray $rheaders The response headers</li>
149
- * <li>integer $errno The curl error number</li>
150
- * <li>string|null $message The curl error message</li>
151
- * <li>boolean $shouldRetry Whether the request will be retried</li>
152
- * <li>integer $numRetries The number of the retry attempt</li>
153
- * </ol>.
154
- *
155
- * @param null|callable $requestStatusCallback
156
- */
157
- public function setRequestStatusCallback($requestStatusCallback)
158
- {
159
- $this->requestStatusCallback = $requestStatusCallback;
160
- }
161
-
162
  // USER DEFINED TIMEOUTS
163
 
164
  const DEFAULT_TIMEOUT = 80;
@@ -169,15 +53,13 @@ class CurlClient implements ClientInterface
169
 
170
  public function setTimeout($seconds)
171
  {
172
- $this->timeout = (int) \max($seconds, 0);
173
-
174
  return $this;
175
  }
176
 
177
  public function setConnectTimeout($seconds)
178
  {
179
- $this->connectTimeout = (int) \max($seconds, 0);
180
-
181
  return $this;
182
  }
183
 
@@ -195,51 +77,54 @@ class CurlClient implements ClientInterface
195
 
196
  public function request($method, $absUrl, $headers, $params, $hasFile)
197
  {
198
- $method = \strtolower($method);
199
-
200
- $opts = [];
201
- if (\is_callable($this->defaultOptions)) { // call defaultOptions callback, set options to return value
202
- $opts = \call_user_func_array($this->defaultOptions, \func_get_args());
203
- if (!\is_array($opts)) {
204
- throw new Exception\UnexpectedValueException('Non-array value returned by defaultOptions CurlClient callback');
 
205
  }
206
- } elseif (\is_array($this->defaultOptions)) { // set default curlopts from array
207
  $opts = $this->defaultOptions;
208
  }
209
 
210
- $params = Util\Util::objectsToIds($params);
211
-
212
- if ('get' === $method) {
213
  if ($hasFile) {
214
- throw new Exception\UnexpectedValueException(
215
- 'Issuing a GET request with a file parameter'
216
  );
217
  }
218
- $opts[\CURLOPT_HTTPGET] = 1;
219
- if (\count($params) > 0) {
220
- $encoded = Util\Util::encodeParameters($params);
221
- $absUrl = "{$absUrl}?{$encoded}";
222
  }
223
- } elseif ('post' === $method) {
224
- $opts[\CURLOPT_POST] = 1;
225
- $opts[\CURLOPT_POSTFIELDS] = $hasFile ? $params : Util\Util::encodeParameters($params);
226
- } elseif ('delete' === $method) {
227
- $opts[\CURLOPT_CUSTOMREQUEST] = 'DELETE';
228
- if (\count($params) > 0) {
229
- $encoded = Util\Util::encodeParameters($params);
230
- $absUrl = "{$absUrl}?{$encoded}";
231
  }
232
  } else {
233
- throw new Exception\UnexpectedValueException("Unrecognized method {$method}");
234
  }
235
 
236
- // It is only safe to retry network failures on POST requests if we
237
- // add an Idempotency-Key header
238
- if (('post' === $method) && (Stripe::$maxNetworkRetries > 0)) {
239
- if (!$this->hasHeader($headers, 'Idempotency-Key')) {
240
- $headers[] = 'Idempotency-Key: ' . $this->randomGenerator->uuid();
 
241
  }
242
- }
 
 
 
243
 
244
  // By default for large request body sizes (> 1024 bytes), cURL will
245
  // send a request without a body and with a `Expect: 100-continue`
@@ -253,299 +138,161 @@ class CurlClient implements ClientInterface
253
  // we'll error under that condition. To compensate for that problem
254
  // for the time being, override cURL's behavior by simply always
255
  // sending an empty `Expect:` header.
256
- $headers[] = 'Expect: ';
257
 
258
  $absUrl = Util\Util::utf8($absUrl);
259
- $opts[\CURLOPT_URL] = $absUrl;
260
- $opts[\CURLOPT_RETURNTRANSFER] = true;
261
- $opts[\CURLOPT_CONNECTTIMEOUT] = $this->connectTimeout;
262
- $opts[\CURLOPT_TIMEOUT] = $this->timeout;
263
- $opts[\CURLOPT_HTTPHEADER] = $headers;
264
- $opts[\CURLOPT_CAINFO] = Stripe::getCABundlePath();
265
- if (!Stripe::getVerifySslCerts()) {
266
- $opts[\CURLOPT_SSL_VERIFYPEER] = false;
267
- }
268
-
269
- if (!isset($opts[\CURLOPT_HTTP_VERSION]) && $this->getEnableHttp2()) {
270
- // For HTTPS requests, enable HTTP/2, if supported
271
- $opts[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2TLS;
272
  }
273
 
274
- // Stripe's API servers are only accessible over IPv4. Force IPv4 resolving to avoid
275
- // potential issues (cf. https://github.com/stripe/stripe-php/issues/1045).
276
- $opts[\CURLOPT_IPRESOLVE] = \CURL_IPRESOLVE_V4;
277
-
278
- list($rbody, $rcode, $rheaders) = $this->executeRequestWithRetries($opts, $absUrl);
279
-
280
- return [$rbody, $rcode, $rheaders];
281
- }
282
-
283
- /**
284
- * @param array $opts cURL options
285
- * @param string $absUrl
286
- */
287
- private function executeRequestWithRetries($opts, $absUrl)
288
- {
289
- $numRetries = 0;
290
-
291
- while (true) {
292
- $rcode = 0;
293
- $errno = 0;
294
- $message = null;
295
-
296
- // Create a callback to capture HTTP headers for the response
297
- $rheaders = new Util\CaseInsensitiveArray();
298
- $headerCallback = function ($curl, $header_line) use (&$rheaders) {
299
- // Ignore the HTTP request line (HTTP/1.1 200 OK)
300
- if (false === \strpos($header_line, ':')) {
301
- return \strlen($header_line);
302
- }
303
- list($key, $value) = \explode(':', \trim($header_line), 2);
304
- $rheaders[\trim($key)] = \trim($value);
305
-
306
- return \strlen($header_line);
307
- };
308
- $opts[\CURLOPT_HEADERFUNCTION] = $headerCallback;
309
-
310
- $this->resetCurlHandle();
311
- \curl_setopt_array($this->curlHandle, $opts);
312
- $rbody = \curl_exec($this->curlHandle);
313
-
314
- if (false === $rbody) {
315
- $errno = \curl_errno($this->curlHandle);
316
- $message = \curl_error($this->curlHandle);
317
- } else {
318
- $rcode = \curl_getinfo($this->curlHandle, \CURLINFO_HTTP_CODE);
319
  }
320
- if (!$this->getEnablePersistentConnections()) {
321
- $this->closeCurlHandle();
 
 
322
  }
 
 
 
323
 
324
- $shouldRetry = $this->shouldRetry($errno, $rcode, $rheaders, $numRetries);
 
325
 
326
- if (\is_callable($this->getRequestStatusCallback())) {
327
- \call_user_func_array(
328
- $this->getRequestStatusCallback(),
329
- [$rbody, $rcode, $rheaders, $errno, $message, $shouldRetry, $numRetries]
330
- );
331
- }
332
 
333
- if ($shouldRetry) {
334
- ++$numRetries;
335
- $sleepSeconds = $this->sleepTime($numRetries, $rheaders);
336
- \usleep((int) ($sleepSeconds * 1000000));
337
- } else {
338
- break;
339
- }
 
 
 
 
 
 
340
  }
341
 
342
- if (false === $rbody) {
343
- $this->handleCurlError($absUrl, $errno, $message, $numRetries);
 
 
 
344
  }
345
 
346
- return [$rbody, $rcode, $rheaders];
 
 
347
  }
348
 
349
  /**
350
- * @param string $url
351
- * @param int $errno
352
  * @param string $message
353
- * @param int $numRetries
354
- *
355
- * @throws Exception\ApiConnectionException
356
  */
357
- private function handleCurlError($url, $errno, $message, $numRetries)
358
  {
359
  switch ($errno) {
360
- case \CURLE_COULDNT_CONNECT:
361
- case \CURLE_COULDNT_RESOLVE_HOST:
362
- case \CURLE_OPERATION_TIMEOUTED:
363
- $msg = "Could not connect to Stripe ({$url}). Please check your "
364
- . 'internet connection and try again. If this problem persists, '
365
  . "you should check Stripe's service status at "
366
- . 'https://twitter.com/stripestatus, or';
367
-
368
  break;
369
-
370
- case \CURLE_SSL_CACERT:
371
- case \CURLE_SSL_PEER_CERTIFICATE:
372
  $msg = "Could not verify Stripe's SSL certificate. Please make sure "
373
- . 'that your network is not intercepting certificates. '
374
- . "(Try going to {$url} in your browser.) "
375
- . 'If this problem persists,';
376
-
377
  break;
378
-
379
  default:
380
- $msg = 'Unexpected error communicating with Stripe. '
381
- . 'If this problem persists,';
382
- }
383
- $msg .= ' let us know at support@stripe.com.';
384
-
385
- $msg .= "\n\n(Network error [errno {$errno}]: {$message})";
386
-
387
- if ($numRetries > 0) {
388
- $msg .= "\n\nRequest was retried {$numRetries} times.";
389
  }
 
390
 
391
- throw new Exception\ApiConnectionException($msg);
 
392
  }
393
 
394
- /**
395
- * Checks if an error is a problem that we should retry on. This includes both
396
- * socket errors that may represent an intermittent problem and some special
397
- * HTTP statuses.
398
- *
399
- * @param int $errno
400
- * @param int $rcode
401
- * @param array|\Stripe\Util\CaseInsensitiveArray $rheaders
402
- * @param int $numRetries
403
- *
404
- * @return bool
405
- */
406
- private function shouldRetry($errno, $rcode, $rheaders, $numRetries)
407
  {
408
- if ($numRetries >= Stripe::getMaxNetworkRetries()) {
409
- return false;
410
- }
411
-
412
- // Retry on timeout-related problems (either on open or read).
413
- if (\CURLE_OPERATION_TIMEOUTED === $errno) {
414
- return true;
415
- }
416
-
417
- // Destination refused the connection, the connection was reset, or a
418
- // variety of other connection failures. This could occur from a single
419
- // saturated server, so retry in case it's intermittent.
420
- if (\CURLE_COULDNT_CONNECT === $errno) {
421
- return true;
422
- }
423
-
424
- // The API may ask us not to retry (eg; if doing so would be a no-op)
425
- // or advise us to retry (eg; in cases of lock timeouts); we defer to that.
426
- if (isset($rheaders['stripe-should-retry'])) {
427
- if ('false' === $rheaders['stripe-should-retry']) {
428
- return false;
429
- }
430
- if ('true' === $rheaders['stripe-should-retry']) {
431
- return true;
432
- }
433
- }
434
-
435
- // 409 Conflict
436
- if (409 === $rcode) {
437
- return true;
438
- }
439
-
440
- // Retry on 500, 503, and other internal errors.
441
- //
442
- // Note that we expect the stripe-should-retry header to be false
443
- // in most cases when a 500 is returned, since our idempotency framework
444
- // would typically replay it anyway.
445
- if ($rcode >= 500) {
446
- return true;
447
- }
448
-
449
- return false;
450
  }
451
 
452
  /**
453
- * Provides the number of seconds to wait before retrying a request.
 
454
  *
455
- * @param int $numRetries
456
- * @param array|\Stripe\Util\CaseInsensitiveArray $rheaders
457
  *
458
- * @return int
459
- */
460
- private function sleepTime($numRetries, $rheaders)
461
- {
462
- // Apply exponential backoff with $initialNetworkRetryDelay on the
463
- // number of $numRetries so far as inputs. Do not allow the number to exceed
464
- // $maxNetworkRetryDelay.
465
- $sleepSeconds = \min(
466
- Stripe::getInitialNetworkRetryDelay() * 1.0 * 2 ** ($numRetries - 1),
467
- Stripe::getMaxNetworkRetryDelay()
468
- );
469
-
470
- // Apply some jitter by randomizing the value in the range of
471
- // ($sleepSeconds / 2) to ($sleepSeconds).
472
- $sleepSeconds *= 0.5 * (1 + $this->randomGenerator->randFloat());
473
-
474
- // But never sleep less than the base sleep seconds.
475
- $sleepSeconds = \max(Stripe::getInitialNetworkRetryDelay(), $sleepSeconds);
476
-
477
- // And never sleep less than the time the API asks us to wait, assuming it's a reasonable ask.
478
- $retryAfter = isset($rheaders['retry-after']) ? (float) ($rheaders['retry-after']) : 0.0;
479
- if (\floor($retryAfter) === $retryAfter && $retryAfter <= Stripe::getMaxRetryAfter()) {
480
- $sleepSeconds = \max($sleepSeconds, $retryAfter);
481
- }
482
-
483
- return $sleepSeconds;
484
- }
485
-
486
- /**
487
- * Initializes the curl handle. If already initialized, the handle is closed first.
488
- */
489
- private function initCurlHandle()
490
- {
491
- $this->closeCurlHandle();
492
- $this->curlHandle = \curl_init();
493
- }
494
-
495
- /**
496
- * Closes the curl handle if initialized. Do nothing if already closed.
497
- */
498
- private function closeCurlHandle()
499
- {
500
- if (null !== $this->curlHandle) {
501
- \curl_close($this->curlHandle);
502
- $this->curlHandle = null;
503
- }
504
- }
505
-
506
- /**
507
- * Resets the curl handle. If the handle is not already initialized, or if persistent
508
- * connections are disabled, the handle is reinitialized instead.
509
  */
510
- private function resetCurlHandle()
511
  {
512
- if (null !== $this->curlHandle && $this->getEnablePersistentConnections()) {
513
- \curl_reset($this->curlHandle);
514
- } else {
515
- $this->initCurlHandle();
516
  }
517
- }
518
 
519
- /**
520
- * Indicates whether it is safe to use HTTP/2 or not.
521
- *
522
- * @return bool
523
- */
524
- private function canSafelyUseHttp2()
525
- {
526
- // Versions of curl older than 7.60.0 don't respect GOAWAY frames
527
- // (cf. https://github.com/curl/curl/issues/2416), which Stripe use.
528
- $curlVersion = \curl_version()['version'];
529
 
530
- return \version_compare($curlVersion, '7.60.0') >= 0;
531
- }
 
 
 
 
 
532
 
533
- /**
534
- * Checks if a list of headers contains a specific header name.
535
- *
536
- * @param string[] $headers
537
- * @param string $name
538
- *
539
- * @return bool
540
- */
541
- private function hasHeader($headers, $name)
542
- {
543
- foreach ($headers as $header) {
544
- if (0 === \strncasecmp($header, "{$name}: ", \strlen($name) + 2)) {
545
- return true;
546
  }
547
  }
548
 
549
- return false;
550
  }
551
  }
2
 
3
  namespace Stripe\HttpClient;
4
 
 
5
  use Stripe\Stripe;
6
+ use Stripe\Error;
7
  use Stripe\Util;
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  class CurlClient implements ClientInterface
10
  {
11
+ private static $instance;
12
 
13
  public static function instance()
14
  {
15
+ if (!self::$instance) {
16
+ self::$instance = new self();
17
  }
18
+ return self::$instance;
 
19
  }
20
 
21
  protected $defaultOptions;
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  /**
24
  * CurlClient constructor.
25
  *
31
  * Note that request() will silently ignore a non-callable, non-array $defaultOptions, and will
32
  * throw an exception if $defaultOptions returns a non-array value.
33
  *
34
+ * @param array|callable|null $defaultOptions
 
35
  */
36
+ public function __construct($defaultOptions = null)
37
  {
38
  $this->defaultOptions = $defaultOptions;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
 
41
  public function getDefaultOptions()
43
  return $this->defaultOptions;
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  // USER DEFINED TIMEOUTS
47
 
48
  const DEFAULT_TIMEOUT = 80;
53
 
54
  public function setTimeout($seconds)
55
  {
56
+ $this->timeout = (int) max($seconds, 0);
 
57
  return $this;
58
  }
59
 
60
  public function setConnectTimeout($seconds)
61
  {
62
+ $this->connectTimeout = (int) max($seconds, 0);
 
63
  return $this;
64
  }
65
 
77
 
78
  public function request($method, $absUrl, $headers, $params, $hasFile)
79
  {
80
+ $curl = curl_init();
81
+ $method = strtolower($method);
82
+
83
+ $opts = array();
84
+ if (is_callable($this->defaultOptions)) { // call defaultOptions callback, set options to return value
85
+ $opts = call_user_func_array($this->defaultOptions, func_get_args());
86
+ if (!is_array($opts)) {
87
+ throw new Error\Api("Non-array value returned by defaultOptions CurlClient callback");
88
  }
89
+ } elseif (is_array($this->defaultOptions)) { // set default curlopts from array
90
  $opts = $this->defaultOptions;
91
  }
92
 
93
+ if ($method == 'get') {
 
 
94
  if ($hasFile) {
95
+ throw new Error\Api(
96
+ "Issuing a GET request with a file parameter"
97
  );
98
  }
99
+ $opts[CURLOPT_HTTPGET] = 1;
100
+ if (count($params) > 0) {
101
+ $encoded = self::encode($params);
102
+ $absUrl = "$absUrl?$encoded";
103
  }
104
+ } elseif ($method == 'post') {
105
+ $opts[CURLOPT_POST] = 1;
106
+ $opts[CURLOPT_POSTFIELDS] = $hasFile ? $params : self::encode($params);
107
+ } elseif ($method == 'delete') {
108
+ $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
109
+ if (count($params) > 0) {
110
+ $encoded = self::encode($params);
111
+ $absUrl = "$absUrl?$encoded";
112
  }
113
  } else {
114
+ throw new Error\Api("Unrecognized method $method");
115
  }
116
 
117
+ // Create a callback to capture HTTP headers for the response
118
+ $rheaders = array();
119
+ $headerCallback = function ($curl, $header_line) use (&$rheaders) {
120
+ // Ignore the HTTP request line (HTTP/1.1 200 OK)
121
+ if (strpos($header_line, ":") === false) {
122
+ return strlen($header_line);
123
  }
124
+ list($key, $value) = explode(":", trim($header_line), 2);
125
+ $rheaders[trim($key)] = trim($value);
126
+ return strlen($header_line);
127
+ };
128
 
129
  // By default for large request body sizes (> 1024 bytes), cURL will
130
  // send a request without a body and with a `Expect: 100-continue`
138
  // we'll error under that condition. To compensate for that problem
139
  // for the time being, override cURL's behavior by simply always
140
  // sending an empty `Expect:` header.
141
+ array_push($headers, 'Expect: ');
142
 
143
  $absUrl = Util\Util::utf8($absUrl);
144
+ $opts[CURLOPT_URL] = $absUrl;
145
+ $opts[CURLOPT_RETURNTRANSFER] = true;
146
+ $opts[CURLOPT_CONNECTTIMEOUT] = $this->connectTimeout;
147
+ $opts[CURLOPT_TIMEOUT] = $this->timeout;
148
+ $opts[CURLOPT_HEADERFUNCTION] = $headerCallback;
149
+ $opts[CURLOPT_HTTPHEADER] = $headers;
150
+ if (!Stripe::$verifySslCerts) {
151
+ $opts[CURLOPT_SSL_VERIFYPEER] = false;
 
 
 
 
 
152
  }
153
 
154
+ // @codingStandardsIgnoreStart
155
+ // PSR2 requires all constants be upper case. Sadly, the CURL_SSLVERSION
156
+ // constants to not abide by those rules.
157
+ //
158
+ // Explicitly set a TLS version for cURL to use now that we're starting
159
+ // to block 1.0 and 1.1 requests.
160
+ //
161
+ // If users are on OpenSSL >= 1.0.1, we know that they support TLS 1.2,
162
+ // so set that explicitly because on some older Linux distros, clients may
163
+ // default to TLS 1.0 even when they have TLS 1.2 available.
164
+ //
165
+ // For users on much older versions of OpenSSL, set a valid range of
166
+ // TLS 1.0 to 1.2 (CURL_SSLVERSION_TLSv1). Note that this may result in
167
+ // their requests being blocked unless they're specially flagged into
168
+ // being able to use an old TLS version.
169
+ //
170
+ // Note: The int on the right is pulled from the source of OpenSSL 1.0.1a.
171
+ if (OPENSSL_VERSION_NUMBER >= 0x1000100f) {
172
+ if (!defined('CURL_SSLVERSION_TLSv1_2')) {
173
+ // Note the value 6 comes from its position in the enum that
174
+ // defines it in cURL's source code.
175
+ define('CURL_SSLVERSION_TLSv1_2', 6); // constant not defined in PHP < 5.5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  }
177
+ $opts[CURLOPT_SSLVERSION] = CURL_SSLVERSION_TLSv1_2;
178
+ } else {
179
+ if (!defined('CURL_SSLVERSION_TLSv1')) {
180
+ define('CURL_SSLVERSION_TLSv1', 1); // constant not defined in PHP < 5.5
181
  }
182
+ $opts[CURLOPT_SSLVERSION] = CURL_SSLVERSION_TLSv1;
183
+ }
184
+ // @codingStandardsIgnoreEnd
185
 
186
+ curl_setopt_array($curl, $opts);
187
+ $rbody = curl_exec($curl);
188
 
189
+ if (!defined('CURLE_SSL_CACERT_BADFILE')) {
190
+ define('CURLE_SSL_CACERT_BADFILE', 77); // constant not defined in PHP
191
+ }
 
 
 
192
 
193
+ $errno = curl_errno($curl);
194
+ if ($errno == CURLE_SSL_CACERT ||
195
+ $errno == CURLE_SSL_PEER_CERTIFICATE ||
196
+ $errno == CURLE_SSL_CACERT_BADFILE
197
+ ) {
198
+ array_push(
199
+ $headers,
200
+ 'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}'
201
+ );
202
+ $cert = self::caBundle();
203
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
204
+ curl_setopt($curl, CURLOPT_CAINFO, $cert);
205
+ $rbody = curl_exec($curl);
206
  }
207
 
208
+ if ($rbody === false) {
209
+ $errno = curl_errno($curl);
210
+ $message = curl_error($curl);
211
+ curl_close($curl);
212
+ $this->handleCurlError($absUrl, $errno, $message);
213
  }
214
 
215
+ $rcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
216
+ curl_close($curl);
217
+ return array($rbody, $rcode, $rheaders);
218
  }
219
 
220
  /**
221
+ * @param number $errno
 
222
  * @param string $message
223
+ * @throws Error\ApiConnection
 
 
224
  */
225
+ private function handleCurlError($url, $errno, $message)
226
  {
227
  switch ($errno) {
228
+ case CURLE_COULDNT_CONNECT:
229
+ case CURLE_COULDNT_RESOLVE_HOST:
230
+ case CURLE_OPERATION_TIMEOUTED:
231
+ $msg = "Could not connect to Stripe ($url). Please check your "
232
+ . "internet connection and try again. If this problem persists, "
233
  . "you should check Stripe's service status at "
234
+ . "https://twitter.com/stripestatus, or";
 
235
  break;
236
+ case CURLE_SSL_CACERT:
237
+ case CURLE_SSL_PEER_CERTIFICATE:
 
238
  $msg = "Could not verify Stripe's SSL certificate. Please make sure "
239
+ . "that your network is not intercepting certificates. "
240
+ . "(Try going to $url in your browser.) "
241
+ . "If this problem persists,";
 
242
  break;
 
243
  default:
244
+ $msg = "Unexpected error communicating with Stripe. "
245
+ . "If this problem persists,";
 
 
 
 
 
 
 
246
  }
247
+ $msg .= " let us know at support@stripe.com.";
248
 
249
+ $msg .= "\n\n(Network error [errno $errno]: $message)";
250
+ throw new Error\ApiConnection($msg);
251
  }
252
 
253
+ private static function caBundle()
 
 
 
 
 
 
 
 
 
 
 
 
254
  {
255
+ return dirname(__FILE__) . '/../../data/ca-certificates.crt';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  }
257
 
258
  /**
259
+ * @param array $arr An map of param keys to values.
260
+ * @param string|null $prefix
261
  *
262
+ * Only public for testability, should not be called outside of CurlClient
 
263
  *
264
+ * @return string A querystring, essentially.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  */
266
+ public static function encode($arr, $prefix = null)
267
  {
268
+ if (!is_array($arr)) {
269
+ return $arr;
 
 
270
  }
 
271
 
272
+ $r = array();
273
+ foreach ($arr as $k => $v) {
274
+ if (is_null($v)) {
275
+ continue;
276
+ }
 
 
 
 
 
277
 
278
+ if ($prefix) {
279
+ if ($k !== null && (!is_int($k) || is_array($v))) {
280
+ $k = $prefix."[".$k."]";
281
+ } else {
282
+ $k = $prefix."[]";
283
+ }
284
+ }
285
 
286
+ if (is_array($v)) {
287
+ $enc = self::encode($v, $k);
288
+ if ($enc) {
289
+ $r[] = $enc;
290
+ }
291
+ } else {
292
+ $r[] = urlencode($k)."=".urlencode($v);
 
 
 
 
 
 
293
  }
294
  }
295
 
296
+ return implode("&", $r);
297
  }
298
  }
lib/stripe/lib/Invoice.php CHANGED
@@ -1,261 +1,92 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Invoices are statements of amounts owed by a customer, and are either generated
9
- * one-off, or generated periodically from a subscription.
10
- *
11
- * They contain <a href="https://stripe.com/docs/api#invoiceitems">invoice
12
- * items</a>, and proration adjustments that may be caused by subscription
13
- * upgrades/downgrades (if necessary).
14
- *
15
- * If your invoice is configured to be billed through automatic charges, Stripe
16
- * automatically finalizes your invoice and attempts payment. Note that finalizing
17
- * the invoice, <a
18
- * href="https://stripe.com/docs/billing/invoices/workflow/#auto_advance">when
19
- * automatic</a>, does not happen immediately as the invoice is created. Stripe
20
- * waits until one hour after the last webhook was successfully sent (or the last
21
- * webhook timed out after failing). If you (and the platforms you may have
22
- * connected to) have no webhooks configured, Stripe waits one hour after creation
23
- * to finalize the invoice.
24
- *
25
- * If your invoice is configured to be billed by sending an email, then based on
26
- * your <a href="https://dashboard.stripe.com/account/billing/automatic'">email
27
- * settings</a>, Stripe will email the invoice to your customer and await payment.
28
- * These emails can contain a link to a hosted page to pay the invoice.
29
- *
30
- * Stripe applies any customer credit on the account before determining the amount
31
- * due for the invoice (i.e., the amount that will be actually charged). If the
32
- * amount due for the invoice is less than Stripe's <a
33
- * href="/docs/currencies#minimum-and-maximum-charge-amounts">minimum allowed
34
- * charge per currency</a>, the invoice is automatically marked paid, and we add
35
- * the amount due to the customer's credit balance which is applied to the next
36
- * invoice.
37
- *
38
- * More details on the customer's credit balance are <a
39
- * href="https://stripe.com/docs/billing/customer/balance">here</a>.
40
- *
41
- * Related guide: <a href="https://stripe.com/docs/billing/invoices/sending">Send
42
- * Invoices to Customers</a>.
43
  *
44
- * @property string $id Unique identifier for the object.
45
- * @property string $object String representing the object's type. Objects of the same type share the same value.
46
- * @property null|string $account_country The country of the business associated with this invoice, most often the business creating the invoice.
47
- * @property null|string $account_name The public name of the business associated with this invoice, most often the business creating the invoice.
48
- * @property null|(string|\Stripe\TaxId)[] $account_tax_ids The account tax IDs associated with the invoice. Only editable when the invoice is a draft.
49
- * @property int $amount_due Final amount due at this time for this invoice. If the invoice's total is smaller than the minimum charge amount, for example, or if there is account credit that can be applied to the invoice, the <code>amount_due</code> may be 0. If there is a positive <code>starting_balance</code> for the invoice (the customer owes money), the <code>amount_due</code> will also take that into account. The charge that gets generated for the invoice will be for the amount specified in <code>amount_due</code>.
50
- * @property int $amount_paid The amount, in %s, that was paid.
51
- * @property int $amount_remaining The amount remaining, in %s, that is due.
52
- * @property null|int $application_fee_amount The fee in %s that will be applied to the invoice and transferred to the application owner's Stripe account when the invoice is paid.
53
- * @property int $attempt_count Number of payment attempts made for this invoice, from the perspective of the payment retry schedule. Any payment attempt counts as the first attempt, and subsequently only automatic retries increment the attempt count. In other words, manual payment attempts after the first attempt do not affect the retry schedule.
54
- * @property bool $attempted Whether an attempt has been made to pay the invoice. An invoice is not attempted until 1 hour after the <code>invoice.created</code> webhook, for example, so you might not want to display that invoice as unpaid to your users.
55
- * @property bool $auto_advance Controls whether Stripe will perform <a href="https://stripe.com/docs/billing/invoices/workflow/#auto_advance">automatic collection</a> of the invoice. When <code>false</code>, the invoice's state will not automatically advance without an explicit action.
56
- * @property null|string $billing_reason Indicates the reason why the invoice was created. <code>subscription_cycle</code> indicates an invoice created by a subscription advancing into a new period. <code>subscription_create</code> indicates an invoice created due to creating a subscription. <code>subscription_update</code> indicates an invoice created due to updating a subscription. <code>subscription</code> is set for all old invoices to indicate either a change to a subscription or a period advancement. <code>manual</code> is set for all invoices unrelated to a subscription (for example: created via the invoice editor). The <code>upcoming</code> value is reserved for simulated invoices per the upcoming invoice endpoint. <code>subscription_threshold</code> indicates an invoice created due to a billing threshold being reached.
57
- * @property null|string|\Stripe\Charge $charge ID of the latest charge generated for this invoice, if any.
58
- * @property null|string $collection_method Either <code>charge_automatically</code>, or <code>send_invoice</code>. When charging automatically, Stripe will attempt to pay this invoice using the default source attached to the customer. When sending an invoice, Stripe will email this invoice to the customer with payment instructions.
59
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
60
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
61
- * @property null|\Stripe\StripeObject[] $custom_fields Custom fields displayed on the invoice.
62
- * @property null|string|\Stripe\Customer $customer The ID of the customer who will be billed.
63
- * @property null|\Stripe\StripeObject $customer_address The customer's address. Until the invoice is finalized, this field will equal <code>customer.address</code>. Once the invoice is finalized, this field will no longer be updated.
64
- * @property null|string $customer_email The customer's email. Until the invoice is finalized, this field will equal <code>customer.email</code>. Once the invoice is finalized, this field will no longer be updated.
65
- * @property null|string $customer_name The customer's name. Until the invoice is finalized, this field will equal <code>customer.name</code>. Once the invoice is finalized, this field will no longer be updated.
66
- * @property null|string $customer_phone The customer's phone number. Until the invoice is finalized, this field will equal <code>customer.phone</code>. Once the invoice is finalized, this field will no longer be updated.
67
- * @property null|\Stripe\StripeObject $customer_shipping The customer's shipping information. Until the invoice is finalized, this field will equal <code>customer.shipping</code>. Once the invoice is finalized, this field will no longer be updated.
68
- * @property null|string $customer_tax_exempt The customer's tax exempt status. Until the invoice is finalized, this field will equal <code>customer.tax_exempt</code>. Once the invoice is finalized, this field will no longer be updated.
69
- * @property null|\Stripe\StripeObject[] $customer_tax_ids The customer's tax IDs. Until the invoice is finalized, this field will contain the same tax IDs as <code>customer.tax_ids</code>. Once the invoice is finalized, this field will no longer be updated.
70
- * @property null|string|\Stripe\PaymentMethod $default_payment_method ID of the default payment method for the invoice. It must belong to the customer associated with the invoice. If not set, defaults to the subscription's default payment method, if any, or to the default payment method in the customer's invoice settings.
71
- * @property null|string|\Stripe\Account|\Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source $default_source ID of the default payment source for the invoice. It must belong to the customer associated with the invoice and be in a chargeable state. If not set, defaults to the subscription's default source, if any, or to the customer's default source.
72
- * @property \Stripe\TaxRate[] $default_tax_rates The tax rates applied to this invoice, if any.
73
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users. Referenced as 'memo' in the Dashboard.
74
- * @property null|\Stripe\Discount $discount Describes the current discount applied to this invoice, if there is one. Not populated if there are multiple discounts.
75
- * @property null|(string|\Stripe\Discount)[] $discounts The discounts applied to the invoice. Line item discounts are applied before invoice discounts. Use <code>expand[]=discounts</code> to expand each discount.
76
- * @property null|int $due_date The date on which payment for this invoice is due. This value will be <code>null</code> for invoices where <code>collection_method=charge_automatically</code>.
77
- * @property null|int $ending_balance Ending customer balance after the invoice is finalized. Invoices are finalized approximately an hour after successful webhook delivery or when payment collection is attempted for the invoice. If the invoice has not been finalized yet, this will be null.
78
- * @property null|string $footer Footer displayed on the invoice.
79
- * @property null|string $hosted_invoice_url The URL for the hosted invoice page, which allows customers to view and pay an invoice. If the invoice has not been finalized yet, this will be null.
80
- * @property null|string $invoice_pdf The link to download the PDF for the invoice. If the invoice has not been finalized yet, this will be null.
81
- * @property null|\Stripe\ErrorObject $last_finalization_error The error encountered during the previous attempt to finalize the invoice. This field is cleared when the invoice is successfully finalized.
82
- * @property \Stripe\Collection $lines The individual line items that make up the invoice. <code>lines</code> is sorted as follows: invoice items in reverse chronological order, followed by the subscription, if any.
83
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
84
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
85
- * @property null|int $next_payment_attempt The time at which payment will next be attempted. This value will be <code>null</code> for invoices where <code>collection_method=send_invoice</code>.
86
- * @property null|string $number A unique, identifying string that appears on emails sent to the customer for this invoice. This starts with the customer's unique invoice_prefix if it is specified.
87
- * @property null|string|\Stripe\Account $on_behalf_of The account (if any) for which the funds of the invoice payment are intended. If set, the invoice will be presented with the branding and support information of the specified account. See the <a href="https://stripe.com/docs/billing/invoices/connect">Invoices with Connect</a> documentation for details.
88
- * @property bool $paid Whether payment was successfully collected for this invoice. An invoice can be paid (most commonly) with a charge or with credit from the customer's account balance.
89
- * @property null|string|\Stripe\PaymentIntent $payment_intent The PaymentIntent associated with this invoice. The PaymentIntent is generated when the invoice is finalized, and can then be used to pay the invoice. Note that voiding an invoice will cancel the PaymentIntent.
90
- * @property \Stripe\StripeObject $payment_settings
91
- * @property int $period_end End of the usage period during which invoice items were added to this invoice.
92
- * @property int $period_start Start of the usage period during which invoice items were added to this invoice.
93
- * @property int $post_payment_credit_notes_amount Total amount of all post-payment credit notes issued for this invoice.
94
- * @property int $pre_payment_credit_notes_amount Total amount of all pre-payment credit notes issued for this invoice.
95
- * @property null|string $receipt_number This is the transaction number that appears on email receipts sent for this invoice.
96
- * @property int $starting_balance Starting customer balance before the invoice is finalized. If the invoice has not been finalized yet, this will be the current customer balance.
97
- * @property null|string $statement_descriptor Extra information about an invoice for the customer's credit card statement.
98
- * @property null|string $status The status of the invoice, one of <code>draft</code>, <code>open</code>, <code>paid</code>, <code>uncollectible</code>, or <code>void</code>. <a href="https://stripe.com/docs/billing/invoices/workflow#workflow-overview">Learn more</a>
99
- * @property \Stripe\StripeObject $status_transitions
100
- * @property null|string|\Stripe\Subscription $subscription The subscription that this invoice was prepared for, if any.
101
- * @property int $subscription_proration_date Only set for upcoming invoices that preview prorations. The time used to calculate prorations.
102
- * @property int $subtotal Total of all subscriptions, invoice items, and prorations on the invoice before any invoice level discount or tax is applied. Item discounts are already incorporated
103
- * @property null|int $tax The amount of tax on this invoice. This is the sum of all the tax amounts on this invoice.
104
- * @property \Stripe\StripeObject $threshold_reason
105
- * @property int $total Total after discounts and taxes.
106
- * @property null|\Stripe\StripeObject[] $total_discount_amounts The aggregate amounts calculated per discount across all line items.
107
- * @property \Stripe\StripeObject[] $total_tax_amounts The aggregate amounts calculated per tax rate for all line items.
108
- * @property null|int $webhooks_delivered_at Invoices are automatically paid or sent 1 hour after webhooks are delivered, or until all webhook delivery attempts have <a href="https://stripe.com/docs/billing/webhooks#understand">been exhausted</a>. This field tracks the time when webhooks for this invoice were successfully delivered. If the invoice had no webhooks to deliver, this will be set while the invoice is being created.
109
  */
110
  class Invoice extends ApiResource
111
  {
112
- const OBJECT_NAME = 'invoice';
113
-
114
- use ApiOperations\All;
115
- use ApiOperations\Create;
116
- use ApiOperations\Delete;
117
- use ApiOperations\Retrieve;
118
- use ApiOperations\Update;
119
-
120
- const BILLING_CHARGE_AUTOMATICALLY = 'charge_automatically';
121
- const BILLING_SEND_INVOICE = 'send_invoice';
122
-
123
- const BILLING_REASON_MANUAL = 'manual';
124
- const BILLING_REASON_SUBSCRIPTION = 'subscription';
125
- const BILLING_REASON_SUBSCRIPTION_CREATE = 'subscription_create';
126
- const BILLING_REASON_SUBSCRIPTION_CYCLE = 'subscription_cycle';
127
- const BILLING_REASON_SUBSCRIPTION_THRESHOLD = 'subscription_threshold';
128
- const BILLING_REASON_SUBSCRIPTION_UPDATE = 'subscription_update';
129
- const BILLING_REASON_UPCOMING = 'upcoming';
130
-
131
- const COLLECTION_METHOD_CHARGE_AUTOMATICALLY = 'charge_automatically';
132
- const COLLECTION_METHOD_SEND_INVOICE = 'send_invoice';
133
-
134
- const STATUS_DELETED = 'deleted';
135
- const STATUS_DRAFT = 'draft';
136
- const STATUS_OPEN = 'open';
137
- const STATUS_PAID = 'paid';
138
- const STATUS_UNCOLLECTIBLE = 'uncollectible';
139
- const STATUS_VOID = 'void';
140
-
141
- use ApiOperations\NestedResource;
142
-
143
- const PATH_LINES = '/lines';
144
-
145
  /**
146
- * @param null|array $params
147
- * @param null|array|string $opts
148
  *
149
- * @throws \Stripe\Exception\ApiErrorException if the request fails
150
- *
151
- * @return \Stripe\Invoice the upcoming invoice
152
  */
153
- public static function upcoming($params = null, $opts = null)
154
  {
155
- $url = static::classUrl() . '/upcoming';
156
- list($response, $opts) = static::_staticRequest('get', $url, $params, $opts);
157
- $obj = Util\Util::convertToStripeObject($response->json, $opts);
158
- $obj->setLastResponse($response);
159
-
160
- return $obj;
161
  }
162
 
163
  /**
164
- * @param string $id the ID of the invoice on which to retrieve the lines
165
- * @param null|array $params
166
- * @param null|array|string $opts
167
  *
168
- * @throws StripeExceptionApiErrorException if the request fails
169
- *
170
- * @return \Stripe\Collection the list of lines (InvoiceLineItem)
171
  */
172
- public static function allLines($id, $params = null, $opts = null)
173
  {
174
- return self::_allNestedResources($id, static::PATH_LINES, $params, $opts);
175
  }
176
 
177
  /**
178
- * @param null|array $params
179
- * @param null|array|string $opts
180
- *
181
- * @throws \Stripe\Exception\ApiErrorException if the request fails
182
  *
183
- * @return Invoice the finalized invoice
184
  */
185
- public function finalizeInvoice($params = null, $opts = null)
186
  {
187
- $url = $this->instanceUrl() . '/finalize';
188
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
189
- $this->refreshFrom($response, $opts);
190
-
191
- return $this;
192
  }
193
 
194
  /**
195
- * @param null|array $params
196
- * @param null|array|string $opts
 
197
  *
198
- * @throws \Stripe\Exception\ApiErrorException if the request fails
199
- *
200
- * @return Invoice the uncollectible invoice
201
  */
202
- public function markUncollectible($params = null, $opts = null)
203
  {
204
- $url = $this->instanceUrl() . '/mark_uncollectible';
205
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
206
- $this->refreshFrom($response, $opts);
207
-
208
- return $this;
209
  }
210
 
211
  /**
212
- * @param null|array $params
213
- * @param null|array|string $opts
214
- *
215
- * @throws \Stripe\Exception\ApiErrorException if the request fails
216
  *
217
- * @return Invoice the paid invoice
218
  */
219
- public function pay($params = null, $opts = null)
220
  {
221
- $url = $this->instanceUrl() . '/pay';
222
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
223
- $this->refreshFrom($response, $opts);
224
-
225
- return $this;
226
  }
227
 
228
  /**
229
- * @param null|array $params
230
- * @param null|array|string $opts
231
- *
232
- * @throws \Stripe\Exception\ApiErrorException if the request fails
233
  *
234
- * @return Invoice the sent invoice
235
  */
236
- public function sendInvoice($params = null, $opts = null)
237
  {
238
- $url = $this->instanceUrl() . '/send';
239
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
240
- $this->refreshFrom($response, $opts);
241
-
242
- return $this;
243
  }
244
 
245
  /**
246
- * @param null|array $params
247
- * @param null|array|string $opts
248
- *
249
- * @throws \Stripe\Exception\ApiErrorException if the request fails
250
- *
251
- * @return Invoice the voided invoice
252
  */
253
- public function voidInvoice($params = null, $opts = null)
254
  {
255
- $url = $this->instanceUrl() . '/void';
256
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
257
  $this->refreshFrom($response, $opts);
258
-
259
  return $this;
260
  }
261
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Invoice
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Invoice extends ApiResource
11
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  /**
13
+ * @param array|null $params
14
+ * @param array|string|null $opts
15
  *
16
+ * @return Invoice The created invoice.
 
 
17
  */
18
+ public static function create($params = null, $opts = null)
19
  {
20
+ return self::_create($params, $opts);
 
 
 
 
 
21
  }
22
 
23
  /**
24
+ * @param string $id The ID of the invoice to retrieve.
25
+ * @param array|string|null $opts
 
26
  *
27
+ * @return Invoice
 
 
28
  */
29
+ public static function retrieve($id, $opts = null)
30
  {
31
+ return self::_retrieve($id, $opts);
32
  }
33
 
34
  /**
35
+ * @param array|null $params
36
+ * @param array|string|null $opts
 
 
37
  *
38
+ * @return Collection of Invoices
39
  */
40
+ public static function all($params = null, $opts = null)
41
  {
42
+ return self::_all($params, $opts);
 
 
 
 
43
  }
44
 
45
  /**
46
+ * @param string $id The ID of the invoice to update.
47
+ * @param array|null $params
48
+ * @param array|string|null $options
49
  *
50
+ * @return Invoice The updated invoice.
 
 
51
  */
52
+ public static function update($id, $params = null, $options = null)
53
  {
54
+ return self::_update($id, $params, $options);
 
 
 
 
55
  }
56
 
57
  /**
58
+ * @param array|null $params
59
+ * @param array|string|null $opts
 
 
60
  *
61
+ * @return Invoice The upcoming invoice.
62
  */
63
+ public static function upcoming($params = null, $opts = null)
64
  {
65
+ $url = static::classUrl() . '/upcoming';
66
+ list($response, $opts) = static::_staticRequest('get', $url, $params, $opts);
67
+ $obj = Util\Util::convertToStripeObject($response->json, $opts);
68
+ $obj->setLastResponse($response);
69
+ return $obj;
70
  }
71
 
72
  /**
73
+ * @param array|string|null $opts
 
 
 
74
  *
75
+ * @return Invoice The saved invoice.
76
  */
77
+ public function save($opts = null)
78
  {
79
+ return $this->_save($opts);
 
 
 
 
80
  }
81
 
82
  /**
83
+ * @return Invoice The paid invoice.
 
 
 
 
 
84
  */
85
+ public function pay($opts = null)
86
  {
87
+ $url = $this->instanceUrl() . '/pay';
88
+ list($response, $opts) = $this->_request('post', $url, null, $opts);
89
  $this->refreshFrom($response, $opts);
 
90
  return $this;
91
  }
92
  }
lib/stripe/lib/InvoiceItem.php CHANGED
@@ -1,49 +1,77 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Sometimes you want to add a charge or credit to a customer, but actually charge
9
- * or credit the customer's card only at the end of a regular billing cycle. This
10
- * is useful for combining several charges (to minimize per-transaction fees), or
11
- * for having Stripe tabulate your usage-based billing totals.
12
- *
13
- * Related guide: <a
14
- * href="https://stripe.com/docs/billing/invoices/subscription#adding-upcoming-invoice-items">Subscription
15
- * Invoices</a>.
16
  *
17
- * @property string $id Unique identifier for the object.
18
- * @property string $object String representing the object's type. Objects of the same type share the same value.
19
- * @property int $amount Amount (in the <code>currency</code> specified) of the invoice item. This should always be equal to <code>unit_amount * quantity</code>.
20
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
21
- * @property string|\Stripe\Customer $customer The ID of the customer who will be billed when this invoice item is billed.
22
- * @property int $date Time at which the object was created. Measured in seconds since the Unix epoch.
23
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
24
- * @property bool $discountable If true, discounts will apply to this invoice item. Always false for prorations.
25
- * @property null|(string|\Stripe\Discount)[] $discounts The discounts which apply to the invoice item. Item discounts are applied before invoice discounts. Use <code>expand[]=discounts</code> to expand each discount.
26
- * @property null|string|\Stripe\Invoice $invoice The ID of the invoice this invoice item belongs to.
27
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
28
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
29
- * @property \Stripe\StripeObject $period
30
- * @property null|\Stripe\Plan $plan If the invoice item is a proration, the plan of the subscription that the proration was computed for.
31
- * @property null|\Stripe\Price $price The price of the invoice item.
32
- * @property bool $proration Whether the invoice item was created automatically as a proration adjustment when the customer switched plans.
33
- * @property int $quantity Quantity of units for the invoice item. If the invoice item is a proration, the quantity of the subscription that the proration was computed for.
34
- * @property null|string|\Stripe\Subscription $subscription The subscription that this invoice item has been created for, if any.
35
- * @property string $subscription_item The subscription item that this invoice item has been created for, if any.
36
- * @property null|\Stripe\TaxRate[] $tax_rates The tax rates which apply to the invoice item. When set, the <code>default_tax_rates</code> on the invoice do not apply to this invoice item.
37
- * @property null|int $unit_amount Unit amount (in the <code>currency</code> specified) of the invoice item.
38
- * @property null|string $unit_amount_decimal Same as <code>unit_amount</code>, but contains a decimal value with at most 12 decimal places.
39
  */
40
  class InvoiceItem extends ApiResource
41
  {
42
- const OBJECT_NAME = 'invoiceitem';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
- use ApiOperations\All;
45
- use ApiOperations\Create;
46
- use ApiOperations\Delete;
47
- use ApiOperations\Retrieve;
48
- use ApiOperations\Update;
 
 
 
 
 
49
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class InvoiceItem
 
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class InvoiceItem extends ApiResource
11
  {
12
+ /**
13
+ * @param string $id The ID of the invoice item to retrieve.
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return InvoiceItem
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
+
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return Collection of InvoiceItems
28
+ */
29
+ public static function all($params = null, $opts = null)
30
+ {
31
+ return self::_all($params, $opts);
32
+ }
33
+
34
+ /**
35
+ * @param array|null $params
36
+ * @param array|string|null $opts
37
+ *
38
+ * @return InvoiceItem The created invoice item.
39
+ */
40
+ public static function create($params = null, $opts = null)
41
+ {
42
+ return self::_create($params, $opts);
43
+ }
44
+
45
+ /**
46
+ * @param string $id The ID of the invoice item to update.
47
+ * @param array|null $params
48
+ * @param array|string|null $options
49
+ *
50
+ * @return InvoiceItem The updated invoice item.
51
+ */
52
+ public static function update($id, $params = null, $options = null)
53
+ {
54
+ return self::_update($id, $params, $options);
55
+ }
56
+
57
+ /**
58
+ * @param array|string|null $opts
59
+ *
60
+ * @return InvoiceItem The saved invoice item.
61
+ */
62
+ public function save($opts = null)
63
+ {
64
+ return $this->_save($opts);
65
+ }
66
 
67
+ /**
68
+ * @param array|null $params
69
+ * @param array|string|null $opts
70
+ *
71
+ * @return InvoiceItem The deleted invoice item.
72
+ */
73
+ public function delete($params = null, $opts = null)
74
+ {
75
+ return $this->_delete($params, $opts);
76
+ }
77
  }
lib/stripe/lib/InvoiceLineItem.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * @property string $id Unique identifier for the object.
9
- * @property string $object String representing the object's type. Objects of the same type share the same value.
10
- * @property int $amount The amount, in %s.
11
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
12
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
13
- * @property null|\Stripe\StripeObject[] $discount_amounts The amount of discount calculated per discount for this line item.
14
- * @property bool $discountable If true, discounts will apply to this line item. Always false for prorations.
15
- * @property null|(string|\Stripe\Discount)[] $discounts The discounts applied to the invoice line item. Line item discounts are applied before invoice discounts. Use <code>expand[]=discounts</code> to expand each discount.
16
- * @property string $invoice_item The ID of the <a href="https://stripe.com/docs/api/invoiceitems">invoice item</a> associated with this line item if any.
17
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
18
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Note that for line items with <code>type=subscription</code> this will reflect the metadata of the subscription that caused the line item to be created.
19
- * @property \Stripe\StripeObject $period
20
- * @property null|\Stripe\Plan $plan The plan of the subscription, if the line item is a subscription or a proration.
21
- * @property null|\Stripe\Price $price The price of the line item.
22
- * @property bool $proration Whether this is a proration.
23
- * @property null|int $quantity The quantity of the subscription, if the line item is a subscription or a proration.
24
- * @property null|string $subscription The subscription that the invoice item pertains to, if any.
25
- * @property string $subscription_item The subscription item that generated this invoice item. Left empty if the line item is not an explicit result of a subscription.
26
- * @property \Stripe\StripeObject[] $tax_amounts The amount of tax calculated per tax rate for this line item
27
- * @property \Stripe\TaxRate[] $tax_rates The tax rates which apply to the line item.
28
- * @property string $type A string identifying the type of the source of this line item, either an <code>invoiceitem</code> or a <code>subscription</code>.
29
- */
30
- class InvoiceLineItem extends ApiResource
31
- {
32
- const OBJECT_NAME = 'line_item';
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Issuing/Authorization.php DELETED
@@ -1,81 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Issuing;
6
-
7
- /**
8
- * When an <a href="https://stripe.com/docs/issuing">issued card</a> is used to
9
- * make a purchase, an Issuing <code>Authorization</code> object is created. <a
10
- * href="https://stripe.com/docs/issuing/purchases/authorizations">Authorizations</a>
11
- * must be approved for the purchase to be completed successfully.
12
- *
13
- * Related guide: <a
14
- * href="https://stripe.com/docs/issuing/purchases/authorizations">Issued Card
15
- * Authorizations</a>.
16
- *
17
- * @property string $id Unique identifier for the object.
18
- * @property string $object String representing the object's type. Objects of the same type share the same value.
19
- * @property int $amount The total amount that was authorized or rejected. This amount is in the card's currency and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>.
20
- * @property null|\Stripe\StripeObject $amount_details Detailed breakdown of amount components. These amounts are denominated in <code>currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>.
21
- * @property bool $approved Whether the authorization has been approved.
22
- * @property string $authorization_method How the card details were provided.
23
- * @property \Stripe\BalanceTransaction[] $balance_transactions List of balance transactions associated with this authorization.
24
- * @property \Stripe\Issuing\Card $card You can <a href="https://stripe.com/docs/issuing/cards">create physical or virtual cards</a> that are issued to cardholders.
25
- * @property null|string|\Stripe\Issuing\Cardholder $cardholder The cardholder to whom this authorization belongs.
26
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
27
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
28
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
29
- * @property int $merchant_amount The total amount that was authorized or rejected. This amount is in the <code>merchant_currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>.
30
- * @property string $merchant_currency The currency that was presented to the cardholder for the authorization. Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
31
- * @property \Stripe\StripeObject $merchant_data
32
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
33
- * @property null|\Stripe\StripeObject $pending_request The pending authorization request. This field will only be non-null during an <code>issuing_authorization.request</code> webhook.
34
- * @property \Stripe\StripeObject[] $request_history History of every time <code>pending_request</code> was approved/denied, either by you directly or by Stripe (e.g. based on your <code>spending_controls</code>). If the merchant changes the authorization by performing an <a href="https://stripe.com/docs/issuing/purchases/authorizations">incremental authorization</a>, you can look at this field to see the previous requests for the authorization.
35
- * @property string $status The current status of the authorization in its lifecycle.
36
- * @property \Stripe\Issuing\Transaction[] $transactions List of <a href="https://stripe.com/docs/api/issuing/transactions">transactions</a> associated with this authorization.
37
- * @property \Stripe\StripeObject $verification_data
38
- * @property null|string $wallet What, if any, digital wallet was used for this authorization. One of <code>apple_pay</code>, <code>google_pay</code>, or <code>samsung_pay</code>.
39
- */
40
- class Authorization extends \Stripe\ApiResource
41
- {
42
- const OBJECT_NAME = 'issuing.authorization';
43
-
44
- use \Stripe\ApiOperations\All;
45
- use \Stripe\ApiOperations\Retrieve;
46
- use \Stripe\ApiOperations\Update;
47
-
48
- /**
49
- * @param null|array $params
50
- * @param null|array|string $opts
51
- *
52
- * @throws \Stripe\Exception\ApiErrorException if the request fails
53
- *
54
- * @return Authorization the approved authorization
55
- */
56
- public function approve($params = null, $opts = null)
57
- {
58
- $url = $this->instanceUrl() . '/approve';
59
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
60
- $this->refreshFrom($response, $opts);
61
-
62
- return $this;
63
- }
64
-
65
- /**
66
- * @param null|array $params
67
- * @param null|array|string $opts
68
- *
69
- * @throws \Stripe\Exception\ApiErrorException if the request fails
70
- *
71
- * @return Authorization the declined authorization
72
- */
73
- public function decline($params = null, $opts = null)
74
- {
75
- $url = $this->instanceUrl() . '/decline';
76
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
77
- $this->refreshFrom($response, $opts);
78
-
79
- return $this;
80
- }
81
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Issuing/Card.php DELETED
@@ -1,59 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Issuing;
6
-
7
- /**
8
- * You can <a href="https://stripe.com/docs/issuing/cards">create physical or
9
- * virtual cards</a> that are issued to cardholders.
10
- *
11
- * @property string $id Unique identifier for the object.
12
- * @property string $object String representing the object's type. Objects of the same type share the same value.
13
- * @property string $brand The brand of the card.
14
- * @property null|string $cancellation_reason The reason why the card was canceled.
15
- * @property \Stripe\Issuing\Cardholder $cardholder <p>An Issuing <code>Cardholder</code> object represents an individual or business entity who is <a href="https://stripe.com/docs/issuing">issued</a> cards.</p><p>Related guide: <a href="https://stripe.com/docs/issuing/cards#create-cardholder">How to create a Cardholder</a></p>
16
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
17
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
18
- * @property string $cvc The card's CVC. For security reasons, this is only available for virtual cards, and will be omitted unless you explicitly request it with <a href="https://stripe.com/docs/api/expanding_objects">the <code>expand</code> parameter</a>. Additionally, it's only available via the <a href="https://stripe.com/docs/api/issuing/cards/retrieve">&quot;Retrieve a card&quot; endpoint</a>, not via &quot;List all cards&quot; or any other endpoint.
19
- * @property int $exp_month The expiration month of the card.
20
- * @property int $exp_year The expiration year of the card.
21
- * @property string $last4 The last 4 digits of the card number.
22
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
23
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
24
- * @property string $number The full unredacted card number. For security reasons, this is only available for virtual cards, and will be omitted unless you explicitly request it with <a href="https://stripe.com/docs/api/expanding_objects">the <code>expand</code> parameter</a>. Additionally, it's only available via the <a href="https://stripe.com/docs/api/issuing/cards/retrieve">&quot;Retrieve a card&quot; endpoint</a>, not via &quot;List all cards&quot; or any other endpoint.
25
- * @property null|string|\Stripe\Issuing\Card $replaced_by The latest card that replaces this card, if any.
26
- * @property null|string|\Stripe\Issuing\Card $replacement_for The card this card replaces, if any.
27
- * @property null|string $replacement_reason The reason why the previous card needed to be replaced.
28
- * @property null|\Stripe\StripeObject $shipping Where and how the card will be shipped.
29
- * @property \Stripe\StripeObject $spending_controls
30
- * @property string $status Whether authorizations can be approved on this card.
31
- * @property string $type The type of the card.
32
- */
33
- class Card extends \Stripe\ApiResource
34
- {
35
- const OBJECT_NAME = 'issuing.card';
36
-
37
- use \Stripe\ApiOperations\All;
38
- use \Stripe\ApiOperations\Create;
39
- use \Stripe\ApiOperations\Retrieve;
40
- use \Stripe\ApiOperations\Update;
41
-
42
- /**
43
- * @param null|array $params
44
- * @param null|array|string $opts
45
- *
46
- * @throws \Stripe\Exception\ApiErrorException if the request fails
47
- *
48
- * @return \Stripe\Issuing\CardDetails the card details associated with that issuing card
49
- */
50
- public function details($params = null, $opts = null)
51
- {
52
- $url = $this->instanceUrl() . '/details';
53
- list($response, $opts) = $this->_request('get', $url, $params, $opts);
54
- $obj = \Stripe\Util\Util::convertToStripeObject($response, $opts);
55
- $obj->setLastResponse($response);
56
-
57
- return $obj;
58
- }
59
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Issuing/CardDetails.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Issuing;
4
-
5
- /**
6
- * Class CardDetails.
7
- *
8
- * @property string $id
9
- * @property string $object
10
- * @property Card $card
11
- * @property string $cvc
12
- * @property int $exp_month
13
- * @property int $exp_year
14
- * @property string $number
15
- */
16
- class CardDetails extends \Stripe\ApiResource
17
- {
18
- const OBJECT_NAME = 'issuing.card_details';
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Issuing/Cardholder.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Issuing;
6
-
7
- /**
8
- * An Issuing <code>Cardholder</code> object represents an individual or business
9
- * entity who is <a href="https://stripe.com/docs/issuing">issued</a> cards.
10
- *
11
- * Related guide: <a
12
- * href="https://stripe.com/docs/issuing/cards#create-cardholder">How to create a
13
- * Cardholder</a>
14
- *
15
- * @property string $id Unique identifier for the object.
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property \Stripe\StripeObject $billing
18
- * @property null|\Stripe\StripeObject $company Additional information about a <code>company</code> cardholder.
19
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
20
- * @property null|string $email The cardholder's email address.
21
- * @property null|\Stripe\StripeObject $individual Additional information about an <code>individual</code> cardholder.
22
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
23
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
24
- * @property string $name The cardholder's name. This will be printed on cards issued to them.
25
- * @property null|string $phone_number The cardholder's phone number.
26
- * @property \Stripe\StripeObject $requirements
27
- * @property null|\Stripe\StripeObject $spending_controls Rules that control spending across this cardholder's cards. Refer to our <a href="https://stripe.com/docs/issuing/controls/spending-controls">documentation</a> for more details.
28
- * @property string $status Specifies whether to permit authorizations on this cardholder's cards.
29
- * @property string $type One of <code>individual</code> or <code>company</code>.
30
- */
31
- class Cardholder extends \Stripe\ApiResource
32
- {
33
- const OBJECT_NAME = 'issuing.cardholder';
34
-
35
- use \Stripe\ApiOperations\All;
36
- use \Stripe\ApiOperations\Create;
37
- use \Stripe\ApiOperations\Retrieve;
38
- use \Stripe\ApiOperations\Update;
39
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Issuing/Dispute.php DELETED
@@ -1,53 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Issuing;
6
-
7
- /**
8
- * As a <a href="https://stripe.com/docs/issuing">card issuer</a>, you can dispute
9
- * transactions that the cardholder does not recognize, suspects to be fraudulent,
10
- * or has other issues with.
11
- *
12
- * Related guide: <a
13
- * href="https://stripe.com/docs/issuing/purchases/disputes">Disputing
14
- * Transactions</a>
15
- *
16
- * @property string $id Unique identifier for the object.
17
- * @property string $object String representing the object's type. Objects of the same type share the same value.
18
- * @property int $amount Disputed amount. Usually the amount of the <code>transaction</code>, but can differ (usually because of currency fluctuation).
19
- * @property null|\Stripe\BalanceTransaction[] $balance_transactions List of balance transactions associated with the dispute.
20
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
21
- * @property string $currency The currency the <code>transaction</code> was made in.
22
- * @property \Stripe\StripeObject $evidence
23
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
24
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
25
- * @property string $status Current status of the dispute.
26
- * @property string|\Stripe\Issuing\Transaction $transaction The transaction being disputed.
27
- */
28
- class Dispute extends \Stripe\ApiResource
29
- {
30
- const OBJECT_NAME = 'issuing.dispute';
31
-
32
- use \Stripe\ApiOperations\All;
33
- use \Stripe\ApiOperations\Create;
34
- use \Stripe\ApiOperations\Retrieve;
35
- use \Stripe\ApiOperations\Update;
36
-
37
- /**
38
- * @param null|array $params
39
- * @param null|array|string $opts
40
- *
41
- * @throws \Stripe\Exception\ApiErrorException if the request fails
42
- *
43
- * @return Dispute the submited dispute
44
- */
45
- public function submit($params = null, $opts = null)
46
- {
47
- $url = $this->instanceUrl() . '/submit';
48
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
49
- $this->refreshFrom($response, $opts);
50
-
51
- return $this;
52
- }
53
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Issuing/Transaction.php DELETED
@@ -1,43 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Issuing;
6
-
7
- /**
8
- * Any use of an <a href="https://stripe.com/docs/issuing">issued card</a> that
9
- * results in funds entering or leaving your Stripe account, such as a completed
10
- * purchase or refund, is represented by an Issuing <code>Transaction</code>
11
- * object.
12
- *
13
- * Related guide: <a
14
- * href="https://stripe.com/docs/issuing/purchases/transactions">Issued Card
15
- * Transactions</a>.
16
- *
17
- * @property string $id Unique identifier for the object.
18
- * @property string $object String representing the object's type. Objects of the same type share the same value.
19
- * @property int $amount The transaction amount, which will be reflected in your balance. This amount is in your currency and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>.
20
- * @property null|\Stripe\StripeObject $amount_details Detailed breakdown of amount components. These amounts are denominated in <code>currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>.
21
- * @property null|string|\Stripe\Issuing\Authorization $authorization The <code>Authorization</code> object that led to this transaction.
22
- * @property null|string|\Stripe\BalanceTransaction $balance_transaction ID of the <a href="https://stripe.com/docs/api/balance_transactions">balance transaction</a> associated with this transaction.
23
- * @property string|\Stripe\Issuing\Card $card The card used to make this transaction.
24
- * @property null|string|\Stripe\Issuing\Cardholder $cardholder The cardholder to whom this transaction belongs.
25
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
26
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
27
- * @property null|string|\Stripe\Issuing\Dispute $dispute If you've disputed the transaction, the ID of the dispute.
28
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
29
- * @property int $merchant_amount The amount that the merchant will receive, denominated in <code>merchant_currency</code> and in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a>. It will be different from <code>amount</code> if the merchant is taking payment in a different currency.
30
- * @property string $merchant_currency The currency with which the merchant is taking payment.
31
- * @property \Stripe\StripeObject $merchant_data
32
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
33
- * @property null|\Stripe\StripeObject $purchase_details Additional purchase information that is optionally provided by the merchant.
34
- * @property string $type The nature of the transaction.
35
- */
36
- class Transaction extends \Stripe\ApiResource
37
- {
38
- const OBJECT_NAME = 'issuing.transaction';
39
-
40
- use \Stripe\ApiOperations\All;
41
- use \Stripe\ApiOperations\Retrieve;
42
- use \Stripe\ApiOperations\Update;
43
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/JsonSerializable.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ // JsonSerializable only exists in PHP 5.4+. Stub if out if it doesn't exist
6
+ if (interface_exists('\JsonSerializable', false)) {
7
+ interface JsonSerializable extends \JsonSerializable
8
+ {
9
+ }
10
+ } else {
11
+ // PSR2 wants each interface to have its own file.
12
+ // @codingStandardsIgnoreStart
13
+ interface JsonSerializable
14
+ {
15
+ // @codingStandardsIgnoreEnd
16
+ public function jsonSerialize();
17
+ }
18
+ }
lib/stripe/lib/LineItem.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * A line item.
9
- *
10
- * @property string $id Unique identifier for the object.
11
- * @property string $object String representing the object's type. Objects of the same type share the same value.
12
- * @property int $amount_subtotal Total before any discounts or taxes are applied.
13
- * @property int $amount_total Total after discounts and taxes.
14
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
15
- * @property string $description An arbitrary string attached to the object. Often useful for displaying to users. Defaults to product name.
16
- * @property \Stripe\StripeObject[] $discounts The discounts applied to the line item.
17
- * @property null|\Stripe\Price $price The price used to generate the line item.
18
- * @property null|int $quantity The quantity of products being purchased.
19
- * @property \Stripe\StripeObject[] $taxes The taxes applied to the line item.
20
- */
21
- class LineItem extends ApiResource
22
- {
23
- const OBJECT_NAME = 'item';
24
-
25
- use ApiOperations\All;
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/LoginLink.php DELETED
@@ -1,15 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * @property string $object String representing the object's type. Objects of the same type share the same value.
9
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
10
- * @property string $url The URL for the login link.
11
- */
12
- class LoginLink extends ApiResource
13
- {
14
- const OBJECT_NAME = 'login_link';
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Mandate.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * A Mandate is a record of the permission a customer has given you to debit their
9
- * payment method.
10
- *
11
- * @property string $id Unique identifier for the object.
12
- * @property string $object String representing the object's type. Objects of the same type share the same value.
13
- * @property \Stripe\StripeObject $customer_acceptance
14
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
15
- * @property \Stripe\StripeObject $multi_use
16
- * @property string|\Stripe\PaymentMethod $payment_method ID of the payment method associated with this mandate.
17
- * @property \Stripe\StripeObject $payment_method_details
18
- * @property \Stripe\StripeObject $single_use
19
- * @property string $status The status of the mandate, which indicates whether it can be used to initiate a payment.
20
- * @property string $type The type of the mandate.
21
- */
22
- class Mandate extends ApiResource
23
- {
24
- const OBJECT_NAME = 'mandate';
25
-
26
- use ApiOperations\Retrieve;
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/OAuth.php DELETED
@@ -1,101 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- abstract class OAuth
6
- {
7
- /**
8
- * Generates a URL to Stripe's OAuth form.
9
- *
10
- * @param null|array $params
11
- * @param null|array $opts
12
- *
13
- * @return string the URL to Stripe's OAuth form
14
- */
15
- public static function authorizeUrl($params = null, $opts = null)
16
- {
17
- $params = $params ?: [];
18
-
19
- $base = ($opts && \array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase;
20
-
21
- $params['client_id'] = self::_getClientId($params);
22
- if (!\array_key_exists('response_type', $params)) {
23
- $params['response_type'] = 'code';
24
- }
25
- $query = Util\Util::encodeParameters($params);
26
-
27
- return $base . '/oauth/authorize?' . $query;
28
- }
29
-
30
- /**
31
- * Use an authoriztion code to connect an account to your platform and
32
- * fetch the user's credentials.
33
- *
34
- * @param null|array $params
35
- * @param null|array $opts
36
- *
37
- * @throws \Stripe\Exception\OAuth\OAuthErrorException if the request fails
38
- *
39
- * @return StripeObject object containing the response from the API
40
- */
41
- public static function token($params = null, $opts = null)
42
- {
43
- $base = ($opts && \array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase;
44
- $requestor = new ApiRequestor(null, $base);
45
- list($response, $apiKey) = $requestor->request(
46
- 'post',
47
- '/oauth/token',
48
- $params,
49
- null
50
- );
51
-
52
- return Util\Util::convertToStripeObject($response->json, $opts);
53
- }
54
-
55
- /**
56
- * Disconnects an account from your platform.
57
- *
58
- * @param null|array $params
59
- * @param null|array $opts
60
- *
61
- * @throws \Stripe\Exception\OAuth\OAuthErrorException if the request fails
62
- *
63
- * @return StripeObject object containing the response from the API
64
- */
65
- public static function deauthorize($params = null, $opts = null)
66
- {
67
- $params = $params ?: [];
68
- $base = ($opts && \array_key_exists('connect_base', $opts)) ? $opts['connect_base'] : Stripe::$connectBase;
69
- $requestor = new ApiRequestor(null, $base);
70
- $params['client_id'] = self::_getClientId($params);
71
- list($response, $apiKey) = $requestor->request(
72
- 'post',
73
- '/oauth/deauthorize',
74
- $params,
75
- null
76
- );
77
-
78
- return Util\Util::convertToStripeObject($response->json, $opts);
79
- }
80
-
81
- private static function _getClientId($params = null)
82
- {
83
- $clientId = ($params && \array_key_exists('client_id', $params)) ? $params['client_id'] : null;
84
- if (null === $clientId) {
85
- $clientId = Stripe::getClientId();
86
- }
87
- if (null === $clientId) {
88
- $msg = 'No client_id provided. (HINT: set your client_id using '
89
- . '"Stripe::setClientId(<CLIENT-ID>)". You can find your client_ids '
90
- . 'in your Stripe dashboard at '
91
- . 'https://dashboard.stripe.com/account/applications/settings, '
92
- . 'after registering your account as a platform. See '
93
- . 'https://stripe.com/docs/connect/standard-accounts for details, '
94
- . 'or email support@stripe.com if you have any questions.';
95
-
96
- throw new Exception\AuthenticationException($msg);
97
- }
98
-
99
- return $clientId;
100
- }
101
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/OAuthErrorObject.php DELETED
@@ -1,31 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- /**
6
- * Class OAuthErrorObject.
7
- *
8
- * @property string $error
9
- * @property string $error_description
10
- */
11
- class OAuthErrorObject extends StripeObject
12
- {
13
- /**
14
- * Refreshes this object using the provided values.
15
- *
16
- * @param array $values
17
- * @param null|array|string|Util\RequestOptions $opts
18
- * @param bool $partial defaults to false
19
- */
20
- public function refreshFrom($values, $opts, $partial = false)
21
- {
22
- // Unlike most other API resources, the API will omit attributes in
23
- // error objects when they have a null value. We manually set default
24
- // values here to facilitate generic error handling.
25
- $values = \array_merge([
26
- 'error' => null,
27
- 'error_description' => null,
28
- ], $values);
29
- parent::refreshFrom($values, $opts, $partial);
30
- }
31
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Order.php CHANGED
@@ -1,81 +1,87 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Order objects are created to handle end customers' purchases of previously
9
- * defined <a href="https://stripe.com/docs/api#products">products</a>. You can
10
- * create, retrieve, and pay individual orders, as well as list all orders. Orders
11
- * are identified by a unique, random ID.
12
- *
13
- * Related guide: <a href="https://stripe.com/docs/orders">Tax, Shipping, and
14
- * Inventory</a>.
15
  *
16
- * @property string $id Unique identifier for the object.
17
- * @property string $object String representing the object's type. Objects of the same type share the same value.
18
- * @property int $amount A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the total amount for the order.
19
- * @property null|int $amount_returned The total amount that was returned to the customer.
20
- * @property null|string $application ID of the Connect Application that created the order.
21
- * @property null|int $application_fee A fee in cents that will be applied to the order and transferred to the application owner’s Stripe account. The request must be made with an OAuth key or the Stripe-Account header in order to take an application fee. For more information, see the application fees documentation.
22
- * @property null|string|\Stripe\Charge $charge The ID of the payment used to pay for the order. Present if the order status is <code>paid</code>, <code>fulfilled</code>, or <code>refunded</code>.
23
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
24
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
25
- * @property null|string|\Stripe\Customer $customer The customer used for the order.
26
- * @property null|string $email The email address of the customer placing the order.
27
- * @property string $external_coupon_code External coupon code to load for this order.
28
- * @property \Stripe\OrderItem[] $items List of items constituting the order. An order can have up to 25 items.
29
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
30
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
31
- * @property null|\Stripe\Collection $returns A list of returns that have taken place for this order.
32
- * @property null|string $selected_shipping_method The shipping method that is currently selected for this order, if any. If present, it is equal to one of the <code>id</code>s of shipping methods in the <code>shipping_methods</code> array. At order creation time, if there are multiple shipping methods, Stripe will automatically selected the first method.
33
- * @property null|\Stripe\StripeObject $shipping The shipping address for the order. Present if the order is for goods to be shipped.
34
- * @property null|\Stripe\StripeObject[] $shipping_methods A list of supported shipping methods for this order. The desired shipping method can be specified either by updating the order, or when paying it.
35
- * @property string $status Current order status. One of <code>created</code>, <code>paid</code>, <code>canceled</code>, <code>fulfilled</code>, or <code>returned</code>. More details in the <a href="https://stripe.com/docs/orders/guide#understanding-order-statuses">Orders Guide</a>.
36
- * @property null|\Stripe\StripeObject $status_transitions The timestamps at which the order status was updated.
37
- * @property null|int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch.
38
- * @property string $upstream_id The user's order ID if it is different from the Stripe order ID.
39
  */
40
  class Order extends ApiResource
41
  {
42
- const OBJECT_NAME = 'order';
43
-
44
- use ApiOperations\All;
45
- use ApiOperations\Create;
46
- use ApiOperations\Retrieve;
47
- use ApiOperations\Update;
48
-
49
  /**
50
- * @param null|array $params
51
- * @param null|array|string $opts
52
  *
53
- * @throws \Stripe\Exception\ApiErrorException if the request fails
 
 
 
 
 
 
 
 
 
54
  *
55
- * @return \Stripe\OrderReturn the newly created return
56
  */
57
- public function returnOrder($params = null, $opts = null)
58
  {
59
- $url = $this->instanceUrl() . '/returns';
60
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
61
 
62
- return Util\Util::convertToStripeObject($response, $opts);
 
 
 
 
 
 
 
 
 
63
  }
64
 
65
  /**
66
- * @param null|array $params
67
- * @param null|array|string $opts
68
  *
69
- * @throws \Stripe\Exception\ApiErrorException if the request fails
 
 
 
 
 
 
 
 
 
70
  *
71
- * @return Order the paid order
 
 
 
 
 
 
 
 
72
  */
73
  public function pay($params = null, $opts = null)
74
  {
75
  $url = $this->instanceUrl() . '/pay';
76
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
77
  $this->refreshFrom($response, $opts);
78
-
79
  return $this;
80
  }
 
 
 
 
 
 
 
 
 
 
81
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Order
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Order extends ApiResource
11
  {
 
 
 
 
 
 
 
12
  /**
13
+ * @param string $id The ID of the Order to retrieve.
14
+ * @param array|string|null $opts
15
  *
16
+ * @return Order
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
+
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
  *
27
+ * @return Order The created Order.
28
  */
29
+ public static function create($params = null, $opts = null)
30
  {
31
+ return self::_create($params, $opts);
32
+ }
33
 
34
+ /**
35
+ * @param string $id The ID of the order to update.
36
+ * @param array|null $params
37
+ * @param array|string|null $options
38
+ *
39
+ * @return Order The updated order.
40
+ */
41
+ public static function update($id, $params = null, $options = null)
42
+ {
43
+ return self::_update($id, $params, $options);
44
  }
45
 
46
  /**
47
+ * @param array|string|null $opts
 
48
  *
49
+ * @return Order The saved Order.
50
+ */
51
+ public function save($opts = null)
52
+ {
53
+ return $this->_save($opts);
54
+ }
55
+
56
+ /**
57
+ * @param array|null $params
58
+ * @param array|string|null $opts
59
  *
60
+ * @return Collection of Orders
61
+ */
62
+ public static function all($params = null, $opts = null)
63
+ {
64
+ return self::_all($params, $opts);
65
+ }
66
+
67
+ /**
68
+ * @return Order The paid order.
69
  */
70
  public function pay($params = null, $opts = null)
71
  {
72
  $url = $this->instanceUrl() . '/pay';
73
  list($response, $opts) = $this->_request('post', $url, $params, $opts);
74
  $this->refreshFrom($response, $opts);
 
75
  return $this;
76
  }
77
+
78
+ /**
79
+ * @return OrderReturn The newly created return.
80
+ */
81
+ public function returnOrder($params = null, $opts = null)
82
+ {
83
+ $url = $this->instanceUrl() . '/returns';
84
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
85
+ return Util\Util::convertToStripeObject($response, $opts);
86
+ }
87
  }
lib/stripe/lib/OrderItem.php DELETED
@@ -1,19 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- /**
6
- * Class OrderItem.
7
- *
8
- * @property string $object
9
- * @property int $amount
10
- * @property string $currency
11
- * @property string $description
12
- * @property string $parent
13
- * @property int $quantity
14
- * @property string $type
15
- */
16
- class OrderItem extends StripeObject
17
- {
18
- const OBJECT_NAME = 'order_item';
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/OrderReturn.php CHANGED
@@ -1,32 +1,33 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * A return represents the full or partial return of a number of <a
9
- * href="https://stripe.com/docs/api#order_items">order items</a>. Returns always
10
- * belong to an order, and may optionally contain a refund.
11
- *
12
- * Related guide: <a
13
- * href="https://stripe.com/docs/orders/guide#handling-returns">Handling
14
- * Returns</a>.
15
  *
16
- * @property string $id Unique identifier for the object.
17
- * @property string $object String representing the object's type. Objects of the same type share the same value.
18
- * @property int $amount A positive integer in the smallest currency unit (that is, 100 cents for $1.00, or 1 for ¥1, Japanese Yen being a zero-decimal currency) representing the total amount for the returned line item.
19
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
20
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
21
- * @property \Stripe\OrderItem[] $items The items included in this order return.
22
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
23
- * @property null|string|\Stripe\Order $order The order that this return includes items from.
24
- * @property null|string|\Stripe\Refund $refund The ID of the refund issued for this return.
25
  */
26
  class OrderReturn extends ApiResource
27
  {
28
- const OBJECT_NAME = 'order_return';
 
 
 
 
 
 
 
 
 
29
 
30
- use ApiOperations\All;
31
- use ApiOperations\Retrieve;
 
 
 
 
 
 
 
 
32
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class OrderReturn
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
9
  */
10
  class OrderReturn extends ApiResource
11
  {
12
+ /**
13
+ * @param string $id The ID of the OrderReturn to retrieve.
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return Order
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
 
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return Collection of OrderReturns
28
+ */
29
+ public static function all($params = null, $opts = null)
30
+ {
31
+ return self::_all($params, $opts);
32
+ }
33
  }
lib/stripe/lib/PaymentIntent.php DELETED
@@ -1,125 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * A PaymentIntent guides you through the process of collecting a payment from your
9
- * customer. We recommend that you create exactly one PaymentIntent for each order
10
- * or customer session in your system. You can reference the PaymentIntent later to
11
- * see the history of payment attempts for a particular session.
12
- *
13
- * A PaymentIntent transitions through <a
14
- * href="https://stripe.com/docs/payments/intents#intent-statuses">multiple
15
- * statuses</a> throughout its lifetime as it interfaces with Stripe.js to perform
16
- * authentication flows and ultimately creates at most one successful charge.
17
- *
18
- * Related guide: <a
19
- * href="https://stripe.com/docs/payments/payment-intents">Payment Intents API</a>.
20
- *
21
- * @property string $id Unique identifier for the object.
22
- * @property string $object String representing the object's type. Objects of the same type share the same value.
23
- * @property int $amount Amount intended to be collected by this PaymentIntent. A positive integer representing how much to charge in the <a href="https://stripe.com/docs/currencies#zero-decimal">smallest currency unit</a> (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or <a href="https://stripe.com/docs/currencies#minimum-and-maximum-charge-amounts">equivalent in charge currency</a>. The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
24
- * @property int $amount_capturable Amount that can be captured from this PaymentIntent.
25
- * @property int $amount_received Amount that was collected by this PaymentIntent.
26
- * @property null|string|\Stripe\StripeObject $application ID of the Connect application that created the PaymentIntent.
27
- * @property null|int $application_fee_amount The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner's Stripe account. The amount of the application fee collected will be capped at the total payment amount. For more information, see the PaymentIntents <a href="https://stripe.com/docs/payments/connected-accounts">use case for connected accounts</a>.
28
- * @property null|int $canceled_at Populated when <code>status</code> is <code>canceled</code>, this is the time at which the PaymentIntent was canceled. Measured in seconds since the Unix epoch.
29
- * @property null|string $cancellation_reason Reason for cancellation of this PaymentIntent, either user-provided (<code>duplicate</code>, <code>fraudulent</code>, <code>requested_by_customer</code>, or <code>abandoned</code>) or generated by Stripe internally (<code>failed_invoice</code>, <code>void_invoice</code>, or <code>automatic</code>).
30
- * @property string $capture_method Controls when the funds will be captured from the customer's account.
31
- * @property \Stripe\Collection $charges Charges that were created by this PaymentIntent, if any.
32
- * @property null|string $client_secret <p>The client secret of this PaymentIntent. Used for client-side retrieval using a publishable key.</p><p>The client secret can be used to complete a payment from your frontend. It should not be stored, logged, embedded in URLs, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret.</p><p>Refer to our docs to <a href="https://stripe.com/docs/payments/accept-a-payment?integration=elements">accept a payment</a> and learn about how <code>client_secret</code> should be handled.</p>
33
- * @property string $confirmation_method
34
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
35
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
36
- * @property null|string|\Stripe\Customer $customer <p>ID of the Customer this PaymentIntent belongs to, if one exists.</p><p>Payment methods attached to other Customers cannot be used with this PaymentIntent.</p><p>If present in combination with <a href="https://stripe.com/docs/api#payment_intent_object-setup_future_usage">setup_future_usage</a>, this PaymentIntent's payment method will be attached to the Customer after the PaymentIntent has been confirmed and any required actions from the user are complete.</p>
37
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
38
- * @property null|string|\Stripe\Invoice $invoice ID of the invoice that created this PaymentIntent, if it exists.
39
- * @property null|\Stripe\ErrorObject $last_payment_error The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason.
40
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
41
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format. For more information, see the <a href="https://stripe.com/docs/payments/payment-intents/creating-payment-intents#storing-information-in-metadata">documentation</a>.
42
- * @property null|\Stripe\StripeObject $next_action If present, this property tells you what actions you need to take in order for your customer to fulfill a payment using the provided source.
43
- * @property null|string|\Stripe\Account $on_behalf_of The account (if any) for which the funds of the PaymentIntent are intended. See the PaymentIntents <a href="https://stripe.com/docs/payments/connected-accounts">use case for connected accounts</a> for details.
44
- * @property null|string|\Stripe\PaymentMethod $payment_method ID of the payment method used in this PaymentIntent.
45
- * @property null|\Stripe\StripeObject $payment_method_options Payment-method-specific configuration for this PaymentIntent.
46
- * @property string[] $payment_method_types The list of payment method types (e.g. card) that this PaymentIntent is allowed to use.
47
- * @property null|string $receipt_email Email address that the receipt for the resulting payment will be sent to. If <code>receipt_email</code> is specified for a payment in live mode, a receipt will be sent regardless of your <a href="https://dashboard.stripe.com/account/emails">email settings</a>.
48
- * @property null|string|\Stripe\Review $review ID of the review associated with this PaymentIntent, if any.
49
- * @property null|string $setup_future_usage <p>Indicates that you intend to make future payments with this PaymentIntent's payment method.</p><p>Providing this parameter will <a href="https://stripe.com/docs/payments/save-during-payment">attach the payment method</a> to the PaymentIntent's Customer, if present, after the PaymentIntent is confirmed and any required actions from the user are complete. If no Customer was provided, the payment method can still be <a href="https://stripe.com/docs/api/payment_methods/attach">attached</a> to a Customer after the transaction completes.</p><p>When processing card payments, Stripe also uses <code>setup_future_usage</code> to dynamically optimize your payment flow and comply with regional legislation and network rules, such as <a href="https://stripe.com/docs/strong-customer-authentication">SCA</a>.</p>
50
- * @property null|\Stripe\StripeObject $shipping Shipping information for this PaymentIntent.
51
- * @property null|string|\Stripe\Account|\Stripe\AlipayAccount|\Stripe\BankAccount|\Stripe\BitcoinReceiver|\Stripe\Card|\Stripe\Source $source This is a legacy field that will be removed in the future. It is the ID of the Source object that is associated with this PaymentIntent, if one was supplied.
52
- * @property null|string $statement_descriptor For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.
53
- * @property null|string $statement_descriptor_suffix Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor.
54
- * @property string $status Status of this PaymentIntent, one of <code>requires_payment_method</code>, <code>requires_confirmation</code>, <code>requires_action</code>, <code>processing</code>, <code>requires_capture</code>, <code>canceled</code>, or <code>succeeded</code>. Read more about each PaymentIntent <a href="https://stripe.com/docs/payments/intents#intent-statuses">status</a>.
55
- * @property null|\Stripe\StripeObject $transfer_data The data with which to automatically create a Transfer when the payment is finalized. See the PaymentIntents <a href="https://stripe.com/docs/payments/connected-accounts">use case for connected accounts</a> for details.
56
- * @property null|string $transfer_group A string that identifies the resulting payment as part of a group. See the PaymentIntents <a href="https://stripe.com/docs/payments/connected-accounts">use case for connected accounts</a> for details.
57
- */
58
- class PaymentIntent extends ApiResource
59
- {
60
- const OBJECT_NAME = 'payment_intent';
61
-
62
- use ApiOperations\All;
63
- use ApiOperations\Create;
64
- use ApiOperations\Retrieve;
65
- use ApiOperations\Update;
66
-
67
- const STATUS_CANCELED = 'canceled';
68
- const STATUS_PROCESSING = 'processing';
69
- const STATUS_REQUIRES_ACTION = 'requires_action';
70
- const STATUS_REQUIRES_CAPTURE = 'requires_capture';
71
- const STATUS_REQUIRES_CONFIRMATION = 'requires_confirmation';
72
- const STATUS_REQUIRES_PAYMENT_METHOD = 'requires_payment_method';
73
- const STATUS_SUCCEEDED = 'succeeded';
74
-
75
- /**
76
- * @param null|array $params
77
- * @param null|array|string $opts
78
- *
79
- * @throws \Stripe\Exception\ApiErrorException if the request fails
80
- *
81
- * @return PaymentIntent the canceled payment intent
82
- */
83
- public function cancel($params = null, $opts = null)
84
- {
85
- $url = $this->instanceUrl() . '/cancel';
86
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
87
- $this->refreshFrom($response, $opts);
88
-
89
- return $this;
90
- }
91
-
92
- /**
93
- * @param null|array $params
94
- * @param null|array|string $opts
95
- *
96
- * @throws \Stripe\Exception\ApiErrorException if the request fails
97
- *
98
- * @return PaymentIntent the captured payment intent
99
- */
100
- public function capture($params = null, $opts = null)
101
- {
102
- $url = $this->instanceUrl() . '/capture';
103
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
104
- $this->refreshFrom($response, $opts);
105
-
106
- return $this;
107
- }
108
-
109
- /**
110
- * @param null|array $params
111
- * @param null|array|string $opts
112
- *
113
- * @throws \Stripe\Exception\ApiErrorException if the request fails
114
- *
115
- * @return PaymentIntent the confirmed payment intent
116
- */
117
- public function confirm($params = null, $opts = null)
118
- {
119
- $url = $this->instanceUrl() . '/confirm';
120
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
121
- $this->refreshFrom($response, $opts);
122
-
123
- return $this;
124
- }
125
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/PaymentMethod.php DELETED
@@ -1,88 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * PaymentMethod objects represent your customer's payment instruments. They can be
9
- * used with <a
10
- * href="https://stripe.com/docs/payments/payment-intents">PaymentIntents</a> to
11
- * collect payments or saved to Customer objects to store instrument details for
12
- * future payments.
13
- *
14
- * Related guides: <a
15
- * href="https://stripe.com/docs/payments/payment-methods">Payment Methods</a> and
16
- * <a href="https://stripe.com/docs/payments/more-payment-scenarios">More Payment
17
- * Scenarios</a>.
18
- *
19
- * @property string $id Unique identifier for the object.
20
- * @property string $object String representing the object's type. Objects of the same type share the same value.
21
- * @property \Stripe\StripeObject $acss_debit
22
- * @property \Stripe\StripeObject $afterpay_clearpay
23
- * @property \Stripe\StripeObject $alipay
24
- * @property \Stripe\StripeObject $au_becs_debit
25
- * @property \Stripe\StripeObject $bacs_debit
26
- * @property \Stripe\StripeObject $bancontact
27
- * @property \Stripe\StripeObject $billing_details
28
- * @property \Stripe\StripeObject $card
29
- * @property \Stripe\StripeObject $card_present
30
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
31
- * @property null|string|\Stripe\Customer $customer The ID of the Customer to which this PaymentMethod is saved. This will not be set when the PaymentMethod has not been saved to a Customer.
32
- * @property \Stripe\StripeObject $eps
33
- * @property \Stripe\StripeObject $fpx
34
- * @property \Stripe\StripeObject $giropay
35
- * @property \Stripe\StripeObject $grabpay
36
- * @property \Stripe\StripeObject $ideal
37
- * @property \Stripe\StripeObject $interac_present
38
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
39
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
40
- * @property \Stripe\StripeObject $oxxo
41
- * @property \Stripe\StripeObject $p24
42
- * @property \Stripe\StripeObject $sepa_debit
43
- * @property \Stripe\StripeObject $sofort
44
- * @property string $type The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value. It contains additional information specific to the PaymentMethod type.
45
- */
46
- class PaymentMethod extends ApiResource
47
- {
48
- const OBJECT_NAME = 'payment_method';
49
-
50
- use ApiOperations\All;
51
- use ApiOperations\Create;
52
- use ApiOperations\Retrieve;
53
- use ApiOperations\Update;
54
-
55
- /**
56
- * @param null|array $params
57
- * @param null|array|string $opts
58
- *
59
- * @throws \Stripe\Exception\ApiErrorException if the request fails
60
- *
61
- * @return PaymentMethod the attached payment method
62
- */
63
- public function attach($params = null, $opts = null)
64
- {
65
- $url = $this->instanceUrl() . '/attach';
66
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
67
- $this->refreshFrom($response, $opts);
68
-
69
- return $this;
70
- }
71
-
72
- /**
73
- * @param null|array $params
74
- * @param null|array|string $opts
75
- *
76
- * @throws \Stripe\Exception\ApiErrorException if the request fails
77
- *
78
- * @return PaymentMethod the detached payment method
79
- */
80
- public function detach($params = null, $opts = null)
81
- {
82
- $url = $this->instanceUrl() . '/detach';
83
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
84
- $this->refreshFrom($response, $opts);
85
-
86
- return $this;
87
- }
88
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Payout.php DELETED
@@ -1,108 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * A <code>Payout</code> object is created when you receive funds from Stripe, or
9
- * when you initiate a payout to either a bank account or debit card of a <a
10
- * href="/docs/connect/bank-debit-card-payouts">connected Stripe account</a>. You
11
- * can retrieve individual payouts, as well as list all payouts. Payouts are made
12
- * on <a href="/docs/connect/manage-payout-schedule">varying schedules</a>,
13
- * depending on your country and industry.
14
- *
15
- * Related guide: <a href="https://stripe.com/docs/payouts">Receiving Payouts</a>.
16
- *
17
- * @property string $id Unique identifier for the object.
18
- * @property string $object String representing the object's type. Objects of the same type share the same value.
19
- * @property int $amount Amount (in %s) to be transferred to your bank account or debit card.
20
- * @property int $arrival_date Date the payout is expected to arrive in the bank. This factors in delays like weekends or bank holidays.
21
- * @property bool $automatic Returns <code>true</code> if the payout was created by an <a href="https://stripe.com/docs/payouts#payout-schedule">automated payout schedule</a>, and <code>false</code> if it was <a href="https://stripe.com/docs/payouts#manual-payouts">requested manually</a>.
22
- * @property null|string|\Stripe\BalanceTransaction $balance_transaction ID of the balance transaction that describes the impact of this payout on your account balance.
23
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
24
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
25
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
26
- * @property null|string|\Stripe\BankAccount|\Stripe\Card $destination ID of the bank account or card the payout was sent to.
27
- * @property null|string|\Stripe\BalanceTransaction $failure_balance_transaction If the payout failed or was canceled, this will be the ID of the balance transaction that reversed the initial balance transaction, and puts the funds from the failed payout back in your balance.
28
- * @property null|string $failure_code Error code explaining reason for payout failure if available. See <a href="https://stripe.com/docs/api#payout_failures">Types of payout failures</a> for a list of failure codes.
29
- * @property null|string $failure_message Message to user further explaining reason for payout failure if available.
30
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
31
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
32
- * @property string $method The method used to send this payout, which can be <code>standard</code> or <code>instant</code>. <code>instant</code> is only supported for payouts to debit cards. (See <a href="https://stripe.com/blog/instant-payouts-for-marketplaces">Instant payouts for marketplaces</a> for more information.)
33
- * @property null|string|\Stripe\Payout $original_payout If the payout reverses another, this is the ID of the original payout.
34
- * @property null|string|\Stripe\Payout $reversed_by If the payout was reversed, this is the ID of the payout that reverses this payout.
35
- * @property string $source_type The source balance this payout came from. One of <code>card</code>, <code>fpx</code>, or <code>bank_account</code>.
36
- * @property null|string $statement_descriptor Extra information about a payout to be displayed on the user's bank statement.
37
- * @property string $status Current status of the payout: <code>paid</code>, <code>pending</code>, <code>in_transit</code>, <code>canceled</code> or <code>failed</code>. A payout is <code>pending</code> until it is submitted to the bank, when it becomes <code>in_transit</code>. The status then changes to <code>paid</code> if the transaction goes through, or to <code>failed</code> or <code>canceled</code> (within 5 business days). Some failed payouts may initially show as <code>paid</code> but then change to <code>failed</code>.
38
- * @property string $type Can be <code>bank_account</code> or <code>card</code>.
39
- */
40
- class Payout extends ApiResource
41
- {
42
- const OBJECT_NAME = 'payout';
43
-
44
- use ApiOperations\All;
45
- use ApiOperations\Create;
46
- use ApiOperations\Retrieve;
47
- use ApiOperations\Update;
48
-
49
- const FAILURE_ACCOUNT_CLOSED = 'account_closed';
50
- const FAILURE_ACCOUNT_FROZEN = 'account_frozen';
51
- const FAILURE_BANK_ACCOUNT_RESTRICTED = 'bank_account_restricted';
52
- const FAILURE_BANK_OWNERSHIP_CHANGED = 'bank_ownership_changed';
53
- const FAILURE_COULD_NOT_PROCESS = 'could_not_process';
54
- const FAILURE_DEBIT_NOT_AUTHORIZED = 'debit_not_authorized';
55
- const FAILURE_DECLINED = 'declined';
56
- const FAILURE_INCORRECT_ACCOUNT_HOLDER_NAME = 'incorrect_account_holder_name';
57
- const FAILURE_INSUFFICIENT_FUNDS = 'insufficient_funds';
58
- const FAILURE_INVALID_ACCOUNT_NUMBER = 'invalid_account_number';
59
- const FAILURE_INVALID_CURRENCY = 'invalid_currency';
60
- const FAILURE_NO_ACCOUNT = 'no_account';
61
- const FAILURE_UNSUPPORTED_CARD = 'unsupported_card';
62
-
63
- const METHOD_INSTANT = 'instant';
64
- const METHOD_STANDARD = 'standard';
65
-
66
- const STATUS_CANCELED = 'canceled';
67
- const STATUS_FAILED = 'failed';
68
- const STATUS_IN_TRANSIT = 'in_transit';
69
- const STATUS_PAID = 'paid';
70
- const STATUS_PENDING = 'pending';
71
-
72
- const TYPE_BANK_ACCOUNT = 'bank_account';
73
- const TYPE_CARD = 'card';
74
-
75
- /**
76
- * @param null|array $params
77
- * @param null|array|string $opts
78
- *
79
- * @throws \Stripe\Exception\ApiErrorException if the request fails
80
- *
81
- * @return Payout the canceled payout
82
- */
83
- public function cancel($params = null, $opts = null)
84
- {
85
- $url = $this->instanceUrl() . '/cancel';
86
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
87
- $this->refreshFrom($response, $opts);
88
-
89
- return $this;
90
- }
91
-
92
- /**
93
- * @param null|array $params
94
- * @param null|array|string $opts
95
- *
96
- * @throws \Stripe\Exception\ApiErrorException if the request fails
97
- *
98
- * @return Payout the reversed payout
99
- */
100
- public function reverse($params = null, $opts = null)
101
- {
102
- $url = $this->instanceUrl() . '/reverse';
103
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
104
- $this->refreshFrom($response, $opts);
105
-
106
- return $this;
107
- }
108
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Person.php DELETED
@@ -1,120 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * This is an object representing a person associated with a Stripe account.
9
- *
10
- * A platform cannot access a Standard or Express account's persons after the
11
- * account starts onboarding, such as after generating an account link for the
12
- * account. See the <a
13
- * href="https://stripe.com/docs/connect/standard-accounts">Standard onboarding</a>
14
- * or <a href="https://stripe.com/docs/connect/express-accounts">Express onboarding
15
- * documentation</a> for information about platform pre-filling and account
16
- * onboarding steps.
17
- *
18
- * Related guide: <a
19
- * href="https://stripe.com/docs/connect/identity-verification-api#person-information">Handling
20
- * Identity Verification with the API</a>.
21
- *
22
- * @property string $id Unique identifier for the object.
23
- * @property string $object String representing the object's type. Objects of the same type share the same value.
24
- * @property string $account The account the person is associated with.
25
- * @property \Stripe\StripeObject $address
26
- * @property null|\Stripe\StripeObject $address_kana The Kana variation of the person's address (Japan only).
27
- * @property null|\Stripe\StripeObject $address_kanji The Kanji variation of the person's address (Japan only).
28
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
29
- * @property \Stripe\StripeObject $dob
30
- * @property null|string $email The person's email address.
31
- * @property null|string $first_name The person's first name.
32
- * @property null|string $first_name_kana The Kana variation of the person's first name (Japan only).
33
- * @property null|string $first_name_kanji The Kanji variation of the person's first name (Japan only).
34
- * @property null|string $gender The person's gender (International regulations require either &quot;male&quot; or &quot;female&quot;).
35
- * @property bool $id_number_provided Whether the person's <code>id_number</code> was provided.
36
- * @property null|string $last_name The person's last name.
37
- * @property null|string $last_name_kana The Kana variation of the person's last name (Japan only).
38
- * @property null|string $last_name_kanji The Kanji variation of the person's last name (Japan only).
39
- * @property null|string $maiden_name The person's maiden name.
40
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
41
- * @property null|string $nationality The country where the person is a national.
42
- * @property null|string $phone The person's phone number.
43
- * @property string $political_exposure Indicates if the person or any of their representatives, family members, or other closely related persons, declares that they hold or have held an important public job or function, in any jurisdiction.
44
- * @property \Stripe\StripeObject $relationship
45
- * @property null|\Stripe\StripeObject $requirements Information about the requirements for this person, including what information needs to be collected, and by when.
46
- * @property bool $ssn_last_4_provided Whether the last four digits of the person's Social Security number have been provided (U.S. only).
47
- * @property \Stripe\StripeObject $verification
48
- */
49
- class Person extends ApiResource
50
- {
51
- const OBJECT_NAME = 'person';
52
-
53
- use ApiOperations\Delete;
54
- use ApiOperations\Update;
55
-
56
- const GENDER_FEMALE = 'female';
57
- const GENDER_MALE = 'male';
58
-
59
- const POLITICAL_EXPOSURE_EXISTING = 'existing';
60
- const POLITICAL_EXPOSURE_NONE = 'none';
61
-
62
- const VERIFICATION_STATUS_PENDING = 'pending';
63
- const VERIFICATION_STATUS_UNVERIFIED = 'unverified';
64
- const VERIFICATION_STATUS_VERIFIED = 'verified';
65
-
66
- /**
67
- * @return string the API URL for this Stripe account reversal
68
- */
69
- public function instanceUrl()
70
- {
71
- $id = $this['id'];
72
- $account = $this['account'];
73
- if (!$id) {
74
- throw new Exception\UnexpectedValueException(
75
- 'Could not determine which URL to request: ' .
76
- "class instance has invalid ID: {$id}",
77
- null
78
- );
79
- }
80
- $id = Util\Util::utf8($id);
81
- $account = Util\Util::utf8($account);
82
-
83
- $base = Account::classUrl();
84
- $accountExtn = \urlencode($account);
85
- $extn = \urlencode($id);
86
-
87
- return "{$base}/{$accountExtn}/persons/{$extn}";
88
- }
89
-
90
- /**
91
- * @param array|string $_id
92
- * @param null|array|string $_opts
93
- *
94
- * @throws \Stripe\Exception\BadMethodCallException
95
- */
96
- public static function retrieve($_id, $_opts = null)
97
- {
98
- $msg = 'Persons cannot be retrieved without an account ID. Retrieve ' .
99
- "a person using `Account::retrievePerson('account_id', " .
100
- "'person_id')`.";
101
-
102
- throw new Exception\BadMethodCallException($msg);
103
- }
104
-
105
- /**
106
- * @param string $_id
107
- * @param null|array $_params
108
- * @param null|array|string $_options
109
- *
110
- * @throws \Stripe\Exception\BadMethodCallException
111
- */
112
- public static function update($_id, $_params = null, $_options = null)
113
- {
114
- $msg = 'Persons cannot be updated without an account ID. Update ' .
115
- "a person using `Account::updatePerson('account_id', " .
116
- "'person_id', \$updateParams)`.";
117
-
118
- throw new Exception\BadMethodCallException($msg);
119
- }
120
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Plan.php CHANGED
@@ -1,57 +1,77 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * You can now model subscriptions more flexibly using the <a
9
- * href="https://stripe.com/docs/api#prices">Prices API</a>. It replaces the Plans
10
- * API and is backwards compatible to simplify your migration.
11
- *
12
- * Plans define the base price, currency, and billing cycle for recurring purchases
13
- * of products. <a href="https://stripe.com/docs/api#products">Products</a> help
14
- * you track inventory or provisioning, and plans help you track pricing. Different
15
- * physical goods or levels of service should be represented by products, and
16
- * pricing options should be represented by plans. This approach lets you change
17
- * prices without having to change your provisioning scheme.
18
- *
19
- * For example, you might have a single &quot;gold&quot; product that has plans for
20
- * $10/month, $100/year, €9/month, and €90/year.
21
- *
22
- * Related guides: <a
23
- * href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up
24
- * a subscription</a> and more about <a
25
- * href="https://stripe.com/docs/billing/prices-guide">products and prices</a>.
26
  *
27
- * @property string $id Unique identifier for the object.
28
- * @property string $object String representing the object's type. Objects of the same type share the same value.
29
- * @property bool $active Whether the plan can be used for new purchases.
30
- * @property null|string $aggregate_usage Specifies a usage aggregation strategy for plans of <code>usage_type=metered</code>. Allowed values are <code>sum</code> for summing up all usage during a period, <code>last_during_period</code> for using the last usage record reported within a period, <code>last_ever</code> for using the last usage record ever (across period bounds) or <code>max</code> which uses the usage record with the maximum reported usage during a period. Defaults to <code>sum</code>.
31
- * @property null|int $amount The unit amount in %s to be charged, represented as a whole integer if possible. Only set if <code>billing_scheme=per_unit</code>.
32
- * @property null|string $amount_decimal The unit amount in %s to be charged, represented as a decimal string with at most 12 decimal places. Only set if <code>billing_scheme=per_unit</code>.
33
- * @property string $billing_scheme Describes how to compute the price per period. Either <code>per_unit</code> or <code>tiered</code>. <code>per_unit</code> indicates that the fixed amount (specified in <code>amount</code>) will be charged per unit in <code>quantity</code> (for plans with <code>usage_type=licensed</code>), or per unit of total usage (for plans with <code>usage_type=metered</code>). <code>tiered</code> indicates that the unit pricing will be computed using a tiering strategy as defined using the <code>tiers</code> and <code>tiers_mode</code> attributes.
34
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
35
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
36
- * @property string $interval The frequency at which a subscription is billed. One of <code>day</code>, <code>week</code>, <code>month</code> or <code>year</code>.
37
- * @property int $interval_count The number of intervals (specified in the <code>interval</code> attribute) between subscription billings. For example, <code>interval=month</code> and <code>interval_count=3</code> bills every 3 months.
38
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
39
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
40
- * @property null|string $nickname A brief description of the plan, hidden from customers.
41
- * @property null|string|\Stripe\Product $product The product whose pricing this plan determines.
42
- * @property \Stripe\StripeObject[] $tiers Each element represents a pricing tier. This parameter requires <code>billing_scheme</code> to be set to <code>tiered</code>. See also the documentation for <code>billing_scheme</code>.
43
- * @property null|string $tiers_mode Defines if the tiering price should be <code>graduated</code> or <code>volume</code> based. In <code>volume</code>-based tiering, the maximum quantity within a period determines the per unit price. In <code>graduated</code> tiering, pricing can change as the quantity grows.
44
- * @property null|\Stripe\StripeObject $transform_usage Apply a transformation to the reported usage or set quantity before computing the amount billed. Cannot be combined with <code>tiers</code>.
45
- * @property null|int $trial_period_days Default number of trial days when subscribing a customer to this plan using <a href="https://stripe.com/docs/api#create_subscription-trial_from_plan"><code>trial_from_plan=true</code></a>.
46
- * @property string $usage_type Configures how the quantity per period should be determined. Can be either <code>metered</code> or <code>licensed</code>. <code>licensed</code> automatically bills the <code>quantity</code> set when adding it to a subscription. <code>metered</code> aggregates the total usage based on usage records. Defaults to <code>licensed</code>.
47
  */
48
  class Plan extends ApiResource
49
  {
50
- const OBJECT_NAME = 'plan';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
- use ApiOperations\All;
53
- use ApiOperations\Create;
54
- use ApiOperations\Delete;
55
- use ApiOperations\Retrieve;
56
- use ApiOperations\Update;
 
 
 
 
 
57
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Plan
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Plan extends ApiResource
11
  {
12
+ /**
13
+ * @param string $id The ID of the plan to retrieve.
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return Plan
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
+
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return Plan The created plan.
28
+ */
29
+ public static function create($params = null, $opts = null)
30
+ {
31
+ return self::_create($params, $opts);
32
+ }
33
+
34
+ /**
35
+ * @param string $id The ID of the plan to update.
36
+ * @param array|null $params
37
+ * @param array|string|null $options
38
+ *
39
+ * @return Plan The updated plan.
40
+ */
41
+ public static function update($id, $params = null, $options = null)
42
+ {
43
+ return self::_update($id, $params, $options);
44
+ }
45
+
46
+ /**
47
+ * @param array|null $params
48
+ * @param array|string|null $opts
49
+ *
50
+ * @return Plan The deleted plan.
51
+ */
52
+ public function delete($params = null, $opts = null)
53
+ {
54
+ return $this->_delete($params, $opts);
55
+ }
56
+
57
+ /**
58
+ * @param array|string|null $opts
59
+ *
60
+ * @return Plan The saved plan.
61
+ */
62
+ public function save($opts = null)
63
+ {
64
+ return $this->_save($opts);
65
+ }
66
 
67
+ /**
68
+ * @param array|null $params
69
+ * @param array|string|null $opts
70
+ *
71
+ * @return Collection of Plans
72
+ */
73
+ public static function all($params = null, $opts = null)
74
+ {
75
+ return self::_all($params, $opts);
76
+ }
77
  }
lib/stripe/lib/Price.php DELETED
@@ -1,62 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * Prices define the unit cost, currency, and (optional) billing cycle for both
9
- * recurring and one-time purchases of products. <a
10
- * href="https://stripe.com/docs/api#products">Products</a> help you track
11
- * inventory or provisioning, and prices help you track payment terms. Different
12
- * physical goods or levels of service should be represented by products, and
13
- * pricing options should be represented by prices. This approach lets you change
14
- * prices without having to change your provisioning scheme.
15
- *
16
- * For example, you might have a single &quot;gold&quot; product that has prices
17
- * for $10/month, $100/year, and €9 once.
18
- *
19
- * Related guides: <a
20
- * href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up
21
- * a subscription</a>, <a
22
- * href="https://stripe.com/docs/billing/invoices/create">create an invoice</a>,
23
- * and more about <a href="https://stripe.com/docs/billing/prices-guide">products
24
- * and prices</a>.
25
- *
26
- * @property string $id Unique identifier for the object.
27
- * @property string $object String representing the object's type. Objects of the same type share the same value.
28
- * @property bool $active Whether the price can be used for new purchases.
29
- * @property string $billing_scheme Describes how to compute the price per period. Either <code>per_unit</code> or <code>tiered</code>. <code>per_unit</code> indicates that the fixed amount (specified in <code>unit_amount</code> or <code>unit_amount_decimal</code>) will be charged per unit in <code>quantity</code> (for prices with <code>usage_type=licensed</code>), or per unit of total usage (for prices with <code>usage_type=metered</code>). <code>tiered</code> indicates that the unit pricing will be computed using a tiering strategy as defined using the <code>tiers</code> and <code>tiers_mode</code> attributes.
30
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
31
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
32
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
33
- * @property null|string $lookup_key A lookup key used to retrieve prices dynamically from a static string.
34
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
35
- * @property null|string $nickname A brief description of the price, hidden from customers.
36
- * @property string|\Stripe\Product $product The ID of the product this price is associated with.
37
- * @property null|\Stripe\StripeObject $recurring The recurring components of a price such as <code>interval</code> and <code>usage_type</code>.
38
- * @property \Stripe\StripeObject[] $tiers Each element represents a pricing tier. This parameter requires <code>billing_scheme</code> to be set to <code>tiered</code>. See also the documentation for <code>billing_scheme</code>.
39
- * @property null|string $tiers_mode Defines if the tiering price should be <code>graduated</code> or <code>volume</code> based. In <code>volume</code>-based tiering, the maximum quantity within a period determines the per unit price. In <code>graduated</code> tiering, pricing can change as the quantity grows.
40
- * @property null|\Stripe\StripeObject $transform_quantity Apply a transformation to the reported usage or set quantity before computing the amount billed. Cannot be combined with <code>tiers</code>.
41
- * @property string $type One of <code>one_time</code> or <code>recurring</code> depending on whether the price is for a one-time purchase or a recurring (subscription) purchase.
42
- * @property null|int $unit_amount The unit amount in %s to be charged, represented as a whole integer if possible. Only set if <code>billing_scheme=per_unit</code>.
43
- * @property null|string $unit_amount_decimal The unit amount in %s to be charged, represented as a decimal string with at most 12 decimal places. Only set if <code>billing_scheme=per_unit</code>.
44
- */
45
- class Price extends ApiResource
46
- {
47
- const OBJECT_NAME = 'price';
48
-
49
- use ApiOperations\All;
50
- use ApiOperations\Create;
51
- use ApiOperations\Retrieve;
52
- use ApiOperations\Update;
53
-
54
- const BILLING_SCHEME_PER_UNIT = 'per_unit';
55
- const BILLING_SCHEME_TIERED = 'tiered';
56
-
57
- const TIERS_MODE_GRADUATED = 'graduated';
58
- const TIERS_MODE_VOLUME = 'volume';
59
-
60
- const TYPE_ONE_TIME = 'one_time';
61
- const TYPE_RECURRING = 'recurring';
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Product.php CHANGED
@@ -1,53 +1,77 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Products describe the specific goods or services you offer to your customers.
9
- * For example, you might offer a Standard and Premium version of your goods or
10
- * service; each version would be a separate Product. They can be used in
11
- * conjunction with <a href="https://stripe.com/docs/api#prices">Prices</a> to
12
- * configure pricing in Checkout and Subscriptions.
13
- *
14
- * Related guides: <a
15
- * href="https://stripe.com/docs/billing/subscriptions/set-up-subscription">Set up
16
- * a subscription</a> or accept <a
17
- * href="https://stripe.com/docs/payments/checkout/client#create-products">one-time
18
- * payments with Checkout</a> and more about <a
19
- * href="https://stripe.com/docs/billing/prices-guide">Products and Prices</a>
20
  *
21
- * @property string $id Unique identifier for the object.
22
- * @property string $object String representing the object's type. Objects of the same type share the same value.
23
- * @property bool $active Whether the product is currently available for purchase.
24
- * @property null|string[] $attributes A list of up to 5 attributes that each SKU can provide values for (e.g., <code>[&quot;color&quot;, &quot;size&quot;]</code>).
25
- * @property null|string $caption A short one-line description of the product, meant to be displayable to the customer. Only applicable to products of <code>type=good</code>.
26
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
27
- * @property string[] $deactivate_on An array of connect application identifiers that cannot purchase this product. Only applicable to products of <code>type=good</code>.
28
- * @property null|string $description The product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes.
29
- * @property string[] $images A list of up to 8 URLs of images for this product, meant to be displayable to the customer.
30
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
31
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
32
- * @property string $name The product's name, meant to be displayable to the customer. Whenever this product is sold via a subscription, name will show up on associated invoice line item descriptions.
33
- * @property null|\Stripe\StripeObject $package_dimensions The dimensions of this product for shipping purposes.
34
- * @property null|bool $shippable Whether this product is shipped (i.e., physical goods).
35
- * @property null|string $statement_descriptor Extra information about a product which will appear on your customer's credit card statement. In the case that multiple products are billed at once, the first statement descriptor will be used.
36
- * @property string $type The type of the product. The product is either of type <code>good</code>, which is eligible for use with Orders and SKUs, or <code>service</code>, which is eligible for use with Subscriptions and Plans.
37
- * @property null|string $unit_label A label that represents units of this product in Stripe and on customers’ receipts and invoices. When set, this will be included in associated invoice line item descriptions.
38
- * @property int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch.
39
- * @property null|string $url A URL of a publicly-accessible webpage for this product.
40
  */
41
  class Product extends ApiResource
42
  {
43
- const OBJECT_NAME = 'product';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
- use ApiOperations\All;
46
- use ApiOperations\Create;
47
- use ApiOperations\Delete;
48
- use ApiOperations\Retrieve;
49
- use ApiOperations\Update;
 
 
 
 
 
50
 
51
- const TYPE_GOOD = 'good';
52
- const TYPE_SERVICE = 'service';
 
 
 
 
 
 
 
 
53
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Product
 
 
 
 
 
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Product extends ApiResource
11
  {
12
+ /**
13
+ * @param string $id The ID of the Product to retrieve.
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return Product
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
+
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return Product The created Product.
28
+ */
29
+ public static function create($params = null, $opts = null)
30
+ {
31
+ return self::_create($params, $opts);
32
+ }
33
+
34
+ /**
35
+ * @param string $id The ID of the product to update.
36
+ * @param array|null $params
37
+ * @param array|string|null $options
38
+ *
39
+ * @return Product The updated product.
40
+ */
41
+ public static function update($id, $params = null, $options = null)
42
+ {
43
+ return self::_update($id, $params, $options);
44
+ }
45
+
46
+ /**
47
+ * @param array|string|null $opts
48
+ *
49
+ * @return Product The saved Product.
50
+ */
51
+ public function save($opts = null)
52
+ {
53
+ return $this->_save($opts);
54
+ }
55
 
56
+ /**
57
+ * @param array|null $params
58
+ * @param array|string|null $opts
59
+ *
60
+ * @return Collection of Products
61
+ */
62
+ public static function all($params = null, $opts = null)
63
+ {
64
+ return self::_all($params, $opts);
65
+ }
66
 
67
+ /**
68
+ * @param array|null $params
69
+ * @param array|string|null $opts
70
+ *
71
+ * @return Product The deleted product.
72
+ */
73
+ public function delete($params = null, $opts = null)
74
+ {
75
+ return $this->_delete($params, $opts);
76
+ }
77
  }
lib/stripe/lib/PromotionCode.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * A Promotion Code represents a customer-redeemable code for a coupon. It can be
9
- * used to create multiple codes for a single coupon.
10
- *
11
- * @property string $id Unique identifier for the object.
12
- * @property string $object String representing the object's type. Objects of the same type share the same value.
13
- * @property bool $active Whether the promotion code is currently active. A promotion code is only active if the coupon is also valid.
14
- * @property string $code The customer-facing code. Regardless of case, this code must be unique across all active promotion codes for each customer.
15
- * @property \Stripe\Coupon $coupon A coupon contains information about a percent-off or amount-off discount you might want to apply to a customer. Coupons may be applied to <a href="https://stripe.com/docs/api#invoices">invoices</a> or <a href="https://stripe.com/docs/api#create_order-coupon">orders</a>. Coupons do not work with conventional one-off <a href="https://stripe.com/docs/api#create_charge">charges</a>.
16
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
17
- * @property null|string|\Stripe\Customer $customer The customer that this promotion code can be used by.
18
- * @property null|int $expires_at Date at which the promotion code can no longer be redeemed.
19
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
20
- * @property null|int $max_redemptions Maximum number of times this promotion code can be redeemed.
21
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
22
- * @property \Stripe\StripeObject $restrictions
23
- * @property int $times_redeemed Number of times this promotion code has been used.
24
- */
25
- class PromotionCode extends ApiResource
26
- {
27
- const OBJECT_NAME = 'promotion_code';
28
-
29
- use ApiOperations\All;
30
- use ApiOperations\Create;
31
- use ApiOperations\Retrieve;
32
- use ApiOperations\Update;
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Radar/EarlyFraudWarning.php DELETED
@@ -1,38 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Radar;
6
-
7
- /**
8
- * An early fraud warning indicates that the card issuer has notified us that a
9
- * charge may be fraudulent.
10
- *
11
- * Related guide: <a
12
- * href="https://stripe.com/docs/disputes/measuring#early-fraud-warnings">Early
13
- * Fraud Warnings</a>.
14
- *
15
- * @property string $id Unique identifier for the object.
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property bool $actionable An EFW is actionable if it has not received a dispute and has not been fully refunded. You may wish to proactively refund a charge that receives an EFW, in order to avoid receiving a dispute later.
18
- * @property string|\Stripe\Charge $charge ID of the charge this early fraud warning is for, optionally expanded.
19
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
20
- * @property string $fraud_type The type of fraud labelled by the issuer. One of <code>card_never_received</code>, <code>fraudulent_card_application</code>, <code>made_with_counterfeit_card</code>, <code>made_with_lost_card</code>, <code>made_with_stolen_card</code>, <code>misc</code>, <code>unauthorized_use_of_card</code>.
21
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
22
- * @property string|\Stripe\PaymentIntent $payment_intent ID of the Payment Intent this early fraud warning is for, optionally expanded.
23
- */
24
- class EarlyFraudWarning extends \Stripe\ApiResource
25
- {
26
- const OBJECT_NAME = 'radar.early_fraud_warning';
27
-
28
- use \Stripe\ApiOperations\All;
29
- use \Stripe\ApiOperations\Retrieve;
30
-
31
- const FRAUD_TYPE_CARD_NEVER_RECEIVED = 'card_never_received';
32
- const FRAUD_TYPE_FRAUDULENT_CARD_APPLICATION = 'fraudulent_card_application';
33
- const FRAUD_TYPE_MADE_WITH_COUNTERFEIT_CARD = 'made_with_counterfeit_card';
34
- const FRAUD_TYPE_MADE_WITH_LOST_CARD = 'made_with_lost_card';
35
- const FRAUD_TYPE_MADE_WITH_STOLEN_CARD = 'made_with_stolen_card';
36
- const FRAUD_TYPE_MISC = 'misc';
37
- const FRAUD_TYPE_UNAUTHORIZED_USE_OF_CARD = 'unauthorized_use_of_card';
38
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Radar/ValueList.php DELETED
@@ -1,35 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Radar;
6
-
7
- /**
8
- * Value lists allow you to group values together which can then be referenced in
9
- * rules.
10
- *
11
- * Related guide: <a
12
- * href="https://stripe.com/docs/radar/lists#managing-list-items">Default Stripe
13
- * Lists</a>.
14
- *
15
- * @property string $id Unique identifier for the object.
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property string $alias The name of the value list for use in rules.
18
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
19
- * @property string $created_by The name or email address of the user who created this value list.
20
- * @property string $item_type The type of items in the value list. One of <code>card_fingerprint</code>, <code>card_bin</code>, <code>email</code>, <code>ip_address</code>, <code>country</code>, <code>string</code>, or <code>case_sensitive_string</code>.
21
- * @property \Stripe\Collection $list_items List of items contained within this value list.
22
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
23
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
24
- * @property string $name The name of the value list.
25
- */
26
- class ValueList extends \Stripe\ApiResource
27
- {
28
- const OBJECT_NAME = 'radar.value_list';
29
-
30
- use \Stripe\ApiOperations\All;
31
- use \Stripe\ApiOperations\Create;
32
- use \Stripe\ApiOperations\Delete;
33
- use \Stripe\ApiOperations\Retrieve;
34
- use \Stripe\ApiOperations\Update;
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Radar/ValueListItem.php DELETED
@@ -1,31 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Radar;
6
-
7
- /**
8
- * Value list items allow you to add specific values to a given Radar value list,
9
- * which can then be used in rules.
10
- *
11
- * Related guide: <a
12
- * href="https://stripe.com/docs/radar/lists#managing-list-items">Managing List
13
- * Items</a>.
14
- *
15
- * @property string $id Unique identifier for the object.
16
- * @property string $object String representing the object's type. Objects of the same type share the same value.
17
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
18
- * @property string $created_by The name or email address of the user who added this item to the value list.
19
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
20
- * @property string $value The value of the item.
21
- * @property string $value_list The identifier of the value list this item belongs to.
22
- */
23
- class ValueListItem extends \Stripe\ApiResource
24
- {
25
- const OBJECT_NAME = 'radar.value_list_item';
26
-
27
- use \Stripe\ApiOperations\All;
28
- use \Stripe\ApiOperations\Create;
29
- use \Stripe\ApiOperations\Delete;
30
- use \Stripe\ApiOperations\Retrieve;
31
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Recipient.php CHANGED
@@ -1,44 +1,92 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * With <code>Recipient</code> objects, you can transfer money from your Stripe
9
- * account to a third-party bank account or debit card. The API allows you to
10
- * create, delete, and update your recipients. You can retrieve individual
11
- * recipients as well as a list of all your recipients.
12
- *
13
- * <strong><code>Recipient</code> objects have been deprecated in favor of <a
14
- * href="https://stripe.com/docs/connect">Connect</a>, specifically Connect's much
15
- * more powerful <a href="https://stripe.com/docs/api#account">Account objects</a>.
16
- * Stripe accounts that don't already use recipients can no longer begin doing so.
17
- * Please use <code>Account</code> objects instead.</strong>
18
  *
19
- * @property string $id Unique identifier for the object.
20
- * @property string $object String representing the object's type. Objects of the same type share the same value.
21
- * @property null|\Stripe\BankAccount $active_account Hash describing the current account on the recipient, if there is one.
22
- * @property null|\Stripe\Collection $cards
23
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
24
- * @property null|string|\Stripe\Card $default_card The default card to use for creating transfers to this recipient.
25
- * @property null|string $description An arbitrary string attached to the object. Often useful for displaying to users.
26
- * @property null|string $email
27
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
28
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
29
- * @property null|string|\Stripe\Account $migrated_to The ID of the <a href="https://stripe.com/docs/connect/custom-accounts">Custom account</a> this recipient was migrated to. If set, the recipient can no longer be updated, nor can transfers be made to it: use the Custom account instead.
30
- * @property null|string $name Full, legal name of the recipient.
31
- * @property string|\Stripe\Account $rolled_back_from
32
- * @property string $type Type of the recipient, one of <code>individual</code> or <code>corporation</code>.
33
- * @property bool $verified Whether the recipient has been verified. This field is non-standard, and maybe removed in the future
34
  */
35
  class Recipient extends ApiResource
36
  {
37
- const OBJECT_NAME = 'recipient';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
- use ApiOperations\All;
40
- use ApiOperations\Create;
41
- use ApiOperations\Delete;
42
- use ApiOperations\Retrieve;
43
- use ApiOperations\Update;
 
 
 
 
 
 
 
 
 
44
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Recipient
 
 
 
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class Recipient extends ApiResource
11
  {
12
+ /**
13
+ * @param string $id The ID of the recipient to retrieve.
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return Recipient
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
+
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return Collection of Recipients
28
+ */
29
+ public static function all($params = null, $opts = null)
30
+ {
31
+ return self::_all($params, $opts);
32
+ }
33
+
34
+ /**
35
+ * @param array|null $params
36
+ * @param array|string|null $opts
37
+ *
38
+ * @return Recipient The created recipient.
39
+ */
40
+ public static function create($params = null, $opts = null)
41
+ {
42
+ return self::_create($params, $opts);
43
+ }
44
+
45
+ /**
46
+ * @param string $id The ID of the recipient to update.
47
+ * @param array|null $params
48
+ * @param array|string|null $options
49
+ *
50
+ * @return Recipient The updated recipient.
51
+ */
52
+ public static function update($id, $params = null, $options = null)
53
+ {
54
+ return self::_update($id, $params, $options);
55
+ }
56
+
57
+ /**
58
+ * @param array|string|null $opts
59
+ *
60
+ * @return Recipient The saved recipient.
61
+ */
62
+ public function save($opts = null)
63
+ {
64
+ return $this->_save($opts);
65
+ }
66
+
67
+ /**
68
+ * @param array|null $params
69
+ *
70
+ * @return Recipient The deleted recipient.
71
+ */
72
+ public function delete($params = null, $opts = null)
73
+ {
74
+ return $this->_delete($params, $opts);
75
+ }
76
+
77
 
78
+ /**
79
+ * @param array|null $params
80
+ *
81
+ * @return Collection of the Recipient's Transfers
82
+ */
83
+ public function transfers($params = null)
84
+ {
85
+ if ($params === null) {
86
+ $params = array();
87
+ }
88
+ $params['recipient'] = $this->id;
89
+ $transfers = Transfer::all($params, $this->_opts);
90
+ return $transfers;
91
+ }
92
  }
lib/stripe/lib/RecipientTransfer.php DELETED
@@ -1,36 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- /**
6
- * Class RecipientTransfer.
7
- *
8
- * @property string $id
9
- * @property string $object
10
- * @property int $amount
11
- * @property int $amount_reversed
12
- * @property string $balance_transaction
13
- * @property string $bank_account
14
- * @property string $card
15
- * @property int $created
16
- * @property string $currency
17
- * @property int $date
18
- * @property string $description
19
- * @property string $destination
20
- * @property string $failure_code
21
- * @property string $failure_message
22
- * @property bool $livemode
23
- * @property \Stripe\StripeObject $metadata
24
- * @property string $method
25
- * @property string $recipient
26
- * @property \Stripe\Collection $reversals
27
- * @property bool $reversed
28
- * @property string $source_type
29
- * @property string $statement_descriptor
30
- * @property string $status
31
- * @property string $type
32
- */
33
- class RecipientTransfer extends ApiResource
34
- {
35
- const OBJECT_NAME = 'recipient_transfer';
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Refund.php CHANGED
@@ -1,58 +1,79 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * <code>Refund</code> objects allow you to refund a charge that has previously
9
- * been created but not yet refunded. Funds will be refunded to the credit or debit
10
- * card that was originally charged.
11
  *
12
- * Related guide: <a href="https://stripe.com/docs/refunds">Refunds</a>.
 
 
 
 
 
 
 
 
 
 
13
  *
14
- * @property string $id Unique identifier for the object.
15
- * @property string $object String representing the object's type. Objects of the same type share the same value.
16
- * @property int $amount Amount, in %s.
17
- * @property null|string|\Stripe\BalanceTransaction $balance_transaction Balance transaction that describes the impact on your account balance.
18
- * @property null|string|\Stripe\Charge $charge ID of the charge that was refunded.
19
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
20
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
21
- * @property string $description An arbitrary string attached to the object. Often useful for displaying to users. (Available on non-card refunds only)
22
- * @property string|\Stripe\BalanceTransaction $failure_balance_transaction If the refund failed, this balance transaction describes the adjustment made on your account balance that reverses the initial balance transaction.
23
- * @property string $failure_reason If the refund failed, the reason for refund failure if known. Possible values are <code>lost_or_stolen_card</code>, <code>expired_or_canceled_card</code>, or <code>unknown</code>.
24
- * @property null|\Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
25
- * @property null|string|\Stripe\PaymentIntent $payment_intent ID of the PaymentIntent that was refunded.
26
- * @property null|string $reason Reason for the refund, either user-provided (<code>duplicate</code>, <code>fraudulent</code>, or <code>requested_by_customer</code>) or generated by Stripe internally (<code>expired_uncaptured_charge</code>).
27
- * @property null|string $receipt_number This is the transaction number that appears on email receipts sent for this refund.
28
- * @property null|string|\Stripe\TransferReversal $source_transfer_reversal The transfer reversal that is associated with the refund. Only present if the charge came from another Stripe account. See the Connect documentation for details.
29
- * @property null|string $status Status of the refund. For credit card refunds, this can be <code>pending</code>, <code>succeeded</code>, or <code>failed</code>. For other types of refunds, it can be <code>pending</code>, <code>succeeded</code>, <code>failed</code>, or <code>canceled</code>. Refer to our <a href="https://stripe.com/docs/refunds#failed-refunds">refunds</a> documentation for more details.
30
- * @property null|string|\Stripe\TransferReversal $transfer_reversal If the accompanying transfer was reversed, the transfer reversal object. Only applicable if the charge was created using the destination parameter.
31
  */
32
  class Refund extends ApiResource
33
  {
34
- const OBJECT_NAME = 'refund';
35
 
36
- use ApiOperations\All;
37
- use ApiOperations\Create;
38
- use ApiOperations\Retrieve;
39
- use ApiOperations\Update;
 
 
 
 
 
 
40
 
41
- const FAILURE_REASON_EXPIRED_OR_CANCELED_CARD = 'expired_or_canceled_card';
42
- const FAILURE_REASON_LOST_OR_STOLEN_CARD = 'lost_or_stolen_card';
43
- const FAILURE_REASON_UNKNOWN = 'unknown';
 
 
 
 
 
 
 
 
44
 
45
- const REASON_DUPLICATE = 'duplicate';
46
- const REASON_FRAUDULENT = 'fraudulent';
47
- const REASON_REQUESTED_BY_CUSTOMER = 'requested_by_customer';
 
 
 
 
 
 
 
48
 
49
- const STATUS_CANCELED = 'canceled';
50
- const STATUS_FAILED = 'failed';
51
- const STATUS_PENDING = 'pending';
52
- const STATUS_SUCCEEDED = 'succeeded';
 
 
 
 
 
 
53
 
54
  /**
55
- * @deprecated use FAILURE_REASON_EXPIRED_OR_CANCELED_CARD instead
 
 
56
  */
57
- const FAILURE_REASON = 'expired_or_canceled_card';
 
 
 
58
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class Refund
 
 
7
  *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property mixed $balance_transaction
12
+ * @property string $charge
13
+ * @property int $created
14
+ * @property string $currency
15
+ * @property mixed $metadata
16
+ * @property mixed $reason
17
+ * @property mixed $receipt_number
18
+ * @property string $status
19
  *
20
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  */
22
  class Refund extends ApiResource
23
  {
 
24
 
25
+ /**
26
+ * @param string $id The ID of the refund to retrieve.
27
+ * @param array|string|null $options
28
+ *
29
+ * @return Refund
30
+ */
31
+ public static function retrieve($id, $options = null)
32
+ {
33
+ return self::_retrieve($id, $options);
34
+ }
35
 
36
+ /**
37
+ * @param string $id The ID of the refund to update.
38
+ * @param array|null $params
39
+ * @param array|string|null $options
40
+ *
41
+ * @return Refund The updated refund.
42
+ */
43
+ public static function update($id, $params = null, $options = null)
44
+ {
45
+ return self::_update($id, $params, $options);
46
+ }
47
 
48
+ /**
49
+ * @param array|null $params
50
+ * @param array|string|null $options
51
+ *
52
+ * @return Collection of Refunds
53
+ */
54
+ public static function all($params = null, $options = null)
55
+ {
56
+ return self::_all($params, $options);
57
+ }
58
 
59
+ /**
60
+ * @param array|null $params
61
+ * @param array|string|null $options
62
+ *
63
+ * @return Refund The created refund.
64
+ */
65
+ public static function create($params = null, $options = null)
66
+ {
67
+ return self::_create($params, $options);
68
+ }
69
 
70
  /**
71
+ * @param array|string|null $opts
72
+ *
73
+ * @return Refund The saved refund.
74
  */
75
+ public function save($opts = null)
76
+ {
77
+ return $this->_save($opts);
78
+ }
79
  }
lib/stripe/lib/Reporting/ReportRun.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Reporting;
6
-
7
- /**
8
- * The Report Run object represents an instance of a report type generated with
9
- * specific run parameters. Once the object is created, Stripe begins processing
10
- * the report. When the report has finished running, it will give you a reference
11
- * to a file where you can retrieve your results. For an overview, see <a
12
- * href="https://stripe.com/docs/reporting/statements/api">API Access to
13
- * Reports</a>.
14
- *
15
- * Note that certain report types can only be run based on your live-mode data (not
16
- * test-mode data), and will error when queried without a <a
17
- * href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>.
18
- *
19
- * @property string $id Unique identifier for the object.
20
- * @property string $object String representing the object's type. Objects of the same type share the same value.
21
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
22
- * @property null|string $error If something should go wrong during the run, a message about the failure (populated when <code>status=failed</code>).
23
- * @property bool $livemode <code>true</code> if the report is run on live mode data and <code>false</code> if it is run on test mode data.
24
- * @property \Stripe\StripeObject $parameters
25
- * @property string $report_type The ID of the <a href="https://stripe.com/docs/reports/report-types">report type</a> to run, such as <code>&quot;balance.summary.1&quot;</code>.
26
- * @property null|\Stripe\File $result The file object representing the result of the report run (populated when <code>status=succeeded</code>).
27
- * @property string $status Status of this report run. This will be <code>pending</code> when the run is initially created. When the run finishes, this will be set to <code>succeeded</code> and the <code>result</code> field will be populated. Rarely, we may encounter an error, at which point this will be set to <code>failed</code> and the <code>error</code> field will be populated.
28
- * @property null|int $succeeded_at Timestamp at which this run successfully finished (populated when <code>status=succeeded</code>). Measured in seconds since the Unix epoch.
29
- */
30
- class ReportRun extends \Stripe\ApiResource
31
- {
32
- const OBJECT_NAME = 'reporting.report_run';
33
-
34
- use \Stripe\ApiOperations\All;
35
- use \Stripe\ApiOperations\Create;
36
- use \Stripe\ApiOperations\Retrieve;
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Reporting/ReportType.php DELETED
@@ -1,34 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Reporting;
6
-
7
- /**
8
- * The Report Type resource corresponds to a particular type of report, such as the
9
- * &quot;Activity summary&quot; or &quot;Itemized payouts&quot; reports. These
10
- * objects are identified by an ID belonging to a set of enumerated values. See <a
11
- * href="https://stripe.com/docs/reporting/statements/api">API Access to Reports
12
- * documentation</a> for those Report Type IDs, along with required and optional
13
- * parameters.
14
- *
15
- * Note that certain report types can only be run based on your live-mode data (not
16
- * test-mode data), and will error when queried without a <a
17
- * href="https://stripe.com/docs/keys#test-live-modes">live-mode API key</a>.
18
- *
19
- * @property string $id The <a href="https://stripe.com/docs/reporting/statements/api#available-report-types">ID of the Report Type</a>, such as <code>balance.summary.1</code>.
20
- * @property string $object String representing the object's type. Objects of the same type share the same value.
21
- * @property int $data_available_end Most recent time for which this Report Type is available. Measured in seconds since the Unix epoch.
22
- * @property int $data_available_start Earliest time for which this Report Type is available. Measured in seconds since the Unix epoch.
23
- * @property null|string[] $default_columns List of column names that are included by default when this Report Type gets run. (If the Report Type doesn't support the <code>columns</code> parameter, this will be null.)
24
- * @property string $name Human-readable name of the Report Type
25
- * @property int $updated When this Report Type was latest updated. Measured in seconds since the Unix epoch.
26
- * @property int $version Version of the Report Type. Different versions report with the same ID will have the same purpose, but may take different run parameters or have different result schemas.
27
- */
28
- class ReportType extends \Stripe\ApiResource
29
- {
30
- const OBJECT_NAME = 'reporting.report_type';
31
-
32
- use \Stripe\ApiOperations\All;
33
- use \Stripe\ApiOperations\Retrieve;
34
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/RequestTelemetry.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe;
4
-
5
- /**
6
- * Class RequestTelemetry.
7
- *
8
- * Tracks client request telemetry
9
- */
10
- class RequestTelemetry
11
- {
12
- public $requestId;
13
- public $requestDuration;
14
-
15
- /**
16
- * Initialize a new telemetry object.
17
- *
18
- * @param string $requestId the request's request ID
19
- * @param int $requestDuration the request's duration in milliseconds
20
- */
21
- public function __construct($requestId, $requestDuration)
22
- {
23
- $this->requestId = $requestId;
24
- $this->requestDuration = $requestDuration;
25
- }
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Review.php DELETED
@@ -1,66 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe;
6
-
7
- /**
8
- * Reviews can be used to supplement automated fraud detection with human
9
- * expertise.
10
- *
11
- * Learn more about <a href="/radar">Radar</a> and reviewing payments <a
12
- * href="https://stripe.com/docs/radar/reviews">here</a>.
13
- *
14
- * @property string $id Unique identifier for the object.
15
- * @property string $object String representing the object's type. Objects of the same type share the same value.
16
- * @property null|string $billing_zip The ZIP or postal code of the card used, if applicable.
17
- * @property null|string|\Stripe\Charge $charge The charge associated with this review.
18
- * @property null|string $closed_reason The reason the review was closed, or null if it has not yet been closed. One of <code>approved</code>, <code>refunded</code>, <code>refunded_as_fraud</code>, or <code>disputed</code>.
19
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
20
- * @property null|string $ip_address The IP address where the payment originated.
21
- * @property null|\Stripe\StripeObject $ip_address_location Information related to the location of the payment. Note that this information is an approximation and attempts to locate the nearest population center - it should not be used to determine a specific address.
22
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
23
- * @property bool $open If <code>true</code>, the review needs action.
24
- * @property string $opened_reason The reason the review was opened. One of <code>rule</code> or <code>manual</code>.
25
- * @property string|\Stripe\PaymentIntent $payment_intent The PaymentIntent ID associated with this review, if one exists.
26
- * @property string $reason The reason the review is currently open or closed. One of <code>rule</code>, <code>manual</code>, <code>approved</code>, <code>refunded</code>, <code>refunded_as_fraud</code>, or <code>disputed</code>.
27
- * @property null|\Stripe\StripeObject $session Information related to the browsing session of the user who initiated the payment.
28
- */
29
- class Review extends ApiResource
30
- {
31
- const OBJECT_NAME = 'review';
32
-
33
- use ApiOperations\All;
34
- use ApiOperations\Retrieve;
35
-
36
- /**
37
- * Possible string representations of the current, the opening or the closure reason of the review.
38
- * Not all of these enumeration apply to all of the ´reason´ fields. Please consult the Review object to
39
- * determine where these are apply.
40
- *
41
- * @see https://stripe.com/docs/api/radar/reviews/object
42
- */
43
- const REASON_APPROVED = 'approved';
44
- const REASON_DISPUTED = 'disputed';
45
- const REASON_MANUAL = 'manual';
46
- const REASON_REFUNDED = 'refunded';
47
- const REASON_REFUNDED_AS_FRAUD = 'refunded_as_fraud';
48
- const REASON_RULE = 'rule';
49
-
50
- /**
51
- * @param null|array $params
52
- * @param null|array|string $opts
53
- *
54
- * @throws \Stripe\Exception\ApiErrorException if the request fails
55
- *
56
- * @return Review the approved review
57
- */
58
- public function approve($params = null, $opts = null)
59
- {
60
- $url = $this->instanceUrl() . '/approve';
61
- list($response, $opts) = $this->_request('post', $url, $params, $opts);
62
- $this->refreshFrom($response, $opts);
63
-
64
- return $this;
65
- }
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/SKU.php CHANGED
@@ -1,44 +1,77 @@
1
  <?php
2
 
3
- // File generated from our OpenAPI spec
4
-
5
  namespace Stripe;
6
 
7
  /**
8
- * Stores representations of <a
9
- * href="http://en.wikipedia.org/wiki/Stock_keeping_unit">stock keeping units</a>.
10
- * SKUs describe specific product variations, taking into account any combination
11
- * of: attributes, currency, and cost. For example, a product may be a T-shirt,
12
- * whereas a specific SKU represents the <code>size: large</code>, <code>color:
13
- * red</code> version of that shirt.
14
- *
15
- * Can also be used to manage inventory.
16
  *
17
- * Related guide: <a href="https://stripe.com/docs/orders">Tax, Shipping, and
18
- * Inventory</a>.
19
- *
20
- * @property string $id Unique identifier for the object.
21
- * @property string $object String representing the object's type. Objects of the same type share the same value.
22
- * @property bool $active Whether the SKU is available for purchase.
23
- * @property \Stripe\StripeObject $attributes A dictionary of attributes and values for the attributes defined by the product. If, for example, a product's attributes are <code>[&quot;size&quot;, &quot;gender&quot;]</code>, a valid SKU has the following dictionary of attributes: <code>{&quot;size&quot;: &quot;Medium&quot;, &quot;gender&quot;: &quot;Unisex&quot;}</code>.
24
- * @property int $created Time at which the object was created. Measured in seconds since the Unix epoch.
25
- * @property string $currency Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>, in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
26
- * @property null|string $image The URL of an image for this SKU, meant to be displayable to the customer.
27
- * @property \Stripe\StripeObject $inventory
28
- * @property bool $livemode Has the value <code>true</code> if the object exists in live mode or the value <code>false</code> if the object exists in test mode.
29
- * @property \Stripe\StripeObject $metadata Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
30
- * @property null|\Stripe\StripeObject $package_dimensions The dimensions of this SKU for shipping purposes.
31
- * @property int $price The cost of the item as a positive integer in the smallest currency unit (that is, 100 cents to charge $1.00, or 100 to charge ¥100, Japanese Yen being a zero-decimal currency).
32
- * @property string|\Stripe\Product $product The ID of the product this SKU is associated with. The product must be currently active.
33
- * @property int $updated Time at which the object was last updated. Measured in seconds since the Unix epoch.
34
  */
35
  class SKU extends ApiResource
36
  {
37
- const OBJECT_NAME = 'sku';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
- use ApiOperations\All;
40
- use ApiOperations\Create;
41
- use ApiOperations\Delete;
42
- use ApiOperations\Retrieve;
43
- use ApiOperations\Update;
 
 
 
 
 
44
  }
1
  <?php
2
 
 
 
3
  namespace Stripe;
4
 
5
  /**
6
+ * Class SKU
 
 
 
 
 
 
 
7
  *
8
+ * @package Stripe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  */
10
  class SKU extends ApiResource
11
  {
12
+ /**
13
+ * @param string $id The ID of the SKU to retrieve.
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return SKU
17
+ */
18
+ public static function retrieve($id, $opts = null)
19
+ {
20
+ return self::_retrieve($id, $opts);
21
+ }
22
+
23
+ /**
24
+ * @param array|null $params
25
+ * @param array|string|null $opts
26
+ *
27
+ * @return SKU The created SKU.
28
+ */
29
+ public static function create($params = null, $opts = null)
30
+ {
31
+ return self::_create($params, $opts);
32
+ }
33
+
34
+ /**
35
+ * @param string $id The ID of the SKU to update.
36
+ * @param array|null $params
37
+ * @param array|string|null $options
38
+ *
39
+ * @return SKU The updated SKU.
40
+ */
41
+ public static function update($id, $params = null, $options = null)
42
+ {
43
+ return self::_update($id, $params, $options);
44
+ }
45
+
46
+ /**
47
+ * @param array|string|null $opts
48
+ *
49
+ * @return SKU The saved SKU.
50
+ */
51
+ public function save($opts = null)
52
+ {
53
+ return $this->_save($opts);
54
+ }
55
+
56
+ /**
57
+ * @param array|null $params
58
+ * @param array|string|null $opts
59
+ *
60
+ * @return Collection of SKUs
61
+ */
62
+ public static function all($params = null, $opts = null)
63
+ {
64
+ return self::_all($params, $opts);
65
+ }
66
 
67
+ /**
68
+ * @param array|null $params
69
+ * @param array|string|null $opts
70
+ *
71
+ * @return SKU The deleted sku.
72
+ */
73
+ public function delete($params = null, $opts = null)
74
+ {
75
+ return $this->_delete($params, $opts);
76
+ }
77
  }
lib/stripe/lib/Service/AbstractService.php DELETED
@@ -1,79 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Service;
4
-
5
- /**
6
- * Abstract base class for all services.
7
- */
8
- abstract class AbstractService
9
- {
10
- /**
11
- * @var \Stripe\StripeClientInterface
12
- */
13
- protected $client;
14
-
15
- /**
16
- * Initializes a new instance of the {@link AbstractService} class.
17
- *
18
- * @param \Stripe\StripeClientInterface $client
19
- */
20
- public function __construct($client)
21
- {
22
- $this->client = $client;
23
- }
24
-
25
- /**
26
- * Gets the client used by this service to send requests.
27
- *
28
- * @return \Stripe\StripeClientInterface
29
- */
30
- public function getClient()
31
- {
32
- return $this->client;
33
- }
34
-
35
- /**
36
- * Translate null values to empty strings. For service methods,
37
- * we interpret null as a request to unset the field, which
38
- * corresponds to sending an empty string for the field to the
39
- * API.
40
- *
41
- * @param null|array $params
42
- */
43
- private static function formatParams($params)
44
- {
45
- if (null === $params) {
46
- return null;
47
- }
48
- \array_walk_recursive($params, function (&$value, $key) {
49
- if (null === $value) {
50
- $value = '';
51
- }
52
- });
53
-
54
- return $params;
55
- }
56
-
57
- protected function request($method, $path, $params, $opts)
58
- {
59
- return $this->getClient()->request($method, $path, static::formatParams($params), $opts);
60
- }
61
-
62
- protected function requestCollection($method, $path, $params, $opts)
63
- {
64
- return $this->getClient()->requestCollection($method, $path, static::formatParams($params), $opts);
65
- }
66
-
67
- protected function buildPath($basePath, ...$ids)
68
- {
69
- foreach ($ids as $id) {
70
- if (null === $id || '' === \trim($id)) {
71
- $msg = 'The resource ID cannot be null or whitespace.';
72
-
73
- throw new \Stripe\Exception\InvalidArgumentException($msg);
74
- }
75
- }
76
-
77
- return \sprintf($basePath, ...\array_map('\urlencode', $ids));
78
- }
79
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Service/AbstractServiceFactory.php DELETED
@@ -1,59 +0,0 @@
1
- <?php
2
-
3
- namespace Stripe\Service;
4
-
5
- /**
6
- * Abstract base class for all service factories used to expose service
7
- * instances through {@link \Stripe\StripeClient}.
8
- *
9
- * Service factories serve two purposes:
10
- *
11
- * 1. Expose properties for all services through the `__get()` magic method.
12
- * 2. Lazily initialize each service instance the first time the property for
13
- * a given service is used.
14
- */
15
- abstract class AbstractServiceFactory
16
- {
17
- /** @var \Stripe\StripeClientInterface */
18
- private $client;
19
-
20
- /** @var array<string, AbstractService|AbstractServiceFactory> */
21
- private $services;
22
-
23
- /**
24
- * @param \Stripe\StripeClientInterface $client
25
- */
26
- public function __construct($client)
27
- {
28
- $this->client = $client;
29
- $this->services = [];
30
- }
31
-
32
- /**
33
- * @param string $name
34
- *
35
- * @return null|string
36
- */
37
- abstract protected function getServiceClass($name);
38
-
39
- /**
40
- * @param string $name
41
- *
42
- * @return null|AbstractService|AbstractServiceFactory
43
- */
44
- public function __get($name)
45
- {
46
- $serviceClass = $this->getServiceClass($name);
47
- if (null !== $serviceClass) {
48
- if (!\array_key_exists($name, $this->services)) {
49
- $this->services[$name] = new $serviceClass($this->client);
50
- }
51
-
52
- return $this->services[$name];
53
- }
54
-
55
- \trigger_error('Undefined property: ' . static::class . '::$' . $name);
56
-
57
- return null;
58
- }
59
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Service/AccountLinkService.php DELETED
@@ -1,25 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Service;
6
-
7
- class AccountLinkService extends \Stripe\Service\AbstractService
8
- {
9
- /**
10
- * Creates an AccountLink object that includes a single-use Stripe URL that the
11
- * platform can redirect their user to in order to take them through the Connect
12
- * Onboarding flow.
13
- *
14
- * @param null|array $params
15
- * @param null|array|\Stripe\Util\RequestOptions $opts
16
- *
17
- * @throws \Stripe\Exception\ApiErrorException if the request fails
18
- *
19
- * @return \Stripe\AccountLink
20
- */
21
- public function create($params = null, $opts = null)
22
- {
23
- return $this->request('post', '/v1/account_links', $params, $opts);
24
- }
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Service/AccountService.php DELETED
@@ -1,381 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Service;
6
-
7
- class AccountService extends \Stripe\Service\AbstractService
8
- {
9
- /**
10
- * Returns a list of accounts connected to your platform via <a
11
- * href="/docs/connect">Connect</a>. If you’re not a platform, the list is empty.
12
- *
13
- * @param null|array $params
14
- * @param null|array|\Stripe\Util\RequestOptions $opts
15
- *
16
- * @throws \Stripe\Exception\ApiErrorException if the request fails
17
- *
18
- * @return \Stripe\Collection
19
- */
20
- public function all($params = null, $opts = null)
21
- {
22
- return $this->requestCollection('get', '/v1/accounts', $params, $opts);
23
- }
24
-
25
- /**
26
- * Returns a list of capabilities associated with the account. The capabilities are
27
- * returned sorted by creation date, with the most recent capability appearing
28
- * first.
29
- *
30
- * @param string $parentId
31
- * @param null|array $params
32
- * @param null|array|\Stripe\Util\RequestOptions $opts
33
- *
34
- * @throws \Stripe\Exception\ApiErrorException if the request fails
35
- *
36
- * @return \Stripe\Collection
37
- */
38
- public function allCapabilities($parentId, $params = null, $opts = null)
39
- {
40
- return $this->requestCollection('get', $this->buildPath('/v1/accounts/%s/capabilities', $parentId), $params, $opts);
41
- }
42
-
43
- /**
44
- * List external accounts for an account.
45
- *
46
- * @param string $parentId
47
- * @param null|array $params
48
- * @param null|array|\Stripe\Util\RequestOptions $opts
49
- *
50
- * @throws \Stripe\Exception\ApiErrorException if the request fails
51
- *
52
- * @return \Stripe\Collection
53
- */
54
- public function allExternalAccounts($parentId, $params = null, $opts = null)
55
- {
56
- return $this->requestCollection('get', $this->buildPath('/v1/accounts/%s/external_accounts', $parentId), $params, $opts);
57
- }
58
-
59
- /**
60
- * Returns a list of people associated with the account’s legal entity. The people
61
- * are returned sorted by creation date, with the most recent people appearing
62
- * first.
63
- *
64
- * @param string $parentId
65
- * @param null|array $params
66
- * @param null|array|\Stripe\Util\RequestOptions $opts
67
- *
68
- * @throws \Stripe\Exception\ApiErrorException if the request fails
69
- *
70
- * @return \Stripe\Collection
71
- */
72
- public function allPersons($parentId, $params = null, $opts = null)
73
- {
74
- return $this->requestCollection('get', $this->buildPath('/v1/accounts/%s/persons', $parentId), $params, $opts);
75
- }
76
-
77
- /**
78
- * With <a href="/docs/connect">Connect</a>, you can create Stripe accounts for
79
- * your users. To do this, you’ll first need to <a
80
- * href="https://dashboard.stripe.com/account/applications/settings">register your
81
- * platform</a>.
82
- *
83
- * @param null|array $params
84
- * @param null|array|\Stripe\Util\RequestOptions $opts
85
- *
86
- * @throws \Stripe\Exception\ApiErrorException if the request fails
87
- *
88
- * @return \Stripe\Account
89
- */
90
- public function create($params = null, $opts = null)
91
- {
92
- return $this->request('post', '/v1/accounts', $params, $opts);
93
- }
94
-
95
- /**
96
- * Create an external account for a given account.
97
- *
98
- * @param string $parentId
99
- * @param null|array $params
100
- * @param null|array|\Stripe\Util\RequestOptions $opts
101
- *
102
- * @throws \Stripe\Exception\ApiErrorException if the request fails
103
- *
104
- * @return \Stripe\BankAccount|\Stripe\Card
105
- */
106
- public function createExternalAccount($parentId, $params = null, $opts = null)
107
- {
108
- return $this->request('post', $this->buildPath('/v1/accounts/%s/external_accounts', $parentId), $params, $opts);
109
- }
110
-
111
- /**
112
- * Creates a single-use login link for an Express account to access their Stripe
113
- * dashboard.
114
- *
115
- * <strong>You may only create login links for <a
116
- * href="/docs/connect/express-accounts">Express accounts</a> connected to your
117
- * platform</strong>.
118
- *
119
- * @param string $parentId
120
- * @param null|array $params
121
- * @param null|array|\Stripe\Util\RequestOptions $opts
122
- *
123
- * @throws \Stripe\Exception\ApiErrorException if the request fails
124
- *
125
- * @return \Stripe\LoginLink
126
- */
127
- public function createLoginLink($parentId, $params = null, $opts = null)
128
- {
129
- return $this->request('post', $this->buildPath('/v1/accounts/%s/login_links', $parentId), $params, $opts);
130
- }
131
-
132
- /**
133
- * Creates a new person.
134
- *
135
- * @param string $parentId
136
- * @param null|array $params
137
- * @param null|array|\Stripe\Util\RequestOptions $opts
138
- *
139
- * @throws \Stripe\Exception\ApiErrorException if the request fails
140
- *
141
- * @return \Stripe\Person
142
- */
143
- public function createPerson($parentId, $params = null, $opts = null)
144
- {
145
- return $this->request('post', $this->buildPath('/v1/accounts/%s/persons', $parentId), $params, $opts);
146
- }
147
-
148
- /**
149
- * With <a href="/docs/connect">Connect</a>, you can delete Custom or Express
150
- * accounts you manage.
151
- *
152
- * Accounts created using test-mode keys can be deleted at any time. Accounts
153
- * created using live-mode keys can only be deleted once all balances are zero.
154
- *
155
- * If you want to delete your own account, use the <a
156
- * href="https://dashboard.stripe.com/account">account information tab in your
157
- * account settings</a> instead.
158
- *
159
- * @param string $id
160
- * @param null|array $params
161
- * @param null|array|\Stripe\Util\RequestOptions $opts
162
- *
163
- * @throws \Stripe\Exception\ApiErrorException if the request fails
164
- *
165
- * @return \Stripe\Account
166
- */
167
- public function delete($id, $params = null, $opts = null)
168
- {
169
- return $this->request('delete', $this->buildPath('/v1/accounts/%s', $id), $params, $opts);
170
- }
171
-
172
- /**
173
- * Delete a specified external account for a given account.
174
- *
175
- * @param string $parentId
176
- * @param string $id
177
- * @param null|array $params
178
- * @param null|array|\Stripe\Util\RequestOptions $opts
179
- *
180
- * @throws \Stripe\Exception\ApiErrorException if the request fails
181
- *
182
- * @return \Stripe\BankAccount|\Stripe\Card
183
- */
184
- public function deleteExternalAccount($parentId, $id, $params = null, $opts = null)
185
- {
186
- return $this->request('delete', $this->buildPath('/v1/accounts/%s/external_accounts/%s', $parentId, $id), $params, $opts);
187
- }
188
-
189
- /**
190
- * Deletes an existing person’s relationship to the account’s legal entity. Any
191
- * person with a relationship for an account can be deleted through the API, except
192
- * if the person is the <code>account_opener</code>. If your integration is using
193
- * the <code>executive</code> parameter, you cannot delete the only verified
194
- * <code>executive</code> on file.
195
- *
196
- * @param string $parentId
197
- * @param string $id
198
- * @param null|array $params
199
- * @param null|array|\Stripe\Util\RequestOptions $opts
200
- *
201
- * @throws \Stripe\Exception\ApiErrorException if the request fails
202
- *
203
- * @return \Stripe\Person
204
- */
205
- public function deletePerson($parentId, $id, $params = null, $opts = null)
206
- {
207
- return $this->request('delete', $this->buildPath('/v1/accounts/%s/persons/%s', $parentId, $id), $params, $opts);
208
- }
209
-
210
- /**
211
- * With <a href="/docs/connect">Connect</a>, you may flag accounts as suspicious.
212
- *
213
- * Test-mode Custom and Express accounts can be rejected at any time. Accounts
214
- * created using live-mode keys may only be rejected once all balances are zero.
215
- *
216
- * @param string $id
217
- * @param null|array $params
218
- * @param null|array|\Stripe\Util\RequestOptions $opts
219
- *
220
- * @throws \Stripe\Exception\ApiErrorException if the request fails
221
- *
222
- * @return \Stripe\Account
223
- */
224
- public function reject($id, $params = null, $opts = null)
225
- {
226
- return $this->request('post', $this->buildPath('/v1/accounts/%s/reject', $id), $params, $opts);
227
- }
228
-
229
- /**
230
- * Retrieves information about the specified Account Capability.
231
- *
232
- * @param string $parentId
233
- * @param string $id
234
- * @param null|array $params
235
- * @param null|array|\Stripe\Util\RequestOptions $opts
236
- *
237
- * @throws \Stripe\Exception\ApiErrorException if the request fails
238
- *
239
- * @return \Stripe\Capability
240
- */
241
- public function retrieveCapability($parentId, $id, $params = null, $opts = null)
242
- {
243
- return $this->request('get', $this->buildPath('/v1/accounts/%s/capabilities/%s', $parentId, $id), $params, $opts);
244
- }
245
-
246
- /**
247
- * Retrieve a specified external account for a given account.
248
- *
249
- * @param string $parentId
250
- * @param string $id
251
- * @param null|array $params
252
- * @param null|array|\Stripe\Util\RequestOptions $opts
253
- *
254
- * @throws \Stripe\Exception\ApiErrorException if the request fails
255
- *
256
- * @return \Stripe\BankAccount|\Stripe\Card
257
- */
258
- public function retrieveExternalAccount($parentId, $id, $params = null, $opts = null)
259
- {
260
- return $this->request('get', $this->buildPath('/v1/accounts/%s/external_accounts/%s', $parentId, $id), $params, $opts);
261
- }
262
-
263
- /**
264
- * Retrieves an existing person.
265
- *
266
- * @param string $parentId
267
- * @param string $id
268
- * @param null|array $params
269
- * @param null|array|\Stripe\Util\RequestOptions $opts
270
- *
271
- * @throws \Stripe\Exception\ApiErrorException if the request fails
272
- *
273
- * @return \Stripe\Person
274
- */
275
- public function retrievePerson($parentId, $id, $params = null, $opts = null)
276
- {
277
- return $this->request('get', $this->buildPath('/v1/accounts/%s/persons/%s', $parentId, $id), $params, $opts);
278
- }
279
-
280
- /**
281
- * Updates a connected <a href="/docs/connect/accounts">Express or Custom
282
- * account</a> by setting the values of the parameters passed. Any parameters not
283
- * provided are left unchanged. Most parameters can be changed only for Custom
284
- * accounts. (These are marked <strong>Custom Only</strong> below.) Parameters
285
- * marked <strong>Custom and Express</strong> are supported by both account types.
286
- *
287
- * To update your own account, use the <a
288
- * href="https://dashboard.stripe.com/account">Dashboard</a>. Refer to our <a
289
- * href="/docs/connect/updating-accounts">Connect</a> documentation to learn more
290
- * about updating accounts.
291
- *
292
- * @param string $id
293
- * @param null|array $params
294
- * @param null|array|\Stripe\Util\RequestOptions $opts
295
- *
296
- * @throws \Stripe\Exception\ApiErrorException if the request fails
297
- *
298
- * @return \Stripe\Account
299
- */
300
- public function update($id, $params = null, $opts = null)
301
- {
302
- return $this->request('post', $this->buildPath('/v1/accounts/%s', $id), $params, $opts);
303
- }
304
-
305
- /**
306
- * Updates an existing Account Capability.
307
- *
308
- * @param string $parentId
309
- * @param string $id
310
- * @param null|array $params
311
- * @param null|array|\Stripe\Util\RequestOptions $opts
312
- *
313
- * @throws \Stripe\Exception\ApiErrorException if the request fails
314
- *
315
- * @return \Stripe\Capability
316
- */
317
- public function updateCapability($parentId, $id, $params = null, $opts = null)
318
- {
319
- return $this->request('post', $this->buildPath('/v1/accounts/%s/capabilities/%s', $parentId, $id), $params, $opts);
320
- }
321
-
322
- /**
323
- * Updates the metadata, account holder name, and account holder type of a bank
324
- * account belonging to a <a href="/docs/connect/custom-accounts">Custom
325
- * account</a>, and optionally sets it as the default for its currency. Other bank
326
- * account details are not editable by design.
327
- *
328
- * You can re-enable a disabled bank account by performing an update call without
329
- * providing any arguments or changes.
330
- *
331
- * @param string $parentId
332
- * @param string $id
333
- * @param null|array $params
334
- * @param null|array|\Stripe\Util\RequestOptions $opts
335
- *
336
- * @throws \Stripe\Exception\ApiErrorException if the request fails
337
- *
338
- * @return \Stripe\BankAccount|\Stripe\Card
339
- */
340
- public function updateExternalAccount($parentId, $id, $params = null, $opts = null)
341
- {
342
- return $this->request('post', $this->buildPath('/v1/accounts/%s/external_accounts/%s', $parentId, $id), $params, $opts);
343
- }
344
-
345
- /**
346
- * Updates an existing person.
347
- *
348
- * @param string $parentId
349
- * @param string $id
350
- * @param null|array $params
351
- * @param null|array|\Stripe\Util\RequestOptions $opts
352
- *
353
- * @throws \Stripe\Exception\ApiErrorException if the request fails
354
- *
355
- * @return \Stripe\Person
356
- */
357
- public function updatePerson($parentId, $id, $params = null, $opts = null)
358
- {
359
- return $this->request('post', $this->buildPath('/v1/accounts/%s/persons/%s', $parentId, $id), $params, $opts);
360
- }
361
-
362
- /**
363
- * Retrieves the details of an account.
364
- *
365
- * @param null|string $id
366
- * @param null|array $params
367
- * @param null|array|StripeUtilRequestOptions $opts
368
- *
369
- * @throws \Stripe\Exception\ApiErrorException if the request fails
370
- *
371
- * @return \Stripe\Account
372
- */
373
- public function retrieve($id = null, $params = null, $opts = null)
374
- {
375
- if (null === $id) {
376
- return $this->request('get', '/v1/account', $params, $opts);
377
- }
378
-
379
- return $this->request('get', $this->buildPath('/v1/accounts/%s', $id), $params, $opts);
380
- }
381
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Service/ApplePayDomainService.php DELETED
@@ -1,70 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Service;
6
-
7
- class ApplePayDomainService extends \Stripe\Service\AbstractService
8
- {
9
- /**
10
- * List apple pay domains.
11
- *
12
- * @param null|array $params
13
- * @param null|array|\Stripe\Util\RequestOptions $opts
14
- *
15
- * @throws \Stripe\Exception\ApiErrorException if the request fails
16
- *
17
- * @return \Stripe\Collection
18
- */
19
- public function all($params = null, $opts = null)
20
- {
21
- return $this->requestCollection('get', '/v1/apple_pay/domains', $params, $opts);
22
- }
23
-
24
- /**
25
- * Create an apple pay domain.
26
- *
27
- * @param null|array $params
28
- * @param null|array|\Stripe\Util\RequestOptions $opts
29
- *
30
- * @throws \Stripe\Exception\ApiErrorException if the request fails
31
- *
32
- * @return \Stripe\ApplePayDomain
33
- */
34
- public function create($params = null, $opts = null)
35
- {
36
- return $this->request('post', '/v1/apple_pay/domains', $params, $opts);
37
- }
38
-
39
- /**
40
- * Delete an apple pay domain.
41
- *
42
- * @param string $id
43
- * @param null|array $params
44
- * @param null|array|\Stripe\Util\RequestOptions $opts
45
- *
46
- * @throws \Stripe\Exception\ApiErrorException if the request fails
47
- *
48
- * @return \Stripe\ApplePayDomain
49
- */
50
- public function delete($id, $params = null, $opts = null)
51
- {
52
- return $this->request('delete', $this->buildPath('/v1/apple_pay/domains/%s', $id), $params, $opts);
53
- }
54
-
55
- /**
56
- * Retrieve an apple pay domain.
57
- *
58
- * @param string $id
59
- * @param null|array $params
60
- * @param null|array|\Stripe\Util\RequestOptions $opts
61
- *
62
- * @throws \Stripe\Exception\ApiErrorException if the request fails
63
- *
64
- * @return \Stripe\ApplePayDomain
65
- */
66
- public function retrieve($id, $params = null, $opts = null)
67
- {
68
- return $this->request('get', $this->buildPath('/v1/apple_pay/domains/%s', $id), $params, $opts);
69
- }
70
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/stripe/lib/Service/ApplicationFeeService.php DELETED
@@ -1,125 +0,0 @@
1
- <?php
2
-
3
- // File generated from our OpenAPI spec
4
-
5
- namespace Stripe\Service;
6
-
7
- class ApplicationFeeService extends \Stripe\Service\AbstractService
8
- {
9
- /**
10
- * Returns a list of application fees you’ve previously collected. The application
11
- * fees are returned in sorted order, with the most recent fees appearing first.
12
- *
13
- * @param null|array $params
14
- * @param null|array|\Stripe\Util\RequestOptions $opts
15
- *
16
- * @throws \Stripe\Exception\ApiErrorException if the request fails
17
- *
18
- * @return \Stripe\Collection
19
- */
20
- public function all($params = null, $opts = null)
21
- {
22
- return $this->requestCollection('get', '/v1/application_fees', $params, $opts);
23
- }
24
-
25
- /**
26
- * You can see a list of the refunds belonging to a specific application fee. Note
27
- * that the 10 most recent refunds are always available by default on the
28
- * application fee object. If you need more than those 10, you can use this API
29
- * method and the <code>limit</code> and <code>starting_after</code> parameters to
30
- * page through additional refunds.
31
- *
32
- * @param string $parentId
33
- * @param null|array $params
34
- * @param null|array|\St