<?php
/**
 * PageUtil
 * ページの区切りを処理するためのクラス。
 * ページ番号は１からはじめる。
 * $Id: PageUtil.inc,v 1.1 2015/10/08 11:18:56 wanggb Exp $
 * @author iimuro
 * @access public
 * @package jp.aimslib2.util
 */
 
class PageUtil {
	
	/**
	 * オリジナルのデータ
	 */
	public $data;
	
	/**
	 * 指定した大きさにチャンクされたデータ。
	 */
	public $page_list;
	
	/**
	 * 現在指定のページ。
	 */
	public $page_now;
	
	public function __construct($data, $item_per_page, $page_now = 1) {
		if ($item_per_page < 1) {
			$item_per_page = count($data);
		} 
		$this->data = $data;
		$this->page_list = array_chunk($data, $item_per_page);
		
		$this->page_now = $page_now;
	}
	
	
	/**
	 * 指定したページのアイテムを返します。
	 * 指定しなかった場合、初期に設定した値が使われます。
	 * @param int ページ番号。１からはじまる。
	 */
	public function getList($page_now = null) {
		if ($page_now == null) {
			$page_now = $this->page_now;
		}
		
		if ($page_now > count($this->page_list)) {
			$page_now = count($this->page_list);
		}
		
		if ($page_now < 1) {
			$page_now = 1;
		}
		
		if (count($this->page_list) > 0) {
			return $this->page_list[$page_now - 1];
		} else {
			return array();
		}
	}
	
	/**
	 * 次のページがあるかを返します。
	 * @return boolean ある場合true。
	 */
	public function hasNext() {
		if ($this->page_now + 1 > count($this->page_list)) {
			return false;
		} else {
			return true;
		}
	}
	
	
	/**
	 * 前のページがあるかを返します。
	 * @return boolean ある場合true。
	 */
	public function hasPrev() {
		if ($this->page_now < 2) {
			return false;
		} else {
			return true;
		}
	}
	
	/**
	 * 次のページの番号を返します。
	 * @return int 次のページの番号。
	 */
	public function getNextNum() {
		if ($this->page_now + 1 > count($this->page_list)) {
			return $this->page_now;
		} else {
			return $this->page_now + 1;
		}
	}
	
	/**
	 * 前のページの番号を返します。
	 * @return int 前のページの番号。
	 */
	public function getPrevNum() {
		if ($this->page_now < 2) {
			return 1;
		} else {
			return $this->page_now - 1;
		}
	}
	
	/**
	 * 最大ページ数を返します。
	 * @return int 最大ページ番号。
	 */
	public function getMaxPage() {
		return count($this->page_list);
	}
	
	/**
	 * 最小ページ数を返します。有効な値がある場合は値は常に1になります。
	 * @return int 最小ページ番号。
	 */
	public function getMinPage() {
		if (count($this->page_list) > 0) {
			return 1;
		} else {
			return 0;
		}
	}
}

?>