403Webshell
Server IP : 202.61.199.114  /  Your IP : 216.73.217.139
Web Server : nginx/1.22.1
System : Linux de.arni-solutions.de 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User : web20 ( 1018)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/clients/client2/web20/web/wp-content/themes/drogentest-online/inc/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/clients/client2/web20/web/wp-content/themes/drogentest-online/inc/kontakt-form.php
<?php
/**
 * Kontaktformular – Shortcode [ticket].
 *
 * Rendert das Kontaktformular (z. B. auf /kontakt/) und legt Anfragen als
 * Ticket im ArNi CRM an. Nutzt die gemeinsame CRM-/Mail-Infrastruktur aus
 * inc/suchtberatung-forms.php (Ticket-Helper, Rate-Limit, Mail-Fallback).
 *
 * @package drogentest-online
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/** Formular-Assets laden (geteilt mit den Suchtberatungs-Modals). */
function dgt_contact_enqueue_assets() {
	if ( wp_script_is( 'dgt-sb-forms', 'enqueued' ) ) {
		return;
	}
	$uri = get_template_directory_uri();
	$ver = filemtime( get_template_directory() . '/assets/js/sb-forms.js' );
	wp_enqueue_script( 'dgt-sb-forms', $uri . '/assets/js/sb-forms.js', array(), $ver, true );
	wp_localize_script(
		'dgt-sb-forms',
		'dgtSb',
		array(
			'ajax'      => admin_url( 'admin-ajax.php' ),
			'nonce'     => wp_create_nonce( 'dgt_sb_forms' ),
			'endpoints' => array(
				'dgt_sb_report'  => esc_url_raw( rest_url( 'dgt/v1/sb-report' ) ),
				'dgt_sb_suggest' => esc_url_raw( rest_url( 'dgt/v1/sb-suggest' ) ),
				'dgt_contact'    => esc_url_raw( rest_url( 'dgt/v1/contact' ) ),
			),
		)
	);
}

/** Shortcode [ticket] – Kontaktformular. */
function dgt_ticket_shortcode() {
	dgt_contact_enqueue_assets();
	ob_start();
	?>
	<div class="dgt-contact-card">
		<form class="dgt-sb-form dgt-contact-form" id="dgt-contact-form" novalidate>
			<div class="dgt-sb-form-row">
				<label>Name *<input type="text" name="name" required autocomplete="name"></label>
				<label>E-Mail *<input type="email" name="email" required autocomplete="email"></label>
			</div>
			<label>Betreff<input type="text" name="subject" placeholder="Worum geht es?"></label>
			<label>Ihre Nachricht *<textarea name="message" rows="6" required></textarea></label>
			<label class="dgt-contact-consent">
				<input type="checkbox" name="consent" value="1" required>
				<span>Ich habe die <a href="<?php echo esc_url( home_url( '/datenschutz/' ) ); ?>">Datenschutzerklärung</a> gelesen und akzeptiere sie. *</span>
			</label>
			<input type="text" name="firma" class="dgt-sb-hp" tabindex="-1" autocomplete="off" aria-hidden="true">
			<div class="dgt-sb-form-foot">
				<button type="submit" class="btn dgt-btn dgt-btn-primary">Nachricht senden</button>
			</div>
			<p class="dgt-sb-form-msg" role="status" aria-live="polite"></p>
		</form>
	</div>
	<?php
	return ob_get_clean();
}
add_shortcode( 'ticket', 'dgt_ticket_shortcode' );

/** Übermittlung: Ticket im ArNi CRM, Fallback E-Mail. */
function dgt_contact_submit() {
	check_ajax_referer( 'dgt_sb_forms', 'nonce' );
	if ( ! empty( $_POST['firma'] ) ) { // Honeypot
		wp_send_json_success( array( 'message' => 'Vielen Dank für Ihre Nachricht! Wir melden uns so schnell wie möglich.' ) );
	}
	if ( dgt_sb_rate_limited() ) {
		wp_send_json_error( array( 'message' => 'Zu viele Nachrichten in kurzer Zeit. Bitte versuchen Sie es später erneut.' ), 429 );
	}

	$name    = sanitize_text_field( wp_unslash( $_POST['name'] ?? '' ) );
	$email   = sanitize_email( wp_unslash( $_POST['email'] ?? '' ) );
	$subject = sanitize_text_field( wp_unslash( $_POST['subject'] ?? '' ) );
	$message = sanitize_textarea_field( wp_unslash( $_POST['message'] ?? '' ) );
	$consent = ! empty( $_POST['consent'] );

	$errors = array();
	if ( '' === $name ) {
		$errors[] = 'Bitte geben Sie Ihren Namen an.';
	}
	if ( ! is_email( $email ) ) {
		$errors[] = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';
	}
	if ( strlen( $message ) < 10 ) {
		$errors[] = 'Bitte schreiben Sie eine etwas ausführlichere Nachricht (mind. 10 Zeichen).';
	}
	if ( ! $consent ) {
		$errors[] = 'Bitte bestätigen Sie die Datenschutzerklärung.';
	}
	if ( $errors ) {
		wp_send_json_error( array( 'message' => implode( ' ', $errors ) ), 422 );
	}

	$ticket_subject = '' !== $subject ? $subject : 'Kontaktanfrage von ' . $name;

	$description  = $message . "\n\n— — —\n";
	$description .= 'Absender: ' . $name . "\n";
	$description .= 'E-Mail: ' . $email . "\n";
	$description .= 'Quelle: Kontaktformular auf ' . home_url( '/kontakt/' ) . "\n";

	$ticket = dgt_sb_crm_create_ticket( array(
		'subject'     => $ticket_subject,
		'description' => $description,
		'name'        => $name,
		'email'       => $email,
		'priority'    => 'normal',
		'topic'       => 'Kontakt',
	) );

	if ( ! is_wp_error( $ticket ) ) {
		wp_send_json_success( array(
			'message'       => 'Vielen Dank für Ihre Nachricht! Wir melden uns so schnell wie möglich bei Ihnen.',
			'ticket_number' => $ticket['ticket_number'],
		) );
	}

	// Fallback: CRM nicht erreichbar → E-Mail, damit keine Anfrage verloren geht.
	error_log( '[dgt_contact] CRM-Ticket fehlgeschlagen, Fallback E-Mail: ' . $ticket->get_error_message() );

	$o       = dgt_sb_mail_options();
	$headers = array(
		'Reply-To: ' . $name . ' <' . $email . '>',
		'Content-Type: text/plain; charset=UTF-8',
	);
	$sent = wp_mail( $o['to_email'], '[Kontakt] ' . $ticket_subject, $description, $headers );

	$sent ? wp_send_json_success( array( 'message' => 'Vielen Dank für Ihre Nachricht! Wir melden uns so schnell wie möglich bei Ihnen.' ) )
		: wp_send_json_error( array( 'message' => 'Versand fehlgeschlagen. Bitte versuchen Sie es später erneut.' ) );
}
add_action( 'wp_ajax_dgt_contact', 'dgt_contact_submit' );
add_action( 'wp_ajax_nopriv_dgt_contact', 'dgt_contact_submit' );

/** REST-Endpoint (admin-ajax.php liegt hinter Basic-Auth). */
function dgt_contact_rest_route() {
	register_rest_route( 'dgt/v1', '/contact', array(
		'methods'             => 'POST',
		'callback'            => 'dgt_contact_submit',
		'permission_callback' => '__return_true',
	) );
}
add_action( 'rest_api_init', 'dgt_contact_rest_route' );

Youez - 2016 - github.com/yon3zu
LinuXploit