'', 'post_author' => \__( 'Post Author (user_id)', 'activitypub' ), 'title' => \__( 'Post', 'activitypub' ), 'comments' => \__( 'Comments', 'activitypub' ), 'date' => \__( 'Publication Date', 'activitypub' ), 'migrate' => \__( 'Migrate', 'activitypub' ), ); } public function get_sortable_columns() { return array(); } function get_bulk_actions() { $actions = array( 'delete' => 'Remove backwards compatibility' ); return $actions; } public static function get_activitypub_tools_views() { $posts_count = \Activitypub\Tools\Posts::count_posts_to_migrate(); $comments_posts_count = \Activitypub\Tools\Posts::count_posts_with_comments_to_migrate(); $activitypub_tools_page = 'tools.php?page=activitypub_tools'; $view_slugs = array( array('all', NULL, __('All', 'activitypub'), $posts_count), array('comments', 'activitypub', __('Posts with Comments', 'activitypub'), $comments_posts_count), ); $post_status_var = get_query_var('comments'); $view_count = count($view_slugs); for ($x = 0; $x < $view_count; $x++) { $class = ($post_status_var == $view_slugs[$x][1]) ? ' class="current"' : ''; $post_status_temp = $view_slugs[$x][1]; if($post_status_temp != '') { $post_status_temp = '&comments='.$view_slugs[$x][1]; } $views[$view_slugs[$x][0]] = sprintf(__('' . $view_slugs[$x][2] . ' (%d)'), $view_slugs[$x][3]); } return $views; } public function prepare_items() { $columns = $this->get_columns(); $hidden = array( 'post_author', 'migrate' ); $sortable = $this->get_sortable_columns(); $this->_column_headers = array( $columns, $hidden, $sortable ); $this->items = array(); $this->process_action(); if ( 'activitypub_tools' === $_REQUEST['page'] ) { if ( isset( $_REQUEST['comments'] ) && 'activitypub' === $_REQUEST['comments'] ) { foreach ( \Activitypub\Tools\Posts::get_posts_with_activitypub_comments() as $ap_post ) { $this->items[] = array( 'post_author' => $ap_post->post_author, 'title' => \sprintf( '%2s', \get_permalink( $ap_post->ID ), $ap_post->post_title ), 'comments' => $ap_post->comment_count, 'date' => $ap_post->post_date, 'migrate' => \get_post_meta( $ap_post->ID, '_activitypub_permalink_compat', true ), ); } } else { foreach ( \Activitypub\Tools\Posts::get_posts_to_migrate() as $post ) { $this->items[] = array( 'post_author' => $post->post_author, 'title' => \sprintf( '%2s', \get_permalink( $post->ID ), $post->post_title ), 'comments' => $post->comment_count, 'date' => $post->post_date, 'migrate' => \get_post_meta( $post->ID, '_activitypub_permalink_compat', true ), ); } } } // pagination $per_page = $this->get_items_per_page( 'elements_per_page', 10 ); $current_page = $this->get_pagenum(); $total_items = count( $this->items ); $table_data = array_slice( $this->items, ( ( $current_page - 1 ) * $per_page ), $per_page ); $this->set_pagination_args( array( 'total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil( $total_items / $per_page ), ) ); // actions if ( isset( $_REQUEST['_wpnonce'] ) ) { $nonce = \esc_attr( $_REQUEST['_wpnonce'] ); } // delete if ( isset( $_REQUEST['action'] ) && 'activitypub_tools' === $_REQUEST['page'] && 'delete_notice' === $_REQUEST['action'] ) { if ( wp_verify_nonce( $nonce, 'activitypub_migrate_actions' ) ) { \Activitypub\Tools\Posts::delete_url( rawurldecode( $_REQUEST['post_url'] ), absint( $_REQUEST['post_author'] ) ); \delete_post_meta( \url_to_postid( $_REQUEST['post_url'] ), '_activitypub_permalink_compat' ); } } // delete and announce if ( isset( $_REQUEST['action'] ) && 'activitypub_tools' === $_REQUEST['page'] && 'delete' === $_REQUEST['action'] ) { if ( wp_verify_nonce( $nonce, 'activitypub_migrate_actions' ) ) { \Activitypub\Tools\Posts::migrate_post( rawurldecode( $_REQUEST['post_url'] ), absint( $_REQUEST['post_author'] ) ); \delete_post_meta( \url_to_postid( $_REQUEST['post_url'] ), '_activitypub_permalink_compat' ); } } } public function single_row( $item ) { $inline_styles = ( $item['comments'] > 0 ) ? 'warning' : ''; ?> single_row_columns( $item ); ?>', $item['migrate'] ); } /** * Render a column when no column specific method exists. * * @param array $item * @param string $column_name * * @return mixed */ public function column_default( $item, $column_name ) { switch ( $column_name ) { case 'cb': case 'post_author': case 'title': case 'comments': case 'date': case 'migrate': return $item[ $column_name ]; default: return print_r( $item, true ); } } public function column_title( $item ) { $migrate_action_nonce = wp_create_nonce( 'activitypub_migrate_actions' ); $actions = array( 'delete' => sprintf( '%s', esc_attr( $_REQUEST['page'] ), 'delete',// using this id for style reasons $item['post_author'], \rawurlencode( $item['migrate'] ), $migrate_action_nonce, 'delete_annouce aria-button-ui-if-js', __( 'Delete the federated post, and re-share the post with a new id', 'activitypub' ), $item['post_author'], \rawurlencode( $item['migrate'] ), $migrate_action_nonce, __( 'Migrate post', 'activitypub' ) ), 'delete_notice' => sprintf( '%s', esc_attr( $_REQUEST['page'] ), 'delete_notice', $item['post_author'], \rawurlencode( $item['migrate'] ), $migrate_action_nonce, 'delete aria-button-ui-if-js', __( 'Delete this notice and backwards compatibility', 'activitypub' ), $item['post_author'], \rawurlencode( $item['migrate'] ), $migrate_action_nonce, __( 'Remove notice', 'activitypub' ) ), ); return sprintf( '%1$s %2$s', $item['title'], $this->row_actions( $actions, true ) ); } }