Extension talk:TinyMCE MW

From MediaWiki.org

Jump to: navigation, search

Contents

[edit] Code TinyMCE_MW.php

Click edit THEN copy and paste. If you don't, special characters will convert and the extension will not work.

<?php
/*
TinyMCE_MW.php - MediaWiki extension - version 0.5.4
        by Joseph P. Socoloski III
        If you already have pages written in Mediawiki wikitext, this extension enables
        Moxiecode's TinyMCE and does not break Mediawiki wikitext. Also, TinyMCE_MW 
        has a new 'msword' configuration theme.  msword follows the MS Office 2003
        toolbar layout. Call TinyMCE's simple, advanced and a built-in msword theme from 
        LocalSettings.php.  TinyMCE_MW was built and tested on Mediawiki-1.10.0.  
        Successfully tested CategoryTree extension for compatibility with new tags.
		-Improved custom tag parsing for repeat and categorytree; added sql2wiki

        References:     http://meta.wikimedia.org/wiki/Image:Wiki-refcard.png
                                http://meta.wikimedia.org/wiki/Cheatsheet
                                http://meta.wikimedia.org/wiki/Help:HTML_in_wikitext
                                http://wiki.moxiecode.com/index.php/TinyMCE:Index
                                http://www.mediawiki.org/wiki/Extension:CategoryTree
                                http://www.mediawiki.org/wiki/Manual:Parameters_to_index.php
                                
        NOTE:To change the default font and size for TinyMCE, add these two lines to your
        theme's editor_content.css body{} section:
        font-family: Arial;
        font-size: 14px;
        NOTE:To decrease the space between lines after a carriage return place this line 
        to your theme's editor_content.css:
        p {margin: 0; padding: 0;}           
BUGS:   - Does not support Wikitext Bullet list
                - Does not support Wikitext Numbered list
                - Does not support Wikitext Redirect to another article
                - Does not support Wikitext Tables
TODO:   - Enable Ajax usage
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
*/


if( !defined( 'MEDIAWIKI' ) ) {
  die();
}

$wgExtensionCredits['other'][] = array(

        "name" => "TinyMCE MW extension",
        "author" => "Joseph P. Socoloski III",
        "version" => "0.5.4",
        "url" => "http://www.mediawiki.org/wiki/Extension:TinyMCE_MW",
        "description" => "Easily implement Moxiecode's TinyMCE into MediaWiki"
 );

# REGISTER HOOKS
$wgHooks['ParserBeforeStrip'][]                 = 'wfTinymceParserCut';
$wgHooks['ParserAfterTidy'][]                   = 'wfTinymceParserPaste';
$wgHooks['ArticleAfterFetchContent'][] 			= 'wfCheckBeforeEdit';
$wgHooks['EditPage::showEditForm:initial'][]    = 'wfTinymceAddScript';

##Process the raw wikidb code before any internal processing is applied
function wfTinymceParserCut ($q, $text) {

        global $wgTitle;
        global $wgTempText, $wgUseTinymce;
        
        $ns_allowed = true;
        $ns = $wgTitle->getNamespace();
        
        #if (in_array($ns, $wgexcludedNamespaces)) $ns_allowed = false;
        $wgTempText = $text;#get text
        #$text = "";
        
        return true;
}

