HEX
Server: Apache
System: Linux vps-cdc32557.vps.ovh.ca 5.15.0-156-generic #166-Ubuntu SMP Sat Aug 9 00:02:46 UTC 2025 x86_64
User: hanode (1017)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/hanode/public_html/wp-content/plugins/sitepress-multilingual-cms/classes/utilities/Pager.php
<?php

namespace WPML\Utils;

use WPML\Collect\Support\Collection;

class Pager {
	/** @var string */
	protected $optionName;

	/** @var int */
	protected $pageSize;

	/**
	 * @param string $optionName
	 * @param int    $pageSize
	 */
	public function __construct( $optionName, $pageSize = 10 ) {
		$this->optionName = $optionName;
		$this->pageSize   = $pageSize;
	}

	/**
	 * @param Collection $collection
	 * @param callable   $callback
	 * @param int        $timeout
	 *
	 * @return int
	 */
	public function iterate( Collection $collection, callable $callback, $timeout = PHP_INT_MAX ) {
		$processedItems = $this->getProcessedCount();

		$this->getItemsToProcess( $collection, $processedItems )->eachWithTimeout(
			function ( $item ) use (
			&$processedItems,
			$callback
			) {
				return $callback( $item ) && ++ $processedItems;
			},
			$timeout
		);

		$remainingPages = $this->getRemainingPages( $collection, $processedItems );

		if ( $remainingPages ) {
			\update_option( $this->optionName, $processedItems );
		} else {
			\delete_option( $this->optionName );
		}

		return $remainingPages;
	}

	private function getItemsToProcess( Collection $collection, $processedItems ) {
		return $collection->slice( $processedItems, $this->pageSize );
	}

	/**
	 * @param Collection $collection
	 *
	 * @return int
	 */
	public function getPagesCount( Collection $collection ) {
		return (int) ceil( $collection->count() / $this->pageSize );
	}

	/**
	 * @param \WPML\Collect\Support\Collection $collection
	 *
	 * @return int
	 */
	protected function getRemainingPages( Collection $collection, $processedItems ) {
		return (int) ceil( $collection->slice( $processedItems )->count() / $this->pageSize );
	}

	/**
	 * @return int
	 */
	public function getProcessedCount() {
		return get_option( $this->optionName, 0 );
	}
}