Completed
Pull Request — master (#137)
by Kristof
04:51
created

EventItemFactory   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 3
Bugs 0 Features 1
Metric Value
wmc 7
c 3
b 0
f 1
lcom 0
cbo 2
dl 0
loc 76
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A createEventFromCdbXml() 0 21 2
B splitKeywordTagOnSemiColon() 0 30 4
A isEventOlderThanSplitKeywordFix() 0 5 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(
30
            $udb2SimpleXml
31
        );
32
33
        if (self::isEventOlderThanSplitKeywordFix($event)) {
34
            $event = self::splitKeywordTagOnSemiColon(
35
                $event
36
            );
37
        }
38
39
        return $event;
40
    }
41
42
    /**
43
     * UDB2 contained a bug that allowed for a keyword to have a semicolon.
44
     * @param CultureFeed_Cdb_Item_Event $event
45
     * @return CultureFeed_Cdb_Item_Event
46
     */
47
    private static function splitKeywordTagOnSemiColon(
48
        CultureFeed_Cdb_Item_Event $event
49
    ) {
50
        $event = clone $event;
51
52
        /**
53
         * @var CultureFeed_Cdb_Data_Keyword[] $keywords
54
         */
55
        $keywords = $event->getKeywords(true);
56
57
        foreach ($keywords as $keyword) {
58
            $individualKeywords = explode(';', $keyword->getValue());
59
60
            if (count($individualKeywords) > 1) {
61
                $event->deleteKeyword($keyword);
62
63
                foreach ($individualKeywords as $individualKeyword) {
64
                    $cultureFeed_Cdb_Data_Keyword = new CultureFeed_Cdb_Data_Keyword(
65
                        trim($individualKeyword),
66
                        $keyword->isVisible()
67
                    );
68
                    $event->addKeyword(
69
                        $cultureFeed_Cdb_Data_Keyword
70
                    );
71
                }
72
            }
73
        }
74
75
        return $event;
76
    }
77
78
    /**
79
     * @param CultureFeed_Cdb_Item_Event $event
80
     * @return bool
81
     */
82
    private static function isEventOlderThanSplitKeywordFix(
83
        CultureFeed_Cdb_Item_Event $event
84
    ) {
85
        return $event->getLastUpdated() < '2016-03-10T00:00:00';
86
    }
87
}
88