<?php
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * File:     function.pagination.php
 * Type:     function
 * Name:     link
 * Purpose:  zwraca linki do pozostalych stron z danego zakresu
 * Dependencies: function.url.php
 * -------------------------------------------------------------
 */

/**
 *
 * @param <type> $params
 * @param TemplateMaster $smarty
 * @return <type>
 */
function smarty_function_pagination($params, &$smarty) {

	$globalParams = $smarty->_tpl_vars['param'];

	if( isset($globalParams[ROUTER_SORT_LABEL]) )
	{
		$params[ROUTER_SORT_LABEL] = $globalParams[ROUTER_SORT_LABEL];
	}

	if( isset($globalParams[ROUTER_DIR_LABEL]) )
	{
		$params[ROUTER_DIR_LABEL] = $globalParams[ROUTER_DIR_LABEL];
	}

	if( !isset($params['next']) ) {
		$params['next'] = PAGE_NEXT_LABEL;
	}

	if( !isset($params['prev']) ) {
		$params['prev'] = PAGE_PREV_LABEL;
	}

	// Jeżeli nie jest podany label to wstawiam current
	if( !isset($params['label']) ) {
		$params['label'] = 'current';
	}


	if( isset($params['count']) ) {
		$count = $params['count'];
	} else {
		throw new Exception( 'Sortowanie: Wymagana ilość elementów - count!');
	}


	if( isset($params['ajax']) ){
		$ajax = $params['ajax'];
	} else {
		$ajax = null;
	}

	if( isset($params['max']) ){
		$max = $params['max'];
	} else {
		$max = 2;
	}

	if( isset($params['number']) ){
		$number = $params['number'];
	} else {
		$number = 0;
	}

	$pageArray = $smarty->_tpl_vars['_page'];

	if(is_array($pageArray)){
		for ($i = 0; $i < $number+1; $i++) {
			$pageArray[$i] = isset($pageArray[$i])? $pageArray[$i] : 1;
		}
	} else {
		$pageArray = array();
		for ($i = 0; $i < $number+1; $i++) {
			$pageArray[$i] = 1;
		}
	}
	// Wybór strony w tabeli o bierzącym numerku.
	$page = $pageArray[$number];

	$page = max(1, $page);

	if ($count <= 1)
		return '';

	$pageArray[$number] =  max(1, $page - 1);
	$params[ROUTER_PAGE_LABEL] = $pageArray; ;
	$ret = '<a href="' . pagination_generate_url($params, $smarty) . '" rel="nofollow"' . ($page > 1 ? '' : ' class="disabled" onclick="return false;"')  . '>' . (isset($params['prev']) ? $params['prev'] : '<<') . ($page > 1 ? '</a>' : '') . '&nbsp;';

	if ($page - $max > 1) {
		$pageArray[$number] =  1;
		$params[ROUTER_PAGE_LABEL] = $pageArray; ;
		$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '" rel="nofollow">1</a> ... ';
	}

	for ($i = max(1, $page - $max) ; $i < $page; $i++) {
		$pageArray[$number] =  $i;
		$params[ROUTER_PAGE_LABEL] = $pageArray; ;
		$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '">' . $i . '</a>';
	}

	$pageArray[$number] =  $page;
		 $params[ROUTER_PAGE_LABEL] = $pageArray; ;
	$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '" class="selected" onclick="return false;">' .  $page . '</a>';

	for ($i = min($page + 1, $count) ; $i < $page + $max + 1 && $i <= $count && $page != $count; $i++) {
		$pageArray[$number] =  $i;
		$params[ROUTER_PAGE_LABEL] = $pageArray; ;
		$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '">' . $i . '</a>';
	}

	if ($page + $max < $count) {
		$pageArray[$number] =  $count;
		$params[ROUTER_PAGE_LABEL] = $pageArray; ;
		$ret .= ' ... <a href="' . pagination_generate_url($params, $smarty) . '">' . $count . '</a>';
	}
	
	$pageArray[$number] =  min($page + 1, $count);
	$params[ROUTER_PAGE_LABEL] = $pageArray; ;

	$ret .= '<a href="' . pagination_generate_url($params, $smarty) . '" rel="nofollow"' . ($page < $count ? '' : ' class="disabled" onclick="return false;"') . ">" . (isset($params['next']) ? $params['next'] : '>>') . '</a>';

	return $ret;
}

function pagination_generate_url($params, &$smarty) {

	include_once(dirname(__FILE__) . '/function.url.php');

	$pageArray = $params[ROUTER_PAGE_LABEL];

	if( array_sum($pageArray) <= count($pageArray))
		$params[ROUTER_PAGE_LABEL] = null;
	else
		$params[ROUTER_PAGE_LABEL] = implode('-', $pageArray);

	return smarty_function_url($params, $smarty);
}
?>