Completed
Push — master ( 222791...8272bb )
by Aimeos
02:51
created

Factory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 3
dl 0
loc 73
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
B createClient() 0 57 6
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2017
6
 * @package Client
7
 * @subpackage JsonApi
8
 */
9
10
11
namespace Aimeos\Client\JsonApi\Customer\Relationships;
12
13
14
/**
15
 * Factory for customer/relationships JSON API client
16
 *
17
 * @package Client
18
 * @subpackage JsonApi
19
 */
20
class Factory
21
	extends \Aimeos\Client\JsonApi\Common\Factory\Base
22
	implements \Aimeos\Client\JsonApi\Common\Factory\Iface
23
{
24
	/**
25
	 * Creates a customer/relationships client object.
26
	 *
27
	 * @param \Aimeos\MShop\Context\Item\Iface $context Shop context instance with necessary objects
28
	 * @param array $templatePaths List of file system paths where the templates are stored
29
	 * @param string $path Name of the client separated by slashes, e.g "customer/relationships"
30
	 * @param string|null $name Client name (default: "Standard")
31
	 * @return \Aimeos\Client\JsonApi\Iface JSON API client
32
	 * @throws \Aimeos\Client\JsonApi\Exception If requested client implementation couldn't be found or initialisation fails
33
	 */
34
	public static function createClient( \Aimeos\MShop\Context\Item\Iface $context, array $templatePaths, $path, $name = null )
35
	{
36
		if( is_string( $path ) === false || preg_match( '#^[a-zA-Z0-9/]+$#', $path ) !== 1 ) {
37
			throw new \Aimeos\Client\JsonApi\Exception( sprintf( 'Invalid client "%1$s"', $path ), 400 );
38
		}
39
40
		/** client/jsonapi/customer/relationships/name
41
		 * Class name of the used customer/relationships client implementation
42
		 *
43
		 * Each default JSON API client can be replace by an alternative imlementation.
44
		 * To use this implementation, you have to set the last part of the class
45
		 * name as configuration value so the client factory knows which class it
46
		 * has to instantiate.
47
		 *
48
		 * For example, if the name of the default class is
49
		 *
50
		 *  \Aimeos\Client\JsonApi\Customer\Relationships\Standard
51
		 *
52
		 * and you want to replace it with your own version named
53
		 *
54
		 *  \Aimeos\Client\JsonApi\Customer\Relationships\Mycustomer/relationships
55
		 *
56
		 * then you have to set the this configuration option:
57
		 *
58
		 *  client/jsonapi/customer/relationships/name = Mycustomer/relationships
59
		 *
60
		 * The value is the last part of your own class name and it's case sensitive,
61
		 * so take care that the configuration value is exactly named like the last
62
		 * part of the class name.
63
		 *
64
		 * The allowed characters of the class name are A-Z, a-z and 0-9. No other
65
		 * characters are possible! You should always start the last part of the class
66
		 * name with an upper case character and continue only with lower case characters
67
		 * or numbers. Avoid chamel case names like "MyRelationships"!
68
		 *
69
		 * @param string Last part of the class name
70
		 * @since 2017.03
71
		 * @category Developer
72
		 */
73
		if( $name === null ) {
74
			$name = $context->getConfig()->get( 'client/jsonapi/customer/relationships/name', 'Standard' );
75
		}
76
77
		if( ctype_alnum( $name ) === false )
78
		{
79
			$classname = is_string( $name ) ? '\\Aimeos\\Client\\JsonApi\\Customer\\Relationships\\' . $name : '<not a string>';
80
			throw new \Aimeos\Client\JsonApi\Exception( sprintf( 'Invalid characters in class name "%1$s"', $classname ) );
81
		}
82
83
		$view = $context->getView();
84
		$iface = '\\Aimeos\\Client\\JsonApi\\Iface';
85
		$classname = '\\Aimeos\\Client\\JsonApi\\Customer\\Relationships\\' . $name;
86
87
		$client = self::createClientBase( $classname, $iface, $context, $view, $templatePaths, $path );
88
89
		return self::addClientDecorators( $client, $context, $view, $templatePaths, $path );
90
	}
91
92
}
93