credit-card.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. /*
  3. * Function to register a new field for user's country
  4. *
  5. * @since 2.2.37
  6. * @returns void
  7. */
  8. function ninja_forms_register_field_credit_card(){
  9. $reg_field = apply_filters( 'ninja_forms_enable_credit_card_field', false );
  10. $args = array(
  11. 'name' => __( 'Credit Card', 'ninja-forms' ),
  12. 'sidebar' => '',
  13. 'display_function' => 'ninja_forms_field_credit_card_display',
  14. 'group' => 'standard_fields',
  15. 'edit_conditional' => true,
  16. 'edit_custom_class' => false,
  17. 'edit_options' => array(),
  18. //'post_process' => 'ninja_forms_field_credit_card_test',
  19. 'save_sub' => false,
  20. 'process_field' => false,
  21. 'edit_label' => false,
  22. 'edit_label_pos' => false,
  23. 'edit_options' => array(
  24. array(
  25. 'type' => 'hidden',
  26. 'name' => 'payment_field_group',
  27. 'default' => 1,
  28. ),
  29. array(
  30. 'type' => 'text',
  31. 'name' => 'cc_number_label',
  32. 'label' => __( 'Card Number Label', 'ninja-forms' ),
  33. 'default' => __( 'Card Number', 'ninja-forms' ),
  34. 'width' => 'wide',
  35. 'class' => 'widefat',
  36. ),
  37. array(
  38. 'type' => 'text',
  39. 'name' => 'cc_number_desc',
  40. 'label' => __( 'Card Number Description', 'ninja-forms' ),
  41. 'default' => __( 'The (typically) 16 digits on the front of your credit card.', 'ninja-forms' ),
  42. 'width' => 'wide',
  43. 'class' => 'widefat',
  44. ),
  45. array(
  46. 'type' => 'text',
  47. 'name' => 'cc_cvc_label',
  48. 'label' => __( 'Card CVC Label', 'ninja-forms' ),
  49. 'default' => __( 'CVC', 'ninja-forms' ),
  50. 'width' => 'wide',
  51. 'class' => 'widefat',
  52. ),
  53. array(
  54. 'type' => 'text',
  55. 'name' => 'cc_cvc_desc',
  56. 'label' => __( 'Card CVC Description', 'ninja-forms' ),
  57. 'default' => __( 'The 3 digit (back) or 4 digit (front) value on your card.', 'ninja-forms' ),
  58. 'width' => 'wide',
  59. 'class' => 'widefat',
  60. ),
  61. array(
  62. 'type' => 'text',
  63. 'name' => 'cc_name_label',
  64. 'label' => __( 'Card Name Label', 'ninja-forms' ),
  65. 'default' => __( 'Name on the card', 'ninja-forms' ),
  66. 'width' => 'wide',
  67. 'class' => 'widefat',
  68. ),
  69. array(
  70. 'type' => 'text',
  71. 'name' => 'cc_name_desc',
  72. 'label' => __( 'Card Name Description', 'ninja-forms' ),
  73. 'default' => __( 'The name printed on the front of your credit card.', 'ninja-forms' ),
  74. 'width' => 'wide',
  75. 'class' => 'widefat',
  76. ),
  77. array(
  78. 'type' => 'text',
  79. 'name' => 'cc_exp_month_label',
  80. 'label' => __( 'Card Expiry Month Label', 'ninja-forms' ),
  81. 'default' => __( 'Expiration month (MM)', 'ninja-forms' ),
  82. 'width' => 'wide',
  83. 'class' => 'widefat',
  84. ),
  85. array(
  86. 'type' => 'text',
  87. 'name' => 'cc_exp_month_desc',
  88. 'label' => __( 'Card Expiry Month Description', 'ninja-forms' ),
  89. 'default' => __( 'The month your credit card expires, typically on the front of the card.', 'ninja-forms' ),
  90. 'width' => 'wide',
  91. 'class' => 'widefat',
  92. ),
  93. array(
  94. 'type' => 'text',
  95. 'name' => 'cc_exp_year_label',
  96. 'label' => __( 'Card Expiry Year Label', 'ninja-forms' ),
  97. 'default' => __( 'Expiration year (YYYY)', 'ninja-forms' ),
  98. 'width' => 'wide',
  99. 'class' => 'widefat',
  100. ),
  101. array(
  102. 'type' => 'text',
  103. 'name' => 'cc_exp_year_desc',
  104. 'label' => __( 'Card Expiry Year Description', 'ninja-forms' ),
  105. 'default' => __( 'The year your credit card expires, typically on the front of the card.', 'ninja-forms' ),
  106. 'width' => 'wide',
  107. 'class' => 'widefat',
  108. ),
  109. ),
  110. );
  111. if ( $reg_field ) {
  112. ninja_forms_register_field( '_credit_card', $args );
  113. }
  114. }
  115. add_action( 'init', 'ninja_forms_register_field_credit_card' );
  116. /*
  117. * Function to display our credit_card field on the front-end.
  118. *
  119. * @since 2.2.37
  120. * @returns void
  121. */
  122. function ninja_forms_field_credit_card_display( $field_id, $data, $form_id = '' ) {
  123. global $ninja_forms_processing;
  124. if( isset( $data['default_value'] ) ) {
  125. $default_value = $data['default_value'];
  126. }else{
  127. $default_value = '';
  128. }
  129. if ( isset ( $data['label_pos'] ) ) {
  130. $label_pos = $data['label_pos'];
  131. } else {
  132. $label_pos = 'above';
  133. }
  134. $cc_number_label = isset ( $data['cc_number_label'] ) ? $data['cc_number_label'] : __( 'Card Number', 'ninja-forms' );
  135. $cc_number_desc = isset ( $data['cc_number_desc'] ) ? $data['cc_number_desc'] : __( 'The (typically) 16 digits on the front of your credit card.', 'ninja-forms' );
  136. $cc_cvc_label = isset ( $data['cc_cvc_label'] ) ? $data['cc_cvc_label'] : __( 'CVC', 'ninja-forms' );
  137. $cc_cvc_desc = isset ( $data['cc_cvc_desc'] ) ? $data['cc_cvc_desc'] : __( 'The 3 digit (back) or 4 digit (front) value on your card.', 'ninja-forms' );
  138. $cc_name_label = isset ( $data['cc_name_label'] ) ? $data['cc_name_label'] : __( 'Name on the card', 'ninja-forms' );
  139. $cc_name_desc = isset ( $data['cc_name_desc'] ) ? $data['cc_name_desc'] : __( 'The name printed on the front of your credit card.', 'ninja-forms' );
  140. $cc_exp_month_label = isset ( $data['cc_exp_month_label'] ) ? $data['cc_exp_month_label'] : __( 'Expiration month (MM)', 'ninja-forms' );
  141. $cc_exp_month_desc = isset ( $data['cc_exp_month_desc'] ) ? $data['cc_exp_month_desc'] : __( 'The month your credit card expires, typically on the front of the card.', 'ninja-forms' );
  142. $cc_exp_year_label = isset ( $data['cc_exp_year_label'] ) ? $data['cc_exp_year_label'] : __( 'Expiration year (YYYY)', 'ninja-forms' );
  143. $cc_exp_year_desc = isset ( $data['cc_exp_year_desc'] ) ? $data['cc_exp_year_desc'] : __( 'The year your credit card expires, typically on the front of the card.', 'ninja-forms' );
  144. if ( isset ( $ninja_forms_processing ) ){
  145. $name = $ninja_forms_processing->get_extra_value( '_credit_card_name' );
  146. $expiry_month = $ninja_forms_processing->get_extra_value( '_credit_card_expiry_month' );
  147. $expiry_year = $ninja_forms_processing->get_extra_value( '_credit_card_expiry_year' );
  148. $card_number_errors = $ninja_forms_processing->get_errors_by_location( 'credit_card_number' );
  149. $card_cvc_errors = $ninja_forms_processing->get_errors_by_location( 'credit_card_cvc' );
  150. $card_name_errors = $ninja_forms_processing->get_errors_by_location( 'credit_card_name' );
  151. $card_month_errors = $ninja_forms_processing->get_errors_by_location( 'credit_card_month' );
  152. $card_year_errors = $ninja_forms_processing->get_errors_by_location( 'credit_card_year' );
  153. } else {
  154. $name = '';
  155. $expiry_month = '';
  156. $expiry_year = '';
  157. $card_number_errors = '';
  158. $card_cvc_errors = '';
  159. $card_name_errors = '';
  160. $card_month_errors = '';
  161. $card_year_errors = '';
  162. }
  163. $field_class = ninja_forms_get_field_class( $field_id, $form_id );
  164. $post_field = apply_filters( 'ninja_forms_post_credit_card_field', false );
  165. $desc_pos = apply_filters( 'ninja_forms_credit_card_field_desc_pos', 'after_label' );
  166. $hide_cc_fields = apply_filters( 'ninja_forms_hide_cc_field', array() );
  167. if( !in_array( 'number' , $hide_cc_fields ) ){
  168. ?>
  169. <div class="ninja-forms-credit-card-number label-<?php echo $label_pos; ?> field-wrap"> <!-- Open Credit Card Wrap -->
  170. <?php
  171. if ( $desc_pos == 'before_label' or $desc_pos == 'before_everything' ) {
  172. ?>
  173. <span><?php echo apply_filters( 'ninja_forms_credit_card_number_desc', $cc_number_desc ); ?></span>
  174. <?php
  175. }
  176. if ( $label_pos == 'above' or $label_pos == 'left' ) {
  177. ?>
  178. <label><?php echo apply_filters( 'ninja_forms_credit_card_cvc_label', $cc_number_label ); ?></label>
  179. <?php
  180. }
  181. if ( $desc_pos == 'after_label' ) {
  182. ?>
  183. <span><?php echo apply_filters( 'ninja_forms_credit_card_number_desc', $cc_number_desc ); ?></span>
  184. <?php
  185. }
  186. ?>
  187. <input type="text" <?php if ( $post_field ){ echo 'name="_credit_card_number"'; } ?> class="ninja-forms-field card-number">
  188. <?php
  189. if ( $label_pos == 'below' or $label_pos == 'right' ) {
  190. ?>
  191. <label><?php echo apply_filters( 'ninja_forms_credit_card_cvc_label', $cc_number_label ); ?></label>
  192. <?php
  193. }
  194. if ( $desc_pos == 'after_everything' ) {
  195. ?>
  196. <span><?php echo apply_filters( 'ninja_forms_credit_card_number_desc', $cc_number_desc ); ?></span>
  197. <?php
  198. }
  199. ?>
  200. </div>
  201. <div>
  202. <div id="ninja_forms_field_credit_card_number_error" class="ninja-forms-credit-card-number-error ninja-forms-field-error">
  203. <?php
  204. if ( $card_number_errors ) {
  205. if( is_array( $card_number_errors ) ) {
  206. foreach ( $card_number_errors as $error ) {
  207. echo '<p>'.$error['msg'].'</p>';
  208. }
  209. }
  210. }
  211. ?>
  212. </div>
  213. </div>
  214. <?php
  215. }
  216. if( !in_array( 'cvc' , $hide_cc_fields ) ){
  217. ?>
  218. <div class="ninja-forms-credit-card-cvc label-<?php echo $label_pos; ?> field-wrap"> <!-- [open_cvc_wrap] -->
  219. <?php
  220. if ( $desc_pos == 'before_label' or $desc_pos == 'before_everything' ) {
  221. ?>
  222. <span><?php echo apply_filters( 'ninja_forms_credit_card_cvc_desc', $cc_cvc_desc ); ?></span>
  223. <?php
  224. }
  225. if ( $label_pos == 'above' or $label_pos == 'left' ) {
  226. ?>
  227. <label><?php echo apply_filters( 'ninja_forms_credit_card_cvc_label', $cc_cvc_label ); ?></label>
  228. <?php
  229. }
  230. if ( $desc_pos == 'after_label' ) {
  231. ?>
  232. <span><?php echo apply_filters( 'ninja_forms_credit_card_cvc_desc', $cc_cvc_desc ); ?></span>
  233. <?php
  234. }
  235. ?>
  236. <input type="text" <?php if ( $post_field ){ echo 'name="_credit_card_cvc"'; } ?> class="ninja-forms-field card-cvc">
  237. <?php
  238. if ( $label_pos == 'below' or $label_pos == 'right' ) {
  239. ?>
  240. <label><?php echo apply_filters( 'ninja_forms_credit_card_cvc_label', $cc_cvc_label ); ?></label>
  241. <?php
  242. }
  243. if ( $desc_pos == 'after_everything' ) {
  244. ?>
  245. <span><?php echo apply_filters( 'ninja_forms_credit_card_cvc_desc', $cc_cvc_desc ); ?></span>
  246. <?php
  247. }
  248. ?>
  249. </div>
  250. <div>
  251. <div class="ninja-forms-credit-card-cvc-error ninja-forms-field-error">
  252. <?php
  253. if ( $card_cvc_errors ) {
  254. if( is_array( $card_cvc_errors ) ) {
  255. foreach ( $card_cvc_errors as $error ) {
  256. echo '<p>'.$error['msg'].'</p>';
  257. }
  258. }
  259. }
  260. ?>
  261. </div>
  262. </div>
  263. <?php
  264. }
  265. if( !in_array( 'name' , $hide_cc_fields ) ){
  266. ?>
  267. <div class="ninja-forms-credit-card-name label-<?php echo $label_pos; ?> field-wrap"> <!-- [open_nameoncard_wrap] -->
  268. <?php
  269. if ( $desc_pos == 'before_label' or $desc_pos == 'before_everything' ) {
  270. ?>
  271. <span><?php echo apply_filters( 'ninja_forms_credit_card_name_desc', $cc_name_desc ); ?></span>
  272. <?php
  273. }
  274. if ( $label_pos == 'above' or $label_pos == 'left' ) {
  275. ?>
  276. <label><?php echo apply_filters( 'ninja_forms_credit_card_name_label', $cc_name_label ); ?></label>
  277. <?php
  278. }
  279. if ( $desc_pos == 'after_label' ) {
  280. ?>
  281. <span><?php echo apply_filters( 'ninja_forms_credit_card_name_desc', $cc_name_desc ); ?></span>
  282. <?php
  283. }
  284. ?>
  285. <input type="text" <?php if ( $post_field ){ echo 'name="_credit_card_name"'; } ?> class="ninja-forms-field card-name" value="<?php echo $name;?>">
  286. <?php
  287. if ( $label_pos == 'below' or $label_pos == 'right' ) {
  288. ?>
  289. <label><?php echo apply_filters( 'ninja_forms_credit_card_name_label', $cc_name_label ); ?></label>
  290. <?php
  291. }
  292. if ( $desc_pos == 'after_everything' ) {
  293. ?>
  294. <span><?php echo apply_filters( 'ninja_forms_credit_card_name_desc', $cc_name_desc ); ?></span>
  295. <?php
  296. }
  297. ?>
  298. </div>
  299. <div>
  300. <div class="ninja-forms-credit-card-name-error ninja-forms-field-error">
  301. <?php
  302. if ( $card_name_errors ) {
  303. if( is_array( $card_name_errors ) ) {
  304. foreach ( $card_name_errors as $error ) {
  305. echo '<p>'.$error['msg'].'</p>';
  306. }
  307. }
  308. }
  309. ?>
  310. </div>
  311. </div>
  312. <?php
  313. }
  314. if( !in_array( 'expires' , $hide_cc_fields ) ){
  315. ?>
  316. <div class="ninja-forms-credit-card-exp-month label-<?php echo $label_pos; ?> field-wrap"> <!-- [open_expires_wrap] -->
  317. <?php
  318. if ( $desc_pos == 'before_label' or $desc_pos == 'before_everything' ) {
  319. ?>
  320. <span><?php echo apply_filters( 'ninja_forms_credit_card_exp_month_desc', $cc_exp_month_desc ); ?></span>
  321. <?php
  322. }
  323. if ( $label_pos == 'above' or $label_pos == 'left' ) {
  324. ?>
  325. <label><?php echo apply_filters( 'ninja_forms_credit_card_exp_month_label', $cc_exp_month_label ); ?></label>
  326. <?php
  327. }
  328. if ( $desc_pos == 'after_label' ) {
  329. ?>
  330. <span><?php echo apply_filters( 'ninja_forms_credit_card_exp_month_desc', $cc_exp_month_desc ); ?></span>
  331. <?php
  332. }
  333. ?>
  334. <input type="text" <?php if ( $post_field ){ echo 'name="_credit_card_expires_month"'; } ?> class="ninja-forms-field ninja-forms-mask card-expiry-month" data-mask="99" value="<?php echo $expiry_month;?>">
  335. <?php
  336. if ( $label_pos == 'below' or $label_pos == 'right' ) {
  337. ?>
  338. <label><?php echo apply_filters( 'ninja_forms_credit_card_exp_month_label', $cc_exp_month_label ); ?></label>
  339. <?php
  340. }
  341. if ( $desc_pos == 'after_everything' ) {
  342. ?>
  343. <span><?php echo apply_filters( 'ninja_forms_credit_card_exp_month_desc', $cc_exp_month_desc ); ?></span>
  344. <?php
  345. }
  346. ?>
  347. </div>
  348. <div>
  349. <div class="ninja-forms-credit-card-exp-month-error ninja-forms-field-error">
  350. <?php
  351. if ( $card_month_errors ) {
  352. if( is_array( $card_month_errors ) ) {
  353. foreach ( $card_month_errors as $error ) {
  354. echo '<p>'.$error['msg'].'</p>';
  355. }
  356. }
  357. }
  358. ?>
  359. </div> <!-- [close_exp_month_wrap] -->
  360. </div>
  361. <div class="ninja-forms-credit-card-exp-year label-<?php echo $label_pos; ?> field-wrap"> <!-- [open_exp_year_wrap] -->
  362. <?php
  363. if ( $desc_pos == 'before_label' or $desc_pos == 'before_everything' ) {
  364. ?>
  365. <span><?php echo apply_filters( 'ninja_forms_credit_card_exp_year_desc', $cc_exp_year_desc ); ?></span>
  366. <?php
  367. }
  368. if ( $label_pos == 'above' or $label_pos == 'left' ) {
  369. ?>
  370. <label><?php echo apply_filters( 'ninja_forms_credit_card_exp_year_label', $cc_exp_year_label ); ?></label>
  371. <?php
  372. }
  373. if ( $desc_pos == 'after_label' ) {
  374. ?>
  375. <span><?php echo apply_filters( 'ninja_forms_credit_card_exp_year_desc', $cc_exp_year_desc ); ?></span>
  376. <?php
  377. }
  378. ?>
  379. <input type="text" <?php if ( $post_field ){ echo 'name="_credit_card_expires_year"'; } ?> class="ninja-forms-field ninja-forms-mask card-expiry-year" data-mask="9999" value="<?php echo $expiry_year;?>">
  380. <?php
  381. if ( $label_pos == 'below' or $label_pos == 'right' ) {
  382. ?>
  383. <label><?php echo apply_filters( 'ninja_forms_credit_card_exp_year_label', $cc_exp_year_label ); ?></label>
  384. <?php
  385. }
  386. if ( $desc_pos == 'after_everything' ) {
  387. ?>
  388. <span><?php echo apply_filters( 'ninja_forms_credit_card_exp_year_desc', $cc_exp_year_desc ); ?></span>
  389. <?php
  390. }
  391. ?>
  392. </div>
  393. <div>
  394. <div class="ninja-forms-credit-card-exp-year-error ninja-forms-field-error">
  395. <?php
  396. if ( $card_year_errors ) {
  397. if( is_array( $card_year_errors ) ) {
  398. foreach ( $card_year_errors as $error ) {
  399. echo '<p>'.$error['msg'].'</p>';
  400. }
  401. }
  402. }
  403. ?>
  404. </div> <!-- [close_exp_month_wrap] -->
  405. </div>
  406. <?php
  407. }
  408. }
  409. /*
  410. *
  411. * Function that filters the display script field data so that the mask is included for the expires field.
  412. *
  413. * @since 2.2.37
  414. * @returns array $data
  415. */
  416. function ninja_forms_field_credit_card_expire_filter( $data, $field_id ){
  417. $field = ninja_forms_get_field_by_id( $field_id );
  418. if ( $field['type'] == '_credit_card' ) {
  419. $data['mask'] = '99/9999';
  420. }
  421. return $data;
  422. }
  423. add_action( 'ninja_forms_display_script_field_data', 'ninja_forms_field_credit_card_expire_filter', 10, 2 );