Cheetah
ChBaseEditorTinyMCE.php
Go to the documentation of this file.
1 <?php
2 
8 ch_import('ChWsbEditor');
9 
15 {
19  protected static $CONF_COMMON = "
20  jQuery('{ch_var_selector}').tinymce({
21  {ch_var_custom_init}
22  {ch_var_custom_conf}
23  document_base_url: '{ch_url_root}',
24  skin_url: '{ch_url_tinymce}skins/{ch_var_skin}/',
25  language: '{ch_var_lang}',
26  language_url: '{ch_url_tinymce}langs/{ch_var_lang}.js',
27  content_css: '{ch_var_css_path}',
28  entity_encoding: 'raw',
29  browser_spellcheck: true
30  });
31  ";
32 
36  protected static $WIDTH_STANDARD = '100%';
37  protected static $MODULES_STANDARD = array (
38  "advlist: '{ch_url_tinymce}plugins/advlist/plugin.min.js'",
39  "autolink: '{ch_url_tinymce}plugins/autolink/plugin.min.js'",
40  "autosave: '{ch_url_tinymce}plugins/autosave/plugin.min.js'",
41  "code: '{ch_url_tinymce}plugins/code/plugin.min.js'",
42  "hr: '{ch_url_tinymce}plugins/hr/plugin.min.js'",
43  "image: '{ch_url_tinymce}plugins/image/plugin.min.js'",
44  "link: '{ch_url_tinymce}plugins/link/plugin.min.js'",
45  "lists: '{ch_url_tinymce}plugins/lists/plugin.min.js'",
46  "media: '{ch_url_tinymce}plugins/media/plugin.min.js'",
47  "fullscreen: '{ch_url_tinymce}plugins/fullscreen/plugin.min.js'",
48  );
49  protected static $CONF_STANDARD = "
50  external_plugins: {
51  {modules}
52  },
53  width: '100%',
54  height: '270',
55  theme_url: '{ch_url_tinymce}themes/modern/theme.min.js',
56  toolbar: 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',
57  statusbar: true,
58  resize: true,
59  ";
60 
64  protected static $WIDTH_MINI = '100%';
65  protected static $MODULES_MINI = array (
66  "autolink: '{ch_url_tinymce}plugins/autolink/plugin.min.js'",
67  "image: '{ch_url_tinymce}plugins/image/plugin.min.js'",
68  "link: '{ch_url_tinymce}plugins/link/plugin.min.js'",
69  "lists: '{ch_url_tinymce}plugins/lists/plugin.min.js'",
70  );
71  protected static $CONF_MINI = "
72  menubar: false,
73  external_plugins: {
74  {modules}
75  },
76  width: '100%',
77  height: '150',
78  theme_url: '{ch_url_tinymce}themes/modern/theme.min.js',
79  toolbar: 'bold italic underline removeformat | bullist numlist | alignleft aligncenter alignright | blockquote | link unlink image',
80  statusbar: false,
81  ";
82 
86  protected static $WIDTH_FULL = '100%';
87  protected static $MODULES_FULL = array (
88  "advlist: '{ch_url_tinymce}plugins/advlist/plugin.min.js'",
89  "anchor: '{ch_url_tinymce}plugins/anchor/plugin.min.js'",
90  "autolink: '{ch_url_tinymce}plugins/autolink/plugin.min.js'",
91  "autoresize: '{ch_url_tinymce}plugins/autoresize/plugin.min.js'",
92  "autosave: '{ch_url_tinymce}plugins/autosave/plugin.min.js'",
93  "charmap: '{ch_url_tinymce}plugins/charmap/plugin.min.js'",
94  "code: '{ch_url_tinymce}plugins/code/plugin.min.js'",
95  "emoticons: '{ch_url_tinymce}plugins/emoticons/plugin.min.js'",
96  "hr: '{ch_url_tinymce}plugins/hr/plugin.min.js'",
97  "image: '{ch_url_tinymce}plugins/image/plugin.min.js'",
98  "link: '{ch_url_tinymce}plugins/link/plugin.min.js'",
99  "lists: '{ch_url_tinymce}plugins/lists/plugin.min.js'",
100  "media: '{ch_url_tinymce}plugins/media/plugin.min.js'",
101  "nonbreaking: '{ch_url_tinymce}plugins/nonbreaking/plugin.min.js'",
102  "pagebreak: '{ch_url_tinymce}plugins/pagebreak/plugin.min.js'",
103  "preview: '{ch_url_tinymce}plugins/preview/plugin.min.js'",
104  "print: '{ch_url_tinymce}plugins/print/plugin.min.js'",
105  "save: '{ch_url_tinymce}plugins/save/plugin.min.js'",
106  "searchreplace: '{ch_url_tinymce}plugins/searchreplace/plugin.min.js'",
107  "table: '{ch_url_tinymce}plugins/table/plugin.min.js'",
108  "textcolor: '{ch_url_tinymce}plugins/textcolor/plugin.min.js'",
109  "visualblocks: '{ch_url_tinymce}plugins/visualblocks/plugin.min.js'",
110  "fullscreen: '{ch_url_tinymce}plugins/fullscreen/plugin.min.js'",
111  );
112  protected static $CONF_FULL = "
113  external_plugins: {
114  {modules}
115  },
116  width: '100%',
117  height: '320',
118  theme_url: '{ch_url_tinymce}themes/modern/theme.min.js',
119  toolbar: [
120  'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',
121  'print preview media | forecolor emoticons'
122  ],
123  statusbar: true,
124  resize: true,
125  image_advtab: true,
126  ";
127 
128  protected $_sConfCustom = '';
129 
133  protected static $CONF_LANGS = array('ar' => 1, 'ar_SA' => 1, 'az' => 1, 'be' => 1, 'bg_BG' => 1, 'bn_BD' => 1, 'bs' => 1, 'ca' => 1, 'cs' => 1, 'cs_CZ' => 1, 'cy' => 1, 'da' => 1, 'de' => 1, 'de_AT' => 1, 'dv' => 1, 'el' => 1, 'en_CA' => 1, 'en_GB' => 1, 'eo' => 1, 'es' => 1, 'es_MX' => 1, 'et' => 1, 'eu' => 1, 'fa' => 1, 'fa_IR' => 1, 'fi' => 1, 'fo' => 1, 'fr_CH' => 1, 'fr_FR' => 1, 'ga' => 1, 'gd' => 1, 'gl' => 1, 'he_IL' => 1, 'hi_IN' => 1, 'hr' => 1, 'hu_HU' => 1, 'hy' => 1, 'id' => 1, 'is_IS' => 1, 'it' => 1, 'ja' => 1, 'ka_GE' => 1, 'kab' => 1, 'kk' => 1, 'km_KH' => 1, 'ko' => 1, 'ko_KR' => 1, 'ku' => 1, 'ku_IQ' => 1, 'lb' => 1, 'lt' => 1, 'lv' => 1, 'ml' => 1, 'ml_IN' => 1, 'mn_MN' => 1, 'nb_NO' => 1, 'nl' => 1, 'pl' => 1, 'pt_BR' => 1, 'pt_PT' => 1, 'ro' => 1, 'ru' => 1, 'si_LK' => 1, 'sk' => 1, 'sl_SI' => 1, 'sr' => 1, 'sv_SE' => 1, 'ta' => 1, 'ta_IN' => 1, 'tg' => 1, 'th_TH' => 1, 'tr' => 1, 'tr_TR' => 1, 'tt' => 1, 'ug' => 1, 'uk' => 1, 'uk_UA' => 1, 'vi' => 1, 'vi_VN' => 1, 'zh_CN' => 1, 'zh_TW' => 1);
134 
135  protected $_oTemplate;
136  protected $_bJsCssAdded = false;
137 
138  public function __construct ($aObject, $oTemplate)
139  {
140  parent::__construct ($aObject);
141 
142  if ($oTemplate)
143  $this->_oTemplate = $oTemplate;
144  else
145  $this->_oTemplate = $GLOBALS['oSysTemplate'];
146  }
147 
151  public function getWidth ($iViewMode)
152  {
153  switch ($iViewMode) {
154  case CH_EDITOR_MINI:
155  return self::$WIDTH_MINI;
156  case CH_EDITOR_FULL:
157  return self::$WIDTH_FULL;
158  break;
159  case CH_EDITOR_STANDARD:
160  default:
161  return self::$WIDTH_STANDARD;
162  }
163  }
164 
168  public function setCustomConf ($s)
169  {
170  $this->_sConfCustom = $s;
171  }
172 
179  public function attachEditor ($sSelector, $iViewMode = CH_EDITOR_STANDARD, $bDynamicMode = false)
180  {
181  // set visual mode
182  switch ($iViewMode) {
183  case CH_EDITOR_MINI:
184  $sToolsItems = self::$CONF_MINI;
186  break;
187  case CH_EDITOR_FULL:
188  $sToolsItems = self::$CONF_FULL;
190  break;
191  case CH_EDITOR_STANDARD:
192  default:
193  $sToolsItems = self::$CONF_STANDARD;
195  }
196 
197  // detect language
198  $aLang = ch_lang_info();
199  if (isset(self::$CONF_LANGS[$aLang['LanguageCountry']]))
200  $sLang = $aLang['LanguageCountry'];
201  elseif (isset(self::$CONF_LANGS[$aLang['Name']]))
202  $sLang = $aLang['Name'];
203  else
204  $sLang = 'en_GB';
205 
206  $aMarkers = array(
207  'ch_var_custom_init' => &$sToolsItems,
208  'ch_var_custom_conf' => $this->_sConfCustom,
209  'ch_var_plugins_path' => ch_js_string(CH_WSB_URL_PLUGINS, CH_ESCAPE_STR_APOS),
210  'ch_var_css_path' => ch_js_string($this->_oTemplate->getCssUrl('editor.css'), CH_ESCAPE_STR_APOS),
211  'ch_var_skin' => ch_js_string($this->_aObject['skin'], CH_ESCAPE_STR_APOS),
212  'ch_var_lang' => ch_js_string($sLang, CH_ESCAPE_STR_APOS),
213  'ch_var_selector' => ch_js_string($sSelector, CH_ESCAPE_STR_APOS),
214  'ch_url_root' => ch_js_string(CH_WSB_URL_ROOT, CH_ESCAPE_STR_APOS),
215  'ch_url_tinymce' => ch_js_string(CH_WSB_URL_PLUGINS . 'tinymce/', CH_ESCAPE_STR_APOS),
216  );
217 
218  $o = new ChWsbAlerts('system', 'attach_editor', 0, 0, array('markers' => &$aMarkers, 'modules' => &$aModules, 'view_mode' => $iViewMode, 'dynamic_mode' => $bDynamicMode, 'selector' => $sSelector, 'editor' => $this));
219  $o->alert();
220 
221  $sToolsItems = str_replace('{modules}', join(",\n", $aModules), $sToolsItems);
222 
223  // initialize editor
224  $sInitEditor = $this->_replaceMarkers(self::$CONF_COMMON, $aMarkers);
225 
226  if ($bDynamicMode) {
227 
228  $sScript = "<script>
229  if ('undefined' == typeof(jQuery(document).tinymce)) {
230  window.tinyMCEPreInit = {base : '" . ch_js_string(CH_WSB_URL_PLUGINS . 'tinymce', CH_ESCAPE_STR_APOS) . "', suffix : '.min', query : ''};
231  $.getScript('" . ch_js_string(CH_WSB_URL_PLUGINS . 'tinymce/tinymce.min.js', CH_ESCAPE_STR_APOS) . "', function(data, textStatus, jqxhr) {
232  $.getScript('" . ch_js_string(CH_WSB_URL_PLUGINS . 'tinymce/jquery.tinymce.min.js', CH_ESCAPE_STR_APOS) . "', function(data, textStatus, jqxhr) {
233  $sInitEditor
234  });
235  });
236  } else {
237  setTimeout(function () {
238  $sInitEditor
239  }, 10); // wait while html is rendered in case of dynamic adding html with tinymce
240  }
241  </script>";
242 
243  } else {
244 
245  $sScript = "
246  <script>
247  $(document).ready(function () {
248  $sInitEditor
249  });
250  </script>";
251 
252  }
253 
254  return $this->_addJsCss($bDynamicMode) . $sScript;
255  }
256 
260  protected function _addJsCss($bDynamicMode = false, $sInitEditor = '')
261  {
262  if ($bDynamicMode)
263  return '';
264  if ($this->_bJsCssAdded)
265  return '';
266 
267  $this->_oTemplate->addInjection ('injection_head_begin', 'text', "<script>window.tinyMCEPreInit = {base : '" . ch_js_string(CH_WSB_URL_PLUGINS . 'tinymce', CH_ESCAPE_STR_APOS) . "', suffix : '.min', query : ''};</script>\n");
268 
269  $aJs = array('tinymce/tinymce.min.js', 'tinymce/jquery.tinymce.min.js');
270  $this->_oTemplate->addJs($aJs);
271 
272  if (isset($GLOBALS['oAdmTemplate']))
273  $GLOBALS['oAdmTemplate']->addJs($aJs);
274 
275  $this->_bJsCssAdded = true;
276  return '';
277  }
278 
279 }
ChBaseEditorTinyMCE\$_sConfCustom
$_sConfCustom
Definition: ChBaseEditorTinyMCE.php:128
ChBaseEditorTinyMCE\$MODULES_STANDARD
static $MODULES_STANDARD
Definition: ChBaseEditorTinyMCE.php:37
ch_js_string
ch_js_string($mixedInput, $iQuoteType=CH_ESCAPE_STR_AUTO)
Definition: utils.inc.php:1294
ch_import
ch_import($sClassName, $aModule=array())
Definition: utils.inc.php:1218
php
ChBaseEditorTinyMCE\$WIDTH_FULL
static $WIDTH_FULL
Definition: ChBaseEditorTinyMCE.php:86
ChBaseEditorTinyMCE\$CONF_COMMON
static $CONF_COMMON
Definition: ChBaseEditorTinyMCE.php:19
ch_lang_info
ch_lang_info()
Definition: languages.inc.php:562
ChWsbAlerts
Definition: ChWsbAlerts.php:39
ChBaseEditorTinyMCE\_addJsCss
_addJsCss($bDynamicMode=false, $sInitEditor='')
Definition: ChBaseEditorTinyMCE.php:260
CH_EDITOR_STANDARD
const CH_EDITOR_STANDARD
Definition: ChWsbEditor.php:14
CH_EDITOR_MINI
const CH_EDITOR_MINI
Definition: ChWsbEditor.php:26
ChBaseEditorTinyMCE\$_oTemplate
$_oTemplate
Definition: ChBaseEditorTinyMCE.php:135
ChBaseEditorTinyMCE\__construct
__construct($aObject, $oTemplate)
Definition: ChBaseEditorTinyMCE.php:138
ChBaseEditorTinyMCE\getWidth
getWidth($iViewMode)
Definition: ChBaseEditorTinyMCE.php:151
ChBaseEditorTinyMCE\setCustomConf
setCustomConf($s)
Definition: ChBaseEditorTinyMCE.php:168
ChBaseEditorTinyMCE\$CONF_LANGS
static $CONF_LANGS
Definition: ChBaseEditorTinyMCE.php:133
ChBaseEditorTinyMCE\$CONF_MINI
static $CONF_MINI
Definition: ChBaseEditorTinyMCE.php:71
CH_EDITOR_FULL
const CH_EDITOR_FULL
Definition: ChWsbEditor.php:20
ChWsbEditor
Definition: ChWsbEditor.php:68
ChBaseEditorTinyMCE\$_bJsCssAdded
$_bJsCssAdded
Definition: ChBaseEditorTinyMCE.php:136
$s
$s
Definition: embed.php:13
ChBaseEditorTinyMCE\$CONF_STANDARD
static $CONF_STANDARD
Definition: ChBaseEditorTinyMCE.php:49
$aModules
$aModules
Definition: constants.inc.php:29
ChBaseEditorTinyMCE\attachEditor
attachEditor($sSelector, $iViewMode=CH_EDITOR_STANDARD, $bDynamicMode=false)
Definition: ChBaseEditorTinyMCE.php:179
CH_ESCAPE_STR_APOS
const CH_ESCAPE_STR_APOS
escape apostrophes only, for js strings enclosed in apostrophes, for use in
Definition: utils.inc.php:33
ChBaseEditorTinyMCE\$WIDTH_MINI
static $WIDTH_MINI
Definition: ChBaseEditorTinyMCE.php:64
ChBaseEditorTinyMCE\$MODULES_MINI
static $MODULES_MINI
Definition: ChBaseEditorTinyMCE.php:65
ChBaseEditorTinyMCE
Definition: ChBaseEditorTinyMCE.php:15
ChBaseEditorTinyMCE\$CONF_FULL
static $CONF_FULL
Definition: ChBaseEditorTinyMCE.php:112
ChBaseEditorTinyMCE\$MODULES_FULL
static $MODULES_FULL
Definition: ChBaseEditorTinyMCE.php:87
$o
$o
Definition: cmd.php:193
ChWsbEditor\_replaceMarkers
_replaceMarkers($s, $a)
Definition: ChWsbEditor.php:154
ChBaseEditorTinyMCE\$WIDTH_STANDARD
static $WIDTH_STANDARD
Definition: ChBaseEditorTinyMCE.php:36
$GLOBALS
$GLOBALS['iAdminPage']
Definition: advanced_settings.php:10