Completed
Push — sf_cache ( f6a6ab...bf1241 )
by André
35:58 queued 24:16
created

ExceptionConversion::loadContentInfoList()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 7

Duplication

Lines 10
Ratio 100 %

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 3
nop 1
dl 10
loc 10
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the Content Gateway base class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\Core\Persistence\Legacy\Content\Gateway;
10
11
use eZ\Publish\Core\Persistence\Legacy\Content\Gateway;
12
use eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldValue;
13
use eZ\Publish\SPI\Persistence\Content;
14
use eZ\Publish\SPI\Persistence\Content\CreateStruct;
15
use eZ\Publish\SPI\Persistence\Content\UpdateStruct;
16
use eZ\Publish\SPI\Persistence\Content\MetadataUpdateStruct;
17
use eZ\Publish\SPI\Persistence\Content\VersionInfo;
18
use eZ\Publish\SPI\Persistence\Content\Field;
19
use eZ\Publish\SPI\Persistence\Content\Relation\CreateStruct as RelationCreateStruct;
20
use Doctrine\DBAL\DBALException;
21
use PDOException;
22
use RuntimeException;
23
24
/**
25
 * Base class for content gateways.
26
 */
27
class ExceptionConversion extends Gateway
28
{
29
    /**
30
     * The wrapped gateway.
31
     *
32
     * @var Gateway
33
     */
34
    protected $innerGateway;
35
36
    /**
37
     * Creates a new exception conversion gateway around $innerGateway.
38
     *
39
     * @param Gateway $innerGateway
40
     */
41
    public function __construct(Gateway $innerGateway)
42
    {
43
        $this->innerGateway = $innerGateway;
44
    }
45
46
    /**
47
     * Get context definition for external storage layers.
48
     *
49
     * @return array
50
     */
51
    public function getContext()
52
    {
53
        try {
54
            return $this->innerGateway->getContext();
55
        } catch (DBALException $e) {
56
            throw new RuntimeException('Database error', 0, $e);
57
        } catch (PDOException $e) {
58
            throw new RuntimeException('Database error', 0, $e);
59
        }
60
    }
61
62
    /**
63
     * Inserts a new content object.
64
     *
65
     * @param \eZ\Publish\SPI\Persistence\Content\CreateStruct $struct
66
     * @param mixed $currentVersionNo
67
     *
68
     * @return int ID
69
     */
70
    public function insertContentObject(CreateStruct $struct, $currentVersionNo = 1)
71
    {
72
        try {
73
            return $this->innerGateway->insertContentObject($struct, $currentVersionNo);
74
        } catch (DBALException $e) {
75
            throw new RuntimeException('Database error', 0, $e);
76
        } catch (PDOException $e) {
77
            throw new RuntimeException('Database error', 0, $e);
78
        }
79
    }
80
81
    /**
82
     * Inserts a new version.
83
     *
84
     * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $versionInfo
85
     * @param \eZ\Publish\SPI\Persistence\Content\Field[] $fields
86
     *
87
     * @return int ID
88
     */
89
    public function insertVersion(VersionInfo $versionInfo, array $fields)
90
    {
91
        try {
92
            return $this->innerGateway->insertVersion($versionInfo, $fields);
93
        } catch (DBALException $e) {
94
            throw new RuntimeException('Database error', 0, $e);
95
        } catch (PDOException $e) {
96
            throw new RuntimeException('Database error', 0, $e);
97
        }
98
    }
99
100
    /**
101
     * Updates an existing content identified by $contentId in respect to $struct.
102
     *
103
     * @param int $contentId
104
     * @param \eZ\Publish\SPI\Persistence\Content\MetadataUpdateStruct $struct
105
     * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $prePublishVersionInfo Provided on publish
106
     */
107
    public function updateContent($contentId, MetadataUpdateStruct $struct, VersionInfo $prePublishVersionInfo = null)
108
    {
109
        try {
110
            return $this->innerGateway->updateContent($contentId, $struct, $prePublishVersionInfo);
111
        } catch (DBALException $e) {
112
            throw new RuntimeException('Database error', 0, $e);
113
        } catch (PDOException $e) {
114
            throw new RuntimeException('Database error', 0, $e);
115
        }
116
    }
117
118
    /**
119
     * Updates version $versionNo for content identified by $contentId, in respect to $struct.
120
     *
121
     * @param int $contentId
122
     * @param int $versionNo
123
     * @param \eZ\Publish\SPI\Persistence\Content\UpdateStruct $struct
124
     */
125
    public function updateVersion($contentId, $versionNo, UpdateStruct $struct)
126
    {
127
        try {
128
            return $this->innerGateway->updateVersion($contentId, $versionNo, $struct);
129
        } catch (DBALException $e) {
130
            throw new RuntimeException('Database error', 0, $e);
131
        } catch (PDOException $e) {
132
            throw new RuntimeException('Database error', 0, $e);
133
        }
134
    }
135
136
    /**
137
     * Updates "always available" flag for content identified by $contentId, in respect to $alwaysAvailable.
138
     *
139
     * @param int $contentId
140
     * @param bool $newAlwaysAvailable New "always available" value
141
     */
142
    public function updateAlwaysAvailableFlag($contentId, $newAlwaysAvailable)
143
    {
144
        try {
145
            return $this->innerGateway->updateAlwaysAvailableFlag($contentId, $newAlwaysAvailable);
146
        } catch (DBALException $e) {
147
            throw new RuntimeException('Database error', 0, $e);
148
        } catch (PDOException $e) {
149
            throw new RuntimeException('Database error', 0, $e);
150
        }
151
    }
152
153
    /**
154
     * Sets the state of object identified by $contentId and $version to $state.
155
     *
156
     * The $status can be one of STATUS_DRAFT, STATUS_PUBLISHED, STATUS_ARCHIVED
157
     *
158
     * @param int $contentId
159
     * @param int $version
160
     * @param int $status
161
     *
162
     * @return bool
163
     */
164
    public function setStatus($contentId, $version, $status)
165
    {
166
        try {
167
            return $this->innerGateway->setStatus($contentId, $version, $status);
168
        } catch (DBALException $e) {
169
            throw new RuntimeException('Database error', 0, $e);
170
        } catch (PDOException $e) {
171
            throw new RuntimeException('Database error', 0, $e);
172
        }
173
    }
174
175
    /**
176
     * Inserts a new field.
177
     *
178
     * Only used when a new field is created (i.e. a new object or a field in a
179
     * new language!). After that, field IDs need to stay the same, only the
180
     * version number changes.
181
     *
182
     * @param \eZ\Publish\SPI\Persistence\Content $content
183
     * @param \eZ\Publish\SPI\Persistence\Content\Field $field
184
     * @param \eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldValue $value
185
     *
186
     * @return int ID
187
     */
188 View Code Duplication
    public function insertNewField(Content $content, Field $field, StorageFieldValue $value)
189
    {
190
        try {
191
            return $this->innerGateway->insertNewField($content, $field, $value);
192
        } catch (DBALException $e) {
193
            throw new RuntimeException('Database error', 0, $e);
194
        } catch (PDOException $e) {
195
            throw new RuntimeException('Database error', 0, $e);
196
        }
197
    }
198
199
    /**
200
     * Inserts an existing field.
201
     *
202
     * Used to insert a field with an exsting ID but a new version number.
203
     *
204
     * @param Content $content
205
     * @param Field $field
206
     * @param StorageFieldValue $value
207
     */
208 View Code Duplication
    public function insertExistingField(Content $content, Field $field, StorageFieldValue $value)
209
    {
210
        try {
211
            return $this->innerGateway->insertExistingField($content, $field, $value);
212
        } catch (DBALException $e) {
213
            throw new RuntimeException('Database error', 0, $e);
214
        } catch (PDOException $e) {
215
            throw new RuntimeException('Database error', 0, $e);
216
        }
217
    }
218
219
    /**
220
     * Updates an existing field.
221
     *
222
     * @param Field $field
223
     * @param StorageFieldValue $value
224
     */
225 View Code Duplication
    public function updateField(Field $field, StorageFieldValue $value)
226
    {
227
        try {
228
            return $this->innerGateway->updateField($field, $value);
229
        } catch (DBALException $e) {
230
            throw new RuntimeException('Database error', 0, $e);
231
        } catch (PDOException $e) {
232
            throw new RuntimeException('Database error', 0, $e);
233
        }
234
    }
235
236
    /**
237
     * Updates an existing, non-translatable field.
238
     *
239
     * @param \eZ\Publish\SPI\Persistence\Content\Field $field
240
     * @param \eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldValue $value
241
     * @param int $contentId
242
     */
243 View Code Duplication
    public function updateNonTranslatableField(
244
        Field $field,
245
        StorageFieldValue $value,
246
        $contentId
247
    ) {
248
        try {
249
            return $this->innerGateway->updateNonTranslatableField($field, $value, $contentId);
250
        } catch (DBALException $e) {
251
            throw new RuntimeException('Database error', 0, $e);
252
        } catch (PDOException $e) {
253
            throw new RuntimeException('Database error', 0, $e);
254
        }
255
    }
256
257
    /**
258
     * Loads data for a content object.
259
     *
260
     * Returns an array with the relevant data.
261
     *
262
     * @param mixed $contentId
263
     * @param mixed $version
264
     * @param string[] $translations
265
     *
266
     * @return array
267
     */
268
    public function load($contentId, $version, array $translations = null)
269
    {
270
        try {
271
            return $this->innerGateway->load($contentId, $version, $translations);
272
        } catch (DBALException $e) {
273
            throw new RuntimeException('Database error', 0, $e);
274
        } catch (PDOException $e) {
275
            throw new RuntimeException('Database error', 0, $e);
276
        }
277
    }
278
279
    /**
280
     * Loads data for a content object identified by its remote ID.
281
     *
282
     * Returns an array with the relevant data.
283
     *
284
     * @param mixed $remoteId
285
     *
286
     * @return array
287
     */
288
    public function loadContentInfoByRemoteId($remoteId)
289
    {
290
        try {
291
            return $this->innerGateway->loadContentInfoByRemoteId($remoteId);
292
        } catch (DBALException $e) {
293
            throw new \RuntimeException('Database error', 0, $e);
294
        } catch (\PDOException $e) {
295
            throw new \RuntimeException('Database error', 0, $e);
296
        }
297
    }
298
299
    /**
300
     * Loads info for content identified by $contentId.
301
     * Will basically return a hash containing all field values for ezcontentobject table plus following keys:
302
     *  - always_available => Boolean indicating if content's language mask contains alwaysAvailable bit field
303
     *  - main_language_code => Language code for main (initial) language. E.g. "eng-GB".
304
     *
305
     * @param int $contentId
306
     *
307
     * @throws \eZ\Publish\Core\Base\Exceptions\NotFoundException
308
     *
309
     * @return array
310
     */
311
    public function loadContentInfo($contentId)
312
    {
313
        try {
314
            return $this->innerGateway->loadContentInfo($contentId);
315
        } catch (DBALException $e) {
316
            throw new RuntimeException('Database error', 0, $e);
317
        } catch (PDOException $e) {
318
            throw new RuntimeException('Database error', 0, $e);
319
        }
320
    }
321
322
    /**
323
     * Loads version info for content identified by $contentId and $versionNo.
324
     * Will basically return a hash containing all field values from ezcontentobject_version table plus following keys:
325
     *  - names => Hash of content object names. Key is the language code, value is the name.
326
     *  - languages => Hash of language ids. Key is the language code (e.g. "eng-GB"), value is the language numeric id without the always available bit.
327
     *  - initial_language_code => Language code for initial language in this version.
328
     *
329
     * @param int $contentId
330
     * @param int $versionNo
331
     *
332
     * @return array
333
     */
334
    public function loadVersionInfo($contentId, $versionNo)
335
    {
336
        try {
337
            return $this->innerGateway->loadVersionInfo($contentId, $versionNo);
338
        } catch (DBALException $e) {
339
            throw new RuntimeException('Database error', 0, $e);
340
        } catch (PDOException $e) {
341
            throw new RuntimeException('Database error', 0, $e);
342
        }
343
    }
344
345
    /**
346
     * Returns data for all versions with given status created by the given $userId.
347
     *
348
     * @param int $userId
349
     * @param int $status
350
     *
351
     * @return string[][]
352
     */
353
    public function listVersionsForUser($userId, $status = VersionInfo::STATUS_DRAFT)
354
    {
355
        try {
356
            return $this->innerGateway->listVersionsForUser($userId, $status);
357
        } catch (DBALException $e) {
358
            throw new RuntimeException('Database error', 0, $e);
359
        } catch (PDOException $e) {
360
            throw new RuntimeException('Database error', 0, $e);
361
        }
362
    }
363
364
    /**
365
     * Returns all version data for the given $contentId.
366
     *
367
     * Result is returned with oldest version first (using version id as it has index and is auto increment).
368
     *
369
     * @param mixed $contentId
370
     * @param mixed|null $status Optional argument to filter versions by status, like {@see VersionInfo::STATUS_ARCHIVED}.
371
     * @param int $limit Limit for items returned, -1 means none.
372
     *
373
     * @return string[][]
374
     */
375
    public function listVersions($contentId, $status = null, $limit = -1)
376
    {
377
        try {
378
            return $this->innerGateway->listVersions($contentId, $status, $limit);
379
        } catch (DBALException $e) {
380
            throw new RuntimeException('Database error', 0, $e);
381
        } catch (PDOException $e) {
382
            throw new RuntimeException('Database error', 0, $e);
383
        }
384
    }
385
386
    /**
387
     * Returns all version numbers for the given $contentId.
388
     *
389
     * @param mixed $contentId
390
     *
391
     * @return int[]
392
     */
393
    public function listVersionNumbers($contentId)
394
    {
395
        try {
396
            return $this->innerGateway->listVersionNumbers($contentId);
397
        } catch (DBALException $e) {
398
            throw new RuntimeException('Database error', 0, $e);
399
        } catch (PDOException $e) {
400
            throw new RuntimeException('Database error', 0, $e);
401
        }
402
    }
403
404
    /**
405
     * Returns last version number for content identified by $contentId.
406
     *
407
     * @param int $contentId
408
     *
409
     * @return int
410
     */
411
    public function getLastVersionNumber($contentId)
412
    {
413
        try {
414
            return $this->innerGateway->getLastVersionNumber($contentId);
415
        } catch (DBALException $e) {
416
            throw new RuntimeException('Database error', 0, $e);
417
        } catch (PDOException $e) {
418
            throw new RuntimeException('Database error', 0, $e);
419
        }
420
    }
421
422
    /**
423
     * Returns all IDs for locations that refer to $contentId.
424
     *
425
     * @param int $contentId
426
     *
427
     * @return int[]
428
     */
429
    public function getAllLocationIds($contentId)
430
    {
431
        try {
432
            return $this->innerGateway->getAllLocationIds($contentId);
433
        } catch (DBALException $e) {
434
            throw new RuntimeException('Database error', 0, $e);
435
        } catch (PDOException $e) {
436
            throw new RuntimeException('Database error', 0, $e);
437
        }
438
    }
439
440
    /**
441
     * Returns all field IDs of $contentId grouped by their type.
442
     * If $versionNo is set only field IDs for that version are returned.
443
     *
444
     * @param int $contentId
445
     * @param int|null $versionNo
446
     *
447
     * @return int[][]
448
     */
449
    public function getFieldIdsByType($contentId, $versionNo = null)
450
    {
451
        try {
452
            return $this->innerGateway->getFieldIdsByType($contentId, $versionNo);
453
        } catch (DBALException $e) {
454
            throw new RuntimeException('Database error', 0, $e);
455
        } catch (PDOException $e) {
456
            throw new RuntimeException('Database error', 0, $e);
457
        }
458
    }
459
460
    /**
461
     * Deletes relations to and from $contentId.
462
     * If $versionNo is set only relations for that version are deleted.
463
     *
464
     * @param int $contentId
465
     * @param int|null $versionNo
466
     */
467
    public function deleteRelations($contentId, $versionNo = null)
468
    {
469
        try {
470
            return $this->innerGateway->deleteRelations($contentId, $versionNo);
471
        } catch (DBALException $e) {
472
            throw new RuntimeException('Database error', 0, $e);
473
        } catch (PDOException $e) {
474
            throw new RuntimeException('Database error', 0, $e);
475
        }
476
    }
477
478
    /**
479
     * Removes relations to Content with $contentId from Relation and RelationList field type fields.
480
     *
481
     * @param int $contentId
482
     */
483
    public function removeReverseFieldRelations($contentId)
484
    {
485
        try {
486
            return $this->innerGateway->removeReverseFieldRelations($contentId);
487
        } catch (DBALException $e) {
488
            throw new RuntimeException('Database error', 0, $e);
489
        } catch (PDOException $e) {
490
            throw new RuntimeException('Database error', 0, $e);
491
        }
492
    }
493
494
    /**
495
     * Deletes the field with the given $fieldId.
496
     *
497
     * @param int $fieldId
498
     */
499
    public function deleteField($fieldId)
500
    {
501
        try {
502
            return $this->innerGateway->deleteField($fieldId);
503
        } catch (DBALException $e) {
504
            throw new RuntimeException('Database error', 0, $e);
505
        } catch (PDOException $e) {
506
            throw new RuntimeException('Database error', 0, $e);
507
        }
508
    }
509
510
    /**
511
     * Deletes all fields of $contentId in all versions.
512
     * If $versionNo is set only fields for that version are deleted.
513
     *
514
     * @param int $contentId
515
     * @param int|null $versionNo
516
     */
517
    public function deleteFields($contentId, $versionNo = null)
518
    {
519
        try {
520
            return $this->innerGateway->deleteFields($contentId, $versionNo);
521
        } catch (DBALException $e) {
522
            throw new RuntimeException('Database error', 0, $e);
523
        } catch (PDOException $e) {
524
            throw new RuntimeException('Database error', 0, $e);
525
        }
526
    }
527
528
    /**
529
     * Deletes all versions of $contentId.
530
     * If $versionNo is set only that version is deleted.
531
     *
532
     * @param int $contentId
533
     * @param int|null $versionNo
534
     */
535
    public function deleteVersions($contentId, $versionNo = null)
536
    {
537
        try {
538
            return $this->innerGateway->deleteVersions($contentId, $versionNo);
539
        } catch (DBALException $e) {
540
            throw new RuntimeException('Database error', 0, $e);
541
        } catch (PDOException $e) {
542
            throw new RuntimeException('Database error', 0, $e);
543
        }
544
    }
545
546
    /**
547
     * Deletes all names of $contentId.
548
     * If $versionNo is set only names for that version are deleted.
549
     *
550
     * @param int $contentId
551
     * @param int|null $versionNo
552
     */
553
    public function deleteNames($contentId, $versionNo = null)
554
    {
555
        try {
556
            return $this->innerGateway->deleteNames($contentId, $versionNo);
557
        } catch (DBALException $e) {
558
            throw new RuntimeException('Database error', 0, $e);
559
        } catch (PDOException $e) {
560
            throw new RuntimeException('Database error', 0, $e);
561
        }
562
    }
563
564
    /**
565
     * Sets the content object name.
566
     *
567
     * @param int $contentId
568
     * @param int $version
569
     * @param string $name
570
     * @param string $language
571
     */
572
    public function setName($contentId, $version, $name, $language)
573
    {
574
        try {
575
            return $this->innerGateway->setName($contentId, $version, $name, $language);
576
        } catch (DBALException $e) {
577
            throw new RuntimeException('Database error', 0, $e);
578
        } catch (PDOException $e) {
579
            throw new RuntimeException('Database error', 0, $e);
580
        }
581
    }
582
583
    /**
584
     * Deletes the actual content object referred to by $contentId.
585
     *
586
     * @param int $contentId
587
     */
588
    public function deleteContent($contentId)
589
    {
590
        try {
591
            return $this->innerGateway->deleteContent($contentId);
592
        } catch (DBALException $e) {
593
            throw new RuntimeException('Database error', 0, $e);
594
        } catch (PDOException $e) {
595
            throw new RuntimeException('Database error', 0, $e);
596
        }
597
    }
598
599
    /**
600
     * Loads data of related to/from $contentId.
601
     *
602
     * @param int $contentId
603
     * @param int $contentVersionNo
604
     * @param int $relationType
605
     *
606
     * @return mixed[][] Content data, array structured like {@see \eZ\Publish\Core\Persistence\Legacy\Content\Gateway::load()}
607
     */
608
    public function loadRelations($contentId, $contentVersionNo = null, $relationType = null)
609
    {
610
        try {
611
            return $this->innerGateway->loadRelations($contentId, $contentVersionNo, $relationType);
612
        } catch (DBALException $e) {
613
            throw new RuntimeException('Database error', 0, $e);
614
        } catch (PDOException $e) {
615
            throw new RuntimeException('Database error', 0, $e);
616
        }
617
    }
618
619
    /**
620
     * Loads data of related to/from $contentId.
621
     *
622
     * @param int $contentId
623
     * @param bool $reverse Reverse relation, default false
0 ignored issues
show
Bug introduced by
There is no parameter named $reverse. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
624
     * @param int $contentVersionNo
0 ignored issues
show
Bug introduced by
There is no parameter named $contentVersionNo. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
625
     * @param int $relationType
626
     *
627
     * @return mixed[][] Content data, array structured like {@see \eZ\Publish\Core\Persistence\Legacy\Content\Gateway::load()}
628
     */
629
    public function loadReverseRelations($contentId, $relationType = null)
630
    {
631
        try {
632
            return $this->innerGateway->loadReverseRelations($contentId, $relationType);
633
        } catch (DBALException $e) {
634
            throw new RuntimeException('Database error', 0, $e);
635
        } catch (PDOException $e) {
636
            throw new RuntimeException('Database error', 0, $e);
637
        }
638
    }
639
640
    /**
641
     * Deletes the relation with the given $relationId.
642
     *
643
     * @param int $relationId
644
     * @param int $type {@see \eZ\Publish\API\Repository\Values\Content\Relation::COMMON,
645
     *                 \eZ\Publish\API\Repository\Values\Content\Relation::EMBED,
646
     *                 \eZ\Publish\API\Repository\Values\Content\Relation::LINK,
647
     *                 \eZ\Publish\API\Repository\Values\Content\Relation::FIELD}
648
     */
649
    public function deleteRelation($relationId, $type)
650
    {
651
        try {
652
            return $this->innerGateway->deleteRelation($relationId, $type);
653
        } catch (DBALException $e) {
654
            throw new RuntimeException('Database error', 0, $e);
655
        } catch (PDOException $e) {
656
            throw new RuntimeException('Database error', 0, $e);
657
        }
658
    }
659
660
    /**
661
     * Inserts a new relation database record.
662
     *
663
     * @param \eZ\Publish\SPI\Persistence\Content\Relation\CreateStruct $createStruct
0 ignored issues
show
Documentation introduced by
There is no parameter named $createStruct. Did you maybe mean $struct?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
664
     *
665
     * @return int ID the inserted ID
666
     */
667
    public function insertRelation(RelationCreateStruct $struct)
668
    {
669
        try {
670
            return $this->innerGateway->insertRelation($struct);
671
        } catch (DBALException $e) {
672
            throw new RuntimeException('Database error', 0, $e);
673
        } catch (PDOException $e) {
674
            throw new RuntimeException('Database error', 0, $e);
675
        }
676
    }
677
678
    /**
679
     * Returns all Content IDs for a given $contentTypeId.
680
     *
681
     * @param int $contentTypeId
682
     *
683
     * @return int[]
684
     */
685
    public function getContentIdsByContentTypeId($contentTypeId)
686
    {
687
        try {
688
            return $this->innerGateway->getContentIdsByContentTypeId($contentTypeId);
689
        } catch (DBALException $e) {
690
            throw new RuntimeException('Database error', 0, $e);
691
        } catch (PDOException $e) {
692
            throw new RuntimeException('Database error', 0, $e);
693
        }
694
    }
695
696
    /**
697
     * Load name data for set of content id's and corresponding version number.
698
     *
699
     * @param array[] $rows array of hashes with 'id' and 'version' to load names for
700
     *
701
     * @return array
702
     */
703
    public function loadVersionedNameData($rows)
704
    {
705
        try {
706
            return $this->innerGateway->loadVersionedNameData($rows);
707
        } catch (DBALException $e) {
708
            throw new RuntimeException('Database error', 0, $e);
709
        } catch (PDOException $e) {
710
            throw new RuntimeException('Database error', 0, $e);
711
        }
712
    }
713
714
    /**
715
     * Batch method for copying all relation meta data for copied Content object.
716
     *
717
     * {@inheritdoc}
718
     *
719
     * @param int $originalContentId
720
     * @param int $copiedContentId
721
     * @param int|null $versionNo If specified only copy for a given version number, otherwise all.
722
     */
723
    public function copyRelations($originalContentId, $copiedContentId, $versionNo = null)
724
    {
725
        try {
726
            return $this->innerGateway->copyRelations($originalContentId, $copiedContentId, $versionNo);
727
        } catch (DBALException $e) {
728
            throw new RuntimeException('Database error', 0, $e);
729
        } catch (PDOException $e) {
730
            throw new RuntimeException('Database error', 0, $e);
731
        }
732
    }
733
}
734