diff --git a/includes/class-formidable.php b/includes/class-formidable.php index 508c3af..a57ad41 100644 --- a/includes/class-formidable.php +++ b/includes/class-formidable.php @@ -20,6 +20,13 @@ class DDHH_JM_Formidable { */ private static $registration_form_id = null; + /** + * Form ID for job submission + * + * @var int|null + */ + private static $job_submission_form_id = null; + /** * Get the registration form ID * @@ -40,12 +47,33 @@ class DDHH_JM_Formidable { return null; } + /** + * Get the job submission form ID + * + * @return int|null Form ID or null if not found + */ + public static function get_job_submission_form_id() { + if ( null !== self::$job_submission_form_id ) { + return self::$job_submission_form_id; + } + + // Look up form by key + $form = FrmForm::getOne( 'job_submission' ); + if ( $form ) { + self::$job_submission_form_id = $form->id; + return self::$job_submission_form_id; + } + + return null; + } + /** * Setup registration hooks */ public static function setup_registration_hooks() { - // Create form on plugin activation if it doesn't exist + // Create forms on plugin activation if they don't exist add_action( 'init', array( __CLASS__, 'create_registration_form' ), 11 ); + add_action( 'init', array( __CLASS__, 'create_job_submission_form' ), 11 ); // Hook into Formidable form submission add_action( 'frm_after_create_entry', array( __CLASS__, 'handle_registration_submission' ), 30, 2 ); @@ -248,4 +276,166 @@ class DDHH_JM_Formidable { // Optionally redirect (handled by JavaScript or form settings) do_action( 'ddhh_provider_registered', $user_id, $organization_name ); } + + /** + * Create the job submission form programmatically if it doesn't exist + */ + public static function create_job_submission_form() { + // Check if Formidable is active + if ( ! class_exists( 'FrmForm' ) || ! class_exists( 'FrmFormAction' ) ) { + return; + } + + // Check if form already exists + $existing_form = FrmForm::getOne( 'job_submission' ); + if ( $existing_form ) { + self::$job_submission_form_id = $existing_form->id; + return; + } + + // Create form + $form_values = array( + 'name' => 'Stellenangebot einreichen', + 'form_key' => 'job_submission', + 'description' => 'Alle Felder mit * sind Pflichtfelder. Ihr Angebot wird vor Veröffentlichung geprüft.', + 'status' => 'published', + 'options' => array( + 'submit_value' => 'Stellenangebot einreichen', + 'success_msg' => 'Ihr Stellenangebot wurde zur Prüfung eingereicht!', + 'success_action' => 'redirect', + 'success_url' => home_url( '/anbieter-dashboard/' ), + ), + ); + + $form_id = FrmForm::create( $form_values ); + + if ( ! $form_id ) { + return; + } + + self::$job_submission_form_id = $form_id; + + // Create form fields + $fields_data = array( + array( + 'name' => 'Stellentitel', + 'field_key' => 'job_title', + 'type' => 'text', + 'required' => '1', + 'form_id' => $form_id, + 'field_order' => 1, + ), + array( + 'name' => 'Stellenbeschreibung', + 'field_key' => 'job_description', + 'type' => 'textarea', + 'required' => '1', + 'form_id' => $form_id, + 'field_order' => 2, + ), + array( + 'name' => 'Standort', + 'field_key' => 'job_location', + 'type' => 'text', + 'required' => '1', + 'form_id' => $form_id, + 'field_order' => 3, + ), + array( + 'name' => 'Art', + 'field_key' => 'job_type', + 'type' => 'select', + 'required' => '1', + 'form_id' => $form_id, + 'field_order' => 4, + 'field_options' => array( + 'options' => array( + 'Vollzeit' => 'Vollzeit', + 'Teilzeit' => 'Teilzeit', + 'Ehrenamt' => 'Ehrenamt', + ), + ), + ), + array( + 'name' => 'Bewerbungsfrist', + 'field_key' => 'job_deadline', + 'type' => 'date', + 'required' => '0', + 'form_id' => $form_id, + 'field_order' => 5, + 'field_options' => array( + 'format' => 'd.m.Y', + ), + ), + array( + 'name' => 'Kontakt-E-Mail', + 'field_key' => 'job_contact_email', + 'type' => 'email', + 'required' => '1', + 'form_id' => $form_id, + 'field_order' => 6, + ), + array( + 'name' => 'Logo', + 'field_key' => 'job_logo', + 'type' => 'file', + 'required' => '0', + 'form_id' => $form_id, + 'field_order' => 7, + 'field_options' => array( + 'restrict' => '1', + 'allowed_types' => 'image/jpeg,image/png', + 'max_size' => '2', + ), + ), + ); + + // Store field IDs for form action mapping + $field_ids = array(); + foreach ( $fields_data as $field ) { + $field_id = FrmField::create( $field ); + if ( $field_id ) { + $field_ids[ $field['field_key'] ] = $field_id; + } + } + + // Create the Create Post action + if ( ! empty( $field_ids ) ) { + $action_values = array( + 'menu_order' => 1, + 'post_status' => 'published', + 'post_content' => array( + 'post_type' => 'job_offer', + 'post_status' => 'pending', + 'post_title' => $field_ids['job_title'], + 'post_content' => $field_ids['job_description'], + 'post_author' => 'current_user', + 'post_custom_fields' => array( + array( + 'meta_name' => 'job_location', + 'field_id' => $field_ids['job_location'], + ), + array( + 'meta_name' => 'job_type', + 'field_id' => $field_ids['job_type'], + ), + array( + 'meta_name' => 'job_deadline', + 'field_id' => $field_ids['job_deadline'], + ), + array( + 'meta_name' => 'job_contact_email', + 'field_id' => $field_ids['job_contact_email'], + ), + array( + 'meta_name' => 'job_logo', + 'field_id' => $field_ids['job_logo'], + ), + ), + ), + ); + + FrmFormAction::create( 'wppost', $form_id, $action_values ); + } + } }