2 declare(strict_types = 1);
21 use TYPO3\CMS\Core\Package\PackageManager;
45 'enable' => [
'Enable features',
'a'],
46 'dims' => [
'Dimensions, widths, heights, pixels',
'b'],
47 'file' => [
'Files',
'c'],
48 'typo' => [
'Typography',
'd'],
49 'color' => [
'Colors',
'e'],
50 'links' => [
'Links and targets',
'f'],
51 'language' => [
'Language specific constants',
'g'],
53 'cheader' => [
'Content: \'Header\'',
'ma'],
54 'cheader_g' => [
'Content: \'Header\', Graphical',
'ma'],
55 'ctext' => [
'Content: \'Text\'',
'mb'],
56 'cimage' => [
'Content: \'Image\'',
'md'],
57 'ctextmedia' => [
'Content: \'Textmedia\'',
'ml'],
58 'cbullets' => [
'Content: \'Bullet list\'',
'me'],
59 'ctable' => [
'Content: \'Table\'',
'mf'],
60 'cuploads' => [
'Content: \'Filelinks\'',
'mg'],
61 'cmultimedia' => [
'Content: \'Multimedia\'',
'mh'],
62 'cmedia' => [
'Content: \'Media\'',
'mr'],
63 'cmailform' => [
'Content: \'Form\'',
'mi'],
64 'csearch' => [
'Content: \'Search\'',
'mj'],
65 'clogin' => [
'Content: \'Login\'',
'mk'],
66 'cmenu' => [
'Content: \'Menu/Sitemap\'',
'mm'],
67 'cshortcut' => [
'Content: \'Insert records\'',
'mn'],
68 'clist' => [
'Content: \'List of records\'',
'mo'],
69 'chtml' => [
'Content: \'HTML\'',
'mq']
81 $package = GeneralUtility::makeInstance(PackageManager::class)->getPackage($extensionKey);
82 if (!@is_file($package->getPackagePath() .
'ext_conf_template.txt')) {
87 foreach ($configuration as $configurationPath => &$details) {
89 $valueFromLocalConfiguration = $extensionConfiguration->get($extensionKey, str_replace(
'.',
'/', $configurationPath));
90 $details[
'value'] = $valueFromLocalConfiguration;
99 if (!empty($configuration)) {
100 $hierarchicConfiguration = [];
101 foreach ($configuration as $configurationOption) {
104 $hierarchicConfiguration = $originalConfiguration;
107 $hierarchicConfiguration = array_reverse($hierarchicConfiguration);
109 foreach ($hierarchicConfiguration as &$catConfigurationArray) {
110 foreach ($catConfigurationArray as &$subcatConfigurationArray) {
111 uasort($subcatConfigurationArray,
function ($a, $b) {
112 return strnatcmp($a[
'subcat'], $b[
'subcat']);
115 unset($subcatConfigurationArray);
117 unset($tempConfiguration);
118 $resultArray = $hierarchicConfiguration;
132 $hierarchicConfiguration = [];
133 if (GeneralUtility::isFirstPartOfStr($configurationOption[
'type'],
'user')) {
135 } elseif (GeneralUtility::isFirstPartOfStr($configurationOption[
'type'],
'options')) {
139 if (is_string($configurationOption[
'label'])) {
140 $translatedLabel = $languageService->sL($configurationOption[
'label']);
141 if ($translatedLabel) {
142 $configurationOption[
'label'] = $translatedLabel;
145 $configurationOption[
'labels'] = GeneralUtility::trimExplode(
':', $configurationOption[
'label'],
false, 2);
146 $configurationOption[
'subcat_name'] = $configurationOption[
'subcat_name'] ?:
'__default';
147 $hierarchicConfiguration[$configurationOption[
'cat']][$configurationOption[
'subcat_name']][$configurationOption[
'name']] = $configurationOption;
148 return $hierarchicConfiguration;
160 preg_match(
'/options\[(.*)\]/is', $configurationOption[
'type'], $typeMatches);
161 $optionItems = GeneralUtility::trimExplode(
',', $typeMatches[1]);
162 foreach ($optionItems as $optionItem) {
163 $optionPair = GeneralUtility::trimExplode(
'=', $optionItem);
164 if (count($optionPair) === 2) {
165 $configurationOption[
'generic'][$optionPair[0]] = $optionPair[1];
167 $configurationOption[
'generic'][$optionPair[0]] = $optionPair[0];
170 $configurationOption[
'type'] =
'options';
171 return $configurationOption;
183 preg_match(
'/user\\[(.*)\\]/is', $configurationOption[
'type'], $matches);
184 $configurationOption[
'generic'] = $matches[1];
185 $configurationOption[
'type'] =
'user';
186 return $configurationOption;
221 foreach ($theConstants as $configurationOptionName => $configurationOption) {
223 array_key_exists(
'subcat_name', $configurationOption)
224 && isset($this->subCategories[$configurationOption[
'subcat_name']])
225 && isset($this->subCategories[$configurationOption[
'subcat_name']][0])
227 $theConstants[$configurationOptionName][
'subcat_label'] = $this->subCategories[$configurationOption[
'subcat_name']][0];
229 $theConstants[$configurationOptionName][
'extensionKey'] = $extensionKey;
231 return $theConstants;
243 $categoryLabels = [];
244 $editableComments = [];
246 foreach ($flatSetup as $const => $value) {
247 if (substr($const, -2) ===
'..' || !isset($flatSetup[$const .
'..'])) {
251 $comment = trim($flatSetup[$const .
'..']);
252 $c_arr = explode(LF, $comment);
253 foreach ($c_arr as $k => $v) {
254 $line = trim(preg_replace(
'/^[#\\/]*/',
'', $v));
258 $parts = explode(
';', $line);
259 foreach ($parts as $par) {
260 if (strstr($par,
'=')) {
261 $keyValPair = explode(
'=', $par, 2);
262 switch (trim(strtolower($keyValPair[0]))) {
265 $editableComments[$const][
'type'] = trim($keyValPair[1]);
269 $catSplit = explode(
'/', strtolower($keyValPair[1]));
270 $catSplit[0] = trim($catSplit[0]);
271 if (isset($categoryLabels[$catSplit[0]])) {
272 $catSplit[0] = $categoryLabels[$catSplit[0]];
274 $editableComments[$const][
'cat'] = $catSplit[0];
277 $catSplit[1] = !empty($catSplit[1]) ? trim($catSplit[1]) :
'';
278 if ($catSplit[1] && isset($this->subCategories[$catSplit[1]])) {
279 $editableComments[$const][
'subcat_name'] = $catSplit[1];
280 $orderIdentifier = isset($catSplit[2]) ? trim($catSplit[2]) : $counter;
281 $editableComments[$const][
'subcat'] = $this->subCategories[$catSplit[1]][1]
282 .
'/' . $catSplit[1] .
'/' . $orderIdentifier .
'z';
283 } elseif (isset($catSplit[2])) {
284 $editableComments[$const][
'subcat'] =
'x' .
'/' . trim($catSplit[2]) .
'z';
286 $editableComments[$const][
'subcat'] =
'x' .
'/' . $counter .
'z';
291 $editableComments[$const][
'label'] = trim($keyValPair[1]);
293 case 'customcategory':
295 $customCategory = explode(
'=', $keyValPair[1], 2);
296 if (trim($customCategory[0])) {
297 $categoryKey = strtolower($customCategory[0]);
301 case 'customsubcategory':
303 $customSubcategory = explode(
'=', $keyValPair[1], 2);
304 if (trim($customSubcategory[0])) {
305 $subCategoryKey = strtolower($customSubcategory[0]);
313 if (isset($editableComments[$const])) {
314 $editableComments[$const][
'name'] = $const;
315 $editableComments[$const][
'value'] = trim($value);
316 $editableComments[$const][
'default_value'] = trim($value);
319 return $editableComments;
332 if (is_array($setupArray)) {
333 foreach ($setupArray as $key => $val) {
334 if (is_array($val)) {
335 $flatSetup = array_merge($flatSetup, $this->
flattenSetup($val, $prefix . $key));
337 $flatSetup[$prefix . $key] = $val;