PluginProbe
Float menu – awesome floating side menu / 3.5.3.
Float menu – awesome floating side menu v3.5.3.
7.2.5 trunk 2.1 2.2 3.0.1 3.1 3.2.2 3.3.1 3.5 3.5.1 3.5.2 3.5.3. 3.5.4 4.0 4.1 4.1.1 4.2 4.3 4.3.1 4.3.2 5.0 5.0.1 5.0.2 5.0.3 5.1 All 57 releases
float-menu / admin / partials / class-list-table.php

class-list-table.php in Float menu – awesome floating side menu 3.5.3., at admin/partials/class-list-table.php

326 lines 8.9 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_html( $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 = $this->plugin['text'];
106 $title = ! empty( $item['title'] ) ? $item['title'] : '<em>Untitle</em>';
107 $edit_url = admin_url( '/admin.php?page=' . esc_attr( $slug ) . '&tab=add-new&act=update&id='
108 . urlencode( $item['ID'] ) );
109 $duplicate_url = admin_url( '/admin.php?page=' . esc_attr( $slug ) . '&tab=add-new&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', $text ) . '</a>',
114 'duplicate' => '<a href="' . esc_url( $duplicate_url ) . '" style="color:green;">' . esc_attr__( 'Duplicate', $text )
115 . '</a>',
116 'delete' => '<a href="' . esc_url( $delete_url ) . '" style="color:red;">' . esc_attr__( 'Delete', $text ) . '</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 'edit' => 'Edit',
159 'delete' => 'Delete',
160 'duplicate' => 'Duplicate',
161 );
162
163 return $columns;
164
165 }
166
167 /**
168 * Define which columns are hidden
169 *
170 * @return Array
171 */
172 public function get_hidden_columns() {
173 return array();
174 }
175
176 /**
177 * Define the sortable columns
178 *
179 * @return array
180 */
181 public function get_sortable_columns() {
182 return array(
183 'ID' => array( 'ID', false ),
184 );
185 }
186
187 /**
188 * Get the table data
189 *
190 * @return Array
191 */
192 private function table_data() {
193 global $wpdb;
194 $data = array();
195 $paged = $this->get_paged();
196 $offset = $this->per_page * ( $paged - 1 );
197 $search = $this->get_search();
198
199 $table = $this->data;
200
201
202 if ( ! $search || empty( $search ) ) {
203 $result = $wpdb->get_results( "SELECT * FROM $table order by id desc" );
204 } elseif ( is_numeric( $search ) ) {
205 $query = $wpdb->prepare( "SELECT * FROM $table WHERE id=%d", absint( $search ) );
206 $result = $wpdb->get_results( $query );
207 } else {
208 $query = $wpdb->prepare( "SELECT * FROM $table WHERE title LIKE '%s' order by id desc", '%' . $wpdb->esc_like( $search ) . '%' );
209 $result = $wpdb->get_results( $query );
210 }
211 $slug = $this->plugin['slug'];
212 $text = $this->plugin['text'];
213 $shortcode = $this->plugin['shortcode'];
214 if ( $result ) {
215 foreach ( $result as $key => $value ) {
216 $title = ! empty( $value->title ) ? $value->title : '<em>' . esc_attr__( 'Untitle', $text ) . '</em>';
217 $data[] = array(
218 'ID' => absint( $value->id ),
219 'title' => '<a href="admin.php?page=' . esc_attr( $slug ) . '&tab=add-new&act=update&id=' . absint( $value->id )
220 . '">' . esc_attr( $title ) . '</a>',
221 'code' => '[' . esc_attr( $shortcode ) . ' id="' . absint( $value->id ) . '"]',
222 'edit' => '<a href="admin.php?page=' . esc_attr( $slug ) . '&tab=add-new&act=update&id='
223 . absint( $value->id ) . '">edit</a>',
224 'delete' => '<a href="admin.php?page=' . esc_attr( $slug ) . '&info=delete&did=' . absint( $value->id )
225 . '" style="color:red;">delete</a>',
226 'duplicate' => '<a href="admin.php?page=' . esc_attr( $slug ) . '&tab=add-new&act=duplicate&id='
227 . absint( $value->id ) . '" style="color:green;">duplicate</a>',
228 );
229 }
230 }
231
232 return $data;
233 }
234
235 /**
236 * Retrieve the current page number
237 *
238 * @access public
239 * @return int Current page number
240 * @since 1.5
241 */
242 public function get_paged() {
243 return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
244 }
245
246 /**
247 * Retrieves the search query string
248 *
249 * @access public
250 * @return mixed string If search is present, false otherwise
251 * @since 1.0
252 */
253 public function get_search() {
254 return ! empty( $_POST['s'] ) ? urldecode( trim( $_POST['s'] ) ) : false;
255 }
256
257 public function list_count() {
258 global $wpdb;
259 $data = $this->data;
260 $result = $wpdb->get_results( "SELECT * FROM $data order by id desc" );
261 $count = count( $result );
262
263 return $count;
264 }
265
266 /**
267 * Render the checkbox column
268 *
269 * @access public
270 *
271 * @param array $item Contains all the data for the checkbox column
272 *
273 * @return string Displays a checkbox
274 * @since 1.0
275 */
276 public function column_cb( $item ) {
277 return sprintf( '<input type="checkbox" name="%1$s[]" value="%2$s" />', 'ID', $item['ID'] );
278 }
279
280 /**
281 * Retrieve the bulk actions
282 *
283 * @access public
284 * @return array $actions Array of the bulk actions
285 * @since 1.4
286 */
287 public function get_bulk_actions() {
288 $actions = array(
289 'delete-items' => 'Delate',
290 );
291
292 return $actions;
293 }
294
295 /**
296 * Gets the name of the primary column.
297 *
298 * @return string Name of the primary column.
299 * @since 1.0
300 * @access protected
301 *
302 */
303 protected function get_primary_column_name() {
304 return 'ID';
305 }
306
307 /**
308 * Allows you to sort the data by the variables set in the $_GET
309 *
310 * @return Mixed
311 */
312 private function sort_data( $a, $b ) {
313 // If no sort, default to title
314 $orderby = ( ! empty( $_GET['orderby'] ) ) ? sanitize_text_field( $_GET['orderby'] ) : 'ID';
315 // If no order, default to asc
316 $order = ( ! empty( $_GET['order'] ) ) ? sanitize_text_field( $_GET['order'] ) : 'desc';
317 // Determine sort order
318 $result = strnatcmp( $a[ $orderby ], $b[ $orderby ] );
319
320 // Send final sort direction to usort
321 return ( $order === 'asc' ) ? $result : - $result;
322
323 }
324
325 }
326