_create_columns(); $this->_args = array(); $this->items = array(); } function _create_columns(){ parent::__construct(array( 'singular' => __('item in workflow', 'approval-workflow'), 'plural' => __('items in workflow', 'approval-workflow'), 'ajax' => false )); $this->_columns = array( //new WP_List_Table_Column('cb', ''), new WP_List_Table_Column('title', __('Title', 'approval-workflow'), true), new WP_List_Table_Column('post_type', __('Post Type', 'approval-workflow'), true), new WP_List_Table_Column('site', __('Site', 'approval-workflow'), true, true), new WP_List_Table_Column('last_modified', __('Date Modified', 'approval-workflow'), true), ); } function column_cb($item) { return ''; } function column_default($item, $column_name){ foreach($this->_columns as $column){ if($column_name == $column->name){ return $item[$column_name]; } } // Should hopefully not make it here return $column_name . __(' column is missing from Workflow_List_Table::column_default()'); } function column_last_modified($item){ return $item['last_modified_text']; } function column_post_type($item){ $text = $item['post_type']; $actions = array( 'view_all' => '' . __('View All', 'approval-workflow') . '', ); $text .= $this->row_actions($actions); return $text; } function column_site($item){ $text = $item['site']; $actions = array( 'visit_site' => '' . __('Visit Site', 'approval-workflow') . '', 'visit_dashboard' => '' . __('Dashboard', 'approval-workflow') . '' ); $text .= $this->row_actions($actions); return $text; } function column_title($item){ $text = '' . $item['title_link'] . ''; $actions = array( 'view_changes' => '' . __('Compare Changes', 'approval-workflow') . '', 'edit' => '' . __('Edit', 'approval-workflow') . ' ' . $item['post_type'] . '' ); $text .= $this->row_actions($actions); return $text; } /*function get_bulk_actions(){ $actions = array( 'approve' => __('Approve', 'approval-workflow'), ); return $actions; }*/ function get_columns(){ global $approval_workflow; $columns = array(); foreach($this->_columns as $column){ // If not in multisite, don't include multisite columns if($column->multisite_only && $approval_workflow->is_network == false){ continue; } $columns[$column->name] = $column->label; } return $columns; } function get_sortable_columns(){ $sortable_columns = array(); foreach($this->_columns as $column){ if($column->is_sortable){ $sortable_columns[$column->name] = array($column->name, false); } } return $sortable_columns; } function no_items(){ _e('No items in the workflow.', 'approval-workflow'); } function prepare_items(){ global $wpdb, $blog_id, $approval_workflow; $date_format = get_option('date_format') . " " . get_option('time_format'); $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array($columns, $hidden, $sortable); if($approval_workflow->is_network){ // Grab list of items in workflow $query = "SELECT blog_id FROM " . $wpdb->base_prefix . "blogs WHERE spam != '1' AND archived != '1' AND deleted != '1' ORDER BY last_updated ASC"; $query = apply_filters('approval_workflow_sites_edit_query', $query); $blogs = $wpdb->get_col($query); $old_blog_id = $blog_id; foreach($blogs as $blog){ switch_to_blog($blog); $this->_get_workflow_items($blog, $date_format); } switch_to_blog($old_blog_id); } else { $this->_get_workflow_items(1, $date_format); } usort($this->items, array(&$this, 'usort_reorder')); } function _get_workflow_items($blog, $date_format){ global $wpdb; $post_types = get_post_types(array(), 'objects'); $query = "SELECT p.* FROM " . $wpdb->prefix . "posts p INNER JOIN " . $wpdb->prefix . "postmeta m ON m.post_id = p.ID WHERE m.meta_key = '_waiting_for_approval' AND m.meta_value = '1' AND p.post_status <> 'trash'"; $results = $wpdb->get_results($query); if(!empty($results)){ $posts[$blog] = $results; foreach($results as $post){ $revisions = wp_get_post_revisions($post->ID, array('posts_per_page' => 1)); $last_revision = array_pop($revisions); $revision_compare_link = admin_url( 'revision.php?action=diff&post_type=' . $post->post_type . '&right=' . $post->ID . '&left=' . $last_revision->ID ); $this->items[] = array( 'ID' => $post->ID, 'title' => $post->post_title, 'title_link' => '' . $post->post_title . '', 'post_type' => $post_types[$post->post_type]->labels->singular_name, 'post_type_link' => get_bloginfo('url') . '/wp-admin/edit.php?post_type=' . $post->post_type, 'site' => get_bloginfo('name'), 'site_link' => '' . get_bloginfo('name') . '', 'last_modified' => $post->post_modified, 'last_modified_text' => date_i18n($date_format, strtotime($post->post_modified)), 'compare_link' => $revision_compare_link, 'edit_link' => get_edit_post_link($post->ID), 'site_link' => get_bloginfo('url') . '/', 'site_dashboard_link' => get_bloginfo('url') . '/wp-admin/', ); } } } function usort_reorder($a, $b){ // If no sort, default to last modified date $orderby = (!empty($_GET['orderby'])) ? $_GET['orderby'] : 'last_modified'; // If no order, deafult to asc $order = (!empty($_GET['order'])) ? $_GET['order'] : 'asc'; $result = strcmp($a[$orderby], $b[$orderby]); // Send final direction to usort return ($order === 'asc') ? $result : -$result; } } class WP_List_Table_Column { var $name; var $label; var $is_sortable; var $multisite_only; function __construct($name, $label, $is_sortable = false, $multisite_only = false){ $this->name = $name; $this->label = $label; $this->is_sortable = $is_sortable; $this->multisite_only = $multisite_only; } } ?>