diff --git a/ddhh-job-manager.php b/ddhh-job-manager.php index 037ab53..8fc1dcf 100644 --- a/ddhh-job-manager.php +++ b/ddhh-job-manager.php @@ -42,6 +42,8 @@ require_once DDHH_JM_PLUGIN_DIR . 'includes/class-access-control.php'; require_once DDHH_JM_PLUGIN_DIR . 'includes/class-notifications.php'; require_once DDHH_JM_PLUGIN_DIR . 'includes/class-archive.php'; require_once DDHH_JM_PLUGIN_DIR . 'includes/class-admin-ui.php'; +require_once DDHH_JM_PLUGIN_DIR . 'includes/class-user-preferences.php'; +require_once DDHH_JM_PLUGIN_DIR . 'includes/class-scheduler.php'; require_once DDHH_JM_PLUGIN_DIR . 'includes/class-ddhh-job-manager.php'; /** diff --git a/includes/class-ddhh-job-manager.php b/includes/class-ddhh-job-manager.php index a1adadf..1c85a4c 100644 --- a/includes/class-ddhh-job-manager.php +++ b/includes/class-ddhh-job-manager.php @@ -72,5 +72,11 @@ class DDHH_JM_Job_Manager { if ( is_admin() ) { add_action( 'init', array( 'DDHH_JM_Admin_UI', 'setup_hooks' ) ); } + + // Initialize user preferences + add_action( 'init', array( 'DDHH_JM_User_Preferences', 'setup_hooks' ) ); + + // Initialize scheduler for async email processing + add_action( 'init', array( 'DDHH_JM_Scheduler', 'setup_hooks' ) ); } } diff --git a/includes/class-scheduler.php b/includes/class-scheduler.php new file mode 100644 index 0000000..565059a --- /dev/null +++ b/includes/class-scheduler.php @@ -0,0 +1,84 @@ + $batch, + 'job_id' => $job_id, + ), + 'email-notifications', + true, + 10 + ); + + $batch_count++; + error_log( sprintf( + 'DDHH_JM_Scheduler: Scheduled batch %d with %d users for job ID %d', + $batch_count, + count( $batch ), + $job_id + ) ); + } + + error_log( sprintf( + 'DDHH_JM_Scheduler: Scheduled %d total batches for %d users for job ID %d', + $batch_count, + count( $user_ids ), + $job_id + ) ); + + return $batch_count; + } +} diff --git a/includes/class-user-preferences.php b/includes/class-user-preferences.php new file mode 100644 index 0000000..a6e6b88 --- /dev/null +++ b/includes/class-user-preferences.php @@ -0,0 +1,138 @@ +roles, true ) ) { + return; + } + + // Get current preference + $notify_enabled = get_user_meta( $user->ID, self::META_KEY_NOTIFY, true ); + + // Create nonce for security + wp_nonce_field( self::NONCE_ACTION, 'ddhh_jm_user_preferences_nonce' ); + + ?> +

Benachrichtigungen

+ + + + + +
Stellenangebote + +

+ Sie erhalten eine E-Mail, wenn ein neues Stellenangebot veröffentlicht wird. +

+
+ roles, true ) ) { + return; + } + + // Save preference (checkbox pattern: isset = '1', not set = '0') + $notify_value = isset( $_POST['ddhh_jm_notify_new_jobs'] ) ? '1' : '0'; + update_user_meta( $user_id, self::META_KEY_NOTIFY, $notify_value ); + } + + /** + * Get array of user IDs who have opted in to notifications + * + * @return array Array of user IDs. + */ + public static function get_opted_in_mentors() { + $args = array( + 'role' => 'subscriber', + 'meta_query' => array( + array( + 'key' => self::META_KEY_NOTIFY, + 'value' => '1', + ), + ), + 'fields' => 'ID', + ); + + $user_query = new WP_User_Query( $args ); + $user_ids = $user_query->get_results(); + + // Log if query fails + if ( empty( $user_ids ) && ! is_array( $user_ids ) ) { + error_log( 'DDHH Job Manager: Failed to query opted-in mentors' ); + return array(); + } + + return is_array( $user_ids ) ? $user_ids : array(); + } +}