/** * Set up items for display in the list table. * * Handles filtering of data, sorting, pagination, and any other data * manipulation required prior to rendering. * * @since 1.7.0 */ public function prepare_items() { global $groups_template; $screen = get_current_screen(); // Option defaults $include_id = false; $search_terms = false; // Set current page $page = $this->get_pagenum(); // Set per page from the screen options $per_page = $this->get_items_per_page(str_replace('-', '_', "{$screen->id}_per_page")); // Sort order. $order = 'DESC'; if (!empty($_REQUEST['order'])) { $order = 'desc' == strtolower($_REQUEST['order']) ? 'DESC' : 'ASC'; } // Order by - default to newest $orderby = 'last_activity'; if (!empty($_REQUEST['orderby'])) { switch ($_REQUEST['orderby']) { case 'name': $orderby = 'name'; break; case 'id': $orderby = 'date_created'; break; case 'members': $orderby = 'total_member_count'; break; case 'last_active': $orderby = 'last_activity'; break; } } // Are we doing a search? if (!empty($_REQUEST['s'])) { $search_terms = $_REQUEST['s']; } // Check if user has clicked on a specific group (if so, fetch only that group). if (!empty($_REQUEST['gid'])) { $include_id = (int) $_REQUEST['gid']; } // Set the current view if (isset($_GET['group_status']) && in_array($_GET['group_status'], array('public', 'private', 'hidden'))) { $this->view = $_GET['group_status']; } // We'll use the ids of group types for the 'include' param $this->group_type_ids = BP_Groups_Group::get_group_type_ids(); // Pass a dummy array if there are no groups of this type $include = false; if ('all' != $this->view && isset($this->group_type_ids[$this->view])) { $include = !empty($this->group_type_ids[$this->view]) ? $this->group_type_ids[$this->view] : array(0); } // Get group type counts for display in the filter tabs $this->group_counts = array(); foreach ($this->group_type_ids as $group_type => $group_ids) { $this->group_counts[$group_type] = count($group_ids); } // If we're viewing a specific group, flatten all activities into a single array. if ($include_id) { $groups = array((array) groups_get_group('group_id=' . $include_id)); } else { $groups_args = array('include' => $include, 'per_page' => $per_page, 'page' => $page, 'orderby' => $orderby, 'order' => $order); $groups = array(); if (bp_has_groups($groups_args)) { while (bp_groups()) { bp_the_group(); $groups[] = (array) $groups_template->group; } } } // Set raw data to display $this->items = $groups; // Store information needed for handling table pagination $this->set_pagination_args(array('per_page' => $per_page, 'total_items' => $groups_template->total_group_count, 'total_pages' => ceil($groups_template->total_group_count / $per_page))); }