Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
IdentifierReplacementPreProcessor
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 1
 process
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3/**
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; under version 2
7 * of the License (non-upgradable).
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 *
18 * Copyright (c) 2017 (original work) Open Assessment Technologies SA;
19 *
20 *
21 */
22
23namespace oat\taoQtiTest\models\export\preprocessor;
24
25use oat\oatbox\service\ConfigurableService;
26use oat\taoQtiItem\model\qti\Service;
27use qtism\common\utils\Format;
28use qtism\data\storage\xml\XmlDocument;
29
30/**
31 * Class IdentifierReplacementPreProcessor
32 * Replace the test identifier (item-1, item-2 ...) by the item identifier
33 * @package oat\taoQtiTest\models\export\preprocessor
34 */
35class IdentifierReplacementPreProcessor extends ConfigurableService implements AssessmentItemRefPreProcessor
36{
37    public function process(XmlDocument $testDocument)
38    {
39        /** @var \qtism\data\AssessmentItemRefCollection $assessmentItemRefs */
40        $assessmentItemRefs = $testDocument->getDocumentComponent()->getComponentsByClassName('assessmentItemRef');
41        /** @var \qtism\data\AssessmentItemRef $assessmentItemRef */
42        $items = [];
43        foreach ($assessmentItemRefs as $assessmentItemRef) {
44            $item = new \core_kernel_classes_Resource($assessmentItemRef->getHref());
45
46            if ($item->exists()) {
47                $itemRdf  = Service::singleton()
48                    ->getDataItemByRdfItem($item);
49                $identifier = $itemRdf->getIdentifier();
50                $identifier = Format::sanitizeIdentifier($identifier);
51                $count = 0;
52                $newId = $identifier;
53                while (isset($items[$newId])) {
54                    $count++;
55                    $appender = '-' . $count;
56                    $newId = $identifier . $appender;
57                }
58                $identifier = $newId;
59                $assessmentItemRef->setIdentifier($identifier);
60                $items[$identifier] = $item;
61            }
62        }
63
64        return $items;
65    }
66}