http://www.mediawiki.org/wiki/Special:Code/MediaWiki/95863
Revision: 95863
Author: yaron
Date: 2011-08-31 13:38:42 +0000 (Wed, 31 Aug 2011)
Log Message:
-----------
Improved saving of schema - moved most of it into its own function, replaced
creation of a page-save job with a direct save, added Javascript redirect back
to category page at end of save, and added an edit-summary field to the
interface
Modified Paths:
--------------
trunk/extensions/PageSchemas/specials/PS_EditSchema.php
Modified: trunk/extensions/PageSchemas/specials/PS_EditSchema.php
===================================================================
--- trunk/extensions/PageSchemas/specials/PS_EditSchema.php 2011-08-31
13:35:27 UTC (rev 95862)
+++ trunk/extensions/PageSchemas/specials/PS_EditSchema.php 2011-08-31
13:38:42 UTC (rev 95863)
@@ -197,6 +197,71 @@
return $starter_text;
}
+ static function pageSchemaXMLFromRequest() {
+ global $wgRequest;
+
+ //Generate the XML from the Form elements
+ //$s_name = $wgRequest->getText('s_name');
+ $psXML = '<PageSchema>';
+ $additionalXML = $wgRequest->getText( 'ps_add_xml' );
+ $psXML .= $additionalXML;
+ $fieldName = "";
+ $fieldNum = -1;
+ $templateNum = -1;
+ //This var. will save the xml text returned by the extensions
+ $schemaXMLFromExtensions = array();
+ $fieldXMLFromExtensions = array();
+ wfRunHooks( 'PageSchemasGetSchemaXML', array( $wgRequest,
&$schemaXMLFromExtensions ));
+ wfRunHooks( 'PageSchemasGetFieldXML', array( $wgRequest,
&$fieldXMLFromExtensions ));
+ foreach ( $schemaXMLFromExtensions as $extensionName => $xml ) {
+ if ( !empty( $xml ) ) {
+ $psXML .= $xml;
+ }
+ }
+ $indexGlobalField = 0 ; //this variable is use to index the
array returned by extensions for XML.
+ foreach ( $wgRequest->getValues() as $var => $val ) {
+ if ( substr( $var, 0, 7 ) == 't_name_' ) {
+ $templateNum = substr($var,7,1);
+ if ($wgRequest->getCheck(
'is_multiple_'.$templateNum ) ) {
+ $psXML .= '<Template name="'.$val.'"
multiple="multiple">';
+ } else {
+ $psXML .= '<Template name="'.$val.'">';
+ }
+ } elseif ( substr( $var, 0, 7 ) == 'f_name_' ) {
+ $fieldName = $val;
+ $fieldNum = substr($var,7,1);
+ if ( $wgRequest->getCheck(
'f_is_list_'.$fieldNum ) ) {
+ if (
$wgRequest->getText('f_delimiter_'.$fieldNum) != '' ) {
+ $delimiter =
$wgRequest->getText('f_delimiter_'.$fieldNum);
+ $psXML .= '<Field
name="'.$fieldName.'" list="list" delimiter="'.$delimiter.'">';
+ } else {
+ $psXML .= '<Field
name="'.$fieldName.'" list="list">';
+ }
+ } else {
+ $psXML .= '<Field
name="'.$fieldName.'">';
+ }
+ } elseif ( substr( $var, 0, 8 ) == 'f_label_' ) {
+ $psXML .= '<Label>'.$val.'</Label>';
+
+ // Get XML created by extensions
+ foreach ( $fieldXMLFromExtensions as
$extensionName => $xmlPerField ) {
+ if ( !empty(
$xmlPerField[$indexGlobalField] ) ) {
+ $psXML .=
$xmlPerField[$indexGlobalField];
+ }
+ }
+ $indexGlobalField++ ;
+ } elseif ( substr( $var, 0, 10 ) == 'f_add_xml_' ) {
+ $psXML .= $val;
+ $psXML .= '</Field>';
+ } elseif ( substr( $var, 0, 10 ) == 't_add_xml_' ) {
+ $psXML .= $val;
+ $psXML .= '</Template>';
+ }
+ }
+ $psXML .= '</PageSchema>';
+ return $psXML;
+ }
+
function execute( $category ) {
global $wgRequest, $wgOut, $wgUser;
global $wgSkin;
@@ -211,82 +276,30 @@
$save_page = $wgRequest->getCheck( 'wpSave' );
if ( $save_page ) {
- //Generate the XML from the Form elements
- //$s_name = $wgRequest->getText('s_name');
- $XMLtext = '<PageSchema>';
- $ps_add_xml = $wgRequest->getText( 'ps_add_xml' );
- $XMLtext .= $ps_add_xml;
- $fieldName = "";
- $fieldNum = -1;
- $templateNum = -1;
- //This var. will save the xml text returned by the
extensions
- $schemaXMLFromExtensions = array();
- $fieldXMLFromExtensions = array();
- wfRunHooks( 'PageSchemasGetSchemaXML', array(
$wgRequest, &$schemaXMLFromExtensions ));
- wfRunHooks( 'PageSchemasGetFieldXML', array(
$wgRequest, &$fieldXMLFromExtensions ));
- foreach ( $schemaXMLFromExtensions as $extensionName =>
$xml ) {
- if ( !empty( $xml ) ) {
- $XMLtext .= $xml;
- }
- }
- $indexGlobalField = 0 ; //this variable is use to index
the array returned by extensions for XML.
- foreach ( $wgRequest->getValues() as $var => $val ) {
- if ( substr( $var, 0, 7 ) == 't_name_' ) {
- $templateNum = substr($var,7,1);
- if ($wgRequest->getCheck(
'is_multiple_'.$templateNum ) ) {
- $XMLtext .= '<Template
name="'.$val.'" multiple="multiple">';
- } else {
- $XMLtext .= '<Template
name="'.$val.'">';
- }
- } elseif ( substr( $var, 0, 7 ) == 'f_name_' ) {
- $fieldName = $val;
- $fieldNum = substr($var,7,1);
- if ( $wgRequest->getCheck(
'f_is_list_'.$fieldNum ) ) {
- if (
$wgRequest->getText('f_delimiter_'.$fieldNum) != '' ) {
- $delimiter =
$wgRequest->getText('f_delimiter_'.$fieldNum);
- $XMLtext .= '<Field
name="'.$fieldName.'" list="list" delimiter="'.$delimiter.'">';
- } else {
- $XMLtext .= '<Field
name="'.$fieldName.'" list="list">';
- }
- } else {
- $XMLtext .= '<Field
name="'.$fieldName.'">';
- }
- } elseif ( substr( $var, 0, 8 ) == 'f_label_' )
{
- $XMLtext .= '<Label>'.$val.'</Label>';
-
- // Get XML created by extensions
- foreach ( $fieldXMLFromExtensions as
$extensionName => $xmlPerField ) {
- if ( !empty(
$xmlPerField[$indexGlobalField] ) ) {
- $XMLtext .=
$xmlPerField[$indexGlobalField];
- }
- }
- $indexGlobalField++ ;
- } elseif ( substr( $var, 0, 10 ) ==
'f_add_xml_' ) {
- $XMLtext .= $val;
- $XMLtext .= '</Field>';
- } elseif ( substr( $var, 0, 10 ) ==
't_add_xml_' ) {
- $XMLtext .= $val;
- $XMLtext .= '</Template>';
- }
- }
- $XMLtext .= '</PageSchema>';
+ $psXML = self::pageSchemaXMLFromRequest();
$pageSchemaObj = new PSSchema( $category );
$categoryTitle = Title::newFromText( $category,
NS_CATEGORY );
$categoryArticle = new Article( $categoryTitle );
$pageText = $categoryArticle->getContent();
- $jobs = array();
- $params = array();
if ( $pageSchemaObj->isPSDefined() ) {
//Do some preg-replace magic
$tag = "PageSchema";
- $replaced_text =
preg_replace('{<'.$tag.'[^>]*>([^@]*?)</'.$tag.'>'.'}', $XMLtext, $pageText);
- $params['page_text'] = $replaced_text;
+ $pageText =
preg_replace('{<'.$tag.'[^>]*>([^@]*?)</'.$tag.'>'.'}', $psXML, $pageText);
} else {
- $params['page_text'] = $XMLtext . $pageText;
+ $pageText = $psXML . $pageText;
}
- $params['user_id'] = $wgUser->getId();
- $jobs[] = new PSCreatePageJob( $categoryTitle, $params
);
- Job::batchInsert( $jobs );
+ $editSummary = $wgRequest->getVal( 'wpSummary' );
+ $categoryArticle->doEdit( $pageText, $editSummary );
+ $redirectURL = $categoryTitle->getLocalURL();
+ $text .= <<<END
+ <script type="text/javascript">
+ window.onload = function() {
+ window.location="$redirectURL";
+ }
+ </script>
+
+END;
+ $wgOut->addHTML( $text );
return true;
}
@@ -369,14 +382,14 @@
$pageXML = simplexml_load_string( $pageXMLstr );
$ps_add_xml = "";
//$pageName = (string)$pageXML->attributes()->name;
- $text_4 = '<form id="editPageSchemaForm" action=""
method="post">' . "\n";
- //$text_4 .= '<p>'.$schema_name_label.' <input type="text"
name="s_name" value="'.$pageName.'" /> </p> ';
+ $text = '<form id="editPageSchemaForm" action=""
method="post">' . "\n";
+ //$text .= '<p>'.$schema_name_label.' <input type="text"
name="s_name" value="'.$pageName.'" /> </p> ';
foreach ( $pageXML->children() as $template_xml ) {
if ( ( $template_xml->getName() != 'Template') &&
($template_xml->getName() != 'semanticforms_Form') ) {
$ps_add_xml .= (string)$template_xml->asXML();
}
}
- $text_4 .= '<p>' . $add_xml_label . '
+ $text .= '<p>' . $add_xml_label . '
<textarea rows=4 style="width: 100%"
name="ps_add_xml" >' . $ps_add_xml . '</textarea>
</p> ';
@@ -384,9 +397,9 @@
wfRunHooks( 'getFilledHtmlTextForFieldInputs', array(
$pageSchemaObj, &$filledHTMLFromExtensions ));
if ( $filledHTMLFromExtensions['sf_form'] != null ) {
$text_ex = preg_replace('/starter/', '1',
$filledHTMLFromExtensions['sf_form']);
- $text_4 .= $text_ex;
+ $text .= $text_ex;
}
- $text_4 .= '<div id="templatesList">';
+ $text .= '<div id="templatesList">';
$template_num = 0;
/* index for template objects */
foreach ( $pageXML->children() as $tag => $template_xml ) {
@@ -395,28 +408,28 @@
$template_num++;
$field_count = 0;
if ( count($template_xml->children()) > 0 ) {
- $text_4 .= '<div class="templateBox" >';
- $text_4 .= '<fieldset
style="background: #ddd;"><legend>Template</legend> ';
+ $text .= '<div class="templateBox" >';
+ $text .= '<fieldset style="background:
#ddd;"><legend>Template</legend> ';
$templateName = (string)
$template_xml->attributes()->name;
$templateNameInput = Html::input(
't_name_' . $template_num, $templateName, 'text' );
- $text_4 .= '<p>Name: ' .
$templateNameInput . '</p> ';
+ $text .= '<p>Name: ' .
$templateNameInput . '</p> ';
$attrs = array();
if ( ((string)
$template_xml->attributes()->multiple) == "multiple" ) {
$attrs['checked'] = 'checked';
}
$templateIsMultipleInput = Html::input(
'is_multiple_' . $template_num, null, 'checkbox', $attrs );
- $text_4 .= Html::rawElement( 'p', null,
$templateIsMultipleInput . ' ' . wfMsg( 'ps-multiple-temp-label' ) );
+ $text .= Html::rawElement( 'p', null,
$templateIsMultipleInput . ' ' . wfMsg( 'ps-multiple-temp-label' ) );
foreach ( $template_xml->children() as
$field_xml ) {
if ( $field_xml->getName() !=
'Field' ) {
$template_add_xml .=
(string)$field_xml->asXML();
}
}
- $text_4 .= '<div
id="fieldsList_'.$template_num.'">';
+ $text .= '<div
id="fieldsList_'.$template_num.'">';
foreach ( $template_xml->children() as
$field_xml ) {
if ( $field_xml->getName() ==
"Field" ) {
$fieldName =
(string)$field_xml->attributes()->name;
- $text_4 .= '<div
class="fieldBox" >';
- $text_4 .= '<fieldset
style="background: #bbb;"><legend>Field</legend> ';
+ $text .= '<div
class="fieldBox" >';
+ $text .= '<fieldset
style="background: #bbb;"><legend>Field</legend> ';
if (
((string)$field_xml->attributes()->delimiter) != null ||
((string)$field_xml->attributes()->delimiter) != '' ) {
$delimiter =
(string)$field_xml->attributes()->delimiter;
}
@@ -425,10 +438,10 @@
$fieldLabel = (string)$child;
}
}
- $text_4 .= '<p>Field
name: <input size="15" name="f_name_'.$field_count.'" value="'.$fieldName.'"
/>';
- $display_label = wfMsg(
'pageschemas-displaylabel' );
- $text_4 .=
$display_label . ' <input size="15" name="f_label_'.$field_count.'"
value="'.$fieldLabel.'" />
- </p> ';
+ $text .= '<p>Field
name: <input size="15" name="f_name_'.$field_count.'" value="'.$fieldName.'"
/>';
+ $display_label = wfMsg(
'ps-displaylabel' );
+ $text .= $display_label
. ' ' . Html::input( 'f_label_'.$field_count, $fieldLabel, 'text', array(
'size' => 15 ) );
+ $text .= "\t\t</p>\n";
$attrs = array();
$pAttrs = array(
'class' => 'delimiterInput' );
if (
((string)$field_xml->attributes()->list) == "list" ) {
@@ -437,35 +450,34 @@
$pAttrs['style'] = 'display: none';
}
$fieldIsListInput =
Html::input( 'f_is_list_' . $field_count, null, 'checkbox', $attrs );
- $text_4 .=
Html::rawElement( 'p', null, $fieldIsListInput . ' ' . wfMsg(
'ps-field-list-label' ) );
+ $text .=
Html::rawElement( 'p', null, $fieldIsListInput . ' ' . wfMsg(
'ps-field-list-label' ) );
$fieldDelimiterInput =
Html::input ( 'f_delimiter_' . $field_count, $delimiter, 'text', null );
- $text_4 .=
Html::rawElement( 'p', $pAttrs, wfMsg( 'ps-delimiter-label' ) . ' ' .
$fieldDelimiterInput );
+ $text .=
Html::rawElement( 'p', $pAttrs, wfMsg( 'ps-delimiter-label' ) . ' ' .
$fieldDelimiterInput );
- //Inserting HTML text
from Extensions
-
+ // Insert HTML text
from extensions
if (
$filledHTMLFromExtensions['smw'] != null ) {
$text_ex_array
= $filledHTMLFromExtensions['smw'];
if (
$text_ex_array[$field_count] != null ) {
$text_ex = preg_replace('/starter/', $field_count,
$text_ex_array[$field_count]);
- $text_4
.= $text_ex;
+ $text
.= $text_ex;
}
}
if (
$filledHTMLFromExtensions['sf'] != null ) {
$text_ex_array
= $filledHTMLFromExtensions['sf'];
if (
$text_ex_array[$field_count] != null ) {
$text_ex = preg_replace('/starter/', $field_count,
$text_ex_array[$field_count]);
- $text_4
.= $text_ex;
+ $text
.= $text_ex;
}
}
if (
$filledHTMLFromExtensions['sd'] != null ) {
$text_ex_array
= $filledHTMLFromExtensions['sd'];
if (
$text_ex_array[$field_count] != null ) {
$text_ex = preg_replace('/starter/', $field_count,
$text_ex_array[$field_count]);
- $text_4
.= $text_ex;
+ $text
.= $text_ex;
}
}
- $text_4 .= <<<END
+ $text .= <<<END
<p>$add_xml_label
<textarea rows=4 style="width: 100%"
name="f_add_xml_$field_count"></textarea>
</p>
@@ -474,19 +486,19 @@
$removeFieldButton =
Html::input( 'remove-field', wfMsg( 'ps-remove-field' ), 'button',
array( 'class'
=> 'deleteField' )
);
- $text_4 .=
$removeFieldButton;
- $text_4 .= <<<END
+ $text .=
$removeFieldButton;
+ $text .= <<<END
</fieldset><!-- for fields -->
</div><!-- fieldBox -->
END;
$field_count++;
- $text_4 .= '<script
type="text/javascript">
-
updateFieldNum('.$field_count.');
- </script>';
+ $text .= '<script
type="text/javascript">
+ updateFieldNum('.$field_count.');
+ </script>';
}
}
- $text_4 .= '</div><!-- fieldsList -->';
+ $text .= '</div><!-- fieldsList -->';
$add_field_button = Xml::element(
'input',
array(
'type' => 'button',
@@ -494,8 +506,8 @@
'onclick' =>
"createTemplateAddField($template_num)"
)
);
- $text_4 .= Xml::tags( 'p', null,
$add_field_button ) . "\n";
- $text_4 .= '<hr />
+ $text .= Xml::tags( 'p', null,
$add_field_button ) . "\n";
+ $text .= '<hr />
<p>'.$add_xml_label.'
<textarea
rows=4 style="width: 100%"
name="t_add_xml_'.$template_num.'">'.$template_add_xml.'</textarea>
</p>
@@ -511,17 +523,29 @@
'onclick' => "createAddTemplate()"
)
);
- $text_4 .= '
+ $text .= '
</div><!-- templatesList -->';
- $text_4 .= Xml::tags( 'p', null, $add_template_button ) . "\n";
- $text_4 .= '
- <hr />
- <div class="editButtons">
- <input type="submit" id="wpSave" name="wpSave" value="Save" />
- </div>';
- $text_4 .= ' </form>';
- $text_4 .= self::starterFieldHTML( $htmlFromExtensions );
- $wgOut->addHTML($text_4);
+ $text .= Xml::tags( 'p', null, $add_template_button ) . "\n";
+ $text .= "\t\t<hr />\n";
+ $label = wfMsg( 'summary' );
+ $text .= <<<END
+ <p>
+ <span id='wpSummaryLabel'><label for='wpSummary'>$label</label></span>
+ <input type='text' value="" name='wpSummary' id='wpSummary'
maxlength='200' size='60' />
+ </p>
+
+END;
+ $attr = array(
+ 'id' => 'wpSave',
+ 'accesskey' => wfMsg( 'accesskey-save' ),
+ 'title' => wfMsg( 'tooltip-save' ),
+ );
+ $saveButton = Html::input( 'wpSave', wfMsg( 'savearticle' ),
'submit', $attr );
+ $text .= "\t\t" . Html::rawElement( 'div', array( 'class' =>
'editButtons' ),
+ $saveButton ) . "\n";
+ $text .= ' </form>';
+ $text .= self::starterFieldHTML( $htmlFromExtensions );
+ $wgOut->addHTML($text);
return true;
}
}
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs