Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
build
/
wp-admin
/
.tmb
/
wp-content
/
plugins
/
bulk-delete
/
include
/
Core
/
Base
/
Mixin
:
Renderer.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace BulkWP\BulkDelete\Core\Base\Mixin; defined( 'ABSPATH' ) || exit; // Exit if accessed directly. /** * Container of all Render methods. * * Ideally this should be a Trait. Since Bulk Delete still supports PHP 5.3, this is implemented as a class. * Once the minimum requirement is increased to PHP 5.3, this will be changed into a Trait. * * @since 6.0.0 */ abstract class Renderer extends Fetcher { /** * Slug for the form fields. * * @var string */ protected $field_slug; /** * Render post status including custom post status. * * @param string $post_type The post type for which the post status should be displayed. */ protected function render_post_status( $post_type = 'post' ) { $post_statuses = $this->get_post_statuses(); $post_count = wp_count_posts( $post_type ); foreach ( $post_statuses as $post_status ) : ?> <tr> <td> <input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>[]" id="smbd_<?php echo esc_attr( $post_status->name ); ?>" value="<?php echo esc_attr( $post_status->name ); ?>" type="checkbox"> <label for="smbd_<?php echo esc_attr( $post_status->name ); ?>"> <?php echo esc_html( $post_status->label ), ' '; ?> <?php if ( property_exists( $post_count, $post_status->name ) ) : ?> (<?php echo absint( $post_count->{ $post_status->name } ) . ' ', __( 'Posts', 'bulk-delete' ); ?>) <?php endif; ?> </label> </td> </tr> <?php endforeach; } /** * Render Post Types as radio buttons. */ protected function render_post_type_as_radios() { $post_types = $this->get_post_types(); ?> <?php foreach ( $post_types as $post_type ) : ?> <tr> <td scope="row"> <input type="radio" name="<?php echo esc_attr( $this->field_slug ); ?>_post_type" value="<?php echo esc_attr( $post_type->name ); ?>" id="smbd_post_type_<?php echo esc_html( $post_type->name ); ?>"> <label for="smbd_post_type_<?php echo esc_html( $post_type->name ); ?>"> <?php echo esc_html( $post_type->label ); ?> </label> </td> </tr> <?php endforeach; ?> <?php } /** * Render Post type with status and post count checkboxes. * * @since 6.0.1 Added $multiple param. * * @param bool $multiple_select Whether multiple select should be supported. Default true. */ protected function render_post_type_with_status( $multiple_select = true ) { $post_types_by_status = $this->get_post_types_by_status(); $name = 'smbd_' . $this->field_slug; if ( $multiple_select ) { $name .= '[]'; } ?> <tr> <td scope="row" colspan="2"> <select data-placeholder="<?php esc_attr_e( 'Select Post Type', 'bulk-delete' ); ?>" name="<?php echo esc_attr( $name ); ?>" class="enhanced-post-types-with-status" <?php if ( $multiple_select ) : ?> multiple <?php endif; ?> > <?php foreach ( $post_types_by_status as $post_type => $all_status ) : ?> <optgroup label="<?php echo esc_html( $post_type ); ?>"> <?php foreach ( $all_status as $status_key => $status_value ) : ?> <option value="<?php echo esc_attr( $status_key ); ?>"> <?php echo esc_html( $status_value ); ?> </option> <?php endforeach; ?> </optgroup> <?php endforeach; ?> </select> </td> </tr> <?php } /** * Split post type and status. * * @param string $str Post type and status combination. * * @return array Post type and status as elements of array. */ protected function split_post_type_and_status( $str ) { $type_status = array(); if ( strpos( $str, '|' ) === false ) { $str_arr = explode( '-', $str ); } else { $str_arr = explode( '|', $str ); } if ( count( $str_arr ) > 1 ) { $type_status['status'] = end( $str_arr ); $type_status['type'] = implode( '-', array_slice( $str_arr, 0, - 1 ) ); } else { $type_status['status'] = 'publish'; $type_status['type'] = $str; } return $type_status; } /** * Render post reassign settings. */ protected function render_post_reassign_settings() { ?> <tr> <td scope="row" colspan="2"> <label><input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_post_reassign" value="false" type="radio" checked="checked" class="post-reassign"> <?php _e( 'Also delete all posts of the users', 'bulk-delete' ); ?></label> <label><input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_post_reassign" value="true" type="radio" id="smbd_<?php echo esc_attr( $this->field_slug ); ?>_post_reassign" class="post-reassign"> <?php _e( 'Re-assign the posts to', 'bulk-delete' ); ?></label> <?php wp_dropdown_users( array( 'name' => 'smbd_' . esc_attr( $this->field_slug ) . '_reassign_user_id', 'class' => 'reassign-user', 'show_option_none' => __( 'Select User', 'bulk-delete' ), ) ); ?> </td> </tr> <?php } /** * Render user role dropdown. * * @param bool $show_users_with_no_roles Should users with no user roles be shown? Default false. */ protected function render_user_role_dropdown( $show_users_with_no_roles = false ) { $roles = get_editable_roles(); $users_count = count_users(); ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_roles[]" class="enhanced-role-dropdown" multiple="multiple" data-placeholder="<?php _e( 'Select User Role', 'bulk-delete' ); ?>"> <?php foreach ( $roles as $role => $role_details ) : ?> <option value="<?php echo esc_attr( $role ); ?>"> <?php echo esc_html( $role_details['name'] ), ' (', absint( $this->get_user_count_by_role( $role, $users_count ) ), ' ', __( 'Users', 'bulk-delete' ), ')'; ?> </option> <?php endforeach; ?> <?php if ( $show_users_with_no_roles ) : ?> <?php if ( isset( $users_count['avail_roles']['none'] ) && $users_count['avail_roles']['none'] > 0 ) : ?> <option value="none"> <?php echo __( 'No role', 'bulk-delete' ), ' (', absint( $users_count['avail_roles']['none'] ), ' ', __( 'Users', 'bulk-delete' ), ')'; ?> </option> <?php endif; ?> <?php endif; ?> </select> <?php } /** * Render Post type dropdown. */ protected function render_post_type_dropdown() { bd_render_post_type_dropdown( $this->field_slug ); } /** * Render Taxonomy dropdown. */ protected function render_taxonomy_dropdown() { $builtin_taxonomies = get_taxonomies( array( '_builtin' => true ), 'objects' ); $custom_taxonomies = get_taxonomies( array( '_builtin' => false ), 'objects' ); ?> <select class="enhanced-dropdown" name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_taxonomy"> <optgroup label="<?php esc_attr_e( 'Built-in Taxonomies', 'bulk-delete' ); ?>"> <?php foreach ( $builtin_taxonomies as $taxonomy ) : ?> <option value="<?php echo esc_attr( $taxonomy->name ); ?>"> <?php echo esc_html( $taxonomy->label . ' (' . $taxonomy->name . ')' ); ?> </option> <?php endforeach; ?> </optgroup> <optgroup label="<?php esc_attr_e( 'Custom Taxonomies', 'bulk-delete' ); ?>"> <?php foreach ( $custom_taxonomies as $taxonomy ) : ?> <option value="<?php echo esc_attr( $taxonomy->name ); ?>"> <?php echo esc_html( $taxonomy->label . ' (' . $taxonomy->name . ')' ); ?> </option> <?php endforeach; ?> </optgroup> </select> <?php } /** * Render Category dropdown. */ protected function render_category_dropdown() { $categories = $this->get_categories(); ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_category[]" data-placeholder="<?php _e( 'Select Categories', 'bulk-delete' ); ?>" class="<?php echo sanitize_html_class( $this->enable_ajax_if_needed_to_dropdown_class_name( count( $categories ), 'select2-taxonomy' ) ); ?>" data-taxonomy="category" multiple> <option value="all"> <?php _e( 'All Categories', 'bulk-delete' ); ?> </option> <?php foreach ( $categories as $category ) : ?> <option value="<?php echo absint( $category->cat_ID ); ?>"> <?php echo esc_html( $category->cat_name ), ' (', absint( $category->count ), ' ', __( 'Posts', 'bulk-delete' ), ')'; ?> </option> <?php endforeach; ?> </select> <?php } /** * Render String based comparison operators dropdown. */ protected function render_string_comparison_operators() { ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_operator"> <option value="equal_to"><?php _e( 'equal to', 'bulk-delete' ); ?></option> <option value="not_equal_to"><?php _e( 'not equal to', 'bulk-delete' ); ?></option> <option value="starts_with"><?php _e( 'starts with', 'bulk-delete' ); ?></option> <option value="ends_with"><?php _e( 'ends with', 'bulk-delete' ); ?></option> <option value="contains"><?php _e( 'contains', 'bulk-delete' ); ?></option> <option value="not_contains"><?php _e( 'not contains', 'bulk-delete' ); ?></option> </select> <?php } /** * Render number based comparison operators dropdown. */ protected function render_number_comparison_operators() { ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_operator"> <option value="="><?php _e( 'equal to', 'bulk-delete' ); ?></option> <option value="!="><?php _e( 'not equal to', 'bulk-delete' ); ?></option> <option value="<"><?php _e( 'less than', 'bulk-delete' ); ?></option> <option value=">"><?php _e( 'greater than', 'bulk-delete' ); ?></option> </select> <?php } /** * Render data types dropdown. */ protected function render_data_types_dropdown() { ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_type" class="meta-type"> <option value="numeric"><?php _e( 'Number', 'bulk-delete' ); ?></option> <option value="string"><?php _e( 'Character', 'bulk-delete' ); ?></option> <option value="date"><?php _e( 'Date', 'bulk-delete' ); ?></option> </select> <?php } /** * Render numeric comparison operators dropdown. * * @param string $class Class to be applied. * @param array $operators List of Operators needed. */ protected function render_numeric_operators_dropdown( $class = 'numeric', $operators = array( 'all' ) ) { $all_numeric_operators = array( '=' => 'equal to', '!=' => 'not equal to', '<' => 'less than', '<=' => 'less than or equal to', '>' => 'greater than', '>=' => 'greater than or equal to', 'IN' => 'in', 'NOT IN' => 'not in', 'BETWEEN' => 'between', 'NOT BETWEEN' => 'not between', 'EXISTS' => 'exists', 'NOT EXISTS' => 'not exists', ); if ( in_array( 'all', $operators, true ) ) { $operators = array_keys( $all_numeric_operators ); } ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_operator" class= "<?php echo esc_attr( $class ); ?>"> <?php foreach ( $operators as $operator ) { echo '<option value="' . $operator . '">' . __( $all_numeric_operators[ $operator ], 'bulk-delete' ) . '</option>'; } ?> </select> <?php } /** * Render string comparison operators dropdown. * * @param string $class Class to be applied. * @param array $operators List of Operators needed. */ protected function render_string_operators_dropdown( $class = 'string', $operators = array( 'all' ) ) { // STARTS_WITH and ENDS_WITH operators needs a handler as SQL does not support these operators in queries. $all_string_operators = array( '=' => 'equal to', '!=' => 'not equal to', 'IN' => 'in', 'NOT IN' => 'not in', 'LIKE' => 'contains', 'NOT LIKE' => 'not contains', 'EXISTS' => 'exists', 'NOT EXISTS' => 'not exists', 'STARTS_WITH' => 'starts with', 'ENDS_WITH' => 'ends with', ); if ( in_array( 'all', $operators, true ) ) { $operators = array_keys( $all_string_operators ); } ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_operator" class="<?php echo esc_attr( $class ); ?>"> <?php foreach ( $operators as $operator ) { echo '<option value="' . $operator . '">' . __( $all_string_operators[ $operator ], 'bulk-delete' ) . '</option>'; } ?> </select> <?php } /** * Render Tags dropdown. */ protected function render_tags_dropdown() { $tags = $this->get_tags(); ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>[]" data-placeholder="<?php _e( 'Select Tags', 'bulk-delete' ); ?>" class="<?php echo sanitize_html_class( $this->enable_ajax_if_needed_to_dropdown_class_name( count( $tags ), 'select2-taxonomy' ) ); ?>" data-taxonomy="post_tag" multiple> <option value="all"> <?php _e( 'All Tags', 'bulk-delete' ); ?> </option> <?php foreach ( $tags as $tag ) : ?> <option value="<?php echo absint( $tag->term_id ); ?>"> <?php echo esc_html( $tag->name ), ' (', absint( $tag->count ), ' ', __( 'Posts', 'bulk-delete' ), ')'; ?> </option> <?php endforeach; ?> </select> <?php } /** * Get the class name for select2 dropdown based on the number of items present. * * @param int $count The number of items present. * @param string $class_name Primary class name. * * @return string Class name. */ protected function enable_ajax_if_needed_to_dropdown_class_name( $count, $class_name ) { if ( $count >= $this->get_enhanced_select_threshold() ) { $class_name .= '-ajax'; } return $class_name; } /** * Render Sticky Posts dropdown. */ protected function render_sticky_posts_dropdown() { $sticky_posts = $this->get_sticky_posts(); ?> <table class="optiontable"> <?php if ( count( $sticky_posts ) > 1 ) : ?> <tr> <td scope="row"> <label> <input type="checkbox" name="smbd_<?php echo esc_attr( $this->field_slug ); ?>[]" value="all"> <?php echo __( 'All sticky posts', 'bulk-delete' ), ' (', count( $sticky_posts ), ' ', __( 'Posts', 'bulk-delete' ), ')'; ?> </label> </td> </tr> <?php endif; ?> <?php foreach ( $sticky_posts as $post ) : ?> <?php $author = get_userdata( $post->post_author ); ?> <tr> <td scope="row"> <label> <input type="checkbox" name="smbd_<?php echo esc_attr( $this->field_slug ); ?>[]" value="<?php echo absint( $post->ID ); ?>"> <?php echo esc_html( $post->post_title ), ' - ', __( 'Published on', 'bulk-delete' ), ' ', get_the_date( get_option( 'date_format' ), $post->ID ), __( ' by ', 'bulk-delete' ), esc_html( $author->display_name ); ?> </label> </td> </tr> <?php endforeach; ?> </table> <?php } /** * Renders exclude sticky posts checkbox. */ protected function render_exclude_sticky_settings() { if ( $this->are_sticky_posts_present() ) : // phpcs:ignore?> <tr> <td scope="row"> <input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_exclude_sticky" id="smbd_<?php echo esc_attr( $this->field_slug ); ?>_exclude_sticky" value="true" type="checkbox"> </td> <td> <label for="smbd_<?php echo esc_attr( $this->field_slug ); ?>_exclude_sticky"><?php _e( 'Exclude sticky posts', 'bulk-delete' ); ?></label> </td> </tr> <?php endif; // phpcs:ignore?> <?php } /** * Render Post Types as checkboxes. * * @since 5.6.0 * * @param string $name Name of post type checkboxes. */ protected function render_post_type_checkboxes( $name ) { $post_types = bd_get_post_types(); ?> <?php foreach ( $post_types as $post_type ) : ?> <tr> <td scope="row"> <input type="checkbox" name="<?php echo esc_attr( $name ); ?>[]" value="<?php echo esc_attr( $post_type->name ); ?>" id="smbd_post_type_<?php echo esc_html( $post_type->name ); ?>" checked> <label for="smbd_post_type_<?php echo esc_html( $post_type->name ); ?>"> <?php echo esc_html( $post_type->label ); ?> </label> </td> </tr> <?php endforeach; ?> <?php } /** * Render the "private post" setting fields. */ protected function render_private_post_settings() { bd_render_private_post_settings( $this->field_slug ); } /** * Render sticky settings. */ protected function render_sticky_action_settings() { ?> <tr> <td scope="row" colspan="2"> <label> <input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_sticky_action" value="unsticky" type="radio" checked> <?php _e( 'Remove Sticky', 'bulk-delete' ); ?> </label> <label> <input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_sticky_action" value="delete" type="radio"> <?php _e( 'Delete Post', 'bulk-delete' ); ?> </label> </td> </tr> <?php } /** * Render filtering table header. */ protected function render_filtering_table_header() { bd_render_filtering_table_header(); } /** * Render restrict settings. */ protected function render_restrict_settings() { bd_render_restrict_settings( $this->field_slug, $this->item_type ); } /** * Render delete settings. */ protected function render_delete_settings() { bd_render_delete_settings( $this->field_slug ); /** * This action is primarily for adding delete attachment settings. * * @since 6.0.0 * * @param \BulkWP\BulkDelete\Core\Base\BaseModule The delete module. */ do_action( 'bd_render_attachment_settings', $this ); } /** * Render limit settings. * * @param string $item_type Item Type to be displayed in label. */ protected function render_limit_settings( $item_type = '' ) { if ( empty( $item_type ) ) { $item_type = $this->item_type; } bd_render_limit_settings( $this->field_slug, $item_type ); } /** * Render cron settings based on whether scheduler is present or not. */ protected function render_cron_settings() { $pro_class = ''; $disabled_attr = 'disabled'; if ( empty( $this->scheduler_url ) ) { $disabled_attr = ''; } ?> <tr> <td scope="row" colspan="2"> <label> <input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_cron" value="false" type="radio" checked="checked" class="schedule-deletion"> <?php _e( 'Delete now', 'bulk-delete' ); ?> </label> <label> <input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_cron" value="true" type="radio" class="schedule-deletion" id="smbd_<?php echo esc_attr( $this->field_slug ); ?>_cron" <?php echo esc_attr( $disabled_attr ); ?>> <?php _e( 'Schedule', 'bulk-delete' ); ?> </label> <input name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_cron_start" id="smbd_<?php echo esc_attr( $this->field_slug ); ?>_cron_start" value="now" type="text" <?php echo esc_attr( $disabled_attr ); ?> autocomplete="off"><?php _e( 'repeat ', 'bulk-delete' ); ?> <select name="smbd_<?php echo esc_attr( $this->field_slug ); ?>_cron_freq" id="smbd_<?php echo esc_attr( $this->field_slug ); ?>_cron_freq" <?php echo esc_attr( $disabled_attr ); ?>> <option value="-1"><?php _e( "Don't repeat", 'bulk-delete' ); ?></option> <?php /** * List of cron schedules. * * @since 6.0.0 * * @param array $cron_schedules List of cron schedules. * @param \BulkWP\BulkDelete\Core\Base\BaseModule $module Module. */ $cron_schedules = apply_filters( 'bd_cron_schedules', wp_get_schedules(), $this ); ?> <?php foreach ( $cron_schedules as $key => $value ) : ?> <option value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value['display'] ); ?></option> <?php endforeach; ?> </select> <?php if ( ! empty( $this->scheduler_url ) ) : ?> <?php $pro_class = 'bd-' . str_replace( '_', '-', $this->field_slug ) . '-pro'; /** * HTML class of the span that displays the 'Pro only feature' message. * * @since 6.0.0 * * @param string $pro_class HTML class. * @param string $field_slug Field Slug of module. * @param \BulkWP\BulkDelete\Core\Base\BaseModule $module Module. */ $pro_class = apply_filters( 'bd_pro_only_feature_class', $pro_class, $this->field_slug, $this ) ?> <span class="<?php echo sanitize_html_class( $pro_class ); ?>" style="color:red"> <?php _e( 'Only available in Pro Addon', 'bulk-delete' ); ?> <a href="<?php echo esc_url( $this->scheduler_url ); ?>" target="_blank">Buy now</a> </span> <?php endif; ?> </td> </tr> <tr <?php if ( ! empty( $pro_class ) ) : ?> class="<?php echo sanitize_html_class( $pro_class ); ?>" style="display: none;" <?php endif; ?> > <td scope="row" colspan="2"> <?php _e( 'Enter time in <strong>Y-m-d H:i:s</strong> format or enter <strong>now</strong> to use current time.', 'bulk-delete' ); $markup = __( 'Want to add new a Cron schedule?', 'bulk-delete' ) . ' ' . '<a href="https://bulkwp.com/docs/add-a-new-cron-schedule/?utm_campaign=Docs&utm_medium=wpadmin&utm_source=tooltip&utm_content=cron-schedule" target="_blank" rel="noopener">' . __( 'Find out how', 'bulk-delete' ) . '</a>'; $content = __( 'Learn how to add your desired Cron schedule.', 'bulk-delete' ); echo ' ', bd_generate_help_tooltip( $markup, $content ); ?> </td> </tr> <?php } /** * Render submit button. */ protected function render_submit_button() { bd_render_submit_button( $this->action ); } }