id; return self::$registration_form_id; } return null; } /** * Setup registration hooks */ public static function setup_registration_hooks() { // Create form on plugin activation if it doesn't exist add_action( 'init', array( __CLASS__, 'create_registration_form' ), 11 ); // Hook into Formidable form submission add_action( 'frm_after_create_entry', array( __CLASS__, 'handle_registration_submission' ), 30, 2 ); } /** * Create the registration form programmatically if it doesn't exist */ public static function create_registration_form() { // Check if Formidable is active if ( ! class_exists( 'FrmForm' ) ) { return; } // Check if form already exists $existing_form = FrmForm::getOne( 'provider_registration' ); if ( $existing_form ) { self::$registration_form_id = $existing_form->id; return; } // Create form $form_values = array( 'name' => 'Provider Registration', 'form_key' => 'provider_registration', 'description' => 'Anbieter-Registrierung für Digital Dabei Hamburg', 'status' => 'published', 'options' => array( 'submit_value' => 'Registrieren', 'success_msg' => 'Registrierung erfolgreich! Sie werden weitergeleitet...', ), ); $form_id = FrmForm::create( $form_values ); if ( ! $form_id ) { return; } self::$registration_form_id = $form_id; // Create form fields $fields = array( array( 'name' => 'Organisationsname', 'field_key' => 'organization_name', 'type' => 'text', 'required' => '1', 'form_id' => $form_id, 'field_order' => 1, ), array( 'name' => 'Ansprechperson', 'field_key' => 'contact_person', 'type' => 'text', 'required' => '1', 'form_id' => $form_id, 'field_order' => 2, ), array( 'name' => 'E-Mail', 'field_key' => 'email', 'type' => 'email', 'required' => '1', 'form_id' => $form_id, 'field_order' => 3, 'field_options' => array( 'unique' => '1', ), ), array( 'name' => 'Passwort', 'field_key' => 'password', 'type' => 'password', 'required' => '1', 'form_id' => $form_id, 'field_order' => 4, 'field_options' => array( 'minlength' => 8, ), ), array( 'name' => 'Passwort bestätigen', 'field_key' => 'password_confirm', 'type' => 'password', 'required' => '1', 'form_id' => $form_id, 'field_order' => 5, 'field_options' => array( 'minlength' => 8, ), ), ); foreach ( $fields as $field ) { FrmField::create( $field ); } } /** * Handle registration form submission * * @param int $entry_id Entry ID. * @param int $form_id Form ID. */ public static function handle_registration_submission( $entry_id, $form_id ) { // Only process our registration form if ( $form_id !== self::get_registration_form_id() ) { return; } // Get entry data $entry = FrmEntry::getOne( $entry_id, true ); if ( ! $entry ) { return; } // Extract field values $email = ''; $password = ''; $password_confirm = ''; $organization_name = ''; $contact_person = ''; foreach ( $entry->metas as $field_id => $value ) { $field = FrmField::getOne( $field_id ); if ( ! $field ) { continue; } switch ( $field->field_key ) { case 'email': $email = sanitize_email( $value ); break; case 'password': $password = $value; break; case 'password_confirm': $password_confirm = $value; break; case 'organization_name': $organization_name = sanitize_text_field( $value ); break; case 'contact_person': $contact_person = sanitize_text_field( $value ); break; } } // Validate required fields if ( empty( $email ) || empty( $password ) || empty( $organization_name ) || empty( $contact_person ) ) { return; } // Validate passwords match if ( $password !== $password_confirm ) { return; } // Check if user already exists if ( email_exists( $email ) ) { return; } // Create username from email (part before @) $username = sanitize_user( strstr( $email, '@', true ) ); // Ensure username is unique $username_base = $username; $counter = 1; while ( username_exists( $username ) ) { $username = $username_base . $counter; $counter++; } // Create WordPress user $user_id = wp_insert_user( array( 'user_login' => $username, 'user_email' => $email, 'user_pass' => $password, 'role' => 'ddhh_provider', 'display_name' => $contact_person, 'first_name' => $contact_person, ) ); // Check for errors if ( is_wp_error( $user_id ) ) { return; } // Store organization name as user meta update_user_meta( $user_id, 'ddhh_org_name', $organization_name ); // Auto-login the user wp_set_auth_cookie( $user_id, true ); wp_set_current_user( $user_id ); // Optionally redirect (handled by JavaScript or form settings) do_action( 'ddhh_provider_registered', $user_id, $organization_name ); } }