PluginProbe
Bubble Menu – Floating Button Menu with Sticky Navigation / 3.0.4
Bubble Menu – Floating Button Menu with Sticky Navigation v3.0.4
trunk 1.3 2.0 2.2 2.2.1 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1 3.1.1 4.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.1 4.1.1
bubble-menu / admin / class-list-table.php

class-list-table.php in Bubble Menu – Floating Button Menu with Sticky Navigation 3.0.4, at admin/class-list-table.php

347 lines 10.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php if ( ! defined( 'ABSPATH' ) ) {
2 exit;
3 }
4
5 // WP_List_Table is not loaded automatically so we need to load it in our application
6 if ( ! class_exists( 'WP_List_Table' ) ) {
7 require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
8 }
9
10 /**
11 * Create a new table class that will extend the WP_List_Table
12 *
13 */
14 class Wow_List_Table extends WP_List_Table {
15
16 /**
17 * Number of items per page
18 *
19 * @var int
20 * @since 1.5
21 */
22 public $per_page = 30;
23
24 private $data;
25 private $plugin;
26
27 /**
28 * Wow_List_Table constructor.
29 *
30 * @param string $data - Name of the datatable
31 * @param array $plugin - Information about the plugin
32 */
33 public function __construct( $data, $plugin ) {
34 $this->data = $data;
35 $this->plugin = $plugin;
36
37 // Set parent defaults
38 parent::__construct( array(
39 'ajax' => false,
40 ) );
41 $this->process_bulk_action();
42 }
43
44 /**
45 * Process the bulk actions
46 *
47 * @access public
48 * @return void
49 * @since 1.4
50 */
51 public function process_bulk_action() {
52 $ids = isset( $_POST['ID'] ) ? absint( $_POST['ID'] ) : false;
53 $action = $this->current_action();
54 if ( ! is_array( $ids ) ) {
55 $ids = array( $ids );
56 }
57 if ( empty( $action ) ) {
58 return;
59 }
60 global $wpdb;
61 $table = $this->data;
62 foreach ( $ids as $id ) {
63 if ( 'delete-items' === $this->current_action() ) {
64 $wpdb->delete( $table, array( 'id' => $id ), array( '%d' ) );
65 }
66 }
67
68 }
69
70 public function search_box( $text, $input_id ) {
71 $input_id = $input_id . '-search-input';
72 if ( ! empty( $_REQUEST['orderby'] ) ) {
73 echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
74 }
75 if ( ! empty( $_REQUEST['order'] ) ) {
76 echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
77 }
78 ?>
79 <p class="search-box">
80 <label class="screen-reader-text" for="<?php echo esc_attr( $input_id ) ?>"><?php echo esc_attr( $text ); ?>
81 :</label>
82 <input type="search" id="<?php echo esc_attr( $input_id ) ?>" name="s"
83 value="<?php _admin_search_query(); ?>"/>
84 <?php submit_button( $text, 'button', false, false, array( 'ID' => 'search-submit' ) ); ?>
85 </p>
86 <?php
87 }
88
89 /**
90 * Define what data to show on each column of the table
91 *
92 * @param array $item Data
93 * @param String $column_name - Current column name
94 *
95 * @return Mixed
96 */
97 public function column_default( $item, $column_name ) {
98 $value = $item[ $column_name ];
99
100 return $value;
101 }
102
103 public function column_title( $item ) {
104 $slug = $this->plugin['slug'];
105 $text = 'bubble-menu';
106 $title = ! empty( $item['title'] ) ? $item['title'] : esc_attr__( 'Untitle', 'bubble-menu' );
107 $edit_url = admin_url( '/admin.php?page=' . esc_attr( $slug ) . '&tab=settings&act=update&id='
108 . urlencode( $item['ID'] ) );
109 $duplicate_url = admin_url( '/admin.php?page=' . esc_attr( $slug ) . '&tab=settings&act=duplicate&id='
110 . urlencode( $item['ID'] ) );
111 $delete_url = admin_url( '/admin.php?page=' . esc_attr( $slug ) . '&info=delete&did=' . urlencode( $item['ID'] ) );
112 $actions = array(
113 'edit' => '<a href="' . esc_url( $edit_url ) . '">' . esc_attr__( 'Edit', 'bubble-menu' ) . '</a>',
114 'duplicate' => '<a href="' . esc_url( $duplicate_url ) . '" style="color:green;">' . esc_attr__( 'Duplicate', 'bubble-menu' )
115 . '</a>',
116 'delete' => '<a href="' . esc_url( wp_nonce_url($delete_url, $slug . '_nonce' ) ) . '" style="color:red;">' . esc_attr__( 'Delete', 'bubble-menu' ) . '</a>',
117 );
118
119 return '<a href="' . esc_url( $edit_url ) . '">' . $title . '</a>' . $this->row_actions( $actions );
120 }
121
122 /**
123 * Prepare the items for the table to process
124 *
125 * @return Void
126 */
127 public function prepare_items() {
128 $columns = $this->get_columns();
129 $hidden = $this->get_hidden_columns();
130 $sortable = $this->get_sortable_columns();
131 $data = $this->table_data();
132 $perPage = 30;
133 $currentPage = $this->get_pagenum();
134 if ( $data ) {
135 usort( $data, array( &$this, 'sort_data' ) );
136 $data = array_slice( $data, ( ( $currentPage - 1 ) * $perPage ), $perPage );
137 }
138 $totalItems = $this->list_count();
139 $this->_column_headers = array( $columns, $hidden, $sortable );
140 $this->items = $data;
141 $this->set_pagination_args( array(
142 'total_items' => $totalItems,
143 'per_page' => $perPage,
144 'total_pages' => ceil( $totalItems / $perPage ),
145 ) );
146 }
147
148 /**
149 * Override the parent columns method. Defines the columns to use in your listing table
150 *
151 * @return Array
152 */
153 public function get_columns() {
154 $columns = array(
155 'cb' => '<input type="checkbox" />',
156 'title' => 'Title',
157 'code' => 'Shortcode',
158 'status' => 'Status',
159 'testmode' => 'Test Mode',
160 );
161
162 return $columns;
163
164 }
165
166 /**
167 * Define which columns are hidden
168 *
169 * @return Array
170 */
171 public function get_hidden_columns() {
172 return array();
173 }
174
175 /**
176 * Define the sortable columns
177 *
178 * @return array
179 */
180 public function get_sortable_columns() {
181 return array(
182 'ID' => array( 'ID', false ),
183 );
184 }
185
186 /**
187 * Get the table data
188 *
189 * @return Array
190 */
191 private function table_data() {
192 global $wpdb;
193 $data = array();
194 $paged = $this->get_paged();
195 $offset = $this->per_page * ( $paged - 1 );
196 $search = $this->get_search();
197
198 $table = $this->data;
199
200
201 if ( ! $search || empty( $search ) ) {
202 $result = $wpdb->get_results( "SELECT * FROM $table order by id desc" );
203 } elseif ( is_numeric( $search ) ) {
204 $query = $wpdb->prepare( "SELECT * FROM $table WHERE id=%d", absint( $search ) );
205 $result = $wpdb->get_results( $query );
206 } else {
207 $query = $wpdb->prepare( "SELECT * FROM $table WHERE title=%s order by id desc", sanitize_text_field( $search ) );
208 $result = $wpdb->get_results( $query );
209 }
210
211 $slug = $this->plugin['slug'];
212 $shortcode = $this->plugin['shortcode'];
213 $prefix = $this->plugin['prefix'];
214
215
216 if ( $result ) {
217 foreach ( $result as $key => $value ) {
218 $param = unserialize( $value->param );
219 $option_name_view = '_' . $prefix . '_view_counter_' . $value->id;
220 $option_name_action = '_' . $prefix . '_action_counter_' . $value->id;
221 $tool_view = get_option( $option_name_view, '0' );
222 $tool_action = get_option( $option_name_action, '0' );
223 if ( ! empty( $tool_view ) ) {
224 $conversion = round( $tool_action / $tool_view * 100, 2 ) . '%';
225 } else {
226 $conversion = '0%';
227 }
228 $title = ! empty( $value->title ) ? $value->title : esc_attr__( 'Untitle', 'bubble-menu' ) ;
229 $check_status = isset( $param['menu_status'] ) ? $param['menu_status'] : 1;
230 $status_on = '<span style="color:darkgreen;">' . esc_attr__( 'Active', 'bubble-menu' ) . '</span>';
231 $status_off = '<span style="color:darkred;">' . esc_attr__( 'Inactive', 'bubble-menu' ) . '</span>';;
232 $status = empty( $param['status'] ) ? $status_on : $status_off;
233 $testmode = empty( $param['test_mode'] ) ? 'OFF' : 'ON';
234 $data[] = array(
235 'ID' => $value->id,
236 'title' => '<a href="admin.php?page=' . esc_attr($slug) . '&tab=settings&act=update&id=' . absint($value->id)
237 . '">' . esc_attr($title) . '</a>',
238 'code' => '[' . esc_attr($shortcode) . ' id="' . absint($value->id) . '"]',
239 'view' => $tool_view,
240 'action' => $tool_action,
241 'conversion' => $conversion,
242 'edit' => '<a href="admin.php?page=' . esc_attr($slug) . '&tab=settings&act=update&id='
243 . absint($value->id) . '">edit</a>',
244 'delete' => '<a href="admin.php?page=' . esc_attr($slug) . '&info=delete&did=' . absint($value->id)
245 . '" style="color:red;">delete</a>',
246 'duplicate' => '<a href="admin.php?page=' . esc_attr($slug) . '&tab=settings&act=duplicate&id='
247 . absint($value->id) . '" style="color:green;">duplicate</a>',
248 'status' => $status,
249 'testmode' => $testmode,
250 );
251 }
252 }
253
254 return $data;
255 }
256
257 /**
258 * Retrieve the current page number
259 *
260 * @access public
261 * @return int Current page number
262 * @since 1.5
263 */
264 public function get_paged() {
265 return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
266 }
267
268 /**
269 * Retrieves the search query string
270 *
271 * @access public
272 * @return mixed string If search is present, false otherwise
273 * @since 1.0
274 */
275 public function get_search() {
276 return ! empty( $_POST['s'] ) ? urldecode( trim( $_POST['s'] ) ) : false;
277 }
278
279 public function list_count() {
280 global $wpdb;
281 $data = $this->data;
282 $result = $wpdb->get_results( "SELECT * FROM {$data} order by id asc" );
283
284 return count( $result );
285 }
286
287 /**
288 * Render the checkbox column
289 *
290 * @access public
291 *
292 * @param array $item Contains all the data for the checkbox column
293 *
294 * @return string Displays a checkbox
295 * @since 1.0
296 */
297 public function column_cb( $item ) {
298 return sprintf( '<input type="checkbox" name="%1$s[]" value="%2$s" />', 'ID', $item['ID'] );
299 }
300
301 /**
302 * Retrieve the bulk actions
303 *
304 * @access public
305 * @return array $actions Array of the bulk actions
306 * @since 1.4
307 */
308 public function get_bulk_actions() {
309 $actions = array(
310 'delete-items' => esc_attr__('Delate', 'bubble-menu'),
311 );
312
313 return $actions;
314 }
315
316 /**
317 * Gets the name of the primary column.
318 *
319 * @return string Name of the primary column.
320 * @since 1.0
321 * @access protected
322 *
323 */
324 protected function get_primary_column_name() {
325 return 'ID';
326 }
327
328 /**
329 * Allows you to sort the data by the variables set in the $_GET
330 *
331 * @return Mixed
332 */
333 private function sort_data( $a, $b ) {
334 // If no sort, default to title
335 $orderby = ( ! empty( $_GET['orderby'] ) ) ? sanitize_text_field( $_GET['orderby'] ) : 'ID';
336 // If no order, default to asc
337 $order = ( ! empty( $_GET['order'] ) ) ? sanitize_text_field( $_GET['order'] ) : 'desc';
338 // Determine sort order
339 $result = strnatcmp( $a[ $orderby ], $b[ $orderby ] );
340
341 // Send final sort direction to usort
342 return ( $order === 'asc' ) ? $result : - $result;
343
344 }
345
346 }
347