class-simple-job-board-privacy-eraser.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php if (!defined('ABSPATH')) { exit; } // Exit if accessed directly
  2. /**
  3. * Simple_Job_Board_Privacy_Eraser Class
  4. *
  5. * @link https://wordpress.org/plugins/simple-job-board
  6. *
  7. * @since 2.6.0
  8. *
  9. * @package Simple_Job_Board
  10. * @subpackage Simple_Job_Board/includes
  11. * @author PressTigers <support@presstigers.com>
  12. */
  13. class Simple_Job_Board_Privacy_Eraser {
  14. /**
  15. * Initialize the class and set its properties.
  16. *
  17. * @since 2.6.0
  18. */
  19. public function __construct() {
  20. // Hook - Register SJB Eraser Implementation to WP Core Eraser
  21. add_filter('wp_privacy_personal_data_erasers', array($this, 'register_erasers'));
  22. }
  23. /**
  24. * Integrate applicant data eraser implementation in WP core eraser.
  25. *
  26. * @since 2.6.0
  27. *
  28. * @param array $erasers List of eraser callbacks.
  29. * @return array
  30. */
  31. public function register_erasers($erasers = array()) {
  32. $erasers['applicant-eraser'] = array(
  33. 'eraser_friendly_name' => __('Applicant Data Eraser'),
  34. 'callback' => array($this, 'applicant_data_eraser'),
  35. );
  36. return $erasers;
  37. }
  38. /**
  39. * Erase applicant's data.
  40. *
  41. * @since 2.6.0
  42. */
  43. public function applicant_data_eraser($email_address, $page) {
  44. global $wpdb;
  45. $page = (int) $page;
  46. $erasure_enabled = sjb_string_to_bool(get_option('sjb_erasure_request_removes_applicant_data', 'no'));
  47. // Response Array
  48. $response = array(
  49. 'items_removed' => FALSE,
  50. 'items_retained' => FALSE,
  51. 'messages' => array(),
  52. 'done' => TRUE,
  53. );
  54. // Get applicants assoicated with requested user email
  55. $applicants = $wpdb->get_results($wpdb->prepare("
  56. SELECT p.ID FROM {$wpdb->prefix}posts AS p INNER JOIN {$wpdb->prefix}postmeta AS pt ON p.ID = pt.post_id WHERE pt.meta_value = %s AND p.post_type = %s AND p.post_status = %s", $email_address, 'jobpost_applicants', 'publish'));
  57. if (!empty($applicants)):
  58. foreach ($applicants as $applicant) {
  59. if ( $erasure_enabled ) {
  60. $this->remove_applicant_personal_data( $applicant->ID );
  61. /* Translators: %s Application ID. */
  62. $response['messages'][] = sprintf(__('Removed personal data from application %s.', 'simple-job-board'), $applicant->ID);
  63. $response['items_removed'] = TRUE;
  64. } else {
  65. /* Translators: %s Application ID. */
  66. $response['messages'][] = sprintf(__('Personal data within application %s has been retained.', 'simple-job-board'), $applicant->ID);
  67. $response['items_retained'] = TRUE;
  68. }
  69. }
  70. endif;
  71. return $response;
  72. }
  73. /**
  74. * Remove applicant personal details.
  75. *
  76. * @since 2.6.0
  77. *
  78. * $applicant Object Applicant Object
  79. */
  80. public function remove_applicant_personal_data( $applicant_id ) {
  81. $keys = get_post_custom_keys($applicant_id);
  82. // Applicant Name
  83. if (NULL != $keys):
  84. foreach ($keys as $key) {
  85. if ('jobapp_' === substr($key, 0, 7)) {
  86. update_post_meta($applicant_id, $key, '[deleted]');
  87. }
  88. }
  89. // Delete resume & its data from DB
  90. if ( '' != get_post_meta($applicant_id, 'resume_path', TRUE))
  91. unlink(get_post_meta($applicant_id, 'resume_path', TRUE));
  92. delete_post_meta($applicant_id, 'resume');
  93. endif;
  94. }
  95. }
  96. new Simple_Job_Board_Privacy_Eraser();