http://www.mediawiki.org/wiki/Special:Code/MediaWiki/65254

Revision: 65254
Author:   yaron
Date:     2010-04-18 21:58:01 +0000 (Sun, 18 Apr 2010)

Log Message:
-----------
Added 'sfSetTargetName' and 'sfHTMLBeforeForm' hooks; improved formatting of 
code

Modified Paths:
--------------
    trunk/extensions/SemanticForms/specials/SF_FormEdit.php

Modified: trunk/extensions/SemanticForms/specials/SF_FormEdit.php
===================================================================
--- trunk/extensions/SemanticForms/specials/SF_FormEdit.php     2010-04-18 
21:55:17 UTC (rev 65253)
+++ trunk/extensions/SemanticForms/specials/SF_FormEdit.php     2010-04-18 
21:58:01 UTC (rev 65254)
@@ -30,6 +30,7 @@
                        $form_name = isset( $queryparts[0] ) ? $queryparts[0] : 
'';
                        $target_name = isset( $queryparts[1] ) ? $queryparts[1] 
: '';
                }
+               wfRunHooks( 'sfSetTargetName', array( &$target_name ) );
 
                $alt_forms = $wgRequest->getArray( 'alt_form' );
 
@@ -48,203 +49,209 @@
                return $text;
        }
 
