00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00059 unset($MCONF);
00060 require ('conf.php');
00061 require ($BACK_PATH.'init.php');
00062 require ($BACK_PATH.'template.php');
00063
00064 require_once (PATH_t3lib.'class.t3lib_page.php');
00065
00066
00067
00068
00069
00070
00078 class SC_rte_rte {
00079 var $content;
00080
00081 var $elementId;
00082 var $elementParts;
00083 var $tscPID;
00084 var $typeVal;
00085 var $thePid;
00086 var $RTEsetup;
00087 var $thisConfig;
00088 var $hide;
00089 var $toggleHTML;
00090 var $confValues;
00091 var $siteUrl;
00092 var $language;
00093 var $specConf;
00094
00098 function init() {
00099 global $BE_USER,$LANG,$HTTP_GET_VARS,$TBE_TEMPLATE,$TCA;
00100 #debug(t3lib_div::_GET());
00101
00102
00103 $this->elementId = t3lib_div::_GP('elementId');
00104 $this->elementParts = explode('][',ereg_replace('\]$','',ereg_replace('^(TSFE_EDIT\[data\]\[|data\[)','',$this->elementId)));
00105
00106
00107 list($this->tscPID,$this->thePid) = t3lib_BEfunc::getTSCpid(trim($this->elementParts[0]),trim($this->elementParts[1]),t3lib_div::_GP('pid'));
00108
00109
00110 $this->typeVal = t3lib_div::_GP('typeVal');
00111 if (!isset($HTTP_GET_VARS['typeVal'])) {
00112 die ('System Error: No typeVal was sent!');
00113 }
00114
00115
00116 unset($this->RTEsetup);
00117 $this->thisConfig = array();
00118 if ($this->thePid >= 0) {
00119 $this->RTEsetup = $BE_USER->getTSConfig('RTE',t3lib_BEfunc::getPagesTSconfig($this->tscPID));
00120 $this->thisConfig = t3lib_BEfunc::RTEsetup($this->RTEsetup['properties'],$this->elementParts[0],$this->elementParts[2],$this->typeVal);
00121 } else {
00122 die ('System Error: Could not fetch configuration based on the parameters sent to the script. ($this->thePid, $this->elementId)');
00123 }
00124
00125 if ($this->thisConfig['disabled']) {
00126 die ('System Error: Apparently the RTE is disabled and this script should not have been loaded anyway.');
00127 }
00128
00129
00130
00131 $en = t3lib_div::_GP('sC');
00132 $defaultExtras = t3lib_div::_GP('defaultExtras');
00133 $this->specConf = t3lib_BEfunc::getSpecConfParts($en,$defaultExtras);
00134
00135
00136 $this->makeToolBarHide();
00137
00138
00139 $this->confValues['backgroundColor'] = t3lib_div::_GP('bgColor');
00140 if (!$this->confValues['backgroundColor']) {
00141 $this->confValues['backgroundColor'] = $TBE_TEMPLATE->bgColor3;
00142 }
00143 $this->confValues['steelBlue'] = $TBE_TEMPLATE->bgColor2;
00144
00145
00146
00147
00148 $this->language = $LANG->lang;
00149 if ($this->language=='default') {
00150 $this->language='';
00151 }
00152
00153 $this->siteUrl = t3lib_div::getIndpEnv('TYPO3_SITE_URL');
00154 }
00155
00161 function makeToolBarHide() {
00162 global $BE_USER;
00163
00164
00165
00166
00167
00168 $all = array('cut','copy','paste','bar1','formatblock','class','fontstyle','fontsize','textcolor','bar2','bold','italic','underline','bar3','left','center','right','bar4','orderedlist','unorderedlist','outdent','indent','bar5','link','table','bgcolor','image','bar6','emoticon','line','user');
00169 $bars = array('bar1','bar2','bar3','bar4','bar5','bar6');
00170
00171
00172 $this->hide=array();
00173
00174
00175
00176
00177 $pList = is_array($this->specConf['richtext']['parameters']) ? implode(',',$this->specConf['richtext']['parameters']) : '';
00178 if ($pList!='*') {
00179 $show = array_merge($this->specConf['richtext']['parameters'],$bars);
00180
00181 if ($this->thisConfig['showButtons']) {
00182 $show = array_unique(array_merge($show,t3lib_div::trimExplode(',',$this->thisConfig['showButtons'],1)));
00183 }
00184 $this->hide = array_diff($all,$show);
00185 }
00186
00187
00188 $RTEkeyList = isset($BE_USER->userTS['options.']['RTEkeyList']) ? $BE_USER->userTS['options.']['RTEkeyList'] : '*';
00189 if ($RTEkeyList!='*') {
00190 $show = t3lib_div::trimExplode(',',$RTEkeyList,1);
00191 $show = array_merge($show,$bars);
00192 $this->hide = array_diff($all,$show);
00193
00194 $this->toggleHTML = in_array('chMode',$show) ? 1 : 0;
00195 } else {$this->toggleHTML=1;}
00196
00197
00198 if ($this->thisConfig['hideButtons']) {
00199 $this->hide = array_unique(array_merge($this->hide,t3lib_div::trimExplode(',',$this->thisConfig['hideButtons'],1)));
00200 }
00201
00202
00203 $this->hide=array_intersect($all,$this->hide);
00204
00205 $this->hide=$this->detectUselessBar($this->hide,$all);
00206 }
00207
00213 function getLabels() {
00214 global $LANG,$LOCAL_LANG;
00215
00216 include (t3lib_extMgm::extPath('rte').'app/locallang.php');
00217
00218 $labels='';
00219 foreach($LOCAL_LANG['default'] as $key => $label) {
00220 $labels.= 'var '.$key.' = '.$LANG->JScharCode($LANG->getLL($key)).';'.chr(10);
00221 }
00222
00223 return $labels;
00224 }
00225
00231 function makeHeader() {
00232 $this->content='';
00233 $this->content.='
00234 <HTML>
00235 <HEAD>
00236 <script language="javascript" type="text/javascript">
00237
00238
00239 '.$this->getLabels().'
00240
00241 </script>
00242 <script language="javascript" type="text/javascript" src="rte.js"></script>
00243 <STYLE>
00244 body {margin:0pt;border:none;padding:0pt}
00245 #tbDBSelect {display:none;text-align:left;width: 100;margin-right: 1pt;margin-bottom: 0pt;margin-top: 0pt;padding: 0pt}
00246 #DBSelect, #idMode, .userButton {font:8pt arial}
00247 #DBSelect {width:100}
00248 #idMode {margin-top:0pt}
00249 .tbButton {text-align:left;margin:0pt 1pt 0pt 0pt;padding:0pt}
00250 #EditBox {position: relative}
00251 select { font-family: Verdana, Arial, Helvetica; font-size: 10px }
00252 textarea { font-family: Verdana, Arial, Helvetica; font-size: 10px}
00253 input { font-family: Verdana, Arial, Helvetica; font-size: 10px }
00254 </STYLE>
00255 <STYLE ID=skin>
00256 #EditBox {margin: 0px 0px 0px 0px}
00257 #tbUpRight, #tbUpLeft {width:110px}
00258 #idMode {background: '.$this->confValues['backgroundColor'].';margin-left:0px;padding:0pt}
00259 #idMode LABEL {color: black; font:bold 10px verdana; text-decoration: none}
00260 #tbTopBar {height:19px}
00261 #tbButtons, #tbContents {background: '.$this->confValues['backgroundColor'].';vertical-align: top}
00262 #tbContents {padding:0px 0px}
00263 #tbBottomBar {height:0px}
00264 </STYLE>
00265 <STYLE ID=defPopupSkin>
00266 #popup BODY {margin:0px;border-top:none}
00267 #popup .colorTable TR {height:6px}
00268 #popup .colorTable TD {width:6px;cursor:hand}
00269 #popup .colorTable, .CLASSES {font: 10px verdana;}
00270 #popup #header {width:100%}
00271 #popup #close {cursor:default;font:bold 8pt system;width:16px;text-align: center}
00272 #popup #content {padding:10pt}
00273 #popup TABLE {vertical-align:top}
00274 #popup .tabBody {border:1px black solid;border-top: none}
00275 #popup .tabItem, #popup .tabSpace {border-bottom:1px black solid;border-left:1px black solid}
00276 #popup .tabItem {border-top:1px black solid;font:10pt arial,geneva,sans-serif;}
00277 #popup .currentColor {width:20px;height:20px; margin: 0pt;margin-right:15pt;border:1px black solid}
00278 #popup .tabItem DIV {margin:3px;padding:0px;cursor: hand}
00279 #popup .tabItem DIV.disabled {color: gray;cursor: default}
00280 #popup .selected {font-weight:bold}
00281 #popup .emoticon {cursor:hand}
00282 #popup .specialColors {color:black; font:10px verdana;}
00283 ';
00284
00285 if (is_array($this->RTEsetup['properties']['classes.'])) {
00286 reset($this->RTEsetup['properties']['classes.']);
00287 while(list($className,$conf)=each($this->RTEsetup['properties']['classes.'])) {
00288 $this->content.='#popup .CLASSES'.substr($className,0,-1).' {'.$conf['value']."} \n";
00289 }
00290 }
00291 $this->content.='
00292 </STYLE>
00293 <STYLE ID=popupSkin>
00294 #popup BODY {border: 1px black solid; background: '.$this->confValues['backgroundColor'].'}
00295 #popup #header {background:'.$this->confValues['steelBlue'].'; color: black}
00296 #popup #caption {text-align: left;font: bold 10px verdana}
00297 #popup .ColorTable, #popup #idList #idListTR TD#current {border: 1px black solid}
00298 #popup #idList TD{cursor: hand;border: 0px #F1F1F1 solid; background:'.$this->confValues['backgroundColor'].';}
00299 #idListTR TR{cursor: hand;background:'.$this->confValues['backgroundColor'].';}
00300 #popup #close {border: 1px black solid;cursor:hand;color: black;font: bold 10px verdana; margin-right: 3px;padding:0px 4px 2px}
00301 #popup #tableProps .tablePropsTitle {color:#006699;text-align:left;margin:0pt;border-bottom: 1px black solid;margin-bottom:5pt}
00302 #tableButtons, #tableProps {padding:5px}
00303 #popup #tableContents {height:175px}
00304 #popup #tableProps .tablePropsTitle, #popup #tableProps, #popup #tableProps TABLE {font: 10px verdana;}
00305 #popup #tableOptions {color: black; font:bold 10px verdana; padding:15pt 5pt; }
00306 #popup #puDivider {background:black;width:1px}
00307 #popup #content {margin: 0pt;padding:0pt 0pt 5pt 0pt}
00308 #popup #ColorPopup {width: 250px}
00309 #popup .block P,#popup .block H1,#popup .block H2,#popup .block H3,
00310 #popup .block H4, #popup .block H5,#popup .block H6,#popup .block PRE {margin:0pt;padding:0pt}
00311 #popup #customFont {font: 10px verdana;text-decoration:italic}
00312 #popup select { font-family: Verdana, Arial, Helvetica; font-size: 10px }
00313 #popup textarea { font-family: Verdana, Arial, Helvetica; font-size: 10px}
00314 #popup input { font-family: Verdana, Arial, Helvetica; font-size: 10px }
00315 </STYLE>
00316 <script language="javascript" type="text/javascript">
00317 var L_EMOTICONPATH_TEXT = "'.$this->siteUrl.'t3lib/gfx/emoticons/";
00318 var theEditor;
00319 window.onload = initEditor;
00320 var theBackGroundColor = "'.$this->confValues['backgroundColor'].'";
00321 ';
00322
00323 $this->content.='
00324 var BACK_PATH = "'.$GLOBALS['BACK_PATH'].'";
00325 function spitItOut() {
00326
00327 }
00328 function spitItIn() {
00329 self.parent.TBE_EDITOR_setRTEref(self,"'.$this->elementId.'",1);
00330
00331 }
00332 ';
00333
00334 $this->content.='
00335 function setButtons() {
00336 ';
00337 reset($this->hide);
00338 while(list(,$value)=each($this->hide)) {
00339 $this->content.='
00340 setToolbar("tb'.$value.'",0);';
00341 }
00342 $this->content.='
00343 }
00344 ';
00345 }
00346
00352 function JSout() {
00353 global $LANG;
00354
00355
00356
00357
00358 $JSout='';
00359
00360 $JSout.="var classes_style = new Array(); \n";
00361 $JSout.="var classes_label = new Array(); \n";
00362 $JSout.="var classes_noShow = new Array(); \n";
00363 if (is_array($this->RTEsetup['properties']['classes.'])) {
00364 reset($this->RTEsetup['properties']['classes.']);
00365 $cc=0;
00366 while(list($className,$conf)=each($this->RTEsetup['properties']['classes.'])) {
00367 $className = substr($className,0,-1);
00368 $JSout.= 'classes_style['.$cc."]=' .".$className." {'+unescape('".t3lib_div::rawUrlEncodeJS($conf['value'])."')+'}'; \n";
00369 $JSout.= "classes_label['".$className."']=".$LANG->JScharCode($LANG->sL($conf['name']))."; \n";
00370 $JSout.= "classes_noShow['".$className."']=".($conf['noShow']?1:0)."; \n";
00371 $cc++;
00372 }
00373 }
00374
00375 $JSout.="var colors_value = new Array(); \n";
00376 $JSout.="var colors_label = new Array(); \n";
00377 if (is_array($this->RTEsetup['properties']['colors.'])) {
00378 reset($this->RTEsetup['properties']['colors.']);
00379 while(list($cName,$conf)=each($this->RTEsetup['properties']['colors.'])) {
00380 $cName=substr($cName,0,-1);
00381 $JSout.= "colors_value['".$cName."']='".$conf['value']."'; \n";
00382 $JSout.= "colors_label['".$cName."']=".$LANG->JScharCode($LANG->sL($conf['name']))."; \n";
00383 }
00384 }
00385
00386 $JSout.="var fonts_value = new Array(); \n";
00387 $JSout.="var fonts_label = new Array(); \n";
00388 if (is_array($this->RTEsetup['properties']['fonts.'])) {
00389 reset($this->RTEsetup['properties']['fonts.']);
00390 while(list($fontName,$conf)=each($this->RTEsetup['properties']['fonts.'])) {
00391 $fontName=substr($fontName,0,-1);
00392 $JSout.= "fonts_value['".$fontName."']='".$conf['value']."'; \n";
00393 $JSout.= "fonts_label['".$fontName."']=".$LANG->JScharCode($LANG->sL($conf['name']))."; \n";
00394 }
00395 }
00396 $mainStyle_font=($this->thisConfig['mainStyle_font']?$this->thisConfig['mainStyle_font']:'Verdana');
00397
00398 $mainElements=array();
00399 $mainElements['P'] = 'margin-top:0px; margin-bottom:5px;'.$this->thisConfig['mainStyleOverride_add.']['P'];
00400 $elList=explode(',','H1,H2,H3,H4,H5,H6,PRE');
00401 while(list(,$elListName)=each($elList)) {
00402 if ($this->thisConfig['mainStyleOverride_add.'][$elListName]) $mainElements[$elListName]=$this->thisConfig['mainStyleOverride_add.'][$elListName];
00403 }
00404
00405 $JSout.="var main_elements_style = new Array(); \n";
00406 $addElementCode='';
00407 reset($mainElements);
00408 while(list($elListName,$elValue)=each($mainElements)) {
00409 $addElementCode.=$elListName.' {'.$elValue."}\n";
00410 $JSout.="main_elements_style['".$elListName."']=unescape('".rawurlencode($this->filterStyleEl($elValue,'color,font*'))."');\n";
00411 }
00412
00413 $styleCode = $this->thisConfig['mainStyleOverride'] ? $this->thisConfig['mainStyleOverride'] : '
00414 BODY {border: 1px black solid; border-top: none; margin : 2 2 2 2'.
00415 '; font-family:'.$mainStyle_font.
00416 '; font-size:'.($this->thisConfig['mainStyle_size']?$this->thisConfig['mainStyle_size']:'10px').
00417 '; color:'.($this->thisConfig['mainStyle_color']?$this->thisConfig['mainStyle_color']:'black').
00418 '; background-color:'.($this->thisConfig['mainStyle_bgcolor']?$this->thisConfig['mainStyle_bgcolor']:'white').
00419 ';'.$this->thisConfig['mainStyleOverride_add.']['BODY'].'}
00420 TD {font-family:Verdana; font-size:10px;'.$this->thisConfig['mainStyleOverride_add.']['TD'].'}
00421 DIV {margin-top:0px; margin-bottom:5px;'.$this->thisConfig['mainStyleOverride_add.']['DIV'].'}
00422 PRE {margin-top:0px; margin-bottom:5px;'.$this->thisConfig['mainStyleOverride_add.']['PRE'].'}
00423 OL {margin: 5px 10px 5px 30px;'.$this->thisConfig['mainStyleOverride_add.']['OL'].'}
00424 UL {margin: 5px 10px 5px 30px;'.$this->thisConfig['mainStyleOverride_add.']['UL'].'}
00425 BLOCKQUOTE {margin-top:0px; margin-bottom:0px;'.$this->thisConfig['mainStyleOverride_add.']['BLOCKQUOTE'].'}
00426 '.$addElementCode;
00427
00428 if (is_array($this->thisConfig['inlineStyle.'])) {
00429 $styleCode.=chr(10).implode(chr(10),$this->thisConfig['inlineStyle.']).chr(10);
00430 }
00431
00432 $JSout.='var inlineStyle = unescape("'.t3lib_div::rawUrlEncodeJS($styleCode).'");'.chr(10);
00433
00434 $JSout.="var conf_classesParagraph = '".$this->cleanList($this->thisConfig['classesParagraph'])."'; \n";
00435 $JSout.="var conf_classesCharacter = '".$this->cleanList($this->thisConfig['classesCharacter'])."'; \n";
00436 $JSout.="var conf_classesImage = '".$this->cleanList($this->thisConfig['classesImage'])."'; \n";
00437 $JSout.="var conf_classesTable = '".$this->cleanList($this->thisConfig['classesTable'])."'; \n";
00438 $JSout.="var conf_classesLinks = '".$this->cleanList($this->thisConfig['classesLinks'])."'; \n";
00439 $JSout.="var conf_classesTD = '".$this->cleanList($this->thisConfig['classesTD'])."'; \n";
00440 $JSout.="var conf_colors = '".$this->cleanList($this->thisConfig['colors'])."'; \n";
00441 $JSout.="var conf_fontFace = '".$this->cleanList($this->thisConfig['fontFace'])."'; \n";
00442 $JSout.="var conf_hidePStyleItems = '".$this->cleanList(strtoupper($this->thisConfig['hidePStyleItems']))."'; \n";
00443 $JSout.="var conf_hideFontFaces = '".$this->cleanList($this->thisConfig['hideFontFaces'])."'; \n";
00444 $JSout.="var conf_hideFontSizes = '".$this->cleanList($this->thisConfig['hideFontSizes'])."'; \n";
00445 $JSout.='var conf_disableColorPicker = '.($this->thisConfig['disableColorPicker']?1:0)."; \n";
00446 $JSout.="var conf_RTEtsConfigParams = '&RTEtsConfigParams=".rawurlencode($this->RTEtsConfigParams())."'; \n";
00447 $JSout.='var conf_enableRightClick = '.($this->thisConfig['disableRightClick']?0:1).";\n";
00448 $JSout.="var conf_fontSizeStyle = unescape('font-family:".rawurlencode($mainStyle_font)."');\n";
00449 $JSout.="var conf_NeutralStyle = 'font-family:Verdana,Arial; font-size:10; font-weight:normal; color:black;';\n";
00450 $JSout.='var conf_showExampleInPopups = '.($this->thisConfig['disablePCexamples']?0:1).";\n";
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462 $this->content.=$JSout;
00463 }
00464
00470 function main() {
00471 $this->content.='
00472 </script>
00473 </head>
00474 <body tabindex="-1" scroll="no" oncontextmenu="return false;" onselectstart="return false;" ondragstart="return false;" onscroll="return false;" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
00475 <div id="idEditor" style="visibility: hidden;">
00476 <table id="idToolbar" border="0" width="100%" cellspacing="0" cellpadding="0" onclick="edHidePopup();">
00477 <tr>
00478 <td id="tbContents"><script language="javascript" type="text/javascript">drawToolbar();</script></td>
00479 </tr>
00480 <tr><td bgcolor="black"><img src="clear.gif" width="1" height="1" alt="" /></td></tr>
00481 </table>
00482 <iframe src="" name="idPopup" style="height: 200px; left: 25px; margin-top: 8px; position: absolute; visibility: hidden; width: 200px; z-index: -1"></iframe>
00483 <iframe src="" id="EditBox" name="idEditbox" width="100%" height="100%" onfocus="edHidePopup();" onblur="spitItOut();"></iframe>
00484 <div id="tbmode"><script language="javascript" type="text/javascript">drawModeSelect('.$this->toggleHTML.');</script></div>
00485 </div>
00486 </body>
00487 </html>';
00488 }
00489
00495 function printContent() {
00496 echo $this->content;
00497 }
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00517 function RTEtsConfigParams() {
00518 $p = t3lib_BEfunc::getSpecConfParametersFromArray($this->specConf['rte_transform']['parameters']);
00519 return $this->elementParts[0].':'.$this->elementParts[1].':'.$this->elementParts[2].':'.$this->thePid.':'.$this->typeVal.':'.$this->tscPID.':'.$p['imgpath'];
00520 }
00521
00529 function detectUselessBar($hide,$all) {
00530 $show = array_diff($all,$hide);
00531 $items=array();
00532
00533 $c=0;
00534 reset($show);
00535 while(list(,$v)=each($show)) {
00536 $items[$c]['cur']=substr($v,0,3);
00537 $items[$c]['prev'] = $items[$c-1]['cur'];
00538 $items[$c-1]['next'] = $items[$c]['cur'];
00539 $c++;
00540 }
00541
00542 $c=0;
00543 $elAdded=0;
00544 reset($show);
00545 while(list(,$v)=each($show)) {
00546
00547 if ($items[$c]['cur']!='bar') $elAdded=1;
00548 if ($items[$c]['cur']=='bar' && ($items[$c]['next']=='bar' || $items[$c]['next']=='' || $items[$c]['prev']=='' || !$elAdded)) {
00549 $hide[]=$v;
00550 }
00551 $c++;
00552 }
00553 return $hide;
00554 }
00555
00562 function cleanList($str) {
00563 if (strstr($str,'*')) {
00564 $str = '*';
00565 } else {
00566 $str = implode(',',array_unique(t3lib_div::trimExplode(',',$str,1)));
00567 }
00568 return $str;
00569 }
00570
00578 function filterStyleEl($elValue,$matchList) {
00579 $matchParts = t3lib_div::trimExplode(',',$matchList,1);
00580 $styleParts = explode(';',$elValue);
00581 $nStyle=array();
00582 while(list($k,$p)=each($styleParts)) {
00583 $pp = t3lib_div::trimExplode(':',$p);
00584 if ($pp[0]&&$pp[1]) {
00585 reset($matchParts);
00586 while(list(,$el)=each($matchParts)) {
00587 $star=substr($el,-1)=='*';
00588 if (!strcmp($pp[0],$el) || ($star && t3lib_div::isFirstPartOfStr($pp[0],substr($el,0,-1)) )) {
00589 $nStyle[]=$pp[0].':'.$pp[1];
00590 } else unset($styleParts[$k]);
00591 }
00592 } else {
00593 unset($styleParts[$k]);
00594 }
00595 }
00596 return implode('; ',$nStyle);
00597 }
00598 }
00599
00600
00601 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rte/app/rte.php']) {
00602 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rte/app/rte.php']);
00603 }
00604
00605
00606
00607
00608
00609
00610
00611
00612 $SOBE = t3lib_div::makeInstance('SC_rte_rte');
00613 $SOBE->init();
00614 $SOBE->makeHeader();
00615 $SOBE->JSout();
00616 $SOBE->main();
00617 $SOBE->printContent();
00618 ?>