Completed
Pull Request — master (#137)
by Kristof
05:23
created

isEventOlderThanSplitKeywordFix()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
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
class EventItemFactory
9
{
10
    /**
11
     * @param string $namespaceUri
12
     * @param string $cdbXml
13
     * @throws \CultureFeed_Cdb_ParseException
14
     * @return \CultureFeed_Cdb_Item_Event
15
     */
16
    public static function createEventFromCdbXml($namespaceUri, $cdbXml)
17
    {
18
        $udb2SimpleXml = new \SimpleXMLElement(
19
            $cdbXml,
20
            0,
21
            false,
22
            $namespaceUri
23
        );
24
25
        $event = \CultureFeed_Cdb_Item_Event::parseFromCdbXml(
26
            $udb2SimpleXml
27
        );
28
29
        if (self::isEventOlderThanSplitKeywordFix($event)) {
30
            $event = self::splitKeywordTagOnSemiColon(
31
                $event
32
            );
33
        }
34
35
        return $event;
36
    }
37
38
    /**
39
     * UDB2 contained a bug that allowed for a keyword tag 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
                    $cultureFeed_Cdb_Data_Keyword = new \CultureFeed_Cdb_Data_Keyword(
61
                        trim($individualKeyword),
62
                        $keyword->isVisible()
63
                    );
64
                    $event->addKeyword(
65
                        $cultureFeed_Cdb_Data_Keyword
66
                    );
67
                }
68
            }
69
        }
70
71
        return $event;
72
    }
73
74
    /**
75
     * @param \CultureFeed_Cdb_Item_Event $event
76
     * @return bool
77
     */
78
    private static function isEventOlderThanSplitKeywordFix(
79
        \CultureFeed_Cdb_Item_Event $event
80
    ) {
81
        return $event->getLastUpdated() < '2016-03-10T00:00:00';
82
    }
83
}
84