Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
26 / 26
Page
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
8
100.00% covered (success)
100.00%
26 / 26
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
 getPageNo
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getLinkURL
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
18 / 18
 toArray
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
<?php
namespace Puyo\Pager;
/**
 * ページ
 */
class Page
{
    /**
     * ページ番号
     * @var int
     */
    private $pageNo;
    
    /**
     * コントローラのURI
     * @var string
     */
    private $controllerURI;
    
    /**
     * ページ番号を表すパラメータの名前
     * @var string
     */
    private $paramName;
    
    /**
     * コンストラクタ
     * @param string|int $pageNo ページ番号
     * @param string $controllerURI コントローラのURI
     * @param string $paramName
     */
    public function __construct($pageNo, $controllerURI, $paramName) {
        $this->pageNo = intVal($pageNo);
        $this->controllerURI = $controllerURI;
        $this->paramName = $paramName;
    }
    
    /**
     * ページ番号を返す
     * @return int ページ番号
     */
    public function getPageNo() {
        return $this->pageNo;
    }
    
    /**
     * リンク用のURLを返す
     * @return string リンク用URL
     */
    public function getLinkURL() {
        $paramName = $this->paramName;
        $linkURL = $this->controllerURI;
        
        if(preg_match("/&$paramName=/", $linkURL) === 1) {            // pageパラメタあり(途中)
            // 古いpageパラメタを消して末尾に追加
            $linkURL = preg_replace("/(&+)$paramName=(\d+)/", '', $linkURL);
            $linkURL .= "&$paramName=" . $this->pageNo;
        } elseif(preg_match("/\?$paramName=/", $linkURL) === 1) {    // pageパラメタあり(先頭)
            if(preg_match('/&/', $linkURL) === 1) {        // 他のパラメタあり
                // 古いpageパラメタを消して詰め,末尾に追加
                $linkURL = preg_replace("/\?$paramName=(\d+)&/", '?', $linkURL);
                $linkURL .= "&$paramName=" . $this->pageNo;
            } else {                                    // 他のパラメタなし
                // 古いpageパラメタを消して付け直す
                $linkURL = preg_replace("/\?$paramName=(\d+)/", '', $linkURL);
                $linkURL .= "?$paramName=" . $this->pageNo;
            }
        } else {                                                    // pageパラメタなし
            if(preg_match('/\?/', $linkURL) > 0) {        // 他のパラメタあり
                $linkURL .= "&$paramName=" . $this->pageNo;
            } else {                                    // 他のパラメタなし
                $linkURL .= "?$paramName=" . $this->pageNo;
            }
        }
        
        return $linkURL;
    }
    
    /**
     * このオブジェクトをHashにして返す
     * @return array ページ
     */
    public function toArray() {
        $hash['pageNo'] = $this->pageNo;
        $hash['url'] = $this->getLinkURL();
        
        return $hash;
    }
}