EditPage Multiple InputBoxes Mediawiki

Inleiding

   
readme for editbox extension mediawiki to be continued

Stappen

Latest version 24-09-2007

  • 0.4 Issues fixed with importing page without structure

Previous working versions

  • 0.3 Choice added to use template or not 21-09-2007
  • 0.2 Including textarea expanding javascript 20-09-2007
  • 0.1 Improved customization 19-09-2007
  • 0.0.1 Combining and separating textareas working fine
<?php

if (&#160;! defined( 'MEDIAWIKI' ) )
	die();

$wgExtensionCredits['parserhook'][] = array(
'name' => 'EditTextAreas',
'author' => 'Boudewijn Vahrmeijer',
'url' => 'http://www.leerwiki.nl',
'version' => '1.11,1.10.1/1.9.3/1.9.2/1.8.2',
);

//####### Choose parameters ##############
$BoxNames=array('Intro','Core','Conclusion','More'); 	//choose names, minimum is ONE 
$Separator='.//.'; //Choose dummy separator for combining text input

//####### Used Hooks ######################
$wgHooks['EditPage::showEditForm:fields'][] = 'TextareaDisplay';
$wgHooks['EditPage::attemptSave'][] = 'CombineBeforeSave';
$wgHooks['EditPage::showEditForm:initial'][] = 'OptionSetting';
$wgHooks['OutputPageBeforeHTML'][] = 'LastMinuteStyleChange';

//####### Formula preparation ##############
$TotalTB=count($BoxNames); 

########## Hook 1 #################
function TextareaDisplay(&$q,&$out) {
 	global $TotalTB,$BoxNames,$Separator,$wgTitle;
		$title=$wgTitle;

$q->Structure='CHECK'; //set Structure as standard 
//if(!$q->mTitle->exists()) return true; //new articles no four fields

######### HTML 1 #######
$out->addHTML(<<<END
<script type="text/javascript">
		function Hider()
		{
		document.getElementById("div1").style.display = 'none';
		document.getElementById("no").style.display = 'none';
		document.getElementById("yes").style.display = 'block';
		document.getElementById("wpStructure").value = 'UNCHECK';
		}
		function unHider()
		{
		document.getElementById("div1").style.display = 'block';
		document.getElementById("yes").style.display = 'none';
		document.getElementById("no").style.display = 'block';
		document.getElementById("wpStructure").value = 'CHECK';
		}
</script>
<script type="text/javascript">												
	function resizeTextarea(t) {
	  n = navigator;
	  nua = n.userAgent.toLowerCase();
	  a = t.value.split('\\n');
	  b=1;
	  for (x=0;x < a.length; x++) {
	   if (a[x].length >= t.cols) b+= Math.floor(a[x].length/t.cols);
	   }
	  b+= a.length;
	  if (b > t.rows && nua.indexOf('opera')==-1) t.rows = b;
	 } 
</script>
<style>	textarea {	width: 550px;	padding: .1em;	}'</style>
<input value={$q->Structure} type='hidden' name="wpStructure" id="wpStructure"/>\n

END
);

############# CUT TEXT AND PUT IN BOXES #############
if(TotalTB>1) return true;
$AllText=$q->textbox1;
$ArrayTextTemp=explode($Separator,$AllText);

	$title=$wgTitle;
	$titleKey=$title;
	$titleS = Title::newFromDBkey($titleKey);
	$titleS->mNamespace = $titleNS - ($titleNS&#160;% 2);
	$article = new Article($titleS);
	$aid = $article->mTitle->getArticleID( GAID_FOR_UPDATE );

if(count($ArrayTextTemp)>1||$aid==0){
	$out->addHTML("<div id="div1" style="display:block">
<div id="yes" style="display:none"><input type='button' value='Give me Structure' OnClick='unHider()'/></div>
<div id="no" style="display:block"><input type='button' value='No Structure?' OnClick='Hider()'/></div>
<p>");
} else { 
	$out->addHTML("
</p>
<div id="yes" style="display:block"><input type='button' value='Give me Structure' OnClick='unHider()'/></div>
<div id="no" style="display:none"><input type='button' value='No Structure?' OnClick='Hider()'/></div>
<div id="div1" style="display:none">");
<p>}
</p><p>for($i=0;$i<$TotalTB-1;$i++){
	$out->addHTML($BoxNames[$i]."
<textarea  tabindex='1' onKeyUp='resizeTextarea(this)' accesskey=','	// display new textareas
 	name='".$BoxNames[$i]."' id='".$BoxNames[$i]."' rows='4' cols='40'>".$ArrayTextTemp[$i+1]."</textarea>
");
}
</p>
$out->addHTML( $BoxNames[$TotalTB-1]."</div>");
<p>	if(count($ArrayTextTemp)>1){
			$q->textbox1= $ArrayTextTemp[$TotalTB];
	}
</p><p>	return true;
}
</p>
<ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li> Hook 2 #################
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
<p>function CombineBeforeSave(&$q) {
	global	$wgRequest, $TotalTB,$BoxNames,$Separator;
		$request=$wgRequest;
		for($i=0;$i<$TotalTB-1;$i++){
		$temp=$BoxNames[$i];
		$allextraTB.= $Separator.$q->safeUnicodeInput( $request, $temp );
		}
		$q->Structure = $request->getVal( 'wpStructure' );
		if($q->Structure=='CHECK'){
	    	$q->textbox1 = $allextraTB.$Separator.$q->textbox1; 
		}
	return true;
}
</p>
<ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li> Hook 3 #################
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
<p>function OptionSetting(&$q) {
	global $wgUser;
		$wgUser->setOption('rows',10);
 		$wgUser->setOption('showtoolbar',0);
	return true;
}
</p>
<ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li><ol><li> Hook 4 #################
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
</li></ol>
<p>function LastMinuteStyleChange(&$q,&$b) {
global $Separator,$BoxNames, $wgTitle;
	$title=$wgTitle;
	if ($_GET['action']&#160;!= "") return true; //not the edit areas
	$k=explode($Separator,$b);
	if(count($k)<2) return true; //if no separator existing, no structure wanted
	for($i=1;$i<count($k)+1;$i++){
</p>
		$b.='<h2>'.$BoxNames[$i-1].'</span></h2>'.$k[$i];
<p>	}
return true;
}
?>
</p>

Handige Links

http://www.mediawiki.org/wiki/Extension:EditPageMultipleInputTextAreas