<?php
/**
* Template for the Job's submission
*
* This template can be overridden by copying it to yourtheme/jobboardwp/job-submission.php
*
* @version 1.2.4
*
* @var array $jb_job_submission
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
} ?>
<div id="jb-job-submission-form-wrapper" class="jb">
<?php
if ( ! is_user_logged_in() && JB()->options()->get( 'account-required' ) && ! JB()->options()->get( 'account-creation' ) ) {
?>
<span>
<?php esc_html_e( 'You must sign in to create a new job.', 'jobboardwp' ); ?>
<a class="button" href="<?php echo esc_url( wp_login_url( get_permalink(), true ) ); ?>"><?php esc_attr_e( 'Sign in', 'jobboardwp' ); ?></a>
</span>
<?php
} else {
$edit = false;
if ( ! empty( $jb_job_submission['job'] ) ) {
$edit = true;
}
$types = get_terms(
array(
'taxonomy' => 'jb-job-type',
'hide_empty' => false,
)
);
$types_options = array();
if ( empty( JB()->options()->get( 'required-job-type' ) ) ) {
$types_options[''] = __( '(None)', 'jobboardwp' );
}
foreach ( $types as $t ) {
$types_options[ $t->term_id ] = $t->name;
}
$categories_options = array();
if ( JB()->options()->get( 'job-categories' ) ) {
$categories = get_terms(
array(
'taxonomy' => 'jb-job-category',
'hide_empty' => false,
)
);
$cat_children = _get_term_hierarchy( 'jb-job-category' );
$categories = JB()->common()->job()->prepare_categories_options( $categories, $cat_children );
if ( ! empty( $categories ) ) {
$categories_options[''] = __( '(None)', 'jobboardwp' );
foreach ( $categories as $category ) {
$categories_options[ $category->term_id ] = str_repeat( '–', $category->level ) . ' ' . $category->name;
}
}
}
$job_title = '';
$job_location_type = '0';
$job_location = '';
$job_location_data = '';
$job_type = '';
$job_category = '';
$job_description = '';
$job_application = '';
$job_expired = '';
$salary_type = '';
$salary_amount_type = 'numeric';
$salary_amount = '';
$salary_min_amount = '';
$salary_max_amount = '';
$salary_period = '';
$company_name = '';
$company_website = '';
$company_tagline = '';
$company_twitter = '';
$company_facebook = '';
$company_instagram = '';
$company_logo = '';
if ( is_user_logged_in() ) {
$c_data = JB()->common()->user()->get_company_data();
$company_name = $c_data['name'];
$company_website = $c_data['website'];
$company_tagline = $c_data['tagline'];
$company_twitter = $c_data['twitter'];
$company_facebook = $c_data['facebook'];
$company_instagram = $c_data['instagram'];
$company_logo = $c_data['logo'];
}
if ( $edit ) {
$data = JB()->common()->job()->get_raw_data( $jb_job_submission['job']->ID );
$job_title = $data['title'];
$job_location_type = $data['location_type'];
$job_location = $data['location'];
$job_location_data = $data['location_data'];
$job_type = $data['type'];
// workaround on the submission form because Job Type isn't multiple dropdown
if ( 1 === count( $job_type ) ) {
$job_type = $job_type[0];
} elseif ( empty( $job_type ) ) {
$job_type = '';
}
if ( JB()->options()->get( 'job-categories' ) ) {
$job_category = $data['category'];
// workaround on the submission form because Job Category isn't multiple dropdown
if ( 1 === count( $job_category ) ) {
$job_category = $job_category[0];
} elseif ( empty( $job_category ) ) {
$job_category = '';
}
}
$job_description = $data['description'];
$job_application = $data['app_contact'];
$job_expired = $data['expires'];
$company_name = $data['company_name'];
$company_website = $data['company_website'];
$company_tagline = $data['company_tagline'];
$company_twitter = $data['company_twitter'];
$company_facebook = $data['company_facebook'];
$company_instagram = $data['company_instagram'];
$company_logo = $data['company_logo'];
if ( JB()->options()->get( 'job-salary' ) ) {
$salary_type = array_key_exists( 'salary_type', $data ) ? $data['salary_type'] : '';
$salary_amount_type = array_key_exists( 'salary_amount_type', $data ) ? $data['salary_amount_type'] : '';
$salary_amount = array_key_exists( 'salary_amount', $data ) ? $data['salary_amount'] : '';
$salary_min_amount = array_key_exists( 'salary_min_amount', $data ) ? $data['salary_min_amount'] : '';
$salary_max_amount = array_key_exists( 'salary_max_amount', $data ) ? $data['salary_max_amount'] : '';
$salary_period = array_key_exists( 'salary_period', $data ) ? $data['salary_period'] : '';
}
}
$my_details_fields = array();
if ( is_user_logged_in() ) {
$current_userdata = get_userdata( get_current_user_id() );
$my_details_fields = array(
array(
'type' => 'text',
'label' => __( 'Email', 'jobboardwp' ),
'id' => 'author_email',
'required' => true,
'value' => $current_userdata->user_email,
),
array(
'type' => 'text',
'label' => __( 'First name', 'jobboardwp' ),
'id' => 'author_first_name',
'required' => JB()->options()->get( 'full-name-required' ),
'value' => $current_userdata->first_name,
),
array(
'type' => 'text',
'label' => __( 'Last name', 'jobboardwp' ),
'id' => 'author_last_name',
'required' => JB()->options()->get( 'full-name-required' ),
'value' => $current_userdata->last_name,
),
);
} elseif ( JB()->options()->get( 'account-creation' ) && ! is_user_logged_in() ) {
$my_details_fields = array(
array(
'type' => 'text',
'label' => __( 'Email', 'jobboardwp' ),
'id' => 'author_email',
'required' => JB()->options()->get( 'account-required' ),
),
);
if ( ! JB()->options()->get( 'account-username-generate' ) ) {
$my_details_fields[] = array(
'type' => 'text',
'label' => __( 'Username', 'jobboardwp' ),
'id' => 'author_username',
'required' => JB()->options()->get( 'account-required' ),
);
}
$my_details_fields = array_merge(
$my_details_fields,
array(
array(
'type' => 'text',
'label' => __( 'First name', 'jobboardwp' ),
'id' => 'author_first_name',
'required' => JB()->options()->get( 'full-name-required' ) && JB()->options()->get( 'account-required' ),
),
array(
'type' => 'text',
'label' => __( 'Last name', 'jobboardwp' ),
'id' => 'author_last_name',
'required' => JB()->options()->get( 'full-name-required' ) && JB()->options()->get( 'account-required' ),
),
)
);
if ( ! JB()->options()->get( 'account-password-email' ) ) {
$my_details_fields = array_merge(
$my_details_fields,
array(
array(
'type' => 'password',
'label' => __( 'Password', 'jobboardwp' ),
'id' => 'author_password',
'required' => JB()->options()->get( 'account-required' ),
),
array(
'type' => 'password',
'label' => __( 'Confirm Password', 'jobboardwp' ),
'id' => 'author_password_confirm',
'required' => JB()->options()->get( 'account-required' ),
),
)
);
} else {
$my_details_fields = array_merge(
$my_details_fields,
array(
array(
'id' => 'auto_generate_password',
'type' => 'label',
'label' => __( 'Your account details will be confirmed via email.', 'jobboardwp' ),
),
)
);
}
}
$buttons = array(
'job-preview' => array(
'type' => 'submit',
'label' => __( 'Preview', 'jobboardwp' ),
'data' => array(
'action' => 'preview',
),
),
);
if ( is_user_logged_in() || ( JB()->options()->get( 'account-creation' ) && JB()->options()->get( 'account-required' ) ) ) {
$buttons['job-draft'] = array(
'type' => 'submit',
'label' => __( 'Save Draft', 'jobboardwp' ),
'data' => array(
'action' => 'draft',
),
);
}
$app_validation = array( 'email', 'url' );
$method = JB()->options()->get( 'application-method' );
if ( ! empty( $method ) ) {
$app_validation = array( $method );
}
$posting = JB()->frontend()->forms(
array(
'id' => 'jb-job-submission',
)
);
$sections = array();
$your_details_enabled = JB()->options()->get( 'your-details-section' );
if ( ! ( is_user_logged_in() && empty( $your_details_enabled ) ) ) {
/**
* Filters HTML attributes for the My Details section.
*
* @since 1.2.2
* @hook jb_job_submission_strict_wrap_attrs
*
* @param {string} $strict_wrap_attrs HTML attributes for the My Details section.
*
* @return {string} HTML attributes for the My Details section. It's empty string by default.
*/
$strict_wrap_attrs = apply_filters( 'jb_job_submission_strict_wrap_attrs', '' );
// phpcs:ignore WordPress.Security.NonceVerification -- getting value from GET line
if ( isset( $_GET['login'] ) && 'failed' === sanitize_key( $_GET['login'] ) ) {
$strict_wrap_attrs = ' style="display: none;"';
}
$sections['my-details'] = array(
'title' => __( 'Your Details', 'jobboardwp' ),
'fields' => $my_details_fields,
'wrap_fields' => true,
'strict_wrap_attrs' => $strict_wrap_attrs,
);
}
$gmap_key = JB()->options()->get( 'googlemaps-api-key' );
$job_details_fields = array(
array(
'type' => 'text',
'label' => __( 'Job Title', 'jobboardwp' ),
'id' => 'job_title',
'required' => true,
'value' => $job_title,
),
array(
'type' => 'conditional_radio',
'label' => __( 'Job Location', 'jobboardwp' ),
'id' => 'job_location_type',
'options' => array(
'0' => __( 'Onsite', 'jobboardwp' ),
'1' => __( 'Remote', 'jobboardwp' ),
'' => __( 'Onsite or Remote', 'jobboardwp' ),
),
'condition_sections' => array(
'0' => array(
array(
'type' => empty( $gmap_key ) ? 'text' : 'location_autocomplete',
'label' => __( 'Location', 'jobboardwp' ),
'placeholder' => __( 'City, State, or Country', 'jobboardwp' ),
'name' => 'job_location',
'id' => 'job_location-0',
'value' => $job_location,
'value_data' => $job_location_data,
'required' => true,
),
),
'1' => array(
array(
'type' => empty( $gmap_key ) ? 'text' : 'location_autocomplete',
'label' => __( 'Preferred Location', 'jobboardwp' ),
'placeholder' => __( 'City, State, or Country', 'jobboardwp' ),
'name' => 'job_location',
'id' => 'job_location-1',
'value' => $job_location,
'value_data' => $job_location_data,
),
),
'' => array(
array(
'type' => empty( $gmap_key ) ? 'text' : 'location_autocomplete',
'label' => __( 'Preferred Location', 'jobboardwp' ),
'placeholder' => __( 'City, State, or Country', 'jobboardwp' ),
'name' => 'job_location',
'id' => 'job_location-',
'value' => $job_location,
'value_data' => $job_location_data,
),
),
),
'value' => $job_location_type,
),
array(
'type' => 'select',
'label' => __( 'Job Type', 'jobboardwp' ),
'data' => array(
'placeholder' => __( 'Please select job type', 'jobboardwp' ),
),
'id' => 'job_type',
'class' => ! empty( JB()->options()->get( 'required-job-type' ) ) ? 'jb-s2' : 'jb-s1',
'options' => $types_options,
'value' => $job_type,
'required' => ! empty( JB()->options()->get( 'required-job-type' ) ),
),
);
if ( JB()->options()->get( 'job-categories' ) && ! empty( $categories_options ) ) {
$job_details_fields = array_merge(
$job_details_fields,
array(
array(
'type' => 'select',
'label' => __( 'Job Category', 'jobboardwp' ),
'data' => array(
'placeholder' => __( 'Please select job category', 'jobboardwp' ),
),
'id' => 'job_category',
'class' => 'jb-s1',
'options' => $categories_options,
'value' => $job_category,
),
)
);
}
if ( JB()->options()->get( 'job-salary' ) ) {
$currency = JB()->options()->get( 'job-salary-currency' );
$currency_symbols = JB()->config()->get( 'currencies' );
$currency_symbol = $currency_symbols[ $currency ]['symbol'];
$job_details_fields = array_merge(
$job_details_fields,
array(
array(
'type' => 'select',
'label' => __( 'Salary', 'jobboardwp' ),
'placeholder' => __( 'Please select salary type', 'jobboardwp' ),
'id' => 'job_salary_type',
'options' => array(
'' => __( 'Not specified', 'jobboardwp' ),
'fixed' => __( 'Fixed', 'jobboardwp' ),
'recurring' => __( 'Recurring', 'jobboardwp' ),
),
'value' => $salary_type,
'required' => ! empty( JB()->options()->get( 'required-job-salary' ) ),
),
array(
'type' => 'select',
'label' => __( 'Salary amount type', 'jobboardwp' ),
'placeholder' => __( 'Please select amount type', 'jobboardwp' ),
'id' => 'job_salary_amount_type',
'options' => array(
'numeric' => __( 'Numeric', 'jobboardwp' ),
'range' => __( 'Range (min-max)', 'jobboardwp' ),
),
'value' => $salary_amount_type,
'conditional' => array( 'job_salary_type', '!=', '' ),
),
array(
'type' => 'number',
'required' => true,
// translators: %s - Currency symbol
'label' => sprintf( __( 'Salary amount %s', 'jobboardwp' ), $currency_symbol ),
'placeholder' => __( 'Enter salary amount', 'jobboardwp' ),
'id' => 'job_salary_amount',
'value' => $salary_amount,
'conditional' => array( 'job_salary_amount_type', '=', 'numeric' ),
'min' => 0,
),
array(
'type' => 'number',
'required' => true,
// translators: %s - Currency symbol
'label' => sprintf( __( 'Salary Min Amount %s', 'jobboardwp' ), $currency_symbol ),
'placeholder' => __( 'Enter salary min amount', 'jobboardwp' ),
'id' => 'job_salary_min_amount',
'value' => $salary_min_amount,
'conditional' => array( 'job_salary_amount_type', '=', 'range' ),
'min' => 0,
),
array(
'type' => 'number',
'required' => true,
// translators: %s - Currency symbol
'label' => sprintf( __( 'Salary Max Amount %s', 'jobboardwp' ), $currency_symbol ),
'placeholder' => __( 'Enter salary max amount', 'jobboardwp' ),
'id' => 'job_salary_max_amount',
'value' => $salary_max_amount,
'conditional' => array( 'job_salary_amount_type', '=', 'range' ),
'min' => 0,
),
array(
'type' => 'select',
'required' => true,
'label' => __( 'Salary Period', 'jobboardwp' ),
'placeholder' => __( 'Please select salary period', 'jobboardwp' ),
'id' => 'job_salary_period',
'options' => array(
'hour' => __( 'Hour', 'jobboardwp' ),
'day' => __( 'Day', 'jobboardwp' ),
'week' => __( 'Week', 'jobboardwp' ),
'month' => __( 'Month', 'jobboardwp' ),
),
'value' => $salary_period,
'conditional' => array( 'job_salary_type', '=', 'recurring' ),
),
)
);
}
$job_application_placeholder = __( 'Enter an email address or website URL', 'jobboardwp' );
if ( 'email' === JB()->options()->get( 'application-method' ) ) {
$job_application_placeholder = __( 'Enter an email address', 'jobboardwp' );
} elseif ( 'url' === JB()->options()->get( 'application-method' ) ) {
$job_application_placeholder = __( 'Enter a website URL', 'jobboardwp' );
}
$job_details_fields[] = array(
'type' => 'wp_editor',
'label' => __( 'Description', 'jobboardwp' ),
'id' => 'job_description',
'value' => $job_description,
'required' => true,
);
if ( JB()->options()->get( 'individual-job-duration' ) ) {
$job_details_fields[] = array(
'type' => 'datepicker',
'label' => __( 'Expired date', 'jobboardwp' ),
'id' => 'job_expire',
'value' => $job_expired,
);
}
$job_details_fields[] = array(
'type' => 'text',
'label' => __( 'Application Contact', 'jobboardwp' ),
'id' => 'job_application',
'required' => true,
'value' => $job_application,
'placeholder' => $job_application_placeholder,
'validation' => $app_validation,
);
$sections = array_merge(
$sections,
array(
'job-details' => array(
'title' => __( 'Job Details', 'jobboardwp' ),
'fields' => $job_details_fields,
),
'company-details' => array(
'title' => __( 'Company Details', 'jobboardwp' ),
'fields' => array(
array(
'type' => 'text',
'label' => __( 'Name', 'jobboardwp' ),
'id' => 'company_name',
'required' => true,
'value' => $company_name,
'placeholder' => __( 'Enter the name of the company', 'jobboardwp' ),
),
array(
'type' => 'text',
'label' => __( 'Website', 'jobboardwp' ),
'id' => 'company_website',
'value' => $company_website,
),
array(
'type' => 'text',
'label' => __( 'Tagline', 'jobboardwp' ),
'id' => 'company_tagline',
'value' => $company_tagline,
'placeholder' => __( 'Briefly describe your company', 'jobboardwp' ),
),
array(
'type' => 'text',
'label' => __( 'Twitter username', 'jobboardwp' ),
'id' => 'company_twitter',
'value' => $company_twitter,
),
array(
'type' => 'text',
'label' => __( 'Facebook username', 'jobboardwp' ),
'id' => 'company_facebook',
'value' => $company_facebook,
),
array(
'type' => 'text',
'label' => __( 'Instagram username', 'jobboardwp' ),
'id' => 'company_instagram',
'value' => $company_instagram,
),
array(
'type' => 'media',
'label' => __( 'Logo', 'jobboardwp' ),
'id' => 'company_logo',
'labels' => array(
'img_alt' => __( 'Company logo image', 'jobboardwp' ),
),
'action' => 'jb-upload-company-logo',
'value' => $company_logo,
),
),
),
)
);
/**
* Filters the job submission form.
*
* @since 1.2.2
* @hook jb_job_submission_form_args
*
* @param {array} $args Job submission form arguments. See frontend/class-form.php file for getting the list of the necessary arguments
*
* @return {array} Job submission form arguments for init.
*/
$posting_args = apply_filters(
'jb_job_submission_form_args',
array(
'id' => 'jb-job-submission',
'class' => '',
'data' => array(
'account-required' => JB()->options()->get( 'account-required' ),
),
'prefix_id' => '',
'sections' => $sections,
'hiddens' => array(
'jb-action' => 'job-submission',
'jb-job-submission-step' => 'draft||preview',
'nonce' => wp_create_nonce( 'jb-job-submission' ),
),
'buttons' => $buttons,
)
);
$posting->set_data( $posting_args );
$posting->display();
}
?>
</div>