hasOverLayRecordForAnyLanguageInAnyWorkspace()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 2
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 0
1
<?php
2
3
namespace AOE\Languagevisibility;
4
5
/***************************************************************
6
 * Copyright notice
7
 *
8
 * (c) 2016 AOE GmbH <[email protected]>
9
 * All rights reserved
10
 *
11
 * This script is part of the TYPO3 project. The TYPO3 project is
12
 * free software; you can redistribute it and/or modify
13
 * it under the terms of the GNU General Public License as published by
14
 * the Free Software Foundation; either version 2 of the License, or
15
 * (at your option) any later version.
16
 *
17
 * The GNU General Public License can be found at
18
 * http://www.gnu.org/copyleft/gpl.html.
19
 *
20
 * This script is distributed in the hope that it will be useful,
21
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
 * GNU General Public License for more details.
24
 *
25
 * This copyright notice MUST APPEAR in all copies of the script!
26
 ***************************************************************/
27
28
use TYPO3\CMS\Core\Utility\GeneralUtility;
29
30
/**
31
 *
32
 * @author	Daniel Poetzinger <[email protected]>
33
 * @coauthor Tolleiv Nietsch <[email protected]>
34
 * @coauthor Timo Schmidt <[email protected]>
35
 */
36
class FceElement extends RecordElement {
37
38
	private $langIsoCodeForFlexFormCallback = '';
39
	private $langChildren;
40
	private $langDisabled;
41
	private $langDatabaseOverlay;
42
	private $disabledIsVisible;
43
44
		// flags which are set during processings
45
	private $_callBackFoundOverlay = FALSE;
46
47
	public function __construct($row, $DS) {
48
		parent::__construct($row);
49
50
		$this->langChildren = $DS['meta']['langChildren'] ? 1 : 0;
51
		$this->langDisabled = $DS['meta']['langDisable'] ? 1 : 0;
52
		$this->langDatabaseOverlay = $DS['meta']['langDatabaseOverlay'] ? 1 : 0;
53
		$this->disabledIsVisible = $DS['meta']['disabledIsVisible'] ? 1 : 0;
54
	}
55
56
	public function getElementDescription() {
57
		return 'FCE';
58
	}
59
60
	public function getInformativeDescription() {
61
		if ($this->isLanguageSetToAll()) {
62
			return 'Language is set to all. Visible in every language';
63
		}
64
		if ($this->langDisabled == 1) {
65
			if ($this->disabledIsVisible == 1) {
66
				return 'FCE is in mode langDisabled, therefore cannot be translated. But it is configured to be handled as translated per Default.';
67
			} else {
68
				return 'FCE is in mode langDisabled, therefore cannot be translated.';
69
			}
70
		}
71
		if ($this->langChildren == 1) {
72
			return 'FCE is in mode inheritance';
73
		} else {
74
			return 'FCE is in mode seperate';
75
		}
76
	}
77
78
	public function _hasOverlayRecordForLanguage($id) {
79
		$languageRep = Languagerepository::makeInstance();
80
		$language = $languageRep->getLanguageById($id);
81
		$this->langIsoCodeForFlexFormCallback = strtoupper($language->getIsoCode());
82
		$this->_callBackFoundOverlay = FALSE;
83
84
			// Get data structure:
85
		if ($this->langDisabled == 1 && !$this->langDatabaseOverlay) {
86
				// the FCE has langDisabled: this means there is no overlay
87
			if ($this->disabledIsVisible == 1) {
88
				return TRUE;
89
			} else {
90
				return FALSE;
91
			}
92
		}
93
94
		if ($GLOBALS['TSFE']) {
95
			@$GLOBALS['TSFE']->includeTCA();
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
96
		}
97
98
		if ($this->langChildren == 1) {
99
				// the FCE has real overlay record
100
			$flexObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\FlexForm\\FlexFormTools');
101
			if ($this->row['tx_templavoila_flex']) {
102
				$return = $flexObj->traverseFlexFormXMLData('tt_content', 'tx_templavoila_flex', $this->row, $this, '_hasOverlayRecordForLanguage_Inheritance_flexFormCallBack');
103
				if ($return !== TRUE && strlen($return) > 0) {
104
					debug('FCE: _hasOverlayRecordForLanguage has error:' . $return);
105
				}
106
				return $this->_callBackFoundOverlay;
107
			} else {
108
					// in case no xml yet (new created?)
109
				return FALSE;
110
			}
111
		} else {
112
				//	the FCE has no real overlay record
113
			$flexObj = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\FlexForm\\FlexFormTools');
114
			$flexObj->traverseFlexFormXMLData('tt_content', 'tx_templavoila_flex', $this->row, $this, '_hasOverlayRecordForLanguage_Seperate_flexFormCallBack');
115
			return $this->_callBackFoundOverlay;
116
		}
117
	}
118
119
	public function getOverLayRecordForCertainLanguageImplementation($languageId, $onlyUid = FALSE) {
120
		$useDefaultLang = $this->langDisabled == 1 && !$this->langDatabaseOverlay;
121
		return parent::getOverLayRecordForCertainLanguageImplementation($useDefaultLang ? 0 : $languageId, $onlyUid);
0 ignored issues
show
Unused Code introduced by
The call to RecordElement::getOverLa...anguageImplementation() has too many arguments starting with $onlyUid.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
122
	}
123
124
	/**
125
	 * FlexForm call back function, see _hasOverlayRecordForLanguage
126
	 *
127
	 * @param	array		Data Structure of current field
128
	 * @param	string		Data value of current field
129
	 * @param	array		Various stuff in an array
130
	 * @param	string		path to location in flexform for current field
131
	 * @param	object		Reference to parent object
132
	 * @return	void
133
	 */
134
	public function _hasOverlayRecordForLanguage_Inheritance_flexFormCallBack($dsArr, $dataValue, $PA, $structurePath, &$pObj) {
0 ignored issues
show
Unused Code introduced by
The parameter $dataValue is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $PA is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
135
		if ($this->langIsoCodeForFlexFormCallback == '') {
136
			return FALSE;
137
		}
138
139
			// Only take lead from default values (since this is "Inheritance" localization we parse for)
140
		if (substr($structurePath, -5) == '/vDEF') {
141
			$baseStructPath = substr($structurePath, 0, -3);
142
			$structurePath = $baseStructPath . $this->langIsoCodeForFlexFormCallback;
143
			$translValue = $pObj->getArrayValueByPath($structurePath, $pObj->traverseFlexFormXMLData_Data);
144
			if ($this->_isFlexFieldFilled($dsArr['TCEforms']['config'], $translValue)) {
145
				$this->_callBackFoundOverlay = TRUE;
146
			}
147
		}
148
	}
149
150
	protected function _isFlexFieldFilled($cfg, $translValue) {
151
		if (($cfg['type'] == 'check' && $translValue != 0) || ($cfg['type'] != 'check' && $translValue != '')) {
152
			return TRUE;
153
		} else {
154
			return FALSE;
155
		}
156
157
	}
158
159
	/**
160
	 * FlexForm call back function, see _hasOverlayRecordForLanguage
161
	 *
162
	 * @param	array		Data Structure of current field
163
	 * @param	string		Data value of current field
164
	 * @param	array		Various stuff in an array
165
	 * @param	string		path to location in flexform for current field
166
	 * @param	object		Reference to parent object
167
	 * @return	void
168
	 */
169
	public function _hasOverlayRecordForLanguage_Seperate_flexFormCallBack($dsArr, $dataValue, $PA, $structurePath, &$pObj) {
0 ignored issues
show
Unused Code introduced by
The parameter $dataValue is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $PA is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
170
		if ($this->langIsoCodeForFlexFormCallback == '') {
171
			return FALSE;
172
		}
173
			//path like: data/sDEF/lDEF/field_links/el/1/field_link/el/field_link_text/vDEF
174
		if (strpos($structurePath, '/lDEF/')) {
175
			$structurePath = str_replace('/lDEF/', '/l' . $this->langIsoCodeForFlexFormCallback . '/', $structurePath);
176
			$translValue = $pObj->getArrayValueByPath($structurePath, $pObj->traverseFlexFormXMLData_Data);
177
			if ($this->_isFlexFieldFilled($dsArr['TCEforms']['config'], $translValue)) {
178
				$this->_callBackFoundOverlay = TRUE;
179
			}
180
181
		}
182
	}
183
184
	public function hasOverLayRecordForAnyLanguageInAnyWorkspace() {
185
	}
186
}
187