class.swpm-cronjob.php 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. * Description of BCronJob
  4. *
  5. * @author nur
  6. */
  7. class SwpmCronJob {
  8. public function __construct() {
  9. add_action('swpm_account_status_event', array(&$this, 'update_account_status'));
  10. add_action('swpm_delete_pending_account_event', array(&$this, 'delete_pending_account'));
  11. add_action('swpm_delete_pending_account_event', array($this, 'delete_pending_email_activation_data'));
  12. }
  13. public function update_account_status() {
  14. global $wpdb;
  15. for ($counter = 0;; $counter += 100) {
  16. $query = $wpdb->prepare("SELECT member_id, membership_level, subscription_starts, account_state
  17. FROM {$wpdb->prefix}swpm_members_tbl
  18. WHERE membership_level NOT IN ( SELECT id FROM {$wpdb->prefix}swpm_membership_tbl
  19. WHERE subscription_period = '' OR subscription_period = '0' )
  20. LIMIT %d, 100", $counter);
  21. $results = $wpdb->get_results($query);
  22. if (empty($results)) {
  23. break;
  24. }
  25. $expired = array();
  26. foreach ($results as $result) {
  27. $timestamp = SwpmUtils::get_expiration_timestamp($result);
  28. if ($timestamp < time() && $result->account_state == 'active') {
  29. $expired[] = $result->member_id;
  30. }
  31. }
  32. if (count($expired) > 0) {
  33. $query = "UPDATE {$wpdb->prefix}swpm_members_tbl
  34. SET account_state='expired' WHERE member_id IN (" . implode(',', $expired) . ")";
  35. $wpdb->query($query);
  36. }
  37. }
  38. }
  39. public function delete_pending_account() {
  40. global $wpdb;
  41. $interval = SwpmSettings::get_instance()->get_value('delete-pending-account');
  42. if (empty($interval)) {
  43. return;
  44. }
  45. for ($counter = 0;; $counter += 100) {
  46. $query = $wpdb->prepare("SELECT member_id
  47. FROM
  48. {$wpdb->prefix}swpm_members_tbl
  49. WHERE account_state='pending'
  50. AND subscription_starts < DATE_SUB(NOW(), INTERVAL %d MONTH) LIMIT %d, 100", $interval, $counter);
  51. $results = $wpdb->get_results($query);
  52. if (empty($results)) {
  53. break;
  54. }
  55. $to_delete = array();
  56. foreach ($results as $result) {
  57. $to_delete[] = $result->member_id;
  58. }
  59. if (count($to_delete) > 0) {
  60. SwpmLog::log_simple_debug("Auto deleting pending account.", true);
  61. $query = "DELETE FROM {$wpdb->prefix}swpm_members_tbl
  62. WHERE member_id IN (" . implode(',', $to_delete) . ")";
  63. $wpdb->query($query);
  64. }
  65. }
  66. }
  67. public function delete_pending_email_activation_data() {
  68. global $wpdb;
  69. $q = "SELECT * FROM {$wpdb->prefix}options WHERE option_name LIKE '%swpm_email_activation_data_usr_%'";
  70. $res = $wpdb->get_results($q);
  71. if (empty($res)) {
  72. return;
  73. }
  74. foreach ($res as $data) {
  75. $value = unserialize($data->option_value);
  76. $timestamp = isset($value['timestamp']) ? $value['timestamp'] : 0;
  77. $now = time();
  78. if ($now > $timestamp * 60 * 60 * 24) {
  79. delete_option($data->option_name);
  80. }
  81. }
  82. }
  83. }