[TASK] Remove unneeded parenthesis on array-access
[Packages/TYPO3.CMS.git] / typo3 / sysext / rtehtmlarea / Classes / Extension / Typo3Link.php
1 <?php
2 namespace TYPO3\CMS\Rtehtmlarea\Extension;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use TYPO3\CMS\Backend\Utility\BackendUtility;
18 use TYPO3\CMS\Core\Utility\GeneralUtility;
19 use TYPO3\CMS\Rtehtmlarea\RteHtmlAreaApi;
20
21 /**
22 * TYPO3Link plugin for htmlArea RTE
23 */
24 class Typo3Link extends RteHtmlAreaApi
25 {
26 /**
27 * The name of the plugin registered by the extension
28 *
29 * @var string
30 */
31 protected $pluginName = 'TYPO3Link';
32
33 /**
34 * The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
35 *
36 * @var string
37 */
38 protected $pluginButtons = 'link, unlink';
39
40 /**
41 * The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
42 *
43 * @var array
44 */
45 protected $convertToolbarForHtmlAreaArray = array(
46 'link' => 'CreateLink',
47 'unlink' => 'UnLink'
48 );
49
50 /**
51 * Returns TRUE if the plugin is available and correctly initialized
52 *
53 * @param array $configuration Configuration array given from calling object down to the single plugins
54 * @return bool TRUE if this plugin object should be made available in the current environment and is correctly initialized
55 */
56 public function main(array $configuration)
57 {
58 // Check if this should be enabled based on Page TSConfig
59 return parent::main($configuration)
60 && !$this->configuration['thisConfig']['buttons.']['link.']['TYPO3Browser.']['disabled'];
61 }
62
63 /**
64 * Return JS configuration of the htmlArea plugins registered by the extension
65 *
66 * @return string JS configuration for registered plugins, in this case, JS configuration of block elements
67 */
68 public function buildJavascriptConfiguration()
69 {
70 $jsArray = array();
71 $button = 'link';
72 if (in_array($button, $this->toolbar)) {
73 if (!is_array($this->configuration['thisConfig']['buttons.']) || !is_array($this->configuration['thisConfig']['buttons.'][$button . '.'])) {
74 $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . ' = new Object();';
75 }
76 $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . '.pathLinkModule = ' . GeneralUtility::quoteJSvalue(BackendUtility::getModuleUrl('rtehtmlarea_wizard_browse_links')) . ';';
77 if (is_array($this->configuration['RTEsetup']['properties']['classesAnchor.'])) {
78 $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . '.classesAnchorUrl = "' . $this->writeTemporaryFile('classesAnchor_' . $this->configuration['contentLanguageUid'], 'js', $this->buildJSClassesAnchorArray()) . '";';
79 }
80 $jsArray[] = 'RTEarea[editornumber].buttons.' . $button . '.additionalAttributes = "data-htmlarea-external' . ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extensionKey]['plugins'][$this->pluginName]['additionalAttributes'] ? ',' . $GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->extensionKey]['plugins'][$this->pluginName]['additionalAttributes'] : '') . '";';
81 }
82 return implode(LF, $jsArray);
83 }
84
85 /**
86 * Return a JS array for special anchor classes
87 *
88 * @return string classesAnchor array definition
89 */
90 public function buildJSClassesAnchorArray()
91 {
92 $JSClassesAnchorArray = 'HTMLArea.classesAnchorSetup = [ ' . LF;
93 $classesAnchorIndex = 0;
94 foreach ($this->configuration['RTEsetup']['properties']['classesAnchor.'] as $label => $conf) {
95 if (is_array($conf) && $conf['class']) {
96 $JSClassesAnchorArray .= ($classesAnchorIndex++ ? ',' : '') . ' { ' . LF;
97 $index = 0;
98 $JSClassesAnchorArray .= ($index++ ? ',' : '') . 'name : "' . str_replace('"', '', str_replace('\'', '', $conf['class'])) . '"' . LF;
99 if ($conf['type']) {
100 $JSClassesAnchorArray .= ($index++ ? ',' : '') . 'type : "' . str_replace('"', '', str_replace('\'', '', $conf['type'])) . '"' . LF;
101 }
102 if (trim(str_replace('\'', '', str_replace('"', '', $conf['image'])))) {
103 $JSClassesAnchorArray .= ($index++ ? ',' : '') . 'image : "' . GeneralUtility::getIndpEnv('TYPO3_SITE_URL') . GeneralUtility::resolveBackPath((TYPO3_mainDir . $this->getFullFileName(trim(str_replace('\'', '', str_replace('"', '', $conf['image'])))))) . '"' . LF;
104 }
105 $JSClassesAnchorArray .= ($index++ ? ',' : '') . 'addIconAfterLink : ' . ($conf['addIconAfterLink'] ? 'true' : 'false') . LF;
106 if (trim($conf['altText'])) {
107 $string = GeneralUtility::quoteJSvalue($this->getLanguageService()->sL(trim($conf['altText'])));
108 $JSClassesAnchorArray .= ($index++ ? ',' : '') . 'altText : ' . str_replace('"', '\\"', str_replace('\\\'', '\'', $string)) . LF;
109 }
110 if (trim($conf['titleText'])) {
111 $string = GeneralUtility::quoteJSvalue($this->getLanguageService()->sL(trim($conf['titleText'])));
112 $JSClassesAnchorArray .= ($index++ ? ',' : '') . 'titleText : ' . str_replace('"', '\\"', str_replace('\\\'', '\'', $string)) . LF;
113 }
114 if (trim($conf['target'])) {
115 $JSClassesAnchorArray .= ($index++ ? ',' : '') . 'target : "' . trim($conf['target']) . '"' . LF;
116 }
117 $JSClassesAnchorArray .= '}' . LF;
118 }
119 }
120 $JSClassesAnchorArray .= '];' . LF;
121 return $JSClassesAnchorArray;
122 }
123
124 /**
125 * Return an updated array of toolbar enabled buttons
126 *
127 * @param array $show: array of toolbar elements that will be enabled, unless modified here
128 * @return array toolbar button array, possibly updated
129 */
130 public function applyToolbarConstraints($show)
131 {
132 // We will not allow unlink if link is not enabled
133 if (!in_array('link', $show)) {
134 return array_diff($show, GeneralUtility::trimExplode(',', $this->pluginButtons));
135 } else {
136 return $show;
137 }
138 }
139 }