##Process the wgTempText code (wikitext and html) and reformat it into html friendly $text
function wfTinymceParserPaste ($q, $text) {

        global $wgOut, $wgTitle, $wgParser;
        global $wgTempText, $wgTinymceToken, $wgUseTinymce;
        
        $List = array();
        
        $ns_allowed = true;
        $ns = $wgTitle->getNamespace();
        
        # TinyMCE can NOT be enabled for any pages that have data tags
        if ($ns_allowed and $wgUseTinymce) {
        
                $tinymcetext = $wgTempText; 
                
                ## EXTENSION TAGS | ADD HERE ##
				#Custom tags may ONLY be entered in the regular editor NOT the HTML Source editor
				#Allow_inputbox_tags
				while (preg_match("|<inputbox>(.*?)</inputbox>|is", $tinymcetext, $a)) {
				 	$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
				 	$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
					$r = preg_replace("|<br.*?>|i", "\n", $r);
					$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
				}
				#Allow_repeat_tags
				while (preg_match("|<repeat.*?>(.*?)</repeat>|is", $tinymcetext, $a)) {
				 	$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
				 	$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
					 #<repeat table="Service_Center_Table" sort="sc_num"></repeat>
					$r = preg_replace("|<br.*?>|i", "\n", $r);
					$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
				}
				#Allow_categorytree_tags
				while (preg_match("|<categorytree.*?>(.*?)</categorytree>|is", $tinymcetext, $a)) {
				 	$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
				 	$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
					$r = preg_replace("|<br.*?>|i", "\n", $r);
					$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
				}
				#Allow_includeonlyx_tags
				while (preg_match("|<includeonly>(.*?)</includeonly>|is", $tinymcetext, $a)) {
				 	$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
				 	$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
					$r = preg_replace("|<br.*?>|i", "\n", $r);
					$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
				}
				#Allow_repeat_tags
				while (preg_match("|<sql2wiki.*?>(.*?)</sql2wiki>|is", $tinymcetext, $a)) {
				 	$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
				 	$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
					 #<repeat table="Service_Center_Table" sort="sc_num"></repeat>
					$r = preg_replace("|<br.*?>|i", "\n", $r);
					$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
				}
                ## EXTENSION TAGS END ##
                
                #Allow_a_tags
                        $i = 0;
                        $ta = md5("aopen");
                        while (preg_match("|(<a.*?>)|i", $tinymcetext, $a)) {
                                $j = $ta."_".md5($i);
                                $List[$j]["content"] = $a[0];
                                $List[$j]["index"] = $j;
                                $tinymcetext = str_replace($a[0], $j, $tinymcetext);
                                $i++;
                        }
                        $i = 0;
                        $ta = md5("aclose");
                        while (preg_match("|(</a>)|i", $tinymcetext, $a)) {
                                $j = $ta."_".md5($i);
                                $List[$j]["content"] = $a[0];
                                $List[$j]["index"] = $j;
                                $tinymcetext = str_replace($a[0], $j, $tinymcetext);
                                $i++;
                        }
        
                #Allow_img_tags
                        $i = 0;
                        $timg = md5("img");
                        while (preg_match("|(<img[^>]*?/>)|i", $tinymcetext, $a)) {
                                $j = $timg."_".md5($i);
                                $List[$j]["content"] = $a[0];
                                $List[$j]["index"] = $j;
                                $tinymcetext = str_replace($a[0], $j, $tinymcetext);
                                $i++;
                        }

                ## MEDIAWIKI WIKITEXT HANDLING ##
                #'''''bold and italic'''''
                        while (preg_match("|'''''.*?'''''|is", $tinymcetext, $a)) {
                                $value = implode(",", $a);
                                $value = str_replace("'''''", "", $value);
                                $r = preg_replace("|'''''.*?'''''|is", "<i><strong>".$value."</strong></i>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                #'''bold'''
                        while (preg_match("|'''.*?'''|is", $tinymcetext, $a)) {
                                $value = implode(",", $a);
                                $value = str_replace("'''", "", $value);
                                $r = preg_replace("|'''.*?'''|is", "<strong>".$value."</strong>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                #''italic''
                        while (preg_match("|''.*?''|is", $tinymcetext, $a)) {
                                $value = implode(",", $a);
                                $value = str_replace("''", "", $value);
                                $r = preg_replace("|''.*?''|is", "<i>".$value."</i>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                        
                #=====level 4=====
                        while (preg_match("|=====.*?=====|is", $tinymcetext, $a)) {
                                $value = implode(",", $a);
                                $value = str_replace("=====", "", $value);
                                $r = preg_replace("|=====.*?=====|is", "<h5>".$value."</h5>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                #====level 3====
                        while (preg_match("|====.*?====|is", $tinymcetext, $a)) {
                                $value = implode(",", $a);
                                $value = str_replace("====", "", $value);
                                $r = preg_replace("|====.*?====|is", "<h4>".$value."</h4>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                #===level 2===
                        while (preg_match("|===.*?===|is", $tinymcetext, $a)) {
                                $value = implode(",", $a);
                                $value = str_replace("===", "", $value);
                                $r = preg_replace("|===.*?===|is", "<h3>".$value."</h3>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                #==heading==
                        while (preg_match("|==.*?==|is", $tinymcetext, $a)) {
                                $value = implode(",", $a);
                                $value = str_replace("==", "", $value);
                                $r = preg_replace("|==.*?==|is", "<h2>".$value."</h2>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                #==heading 1==
                ## Does not support <h1> tags because "|=.*?=|is" grabs too much
                #---- horizontal line
                        while (preg_match("|----|is", $tinymcetext, $a)) {
                                $r = preg_replace("|----|is", "<hr>", $a[0]);
                                $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
                        }
                ## MEDIAWIKI WIKITEXT HANDLING END ##
                
		$tagList = array("pre", "math", "gallery", "nowiki", "html");
		foreach($tagList as $tag) {
			while (preg_match("|<($tag.*?)>(.*?)</$tag>|is", $tinymcetext, $a)) {	
				$r = preg_replace("|<br.*?>|i", "", $a[0]);
				$r = preg_replace("| |i", " ", $r);
				$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
			}
		}

		foreach($q->mTagHooks as $tag => $func) {
			while (preg_match("|<($tag.*?)>(.*?)</$tag>|is", $tinymcetext, $a)) {	
				$r = preg_replace("|<br.*?>|i", "", $a[0]);
				$r = preg_replace("| |i", " ", $r);
				$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
			}
		}
                $state = new StripState;
                $x =& $state;
                $tinymcetext = $q->strip($tinymcetext, $x);
                # optional remove <p></p> 
                #$tinymcetext = preg_replace('/<p[^>]*>/','',$tinymcetext);//Remove the start <p> or <p attr="">
#                $tinymcetext = preg_replace('/<\/p>/', '<br />', $tinymcetext); // Replace the end
				#$tinymcetext = preg_replace('/<\/p>/', '\n', $tinymcetext); // Replace the end
				#$tinymcetext = preg_replace("|<br/>|i", "\n", $tinymcetext);
                $tinymcetext = preg_replace("/<\/?tbody>/i","", $tinymcetext);
                $tinymcetext = preg_replace("/$wgTinymceToken/i","", $tinymcetext); 
                $tinymcetext = Sanitizer::removeHTMLtags( $tinymcetext, array( &$q, 'attributeStripCallback' ) );
                $tinymcetext = $q->replaceVariables($tinymcetext);
                $tinymcetext = $q->stripToc( $tinymcetext );         
                $tinymcetext = $q->replaceInternalLinks( $tinymcetext );
                $tinymcetext = $q->replaceExternalLinks( $tinymcetext );
                $tinymcetext = str_replace($q->mUniqPrefix."NOPARSE", "", $tinymcetext);
                $tinymcetext = $q->doMagicLinks( $tinymcetext );
                $tinymcetext = $q->formatHeadings( $tinymcetext, true );
                $q->replaceLinkHolders( $tinymcetext );
                $tinymcetext = $q->unstripNoWiki( $tinymcetext, $state );
                $tinymcetext = $q->unstrip($tinymcetext, $state);
        
                foreach($List as $item) {
                        $tinymcetext = str_replace($item["index"], $item["content"], $tinymcetext);
                        $i++;
                }
                
                $text = $tinymcetext;
        }
        return true;
}


function wfTinymceAddScript ($q) { 

        global $wgOut, $wgTitle, $wgScriptPath, $wgMyWikiURL; 
        global $wgTempText, $wgTinymceDir, $wgTinymceTheme, $wgExt_valid_elements, $wgUseTinymce;

        $wgTinymceDir = "tinymce";
        $ns_allowed = true;
        $ns = $wgTitle->getNamespace();

        if ($ns_allowed && $wgUseTinymce)
        {
         	# following from http://rorlach.de/mediawiki/index.php/Toggle_TinyMCE
			$wgOut->addScript("<script language=\"javascript\" type=\"text/javascript\">
var tinyMCEmode = true;
function toggleEditorMode(wpTextbox1,eleToggleLink) {
    try {
        if(tinyMCEmode) {
            tinyMCE.execCommand(\"mceRemoveControl\", false, wpTextbox1);
            tinyMCEmode = false;
            if(eleToggleLink)
                eleToggleLink.innerHTML    =    \"Enable Advanced Editor\";
        } else {
            tinyMCE.execCommand(\"mceAddControl\", false, wpTextbox1);
            tinyMCEmode = true;
            if(eleToggleLink)
                eleToggleLink.innerHTML    =    \"Disable Advanced Editor\";
        }
    } catch(e) {
        //error handling
    }
}
</script>");

        if (($wgTinymceTheme == "simple")){
                $wgOut->addScript( "<script language=\"javascript\" type=\"text/javascript\" src=\"$wgScriptPath/extensions/$wgTinymceDir/jscripts/tiny_mce/tiny_mce.js\"></script><script language=\"javascript\" type=\"text/javascript\">tinyMCE.init({
        mode : \"textareas\",
        theme : \"simple\",
        convert_newlines_to_brs : false,
        apply_source_formatting : true,
        relative_urls : false,
        remove_script_host : true,
		document_base_url : \"$wgMyWikiURL\",
        extended_valid_elements : \"$wgExt_valid_elements\"
});</script>" );
} elseif(($wgTinymceTheme == "advanced")) {
        $wgOut->addScript( "<script language=\"javascript\" type=\"text/javascript\" src=\"$wgScriptPath/extensions/$wgTinymceDir/jscripts/tiny_mce/tiny_mce.js\"></script><script language=\"javascript\" type=\"text/javascript\">tinyMCE.init({
        mode : \"textareas\",
        theme : \"advanced\",
        convert_newlines_to_brs : false,
        apply_source_formatting : true,
        relative_urls : false,
        remove_script_host : true,
		document_base_url : \"$wgMyWikiURL\",
        extended_valid_elements : \"$wgExt_valid_elements\"
});</script>" );
}elseif(($wgTinymceTheme == "msword")) {
        $wgOut->addScript("<script language=\"javascript\" type=\"text/javascript\" src=\"$wgScriptPath/extensions/$wgTinymceDir/jscripts/tiny_mce/tiny_mce.js\"></script><script language=\"javascript\" type=\"text/javascript\">tinyMCE.init({
        mode : \"textareas\",
        theme : \"advanced\",
        extended_valid_elements : \"$wgExt_valid_elements\",
        convert_newlines_to_brs : false,
        apply_source_formatting : true,
        relative_urls : false,
        remove_script_host : true,
		document_base_url : \"$wgMyWikiURL\",
        plugins : \"style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras\",
        theme_advanced_buttons1 : \"newdocument,save,|,print,|,iespell,|cut,copy,paste,pastetext,pasteword,|,undo,redo,|,link,unlink,image,hr,anchor,code,|,search,replace,|,tablecontrols,|,help\",
        theme_advanced_buttons2 : \"styleselect,formatselect,fontselect,fontsizeselect,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,|,outdent,indent,cleanup,backcolor,forecolor,removeformat\",
        theme_advanced_buttons3 : \"insertdate,inserttime,|,sub,sup,|,charmap,emotions,media,|,ltr,rtl,|,fullscreen\",
        theme_advanced_toolbar_location : \"top\",
        theme_advanced_toolbar_align : \"left\"
});</script>");
}else{$wgOut->addScript("**TINYMCE NOT ENABLED: FIX wgTinymceTheme**<script language=\"javascript\" type=\"text/javascript\"></script>" );}
		#Since editing add the button
		$wgOut->addHTML("<p align=\"right\"><a id=\"toggleLink\" href=\"#\" title=\"toggle TinyMCE\" onclick=\"toggleEditorMode('wpTextbox1',this);\">Hide Editor</a></p>");
}
else{$wgOut->addScript("<script language=\"javascript\" type=\"text/javascript\"></script>" ); $wgUseTinymce = true; }
        return true;
}

# Check existing article for any tags we don't want TinyMCE parsing...
function wfCheckBeforeEdit ($q, $text) { 
	global $wgUseTinymce;
	
	if (preg_match("|<(data.*?)>(.*?)</data>|is", $text, $a)) {
		$wgUseTinymce = false;
	}
	elseif(preg_match("|<(data.*?)>(.*?)</data>|is", $text, $a)) {
		$wgUseTinymce = false;}
	else{$wgUseTinymce = true;}
	return true;
}

?>


[edit] Upgrade Log

[edit] 6/24/07 v0.2.1

  • Misc. fixes

[edit] 6/25/07 v0.3.0

  • Fixed TinyMCE_MW to work with inputbox extension.
  • Section now for custom extension tags.

[edit] 6/26/07 v0.4.0

  • Updated inputbox handler to fix 'p /p' tags
  • Does not support wikitext h1 tags because "|=.*?=|is" grabs too much.
  • Support toggling. Enable and Disable TinyMCE toolbar by a link in upper right corner of editpage.

[edit] 6/27/07 v0.4.1

  • Set 'convert_newlines_to_brs : false' ; it was inserting new br tags on each re-edit

[edit] 6/28/07 v0.4.3

  • WikiDB tag support. Disables TinyMCE before editing any articles with WikiDB tags.

[edit] 7/1/07 v0.5.3

  • Added better link support. Added relative_url, remove_script_host, document_base_url

[edit] 9/20/07 v0.5.4

  • Modified #Allow_repeat_tagsm and #Allow_categorytree_tags replacements

[edit] Error.

Fatal error: Cannot instantiate non-existent class: stripstate in /home/atuaesco/public_html/extensions/TinyMCE_MW.php on line 237 I have this error when i try to edit a page

Try version 0.5.4 --JoeSox 18:33, 20 September 2007 (UTC)

[edit] Slight fix

I use a wiki with quite a lot of rewriting happening. In my case I need to be able to set $wgTinymceDir from my LocalSettings.php. This small modification makes this possible. Line:283

        if(!isset($wgTinymceDir)) $wgTinymceDir = "tinymce";

--Rob 02:39, 4 October 2007 (UTC)

[edit] The new bugfix 0.5.4 has trouble with Extension:CategoryTree

If I turn TinyMCE_MW on, end save an article with the <categorytree>-tag into the Editorbox (makes no difference if "hide editor" is used), then I get this error:

Fatal error: Maximum execution time of 30 seconds exceeded in /srv/www/htdocs/wiki/extensions/TinyMCE_MW.php on line 119

This is on line 119 of TinyMCE_MW.php:

 $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()

With your earlier version 0.5.3 this doesn't appear, so it seams to cause a bug and not fix. By comparation of these version there are big differences between the lines around 119, especialy this looks a little bit supecious: New in 0.5.4:

  #Allow_categorytree_tags
  while (preg_match("|<categorytree.*?>(.*?)</categorytree>|is", $tinymcetext, $a)) {
       ...  

Old code in 0.5.3:

  #Allow_categorytree_tags
  while (preg_match("|&lt;categorytree&gt;(.*?)&lt;/categorytree&gt;|is", $tinymcetext, $a)) { 
       ...

We now rollback to 0.5.3 but I'll be greatefull if this plugin will improved in future.

Regards -Stefan

79.211.199.93 12:02, 4 October 2007 (UTC)

[edit] mediawiki 1.12.0

Does anyone have this installed on mediawiki version 1.12.0? I tried following the directions over here: TinyMCE_MW.

Setup: MW 1.12 | Windows 2003 w/ IIS. | MYSQL 5.x | PHP 5.25

But i had no luck, i got the following error:

Internal error

Parser::replaceVariables called using the old argument format

Backtrace:

#0 W:\Wiki\mediawiki-1.12.0\includes\Parser.php(4526): Parser->replaceVariables('', Array)
#1 [internal function]: Parser->attributeStripCallback('', Array)
#2 W:\Wiki\mediawiki-1.12.0\includes\Sanitizer.php(479): call_user_func_array(Array, Array)
#3 W:\Wiki\mediawiki-1.12.0\extensions\TinyMCE_MW.php(255): Sanitizer::removeHTMLtags('<big><strong>Me...', Array)
#4 [internal function]: wfTinymceParserPaste(Object(Parser), '<p><big><b>Medi...')
#5 W:\Wiki\mediawiki-1.12.0\includes\Hooks.php(113): call_user_func_array('wfTinymceParser...', Array)
#6 W:\Wiki\mediawiki-1.12.0\includes\Parser.php(432): wfRunHooks('ParserAfterTidy', Array)
#7 W:\Wiki\mediawiki-1.12.0\includes\Article.php(3174): Parser->parse('<big>'''MediaWi...', Object(Title), Object(ParserOptions), true, true, 8)
#8 W:\Wiki\mediawiki-1.12.0\includes\Article.php(821): Article->outputWikiText('<big>'''MediaWi...')
#9 W:\Wiki\mediawiki-1.12.0\includes\Wiki.php(390): Article->view()
#10 W:\Wiki\mediawiki-1.12.0\includes\Wiki.php(48): MediaWiki->performAction(Object(OutputPage), Object(Article), Object(Title), Object(User), Object(WebRequest))
#11 W:\Wiki\mediawiki-1.12.0\index.php(90): MediaWiki->initialize(Object(Title), Object(OutputPage), Object(User), Object(WebRequest))
#12 {main}

Mlong212 05:29, 20 April 2008 (CEST)

You need to change the following line in TinyMCE_MW.php (~line 255)

$tinymcetext = Sanitizer::removeHTMLtags( $tinymcetext, array( &$q, 'attributeStripCallback' ) );

to the following

$tinymcetext = Sanitizer::removeHTMLtags( $tinymcetext, 'attributeStripCallback', array( &$q ) );

Very close to working! The above change allowed me in to the main page without halting on error, however:

  1. Additional html code is shown on everything & the page layout is not as it was (without even editing yet)
  2. When trying to edit a page it displays the error: PHP Fatal Error: Maximum execution time of 30 seconds exceeded in (filepath)\extensions\TinyMCE_MW.php on line XXX
    1. XXX because it is different each time though it does seem to hit on a line containing: $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()

[edit] Cannot modify header information

I got several warnings like
"Warning: Cannot modify header information - headers already sent by [...]"

my solution:
"eliminate additional whitespace before and after the <php> and </php> tags in the TinyMCE_MW.php file" (http://tinymce.moxiecode.com/punbb/viewtopic.php?id=8233) which was for me to delete the tags:

<code>  and
<pre>

by Magnus Rode


[edit] All's well in 1.12 except...

Have TinyMCE_MW.php working in 1.12 but <pre> tags are displaying as:

UNIQ229ef7f677e8689b-pre-00000004-QINU

If I remove the following line from TinyMCE_MW.php:

$tinymcetext = $q->replaceVariables($tinymcetext);

..the <pre> tags then work

...but {{templates}} are not parsed.

So there's something in 1.12 that doesn't appreciate replaceVariables when parsing <pre> tags.

In Eric Hartwell's Technotes he has a similar problem caused by recursively calling the parse function in parser.php.

It seems TinyMCE_MW.php may be flawed following changes to MediaWiki's parsing since 1.10.

Anyone have any suggestions as to how to fix the extension for 1.12?

--Nigelm 20:39, 26 May 2008 (UTC)

Personal tools