Passed
Push — master ( 9a1840...11be31 )
by Aimeos
02:10
created

Standard   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 26
dl 0
loc 76
rs 10
c 0
b 0
f 0
wmc 8

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 21 3
A process() 0 21 5
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2019
6
 * @package Controller
7
 * @subpackage Common
8
 */
9
10
11
namespace Aimeos\Controller\Common\Customer\Import\Xml\Processor\Group;
12
13
14
/**
15
 * Group processor for customer XML imports
16
 *
17
 * @package Controller
18
 * @subpackage Common
19
 */
20
class Standard
21
	extends \Aimeos\Controller\Common\Common\Import\Xml\Processor\Base
22
	implements \Aimeos\Controller\Common\Common\Import\Xml\Processor\Iface
23
{
24
	/** controller/common/customer/import/xml/processor/group/name
25
	 * Name of the group processor implementation
26
	 *
27
	 * Use "Myname" if your class is named "\Aimeos\Controller\Common\Customer\Import\Xml\Processor\Group\Myname".
28
	 * The name is case-sensitive and you should avoid camel case names like "MyName".
29
	 *
30
	 * @param string Last part of the processor class name
31
	 * @since 2019.04
32
	 * @category Developer
33
	 */
34
35
	 private $groupManager;
36
	 private $groups = [];
37
38
39
	/**
40
	 * Initializes the object
41
	 *
42
	 * @param \Aimeos\MShop\Context\Item\Iface $context Context object
43
	 */
44
	public function __construct( \Aimeos\MShop\Context\Item\Iface $context )
45
	{
46
		parent::__construct( $context );
47
48
		$this->groupManager = \Aimeos\MShop::create( $context, 'customer/group' );
49
		$search = $this->groupManager->createSearch();
50
		$start = 0;
51
52
		do
53
		{
54
			$items = $this->groupManager->searchItems( $search->setSlice( $start, 100 ) );
55
56
			foreach( $items as $item ) {
57
				$this->groups[$item->getCode()] = $item->getId();
58
			}
59
60
			$count = count( $items );
61
			$start += $count;
62
			unset( $items );
63
		}
64
		while( $count === $search->getSliceSize() );
65
	}
66
67
68
	/**
69
	 * Updates the given item using the data from the DOM node
70
	 *
71
	 * @param \Aimeos\MShop\Common\Item\Iface $item Item which should be updated
72
	 * @param \DOMNode $node XML document node containing a list of nodes to process
73
	 * @return \Aimeos\MShop\Common\Item\Iface Updated item
74
	 */
75
	public function process( \Aimeos\MShop\Common\Item\Iface $item, \DOMNode $node )
76
	{
77
		\Aimeos\MW\Common\Base::checkClass( \Aimeos\MShop\Customer\Item\Iface::class, $item );
78
79
		$ids = [];
80
81
		foreach( $node->childNodes as $node )
82
		{
83
			if( $node->nodeName === 'groupitem' && ( $refattr = $node->attributes->getNamedItem( 'ref' ) ) !== null )
84
			{
85
				$code = $refattr->nodeValue;
86
87
				if( !isset( $this->map[$code] ) ) {
88
					$this->map[$code] = $this->groupManager->findItem( $code )->getId();
0 ignored issues
show
Bug Best Practice introduced by
The property map does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
89
				}
90
91
				$ids[] = $this->map[$code];
92
			}
93
		}
94
95
		return $item->setGroups( $ids );
96
	}
97
}
98