PeriodicIntervalOfTime::setInstitutionSpecified()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
/*
3
 * The MIT License
4
 *
5
 * Copyright 2017 Julien Fastré <[email protected]>.
6
 *
7
 * Permission is hereby granted, free of charge, to any person obtaining a copy
8
 * of this software and associated documentation files (the "Software"), to deal
9
 * in the Software without restriction, including without limitation the rights
10
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
 * copies of the Software, and to permit persons to whom the Software is
12
 * furnished to do so, subject to the following conditions:
13
 *
14
 * The above copyright notice and this permission notice shall be included in
15
 * all copies or substantial portions of the Software.
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
 * THE SOFTWARE.
24
 */
25
namespace PHPHealth\CDA\DataType\Collection\Interval;
26
27
use PHPHealth\CDA\ClinicalDocument as CDA;
28
29
/**
30
 * 
31
 *
32
 * @author Julien Fastré <[email protected]>
33
 */
34
class PeriodicIntervalOfTime extends AbstractInterval
35
{
36
    /**
37
     *
38
     * @var \DateInterval
39
     */
40
    protected $period;
41
    
42
    /**
43
     *
44
     * @var boolean
45
     */
46
    protected $institutionSpecified = null;
47
    
48
    public function __construct(\DateInterval $period)
49
    {
50
        $this->setPeriod($period);
51
    }
52
    
53
    public function getPeriod(): \DateInterval
54
    {
55
        return $this->period;
56
    }
57
58
    public function getInstitutionSpecified()
59
    {
60
        return $this->institutionSpecified;
61
    }
62
63
    public function setPeriod(\DateInterval $period)
64
    {
65
        $this->period = $period;
66
        
67
        return $this;
68
    }
69
70
    public function setInstitutionSpecified($institutionSpecified)
71
    {
72
        $this->institutionSpecified = $institutionSpecified;
73
        
74
        return $this;
75
    }
76
77
    /**
78
     * return an array where the first element is the unit, and the 
79
     * second the unit
80
     */
81
    protected function processPeriod()
82
    {
83
        $seconds = $this->getPeriod()->format('%s');
84
        $minutes = $this->getPeriod()->format('%i');
85
        $hours   = $this->getPeriod()->format('%h');
86
        $days    = $this->getPeriod()->format('%d');
87
        $months  = $this->getPeriod()->format('%m');
88
        
89
        if ($months != 0) {
90
            return ['mo', $months];
91
        }
92
        if ($days   != 0) {
93
            return ['d', $days];
94
        }
95
        if ($hours != 0) {
96
            return ['h', $hours];
97
        }
98
        if ($minutes != 0) {
99
            return ['min', $minutes];
100
        }
101
        if ($seconds != 0) {
102
            return ['s', $seconds];
103
        }
104
    }
105
        
106
    public function setValueToElement(\DOMElement &$el, \DOMDocument $doc = null)
107
    {
108
        if ($doc === null) {
109
            throw new \Exception("doc should not be null");
110
        }
111
        
112
        $el->setAttributeNS(CDA::NS_XSI_URI, 'xsi:type', 'PIVL_TS');
113
        
114
        if ($this->getInstitutionSpecified() !== null) {
115
            $el->setAttribute(CDA::NS_CDA.'institutionSpecified', 
116
                $this->getInstitutionSpecified() ? 'true' : 'false');
117
        }
118
        
119
        list($unit, $value) = $this->processPeriod();
120
        $period = $doc->createElement(CDA::NS_CDA.'period');
121
        $period->setAttribute(CDA::NS_CDA.'unit', $unit);
122
        $period->setAttribute(CDA::NS_CDA.'value', $value);
123
        
124
        $el->appendChild($period);
125
    }
126
}
127