/** * Handles live updates for both dashboard widget and Stream Post List * * @action heartbeat_recieved * @param array Response to be sent to heartbeat tick * @param array Data from heartbeat send * @return array Data sent to heartbeat tick */ public static function heartbeat_received($response, $data) { $option = get_option('dashboard_stream_activity_options'); $enable_stream_update = 'off' !== get_user_meta(get_current_user_id(), 'stream_live_update_records', true); $enable_dashboard_update = 'off' !== $option['live_update']; // Register list table require_once WP_STREAM_INC_DIR . 'list-table.php'; self::$list_table = new WP_Stream_List_Table(array('screen' => 'toplevel_page_' . WP_Stream_Admin::RECORDS_PAGE_SLUG)); self::$list_table->prepare_items(); $total_items = isset(self::$list_table->_pagination_args['total_items']) ? self::$list_table->_pagination_args['total_items'] : null; $total_pages = isset(self::$list_table->_pagination_args['total_pages']) ? self::$list_table->_pagination_args['total_pages'] : null; $per_page = isset(self::$list_table->_pagination_args['per_page']) ? self::$list_table->_pagination_args['per_page'] : null; if (isset($data['wp-stream-heartbeat']) && isset($total_items)) { $response['total_items'] = $total_items; $response['total_items_i18n'] = sprintf(_n('1 item', '%s items', $total_items), number_format_i18n($total_items)); } if (isset($data['wp-stream-heartbeat']) && 'live-update' === $data['wp-stream-heartbeat'] && $enable_stream_update) { if (!empty($data['wp-stream-heartbeat'])) { if (isset($total_pages)) { $response['total_pages'] = $total_pages; $response['total_pages_i18n'] = number_format_i18n($total_pages); $query_args = json_decode($data['wp-stream-heartbeat-query'], true); $query_args['paged'] = $total_pages; $response['last_page_link'] = add_query_arg($query_args, admin_url('admin.php')); } else { $response['total_pages'] = 0; } } $response['wp-stream-heartbeat'] = self::live_update($response, $data); } elseif (isset($data['wp-stream-heartbeat']) && 'dashboard-update' === $data['wp-stream-heartbeat'] && $enable_dashboard_update) { $per_page = isset($option['records_per_page']) ? absint($option['records_per_page']) : 5; if (isset($total_items)) { $total_pages = ceil($total_items / $per_page); $response['total_pages'] = $total_pages; $response['total_pages_i18n'] = number_format_i18n($total_pages); $query_args['page'] = WP_Stream_Admin::RECORDS_PAGE_SLUG; $query_args['paged'] = $total_pages; $response['last_page_link'] = add_query_arg($query_args, admin_url('admin.php')); } $response['per_page'] = $per_page; $response['wp-stream-heartbeat'] = WP_Stream_Dashboard_Widget::live_update($response, $data); } else { $response['log'] = 'fail'; } return $response; }