Passed
Push — master ( 7b6270...c52487 )
by Aimeos
01:49
created

Ezpublish::__construct()   C

Complexity

Conditions 14
Paths 1

Size

Total Lines 52
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
cc 14
eloc 29
c 5
b 0
f 0
nc 1
nop 1
dl 0
loc 52
rs 6.2666

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2016-2018
6
 * @package MShop
7
 * @subpackage Customer
8
 */
9
10
11
namespace Aimeos\MShop\Customer\Manager;
12
13
14
/**
15
 * Customer class implementation for ezPublish
16
 *
17
 * @package MShop
18
 * @subpackage Customer
19
 */
20
class Ezpublish
21
	extends \Aimeos\MShop\Customer\Manager\Standard
22
{
23
	private $searchConfig = array(
24
		'customer.id' => array(
25
			'label' => 'Customer ID',
26
			'code' => 'customer.id',
27
			'internalcode' => 'ezu."contentobject_id"',
28
			'type' => 'integer',
29
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_INT
30
		),
31
		// customer.siteid is not available
32
		'customer.label' => array(
33
			'label' => 'Customer label',
34
			'code' => 'customer.label',
35
			'internalcode' => 'ezu."login"',
36
			'type' => 'string',
37
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR
38
		),
39
		'customer.code' => array(
40
			'label' => 'Customer username',
41
			'code' => 'customer.code',
42
			'internalcode' => 'ezu."login_normalized"',
43
			'type' => 'string',
44
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR
45
		),
46
		'customer.salutation' => array(
47
			'label' => 'Customer salutation',
48
			'code' => 'customer.salutation',
49
			'internalcode' => 'ezu."salutation"',
50
			'type' => 'string',
51
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
52
		),
53
		'customer.company'=> array(
54
			'label' => 'Customer company',
55
			'code' => 'customer.company',
56
			'internalcode' => 'ezu."company"',
57
			'type' => 'string',
58
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
59
		),
60
		'customer.vatid'=> array(
61
			'label' => 'Customer VAT ID',
62
			'code' => 'customer.vatid',
63
			'internalcode' => 'ezu."vatid"',
64
			'type' => 'string',
65
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
66
		),
67
		'customer.title' => array(
68
			'label' => 'Customer title',
69
			'code' => 'customer.title',
70
			'internalcode' => 'ezu."title"',
71
			'type' => 'string',
72
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
73
		),
74
		'customer.firstname' => array(
75
			'label' => 'Customer firstname',
76
			'code' => 'customer.firstname',
77
			'internalcode' => 'ezu."firstname"',
78
			'type' => 'string',
79
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
80
		),
81
		'customer.lastname' => array(
82
			'label' => 'Customer lastname',
83
			'code' => 'customer.lastname',
84
			'internalcode' => 'ezu."lastname"',
85
			'type' => 'string',
86
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
87
		),
88
		'customer.address1' => array(
89
			'label' => 'Customer address part one',
90
			'code' => 'customer.address1',
91
			'internalcode' => 'ezu."address1"',
92
			'type' => 'string',
93
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
94
		),
95
		'customer.address2' => array(
96
			'label' => 'Customer address part two',
97
			'code' => 'customer.address2',
98
			'internalcode' => 'ezu."address2"',
99
			'type' => 'string',
100
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
101
		),
102
		'customer.address3' => array(
103
			'label' => 'Customer address part three',
104
			'code' => 'customer.address3',
105
			'internalcode' => 'ezu."address3"',
106
			'type' => 'string',
107
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
108
		),
109
		'customer.postal' => array(
110
			'label' => 'Customer postal',
111
			'code' => 'customer.postal',
112
			'internalcode' => 'ezu."postal"',
113
			'type' => 'string',
114
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
115
		),
116
		'customer.city' => array(
117
			'label' => 'Customer city',
118
			'code' => 'customer.city',
119
			'internalcode' => 'ezu."city"',
120
			'type' => 'string',
121
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
122
		),
123
		'customer.state' => array(
124
			'label' => 'Customer state',
125
			'code' => 'customer.state',
126
			'internalcode' => 'ezu."state"',
127
			'type' => 'string',
128
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
129
		),
130
		'customer.languageid' => array(
131
			'label' => 'Customer language',
132
			'code' => 'customer.languageid',
133
			'internalcode' => 'ezu."langid"',
134
			'type' => 'string',
135
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
136
		),
137
		'customer.countryid' => array(
138
			'label' => 'Customer country',
139
			'code' => 'customer.countryid',
140
			'internalcode' => 'ezu."countryid"',
141
			'type' => 'string',
142
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
143
		),
144
		'customer.telephone' => array(
145
			'label' => 'Customer telephone',
146
			'code' => 'customer.telephone',
147
			'internalcode' => 'ezu."telephone"',
148
			'type' => 'string',
149
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
150
		),
151
		'customer.email' => array(
152
			'label' => 'Customer email',
153
			'code' => 'customer.email',
154
			'internalcode' => 'ezu."email"',
155
			'type' => 'string',
156
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
157
		),
158
		'customer.telefax' => array(
159
			'label' => 'Customer telefax',
160
			'code' => 'customer.telefax',
161
			'internalcode' => 'ezu."telefax"',
162
			'type' => 'string',
163
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
164
		),
165
		'customer.website' => array(
166
			'label' => 'Customer website',
167
			'code' => 'customer.website',
168
			'internalcode' => 'ezu."website"',
169
			'type' => 'string',
170
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
171
		),
172
		'customer.birthday' => array(
173
			'label' => 'Customer birthday',
174
			'code' => 'customer.birthday',
175
			'internalcode' => 'ezu."birthday"',
176
			'type' => 'string',
177
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
178
		),
179
		'customer.password'=> array(
180
			'label' => 'Customer password',
181
			'code' => 'customer.password',
182
			'internalcode' => 'ezu."password_hash"',
183
			'type' => 'string',
184
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
185
		),
186
		'customer.status'=> array(
187
			'label' => 'Customer status',
188
			'code' => 'customer.status',
189
			'internalcode' => 'ezs."is_enabled"',
190
			'type' => 'integer',
191
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_INT
192
		),
193
		'customer.dateverified'=> array(
194
			'label' => 'Customer verification date',
195
			'code' => 'customer.dateverified',
196
			'internalcode' => 'ezu."vdate"',
197
			'type' => 'date',
198
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
199
		),
200
		'customer.ctime'=> array(
201
			'label' => 'Customer creation time',
202
			'code' => 'customer.ctime',
203
			'internalcode' => 'ezu."ctime"',
204
			'type' => 'datetime',
205
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
206
		),
207
		'customer.mtime'=> array(
208
			'label' => 'Customer modification time',
209
			'code' => 'customer.mtime',
210
			'internalcode' => 'ezu."mtime"',
211
			'type' => 'datetime',
212
			'internaltype' => \Aimeos\MW\DB\Statement\Base::PARAM_STR,
213
		),
214
		'customer.editor'=> array(
215
			'label'=>'Customer editor',
216
			'code'=>'customer.editor',
217
			'internalcode' => 'ezu."editor"',
218
			'type'=> 'string',
219
			'internaltype'=> \Aimeos\MW\DB\Statement\Base::PARAM_STR,
220
		),
221
		'customer:has' => array(
222
			'code' => 'customer:has()',
223
			'internalcode' => ':site :key AND ezuli."id"',
224
			'internaldeps' => ['LEFT JOIN "ezuser_list" AS ezuli ON ( ezuli."parentid" = ezu."id" )'],
225
			'label' => 'Customer has list item, parameter(<domain>[,<list type>[,<reference ID>)]]',
226
			'type' => 'null',
227
			'internaltype' => 'null',
228
			'public' => false,
229
		),
230
		'customer:prop' => array(
231
			'code' => 'customer:prop()',
232
			'internalcode' => ':site :key AND ezupr."id"',
233
			'internaldeps' => ['LEFT JOIN "ezuser_property" AS ezupr ON ( ezupr."parentid" = ezu."id" )'],
234
			'label' => 'Customer has property item, parameter(<property type>[,<language code>[,<property value>]])',
235
			'type' => 'null',
236
			'internaltype' => 'null',
237
			'public' => false,
238
		),
239
	);
240
241
242
	/**
243
	 * Initializes the object.
244
	 *
245
	 * @param \Aimeos\MShop\Context\Item\Iface $context Context object
246
	 */
247
	public function __construct( \Aimeos\MShop\Context\Item\Iface $context )
248
	{
249
		parent::__construct( $context );
250
251
		$level = \Aimeos\MShop\Locale\Manager\Base::SITE_ALL;
252
		$level = $context->getConfig()->get( 'mshop/customer/manager/sitemode', $level );
253
254
		$siteIds = $this->getSiteIds( $level );
255
		$self = $this;
256
257
258
		$this->searchConfig['customer:has']['function'] = function( &$source, array $params ) use ( $self, $siteIds ) {
259
260
			array_walk_recursive( $params, function( &$v ) {
261
				$v = trim( $v, '\'' );
262
			} );
263
264
			$keys = [];
265
			$params[1] = isset( $params[1] ) ? $params[1] : '';
266
			$params[2] = isset( $params[2] ) ? $params[2] : '';
267
268
			foreach( (array) $params[2] as $id ) {
269
				$keys[] = $params[0] . '|' . ( $params[1] ? $params[1] . '|' : '' ) . $id;
270
			}
271
272
			$sitestr = $siteIds ? $self->toExpression( 'ezuli."siteid"', $siteIds ) . ' AND' : '';
273
			$keystr = $self->toExpression( 'ezuli."key"', $keys, $params[2] !== '' ? '==' : '=~' );
274
			$source = str_replace( [':site', ':key'], [$sitestr, $keystr], $source );
275
276
			return $params;
277
		};
278
279
280
		$this->searchConfig['customer:prop']['function'] = function( &$source, array $params ) use ( $self, $siteIds ) {
281
282
			array_walk_recursive( $params, function( &$v ) {
283
				$v = trim( $v, '\'' );
284
			} );
285
286
			$keys = [];
287
			$params[1] = array_key_exists( 1, $params ) ? $params[1] : '';
288
			$params[2] = isset( $params[2] ) ? $params[2] : '';
289
290
			foreach( (array) $params[2] as $id ) {
291
				$keys[] = $params[0] . '|' . ( $params[1] ? $params[1] . '|' : '' ) .( $id !== '' ?  md5( $id ) : '' );
292
			}
293
294
			$sitestr = $siteIds ? $self->toExpression( 'ezupr."siteid"', $siteIds ) . ' AND' : '';
295
			$keystr = $self->toExpression( 'ezupr."key"', $keys, $params[2] !== '' ? '==' : '=~' );
296
			$source = str_replace( [':site', ':key'], [$sitestr, $keystr], $source );
297
298
			return $params;
299
		};
300
	}
301
302
303
	/**
304
	 * Removes old entries from the storage.
305
	 *
306
	 * @param array $siteids List of IDs for sites whose entries should be deleted
307
	 */
308
	public function clear( array $siteids )
309
	{
310
		$path = 'mshop/customer/manager/submanagers';
311
		foreach( $this->getContext()->getConfig()->get( $path, ['address', 'group', 'lists', 'property'] ) as $domain ) {
312
			$this->getObject()->getSubManager( $domain )->clear( $siteids );
313
		}
314
	}
315
316
317
	/**
318
	 * Removes multiple items.
319
	 *
320
	 * @param \Aimeos\MShop\Common\Item\Iface[]|string[] $itemIds List of item objects or IDs of the items
321
	 * @return \Aimeos\MShop\Common\Manager\Iface Manager object for chaining method calls
322
	 */
323
	public function deleteItems( array $itemIds )
324
	{
325
		$service = $this->getContext()->getEzUserService();
0 ignored issues
show
Bug introduced by
The method getEzUserService() does not exist on Aimeos\MShop\Context\Item\Iface. It seems like you code against a sub-type of Aimeos\MShop\Context\Item\Iface such as Aimeos\MShop\Context\Item\Ezpublish. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

325
		$service = $this->getContext()->/** @scrutinizer ignore-call */ getEzUserService();
Loading history...
326
327
		foreach( $itemIds as $id ) {
328
			$service->deleteUser( $service->loadUser( (string) $id ) );
329
		}
330
331
		return $this->deleteRefItems( $itemIds );
332
	}
333
334
335
	/**
336
	 * Returns the list attributes that can be used for searching.
337
	 *
338
	 * @param boolean $withsub Return also attributes of sub-managers if true
339
	 * @return array List of attribute items implementing \Aimeos\MW\Criteria\Attribute\Iface
340
	 */
341
	public function getSearchAttributes( $withsub = true )
342
	{
343
		$path = 'mshop/customer/manager/submanagers';
344
345
		return $this->getSearchAttributesBase( $this->searchConfig, $path, ['address', 'group', 'lists', 'property'], $withsub );
346
	}
347
348
349
	/**
350
	 * Returns a new manager for customer extensions
351
	 *
352
	 * @param string $manager Name of the sub manager type in lower case
353
	 * @param string|null $name Name of the implementation, will be from configuration (or Default) if null
354
	 * @return mixed Manager for different extensions, e.g stock, tags, locations, etc.
355
	 */
356
	public function getSubManager( $manager, $name = null )
357
	{
358
		return $this->getSubManagerBase( 'customer', $manager, ( $name === null ? 'Ezpublish' : $name ) );
359
	}
360
361
362
	/**
363
	 * Saves a customer item object.
364
	 *
365
	 * @param \Aimeos\MShop\Customer\Item\Iface $item Customer item object
366
	 * @param boolean $fetch True if the new ID should be returned in the item
367
	 * @return \Aimeos\MShop\Customer\Item\Iface $item Updated item including the generated ID
368
	 */
369
	public function saveItem( \Aimeos\MShop\Customer\Item\Iface $item, $fetch = true )
370
	{
371
		if( !$item->isModified() )
372
		{
373
			$item = $this->savePropertyItems( $item, 'customer' );
374
			$item = $this->saveAddressItems( $item, 'customer' );
375
			return $this->saveListItems( $item, 'customer' );
376
		}
377
378
		$context = $this->getContext();
379
380
		$class = '\Aimeos\MShop\Context\Item\Ezpublish';
381
		if( !is_a( $context, $class ) ) {
382
			throw new \Aimeos\MShop\Customer\Exception( sprintf( 'Object is not of required type "%1$s"', $class ) );
383
		}
384
385
		$service = $context->getEzUserService();
386
		$email = $item->getPaymentAddress()->getEmail();
387
388
		if( $item->getId() !== null )
389
		{
390
			$struct = $service->newUserUpdateStruct();
391
			$struct->password = $item->getPassword();
392
			$struct->enabled = $item->getStatus();
393
			$struct->email = $email;
394
395
			$user = $service->loadUser( $item->getId() );
396
			$service->updateUser( $user, $struct );
397
		}
398
		else
399
		{
400
			$struct = $service->newUserCreateStruct( $item->getCode(), $email, $item->getPassword(), 'eng-GB' );
401
			$struct->enabled = $item->getStatus();
402
403
			$user = $service->createUser( $struct, [] );
404
			$item->setId( $user->getUserId() );
405
		}
406
407
		$dbm = $context->getDatabaseManager();
408
		$dbname = $this->getResourceName();
409
		$conn = $dbm->acquire( $dbname );
410
411
		try
412
		{
413
			$date = date( 'Y-m-d H:i:s' );
414
			$columns = $this->getObject()->getSaveAttributes();
415
			$ctime = ( $item->getTimeCreated() ? $item->getTimeCreated() : $date );
416
			$billingAddress = $item->getPaymentAddress();
417
418
			$path = 'mshop/customer/manager/ezpublish/update';
419
			$sql = $this->addSqlColumns( array_keys( $columns ), $this->getSqlConfig( $path ), false );
420
			$stmt = $this->getCachedStatement( $conn, $path, $sql );
0 ignored issues
show
Unused Code introduced by
The assignment to $stmt is dead and can be removed.
Loading history...
421
422
			$idx = 1;
423
			$stmt = $this->getCachedStatement( $conn, $path, $sql );
424
425
			foreach( $columns as $name => $entry ) {
426
				$stmt->bind( $idx++, $item->get( $name ), $entry->getInternalType() );
427
			}
428
429
			$stmt->bind( $idx++, $billingAddress->getCompany() );
430
			$stmt->bind( $idx++, $billingAddress->getVatID() );
431
			$stmt->bind( $idx++, $billingAddress->getSalutation() );
432
			$stmt->bind( $idx++, $billingAddress->getTitle() );
433
			$stmt->bind( $idx++, $billingAddress->getFirstname() );
434
			$stmt->bind( $idx++, $billingAddress->getLastname() );
435
			$stmt->bind( $idx++, $billingAddress->getAddress1() );
436
			$stmt->bind( $idx++, $billingAddress->getAddress2() );
437
			$stmt->bind( $idx++, $billingAddress->getAddress3() );
438
			$stmt->bind( $idx++, $billingAddress->getPostal() );
439
			$stmt->bind( $idx++, $billingAddress->getCity() );
440
			$stmt->bind( $idx++, $billingAddress->getState() );
441
			$stmt->bind( $idx++, $billingAddress->getCountryId() );
442
			$stmt->bind( $idx++, $billingAddress->getLanguageId() );
443
			$stmt->bind( $idx++, $billingAddress->getTelephone() );
444
			$stmt->bind( $idx++, $billingAddress->getTelefax() );
445
			$stmt->bind( $idx++, $billingAddress->getWebsite() );
446
			$stmt->bind( $idx++, $item->getBirthday() );
447
			$stmt->bind( $idx++, $item->getDateVerified() );
448
			$stmt->bind( $idx++, $date ); // Modification time
449
			$stmt->bind( $idx++, $context->getEditor() );
450
			$stmt->bind( $idx++, $ctime ); // Creation time
451
			$stmt->bind( $idx++, $item->getId(), \Aimeos\MW\DB\Statement\Base::PARAM_INT );
452
453
			$stmt->execute()->finish();
454
455
			$dbm->release( $conn, $dbname );
456
		}
457
		catch( \Exception $e )
458
		{
459
			$dbm->release( $conn, $dbname );
460
			throw $e;
461
		}
462
463
		$item = $this->savePropertyItems( $item, 'customer' );
464
		$item = $this->saveAddressItems( $item, 'customer' );
465
		return $this->saveListItems( $item, 'customer' );
466
	}
467
468
469
	/**
470
	 * Returns the item objects matched by the given search criteria.
471
	 *
472
	 * @param \Aimeos\MW\Criteria\Iface $search Search criteria object
473
	 * @param integer &$total Number of items that are available in total
474
	 * @return array List of items implementing \Aimeos\MShop\Customer\Item\Iface
475
	 * @throws \Aimeos\MShop\Customer\Exception If creating items failed
476
	 */
477
	public function searchItems( \Aimeos\MW\Criteria\Iface $search, array $ref = [], &$total = null )
478
	{
479
		$dbm = $this->getContext()->getDatabaseManager();
480
		$dbname = $this->getResourceName();
481
		$conn = $dbm->acquire( $dbname );
482
		$map = [];
483
484
		try
485
		{
486
			$level = \Aimeos\MShop\Locale\Manager\Base::SITE_ALL;
487
			$cfgPathSearch = 'mshop/customer/manager/ezpublish/search';
488
			$cfgPathCount = 'mshop/customer/manager/ezpublish/count';
489
			$required = array( 'customer' );
490
491
			$results = $this->searchItemsBase( $conn, $search, $cfgPathSearch, $cfgPathCount, $required, $total, $level );
492
493
			while( ( $row = $results->fetch() ) !== false )
494
			{
495
				$map[$row['customer.id']] = $row;
496
				$map[$row['customer.id']]['customer.groups'] = [];
497
			}
498
499
500
			$path = 'mshop/customer/manager/ezpublish/groups';
501
			$stmt = $conn->create( $this->getGroupSql( array_keys( $map ), $path ) );
502
			$results = $stmt->execute();
503
504
			while( ( $row = $results->fetch() ) !== false ) {
505
				$map[(string) $row['contentobject_id']]['customer.groups'][] = $row['role_id'];
506
			}
507
508
			$dbm->release( $conn, $dbname );
509
		}
510
		catch( \Exception $e )
511
		{
512
			$dbm->release( $conn, $dbname );
513
			throw $e;
514
		}
515
516
		$addrItems = [];
517
		if( in_array( 'customer/address', $ref, true ) ) {
518
			$addrItems = $this->getAddressItems( array_keys( $map ), 'customer' );
519
		}
520
521
		$propItems = []; $name = 'customer/property';
522
		if( isset( $ref[$name] ) || in_array( $name, $ref, true ) )
523
		{
524
			$propTypes = isset( $ref[$name] ) && is_array( $ref[$name] ) ? $ref[$name] : null;
525
			$propItems = $this->getPropertyItems( array_keys( $map ), 'customer', $propTypes );
526
		}
527
528
		return $this->buildItems( $map, $ref, 'customer', $addrItems, $propItems );
529
	}
530
531
532
	/**
533
	 * Creates a new customer item.
534
	 *
535
	 * @param array $values List of attributes for customer item
536
	 * @param \Aimeos\MShop\Common\Lists\Item\Iface[] $listItems List of list items
537
	 * @param \Aimeos\MShop\Common\Item\Iface[] $refItems List of referenced items
538
	 * @param \Aimeos\MShop\Common\Item\Address\Iface[] $addrItems List of referenced address items
539
	 * @param \Aimeos\MShop\Common\Item\Property\Iface[] $propItems List of property items
540
	 * @return \Aimeos\MShop\Customer\Item\Iface New customer item
541
	 */
542
	protected function createItemBase( array $values = [], array $listItems = [], array $refItems = [],
543
		array $addrItems = [], array $propItems = [] )
544
	{
545
		$address = new \Aimeos\MShop\Common\Item\Address\Simple( 'customer.', $values );
546
547
		return new \Aimeos\MShop\Customer\Item\Ezpublish(
548
			$address, $values, $listItems, $refItems, $addrItems, $propItems
549
		);
550
	}
551
552
553
	/**
554
	 * Returns the SQL statement for retrieving the customer group IDs
555
	 *
556
	 * @param array $ids List of customer IDs
557
	 * @param string $cfgpath Configuration path to the SQL statement
558
	 * @return string SQL statement ready for execution
559
	 */
560
	protected function getGroupSql( array $ids, $cfgpath )
561
	{
562
		if( empty( $ids ) ) { return '1=1'; }
563
564
		$search = $this->getObject()->createSearch();
565
		$search->setConditions( $search->compare( '==', 'id', $ids ) );
566
567
		$types = array( 'id' => \Aimeos\MW\DB\Statement\Base::PARAM_INT );
568
		$translations = array( 'id' => '"contentobject_id"' );
569
570
		$cond = $search->getConditionSource( $types, $translations );
571
572
		return str_replace( ':cond', $cond, $this->getSqlConfig( $cfgpath ) );
573
	}
574
}
575