Recaptcha.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. /**
  3. * Class NF_Fields_Recaptcha
  4. */
  5. class NF_Fields_Recaptcha extends NF_Abstracts_Field
  6. {
  7. protected $_name = 'recaptcha';
  8. protected $_type = 'recaptcha';
  9. protected $_section = 'misc';
  10. protected $_icon = 'filter';
  11. protected $_templates = 'recaptcha';
  12. protected $_test_value = '';
  13. protected $_settings = array( 'label', 'classes' );
  14. public function __construct()
  15. {
  16. parent::__construct();
  17. $this->_nicename = __( 'Recaptcha', 'ninja-forms' );
  18. $this->_settings[ 'size '] = array(
  19. 'name' => 'size',
  20. 'type' => 'select',
  21. 'label' => __( 'Visibility', 'ninja-forms' ),
  22. 'options' => array(
  23. array(
  24. 'label' => __( 'Visible', 'ninja-forms' ),
  25. 'value' => 'visible'
  26. ),
  27. array(
  28. 'label' => __( 'Invisible', 'ninja-forms' ),
  29. 'value' => 'invisible'
  30. ),
  31. ),
  32. 'width' => 'one-half',
  33. 'group' => 'primary',
  34. 'value' => 'visible',
  35. 'help' => __( 'Select whether to display a "I\'m not a robot" field or to detect if the user is a robot in the background.', 'ninja-forms' ),
  36. );
  37. add_filter( 'nf_sub_hidden_field_types', array( $this, 'hide_field_type' ) );
  38. }
  39. public function localize_settings( $settings, $form ) {
  40. $settings['site_key'] = Ninja_Forms()->get_setting( 'recaptcha_site_key' );
  41. $settings['theme'] = Ninja_Forms()->get_setting( 'recaptcha_theme' );
  42. $settings['theme'] = ( $settings['theme'] ) ? $settings['theme'] : 'light';
  43. $settings['lang'] = Ninja_Forms()->get_setting( 'recaptcha_lang' );
  44. return $settings;
  45. }
  46. public function validate( $field, $data ) {
  47. if ( empty( $field['value'] ) ) {
  48. return __( 'Please complete the recaptcha', 'ninja-forms' );
  49. }
  50. $secret_key = Ninja_Forms()->get_setting( 'recaptcha_secret_key' );
  51. $url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $secret_key . '&response='.sanitize_text_field( $field['value'] );
  52. $resp = wp_remote_get( esc_url_raw( $url ) );
  53. if ( !is_wp_error( $resp ) ) {
  54. $body = wp_remote_retrieve_body( $resp );
  55. $response = json_decode( $body );
  56. if ( $response->success === false ) {
  57. if ( !empty( $response->{'error-codes'} ) && $response->{'error-codes'} != 'missing-input-response' ) {
  58. return array( __( 'Please make sure you have entered your Site & Secret keys correctly', 'ninja-forms' ) );
  59. }else {
  60. return array( __( 'Captcha mismatch. Please enter the correct value in captcha field', 'ninja-forms' ) );
  61. }
  62. }
  63. }
  64. }
  65. function hide_field_type( $field_types )
  66. {
  67. $field_types[] = $this->_name;
  68. return $field_types;
  69. }
  70. }