textarea.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php if ( ! defined( 'ABSPATH' ) ) exit;
  2. function ninja_forms_register_field_textarea(){
  3. $args = array(
  4. 'name' => __( 'Textarea', 'ninja-forms' ),
  5. 'sidebar' => 'template_fields',
  6. 'edit_function' => '',
  7. 'edit_options' => array(
  8. array(
  9. 'type' => 'textarea',
  10. 'name' => 'default_value',
  11. 'label' => __( 'Default Value', 'ninja-forms' ),
  12. 'width' => 'wide',
  13. 'class' => 'widefat',
  14. ),
  15. array(
  16. 'type' => 'checkbox',
  17. 'name' => 'textarea_rte',
  18. 'label' => __( 'Show Rich Text Editor', 'ninja-forms' ),
  19. ),
  20. array(
  21. 'type' => 'checkbox',
  22. 'name' => 'textarea_media',
  23. 'label' => __( 'Show Media Upload Button', 'ninja-forms' ),
  24. ),
  25. array(
  26. 'type' => 'checkbox',
  27. 'name' => 'disable_rte_mobile',
  28. 'label' => __( 'Disable Rich Text Editor on Mobile', 'ninja-forms' ),
  29. ),
  30. ),
  31. 'display_function' => 'ninja_forms_field_textarea_display',
  32. 'save_function' => '',
  33. 'group' => 'standard_fields',
  34. 'edit_label' => true,
  35. 'edit_label_pos' => true,
  36. 'edit_req' => true,
  37. 'edit_custom_class' => true,
  38. 'edit_help' => true,
  39. 'edit_desc' => true,
  40. 'edit_meta' => false,
  41. 'edit_conditional' => true,
  42. 'conditional' => array(
  43. 'value' => array(
  44. 'type' => 'textarea',
  45. ),
  46. ),
  47. 'edit_sub_value' => 'nf_field_textarea_edit_sub_value',
  48. 'pre_process' => 'nf_field_textarea_pre_process',
  49. );
  50. ninja_forms_register_field('_textarea', $args);
  51. }
  52. add_action('init', 'ninja_forms_register_field_textarea');
  53. function ninja_forms_field_textarea_display( $field_id, $data, $form_id = '' ){
  54. if(isset($data['default_value'])){
  55. $default_value = $data['default_value'];
  56. }else{
  57. $default_value = '';
  58. }
  59. $default_value = htmlspecialchars_decode( $default_value );
  60. if(isset($data['textarea_rte'])){
  61. $textarea_rte = $data['textarea_rte'];
  62. }else{
  63. $textarea_rte = 0;
  64. }
  65. if( isset ( $data['textarea_media'] ) AND $data['textarea_media'] == 1 ){
  66. $textarea_media = true;
  67. }else{
  68. $textarea_media = false;
  69. }
  70. if ( isset( $data['disable_rte_mobile'] ) AND 1 == $data['disable_rte_mobile'] AND wp_is_mobile() ) {
  71. $textarea_rte = 0;
  72. }
  73. if( isset( $data['input_limit'] ) ){
  74. $input_limit = $data['input_limit'];
  75. }else{
  76. $input_limit = '';
  77. }
  78. if( isset( $data['input_limit_type'] ) ){
  79. $input_limit_type = $data['input_limit_type'];
  80. }else{
  81. $input_limit_type = '';
  82. }
  83. if( isset( $data['input_limit_msg'] ) ){
  84. $input_limit_msg = $data['input_limit_msg'];
  85. }else{
  86. $input_limit_msg = '';
  87. }
  88. $field_class = ninja_forms_get_field_class( $field_id, $form_id );
  89. $default_value = filter_var( $default_value, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES );
  90. $default_value = filter_var( $default_value, FILTER_SANITIZE_SPECIAL_CHARS );
  91. if($textarea_rte == 1){
  92. $settings = array( 'media_buttons' => $textarea_media );
  93. $args = apply_filters( 'ninja_forms_textarea_rte', $settings );
  94. wp_editor( $default_value, 'ninja_forms_field_'.$field_id, $args );
  95. }else{
  96. ?>
  97. <textarea name="ninja_forms_field_<?php echo $field_id;?>" id="ninja_forms_field_<?php echo $field_id;?>" class="<?php echo $field_class;?>" rel="<?php echo $field_id;?>" data-input-limit="<?php echo $input_limit;?>" data-input-limit-type="<?php echo $input_limit_type;?>" data-input-limit-msg="<?php echo $input_limit_msg;?>"><?php echo $default_value;?></textarea>
  98. <?php
  99. }
  100. }
  101. /**
  102. * Edit submission value output function
  103. *
  104. * @since 2.7
  105. * @return void
  106. */
  107. function nf_field_textarea_edit_sub_value( $field_id, $user_value ) {
  108. ?>
  109. <textarea name="fields[<?php echo $field_id; ?>]"><?php echo $user_value; ?></textarea>
  110. <?php
  111. }
  112. /**
  113. * Make sure we strip nested script tags from our values
  114. *
  115. * @since 2.9.19
  116. * @return void
  117. */
  118. function nf_field_textarea_pre_process( $field_id, $user_value ) {
  119. global $ninja_forms_processing;
  120. if( is_string( $user_value ) ) {
  121. while (false !== strpos($user_value, '&lt;script')
  122. || false !== strpos($user_value, '<script')
  123. || false !== strpos($user_value, '&lt;/script')
  124. || false !== strpos($user_value, '</script')
  125. || false !== strpos($user_value, '<textarea')
  126. || false !== strpos($user_value, '&lt;textarea')
  127. || false !== strpos($user_value, '</textarea')
  128. || false !== strpos($user_value, '&lt;/textarea')
  129. ) {
  130. $user_value = str_replace('&lt;script', '', $user_value);
  131. $user_value = str_replace('<script', '', $user_value);
  132. $user_value = str_replace('&lt;/script', '', $user_value);
  133. $user_value = str_replace('</script', '', $user_value);
  134. $user_value = str_replace('&lt;textarea', '', $user_value);
  135. $user_value = str_replace('<textarea', '', $user_value);
  136. $user_value = str_replace('&lt;/textarea', '', $user_value);
  137. $user_value = str_replace('</textarea', '', $user_value);
  138. }
  139. }
  140. $ninja_forms_processing->update_field_value( $field_id, $user_value );
  141. }