feat(03-01): add job submission form creation
- Add create_job_submission_form() method to DDHH_JM_Formidable class - Create Formidable form with key 'job_submission' - Add 7 fields with German labels: title, description, location, type, deadline, email, logo - Configure Create Post action: post_type='job_offer', status='pending' - Map form fields to ACF fields: job_location, job_type, job_deadline, job_contact_email, job_logo - Add get_job_submission_form_id() helper method - Hook form creation into init action Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user