PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.8.0
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.8.0
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / includes / Shortcodes / FeedbackForm.php

FeedbackForm.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.8.0, at includes/Shortcodes/FeedbackForm.php

147 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace WPDeveloper\BetterDocs\Shortcodes;
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit;
6 }
7
8
9 use WPDeveloper\BetterDocs\Core\Query;
10 use WPDeveloper\BetterDocs\Utils\Helper;
11 use WPDeveloper\BetterDocs\Core\Settings;
12 use WPDeveloper\BetterDocs\Core\Shortcode;
13 use WPDeveloper\BetterDocs\Admin\Customizer\Defaults;
14
15 class FeedbackForm extends Shortcode {
16 protected $html_attributes = [];
17
18 public function __construct( Settings $settings, Query $query, Helper $helper, Defaults $defaults ) {
19 parent::__construct( $settings, $query, $helper, $defaults );
20
21 add_action( 'wp_ajax_nopriv_betterdocs_feedback_form_submit', [$this, 'submit'] );
22 add_action( 'wp_ajax_betterdocs_feedback_form_submit', [$this, 'submit'] );
23 }
24
25 public function get_style_depends() {
26 return ['betterdocs-feedback-form'];
27 }
28
29 public function get_script_depends() {
30 return ['betterdocs'];
31 }
32
33 public function submit() {
34 if ( ! betterdocs()->settings->get( 'email_feedback' ) ) {
35 wp_send_json_error( __( 'Email feedback is disabled.', 'betterdocs' ) );
36 }
37
38 check_ajax_referer( 'betterdocs_submit_data', 'security' );
39
40 $postID = isset( $_POST['postID'] ) ? absint( wp_unslash( $_POST['postID'] ) ) : 0;
41 $article = get_the_title( $postID );
42 $name = isset( $_POST['message_name'] ) ? sanitize_text_field( wp_unslash( $_POST['message_name'] ) ) : '';
43 $email = isset( $_POST['message_email'] ) ? sanitize_email( wp_unslash( $_POST['message_email'] ) ) : '';
44 $message_text = isset( $_POST['message_text'] ) ? sanitize_textarea_field( wp_unslash( $_POST['message_text'] ) ) : '';
45
46 $_errors = [];
47
48 //validate presence of name
49 if ( empty( $name ) ) {
50 $_errors['name'] = __( 'Please enter your name.', 'betterdocs' );
51 }
52
53 //validate email
54 if ( empty( $email ) || ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
55 $_errors['email'] = __( 'Enter a valid email address.', 'betterdocs' );
56 }
57
58 //validate presence of message
59 if ( empty( $message_text ) ) {
60 $_errors['message'] = __( 'Please write your message.', 'betterdocs' );
61 }
62
63 if ( ! empty( $_errors ) ) {
64 $_errors = [
65 'success' => false,
66 'message' => $_errors
67 ];
68
69 wp_send_json_error( $_errors );
70 }
71
72 //php mailer variables
73 $to = $this->settings->get( 'email_address', get_option( 'admin_email' ) );
74 $subject = wp_sprintf( '%s %s', __( 'Feedback message from', 'betterdocs' ), get_bloginfo( 'name' ) );
75
76 $headers = [
77 'Content-Type: text/html; charset=UTF-8',
78 "From: $name <{$email}>",
79 "Reply-To: $email"
80 ];
81
82 $_response = [
83 'success' => true
84 ];
85
86 ob_start();
87 betterdocs()->views->get(
88 'admin/email/feedback-email',
89 [
90 'name' => $name,
91 'article' => $article,
92 'message_text' => $message_text
93 ]
94 );
95 $message = ob_get_clean();
96
97 // @todo: check strip tags: wp_mail( $to, $subject, strip_tags( $message ), $headers )
98
99 if ( wp_mail( $to, $subject, $message, $headers ) ) {
100 $_response['message'] = __( 'Thanks! Your message has been sent.', 'betterdocs' );
101 } else {
102 $_response['success'] = false;
103 $_response['message'] = __( 'Message was not sent. Try Again.', 'betterdocs' );
104 }
105
106 wp_send_json_success( $_response );
107 }
108
109 public function get_name() {
110 return 'betterdocs_feedback_form';
111 }
112
113 /**
114 * Summary of default_attributes
115 * @return array
116 */
117 public function default_attributes() {
118 return [
119 'button_text' => __( 'Send', 'betterdocs' ),
120 'feedback_form_name_label_text' => __( 'Name:', 'betterdocs' ),
121 'feedback_form_email_label_text' => __( 'Email:', 'betterdocs' ),
122 'feedback_form_message_label_text' => __( 'Message:', 'betterdocs' )
123 ];
124 }
125
126 public function render( $atts, $content = null ) {
127 $this->views( 'shortcodes/feedback-form' );
128 }
129
130 public function view_params() {
131 $params = $this->attributes;
132 $name = '';
133 $email = '';
134
135 if ( is_user_logged_in() ) {
136 $userdata = get_userdata( get_current_user_id() );
137 $name = $userdata->first_name . ' ' . $userdata->last_name;
138 $email = $userdata->user_email;
139 }
140
141 $params['name'] = $name;
142 $params['email'] = $email;
143
144 return $params;
145 }
146 }
147