Completed
Push — master ( c525ce...fb4432 )
by Aimeos
02:37
created

Support::checkGroup()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 28
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 28
rs 8.8571
cc 2
eloc 17
nc 2
nop 2
1
<?php
2
3
/**
4
 * @license MIT, http://opensource.org/licenses/MIT
5
 * @copyright Aimeos (aimeos.org), 2015-2016
6
 * @package laravel
7
 * @subpackage Base
8
 */
9
10
namespace Aimeos\Shop\Base;
11
12
13
use Illuminate\Support\Facades\Input;
14
use Illuminate\Support\Facades\Route;
15
16
17
/**
18
 * Service providing the supporting functionality
19
 *
20
 * @package laravel
21
 * @subpackage Base
22
 */
23
class Support
24
{
25
	/**
26
	 * @var \Aimeos\Shop\Base\Context
27
	 */
28
	private $context;
29
30
	/**
31
	 * @var \Aimeos\Shop\Base\Locale
32
	 */
33
	private $locale;
34
35
36
	/**
37
	 * Initializes the object
38
	 *
39
	 * @param \Aimeos\Shop\Base\Context $context Context provider
40
	 * @param \Aimeos\Shop\Base\Locale $locale Locale provider
41
	 */
42
	public function __construct( \Aimeos\Shop\Base\Context $context, \Aimeos\Shop\Base\Locale $locale )
43
	{
44
		$this->context = $context;
45
		$this->locale = $locale;
46
	}
47
48
49
	/**
50
	 * Checks if the user with the given ID is in the specified group
51
	 *
52
	 * @param string $userid Unique user ID
53
	 * @param string|array $groupcodes Unique user/customer group codes that are allowed
54
	 * @return boolean True if user is part of the group, false if not
55
	 */
56
	public function checkGroup( $userid, $groupcodes )
57
	{
58
		$site = ( Route::current() ? Route::input( 'site', Input::get( 'site', 'default' ) ) : 'default' );
59
60
		$context = $this->context->get( false );
61
		$context->setLocale( $this->locale->getBackend( $context, $site ) );
62
63
64
		$manager = \Aimeos\MShop\Factory::createManager( $context, 'customer/group' );
65
66
		$search = $manager->createSearch();
67
		$search->setConditions( $search->compare( '==', 'customer.group.code', (array) $groupcodes ) );
68
		$groupItems = $manager->searchItems( $search );
69
70
71
		$manager = \Aimeos\MShop\Factory::createManager( $context, 'customer/lists' );
72
73
		$search = $manager->createSearch();
74
		$expr = array(
75
			$search->compare( '==', 'customer.lists.parentid', $userid ),
76
			$search->compare( '==', 'customer.lists.refid', array_keys( $groupItems ) ),
77
			$search->compare( '==', 'customer.lists.domain', 'customer/group' ),
78
		);
79
		$search->setConditions( $search->combine( '&&', $expr ) );
80
		$search->setSlice( 0, 1 );
81
82
		return (bool) count( $manager->searchItems( $search ) );
83
	}
84
85
86
	public function getGroups( \Aimeos\MShop\Context\Item\Iface $context )
87
	{
88
		$list = array();
89
		$manager = \Aimeos\MShop\Factory::createManager( $context, 'customer/group' );
90
91
		$search = $manager->createSearch();
92
		$search->setConditions( $search->compare( '==', 'customer.group.id', $context->getGroupIds() ) );
93
94
		foreach( $manager->searchItems( $search ) as $item ) {
95
			$list[] = $item->getCode();
96
		}
97
98
		return $list;
99
	}
100
}