@@ -72,7 +72,7 @@ discard block |
||
72 | 72 | $content = ''; |
73 | 73 | if (is_array($attachments)) { |
74 | 74 | foreach ($attachments as $id => $file) { |
75 | - $conf = array( |
|
75 | + $conf = array ( |
|
76 | 76 | 'useCacheHash' => 0, |
77 | 77 | 'parameter' => $this->conf['apiPid'] . ' - piwik_download', |
78 | 78 | 'additionalParams' => '&tx_dpf[qid]=' . $this->doc->recordId . '&tx_dpf[action]=attachment' . '&tx_dpf[attachment]=' . $file['ID'], |
@@ -81,7 +81,7 @@ discard block |
||
81 | 81 | $title = $file['LABEL'] ? $file['LABEL'] : $file['ID']; |
82 | 82 | $markerArray['###FILE###'] = $this->cObj->typoLink($title, $conf); |
83 | 83 | |
84 | - if(!empty($vgwort)) { |
|
84 | + if (!empty($vgwort)) { |
|
85 | 85 | $markerArray['###VGWORT###'] = "<div class='div_vgwpixel' data-url='" . $vgwort . "'></div>"; |
86 | 86 | } else { |
87 | 87 | $markerArray['###VGWORT###'] = ""; |
@@ -103,10 +103,10 @@ discard block |
||
103 | 103 | $xPath = 'mets:fileSec/mets:fileGrp[@USE="' . $this->conf['fileGrpDownload'] . '"]/mets:file'; |
104 | 104 | $files = $this->doc->mets->xpath($xPath); |
105 | 105 | if (!is_array($files)) { |
106 | - return array(); |
|
106 | + return array (); |
|
107 | 107 | } |
108 | 108 | foreach ($files as $key => $file) { |
109 | - $singleFile = array(); |
|
109 | + $singleFile = array (); |
|
110 | 110 | foreach ($file->attributes('mext', 1) as $attribute => $value) { |
111 | 111 | $singleFile[$attribute] = $value; |
112 | 112 | } |
@@ -128,7 +128,7 @@ discard block |
||
128 | 128 | $xPath = '//slub:info/slub:vgwortOpenKey'; |
129 | 129 | $vgwortOpenKey = $this->doc->mets->xpath($xPath)[0]; |
130 | 130 | |
131 | - if (!empty($vgwortOpenKey) or $vgwortOpenKey != FALSE ) { |
|
131 | + if (!empty($vgwortOpenKey) or $vgwortOpenKey != FALSE) { |
|
132 | 132 | if (GeneralUtility::getIndpEnv('TYPO3_SSL')) { |
133 | 133 | $vgwortserver = 'https://ssl-vg03.met.vgwort.de/na/'; |
134 | 134 | } else { |
@@ -24,8 +24,7 @@ discard block |
||
24 | 24 | * @subpackage tx_dpf |
25 | 25 | * @access public |
26 | 26 | */ |
27 | -class DownloadTool extends \Kitodo\Dlf\Common\AbstractPlugin |
|
28 | -{ |
|
27 | +class DownloadTool extends \Kitodo\Dlf\Common\AbstractPlugin { |
|
29 | 28 | public $scriptRelPath = 'Classes/Plugins/DownloadTool.php'; |
30 | 29 | |
31 | 30 | /** |
@@ -38,8 +37,7 @@ discard block |
||
38 | 37 | * |
39 | 38 | * @return string The content that is displayed on the website |
40 | 39 | */ |
41 | - public function main($content, $conf) |
|
42 | - { |
|
40 | + public function main($content, $conf) { |
|
43 | 41 | $this->init($conf); |
44 | 42 | |
45 | 43 | // get the tx_dpf.settings too |
@@ -97,8 +95,7 @@ discard block |
||
97 | 95 | |
98 | 96 | * @return array of attachments |
99 | 97 | */ |
100 | - protected function getAttachments() |
|
101 | - { |
|
98 | + protected function getAttachments() { |
|
102 | 99 | // Get pdf documents |
103 | 100 | $xPath = 'mets:fileSec/mets:fileGrp[@USE="' . $this->conf['fileGrpDownload'] . '"]/mets:file'; |
104 | 101 | $files = $this->doc->mets->xpath($xPath); |
@@ -121,8 +118,7 @@ discard block |
||
121 | 118 | return $attachments; |
122 | 119 | } |
123 | 120 | |
124 | - protected function getVGWortUrl() |
|
125 | - { |
|
121 | + protected function getVGWortUrl() { |
|
126 | 122 | // Get VG-Wort-OpenKey for document |
127 | 123 | $this->doc->mets->registerXPathNamespace("slub", 'http://slub-dresden.de/'); |
128 | 124 | $xPath = '//slub:info/slub:vgwortOpenKey'; |
@@ -46,13 +46,13 @@ discard block |
||
46 | 46 | // Flexform wins over TS |
47 | 47 | $dpfTSconfig = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_dpf.']; |
48 | 48 | if (is_array($dpfTSconfig['settings.'])) { |
49 | - \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($dpfTSconfig['settings.'], $this->conf, true, false); |
|
49 | + \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($dpfTSconfig['settings.'], $this->conf, TRUE, FALSE); |
|
50 | 50 | $this->conf = $dpfTSconfig['settings.']; |
51 | 51 | } |
52 | 52 | |
53 | 53 | // Load current document. |
54 | 54 | $this->loadDocument(); |
55 | - if ($this->doc === null || empty($this->conf['fileGrpDownload'])) { |
|
55 | + if ($this->doc === NULL || empty($this->conf['fileGrpDownload'])) { |
|
56 | 56 | // Quit without doing anything if required variables are not set. |
57 | 57 | return $content; |
58 | 58 | } |
@@ -76,7 +76,7 @@ discard block |
||
76 | 76 | 'useCacheHash' => 0, |
77 | 77 | 'parameter' => $this->conf['apiPid'] . ' - piwik_download', |
78 | 78 | 'additionalParams' => '&tx_dpf[qid]=' . $this->doc->recordId . '&tx_dpf[action]=attachment' . '&tx_dpf[attachment]=' . $file['ID'], |
79 | - 'forceAbsoluteUrl' => true, |
|
79 | + 'forceAbsoluteUrl' => TRUE, |
|
80 | 80 | ); |
81 | 81 | $title = $file['LABEL'] ? $file['LABEL'] : $file['ID']; |
82 | 82 | $markerArray['###FILE###'] = $this->cObj->typoLink($title, $conf); |
@@ -89,7 +89,7 @@ discard block |
||
89 | 89 | $content .= $this->cObj->substituteMarkerArray($subpartArray['downloads'], $markerArray); |
90 | 90 | } |
91 | 91 | } |
92 | - return $this->cObj->substituteSubpart($this->template, '###DOWNLOADS###', $content, true); |
|
92 | + return $this->cObj->substituteSubpart($this->template, '###DOWNLOADS###', $content, TRUE); |
|
93 | 93 | } |
94 | 94 | |
95 | 95 | /** |
@@ -71,7 +71,7 @@ discard block |
||
71 | 71 | foreach ($relatedItems as $key => $value) { |
72 | 72 | // set link |
73 | 73 | if ($value['type'] == 'local') { |
74 | - $confApi = array( |
|
74 | + $confApi = array ( |
|
75 | 75 | 'useCacheHash' => 0, |
76 | 76 | 'parameter' => $this->conf['apiPid'], |
77 | 77 | 'additionalParams' => '&tx_dpf[qid]=' . $value['docId'] . '&tx_dpf[action]=mets', |
@@ -79,7 +79,7 @@ discard block |
||
79 | 79 | ); |
80 | 80 | |
81 | 81 | $metsApiUrl = urlencode($this->cObj->typoLink_URL($confApi)); |
82 | - $conf = array( |
|
82 | + $conf = array ( |
|
83 | 83 | 'useCacheHash' => 1, |
84 | 84 | 'parameter' => $GLOBALS['TSFE']->page['uid'], |
85 | 85 | 'additionalParams' => '&tx_dlf[id]=' . $metsApiUrl, |
@@ -87,13 +87,13 @@ discard block |
||
87 | 87 | ); |
88 | 88 | } elseif ($value['type'] == 'urn') { |
89 | 89 | // use urn link |
90 | - $conf = array( |
|
90 | + $conf = array ( |
|
91 | 91 | 'useCacheHash' => 0, |
92 | 92 | 'parameter' => 'https://nbn-resolving.de/' . $value['docId'], |
93 | 93 | 'forceAbsoluteUrl' => true, |
94 | 94 | ); |
95 | 95 | } else { |
96 | - $conf = array( |
|
96 | + $conf = array ( |
|
97 | 97 | 'useCacheHash' => 0, |
98 | 98 | 'forceAbsoluteUrl' => true, |
99 | 99 | ); |
@@ -109,8 +109,8 @@ discard block |
||
109 | 109 | |
110 | 110 | private function compareByOrderVolumeTitle($a, $b) |
111 | 111 | { |
112 | - $s1 = join(' ', array($a['order'], $a['volume'], $a['title'])); |
|
113 | - $s2 = join(' ', array($b['order'], $b['volume'], $b['title'])); |
|
112 | + $s1 = join(' ', array ($a['order'], $a['volume'], $a['title'])); |
|
113 | + $s2 = join(' ', array ($b['order'], $b['volume'], $b['title'])); |
|
114 | 114 | return strnatcmp($s1, $s2); |
115 | 115 | } |
116 | 116 | |
@@ -118,7 +118,7 @@ discard block |
||
118 | 118 | { |
119 | 119 | $xPath = '//mods:relatedItem[@type="constituent"]'; |
120 | 120 | $items = $this->doc->mets->xpath($xPath); |
121 | - $relatedItems = array(); |
|
121 | + $relatedItems = array (); |
|
122 | 122 | |
123 | 123 | foreach ($items as $index => $relatedItemXmlElement) { |
124 | 124 | $relatedItemXmlElement->registerXPathNamespace('mods', 'http://www.loc.gov/mods/v3'); |
@@ -130,7 +130,7 @@ discard block |
||
130 | 130 | $order = (string) $relatedItemXmlElement->xpath('mods:extension/slub:info/slub:sortingKey')[0]; |
131 | 131 | $volume = (string) $relatedItemXmlElement->xpath('mods:part[@type="volume" or @type="issue"]/mods:detail/mods:number')[0]; |
132 | 132 | |
133 | - $element = array(); |
|
133 | + $element = array (); |
|
134 | 134 | $element['type'] = $type; |
135 | 135 | $element['title'] = $title; |
136 | 136 | $element['docId'] = $docId; |
@@ -139,7 +139,7 @@ discard block |
||
139 | 139 | |
140 | 140 | $relatedItems[$index] = $element; |
141 | 141 | } |
142 | - usort($relatedItems, array('EWW\Dpf\Plugins\RelatedListTool\RelatedListTool', 'compareByOrderVolumeTitle')); |
|
142 | + usort($relatedItems, array ('EWW\Dpf\Plugins\RelatedListTool\RelatedListTool', 'compareByOrderVolumeTitle')); |
|
143 | 143 | return $relatedItems; |
144 | 144 | } |
145 | 145 |
@@ -24,8 +24,7 @@ discard block |
||
24 | 24 | * @subpackage tx_dpf |
25 | 25 | * @access public |
26 | 26 | */ |
27 | -class RelatedListTool extends \Kitodo\Dlf\Common\AbstractPlugin |
|
28 | -{ |
|
27 | +class RelatedListTool extends \Kitodo\Dlf\Common\AbstractPlugin { |
|
29 | 28 | public $scriptRelPath = 'Classes/Plugins/RelatedListTool.php'; |
30 | 29 | |
31 | 30 | /** |
@@ -38,8 +37,7 @@ discard block |
||
38 | 37 | * |
39 | 38 | * @return string The content that is displayed on the website |
40 | 39 | */ |
41 | - public function main($content, $conf) |
|
42 | - { |
|
40 | + public function main($content, $conf) { |
|
43 | 41 | $this->init($conf); |
44 | 42 | |
45 | 43 | // get the tx_dpf.settings too |
@@ -107,15 +105,13 @@ discard block |
||
107 | 105 | return $this->cObj->substituteSubpart($this->template, '###ITEMS###', $content, true); |
108 | 106 | } |
109 | 107 | |
110 | - private function compareByOrderVolumeTitle($a, $b) |
|
111 | - { |
|
108 | + private function compareByOrderVolumeTitle($a, $b) { |
|
112 | 109 | $s1 = join(' ', array($a['order'], $a['volume'], $a['title'])); |
113 | 110 | $s2 = join(' ', array($b['order'], $b['volume'], $b['title'])); |
114 | 111 | return strnatcmp($s1, $s2); |
115 | 112 | } |
116 | 113 | |
117 | - public function getRelatedItems() |
|
118 | - { |
|
114 | + public function getRelatedItems() { |
|
119 | 115 | $xPath = '//mods:relatedItem[@type="constituent"]'; |
120 | 116 | $items = $this->doc->mets->xpath($xPath); |
121 | 117 | $relatedItems = array(); |
@@ -46,13 +46,13 @@ discard block |
||
46 | 46 | // Flexform wins over TS |
47 | 47 | $dpfTSconfig = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_dpf.']; |
48 | 48 | if (is_array($dpfTSconfig['settings.'])) { |
49 | - \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($dpfTSconfig['settings.'], $this->conf, true, false); |
|
49 | + \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($dpfTSconfig['settings.'], $this->conf, TRUE, FALSE); |
|
50 | 50 | $this->conf = $dpfTSconfig['settings.']; |
51 | 51 | } |
52 | 52 | |
53 | 53 | // Load current document. |
54 | 54 | $this->loadDocument(); |
55 | - if ($this->doc === null) { |
|
55 | + if ($this->doc === NULL) { |
|
56 | 56 | // Quit without doing anything if required variables are not set. |
57 | 57 | return $content; |
58 | 58 | } |
@@ -75,7 +75,7 @@ discard block |
||
75 | 75 | 'useCacheHash' => 0, |
76 | 76 | 'parameter' => $this->conf['apiPid'], |
77 | 77 | 'additionalParams' => '&tx_dpf[qid]=' . $value['docId'] . '&tx_dpf[action]=mets', |
78 | - 'forceAbsoluteUrl' => true, |
|
78 | + 'forceAbsoluteUrl' => TRUE, |
|
79 | 79 | ); |
80 | 80 | |
81 | 81 | $metsApiUrl = urlencode($this->cObj->typoLink_URL($confApi)); |
@@ -83,19 +83,19 @@ discard block |
||
83 | 83 | 'useCacheHash' => 1, |
84 | 84 | 'parameter' => $GLOBALS['TSFE']->page['uid'], |
85 | 85 | 'additionalParams' => '&tx_dlf[id]=' . $metsApiUrl, |
86 | - 'forceAbsoluteUrl' => true, |
|
86 | + 'forceAbsoluteUrl' => TRUE, |
|
87 | 87 | ); |
88 | 88 | } elseif ($value['type'] == 'urn') { |
89 | 89 | // use urn link |
90 | 90 | $conf = array( |
91 | 91 | 'useCacheHash' => 0, |
92 | 92 | 'parameter' => 'https://nbn-resolving.de/' . $value['docId'], |
93 | - 'forceAbsoluteUrl' => true, |
|
93 | + 'forceAbsoluteUrl' => TRUE, |
|
94 | 94 | ); |
95 | 95 | } else { |
96 | 96 | $conf = array( |
97 | 97 | 'useCacheHash' => 0, |
98 | - 'forceAbsoluteUrl' => true, |
|
98 | + 'forceAbsoluteUrl' => TRUE, |
|
99 | 99 | ); |
100 | 100 | } |
101 | 101 | $title = $value['title'] ? $value['title'] : $value['docId']; |
@@ -104,7 +104,7 @@ discard block |
||
104 | 104 | $content .= $this->cObj->substituteMarkerArray($subpartArray['items'], $markerArray); |
105 | 105 | } |
106 | 106 | } |
107 | - return $this->cObj->substituteSubpart($this->template, '###ITEMS###', $content, true); |
|
107 | + return $this->cObj->substituteSubpart($this->template, '###ITEMS###', $content, TRUE); |
|
108 | 108 | } |
109 | 109 | |
110 | 110 | private function compareByOrderVolumeTitle($a, $b) |
@@ -134,8 +134,8 @@ discard block |
||
134 | 134 | $element['type'] = $type; |
135 | 135 | $element['title'] = $title; |
136 | 136 | $element['docId'] = $docId; |
137 | - $element['order'] = (!empty($order)) ? $order : null; |
|
138 | - $element['volume'] = (!empty($volume)) ? $volume : null; |
|
137 | + $element['order'] = (!empty($order)) ? $order : NULL; |
|
138 | + $element['volume'] = (!empty($volume)) ? $volume : NULL; |
|
139 | 139 | |
140 | 140 | $relatedItems[$index] = $element; |
141 | 141 | } |
@@ -71,7 +71,7 @@ discard block |
||
71 | 71 | } |
72 | 72 | } |
73 | 73 | |
74 | - $metadata = array(); |
|
74 | + $metadata = array (); |
|
75 | 75 | $metadata = $this->doc->getTitleData($this->conf['pages']); |
76 | 76 | |
77 | 77 | // Collect files from download file group |
@@ -126,7 +126,7 @@ discard block |
||
126 | 126 | case 'title': |
127 | 127 | if (is_array($values)) { |
128 | 128 | $outArray['citation_title'][] = $values[0]; |
129 | - $GLOBALS['TSFE']->page['title'] = $values[0]; |
|
129 | + $GLOBALS['TSFE']->page['title'] = $values[0]; |
|
130 | 130 | } |
131 | 131 | break; |
132 | 132 | |
@@ -148,8 +148,8 @@ discard block |
||
148 | 148 | break; |
149 | 149 | |
150 | 150 | case 'attachments': |
151 | - foreach($values as $attachment) { |
|
152 | - $conf = array( |
|
151 | + foreach ($values as $attachment) { |
|
152 | + $conf = array ( |
|
153 | 153 | 'useCacheHash' => 0, |
154 | 154 | 'parameter' => $this->conf['apiPid'], |
155 | 155 | 'additionalParams' => '&tx_dpf[qid]=' . $this->doc->recordId . '&tx_dpf[action]=attachment&tx_dpf[attachment]=' . $attachment['ID'], |
@@ -209,14 +209,14 @@ discard block |
||
209 | 209 | */ |
210 | 210 | protected function getAttachments() |
211 | 211 | { |
212 | - $attachments = array(); |
|
212 | + $attachments = array (); |
|
213 | 213 | |
214 | 214 | $xPath = 'mets:fileSec/mets:fileGrp[@USE="' . $this->conf['fileGrpDownload'] . '"]/mets:file'; |
215 | 215 | $files = $this->doc->mets->xpath($xPath); |
216 | 216 | |
217 | 217 | if (is_array($files)) { |
218 | 218 | foreach ($files as $key => $file) { |
219 | - $singleFile = array(); |
|
219 | + $singleFile = array (); |
|
220 | 220 | foreach ($file->attributes('mext', 1) as $attribute => $value) { |
221 | 221 | $singleFile[$attribute] = $value; |
222 | 222 | } |
@@ -25,8 +25,7 @@ discard block |
||
25 | 25 | * @subpackage tx_dpf |
26 | 26 | * @access public |
27 | 27 | */ |
28 | -class MetaTags extends \Kitodo\Dlf\Common\AbstractPlugin |
|
29 | -{ |
|
28 | +class MetaTags extends \Kitodo\Dlf\Common\AbstractPlugin { |
|
30 | 29 | public $scriptRelPath = 'Classes/Plugins/MetaTags.php'; |
31 | 30 | |
32 | 31 | /** |
@@ -45,8 +44,7 @@ discard block |
||
45 | 44 | * |
46 | 45 | * @return string The content that is displayed on the website |
47 | 46 | */ |
48 | - public function main($content, $conf) |
|
49 | - { |
|
47 | + public function main($content, $conf) { |
|
50 | 48 | |
51 | 49 | $this->init($conf); |
52 | 50 | |
@@ -107,8 +105,7 @@ discard block |
||
107 | 105 | * |
108 | 106 | * @return string The metadata array ready for output |
109 | 107 | */ |
110 | - protected function printMetaTags(array $metadata) |
|
111 | - { |
|
108 | + protected function printMetaTags(array $metadata) { |
|
112 | 109 | |
113 | 110 | $output = ''; |
114 | 111 | // Load all the metadata values into the content object's data array. |
@@ -196,8 +193,7 @@ discard block |
||
196 | 193 | * |
197 | 194 | * @return Formatted date |
198 | 195 | */ |
199 | - protected function safelyFormatDate($format, $date) |
|
200 | - { |
|
196 | + protected function safelyFormatDate($format, $date) { |
|
201 | 197 | return (strlen($date) == 4) ? $date : date($format, strtotime($date)); |
202 | 198 | } |
203 | 199 | |
@@ -207,8 +203,7 @@ discard block |
||
207 | 203 | |
208 | 204 | * @return array of attachments |
209 | 205 | */ |
210 | - protected function getAttachments() |
|
211 | - { |
|
206 | + protected function getAttachments() { |
|
212 | 207 | $attachments = array(); |
213 | 208 | |
214 | 209 | $xPath = 'mets:fileSec/mets:fileGrp[@USE="' . $this->conf['fileGrpDownload'] . '"]/mets:file'; |
@@ -54,14 +54,14 @@ discard block |
||
54 | 54 | // Flexform wins over TS |
55 | 55 | $dpfTSconfig = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_dpf.']; |
56 | 56 | if (is_array($dpfTSconfig['settings.'])) { |
57 | - \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($dpfTSconfig['settings.'], $this->conf, true, false); |
|
57 | + \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule($dpfTSconfig['settings.'], $this->conf, TRUE, FALSE); |
|
58 | 58 | $this->conf = $dpfTSconfig['settings.']; |
59 | 59 | } |
60 | 60 | // Turn cache on. |
61 | - $this->setCache(true); |
|
61 | + $this->setCache(TRUE); |
|
62 | 62 | // Load current document. |
63 | 63 | $this->loadDocument(); |
64 | - if ($this->doc === null) { |
|
64 | + if ($this->doc === NULL) { |
|
65 | 65 | // Quit without doing anything if required variables are not set. |
66 | 66 | return $content; |
67 | 67 | } else { |
@@ -153,7 +153,7 @@ discard block |
||
153 | 153 | 'useCacheHash' => 0, |
154 | 154 | 'parameter' => $this->conf['apiPid'], |
155 | 155 | 'additionalParams' => '&tx_dpf[qid]=' . $this->doc->recordId . '&tx_dpf[action]=attachment&tx_dpf[attachment]=' . $attachment['ID'], |
156 | - 'forceAbsoluteUrl' => true, |
|
156 | + 'forceAbsoluteUrl' => TRUE, |
|
157 | 157 | ); |
158 | 158 | $outArray['citation_pdf_url'][] = $this->cObj->typoLink_URL($conf); |
159 | 159 | } |
@@ -16,7 +16,7 @@ discard block |
||
16 | 16 | * Extension Manager/Repository config file for ext: "dpf" |
17 | 17 | ***************************************************************/ |
18 | 18 | |
19 | -$EM_CONF[$_EXTKEY] = array( |
|
19 | +$EM_CONF[$_EXTKEY] = array ( |
|
20 | 20 | 'title' => 'Kitodo.Publication', |
21 | 21 | 'description' => '', |
22 | 22 | 'category' => 'plugin', |
@@ -28,13 +28,13 @@ discard block |
||
28 | 28 | 'createDirs' => 'uploads/tx_dpf', |
29 | 29 | 'clearCacheOnLoad' => 0, |
30 | 30 | 'version' => '5.0.0', |
31 | - 'constraints' => array( |
|
32 | - 'depends' => array( |
|
31 | + 'constraints' => array ( |
|
32 | + 'depends' => array ( |
|
33 | 33 | 'typo3' => '9.5.0-9.5.99', |
34 | 34 | ), |
35 | - 'conflicts' => array( |
|
35 | + 'conflicts' => array ( |
|
36 | 36 | ), |
37 | - 'suggests' => array( |
|
37 | + 'suggests' => array ( |
|
38 | 38 | ), |
39 | 39 | ), |
40 | 40 | ); |