-static function printForm( $form_name, $target_name, $alt_forms = array() ) {
-       global $wgOut, $wgRequest, $wgScriptPath, $sfgScriptPath, 
$sfgFormPrinter, $sfgYUIBase;
+       static function printForm( $form_name, $target_name, $alt_forms = 
array() ) {
+               global $wgOut, $wgRequest, $wgScriptPath, $sfgScriptPath, 
$sfgFormPrinter, $sfgYUIBase;
 
-       wfLoadExtensionMessages( 'SemanticForms' );
+               wfLoadExtensionMessages( 'SemanticForms' );
 
-       // initialize some variables
-       $target_title = null;
-       $page_name_formula = null;
+               // initialize some variables
+               $target_title = null;
+               $page_name_formula = null;
 
-       // get contents of form and target page - if there's only one,
-       // it might be a target with only alternate forms
-       if ( $form_name == '' ) {
-               $wgOut->addHTML( "<p class='error'>" . wfMsg( 
'sf_formedit_badurl' ) . '</p>' );
-               return;
-       } elseif ( $target_name == '' ) {
-               // parse the form to see if it has a 'page name' value set
-               $form_title = Title::makeTitleSafe( SF_NS_FORM, $form_name );
-               $form_article = new Article( $form_title );
-               $form_definition = $form_article->getContent();
-               $form_definition = StringUtils::delimiterReplace( 
'<noinclude>', '</noinclude>', '', $form_definition );
-               $matches;
-               if ( preg_match( '/{{{info.*page name=([^\|]*)/m', 
$form_definition, $matches ) ) {
-                       $page_name_formula = str_replace( '_', ' ', $matches[1] 
);
-                       // if the tag close ('}}}') is in here, chop off that
-                       // and everything after it
-                       if ( $pos = strpos( $page_name_formula, '}}}' ) ) {
-                               $page_name_formula = substr( 
$page_name_formula, 0, $pos );
+               // get contents of form and target page - if there's only one,
+               // it might be a target with only alternate forms
+               if ( $form_name == '' ) {
+                       $wgOut->addHTML( "<p class='error'>" . wfMsg( 
'sf_formedit_badurl' ) . '</p>' );
+                       return;
+               } elseif ( $target_name == '' ) {
+                       // parse the form to see if it has a 'page name' value 
set
+                       $form_title = Title::makeTitleSafe( SF_NS_FORM, 
$form_name );
+                       $form_article = new Article( $form_title );
+                       $form_definition = $form_article->getContent();
+                       $form_definition = StringUtils::delimiterReplace( 
'<noinclude>', '</noinclude>', '', $form_definition );
+                       $matches;
+                       if ( preg_match( '/{{{info.*page name=([^\|]*)/m', 
$form_definition, $matches ) ) {
+                               $page_name_formula = str_replace( '_', ' ', 
$matches[1] );
+                               // if the tag close ('}}}') is in here, chop off
+                               // that and everything after it
+                               if ( $pos = strpos( $page_name_formula, '}}}' ) 
) {
+                                       $page_name_formula = substr( 
$page_name_formula, 0, $pos );
+                               }
+                       } elseif ( count( $alt_forms ) == 0 ) {
+                               $wgOut->addWikiText( "<p class='error'>" . 
wfMsg( 'sf_formedit_badurl' ) . '</p>' );
+                               return;
                        }
-               } elseif ( count( $alt_forms ) == 0 ) {
-                       $wgOut->addWikiText( "<p class='error'>" . wfMsg( 
'sf_formedit_badurl' ) . '</p>' );
-                       return;
                }
-       }
 
-       $form_title = Title::makeTitleSafe( SF_NS_FORM, $form_name );
+               $form_title = Title::makeTitleSafe( SF_NS_FORM, $form_name );
 
-       if ( $target_name != '' ) {
-               $target_title = Title::newFromText( $target_name );
-               if ( $target_title->exists() ) {
-                       $s = wfMsg( 'sf_formedit_edittitle', 
$form_title->getText(), $target_title->getPrefixedText() );
-               } else {
-                       $s = wfMsg( 'sf_formedit_createtitle', 
$form_title->getText(), $target_title->getPrefixedText() );
+               if ( $target_name != '' ) {
+                       $target_title = Title::newFromText( $target_name );
+                       if ( $target_title->exists() ) {
+                               $s = wfMsg( 'sf_formedit_edittitle', 
$form_title->getText(), $target_title->getPrefixedText() );
+                       } else {
+                               $s = wfMsg( 'sf_formedit_createtitle', 
$form_title->getText(), $target_title->getPrefixedText() );
+                       }
+                       $wgOut->setPageTitle( $s );
                }
-               $wgOut->setPageTitle( $s );
-       }
 
-       // handling is different depending on whether page already exists
-       // or not
-       if ( $target_title && $target_title->exists() ) {
-                if ( $wgRequest->getVal( 'query' ) == 'true' ) {
-                        $page_contents = null;
-                        $page_is_source = false;
-                } else {
-                        $target_article = new Article( $target_title );
-                        $page_contents = $target_article->getContent();
-                        $page_is_source = true;
-                }
-       } elseif ( $target_name != '' ) {
-               $target_name = str_replace( '_', ' ', $target_name );
-       }
-
-       if ( ! $form_title || ! $form_title->exists() ) {
-               if ( $form_name == '' )
-                       $text = '<p class="error">' . wfMsg( 
'sf_formedit_badurl' ) . "</p>\n";
-               else {
-                       if ( count( $alt_forms ) > 0 ) {
-                               $text .= '<div class="infoMessage">' . wfMsg( 
'sf_formedit_altformsonly' ) . ' ';
-                               $text .= self::printAltFormsList( $alt_forms, 
$form_name );
-                               $text .= "</div>\n";
-                       } else
-                               $text = '<p class="error">' . wfMsg( 
'sf_formstart_badform', SFUtils::linkText( SF_NS_FORM, $form_name ) ) . 
".</p>\n";
+               // handling is different depending on whether or not page
+               // already exists
+               if ( $target_title && $target_title->exists() ) {
+                       if ( $wgRequest->getVal( 'query' ) == 'true' ) {
+                               $page_contents = null;
+                               $page_is_source = false;
+                       } else {
+                               $target_article = new Article( $target_title );
+                               $page_contents = $target_article->getContent();
+                               $page_is_source = true;
+                       }
+               } elseif ( $target_name != '' ) {
+                       $target_name = str_replace( '_', ' ', $target_name );
                }
-       } elseif ( $target_name == '' && $page_name_formula == '' ) {
-               $text = '<p class="error">' . wfMsg( 'sf_formedit_badurl' ) . 
"</p>\n";
-       } else {
-               $form_article = new Article( $form_title );
-               $form_definition = $form_article->getContent();
 
-               $save_page = $wgRequest->getCheck( 'wpSave' );
-               $preview_page = $wgRequest->getCheck( 'wpPreview' );
-               $diff_page = $wgRequest->getCheck( 'wpDiff' );
-               $form_submitted = ( $save_page || $preview_page || $diff_page );
-               // get 'preload' query value, if it exists
-               if ( ! $form_submitted ) {
-                       if ( $wgRequest->getCheck( 'preload' ) ) {
-                               $page_is_source = true;
-                               $page_contents = SFFormUtils::getPreloadedText( 
$wgRequest->getVal( 'preload' ) );
+               if ( ! $form_title || ! $form_title->exists() ) {
+                       if ( $form_name == '' ) {
+                               $text = '<p class="error">' . wfMsg( 
'sf_formedit_badurl' ) . "</p>\n";
                        } else {
-                               // let other extensions preload the page, if 
they want
-                               wfRunHooks( 'sfEditFormPreloadText', array( 
&$page_contents, $target_title, $form_title ) );
-                               $page_is_source = ( $page_contents != null );
+                               if ( count( $alt_forms ) > 0 ) {
+                                       $text .= '<div class="infoMessage">' . 
wfMsg( 'sf_formedit_altformsonly' ) . ' ';
+                                       $text .= self::printAltFormsList( 
$alt_forms, $form_name );
+                                       $text .= "</div>\n";
+                               } else
+                                       $text = '<p class="error">' . wfMsg( 
'sf_formstart_badform', SFUtils::linkText( SF_NS_FORM, $form_name ) ) . 
".</p>\n";
                        }
+               } elseif ( $target_name == '' && $page_name_formula == '' ) {
+                       $text = '<p class="error">' . wfMsg( 
'sf_formedit_badurl' ) . "</p>\n";
                } else {
-                       $page_is_source = false;
-                       $page_contents = null;
-               }
-               list ( $form_text, $javascript_text, $data_text, 
$form_page_title, $generated_page_name ) =
-                       $sfgFormPrinter->formHTML( $form_definition, 
$form_submitted, $page_is_source, $form_article->getID(), $page_contents, 
$target_name, $page_name_formula );
-               if ( $form_submitted ) {
-                       if ( $page_name_formula != '' ) {
-                               $target_name = $generated_page_name;
-                               // prepend a super-page, if one was specified
-                               if ( $wgRequest->getCheck( 'super_page' ) ) {
-                                       $target_name = $wgRequest->getVal( 
'super_page' ) . '/' . $target_name;
+                       $form_article = new Article( $form_title );
+                       $form_definition = $form_article->getContent();
+
+                       $save_page = $wgRequest->getCheck( 'wpSave' );
+                       $preview_page = $wgRequest->getCheck( 'wpPreview' );
+                       $diff_page = $wgRequest->getCheck( 'wpDiff' );
+                       $form_submitted = ( $save_page || $preview_page || 
$diff_page );
+                       // get 'preload' query value, if it exists
+                       if ( ! $form_submitted ) {
+                               if ( $wgRequest->getCheck( 'preload' ) ) {
+                                       $page_is_source = true;
+                                       $page_contents = 
SFFormUtils::getPreloadedText( $wgRequest->getVal( 'preload' ) );
+                               } else {
+                                       // let other extensions preload the
+                                       // page, if they want
+                                       wfRunHooks( 'sfEditFormPreloadText', 
array( &$page_contents, $target_title, $form_title ) );
+                                       $page_is_source = ( $page_contents != 
null );
                                }
-                               // prepend a namespace, if one was specified
-                               if ( $wgRequest->getCheck( 'namespace' ) ) {
-                                       $target_name = $wgRequest->getVal( 
'namespace' ) . ':' . $target_name;
-                               }
-                               // replace "unique number" tag with one that
-                               // won't get erased by the next line
-                               $target_name = preg_replace( '/<unique 
number(.*)>/', '{num\1}', $target_name, 1 );
-                               // if any formula stuff is still in the name
-                               // after the parsing, just remove it
-                               $target_name = StringUtils::delimiterReplace( 
'<', '>', '', $target_name );
+                       } else {
+                               $page_is_source = false;
+                               $page_contents = null;
+                       }
+                       list ( $form_text, $javascript_text, $data_text, 
$form_page_title, $generated_page_name ) =
+                               $sfgFormPrinter->formHTML( $form_definition, 
$form_submitted, $page_is_source, $form_article->getID(), $page_contents, 
$target_name, $page_name_formula );
+                       if ( $form_submitted ) {
+                               if ( $page_name_formula != '' ) {
+                                       $target_name = $generated_page_name;
+                                       // prepend a super-page, if one was 
specified
+                                       if ( $wgRequest->getCheck( 'super_page' 
) ) {
+                                               $target_name = 
$wgRequest->getVal( 'super_page' ) . '/' . $target_name;
+                                       }
+                                       // prepend a namespace, if one was 
specified
+                                       if ( $wgRequest->getCheck( 'namespace' 
) ) {
+                                               $target_name = 
$wgRequest->getVal( 'namespace' ) . ':' . $target_name;
+                                       }
+                                       // replace "unique number" tag with one
+                                       // that won't get erased by the next 
line
+                                       $target_name = preg_replace( '/<unique 
number(.*)>/', '{num\1}', $target_name, 1 );
+                                       // if any formula stuff is still in the
+                                       // name after the parsing, just remove 
it
+                                       $target_name = 
StringUtils::delimiterReplace( '<', '>', '', $target_name );
 
-                               // now run the parser on it
-                               global $wgParser;
-                               // ...but first, replace spaces back with
-                               // underlines, in case a magic word or parser
-                               // function name contains underlines -
-                               // hopefully this won't cause problems of
-                               // its own
-                               $target_name = str_replace( ' ', '_', 
$target_name );
-                               $target_name = $wgParser->recursiveTagParse( 
$target_name );
+                                       // now run the parser on it
+                                       global $wgParser;
+                                       // ...but first, replace spaces back
+                                       // with underlines, in case a magic word
+                                       // or parser function name contains
+                                       // underlines - hopefully this won't
+                                       // cause problems of its own
+                                       $target_name = str_replace( ' ', '_', 
$target_name );
+                                       $target_name = 
$wgParser->recursiveTagParse( $target_name );
 
-                               if ( strpos( $target_name, '{num' ) ) {
-                                       // get unique number start value from
-                                       // target name; if it's not there, or
-                                       // it's not a positive number,
-                                       // start it out as blank
-                                       preg_match( '/{num.*start=([^;]*).*}/', 
$target_name, $matches );
-                                       if ( count( $matches ) == 2 && 
is_numeric( $matches[1] ) && $matches[1] >= 0 ) {
-                                               $title_number = $matches[1];
+                                       if ( strpos( $target_name, '{num' ) ) {
+                                               // get unique number start value
+                                               // from target name; if it's not
+                                               // there, or it's not a positive
+                                               // number, start it out as blank
+                                               preg_match( 
'/{num.*start=([^;]*).*}/', $target_name, $matches );
+                                               if ( count( $matches ) == 2 && 
is_numeric( $matches[1] ) && $matches[1] >= 0 ) {
+                                                       $title_number = 
$matches[1];
+                                               } else {
+                                                       $title_number = "";
+                                               }
+                                               // cycle through numbers for
+                                               // this tag until we find one
+                                               // that gives a nonexistent page
+                                               // title
+                                               do {
+                                                       $target_title = 
Title::newFromText( preg_replace( '/{num.*}/', $title_number, $target_name ) );
+                                                       // if title number is 
blank,
+                                                       // change it to 2; 
otherwise,
+                                                       // increment it, and if 
necessary
+                                                       // pad it with leading 
0s as well
+                                                       if ( $title_number == 
"" ) {
+                                                               $title_number = 
2;
+                                                       } else {
+                                                               $title_number = 
str_pad( $title_number + 1, strlen( $title_number ), '0', STR_PAD_LEFT );
+                                                       }
+                                               } while ( 
$target_title->exists() );
                                        } else {
-                                               $title_number = "";
+                                               $target_title = 
Title::newFromText( $target_name );
                                        }
-                                       // cycle through numbers for this tag
-                                       // until we find one that gives a
-                                       // nonexistent page title
-                                       do {
-                                               $target_title = 
Title::newFromText( preg_replace( '/{num.*}/', $title_number, $target_name ) );
-                                               // if title number is blank,
-                                               // change it to 2; otherwise,
-                                               // increment it, and if 
necessary
-                                               // pad it with leading 0s as 
well
-                                               if ( $title_number == "" ) {
-                                                       $title_number = 2;
-                                               } else {
-                                                       $title_number = 
str_pad( $title_number + 1, strlen( $title_number ), '0', STR_PAD_LEFT );
-                                               }
-                                       } while ( $target_title->exists() );
-                               } else {
-                                       $target_title = Title::newFromText( 
$target_name );
                                }
-                       }
-                       if ( is_null( $target_title ) ) {
-                               die ( wfMsg( 'badtitle' ) . ": $target_name" );
-                       }
-                       $wgOut->setArticleBodyOnly( true );
-                       $text = SFUtils::printRedirectForm( $target_title, 
$data_text, $wgRequest->getVal( 'wpSummary' ), $save_page, $preview_page, 
$diff_page, $wgRequest->getCheck( 'wpMinoredit' ), $wgRequest->getCheck( 
'wpWatchthis' ), $wgRequest->getVal( 'wpStarttime' ), $wgRequest->getVal( 
'wpEdittime' ) );
-               } else {
-                       // override the default title for this page if
-                       // a title was specified in the form
-                       if ( $form_page_title != null ) {
-                               if ( $target_name == '' ) {
-                                       $wgOut->setPageTitle( $form_page_title 
);
-                               } else {
-                                       $wgOut->setPageTitle( 
"$form_page_title: {$target_title->getPrefixedText()}" );
+                               if ( is_null( $target_title ) ) {
+                                       die ( wfMsg( 'badtitle' ) . ": 
$target_name" );
                                }
-                       }
-                       $text = "";
-                       if ( count( $alt_forms ) > 0 ) {
-                               $text .= '<div class="infoMessage">' . wfMsg( 
'sf_formedit_altforms' ) . ' ';
-                               $text .= self::printAltFormsList( $alt_forms, 
$target_name );
-                               $text .= "</div>\n";
-                       }
-                       $text .= <<<END
+                               $wgOut->setArticleBodyOnly( true );
+                               $text = SFUtils::printRedirectForm( 
$target_title, $data_text, $wgRequest->getVal( 'wpSummary' ), $save_page, 
$preview_page, $diff_page, $wgRequest->getCheck( 'wpMinoredit' ), 
$wgRequest->getCheck( 'wpWatchthis' ), $wgRequest->getVal( 'wpStarttime' ), 
$wgRequest->getVal( 'wpEdittime' ) );
+                       } else {
+                               // override the default title for this page if
+                               // a title was specified in the form
+                               if ( $form_page_title != null ) {
+                                       if ( $target_name == '' ) {
+                                               $wgOut->setPageTitle( 
$form_page_title );
+                                       } else {
+                                               $wgOut->setPageTitle( 
"$form_page_title: {$target_title->getPrefixedText()}" );
+                                       }
+                               }
+                               $text = "";
+                               if ( count( $alt_forms ) > 0 ) {
+                                       $text .= '<div class="infoMessage">' . 
wfMsg( 'sf_formedit_altforms' ) . ' ';
+                                       $text .= self::printAltFormsList( 
$alt_forms, $target_name );
+                                       $text .= "</div>\n";
+                               }
+                               $text .= <<<END
                                <form name="createbox" onsubmit="return 
validate_all()" action="" method="post" class="createbox">
 
 END;
-                       $text .= $form_text;
+                               $pre_form_html = '';
+                               wfRunHooks( 'sfHTMLBeforeForm', array( 
&$page_title, &$pre_form_html ) );
+                               $text .= $pre_form_html;
+                               $text .= $form_text;
+                       }
                }
+               SFUtils::addJavascriptAndCSS();
+               // instead of adding the Javascript using addScript(), which is
+               // the standard approach, we add it using addHTML(), below the
+               // form text - that's so the Javascript created for fields with
+               // a 'show on select' parameter, if there are any, get placed
+               // below the form HTML, so that they can affect (i.e., hide) the
+               // relevant form fields. if there's a less hacky way to do this,
+               // the code should switch to that.
+               // if (! empty($javascript_text))
+               //      $wgOut->addScript('             <script 
type="text/javascript">' . "\n" . $javascript_text . '</script>' . "\n");
+               $wgOut->addHTML( $text );
+               if ( ! empty( $javascript_text ) ) {
+                       $wgOut->addHTML( '              <script 
type="text/javascript">' . "\n" . $javascript_text . '</script>' . "\n" );
+               }
        }
-       SFUtils::addJavascriptAndCSS();
-       // instead of adding the Javascript using addScript(), which is the
-       // standard approach, we add it using addHTML(), below the form text -
-       // that's so the Javascript created for fields with a 'show on select'
-       // parameter, if there are any, get placed below the form HTML, so
-       // that they can affect (i.e., hide) the relevant form fields.
-       // if there's a less hacky way to do this, the code should switch to
-       // that.
-       // if (! empty($javascript_text))
-       //      $wgOut->addScript('             <script 
type="text/javascript">' . "\n" . $javascript_text . '</script>' . "\n");
-       $wgOut->addHTML( $text );
-       if ( ! empty( $javascript_text ) )
-               $wgOut->addHTML( '              <script 
type="text/javascript">' . "\n" . $javascript_text . '</script>' . "\n" );
-}
 
 }



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to