From: Alexandre Emsenhuber Date: Sat, 20 Feb 2010 17:05:56 +0000 (+0000) Subject: (bug 8790) Metadata edition ($wgUseMetadataEdit) has been moved to a separate extensi... X-Git-Tag: 1.31.0-rc.0~37690 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/operations/recherche.php?a=commitdiff_plain;h=d4c2f2796bd9103f7281ec912be991eb513cb74f;p=lhc%2Fweb%2Fwiklou.git (bug 8790) Metadata edition ($wgUseMetadataEdit) has been moved to a separate extension "MetadataEdit": * Removed $wgUseMetadataEdit and related code in EditPage from and created a new extension "MetadataEdit" * Added 3 new hooks EditFormInitialText, EditFormGetDiffText and EditFormGetPreviewText * Moved 'metadata_help' message to the extension --- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 75603f05bd..64fe4ae59e 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -101,6 +101,8 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN for controlling debug output. * New $wgBlockDisablesLogin when set to true disallows blocked users from logging in. +* (bug 8790) Metadata edition ($wgUseMetadataEdit) has been moved to a separate + extension "MetadataEdit". === New features in 1.16 === diff --git a/docs/hooks.txt b/docs/hooks.txt index 2134993df1..e31d9095ab 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -638,6 +638,10 @@ new pages &$text: Text to preload with &$title: Title object representing the page being created +'EditFormInitialText': Allows modifying the edit form when editing existing +pages +$editPage: EditPage object + 'EditPage::attemptSave': called before an article is saved, that is before insertNewArticle() is called $editpage_Obj: the current EditPage object @@ -689,6 +693,15 @@ textarea in the edit form $title: title of page being edited &$msg: localization message name, overridable. Default is either 'copyrightwarning' or 'copyrightwarning2' +'EditPageGetDiffText': Allow modifying the wikitext that will be used in +"Show changes" +$editPage: EditPage object +&$newtext: wikitext that will be used as "your version" + +'EditPageGetPreviewText': Allow modifying the wikitext that will be previewed +$editPage: EditPage object +&$toparse: wikitext that will be parsed + 'EditPageNoSuchSection': When a section edit request is given for an non-existent section &$editpage: The current EditPage object &$res: the HTML of the error text diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 75f5a5617a..3bc4d336a6 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2486,16 +2486,6 @@ $wgRC2UDPOmitBots = false; */ $wgEnableNewpagesUserFilter = true; -/** - * Whether to use metadata edition - * This will put categories, language links and allowed templates in a separate text box - * while editing pages - * EXPERIMENTAL - */ -$wgUseMetadataEdit = false; -/** Full name (including namespace) of the page containing templates names that will be allowed as metadata */ -$wgMetadataWhitelist = ''; - # # Copyright and credits settings # diff --git a/includes/EditPage.php b/includes/EditPage.php index 02b06ec03b..e92b43bd6e 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -45,7 +45,6 @@ class EditPage { var $mArticle; var $mTitle; var $action; - var $mMetaData = ''; var $isConflict = false; var $isCssJsSubpage = false; var $isCssSubpage = false; @@ -247,95 +246,6 @@ class EditPage { } } - /** - * This is the function that extracts metadata from the article body on the first view. - * To turn the feature on, set $wgUseMetadataEdit = true ; in LocalSettings - * and set $wgMetadataWhitelist to the *full* title of the template whitelist - */ - function extractMetaDataFromArticle () { - global $wgUseMetadataEdit, $wgMetadataWhitelist, $wgContLang; - $this->mMetaData = ''; - if ( !$wgUseMetadataEdit ) return; - if ( $wgMetadataWhitelist == '' ) return; - $s = ''; - $t = $this->getContent(); - - # MISSING : filtering - - # Categories and language links - $t = explode( "\n" , $t ); - $catlow = strtolower( $wgContLang->getNsText( NS_CATEGORY ) ); - $cat = $ll = array(); - foreach ( $t as $key => $x ) { - $y = trim( strtolower ( $x ) ); - while ( substr( $y , 0 , 2 ) == '[[' ) { - $y = explode( ']]' , trim ( $x ) ); - $first = array_shift( $y ); - $first = explode( ':' , $first ); - $ns = array_shift( $first ); - $ns = trim( str_replace( '[' , '' , $ns ) ); - if ( $wgContLang->getLanguageName( $ns ) || strtolower( $ns ) == $catlow ) { - $add = '[[' . $ns . ':' . implode( ':' , $first ) . ']]'; - if ( strtolower( $ns ) == $catlow ) $cat[] = $add; - else $ll[] = $add; - $x = implode( ']]', $y ); - $t[$key] = $x; - $y = trim( strtolower( $x ) ); - } else { - $x = implode( ']]' , $y ); - $y = trim( strtolower( $x ) ); - } - } - } - if ( count( $cat ) ) $s .= implode( ' ' , $cat ) . "\n"; - if ( count( $ll ) ) $s .= implode( ' ' , $ll ) . "\n"; - $t = implode( "\n" , $t ); - - # Load whitelist - $sat = array () ; # stand-alone-templates; must be lowercase - $wl_title = Title::newFromText( $wgMetadataWhitelist ); - $wl_article = new Article ( $wl_title ); - $wl = explode ( "\n" , $wl_article->getContent() ); - foreach ( $wl AS $x ) { - $isentry = false; - $x = trim ( $x ); - while ( substr ( $x , 0 , 1 ) == '*' ) { - $isentry = true; - $x = trim ( substr ( $x , 1 ) ); - } - if ( $isentry ) { - $sat[] = strtolower ( $x ); - } - - } - - # Templates, but only some - $t = explode( '{{' , $t ); - $tl = array() ; - foreach ( $t as $key => $x ) { - $y = explode( '}}' , $x , 2 ); - if ( count( $y ) == 2 ) { - $z = $y[0]; - $z = explode( '|' , $z ); - $tn = array_shift( $z ); - if ( in_array( strtolower( $tn ) , $sat ) ) { - $tl[] = '{{' . $y[0] . '}}'; - $t[$key] = $y[1]; - $y = explode( '}}' , $y[1] , 2 ); - } - else $t[$key] = '{{' . $x; - } - else if ( $key != 0 ) $t[$key] = '{{' . $x; - else $t[$key] = $x; - } - if ( count( $tl ) ) $s .= implode( ' ' , $tl ); - $t = implode( '' , $t ); - - $t = str_replace( "\n\n\n", "\n", $t ); - $this->mArticle->mContent = $t; - $this->mMetaData = $s; - } - /* * Check if a page was deleted while the user was editing it, before submit. * Note that we rely on the logging table, which hasn't been always there, @@ -427,7 +337,6 @@ class EditPage { if ( $this->previewOnOpen() ) { $this->formtype = 'preview'; } else { - $this->extractMetaDataFromArticle () ; $this->formtype = 'initial'; } } @@ -495,6 +404,8 @@ class EditPage { } if ( !$this->mTitle->getArticleId() ) wfRunHooks( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) ); + else + wfRunHooks( 'EditFormInitialText', array( $this ) ); } $this->showEditForm(); @@ -620,7 +531,7 @@ class EditPage { $this->textbox1 = $textbox1; wfProfileOut( get_class($this)."::importContentFormData" ); } - $this->mMetaData = rtrim( $request->getText( 'metadata' ) ); + # Truncate for whole multibyte characters. +5 bytes for ellipsis $this->summary = $wgLang->truncate( $request->getText( 'wpSummary' ), 250, '' ); @@ -690,7 +601,6 @@ class EditPage { # Not a posted form? Start with nothing. wfDebug( __METHOD__ . ": Not a posted form.\n" ); $this->textbox1 = ''; - $this->mMetaData = ''; $this->summary = ''; $this->edittime = ''; $this->starttime = wfTimestampNow(); @@ -852,8 +762,7 @@ class EditPage { wfProfileIn( __METHOD__ ); wfProfileIn( __METHOD__ . '-checks' ); - if ( !wfRunHooks( 'EditPage::attemptSave', array( $this ) ) ) - { + if ( !wfRunHooks( 'EditPage::attemptSave', array( $this ) ) ) { wfDebug( "Hook 'EditPage::attemptSave' aborted article saving\n" ); return self::AS_HOOK_ERROR; } @@ -869,10 +778,6 @@ class EditPage { } } - # Reintegrate metadata - if ( $this->mMetaData != '' ) $this->textbox1 .= "\n" . $this->mMetaData ; - $this->mMetaData = '' ; - # Check for spam $match = self::matchSummarySpamRegex( $this->summary ); if ( $match === false ) { @@ -1392,10 +1297,6 @@ HTML if ( isset($this->editFormTextAfterWarn) && $this->editFormTextAfterWarn !== '' ) $wgOut->addHTML( $this->editFormTextAfterWarn ); - global $wgUseMetadataEdit; - if ( $wgUseMetadataEdit ) - $this->showMetaData(); - $this->showStandardInputs(); $this->showFormAfterText(); @@ -1749,15 +1650,6 @@ INPUTS $wgOut->addHTML( Html::textarea( $name, $wikitext, $attribs ) ); } - - protected function showMetaData() { - global $wgOut, $wgContLang, $wgUser; - $metadata = htmlspecialchars( $wgContLang->recodeForEdit( $this->mMetaData ) ); - $ew = $wgUser->getOption( 'editwidth' ) ? ' style="width:100%"' : ''; - $cols = $wgUser->getIntOption( 'cols' ); - $metadata = wfMsgWikiHtml( 'metadata_help' ) . "" ; - $wgOut->addHTML( $metadata ); - } protected function displayPreviewArea( $previewOutput, $isOnTop = false ) { global $wgOut; @@ -1969,10 +1861,10 @@ INPUTS # If we're adding a comment, we need to show the # summary as the headline if ( $this->section == "new" && $this->summary != "" ) { - $toparse="== {$this->summary} ==\n\n" . $toparse; + $toparse = "== {$this->summary} ==\n\n" . $toparse; } - if ( $this->mMetaData != "" ) $toparse .= "\n" . $this->mMetaData; + wfRunHooks( 'EditPageGetPreviewText', array( $this, &$toparse ) ); // Parse mediawiki messages with correct target language if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { @@ -2496,6 +2388,9 @@ INPUTS $oldtext = $this->mArticle->fetchContent(); $newtext = $this->mArticle->replaceSection( $this->section, $this->textbox1, $this->summary, $this->edittime ); + + wfRunHooks( 'EditPageGetDiffText', array( $this, &$newtext ) ); + $newtext = $this->mArticle->preSaveTransform( $newtext ); $oldtitle = wfMsgExt( 'currentrev', array( 'parseinline' ) ); $newtitle = wfMsgExt( 'yourtext', array( 'parseinline' ) ); diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index a8a9c9895f..93fcaae42c 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -800,9 +800,6 @@ XHTML id names. 'namespaces' => 'Namespaces', 'variants' => 'Variants', -# Metadata in edit box -'metadata_help' => 'Metadata:', - 'errorpagetitle' => 'Error', 'returnto' => 'Return to $1.', 'tagline' => 'From {{SITENAME}}', diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 0333c426a6..098fbe42dd 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -201,9 +201,6 @@ $wgMessageStructure = array( 'namespaces', 'variants', ), - 'metadata_help' => array( - 'metadata_help', - ), 'miscellaneous2' => array( 'errorpagetitle', 'returnto', @@ -3156,7 +3153,6 @@ XHTML id names.", 'miscellaneous1' => '', 'cologneblue' => 'Cologne Blue skin', 'vector' => 'Vector skin', - 'metadata_help' => 'Metadata in edit box', 'miscellaneous2' => '', 'links' => 'All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).', 'badaccess' => '',