Maslosoft Mangan API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
<?php
/**
* This software package is licensed under AGPL or Commercial license.
*
* @package maslosoft/mangan
* @licence AGPL or Commercial
* @copyright Copyright (c) Piotr Masełkowski <pmaselkowski@gmail.com>
* @copyright Copyright (c) Maslosoft
* @copyright Copyright (c) Others as mentioned in code
* @link https://maslosoft.com/mangan/
*/
namespace Maslosoft\Mangan\Helpers\PropertyFilter;
use Maslosoft\Mangan\Interfaces\Filters\Property\TransformatorFilterInterface;
use Maslosoft\Mangan\Mangan;
use Maslosoft\Mangan\Meta\DocumentPropertyMeta;
use Maslosoft\Mangan\Meta\DocumentTypeMeta;
use Maslosoft\Mangan\Transformers\Filters\Unfiltered;
/**
* Factory
*
* @author Piotr Maselkowski <pmaselkowski at gmail.com>
*/
class Factory
{
/**
* Filter instances
* @var TransformatorFilterInterface[][]
*/
private static $_configs = [];
private static $c = [];
/**
* Create filter
* @param string $transformatorClass
* @param DocumentTypeMeta $documentMeta
* @param DocumentPropertyMeta $fieldMeta
* @return Unfiltered|MultiFilter
*/
public static function create($transformatorClass, DocumentTypeMeta $documentMeta, DocumentPropertyMeta $fieldMeta)
{
$key = $documentMeta->name . $documentMeta->connectionId . $fieldMeta->name . $transformatorClass;
if(isset(self::$c[$key]))
{
return self::$c[$key];
}
$filterNames = self::getManganFilters($documentMeta->connectionId, $transformatorClass);
if (count($filterNames) > 0)
{
if (count($filterNames) > 1)
{
$filter = new MultiFilter($filterNames);
self::$c[$key] = $filter;
return $filter;
}
$filter = current($filterNames);
self::$c[$key] = $filter;
return $filter;
}
self::$c[$key] = false;
return false;
}
/**
* Get filters for connection and transformator class
* @param string $connectionId
* @param string $transformatorClass
* @return TransformatorFilterInterface[]
*/
private static function getManganFilters($connectionId, $transformatorClass)
{
if (!isset(self::$_configs[$connectionId]))
{
self::$_configs[$connectionId] = [];
}
if (!isset(self::$_configs[$connectionId][$transformatorClass]))
{
self::$_configs[$connectionId] = [];
self::$_configs[$connectionId][$transformatorClass] = [];
$mangan = Mangan::fly($connectionId);
$tranformator = new $transformatorClass;
foreach ($mangan->filters as $implementer => $filterClasses)
{
foreach ($filterClasses as $filterClass)
{
if ($tranformator instanceof $implementer)
{
self::$_configs[$connectionId][$transformatorClass][] = new $filterClass;
}
}
}
}
return self::$_configs[$connectionId][$transformatorClass];
}
}
API documentation generated by ApiGen