HEX
Server: nginx/1.18.0
System: Linux iZj6c1ieg2jrpk1z5tzi19Z 6.3.9-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 21 22:18:40 EDT 2023 x86_64
User: www (1001)
PHP: 8.2.4
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.cytocare.cn/wp-content/plugins/gwolle-gb/frontend/gb-form-posthandling.php
<?php


if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly



/*
 * Handle the $_POST for the Frontend on a new entry.
 * Use the 'wp' action, since global $post is populated and we can use get_the_ID().
 */
function gwolle_gb_handle_post() {
	if ( ! is_admin() ) {
		// Frontend Handling of $_POST, only one form
		if ( isset($_POST['gwolle_gb_function']) && $_POST['gwolle_gb_function'] === 'add_entry' ) {
			gwolle_gb_frontend_posthandling();
		}
	}
}
add_action('wp', 'gwolle_gb_handle_post');


/*
 * Save new entries to the database, when valid.
 * Handle $_POST and check and save entry.
 *
 * global vars used:
 * $gwolle_gb_formdata: the data that was submitted, and will be used to fill the form for resubmit.
 *
 * @return int entry->ID when saved.
 * @return bool false when not saved, and should return the form with an error.
 */
function gwolle_gb_frontend_posthandling() {

	if ( isset($_POST['gwolle_gb_function']) && $_POST['gwolle_gb_function'] === 'add_entry' ) {

		// Option to allow only logged-in users to post. Don't show the form if not logged-in.
		if ( ! is_user_logged_in() && get_option('gwolle_gb-require_login', 'false') === 'true' ) {
			gwolle_gb_add_message( '<p class="require_login"><strong>' . esc_html__('Submitting a new guestbook entry is only allowed for logged-in users.', 'gwolle-gb') . '</strong></p>', true, false);
			return false;
		}


		/*
		 * Collect data from the Form
		 */
		$gwolle_gb_formdata = array(); // used to set the data in the entry
		$form_setting = gwolle_gb_get_setting( 'form' );

		/* Name */
		if ( isset($form_setting['form_name_enabled']) && $form_setting['form_name_enabled'] === 'true' ) {
			$field_name = gwolle_gb_get_field_name( 'name' );
			if (isset($_POST["$field_name"])) {
				$author_name = trim($_POST["$field_name"]);
				$author_name = gwolle_gb_maybe_encode_emoji( $author_name, 'author_name' );
				$gwolle_gb_formdata['author_name'] = $author_name;
				gwolle_gb_add_formdata( 'author_name', $author_name );
				if ( $author_name === '' ) {
					if ( isset($form_setting['form_name_mandatory']) && $form_setting['form_name_mandatory'] === 'true' ) {
						gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your name is not filled in, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
					}
				}
			} else {
				if ( isset($form_setting['form_name_mandatory']) && $form_setting['form_name_mandatory'] === 'true' ) {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your name is not filled in, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			}
		}

		/* City / Origin */
		if ( isset($form_setting['form_city_enabled']) && $form_setting['form_city_enabled'] === 'true' ) {
			$field_name = gwolle_gb_get_field_name( 'city' );
			if (isset($_POST["$field_name"])) {
				$author_origin = trim($_POST["$field_name"]);
				$author_origin = gwolle_gb_maybe_encode_emoji( $author_origin, 'author_origin' );
				$gwolle_gb_formdata['author_origin'] = $author_origin;
				gwolle_gb_add_formdata( 'author_origin', $author_origin );
				if ( $author_origin === '' ) {
					if ( isset($form_setting['form_city_mandatory']) && $form_setting['form_city_mandatory'] === 'true' ) {
						gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your origin is not filled in, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
					}
				}
			} else {
				if ( isset($form_setting['form_city_mandatory']) && $form_setting['form_city_mandatory'] === 'true' ) {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your origin is not filled in, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			}
		}

		/* Email */
		if ( isset($form_setting['form_email_enabled']) && $form_setting['form_email_enabled'] === 'true' ) {
			$field_name = gwolle_gb_get_field_name( 'email' );
			if (isset($_POST["$field_name"])) {
				$author_email = trim($_POST["$field_name"]);
				$gwolle_gb_formdata['author_email'] = $author_email;
				gwolle_gb_add_formdata( 'author_email', $author_email );
				if ( filter_var( $author_email, FILTER_VALIDATE_EMAIL ) ) {
					// Valid Email address.
				} else if ( isset($form_setting['form_email_mandatory']) && $form_setting['form_email_mandatory'] === 'true' ) {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your e-mail address is not filled in correctly, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			} else {
				if ( isset($form_setting['form_email_mandatory']) && $form_setting['form_email_mandatory'] === 'true' ) {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your e-mail address is not filled in correctly, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			}
		} else {
			if (isset($_POST['gwolle_gb_author_email'])) {
				$author_email = trim($_POST['gwolle_gb_author_email']);
				$gwolle_gb_formdata['author_email'] = $author_email;
				gwolle_gb_add_formdata( 'author_email', $author_email );
			}
		}

		/* Website / Homepage */
		if ( isset($form_setting['form_homepage_enabled']) && $form_setting['form_homepage_enabled'] === 'true' ) {
			$field_name = gwolle_gb_get_field_name( 'website' );
			if (isset($_POST["$field_name"])) {
				$author_website = trim($_POST["$field_name"]);
				$gwolle_gb_formdata['author_website'] = $author_website;
				gwolle_gb_add_formdata( 'author_website', $author_website );
				$pattern = '/^http/';
				if ( ! preg_match($pattern, $author_website, $matches) ) {
					$author_website = 'http://' . $author_website;
				}
				if ( filter_var( $author_website, FILTER_VALIDATE_URL ) ) {
					// Valid Website URL.
				} else if ( isset($form_setting['form_homepage_mandatory']) && $form_setting['form_homepage_mandatory'] === 'true' ) {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your website is not filled in, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			} else {
				if ( isset($form_setting['form_homepage_mandatory']) && $form_setting['form_homepage_mandatory'] === 'true' ) {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('Your website is not filled in, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			}
		}

		/* Message */
		if ( isset($form_setting['form_message_enabled']) && $form_setting['form_message_enabled'] === 'true' ) {
			$field_name = gwolle_gb_get_field_name( 'content' );
			if (isset($_POST["$field_name"])) {
				$content = trim($_POST["$field_name"]);
				if ( $content === '' ) {
					if ( isset($form_setting['form_message_mandatory']) && $form_setting['form_message_mandatory'] === 'true' ) {
						gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('There is no message, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
					}
				} else {
					$content = gwolle_gb_maybe_encode_emoji( $content, 'content' );
					$gwolle_gb_formdata['content'] = $content;
					gwolle_gb_add_formdata( 'content', $content );
				}
			} else {
				if ( isset($form_setting['form_message_mandatory']) && $form_setting['form_message_mandatory'] === 'true' ) {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('There is no message, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			}
		}

		/* Custom Anti-Spam */
		if ( isset($form_setting['form_antispam_enabled']) && $form_setting['form_antispam_enabled'] === 'true' ) {
			$field_name = gwolle_gb_get_field_name( 'custom' );
			$antispam_question = gwolle_gb_sanitize_output( get_option('gwolle_gb-antispam-question') );
			$antispam_answer   = gwolle_gb_sanitize_output( get_option('gwolle_gb-antispam-answer') );

			if ( isset($antispam_question) && strlen($antispam_question) > 0 && isset($antispam_answer) && strlen($antispam_answer) > 0 ) {
				if ( isset($_POST["$field_name"]) && trim($_POST["$field_name"]) === trim($antispam_answer) ) {
					//echo "You got it!";
				} else {
					gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('The anti-spam question was not answered correctly, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, $field_name); // mandatory
				}
			}
			if ( isset($_POST["$field_name"]) ) {
				$antispam = trim($_POST["$field_name"]);
				$gwolle_gb_formdata['antispam_answer'] = $antispam;
				gwolle_gb_add_formdata( 'antispam_answer', $antispam );
			}
		}

		/* Privacy checkbox for GDPR compliance. */
		if ( isset($form_setting['form_privacy_enabled']) && $form_setting['form_privacy_enabled'] === 'true' ) {
			if (isset($_POST['gwolle_gb_privacy']) && $_POST['gwolle_gb_privacy'] === 'on') {
				gwolle_gb_add_formdata( 'gwolle_gb_privacy', 'on' );
			} else {
				gwolle_gb_add_message( '<p class="error_fields gb-error-fields"><strong>' . esc_html__('You did not accept the privacy policy, even though it is mandatory.', 'gwolle-gb') . '</strong></p>', true, 'gwolle_gb_privacy'); // mandatory
			}
		}


		/* New Instance of gwolle_gb_entry. */
		$entry = new gwolle_gb_entry();

		/* Set the data in the instance */
		$set_data = $entry->set_data( $gwolle_gb_formdata );
		if ( ! $set_data ) {
			// Data is not set in the Instance, something happened
			do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
			gwolle_gb_add_message( '<p class="set_data gb-set-data"><strong>' . esc_html__('There were errors submitting your guestbook entry.', 'gwolle-gb') . '</strong></p>', true, false );
			return false;
		}


		/* If Moderation is off, set it to "ischecked"
		 * Do this before the gwolle_gb_new_entry_frontend hook, so we can change it again if a hook needs to.
		 */
		$user_id = get_current_user_id(); // Returns 0 if no current user.
		if ( get_option('gwolle_gb-moderate-entries', 'true') === 'true' ) {
			// Moderation, only set to checked for moderators.
			if ( gwolle_gb_is_moderator($user_id) ) {
				$entry->set_ischecked( true );
			} else {
				$entry->set_ischecked( false );
			}
		} else {
			// No moderation, set to checked.
			$entry->set_ischecked( true );
		}


		/*
		 * Use this hook to do your own magic on the frontend submission.
		 *
		 * @since 3.1.2
		 *
		 * @param object $entry instance of gwolle_gb_entry.
		 */
		$entry = apply_filters( 'gwolle_gb_new_entry_frontend', $entry );


		/* If there are errors, stop here and return false */
		$gwolle_gb_errors = gwolle_gb_get_errors();
		if ( $gwolle_gb_errors ) {
			do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
			return false; // no need to check and save
		}


		/* Akismet: check for spam and set accordingly */
		$marked_by_akismet = false;
		if ( get_option( 'gwolle_gb-akismet-active', 'false' ) === 'true' ) {
			$isspam = gwolle_gb_akismet( $entry, 'comment-check' );
			if ( $isspam ) {
				// Returned true, so considered spam
				$entry->set_isspam(true);
				$marked_by_akismet = true;
				if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
					gwolle_gb_add_message( '<p class="refuse-spam-akismet"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
					do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
					return false;
				}
			}
		}

		/* Stop Forum Spam: check for spam and set accordingly */
		$marked_by_sfs = false;
		if ( get_option( 'gwolle_gb-sfs', 'false') === 'true' ) {
			$isspam = gwolle_gb_stop_forum_spam( $entry );
			if ( $isspam ) {
				// Returned true, so considered spam
				$entry->set_isspam(true);
				$marked_by_sfs = true;
				if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
					gwolle_gb_add_message( '<p class="refuse-spam-sfs"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
					do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
					return false;
				}
			}
		}


		/* Honeypot: check for spam and set accordingly. */
		$marked_by_honeypot = false;
		if (get_option( 'gwolle_gb-honeypot', 'true') === 'true') {
			$field_name = gwolle_gb_get_field_name( 'honeypot' );
			$field_name2 = gwolle_gb_get_field_name( 'honeypot2' );
			$honeypot_value = (int) get_option( 'gwolle_gb-honeypot_value', 15 );
			if ( isset($_POST["$field_name"]) && strlen($_POST["$field_name"]) > 0 ) {
				// Input field was filled in, so considered spam
				$entry->set_isspam(true);
				$marked_by_honeypot = true;
				if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
					gwolle_gb_add_message( '<p class="refuse-spam-honeypot"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
					do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
					return false;
				}
			}
			if ( ! isset($_POST["$field_name2"]) || (int) $_POST["$field_name2"] !== $honeypot_value ) {
				// Input field was not filled in correctly, so considered spam
				$entry->set_isspam(true);
				$marked_by_honeypot = true;
				if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
					gwolle_gb_add_message( '<p class="refuse-spam-honeypot2"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
					do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
					return false;
				}
			}
		}


		/* Nonce: check for spam and set accordingly. */
		$marked_by_nonce = false;
		if (get_option( 'gwolle_gb-nonce', 'true') === 'true') {
			$field_name = gwolle_gb_get_field_name( 'nonce' );
			$verified = wp_verify_nonce( $_POST["$field_name"], 'gwolle_gb_add_entry' );
			if ( $verified === false ) {
				// Nonce is invalid, so considered spam
				$entry->set_isspam(true);
				$marked_by_nonce = true;
				if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
					gwolle_gb_add_message( '<p class="refuse-spam-nonce"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
					do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
					return false;
				}
			}
		}


		/* Scan for long and abusive text. */
		$marked_by_longtext = false;
		if ( get_option( 'gwolle_gb-longtext', 'true') === 'true' ) {
			// Check for abusive content (too long words). Set it to unchecked, so manual moderation is needed.
			$maxlength = 100;
			$words = explode( ' ', $entry->get_content() );
			foreach ( $words as $word ) {
				$pattern = '/^href=http/';
				if ( preg_match($pattern, $word, $matches) ) {
					continue;
				}
				$pattern = '/^href=ftp/';
				if ( preg_match($pattern, $word, $matches) ) {
					continue;
				}
				$pattern = '/^\[img\]http/';
				if ( preg_match($pattern, $word, $matches) ) {
					continue;
				}
				if ( strlen($word) > $maxlength ) {
					$entry->set_ischecked( false );
					$marked_by_longtext = true;
					break;
				}
			}
			$maxlength = 60;
			$words = explode( ' ', $entry->get_author_name() );
			foreach ( $words as $word ) {
				if ( strlen($word) > $maxlength ) {
					$entry->set_ischecked( false );
					$marked_by_longtext = true;
					break;
				}
			}
		}


		/* Scan with Link Checker. */
		$marked_by_linkchecker = false;
		$counter_for_linkchecker = 0;
		if ( get_option( 'gwolle_gb-linkchecker', 'true') === 'true' ) {
			$words = explode( ' ', $entry->get_content() );
			foreach ( $words as $word ) {
				$pattern = '/(http|https)\:\/\/?/';
				if ( preg_match( $pattern, $word, $matches ) ) {
					// Match
					$counter_for_linkchecker++;
				}
			}
			if ( $counter_for_linkchecker > 1 ) {
				$entry->set_isspam( true );
				$marked_by_linkchecker = true;
				if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
					gwolle_gb_add_message( '<p class="refuse-spam-linkchecker"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
					do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
					return false;
				}
			}
		}


		/* Form Timeout: check for spam and set accordingly. */
		$marked_by_timeout = false;
		if (get_option( 'gwolle_gb-timeout', 'true') === 'true') {
			$field_name = gwolle_gb_get_field_name( 'timeout' );
			$field_name2 = gwolle_gb_get_field_name( 'timeout2' );
			if ( isset($_POST["$field_name"]) && strlen($_POST["$field_name"]) > 0 && isset($_POST["$field_name2"]) && strlen($_POST["$field_name2"]) > 0 ) {
				// Input fields were filled in, so continue.
				$timeout  = (int) $_POST["$field_name"];
				$timeout2 = (int) $_POST["$field_name2"];
				if ( ( $timeout2 - $timeout ) < 2 ) {
					// Submitted less then 1 second after loading. Considered spam.
					$entry->set_isspam(true);
					$marked_by_timeout = true;
					if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
						gwolle_gb_add_message( '<p class="refuse-spam-timeout"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
						do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
						return false;
					}
				}
			} else {
				// Input fields were not filled in correctly. Considered spam.
				$entry->set_isspam(true);
				$marked_by_timeout = true;
				if (get_option( 'gwolle_gb-refuse-spam', 'false') === 'true') {
					gwolle_gb_add_message( '<p class="refuse-spam-timeout"><strong>' . esc_html__('Your entry was marked as spam. Please try again.', 'gwolle-gb') . '</strong></p>', true, false );
					do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );
					return false;
				}
			}
		}


		/* Check for logged in user, and set the userid as author_id, just in case someone is also admin, or gets promoted some day. */
		$entry->set_author_id( $user_id );


		/*
		 * Network Information
		 */
		$set_author_ip = (bool) apply_filters( 'gwolle_gb_set_author_ip', true );
		$set_author_ip2 = get_option('gwolle_gb-store_ip', 'true');
		if ( $set_author_ip && ( $set_author_ip2 === 'true' ) ) {
			$entry->set_author_ip( gwolle_gb_get_user_ip() );
			$entry->set_author_host( gethostbyaddr( gwolle_gb_get_user_ip() ) );
		}


		/*
		 * Book ID
		 */
		if ( isset( $_POST['gwolle_gb_book_id'] ) ) {
			$book_id = (int) $_POST['gwolle_gb_book_id'];
			gwolle_gb_add_formdata( 'book_id', $book_id );
		}
		if ( $book_id < 1 ) {
			$book_id = 1;
			gwolle_gb_add_formdata( 'book_id', $book_id );
		}
		$entry->set_book_id( $book_id );


		/*
		 * Save the Entry
		 */
		$save = $entry->save();

		//if ( WP_DEBUG ) { echo "save: "; var_dump($save); }


		if ( $save ) {
			// We have been saved to the Database.

			gwolle_gb_add_message( '<p class="entry_saved gb-entry-saved">' . esc_html__('Thank you for your entry.', 'gwolle-gb') . '</p>', false, false );
			if ( $entry->get_ischecked() === 0 || $entry->get_isspam() === 1 ) {
				gwolle_gb_add_message( '<p>' . esc_html__('We will review it and unlock it in a short while.', 'gwolle-gb') . '</p>', false, false );
			}


			/*
			 * No initial Log for the Entry needed, it has a default post date in the Entry itself.
			 * Only log when something specific happened:
			 */
			if ( $marked_by_akismet ) {
				gwolle_gb_add_log_entry( $entry->get_id(), 'marked-by-akismet' );
			}
			if ( $marked_by_sfs ) {
				gwolle_gb_add_log_entry( $entry->get_id(), 'marked-by-sfs' );
			}
			if ( $marked_by_honeypot ) {
				gwolle_gb_add_log_entry( $entry->get_id(), 'marked-by-honeypot' );
			}
			if ( $marked_by_nonce ) {
				gwolle_gb_add_log_entry( $entry->get_id(), 'marked-by-nonce' );
			}
			if ( $marked_by_longtext ) {
				gwolle_gb_add_log_entry( $entry->get_id(), 'marked-by-longtext' );
			}
			if ( $marked_by_linkchecker ) {
				gwolle_gb_add_log_entry( $entry->get_id(), 'marked-by-linkchecker' );
			}
			if ( $marked_by_timeout ) {
				gwolle_gb_add_log_entry( $entry->get_id(), 'marked-by-timeout' );
			}


			/* Privacy checkbox for GDPR compliance added to log. */
			if (isset($_POST['gwolle_gb_privacy']) && $_POST['gwolle_gb_privacy'] === 'on') {
				gwolle_gb_add_log_entry( $entry->get_id(), 'privacy-policy-accepted' );
			}


			/*
			 * Hooks gwolle_gb_clear_cache(), gwolle_gb_mail_moderators() and gwolle_gb_mail_author().
			 */
			do_action( 'gwolle_gb_save_entry_frontend', $entry );

			return $entry->get_id();

		} else {
			// We have not been saved to the Database.

			do_action( 'gwolle_gb_notsaved_entry_frontend', $entry );

			gwolle_gb_add_message( '<p class="entry_notsaved gb-entry-notsaved">' . esc_html__('Sorry, something went wrong with saving your entry. Please contact a site admin.', 'gwolle-gb') . '</p>', true, false );

			return false;

		}
	}
}


/*
 * Check for double entry using email field and content.
 * If there is a double entry, do not save the message and return the form with an error.
 *
 * @since 4.0.7
 *
 * @param object $entry the guestbook entry that was submitted by the user.
 *
 * @return object $entry the guestbook entry that was submitted by the user.
 */
function gwolle_gb_check_double_entry( $entry ) {

	$form_setting = gwolle_gb_get_setting( 'form' );

	if ( isset($form_setting['form_message_mandatory']) && $form_setting['form_message_mandatory'] === 'true' ) {
		$entries = gwolle_gb_get_entries(array(
				'email'   => $entry->get_author_email(),
				'book_id' => $entry->get_book_id(),
			));
		if ( is_array( $entries ) && ! empty( $entries ) ) {
			$field_name = gwolle_gb_get_field_name( 'content' );
			foreach ( $entries as $entry_email ) {
				if ( $entry_email->get_content() === $entry->get_content() ) {
					// Match is double entry
					gwolle_gb_add_message( '<p class="double_post gb-double-post"><strong>' . esc_html__('Double post: An entry with the data you entered has already been saved.', 'gwolle-gb') . '</strong></p>', true, $field_name );
					return $entry;
				}
			}
		}
	}
	return $entry;

}
add_filter( 'gwolle_gb_new_entry_frontend', 'gwolle_gb_check_double_entry' );


/*
 * Check for max length in content textarea.
 * If there are too many characters, do not save the message and return the form with an error.
 *
 * @since 4.2.0
 *
 * @param object $entry the guestbook entry that was submitted by the user.
 *
 * @return object $entry the guestbook entry that was submitted by the user.
 */
function gwolle_gb_check_maxlength( $entry ) {

	$form_setting = gwolle_gb_get_setting( 'form' );

	if ( isset($form_setting['form_message_maxlength']) && is_numeric($form_setting['form_message_maxlength']) && $form_setting['form_message_maxlength'] > 0 ) {
		$form_message_maxlength = (int) $form_setting['form_message_maxlength'];
		$content = $entry->get_content();
		$used_characters = gwolle_gb_count_characters( $content );

		if ( $used_characters > $form_message_maxlength ) {
			// Content has too many characters.
			$field_name = gwolle_gb_get_field_name( 'content' );
			$message = sprintf( esc_html__('Too many characters: Allowed is %1$d characters, used is %2$d characters in content field.', 'gwolle-gb'), $form_message_maxlength, $used_characters );
			gwolle_gb_add_message( '<p class="gb-max-length"><strong>' . $message . '</strong></p>', true, $field_name );
			return $entry;
		}
	}
	return $entry;

}
add_filter( 'gwolle_gb_new_entry_frontend', 'gwolle_gb_check_maxlength' );