[TASK] Change "true" into "TRUE"
[Packages/TYPO3.CMS.git] / typo3 / sysext / rtehtmlarea / class.tx_rtehtmlareaapi.php
1 <?php
2 /***************************************************************
3 * Copyright notice
4 *
5 * (c) 2007-2011 Stanislas Rolland <typo3(arobas)sjbr.ca>
6 * All rights reserved
7 *
8 * This script is part of the Typo3 project. The Typo3 project is
9 * free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * The GNU General Public License can be found at
15 * http://www.gnu.org/copyleft/gpl.html.
16 *
17 * This script is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * This copyright notice MUST APPEAR in all copies of the script!
23 ***************************************************************/
24 /**
25 * API for extending htmlArea RTE
26 *
27 * @author Stanislas Rolland <typo3(arobas)sjbr.ca>
28 *
29 */
30
31 abstract class tx_rtehtmlarea_api {
32
33 protected $extensionKey; // The key of the extension that is extending htmlArea RTE
34 protected $pluginName; // The name of the plugin registered by the extension
35 protected $relativePathToLocallangFile; // Path to the localization file for this script, relative to the extension dir
36 protected $relativePathToSkin; // Path to the skin (css) file that should be added to the RTE skin when the registered plugin is enabled, relative to the extension dir
37 protected $relativePathToPluginDirectory; // Path to the directory containing the plugin, relative to the extension dir (should end with slash /)
38 protected $htmlAreaRTE; // Reference to the invoking object
39 protected $rteExtensionKey; // The extension key of the RTE
40 protected $thisConfig; // Reference to RTE PageTSConfig
41 protected $toolbar; // Refrence to RTE toolbar array
42 protected $LOCAL_LANG; // Frontend language array
43 protected $pluginButtons = ''; // The comma-separated list of button names that the registered plugin is adding to the htmlArea RTE toolbar
44 protected $pluginLabels = ''; // The comma-separated list of label names that the registered plugin is adding to the htmlArea RTE toolbar
45 protected $pluginAddsButtons = TRUE; // Boolean indicating whether the plugin is adding buttons or not
46 protected $convertToolbarForHtmlAreaArray = array(); // The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts
47 protected $requiresClassesConfiguration = false; // TRUE if the registered plugin requires the PageTSConfig Classes configuration
48 protected $requiresSynchronousLoad = false; // TRUE if the plugin must be loaded synchronously
49 protected $requiredPlugins = ''; // The comma-separated list of names of prerequisite plugins
50
51 /**
52 * Returns TRUE if the plugin is available and correctly initialized
53 *
54 * @param object Reference to parent object, which is an instance of the htmlArea RTE
55 *
56 * @return boolean TRUE if this plugin object should be made available in the current environment and is correctly initialized
57 */
58 public function main($parentObject) {
59 global $TYPO3_CONF_VARS, $LANG, $TSFE;
60
61 $this->htmlAreaRTE = $parentObject;
62 $this->rteExtensionKey =& $this->htmlAreaRTE->ID;
63 $this->thisConfig =& $this->htmlAreaRTE->thisConfig;
64 $this->toolbar =& $this->htmlAreaRTE->toolbar;
65 $this->LOCAL_LANG =& $this->htmlAreaRTE->LOCAL_LANG;
66
67 // Set the value of this boolean based on the initial value of $this->pluginButtons
68 $this->pluginAddsButtons = !empty($this->pluginButtons);
69
70 // Check if the plugin should be disabled in frontend
71 if ($this->htmlAreaRTE->is_FE() && $TYPO3_CONF_VARS['EXTCONF'][$this->rteExtensionKey]['plugins'][$this->pluginName]['disableInFE']) {
72 return false;
73 }
74
75 // Localization array must be initialized here
76 if ($this->relativePathToLocallangFile) {
77 if ($this->htmlAreaRTE->is_FE()) {
78 $this->LOCAL_LANG = t3lib_div::array_merge_recursive_overrule($this->LOCAL_LANG, t3lib_div::readLLfile('EXT:' . $this->extensionKey . '/' . $this->relativePathToLocallangFile, $this->htmlAreaRTE->language));
79 } else {
80 $LANG->includeLLFile('EXT:' . $this->extensionKey . '/' . $this->relativePathToLocallangFile);
81 }
82 }
83 return TRUE;
84 }
85
86 /**
87 * Returns a modified toolbar order string
88 *
89 * @return string a modified tollbar order list
90 */
91 public function addButtonsToToolbar() {
92 //Add only buttons not yet in the default toolbar order
93 $addButtons = implode(',', array_diff(t3lib_div::trimExplode(',', $this->pluginButtons, 1), t3lib_div::trimExplode(',', $this->htmlAreaRTE->defaultToolbarOrder, 1)));
94 return (($addButtons ? ('bar,' . $addButtons . ',linebreak,') : '') . $this->htmlAreaRTE->defaultToolbarOrder);
95 }
96
97 /**
98 * Returns the path to the skin component (button icons) that should be added to linked stylesheets
99 *
100 * @return string path to the skin (css) file
101 */
102 public function getPathToSkin() {
103 global $TYPO3_CONF_VARS;
104 if ($TYPO3_CONF_VARS['EXTCONF'][$this->rteExtensionKey]['plugins'][$this->pluginName]['addIconsToSkin']) {
105 return $this->relativePathToSkin;
106 } else {
107 return '';
108 }
109 }
110
111 /**
112 * Return JS configuration of the htmlArea plugins registered by the extension
113 *
114 * @param integer Relative id of the RTE editing area in the form
115 *
116 * @return string JS configuration for registered plugins
117 *
118 * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s)
119 * Each of the instructions should be of the form:
120 * RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
121 */
122 public function buildJavascriptConfiguration($RTEcounter) {
123 global $TSFE, $LANG;
124
125 $registerRTEinJavascriptString = '';
126 $pluginButtons = t3lib_div::trimExplode(',', $this->pluginButtons, 1);
127 foreach ($pluginButtons as $button) {
128 if (in_array($button, $this->toolbar)) {
129 if (!is_array( $this->thisConfig['buttons.']) || !is_array( $this->thisConfig['buttons.'][$button.'.'])) {
130 $registerRTEinJavascriptString .= '
131 RTEarea['.$RTEcounter.'].buttons.'. $button .' = new Object();';
132 }
133 }
134 }
135 return $registerRTEinJavascriptString;
136 }
137
138 /**
139 * Returns the extension key
140 *
141 * @return string the extension key
142 */
143 public function getExtensionKey() {
144 return $this->extensionKey;
145 }
146
147 /**
148 * Returns the path to the plugin directory, if any
149 *
150 * @return string the full path to the plugin directory
151 */
152 public function getPathToPluginDirectory() {
153 return ($this->relativePathToPluginDirectory ? $this->htmlAreaRTE->httpTypo3Path . t3lib_extMgm::siteRelPath($this->extensionKey) . $this->relativePathToPluginDirectory : '');
154 }
155
156 /**
157 * Returns a boolean indicating whether the plugin adds buttons or not to the toolbar
158 *
159 * @return boolean
160 */
161 public function addsButtons() {
162 return $this->pluginAddsButtons;
163 }
164
165 /**
166 * Returns the list of buttons implemented by the plugin
167 *
168 * @return string the list of buttons implemented by the plugin
169 */
170 public function getPluginButtons() {
171 return $this->pluginButtons;
172 }
173
174 /**
175 * Returns the list of toolbar labels implemented by the plugin
176 *
177 * @return string the list of labels implemented by the plugin
178 */
179 public function getPluginLabels() {
180 return $this->pluginLabels;
181 }
182
183 /**
184 * Returns the conversion array from TYPO3 button names to htmlArea button names
185 *
186 * @return array the conversion array from TYPO3 button names to htmlArea button names
187 */
188 public function getConvertToolbarForHtmlAreaArray() {
189 return $this->convertToolbarForHtmlAreaArray;
190 }
191
192 /**
193 * Returns TRUE if the extension requires the PageTSConfig Classes configuration
194 *
195 * @return boolean TRUE if the extension requires the PageTSConfig Classes configuration
196 */
197 public function requiresClassesConfiguration() {
198 return $this->requiresClassesConfiguration;
199 }
200
201 /**
202 * Returns TRUE if the plugin requires synchronous load
203 *
204 * @return boolean TRUE if the plugin requires synchronous load
205 */
206 public function requiresSynchronousLoad() {
207 return $this->requiresSynchronousLoad;
208 }
209
210 /**
211 * Sets the plugin to require synchronous load or not
212 *
213 * @param boolean $value: the boolean value to set
214 *
215 * @return void
216 */
217 public function setSynchronousLoad($value = TRUE) {
218 $this->requiresSynchronousLoad = $value;
219 }
220
221 /**
222 * Returns the list of plugins required by the plugin
223 *
224 * @return string the list of plugins required by the plugin
225 */
226 public function getRequiredPlugins() {
227 return $this->requiredPlugins;
228 }
229 }
230 /*
231 * Class alias for backward compatibility (TYPO3 4.5)
232 */
233 abstract class tx_rtehtmlareaapi extends tx_rtehtmlarea_api {
234 }
235 ?>