'vision_item',
'plural' => 'vision_items',
'ajax' => false
]);
$this->url_preview_base = '/vision/map/';
}
function handle_row_actions($post, $column_name, $primary) {
return '';
}
function joinPaths() {
$paths = [];
foreach(func_get_args() as $arg) {
if($arg !== '') {
$paths[] = $arg;
}
}
return preg_replace('#/+#','/',join('/', $paths));
}
function filesystem_method() {
return 'direct';
}
function request_filesystem_credentials() {
return true;
}
function getFileSystem() {
global $wp_filesystem;
$result = true;
if(!$wp_filesystem) {
require_once(ABSPATH . '/wp-admin/includes/file.php');
add_filter('filesystem_method', [$this, 'filesystem_method']);
add_filter('request_filesystem_credentials', [$this, 'request_filesystem_credentials']);
$credentials = request_filesystem_credentials(site_url(), '', true, false, null);
$result = WP_Filesystem($credentials);
remove_filter('filesystem_method', [$this, 'filesystem_method']);
remove_filter('request_filesystem_credentials', [$this, 'request_filesystem_credentials']);
}
if($result)
return $wp_filesystem;
return null;
}
function column_default($item, $column_name){
switch($column_name){
case 'title':
case 'active':
case 'shortcode':
case 'author':
case 'editor':
case 'created':
case 'modified':
case 'id':
return $item[$column_name];
}
}
function column_cb($item) {
return sprintf(
'',
esc_attr($this->_args['singular']), // let's simply repurpose the table's singular label
esc_attr($item['id']) // the value of the checkbox should be the record's ID
);
}
function column_title($item) {
$page = sanitize_key(filter_input(INPUT_GET, 'page', FILTER_DEFAULT));
$item_status = sanitize_key(filter_input(INPUT_GET, 'item_status', FILTER_DEFAULT));
if(current_user_can('manage_options') || get_current_user_id()==$item['author']) {
$actions = [];
switch($item_status) {
case 'trash': {
$args = [
'page' => $page,
'item_status' => $item_status,
'action' => 'restore',
'id' => $item['id']
];
$url = add_query_arg($args, 'admin.php');
$actions['restore'] = sprintf(
'%2$s',
esc_url(wp_nonce_url($url, 'restore_' . $item['id'])),
esc_html__('Restore', 'vision')
);
$args = [
'page' => $page,
'item_status' => $item_status,
'action' => 'delete',
'id' => $item['id']
];
$url = add_query_arg($args, 'admin.php');
$actions['delete'] = sprintf(
'%2$s',
esc_url(wp_nonce_url($url, 'delete_' . $item['id'])),
esc_html__('Delete Permanently', 'vision')
);
} break;
default: {
$args = [
'page' => 'vision_item',
'item_status' => $item_status,
'id' => $item['id']
];
$url = add_query_arg($args, 'admin.php');
$actions['edit'] = sprintf(
'%2$s',
esc_url($url),
esc_html__('Edit', 'vision')
);
$args = [
'page' => $page,
'item_status' => $item_status,
'action' => 'copy',
'id' => $item['id']
];
$url = add_query_arg($args, 'admin.php');
$actions['copy'] = sprintf(
'%2$s',
esc_url(wp_nonce_url($url, 'copy_' . $item['id'])),
esc_html__('Duplicate', 'vision')
);
$args = [
'page' => $page,
'item_status' => $item_status,
'action' => 'trash',
'id' => $item['id']
];
$url = add_query_arg($args, 'admin.php');
$actions['trash'] = sprintf(
'%2$s',
esc_url(wp_nonce_url($url, 'trash_' . $item['id'])),
esc_html__('Move to Trash', 'vision')
);
$args = [
'preview' => true
];
$url = add_query_arg($args, $this->url_preview_base . $item['id']);
$actions['view'] = sprintf(
'%2$s',
esc_url($url),
esc_html__('Preview', 'vision')
);
} break;
}
return sprintf('%3$s %4$s',
'vision_item',
$item['id'],
$item['title'],
$this->row_actions($actions)
);
}
return sprintf('%1$s', $item['title']);
}
function column_active($item) {
if(current_user_can('manage_options') || get_current_user_id()==$item['author']) {
return sprintf(
'
',
($item['active'] ? 'checked' : 'unchecked'),
$item['id']
);
} else {
return sprintf(
'
',
($item['active'] ? 'checked' : 'unchecked'),
$item['id']
);
}
}
function column_shortcode($item) {
return sprintf('[vision id="%1$s"]', $item['id']);
}
function column_author($item) {
$page = sanitize_key(filter_input(INPUT_GET, 'page', FILTER_DEFAULT));
$args = [
'page' => $page,
'author' => $item['author']
];
$url = add_query_arg($args, 'admin.php');
$actions = [];
$select_html = '';
if (current_user_can('manage_options') || get_current_user_id() == $item['author']) {
$actions['edit'] = sprintf(
'%2$s',
$item['id'],
esc_html__('Edit', 'vision')
);
$users = get_users(['fields' => ['ID', 'display_name']]);
$options = '';
foreach ($users as $u) {
$options .= sprintf(
'',
esc_attr($u->ID),
selected($u->ID, $item['author'], false),
esc_html($u->display_name)
);
}
$select_html = sprintf(
''
. ' '
. ' '
. ''
. '
',
$item['id'],
$options,
esc_html__('OK', 'vision'),
esc_html__('Cancel', 'vision')
);
}
return sprintf(
'%2$s %3$s %4$s',
esc_url($url),
get_the_author_meta('display_name', $item['author']),
$this->row_actions($actions),
$select_html
);
}
function column_editor($item) {
$page = sanitize_key(filter_input(INPUT_GET, 'page', FILTER_DEFAULT));
$args = [
'page' => $page,
'editor' => $item['editor']
];
$url = add_query_arg($args, 'admin.php');
return sprintf(
'%2$s',
esc_url( $url ),
get_the_author_meta('display_name', $item['editor'])
);
}
function column_created( $item ) {
$m_time = mysql2date('Y/m/d g:i:s a', $item['created']);
$h_time = mysql2date('Y/m/d', $item['created']);
return sprintf('%2$s', esc_attr($m_time), esc_html($h_time));
}
function column_modified( $item ) {
$m_time = mysql2date('Y/m/d g:i:s a', $item['modified']);
$h_time = mysql2date('Y/m/d', $item['modified']);
return sprintf('%2$s', esc_attr($m_time), esc_html($h_time));
}
function get_views() {
$page = sanitize_key(filter_input(INPUT_GET, 'page', FILTER_DEFAULT));
$item_status = sanitize_key(filter_input(INPUT_GET, 'item_status', FILTER_DEFAULT));
$args_all = ['page' => $page];
$args_mine = ['page' => $page, 'item_status' => 'mine'];
$args_trash = ['page' => $page, 'item_status' => 'trash'];
$url_all = add_query_arg($args_all, 'admin.php');
$url_mine = add_query_arg($args_mine, 'admin.php');
$url_trash = add_query_arg($args_trash, 'admin.php');
$status_links = [
'all' => sprintf('%3$s (%4$d)', esc_url($url_all), ($item_status ? '' : 'class="current"'), esc_html__('All','vision'), $this->count_all),
'mine' => sprintf('%3$s (%4$d)', esc_url($url_mine), ($item_status == 'mine' ? 'class="current"' : ''), esc_html__('Mine','vision'), $this->count_mine),
'trash' => sprintf('%3$s (%4$d)', esc_url($url_trash), ($item_status == 'trash' ? 'class="current"' : ''), esc_html__('Trash','vision'), $this->count_trash)
];
return $status_links;
}
function get_columns() {
$columns = [
'cb' => '',
'title' => esc_html__('Title', 'vision'),
'active' => esc_html__('Active', 'vision'),
'shortcode' => esc_html__('Shortcode', 'vision'),
'author' => esc_html__('Author', 'vision'),
'editor' => esc_html__('Editor', 'vision'),
'created' => esc_html__('Created', 'vision'),
'modified' => esc_html__('Modified', 'vision')
];
return $columns;
}
function get_sortable_columns() {
$columns = [
'title' => ['title', false],
'active' => ['active', false],
'author' => ['author', false],
'editor' => ['editor', false],
'created' => ['created', false],
'modified' => ['modified', false]
];
return $columns;
}
function get_bulk_actions() {
$item_status = sanitize_key(filter_input(INPUT_GET, 'item_status', FILTER_DEFAULT));
$actions = [];
switch($item_status) {
case 'trash': {
$actions = [
'restore' => esc_html__('Restore', 'vision'),
'delete' => esc_html__('Delete Permanently', 'vision')
];
} break;
default: {
$actions = [
'copy' => esc_html__('Duplicate', 'vision'),
'trash' => esc_html__('Move to Trash', 'vision')
];
} break;
}
return $actions;
}
function process_trash_action($id, $flag) {
global $wpdb;
$table = $wpdb->prefix . VISION_PLUGIN_NAME;
$author = get_current_user_id();
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE id=%d", $id);
$item = $wpdb->get_row($sql, OBJECT);
// phpcs:enable
if($item && (current_user_can('manage_options') || $author==$item->author)) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->update($table, ['deleted' => $flag], ['id' => $id]);
}
}
function process_copy_action($id) {
global $wpdb;
$table = $wpdb->prefix . VISION_PLUGIN_NAME;
$author = get_current_user_id();
if( VISION_PLUGIN_PLAN == 'lite' ) {
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$count = $wpdb->get_var("SELECT COUNT(*) FROM {$table}");
if ($count >= 1) {
echo '';
echo '
Vision: ' . esc_html__('You can create only 1 map. If you need more, upgrade to the pro version.', 'vision') . '
';
echo '
';
return;
}
}
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE id=%d AND NOT deleted", $id);
$item = $wpdb->get_row($sql, OBJECT);
// phpcs:enable
if($item && (current_user_can('manage_options') || $author==$item->author)) {
$itemData = unserialize($item->data);
$itemData->slug = sanitize_title(($itemData->slug ? $itemData->slug : $itemData->title));
$itemData->title = esc_html__('[Duplicate] ', 'vision') . $itemData->title;
$itemConfig = unserialize($item->config);
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
$result = $wpdb->insert(
$table,
[
'title' => $itemData->title,
'slug' => $itemData->slug,
'active' => $itemData->active,
'data' => serialize($itemData),
'config' => serialize($itemConfig),
'author' => $author,
'editor' => $author,
'created' => current_time('mysql', 1),
'modified' => current_time('mysql', 1)
]
);
// [filemanager] create an external file
if($result) {
if(wp_is_writable(VISION_PLUGIN_UPLOAD_DIR)) {
$dir_src_root = $this->joinPaths(VISION_PLUGIN_UPLOAD_DIR, $id);
$dir_dst_root = $this->joinPaths(VISION_PLUGIN_UPLOAD_DIR, $wpdb->insert_id);
$wp_filesystem = $this->getFileSystem();
if($wp_filesystem) {
if(!$wp_filesystem->is_dir($dir_dst_root)) {
$wp_filesystem->mkdir($dir_dst_root);
}
copy_dir($dir_src_root, $dir_dst_root);
}
}
}
}
}
function process_delete_action($id) {
global $wpdb;
$table = $wpdb->prefix . VISION_PLUGIN_NAME;
$author = get_current_user_id();
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE id=%d AND deleted", $id);
$item = $wpdb->get_row($sql, OBJECT);
// phpcs:enable
if($item && (current_user_can('manage_options') || $author==$item->author) ) {
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$result = $wpdb->delete($table, ['id' => $id], ['%d']);
// [filemanager] delete file
if($result) {
if (wp_is_writable(VISION_PLUGIN_UPLOAD_DIR)) {
$dir_root = $this->joinPaths(VISION_PLUGIN_UPLOAD_DIR, $id);
$wp_filesystem = $this->getFileSystem();
if ($wp_filesystem) {
if ($wp_filesystem->is_dir($dir_root)) {
$wp_filesystem->rmdir($dir_root, true);
}
}
}
}
}
}
function process_actions() {
switch($this->current_action()) {
case 'trash': {
if(isset($_POST['_wpnonce']) && !empty($_POST['_wpnonce'])) {
$nonce = sanitize_key(filter_input(INPUT_POST, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'bulk-' . $this->_args['plural'];
if(wp_verify_nonce($nonce, $nonce_key)) {
$items = filter_input(INPUT_POST, $this->_args['singular'], FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY);
foreach($items as $id) {
$this->process_trash_action($id, true);
}
}
} else if(isset($_GET['_wpnonce']) && !empty($_GET['_wpnonce'])) {
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$nonce = sanitize_key(filter_input(INPUT_GET, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'trash_' . $id;
if(wp_verify_nonce($nonce, $nonce_key)) {
$this->process_trash_action($id, true);
}
}
} break;
case 'restore': {
if(isset($_POST['_wpnonce']) && !empty($_POST['_wpnonce'])) {
$nonce = sanitize_key(filter_input(INPUT_POST, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'bulk-' . $this->_args['plural'];
if(wp_verify_nonce($nonce, $nonce_key)) {
$items = filter_input(INPUT_POST, $this->_args['singular'], FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY);
foreach($items as $id) {
$this->process_trash_action($id, false);
}
}
} else if(isset($_GET['_wpnonce']) && !empty($_GET['_wpnonce'])) {
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$nonce = sanitize_key(filter_input(INPUT_GET, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'restore_' . $id;
if(wp_verify_nonce($nonce, $nonce_key)) {
$this->process_trash_action($id, false);
}
}
} break;
case 'copy': {
if(isset($_POST['_wpnonce']) && !empty($_POST['_wpnonce'])) {
$nonce = sanitize_key(filter_input(INPUT_POST, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'bulk-' . $this->_args['plural'];
if(wp_verify_nonce($nonce, $nonce_key)) {
$items = filter_input(INPUT_POST, $this->_args['singular'], FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY);
foreach($items as $id) {
$this->process_copy_action($id);
}
}
} else if(isset($_GET['_wpnonce']) && !empty($_GET['_wpnonce'])) {
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$nonce = sanitize_key(filter_input(INPUT_GET, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'copy_' . $id;
if(wp_verify_nonce($nonce, $nonce_key)) {
$this->process_copy_action($id);
}
}
} break;
case 'delete': {
if(isset($_POST['_wpnonce']) && !empty($_POST['_wpnonce'])) {
$nonce = sanitize_key(filter_input(INPUT_POST, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'bulk-' . $this->_args['plural'];
if(wp_verify_nonce($nonce, $nonce_key)) {
$items = filter_input(INPUT_POST, $this->_args['singular'], FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY);
foreach($items as $id) {
$this->process_delete_action($id);
}
}
} else if(isset($_GET['_wpnonce']) && !empty($_GET['_wpnonce'])) {
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$nonce = sanitize_key(filter_input(INPUT_GET, '_wpnonce', FILTER_DEFAULT));
$nonce_key = 'delete_' . $id;
if(wp_verify_nonce($nonce, $nonce_key)) {
$this->process_delete_action($id);
}
}
} break;
}
}
function prepare_items() {
$this->process_actions();
$columns = $this->get_columns();
$sortable = $this->get_sortable_columns();
$hidden = [];
$itemsPerPage = 25;
$currentPage = ($this->get_pagenum()-1) * $itemsPerPage;
$this->_column_headers = [$columns, $hidden, $sortable];
global $wpdb;
$table = $wpdb->prefix . VISION_PLUGIN_NAME;
$item_status = sanitize_key(filter_input(INPUT_GET, 'item_status', FILTER_DEFAULT));
// phpcs:disable WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
$orderby = (isset($_GET['orderby']) ? strtolower(sanitize_key(filter_input(INPUT_GET, 'orderby', FILTER_DEFAULT))) : 'id');
$order = (isset($_GET['order']) ? strtolower(sanitize_key(filter_input(INPUT_GET, 'order', FILTER_DEFAULT))) : 'desc');
$author = (isset($_GET['author']) ? filter_input(INPUT_GET, 'author', FILTER_SANITIZE_NUMBER_INT ) : NULL);
$editor = (isset($_GET['editor']) ? filter_input(INPUT_GET, 'editor', FILTER_SANITIZE_NUMBER_INT ) : NULL);
$search = (isset($_POST['s']) ? '%' . $wpdb->esc_like(sanitize_text_field(filter_input(INPUT_POST, 's', FILTER_DEFAULT))) . '%' : '%');
// phpcs:enable
$current_user = get_current_user_id();
// check user input
$sortable_columns = array_keys($sortable);
$orderby = in_array($orderby, $sortable_columns) ? $orderby : 'id';
$order_values = ['asc', 'desc'];
$order = in_array($order, $order_values) ? $order : 'desc';
$sql = '';
$sql_total_items = '';
$total_items = 0;
// database operations
if(current_user_can('manage_options')) { // by default, the manage_options permission is only given to 'Super Users' and 'Administrators'
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$this->count_all = $wpdb->query("SELECT id FROM {$table} WHERE NOT deleted");
$this->count_mine = $wpdb->query($wpdb->prepare("SELECT id FROM {$table} WHERE NOT deleted AND author=%s", $current_user));
$this->count_trash = $wpdb->query("SELECT id FROM {$table} WHERE deleted");
// phpcs:enable
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder
switch($item_status) {
case 'trash': {
if($author) {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $author, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND deleted AND IFNULL(title,'') LIKE %s", $author, $search);
} else if($editor) {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE editor=%s AND deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $editor, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE editor=%s AND deleted AND IFNULL(title,'') LIKE %s", $editor, $search);
} else {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE deleted AND IFNULL(title,'') LIKE %s", $search);
}
} break;
case 'mine': {
if($author) {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $current_user, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s", $current_user, $search);
} else if($editor) {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND editor=%s AND NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $current_user, $editor, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND editor=%s AND NOT deleted AND IFNULL(title,'') LIKE %s", $current_user, $editor, $search);
} else {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $current_user, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s", $current_user, $search);
}
} break;
default: {
if($author) {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $author, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s", $author, $search);
} else if($editor) {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE editor=%s AND NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $editor, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE editor=%s AND NOT deleted AND IFNULL(title,'') LIKE %s", $editor, $search);
} else {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %1s %1s LIMIT %d, %d", $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE NOT deleted AND IFNULL(title,'') LIKE %s", $search);
}
} break;
}
// phpcs:enable
} else { // the current user view
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$this->count_all = $wpdb->query($wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND NOT deleted", $current_user));
$this->count_mine = $wpdb->query($wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND NOT deleted", $current_user));
$this->count_trash = $wpdb->query($wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND deleted", $current_user));
// phpcs:enable
// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
switch($item_status) {
case 'trash': {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND deleted AND IFNULL(title,'') LIKE %s ORDER BY %s %s LIMIT %d, %d", $current_user, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND deleted AND IFNULL(title,'') LIKE %s", $current_user, $search);
} break;
case 'mine': {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %s %s LIMIT %d, %d", $current_user, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s", $current_user, $search);
} break;
default: {
$sql = $wpdb->prepare("SELECT * FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s ORDER BY %s %s LIMIT %d, %d", $current_user, $search, $orderby, $order, $currentPage, $itemsPerPage);
$sql_total_items = $wpdb->prepare("SELECT id FROM {$table} WHERE author=%s AND NOT deleted AND IFNULL(title,'') LIKE %s", $current_user, $search);
} break;
}
// phpcs:enable
}
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, PluginCheck.Security.DirectDB.UnescapedDBParameter
$this->items = $wpdb->get_results( $sql, 'ARRAY_A' );
$total_items = $wpdb->query( $sql_total_items );
// phpcs:enable
$this->set_pagination_args([
'total_items' => $total_items,
'total_pages' => ceil($total_items / $itemsPerPage)
]);
}
}
?>