PasswordConfirm.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. /**
  3. * Class NF_Fields_PasswordConfirm
  4. */
  5. class NF_Fields_PasswordConfirm extends NF_Fields_Password
  6. {
  7. protected $_name = 'passwordconfirm';
  8. protected $_type = 'passwordconfirm';
  9. protected $_nicename = 'Password Confirm';
  10. protected $_section = '';
  11. protected $_error_message = '';
  12. protected $_settings = array( 'confirm_field' );
  13. public function __construct()
  14. {
  15. parent::__construct();
  16. $this->_nicename = __( 'Password Confirm', 'ninja-forms' );
  17. $this->_settings[ 'confirm_field' ][ 'value' ] = __( 'password', 'ninja-forms' );
  18. $this->_settings[ 'confirm_field' ][ 'field_types' ] = array( 'password' );
  19. $this->_settings[ 'confirm_field' ][ 'field_value_format' ] = 'key';
  20. add_filter( 'nf_sub_hidden_field_types', array( $this, 'hide_field_type' ) );
  21. }
  22. function hide_field_type( $field_types )
  23. {
  24. $field_types[] = $this->_name;
  25. return $field_types;
  26. }
  27. public function validate( $field, $data )
  28. {
  29. $errors = parent::validate( $field, $data );
  30. $password_fields = $this->get_password_fields( $data );
  31. if( ! is_array( $password_fields ) || empty( $password_fields ) ) return $errors;
  32. foreach( $password_fields as $password_field ){
  33. if( $this->is_matching_values( $field, $password_field ) ) continue;
  34. $errors[] = $this->get_error_message();
  35. }
  36. return $errors;
  37. }
  38. private function get_password_fields( $data )
  39. {
  40. $password_fields = array();
  41. foreach( $data[ 'fields' ] as $field ){
  42. if( 'password' != $field[ 'type' ] ) continue;
  43. $password_fields[] = $field;
  44. }
  45. return $password_fields;
  46. }
  47. private function is_matching_values( $a, $b )
  48. {
  49. return $a[ 'value' ] === $b[ 'value' ];
  50. }
  51. private function get_error_message()
  52. {
  53. if( $this->_error_message ) return $this->_error_message;
  54. $error_message = __( 'Passwords do not match', 'ninja-forms' );
  55. $error_message = apply_filters( 'ninja_forms_password_confirm_mismatch', $error_message );
  56. return $this->_error_message = $error_message;
  57. }
  58. }