mirror of
https://github.com/torrentpier/torrentpier-lts.git
synced 2025-03-01 15:21:02 +03:00
110 lines
3.1 KiB
PHP
110 lines
3.1 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Zend Framework (http://framework.zend.com/)
|
||
|
*
|
||
|
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
||
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||
|
*/
|
||
|
|
||
|
namespace Zend\Paginator;
|
||
|
|
||
|
use Traversable;
|
||
|
use Zend\Paginator\Adapter\AdapterInterface;
|
||
|
use Zend\Stdlib\ArrayUtils;
|
||
|
|
||
|
abstract class Factory
|
||
|
{
|
||
|
/**
|
||
|
* Adapter plugin manager
|
||
|
* @var AdapterPluginManager
|
||
|
*/
|
||
|
protected static $adapters;
|
||
|
|
||
|
/**
|
||
|
* Create adapter from items if necessary, and return paginator
|
||
|
* @param Traversable/array $items
|
||
|
* @return Paginator
|
||
|
*/
|
||
|
protected static function createAdapterFromItems($items)
|
||
|
{
|
||
|
if ($items instanceof Traversable) {
|
||
|
$items = ArrayUtils::iteratorToArray($items);
|
||
|
}
|
||
|
if (!is_array($items)) {
|
||
|
throw new Exception\InvalidArgumentException(
|
||
|
'The factory needs an associative array '
|
||
|
. 'or a Traversable object as an argument when '
|
||
|
. "it's used with one parameter"
|
||
|
);
|
||
|
}
|
||
|
if (!isset($items['adapter']) && !isset($items['items'])) {
|
||
|
throw new Exception\InvalidArgumentException(
|
||
|
'The factory needs an associative array '
|
||
|
. 'or a Traversable object with keys '
|
||
|
. '"adapter" and "items"'
|
||
|
);
|
||
|
}
|
||
|
$adapter = $items['adapter'];
|
||
|
$items = $items['items'];
|
||
|
|
||
|
$paginator = static::getAdapterFromManager($items, $adapter);
|
||
|
return $paginator;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get adapter from manager if necessary, and return paginator
|
||
|
* @param mixed $items
|
||
|
* @param mixed $adapter
|
||
|
* @return Paginator
|
||
|
*/
|
||
|
protected static function getAdapterFromManager($items, $adapter)
|
||
|
{
|
||
|
if ($adapter instanceof AdapterInterface || $adapter instanceof AdapterAggregateInterface) {
|
||
|
return new Paginator($adapter);
|
||
|
}
|
||
|
$adapter = static::getAdapterPluginManager()->get($adapter, $items);
|
||
|
return new Paginator($adapter);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create paginator with items and adapter
|
||
|
* @param mixed $items
|
||
|
* @param mixed $adapter
|
||
|
* @return Paginator
|
||
|
*/
|
||
|
public static function factory($items, $adapter = null)
|
||
|
{
|
||
|
if (null === $adapter) {
|
||
|
$paginator = static::createAdapterFromItems($items);
|
||
|
return $paginator;
|
||
|
}
|
||
|
$paginator = static::getAdapterFromManager($items, $adapter);
|
||
|
return $paginator;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Change the adapter plugin manager
|
||
|
*
|
||
|
* @param AdapterPluginManager $adapters
|
||
|
* @return void
|
||
|
*/
|
||
|
public static function setAdapterPluginManager(AdapterPluginManager $adapters)
|
||
|
{
|
||
|
static::$adapters = $adapters;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the adapter plugin manager
|
||
|
*
|
||
|
* @return AdapterPluginManager
|
||
|
*/
|
||
|
public static function getAdapterPluginManager()
|
||
|
{
|
||
|
if (static::$adapters === null) {
|
||
|
static::$adapters = new AdapterPluginManager();
|
||
|
}
|
||
|
return static::$adapters;
|
||
|
}
|
||
|
}
|