| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 | <?php/** * List Table API: WP_Links_List_Table class * * @package WordPress * @subpackage Administration * @since 3.1.0 *//** * Core class used to implement displaying links in a list table. * * @since 3.1.0 * * @see WP_List_Table */class WP_Links_List_Table extends WP_List_Table {	/**	 * Constructor.	 *	 * @since 3.1.0	 *	 * @see WP_List_Table::__construct() for more information on default arguments.	 *	 * @param array $args An associative array of arguments.	 */	public function __construct( $args = array() ) {		parent::__construct(			array(				'plural' => 'bookmarks',				'screen' => isset( $args['screen'] ) ? $args['screen'] : null,			)		);	}	/**	 * @return bool	 */	public function ajax_user_can() {		return current_user_can( 'manage_links' );	}	/**	 * @global int    $cat_id	 * @global string $s	 * @global string $orderby	 * @global string $order	 */	public function prepare_items() {		global $cat_id, $s, $orderby, $order;		wp_reset_vars( array( 'action', 'cat_id', 'link_id', 'orderby', 'order', 's' ) );		$args = array(			'hide_invisible' => 0,			'hide_empty'     => 0,		);		if ( 'all' !== $cat_id ) {			$args['category'] = $cat_id;		}		if ( ! empty( $s ) ) {			$args['search'] = $s;		}		if ( ! empty( $orderby ) ) {			$args['orderby'] = $orderby;		}		if ( ! empty( $order ) ) {			$args['order'] = $order;		}		$this->items = get_bookmarks( $args );	}	/**	 */	public function no_items() {		_e( 'No links found.' );	}	/**	 * @return array	 */	protected function get_bulk_actions() {		$actions           = array();		$actions['delete'] = __( 'Delete' );		return $actions;	}	/**	 * @global int $cat_id	 * @param string $which	 */	protected function extra_tablenav( $which ) {		global $cat_id;		if ( 'top' !== $which ) {			return;		}		?>		<div class="alignleft actions">			<?php			$dropdown_options = array(				'selected'        => $cat_id,				'name'            => 'cat_id',				'taxonomy'        => 'link_category',				'show_option_all' => get_taxonomy( 'link_category' )->labels->all_items,				'hide_empty'      => true,				'hierarchical'    => 1,				'show_count'      => 0,				'orderby'         => 'name',			);			echo '<label class="screen-reader-text" for="cat_id">' . get_taxonomy( 'link_category' )->labels->filter_by_item . '</label>';			wp_dropdown_categories( $dropdown_options );			submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );			?>		</div>		<?php	}	/**	 * @return array	 */	public function get_columns() {		return array(			'cb'         => '<input type="checkbox" />',			'name'       => _x( 'Name', 'link name' ),			'url'        => __( 'URL' ),			'categories' => __( 'Categories' ),			'rel'        => __( 'Relationship' ),			'visible'    => __( 'Visible' ),			'rating'     => __( 'Rating' ),		);	}	/**	 * @return array	 */	protected function get_sortable_columns() {		return array(			'name'    => 'name',			'url'     => 'url',			'visible' => 'visible',			'rating'  => 'rating',		);	}	/**	 * Get the name of the default primary column.	 *	 * @since 4.3.0	 *	 * @return string Name of the default primary column, in this case, 'name'.	 */	protected function get_default_primary_column_name() {		return 'name';	}	/**	 * Handles the checkbox column output.	 *	 * @since 4.3.0	 * @since 5.9.0 Renamed `$link` to `$item` to match parent class for PHP 8 named parameter support.	 *	 * @param object $item The current link object.	 */	public function column_cb( $item ) {		// Restores the more descriptive, specific name for use within this method.		$link = $item;		?>		<label class="screen-reader-text" for="cb-select-<?php echo $link->link_id; ?>">			<?php			/* translators: %s: Link name. */			printf( __( 'Select %s' ), $link->link_name );			?>		</label>		<input type="checkbox" name="linkcheck[]" id="cb-select-<?php echo $link->link_id; ?>" value="<?php echo esc_attr( $link->link_id ); ?>" />		<?php	}	/**	 * Handles the link name column output.	 *	 * @since 4.3.0	 *	 * @param object $link The current link object.	 */	public function column_name( $link ) {		$edit_link = get_edit_bookmark_link( $link );		printf(			'<strong><a class="row-title" href="%s" aria-label="%s">%s</a></strong>',			$edit_link,			/* translators: %s: Link name. */			esc_attr( sprintf( __( 'Edit “%s”' ), $link->link_name ) ),			$link->link_name		);	}	/**	 * Handles the link URL column output.	 *	 * @since 4.3.0	 *	 * @param object $link The current link object.	 */	public function column_url( $link ) {		$short_url = url_shorten( $link->link_url );		echo "<a href='$link->link_url'>$short_url</a>";	}	/**	 * Handles the link categories column output.	 *	 * @since 4.3.0	 *	 * @global int $cat_id	 *	 * @param object $link The current link object.	 */	public function column_categories( $link ) {		global $cat_id;		$cat_names = array();		foreach ( $link->link_category as $category ) {			$cat = get_term( $category, 'link_category', OBJECT, 'display' );			if ( is_wp_error( $cat ) ) {				echo $cat->get_error_message();			}			$cat_name = $cat->name;			if ( (int) $cat_id !== $category ) {				$cat_name = "<a href='link-manager.php?cat_id=$category'>$cat_name</a>";			}			$cat_names[] = $cat_name;		}		echo implode( ', ', $cat_names );	}	/**	 * Handles the link relation column output.	 *	 * @since 4.3.0	 *	 * @param object $link The current link object.	 */	public function column_rel( $link ) {		echo empty( $link->link_rel ) ? '<br />' : $link->link_rel;	}	/**	 * Handles the link visibility column output.	 *	 * @since 4.3.0	 *	 * @param object $link The current link object.	 */	public function column_visible( $link ) {		if ( 'Y' === $link->link_visible ) {			_e( 'Yes' );		} else {			_e( 'No' );		}	}	/**	 * Handles the link rating column output.	 *	 * @since 4.3.0	 *	 * @param object $link The current link object.	 */	public function column_rating( $link ) {		echo $link->link_rating;	}	/**	 * Handles the default column output.	 *	 * @since 4.3.0	 * @since 5.9.0 Renamed `$link` to `$item` to match parent class for PHP 8 named parameter support.	 *	 * @param object $item        Link object.	 * @param string $column_name Current column name.	 */	public function column_default( $item, $column_name ) {		/**		 * Fires for each registered custom link column.		 *		 * @since 2.1.0		 *		 * @param string $column_name Name of the custom column.		 * @param int    $link_id     Link ID.		 */		do_action( 'manage_link_custom_column', $column_name, $item->link_id );	}	public function display_rows() {		foreach ( $this->items as $link ) {			$link                = sanitize_bookmark( $link );			$link->link_name     = esc_attr( $link->link_name );			$link->link_category = wp_get_link_cats( $link->link_id );			?>		<tr id="link-<?php echo $link->link_id; ?>">			<?php $this->single_row_columns( $link ); ?>		</tr>			<?php		}	}	/**	 * Generates and displays row action links.	 *	 * @since 4.3.0	 * @since 5.9.0 Renamed `$link` to `$item` to match parent class for PHP 8 named parameter support.	 *	 * @param object $item        Link being acted upon.	 * @param string $column_name Current column name.	 * @param string $primary     Primary column name.	 * @return string Row actions output for links, or an empty string	 *                if the current column is not the primary column.	 */	protected function handle_row_actions( $item, $column_name, $primary ) {		if ( $primary !== $column_name ) {			return '';		}		// Restores the more descriptive, specific name for use within this method.		$link      = $item;		$edit_link = get_edit_bookmark_link( $link );		$actions           = array();		$actions['edit']   = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>';		$actions['delete'] = sprintf(			'<a class="submitdelete" href="%s" onclick="return confirm( \'%s\' );">%s</a>',			wp_nonce_url( "link.php?action=delete&link_id=$link->link_id", 'delete-bookmark_' . $link->link_id ),			/* translators: %s: Link name. */			esc_js( sprintf( __( "You are about to delete this link '%s'\n  'Cancel' to stop, 'OK' to delete." ), $link->link_name ) ),			__( 'Delete' )		);		return $this->row_actions( $actions );	}}
 |