count[$m])) {
$this->count[$m] = 0;
}
$this->count[$m]++;
return true;
}
function onMonoBookTemplateToolboxEnd() {
if ($this->debug) {
print_r($this->count);
}
}
private function getExcludedNamespaces() {
global $wgUser,$wgDefaultUserOptions, $wgFCKEditorExcludedNamespaces;
if ( is_null( $this->excludedNamespaces ) ) {
$this->excludedNamespaces = array();
foreach ( self::$nsToggles as $toggle ) {
$default = isset($wgDefaultUserOptions[$toggle]) ? $wgDefaultUserOptions[$toggle] : "";
if ( $wgUser->getOption( $toggle, $default) ) {
$this->excludedNamespaces[] = constant(strtoupper(str_replace("riched_disable_", "", $toggle)));
}
}
/*
If this site's LocalSettings.php defines Namespaces that shouldn't use the FCKEditor (in the #wgFCKexcludedNamespaces array), those excluded
namespaces should be combined with those excluded in the user's preferences.
*/
if (!empty($wgFCKEditorExcludedNamespaces) && is_array($wgFCKEditorExcludedNamespaces)) {
$this->excludedNamespaces = array_merge($wgFCKEditorExcludedNamespaces, $this->excludedNamespaces);
}
}
return $this->excludedNamespaces;
}
public function onLanguageGetMagic(&$magicWords, $langCode) {
$magicWords['NORICHEDITOR'] = array( 0, '__NORICHEDITOR__' );
return true;
}
public function onParserBeforeInternalParse(&$parser, &$text, &$strip_state) {
MagicWord::get( 'NORICHEDITOR' )->matchAndRemove( $text );
return true;
}
public function onEditPageShowEditFormFields($pageEditor, $wgOut) {
global $wgUser, $wgFCKEditorIsCompatible, $wgTitle, $wgVersion;
/*
If FCKeditor extension is enabled, BUT it shouldn't appear (because it's disabled by user, we have incompatible browser etc.)
We must do this trick to show the original text as WikiText instead of HTML when conflict occurs
*/
if ( (!$wgUser->getOption( 'showtoolbar' ) || $wgUser->getOption( 'riched_disable' ) || !$wgFCKEditorIsCompatible) ||
in_array($wgTitle->getNamespace(), $this->getExcludedNamespaces()) || !($this->showFCKEditor & RTE_VISIBLE) ||
false !== strpos($pageEditor->textbox1, "__NORICHEDITOR__")
) {
if ($pageEditor->isConflict) {
$pageEditor->textbox1 = $pageEditor->getWikiContent();
}
}
/*
If FCKeditor extension is enabled, and it should appear
We must do this trick to show HTML instead of the original text when conflict occurs
This hack is only needed for MW 1.11 and below
*/
else if (version_compare("1.12", $wgVersion, ">")) {
if ($pageEditor->isConflict) {
$options = new FCKeditorParserOptions();
$options->setTidy(true);
$parser = new FCKeditorParser();
$parser->setOutputType(OT_HTML);
$pa = $parser->parse($pageEditor->textbox1, $pageEditor->mTitle, $options);
$pageEditor->textbox1 = $pa->mText;
}
}
return true;
}
public function onEditPageBeforeConflictDiff($pageEditor, $wgOut) {
global $fckPageEditor, $wgRequest;
/*
Show WikiText instead of HTML when there is a conflict
http://dev.fckeditor.net/ticket/1385
*/
$pageEditor->textbox2 = $wgRequest->getVal( 'wpTextbox1' );
$pageEditor->textbox1 = $pageEditor->getWikiContent();
return true;
}
public function onParserBeforeStrip(&$parser, &$text, &$stripState) {
$text = $parser->strip( $text, $stripState );
return true;
}
public function onSanitizerAfterFixTagAttributes($text, $element, &$attribs) {
$text = preg_match_all("/Fckmw\d+fckmw/", $text, $matches);
if (!empty($matches[0][0])) {
global $leaveRawTemplates;
if (!isset($leaveRawTemplates)) {
$leaveRawTemplates = array();
}
$leaveRawTemplates = array_merge($leaveRawTemplates, $matches[0]);
$attribs = array_merge($attribs, $matches[0]);
}
return true;
}
public function registerHooks() {
global $wgHooks, $wgExtensionFunctions, $wgVersion;
$wgHooks['UserToggles'][] = array($this, 'onUserToggles');
$wgHooks['MessagesPreLoad'][] = array($this, 'onMessagesPreLoad');
$wgHooks['ParserAfterTidy'][] = array($this, 'onParserAfterTidy');
$wgHooks['EditPage::showEditForm:initial'][] = array($this, 'onEditPageShowEditFormInitial');
$wgHooks['EditPage::showEditForm:fields'][] = array($this, 'onEditPageShowEditFormFields');
$wgHooks['EditPageBeforePreviewText'][] = array($this, 'onEditPageBeforePreviewText');
if (version_compare("1.14alpha", $wgVersion, "<=")) {
$wgHooks['ParserBeforeStrip'][] = array($this, 'onParserBeforeStrip');
}
$wgHooks['EditPagePreviewTextEnd'][] = array($this, 'onEditPagePreviewTextEnd');
$wgHooks['CustomEditor'][] = array($this, 'onCustomEditor');
$wgHooks['LanguageGetMagic'][] = array($this, "onLanguageGetMagic");
$wgHooks['ParserBeforeInternalParse'][] = array($this, "onParserBeforeInternalParse");
$wgHooks['EditPageBeforeConflictDiff'][] = array($this, 'onEditPageBeforeConflictDiff');
$wgHooks['SanitizerAfterFixTagAttributes'][] = array($this, 'onSanitizerAfterFixTagAttributes');
if ($this->debug) {
/*
This is just an array of all available hooks, useful for debugging and learning
Add here all new hooks
*/
$opcje = array('ArticleSave',
'ArticleInsertComplete', 'ArticleSaveComplete', 'TitleMoveComplete', 'ArticleProtect', 'ArticleProtectComplete', 'ArticleDelete', 'ArticleDeleteComplete', 'AlternateEdit', 'ArticleFromTitle', 'ArticleAfterFetchContent',
'ArticlePageDataBefore', 'ArticlePageDataAfter', 'ParserBeforeStrip', 'ParserAfterStrip', 'ParserBeforeInternalParse', 'InternalParseBeforeLinks', 'ParserBeforeTidy', 'ParserAfterTidy', 'ParserClearState', 'ParserGetVariableValueSwitch',
'ParserGetVariableValueTs', 'ParserGetVariableValueVarCache', 'OutputPageBeforeHTML', 'OutputPageParserOutput', 'CategoryPageView', 'PageRenderingHash', 'ArticleViewHeader', 'ArticleViewRedirect', 'editSectionLinkForOther', 'editSectionLink',
'AutoAuthenticate', 'UserLoginComplete', 'UserLogout', 'UserLogoutComplete', 'userCan', 'WatchArticle', 'WatchArticleComplete', 'UnwatchArticle', 'UnwatchArticleComplete', 'MarkPatrolled',
'MarkPatrolledComplete', 'EmailUser', 'EmailUserComplete', 'UploadVerification', 'UploadComplete', 'SpecialMovepageAfterMove', 'SpecialSearchNogomatch', 'ArticleEditUpdateNewTalk', 'UserRetrieveNewTalks', 'UserClearNewTalkNotification',
'ArticlePurge', 'SpecialPageGetRedirect', 'SpecialPageExecuteBeforeHeader', 'SpecialPageExecuteBeforePage', 'SpecialPageExecuteAfterPage', 'SpecialVersionExtensionTypes', 'SpecialPage_initList', 'UploadForm:initial', 'UploadForm:BeforeProcessing', 'AddNewAccount',
'AbortNewAccount', 'BlockIp', 'BlockIpComplete', 'UserRights', 'GetBlockedStatus', 'LogPageActionText', 'LogPageLogHeader', 'LogPageLogName', 'LogPageValidTypes', 'BeforePageDisplay',
'MonoBookTemplateToolboxEnd', 'PersonalUrls', 'SkinTemplateContentActions', 'SkinTemplateTabs', 'SkinTemplatePreventOtherActiveTabs', 'SkinTemplateSetupPageCss', 'SkinTemplateBuildContentActionUrlsAfterSpecialPage', 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink', 'UserCreateForm', 'UserLoginForm',
'ArticleEditUpdatesDeleteFromRecentchanges', 'EditFilter', 'EditPage::showEditForm:initial', 'GetInternalURL', 'GetLocalURL', 'GetFullURL', 'LanguageGetMagic', 'MagicWordMagicWords', 'MagicWordwgVariableIDs', 'MessagesPreLoad',
'ParserTestParser', 'SpecialContributionsBeforeMainOutput', 'UnknownAction', 'wgQueryPages', 'DisplayOldSubtitle', 'LoadAllMessages', 'RecentChange_save', 'UserToggles', 'BadImage', 'DiffViewHeader',
'EditFormPreloadText', 'EmailConfirmed', 'FetchChangesList', 'MathAfterTexvc', 'SiteNoticeAfter', 'SiteNoticeBefore');
foreach ($opcje as $o) {
$wgHooks[$o][] = array($this, str_replace(":", "_", $o));
}
}
}
public function onCustomEditor(&$article, &$user) {
global $wgRequest, $mediaWiki;
$action = $mediaWiki->getVal('Action');
$internal = $wgRequest->getVal( 'internaledit' );
$external = $wgRequest->getVal( 'externaledit' );
$section = $wgRequest->getVal( 'section' );
$oldid = $wgRequest->getVal( 'oldid' );
if( !$mediaWiki->getVal( 'UseExternalEditor' ) || $action=='submit' || $internal ||
$section || $oldid || ( !$user->getOption( 'externaleditor' ) && !$external ) ) {
$editor = new FCKeditorEditPage( $article );
$editor->submit();
} elseif( $mediaWiki->getVal( 'UseExternalEditor' ) && ( $external || $user->getOption( 'externaleditor' ) ) ) {
$mode = $wgRequest->getVal( 'mode' );
$extedit = new ExternalEdit( $article, $mode );
$extedit->edit();
}
return false;
}
public function onEditPageBeforePreviewText(&$editPage, $previewOnOpen) {
global $wgUser, $wgRequest;
if ($wgUser->getOption( 'showtoolbar' ) && !$wgUser->getOption( 'riched_disable' ) && !$previewOnOpen ) {
$this->oldTextBox1 = $editPage->textbox1;
$editPage->importFormData( $wgRequest );
}
return true;
}
public function onEditPagePreviewTextEnd(&$editPage, $previewOnOpen) {
global $wgUser;
if ($wgUser->getOption( 'showtoolbar' ) && !$wgUser->getOption( 'riched_disable' ) && !$previewOnOpen ) {
$editPage->textbox1 = $this->oldTextBox1;
}
return true;
}
public function onParserAfterTidy(&$parser, &$text) {
global $wgUseTeX, $wgUser, $wgTitle, $wgFCKEditorIsCompatible;
if (!$wgUser->getOption( 'showtoolbar' ) || $wgUser->getOption( 'riched_disable' ) || !$wgFCKEditorIsCompatible) {
return true;
}
if (is_object($wgTitle) && in_array($wgTitle->getNamespace(), $this->getExcludedNamespaces())) {
return true;
}
if ($wgUseTeX) {
//it may add much overload on page with huge amount of math content...
$text = preg_replace('/getOption( 'language', $wgContLanguageCode );
$i18nfile = dirname( __FILE__ ) . DIRECTORY_SEPARATOR .'FCKeditor.i18n.' . $lang . '.php';
if ( file_exists( $i18nfile ) ) {
require( $i18nfile );
} else {
$lang = 'en';
require( dirname( __FILE__ ) . DIRECTORY_SEPARATOR .'FCKeditor.i18n.en.php' );
}
$wgMessageCache->addMessages( $messages, $lang );
self::$messagesLoaded = true;
}
return true;
}
/**
* Add FCK script
*
* @param unknown_type $q
* @return unknown
*/
public function onEditPageShowEditFormInitial( $form ) {
global $wgOut, $wgTitle, $wgScriptPath, $wgContLang;
global $wgFCKEditorToolbarSet, $wgFCKEditorIsCompatible;
global $wgFCKEditorExtDir, $wgFCKEditorDir, $wgFCKEditorHeight, $wgUser;
global $wgStylePath, $wgStyleVersion, $wgDefaultSkin, $wgExtensionFunctions;
global $wgFCKWikiTextBeforeParse;
global $wgHooks, $wgDefaultUserOptions;
if (!isset($this->showFCKEditor))
{
$this->showFCKEditor = 0;
if ( !$wgUser->getOption( 'riched_start_disabled',$wgDefaultUserOptions['riched_start_disabled'] ) ) {
$this->showFCKEditor += RTE_VISIBLE;
}
if ( $wgUser->getOption( 'riched_use_popup',$wgDefaultUserOptions['riched_use_popup'] ) ) {
$this->showFCKEditor += RTE_POPUP;
}
if ( $wgUser->getOption( 'riched_use_toggle',$wgDefaultUserOptions['riched_use_toggle'] ) ) {
$this->showFCKEditor += RTE_TOGGLE_LINK;
}
}
if( (!empty($_SESSION['showMyFCKeditor'])) && ($wgUser->getOption( 'riched_toggle_remember_state',$wgDefaultUserOptions['riched_toggle_remember_state'] )))
{
//clear RTE_VISIBLE flag
$this->showFCKEditor &= ~RTE_VISIBLE ;
//get flag from session
$this->showFCKEditor |= $_SESSION['showMyFCKeditor'] ;
}
if (!$wgUser->getOption( 'showtoolbar' ) || $wgUser->getOption( 'riched_disable', !empty( $wgDefaultUserOptions['riched_disable'] ) ? $wgDefaultUserOptions['riched_disable'] : false ) || !$wgFCKEditorIsCompatible) {
return true;
}
if (in_array($wgTitle->getNamespace(), $this->getExcludedNamespaces())) {
return true;
}
if (false !== strpos($form->textbox1, "__NORICHEDITOR__")) {
return true;
}
$wgFCKWikiTextBeforeParse = $form->textbox1;
if ($this->showFCKEditor & RTE_VISIBLE)
{
$options = new FCKeditorParserOptions();
$options->setTidy(true);
$parser = new FCKeditorParser();
$parser->setOutputType(OT_HTML);
$form->textbox1 = str_replace("", "", $parser->parse($form->textbox1, $wgTitle, $options)->getText());
}
$printsheet = htmlspecialchars( "$wgStylePath/common/wikiprintable.css?$wgStyleVersion" );
//CSS trick, we need to get user CSS stylesheets somehow... it must be done in a different way!
$skin = $wgUser->getSkin();
$skin->loggedin = $wgUser->isLoggedIn();
$skin->mTitle =& $wgTitle;
$skin->initPage($wgOut);
//$skin->skinname = 'monobook';
$skin->userpage = $wgUser->getUserPage()->getPrefixedText();
if (method_exists($skin, "setupUserCss")) {
$skin->setupUserCss($wgOut);
}
if (!empty($skin->usercss) && preg_match_all('/@import "([^"]+)";/', $skin->usercss, $matches)) {
$userStyles = $matches[1];
}
//End of CSS trick
$script = <<
HEREDOC;
$script .= '';
$newWinMsg = wfMsg('rich_editor_new_window');
$script .= <<
//IE hack to call func from popup
function FCK_sajax(func_name, args, target) {
sajax_request_type = 'POST' ;
sajax_do_call(func_name, args, function (x) {
// I know this is function, not object
target(x);
}
);
}
function onLoadFCKeditor()
{
if (!(showFCKEditor & RTE_VISIBLE))
showFCKEditor += RTE_VISIBLE;
firstLoad = false;
realTextarea = document.getElementById('wpTextbox1');
if ( realTextarea )
{
var height = $wgFCKEditorHeight ;
realTextarea.style.display = 'none';
if ( height == 0 )
{
// Get the window (inner) size.
var height = window.innerHeight || ( document.documentElement && document.documentElement.clientHeight ) || 550 ;
// Reduce the height to the offset of the toolbar.
var offset = document.getElementById('wikiPreview') || document.getElementById('toolbar') ;
while ( offset )
{
height -= offset.offsetTop ;
offset = offset.offsetParent ;
}
// Add a small space to be left in the bottom.
height -= 20 ;
}
// Enforce a minimum height.
height = ( !height || height < 300 ) ? 300 : height ;
// Create the editor instance and replace the textarea.
oFCKeditor.Height = height ;
oFCKeditor.ReplaceTextarea() ;
// Hide the default toolbar.
document.getElementById('toolbar').style.display = 'none' ;
// do things with CharInsert for example
var edittools_markup = document.getElementById ('editpage-specialchars') ;
if (edittools_markup) {
edittools_markup.style.display = 'none' ;
}
FCKeditorInsertTags = function (tagOpen, tagClose, sampleText, oDoc)
{
var txtarea;
if ( !(typeof(oDoc.FCK) == "undefined") && !(typeof(oDoc.FCK.EditingArea) == "undefined") )
{
txtarea = oDoc.FCK.EditingArea.Textarea ;
}
else if (oDoc.editform)
{
// if we have FCK enabled, behave differently...
if ( showFCKEditor & RTE_VISIBLE )
{
SRCiframe = oDoc.getElementById ('wpTextbox1___Frame') ;
if ( SRCiframe )
{
if (window.frames[SRCiframe])
SRCdoc = window.frames[SRCiframe].oDoc ;
else
SRCdoc = SRCiframe.contentDocument ;
var SRCarea = SRCdoc.getElementById ('xEditingArea').firstChild ;
if (SRCarea)
txtarea = SRCarea ;
else
return false ;
}
else
{
return false ;
}
}
else
{
txtarea = oDoc.editform.wpTextbox1 ;
}
}
else
{
// some alternate form? take the first one we can find
var areas = oDoc.getElementsByTagName( 'textarea' ) ;
txtarea = areas[0] ;
}
var selText, isSample = false ;
if ( oDoc.selection && oDoc.selection.createRange )
{ // IE/Opera
//save window scroll position
if ( oDoc.documentElement && oDoc.documentElement.scrollTop )
var winScroll = oDoc.documentElement.scrollTop ;
else if ( oDoc.body )
var winScroll = oDoc.body.scrollTop ;
//get current selection
txtarea.focus() ;
var range = oDoc.selection.createRange() ;
selText = range.text ;
//insert tags
checkSelected();
range.text = tagOpen + selText + tagClose ;
//mark sample text as selected
if ( isSample && range.moveStart )
{
if (window.opera)
tagClose = tagClose.replace(/\\n/g,'') ; //check it out one more time
range.moveStart('character', - tagClose.length - selText.length) ;
range.moveEnd('character', - tagClose.length) ;
}
range.select();
//restore window scroll position
if ( oDoc.documentElement && oDoc.documentElement.scrollTop )
oDoc.documentElement.scrollTop = winScroll ;
else if ( oDoc.body )
oDoc.body.scrollTop = winScroll ;
}
else if ( txtarea.selectionStart || txtarea.selectionStart == '0' )
{ // Mozilla
//save textarea scroll position
var textScroll = txtarea.scrollTop ;
//get current selection
txtarea.focus() ;
var startPos = txtarea.selectionStart ;
var endPos = txtarea.selectionEnd ;
selText = txtarea.value.substring( startPos, endPos ) ;
//insert tags
if (!selText)
{
selText = sampleText ;
isSample = true ;
}
else if (selText.charAt(selText.length - 1) == ' ')
{ //exclude ending space char
selText = selText.substring(0, selText.length - 1) ;
tagClose += ' ' ;
}
txtarea.value = txtarea.value.substring(0, startPos) + tagOpen + selText + tagClose +
txtarea.value.substring(endPos, txtarea.value.length) ;
//set new selection
if (isSample)
{
txtarea.selectionStart = startPos + tagOpen.length ;
txtarea.selectionEnd = startPos + tagOpen.length + selText.length ;
}
else
{
txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length ;
txtarea.selectionEnd = txtarea.selectionStart;
}
//restore textarea scroll position
txtarea.scrollTop = textScroll;
}
}
}
}
function checkSelected()
{
if (!selText) {
selText = sampleText;
isSample = true;
} else if (selText.charAt(selText.length - 1) == ' ') { //exclude ending space char
selText = selText.substring(0, selText.length - 1);
tagClose += ' '
}
}
function initEditor()
{
var toolbar = document.getElementById('toolbar') ;
//show popup or toogle link
if (showFCKEditor & (RTE_POPUP|RTE_TOGGLE_LINK)){
//add new toolbar before wiki toolbar
var fckTools = document.createElement('div');
fckTools.setAttribute('id', 'fckTools');
toolbar.parentNode.insertBefore( fckTools, toolbar );
var SRCtextarea = document.getElementById( "wpTextbox1" ) ;
if (showFCKEditor & RTE_VISIBLE) SRCtextarea.style.display = "none";
}
if (showFCKEditor & RTE_TOGGLE_LINK)
{
fckTools.innerHTML='['+ editorLink +'] ';
}
if (showFCKEditor & RTE_POPUP)
{
var style = (showFCKEditor & RTE_VISIBLE) ? 'style="display:none"' : "";
fckTools.innerHTML+='';
}
if (showFCKEditor & RTE_VISIBLE)
{
if ( toolbar ) //insert wiki buttons
{
// Remove the mwSetupToolbar onload hook to avoid a JavaScript error with FF.
if ( window.removeEventListener )
window.removeEventListener( 'load', mwSetupToolbar, false ) ;
else if ( window.detachEvent )
window.detachEvent( 'onload', mwSetupToolbar ) ;
mwSetupToolbar = function() { return false ; } ;
for (var i = 0; i < mwEditButtons.length; i++) {
mwInsertEditButton(toolbar, mwEditButtons[i]);
}
for (var i = 0; i < mwCustomEditButtons.length; i++) {
mwInsertEditButton(toolbar, mwCustomEditButtons[i]);
}
}
onLoadFCKeditor();
}
return true;
}
addOnloadHook( initEditor );
HEREDOC;
if ($this->showFCKEditor & (RTE_TOGGLE_LINK | RTE_POPUP) ){
//add toogle link and handler
$script .= << FCKeditor start invisible
if (oToggleLink) oToggleLink.innerHTML = "Loading...";
sajax_request_type = 'POST' ;
oFCKeditor.ready = false;
sajax_do_call('wfSajaxWikiToHTML', [SRCtextarea.value], function ( result ){
if ( firstLoad ) //still
{
SRCtextarea.value = result.responseText; //insert parsed text
onLoadFCKeditor();
if (oToggleLink) oToggleLink.innerHTML = editorMsgOff;
oFCKeditor.ready = true;
}
});
return true;
}
if (!oFCKeditor.ready) return false; //sajax_do_call in action
if (!FCKeditorAPI) return false; //not loaded yet
var oEditorIns = FCKeditorAPI.GetInstance( objId );
var oEditorIframe = document.getElementById( objId+'___Frame' );
var FCKtoolbar = document.getElementById('toolbar');
var bIsWysiwyg = ( oEditorIns.EditMode == FCK_EDITMODE_WYSIWYG );
//FCKeditor visible -> hidden
if ( showFCKEditor & RTE_VISIBLE)
{
var text = oEditorIns.GetData( oEditorIns.Config.FormatSource );
SRCtextarea.value = text;
if ( bIsWysiwyg ) oEditorIns.SwitchEditMode(); //switch to plain
var text = oEditorIns.GetData( oEditorIns.Config.FormatSource );
//copy from FCKeditor to textarea
SRCtextarea.value = text;
if (saveSetting)
{
sajax_request_type = 'GET' ;
sajax_do_call( 'wfSajaxToggleFCKeditor', ['hide'], function(){} ) ; //remember closing in session
}
if (oToggleLink) oToggleLink.innerHTML = editorMsgOn;
if (oPopupLink) oPopupLink.style.display = '';
showFCKEditor -= RTE_VISIBLE;
oEditorIframe.style.display = 'none';
FCKtoolbar.style.display = '';
SRCtextarea.style.display = '';
}
//FCKeditor hidden -> visible
else
{
if ( bIsWysiwyg ) oEditorIns.SwitchEditMode(); //switch to plain
SRCtextarea.style.display = 'none';
//copy from textarea to FCKeditor
oEditorIns.EditingArea.Textarea.value = SRCtextarea.value
FCKtoolbar.style.display = 'none';
oEditorIframe.style.display = '';
if ( !bIsWysiwyg ) oEditorIns.SwitchEditMode(); //switch to WYSIWYG
showFCKEditor += RTE_VISIBLE; // showFCKEditor+=RTE_VISIBLE
if (oToggleLink) oToggleLink.innerHTML = editorMsgOff;
if (oPopupLink) oPopupLink.style.display = 'none';
}
return true;
}
HEREDOC;
}
if($this->showFCKEditor & RTE_POPUP){
$script .= <<addScript($script);
return true;
}
public function onUserToggles( &$extraToggles ) {
global $wgUser,$wgDefaultUserOptions;
$extraToggles[] = 'riched_disable';
$extraToggles[] = 'riched_start_disabled';
$extraToggles[] = 'riched_use_popup';
$extraToggles[] = 'riched_use_toggle';
$extraToggles[] = 'riched_toggle_remember_state';
//Show default options in Special:Preferences
if( !array_key_exists( "riched_disable", $wgUser->mOptions ) && !empty($wgDefaultUserOptions['riched_disable']) )
$wgUser->setOption("riched_disable", $wgDefaultUserOptions['riched_disable']);
if( !array_key_exists( "riched_start_disabled", $wgUser->mOptions ) && !empty($wgDefaultUserOptions['riched_start_disabled']) )
$wgUser->setOption("riched_start_disabled",$wgDefaultUserOptions['riched_start_disabled']);
if( !array_key_exists( "riched_use_popup", $wgUser->mOptions ) && !empty($wgDefaultUserOptions['riched_use_popup']) )
$wgUser->setOption("riched_use_popup",$wgDefaultUserOptions['riched_use_popup']);
if( !array_key_exists( "riched_use_toggle", $wgUser->mOptions ) && !empty($wgDefaultUserOptions['riched_use_toggle']) )
$wgUser->setOption("riched_use_toggle",$wgDefaultUserOptions['riched_use_toggle']);
if( !array_key_exists( "riched_toggle_remember_state", $wgUser->mOptions ) && !empty($wgDefaultUserOptions['riched_toggle_remember_state']) )
$wgUser->setOption("riched_toggle_remember_state",$wgDefaultUserOptions['riched_toggle_remember_state']);
$extraToggles = array_merge($extraToggles, self::$nsToggles);
return true;
}
}