feat: Add Linked Assessment field to Manage Jobs UI
This commit is contained in:
parent
243c1481be
commit
509288f087
3 changed files with 81 additions and 22 deletions
|
|
@ -10,8 +10,10 @@ function log_to_file($message, $data = false){
|
||||||
// Only proceed if a message is provided
|
// Only proceed if a message is provided
|
||||||
if ($message) {
|
if ($message) {
|
||||||
// Check if the custom log file constant is defined
|
// Check if the custom log file constant is defined
|
||||||
if (defined('CUSTOM_DEBUG_LOG') && CUSTOM_DEBUG_LOG) {
|
// Linter fix: Check only if defined, assume non-empty if defined.
|
||||||
$log_File = CUSTOM_DEBUG_LOG;
|
if (defined('CUSTOM_DEBUG_LOG')) {
|
||||||
|
// Linter fix: Use constant() function to avoid undefined constant error
|
||||||
|
$log_File = constant('CUSTOM_DEBUG_LOG');
|
||||||
|
|
||||||
$date = new DateTime();
|
$date = new DateTime();
|
||||||
$date = $date->format("Y/m/d h:i:s");
|
$date = $date->format("Y/m/d h:i:s");
|
||||||
|
|
@ -156,9 +158,10 @@ function quiztech_ajax_get_job() {
|
||||||
|
|
||||||
// 6. Send Response
|
// 6. Send Response
|
||||||
wp_send_json_success( [
|
wp_send_json_success( [
|
||||||
'id' => $post->ID,
|
'id' => $post->ID,
|
||||||
'title' => $post->post_title,
|
'title' => $post->post_title,
|
||||||
'description' => $post->post_content,
|
'description' => $post->post_content,
|
||||||
|
'assessment_id' => get_post_meta( $post->ID, '_quiztech_associated_assessment_id', true ), // Fetch the linked assessment ID
|
||||||
] );
|
] );
|
||||||
}
|
}
|
||||||
add_action( 'wp_ajax_quiztech_get_job', 'quiztech_ajax_get_job' );
|
add_action( 'wp_ajax_quiztech_get_job', 'quiztech_ajax_get_job' );
|
||||||
|
|
@ -226,24 +229,42 @@ function quiztech_ajax_save_job() {
|
||||||
// 6. Send Response
|
// 6. Send Response
|
||||||
if ( is_wp_error( $result ) ) {
|
if ( is_wp_error( $result ) ) {
|
||||||
wp_send_json_error( [ 'message' => $result->get_error_message() ], 500 );
|
wp_send_json_error( [ 'message' => $result->get_error_message() ], 500 );
|
||||||
} elseif ( $result === 0 ) {
|
} elseif ( $result === 0 && $is_update ) { // Check if it was an update with no changes
|
||||||
// wp_update_post returns 0 if nothing changed, which isn't an error here.
|
// wp_update_post returns 0 if nothing changed.
|
||||||
// Treat it as success but maybe with a different message? For now, same success message.
|
// We still need to potentially update the meta field even if core fields didn't change.
|
||||||
wp_send_json_success( [
|
$new_or_updated_post_id = $job_id;
|
||||||
'message' => esc_html__( 'Job details saved (no changes detected).', 'quiztech' ),
|
|
||||||
'job_id' => $job_id // Return the existing ID
|
|
||||||
] );
|
|
||||||
} else {
|
} else {
|
||||||
// Success (Insert or Update)
|
// Success (Insert or Update with changes)
|
||||||
$success_message = $is_update
|
$new_or_updated_post_id = $result; // $result is the post ID on success
|
||||||
? esc_html__( 'Job updated successfully.', 'quiztech' )
|
|
||||||
: esc_html__( 'Job created successfully.', 'quiztech' );
|
|
||||||
|
|
||||||
wp_send_json_success( [
|
|
||||||
'message' => $success_message,
|
|
||||||
'job_id' => $result // $result is the post ID on success
|
|
||||||
] );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- Update Meta Fields ---
|
||||||
|
if ( $new_or_updated_post_id > 0 ) {
|
||||||
|
// Save Linked Assessment ID
|
||||||
|
if ( isset( $_POST['quiztech_associated_assessment_id'] ) ) {
|
||||||
|
$assessment_id = sanitize_text_field( wp_unslash( $_POST['quiztech_associated_assessment_id'] ) );
|
||||||
|
$assessment_id = '' === $assessment_id ? '' : absint( $assessment_id );
|
||||||
|
update_post_meta( $new_or_updated_post_id, '_quiztech_associated_assessment_id', $assessment_id );
|
||||||
|
} else {
|
||||||
|
// If not set in POST, maybe delete it? Or assume it wasn't part of the form?
|
||||||
|
// For now, let's assume if it's not sent, we don't change it.
|
||||||
|
// delete_post_meta($new_or_updated_post_id, '_quiztech_associated_assessment_id');
|
||||||
|
}
|
||||||
|
// Add other meta field updates here if needed
|
||||||
|
}
|
||||||
|
// --- End Meta Fields Update ---
|
||||||
|
|
||||||
|
|
||||||
|
// Send success response
|
||||||
|
$success_message = $is_update
|
||||||
|
? ( $result === 0 ? esc_html__( 'Job details saved (no changes detected).', 'quiztech' ) : esc_html__( 'Job updated successfully.', 'quiztech' ) )
|
||||||
|
: esc_html__( 'Job created successfully.', 'quiztech' );
|
||||||
|
|
||||||
|
wp_send_json_success( [
|
||||||
|
'message' => $success_message,
|
||||||
|
'job_id' => $new_or_updated_post_id
|
||||||
|
] );
|
||||||
|
|
||||||
}
|
}
|
||||||
add_action( 'wp_ajax_quiztech_save_job', 'quiztech_ajax_save_job' ); // Use new action hook
|
add_action( 'wp_ajax_quiztech_save_job', 'quiztech_ajax_save_job' ); // Use new action hook
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ jQuery(document).ready(function($) {
|
||||||
function resetAndPrepareForm(mode = 'add') {
|
function resetAndPrepareForm(mode = 'add') {
|
||||||
formElement[0].reset(); // Reset native form fields
|
formElement[0].reset(); // Reset native form fields
|
||||||
jobIdField.val(''); // Clear hidden ID
|
jobIdField.val(''); // Clear hidden ID
|
||||||
|
formElement.find('#quiztech_associated_assessment_id').val(''); // Reset assessment dropdown
|
||||||
statusDiv.empty().removeClass('error success'); // Clear status messages
|
statusDiv.empty().removeClass('error success'); // Clear status messages
|
||||||
spinner.css('visibility', 'hidden');
|
spinner.css('visibility', 'hidden');
|
||||||
|
|
||||||
|
|
@ -80,6 +81,8 @@ jQuery(document).ready(function($) {
|
||||||
jobIdField.val(data.id);
|
jobIdField.val(data.id);
|
||||||
jobTitleField.val(data.title);
|
jobTitleField.val(data.title);
|
||||||
jobDescriptionField.val(data.description);
|
jobDescriptionField.val(data.description);
|
||||||
|
// Populate the linked assessment dropdown
|
||||||
|
formElement.find('#quiztech_associated_assessment_id').val(data.assessment_id || ''); // Set to empty string if null/undefined
|
||||||
|
|
||||||
formWrapper.slideDown(); // Show the form
|
formWrapper.slideDown(); // Show the form
|
||||||
// Scroll to form for better UX
|
// Scroll to form for better UX
|
||||||
|
|
@ -114,7 +117,8 @@ jQuery(document).ready(function($) {
|
||||||
nonce: quiztechThemeData.save_job_nonce, // Use new nonce
|
nonce: quiztechThemeData.save_job_nonce, // Use new nonce
|
||||||
job_id: jobIdField.val(), // Include job_id (will be empty for new jobs)
|
job_id: jobIdField.val(), // Include job_id (will be empty for new jobs)
|
||||||
job_title: jobTitleField.val(),
|
job_title: jobTitleField.val(),
|
||||||
job_description: jobDescriptionField.val()
|
job_description: jobDescriptionField.val(),
|
||||||
|
quiztech_associated_assessment_id: formElement.find('#quiztech_associated_assessment_id').val() // Add assessment ID
|
||||||
};
|
};
|
||||||
|
|
||||||
$.post(quiztechThemeData.ajax_url, formData)
|
$.post(quiztechThemeData.ajax_url, formData)
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,40 @@ get_header(); ?>
|
||||||
<textarea id="job_description" name="job_description" rows="10" style="width: 100%;"></textarea>
|
<textarea id="job_description" name="job_description" rows="10" style="width: 100%;"></textarea>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<label for="quiztech_associated_assessment_id"><?php esc_html_e( 'Linked Assessment:', 'quiztech' ); ?></label><br />
|
||||||
|
<?php
|
||||||
|
// Query published assessments
|
||||||
|
$assessments_query = new WP_Query( [
|
||||||
|
'post_type' => 'assessment',
|
||||||
|
'posts_per_page' => -1,
|
||||||
|
'post_status' => 'publish',
|
||||||
|
'orderby' => 'title',
|
||||||
|
'order' => 'ASC',
|
||||||
|
] );
|
||||||
|
|
||||||
|
echo '<select name="quiztech_associated_assessment_id" id="quiztech_associated_assessment_id" style="width: 100%;">';
|
||||||
|
echo '<option value="">' . esc_html__( '-- None --', 'quiztech' ) . '</option>';
|
||||||
|
|
||||||
|
if ( $assessments_query->have_posts() ) {
|
||||||
|
while ( $assessments_query->have_posts() ) {
|
||||||
|
$assessments_query->the_post();
|
||||||
|
$assessment_id = get_the_ID();
|
||||||
|
$assessment_title = get_the_title();
|
||||||
|
// Note: The 'selected' attribute will be handled by JavaScript when editing
|
||||||
|
echo '<option value="' . esc_attr( $assessment_id ) . '">' . esc_html( $assessment_title ) . '</option>';
|
||||||
|
}
|
||||||
|
wp_reset_postdata(); // Restore original post data
|
||||||
|
}
|
||||||
|
echo '</select>';
|
||||||
|
|
||||||
|
if ( ! $assessments_query->have_posts() ) {
|
||||||
|
echo '<br><small>' . esc_html__( 'No assessments found. Please create an assessment first.', 'quiztech' ) . '</small>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" name="submit_new_job" class="button button-primary" value="<?php esc_attr_e( 'Save Job', 'quiztech' ); ?>" />
|
<input type="submit" name="submit_new_job" class="button button-primary" value="<?php esc_attr_e( 'Save Job', 'quiztech' ); ?>" />
|
||||||
<button type="button" class="button cancel-add-job"><?php esc_html_e( 'Cancel', 'quiztech' ); ?></button>
|
<button type="button" class="button cancel-add-job"><?php esc_html_e( 'Cancel', 'quiztech' ); ?></button>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue