PageRenderTime 53ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/bulk-delete/include/class-bulk-delete-users.php

https://gitlab.com/eita/encontre-consumo-responsavel
PHP | 248 lines | 180 code | 33 blank | 35 comment | 23 complexity | d82fd52144b9a624371be75bea5f3b00 MD5 | raw file
  1. <?php
  2. /**
  3. * Utility class for deleting users
  4. *
  5. * @package Bulk_Delete
  6. * @subpackage Users
  7. * @author Sudar
  8. */
  9. class Bulk_Delete_Users {
  10. /**
  11. * Render delete users box
  12. */
  13. public static function render_delete_users_by_role_box() {
  14. if ( Bulk_Delete_Util::is_users_box_hidden( Bulk_Delete::BOX_USERS ) ) {
  15. printf( __( 'This section just got enabled. Kindly <a href = "%1$s">refresh</a> the page to fully enable it.', 'bulk-delete' ), 'admin.php?page=' . Bulk_Delete::USERS_PAGE_SLUG );
  16. return;
  17. }
  18. ?>
  19. <!-- Users Start-->
  20. <h4><?php _e( 'Select the user roles from which you want to delete users', 'bulk-delete' ); ?></h4>
  21. <fieldset class="options">
  22. <table class="optiontable">
  23. <?php
  24. $users_count = count_users();
  25. foreach( $users_count['avail_roles'] as $role => $count ) {
  26. ?>
  27. <tr>
  28. <td scope="row" >
  29. <input name="smbdu_roles[]" value = "<?php echo $role; ?>" type = "checkbox">
  30. <label for="smbdu_roles"><?php echo $role; ?> (<?php echo $count . " "; _e( 'Users', 'bulk-delete' ); ?>)</label>
  31. </td>
  32. </tr>
  33. <?php
  34. }
  35. ?>
  36. <tr>
  37. <td scope="row">
  38. <h4><?php _e( 'Choose your filtering options', 'bulk-delete' ); ?></h4>
  39. </td>
  40. </tr>
  41. <?php
  42. if ( !Bulk_Delete_Util::is_simple_login_log_present() ) {
  43. $disabled = "disabled";
  44. } else {
  45. $disabled = '';
  46. }
  47. ?>
  48. <tr>
  49. <td scope="row">
  50. <input name="smbdu_login_restrict" id="smbdu_login_restrict" value = "true" type = "checkbox" <?php echo $disabled; ?>>
  51. <?php _e( 'Only restrict to users who have not logged in the last ', 'bulk-delete' );?>
  52. <input type ="textbox" name="smbdu_login_days" id="smbdu_login_days" value ="0" maxlength="4" size="4" <?php echo $disabled; ?> ><?php _e( 'days', 'bulk-delete' );?>
  53. <?php
  54. if ( !Bulk_Delete_Util::is_simple_login_log_present() ) {
  55. ?>
  56. <span style = "color:red">
  57. <?php _e( 'Need Simple Login Log Plugin', 'bulk-delete' ); ?> <a href = "http://wordpress.org/plugins/simple-login-log/">Install now</a>
  58. </span>
  59. <?php
  60. }
  61. ?>
  62. </td>
  63. </tr>
  64. <tr>
  65. <td scope="row">
  66. <input name="smbdu_role_no_posts" id="smbdu_role_no_posts" value = "true" type = "checkbox">
  67. <?php _e( "Only if user doesn't have any post. Only posts from 'post' post type would be considered.", 'bulk-delete' ); ?>
  68. </td>
  69. </tr>
  70. <tr>
  71. <td scope="row">
  72. <input name="smbdu_userrole_limit" id="smbdu_userrole_limit" value = "true" type = "checkbox">
  73. <?php _e( 'Only delete first ', 'bulk-delete' );?>
  74. <input type="textbox" name="smbdu_userrole_limit_to" id="smbdu_userrole_limit_to" disabled value ="0" maxlength="4" size="4">
  75. <?php _e( 'users.', 'bulk-delete' );?>
  76. <?php _e( 'Use this option if there are more than 1000 users or the script timesout.', 'bulk-delete' ) ?>
  77. </td>
  78. </tr>
  79. <tr>
  80. <td scope="row">
  81. <input name="smbdu_userrole_cron" value = "false" type = "radio" checked="checked"> <?php _e( 'Delete now', 'bulk-delete' ); ?>
  82. <input name="smbdu_userrole_cron" value = "true" type = "radio" id = "smbdu_userrole_cron" disabled > <?php _e( 'Schedule', 'bulk-delete' ); ?>
  83. <input name="smbdu_userrole_cron_start" id = "smbdu_userrole_cron_start" value = "now" type = "text" disabled><?php _e( 'repeat ', 'bulk-delete' );?>
  84. <select name = "smbdu_userrole_cron_freq" id = "smbdu_userrole_cron_freq" disabled>
  85. <option value = "-1"><?php _e( "Don't repeat", 'bulk-delete' ); ?></option>
  86. <?php
  87. $schedules = wp_get_schedules();
  88. foreach($schedules as $key => $value) {
  89. ?>
  90. <option value = "<?php echo $key; ?>"><?php echo $value['display']; ?></option>
  91. <?php
  92. }
  93. ?>
  94. </select>
  95. <span class = "bdu-users-by-role-pro" style = "color:red"><?php _e( 'Only available in Pro Addon', 'bulk-delete' ); ?> <a href = "http://bulkwp.com/addons/scheduler-for-deleting-users-by-role/?utm_source=wpadmin&utm_campaign=BulkDelete&utm_medium=buynow&utm_content=bd-u-ur">Buy now</a></span>
  96. </td>
  97. </tr>
  98. <tr>
  99. <td scope="row">
  100. <?php _e( 'Enter time in Y-m-d H:i:s format or enter now to use current time', 'bulk-delete' );?>
  101. </td>
  102. </tr>
  103. </table>
  104. </fieldset>
  105. <p>
  106. <button type="submit" name="bd_action" value = "delete_users_by_role" class="button-primary"><?php _e( 'Bulk Delete ', 'bulk-delete' ) ?>&raquo;</button>
  107. </p>
  108. <!-- Users end-->
  109. <?php
  110. }
  111. /**
  112. * Process the request for deleting users by role
  113. *
  114. * @static
  115. * @since 5.0
  116. */
  117. public static function do_delete_users_by_role() {
  118. $delete_options = array();
  119. $delete_options['selected_roles'] = array_get( $_POST, 'smbdu_roles' );
  120. $delete_options['no_posts'] = array_get( $_POST, 'smbdu_role_no_posts', FALSE );
  121. $delete_options['login_restrict'] = array_get( $_POST, 'smbdu_login_restrict', FALSE );
  122. $delete_options['login_days'] = array_get( $_POST, 'smbdu_login_days' );
  123. $delete_options['limit_to'] = absint( array_get( $_POST, 'smbdu_userrole_limit_to', 0 ) );
  124. if (array_get( $_POST, 'smbdu_userrole_cron', 'false' ) == 'true' ) {
  125. $freq = $_POST['smbdu_userrole_cron_freq'];
  126. $time = strtotime( $_POST['smbdu_userrole_cron_start'] ) - ( get_option( 'gmt_offset' ) * 60 * 60 );
  127. if ( $freq == -1 ) {
  128. wp_schedule_single_event( $time, Bulk_Delete::CRON_HOOK_USER_ROLE, array( $delete_options ) );
  129. } else {
  130. wp_schedule_event( $time, $freq , Bulk_Delete::CRON_HOOK_USER_ROLE, array( $delete_options ) );
  131. }
  132. $msg = __( 'Users from the selected userrole are scheduled for deletion.', 'bulk-delete' ) . ' ' .
  133. sprintf( __( 'See the full list of <a href = "%s">scheduled tasks</a>' , 'bulk-delete' ), get_bloginfo( "wpurl" ) . '/wp-admin/admin.php?page=' . Bulk_Delete::CRON_PAGE_SLUG );
  134. } else {
  135. $deleted_count = self::delete_users_by_role( $delete_options );
  136. $msg = sprintf( _n('Deleted %d user from the selected roles', 'Deleted %d users from the selected role' , $deleted_count, 'bulk-delete' ), $deleted_count );
  137. }
  138. add_settings_error(
  139. Bulk_Delete::USERS_PAGE_SLUG,
  140. 'deleted-users',
  141. $msg,
  142. 'updated'
  143. );
  144. }
  145. /**
  146. * Delete users by user role
  147. *
  148. * @static
  149. */
  150. public static function delete_users_by_role( $delete_options ) {
  151. if( !function_exists( 'wp_delete_user' ) ) {
  152. require_once( ABSPATH . 'wp-admin/includes/user.php' );
  153. }
  154. $count = 0;
  155. foreach ( $delete_options['selected_roles'] as $role ) {
  156. $options = array();
  157. $options['role'] = $role;
  158. if ( $delete_options['limit_to'] > 0 ) {
  159. $options['number'] = $limit_to;
  160. }
  161. $users = get_users( $options );
  162. foreach ( $users as $user ) {
  163. if ( $delete_options['no_posts'] == TRUE && count_user_posts ( $user->ID ) > 0 ) {
  164. continue;
  165. }
  166. if ( $delete_options['login_restrict'] == TRUE ) {
  167. $login_days = $delete_options['login_days'];
  168. $last_login = self::get_last_login( $user->ID );
  169. if ( $last_login != NULL ) {
  170. if ( strtotime( $last_login ) > strtotime( '-' . $login_days . 'days' ) ) {
  171. continue;
  172. }
  173. } else {
  174. continue;
  175. }
  176. }
  177. wp_delete_user( $user->ID );
  178. $count ++;
  179. }
  180. }
  181. return $count;
  182. }
  183. /**
  184. * Filter JS Array and add validation hooks
  185. *
  186. * @since 5.4
  187. * @static
  188. * @param array $js_array JavaScript Array
  189. * @return array Modified JavaScript Array
  190. */
  191. public static function filter_js_array( $js_array ) {
  192. $js_array['dt_iterators'][] = 'u_userrole';
  193. $js_array['pre_action_msg']['delete_users_by_role'] = 'deleteUsersWarning';
  194. $js_array['msg']['deleteUsersWarning'] = __( 'Are you sure you want to delete all the users from the selected user role?', 'bulk-delete' );
  195. $js_array['error_msg']['delete_users_by_role'] = 'selectOneUserRole';
  196. $js_array['msg']['selectOneUserRole'] = __( 'Select at least one user role from which users should be deleted', 'bulk-delete' );
  197. return $js_array;
  198. }
  199. /**
  200. * Find the last login date/time of a user
  201. *
  202. * @static
  203. * @access private
  204. */
  205. private static function get_last_login( $user_id ) {
  206. global $wpdb;
  207. return $wpdb->get_var( $wpdb->prepare( "SELECT time FROM {$wpdb->prefix}" . Bulk_Delete_Util::SIMPLE_LOGIN_LOG_TABLE .
  208. " WHERE uid = %d ORDER BY time DESC LIMIT 1", $user_id ) );
  209. }
  210. }
  211. add_action( 'bd_delete_users_by_role', array( 'Bulk_Delete_Users', 'do_delete_users_by_role' ) );
  212. add_filter( 'bd_javascript_array', array( 'Bulk_Delete_Users' , 'filter_js_array' ) );
  213. ?>