<?php
/**
* ページャコンポーネント
*
* PHP version 5
*
* @package    components.charcoal
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

require_once( 'PageInfo.class.php' );

class CharcoalPager implements IComponent
{
	var $_config;

	/*
	 * コンストラクタ
	 */
	public function __construct()
	{
		$this->_config = NULL;
	}

	/*
	 * コンポーネント名を取得
	 */
	public function getComponentName(){
		return "Pager Component";
	}

	/*
	 * コンポーネントを初期化する
	 */
	public function initComponent( $component_config ){

		// page_settings
		$page_settings = $component_config->getString("page_settings");

		$this->_config = $page_settings;

	}

	/*
	 * ページ情報を返却
	 */
	public function getPageInfo( $list_name, Request $request, $total_rows ){

		// 現在のページ
		$page = intval($request->get( "page" ));
		if ( $page == NULL || !is_int($page) || $page <= 0 ){
			$page = 1;
		}

		// リスト名に一致する設定を取得
		$config = $this->_config[ $list_name ];

		// １ページあたりの表示行数を取得
		$rows_per_page = $config[ "rows_per_page" ];
		if ( $rows_per_page == NULL || !is_int($rows_per_page) || $rows_per_page <= 0 ){
			$rows_per_page = 10;
		}

		// ベースURL
		$base_url = $request->getURL();

//print "base_url:$base_url<BR>";

		// ページ情報を作成
		$page_info = new PageInfo( $total_rows, $page, $rows_per_page, $base_url );

		return $page_info;
	}


	/*
	 * ページ情報からページナビゲーターを作成
	 */
	public function makePageNavigator( PageInfo $page_info ){

		$navi = "";

		// 現在のページ
		$page = $page_info->getPage();

		// 総行数
		$total_rows = $page_info->getTotalRows();

		// １ページの表示行数
		$rows_per_page = $page_info->getRowsPerPage();

		// ベースURL
		$base_url = $page_info->getBaseURL();

		// 先頭ページへ
		$url = $base_url->setParameter( "page", 1 )->makeURLString();
		$navi .= "<a href=\"$url\">|&lt;</a>";

		// 前のページ
		if ( $page > 1 ){
			$url = $base_url->setParameter( "page", $page - 1 )->makeURLString();
			$navi .= "&nbsp;&nbsp;<a href=\"$url\">&lt;-</a>";
		}
		else{
			$navi .= "&nbsp;&nbsp;&lt;-";
		}

		// 総ページ数
		$total_page = intval($total_rows / $rows_per_page) + 1;

		// ページ数分繰り返し
		for( $i=1; $i<=$total_page; $i++ ){
			if ( $i == $page ){
				$navi .= "&nbsp;&nbsp;[$i]";
			}
			else{
				$url = $base_url->setParameter( "page", $i )->makeURLString();
				$navi .= "&nbsp;&nbsp;<a href=\"$url\">[$i]</a>";
			}
		}

		// 次のページ
		if ( $page< $total_page ){
			$url = $base_url->setParameter( "page", $page + 1 )->makeURLString();
			$navi .= "&nbsp;&nbsp;<a href=\"$url\">-&gt;</a>";
		}
		else{
			$navi .= "&nbsp;&nbsp;-&gt;";
		}

		// 最後のページへ
		$url = $base_url->setParameter( "page", $total_page )->makeURLString();
		$navi .= "&nbsp;&nbsp;<a href=\"$url\">&gt;|</a>";

		return $navi;
	}
}


?>
