Completed
Pull Request — master (#137)
by Kristof
11:29 queued 06:31
created

isEventOlderThanSplitKeywordFix()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
/**
3
 * @file
4
 */
5
6
namespace CultuurNet\UDB3\Cdb;
7
8
use CultureFeed_Cdb_Data_Keyword;
9
use CultureFeed_Cdb_Item_Event;
10
use CultureFeed_Cdb_ParseException;
11
12
class EventItemFactory
13
{
14
    /**
15
     * @param string $namespaceUri
16
     * @param string $cdbXml
17
     * @throws CultureFeed_Cdb_ParseException
18
     * @return CultureFeed_Cdb_Item_Event
19
     */
20
    public static function createEventFromCdbXml($namespaceUri, $cdbXml)
21
    {
22
        $udb2SimpleXml = new \SimpleXMLElement(
23
            $cdbXml,
24
            0,
25
            false,
26
            $namespaceUri
27
        );
28
29
        $event = CultureFeed_Cdb_Item_Event::parseFromCdbXml($udb2SimpleXml);
30
31
        if (self::isEventOlderThanSplitKeywordFix($event)) {
32
            $event = self::splitKeywordTagOnSemiColon($event);
33
        }
34
35
        return $event;
36
    }
37
38
    /**
39
     * UDB2 contained a bug that allowed for a keyword to have a semicolon.
40
     * @param CultureFeed_Cdb_Item_Event $event
41
     * @return CultureFeed_Cdb_Item_Event
42
     */
43
    private static function splitKeywordTagOnSemiColon(
44
        CultureFeed_Cdb_Item_Event $event
45
    ) {
46
        $event = clone $event;
47
48
        /**
49
         * @var CultureFeed_Cdb_Data_Keyword[] $keywords
50
         */
51
        $keywords = $event->getKeywords(true);
52
53
        foreach ($keywords as $keyword) {
54
            $individualKeywords = explode(';', $keyword->getValue());
55
56
            if (count($individualKeywords) > 1) {
57
                $event->deleteKeyword($keyword);
58
59
                foreach ($individualKeywords as $individualKeyword) {
60
                    $newKeyword = new CultureFeed_Cdb_Data_Keyword(
61
                        trim($individualKeyword),
62
                        $keyword->isVisible()
63
                    );
64
                    $event->addKeyword($newKeyword);
65
                }
66
            }
67
        }
68
69
        return $event;
70
    }
71
72
    /**
73
     * @param CultureFeed_Cdb_Item_Event $event
74
     * @return bool
75
     */
76
    private static function isEventOlderThanSplitKeywordFix(
77
        CultureFeed_Cdb_Item_Event $event
78
    ) {
79
        return $event->getLastUpdated() < '2016-03-10T00:00:00';
80
    }
81
}
82