spam.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. function ninja_forms_register_field_spam(){
  3. $args = array(
  4. 'name' => __( 'Anti-Spam', 'ninja-forms' ),
  5. 'edit_function' => '',
  6. 'display_function' => 'ninja_forms_field_spam_display',
  7. 'group' => 'standard_fields',
  8. 'edit_label' => false,
  9. 'edit_label_pos' => true,
  10. 'edit_req' => false,
  11. 'edit_custom_class' => true,
  12. 'edit_help' => true,
  13. 'edit_meta' => false,
  14. 'sidebar' => 'template_fields',
  15. 'display_label' => true,
  16. 'edit_conditional' => true,
  17. 'conditional' => array(
  18. 'value' => array(
  19. 'type' => 'text',
  20. ),
  21. ),
  22. 'pre_process' => 'ninja_forms_field_spam_pre_process',
  23. 'process_field' => false,
  24. 'limit' => 1,
  25. 'edit_options' => array(
  26. array(
  27. 'name' => 'label',
  28. 'type' => 'text',
  29. 'label' => __( 'Spam Question', 'ninja-forms' ),
  30. 'width' => 'wide',
  31. 'class' => 'widefat',
  32. ),
  33. array(
  34. 'name' => 'spam_answer',
  35. 'type' => 'text',
  36. 'label' => __( 'Spam Answer', 'ninja-forms' ),
  37. 'width' => 'wide',
  38. 'class' => 'widefat',
  39. ),
  40. ),
  41. 'req' => true,
  42. );
  43. ninja_forms_register_field('_spam', $args);
  44. }
  45. add_action('init', 'ninja_forms_register_field_spam');
  46. function ninja_forms_field_spam_edit( $field_id, $data ){
  47. if(isset($data['label'])){
  48. $question = $data['label'];
  49. }else{
  50. $question = '';
  51. }
  52. if(isset($data['answer'])){
  53. $answer = $data['answer'];
  54. }else{
  55. $answer = '';
  56. }
  57. ?>
  58. <input type="hidden" name="ninja_forms_field_<?php echo $field_id;?>[req]" value="1">
  59. <p class="description description-wide">
  60. <label for="">
  61. <?php _e( 'Spam Question' , 'ninja-forms'); ?><br />
  62. <input type="text" class="widefat code ninja-forms-field-label" name="ninja_forms_field_<?php echo $field_id;?>[label]" id="ninja_forms_field_<?php echo $field_id;?>_label" value="<?php echo stripslashes( $question );?>">
  63. </label>
  64. </p>
  65. <p class="description description-wide">
  66. <label for="">
  67. <?php _e( 'Spam Answer', 'ninja-forms'); ?><br />
  68. <input type="text" class="widefat" name="ninja_forms_field_<?php echo $field_id;?>[answer]" id="" value="<?php echo $answer;?>">
  69. </label>
  70. </p>
  71. <?php
  72. }
  73. function ninja_forms_field_spam_display( $field_id, $data, $form_id = '' ){
  74. if(isset($data['default_value'])){
  75. $default_value = $data['default_value'];
  76. }else{
  77. $default_value = '';
  78. }
  79. if(isset($data['show_field'])){
  80. $show_field = $data['show_field'];
  81. }else{
  82. $show_field = true;
  83. }
  84. $field_class = ninja_forms_get_field_class( $field_id, $form_id );
  85. if(isset($data['label_pos'])){
  86. $label_pos = $data['label_pos'];
  87. }else{
  88. $label_pos = "left";
  89. }
  90. if(isset($data['label'])){
  91. $label = $data['label'];
  92. }else{
  93. $label = '';
  94. }
  95. if($label_pos == 'inside'){
  96. $default_value = $label;
  97. }
  98. ?>
  99. <input id="ninja_forms_field_<?php echo $field_id;?>" name="ninja_forms_field_<?php echo $field_id;?>" type="text" class="<?php echo $field_class;?>" value="<?php echo $default_value;?>" rel="<?php echo $field_id;?>" />
  100. <?php
  101. }
  102. function ninja_forms_field_spam_pre_process( $field_id, $user_value ){
  103. global $ninja_forms_processing;
  104. $plugin_settings = nf_get_settings();
  105. if(isset($plugin_settings['spam_error'])){
  106. $spam_error = __( $plugin_settings['spam_error'], 'ninja-forms' );
  107. }
  108. $field_row = ninja_forms_get_field_by_id($field_id);
  109. $field_data = $field_row['data'];
  110. $spam_answer = $field_data['spam_answer'];
  111. $form_row = ninja_forms_get_form_by_field_id($field_id);
  112. $form_id = $form_row['id'];
  113. if( $ninja_forms_processing->get_action() != 'save' AND $ninja_forms_processing->get_action() != 'mp_save' AND !isset($_POST['_wp_login']) AND $user_value != $spam_answer){
  114. if( is_object( $ninja_forms_processing)){
  115. if( $user_value != '' ){
  116. $ninja_forms_processing->add_error('spam-general', $spam_error, 'general');
  117. $ninja_forms_processing->add_error('spam-'.$field_id, $spam_error, $field_id);
  118. }
  119. }
  120. }
  121. }